File: n_usernames.sru
Size: 3507
Date: Fri, 22 Feb 2019 22:19:22 +0100
$PBExportHeader$n_usernames.sru
forward
global type n_usernames from n_cst_indirect
end type
end forward

global type n_usernames from n_cst_indirect
end type

type prototypes
Function long WNetGetUser ( &
   string lpname, &
   Ref string lpusername, &
   Ref long buflen &
   ) Library "mpr.dll" Alias For "WNetGetUserW"

end prototypes

type variables
Private:

String is_username
String is_username_hist[]

Public:

Indirect String Username {of_SetUsername(*value),of_GetUsername()}

Indirect String NetUsername {of_SetReadOnly(*value),of_WNetGetUser()}

Indirect String History[] { &
        of_SetArray(*name, *value), &
        of_SetItem(*name, *args, *value), &
        of_GetArray(*name), &
        of_GetItem(*name, *args), &
        of_UpperBound(), &
        of_LowerBound()}

end variables
forward prototypes
private function string of_getusername ()
private subroutine of_setusername (string as_username)
private function string of_wnetgetuser ()
public function long of_lowerbound ()
public function long of_upperbound ()
protected function any of_getarray (string as_name)
protected subroutine of_setarray (string as_name, string as_values[])
protected subroutine of_setitem (string as_name, long al_dimensions[], string as_value)
protected function string of_getitem (string as_name, long al_dimensions[])
end prototypes

private function string of_getusername ();// get private username instance var

If is_username = "" Then
   Return "[empty]"
Else
   Return is_username
End If

end function

private subroutine of_setusername (string as_username);// set private username instance var

Long ll_next

If IsNull(as_Username) Then
   SignalError(999, "Null value not allowed!")
Else
   // save value to instance variable
   is_Username = as_Username
   // save value to history array
   ll_next = UpperBound(is_username_hist) + 1
   is_username_hist[ll_next] = as_Username
End If

end subroutine

private function string of_wnetgetuser ();// This function retrieves the userid used to establish the current network connection.

String ls_userid, ls_errmsg
Long ll_result, ll_buflen

ll_buflen = 32
ls_userid = Space(ll_buflen)

ll_result = WNetGetUser("", ls_userid, ll_buflen)
If ll_result <> 0 Then
   SignalError(ll_result, "Network Error in of_WNetGetUser")
End If

Return ls_userid

end function

public function long of_lowerbound ();Return LowerBound(is_username_hist)

end function

public function long of_upperbound ();Return UpperBound(is_username_hist)

end function

protected function any of_getarray (string as_name);String ls_empty[]

choose case Lower(as_name)
   case "history"
      Return is_username_hist
end choose

Return ls_empty

end function

protected subroutine of_setarray (string as_name, string as_values[]);choose case Lower(as_name)
   case "history"
      is_username_hist = as_values
end choose

end subroutine

protected subroutine of_setitem (string as_name, long al_dimensions[], string as_value);choose case Lower(as_name)
   case "history"
      is_username_hist[al_dimensions[1]] = as_value
end choose

end subroutine

protected function string of_getitem (string as_name, long al_dimensions[]);String ls_value

choose case Lower(as_name)
   case "history"
      ls_value = is_username_hist[al_dimensions[1]]
end choose

Return ls_value

end function

on n_usernames.create
call super::create
end on

on n_usernames.destroy
call super::destroy
end on