source: trunk/guitools/evfsgui/evfsgui.vrx @ 924

Last change on this file since 924 was 924, checked in by Herwig Bauernfeind, 5 years ago

GUITools: EVFSGUI: Start implementinig client side Samba configuration settings

File size: 211.8 KB
Line 
1/*:VRX         Main
2*/
3/*  Main
4*/
5Main:
6/*
7    Samba Connections GUI for OS/2 based systems
8    Copyright (C) 2007-2016 by Alexander Taylor and Herwig Bauernfeind
9    Derived works must contain this copyright notice.
10
11    This program is free software: you can redistribute it and/or modify
12    it under the terms of the GNU General Public License as published by
13    the Free Software Foundation, either version 3 of the License, or
14    (at your option) any later version.
15
16    This program is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19    GNU General Public License for more details.
20
21    You should have received a copy of the GNU General Public License
22    along with this program.  If not, see <http://www.gnu.org/licenses/>.
23*/
24/*  Process the arguments.
25    Get the parent window.
26*/
27    parse source . calledAs .
28    parent = ""
29    argCount = arg()
30    argOff = 0
31    if( calledAs \= "COMMAND" )then do
32        if argCount >= 1 then do
33            parent = arg(1)
34            argCount = argCount - 1
35            argOff = 1
36        end
37    end; else do
38        call VROptions 'ImplicitNames'
39        call VROptions 'NoEchoQuit'
40    end
41    InitArgs.0 = argCount
42    if( argCount > 0 )then do i = 1 to argCount
43        InitArgs.i = arg( i + argOff )
44    end
45    drop calledAs argCount argOff
46
47/*  Load the windows
48*/
49    call VRInit
50    parse source . . spec
51    _VREPrimaryWindowPath = ,
52        VRParseFileName( spec, "dpn" ) || ".VRW"
53    _VREPrimaryWindow = ,
54        VRLoad( parent, _VREPrimaryWindowPath )
55    drop parent spec
56    if( _VREPrimaryWindow == "" )then do
57        call VRMessage "", "Cannot load window:" VRError(), ,
58            "Error!"
59        _VREReturnValue = 32000
60        signal _VRELeaveMain
61    end
62
63/*  Process events
64*/
65    call Init
66    signal on halt
67    do while( \ VRGet( _VREPrimaryWindow, "Shutdown" ) )
68        _VREEvent = VREvent()
69        interpret _VREEvent
70    end
71_VREHalt:
72    _VREReturnValue = Fini()
73    call VRDestroy _VREPrimaryWindow
74_VRELeaveMain:
75    call VRFini
76exit _VREReturnValue
77
78VRLoadSecondary:
79    __vrlsWait = abbrev( 'WAIT', translate(arg(2)), 1 )
80    if __vrlsWait then do
81        call VRFlush
82    end
83    __vrlsHWnd = VRLoad( VRWindow(), VRWindowPath(), arg(1) )
84    if __vrlsHWnd = '' then signal __vrlsDone
85    if __vrlsWait \= 1 then signal __vrlsDone
86    call VRSet __vrlsHWnd, 'WindowMode', 'Modal'
87    __vrlsTmp = __vrlsWindows.0
88    if( DataType(__vrlsTmp) \= 'NUM' ) then do
89        __vrlsTmp = 1
90    end
91    else do
92        __vrlsTmp = __vrlsTmp + 1
93    end
94    __vrlsWindows.__vrlsTmp = VRWindow( __vrlsHWnd )
95    __vrlsWindows.0 = __vrlsTmp
96    do while( VRIsValidObject( VRWindow() ) = 1 )
97        __vrlsEvent = VREvent()
98        interpret __vrlsEvent
99    end
100    __vrlsTmp = __vrlsWindows.0
101    __vrlsWindows.0 = __vrlsTmp - 1
102    call VRWindow __vrlsWindows.__vrlsTmp
103    __vrlsHWnd = ''
104__vrlsDone:
105return __vrlsHWnd
106
107/*:VRX         __VXREXX____APPENDS__
108*/
109__VXREXX____APPENDS__:
110/*
111#append ..\shared\cltinit.vrs
112#append ..\shared\inittempdir.vrs
113#append ..\shared\nlv.vrs
114#append ..\shared\rexx_md5.vrs
115#append ..\shared\smbtree.vrs
116#append ..\shared\textini.vrs
117#append ..\shared\usercredmem.vrs
118#append ..\shared\rxrpclib.vrs
119*/
120return
121/*:VRX         _AboutSambaClientGetInfo
122*/
123_AboutSambaClientGetInfo:
124    call VRSet "SW_ABOUT", "Painting", 0
125    BR = ''
126
127    ok = VRMethod( "CN_About", "RemoveRecord", "All" )
128
129    /* OS Version */
130    if VRFileExists(SysBootDrive()||"\SYS\ARCANOAE.FLG" ) then do
131        OS = linein(SysBootDrive()||"\SYS\ARCANOAE.FLG")
132        OS = subword(OS,1,2) '('translate(word(OS,3))')'
133        ok = stream(SysBootDrive()||"\SYS\ARCANOAE.FLG",'c','close')
134    end
135    else if VRFileExists(SysBootDrive()||"\ECS\ECS_INST.FLG" ) then do
136        OS = linein(SysBootDrive()||"\ECS\ECS_INST.FLG")
137        OS = subword(OS,1,3)
138        ok = stream(SysBootDrive()||"\ECS\ECS_INST.FLG",'c','close')
139    end
140    else OS = "OS/2 Warp/eComStation 1.x"
141
142    DummyRH = VRMethod('CN_About', 'AddRecord')
143    ok = VRMethod("CN_ABOUT", "SetFieldData", DummyRH, About.DscFH, "Operating system", About.ValFH, OS)
144
145    /* Filesystem version */
146    DummyRH = VRMethod('CN_About', 'AddRecord')
147    ok = VRMethod("CN_ABOUT", "SetFieldData", DummyRH, About.DscFH, "File system", About.ValFH, fs.!name' Version 'fs.!version)
148    ABoutStr = "Samba Client Versions:"||BR
149    AboutStr = AboutStr||'0D0A'x||"File system "||'09'x||fs.!name' Version 'fs.!version||BR
150    plugindll. =""
151
152    /* Plugin */
153    address cmd 'look4dll.exe ndpsmb.dll >'samba.!msg
154    if RC <> 0 then do
155        /* Look4DLL not installed or failed, try fallback search */
156        if rc == 1041 then do   /* look4dll not found, use REXX-based search */
157            pluginpath = _DLLSearch('ndpsmb.dll')
158            if pluginpath <> '' then do
159                plugindll.0 = 1
160                plugindll.1 = pluginpath
161            end
162        end
163        else plugindll.0 = 0
164        /* DLL is not in libpath; as a last resort, check some well-known places */
165        if plugindll.0 < 1 then do
166            NDFSDir = value("NDFSDIR",,"OS2ENVIRONMENT")
167            if NDFSDir = "" then do
168                OSDir = value("OSDIR",,"OS2ENVIRONMENT")
169                if OSDir == '' then OSDir = SysBootDrive()'\os2'
170                NDFSDir = OSDir'\dll'
171            end
172            ok = SysFileTree(NDFSDir'\ndpsmb.dll', "plugindll.", 'FOS')
173        end
174    end
175    else do
176        pluginline = linein(samba.!msg)
177        ok = stream(samba.!msg,'c','close')
178        ok = SysFileDelete(samba.!msg)
179        parse var pluginline . 'loaded ' pluginline
180        NDFSDir = VRParseFileName(pluginline,"DP")
181        plugindll.0 = 1
182        plugindll.1 = pluginline
183    end
184
185    if plugindll.0 > 0 then do
186      do J = 1 to plugindll.0
187        DummyRH.1 = VRMethod('CN_About', 'AddRecord')
188        ok = VRMethod("CN_ABOUT", "SetFieldData", DummyRH.1, About.DscFH, "Plugin file", About.ValFH, plugindll.J)
189        AboutStr = AboutStr||'0D0A'x||"Plugin file "||'09'x||plugindll.J||BR
190
191        address cmd 'bldlevel.exe 'plugindll.J' >'samba.!msg
192
193        I = 0
194        Dummy = linein(samba.!msg)
195        say Dummy
196        Dummy = linein(samba.!msg)
197        say Dummy
198        Dummy = linein(samba.!msg)
199        say Dummy
200        do until lines(samba.!msg) = 0
201            I = I + 1
202            line.I = linein(samba.!msg)
203            if pos('has no LAN component-style version string', line.I) > 0 then do
204                DummyRH = VRMethod('CN_About', 'AddRecord')
205                ok = VRMethod("CN_ABOUT", "SetFieldData", DummyRH, About.DscFH, "Error", About.ValFH, "Plugin has no LAN component-style version string")
206                leave
207            end
208            else do
209                parse var line.I desc':'vers
210                DummyRH = VRMethod('CN_About', 'AddRecord')
211                ok = VRMethod("CN_ABOUT", "SetFieldData", DummyRH, About.DscFH, "Plugin "Desc, About.ValFH, strip(Vers))
212                AboutStr = AboutStr||'0D0A'x||"Plugin "Desc '09'x||strip(Vers)||BR
213            end
214        end
215        line.0 = I
216        ok = stream(samba.!msg,'c','close')
217        ok = SysFileDelete(samba.!msg)
218      end
219    end
220    else do
221        DummyRH = VRMethod('CN_About', 'AddRecord')
222        ok = VRMethod("CN_ABOUT", "SetFieldData", DummyRH, About.DscFH, "Plugin", About.ValFH, "Not found!")
223        AboutStr = AboutStr||'0D0A'x||"Plugin not found!"||BR
224    end
225
226    /* Commandline utilities */
227    address cmd samba.!smbclientexe' -V >'samba.!msg
228    ClutVer = linein(samba.!msg)
229    ok = stream(samba.!msg,'c','close')
230    ok = SysFileDelete(samba.!msg)
231
232    DummyRH = VRMethod('CN_About', 'AddRecord')
233    ok = VRMethod("CN_ABOUT", "SetFieldData", DummyRH, About.DscFH, "Commandline utility path", About.ValFH, VRParseFileName(samba.!smbclientexe,"DP"))
234
235    DummyRH = VRMethod('CN_About', 'AddRecord')
236    ok = VRMethod("CN_ABOUT", "SetFieldData", DummyRH, About.DscFH, "Commandline utilities", About.ValFH, ClutVer)
237    AboutStr = AboutStr||'0D0A'x||"Commandline utilities "||'09'x||ClutVer||BR
238
239    /* GUI Version */
240    DummyRH = VRMethod('CN_About', 'AddRecord')
241    ok = VRMethod("CN_ABOUT", "SetFieldData", DummyRH, About.DscFH, "EVFSGUI", About.ValFH, VRGet("Main", "HintText"))
242    AboutStr = AboutStr||'0D0A'x||"EVFSGUI "||'09'x || VRGet("Main", "HintText")||BR
243    call VRSet "SW_ABOUT", "Painting", 1
244return
245
246/*:VRX         _AddTemplates
247*/
248_AddTemplates:
249    VolTplRH = VRMethod("CN_CURRENT", 'AddRecord', , 'First', 'Volume template', icons.!template )
250    MpTplRH  = VRMethod("CN_CURRENT", 'AddRecord',  VolTplRH, 'First', 'Mountpoint template', icons.!template )
251return
252
253/*:VRX         _BrowseBuildPath
254*/
255_BrowseBuildPath: procedure expose options. icons. samba. sharerh
256    if options.!debug == 1 then say time()' _BrowseBuildPath started'
257    rh = arg(1)
258
259    finished = 0
260    BrowsePathStr = ''
261
262    do while \finished
263        parentrh = VRMethod("CN_SMBTREE","GetRecordAttr",rh,"Parent")
264        resname  = VRMethod("CN_SMBTREE","GetRecordAttr",rh,"caption")
265        userdata = VRMethod("CN_SMBTREE","GetRecordAttr",rh,"userdata")
266        parse var userdata udatatype '|' udatamsg
267        parse var resname resname '0D0A'x .
268        resname = strip(resname)
269        /* say "  Not connected - cannot open!" */
270        select
271            when udatatype = "SERVER" then do
272                BrowsePathStr = '\\'resname'\'BrowsePathStr
273                finished = 1
274            end
275            when udatatype = "DISK" then do
276                BrowsePathStr = resname'\'BrowsePathStr
277                sharerh =rh
278                rh = parentrh
279            end
280            otherwise do
281                BrowsePathStr = resname'\'BrowsePathStr
282                rh = parentrh
283            end
284        end
285        /* say '  BrowsePathStr = "'BrowsePathStr'"' */
286    end
287    BrowsePathStr = strip(BrowsePathStr,'T','\')
288    if options.!debug == 1 then say time()' _BrowseBuildPath done, returning "'BrowsePathStr'"'
289return BrowsePathStr
290
291/*:VRX         _BrowseDirectory
292*/
293_BrowseDirectory: /* This must not be a procedure */
294    if options.!debug == 1 then say time()' _BrowseDirectory started'
295
296    /* Turn off painting */
297    ok = VRSet("CN_SMBTREE","Painting", 0 )
298    call VRSet VRWindow(), 'Pointer', 'Wait'
299
300    /* Make sure credentials are usable */
301    if UserCred   = 'USERCRED'   | UserCred = '' | UserCred = '--user=%' then UserCred = '-N'
302
303    /* We have to remove the double % for smbclient.exe - not entirely clear why */
304    OldUserCred = ""
305    if pos('%%',UserCred) > 0 & pos("4OS2", value("COMSPEC",,"OS2ENVIRONMENT")) = 0  then do
306        OldUserCred = UserCred
307        parse var UserCred '--user='username'%%'password
308        UserCred = '--user='username'%'password
309        say "  Strip double %%!!!"
310    end
311
312    say '  'samba.!smbclientexe' \\'machine'\'sharename' 'UserCred' --command="dir 'browsepath'"'
313    address cmd samba.!smbclientexe' \\'machine'\'sharename' 'UserCred' --command="dir 'browsepath'" 'debuglevel' 2>NUL 1>'samba.!msg
314
315    if UserCred   = '-N' then UserCred = ''
316
317    if OldUserCred <> "" then do
318        UserCred = OldUserCred
319        OldUserCred = ""
320        say "  Restore double %%!!!"
321    end
322
323    I = 0
324    ok = VRSet("DT_STATUSBAR","Caption", "")
325    do until lines(samba.!msg) = 0
326        infoline = linein(samba.!msg)
327        select
328            when pos('blocks',infoline) > 0 then do /* Last line */
329                /* we should handle size information here */
330                iterate
331            end
332            when I = 0 & length(infoline) > 0 & left(infoline,2) <> "  " then do /* Login message */
333                say '  Login message "'Infoline'"'
334                ok = VRMethod("CN_SMBTREE", "SetRecordAttr", SMBObj.rh, "Userdata", SMBObj.udatatype'|'infoline )
335                ok = VRSet("DT_STATUSBAR","Caption", infoline)
336            end
337            when left(infoline,2) = "  " & length(infoline) > 0 then do /* file or DIR */
338                wn       = words(infoline)
339                fyear    = word(infoline,wn)
340                ftime    = word(infoline,wn-1)
341                fday     = word(infoline,wn-2)
342                fmonth   = word(infoline,wn-3)
343                fwday    = word(infoline,wn-4)
344                pos_attr = pos(fwday,infoline)-16
345                fsize    = word(infoline,wn-5)
346                fattr    = substr(infoline,pos_attr,6)
347                fname    = strip( substr(infoline,3,pos_attr-3))
348                if fname = '.' | fname = '..' then iterate /* we do not display these */
349                if pos('H',fattr) > 0  then iterate /* we do not display hidden files */
350                if pos('S',fattr) > 0  then iterate /* we do not display system files */
351                I = I + 1
352                fh.I = VRMethod( "CN_SMBTREE", "AddRecord", SMBObj.rh, , fname)
353                if pos('D',fattr) = 0 then do
354                    Ext = translate(VRParseFIleName(fname,'E'))
355                    select
356                        when Ext = 'EXE' then ficon = icons.!exe /* executable */
357                        when Ext = 'CMD' then ficon = icons.!cmd /* OS/2 or NT batch */
358                        when Ext = 'BAT' then ficon = icons.!bat /* DOS batch */
359                        when Ext = 'PDF' then ficon = icons.!pdf /* PDF document */
360                        when wordpos(Ext, 'XLS SXC ODS') > 0         then ficon = icons.!spreadsheet
361                        when wordpos(Ext, 'DOC SXW ODT') > 0         then ficon = icons.!textdocument
362                        when wordpos(Ext, 'FW2 FW3 FW4') > 0         then ficon = icons.!framework
363                        when wordpos(Ext, 'JPG BMP PNG GIF TIF') > 0 then ficon = icons.!image
364                        when wordpos(Ext, 'AVI MPG FLV WMV') > 0     then ficon = icons.!movie
365                        when wordpos(Ext, 'WAV MP3 OGG MID') > 0     then ficon = icons.!sound
366                        when wordpos(Ext, 'WPI') > 0                 then ficon = icons.!warpin
367                        when wordpos(Ext, 'ZIP') > 0                 then ficon = icons.!zip
368                        when wordpos(Ext, 'INF HLP') > 0             then ficon = icons.!view
369                        when wordpos(Ext, 'TXT') > 0                 then ficon = icons.!plaintext
370                        otherwise ficon = icons.!defaultfile /* default file icon */
371                    end
372                    ftype = 'FILE'
373                end
374                else do
375                    ficon = icons.!folder
376                    ftype = 'DIRECTORY'
377                end
378
379                ok = VRmethod("CN_SMBTREE", "SetRecordAttr", fh.I, "userdata", ftype'|'fsize' Bytes 'fday'-'fmonth'-'fyear' 'ftime,'icon',Ficon)
380
381            end
382            otherwise nop /* no other line type */
383        end
384    end
385    if I > 0 then ok = VRMethod("CN_SMBTREE","SetRecordAttr",SMBObj.rh, "Icon", icons.!folder_open)
386    ok = stream(samba.!msg,'c','close')
387    ok = SysFileDelete(samba.!msg)
388
389    ok = VRMethod( "CN_SMBTREE", "SetRecordAttr", SMBObj.rh,"Collapsed", 0)
390    /* Turn on painting */
391    call VRSet VRWindow(), 'Pointer', '<default>'
392    ok = VRSet("CN_SMBTREE","Painting", 1 )
393    if options.!debug == 1 then say time()' _BrowseDirectory done'
394return
395
396/*:VRX         _BrowseObjectOpen
397*/
398_BrowseObjectOpen: procedure expose samba. options. cd. icons.
399    machine    = arg(1)
400    sharename  = arg(2)
401    browsepath = arg(3)
402
403    CALL VRMethod "CN_CONDET", 'GetRecordList', 'All', 'records.'
404
405    OpenOk = 0
406
407    DO i = 1 TO records.0
408        if VRMethod( "CN_CONDET", "GetFieldData", records.i, CD.StatusFH) = icons.!active then do
409            if options.!debug == 1 then say '  'VRMethod( "CN_CONDET", "GetFieldData", records.i, CD.StatusFH)' 'VRMethod( "CN_CONDET", "GetFieldData", records.i, CD.MPointFH)' 'VRMethod( "CN_CONDET", "GetFieldData", records.i, CD.ServerFH)' 'VRMethod( "CN_CONDET", "GetFieldData", records.i, CD.ShareFH)
410            if machine = VRMethod( "CN_CONDET", "GetFieldData", records.i, CD.ServerFH) &,
411               sharename = VRMethod( "CN_CONDET", "GetFieldData", records.i, CD.ShareFH) then do
412                Object = strip(VRMethod( "CN_CONDET", "GetFieldData", records.i, CD.MPointFH),'T','\')'\'browsepath
413                if options.!debug == 1 then say '  Non UNC object: "'Object'"'
414                ID = VRMethod( "Application", "StartThread", "wps_open", Object, "DEFAULT" )
415                OpenOK = 1
416            end
417        end
418        if OpenOK = 1 then leave
419    end
420return OpenOK
421
422/*:VRX         _BrowseResetObject
423*/
424_BrowseResetObject: procedure
425    ok = VRSet("CN_SMBTREE","Painting", 0 )
426    rh = arg(1)
427
428    /* Remove all files and directories whose parent is our share */
429    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "All", "AllRH." )
430    do I = 1 to AllRH.0
431        AllParentRH  = VRMethod("CN_SMBTREE","GetRecordAttr",AllRH.I,"Parent")
432        if AllParentRH = rh then ok = VRMethod( "CN_SMBTREE", "RemoveRecord", AllRH.I )
433    end
434    ok = VRSet("CN_SMBTREE","Painting", 1 )
435return
436
437/*:VRX         _ContainersInit
438*/
439_ContainersInit:
440    if options.!debug == 1 then say time()' _ContainersInit started'
441    /* Connection details */
442    CD.StatusFH    = VRMethod( "CN_CONDET", "AddField", "Icon", "Status" )
443    CD.mpointFH    = VRMethod( "CN_CONDET", "AddField", "String", "mpoint" )
444    CD.mpidxFH     = VRMethod( "CN_CONDET", "AddField", "String", "index" )
445    CD.workgrpFH   = VRMethod( "CN_CONDET", "AddField", "String", "workgroup" )
446    CD.serverFH    = VRMethod( "CN_CONDET", "AddField", "String", "server" )
447    CD.shareFH     = VRMethod( "CN_CONDET", "AddField", "String", "share" )
448    CD.userFH      = VRMethod( "CN_CONDET", "AddField", "String", "user" )
449    CD.passwordFH  = VRMethod( "CN_CONDET", "AddField", "String", "password" )
450    CD.spasswordFH = VRMethod( "CN_CONDET", "AddField", "String", "spassword" )
451    CD.masterFH    = VRMethod( "CN_CONDET", "AddField", "String", "master" )
452    CD.mtypeFH     = VRMethod( "CN_CONDET", "AddField", "String", "mastertype" )
453    CD.memlenFH    = VRMethod( "CN_CONDET", "AddField", "String", "memlen" )
454    CD.easupportFH = VRMethod( "CN_CONDET", "AddField", "String", "easupport" )
455    CD.logfileFH   = VRMethod( "CN_CONDET", "AddField", "String", "logfile" )
456    CD.loglevelFH  = VRMethod( "CN_CONDET", "AddField", "String", "loglevel" )
457    CD.rwFH        = VRMethod( "CN_CONDET", "AddField", "String", "readonly" )
458    CD.ctoFH       = VRMethod( "CN_CONDET", "AddField", "String", "cachetimeout" )
459    CD.cldFH       = VRMethod( "CN_CONDET", "AddField", "String", "cachelistings" )
460    CD.hashFH      = VRMethod( "CN_CONDET", "AddField", "String", "hash" )
461
462    /* Connection details */
463    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.mpidxfh ,       "Visible", options.!debug)
464    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.passwordfh ,    "Visible", options.!debug)
465    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.spasswordfh ,   "Visible", options.!debug)
466    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.masterFH ,      "Visible", options.!debug)
467    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.mtypeFH ,       "Visible", options.!debug)
468    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.memlenfh ,      "Visible", options.!debug)
469    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.logfilefh ,     "Visible", options.!debug)
470    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.loglevelfh ,    "Visible", options.!debug)
471    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.hashfh ,        "Visible", options.!debug)
472
473    ok = VRSet("CN_CONDET", "DetailSort", cd.mpointfh )
474
475    /* NLV columns */
476    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.statusfh ,      "Title", strip(NLVGetMessage(67),"T",":"))
477    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.mpointfh ,      "Title", strip(NLVGetMessage(27),"T",":"))
478    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.workgrpFH   ,   "Title", strip(NLVGetMessage(21),"T",":"))
479    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.serverFH ,      "Title", strip(NLVGetMessage(19),"T",":"))
480    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.shareFH ,       "Title", strip(NLVGetMessage(20),"T",":"))
481    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.userFH ,        "Title", strip(NLVGetMessage(25),"T",":"))
482    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.ctoFH ,         "Title", strip(NLVGetMessage(130),"T",":"))
483    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.cldFH ,         "Title", strip(NLVGetMessage(131),"T",":"))
484    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.easupportFH ,   "Title", strip(NLVGetMessage(68),"T",":"))
485    ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.rwfh ,          "Title", strip(NLVGetMessage(69),"T",":"))
486
487    /* SMBTree columns */
488    WorkgroupFH= VRMethod( "CN_smbtree", "AddField", "String", "Workgroup"  )
489    NBFH       = VRMethod( "CN_smbtree", "AddField", "String", "NetBIOS name" )
490    IpFH       = VRMethod( "CN_smbtree", "AddField", "String", "IP"  )
491    MBFH       = VRMethod( "CN_smbtree", "AddField", "String", "Role" )
492    OSFH       = VRMethod( "CN_smbtree", "AddField", "String", "OS" )
493    VersionFH  = VRMethod( "CN_SmbTree", "AddField", "String", "Version" )
494    CommentFH  = VRMethod( "CN_smbtree", "AddField", "String", "Comment" )
495    MacFH      = VRMethod( "CN_smbtree", "AddField", "String", "MAC" )
496
497    ok = VRMethod("CN_smbtree","SetfieldAttr",IPFH,       "ReadOnly", 1)
498    ok = VRMethod("CN_smbtree","SetfieldAttr",NBFH,       "ReadOnly", 1)
499    ok = VRMethod("CN_smbtree","SetfieldAttr",MBFH,       "ReadOnly", 1)
500    ok = VRMethod("CN_smbtree","SetfieldAttr",WorkGroupFH,"ReadOnly", 1)
501    ok = VRMethod("CN_smbtree","SetfieldAttr",OSFH,       "ReadOnly", 1)
502    ok = VRMethod("CN_smbtree","SetfieldAttr",MacFH,      "ReadOnly", 1)
503
504    if options.!debug == 1 then say time()' _ContainersInit done'
505return
506/*:VRX         _ContextMenuSelectedSet
507*/
508_ContextMenuSelectedSet:
509    /* Fixme: This routine only works for CN_SMBTREE right now */
510
511    /* Hide all context menu entries */
512    ok = VRSet("Menu_Selected_Remove",           "Visible", 0) /* CN_CONDET */
513    ok = VRSet("Menu_Selected_Retry",            "Visible", 0) /* CN_CONDET */
514    ok = VRSet("Menu_Selected_Connect",          "Visible", 0) /* CN_SMBTREE */
515    ok = VRSet("Menu_Selected_Sep1",             "Visible", 0) /* CN_SMBTREE */
516    ok = VRSet("Menu_Selected_Info",             "Visible", 0) /* CN_SMBTREE */
517    ok = VRSet("Menu_Selected_TimeSync",         "Visible", 0) /* CN_SMBTREE */
518    ok = VRSet("Menu_Selected_Refresh",          "Visible", 0) /* CN_SMBTREE */
519    ok = VRSet("Menu_Selected_Default_Workgroup","Visible", 0) /* CN_SMBTREE */
520
521
522/*  ok = VRSet("Menu_Selected_TreeView","Visible",1)
523    ok = VRSet("Menu_Selected_DetailsView","Visible",1)
524 */
525    select
526        when SMBObj.udatatype = "DISK" then do
527            ok = VRSet("Menu_Selected_Connect", "Visible", 1)
528        end
529        when SMBObj.udatatype = "SERVER" then do
530            ok = VRSet("Menu_Selected_Connect",          "Visible", 1)
531            ok = VRSet("Menu_Selected_Sep1",             "Visible", 1)
532            ok = VRSet("Menu_Selected_Info",             "Visible", 1)
533            ok = VRSet("Menu_Selected_TimeSync",         "Visible", 1)
534            ok = VRSet("Menu_Selected_Refresh",          "Visible", 1)
535        end
536        when SMBObj.udatatype = "WORKGROUP" then do
537            ok = VRSet("Menu_Selected_Connect",          "Visible", 1)
538            ok = VRSet("Menu_Selected_Sep1",             "Visible", 1)
539            ok = VRSet("Menu_Selected_Default_Workgroup","Visible", 1)
540        end
541        when SMBObj.udatatype = "PRINTER" then do
542            call _PrinterInfo
543            /* CALL VRMessage 'Main', NLVGetMessage( 62 ), NLVGetMessage( 5 ), 'E' */
544        end
545        otherwise nop /* FILE DIRECTORY */
546    end
547return
548
549/*:VRX         _CreateSmbConf
550*/
551_CreateSmbConf:
552    if options.!debug == 1 then say time()' '||"_CreateSmbConf started"
553    call lineout samba.!smbconf, '# Samba config file created using EVFSGUI ver. 'word(VRGet("Main","Hinttext"),2)
554    call lineout samba.!smbconf, '# from 'value("USER",,'OS2ENVIRONMENT')'@'value("HOSTNAME",,'OS2ENVIRONMENT')
555    call lineout samba.!smbconf, '# Date: 'date()' 'time()
556    call lineout samba.!smbconf, '[global]'
557    if settings.!network <> '' then do
558        call lineout samba.!smbconf, '09'x||'workgroup = 'settings.!network
559    end
560    else do
561        call lineout samba.!smbconf, '09'x||'workgroup = WORKGROUP'
562    end
563    call lineout samba.!smbconf, '09'x||'log level = 0'
564    ok = stream(samba.!smbconf,'c','close')
565    if options.!debug == 1 then say time()' '||"_CreateSmbConf done"
566return
567
568/*:VRX         _DaemonRunning
569*/
570_DaemonRunning: procedure expose fs.
571    ok = PRProcessList(proc)
572    PID = 0
573    do I = 1 to proc.0
574        CurProc = VRParseFileName(proc.i.name,'NE')
575        if CurProc = fs.!prefix"CTL.EXE" then  do
576            PID = proc.i.pid
577            leave
578        end
579    end
580return PID
581
582/*:VRX         _DelSMBObjectShares
583*/
584_DelSMBObjectShares: procedure expose samba. options. SMBObj. rh
585    /* Purpose: Delete shares for a given Object (as handle) */
586
587    rh = arg(1)
588
589    ok = VRMethod("CN_smbtree", "GetRecordList", "All", rh.)
590
591    do J = 1 to rh.0 /* populate shares with valid entries */
592        ParentRH = VRMethod("CN_SMBTREE","GetRecordAttr",rh.J,"Parent")
593
594        if ParentRH = rh then do /* we found a share belonging to our server */
595            ok = VRMethod("CN_SMBTree", "RemoveRecord", rh.J )
596        end
597    end
598    SmbObj.shares. = ''
599    SmbObj.shares.0 = 0
600return
601
602/*:VRX         _DialogPopulate
603*/
604_DialogPopulate:
605
606    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "Visible", "rh." )
607
608    ok = VRMethod("EF_SHARE",   "Reset")
609    ok = VRMethod("EF_SERVER",  "Reset")
610    ok = VRMethod("EF_NETWORK", "Reset")
611
612    do I = 1 to rh.0
613
614        Userdata = VRMethod("CN_SMBTREE","GetRecordAttr",rh.I,"Userdata")
615        ResName  = VRMethod("CN_SMBTREE","GetRecordAttr",rh.I,"Caption")
616
617        parse var ResName  ResName '0D0A'x .
618        ResName = strip(ResName)
619        parse var userdata ResType  '|' .
620
621        select
622            when ResType = "WORKGROUP" then ok = VRMethod("EF_NETWORK","AddString", ResName)
623            when ResType = "SERVER"    then ok = VRMethod("EF_SERVER", "AddString", ResName)
624            when ResType = "DISK"      then ok = VRMethod("EF_SHARE",  "AddString", ResName)
625            otherwise nop
626        end
627    end
628
629return
630
631/*:VRX         _DLLSearch
632*/
633_DLLSearch: PROCEDURE
634    PARSE ARG dname
635    _bd = SysBootDrive()
636
637    IF _bd == '' THEN
638        _bd = FILESPEC('DRIVE', VALUE('COMSPEC',,'OS2ENVIRONMENT'))
639    _csys = _bd'\CONFIG.SYS'
640
641    CALL SysFileSearch 'LIBPATH=', _csys, 'match.'
642    DO i = 1 TO match.0
643        PARSE UPPER VAR match.i _lead 'LIBPATH=' _lpath
644        IF (_lead == '') & (_lpath <> '') THEN LEAVE
645    END
646
647    _lpath = SysQueryExtLIBPATH('B') || ';'_lpath';' || SysQueryExtLIBPATH('E')
648
649    CALL SETLOCAL
650    _testenv = 'TEST_'dname'_LIBPATH'
651    CALL VALUE _testenv, _lpath, 'OS2ENVIRONMENT'
652    location = SysSearchPath( _testenv, dname )
653    CALL ENDLOCAL
654
655RETURN location
656
657/*:VRX         _dropdeprecated
658*/
659_dropdeprecated:
660    /* The stem-less counterparts of these variables are considered deprecated and should be removed wherever possible
661       The _dropdeprecated routine will drop any value in order to make sure the stem actually works
662       If another variable is added to the stem, ensure to also drop it in dropdeprecated otherwise it will not be exported
663     */
664    drop rh
665    drop parentrh
666    drop gparentrh
667    drop icon
668    drop resname
669    drop comment
670    drop udatatype
671    drop udatamsg
672return
673
674/*:VRX         _Dynamic
675*/
676_Dynamic:
677    dyn_code = arg(1)
678    if options.!debug == 1 then say '  Dynamic code: 'dyn_code
679    interpret dyn_code; drop dyn_code
680return
681
682/*:VRX         _GetSMBObjectProperties
683*/
684_GetSMBObjectProperties: procedure expose samba. options. SMBObj. rh icon resname udatatype udatamsg parentrh icons.
685    if options.!debug == 1 then say time()' _GetSMBObjectProperties started'
686
687    /* Purpose of this subroutine:
688       The current SMB object's frequently used properties should be stored in a stem
689       SMBObj.rh        = recordhandle of the object
690       SMBObj.resname   = resourcename of the object
691       SMBObj.comment   = commentstring of the object
692       SMBObj.icon      = icon of the object
693       SMBObj.udatatype = type of object (WORKGROUP, SERVER, DISK, PRINTER, FILE, DIRECTORY)
694       SMBObj.udatamsg  = arbitrary object related data (Login message, file properties)
695       SMBObj.parentrh  = recordhandle of the object's parent
696       SMBObj.gparentrh = recordhandle of the object's grandparent
697
698       The stem-less counterparts of these variables are considered deprecated and should be removed wherever possible
699       The _dropdeprecated routine will drop any value in order to make sure the stem actually works
700       If another variable is added to the stem, ensure to also drop it in dropdeprecated otherwise it will not be exported
701     */
702    call _dropdeprecated
703
704    SMBObj. = ""
705    SMBObj.rh = arg(1)
706
707    if VRMethod( "CN_SMBTREE", "ValidateRecord", SMBObj.rh) <> 1 | SMBObj.rh = "" then do
708        if options.!debug == 1 then say time()' _GetSMBObjectProperties aborted'
709        return
710    end
711
712    SMBObj.Icon = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.rh, "Icon")
713
714    SMBObj.parentrh = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.rh, "Parent")
715    if SMBObj.parentrh = ""
716        then SMBObj.gparentrh = ""
717        else SMBObj.gparentrh = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.parentrh, "Parent")
718
719    SMBObj.resname  = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.rh, "Caption")
720    parse var SMBObj.resname SMBObj.resname '0D0A'x SMBObj.comment
721    SMBObj.resname = strip(SMBObj.resname)
722    SMBObj.comment = strip(SMBObj.comment)
723
724    Userdata = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.rh, "Userdata")
725    parse var userdata SMBObj.udatatype '|' SMBObj.udatamsg
726    SMBObj.udatatype = strip(SMBObj.udatatype)
727    SMBObj.udatamsg  = strip(SMBObj.udatamsg)
728
729    if options.!debug == 1 then do
730        say '  Handle:   "'SMBObj.rh'"'
731        say '  GParentrh "'SMBObj.gparentrh'"'
732        say '  Resource: "'SMBObj.resname'"'
733        say '  Comment:  "'SMBObj.comment'"'
734        say '  Type:     "'SMBObj.udatatype'"'
735        say '  Message:  "'SMBObj.udatamsg'"'
736        say '  Icon:     "'SMBObj.icon'"'
737    end
738
739    if options.!debug == 1 then say time()' _GetSMBObjectProperties done'
740return
741
742/*:VRX         _GetSMBObjectShares
743*/
744_GetSMBObjectShares: procedure expose samba. options. SMBObj.
745    /* Purpose: Return stem with shares for a given Object (as handle) */
746
747    rh = arg(1)
748
749    SmbObj.shares. = ''
750    SmbObj.shares.0 = 0
751    I = 0
752    ok = VRMethod("CN_smbtree", "GetRecordList", "All", rh.)
753
754    do J = 1 to rh.0 /* populate shares with valid entries */
755        Userdata = VRMethod("CN_SMBTREE","GetRecordAttr",rh.J,"Userdata")
756        ResName  = VRMethod("CN_SMBTREE","GetRecordAttr",rh.J,"Caption")
757        ParentRH = VRMethod("CN_SMBTREE","GetRecordAttr",rh.J,"Parent")
758
759        parse var ResName  ResName '0D0A'x .
760        ResName = strip(ResName)
761        parse var userdata ResType  '|' .
762
763        if ParentRH = rh then do /* we found a share belonging to our server */
764            if ResType = "DISK" then do
765                I = I + 1
766                SmbObj.shares.I = ResName
767            end
768        end
769    end
770    SmbObj.shares.0 = I
771return
772
773/*:VRX         _GUIInit
774*/
775_GUIInit:
776    if options.!debug == 1 then say time()' _GUIInit started'
777    CALL VRSet 'Main', 'HelpFile', settings.!helpfile
778
779    /* Main Window */
780    CALL NLVSetText 'Main',        "Caption", 1
781
782    CALL NLVSetText 'Menu_File',                      "Caption", 80
783    CALL NLVSetText 'Menu_Context',                   "Caption", 81
784    CALL NLVSetText 'Menu_Selected',                  "Caption", 83
785    CALL NLVSetText 'Menu_Help',                      "Caption", 84
786
787    CALL NLVSetText 'Menu_File_LOAD',                 "Caption", 31
788    CALL NLVSetText 'Menu_File_SAVE',                 "Caption", 30
789    CALL NLVSetText 'Menu_File_LMHosts_Reset',        "Caption", 127
790    CALL NLVSetText 'Menu_File_ucCred_Reset',         "Caption", 128
791    CALL NLVSetText 'Menu_File_Autostart',            "Caption", 35
792    CALL NLVSetText 'Menu_File_Autostart_Activate',   "Caption", 76
793    CALL NLVSetText 'Menu_File_Autostart_Deactivate', "Caption", 77
794    CALL NLVSetText 'Menu_File_Daemon',               "Caption", 126
795    CALL NLVSetText 'Menu_File_Daemon_Start',         "Caption", 76
796    CALL NLVSetText 'Menu_File_Daemon_Stop',          "Caption", 77
797    CALL NLVSetText 'Menu_File_CLOSE',                "Caption", 29
798
799    CALL NLVSetText 'Menu_Context_DETACH',            "Caption", 11
800    CALL NLVSetText 'Menu_Context_DETACH_ALL',        "Caption", 120
801    CALL NLVSetText 'Menu_Context_REFRESH',           "Caption", 38
802    CALL NLVSetText 'Menu_Context_UNMOUNT',           "Caption", 12
803    CALL NLVSetText 'Menu_Context_EDIT',              "Caption", 32
804    CALL NLVSetText 'Menu_Context_OPEN',              "Caption", 94
805    CALL NLVSetText 'Menu_Context_OPEN_ICON',         "Caption", 95
806    CALL NLVSetText 'Menu_Context_OPEN_TREE',         "Caption", 96
807    CALL NLVSetText 'Menu_Context_OPEN_DETAIL',       "Caption", 97
808    CALL NLVSetText 'Menu_Context_OPEN_SETTINGS',     "Caption", 98
809    CALL NLVSetText 'Menu_Context_OPEN_SPLITVIEW',    "Caption", 99
810
811    CALL NLVSetText 'Menu_Selected_Connect',          "Caption", 28
812    CALL NLVSetText 'Menu_Selected_Remove',           "Caption", 12
813    CALL NLVSetText 'Menu_Selected_Retry',            "Caption", 90
814    CALL NLVSetText 'Menu_Selected_Info',             "Caption", 92
815    CALL NLVSetText 'Menu_Selected_TimeSync',         "Caption", 129
816    CALL NLVSetText 'Menu_Selected_Refresh',          "Caption", 38
817    CALL NLVSetText 'Menu_Selected_Default_Workgroup',"Caption", 75
818
819    CALL NLVSetText 'Menu_Help_Extended',             "Caption", 4
820    CALL NLVSetText 'Menu_Help_About',                "Caption", 91
821
822    /* Left pane */
823    CALL NLVSetText 'DT_CURRENT',                     "Caption", 10
824    CALL NLVSetText 'PB_DETACH',                      "Caption", 11
825    CALL NLVSetText 'PB_UNMOUNT',                     "Caption", 12
826
827    /* Dialog window */
828    CALL NLVSetText 'DT_MOUNT',                       "Caption", 14
829    CALL NLVSetText 'DT_SERVER',                      "Caption", 19
830    CALL NLVSetText 'DT_SHARE',                       "Caption", 20
831    CALL NLVSetText 'DT_NETWORK',                     "Caption", 21
832    CALL NLVSetText 'CHK_MTYPE',                      "Caption", 23
833    CALL NLVSetText 'DT_USER',                        "Caption", 25
834    CALL NLVSetText 'DT_PASSWORD',                    "Caption", 26
835    CALL NLVSetText 'DT_MPOINT',                      "Caption", 27
836    CALL NLVSetText 'PB_MOUNT',                       "Caption", 28
837    CALL NLVSetText 'PB_EDIT_CANCEL',                 "Caption", 3
838    CALL NLVSetText 'PB_DIALOG_HELP',                 "Caption", 4
839    CALL NLVSetText 'PB_CLEARCRED',                   "Caption", 89
840
841    IF (mtype.1 \= '' & mtype.2 \= '' & mtype.3 \= '' & mtype.4 \= '') THEN DO
842        CALL VRMethod CB_MOUNT, 'Clear'
843        CALL VRMethod CB_MOUNT, 'AddStringList', 'mtype.'
844    END
845
846    if (mtype.1 = '' & mtype.2 = '' & mtype.3 = '' & mtype.4 = '') THEN DO /* we do not seem to have an NLV file */
847        /* we fill the array with the list predefined directly in the GUI control */
848        ok = VRMethod( "CB_MOUNT", "GetStringList", "mtype." )
849    end
850
851    /* SMBTree */
852    CALL NLVSetText 'PB_SMBTREE_CONNECT',             "Caption", 28
853    CALL NLVSetText 'PB_SMBTREE_REFRESH',             "Caption", 38
854    CALL NLVSetText 'PB_SMBTREE_HELP',                "Caption",  4
855    CALL NLVSetText 'CN_SMBTREE',                     "Caption",140
856
857/** Use AutoSize property instead
858    ok = VRSet("Pict_Throbber","Width",  VRMethod( "Screen", "PixelsToTwips", 32 ))
859    ok = VRSet("Pict_Throbber","Height", VRMethod( "Screen", "PixelsToTwips", 32 ))
860**/
861    /* Condet */
862    CALL NLVSetText 'PB_CONDET_SAVE',     "Caption", 30
863    CALL NLVSetText 'PB_CONDET_LOAD',     "Caption", 31
864    CALL NLVSetText 'PB_CONDET_HELP',"Caption", 4
865
866    /* Statusbar */
867    ok = VRSet("DT_STATUSBAR", "Caption", VRGet("Main", "HintText"))
868
869    /* Common margin around controls */
870    margin = ((VRGet("Main", "InteriorLeft") / 3) * 2) + 2
871
872    smbwait = "#50"
873
874    if options.!debug == 1 then say time()' _GUIInit done'
875return
876
877/*:VRX         _INILoad
878*/
879_INILoad:
880    if options.!debug == 1 then say time()' _INILoad started'
881
882    /* Locate the profile */
883    os2_ini = VALUE('USER_INI',,'OS2ENVIRONMENT')
884    inipath = VRParseFilePath( os2_ini, 'DP')
885    IF inipath == '' THEN inipath = SysBootDrive() || '\OS2'
886    settings.!ini = inipath'\evfsgui.ini'
887    drop os2_ini inipath
888    if options.!debug == 1 then say '  EVFSGUI INIfile = "'settings.!ini'"'
889
890    settings.!network = ""
891    /* Create default smb.conf if none exists */
892    if \VRFileExists( samba.!smbconf ) then call _CreateSmbConf
893
894    say _ucInitObj()
895    say _ucChkObj()
896
897    IF STREAM( settings.!ini, 'C', 'QUERY EXISTS') == '' THEN DO
898        /* First start */
899        if options.!debug == 1 then say "  First start!"
900
901        advanced.!browseauth = 0
902        advanced.!browseimme = 1
903        advanced.!broadcast  = 0
904        advanced.!special    = 0
905        advanced.!savepassive= 0
906        advanced.!lmhosts    = 1
907
908        advanced.!miniicons  = 0
909
910        advanced.!easupport  = 1
911        advanced.!readonly   = 0
912        advanced.!alwaysmp   = 0
913        advanced.!cachetimeout  = 10
914        advanced.!cachelistings = 32
915
916        CALL VRSet "Main", 'Height', 7576
917        CALL VRSet "Main", 'Width',  8200
918        CALL VRSet "SPLIT_MAIN", 'Left',  2915
919        CALL VRMethod "Main", 'CenterWindow'
920        call VRSet 'Main',    'Visible', 1
921        call Main_Resize
922    END
923    ELSE DO
924        /* Subsequent start */
925        /* Load window position settings */
926        settings.!x = VRGetIni('Settings', 'X', settings.!ini, 'NoClose')
927        settings.!y = VRGetIni('Settings', 'Y', settings.!ini, 'NoClose')
928        settings.!h = VRGetIni('Settings', 'H', settings.!ini, 'NoClose')
929        settings.!w = VRGetIni('Settings', 'W', settings.!ini, 'NoClose')
930        settings.!s = VRGetIni('Settings', 'S', settings.!ini, 'NoClose')
931
932        IF settings.!x == '' THEN settings.!x = -1
933        IF settings.!y == '' THEN settings.!y = -1
934        IF settings.!h == '' THEN settings.!h = -1
935        IF settings.!w == '' THEN settings.!w = -1
936        IF settings.!s == '' THEN settings.!s = -1
937
938        /* Titlebar settings */
939        settings.!curbcolor = VRGetIni('Settings', 'TitleBarBackground', settings.!ini, 'NoClose')
940        settings.!curfcolor = VRGetIni('Settings', 'TitleBarForeground', settings.!ini, 'NoClose')
941        IF (settings.!curbcolor = '' | settings.!curbcolor = '<default>') THEN settings.!curbcolor = 'SystemActiveTitle'
942        IF (settings.!curfcolor = '' | settings.!curfcolor = '<default>') THEN settings.!curfcolor = 'SystemActiveTitleText'
943
944        /* Load font settings */
945        IF VRFileExists( SysBootDrive() || '\OS2DBCS') == 1
946            THEN default_font = '9.WarpSans Combined'
947            ELSE default_font = '9.WarpSans'
948
949        settings.!cfont = VRGetIni('Settings', 'ContainerFont', settings.!ini, 'NoClose')
950        settings.!wfont = VRGetIni('Settings', 'WindowFont',    settings.!ini, 'NoClose')
951        IF settings.!cfont  == '' THEN settings.!cfont  = default_font
952        IF settings.!wfont  == '' THEN settings.!wfont  = default_font
953
954        /* Current page */
955        settings.!curpage = VRGetIni('Settings', 'CurrentPage', settings.!ini, 'NoClose')
956        IF settings.!curpage == '' THEN settings.!curpage = 1
957
958        /* Global settings */
959        advanced.!browseauth = VRGetIni('Settings', 'BrowseAuth',      settings.!ini, 'NoClose')
960        advanced.!browseimme = VRGetIni('Settings', 'BrowseImme',      settings.!ini, 'NoClose')
961        advanced.!broadcast  = VRGetIni('Settings', 'Broadcast',       settings.!ini, 'NoClose')
962        advanced.!special    = VRGetIni('Settings', 'SpecialShares',   settings.!ini, 'NoClose')
963        advanced.!savepassive= VRGetIni('Settings', 'SavePassive',     settings.!ini, 'NoClose')
964        advanced.!lmhosts    = VRGetIni('Settings', 'LMHosts',         settings.!ini, 'NoClose')
965        advanced.!miniicons  = VRGetIni('Settings', 'MiniIcons',       settings.!ini, 'NoClose')
966
967        advanced.!easupport  = VRGetIni('Settings', 'EAS',             settings.!ini, 'NoClose')
968        advanced.!readonly   = VRGetIni('Settings', 'ReadOnly',        settings.!ini, 'NoClose')
969        advanced.!alwaysmp   = VRGetIni('Settings', 'AlwaysMP',        settings.!ini, 'NoClose')
970        advanced.!cachetimeout  = VRGetIni('Settings', 'CacheTimeOut', settings.!ini, 'NoClose')
971        advanced.!cachelistings = VRGetIni('Settings', 'CacheListings',settings.!ini, 'NoClose')
972
973        IF advanced.!browseauth == '' THEN advanced.!browseauth = 0
974        IF advanced.!browseimme == '' THEN advanced.!browseimme = 1
975        IF advanced.!broadcast  == '' THEN advanced.!broadcast  = 0
976        IF advanced.!special    == '' THEN advanced.!special    = 0
977        IF advanced.!savepassive== '' THEN advanced.!savepassive= 0
978        IF advanced.!lmhosts    == '' THEN advanced.!lmhosts    = 1
979
980        options.!storecreds = VRGetIni('Settings', 'StoreCreds', settings.!ini, 'NoClose')
981say "options.!storecreds = "options.!storecreds
982        IF options.!storecreds == '' then options.!storecreds = 1
983
984say "options.!storecreds = "options.!storecreds
985        IF _ucChkObj() = 0 then options.!storecreds = 0
986say "options.!storecreds = "options.!storecreds
987
988        options.!tracmark = VRGetIni('Settings', 'TracMarkup', settings.!ini, 'NoClose')
989        options.!debug = VRGetIni('Settings', 'Debug', settings.!ini)
990        IF options.!debug == '' THEN options.!debug = 0       /* Turn off debug by default for release builds */
991        if options.!debug == 1 then ok = VRRedirectStdIO("ON")
992                               else ok = VRRedirectStdio("OFF")
993
994        IF advanced.!miniicons  == '' THEN advanced.!miniicons  = 0
995
996        /* Advanced */
997        IF advanced.!easupport     == '' THEN advanced.!easupport  = 1
998        IF advanced.!readonly      == '' THEN advanced.!readonly   = 0
999        IF advanced.!alwaysmp      == '' THEN advanced.!alwaysmp   = 0
1000        IF advanced.!cachetimeout  == '' THEN advanced.!cachetimeout  = 10
1001        IF advanced.!cachelistings == '' THEN advanced.!cachelistings = 32
1002
1003        /* Apply the settings */
1004        ok = VRSet("DT_CURRENT","BACKCOLOR", settings.!curbcolor )
1005        ok = VRSet("DT_CURRENT","FORECOLOR", settings.!curfcolor )
1006
1007        ok = VRset("CN_CURRENT", "MiniIcons", advanced.!miniicons)
1008        ok = VRset("CN_SMBTREE", "MiniIcons", advanced.!miniicons)
1009        ok = VRset("CN_CONDET",  "MiniIcons", advanced.!miniicons)
1010
1011        IF ( settings.!x >= 0 ) & ( settings.!y >= 0 ) & ( settings.!l >= 0 ) & ( settings.!w >= 0 ) & ( settings.!s >= 0 ) THEN DO
1012            CALL VRSet VRWindow(), 'Left',   settings.!x
1013            CALL VRSet VRWindow(), 'Top',    settings.!y
1014            CALL VRSet VRWindow(), 'Height', settings.!h
1015            CALL VRSet VRWindow(), 'Width',  settings.!w
1016            CALL VRSet "SPLIT_MAIN", 'Left',  settings.!s
1017        END
1018        ELSE CALL VRMethod VRWindow(), 'CenterWindow'
1019
1020        CALL VRSet "CN_CURRENT", 'Font',       settings.!cfont
1021        CALL VRSet "CN_CONDET",  'Font',       settings.!cfont
1022        CALL VRSet "CN_SMBTREE", 'Font',       settings.!cfont
1023
1024        CALL VRSet 'Main',       'Font',       settings.!wfont
1025        CALL VRSet 'Main',       'StatusFont', settings.!wfont
1026
1027        ok = VRSet("TDL_1","Selected", settings.!curpage)
1028    END
1029
1030    if options.!nogui == 1 then CALL VRLoadSecondary "SW_PROGRESS","W"
1031    else do
1032        if options.!delay > 0 then do
1033            /* Set mouse pointer to wait - this operation might take a few seconds */
1034            call VRSet VRWindow(), 'Pointer', 'Wait'
1035            call Main_Resize
1036            ok = SysSleep(options.!delay)
1037            options.!delay = 0
1038            /* Set mouse pointer to default again */
1039            call VRSet VRWindow(), 'Pointer', '<default>'
1040        end
1041    end
1042
1043    /* Look for usable credentials */
1044    if options.!storecreds = 1 & _ucChkUc() then do
1045        UserCred = _ucGetUc()
1046        parse var UserCred '--user='Credentials.!username'%'Credentials.!password
1047        if left(Credentials.!password,1)='%' then Credentials.!password = substr(Credentials.!password,2)
1048        ok = VRSet("EF_USER",    "Value",Credentials.!username)
1049        ok = VRSet("EF_PASSWORD","Value",Credentials.!password)
1050        ok = VRSet("CN_SMBTREE","Caption",VRGet("CN_SMBTREE","Caption")||": "Credentials.!username)
1051    end
1052    else ok = VRSet("CN_SMBTREE","Caption",VRGet("CN_SMBTREE","Caption")||": Guest")
1053
1054    /* SambaInit.VRS needs these 2 */
1055    ShowHidden = advanced.!special
1056    Broadcast  = advanced.!broadcast
1057
1058    /* in non debug versions this is normally not visible */
1059    if options.!debug == 1 then say '  NLV MessageFile = "'settings.!messages'"'
1060    if options.!debug == 1 then say '  NLV HelpFile    = "'settings.!helpfile'"'
1061
1062    if options.!debug == 1 then say time()' _INILoad done'
1063RETURN
1064
1065/*:VRX         _INISave
1066*/
1067_INISave: PROCEDURE EXPOSE settings. options. icons. fs. advanced. cd. samba.
1068    if options.!debug == 1 then say time()' '||"SaveSettings started"
1069
1070    if advanced.!savepassive then call _PassiveSave
1071
1072/* This does not make sense anymore
1073    settings.!network = VRGet("EF_NETWORK","Value")
1074    CALL VRSetIni 'Settings', 'Network', settings.!network, settings.!ini, 'NoClose'
1075 */
1076
1077    font = VRGet("CN_CURRENT", 'Font')
1078    CALL VRSetIni 'Settings', 'ContainerFont', font, settings.!ini, 'NoClose'
1079
1080    font = VRGet('Main', 'Font')
1081    CALL VRSetIni 'Settings', 'WindowFont', font, settings.!ini, 'NoClose'
1082
1083    settings.!curbcolor = VRGet("DT_CURRENT","BackColor")
1084    CALL VRSetIni 'Settings', 'TitleBarBackground', settings.!curbcolor, settings.!ini, 'NoClose'
1085
1086    settings.!curfcolor = VRGet("DT_CURRENT","ForeColor")
1087    CALL VRSetIni 'Settings', 'TitleBarForeground', settings.!curfcolor, settings.!ini, 'NoClose'
1088
1089    /* Global options */
1090    CALL VRSetIni 'Settings', 'BrowseAuth',    advanced.!browseauth , settings.!ini, 'NoClose'
1091    CALL VRSetIni 'Settings', 'BrowseImme',    advanced.!browseimme , settings.!ini, 'NoClose'
1092    CALL VRSetIni 'Settings', 'Broadcast',     advanced.!broadcast  , settings.!ini, 'NoClose'
1093    CALL VRSetIni 'Settings', 'SpecialShares', advanced.!special    , settings.!ini, 'NoClose'
1094    CALL VRSetIni 'Settings', 'SavePassive',   advanced.!savepassive, settings.!ini, 'NoClose'
1095    CALL VRSetIni 'Settings', 'LMHosts',       advanced.!lmhosts    , settings.!ini, 'NoClose'
1096
1097    CALL VRSetIni 'Settings', 'StoreCreds',    options.!storecreds  , settings.!ini, 'NoClose'
1098    CALL VRSetIni 'Settings', 'Debug',         options.!debug       , settings.!ini, 'NoClose'
1099    CALL VRSetIni 'Settings', 'MiniIcons',     advanced.!miniicons  , settings.!ini, 'NoClose'
1100    CALL VRSetIni 'Settings', 'TracMarkup',    options.!tracmark    , settings.!ini, 'NoClose'
1101
1102    /* Advanced */
1103    CALL VRSetIni 'Settings', 'EAS',           advanced.!easupport    , settings.!ini, 'NoClose'
1104    CALL VRSetIni 'Settings', 'ReadOnly',      advanced.!readonly     , settings.!ini, 'NoClose'
1105    CALL VRSetIni 'Settings', 'AlwaysMP',      advanced.!alwaysmp     , settings.!ini, 'NoClose'
1106    CALL VRSetIni 'Settings', 'CacheTimeOut',  advanced.!cachetimeout , settings.!ini, 'NoClose'
1107    CALL VRSetIni 'Settings', 'CacheListings', advanced.!cachelistings, settings.!ini, 'NoClose'
1108
1109    /* Current page */
1110    settings.!curpage = VRget("TDL_1","Selected")
1111    CALL VRSetIni 'Settings', 'CurrentPage',   settings.!curpage      , settings.!ini, 'NoClose'
1112
1113    /* Save position and size */
1114    settings.!l = VRGet("Main",       'Left'  )
1115    settings.!t = VRGet("Main",       'Top'   )
1116    settings.!h = VRGet("Main",       'Height')
1117    settings.!w = VRGet("Main",       'Width' )
1118    settings.!s = VRGet("SPLIT_Main", 'Left'  )
1119
1120    CALL VRSetIni 'Settings', 'X', settings.!l, settings.!ini, 'NoClose'
1121    CALL VRSetIni 'Settings', 'Y', settings.!t, settings.!ini, 'NoClose'
1122    CALL VRSetIni 'Settings', 'H', settings.!h, settings.!ini, 'NoClose'
1123    CALL VRSetIni 'Settings', 'W', settings.!w, settings.!ini, 'NoClose'
1124    CALL VRSetIni 'Settings', 'S', settings.!s, settings.!ini
1125
1126    if options.!debug == 1 then say time()' '||"SaveSettings done"
1127RETURN
1128
1129/*:VRX         _isValidIPAddress
1130*/
1131_isValidIPAddress: procedure
1132   ipaddr = arg(1)
1133   d. = ''
1134   d.0 = 4
1135   fail = 0
1136   parse var ipaddr d.1 '.' d.2 '.' d.3 '.' d.4
1137   do I = 1 to 4
1138       if datatype(d.I) = 'NUM' then do
1139           if d.I < 0 | d.I > 255 then fail = 1
1140       end
1141       else fail = 1
1142       if fail = 1 then leave
1143   end
1144return(\fail)
1145
1146/*:VRX         _LMHostsRead
1147*/
1148_LMHostsRead:
1149    ok = file2stem(samba.!lmhosts,'lmhosts.', 'NoDel')
1150    lmname. = "#"
1151    lmapp.  = ""
1152    lmname.0 = lmhosts.0
1153    lmip.0   = lmhosts.0
1154    lmapp.0  = lmhosts.0
1155    do I = 1 to lmhosts.0
1156        if left(lmhosts.I,1) = "#" then iterate
1157        parse var lmhosts.I lmip.I ' ' lmname.I '#' lmapp.I
1158        lmip.I = strip(lmip.I)
1159        lmname.I = strip(lmname.I)
1160        if lmapp.I <> "" & left(lmapp.I,1) <> '#' then lmapp.I = '#'lmapp.I
1161    end
1162    drop lmhosts.
1163return
1164
1165/*:VRX         _LMHostsReset
1166*/
1167_LMHostsReset:
1168    ok = SysFileDelete(samba.!lmhosts)
1169
1170    Buttons.1 = NLVGetMessage(2)
1171    Buttons.0 = 1
1172    if ok = 0 then do
1173        id = VRMessage( VRWindow(), NLVGetMessage(118,samba.!lmhosts), NLVGetMessage(127), "Information", "Buttons.", 1, 1 )
1174    end
1175    else do
1176        id = VRMessage( VRWindow(), samba.!lmhosts', RC = 'ok, NLVGetMessage(127), "Error", "Buttons.", 1, 1 )
1177    end
1178return
1179
1180/*:VRX         _LMHostsUpdate
1181*/
1182_LMHostsUpdate:
1183    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "Visible", "rh." )
1184    do I = 1 to rh.0
1185        call _GetSMBObjectProperties rh.I
1186        if SMBObj.udatatype = "SERVER" then do
1187            IP = VRMethod("CN_SMBTREE","GetFieldData",rh.I, IPFH )
1188            Role = VRMethod("CN_SMBTREE","GetFieldData",rh.I, MBFH )
1189            parse var IP T1 '.' T2 '.' T3 '.' T4
1190            if datatype(T1) = "NUM" & datatype(T2) = "NUM" & datatype(T3) = "NUM" & datatype(T4) = "NUM" then do
1191                FoundName = 0
1192                /* Don't add localhost and local link IP to LMHosts */
1193                if T1 = '127' & T2 = '0' & T3 = '0' & T4 = '1' then iterate
1194                if T1 = '169' & T2 = '254' then iterate
1195                do J = 1 to lmname.0 /* machine already in LMHosts? */
1196                    if lmname.J = SmbObj.resname then do /* Yes? then update IP */
1197                        lmip.J = IP
1198                        if pos('PDC',Role) > 0 & SMBObj.parentrh <> "" then do
1199                            Domain  = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.parentrh, "Caption")
1200                            lmapp.J = "#DOM:"Domain
1201                        end
1202                        FoundName = 1
1203                        leave
1204                    end
1205                end
1206                if FoundName = 0 then do /* New machine for LMhosts - add it */
1207                    new = lmname.0 + 1
1208                    lmname.0 = new
1209                    lmname.new = SmbObj.resname
1210                    lmip.0 = new
1211                    lmip.new = IP
1212                end
1213            end
1214        end
1215    end
1216    ok = SysFileDelete(samba.!lmhosts)
1217    call lineout samba.!lmhosts,'# Created by 'translate(VRParseFilename(settings.!ini,'N'))' Version 'word(VRGet("Main","Hinttext"),2)' on 'date()' at 'time()
1218    call lineout samba.!lmhosts,'# Syntax:'
1219    call lineout samba.!lmhosts,left('# IP-address',25)||left('NetBIOS-name',16)' [Role]'
1220    do I = 1 to lmname.0
1221        if left(lmname.I,1) = "#" then iterate
1222        call lineout samba.!lmhosts,left(lmip.I,25)||left(lmname.I,16)' 'lmapp.I
1223    end
1224    ok = stream(samba.!lmhosts,'c','close')
1225return
1226
1227/*:VRX         _LMHostsWrite
1228*/
1229_LMHostsWrite:
1230
1231return
1232
1233/*:VRX         _LoadOtherFuncs
1234*/
1235_LoadOtherFuncs:
1236    IF options.!debug == 1 then say time()' _LoadotherFuncs() started'
1237    SIGNAL ON SYNTAX
1238
1239    call RxFuncAdd 'SysLoadFuncs', 'REXXUTIL', 'SysLoadFuncs'
1240    call SysLoadFuncs
1241
1242    call rxfuncadd 'IniLoadFuncs', 'REXXINI', 'IniLoadFuncs'
1243    call IniLoadFuncs
1244
1245    call RxFuncAdd 'PRLoadFuncs',  'PR1UTIL', 'PRLoadFuncs'
1246    call PRLoadFuncs
1247
1248    call RxFuncAdd 'RxuInit',      'RXU',     'RxuInit'
1249    call RxuInit
1250
1251    SIGNAL OFF SYNTAX
1252    IF options.!debug == 1 then say time()' _LoadotherFuncs() done'
1253return
1254
1255SYNTAX:
1256    IF options.!debug == 1 then say time()' _LoadotherFuncs() error handler entered.'
1257    Fatal = 1
1258    parse source . . InVXIDE
1259    if left(InVXIDE,length(Tempdir)+5) = TempDir||'__tmp'
1260        then xxx = "VX-REXX IDE: "strip(translate(word(sourceline(SIGL-1),4),'  ',"',"))
1261        else xxx = 'A'
1262    call VRMessage 'Main', xxx' REXX function library DLL is missing or unloadable!', "EVFSGUI fatal error", "E"
1263    IF options.!debug == 1 then say time()' _LoadotherFuncs() error handler finished, program will be terminated.'
1264signal Quit
1265
1266/*:VRX         _ParseCommandLine
1267*/
1268_ParseCommandLine:
1269    if options.!debug == 1 then say time()' _ParseCommandLine() started'
1270    CmdLine = VRGet("Application","Commandline")
1271    upCmdLine = translate(CmdLine)
1272    if options.!debug == 1 then say '  Commandline = "'CmdLine'"'
1273
1274    ForceNDFS = 0
1275    if wordpos('-NDFS',upCmdLine) > 0 then do
1276        if options.!debug == 1 then say "  NDFS switch detected"
1277        CmdLine = delWord(CmdLine,wordpos('-NDFS',upCmdLine),1)
1278        upCmdLine = translate(CmdLine)
1279        ForceNDFS = 1
1280        CALL VRSet "Menu_File_Autostart","Visible", 0
1281    end
1282
1283    if wordpos('-AUTOCLOSE',upCmdLine) > 0 then do
1284        options.!autoclose = 1
1285        if options.!debug == 1 then say "  AutoClose switch detected"
1286        CmdLine = delWord(CmdLine,wordpos('-AUTOCLOSE',upCmdLine),1)
1287        upCmdLine = translate(CmdLine)
1288    end
1289    if wordpos('-NOGUI',upCmdLine) > 0 then do
1290        options.!nogui = 1
1291        options.!autoclose = 1
1292        if options.!debug == 1 then say "  -NOGUI switch detected"
1293        CmdLine = delWord(CmdLine,wordpos('-NOGUI',upCmdLine),1)
1294        upCmdLine = translate(CmdLine)
1295    end
1296
1297    if wordpos('-TIMESYNC',upCmdLine) > 0 then do
1298        options.!timesync = 1
1299        if options.!debug == 1 then say "  -TIMESYNC switch detected"
1300        dwpos = wordpos('-TIMESYNC',upCmdLine)
1301        if dwpos = words(upCmdLine) then do /* TIMESYNC was last parm - assume automatic */
1302            options.!timesrv = ""
1303            CmdLine = delWord(CmdLine,wordpos('-TIMESYNC',upCmdLine),1)
1304        end
1305        else do
1306            options.!timesrv = word(upCmdLine,dwpos+1)
1307            if left(options.!timesrv,1) = "-" then do /* other parameter detected */
1308                options.!timesrv = ""
1309                CmdLine = delWord(CmdLine,wordpos('-TIMESYNC',upCmdLine),1)
1310            end
1311            else do /* seems we have a timeserver - IP or name - no further check */
1312                CmdLine = delWord(CmdLine,wordpos('-TIMESYNC',upCmdLine),2)
1313            end
1314        end
1315        upCmdLine = translate(CmdLine)
1316    end
1317
1318    if wordpos('-DELAY',upCmdLine) > 0 then do
1319        if options.!debug == 1 then say "  DELAY switch detected"
1320        dwpos = wordpos('-DELAY',upCmdLine)
1321        if dwpos = words(upCmdLine) then do /* DELAY was last parm - assume 60 seconds */
1322            options.!delay = 60
1323            CmdLine = delWord(CmdLine,dwpos,1)
1324        end
1325        else do
1326            options.!delay = word(upCmdLine,dwpos+1)
1327            if datatype(options.!delay) <> "NUM" then do /* No number of seconds specified */
1328                options.!delay = 60
1329                CmdLine = delWord(CmdLine,dwpos,1)
1330            end
1331            else do
1332                CmdLine = delWord(CmdLine,dwpos,2)
1333            end
1334        end
1335        upCmdLine = translate(CmdLine)
1336        if options.!debug == 1 then say "  DELAY set to "options.!delay" seconds."
1337    end
1338
1339    Profile = strip(CmdLine,,'"')
1340    if Profile <> "" then do
1341        Profile = strip(VRParseFilename(Profile,"DPNE"))
1342        options.!autoload   = 1
1343        if options.!debug == 1 then say '  Profile = "'Profile'"'
1344        if \VRFileExists(Profile) then do
1345            CALL VRMessage 'Main', NLVGetMessage( 102, Profile ), NLVGetMessage( 1 ), 'E'
1346            /* Disable all switches in case of an error */
1347            options.!autoload  = 0
1348            options.!autoclose = 0
1349            options.!nogui     = 0
1350            options.!delay     = 0
1351        end
1352    end
1353    if options.!debug == 1 then say time()' _ParseCommandLine done'
1354return
1355
1356/*:VRX         _PassiveLoad
1357*/
1358_PassiveLoad:
1359    if options.!debug == 1 then say time()' '||"_PassiveLoad started"
1360
1361    do cnt = 1 to 255
1362        resdata = VRGetIni( "PassiveConnections", cnt, settings.!ini )
1363        if resdata = "" then leave
1364
1365        parse var resdata p_mpoint resource rwFlag
1366        if options.!debug == 1 then do
1367            say '  Connection 'cnt', resdata  ="'resdata'"'
1368        end
1369
1370/*      vfs.!drive      = FILESPEC('DRIVE', node )
1371        vfs.!mountpoint = STRIP( node, 'T', '\') */
1372
1373        /* In case we only have a volume we reattach the backslash, otherwise restore will fail */
1374        if vfs.!drive = vfs.!mountpoint then vfs.!mountpoint = vfs.!mountpoint||'\'
1375
1376        p_mpidx = ""
1377
1378        call ParseResParmString
1379
1380        p_rw = rwFlag
1381
1382        /* Create the hash string */
1383        hashstr = p_mpoint' 'translate(p_workgroup)' 'translate(p_server)' 'translate(p_share)' 'p_user' 'p_spassword' 'p_easupport' 'p_rw
1384
1385        /* A truncated, useless entry - skip it */
1386        if p_server = "" & p_share = ""& p_workgroup = "" then iterate
1387
1388        md5.cnt = rexx_md5(hashstr)
1389        md5.0   = cnt
1390
1391        /* Passive connection already restored - skip the dupe one */
1392        PassiveDupe = 0
1393        do X = 1 to md5.0-1
1394            if md5.cnt = md5.X then PassiveDupe = 1
1395        end
1396        if PassiveDupe = 1 then iterate /* do not add record for a duplicate passive connection */
1397
1398        /* Everything is ok, let's add a new entry */
1399        cd.lastrh = VRMethod("CN_CONDET","AddRecord")
1400
1401        /* Fill columns now */
1402        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.mpointFH,    p_mpoint)
1403        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.mpidxfh,     p_mpidx)
1404        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.workgrpFH  , p_workgroup)
1405        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.serverfh,    p_server)
1406        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.sharefh,     p_share)
1407        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.userfh,      p_user)
1408        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.passwordfh,  p_password)
1409        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.spasswordfh, p_spassword)
1410        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.ctoFH,       p_cachetimeout)
1411        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.cldFH,       p_cachelistings)
1412        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.masterfh,    p_master)
1413        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.mtypefh,     p_mtype)
1414        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.easupportfh, p_easupport)
1415        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.rwfh,        p_rw)
1416        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.hashfh,      md5.cnt)
1417        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.statusfh,    icons.!passive)
1418        ok = VRMethod("CN_CONDET", "SetRecordAttr", cd.lastrh, "Icon",         icons.!passive)
1419
1420/*      Obsolete fields:
1421        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.memlenfh,    p_memlen)
1422        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.logfilefh,   p_logfile)
1423        ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.loglevelfh,  p_loglevel) */
1424    end
1425    if options.!debug == 1 then say time()' '||"_PassiveLoad done"
1426return
1427/*:VRX         _PassiveSave
1428*/
1429_PassiveSave:
1430    if options.!debug == 1 then say time()' '||"_PassiveSave started"
1431    ok = VRDelIni( "PassiveConnections", "ALL", settings.!ini )
1432
1433    ok = SysIni(settings.!ini, 'PassiveConnections', 'DELETE:')
1434
1435    CALL VRMethod "CN_CONDET", 'GetRecordList', 'All', 'records.'
1436    cnt = 0
1437    DO i = 1 TO records.0
1438
1439        if VRMethod( "CN_CONDET", "GetFieldData", records.i, CD.StatusFH) = icons.!passive then do
1440            cnt = cnt + 1
1441            resdata = ""
1442            resdata = resdata||VRMethod("CN_CONDET","GetFieldData", records.i, cd.mpointfh)||" "
1443            resdata = resdata||'\\'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.workgrpFH  )
1444            resdata = resdata||':'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.serverfh)
1445            resdata = resdata||'\'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.sharefh)
1446            resdata = resdata||'@'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.userfh)
1447            resdata = resdata||';WORKGROUP='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.workgrpFH  )
1448            resdata = resdata||';SERVER='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.serverfh)
1449            resdata = resdata||';SHARE='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.sharefh)
1450            resdata = resdata||';USER='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.userfh)
1451            resdata = resdata||';PASSWORD='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.passwordfh)
1452            resdata = resdata||';SPASSWORD='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.spasswordfh)
1453            resdata = resdata||';MASTER='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.masterfh)
1454            resdata = resdata||';MASTERTYPE='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.mtypefh)
1455/*          resdata = resdata||';MEMLEN='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.memlenfh)
1456            resdata = resdata||';LOGFILE='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.logfilefh)
1457            resdata = resdata||';LOGLEVEL='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.loglevelfh) */
1458            resdata = resdata||';CTO='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.ctoFH)
1459            resdata = resdata||';CLD='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.cldFH)
1460            resdata = resdata||';EASUPPORT='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.easupportfh)
1461            resdata = resdata||' '||VRMethod("CN_CONDET","GetFieldData", records.i, cd.rwfh)
1462            ok = VRSetIni( "PassiveConnections", cnt, resdata, settings.!ini )
1463        END
1464        else iterate
1465    end
1466    if options.!debug == 1 then say time()' '||"_PassiveSave done"
1467return
1468
1469/*:VRX         _PrinterInfo
1470*/
1471_PrinterInfo:
1472    if \_SMBpdrInstalled() then do
1473        /* SMB.PDR is not installed */
1474        CALL VRMessage 'Main', NLVGetMessage( 104 ), NLVGetMessage( 5 ), 'E'
1475    end
1476    else do /* SMB.pdr is installed */
1477        /* shared queue name */
1478        p_printer = SMBObj.resname
1479
1480        /* printer server */
1481        capt = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.parentrh, "Caption")
1482        parse var Capt p_prtsrv '0D0A'x .
1483        p_prtsrv = strip(p_prtsrv)
1484
1485        /* workgroup of the printer server */
1486        Gparrh = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.parentrh, "Parent")
1487        capt = VRMethod("CN_SMBTREE", "GetRecordAttr", GParrh, "Caption")
1488        parse var Capt p_workgroup '0D0A'x .
1489
1490        /* This is the string we will find in case this resource is already connected */
1491        DescStr = translate(p_prtsrv'#'p_printer'#'p_workgroup'#')
1492        say '"'DescStr'"'
1493        LDescStr = length(DescStr)
1494
1495        /* Enumerate all SMB ports */
1496        ok = SysIni('SYSTEM','PM_SPOOLER_PORT',"All:",'ports')
1497        if ports.0 = 0 then do
1498            /* No SMB ports installed */
1499            CALL VRMessage 'Main', NLVGetMessage( 105 ), NLVGetMessage( 5 ), 'E'
1500        end
1501        else do
1502            /*  At least 1 SMB port was found - lets check whether it is already connected to our resource */
1503            FoundPort = 0
1504            do I = 1 to ports.0
1505                if left(ports.i,3) = 'SMB' then do
1506                    say ports.I
1507                    say translate(left(SysIni('SYSTEM','PM_'ports.I,'INITIALIZATION'),LDescStr))
1508                    say DescStr
1509                    if translate(left(SysIni('SYSTEM','PM_'ports.I,'INITIALIZATION'),LDescStr)) = DescStr then do
1510                        OurPort = ports.I
1511                        FoundPort = 1
1512                        leave
1513                    end
1514                end
1515            end
1516            say 'OurPort = "'OurPort'"'
1517            if Foundport then do
1518                ok = SysIni('SYSTEM','PM_SPOOLER_PRINTER',"All:",'printer')
1519                FoundPrinter = 0
1520                do I = 1 to printer.0
1521                    prtsummary = SysINi('SYSTEM','PM_SPOOLER_PRINTER',printer.i)
1522                    parse var prtsummary port ';'PrinterDriver';'PrinterQueue';' .
1523                    say printer.I' 'prtsummary
1524                    if port = ourPort then do
1525                        PrinterName = SysINi('SYSTEM','PM_SPOOLER_PRINTER_DESCR',printer.i)
1526                        parse var Printername Printername ';' .
1527                        CALL VRMessage 'Main', PrinterName' ('PrinterQueue') prints to port ' Port' connected to \\'p_workgroup'\'p_prtsrv'\'p_printer, NLVGetMessage( 1 ), 'I'
1528                        FoundPrinter = 1
1529                        leave
1530                    end
1531                end
1532                if FoundPrinter = 0 then do
1533                    /* Port installed and configured, but not used by any printer */
1534                    CALL VRMessage 'Main', NLVGetMessage( 106 ), NLVGetMessage( 5 ), 'E'
1535                end
1536            end
1537            else do
1538                CALL VRMessage 'Main', NLVGetMessage( 62 ), NLVGetMessage( 5 ), 'E'
1539            end
1540        end
1541    end
1542return
1543
1544/*:VRX         _ShowMsg
1545*/
1546_ShowMsg:
1547    /* preliminary implementation - we just do not ignore it anymore -
1548       - ShowMsg from smbmon/smbusers should become a shared library */
1549    ok = VRSet("DT_StatusBar", "Caption", Msg.Text)
1550return
1551
1552/*:VRX         _SmbConfCreateShadowCopy
1553*/
1554_SmbConfCreateShadowCopy:
1555    if options.!debug == 1 then say time()' _SmbConfCreateShadowCopy started'
1556    /* we create a complete version of smb.conf in temporary directory for reading purposes */
1557    /* as we can only determine a default value from this complete version of the file */
1558    /* however it is not desirable to always have a complete copy normally */
1559    ok = SysFileDelete(samba.!shadowsmbconf)
1560    say     '  'samba.!testparmexe' -v -s 1>'samba.!shadowsmbconf' 2>'TempDir'testparm.stderr'
1561    address cmd samba.!testparmexe' -v -s 1>'samba.!shadowsmbconf' 2>'TempDir'testparm.stderr'
1562    if options.!debug == 1 then say time()' _SmbConfCreateShadowCopy done'
1563return
1564
1565/*:VRX         _SMBpdrInstalled
1566*/
1567_SMBpdrInstalled: procedure
1568    ok = VRGetINI("PM_PORT_DRIVER","SMB","SYSTEM")
1569return (ok <> "")
1570
1571/*:VRX         _StemsInit
1572*/
1573_StemsInit:
1574    if options.!debug == 1 then say time()' _StemsInit started'
1575    if options.!debug == 1 then say '  initializing options.'
1576    options.!workgroup  = ''
1577    options.!server     = ''
1578    options.!share      = ''
1579    options.!user       = ''
1580    options.!password   = ''
1581    options.!spassword  = ''
1582    options.!master     = ''
1583    options.!mastertype = ''
1584    options.!memlen     = '2'
1585    options.!cachetimeout  = '10'
1586    options.!cachelistings = '32'
1587    options.!easupport  = '1'
1588    options.!readonly   = ''
1589    options.!loglevel   = 0
1590    options.!logfile    = ''
1591
1592    options.!autoload   = 0
1593    options.!autoclose  = 0
1594    options.!nogui      = 0
1595    options.!autostart  = 0
1596    options.!editmode   = 0
1597    options.!delay      = 0
1598    options.!storecreds = 0
1599    options.!timesync   = 0
1600    options.!timesrv    = ''
1601
1602    options.!tracmark   = 0
1603
1604    if options.!debug == 1 then say '  initializing vfs. '
1605    vfs.!drive      = ''
1606    vfs.!mountpoint = ''
1607
1608    if options.!debug == 1 then say '  initializing advanced. '
1609    advanced.!browseauth = ''
1610    advanced.!browseimme = ''
1611    advanced.!broadcast  = ''
1612    advanced.!special    = ''
1613    advanced.!savepassive= ''
1614    advanced.!miniicons  = ''
1615
1616    advanced.!easupport  = 1
1617    advanced.!readonly   = ''
1618    advanced.!alwaysmp   = ''
1619    advanced.!cachetimeout  = '10'
1620    advanced.!cachelistings = '32'
1621
1622    advanced.!smbconfchanged = 0
1623
1624    /* Obsolete */
1625    advanced.!memlen     = ''
1626    advanced.!loglevel   = '0'
1627    advanced.!logfile    = ''
1628
1629    if options.!debug == 1 then say '  initializing credentials. '
1630    credentials.!username = ""
1631    credentials.!password = ""
1632    credentials.!entered  = 0
1633
1634    UserCred = ""
1635    RefreshMode = ""
1636
1637    if options.!debug == 1 then say '  initializing mtype. '
1638    mtype.0 = 4
1639    mtype.1 = NLVGetMessage( 15 )
1640    mtype.2 = NLVGetMessage( 16 )
1641    mtype.3 = NLVGetMessage( 17 )
1642    mtype.4 = NLVGetMessage( 18 )
1643
1644    if options.!debug == 1 then say '  initializing icons. '
1645    icons.!bat              = '#1:PMWP.DLL'
1646    icons.!cmd              = '#2:PMWP.DLL'
1647    icons.!exe              = '#3:PMWP.DLL'
1648    icons.!template         = '#10:PMWP.DLL'
1649    icons.!drive            = '#16:PMWP.DLL'
1650    icons.!defaultfile      = '#24:PMWP.DLL'
1651    icons.!folder           = '#26:PMWP.DLL'
1652    icons.!folder_open      = '#34:PMWP.DLL'
1653    icons.!machine_awake    = '#35:PMWP.DLL'
1654    icons.!machine_sleeping = '#61:PMWP.DLL'
1655    icons.!workgroup        = '#62:PMWP.DLL'
1656    icons.!pdc              = '#63:PMWP.DLL'
1657    icons.!active           = '#64:PMWP.DLL'
1658    icons.!passive          = '#68:PMWP.DLL'
1659    icons.!printer          = '#65:PMWP.DLL'
1660    icons.!drive_inactive   = '#70:PMWP.DLL'
1661    icons.!pdf              = '#80'
1662    icons.!spreadsheet      = '#82'
1663    icons.!textdocument     = '#86'
1664    icons.!framework        = '#87'
1665    icons.!image            = '#88'
1666    icons.!movie            = '#89'
1667    icons.!sound            = '#90'
1668    icons.!warpin           = '#91'
1669    icons.!zip              = '#92'
1670    icons.!view             = '#93'
1671    icons.!plaintext        = '#94'
1672
1673    p_workgroup             = "Unknown"
1674    p_server                = "Unknown"
1675    p_share                 = "Unknown"
1676
1677    if options.!debug == 1 then say time()' _StemsInit done'
1678return
1679/*:VRX         _TabbedDialogSetup
1680*/
1681_TabbedDialogSetup:
1682    if options.!debug == 1 then say time()' _TabbedDialogSetup started'
1683
1684    w = VRLoad( "TDL_1", VRWindowPath(), "SW_DIALOG" )
1685    ok = VRMethod( "TDL_1", "InsertPage", w,"+ "NLVGetMessage(13)" ")
1686    ok = VRMethod( "TDL_1", "SetStatusText", 1, NLVGetMessage(132,"1","2"))
1687    w = VRLoad( "TDL_1", VRWindowPath(), "SW_ADVANCED" )
1688    ok = VRMethod( "TDL_1", "InsertPage", w,"- "NLVGetMessage(40)" ")
1689    ok = VRMethod( "TDL_1", "SetStatusText", 2, NLVGetMessage(132,"2","2"))
1690
1691    w = VRLoad( "TDL_1", VRWindowPath(), "SW_SMBTREE" )
1692    ok = VRMethod( "TDL_1", "InsertPage", w,"+ "NLVGetMessage(39)" ")
1693
1694    w = VRLoad( "TDL_1", VRWindowPath(), "SW_CONDET" )
1695    ok = VRMethod( "TDL_1", "InsertPage", w,"+ "NLVGetMessage(63)" ")
1696    w = VRLoad( "TDL_1", VRWindowPath(), "SW_SETTINGS" )
1697    ok = VRMethod( "TDL_1", "InsertPage", w,"+ "NLVGetMessage(47)" ")
1698    w = VRLoad( "TDL_1", VRWindowPath(), "SW_SMBCONF" )
1699    ok = VRMethod( "TDL_1", "InsertPage", w,"- "NLVGetMessage(47)" ")
1700    if options.!debug == 1 then say time()' _TabbedDialogSetup done'
1701return
1702
1703
1704/*:VRX         _TabFix
1705*/
1706_TabFix:
1707    ok = VRMethod( "TDL_1", "SetTabText", arg(1), " "strip(VRMethod( "TDL_1", "GetTabText", arg(1)))" ")
1708return
1709
1710/*:VRX         _TabsStrip
1711*/
1712_TabsStrip:
1713    ok = VRMethod( "TDL_1", "SetTabText", 1, strip(VRMethod( "TDL_1", "GetTabText", 1)))
1714    ok = VRMethod( "TDL_1", "SetTabText", 2, strip(VRMethod( "TDL_1", "GetTabText", 2)))
1715    ok = VRMethod( "TDL_1", "SetTabText", 3, strip(VRMethod( "TDL_1", "GetTabText", 3)))
1716    ok = VRMethod( "TDL_1", "SetTabText", 4, strip(VRMethod( "TDL_1", "GetTabText", 4)))
1717    ok = VRMethod( "TDL_1", "SetTabText", 5, strip(VRMethod( "TDL_1", "GetTabText", 5)))
1718return
1719
1720/*:VRX         _TimeSync
1721*/
1722_TimeSync:
1723    if options.!debug == 1 then say time()' _TimeSync started, "'options.!timesrv'"'
1724    TimeMsg.1 = NLVGetMessage(141)' 'time()
1725    if options.!timesrv <> '' then do
1726        say     '  'samba.!netexe' time set -S 'options.!timesrv
1727        address cmd samba.!netexe' time set -S 'options.!timesrv
1728    end
1729    else do
1730        say     '  'samba.!netexe' time set'
1731        address cmd samba.!netexe' time set'
1732    end
1733    options.!timesync = ''
1734    TimeMsg.2 = NLVGetMessage(142)' 'time()
1735    TimeMsg.0 = 2
1736
1737    Buttons.1 = NLVGetMessage(2)
1738    Buttons.0 = 1
1739    id = VRMessageStem( VRWindow(), TimeMsg. , NLVGetMessage(129) , "Information", "Buttons.", 1, 1 )
1740    if options.!debug == 1 then say time()' _TimeSync done'
1741return
1742
1743/*:VRX         _UpdateObject
1744*/
1745_UpdateObject: procedure
1746    Object   = arg(1)
1747    ObjValue = arg(2)
1748    if VRGet(Object,"Value") <> ObjValue then ok = VRset(Object,"Value",ObjValue)
1749return
1750
1751/*:VRX         _UserCredUpdate
1752*/
1753_UserCredUpdate:
1754    if options.!debug == 1 then say time()' _UserCredUpdate started'
1755    credentials.!username = VRGet("EF_USER","Value")
1756    credentials.!password = VRGet("EF_PASSWORD","Value")
1757
1758    if pos("4OS2", value("COMSPEC",,"OS2ENVIRONMENT")) = 1 | pos(left(credentials.!password,1),'01234567890') > 0
1759        then UserCred = '--user='Credentials.!username'%%'Credentials.!password
1760        else UserCred = '--user='Credentials.!username'%'Credentials.!password
1761
1762    if options.!storecreds = 1 & \(UserCred   = 'USERCRED'   | UserCred = '' | UserCred = '--user=%' | UserCred = '--user=%%' | UserCred = '-N') then do
1763        ok = _ucSetUc()
1764        ok = VRSet("Pict_PWINMEM","PicturePath","#36")
1765        if options.!debug == 1 then call beep 2400, 10
1766    end
1767    else do
1768        if options.!debug == 1 then call beep 200, 20
1769        ok = VRSet("Pict_PWINMEM","PicturePath","#37")
1770    end
1771    if options.!debug == 1 then say time()' _UserCredUpdate done'
1772return
1773
1774/*:VRX         CB_client_lanman_auth_Click
1775*/
1776CB_client_lanman_auth_Click:
1777    advanced.!smbconfchanged = 1
1778return
1779
1780/*:VRX         CB_client_plaintext_auth_Click
1781*/
1782CB_client_plaintext_auth_Click:
1783    advanced.!smbconfchanged = 1
1784return
1785
1786/*:VRX         CB_client_use_spnego_Click
1787*/
1788CB_client_use_spnego_Click:
1789    advanced.!smbconfchanged = 1
1790return
1791
1792/*:VRX         CB_client_use_spnego_principal_Click
1793*/
1794CB_client_use_spnego_principal_Click:
1795    advanced.!smbconfchanged = 1
1796return
1797
1798/*:VRX         CB_DEBUG_Click
1799*/
1800CB_DEBUG_Click:
1801
1802return
1803
1804/*:VRX         CB_LOGGING_Click
1805*/
1806CB_LOGGING_Click:
1807    if VRFileExists(SysBootDrive()'\ndpsmb.dbg') then
1808        ok = SysFileDelete(SysBootDrive()'\ndpsmb.dbg')
1809    else do
1810        call lineout SysBootDrive()'\ndpsmb.dbg','EVFS debug flag file'
1811        ok = stream(SysBootDrive()'\ndpsmb.dbg','c','close')
1812    end
1813
1814    CALL VRSet "CB_LOGGING", "Set", VRFileExists(SysBootDrive()'\ndpsmb.dbg')
1815return
1816
1817/*:VRX         CB_MOUNT_Change
1818*/
1819CB_MOUNT_Change:
1820    if options.!debug == 1 then say time()' '||"CB_MOUNT_Change started"
1821
1822    mount = VRGet("CB_MOUNT", "Value")
1823
1824    /* Catch empty mount type error */
1825    if mount = "" then do
1826        if mtype.1 <> "" then ok = VRSet("CB_MOUNT", "Value", mtype.1)
1827        if options.!debug == 1 then say time()' '||"CB_MOUNT_Change aborted"
1828        return
1829    end
1830
1831    SELECT
1832        WHEN mount == mtype.1 THEN DO
1833            CALL VRSet "DT_SHARE",   "Visible", 1
1834            CALL VRSet "EF_SHARE",   "Visible", 1
1835            CALL VRSet "DT_SERVER",  "Visible", 1
1836            CALL VRSet "EF_SERVER",  "Visible", 1
1837            CALL VRSet "CHK_MTYPE",  "Visible", 0
1838            CALL NLVSetText "DT_NETWORK", "Caption", 21
1839        END
1840        WHEN mount == mtype.2 THEN DO
1841            CALL VRSet "DT_SHARE",   "Visible", 0
1842            CALL VRSet "EF_SHARE",   "Visible", 0
1843            CALL VRSet "DT_SERVER",  "Visible", 1
1844            CALL VRSet "EF_SERVER",  "Visible", 1
1845            CALL VRSet "CHK_MTYPE",  "Visible", 0
1846            CALL NLVSetText "DT_NETWORK", "Caption", 21
1847        END
1848        WHEN mount == mtype.3 THEN DO
1849            CALL VRSet "DT_SHARE",   "Visible", 0
1850            CALL VRSet "EF_SHARE",   "Visible", 0
1851            CALL VRSet "DT_SERVER",  "Visible", 0
1852            CALL VRSet "EF_SERVER",  "Visible", 0
1853            CALL VRSet "CHK_MTYPE",  "Visible", 0
1854            CALL NLVSetText "DT_NETWORK", "Caption", 21
1855        END
1856        WHEN mount == mtype.4 THEN DO
1857            CALL VRSet "DT_SHARE",   "Visible", 0
1858            CALL VRSet "EF_SHARE",   "Visible", 0
1859            CALL VRSet "DT_SERVER",  "Visible", 0
1860            CALL VRSet "EF_SERVER",  "Visible", 0
1861            CALL VRSet "CHK_MTYPE",  "Visible", 1
1862            CALL NLVSetText "DT_NETWORK", "Caption", 22
1863        END
1864        OTHERWISE DO
1865            id = VRMessage( "", 'unknown mount type here >>'mount'<< mtype1=>>'mtype.1'<<', "Mount change error", "E", )
1866        END
1867    END
1868    if options.!debug == 1 then say time()' '||"CB_MOUNT_Change done"
1869RETURN
1870
1871/*:VRX         CN_CONDET_Click
1872*/
1873CN_CONDET_Click:
1874    /* ok = VRset("DT_StatusBar","Caption", VRGet("Main", "HintText")) */
1875return
1876
1877/*:VRX         CN_CONDET_ContextMenu
1878*/
1879CN_CONDET_ContextMenu:
1880    rh = VRInfo('Record')
1881    if VRMethod( "CN_CONDET", "ValidateRecord", rh) <> 1 then return
1882
1883    /* Hide all context menu entries */
1884    ok = VRSet("Menu_Selected_Remove",           "Visible", 0) /* CN_CONDET */
1885    ok = VRSet("Menu_Selected_Retry",            "Visible", 0) /* CN_CONDET */
1886    ok = VRSet("Menu_Selected_Connect",          "Visible", 0) /* CN_SMBTREE */
1887    ok = VRSet("Menu_Selected_Sep1",             "Visible", 0) /* CN_SMBTREE */
1888    ok = VRSet("Menu_Selected_Info",             "Visible", 0) /* CN_SMBTREE */
1889    ok = VRSet("Menu_Selected_TimeSync",         "Visible", 0) /* CN_SMBTREE */
1890    ok = VRSet("Menu_Selected_Refresh",          "Visible", 0) /* CN_SMBTREE */
1891    ok = VRSet("Menu_Selected_Default_Workgroup","Visible", 0) /* CN_SMBTREE */
1892
1893    /* This is the place to enable specific context menu entries */
1894    ok = VRMethod( "CN_CONDET", "GetRecordList", "All", "records." )
1895    ok = VRSet("Menu_Selected_Remove", "Visible",  (records.0 <> 0))
1896    ok = VRSet("Menu_Selected_Retry",  "Visible",  (records.0 <> 0))
1897
1898    if VRMethod( "CN_CONDET", "GetFieldData", rh, CD.StatusFH) = icons.!passive then do
1899        ok = VRSet("Menu_Selected_Retry",  "Enabled",1)
1900        ok = VRSet("Menu_Selected_Remove", "Enabled",1)
1901    end
1902    ok = VRMethod( "Menu_Selected", "Popup", , , "", "" )
1903return
1904/*:VRX         CN_CONDET_DragStart
1905*/
1906CN_CONDET_DragStart:
1907
1908    obj = VRInfo( "object" )
1909    ok = VRMethod( "CN_CONDET", "GetRecordList", "SourceOrSelected", "selrec." )
1910    if selrec.0 = 0 then return
1911
1912    Icon = VRMethod("CN_CONDET", "GetRecordAttr", selrec.1, "Icon")
1913
1914    if Icon = icons.!printer then do /* Printers not supported at the moment */
1915        call beep 4800,100
1916        CALL VRMessage 'Main', NLVGetMessage( 62 ), NLVGetMessage( 5 ), 'E'
1917    end
1918    else call VRMethod obj, 'StartDrag'
1919return
1920
1921/*:VRX         CN_CURRENT_Click
1922*/
1923CN_CURRENT_Click:
1924    if options.!debug == 1 then say time()' CN_CURRENT_Click started'
1925    /* ok = VRset("DT_StatusBar","Caption", VRGet("Main", "HintText")) */
1926
1927    /* Herwig B. */
1928    CALL VRSet "TM_AUTOCLOSE", "ENABLED", 0
1929    ok = VRSet("Menu_Selected_Default_Workgroup","Visible", 0)
1930
1931    rh = VRInfo('Record')
1932    if VRMethod( "CN_CURRENT", "ValidateRecord", rh) <> 1 then return
1933
1934    data = VRMethod("CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
1935    options.currentdata = data
1936
1937    /* ok = VRset("DT_StatusBar","Caption", data' - 'VRGet("Main", "HintText")) */
1938
1939    PARSE VAR data p_node ';' p_mounts ';' p_string
1940
1941    if options.!debug == 1 then do
1942        say '  data        = "'data'"'
1943        say '  p_node      = "'p_node'"'
1944        say '  p_mounts    = "'p_mounts'"'
1945        say '  p_string    = "'p_string'"'
1946    end
1947
1948    if p_string = ""
1949        then infotext = fs.!name' 'fs.!version
1950        else infotext = p_string
1951
1952    if infotext = "" then infotext = " "
1953    CALL VRSet "CN_CURRENT", "Caption", infotext
1954    CALL VRSet "CN_CURRENT", 'HintText',infotext
1955
1956    IF p_mounts > 0 THEN DO
1957        CALL VRSet 'PB_UNMOUNT',               'Enabled', 1
1958        CALL VRSet 'MENU_CONTEXT_UNMOUNT',     'Visible', 1
1959
1960        if pos("*",p_string) > 0 | pos(";",p_string) > 0
1961            then CALL VRSet 'MENU_CONTEXT_EDIT', 'Visible', 0
1962            else CALL VRSet 'MENU_CONTEXT_EDIT', 'Visible', 1
1963    END
1964    ELSE DO
1965        CALL VRSet 'PB_UNMOUNT',               'Enabled', 0
1966        CALL VRSet 'MENU_CONTEXT_UNMOUNT',     'Visible', 0
1967        CALL VRSet 'MENU_CONTEXT_EDIT',        'Visible', 0
1968    END
1969
1970    parent = VRMethod("CN_CURRENT", 'GetRecordAttr', rh, 'Parent')
1971
1972    IF parent == '' THEN DO
1973        CALL VRSet 'PB_DETACH',               'Enabled', 1
1974        CALL VRSet 'MENU_CONTEXT_DETACH',     'Visible', 1
1975        CALL VRSet 'MENU_CONTEXT_OPEN',       'Visible', 1
1976/*      CALL VRSet 'MENU_CONTEXT_SEP1',       'Visible', 1 */
1977        CALL VRSet 'MENU_CONTEXT_DETACH_ALL', 'Visible', 1
1978/*      CALL VRSet 'MENU_CONTEXT_SEP2',       'Visible', 1 */
1979
1980    END
1981    ELSE DO
1982        CALL VRSet 'PB_DETACH',               'Enabled', 0
1983        CALL VRSet 'MENU_CONTEXT_DETACH',     'Visible', 0
1984        CALL VRSet 'MENU_CONTEXT_OPEN',       'Visible', 0
1985/*      CALL VRSet 'MENU_CONTEXT_SEP1',       'Visible', 0 */
1986        CALL VRSet 'MENU_CONTEXT_DETACH_ALL', 'Visible', 0
1987/*      CALL VRSet 'MENU_CONTEXT_SEP2',       'Visible', 0 */
1988    END
1989
1990    parse var p_string p_workgroup'\\'p_server'\'p_share
1991
1992    p_workgroup = strip(p_workgroup,'T',':')
1993
1994    if options.!debug == 1 then do
1995        say '  p_workgroup = "'p_workgroup'"'
1996        say '  p_server    = "'p_server'"'
1997        say '  p_share     = "'p_share'"'
1998    end
1999
2000    p_server = translate(p_server)
2001
2002    ok = VRSet("EF_NETWORK","Value", p_workgroup)
2003    if p_workgroup <> "" then do
2004        wgh = _GetMachineHandle(p_workgroup)
2005        if wgh = "" then wgh = _AddWorkGroup(p_workgroup)
2006        call _UpdateObject "EF_SERVER", p_server
2007        mh = _GetMachineHandle(p_server)
2008        if mh = "" & p_server <> "*" then do
2009            mh = _AddSleepingMachine(p_server,'',wgh)
2010            machine = p_server
2011            call _RefreshShares
2012        end
2013        ok = VRSet("EF_Share","Value", p_share)
2014        select
2015            when p_workgroup = "*" then ok = VRSet("CB_MOUNT","Value", mtype.4)
2016            when p_server    = "*" then ok = VRSet("CB_MOUNT","Value", mtype.3)
2017            when p_share     = "*" then ok = VRSet("CB_MOUNT","Value", mtype.2)
2018            otherwise ok = VRSet("CB_MOUNT","Value", mtype.1)
2019        end
2020    end
2021    if options.!debug == 1 then say time()' CN_CURRENT_Click done'
2022RETURN
2023
2024/*:VRX         CN_CURRENT_ContextMenu
2025*/
2026CN_CURRENT_ContextMenu: /* PROCEDURE EXPOSE existrec. options. icons. fs. */
2027    if options.!debug == 1 then say time()' '||"CN_CURRENT_ContextMenu started"
2028
2029    CALL VRSet "TM_AUTOCLOSE", "ENABLED", 0
2030
2031    rh = VRInfo('Record')
2032
2033    /* we have to check whether the record still exists because under certain
2034       circumstances the event routine is executed after the record was already
2035       removed */
2036    if VRMethod( "CN_CURRENT", "ValidateRecord", rh) <> 1 then do
2037        if options.!debug == 1 then say time()' '||"CN_CURRENT_ContextMenu aborted"
2038        return
2039    end
2040
2041    data = VRMethod("CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
2042    PARSE VAR data p_node ';' p_mounts ';' p_string
2043
2044    if options.!debug == 1 then do
2045        say '  data =     "'data'"'
2046        say '  p_node =   "'p_node'"'
2047        say '  p_mounts = "'p_mounts'"'
2048        say '  p_string = "'p_string'"'
2049    end
2050/*
2051    infotext = p_node
2052    DO i = 1 TO p_mounts
2053        infotext = infotext ' ['p_string']'
2054    END
2055*/
2056    if p_string = ""
2057        then infotext = fs.!name' 'fs.!version
2058        else infotext = p_string
2059
2060    if infotext = "" then infotext = " "
2061    CALL VRSet "CN_CURRENT", "Caption", infotext
2062    CALL VRSet "CN_CURRENT", 'HintText',infotext
2063
2064    CALL VRSet 'MENU_CONTEXT_OPEN', 'Visible', 1
2065/*  CALL VRSet 'MENU_CONTEXT_SEP1', 'Visible', 1
2066    CALL VRSet 'MENU_CONTEXT_SEP2', 'Visible', 1
2067    CALL VRSet 'MENU_CONTEXT_SEP3', 'Visible', 1 */
2068    CALL VRSet 'Menu_Context_Open_Default', "Visible", 1
2069
2070    IF p_mounts > 0 THEN DO
2071        CALL VRSet 'PB_UNMOUNT',               'Enabled', 1
2072        CALL VRSet 'MENU_CONTEXT_UNMOUNT',     'Visible', 1
2073
2074        if pos("*",p_string) > 0 | pos(";",p_string) > 0 then CALL VRSet 'MENU_CONTEXT_EDIT', 'Visible', 0
2075                                 else CALL VRSet 'MENU_CONTEXT_EDIT', 'Visible', 1
2076    END
2077    ELSE DO
2078        CALL VRSet 'PB_UNMOUNT',               'Enabled', 0
2079        CALL VRSet 'MENU_CONTEXT_UNMOUNT',     'Visible', 0
2080        CALL VRSet 'MENU_CONTEXT_EDIT',        'Visible', 0
2081    END
2082
2083    parent = VRMethod("CN_CURRENT", 'GetRecordAttr', rh, 'Parent')
2084
2085    IF parent == '' THEN DO
2086        CALL VRSet 'PB_DETACH',               'Enabled', 1
2087        CALL VRSet 'MENU_CONTEXT_DETACH',     'Visible', 1
2088        CALL VRSet 'MENU_CONTEXT_OPEN',       'Visible', 1
2089/*      CALL VRSet 'MENU_CONTEXT_SEP1',       'Visible', 1 */
2090        CALL VRSet 'MENU_CONTEXT_DETACH_ALL', 'Visible', 1
2091/*      CALL VRSet 'MENU_CONTEXT_SEP2',       'Visible', 1 */
2092/*      CALL VRSet 'MENU_CONTEXT_SEP3',       'Visible', 1 */
2093    END
2094    ELSE DO
2095        CALL VRSet 'PB_DETACH',               'Enabled', 0
2096        CALL VRSet 'MENU_CONTEXT_DETACH',     'Visible', 0
2097        CALL VRSet 'MENU_CONTEXT_OPEN',       'Visible', 0
2098/*      CALL VRSet 'MENU_CONTEXT_SEP1',       'Visible', 0 */
2099        CALL VRSet 'MENU_CONTEXT_DETACH_ALL', 'Visible', 0
2100/*      CALL VRSet 'MENU_CONTEXT_SEP2',       'Visible', 0 */
2101/*      CALL VRSet 'MENU_CONTEXT_SEP3',       'Visible', 0 */
2102    END
2103
2104    ok = VRMethod( "Menu_Context", "Popup", , , "", "" )
2105    if options.!debug == 1 then say time()' '||"CN_CURRENT_ContextMenu done"
2106return
2107
2108/*:VRX         CN_CURRENT_DoubleClick
2109*/
2110CN_CURRENT_DoubleClick:
2111    if options.!debug == 1 then say time()' '||"CN_CURRENT_DoubleClick started"
2112
2113    CALL VRSet "TM_AUTOCLOSE", "ENABLED", 0
2114
2115    rh = VRInfo('Record')
2116
2117    /* we have to check whether the record still exists because under certain
2118       circumstances the event routine is executed after the record was already
2119       removed */
2120    if VRMethod( "CN_CURRENT", "ValidateRecord", rh) <> 1 then do
2121        if options.!debug == 1 then say time()' '||"CN_CURRENT_DoubleClick aborted"
2122        return
2123    end
2124
2125    data = VRMethod("CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
2126    PARSE VAR data p_node ';' p_mounts ';' p_string
2127
2128    if options.!debug == 1 then do
2129        say '  data =     "'data'"'
2130        say '  p_node =   "'p_node'"'
2131        say '  p_mounts = "'p_mounts'"'
2132        say '  p_string = "'p_string'"'
2133    end
2134    call Menu_Context_Open_Default_Click
2135
2136    if options.!debug == 1 then say time()' '||"CN_CURRENT_DoubleClick done"
2137return
2138
2139/*:VRX         CN_CURRENT_DragDrop
2140*/
2141CN_CURRENT_DragDrop:
2142    if options.!debug == 1 then say time()' CN_CURRENT_DragDrop started'
2143    ok = VRSet("TM_RefreshCurrentDisplay","Enabled", 0)
2144    if options.!debug == 1 then say "  settings.!network = "settings.!network
2145
2146    p_workgroup = ''
2147    p_server    = ''
2148    p_share     = ''
2149
2150    srcFile = VRInfo( "SourceFile" )
2151    srcCtn  = VRInfo( "SourceObject" )
2152    srcRec  = VRInfo( "SourceRecord" )
2153    trgCtn  = VRInfo( "TargetObject" )
2154    trgRec  = VRInfo( "TargetRecord" )
2155
2156    if options.!debug == 1 then do
2157        say '  srcFile     = "'srcFile'"'
2158        say '  srcCtn      = "'srcCtn'"'
2159        if srcCtn <> "" then say '  srcCtn name = "'VRGet(srcCtn,'Name')'"'
2160        say '  srcRec      = "'srcRec'"'
2161        say '  trgCtn      = "'trgCtn'"'
2162        if trgCtn <> "" then say '  trgCtn name = "'VRGet(trgCtn,'Name')'"'
2163        say '  trgRec      = "'trgRec'"'
2164    end
2165
2166    if srcFile <> "" then do /* A file was dropped onto the container - attempt to load it */
2167        if options.!debug == 1 then say '  Possible profile dropped: "'srcFile'"'
2168
2169        /* was it really a profile ? */
2170        if translate(VRParseFileName(srcFile,'E')) = translate(fs.!profileext) then do /* Yes - load it! */
2171            options.!autoload = 1
2172            Profile = srcFile
2173            call Menu_File_Load_Click
2174            ok = VRSet("EF_NETWORK","Value",options.!workgroup)
2175        end
2176        else do /* No - barf! */
2177            buttons.0 = 1
2178            buttons.1 = NLVGetMessage(9)
2179            ok = VRMessage('Main', NLVGetMessage(103,srcFile ), NLVGetMessage(5), 'E','buttons.')
2180        end
2181        if options.!debug == 1 then say time()' CN_CURRENT_DragDrop done (load profile)'
2182        return
2183    end
2184
2185    ok = VRMethod("CB_MOUNT", "GetStringList", "ShareLevels." )
2186
2187    if VRGet(srcCtn,'Name') = "CN_CONDET" then do
2188        p_mpoint    = VRMethod("CN_CONDET", "GetFieldData", srcRec, CD.MpointFH)
2189
2190        p_workgroup = VRMethod("CN_CONDET", "GetFieldData", srcRec, cd.workgrpFH  )
2191        p_server    = VRMethod("CN_CONDET", "GetFieldData", srcRec, CD.ServerFH)
2192        p_share     = VRMethod("CN_CONDET", "GetFieldData", srcRec, CD.ShareFH)
2193        p_user      = VRMethod("CN_CONDET", "GetFieldData", srcRec, CD.UserFH)
2194        p_password  = x2c(VRMethod("CN_CONDET", "GetFieldData", srcRec, CD.SpasswordFH))
2195
2196        ShareLevel = 1
2197        if p_share     = "" then ShareLevel = 2
2198        if p_server    = "" then ShareLevel = 3
2199        if p_workgroup = "" then ShareLevel = 4
2200
2201        ok = VRSet("CB_MOUNT",  "Selected", Sharelevel )
2202        ok = VRset("CB_MOUNT",  "Value",    mtype.sharelevel)
2203
2204        call _UpdateObject "EF_SERVER", p_server
2205        ok = VRset("EF_SHARE",    "Value", p_share)
2206        ok = VRset("EF_NETWORK",  "Value", p_workgroup)
2207        ok = VRset("EF_USER",     "Value", p_user)
2208        ok = VRset("EF_PASSWORD", "Value", p_password)
2209
2210        parse var p_mpoint p_drv '\' p_dir
2211
2212        p_dir = strip(p_dir,'T','\')
2213
2214        ok = VRset("CB_DRIVES",    "Value", p_drv)
2215        ok = VRset("EF_DIRECTORY", "Value", p_dir)
2216    end /* Drag from CN_CONDET */
2217
2218    else do /* Drag from CN_SMBTREE */
2219        call _GetSMBObjectProperties srcRec
2220        select
2221            when SMBObj.udatatype = "WORKGROUP" then do
2222                say "Workgroup dragged!"
2223                p_workgroup = SMBObj.resname
2224                p_server    = ""
2225                p_share     = ""
2226
2227                ShareLevel = 3
2228            end
2229            when SMBObj.udatatype = "SERVER" then do
2230                say "Server dragged!"
2231                if SMBObj.parentrh <> "" then do /* detect server without workgroup */
2232                    p_workgroup = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.parentrh, "Caption")
2233                end
2234                p_server    = SMBObj.resname
2235                p_share     = ""
2236
2237                ShareLevel = 2
2238            end
2239            when SMBObj.udatatype = "DISK" then do
2240                say "Shared disk dragged!"
2241                if SMBObj.gparentrh <> "" then do /* detect share on a server without workgroup */
2242                    p_workgroup = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.gparentrh, "Caption")
2243                end
2244                p_server    = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.parentrh,  "Caption")
2245                parse var p_server p_server '0D0A'x .
2246                p_share     = SMBObj.resname
2247
2248                ShareLevel = 1
2249            end
2250            otherwise nop /* Printer */
2251        end
2252        ok = VRSet("EF_NETWORK","Value",p_workgroup)
2253        call _UpdateObject "EF_SERVER", p_server
2254        ok = VRSet("EF_Share","Value",  p_share)
2255    end /* Drag from CN_SMBTREE */
2256
2257    if options.!debug == 1 then do
2258        say 'p_workgroup = "'p_workgroup'"'
2259        say 'p_server    = "'p_server'"'
2260        say 'p_share     = "'p_share'"'
2261    end
2262
2263    ok = VRSet( "CB_MOUNT", "Selected", Sharelevel )
2264
2265    settings.!network = VRGet("EF_NETWORK","Value")
2266    call CB_MOUNT_Change
2267
2268    if trgRec = "" then do
2269        ok = VRMethod("CB_DRIVES",  "GetStringList", "freedrives.")
2270        if freedrives.0 > 0
2271            then ok = VRSet("CB_DRIVES","Value", freedrives.1)
2272            else ok = VRSet("CB_DRIVES","Value", "")
2273
2274        ok = VRSet("EF_DIRECTORY","Value", "")
2275    end
2276    else do
2277        TargetString = VRMethod(trgCtn, "GetRecordAttr", trgRec, "Caption")
2278
2279        parTrgRH = VRMethod(trgCtn, "GetRecordAttr", trgRec, "Parent")
2280
2281        do while parTrgRH <> ""
2282            partrgCapt = VRMethod(trgCtn, "GetRecordAttr", partrgRH, "Caption")
2283            TargetString = partrgCapt||'\'||TargetString
2284            parTrgRH = VRMethod(trgCtn, "GetRecordAttr", partrgRH , "Parent")
2285        end
2286        say 'TargetString = "'TargetString'"'
2287        ok = VRSet("CB_DRIVES","Value", left(TargetString,2))
2288        ok = VRSet("EF_DIRECTORY","Value", substr(TargetString,4))
2289    end
2290
2291    window = VRLoadSecondary( "SW_MOUNTPOINT", "W" )
2292    if VRGet("CB_DRIVES","Value") = "" then return
2293
2294    window = VRLoadSecondary( "SW_LOGIN", "W" )
2295    if credentials.!entered = 1 then call PB_MOUNT_CLICK
2296
2297    if VRGet(srcCtn,'Name') = "CN_CONDET" & VRMethod( "CN_CONDET", "ValidateRecord", srcRec) = 1 then do
2298        if VRMethod("CN_CONDET", "GetRecordAttr", srcRec, "Icon") = icons.!passive then ok = VRMethod( "CN_CONDET", "RemoveRecord", srcRec)
2299    end
2300    if options.!debug == 1 then say time()' CN_CURRENT_DragDrop done'
2301return
2302/*:VRX         CN_SMBTREE_Click
2303*/
2304CN_SMBTREE_Click:
2305    if options.!debug == 1 then say time()' CN_SMBTREE_Click started'
2306    /* ok = VRset("DT_StatusBar","Caption", VRGet("Main", "HintText")) */
2307
2308    call _dropdeprecated
2309    call _GetSmbObjectProperties VRInfo('Record')
2310    call _ContextMenuSelectedSet
2311
2312    ok = VRset("DT_Statusbar", "Caption", SMBObj.udatamsg)
2313
2314    if options.!debug == 1 then say time()' CN_SMBTREE_Click done'
2315return
2316/*:VRX         CN_SMBTREE_ContextMenu
2317*/
2318CN_SMBTREE_ContextMenu:
2319    if options.!debug == 1 then say time()' CN_SMBTREE_ContextMenu started'
2320
2321    call _dropdeprecated
2322    call _GetSmbObjectProperties VRInfo('Record')
2323
2324    call _ContextMenuSelectedSet
2325    ok = VRMethod( "Menu_Selected", "Popup", , , "", "" )
2326
2327    if options.!debug == 1 then say time()' CN_SMBTREE_ContextMenu done'
2328return
2329/*:VRX         CN_SMBTREE_DoubleClick
2330*/
2331CN_SMBTREE_DoubleClick:
2332    if options.!debug == 1 then say time()' CN_SMBTREE_DoubleClick started'
2333
2334    call _dropdeprecated
2335    call _GetSmbObjectProperties VRInfo('Record')
2336
2337/*  if options.!debug == 1 then say time()' CN_SMBTREE_DoubleClick done'
2338return */
2339    /* Enable last 2 lines for 2.0.x (to disable on the fly browsing) */
2340
2341    if options.!debug == 1 then say '  Browsing "'SMBObj.udatatype'"'
2342
2343    If SMBObj.udatatype = "DIRECTORY" then do
2344        BrowsePath = _browsebuildpath(SMBObj.rh)
2345
2346        call _BrowseResetObject(SmbObj.rh)
2347
2348        parse var browsepath '\\'machine'\'sharename '\' browsepath
2349        browsepath = browsepath'\*'
2350
2351        call _BrowseDirectory
2352    end
2353
2354    If SMBObj.udatatype = "FILE" then do
2355        BrowsePath = _browsebuildpath(SMBObj.rh)
2356        call _BrowseResetObject(SmbObj.rh)
2357
2358        parse var browsepath '\\'machine'\'sharename '\' browsepath
2359
2360        OpenOk = _browseobjectopen(machine,sharename,browsepath)
2361
2362        if \OpenOK then do
2363            say "  Not connected - trying to connect"
2364            ok = VRMethod( "CN_SMBTREE", "SetRecordAttr", sharerh, "Selected", 1)
2365            call PB_SMBTREE_CONNECT_Click
2366            ok = VRMethod( "CN_SMBTREE", "SetRecordAttr", SMBObj.rh, "Selected", 1)
2367
2368            OpenOk = _browseobjectopen(machine,sharename,browsepath)
2369
2370            if \OpenOk then do
2371                say "  Not connected - cannot open - aborting!"
2372            end
2373        end
2374    end
2375
2376    if SMBObj.udatatype = "DISK" then do
2377        machine  = VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.parentrh,"Caption")
2378        parse var machine machine '0D0A'x .
2379        machine = strip(machine)
2380
2381        call _BrowseResetObject(SmbObj.rh)
2382
2383        sharename = SMBObj.resname
2384        BrowsePath = ""
2385
2386        call _BrowseDirectory
2387    end
2388    if options.!debug == 1 then say time()' CN_SMBTREE_DoubleClick done'
2389return
2390/*:VRX         CN_SMBTREE_DragFile
2391*/
2392CN_SMBTREE_DragFile:
2393    if options.!debug == 1 then say time()' CN_SMBTREE_DragFile started'
2394
2395    obj = VRInfo( "object" )
2396
2397    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "SourceOrSelected", "SelRH." )
2398    if SelRH.0 = 0 then do
2399        if options.!debug == 1 then say time()' CN_SMBTREE_DragStart aborted'
2400        return
2401    end
2402
2403    call _dropdeprecated
2404    call _GetSMBObjectProperties SelRH.1
2405
2406    select
2407        when SMBObj.udatatype = "WORKGROUP" | SMBObj.udatatype = "SERVER" | SMBObj.udatatype = "DISK" then do
2408            call VRMethod obj, 'StartDrag'
2409        end
2410        when SMBObj.udatatype = "PRINTER" then do
2411            CALL VRMessage 'Main', NLVGetMessage( 62 ), NLVGetMessage( 5 ), 'E'
2412        end
2413        otherwise nop /* FILE DIRECTORY */
2414    end
2415
2416    if options.!debug == 1 then say time()' CN_SMBTREE_DragFile done'
2417return
2418
2419/*:VRX         CN_SMBTREE_DragStart
2420*/
2421CN_SMBTREE_DragStart:
2422    if options.!debug == 1 then say time()' CN_SMBTREE_DragStart started'
2423
2424    obj = VRInfo( "object" )
2425
2426    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "SourceOrSelected", "SelRH." )
2427    if SelRH.0 = 0 then do
2428        if options.!debug == 1 then say time()' CN_SMBTREE_DragStart aborted'
2429        return
2430    end
2431
2432    call _dropdeprecated
2433    call _GetSMBObjectProperties SelRH.1
2434
2435    select
2436        when SMBObj.udatatype = "WORKGROUP" | SMBObj.udatatype = "SERVER" | SMBObj.udatatype = "DISK" then do
2437            call VRMethod obj, 'StartDrag'
2438        end
2439        when SMBObj.udatatype = "PRINTER" then do
2440            CALL VRMessage 'Main', NLVGetMessage( 62 ), NLVGetMessage( 5 ), 'E'
2441        end
2442        otherwise nop /* FILE DIRECTORY */
2443    end
2444
2445    if options.!debug == 1 then say time()' CN_SMBTREE_DragStart done'
2446return
2447/*:VRX         CreateObject
2448*/
2449CreateObject: procedure
2450    Parse Arg Class, Title, Location, Setup, Collision
2451    /* say 'Creating ['Title']' */
2452say Setup
2453    rc = SysCreateObject( Class, Title, Location, Setup, Collision )
2454    If rc <> 1 Then do
2455        Msg.Text = ' > failed to create ['Title' | 'Class'] at location ['Location']'
2456        Msg.Type = 'Error'
2457        say Msg.Text
2458    end
2459return rc
2460/*:VRX         DT_STATUSBAR_ContextMenu
2461*/
2462DT_STATUSBAR_ContextMenu:
2463    ok = VRSet("DT_STATUSBAR","Caption", VRGet("Main", "HintText"))
2464return
2465
2466/*:VRX         EF_PASSWORD1_KeyPress
2467*/
2468EF_PASSWORD1_KeyPress:
2469    if options.!debug == 1 then say time()' EF_PASSWORD1_KeyPress started'
2470    obj = VRInfo( "Object" )
2471    keystr = VRGet( obj, "KeyString" )
2472/*  say keystr */
2473    select
2474        when keystr = "{Enter}" then call PB_LOGIN_OK_Click
2475        when keystr = "{Newline}" then call PB_LOGIN_OK_Click
2476        when keystr  = "{Esc}" then call PB_LOGIN_CANCEL_Click
2477        otherwise nop
2478    end
2479    if options.!debug == 1 then say time()' EF_PASSWORD1_KeyPress done'
2480return
2481
2482/*:VRX         EF_PASSWORD_Change
2483*/
2484EF_PASSWORD_Change:
2485    Now = VRGet("EF_PASSWORD","value")
2486    if Now = "" | Now = LastPassword then return
2487    ok = SysSleep(1)
2488    LastPassword = Now
2489    if Now <> VRGet("EF_PASSWORD","value") then return
2490    call _UserCredUpdate
2491return
2492
2493/*:VRX         EF_SERVER_Change
2494*/
2495EF_SERVER_Change:
2496    if options.!debug == 1 then say time()' EF_SERVER_Change started'
2497    Now = VRGet("EF_SERVER","value")
2498
2499    if Now = "" | Now = LastServer then return
2500    ok = SysSleep(2)
2501    if Now <> VRGet("EF_SERVER","value") then return
2502
2503    IF options.!editmode = 1 then return
2504
2505    /* Do nothing for incomplete IP addresses */
2506    if strip(translate(VRGet("EF_SERVER","value"),copies(' ',11),'01234567890.')) = "" then do /* got an IP address */
2507        if \_IsValidIPAddress(VRGet("EF_SERVER","value")) then return /* it is invalid or incomplete */
2508    end
2509
2510    /* do nothing if a workgroup was mounted */
2511    if VRGet("EF_SERVER","value") = "*" then return
2512
2513    machine = VRGet("EF_SERVER","value")
2514    ok = VRSet("EF_SHARE","Value", "")
2515    ok = VRMethod("EF_SHARE","Reset")
2516
2517    rh = _GetMachineHandle(machine)
2518    if rh <> "" then do
2519        call _GetSMBObjectProperties rh
2520        if SMBObj.parentrh = ""
2521            then ok = VRSet("EF_NETWORK","Value", "") /* The workgroup might be unknown at this moment */
2522            else ok = VRSet("EF_NETWORK","Value", VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.parentRH,"Caption"))
2523
2524        call _GetSMBObjectShares SMBObj.rh
2525
2526        if SMBObj.shares.0 > 0 then do
2527            ok = VRMethod("EF_SHARE",   "AddStringList", "SMBObj.shares.")
2528        end
2529    end
2530    else do
2531        call _RefreshWorkgroups
2532        smbtree.!machine = _AddSleepingMachine(machine,"","")
2533        call _UserCredUpdate
2534        call _RefreshShares
2535        ok = VRSet( "CN_smbtree", "Painting", 1  )
2536
2537        ok = VRSet("Main", 'Pointer', '<default>' )
2538        ok = VRSet("CN_smbtree","Enabled", 1)
2539        ok = VRSet("TM_Throbber","Enabled", 0)
2540        ok = VRSet("Pict_Throbber","Visible", 0)
2541    end
2542
2543    LastServer = VRGet("EF_SERVER","value")
2544    if options.!debug == 1 then say time()' EF_SERVER_Change done'
2545return
2546
2547/*:VRX         EF_USER1_KeyPress
2548*/
2549EF_USER1_KeyPress:
2550    if options.!debug == 1 then say time()' EF_USER1_KeyPress started'
2551    obj = VRInfo( "Object" )
2552    keystr = VRGet( obj, "KeyString" )
2553    say keystr
2554    select
2555        when keystr = "{Enter}" then ok = VRMethod( "EF_Password1", "SetFocus" )
2556        when keystr = "{Newline}" then ok = VRMethod( "EF_Password1", "SetFocus" )
2557        when keystr  = "{Esc}" then call PB_LOGIN_CANCEL_Click
2558        otherwise nop
2559    end
2560    if options.!debug == 1 then say time()' EF_USER1_KeyPress done'
2561return
2562
2563/*:VRX         EF_USER_Change
2564*/
2565EF_USER_Change:
2566    Now = VRGet("EF_USER","value")
2567    if Now = "" | Now = LastUser  then return
2568    ok = SysSleep(1)
2569    LastUser = Now
2570    if Now <> VRGet("EF_USER","value") then return
2571    call _UserCredUpdate
2572return
2573
2574/*:VRX         EF_WINS_SERVER_Change
2575*/
2576EF_WINS_SERVER_Change:
2577    advanced.!smbconfchanged = 1
2578return
2579
2580/*:VRX         Fini
2581*/
2582Fini:
2583    window = VRWindow()
2584    call VRSet window, "Visible", 0
2585    drop window
2586return 0
2587
2588/*:VRX         GetChildren
2589*/
2590GetChildren: PROCEDURE EXPOSE existrec. exc options. icons. fs. cd. samba.
2591    if options.!debug == 1 then say time()' GetChildren started'
2592    PARSE ARG node, parec
2593
2594    CALL _Dynamic "CALL "fs.!prefix"RxGetMount node, 'info.', 'points.', 'res.'"
2595
2596    IF info.2 > 0 THEN icon = icons.!active
2597                  ELSE icon = icons.!passive
2598
2599    rh = VRMethod("CN_CURRENT", 'AddRecord', parec, 'Last', info.0, icon )
2600    IF rh == '' | datatype(res.0) <> "NUM" THEN RETURN
2601
2602    exc = exc + 1
2603    existrec.exc = rh
2604    userdata = node';'info.2
2605    DO i = 1 TO res.0
2606        userdata = ParseResourceData( userdata, res.i )
2607    END
2608    if userdata = "UNKNOWN" then ok = VRMethod("CN_CURRENT", 'RemoveRecord', rh)
2609    else do
2610        CALL VRMethod "CN_CURRENT", 'SetRecordAttr', rh, 'UserData', userdata
2611        if options.currentdata = userdata then ok = VRMethod("CN_CURRENT", 'SetRecordAttr', rh, 'Selected', 1)
2612    end
2613
2614    DO i = 1 TO points.0
2615        childnode = node || points.i || '\'
2616        CALL GetChildren childnode, rh
2617    END
2618    if options.!debug == 1 then say time()' GetChildren done'
2619RETURN
2620
2621/*:VRX         GetMountPoints
2622*/
2623GetMountPoints: PROCEDURE EXPOSE existrec. options. icons. fs. cd. samba.
2624    if options.!debug == 1 then say time()' GetMountPoints started'
2625/*  CALL VRSet "CN_CURRENT", 'Painting', 0 */
2626/*  if options.!debug == 1 then say time()' '||"GetMountPoints: SysDriveMap(USED) started"  */
2627    drvs = SysDriveMap('C:', 'USED') /* was "REMOTE" */
2628/*  if options.!debug == 1 then say time()' '||"GetMountPoints: SysDriveMap(USED) done" */
2629    ac = 0
2630    DO i = 1 TO WORDS( drvs )
2631        fs = TRANSLATE( SysFileSystemType( WORD( drvs, i )))
2632        IF fs == fs.!fileSystemtype THEN DO
2633            ac = ac + 1
2634            attached.ac = WORD( drvs, i )
2635        END
2636    END
2637    attached.0 = ac
2638
2639    exc = 0
2640    DO i = 1 TO attached.0
2641        node = attached.i'\'
2642
2643        CALL VRMethod 'CB_DRIVES',  'AddString', attached.i
2644
2645        CALL _Dynamic "CALL "fs.!prefix"RxGetMount node, 'info.', 'points.', 'res.'"
2646
2647        IF info.2 > 0 THEN icon = icons.!drive
2648                      ELSE icon = icons.!drive_inactive
2649
2650        rh = VRMethod("CN_CURRENT", 'AddRecord',, 'Last', attached.i, icon )
2651        IF rh == '' THEN ITERATE
2652
2653        exc = exc + 1
2654        existrec.exc = rh
2655        userdata = node';'info.2
2656        DO j = 1 TO res.0
2657            userdata = ParseResourceData( userdata, res.j )
2658        END
2659/*      if options.!debug == 1 then say '  "'attached.i'" "'userdata'"' */
2660        CALL VRMethod "CN_CURRENT", 'SetRecordAttr', rh, 'UserData', userdata /* , 'FileName', 'TESTER.EVP' */
2661        if options.currentdata = userdata then ok = VRMethod("CN_CURRENT", 'SetRecordAttr', rh, 'Selected', 1)
2662
2663        CALL VRMethod "CN_CURRENT", 'SetRecordAttr', rh, 'Expanded', 1
2664
2665        DO j = 1 TO points.0
2666            childnode = node || points.j || '\'
2667            CALL GetChildren childnode, rh
2668        END
2669
2670    END
2671    existrec.0 = exc
2672/*  CALL VRSet "CN_CURRENT", 'Painting', 1 */
2673    if options.!debug == 1 then say time()' '||"GetMountPoints done"
2674RETURN
2675
2676/*:VRX         Halt
2677*/
2678Halt:
2679    signal _VREHalt
2680return
2681
2682/*:VRX         Init
2683*/
2684Init:
2685/* Herwig */
2686/*  CALL VRSet 'Console', 'WindowListTitle', ''  */
2687
2688    window = VRWindow()
2689    call VRSet window,    "Visible", 0
2690    call VRMethod window, "Activate"
2691    drop window
2692
2693RETURN
2694
2695/*:VRX         LoadFileSysFuncs
2696*/
2697LoadFileSysFuncs:
2698    if options.!debug == 1 then say time()' LoadFileSysFuncs() started'
2699
2700    Fatal = 1
2701    RestartCount = 0
2702    FoundEVFS = 1
2703    FoundND = 1
2704
2705    program = VRGet("Application", "Program")
2706    if program = "" then parse source . . program
2707    say "Program = '"program"'"
2708    program = translate(VRParseFileName(Program,'N'))
2709    say "Program = '"program"'"
2710
2711    if SysSearchPath("PATH", "EVFSCTL.EXE") = "" | program = "SMBGUI" then do
2712        FoundEVFS = 0
2713        ForceNDFS = 1
2714    end
2715
2716CtlRestart:
2717    if \ForceNDFS then signal NoNetDrive
2718
2719ForceNDFS:
2720    if options.!debug == 1 then say '  NDFS check entered'
2721    call RxFuncAdd 'NdRxLoadFuncs', 'NDCALLS', 'NdRxLoadFuncs'
2722    SIGNAL ON SYNTAX NAME NoNetdrive
2723    call NdRxLoadFuncs
2724    FoundND = 1
2725    SIGNAL OFF SYNTAX
2726    fs.!prefix         = 'ND'
2727    fs.!fileSystemtype = "NDFS32"
2728    fs.!profileext     = "ndc"
2729    signal CommonToBothFS
2730NoNetdrive:
2731    if options.!debug == 1 then say '  NDFS not found'
2732    CALL RxFuncAdd 'EvfsRxLoadFuncs', 'EVFSCALL.DLL', 'EvfsRxLoadFuncs'
2733    SIGNAL ON SYNTAX NAME NoEVFSCALL
2734    CALL EvfsRxLoadFuncs
2735    FoundEVFS = 1
2736    SIGNAL OFF SYNTAX
2737    fs.!prefix         = 'EVFS'
2738    fs.!fileSystemtype = "EVFS"
2739    fs.!profileext     = "evp"
2740CommonToBothFS:
2741    if options.!debug == 1 then say '  Common version check'
2742    CALL _Dynamic "fsstat = "fs.!prefix"RxQueryIFS()"
2743    if fsstat = 252 then CALL _Dynamic "Found"fs.!prefix" = 0"
2744
2745    if word(fsstat,1) = '0' then do
2746        PARSE VAR fsstat '0 'fsname fsver fsctl .
2747        fs.!name = fsname
2748        fs.!version = fsver
2749
2750        if options.!debug == 1 then DO
2751            say '  fs.!prefix = 'fs.!prefix
2752            say '  fs.!name   = 'fs.!Name
2753            say '  Version    = 'fsver
2754            say '  fsctl      = 'fsctl
2755        end
2756    end
2757    else do
2758        if FoundND = 0 & FoundEVFS = 0 then do
2759            CALL VRMessage 'Main', 'FATAL: Neither EVFS nor Netdrive found: 'fs.!prefix'RxQueryIFS()='fsstat, NLVGetMessage( 5 ), 'E'
2760            signal Halt
2761        end
2762        signal ForceNDFS
2763    end
2764    IF fsctl \= 1 THEN DO
2765        if ReStartCount = 0 then do
2766            'detach 'fs.!prefix'ctl.exe'
2767            RestartCount = 1
2768            ok = SysSleep(1)
2769            signal CtlRestart
2770        end
2771        else do
2772            CALL VRMessage 'Main', NLVGetMessage( 101 ), NLVGetMessage( 5 ), 'E'
2773            signal Halt
2774        end
2775    END
2776
2777    Fatal = 0
2778
2779    if options.!debug == 1 then say time()' LoadFileSysFuncs() done'
2780return
2781
2782/*:VRX         Main_Close
2783*/
2784Main_Close:
2785    CALL Quit
2786RETURN
2787
2788/*:VRX         Main_Create
2789*/
2790Main_Create:
2791    options.!debug    = 1
2792    if options.!debug == 1 then do
2793        ok = VRRedirectStdIO("ON")
2794        say time()' Main_Create started'
2795    end
2796    else ok = VRRedirectStdIO("OFF")
2797
2798    call _InitTempDir
2799    call _LoadOtherFuncs
2800
2801    call NLVSetup
2802    call _StemsInit
2803
2804    call _TabbedDialogSetup
2805    call _ContainersInit
2806    call _GUIInit
2807
2808    CALL _ParseCommandLine
2809
2810    CALL LoadFileSysFuncs
2811
2812    CALL _CltInit
2813
2814    CALL _INILoad
2815
2816    call _TabFix 1
2817    call SW_ADVANCED_Init_Content
2818    call SW_SMBTREE_Init_Content
2819    call SW_CONDET_Init_Content
2820    call SW_SETTINGS_Init_Content
2821
2822    CALL Refresh
2823
2824    if advanced.!savepassive == 1 then CALL _PassiveLoad
2825
2826    IF options.!timesync == 1 THEN CALL _TimeSync
2827
2828    IF options.!autoload == 1 THEN CALL Menu_File_Load_Click
2829
2830    CALL VRSet "CB_MOUNT",  "Selected", 1
2831    CALL VRSet "CB_DRIVES", "Selected", 1
2832    IF options.!autoclose == 1
2833    THEN CALL TM_AutoClose_Trigger
2834    ELSE do
2835        if advanced.!browseauth == 1 then do
2836            /* FIXME: unclear why we have to do the following 4 lines here */
2837            call SW_SETTINGS_Init
2838            call SW_SETTINGS_Init_Content
2839            call SW_ADVANCED_Init
2840            call SW_ADVANCED_Init_Content
2841
2842            window = VRLoadSecondary( "SW_LOGIN", "W" )
2843            call Main_Resize
2844        end
2845        if advanced.!browseimme == 1 then call PB_SMBTREE_REFRESH_Click
2846    end
2847
2848    if options.!debug == 1 then say time()' Main_Create done'
2849return
2850
2851/*:VRX         Main_KeyPress
2852*/
2853Main_KeyPress:
2854    key = VRGet('Main', 'KeyString')
2855    IF key == '{F5}' THEN CALL Refresh
2856RETURN
2857
2858/*:VRX         Main_Resize
2859*/
2860Main_Resize:
2861    if options.!debug == 1 then say time()' Main_Resize started'
2862    ok = VRset("Main","Painting", 0)
2863
2864    /* Basic measurements */
2865    main_iwidth  = VRGet("Main","InteriorWidth")                /* Width of window client-area */
2866    main_iheight = VRGet("Main","InteriorHeight")               /* Height of window client-area */
2867
2868/** This caused weird resizing glitches, horrible jittering, etc.  Instead,
2869 ** what we now do (further down) is set a minimum size in twips for the right
2870 ** pane, below which it simply stops resizing and switches to clipping.  (The
2871 ** left pane resizes all its controls dynamically anyway.)  This better matches
2872 ** standard application behaviour, and makes resizing behave more smoothly.
2873 *
2874 *  if VRMethod( "Screen", "TwipsToPixels", main_iheight) < 600 then
2875 *      ok = VRSet("Main","Height",VRMethod( "Screen", "PixelsToTwips", 580))
2876 *  if VRMethod( "Screen", "TwipsToPixels", main_iwidth)  < 730 then
2877 *      ok = VRSet("Main","Width", VRMethod( "Screen", "PixelsToTwips", 730))
2878 */
2879
2880    sbar_height  = VRGet("GB_STATUSBAR","Height")               /* Height of status-bar */
2881    split_left   = VRGet("SPLIT_Main","Left")                   /* Position of the left edge of the split-bar */
2882    marginx2     = margin * 2                                   /* Common margin around controls */
2883    pbtn_height  = 400                                          /* Height of the panels' internal button areas */
2884
2885    pane_height  = main_iheight - sbar_height - (margin * 4)    /* Height of a split-bar panel */
2886    lpane_width  = split_left - margin                          /* Width of the left split-bar panel */
2887    rpane_width  = main_iwidth - split_left - 60 - margin       /* Width of the right split-bar panel */
2888
2889    /* Tabbed Dialog = right pane */
2890    ok = VRset("TDL_1", "Top",    marginx2)
2891    ok = VRset("TDL_1", "Left",   split_left + 60)
2892    ok = VRset("TDL_1", "Width",  rpane_width    )
2893    ok = VRset("TDL_1", "Height", pane_height    )
2894
2895    /* Current Panel */
2896    ok = VRSet("GB_CURRENT",  "Visible", 1           )
2897    ok = VRSet("GB_CURRENT",  "Top",     marginx2  )
2898    ok = VRSet("GB_CURRENT",  "Left",    margin      )
2899    ok = VRSet("GB_CURRENT",  "Width",   lpane_width )
2900    ok = VRSet("GB_CURRENT",  "Height",  pane_height )
2901
2902    ok = VRset("GB_CURRENT3", "Top",     margin )
2903    ok = VRset("GB_CURRENT3", "Left",    margin )
2904    ok = VRset("GB_CURRENT3", "Height",  245    )
2905    ok = VRset("GB_CURRENT3", "Width",   lpane_width - marginx2)
2906
2907    ok = VRset("DT_CURRENT", "Top",      8   )
2908    ok = VRset("DT_CURRENT", "Left",     8   )
2909    ok = VRset("DT_CURRENT", "Height",   213 )
2910    ok = VRset("DT_CURRENT", "Width",    (lpane_width - marginx2) - 24 )
2911
2912    ok = VRset("GB_CURRENT2", "Left",   margin                )
2913    ok = VRset("GB_CURRENT2", "Top",    245 + marginx2        )
2914    ok = VRset("GB_CURRENT2", "Width",  lpane_width - marginx2)
2915    ok = VRset("GB_CURRENT2", "Height", pane_height - (margin * 5) - pbtn_height - 245 )
2916
2917    ok = VRset("CN_CURRENT", "Top",     margin )
2918    ok = VRset("CN_CURRENT", "Left",    margin )
2919    ok = VRset("CN_CURRENT", "Width",   VRGet("GB_CURRENT2","Width")  - marginx2)
2920    ok = VRset("CN_CURRENT", "Height",  VRGet("GB_CURRENT2","Height") - marginx2)
2921
2922    ok = VRset("PB_DETACH",  "Left",   margin )
2923    ok = VRset("PB_DETACH",  "Top",    pane_height - pbtn_height - marginx2 )
2924    ok = VRset("PB_DETACH",  "Width",  min((lpane_width-margin*3) % 2, 1313)    )
2925    ok = VRset("PB_UNMOUNT", "Left",   VRGet("PB_DETACH","Width") + marginx2)
2926    ok = VRset("PB_UNMOUNT", "Top",    pane_height - pbtn_height - marginx2 )
2927    ok = VRset("PB_UNMOUNT", "Width",  min((lpane_width-margin*3) % 2, 1313)    )
2928
2929    /* Splitbar - reduced in size to make it more noticable */
2930    ok = VRset("SPLIT_Main", "Visible", 1           )
2931    ok = VRset("SPLIT_Main", "Top",     marginx2 + (pane_height-1200)%2  )
2932    ok = VRset("SPLIT_Main", "Height",  1200 /* pane_height */ )
2933
2934    /* Statusbar */
2935    ok = VRSet("GB_STATUSBAR", "Left",  margin )
2936    ok = VRSet("GB_STATUSBAR", "Top",   main_iheight - sbar_height - margin )
2937    ok = VRSet("GB_STATUSBAR", "Width", lpane_width + 50 + rpane_width      )
2938
2939    ok = VRset("DT_STATUSBAR", "Top",   12 )
2940    ok = VRset("DT_STATUSBAR", "Left",  12 )
2941    ok = VRset("DT_STATUSBAR", "Height", VRGet("GB_STATUSBAR","Height") -24 )
2942    ok = VRset("DT_STATUSBAR", "Width", (lpane_width + 50 + rpane_width) - 24 )
2943
2944    /* Modified for notebook pages */
2945    pane_height = marginx2 + pane_height -1180
2946    rpane_width = marginx2 + rpane_width -760
2947    /* Use this as the width for the container pages, which don't have as strict a minimum width */
2948    rcnr_width = rpane_width
2949
2950    /* Minimum size of right panel (based on SW_DIALOG which is the largest) */
2951    if pane_height < 5360 then pane_height = 5360
2952    if rpane_width < 6010 then rpane_width = 6010
2953
2954    /* Dialog page */
2955    ok = VRSet("GB_DIALOG", "Top",    margin /* marginx2 */ )
2956    ok = VRSet("GB_DIALOG", "Left",   margin /* marginx2 */ /* split_left + 60 */ )
2957    ok = VRset("GB_DIALOG", "Height", pane_height )
2958    ok = VRset("GB_DIALOG", "Width",  rpane_width )
2959
2960    ok = VRset("PB_MOUNT",      "Left", margin )
2961    ok = VRset("PB_MOUNT",      "Top",  pane_height - pbtn_height - marginx2)
2962    ok = VRset("PB_EDIT_CANCEL", "Left", VRGet("PB_MOUNT","Width") + marginx2)
2963    ok = VRset("PB_EDIT_CANCEL", "Top",  pane_height - pbtn_height - marginx2)
2964
2965    ok = VRset("PB_DIALOG_HELP", "Left", rpane_width - marginx2 - VRGet("PB_DIALOG_HELP","Width") + 24)
2966    ok = VRset("PB_DIALOG_HELP", "Top",  pane_height - pbtn_height - marginx2)
2967
2968    ok = VRset("GB_SHARE", "Left",  margin )
2969    ok = VRset("GB_SHARE", "Top",   marginx2 /* 245 + marginx2 */ )
2970    ok = VRset("GB_SHARE", "Height",  2252 )
2971    ok = VRset("GB_SHARE", "Width", rpane_width - marginx2 )
2972
2973    ok = VRset("GB_AUTH", "Left",  margin )
2974    ok = VRset("GB_AUTH", "Top",   margin * 3 + VRGet("GB_SHARE","Height") /* 245 + (margin * 3) + VRGet("GB_SHARE","Height") */ )
2975    ok = VRset("GB_AUTH", "Width", rpane_width - marginx2 )
2976
2977    ok = VRset("GB_MPOINT","Left",   margin )
2978    ok = VRset("GB_MPOINT","Top",    /* 245 + */ (margin * 4) + VRGet("GB_SHARE","Height") + VRGet("GB_AUTH","Height"))
2979    ok = VRset("GB_MPOINT","Width",  rpane_width - marginx2 )
2980
2981    /* Advanced page */
2982    ok = VRSet("GB_ADVANCED", "Top",    margin /* marginx2 */ )
2983    ok = VRSet("GB_ADVANCED", "Left",   margin /* marginx2 */ /* split_left + 60 */ )
2984    ok = VRset("GB_ADVANCED", "Height", pane_height )
2985    ok = VRset("GB_ADVANCED", "Width",  rpane_width )
2986
2987    ok = VRset("GB_ADVANCED2", "Left",   margin )
2988    ok = VRset("GB_ADVANCED2", "Top",    /* 245 + */ marginx2)
2989    ok = VRset("GB_ADVANCED2", "Width",  rpane_width - marginx2)
2990    ok = VRset("GB_ADVANCED2", "Height", pane_height - (margin * 5) - pbtn_height /* - 245 */ )
2991
2992    ok = VRset("PB_ADVANCED_APPLY", "Left",   margin )
2993    ok = VRset("PB_ADVANCED_APPLY", "Top",    pane_height - pbtn_height   - marginx2)
2994    ok = VRset("PB_ADVANCED_UNDO", "Left",   VRGet("PB_SMBTREE_CONNECT","Width") + marginx2)
2995    ok = VRset("PB_ADVANCED_UNDO", "Top",    pane_height - pbtn_height   - marginx2)
2996    ok = VRset("PB_ADVANCED_HELP", "Left", rpane_width - marginx2 - VRGet("PB_SMBTREE_HELP","Width") + 24)
2997    ok = VRset("PB_ADVANCED_HELP", "Top",  pane_height - pbtn_height - marginx2)
2998
2999    /* SMBTree page */
3000    ok = VRSet("GB_SMBTREE", "Top",     margin /* x2 */     )
3001    ok = VRSet("GB_SMBTREE", "Left",    margin /* x2 */ /* split_left + 60 */ )
3002    ok = VRset("GB_SMBTREE", "Height",  pane_height     )
3003    ok = VRset("GB_SMBTREE", "Width",   rcnr_width     )
3004
3005    ok = VRset("GB_SMBTREE2","Left",    margin                    )
3006    ok = VRset("GB_SMBTREE2","Top",     /* 45 + */ marginx2        )
3007    ok = VRset("GB_SMBTREE2","Width",   rcnr_width - marginx2)
3008    ok = VRset("GB_SMBTREE2","Height",  pane_height - (margin * 5) - pbtn_height /* - 245 */ )
3009
3010    ok = VRset("CN_SMBTREE",  "Top",    margin )
3011    ok = VRset("CN_SMBTREE",  "Left",   margin )
3012    ok = VRset("CN_SMBTREE",  "Width",  VRGet("GB_SMBTREE2","Width")  - marginx2)
3013    ok = VRset("CN_SMBTREE",  "Height", VRGet("GB_SMBTREE2","Height") - marginx2)
3014
3015    ok = VRset("PB_SMBTREE_CONNECT", "Left",   margin )
3016    ok = VRset("PB_SMBTREE_CONNECT", "Top",    pane_height - pbtn_height   - marginx2)
3017    ok = VRset("PB_SMBTREE_REFRESH", "Left",   VRGet("PB_SMBTREE_CONNECT","Width") + marginx2)
3018    ok = VRset("PB_SMBTREE_REFRESH", "Top",    pane_height - pbtn_height   - marginx2)
3019
3020    hlpmin = VRGet("PB_SMBTREE_REFRESH", "Left") + VRGet("PB_SMBTREE_REFRESH","Width") + marginx2
3021    hlppos = rcnr_width - marginx2 - VRGet("PB_SMBTREE_HELP","Width") + 24   
3022    IF hlppos < hlpmin THEN hlppos = hlpmin
3023
3024    ok = VRset("PB_SMBTREE_HELP", "Left", hlppos )
3025    ok = VRset("PB_SMBTREE_HELP", "Top",  pane_height - pbtn_height - marginx2)
3026
3027    ok = VRset("PICT_THROBBER", "Top",  VRGet("CN_SMBTREE","Height") % 2 - 100 )
3028    ok = VRset("PICT_THROBBER", "Left", VRGet("CN_SMBTREE","Width")  % 2 - 200 )
3029
3030    /* Connection details page */
3031    ok = VRSet("GB_CONDET", "Top",     margin /* x2 */     )
3032    ok = VRSet("GB_CONDET", "Left",    margin /* x2 */  /* split_left + 60 */ )
3033    ok = VRset("GB_CONDET", "Height",  pane_height     )
3034    ok = VRset("GB_CONDET", "Width",   rcnr_width      )
3035
3036    ok = VRset("GB_CONDET2", "Left",   margin )
3037    ok = VRset("GB_CONDET2", "Top",    /* 245 + */ marginx2)
3038    ok = VRset("GB_CONDET2", "Width",  rcnr_width - marginx2)
3039    ok = VRset("GB_CONDET2", "Height", pane_height - (margin * 5) - pbtn_height /* - 245 */ )
3040
3041    ok = VRset("CN_CONDET",  "Top",    margin )
3042    ok = VRset("CN_CONDET",  "Left",   margin )
3043    ok = VRset("CN_CONDET",  "Width",  VRGet("GB_CONDET2","Width")  - marginx2)
3044    ok = VRset("CN_CONDET",  "Height", VRGet("GB_CONDET2","Height") - marginx2)
3045
3046    ok = VRset("PB_CONDET_SAVE", "Left", margin )
3047    ok = VRset("PB_CONDET_SAVE", "Top",  pane_height - pbtn_height - marginx2      )
3048    ok = VRset("PB_CONDET_LOAD", "Left", VRGet("PB_CONDET_SAVE","Width") + marginx2)
3049    ok = VRset("PB_CONDET_LOAD", "Top",  pane_height - pbtn_height - marginx2      )
3050
3051    hlpmin = VRGet("PB_CONDET_LOAD", "Left") + VRGet("PB_CONDET_LOAD","Width") + marginx2
3052    hlppos = rcnr_width - marginx2 - VRGet("PB_CONDET_HELP","Width") + 24
3053    IF hlppos < hlpmin THEN hlppos = hlpmin
3054
3055    ok = VRset("PB_CONDET_HELP", "Left", hlppos )
3056    ok = VRset("PB_CONDET_HELP", "Top",  pane_height - pbtn_height - marginx2)
3057
3058    /* Global settings page */
3059    ok = VRSet("GB_GLOBAL", "Top",     margin /* x2 */     )
3060    ok = VRSet("GB_GLOBAL", "Left",    margin /* x2 */  /* split_left + 60 */ )
3061    ok = VRset("GB_GLOBAL", "Height",  pane_height     )
3062    ok = VRset("GB_GLOBAL", "Width",   rpane_width     )
3063
3064    ok = VRset("GB_GLOBAL2", "Left",  margin )
3065    ok = VRset("GB_GLOBAL2", "Top",   marginx2 /* 245 + marginx2 */ )
3066    ok = VRset("GB_GLOBAL2", "Width", rpane_width - marginx2 )
3067
3068    ok = VRset("GB_RESOLUTION", "Left",  margin )
3069    ok = VRset("GB_RESOLUTION", "Top",   margin * 3 + VRGet("GB_GLOBAL2","Height") /* 245 + (margin * 3) + VRGet("GB_GLOBAL2","Height") */ )
3070    ok = VRset("GB_RESOLUTION", "Width", rpane_width - marginx2 )
3071
3072    ok = VRset("GB_LOGGING","Left",   margin )
3073    ok = VRset("GB_LOGGING","Top",    /* 245 + */ (margin * 4) + VRGet("GB_GLOBAL2","Height") + VRGet("GB_RESOLUTION","Height"))
3074    ok = VRset("GB_LOGGING","Width",  rpane_width - marginx2 )
3075
3076    ok = VRset("PB_SETTINGS_APPLY", "Left", margin )
3077    ok = VRset("PB_SETTINGS_APPLY", "Top",  pane_height - pbtn_height - marginx2      )
3078    ok = VRset("PB_SETTINGS_APPLY", "Height", pbtn_height)
3079    ok = VRset("PB_SETTINGS_UNDO", "Left", VRGet("PB_CONDET_SAVE","Width") + marginx2)
3080    ok = VRset("PB_SETTINGS_UNDO", "Top",  pane_height - pbtn_height - marginx2      )
3081    ok = VRset("PB_SETTINGS_UNDO", "Height", pbtn_height)
3082    ok = VRset("PB_SETTINGS_HELP", "Left", rpane_width - marginx2 - VRGet("PB_CONDET_HELP","Width") + 24)
3083    ok = VRset("PB_SETTINGS_HELP", "Top",  pane_height - pbtn_height - marginx2)
3084    ok = VRset("PB_SETTINGS_HELP", "Height", pbtn_height)
3085
3086    /* SMB.CONF Settings page */
3087    ok = VRSet("GB_SMBCONFX", "Top",     margin /* x2 */     )
3088    ok = VRSet("GB_SMBCONFX", "Left",    margin /* x2 */  /* split_left + 60 */ )
3089    ok = VRset("GB_SMBCONFX", "Height",  pane_height     )
3090    ok = VRset("GB_SMBCONFX", "Width",   rpane_width     )
3091
3092    ok = VRset("GB_SMBCONF2", "Left",  margin )
3093    ok = VRset("GB_SMBCONF2", "Top",   marginx2 )
3094    ok = VRset("GB_SMBCONF2", "Width", rpane_width - marginx2 )
3095    ok = VRset("GB_SMBCONF2", "Height",  pane_height - (margin * 7) - pbtn_height /* - 245 */ )
3096
3097    ok = VRset("PB_SMBCONF_APPLY", "Left", margin )
3098    ok = VRset("PB_SMBCONF_APPLY", "Top",  pane_height - pbtn_height - marginx2      )
3099    ok = VRset("PB_SMBCONF_APPLY", "Height", pbtn_height)
3100    ok = VRset("PB_SMBCONF_UNDO", "Left", VRGet("PB_CONDET_SAVE","Width") + marginx2)
3101    ok = VRset("PB_SMBCONF_UNDO", "Top",  pane_height - pbtn_height - marginx2      )
3102    ok = VRset("PB_SMBCONF_UNDO", "Height", pbtn_height)
3103    ok = VRset("PB_SMBCONF_HELP", "Left", rpane_width - marginx2 - VRGet("PB_CONDET_HELP","Width") + 24)
3104    ok = VRset("PB_SMBCONF_HELP", "Top",  pane_height - pbtn_height - marginx2)
3105    ok = VRset("PB_SMBCONF_HELP", "Height", pbtn_height)
3106
3107    /* DOne with pages */
3108    ok = VRset("Main","Painting", 1)
3109
3110    /* check and empty event queue, trash spurious resize events */
3111    EventString = ''
3112    TrashedResize = 0
3113
3114    do until EventString = 'nop'
3115        EventString = VREvent('N')
3116        if EventString <> 'nop' then do
3117            if EventString = 'CALL Main_Resize' then TrashedResize = 1
3118                                                else interpret eventString
3119        end
3120    end
3121    if TrashedResize then CALL Main_Resize
3122
3123    if options.!debug == 1 then say time()' Main_Resize done'
3124return
3125/*:VRX         Menu_Context_ChangeView_Click
3126*/
3127Menu_Context_ChangeView_Click:
3128    ok = VRSet("Cn_Current","View","NameTree")
3129return
3130
3131/*:VRX         Menu_Context_Detach_All_Click
3132*/
3133Menu_Context_Detach_All_Click:
3134    ok = VRMethod( "CN_CURRENT", "GetRecordList", "All", "umrh." )
3135    do um = 1 to umrh.0
3136        ok = VRMethod( "CN_CURRENT", "SetRecordAttr", umrh.um, "Selected", 1)
3137        call PB_DETACH_Click
3138    end
3139    drop um umrh.
3140return
3141
3142/*:VRX         Menu_Context_Detach_Click
3143*/
3144Menu_Context_Detach_Click:
3145    call PB_DETACH_Click
3146return
3147
3148/*:VRX         Menu_Context_Edit_Click
3149*/
3150Menu_Context_Edit_Click:
3151    if options.!debug == 1 then say time()' Menu_Context_Edit_Click started'
3152    /* call VRMethod "TDL_1", 'PostEvent', 'PageSelected', 'Page', 1 */
3153    ok = VRset("TDL_1", 'Selected', 1)
3154    options.!editmode = 1
3155    CALL VRSet "PB_EDIT_CANCEL","Visible", 1
3156    CALL VRSet "PB_UNMOUNT","Enabled", 0
3157
3158    ok = VRMethod( "TDL_1", "SetTabText", 1, " "NLVGetMessage(33)" " )
3159/*  CALL NLVSetText "DT_DIALOG","Caption",33 */
3160    CALL VRSet "GB_CURRENT", "ENABLED", 0
3161
3162    ok = VRSet("CB_MOUNT","Value","")
3163    ok = VRSet("CB_MOUNT","Selected",1)
3164    ok = VRSet("CB_MOUNT","Value",mtype.1)
3165
3166    parse var p_string p_workgroup':\\'p_server'\'p_share
3167
3168    /* if options.!debug == 1 then say time()' '||p_workgroup */
3169
3170    if options.!debug == 1 then say time()' data   '||data
3171    if options.!debug == 1 then say time()' domain '||p_workgroup
3172    if options.!debug == 1 then say time()' server '||p_server
3173    if options.!debug == 1 then say time()' share  '||p_share
3174    if options.!debug == 1 then say time()' string '||p_string
3175
3176
3177    CALL VRSet "EF_SHARE",  "VALUE", p_share
3178    CALL VRSet "EF_SERVER", "VALUE", p_server
3179    CALL VRSet "EF_NETWORK","VALUE", p_workgroup
3180
3181    /* if options.!debug == 1 then say time()' '||p_node */
3182    parse var p_node p_drive'\'p_directory'\'
3183    CALL VRSet "CB_DRIVES", "Value", p_drive
3184    CALL VRSet "EF_DIRECTORY", "Value", p_directory
3185    if options.!debug == 1 then say time()' Menu_Context_Edit_Click done'
3186return
3187
3188/*:VRX         Menu_Context_Open_Click
3189*/
3190Menu_Context_Open_Click:
3191    ok = VRSet("Menu_Context_Open_Default","Visible",0)
3192return
3193
3194/*:VRX         Menu_Context_Open_Default_Click
3195*/
3196Menu_Context_Open_Default_Click:
3197    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Click started"
3198    if \VRIsValidObject(rh) then return
3199
3200    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3201    PARSE VAR userdata mountpoint ';' mounts ';' .
3202
3203    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3204
3205    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "DEFAULT" )
3206
3207    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Click done"
3208return
3209
3210/*:VRX         Menu_Context_Open_Detail_Click
3211*/
3212Menu_Context_Open_Detail_Click:
3213    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Details_Click started"
3214    if \VRIsValidObject(rh) then return
3215
3216    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3217    PARSE VAR userdata mountpoint ';' mounts ';' .
3218
3219    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3220
3221    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "DETAILS" )
3222
3223    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Details_Click done"
3224return
3225
3226/*:VRX         Menu_Context_Open_Icon_Click
3227*/
3228Menu_Context_Open_Icon_Click:
3229    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Icon_Click started"
3230    if \VRIsValidObject(rh) then return
3231
3232    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3233    PARSE VAR userdata mountpoint ';' mounts ';' .
3234
3235    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3236
3237    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "ICON" )
3238
3239    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Icon_Click done"
3240return
3241
3242/*:VRX         Menu_Context_Open_Settings_Click
3243*/
3244Menu_Context_Open_Settings_Click:
3245    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Settings_Click started"
3246    if \VRIsValidObject(rh) then return
3247
3248    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3249    PARSE VAR userdata mountpoint ';' mounts ';' .
3250
3251    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3252
3253    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "SETTINGS" )
3254
3255    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Settings_Click done"
3256return
3257
3258/*:VRX         Menu_Context_Open_Splitview_Click
3259*/
3260Menu_Context_Open_Splitview_Click:
3261    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Splitview_Click started"
3262    if \VRIsValidObject(rh) then return
3263
3264    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3265    PARSE VAR userdata mountpoint ';' mounts ';' .
3266
3267    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3268
3269    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "SPLITVIEW" )
3270
3271    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Splitview_Click done"
3272return
3273
3274/*:VRX         Menu_Context_Open_Tree_Click
3275*/
3276Menu_Context_Open_Tree_Click:
3277    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Tree_Click started"
3278    if \VRIsValidObject(rh) then return
3279
3280    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3281    PARSE VAR userdata mountpoint ';' mounts ';' .
3282
3283    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3284
3285    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "TREE" )
3286
3287    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Tree_Click done"
3288return
3289
3290/*:VRX         Menu_Context_Refresh_Click
3291*/
3292Menu_Context_Refresh_Click:
3293    CALL Refresh
3294return
3295
3296/*:VRX         Menu_Context_Unmount_Click
3297*/
3298Menu_Context_Unmount_Click:
3299    call PB_UNMOUNT_Click
3300return
3301
3302/*:VRX         Menu_File_Autostart_Activate_Click
3303*/
3304Menu_File_Autostart_Activate_Click:
3305    options.!autostart = 1
3306
3307    Profile    = VRParseFilename(settings.!ini,'DPN')'.'fs.!profileext
3308    ExeName    = VRParseFileName(VRget("Application","Program"),'DPNE')
3309    if ExeName = "" then do
3310        parse source . . script
3311        ExeName = VRParseFilename(script,'DP')'\EVFSGUI.EXE'
3312    end
3313    StartupDir = VRParseFileName(VRget("Application","Program"),'DP')
3314    if StartupDir = "" then do
3315        parse source . . script
3316        StartUpDir = VRParseFilename(script,'DP')
3317    end
3318
3319    ObjTitle   = NLVGetMessage( 59 )
3320    if ObjTitle = "" then ObjTitle = '[EVFS LAN-Connections]'
3321
3322    CALL PB_CONDET_SAVE_Click
3323
3324    rc = CreateObject( 'WPProgram', ObjTitle,'<WP_START>',,
3325            'EXENAME='||ExeName||';'||,
3326            'PROGTYPE=PM;'||,
3327            'TITLE='ObjTitle';'||,
3328            'PARAMETERS='Profile' -AUTOCLOSE -NOGUI;'||,
3329            'STARTUPDIR='StartupDir';'||,
3330            'NOPRINT=YES;'||,
3331            'HIDEBUTTON=DEFAULT;'||,
3332            'MINWIN=DEFAULT;'||,
3333            'CCVIEW=DEFAULT;'||,
3334            'DEFAULTVIEW=DEFAULT;'||,
3335            'OBJECTID=<EVFSGUI_AUTOSTART>',,
3336        'REPLACE' )
3337
3338    IF rc == 1 THEN do
3339        Text = NLVGetMessage( 60 )
3340        if Text = "" then Text = '[Created object in Autostart-Folder]'
3341        CALL VRMessage 'Main', Text, VRGet("Main", "Caption")
3342    end
3343    ELSE do
3344        Text = NLVGetMessage( 61 )
3345        if Text = "" then Text = '[Could not create object in Autostart-Folder]'
3346        Title = NLVGetMessage( 5 )
3347        if Title = "" then Title = '[Error]'
3348        CALL VRMessage 'Main', Text, Title, 'E'
3349    end
3350
3351    options.!autostart = 0
3352return
3353/*:VRX         Menu_File_Autostart_Click
3354*/
3355Menu_File_Autostart_Click:
3356
3357return
3358
3359/*:VRX         Menu_File_Autostart_Deactivate_Click
3360*/
3361Menu_File_Autostart_Deactivate_Click:
3362    ok = SysDestroyObject("<EVFSGUI_AUTOSTART>")
3363    IF ok == 1 THEN do
3364        Text = NLVGetMessage( 79 )
3365        if Text = "" then Text = '[Autostart object created successfully]'
3366        CALL VRMessage 'Main', Text, VRGet("Main", "Caption")
3367    end
3368    ELSE do
3369        Text = NLVGetMessage( 78 )
3370        if Text = "" then Text = '[Could find Autostart object]'
3371        Title = NLVGetMessage( 5 )
3372        if Title = "" then Title = '[Error]'
3373        CALL VRMessage 'Main', Text, Title, 'E'
3374    end
3375return
3376
3377/*:VRX         Menu_File_Click
3378*/
3379Menu_File_Click:
3380    ok = VRSet("Menu_File_LMHosts_Reset", "Enabled", VRFileExists( samba.!lmhosts ))
3381    ok = VRSet("Menu_File_ucCred_Reset",  "Enabled", (VRGet("Pict_PWINMEM","PicturePath") = "#36"))
3382return
3383
3384/*:VRX         Menu_File_Close_Click
3385*/
3386Menu_File_Close_Click:
3387    call Quit
3388return
3389
3390/*:VRX         Menu_File_Daemon_Start_Click
3391*/
3392Menu_File_Daemon_Start_Click:
3393    if options.!debug == 1 then say time()' Menu_File_Daemon_Start_Click started'
3394    if VRFileExists(SysBootDrive()"\ndpsmb.dbg") then do
3395        btns.0 = 2
3396        btns.1 = NLVGetMessage( 6 )
3397        btns.2 = NLVGetMessage( 7 )
3398        confirm = VRMessage('Main', NLVGetMessage( 119 ), NLVGetMessage( 8 ), 'Q', 'btns.', 1, 2 )
3399        IF confirm == 1 THEN do
3400            logFiles = value("LOGFILES",,"OS2ENVIRONMENT")
3401            ok1 = SysFileDelete(Logfiles||'\log.smbc')
3402            ok2 = SysFileDelete(Logfiles||'\log.ndpsmb')
3403            if ok1 <> 0 | ok2 <> 0 then do
3404                ok = VRMessage('Main', NLVGetMessage(5)' 'Logfiles||'\log.smbc RC='ok1||'0D0A'x||NLVGetMessage(5)' 'Logfiles||'\log.ndpsmb RC='ok2, NLVGetMessage( 5 ), 'E')
3405            end
3406            drop ok1 ok2
3407        end
3408    end
3409    address cmd 'detach 'fs.!prefix'CTL.EXE'
3410    ok = VRset("GB_CURRENT","Enabled", 1)
3411    ok = VRset("TDL_1","Enabled", 1)
3412    CALL REFRESH
3413    ok = VRSet("Menu_File_Daemon_Start","Enabled",0)
3414    ok = VRSet("Menu_File_Daemon_Stop","Enabled",1)
3415    if options.!debug == 1 then say time()' Menu_File_Daemon_Start_Click done'
3416return
3417
3418/*:VRX         Menu_File_Daemon_Stop_Click
3419*/
3420Menu_File_Daemon_Stop_Click:
3421    if options.!debug == 1 then say time()' Menu_File_Daemon_Stop_Click started'
3422    ok = PRProcessList(proc)
3423    do I = 1 to proc.0
3424        CurProc = VRParseFileName(proc.i.name,'NE')
3425        if CurProc = fs.!prefix"CTL.EXE" then  do
3426            call charout , '  'CurProc' RC='
3427            ok = PRKillProcess(1,proc.i.pid)
3428            say ok
3429        end
3430    end
3431    ok = VRset("GB_CURRENT","Enabled", 0)
3432    ok = VRset("TDL_1","Enabled", 0)
3433    ok = VRSet("Menu_File_Daemon_Start","Enabled",1)
3434    ok = VRSet("Menu_File_Daemon_Stop","Enabled",0)
3435    if options.!debug == 1 then say time()' Menu_File_Daemon_Stop_Click stopped'
3436return
3437/*:VRX         Menu_File_LMHosts_Reset_Click
3438*/
3439Menu_File_LMHosts_Reset_Click:
3440    call _LMHostsReset
3441return
3442
3443/*:VRX         Menu_File_Load_Click
3444*/
3445Menu_File_Load_Click: PROCEDURE EXPOSE settings. options. icons. advanced. vfs. Profile fs. cd. samba.
3446    IF options.!autoload == 1 then filename = Profile
3447    else filename = VRFileDialog('Main', NLVGetMessage( 55 ), 'L', '*.'fs.!profileext)
3448    IF filename == '' THEN RETURN
3449    IF STREAM( filename, 'C', 'QUERY EXISTS') == '' THEN DO
3450        CALL VRMessage 'Main', NLVGetMessage( 56, filename ), NLVGetMessage( 5 ), 'E'
3451        RETURN
3452    END
3453
3454    CALL LINEIN filename, 1, 0
3455    DO WHILE LINES( filename )
3456        /* Fix Ticket #202 in order to allow blanks in sharenames */
3457        resline  = LINEIN( filename )
3458        nodelen  = pos('\\',resline)-2
3459        node     = left(resline,nodelen)
3460        rwFlag   = word(resline,words(resline))
3461        resource = substr(resline,nodelen+2,length(resline)-(nodelen+2)-(length(rwFlag)+1)+1)
3462        drop resline
3463        drop nodelen
3464
3465        vfs.!drive      = FILESPEC('DRIVE', node )
3466        vfs.!mountpoint = STRIP( node, 'T', '\')
3467
3468        /* In case we only have a volume we reattach the backslash, otherwise restore will fail */
3469        if vfs.!drive = vfs.!mountpoint then vfs.!mountpoint = vfs.!mountpoint||'\'
3470
3471        call ParseResParmString
3472
3473        options.!workgroup  = p_workgroup
3474        options.!server     = p_server
3475        options.!share      = p_share
3476        options.!user       = p_user
3477        options.!password   = p_password
3478        options.!spassword  = p_spassword
3479        options.!master     = p_master
3480        options.!mastertype = p_mtype
3481/*      options.!memlen     = p_memlen
3482        options.!logfile    = p_logfile
3483        options.!loglevel   = p_loglevel */
3484        options.!cachetimeout = p_cachetimeout
3485        options.!cachelistings = p_cachelistings
3486        options.!easupport  = p_easupport
3487
3488        IF rwFlag == 'R' THEN
3489            options.!readonly = 1
3490        ELSE
3491            options.!readonly = 0
3492
3493        CALL Mount
3494
3495    END
3496    CALL STREAM filename, 'C', 'CLOSE'
3497
3498    options.!autoload = 0
3499
3500    CALL Refresh
3501RETURN
3502/*:VRX         Menu_File_Save_Click
3503*/
3504Menu_File_Save_Click:
3505    call PB_CONDET_SAVE_Click
3506return
3507
3508/*:VRX         Menu_File_ucCred_Reset_Click
3509*/
3510Menu_File_ucCred_Reset_Click:
3511    if _ucChkUc() then ok = _ucDelUc()
3512    ok = VRSet("Pict_PWINMEM","PicturePath","#37")
3513    ok = VRSet("EF_USER",    "Value","")
3514    ok = VRSet("EF_PASSWORD","Value","")
3515    call _UserCredUpdate
3516return
3517
3518/*:VRX         Menu_Help_About_Click
3519*/
3520Menu_Help_About_Click:
3521    ok = VRLoadSecondary("SW_ABOUT", "W")
3522return
3523
3524/*:VRX         Menu_Help_Extended_Click
3525*/
3526Menu_Help_Extended_Click:
3527    ok = VRMethod( "Main", "InvokeHelp" )
3528return
3529
3530/*:VRX         Menu_Selected_Connect_Click
3531*/
3532Menu_Selected_Connect_Click:
3533    call PB_SMBTREE_CONNECT_Click
3534return
3535
3536/*:VRX         Menu_Selected_Default_Workgroup_Click
3537*/
3538Menu_Selected_Default_Workgroup_Click:
3539    if options.!debug == 1 then say time()' '||"Menu_Selected_Default_Workgroup_Click started"
3540    if options.!debug == 1 then say '  SMBObj.rh        = "'SMBObj.rh'"'
3541    Success = 0
3542    if SMBObj.rh <> "" then do
3543        if options.!debug == 1 then say '  SMBObj.udatatype = "'SMBObj.udatatype'"'
3544        Success = 1
3545        select
3546            when SMBObj.udatatype = "WORKGROUP" then workgroupname = VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.rh,"Caption")
3547            when SMBObj.udatatype = "DISK"      then workgroupname = VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.gparentrh,"Caption")
3548            when SMBObj.udatatype = "PRINTER"   then workgroupname = VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.gparentrh,"Caption")
3549            when SMBObj.udatatype = "SERVER"    then workgroupname = VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.parentrh,"Caption")
3550            otherwise Success = 0
3551        end
3552
3553        /* FIXME: switch over to REXXIni calls */
3554        if Success = 1 then ok = TRSetIni("[global]","workgroup", workgroupname, samba.!smbconf)
3555    end
3556    Buttons.1 = NLVGetMessage(2)
3557    Buttons.0 = 1
3558
3559    if Success = 0 then do
3560        id = VRMessage( VRWindow(), NLVGetMessage(5), NLVGetMessage(75), "Error", "Buttons.", 1, 1 )
3561    end
3562    else do
3563        id = VRMessage( VRWindow(), NLVGetMessage(117, workgroupname), NLVGetMessage(75), "Information", "Buttons.", 1, 1 )
3564    end
3565    if options.!debug == 1 then say time()' '||"Menu_Selected_Default_Workgroup_Click done"
3566return
3567
3568/*:VRX         Menu_Selected_DetailsView_Click
3569*/
3570Menu_Selected_DetailsView_Click:
3571    ok = VRSet("CN_smbtree", "View", "Detail")
3572return
3573
3574/*:VRX         Menu_Selected_Info_Click
3575*/
3576Menu_Selected_Info_Click:
3577    if options.!debug == 1 then say time()' Menu_Selected_Info_Click started'
3578
3579    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "SourceOrSelected", "SelRH." )
3580    if SelRH.0 = 0 then do
3581        if options.!debug == 1 then say time()' Menu_Selected_Info_Click aborted'
3582        return
3583    end
3584
3585    call _GetSMBObjectProperties SelRH.1
3586
3587    window = VRLoadSecondary( "SW_INFO", "W" )
3588    if options.!debug == 1 then say time()' Menu_Selected_Info_Click done'
3589return
3590
3591/*:VRX         Menu_Selected_Refresh_Click
3592*/
3593Menu_Selected_Refresh_Click:
3594    ok = VRMethod( "CN_smbtree", "SetRecordAttr", SMBObj.rh, "Icon","#61:PMWP.DLL")
3595    call _DelSMBObjectShares SMBObj.rh
3596    machine = SMBObj.resname
3597    ok = VRSet("TM_RefreshTreeDisplay", "Delay", 1000)
3598    call _RefreshShares
3599return
3600
3601/*:VRX         Menu_Selected_Remove_Click
3602*/
3603Menu_Selected_Remove_Click:
3604    ok = VRMethod( "CN_CONDET", "GetRecordList", "SourceOrSelected", "selrec." )
3605    if selrec.0 = 0 then return
3606
3607    do I = 1 to selrec.0
3608        if VRMethod("CN_CONDET", "GetFieldData", selrec.I, cd.statusfh) = icons.!passive then do
3609            CALL VRMethod "CN_CONDET", 'RemoveRecord', selrec.I
3610        end
3611        else do
3612            mountpoint = VRMethod("CN_CONDET", "GetFieldData", selrec.I, cd.mpointfh)
3613            mpidx = VRMethod("CN_CONDET", "GetFieldData", selrec.I, cd.mpidxfh)
3614            if mpidx = 1 then do
3615                btns.0 = 2
3616                btns.1 = NLVGetMessage( 6 )
3617                btns.2 = NLVGetMessage( 7 )
3618                confirm = VRMessage('Main', NLVGetMessage( 72, mountpoint ), NLVGetMessage( 8 ), 'Q', 'btns.', 1, 2 )
3619                IF confirm \= 1 THEN RETURN
3620
3621                CALL _Dynamic "ok = "fs.!prefix"RxUnmount('"mountpoint"', "mpidx")"
3622                CALL VRMethod "CN_CONDET", 'RemoveRecord', selrec.I
3623                CALL Refresh
3624            end
3625            else do
3626                CALL VRMessage 'Main', NLVGetMessage( 71 ) , NLVGetMessage( 89 )||" "||mountpoint , 'E'
3627            end
3628        end
3629    end
3630return
3631
3632/*:VRX         Menu_Selected_Retry_Click
3633*/
3634Menu_Selected_Retry_Click: PROCEDURE EXPOSE settings. options. icons. vfs. fs. advanced. cd. samba. mtype.
3635
3636    ok = VRMethod( "CN_CONDET", "GetRecordList", "SourceOrSelected", "srcrec." )
3637    if srcrec.0 = 0 then return
3638
3639    srcrec = srcrec.1
3640
3641    p_mpoint    = VRMethod("CN_CONDET", "GetFieldData", srcrec, CD.MpointFH)
3642
3643    p_workgroup = VRMethod("CN_CONDET", "GetFieldData", srcrec, cd.workgrpFH  )
3644    p_server    = VRMethod("CN_CONDET", "GetFieldData", srcrec, CD.ServerFH)
3645    p_share     = VRMethod("CN_CONDET", "GetFieldData", srcrec, CD.ShareFH)
3646    p_user      = VRMethod("CN_CONDET", "GetFieldData", srcrec, CD.UserFH)
3647    p_password  = x2c(VRMethod("CN_CONDET", "GetFieldData", srcrec, CD.SpasswordFH))
3648
3649    ShareLevel = 1
3650    if p_share     = "" then ShareLevel = 2
3651    if p_server    = "" then ShareLevel = 3
3652    if p_workgroup = "" then ShareLevel = 4
3653
3654    ok = VRSet("CB_MOUNT", "Selected", Sharelevel )
3655    ok = VRset("CB_MOUNT", "Value", mtype.sharelevel)
3656
3657    call _UpdateObject "EF_SERVER", p_server
3658    ok = VRset("EF_SHARE"  ,  "Value", p_share)
3659    ok = VRset("EF_NETWORK",  "Value", p_workgroup)
3660    ok = VRset("EF_USER"   ,  "Value", p_user)
3661    ok = VRset("EF_PASSWORD", "Value", p_password)
3662
3663    parse var p_mpoint p_drv '\' p_dir
3664
3665    p_dir = strip(p_dir,'T','\')
3666
3667    ok = VRset("CB_DRIVES"      ,  "Value", p_drv)
3668    ok = VRset("EF_DIRECTORY"   ,  "Value", p_dir)
3669
3670    CALL PB_MOUNT_Click
3671
3672/*  if VRMethod( "CN_CONDET", "ValidateRecord", srcRec) = 1 then do
3673        if VRMethod("CN_CONDET", "GetRecordAttr", srcRec, "Icon") = icons.!passive then ok = VRMethod( "CN_CONDET", "RemoveRecord", srcRec)
3674    end */
3675return
3676
3677/*:VRX         Menu_Selected_TimeSync_Click
3678*/
3679Menu_Selected_TimeSync_Click:
3680    if options.!debug == 1 then say time()' Menu_Selected_TimeSync_Click started'
3681
3682    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "SourceOrSelected", "SelRH." )
3683    if SelRH.0 = 0 then do
3684        if options.!debug == 1 then say time()' Menu_Selected_TimeSync_Click aborted'
3685        return
3686    end
3687
3688    call _GetSMBObjectProperties SelRH.1
3689
3690    options.!timesrv = SMBObj.resname
3691    call _TimeSync
3692
3693    if options.!debug == 1 then say time()' Menu_Selected_TimeSync_Click done'
3694return
3695
3696/*:VRX         Menu_Selected_TreeView_Click
3697*/
3698Menu_Selected_TreeView_Click:
3699    ok = VRSet("CN_smbtree", "View", "IconTree")
3700return
3701
3702/*:VRX         Mount
3703*/
3704Mount: PROCEDURE EXPOSE settings. options. icons. vfs. fs. advanced. cd. samba.
3705    if options.!debug == 1 then say time()' Mount procedure started'
3706    /* Set mouse pointer to wait - this operation might take a few seconds */
3707    call VRSet VRWindow(), 'Pointer', 'Wait'
3708
3709/*  Disabled, because we merge profile now - in earlier revisions
3710    we replaced it but only for preexisting drives - this made only
3711    sense as long as we were unable to detect double connections -
3712    this could be made an option!
3713
3714    IF options.!autoload then do
3715        CALL _Dynamic "ok = "fs.!prefix"RxDetach('"vfs.!drive"')"
3716        if options.!debug == 1 then say time()' '||'Autoload Detach "'vfs.!drive'" =' ok
3717    end */
3718
3719    /* Attach the virtual drive - only if drive is not already attached */
3720    if pos(vfs.!drive,MyFreeDriveMap("C:","FREE")) > 0 then do
3721        CALL _Dynamic "ok = "fs.!prefix"RxAttach('"vfs.!drive"')"
3722
3723        if options.!debug == 1 then say time()' '||'Attach "'vfs.!drive'" =' ok
3724    end
3725
3726    /* Create the mount point and store whether it was created or already existed */
3727    CALL _Dynamic "CreateMP = "fs.!prefix"RxCreateMountPoint('"vfs.!mountpoint"')"
3728
3729    if options.!debug == 1 then say time()' '||'Create "'vfs.!mountpoint'" = 'CreateMP
3730
3731
3732    /* Build the resource parameter string */
3733    src = ''
3734    IF options.!workgroup  \= '' THEN src = src';WORKGROUP='options.!workgroup
3735    IF options.!server     \= '' THEN src = src';SERVER='options.!server
3736    IF options.!share      \= '' THEN src = src';SHARE='options.!share
3737    IF options.!user       \= '' THEN src = src';USER='options.!user
3738    IF options.!password   \= '' THEN src = src';PASSWORD='options.!password
3739    IF options.!spassword  \= '' THEN src = src';SPASSWORD='options.!spassword
3740    IF options.!master     \= '' THEN src = src';MASTER='options.!master
3741    IF options.!mastertype \= '' THEN src = src';MASTERTYPE='options.!mastertype
3742/*  IF options.!memlen     \= '' THEN src = src';MEMLEN='options.!memlen
3743    IF options.!logfile    \= '' THEN src = src';LOGFILE='options.!logfile
3744    IF options.!loglevel   \= '' THEN src = src';LOGLEVEL='options.!loglevel */
3745    IF options.!cachetimeout  \= '' THEN src = src';CTO='options.!cachetimeout
3746    IF options.!cachelistings \= '' THEN src = src';CLD='options.!cachelistings
3747    IF options.!easupport  \= '' THEN src = src';EASUPPORT='options.!easupport
3748
3749    IF options.!readonly = 1 then rwFlag = 'R'; else rwFlag = 'W'
3750
3751    parse var vfs.!mountpoint mpoint ';' .
3752    mpoint = strip(mpoint,'T','\')||'\'
3753
3754    if options.!master   = "" then options.!master   = "WORKGROUP"
3755    if options.!mtype    = "" then options.!mtype    = "1"
3756    if options.!loglevel = "" then options.!loglevel = "0"
3757    if options.!memlen   = "" then options.!memlen   = "2"
3758    if options.!cachetimeout = "" then options.!cachetimeout = "10"
3759    if options.!cachelistings = "" then options.!cachelistings = "32"
3760    if options.!easupport= "" | options.!easupport= " " then options.!easupport = strip(options.!easupport)
3761    if options.!password <> "" & options.!spassword = "" then do
3762        options.!spassword = c2x(options.!password)
3763        options.!password = ""
3764    end
3765
3766    hashstr = mpoint' 'translate(options.!workgroup)' 'translate(options.!server)' 'translate(options.!share)' 'options.!user' 'options.!spassword' 'options.!easupport' 'rwFlag
3767
3768    md5 = rexx_md5(hashstr)
3769
3770    CALL VRMethod "CN_CONDET", 'GetRecordList', 'All', 'records.'
3771    DO i = 1 TO records.0
3772        hash = VRMethod("CN_CONDET","GetFieldData", records.i, cd.hashfh)
3773
3774        if options.!debug == 1 then say VRMethod("CN_CONDET","GetFieldData", records.i, CD.mpointFH)'->'hash
3775        if options.!debug == 1 then say mpoint'->'md5
3776
3777        if hash = md5 then do
3778            If VRMethod("CN_CONDET","GetFieldData", records.i, cd.statusfh) = icons.!active then do /* Same hash, status active */
3779                say "Double connection detected!!"
3780                if options.!spassword <> "" then upw = ":********"
3781                else upw = ""
3782                buttons.0 = 2
3783                buttons.1 = NLVGetMessage(9)
3784                buttons.2 = NLVGetMessage(3)
3785                Answer = VRMessage('Main',NLVGetMessage(64) , NLVGetMessage( 36,options.!user||upw'@'options.!workgroup'\\'options.!server'\'options.!share, vfs.!mountpoint ), 'W','buttons.')
3786                if Answer = 2 then do
3787                    call VRSet VRWindow(), 'Pointer', '<default>'
3788                    say "Double connection - do not mount!!"
3789                    return
3790                end
3791            end
3792            else do /* Same hash, status passive - we have to remove it */
3793                ok = VRMethod("CN_CONDET", "RemoveRecord", records.i )
3794            end
3795        end
3796    end
3797
3798    cd.lastrh = ""
3799    ok = ParseResourceData(vfs.!mountpoint,'SMBFS SMBFS64 \\'options.!workgroup':'options.!server'\'options.!share'@'options.!user||src' 'rwFlag)
3800
3801    /* Now mount the resource */
3802    CALL _Dynamic "ok = "fs.!prefix"RxMount('SMBFS','"vfs.!mountpoint"', '"src"', '"rwFlag"')"
3803
3804    if options.!debug == 1 then say time()' '||'Mount "'vfs.!mountpoint'" =' ok
3805    if ok <> 0 then do
3806        if options.!password <> "" then upw = ":********"
3807            else upw = ""
3808        buttons.0 = 2
3809        buttons.1 = NLVGetMessage(2)
3810        buttons.2 = NLVGetMessage(37)
3811        Answer = VRMessage('Main', SysGetMessage(ok), NLVGetMessage( 36,  options.!user||upw'@'options.!workgroup'\\'options.!server'\'options.!share, vfs.!mountpoint ), 'W','buttons.')
3812        if Answer = 2 then do /* Show explanation */
3813            xx = VRMessage('Main', NLVGetMessage( 36,  options.!user||upw'@'options.!workgroup'\\'options.!server'\'options.!share, vfs.!mountpoint )||'0D0A'x||'0D0A'x||SysGetMessage(ok)||'0D0A'x||'0D0A'x||SysGetMessage(ok, 'OSO001H.MSG'), NLVGetMessage(37), 'W')
3814        end
3815        if cd.lastrh <> '' then do
3816            ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.statusfh, icons.!passive) /* Passive Connection icon */
3817            ok = VRMethod("CN_CONDET", "SetRecordAttr", cd.lastrh, "Icon", icons.!passive) /* Passive Connection icon */
3818            ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.passwordfh, '') /* remove pain text password */
3819        end
3820
3821        /* In case the mountpoint was created for this failed operation, it is (optionally) removed again */
3822        if CreateMP = 0 & advanced.!alwaysmp <> 1 then do
3823            CALL _Dynamic "ok = "fs.!prefix"RxDeleteMountPoint('"vfs.!mountpoint"')"
3824            if options.!debug == 1 then say time()' '||'Remove "'vfs.!mountpoint'" = 'ok
3825        end
3826    end
3827    else do
3828        if options.!storecreds = 1 then do
3829            ok = VRSet("EF_User",    "Value",options.!user)
3830            ok = VRSet("EF_Password","Value",x2c(options.!spassword))
3831        end
3832    end
3833    drop CreateMP /* not required anymore */
3834
3835/*  Obsolete - the IOCtl will not be implemented this way in the plugin
3836    The REXX function is present, but is has no counterpart in the plugin
3837    ok = EvfsRxIoctl( 100 , vfs.!mountpoint, outstring)
3838    if options.!debug == 1 then say time()' '||'RxIoctl "'vfs.!mountpoint'" = 'ok', 'outstring
3839 */
3840    /* Set mouse pointer to default again */
3841    call VRSet VRWindow(), 'Pointer', '<default>'
3842    if options.!debug == 1 then say time()' Mount procedure done'
3843RETURN ok
3844
3845/*:VRX         MyFreeDriveMap
3846*/
3847MyFreeDriveMap: procedure expose options. icons. fs. samba.
3848    if options.!debug == 1 then say time()' MyFreeDriveMap(proc) started'
3849    alldrives = "C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:"
3850/*  if options.!debug == 1 then say time()' '||"SysDriveMap(USED) started" */
3851    useddrives= SysDriveMap("C:","USED")
3852/*  if options.!debug == 1 then say time()' '||"SysDriveMap(USED) done" */
3853
3854    Alldr = words(alldrives)
3855    FreeDriveMap = ""
3856    do I = 1 to AllDr
3857        if word(alldrives,1) = word(useddrives,1) then do
3858            Useddrives = subword(useddrives,2)
3859            Alldrives = subword(Alldrives,2)
3860        end
3861        else do
3862            FreeDriveMap = FreeDriveMap||word(alldrives,1)||' '
3863            Alldrives = subword(Alldrives,2)
3864        end
3865    end
3866    if options.!debug == 1 then say time()' MyFreeDriveMap(proc) done, result "'FreeDriveMap'"'
3867return FreeDriveMap
3868/*:VRX         NoEVFSCALL
3869*/
3870NoEVFSCALL:
3871    CALL VRMessage 'Main', NLVGetMessage( 100 ), NLVGetMessage( 5 ), 'E'
3872    signal Halt
3873RETURN
3874
3875/*:VRX         ParseResourceData
3876*/
3877ParseResourceData: PROCEDURE EXPOSE userdata options. icons. advanced. fs. cd. samba.
3878    PARSE ARG userdata, resource
3879    if options.!debug == 1 then say time()' ParseResourceData started'
3880    if options.!debug == 1 then say '  receiving "'userdata'" "'resource'" length ('length(resource)')'
3881
3882/* WARNING! resource has a maximal length of 255 and is truncated otherwise */
3883
3884/*  PARSE VAR resource . ';WORKGROUP='p_workgroup';SERVER='p_server';SHARE='p_share';' . */
3885
3886    if left(word(resource,1),5) <> "SMBFS" then do
3887        /* Support for other filesystems would come here! */
3888        userData = "UNKNOWN"
3889    end
3890    else do
3891        cd.lastrh = VRMethod("CN_CONDET","AddRecord")
3892        PARSE VAR userdata p_mpoint ';' p_mpidx ';' .
3893
3894        p_mpoint = strip(p_mpoint,'T','\')||'\'
3895        p_rw     = word(resource, words(resource))
3896
3897        /* Workaround for truncated resource string */
3898        if length(p_rw) > 1 then do
3899            /* The resource string must have been truncated
3900               p_rw is already wrong and
3901               p_easupport will most likely be also wrong (look below for workaround!) */
3902            p_rw ="W" /* this is guessed only!!! */
3903            if options.!debug == 1 then say '  WARNING! Detected truncated resource string - shorten workgroup name, server name, share name until this message goes away!'
3904        end
3905        /* this should be done unconditionally if the resource string is never truncated */
3906        else resource  = left(resource,length(resource)-length(p_rw))
3907
3908        call ParseResParmString
3909
3910        if p_master   = "" then p_master   = "WORKGROUP"
3911        if p_mtype    = "" then p_mtype    = "1"
3912        if p_loglevel = "" then p_loglevel = "0"
3913        if p_memlen   = "" then p_memlen   = "2"
3914
3915        /* Also works around for a truncated resource string! */
3916        if p_easupport= "" | p_easupport= " " then p_easupport = strip(options.!easupport)
3917
3918        if p_password <> "" & p_spassword = "" then do
3919            p_spassword = c2x(p_password)
3920            p_password = ""
3921        end
3922
3923        ok = VRMethod("CN_CONDET", "SetFieldData", cd.lastrh, cd.mpointFH, p_mpoint, cd.mpidxfh, p_mpidx, cd.workgrpFH  , p_workgroup, cd.serverfh, p_server, cd.sharefh, p_share, cd.userfh, p_user)
3924        ok = VRMethod("CN_CONDET", "SetFieldData", cd.lastrh, cd.passwordfh, p_password, cd.spasswordfh, p_spassword, cd.masterfh, p_master, cd.mtypefh, p_mtype)
3925        ok = VRMethod("CN_CONDET", "SetFieldData", cd.lastrh, cd.ctoFH, p_cachetimeout, cd.cldFH, p_cachelistings)
3926        ok = VRMethod("CN_CONDET", "SetFieldData", cd.lastrh, cd.memlenfh, p_memlen, cd.easupportfh, p_easupport, cd.logfilefh, p_logfile, cd.loglevelfh, p_loglevel, cd.rwfh, p_rw)
3927        ok = VRMethod("CN_CONDET", "SetFieldData", cd.lastrh, cd.statusfh, icons.!active) /* Active */
3928        ok = VRMethod("CN_CONDET", "SetRecordAttr", cd.lastrh, "Icon", icons.!active) /* Active */
3929
3930        hashstr = p_mpoint' 'translate(p_workgroup)' 'translate(p_server)' 'translate(p_share)' 'p_user' 'p_spassword' 'p_easupport' 'p_rw
3931
3932        md5 = rexx_md5(hashstr)
3933
3934        ok = VRMethod("CN_CONDET", "SetFieldData", cd.lastrh, cd.hashfh,md5)
3935
3936        SELECT
3937            WHEN p_share  == '' & p_server \= '' THEN DO   /* all shares on server */
3938                IF p_workgroup == '' THEN
3939                    userdata = userdata';\\'p_server'\*'
3940                ELSE
3941                    userdata = userdata';'p_workgroup':\\'p_server'\*'
3942            END
3943            WHEN p_server == '' & p_workgroup \= '' THEN    /* all servers in workgroup */
3944                userdata = userdata';'p_workgroup':\\*'
3945            WHEN p_server == '' & p_workgroup == '' THEN    /* all workgroups */
3946                userdata = userdata';*:\\*'
3947            OTHERWISE DO
3948                IF p_workgroup == '' THEN
3949                    userdata = userdata';\\'p_server'\'p_share
3950                ELSE
3951                    userdata = userdata';'p_workgroup':\\'p_server'\'p_share
3952            END
3953        END
3954    end
3955
3956    if options.!debug == 1 then say '  returning "'userdata'"'
3957    if options.!debug == 1 then say time()' ParseResourceData done'
3958RETURN userdata
3959
3960/*:VRX         ParseResParmString
3961*/
3962ParseResParmString:
3963    PARSE VAR resource . ';WORKGROUP=' p_workgroup ';' .
3964    PARSE VAR resource . ';SERVER=' p_server ';' .
3965    PARSE VAR resource . ';SHARE=' p_share ';' .
3966    PARSE VAR resource . ';USER=' p_user ';' .
3967    PARSE VAR resource . ';PASSWORD=' p_password ';' .
3968    PARSE VAR resource . ';SPASSWORD=' p_spassword ';' .
3969    PARSE VAR resource . ';MASTER=' p_master ';' .
3970    PARSE VAR resource . ';MASTERTYPE=' p_mtype ';' .
3971    PARSE VAR resource . ';MEMLEN=' p_memlen ';' .
3972    PARSE VAR resource . ';LOGFILE=' p_logfile ';' .
3973    PARSE VAR resource . ';LOGLEVEL=' p_loglevel ';' .
3974    PARSE VAR resource . ';CTO=' p_cachetimeout ';' .
3975    PARSE VAR resource . ';CLD=' p_cachelistings ';' .
3976    PARSE VAR resource . ';EASUPPORT=' p_easupport ' '
3977return
3978/*:VRX         PB_ABOUT_CLOSE_Click
3979*/
3980PB_ABOUT_CLOSE_Click:
3981    CALL SW_ABOUT_Close
3982return
3983
3984/*:VRX         PB_ABOUT_COPY_Click
3985*/
3986PB_ABOUT_COPY_Click:
3987
3988    if VRGet("CB_TRAC","set") then DO
3989        remainstr = AboutStr
3990        AboutStr = ''
3991        DO WHILE remainstr <> ''
3992            PARSE VAR remainstr _part '0d0a'x remainstr
3993            AboutStr = AboutStr || _part ||'[[BR]]'||'0d0a'x
3994        END
3995    END
3996    ok = VRMethod( "Application", "PutClipboard", AboutStr )
3997    if options.!debug == 1 then call beep 880*2,10
3998    CALL SW_ABOUT_Close
3999return
4000
4001/*:VRX         PB_ADVANCED_APPLY_Click
4002*/
4003PB_ADVANCED_APPLY_Click:
4004    advanced.!easupport     = VRGet( "CB_EAS",             "Set"   )
4005    advanced.!readonly      = VRGet( "CB_READONLY",        "Set"   )
4006    advanced.!alwaysmp      = VRGet( "CB_ALWAYSMP",        "Set"   )
4007    advanced.!cachetimeout  = VRGet( "SPIN_CACHETIMEOUT",  "Value" )
4008    advanced.!cachelistings = VRGet( "SPIN_CACHELISTINGS", "Value" )
4009
4010    /* Obsolete */
4011    advanced.!memlen        = VRGet( "SPB_MEMLEN",         "Value" )
4012return
4013
4014/*:VRX         PB_ADVANCED_HELP_Click
4015*/
4016PB_ADVANCED_HELP_Click:
4017    CALL VRMethod 'SW_ADVANCED', 'InvokeHelp'
4018return
4019
4020/*:VRX         PB_ADVANCED_UNDO_Click
4021*/
4022PB_ADVANCED_UNDO_Click:
4023    CALL SW_ADVANCED_Init_Content
4024RETURN
4025
4026/*:VRX         PB_ClearCred_Click
4027*/
4028PB_ClearCred_Click:
4029    call Menu_File_ucCred_Reset_Click
4030return
4031
4032/*:VRX         PB_CONDET_HELP_Click
4033*/
4034PB_CONDET_HELP_Click:
4035    CALL VRMethod 'GB_CONDET', 'InvokeHelp'
4036return
4037
4038/*:VRX         PB_CONDET_LOAD_Click
4039*/
4040PB_CONDET_LOAD_Click:
4041    if options.!debug == 1 then say time()' '||"PB_CONDET_LOAD_Click started"
4042    call Menu_File_Load_Click
4043    if options.!debug == 1 then say time()' '||"PB_CONDET_LOAD_Click done"
4044RETURN
4045
4046/*:VRX         PB_CONDET_SAVE_Click
4047*/
4048PB_CONDET_SAVE_Click: PROCEDURE EXPOSE settings. options. icons. Profile fs.  cd. advanced. samba.
4049    if options.!debug == 1 then say time()' '||"PB_CONDET_SAVE_Click started"
4050
4051    if options.!autostart == 0 THEN filename = VRFileDialog('Main', NLVGetMessage( 50 ), 'S', '*.'fs.!profileext)
4052    ELSE filename = Profile
4053
4054    IF filename == '' THEN RETURN
4055
4056    IF STREAM( filename, 'C', 'QUERY EXISTS') \= '' THEN DO
4057        btns.0 = 2
4058        btns.1 = NLVGetMessage( 6 )
4059        if btns.1 = "" then btns.1 = '[Yes]'
4060        btns.2 = NLVGetMessage( 7 )
4061        if btns.2 = "" then btns.2 = '[No]'
4062        Title = NLVGetMessage( 53 )
4063        if Title = "" then Title = "[File exists]"
4064        Text = NLVGetMessage( 54, filename )
4065        if Text = "" then Text = "[File "filename" exists? Overwrite?]"
4066
4067        confirm = VRMessage('Main', Text, Title, 'W', 'btns.', 1, 2 )
4068        IF confirm \= 1 THEN RETURN
4069        CALL VRChAttr filename,, 'HSR'
4070        CALL VRDeleteFile filename
4071    END
4072
4073    CALL VRMethod "CN_CONDET", 'GetRecordList', 'All', 'records.'
4074    DO i = 1 TO records.0
4075        resource = ""
4076        resource = resource||VRMethod("CN_CONDET","GetFieldData", records.i, cd.mpointfh)||" "
4077        resource = resource||'\\'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.workgrpFH  )
4078        resource = resource||':'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.serverfh)
4079        resource = resource||'\'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.sharefh)
4080        resource = resource||'@'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.userfh)
4081        resource = resource||';WORKGROUP='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.workgrpFH  )
4082        resource = resource||';SERVER='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.serverfh)
4083        resource = resource||';SHARE='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.sharefh)
4084        resource = resource||';USER='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.userfh)
4085        resource = resource||';PASSWORD='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.passwordfh)
4086        resource = resource||';SPASSWORD='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.spasswordfh)
4087        resource = resource||';MASTER='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.masterfh)
4088        resource = resource||';MASTERTYPE='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.mtypefh)
4089        resource = resource||';CTO='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.ctoFH)
4090        resource = resource||';CLD='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.cldFH)
4091/*      resource = resource||';MEMLEN='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.memlenfh)
4092        resource = resource||';LOGFILE='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.logfilefh)
4093        resource = resource||';LOGLEVEL='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.loglevelfh) */
4094        resource = resource||';EASUPPORT='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.easupportfh)
4095        resource = resource||' '||VRMethod("CN_CONDET","GetFieldData", records.i, cd.rwfh)
4096        call lineout filename, resource
4097    END
4098    CALL STREAM filename, 'C', 'CLOSE'
4099
4100    if options.!autostart == 0 THEN do
4101        Title = NLVGetMessage( 51 )
4102        if Title = "" then Title = "[Profile saved]"
4103        Text = NLVGetMessage( 52, filename )
4104        if Text = "" then Text = "[Profile saved to "filename"!]"
4105        CALL VRMessage 'Main', Text , Title, 'I'
4106    end
4107
4108    if options.!debug == 1 then say time()' '||"PB_CONDET_SAVE_Click done"
4109RETURN
4110
4111/*:VRX         PB_DETACH_Click
4112*/
4113PB_DETACH_Click: PROCEDURE EXPOSE settings. options. icons. fs. cd. samba.
4114    if options.!debug == 1 then say time()' '||"PB_DETACH_Click started"
4115    CALL VRMethod "CN_CURRENT", 'GetRecordList', 'Selected', 'select.'
4116    IF select.0 < 1 THEN RETURN
4117
4118    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', select.1, 'UserData')
4119    PARSE VAR userdata mountpoint ';' mounts ';' .
4120    drive = STRIP( mountpoint, 'T', '\')
4121
4122    btns.0 = 2
4123    btns.1 = NLVGetMessage( 6 )
4124    btns.2 = NLVGetMessage( 7 )
4125    confirm = VRMessage('Main', NLVGetMessage( 58, drive ), NLVGetMessage( 8 ), 'Q', 'btns.', 1, 2 )
4126    IF confirm \= 1 THEN RETURN
4127
4128    /* TODO: ??  Unmount & delete all child mountpoints? - Do we need this? */
4129    /* FIXME: This is potentially dangerous on Netdrive - what happens with unknown mount types? */
4130    /* FIXME: Unclear under which circumstances we have an alpha value here (which crahed EVFSGUI) */
4131    if datatype(mounts) = 'NUM' then do
4132        /* Unmount any resources */
4133        DO i = 1 TO mounts
4134            CALL _Dynamic "ok = "fs.!prefix"RxUnmount('"mountpoint"', "i-1")"
4135        END
4136    end
4137    else if options.!debug == 1 then say ' '||"mounts = "mounts
4138
4139    CALL _Dynamic "ok = "fs.!prefix"RxDetach('"drive"')"
4140
4141    CALL Refresh
4142    if options.!debug == 1 then say time()' '||"PB_DETACH_Click done"
4143RETURN
4144
4145/*:VRX         PB_DIALOG_HELP_Click
4146*/
4147PB_DIALOG_HELP_Click:
4148    CALL VRMethod 'GB_DIALOG', 'InvokeHelp'
4149return
4150
4151/*:VRX         PB_EDIT_CANCEL_Click
4152*/
4153PB_EDIT_CANCEL_Click:
4154    options.!editmode = 0
4155    CALL VRSet "PB_UNMOUNT","Enabled", 1
4156    CALL VRSet "GB_CURRENT", "ENABLED", 1
4157    ok = VRSet("PB_EDIT_CANCEL","Visible", 0)
4158    ok = VRMethod( "TDL_1", "SetTabText", 1, " "NLVGetMessage(13)" " )
4159/*  CALL NLVSetText 'DT_DIALOG',        "Caption", 13 */
4160RETURN 0
4161
4162/*:VRX         PB_INFO_OK_Click
4163*/
4164PB_INFO_OK_Click:
4165    call SW_INFO_Close
4166RETURN
4167
4168/*:VRX         PB_LOGIN_CANCEL_Click
4169*/
4170PB_LOGIN_CANCEL_Click:
4171    credentials.!entered = 0
4172    call SW_LOGIN_Close
4173RETURN
4174
4175/*:VRX         PB_LOGIN_OK_Click
4176*/
4177PB_LOGIN_OK_Click:
4178    ok = VRSet("EF_USER","Value",VRGet("EF_USER1","Value"))
4179    ok = VRSet("EF_PASSWORD","Value",VRGet("EF_PASSWORD1","Value"))
4180    options.!storecreds = VRGet("CB_STORECREDS1","Set")
4181    credentials.!entered = 1
4182
4183    if p_server <> "" then do
4184        ok = _rpcqueryuser(p_server, VRGet("EF_USER1","Value"), VRGet("EF_PASSWORD1","Value"), VRGet("EF_USER1","Value"))
4185
4186        if word(ok,1) = "1" then do
4187            ok = VRSet("DT_STATUSBAR","Caption", NLVGetMessage(107, rpc.queryuser.FULL_NAME))
4188            say 'rpc.queryuser.DIR_DRIVE    = "'rpc.queryuser.DIR_DRIVE'"'
4189            say 'rpc.queryuser.LOGON_SCRIPT = "'rpc.queryuser.LOGON_SCRIPT'"'
4190        end
4191        else do
4192            CALL VRMessage 'Main', VRGet("EF_USER1","Value")" \\"p_server": "rpc.queryuser.LOGONSTATUS, NLVGetMessage(5), "E"
4193        end
4194    end
4195
4196    call SW_LOGIN_Close
4197RETURN
4198
4199/*:VRX         PB_MOUNT_Click
4200*/
4201PB_MOUNT_Click:
4202    if options.!debug == 1 then say time()' '||"PB_MOUNT_Click started"
4203    ok = VRSet("TM_RefreshCurrentDisplay","Enabled", 0)
4204    say "  network = "network
4205    if options.!editmode = 1 then do
4206        CALL PB_UNMOUNT_Click
4207        options.!editmode = 0
4208        ok = VRMethod("TDL_1","SetTabText", " "strip(NLVGetMessage(13))" ")
4209/*      CALL NLVSetText 'DT_DIALOG',        "Caption", 13 */
4210
4211        CALL VRSet "PB_UNMOUNT","Enabled", 1
4212        CALL VRSet "GB_CURRENT", "ENABLED", 1
4213    end
4214
4215    options.!workgroup  = ''
4216    options.!server     = ''
4217    options.!share      = ''
4218    options.!user       = ''
4219    options.!password   = ''
4220    options.!master     = ''
4221    options.!mastertype = ''
4222    options.!memlen     = advanced.!memlen
4223    options.!easupport  = advanced.!easupport
4224    options.!readonly   = advanced.!readonly
4225    options.!loglevel   = advanced.!loglevel
4226    options.!logfile    = advanced.!logfile
4227    options.!cachetimeout  = advanced.!cachetimeout
4228    options.!cachelistings = advanced.!cachelistings
4229
4230    vfs.!drive      = ''
4231    vfs.!mountpoint = ''
4232
4233    stype    = VRGet( "CB_MOUNT",            "Selected" )
4234    share    = STRIP( VRGet( "EF_SHARE",     "Value" ))
4235    server   = STRIP( VRGet( "EF_SERVER",    "Value" ))
4236    network  = STRIP( VRGet( "EF_NETWORK",   "Value" ))
4237    mtype    = VRGet( "CHK_MTYPE",           "Set" )
4238    userid   = STRIP( VRGet( "EF_USER",      "Value" ))
4239    password = STRIP( VRGet( "EF_PASSWORD",  "Value" ))
4240    mdrive   = VRGet( "CB_DRIVES",           "SelectedText" )
4241    if mdrive = "" then mdrive = VRGet( "CB_DRIVES", "Value" )
4242    mpath    = STRIP( VRGet( "EF_DIRECTORY", "Value" ))
4243
4244    IF ( stype < 1 | stype > 4 ) THEN stype = 1
4245
4246    /* The required/optional/ignored parameters depend on the type of mount
4247     * requested.  (Note, however, that the user, password, easupport and
4248     * memlen parameters are always optional.)
4249     */
4250    SELECT
4251        /* Scenario 1: Mount a single share.
4252         *             Required: share, server
4253         *             Optional: workgroup
4254         *             Unused:   master, mastertype
4255         */
4256        WHEN stype = 1 THEN DO
4257            IF server == '' | share == '' THEN DO
4258                /* error */
4259                RETURN 1
4260            END
4261            options.!server    = server
4262            options.!share     = share
4263            options.!workgroup = network
4264        END
4265
4266        /* Scenario 2: Mount all shares on a server.
4267         *             Required: server
4268         *             Optional: workgroup
4269         *             Unused:   share, master, mastertype
4270         */
4271        WHEN stype = 2 THEN DO
4272            IF server == '' THEN DO
4273                /* error */
4274                RETURN 1
4275            END
4276            options.!server = server
4277            options.!workgroup = network
4278        END
4279
4280        /* Scenario 3: Mount all servers in a workgroup.
4281         *             Required: workgroup
4282         *             Optional: -
4283         *             Unused:   share, server, master, mastertype
4284         */
4285        WHEN stype = 3 THEN DO
4286            IF workgroup == '' THEN DO
4287                /* error */
4288                RETURN 1
4289            END
4290            options.!workgroup  = network
4291        END
4292
4293        /* Scenario 4: Mount all workgroups known to a master.
4294         *             Required: master, mastertype
4295         *             Optional: -
4296         *             Unused:   share, server, workgroup
4297         */
4298        WHEN stype = 4 THEN DO
4299            IF master == '' | mastertype == '' THEN DO
4300                /* error */
4301                RETURN 1
4302            END
4303            options.!master     = network
4304            options.!mastertype = mtype
4305        END
4306    END
4307
4308    options.!user     = userid
4309    options.!password = password
4310
4311    vfs.!drive      = mdrive
4312    vfs.!mountpoint = mdrive'\'mpath
4313
4314    CALL Mount
4315    CALL Refresh
4316    ok = VRSet("TM_RefreshCurrentDisplay","Enabled", 1)
4317    if options.!debug == 1 then say time()' '||"PB_MOUNT_Click done"
4318RETURN 0
4319
4320/*:VRX         PB_NEWMOUNTPOINTCANCEL_Click
4321*/
4322PB_NEWMOUNTPOINTCANCEL_Click:
4323    ok = VRSet("CB_DRIVES","Value","")
4324    ok = VRSet("EF_DIRECTORY","Value","")
4325    call SW_MOUNTPOINT_Close
4326RETURN 0
4327
4328/*:VRX         PB_NEWMOUNTPOINTOK_Click
4329*/
4330PB_NEWMOUNTPOINTOK_Click:
4331    ok = VRSet("CB_DRIVES","Value",VRGet("CB_DRIVES1","Value"))
4332    ok = VRSet("EF_DIRECTORY","Value",VRGet("EF_DIRECTORY1","Value"))
4333
4334    advanced.!readonly  = VRGet("CB_READONLY1","Set")
4335    advanced.!easupport = VRGet("CB_EAS1","Set")
4336    advanced.!alwaysmp  = VRGet("CB_ALWAYSMP1","Set")
4337    advanced.!cachetimeout  = VRGet( "SPIN_CACHETIMEOUT1",  "Value" )
4338    advanced.!cachelistings = VRGet( "SPIN_CACHELISTINGS1", "Value" )
4339
4340    call SW_MOUNTPOINT_Close
4341RETURN
4342
4343/*:VRX         PB_NEWPORTCANCEL_Click
4344*/
4345PB_NEWPORTCANCEL_Click:
4346/*  ok = VRSet("CB_DRIVES","Value","")
4347    ok = VRSet("EF_DIRECTORY","Value","")
4348    call SW_MOUNTPOINT_Close */
4349RETURN 0
4350
4351/*:VRX         PB_NEWPORTCONNECT_Click
4352*/
4353PB_NEWPORTCONNECT_Click:
4354/*  ok = VRSet("CB_DRIVES","Value",VRGet("CB_DRIVES1","Value"))
4355    ok = VRSet("EF_DIRECTORY","Value",VRGet("EF_DIRECTORY1","Value"))
4356
4357    advanced.!readonly  = VRGet("CB_READONLY1","Set")
4358    advanced.!easupport = VRGet("CB_EAS1","Set")
4359    advanced.!alwaysmp  = VRGet("CB_ALWAYSMP1","Set")
4360    advanced.!cachetimeout  = VRGet( "SPIN_CACHETIMEOUT1",  "Value" )
4361    advanced.!cachelistings = VRGet( "SPIN_CACHELISTINGS1", "Value" )
4362
4363    call SW_MOUNTPOINT_Close */
4364RETURN
4365
4366/*:VRX         PB_PROGRESS_ABORT_Click
4367*/
4368PB_PROGRESS_ABORT_Click:
4369    options.!delay = 0
4370    options.!autoload = 0
4371    options.!autoclose = 0
4372    call SW_PROGRESS_Close
4373return
4374
4375/*:VRX         PB_SETTINGS_APPLY_Click
4376*/
4377PB_SETTINGS_APPLY_Click:
4378    advanced.!loglevel    = VRGet("SPIN_LOGLEVEL", "Value" )
4379    advanced.!logfile     = VRGet("EF_LOGFILE",    "Value" )
4380    advanced.!browseauth  = VRGet("CB_BROWSEAUTH", "Set" )
4381    advanced.!browseimme  = VRGet("CB_BROWSEIMME", "Set" )
4382    advanced.!special     = VRGet("CB_SPECIAL",    "Set" )
4383    advanced.!savepassive = VRGet("CB_SAVEPASSIVE","Set" )
4384    advanced.!lmhosts     = VRGet("CB_LMHOSTS",    "Set" )
4385    advanced.!broadcast   = VRGet("CB_BROADCAST",  "Set" )
4386    advanced.!miniicons   = VRGet("CB_MINIICONS",  "Set" )
4387
4388    /* Note: CB_LOGGING has its own event tied to the click */
4389    options.!storecreds   = VRGet("CB_STORECREDS", "Set" )
4390    options.!debug        = VRGet("CB_DEBUG",      "Set" )
4391
4392    if options.!debug == 1 then do /* Turn on additional columns in connection details view */
4393        ok = VRRedirectStdio("ON")
4394        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.mpidxfh ,       "Visible", 1)
4395        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.passwordfh ,    "Visible", 1)
4396        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.spasswordfh ,   "Visible", 1)
4397        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.masterFH ,      "Visible", 1)
4398        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.mtypeFH ,       "Visible", 1)
4399        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.memlenfh ,      "Visible", 1)
4400        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.logfilefh ,     "Visible", 1)
4401        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.loglevelfh ,    "Visible", 1)
4402        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.hashfh ,        "Visible", 1)
4403    end
4404    else do /* Turn on additional columns in connection details view */
4405        ok = VRRedirectStdio("OFF")
4406        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.mpidxfh ,       "Visible", 0)
4407        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.passwordfh ,    "Visible", 0)
4408        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.spasswordfh ,   "Visible", 0)
4409        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.masterFH ,      "Visible", 0)
4410        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.mtypeFH ,       "Visible", 0)
4411        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.memlenfh ,      "Visible", 0)
4412        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.logfilefh ,     "Visible", 0)
4413        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.loglevelfh ,    "Visible", 0)
4414        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.hashfh ,        "Visible", 0)
4415    end
4416
4417    ok = VRset("CN_CURRENT", "MiniIcons", advanced.!miniicons)
4418    ok = VRset("CN_SMBTREE", "MiniIcons", advanced.!miniicons)
4419    ok = VRset("CN_CONDET",  "MiniIcons", advanced.!miniicons)
4420
4421    if advanced.!lmhosts = 1 then do
4422        call _LMHostsRead
4423        call _LMHostsUpdate
4424    end
4425    if advanced.!smbconfchanged = 1 then do
4426        name_resolve_order = VRGet("SPIN_NRO1","value")' 'VRGet("SPIN_NRO2","value")' 'VRGet("SPIN_NRO3","value")' 'VRGet("SPIN_NRO4","value")
4427        handle = IniOpen('global', samba.!smbconf)
4428        call IniSet 'name resolve order', name_resolve_order, handle
4429        /* FIXME: Throw an error in this case */
4430        if \_IsValidIPAddress(VRGet("EF_WINS_SERVER","Value")) then ok = VRSet("EF_WINS_SERVER","Value","")
4431        call IniSet 'wins server', VRGet("EF_WINS_SERVER","Value"), handle
4432        call IniSave handle
4433        call IniClose handle
4434        advanced.!smbconfchanged = 0
4435        ok = VRSet("PB_SETTINGS_UNDO","Enabled", 0)
4436    end
4437    if options.!storecreds = 0 then call Menu_File_ucCred_Reset_Click
4438return
4439
4440/*:VRX         PB_SETTINGS_HELP_Click
4441*/
4442PB_SETTINGS_HELP_Click:
4443    CALL VRMethod 'SW_SETTINGS', 'InvokeHelp'
4444return
4445
4446/*:VRX         PB_SETTINGS_UNDO_Click
4447*/
4448PB_SETTINGS_UNDO_Click:
4449    call SW_SETTINGS_Init_Content
4450return
4451
4452/*:VRX         PB_SMBCONF_APPLY_Click
4453*/
4454PB_SMBCONF_APPLY_Click:
4455    if advanced.!smbconfchanged = 1 then do
4456        client_lanman_auth          = VRGet("CB_client_lanman_auth","Set")
4457        client_plaintext_auth       = VRGet("CB_client_plaintext_auth","Set")
4458        client_use_spnego           = VRGet("CB_client_use_spnego","Set")
4459        client_use_spnego_principal = VRGet("CB_client_use_spnego_principal","Set")
4460
4461        handle = IniOpen('global', samba.!smbconf)
4462        call IniSet 'client lanman auth',          YesNo(client_lanman_auth), handle
4463        call IniSet 'client plaintext auth',       YesNo(client_plaintext_auth), handle
4464        call IniSet 'client use spnego',           YesNo(client_use_spnego), handle
4465        call IniSet 'client use spnego principal', YesNo(client_use_spnego_principal), handle
4466
4467        call IniSave handle
4468        call IniClose handle
4469        advanced.!smbconfchanged = 0
4470        ok = VRSet("PB_SMBCONF_UNDO","Enabled", 0)
4471    end
4472return
4473
4474/*:VRX         PB_SMBCONF_HELP_Click
4475*/
4476PB_SMBCONF_HELP_Click:
4477    CALL VRMethod 'SW_SETTINGS', 'InvokeHelp'
4478return
4479
4480/*:VRX         PB_SMBCONF_UNDO_Click
4481*/
4482PB_SMBCONF_UNDO_Click:
4483    call SW_SETTINGS_Init_Content
4484return
4485
4486/*:VRX         PB_SMBTREE_CONNECT_Click
4487*/
4488PB_SMBTREE_CONNECT_Click: PROCEDURE EXPOSE settings. options. icons. fs. advanced. cd. samba. mtype.
4489    if options.!debug == 1 then say time()' '||"PB_CONNECT_Click started"
4490
4491    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "SourceOrSelected", "SelRH." )
4492
4493    if SelRH.0 = 0 then do
4494        if options.!debug == 1 then say time()' '||"PB_CONNECT_Click aborted"
4495        return
4496    end
4497
4498    p_workgroup = ''
4499    p_server    = ''
4500    p_share     = ''
4501
4502    srcFile = ""
4503    srcCtn  = VRGet("CN_SMBTREE","Self")
4504    srcRec  = SelRH.1
4505    trgCtn  = VRGet("CN_CURRENT","Self")
4506    trgRec  = ""
4507
4508    if options.!debug == 1 then do
4509        say '  srcCtn      = "'srcCtn'"'
4510        if srcCtn <> "" then say '  srcCtn name = "'VRGet(srcCtn,'Name')'"'
4511        say '  srcRec      = "'srcRec'"'
4512        say '  trgCtn      = "'trgCtn'"'
4513        if trgCtn <> "" then say '  trgCtn name = "'VRGet(trgCtn,'Name')'"'
4514        say '  trgRec      = "'trgRec'"'
4515    end
4516
4517    ok = VRMethod("CB_MOUNT", "GetStringList", "ShareLevels." )
4518
4519    DragCapt = VRMethod(srcCtn, "GetRecordAttr", srcRec, "Caption")
4520    ParentRH = VRMethod(srcCtn, "GetRecordAttr", srcRec, "Parent")
4521
4522    if ParentRH = "" then do /* A workgroup was dragged */
4523        say "Workgroup dragged!"
4524        parse var DragCapt p_workgroup '0D0A'x .
4525        p_workgroup = strip(p_workgroup)
4526        ok = VRSet("EF_NETWORK","Value",strip(p_workgroup))
4527        call _UpdateObject "EF_SERVER", ""
4528        ok = VRSet("EF_SHARE","Value","")
4529
4530        ShareLevel = 3
4531    end
4532    else do
4533        ParDragCapt = VRMethod(srcCtn, "GetRecordAttr", ParentRH, "Caption")
4534        GParentRH = VRMethod(srcCtn, "GetRecordAttr", ParentRH, "Parent")
4535
4536        if GParentRH = "" then do /* A server was dragged */
4537            say "Server dragged!"
4538            parse var ParDragCapt p_workgroup '0D0A'x .
4539            ok = VRSet("EF_NETWORK","Value",strip(p_workgroup))
4540            p_workgroup = strip(p_workgroup)
4541
4542            parse var DragCapt p_server '0D0A'x .
4543            p_server = strip(p_server)
4544            call _UpdateObject "EF_SERVER", p_server
4545            ok = VRSet("EF_Share","Value","")
4546
4547            ShareLevel = 2
4548        end
4549        else do /* A share was dragged */
4550            say "Share dragged!"
4551            GParDragCapt = VRMethod(srcCtn, "GetRecordAttr", GParentRH, "Caption")
4552
4553            parse var GParDragCapt p_workgroup '0D0A'x .
4554            p_workgroup = strip(p_workgroup)
4555            ok = VRSet("EF_NETWORK","Value",strip(p_workgroup))
4556
4557            parse var ParDragCapt p_server '0D0A'x .
4558            p_server = strip(p_server)
4559            call _UpdateObject "EF_SERVER", p_server
4560
4561            parse var DragCapt p_share '0D0A'x .
4562            p_share = strip(p_share)
4563            ok = VRSet("EF_Share","Value",strip(p_share))
4564
4565            ShareLevel = 1
4566        end
4567    end
4568
4569    say 'p_workgroup = "'p_workgroup'"'
4570    say 'p_server   = "'p_server'"'
4571    say 'p_share = "'p_share'"'
4572
4573    ok = VRSet( "CB_MOUNT", "Selected", Sharelevel )
4574    call CB_MOUNT_Change
4575
4576    if trgRec = "" then do
4577        window = VRLoadSecondary( "SW_MOUNTPOINT", "W" )
4578        if VRGet("CB_DRIVES","Value") = "" then return
4579    end
4580    else do
4581
4582        TargetString = VRMethod(trgCtn, "GetRecordAttr", trgRec, "Caption")
4583
4584        parTrgRH = VRMethod(trgCtn, "GetRecordAttr", trgRec, "Parent")
4585
4586        do while parTrgRH <> ""
4587            partrgCapt = VRMethod(trgCtn, "GetRecordAttr", partrgRH, "Caption")
4588            TargetString = partrgCapt||'\'||TargetString
4589            parTrgRH = VRMethod(trgCtn, "GetRecordAttr", partrgRH , "Parent")
4590        end
4591        say 'TargetString = "'TargetString'"'
4592        ok = VRSet("CB_DRIVES","Value", left(TargetString,2))
4593        ok = VRSet("EF_DIRECTORY","Value", substr(TargetString,4))
4594    end
4595
4596    window = VRLoadSecondary( "SW_LOGIN", "W" )
4597    if credentials.!entered = 1 then call PB_MOUNT_CLICK
4598
4599    if options.!debug == 1 then say time()' '||"PB_CONNECT_Click done"
4600RETURN
4601
4602/*:VRX         PB_SMBTREE_HELP_Click
4603*/
4604PB_SMBTREE_HELP_Click:
4605    CALL VRMethod 'GB_SMBTREE', 'InvokeHelp'
4606return
4607
4608/*:VRX         PB_SMBTREE_REFRESH_Click
4609*/
4610PB_SMBTREE_REFRESH_Click: /* PROCEDURE EXPOSE settings. options. icons. fs. samba. debuglevel advanced. UserCred Refreshmode Tempdir */
4611    if options.!debug == 1 then say time()' '||"PB_REFRESH_Click started"
4612
4613    if advanced.!browseauth = 1 & (UserCred = "--user=%" | UserCred = "" ) then do
4614        window = VRLoadSecondary( "SW_LOGIN", "W" )
4615    end
4616
4617    call _UserCredUpdate
4618    ok = VRset("Pict_Throbber", "Visible", 1)
4619    ok = VRset("Menu_Selected_Connect", "Visible", 0)
4620    ok = VRset("TM_Throbber", "Enabled", 1)
4621    ShowHidden = advanced.!special
4622    BroadCast = advanced.!broadcast
4623    ok = VRSet("TM_RefreshTreeDisplay", "Delay", 1000)
4624    ok = time('R')
4625    call _RefreshTree
4626    if options.!debug == 1 then say time()' '||"PB_REFRESH_Click done"
4627RETURN
4628
4629/*:VRX         PB_UNMOUNT_Click
4630*/
4631PB_UNMOUNT_Click: PROCEDURE EXPOSE settings. options. icons. fs. cd. samba.
4632    if options.!debug == 1 then say time()' '||"PB_UNMOUNT_Click started"
4633    if options.!debug == 1 then say time()' '||'options.!editmode = 'options.!editmode
4634    CALL VRMethod "CN_CURRENT", 'GetRecordList', 'Selected', 'select.'
4635    IF select.0 < 1 THEN RETURN
4636
4637    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', select.1, 'UserData')
4638    PARSE VAR userdata mountpoint ';' mounts ';' .
4639say 'userdata="'userdata'"'
4640    IF mounts > 0 & options.!editmode = 0 THEN DO
4641        btns.0 = 2
4642        btns.1 = NLVGetMessage( 6 )
4643        btns.2 = NLVGetMessage( 7 )
4644        confirm = VRMessage('Main', NLVGetMessage( 57, mountpoint ), NLVGetMessage( 8 ), 'Q', 'btns.', 1, 2 )
4645        IF confirm \= 1 THEN RETURN
4646    END
4647
4648    /* Unmount any resources */
4649    DO i = 1 TO mounts
4650        CALL _Dynamic "ok = "fs.!prefix"RxUnmount('"mountpoint"', "i-1")"
4651    END
4652
4653    /* Delete mountpoint */
4654    parent = VRMethod("CN_CURRENT", 'GetRecordAttr', select.1, 'Parent')
4655    IF parent \= '' THEN DO
4656        CALL _Dynamic "ok = "fs.!prefix"RxDeleteMountPoint('"mountpoint"')"
4657    END
4658
4659    CALL Refresh
4660    if options.!debug == 1 then say time()' '||"PB_UNMOUNT_Click done"
4661RETURN 0
4662
4663/*:VRX         Pict_PWINMEM_Click
4664*/
4665Pict_PWINMEM_Click:
4666    if VRGet("Pict_PWINMEM","PicturePath") = "#36" then do
4667        call Menu_File_ucCred_Reset_Click
4668    end
4669return
4670
4671/*:VRX         Quit
4672*/
4673Quit:
4674    if Fatal <> 1 then CALL _INISave
4675    /* ok = VRREdirectSTdio("OFF") */
4676    window = VRWindow()
4677    call VRSet window, "Shutdown", 1
4678    drop window
4679RETURN
4680
4681/*:VRX         Refresh
4682*/
4683Refresh:
4684    if options.!debug == 1 then say time()' Refresh started'
4685    CALL VRSet "CN_CURRENT", 'Painting', 0
4686
4687    CALL VRMethod "CN_CURRENT", 'RemoveRecord', 'All'
4688
4689    /* Remove Active connections from details view */
4690    ok = VRMethod( "CN_CONDET", "GetRecordList", 'All', "rh." )
4691
4692    do I = 1 to rh.0
4693        /* This catches the bug we observed exactly once and were unable to reproduce! */
4694        if cd.statusfh = 'CD.STATUSFH' then do
4695            if options.!debug == 1 then call beep 880, 50
4696            if options.!debug == 1 then call beep 880, 50
4697            if options.!debug == 1 then say "  cd.statusfh is undefined - check why!!!!!!"
4698            leave
4699        end
4700        if options.!debug == 1 then say '  Icon.'i' = "'||VRMethod( "CN_CONDET", "GetFieldData", rh.i, cd.statusfh)'"'
4701        if VRMethod("CN_CONDET","GetFieldData", rh.i, cd.statusfh) = icons.!active then CALL VRMethod "CN_CONDET", 'RemoveRecord', rh.i
4702    end
4703
4704/*  call _AddTemplates */
4705    CALL VRSet "PB_DETACH",  "Enabled", 0
4706    CALL VRSet "PB_UNMOUNT", "Enabled", 0
4707
4708    ok = VRSet("MENU_CONTEXT_OPEN",    "Visible",  0)
4709/*  ok = VRSet("MENU_CONTEXT_SEP1",    "Visible",  0) */
4710    ok = VRSet("MENU_CONTEXT_DETACH",  "Visible",  0)
4711    ok = VRSet("MENU_CONTEXT_UNMOUNT", "Visible",  0)
4712    ok = VRSet("MENU_CONTEXT_EDIT",    "Visible",  0)
4713
4714    ok = VRSet("MENU_SELECTED_REMOVE", "Visible",  0)
4715    ok = VRSet("MENU_SELECTED_RETRY",  "Visible",  0)
4716
4717    if options.!debug == 1 then say '  Remove records, disable buttons done.'
4718
4719    CALL VRMethod 'CB_DRIVES', 'Clear'
4720
4721    CALL VRSet "CN_CURRENT", "Caption", fs.!Name' 'fs.!version
4722
4723    /* Herwig B.: Attention! The SysDrivemap function with the "free" parameter causes hangs in case it is called repeatedly! */
4724    drvs = MyFreeDriveMap('C:', 'FREE')
4725
4726    DO i = 1 TO WORDS( drvs )
4727        drvstem.i = WORD( drvs, i )
4728    END
4729
4730    drvstem.0 = WORDS( drvs )
4731
4732    /* Add any existing EVFS drives */
4733    CALL GetMountPoints
4734
4735    CALL VRMethod "CB_DRIVES", "AddStringList", "drvstem."
4736    CALL VRSet "CN_CURRENT", 'Painting', 1
4737    if options.!debug == 1 then say time()' '||"Refresh done"
4738RETURN 0
4739
4740/*:VRX         SPIN_NRO1_Change
4741*/
4742SPIN_NRO1_Change:
4743    advanced.!smbconfchanged = 1
4744return
4745
4746/*:VRX         SPIN_NRO2_Change
4747*/
4748SPIN_NRO2_Change:
4749    advanced.!smbconfchanged = 1
4750return
4751
4752/*:VRX         SPIN_NRO3_Change
4753*/
4754SPIN_NRO3_Change:
4755    advanced.!smbconfchanged = 1
4756return
4757
4758/*:VRX         SPIN_NRO4_Change
4759*/
4760SPIN_NRO4_Change:
4761    advanced.!smbconfchanged = 1
4762return
4763
4764/*:VRX         SPLIT_Main_Move
4765*/
4766SPLIT_Main_Move:
4767    ok = VRset("Main", "Painting", 0)
4768    NewPos = VRInfo("Left")
4769    OldPos = VRGet("SPLIT_Main","Left")
4770    ok = VRSet("SPLIT_Main","Left", NewPos)
4771    ok = VRset("GB_SMBTREE","Left", NewPos+60)
4772    call Main_Resize
4773    ok = VRset("Main", "Painting", 1)
4774return
4775
4776/*:VRX         SW_ABOUT_Close
4777*/
4778SW_ABOUT_Close:
4779    options.!tracmark = VRGet('CB_TRAC', 'Set')
4780    call SW_ABOUT_Fini
4781return
4782
4783/*:VRX         SW_ABOUT_Create
4784*/
4785SW_ABOUT_Create:
4786    call SW_ABOUT_Init
4787
4788    CALL NLVSetText 'SW_ABOUT',        "Caption", 1
4789    CALL NLVSetText 'PB_ABOUT_CLOSE',  "Caption", 29
4790    CALL NLVSetText 'PB_ABOUT_COPY',   "Caption", 121
4791    CALL NLVSetText 'CB_TRAC',         "Caption", 134
4792
4793    CALL VRSet 'CB_TRAC', 'Set', options.!tracmark
4794
4795    ok = VRSet("DT_About","Caption", Program' (c) 2007-2016 Alexander Taylor'||'0D0A'x||'and Herwig Bauernfeind for bww bitwise works GmbH.')
4796
4797    About.DscFH  = VRMethod( "CN_ABOUT", "AddField", "String", "Component" )
4798    About.ValFH  = VRMethod( "CN_ABOUT", "AddField", "String", "Version" )
4799
4800    call _AboutSambaClientGetInfo
4801
4802return
4803/*:VRX         SW_ABOUT_Fini
4804*/
4805SW_ABOUT_Fini:
4806    window = VRInfo( "Window" )
4807    call VRDestroy window
4808    drop window
4809return
4810/*:VRX         SW_ABOUT_Init
4811*/
4812SW_ABOUT_Init:
4813    window = VRInfo( "Object" )
4814    if( \VRIsChildOf( window, "TabbedDialog" ) ) then do
4815        call VRMethod window, "CenterWindow"
4816        call VRSet window, "Visible", 1
4817        call VRMethod window, "Activate"
4818    end
4819    drop window
4820return
4821
4822/*:VRX         SW_ADVANCED_Close
4823*/
4824SW_ADVANCED_Close:
4825    call SW_ADVANCED_Fini
4826return
4827
4828/*:VRX         SW_ADVANCED_Create
4829*/
4830SW_ADVANCED_Create:
4831    call SW_ADVANCED_Init
4832return
4833
4834/*:VRX         SW_ADVANCED_Fini
4835*/
4836SW_ADVANCED_Fini:
4837    window = VRInfo( "Window" )
4838    call VRDestroy window
4839    drop window
4840return
4841/*:VRX         SW_ADVANCED_Init
4842*/
4843SW_ADVANCED_Init:
4844    /* Title bar */
4845    CALL NLVSetText "SW_ADVANCED",  "Caption", 40
4846
4847    /* Options */
4848    CALL NLVSetText "GB_ADVANCED",          "Caption", 43
4849    CALL NLVSetText "CB_EAS",           "Caption", 44
4850    CALL NLVSetText "CB_READONLY",      "Caption", 45
4851    CALL NLVSetText "CB_ALWAYSMP",      "Caption", 65
4852    CALL NLVSetText "DT_CACHETIMEOUT",  "Caption", 130
4853    CALL NLVSetText "DT_CACHELISTINGS", "Caption", 131
4854
4855    /* Buttons */
4856    CALL NLVSetText "PB_ADVANCED_APPLY",     "Caption", 122
4857    CALL NLVSetText "PB_ADVANCED_UNDO", "Caption", 123
4858    CALL NLVSetText "PB_ADVANCED_HELP",   "Caption", 4
4859
4860    CALL VRSet "SW_ADVANCED", "HelpTag", NLVGetMessage(40)
4861
4862/*  call VRMethod "SW_ADVANCED", "CenterWindow" */
4863    ok = VRSet("SW_ADVANCED", "Visible", 1)
4864/*  call VRMethod "SW_ADVANCED", "Activate" */
4865return
4866
4867/*:VRX         SW_ADVANCED_Init_Content
4868*/
4869SW_ADVANCED_Init_Content:
4870    IF advanced.!easupport     \= "" THEN ok = VRSet("CB_EAS",     "Set",   advanced.!easupport)
4871    IF advanced.!readonly      \= "" THEN ok = VRSet("CB_READONLY","Set",   advanced.!readonly)
4872    IF advanced.!alwaysmp      \= "" THEN ok = VRSet("CB_ALWAYSMP","Set",   advanced.!alwaysmp)
4873    IF advanced.!cachetimeout  \= "" THEN ok = VRSet("SPIN_CACHETIMEOUT",   "Value", advanced.!cachetimeout)
4874    IF advanced.!cachelistings \= "" THEN ok = VRSet("SPIN_CACHELISTINGS",  "Value", advanced.!cachelistings)
4875
4876    /* Obsolete */
4877    IF advanced.!memlen        \= "" THEN ok = VRSet("SPB_MEMLEN", "Value", advanced.!memlen)
4878return
4879
4880/*:VRX         SW_CONDET_Close
4881*/
4882SW_CONDET_Close:
4883    call SW_CONDET_Fini
4884return
4885
4886/*:VRX         SW_CONDET_Create
4887*/
4888SW_CONDET_Create:
4889    call SW_CONDET_Init
4890return
4891
4892/*:VRX         SW_CONDET_Fini
4893*/
4894SW_CONDET_Fini:
4895    window = VRInfo( "Window" )
4896    call VRDestroy window
4897    drop window
4898return
4899/*:VRX         SW_CONDET_Init
4900*/
4901SW_CONDET_Init:
4902
4903return
4904
4905/*:VRX         SW_CONDET_Init_Content
4906*/
4907SW_CONDET_Init_Content:
4908    if VRGet("TM_Throbber","Enabled") = 1 then ok = VRset("Pict_Throbber", "Visible", 0)
4909
4910    /* Hide any "foreign" menu entries */
4911    ok = VRSet("Menu_Selected_Connect", "Visible", 0)
4912return
4913
4914/*:VRX         SW_DIALOG_Close
4915*/
4916SW_DIALOG_Close:
4917    call SW_DIALOG_Fini
4918return
4919
4920/*:VRX         SW_DIALOG_Create
4921*/
4922SW_DIALOG_Create:
4923    call SW_DIALOG_Init
4924return
4925
4926/*:VRX         SW_DIALOG_Fini
4927*/
4928SW_DIALOG_Fini:
4929    window = VRInfo( "Window" )
4930    call VRDestroy window
4931    drop window
4932return
4933/*:VRX         SW_DIALOG_Init
4934*/
4935SW_DIALOG_Init:
4936    LEDSize = VRMethod( "Screen", "PixelsToTwips", 16 )
4937
4938    ok = VRSet("Pict_PWINMEM","Top",  VRGet("EF_USER","Top")+(VRGet("EF_USER","Height")-LEDSize)%2)
4939    ok = VRSet("Pict_PWINMEM","Width",  LEDSize)
4940    ok = VRSet("Pict_PWINMEM","Height", LEDSize)
4941return
4942
4943/*:VRX         SW_DIALOG_Init_Content
4944*/
4945SW_DIALOG_Init_Content:
4946    /* obsolete */
4947    if VRGet("TM_Throbber","Enabled") = 1 then ok = VRset("Pict_Throbber", "Visible", 0)
4948
4949    ok = VRSet("Menu_Selected_Remove",  "Visible",  0)
4950    ok = VRSet("Menu_Selected_Retry",   "Visible",  0)
4951    ok = VRSet("Menu_Selected_Connect", "Visible",  0)
4952
4953    call _DialogPopulate
4954return
4955
4956/*:VRX         SW_INFO_Close
4957*/
4958SW_INFO_Close:
4959    call SW_INFO_Fini
4960return
4961
4962/*:VRX         SW_INFO_Create
4963*/
4964SW_INFO_Create:
4965    if options.!debug == 1 then say time()' SW_INFO_Create started'
4966    call SW_INFO_Init
4967    CALL NLVSetText 'SW_INFO',    "Caption", 92
4968    CALL NLVSetText 'PB_INFO_OK',    "Caption", 2
4969    Info.TypeFH    = VRMethod( "CN_INFO", "AddField", "String", "Type" )
4970    Info.ValueFH   = VRMethod( "CN_INFO", "AddField", "String", "Value" )
4971
4972    if options.!debug == 1 then do
4973        say '  Handle:   "'SMBObj.rh'"'
4974        say '  Resource: "'SMBObj.resname'"'
4975        say '  Comment:  "'SMBObj.comment'"'
4976        say '  Type:     "'SMBObj.udatatype'"'
4977        say '  Message:  "'SMBObj.udatamsg'"'
4978        say '  Icon:     "'SMBObj.icon'"'
4979    end
4980say "Vorher:"rpc.srvinfo.OS_VERSION
4981    drop rpc.
4982say "Vorher:"rpc.srvinfo.OS_VERSION
4983    rpc_success = _rpcsrvinfo(SMBObj.resname,credentials.!username,credentials.!password)
4984
4985    Info.!nbname       = VRMethod( "CN_INFO", "AddRecord")
4986    Info.!comment      = VRMethod( "CN_INFO", "AddRecord")
4987    Info.!domain       = VRMethod( "CN_INFO", "AddRecord")
4988    Info.!DMBLMB       = VRMethod( "CN_INFO", "AddRecord")
4989    if rpc_success = 1 then Info.!capabilities = VRMethod( "CN_INFO", "AddRecord")
4990    Info.!os           = VRMethod( "CN_INFO", "AddRecord")
4991    Info.!server       = VRMethod( "CN_INFO", "AddRecord")
4992    if rpc_success = 1 then Info.!version      = VRMethod( "CN_INFO", "AddRecord")
4993    Info.!status       = VRMethod( "CN_INFO", "AddRecord")
4994    Info.!IP           = VRMethod( "CN_INFO", "AddRecord")
4995    Info.!MAC          = VRMethod( "CN_INFO", "AddRecord")
4996
4997    if rpc_success = 1 then do
4998        if rpc.srvinfo.OS_VERSION = 'RPC.SRVINFO.OS_VERSION' then rpc.srvinfo.OS_VERSION = ''
4999        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!nbname, Info.TypeFH, strip(NLVGetMessage(137),'T',':'),Info.ValueFH, rpc.srvinfo.NETBIOSNAME)
5000        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!comment,Info.TypeFH, strip(NLVGetMessage(125),'T',':'),Info.ValueFH, rpc.srvinfo.SERVERSTRING)
5001        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!capabilities, Info.TypeFH, strip(NLVGetMessage(138),'T',':'),Info.ValueFH, rpc.srvinfo.CAPABILITIES)
5002        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!version,Info.TypeFH, strip(NLVGetMessage(139),'T',':'),Info.ValueFH, rpc.srvinfo.OS_VERSION)
5003        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!status, Info.TypeFH, strip(NLVGetMessage(67),'T',':'),Info.ValueFH, rpc.srvinfo.LOGONSTATUS )
5004        /* we did not get these, but we know them anyway */
5005        if rpc.srvinfo.NETBIOSNAME  = "" then ok = VRMethod( "CN_INFO", "SetFieldData", Info.!nbname, Info.TypeFH, strip(NLVGetMessage(137),'T',':'),Info.ValueFH, SMBObj.resname)
5006        if rpc.srvinfo.SERVERSTRING = "" then ok = VRMethod( "CN_INFO", "SetFieldData", Info.!comment,Info.TypeFH, strip(NLVGetMessage(125),'T',':'),Info.ValueFH, SMBObj.comment)
5007    end
5008    else do
5009        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!nbname, Info.TypeFH, strip(NLVGetMessage(137),'T',':'),Info.ValueFH, SMBObj.resname)
5010        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!comment,Info.TypeFH, strip(NLVGetMessage(125),'T',':'),Info.ValueFH, SMBObj.comment)
5011        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!status, Info.TypeFH, strip(NLVGetMessage(67),'T',':'), Info.ValueFH, SMBObj.udatamsg)
5012    end
5013
5014    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!domain, Info.TypeFH, strip(NLVGetMessage(21), 'T',':'),Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, WorkGroupFH ))
5015    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!os,     Info.TypeFH, strip(NLVGetMessage(93), 'T',':'),Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, OSFH  ))
5016    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!server, Info.TypeFH, strip(NLVGetMessage(19), 'T',':'),Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, VersionFH  ))
5017    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!DMBLMB, Info.TypeFH, strip(NLVGetMessage(124),'T',':'),Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, MBFH  ))
5018    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!IP,     Info.TypeFH, "IP"  ,Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, IPFH  ))
5019    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!MAC,    Info.TypeFH, "MAC" ,Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, MacFH ))
5020
5021    if options.!debug == 1 then say time()' SW_INFO_Create done'
5022return
5023
5024/*:VRX         SW_INFO_Fini
5025*/
5026SW_INFO_Fini:
5027    window = VRInfo( "Window" )
5028    call VRDestroy window
5029    drop window
5030return
5031/*:VRX         SW_INFO_Init
5032*/
5033SW_INFO_Init:
5034    window = VRInfo( "Object" )
5035    if( \VRIsChildOf( window, "TabbedDialog" ) ) then do
5036        call VRMethod window, "CenterWindow"
5037        call VRSet window, "Visible", 1
5038        call VRMethod window, "Activate"
5039    end
5040    drop window
5041return
5042
5043/*:VRX         SW_LOGIN_Close
5044*/
5045SW_LOGIN_Close:
5046    call SW_LOGIN_Fini
5047return
5048
5049/*:VRX         SW_LOGIN_Create
5050*/
5051SW_LOGIN_Create:
5052    call SW_LOGIN_Init
5053    ok = VRSet("SW_LOGIN","Caption",NLVGetMessage(136)' 'strip(p_workgroup' \\'p_server'\'p_share,'T','\'))
5054    CALL NLVSetText 'DT_USER1',       "Caption", 25
5055    CALL NLVSetText 'DT_PASSWORD1',   "Caption", 26
5056    CALL NLVSetText 'CB_STORECREDS1', "Caption", 135
5057    CALL NLVSetText 'PB_LOGIN_OK',    "Caption", 2
5058    CALL NLVSetText 'PB_LOGIN_CANCEL',"Caption", 3
5059
5060    if VRIsValidObject(SMBObj.rh) then do
5061        select
5062            when pos("PDC",VRMethod("CN_smbtree", "GetFieldData", SMBObj.rh, MBFH)) > 0 then LoginIcon = "#63:PMWP.DLL" /* icons.!pdc */
5063            when SMBObj.udatatype = "WORKGROUP" then LoginIcon = SMBObj.Icon
5064            when SMBObj.udatatype = "SERVER"    then LoginIcon = SMBObj.Icon
5065            when SMBObj.udatatype = "DISK"      then do
5066                if pos("PDC",VRMethod("CN_smbtree", "GetFieldData", SMBObj.parentrh, MBFH)) > 0
5067                    then LoginIcon = "#63:PMWP.DLL" /* icons.!pdc */
5068                    else LoginIcon = "#35:PMWP.DLL" /* icons.!pdc */
5069            end
5070            otherwise LoginIcon = "#35:PMWP.DLL" /* icons.!machine_awake */
5071        end
5072        say loginicon
5073        ok = VRSet("Pict_Login","PicturePath", LoginIcon)
5074    end
5075    ok = VRSet("EF_USER1","Value",VRGet("EF_USER","Value"))
5076    ok = VRSet("EF_PASSWORD1","Value",VRGet("EF_PASSWORD","Value"))
5077    ok = VRSet("CB_STORECREDS1","Set",options.!storecreds)
5078return
5079
5080/*:VRX         SW_LOGIN_Fini
5081*/
5082SW_LOGIN_Fini:
5083    window = VRInfo( "Window" )
5084    call VRDestroy window
5085    drop window
5086return
5087/*:VRX         SW_LOGIN_Init
5088*/
5089SW_LOGIN_Init:
5090    window = VRInfo( "Object" )
5091    if( \VRIsChildOf( window, "TabbedDialog" ) ) then do
5092        call VRMethod window, "CenterWindow"
5093        call VRSet window, "Visible", 1
5094        call VRMethod window, "Activate"
5095    end
5096    drop window
5097return
5098
5099/*:VRX         SW_LOGIN_KeyPress
5100*/
5101SW_LOGIN_KeyPress:
5102    obj = VRInfo( "Object" )
5103    keystr = VRGet( obj, "KeyString" )
5104/*  say keystr */
5105    select
5106        when keystr = "{Enter}" then ok = VRMethod( "EF_LoginPassword", "SetFocus" )
5107        when keystr = "{Newline}" then ok = VRMethod( "EF_LoginPassword", "SetFocus" )
5108        when keystr  = "{Esc}" then call PB_LOGIN_CANCEL_Click
5109        otherwise nop
5110    end
5111return
5112
5113/*:VRX         SW_MOUNTPOINT_Close
5114*/
5115SW_MOUNTPOINT_Close:
5116    call SW_MOUNTPOINT_Fini
5117return
5118
5119/*:VRX         SW_MOUNTPOINT_Create
5120*/
5121SW_MOUNTPOINT_Create:
5122    call SW_MOUNTPOINT_Init
5123
5124    ok = VRSet("SW_MOUNTPOINT","Caption",strip(p_workgroup' \\'p_server'\'p_share,'T','\')) /* NLVGetMessage(14)' ' */
5125    CALL NLVSetText 'DT_MPOINT1',   "Caption", 27
5126    CALL NLVSetText 'PB_NEWMOUNTPOINTOK',    "Caption", 2
5127    CALL NLVSetText 'PB_NEWMOUNTPOINTCANCEL',"Caption", 3
5128    CALL NLVSetText 'CB_EAS1',       "Caption", 44
5129    CALL NLVSetText 'CB_READONLY1',  "Caption", 45
5130    CALL NLVSetText 'CB_ALWAYSMP1',  "Caption", 65
5131    CALL NLVSetText "DT_CACHETIMEOUT1",  "Caption", 130
5132    CALL NLVSetText "DT_CACHELISTINGS1", "Caption", 131
5133
5134    ok = VRMethod( "CB_DRIVES",  "GetStringList", "freedrives." )
5135    ok = VRMethod( "CB_DRIVES1", "AddStringList", "freedrives." )
5136    ok = VRSet("CB_DRIVES1", "Value", VRGet("CB_Drives","Value"))
5137
5138    if VRGet("EF_Directory","Value") = "" then ok = VRSet("EF_DIRECTORY1", "Value", VRGet("EF_Directory","Value"))
5139
5140    ok = VRMethod("EF_DIRECTORY1","AddString",p_share)
5141
5142    IF advanced.!easupport     \= "" THEN ok = VRSet("CB_EAS1",            "Set",   advanced.!easupport)
5143    IF advanced.!readonly      \= "" THEN ok = VRSet("CB_READONLY1",       "Set",   advanced.!readonly)
5144    IF advanced.!alwaysmp      \= "" THEN ok = VRSet("CB_ALWAYSMP1",       "Set",   advanced.!alwaysmp)
5145    IF advanced.!cachetimeout  \= "" THEN ok = VRSet("SPIN_CACHETIMEOUT1", "Value", advanced.!cachetimeout)
5146    IF advanced.!cachelistings \= "" THEN ok = VRSet("SPIN_CACHELISTINGS1","Value", advanced.!cachelistings)
5147return
5148
5149/*:VRX         SW_MOUNTPOINT_Fini
5150*/
5151SW_MOUNTPOINT_Fini:
5152    window = VRInfo( "Window" )
5153    call VRDestroy window
5154    drop window
5155return
5156/*:VRX         SW_MOUNTPOINT_Init
5157*/
5158SW_MOUNTPOINT_Init:
5159    window = VRInfo( "Object" )
5160    if( \VRIsChildOf( window, "TabbedDialog" ) ) then do
5161        call VRMethod window, "CenterWindow"
5162        call VRSet window, "Visible", 1
5163        call VRMethod window, "Activate"
5164    end
5165    drop window
5166return
5167
5168/*:VRX         SW_PORTCONNECT_Close
5169*/
5170SW_PORTCONNECT_Close:
5171    call SW_PORTCONNECT_Fini
5172return
5173
5174/*:VRX         SW_PORTCONNECT_Create
5175*/
5176SW_PORTCONNECT_Create:
5177    call SW_PORTCONNECT_Init
5178
5179    ok = VRGetINI("PM_PORT_DRIVER","SMB","SYSTEM")
5180
5181    if ok = "" then do
5182
5183    end
5184    else do
5185        say "Samba Spooler Port driver installed!"
5186        ok = SysINI("SYSTEM","PM_SPOOLER_PORT","ALL:","ports")
5187        smbport.0 = 0
5188        do I = 1 to ports.0
5189            if left(ports.I,3) = "SMB" then do
5190                X = smbport.0
5191                X = X + 1
5192                smbport.0 = X
5193                smbport.X = ports.I
5194            end
5195        end
5196        do I = 1 to smbport.0
5197            say smbport.I
5198        end
5199    end
5200
5201return
5202
5203/*:VRX         SW_PORTCONNECT_Fini
5204*/
5205SW_PORTCONNECT_Fini:
5206    window = VRInfo( "Window" )
5207    call VRDestroy window
5208    drop window
5209return
5210/*:VRX         SW_PORTCONNECT_Init
5211*/
5212SW_PORTCONNECT_Init:
5213    window = VRInfo( "Object" )
5214    if( \VRIsChildOf( window, "TabbedDialog" ) ) then do
5215        call VRMethod window, "CenterWindow"
5216        call VRSet window, "Visible", 1
5217        call VRMethod window, "Activate"
5218    end
5219    drop window
5220return
5221
5222/*:VRX         SW_PROGRESS_Close
5223*/
5224SW_PROGRESS_Close:
5225    options.!delay = 0
5226    call Main_Resize
5227    call VRSet 'Main',    'Visible', 1
5228    call SW_PROGRESS_Fini
5229return
5230
5231/*:VRX         SW_PROGRESS_Create
5232*/
5233SW_PROGRESS_Create:
5234    call SW_PROGRESS_Init
5235    CALL NLVSetText 'SW_PROGRESS',  "Caption", 1
5236    CALL NLVSetText 'DT_PROGRESS',  "Caption", 34
5237    CALL NLVSetText 'PB_PROGRESS_ABORT',  "Caption", 3
5238
5239    if options.!delay > 0 then ok = VRSet("TM_TheCloser","Delay", options.!delay*1000)
5240
5241    CALL VRSet "TM_Progress_Throbber","Enabled", 1
5242    CALL VRSet "TM_TheCloser","Enabled", 1
5243return
5244
5245/*:VRX         SW_PROGRESS_Fini
5246*/
5247SW_PROGRESS_Fini:
5248    call VRDestroy "SW_PROGRESS"
5249return
5250/*:VRX         SW_PROGRESS_Init
5251*/
5252SW_PROGRESS_Init:
5253    call VRMethod "SW_PROGRESS", "CenterWindow", "Parent"
5254    call VRSet    "SW_PROGRESS", "Visible", 1
5255    call VRMethod "SW_PROGRESS", "Activate"
5256return
5257
5258/*:VRX         SW_SETTINGS_Close
5259*/
5260SW_SETTINGS_Close:
5261    call SW_SETTINGS_Fini
5262return
5263
5264/*:VRX         SW_SETTINGS_Create
5265*/
5266SW_SETTINGS_Create:
5267    call SW_SETTINGS_Init
5268return
5269
5270/*:VRX         SW_SETTINGS_Fini
5271*/
5272SW_SETTINGS_Fini:
5273    window = VRInfo( "Window" )
5274    call VRDestroy window
5275    drop window
5276return
5277/*:VRX         SW_SETTINGS_Init
5278*/
5279SW_SETTINGS_Init:
5280    /* Title bar */
5281    call NLVSetText "SW_SETTINGS",       "Caption", 47
5282
5283    /* Options */
5284    call NLVSetText "GB_GLOBAL",         "Caption", 47
5285    call NLVSetText "CB_DEBUG",          "Caption", 42
5286    call NLVSetText "CB_LOGGING",        "Caption", 46
5287    call NLVSetText "CB_BROWSEIMME",     "Caption", 48
5288    call NLVSetText "CB_BROWSEAUTH",     "Caption", 49
5289    call NLVSetText "CB_SPECIAL",        "Caption", 66
5290    call NLVSetText "CB_SAVEPASSIVE",    "Caption", 73
5291    call NLVSetText "CB_LMHOSTS",        "Caption", 133
5292    call NLVSetText "CB_BROADCAST",      "Caption", 74
5293    call NLVSetText "CB_MINIICONS",      "Caption", 70
5294    call NLVSetText "CB_STORECREDS",     "Caption", 135
5295
5296    /* Buttons */
5297    call NLVSetText "PB_SETTINGS_APPLY",  "Caption", 122
5298    call NLVSetText "PB_SETTINGS_UNDO",   "Caption", 123
5299    call NLVSetText "PB_SETTINGS_HELP",   "Caption", 4
5300
5301/*  call VRSet "SW_ADVANCED", "HelpTag", NLVGetMessage(40) */
5302
5303/*  call VRMethod "SW_SETTINGS", "CenterWindow" */
5304    ok = VRSet("SW_SETTINGS", "Visible", 1)
5305/*  call VRMethod "SW_SETTINGS", "Activate" */
5306return
5307
5308/*:VRX         SW_SETTINGS_Init_Content
5309*/
5310SW_SETTINGS_Init_Content:
5311    ok = VRSet("PB_SETTINGS_UNDO","Enabled", 1)
5312
5313    if advanced.!browseauth  \= ""  then ok = VRSet("CB_BROWSEAUTH", "Set",   advanced.!browseauth)
5314    if advanced.!browseimme  \= ""  then ok = VRSet("CB_BROWSEIMME", "Set",   advanced.!browseimme)
5315    if advanced.!broadcast   \= ""  then ok = VRSet("CB_BROADCAST",  "Set",   advanced.!broadcast)
5316    if advanced.!special     \= ""  then ok = VRSet("CB_SPECIAL",    "Set",   advanced.!special)
5317    if advanced.!savepassive \= ""  then ok = VRSet("CB_SAVEPASSIVE","Set",   advanced.!savepassive)
5318    if advanced.!lmhosts     \= ""  then ok = VRSet("CB_LMHOSTS",    "Set",   advanced.!lmhosts)
5319
5320    call VRSet "CB_LOGGING", "Set", VRFileExists(SysBootDrive()"\ndpsmb.dbg")
5321    if options.!debug        \= ""  then ok = VRSet("CB_debug",      "Set",   options.!debug)
5322    if options.!storecreds   \= ""  then ok = VRSet("CB_STORECREDS", "Set",   options.!storecreds)
5323
5324    if advanced.!miniicons   \= ""  then ok = VRSet("CB_MINIICONS",  "Set",   advanced.!miniicons)
5325
5326    /* Obsolete */
5327    if advanced.!logfile     \= ""  then ok = VRSet("EF_LOGFILE",    "Value", advanced.!logfile)
5328    if advanced.!loglevel    \= "0" then ok = VRSet("SPIN_LOGLEVEL", "Value", advanced.!loglevel)
5329
5330    call _SmbConfCreateShadowCopy
5331
5332    wins_support = translate(IniGet('wins support', 'global', samba.!shadowsmbconf))
5333
5334    if wins_support = "YES" then do /* we are a WINS server ourself */
5335        ok = VRSet("DT_WINS_SERVER","Enabled", 0)
5336        ok = VRSet("EF_WINS_SERVER","BackColor", "PaleGray")
5337        ok = VRSet("EF_WINS_SERVER","Value", "")
5338        ok = VRSet("EF_WINS_SERVER","Enabled", 0)
5339    end
5340    else do
5341        ok = VRSet("EF_WINS_SERVER","Value", IniGet('wins server', 'global', samba.!shadowsmbconf))
5342    end
5343
5344    name_resolve_order = IniGet('name resolve order', 'global', samba.!shadowsmbconf)
5345
5346    do I = 1 to words(name_resolve_order)
5347        ok = VRSet("SPIN_NRO"||I, "value", word(name_resolve_order,I))
5348    end
5349
5350    advanced.!smbconfchanged = 0
5351return
5352
5353/*:VRX         SW_SMBCONF_Close
5354*/
5355SW_SMBCONF_Close:
5356    call SW_SMBCONF_Fini
5357return
5358
5359/*:VRX         SW_SMBCONF_Create
5360*/
5361SW_SMBCONF_Create:
5362    call SW_SMBCONF_Init
5363return
5364
5365/*:VRX         SW_SMBCONF_Fini
5366*/
5367SW_SMBCONF_Fini:
5368    window = VRInfo( "Window" )
5369    call VRDestroy window
5370    drop window
5371return
5372/*:VRX         SW_SMBCONF_Init
5373*/
5374SW_SMBCONF_Init:
5375   
5376    /* Buttons */
5377    call NLVSetText "PB_SMBCONF_APPLY",  "Caption", 122
5378    call NLVSetText "PB_SMBCONF_UNDO",   "Caption", 123
5379    call NLVSetText "PB_SMBCONF_HELP",   "Caption", 4
5380
5381return
5382
5383/*:VRX         SW_SMBCONF_Init_Content
5384*/
5385SW_SMBCONF_Init_Content:
5386    call _SmbConfCreateShadowCopy
5387
5388    client_lanman_auth          = ZeroOne(IniGet('client lanman auth', 'global', samba.!shadowsmbconf))
5389    client_plaintext_auth       = ZeroOne(IniGet('client plaintext auth', 'global', samba.!shadowsmbconf))
5390    client_use_spnego           = ZeroOne(IniGet('client use spnego', 'global', samba.!shadowsmbconf))
5391    client_use_spnego_principal = ZeroOne(IniGet('client use spnego principal', 'global', samba.!shadowsmbconf))
5392
5393    ok = VRSet("CB_client_lanman_auth","Set",client_lanman_auth)
5394    ok = VRSet("CB_client_plaintext_auth","Set",client_plaintext_auth)
5395    ok = VRSet("CB_client_use_spnego","Set",client_use_spnego)
5396    ok = VRSet("CB_client_use_spnego_principal","Set",client_use_spnego_principal)
5397
5398    advanced.!smbconfchanged = 0
5399return
5400
5401/*:VRX         SW_SMBTREE_Close
5402*/
5403SW_SMBTREE_Close:
5404    call SW_SMBTREE_Fini
5405return
5406
5407/*:VRX         SW_SMBTREE_Create
5408*/
5409SW_SMBTREE_Create:
5410    call SW_SMBTREE_Init
5411return
5412
5413/*:VRX         SW_SMBTREE_Fini
5414*/
5415SW_SMBTREE_Fini:
5416    window = VRInfo( "Window" )
5417    call VRDestroy window
5418    drop window
5419return
5420/*:VRX         SW_SMBTREE_Init
5421*/
5422SW_SMBTREE_Init:
5423
5424return
5425
5426/*:VRX         SW_SMBTREE_Init_Content
5427*/
5428SW_SMBTREE_Init_Content:
5429    if VRGet("TM_Throbber","Enabled") = 1 then ok = VRset("Pict_Throbber", "Visible", 1)
5430
5431    /* Hide any "foreign" menu entries */
5432    ok = VRSet("Menu_Selected_Remove", "Visible", 0)
5433    ok = VRSet("Menu_Selected_Retry",  "Visible", 0)
5434return
5435
5436/*:VRX         TDL_1_PageSelected
5437*/
5438TDL_1_PageSelected:
5439    page =  VRInfo("Page")
5440
5441    /* call _TabsStrip */
5442    select
5443        when page = 1 then do /* dialog */
5444            call _TabFix 1
5445        end
5446        when page = 2 then do /* advanced */
5447            call SW_ADVANCED_Init_Content
5448        end
5449        when page = 3 then do /* smbtree */
5450            call SW_SMBTREE_Init_Content
5451        end
5452        when page = 4 then do /* condet */
5453            call SW_CONDET_Init_Content
5454        end
5455        when page = 5 then do /* Settings */
5456            call SW_SETTINGS_Init_Content
5457        end
5458        when page = 6 then do /* SMB.CONF */
5459            call SW_SMBCONF_Init_Content
5460        end
5461        otherwise nop
5462    end
5463return
5464/*:VRX         TM_AutoClose_Trigger
5465*/
5466TM_AutoClose_Trigger:
5467    call Quit
5468return
5469
5470/*:VRX         TM_Progress_Throbber_Trigger
5471*/
5472TM_Progress_Throbber_Trigger:
5473    pIdx = VRGet("Pict_Progress_Throbber","PicturePath")
5474    parse var pIdx '#' pidx
5475    pidx = pidx + 1
5476    if pidx = 23 then pidx = 11
5477    ok = VRSet("Pict_Progress_Throbber","PicturePath","#"pidx)
5478return
5479
5480/*:VRX         TM_RefreshCurrentDisplay_Trigger
5481*/
5482TM_RefreshCurrentDisplay_Trigger:
5483    if RefreshMode <> "" then return
5484    if _DaemonRunning() = 0 then do
5485        say "  Daemon not running - disable GUI"
5486        ok = VRset("GB_CURRENT",            "Enabled", 0)
5487        ok = VRset("TDL_1",                 "Enabled", 0)
5488        ok = VRSet("Menu_File_Daemon_Start","Enabled", 1)
5489        ok = VRSet("Menu_File_Daemon_Stop", "Enabled", 0)
5490    end
5491    else do
5492        say "  Daemon running - enable GUI"
5493        ok = VRset("GB_CURRENT",            "Enabled", 1)
5494        ok = VRset("TDL_1",                 "Enabled", 1)
5495        ok = VRSet("Menu_File_Daemon_Start","Enabled", 0)
5496        ok = VRSet("Menu_File_Daemon_Stop", "Enabled", 1)
5497    end
5498    CALL REFRESH
5499return
5500
5501/*:VRX         TM_RefreshTreeDisplay_Trigger
5502*/
5503TM_RefreshTreeDisplay_Trigger:
5504    ShowHidden = advanced.!special
5505    BroadCast  = advanced.!broadcast
5506    DoLMHosts  = advanced.!lmhosts
5507
5508    select
5509        when RefreshMode = "TREE" then do
5510            call _RefreshTreeDisplay
5511
5512            if smbtree.!workgroup <> 'SMBTREE.!WORKGROUP' then do
5513                ok = VRset("Menu_Selected_Connect", "Visible", VRMethod("CN_SMBTREE", "ValidateRecord", smbtree.!workgroup ) )
5514            end
5515        end
5516        when RefreshMode = "SHARE" then do
5517            call _AddSharesDisplay
5518        end
5519        otherwise say "RefreshMode = "RefreshMode
5520    end
5521    call _DialogPopulate
5522return
5523
5524/*:VRX         TM_TheCloser_Trigger
5525*/
5526TM_TheCloser_Trigger:
5527    call SW_PROGRESS_Close
5528return
5529
5530/*:VRX         TM_Throbber_Trigger
5531*/
5532TM_Throbber_Trigger:
5533    pIdx = VRGet("Pict_Throbber","PicturePath")
5534    parse var pIdx '#' pidx
5535    pidx = pidx + 1
5536    if pidx = 23 then pidx = 11
5537    ok = VRSet("Pict_Throbber","PicturePath","#"pidx)
5538return
5539
5540/*:VRX         YesNo
5541*/
5542YesNo: procedure
5543    if arg(1) = 1 then answer = "Yes"
5544                  else answer = "No"
5545return answer
5546
5547/*:VRX         ZeroOne
5548*/
5549ZeroOne: procedure
5550    if translate(arg(1)) = "YES" then answer = 1
5551                                 else answer = 0
5552return answer
Note: See TracBrowser for help on using the repository browser.