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

Last change on this file since 990 was 990, checked in by Herwig Bauernfeind, 4 years ago

GUITools: All changes that have built over time.

File size: 215.7 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    if datatype(log_level) <> "NUM" then log_level = 2
1561    say     '  'samba.!testparmexe' -v -s -d='log_level' 1>'samba.!shadowsmbconf' 2>'TempDir'testparm.stderr'
1562    address cmd samba.!testparmexe' -v -s -d='log_level' 1>'samba.!shadowsmbconf' 2>'TempDir'testparm.stderr'
1563    if options.!debug == 1 then say time()' _SmbConfCreateShadowCopy done'
1564return
1565
1566/*:VRX         _SMBpdrInstalled
1567*/
1568_SMBpdrInstalled: procedure
1569    ok = VRGetINI("PM_PORT_DRIVER","SMB","SYSTEM")
1570return (ok <> "")
1571
1572/*:VRX         _StemsInit
1573*/
1574_StemsInit:
1575    if options.!debug == 1 then say time()' _StemsInit started'
1576    if options.!debug == 1 then say '  initializing options.'
1577    options.!workgroup  = ''
1578    options.!server     = ''
1579    options.!share      = ''
1580    options.!user       = ''
1581    options.!password   = ''
1582    options.!spassword  = ''
1583    options.!master     = ''
1584    options.!mastertype = ''
1585    options.!memlen     = '2'
1586    options.!cachetimeout  = '10'
1587    options.!cachelistings = '32'
1588    options.!easupport  = '1'
1589    options.!readonly   = ''
1590    options.!loglevel   = 0
1591    options.!logfile    = ''
1592
1593    options.!autoload   = 0
1594    options.!autoclose  = 0
1595    options.!nogui      = 0
1596    options.!autostart  = 0
1597    options.!editmode   = 0
1598    options.!delay      = 0
1599    options.!storecreds = 0
1600    options.!timesync   = 0
1601    options.!timesrv    = ''
1602
1603    options.!tracmark   = 0
1604
1605    if options.!debug == 1 then say '  initializing vfs. '
1606    vfs.!drive      = ''
1607    vfs.!mountpoint = ''
1608
1609    if options.!debug == 1 then say '  initializing advanced. '
1610    advanced.!browseauth = ''
1611    advanced.!browseimme = ''
1612    advanced.!broadcast  = ''
1613    advanced.!special    = ''
1614    advanced.!savepassive= ''
1615    advanced.!miniicons  = ''
1616
1617    advanced.!easupport  = 1
1618    advanced.!readonly   = ''
1619    advanced.!alwaysmp   = ''
1620    advanced.!cachetimeout  = '10'
1621    advanced.!cachelistings = '32'
1622
1623    advanced.!smbconfchanged = 0
1624
1625    /* Obsolete */
1626    advanced.!memlen     = ''
1627    advanced.!loglevel   = '0'
1628    advanced.!logfile    = ''
1629
1630    if options.!debug == 1 then say '  initializing credentials. '
1631    credentials.!username = ""
1632    credentials.!password = ""
1633    credentials.!entered  = 0
1634
1635    UserCred = ""
1636    RefreshMode = ""
1637
1638    if options.!debug == 1 then say '  initializing mtype. '
1639    mtype.0 = 4
1640    mtype.1 = NLVGetMessage( 15 )
1641    mtype.2 = NLVGetMessage( 16 )
1642    mtype.3 = NLVGetMessage( 17 )
1643    mtype.4 = NLVGetMessage( 18 )
1644
1645    if options.!debug == 1 then say '  initializing icons. '
1646    icons.!bat              = '#1:PMWP.DLL'
1647    icons.!cmd              = '#2:PMWP.DLL'
1648    icons.!exe              = '#3:PMWP.DLL'
1649    icons.!template         = '#10:PMWP.DLL'
1650    icons.!drive            = '#16:PMWP.DLL'
1651    icons.!defaultfile      = '#24:PMWP.DLL'
1652    icons.!folder           = '#26:PMWP.DLL'
1653    icons.!folder_open      = '#34:PMWP.DLL'
1654    icons.!machine_awake    = '#35:PMWP.DLL'
1655    icons.!machine_sleeping = '#61:PMWP.DLL'
1656    icons.!workgroup        = '#62:PMWP.DLL'
1657    icons.!pdc              = '#63:PMWP.DLL'
1658    icons.!active           = '#64:PMWP.DLL'
1659    icons.!passive          = '#68:PMWP.DLL'
1660    icons.!printer          = '#65:PMWP.DLL'
1661    icons.!drive_inactive   = '#70:PMWP.DLL'
1662    icons.!pdf              = '#80'
1663    icons.!spreadsheet      = '#82'
1664    icons.!textdocument     = '#86'
1665    icons.!framework        = '#87'
1666    icons.!image            = '#88'
1667    icons.!movie            = '#89'
1668    icons.!sound            = '#90'
1669    icons.!warpin           = '#91'
1670    icons.!zip              = '#92'
1671    icons.!view             = '#93'
1672    icons.!plaintext        = '#94'
1673
1674    p_workgroup             = "Unknown"
1675    p_server                = "Unknown"
1676    p_share                 = "Unknown"
1677
1678    if options.!debug == 1 then say time()' _StemsInit done'
1679return
1680/*:VRX         _TabbedDialogSetup
1681*/
1682_TabbedDialogSetup:
1683    if options.!debug == 1 then say time()' _TabbedDialogSetup started'
1684
1685    w = VRLoad( "TDL_1", VRWindowPath(), "SW_DIALOG" )
1686    ok = VRMethod( "TDL_1", "InsertPage", w,"+ "NLVGetMessage(13)" ")
1687    ok = VRMethod( "TDL_1", "SetStatusText", 1, NLVGetMessage(132,"1","2"))
1688    w = VRLoad( "TDL_1", VRWindowPath(), "SW_ADVANCED" )
1689    ok = VRMethod( "TDL_1", "InsertPage", w,"- "NLVGetMessage(40)" ")
1690    ok = VRMethod( "TDL_1", "SetStatusText", 2, NLVGetMessage(132,"2","2"))
1691
1692    w = VRLoad( "TDL_1", VRWindowPath(), "SW_SMBTREE" )
1693    ok = VRMethod( "TDL_1", "InsertPage", w,"+ "NLVGetMessage(39)" ")
1694
1695    w = VRLoad( "TDL_1", VRWindowPath(), "SW_CONDET" )
1696    ok = VRMethod( "TDL_1", "InsertPage", w,"+ "NLVGetMessage(63)" ")
1697    w = VRLoad( "TDL_1", VRWindowPath(), "SW_SETTINGS" )
1698    ok = VRMethod( "TDL_1", "InsertPage", w,"+ "NLVGetMessage(47)" ")
1699    w = VRLoad( "TDL_1", VRWindowPath(), "SW_SMBCONF" )
1700    ok = VRMethod( "TDL_1", "InsertPage", w,"- "NLVGetMessage(47)" ")
1701    if options.!debug == 1 then say time()' _TabbedDialogSetup done'
1702return
1703
1704
1705/*:VRX         _TabFix
1706*/
1707_TabFix:
1708    ok = VRMethod( "TDL_1", "SetTabText", arg(1), " "strip(VRMethod( "TDL_1", "GetTabText", arg(1)))" ")
1709return
1710
1711/*:VRX         _TabsStrip
1712*/
1713_TabsStrip:
1714    ok = VRMethod( "TDL_1", "SetTabText", 1, strip(VRMethod( "TDL_1", "GetTabText", 1)))
1715    ok = VRMethod( "TDL_1", "SetTabText", 2, strip(VRMethod( "TDL_1", "GetTabText", 2)))
1716    ok = VRMethod( "TDL_1", "SetTabText", 3, strip(VRMethod( "TDL_1", "GetTabText", 3)))
1717    ok = VRMethod( "TDL_1", "SetTabText", 4, strip(VRMethod( "TDL_1", "GetTabText", 4)))
1718    ok = VRMethod( "TDL_1", "SetTabText", 5, strip(VRMethod( "TDL_1", "GetTabText", 5)))
1719return
1720
1721/*:VRX         _TimeSync
1722*/
1723_TimeSync:
1724    if options.!debug == 1 then say time()' _TimeSync started, "'options.!timesrv'"'
1725    TimeMsg.1 = NLVGetMessage(141)' 'time()
1726    if options.!timesrv <> '' then do
1727        say     '  'samba.!netexe' time set -S 'options.!timesrv
1728        address cmd samba.!netexe' time set -S 'options.!timesrv
1729    end
1730    else do
1731        say     '  'samba.!netexe' time set'
1732        address cmd samba.!netexe' time set'
1733    end
1734    options.!timesync = ''
1735    TimeMsg.2 = NLVGetMessage(142)' 'time()
1736    TimeMsg.0 = 2
1737
1738    Buttons.1 = NLVGetMessage(2)
1739    Buttons.0 = 1
1740    id = VRMessageStem( VRWindow(), TimeMsg. , NLVGetMessage(129) , "Information", "Buttons.", 1, 1 )
1741    if options.!debug == 1 then say time()' _TimeSync done'
1742return
1743
1744/*:VRX         _UpdateObject
1745*/
1746_UpdateObject: procedure
1747    Object   = arg(1)
1748    ObjValue = arg(2)
1749    if VRGet(Object,"Value") <> ObjValue then ok = VRset(Object,"Value",ObjValue)
1750return
1751
1752/*:VRX         _UserCredUpdate
1753*/
1754_UserCredUpdate:
1755    if options.!debug == 1 then say time()' _UserCredUpdate started'
1756    credentials.!username = VRGet("EF_USER","Value")
1757    credentials.!password = VRGet("EF_PASSWORD","Value")
1758
1759    if pos("4OS2", value("COMSPEC",,"OS2ENVIRONMENT")) = 1 | pos(left(credentials.!password,1),'01234567890') > 0
1760        then UserCred = '--user='Credentials.!username'%%'Credentials.!password
1761        else UserCred = '--user='Credentials.!username'%'Credentials.!password
1762
1763    if options.!storecreds = 1 & \(UserCred   = 'USERCRED'   | UserCred = '' | UserCred = '--user=%' | UserCred = '--user=%%' | UserCred = '-N') then do
1764        ok = _ucSetUc()
1765        ok = VRSet("Pict_PWINMEM","PicturePath","#36")
1766        if options.!debug == 1 then call beep 2400, 10
1767    end
1768    else do
1769        if options.!debug == 1 then call beep 200, 20
1770        ok = VRSet("Pict_PWINMEM","PicturePath","#37")
1771    end
1772    if options.!debug == 1 then say time()' _UserCredUpdate done'
1773return
1774
1775/*:VRX         CB_client_lanman_auth_Click
1776*/
1777CB_client_lanman_auth_Click:
1778    advanced.!smbconfchanged = 1
1779return
1780
1781/*:VRX         CB_client_NTLMv2_auth_Click
1782*/
1783CB_client_NTLMv2_auth_Click:
1784    advanced.!smbconfchanged = 1
1785
1786    if VRGet("CB_client_NTLMv2_auth","Set") = 0 then do
1787        ok = VRSet("CB_client_lanman_auth","Enabled", 1)
1788        ok = VRSet("CB_client_plaintext_auth","Enabled", 1)
1789    end
1790    else do
1791        ok = VRSet("CB_client_lanman_auth","Enabled", 0)
1792        ok = VRSet("CB_client_lanman_auth","Set", 0)
1793        ok = VRSet("CB_client_plaintext_auth","Enabled", 0)
1794        ok = VRSet("CB_client_plaintext_auth","Set", 0)
1795    end
1796return
1797
1798/*:VRX         CB_client_plaintext_auth_Click
1799*/
1800CB_client_plaintext_auth_Click:
1801    advanced.!smbconfchanged = 1
1802return
1803
1804/*:VRX         CB_client_use_spnego_Click
1805*/
1806CB_client_use_spnego_Click:
1807    advanced.!smbconfchanged = 1
1808return
1809
1810/*:VRX         CB_client_use_spnego_principal_Click
1811*/
1812CB_client_use_spnego_principal_Click:
1813    advanced.!smbconfchanged = 1
1814return
1815
1816/*:VRX         CB_DEBUG_Click
1817*/
1818CB_DEBUG_Click:
1819
1820return
1821
1822/*:VRX         CB_LOGGING_Click
1823*/
1824CB_LOGGING_Click:
1825    if VRFileExists(SysBootDrive()'\ndpsmb.dbg') then
1826        ok = SysFileDelete(SysBootDrive()'\ndpsmb.dbg')
1827    else do
1828        call lineout SysBootDrive()'\ndpsmb.dbg','EVFS debug flag file'
1829        ok = stream(SysBootDrive()'\ndpsmb.dbg','c','close')
1830    end
1831
1832    CALL VRSet "CB_LOGGING", "Set", VRFileExists(SysBootDrive()'\ndpsmb.dbg')
1833return
1834
1835/*:VRX         CB_MOUNT_Change
1836*/
1837CB_MOUNT_Change:
1838    if options.!debug == 1 then say time()' '||"CB_MOUNT_Change started"
1839
1840    mount = VRGet("CB_MOUNT", "Value")
1841
1842    /* Catch empty mount type error */
1843    if mount = "" then do
1844        if mtype.1 <> "" then ok = VRSet("CB_MOUNT", "Value", mtype.1)
1845        if options.!debug == 1 then say time()' '||"CB_MOUNT_Change aborted"
1846        return
1847    end
1848
1849    SELECT
1850        WHEN mount == mtype.1 THEN DO
1851            CALL VRSet "DT_SHARE",   "Visible", 1
1852            CALL VRSet "EF_SHARE",   "Visible", 1
1853            CALL VRSet "DT_SERVER",  "Visible", 1
1854            CALL VRSet "EF_SERVER",  "Visible", 1
1855            CALL VRSet "CHK_MTYPE",  "Visible", 0
1856            CALL NLVSetText "DT_NETWORK", "Caption", 21
1857        END
1858        WHEN mount == mtype.2 THEN DO
1859            CALL VRSet "DT_SHARE",   "Visible", 0
1860            CALL VRSet "EF_SHARE",   "Visible", 0
1861            CALL VRSet "DT_SERVER",  "Visible", 1
1862            CALL VRSet "EF_SERVER",  "Visible", 1
1863            CALL VRSet "CHK_MTYPE",  "Visible", 0
1864            CALL NLVSetText "DT_NETWORK", "Caption", 21
1865        END
1866        WHEN mount == mtype.3 THEN DO
1867            CALL VRSet "DT_SHARE",   "Visible", 0
1868            CALL VRSet "EF_SHARE",   "Visible", 0
1869            CALL VRSet "DT_SERVER",  "Visible", 0
1870            CALL VRSet "EF_SERVER",  "Visible", 0
1871            CALL VRSet "CHK_MTYPE",  "Visible", 0
1872            CALL NLVSetText "DT_NETWORK", "Caption", 21
1873        END
1874        WHEN mount == mtype.4 THEN DO
1875            CALL VRSet "DT_SHARE",   "Visible", 0
1876            CALL VRSet "EF_SHARE",   "Visible", 0
1877            CALL VRSet "DT_SERVER",  "Visible", 0
1878            CALL VRSet "EF_SERVER",  "Visible", 0
1879            CALL VRSet "CHK_MTYPE",  "Visible", 1
1880            CALL NLVSetText "DT_NETWORK", "Caption", 22
1881        END
1882        OTHERWISE DO
1883            id = VRMessage( "", 'unknown mount type here >>'mount'<< mtype1=>>'mtype.1'<<', "Mount change error", "E", )
1884        END
1885    END
1886    if options.!debug == 1 then say time()' '||"CB_MOUNT_Change done"
1887RETURN
1888
1889/*:VRX         CN_CONDET_Click
1890*/
1891CN_CONDET_Click:
1892    /* ok = VRset("DT_StatusBar","Caption", VRGet("Main", "HintText")) */
1893return
1894
1895/*:VRX         CN_CONDET_ContextMenu
1896*/
1897CN_CONDET_ContextMenu:
1898    rh = VRInfo('Record')
1899    if VRMethod( "CN_CONDET", "ValidateRecord", rh) <> 1 then return
1900
1901    /* Hide all context menu entries */
1902    ok = VRSet("Menu_Selected_Remove",           "Visible", 0) /* CN_CONDET */
1903    ok = VRSet("Menu_Selected_Retry",            "Visible", 0) /* CN_CONDET */
1904    ok = VRSet("Menu_Selected_Connect",          "Visible", 0) /* CN_SMBTREE */
1905    ok = VRSet("Menu_Selected_Sep1",             "Visible", 0) /* CN_SMBTREE */
1906    ok = VRSet("Menu_Selected_Info",             "Visible", 0) /* CN_SMBTREE */
1907    ok = VRSet("Menu_Selected_TimeSync",         "Visible", 0) /* CN_SMBTREE */
1908    ok = VRSet("Menu_Selected_Refresh",          "Visible", 0) /* CN_SMBTREE */
1909    ok = VRSet("Menu_Selected_Default_Workgroup","Visible", 0) /* CN_SMBTREE */
1910
1911    /* This is the place to enable specific context menu entries */
1912    ok = VRMethod( "CN_CONDET", "GetRecordList", "All", "records." )
1913    ok = VRSet("Menu_Selected_Remove", "Visible",  (records.0 <> 0))
1914    ok = VRSet("Menu_Selected_Retry",  "Visible",  (records.0 <> 0))
1915
1916    if VRMethod( "CN_CONDET", "GetFieldData", rh, CD.StatusFH) = icons.!passive then do
1917        ok = VRSet("Menu_Selected_Retry",  "Enabled",1)
1918        ok = VRSet("Menu_Selected_Remove", "Enabled",1)
1919    end
1920    ok = VRMethod( "Menu_Selected", "Popup", , , "", "" )
1921return
1922/*:VRX         CN_CONDET_DragStart
1923*/
1924CN_CONDET_DragStart:
1925
1926    obj = VRInfo( "object" )
1927    ok = VRMethod( "CN_CONDET", "GetRecordList", "SourceOrSelected", "selrec." )
1928    if selrec.0 = 0 then return
1929
1930    Icon = VRMethod("CN_CONDET", "GetRecordAttr", selrec.1, "Icon")
1931
1932    if Icon = icons.!printer then do /* Printers not supported at the moment */
1933        call beep 4800,100
1934        CALL VRMessage 'Main', NLVGetMessage( 62 ), NLVGetMessage( 5 ), 'E'
1935    end
1936    else call VRMethod obj, 'StartDrag'
1937return
1938
1939/*:VRX         CN_CURRENT_Click
1940*/
1941CN_CURRENT_Click:
1942    if options.!debug == 1 then say time()' CN_CURRENT_Click started'
1943    /* ok = VRset("DT_StatusBar","Caption", VRGet("Main", "HintText")) */
1944
1945    /* Herwig B. */
1946    CALL VRSet "TM_AUTOCLOSE", "ENABLED", 0
1947    ok = VRSet("Menu_Selected_Default_Workgroup","Visible", 0)
1948
1949    rh = VRInfo('Record')
1950    if VRMethod( "CN_CURRENT", "ValidateRecord", rh) <> 1 then return
1951
1952    data = VRMethod("CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
1953    options.currentdata = data
1954
1955    /* ok = VRset("DT_StatusBar","Caption", data' - 'VRGet("Main", "HintText")) */
1956
1957    PARSE VAR data p_node ';' p_mounts ';' p_string
1958
1959    if options.!debug == 1 then do
1960        say '  data        = "'data'"'
1961        say '  p_node      = "'p_node'"'
1962        say '  p_mounts    = "'p_mounts'"'
1963        say '  p_string    = "'p_string'"'
1964    end
1965
1966    if p_string = ""
1967        then infotext = fs.!name' 'fs.!version
1968        else infotext = p_string
1969
1970    if infotext = "" then infotext = " "
1971    CALL VRSet "CN_CURRENT", "Caption", infotext
1972    CALL VRSet "CN_CURRENT", 'HintText',infotext
1973
1974    IF p_mounts > 0 THEN DO
1975        CALL VRSet 'PB_UNMOUNT',               'Enabled', 1
1976        CALL VRSet 'MENU_CONTEXT_UNMOUNT',     'Visible', 1
1977
1978        if pos("*",p_string) > 0 | pos(";",p_string) > 0
1979            then CALL VRSet 'MENU_CONTEXT_EDIT', 'Visible', 0
1980            else CALL VRSet 'MENU_CONTEXT_EDIT', 'Visible', 1
1981    END
1982    ELSE DO
1983        CALL VRSet 'PB_UNMOUNT',               'Enabled', 0
1984        CALL VRSet 'MENU_CONTEXT_UNMOUNT',     'Visible', 0
1985        CALL VRSet 'MENU_CONTEXT_EDIT',        'Visible', 0
1986    END
1987
1988    parent = VRMethod("CN_CURRENT", 'GetRecordAttr', rh, 'Parent')
1989
1990    IF parent == '' THEN DO
1991        CALL VRSet 'PB_DETACH',               'Enabled', 1
1992        CALL VRSet 'MENU_CONTEXT_DETACH',     'Visible', 1
1993        CALL VRSet 'MENU_CONTEXT_OPEN',       'Visible', 1
1994/*      CALL VRSet 'MENU_CONTEXT_SEP1',       'Visible', 1 */
1995        CALL VRSet 'MENU_CONTEXT_DETACH_ALL', 'Visible', 1
1996/*      CALL VRSet 'MENU_CONTEXT_SEP2',       'Visible', 1 */
1997
1998    END
1999    ELSE DO
2000        CALL VRSet 'PB_DETACH',               'Enabled', 0
2001        CALL VRSet 'MENU_CONTEXT_DETACH',     'Visible', 0
2002        CALL VRSet 'MENU_CONTEXT_OPEN',       'Visible', 0
2003/*      CALL VRSet 'MENU_CONTEXT_SEP1',       'Visible', 0 */
2004        CALL VRSet 'MENU_CONTEXT_DETACH_ALL', 'Visible', 0
2005/*      CALL VRSet 'MENU_CONTEXT_SEP2',       'Visible', 0 */
2006    END
2007
2008    parse var p_string p_workgroup'\\'p_server'\'p_share
2009
2010    p_workgroup = strip(p_workgroup,'T',':')
2011
2012    if options.!debug == 1 then do
2013        say '  p_workgroup = "'p_workgroup'"'
2014        say '  p_server    = "'p_server'"'
2015        say '  p_share     = "'p_share'"'
2016    end
2017
2018    p_server = translate(p_server)
2019
2020    ok = VRSet("EF_NETWORK","Value", p_workgroup)
2021    if p_workgroup <> "" then do
2022        wgh = _GetMachineHandle(p_workgroup)
2023        if wgh = "" then wgh = _AddWorkGroup(p_workgroup)
2024        call _UpdateObject "EF_SERVER", p_server
2025        mh = _GetMachineHandle(p_server)
2026        if mh = "" & p_server <> "*" then do
2027            mh = _AddSleepingMachine(p_server,'',wgh)
2028            machine = p_server
2029            call _RefreshShares
2030        end
2031        ok = VRSet("EF_Share","Value", p_share)
2032        select
2033            when p_workgroup = "*" then ok = VRSet("CB_MOUNT","Value", mtype.4)
2034            when p_server    = "*" then ok = VRSet("CB_MOUNT","Value", mtype.3)
2035            when p_share     = "*" then ok = VRSet("CB_MOUNT","Value", mtype.2)
2036            otherwise ok = VRSet("CB_MOUNT","Value", mtype.1)
2037        end
2038    end
2039    if options.!debug == 1 then say time()' CN_CURRENT_Click done'
2040RETURN
2041
2042/*:VRX         CN_CURRENT_ContextMenu
2043*/
2044CN_CURRENT_ContextMenu: /* PROCEDURE EXPOSE existrec. options. icons. fs. */
2045    if options.!debug == 1 then say time()' '||"CN_CURRENT_ContextMenu started"
2046
2047    CALL VRSet "TM_AUTOCLOSE", "ENABLED", 0
2048
2049    rh = VRInfo('Record')
2050
2051    /* we have to check whether the record still exists because under certain
2052       circumstances the event routine is executed after the record was already
2053       removed */
2054    if VRMethod( "CN_CURRENT", "ValidateRecord", rh) <> 1 then do
2055        if options.!debug == 1 then say time()' '||"CN_CURRENT_ContextMenu aborted"
2056        return
2057    end
2058
2059    data = VRMethod("CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
2060    PARSE VAR data p_node ';' p_mounts ';' p_string
2061
2062    if options.!debug == 1 then do
2063        say '  data =     "'data'"'
2064        say '  p_node =   "'p_node'"'
2065        say '  p_mounts = "'p_mounts'"'
2066        say '  p_string = "'p_string'"'
2067    end
2068/*
2069    infotext = p_node
2070    DO i = 1 TO p_mounts
2071        infotext = infotext ' ['p_string']'
2072    END
2073*/
2074    if p_string = ""
2075        then infotext = fs.!name' 'fs.!version
2076        else infotext = p_string
2077
2078    if infotext = "" then infotext = " "
2079    CALL VRSet "CN_CURRENT", "Caption", infotext
2080    CALL VRSet "CN_CURRENT", 'HintText',infotext
2081
2082    CALL VRSet 'MENU_CONTEXT_OPEN', 'Visible', 1
2083/*  CALL VRSet 'MENU_CONTEXT_SEP1', 'Visible', 1
2084    CALL VRSet 'MENU_CONTEXT_SEP2', 'Visible', 1
2085    CALL VRSet 'MENU_CONTEXT_SEP3', 'Visible', 1 */
2086    CALL VRSet 'Menu_Context_Open_Default', "Visible", 1
2087
2088    IF p_mounts > 0 THEN DO
2089        CALL VRSet 'PB_UNMOUNT',               'Enabled', 1
2090        CALL VRSet 'MENU_CONTEXT_UNMOUNT',     'Visible', 1
2091
2092        if pos("*",p_string) > 0 | pos(";",p_string) > 0 then CALL VRSet 'MENU_CONTEXT_EDIT', 'Visible', 0
2093                                 else CALL VRSet 'MENU_CONTEXT_EDIT', 'Visible', 1
2094    END
2095    ELSE DO
2096        CALL VRSet 'PB_UNMOUNT',               'Enabled', 0
2097        CALL VRSet 'MENU_CONTEXT_UNMOUNT',     'Visible', 0
2098        CALL VRSet 'MENU_CONTEXT_EDIT',        'Visible', 0
2099    END
2100
2101    parent = VRMethod("CN_CURRENT", 'GetRecordAttr', rh, 'Parent')
2102
2103    IF parent == '' THEN DO
2104        CALL VRSet 'PB_DETACH',               'Enabled', 1
2105        CALL VRSet 'MENU_CONTEXT_DETACH',     'Visible', 1
2106        CALL VRSet 'MENU_CONTEXT_OPEN',       'Visible', 1
2107/*      CALL VRSet 'MENU_CONTEXT_SEP1',       'Visible', 1 */
2108        CALL VRSet 'MENU_CONTEXT_DETACH_ALL', 'Visible', 1
2109/*      CALL VRSet 'MENU_CONTEXT_SEP2',       'Visible', 1 */
2110/*      CALL VRSet 'MENU_CONTEXT_SEP3',       'Visible', 1 */
2111    END
2112    ELSE DO
2113        CALL VRSet 'PB_DETACH',               'Enabled', 0
2114        CALL VRSet 'MENU_CONTEXT_DETACH',     'Visible', 0
2115        CALL VRSet 'MENU_CONTEXT_OPEN',       'Visible', 0
2116/*      CALL VRSet 'MENU_CONTEXT_SEP1',       'Visible', 0 */
2117        CALL VRSet 'MENU_CONTEXT_DETACH_ALL', 'Visible', 0
2118/*      CALL VRSet 'MENU_CONTEXT_SEP2',       'Visible', 0 */
2119/*      CALL VRSet 'MENU_CONTEXT_SEP3',       'Visible', 0 */
2120    END
2121
2122    ok = VRMethod( "Menu_Context", "Popup", , , "", "" )
2123    if options.!debug == 1 then say time()' '||"CN_CURRENT_ContextMenu done"
2124return
2125
2126/*:VRX         CN_CURRENT_DoubleClick
2127*/
2128CN_CURRENT_DoubleClick:
2129    if options.!debug == 1 then say time()' '||"CN_CURRENT_DoubleClick started"
2130
2131    CALL VRSet "TM_AUTOCLOSE", "ENABLED", 0
2132
2133    rh = VRInfo('Record')
2134
2135    /* we have to check whether the record still exists because under certain
2136       circumstances the event routine is executed after the record was already
2137       removed */
2138    if VRMethod( "CN_CURRENT", "ValidateRecord", rh) <> 1 then do
2139        if options.!debug == 1 then say time()' '||"CN_CURRENT_DoubleClick aborted"
2140        return
2141    end
2142
2143    data = VRMethod("CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
2144    PARSE VAR data p_node ';' p_mounts ';' p_string
2145
2146    if options.!debug == 1 then do
2147        say '  data =     "'data'"'
2148        say '  p_node =   "'p_node'"'
2149        say '  p_mounts = "'p_mounts'"'
2150        say '  p_string = "'p_string'"'
2151    end
2152    call Menu_Context_Open_Default_Click
2153
2154    if options.!debug == 1 then say time()' '||"CN_CURRENT_DoubleClick done"
2155return
2156
2157/*:VRX         CN_CURRENT_DragDrop
2158*/
2159CN_CURRENT_DragDrop:
2160    if options.!debug == 1 then say time()' CN_CURRENT_DragDrop started'
2161    ok = VRSet("TM_RefreshCurrentDisplay","Enabled", 0)
2162    if options.!debug == 1 then say "  settings.!network = "settings.!network
2163
2164    p_workgroup = ''
2165    p_server    = ''
2166    p_share     = ''
2167
2168    srcFile = VRInfo( "SourceFile" )
2169    srcCtn  = VRInfo( "SourceObject" )
2170    srcRec  = VRInfo( "SourceRecord" )
2171    trgCtn  = VRInfo( "TargetObject" )
2172    trgRec  = VRInfo( "TargetRecord" )
2173
2174    if options.!debug == 1 then do
2175        say '  srcFile     = "'srcFile'"'
2176        say '  srcCtn      = "'srcCtn'"'
2177        if srcCtn <> "" then say '  srcCtn name = "'VRGet(srcCtn,'Name')'"'
2178        say '  srcRec      = "'srcRec'"'
2179        say '  trgCtn      = "'trgCtn'"'
2180        if trgCtn <> "" then say '  trgCtn name = "'VRGet(trgCtn,'Name')'"'
2181        say '  trgRec      = "'trgRec'"'
2182    end
2183
2184    if srcFile <> "" then do /* A file was dropped onto the container - attempt to load it */
2185        if options.!debug == 1 then say '  Possible profile dropped: "'srcFile'"'
2186
2187        /* was it really a profile ? */
2188        if translate(VRParseFileName(srcFile,'E')) = translate(fs.!profileext) then do /* Yes - load it! */
2189            options.!autoload = 1
2190            Profile = srcFile
2191            call Menu_File_Load_Click
2192            ok = VRSet("EF_NETWORK","Value",options.!workgroup)
2193        end
2194        else do /* No - barf! */
2195            buttons.0 = 1
2196            buttons.1 = NLVGetMessage(9)
2197            ok = VRMessage('Main', NLVGetMessage(103,srcFile ), NLVGetMessage(5), 'E','buttons.')
2198        end
2199        if options.!debug == 1 then say time()' CN_CURRENT_DragDrop done (load profile)'
2200        return
2201    end
2202
2203    ok = VRMethod("CB_MOUNT", "GetStringList", "ShareLevels." )
2204
2205    if VRGet(srcCtn,'Name') = "CN_CONDET" then do
2206        p_mpoint    = VRMethod("CN_CONDET", "GetFieldData", srcRec, CD.MpointFH)
2207
2208        p_workgroup = VRMethod("CN_CONDET", "GetFieldData", srcRec, cd.workgrpFH  )
2209        p_server    = VRMethod("CN_CONDET", "GetFieldData", srcRec, CD.ServerFH)
2210        p_share     = VRMethod("CN_CONDET", "GetFieldData", srcRec, CD.ShareFH)
2211        p_user      = VRMethod("CN_CONDET", "GetFieldData", srcRec, CD.UserFH)
2212        p_password  = x2c(VRMethod("CN_CONDET", "GetFieldData", srcRec, CD.SpasswordFH))
2213
2214        ShareLevel = 1
2215        if p_share     = "" then ShareLevel = 2
2216        if p_server    = "" then ShareLevel = 3
2217        if p_workgroup = "" then ShareLevel = 4
2218
2219        ok = VRSet("CB_MOUNT",  "Selected", Sharelevel )
2220        ok = VRset("CB_MOUNT",  "Value",    mtype.sharelevel)
2221
2222        call _UpdateObject "EF_SERVER", p_server
2223        ok = VRset("EF_SHARE",    "Value", p_share)
2224        ok = VRset("EF_NETWORK",  "Value", p_workgroup)
2225        ok = VRset("EF_USER",     "Value", p_user)
2226        ok = VRset("EF_PASSWORD", "Value", p_password)
2227
2228        parse var p_mpoint p_drv '\' p_dir
2229
2230        p_dir = strip(p_dir,'T','\')
2231
2232        ok = VRset("CB_DRIVES",    "Value", p_drv)
2233        ok = VRset("EF_DIRECTORY", "Value", p_dir)
2234    end /* Drag from CN_CONDET */
2235
2236    else do /* Drag from CN_SMBTREE */
2237        call _GetSMBObjectProperties srcRec
2238        select
2239            when SMBObj.udatatype = "WORKGROUP" then do
2240                say "Workgroup dragged!"
2241                p_workgroup = SMBObj.resname
2242                p_server    = ""
2243                p_share     = ""
2244
2245                ShareLevel = 3
2246            end
2247            when SMBObj.udatatype = "SERVER" then do
2248                say "Server dragged!"
2249                if SMBObj.parentrh <> "" then do /* detect server without workgroup */
2250                    p_workgroup = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.parentrh, "Caption")
2251                end
2252                p_server    = SMBObj.resname
2253                p_share     = ""
2254
2255                ShareLevel = 2
2256            end
2257            when SMBObj.udatatype = "DISK" then do
2258                say "Shared disk dragged!"
2259                if SMBObj.gparentrh <> "" then do /* detect share on a server without workgroup */
2260                    p_workgroup = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.gparentrh, "Caption")
2261                end
2262                p_server    = VRMethod("CN_SMBTREE", "GetRecordAttr", SMBObj.parentrh,  "Caption")
2263                parse var p_server p_server '0D0A'x .
2264                p_share     = SMBObj.resname
2265
2266                ShareLevel = 1
2267            end
2268            otherwise nop /* Printer */
2269        end
2270        ok = VRSet("EF_NETWORK","Value",p_workgroup)
2271        call _UpdateObject "EF_SERVER", p_server
2272        ok = VRSet("EF_Share","Value",  p_share)
2273    end /* Drag from CN_SMBTREE */
2274
2275    if options.!debug == 1 then do
2276        say 'p_workgroup = "'p_workgroup'"'
2277        say 'p_server    = "'p_server'"'
2278        say 'p_share     = "'p_share'"'
2279    end
2280
2281    ok = VRSet( "CB_MOUNT", "Selected", Sharelevel )
2282
2283    settings.!network = VRGet("EF_NETWORK","Value")
2284    call CB_MOUNT_Change
2285
2286    if trgRec = "" then do
2287        ok = VRMethod("CB_DRIVES",  "GetStringList", "freedrives.")
2288        if freedrives.0 > 0
2289            then ok = VRSet("CB_DRIVES","Value", freedrives.1)
2290            else ok = VRSet("CB_DRIVES","Value", "")
2291
2292        ok = VRSet("EF_DIRECTORY","Value", "")
2293    end
2294    else do
2295        TargetString = VRMethod(trgCtn, "GetRecordAttr", trgRec, "Caption")
2296
2297        parTrgRH = VRMethod(trgCtn, "GetRecordAttr", trgRec, "Parent")
2298
2299        do while parTrgRH <> ""
2300            partrgCapt = VRMethod(trgCtn, "GetRecordAttr", partrgRH, "Caption")
2301            TargetString = partrgCapt||'\'||TargetString
2302            parTrgRH = VRMethod(trgCtn, "GetRecordAttr", partrgRH , "Parent")
2303        end
2304        say 'TargetString = "'TargetString'"'
2305        ok = VRSet("CB_DRIVES","Value", left(TargetString,2))
2306        ok = VRSet("EF_DIRECTORY","Value", substr(TargetString,4))
2307    end
2308
2309    window = VRLoadSecondary( "SW_MOUNTPOINT", "W" )
2310    if VRGet("CB_DRIVES","Value") = "" then return
2311
2312    window = VRLoadSecondary( "SW_LOGIN", "W" )
2313    if credentials.!entered = 1 then call PB_MOUNT_CLICK
2314
2315    if VRGet(srcCtn,'Name') = "CN_CONDET" & VRMethod( "CN_CONDET", "ValidateRecord", srcRec) = 1 then do
2316        if VRMethod("CN_CONDET", "GetRecordAttr", srcRec, "Icon") = icons.!passive then ok = VRMethod( "CN_CONDET", "RemoveRecord", srcRec)
2317    end
2318    if options.!debug == 1 then say time()' CN_CURRENT_DragDrop done'
2319return
2320/*:VRX         CN_SMBTREE_Click
2321*/
2322CN_SMBTREE_Click:
2323    if options.!debug == 1 then say time()' CN_SMBTREE_Click started'
2324    /* ok = VRset("DT_StatusBar","Caption", VRGet("Main", "HintText")) */
2325
2326    call _dropdeprecated
2327    call _GetSmbObjectProperties VRInfo('Record')
2328    call _ContextMenuSelectedSet
2329
2330    ok = VRset("DT_Statusbar", "Caption", SMBObj.udatamsg)
2331
2332    if options.!debug == 1 then say time()' CN_SMBTREE_Click done'
2333return
2334/*:VRX         CN_SMBTREE_ContextMenu
2335*/
2336CN_SMBTREE_ContextMenu:
2337    if options.!debug == 1 then say time()' CN_SMBTREE_ContextMenu started'
2338
2339    call _dropdeprecated
2340    call _GetSmbObjectProperties VRInfo('Record')
2341
2342    call _ContextMenuSelectedSet
2343    ok = VRMethod( "Menu_Selected", "Popup", , , "", "" )
2344
2345    if options.!debug == 1 then say time()' CN_SMBTREE_ContextMenu done'
2346return
2347/*:VRX         CN_SMBTREE_DoubleClick
2348*/
2349CN_SMBTREE_DoubleClick:
2350    if options.!debug == 1 then say time()' CN_SMBTREE_DoubleClick started'
2351
2352    call _dropdeprecated
2353    call _GetSmbObjectProperties VRInfo('Record')
2354
2355/*  if options.!debug == 1 then say time()' CN_SMBTREE_DoubleClick done'
2356return */
2357    /* Enable last 2 lines for 2.0.x (to disable on the fly browsing) */
2358
2359    if options.!debug == 1 then say '  Browsing "'SMBObj.udatatype'"'
2360
2361    If SMBObj.udatatype = "DIRECTORY" then do
2362        BrowsePath = _browsebuildpath(SMBObj.rh)
2363
2364        call _BrowseResetObject(SmbObj.rh)
2365
2366        parse var browsepath '\\'machine'\'sharename '\' browsepath
2367        browsepath = browsepath'\*'
2368
2369        call _BrowseDirectory
2370    end
2371
2372    If SMBObj.udatatype = "FILE" then do
2373        BrowsePath = _browsebuildpath(SMBObj.rh)
2374        call _BrowseResetObject(SmbObj.rh)
2375
2376        parse var browsepath '\\'machine'\'sharename '\' browsepath
2377
2378        OpenOk = _browseobjectopen(machine,sharename,browsepath)
2379
2380        if \OpenOK then do
2381            say "  Not connected - trying to connect"
2382            ok = VRMethod( "CN_SMBTREE", "SetRecordAttr", sharerh, "Selected", 1)
2383            call PB_SMBTREE_CONNECT_Click
2384            ok = VRMethod( "CN_SMBTREE", "SetRecordAttr", SMBObj.rh, "Selected", 1)
2385
2386            OpenOk = _browseobjectopen(machine,sharename,browsepath)
2387
2388            if \OpenOk then do
2389                say "  Not connected - cannot open - aborting!"
2390            end
2391        end
2392    end
2393
2394    if SMBObj.udatatype = "DISK" then do
2395        machine  = VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.parentrh,"Caption")
2396        parse var machine machine '0D0A'x .
2397        machine = strip(machine)
2398
2399        call _BrowseResetObject(SmbObj.rh)
2400
2401        sharename = SMBObj.resname
2402        BrowsePath = ""
2403
2404        call _BrowseDirectory
2405    end
2406    if options.!debug == 1 then say time()' CN_SMBTREE_DoubleClick done'
2407return
2408/*:VRX         CN_SMBTREE_DragFile
2409*/
2410CN_SMBTREE_DragFile:
2411    if options.!debug == 1 then say time()' CN_SMBTREE_DragFile started'
2412
2413    obj = VRInfo( "object" )
2414
2415    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "SourceOrSelected", "SelRH." )
2416    if SelRH.0 = 0 then do
2417        if options.!debug == 1 then say time()' CN_SMBTREE_DragStart aborted'
2418        return
2419    end
2420
2421    call _dropdeprecated
2422    call _GetSMBObjectProperties SelRH.1
2423
2424    select
2425        when SMBObj.udatatype = "WORKGROUP" | SMBObj.udatatype = "SERVER" | SMBObj.udatatype = "DISK" then do
2426            call VRMethod obj, 'StartDrag'
2427        end
2428        when SMBObj.udatatype = "PRINTER" then do
2429            CALL VRMessage 'Main', NLVGetMessage( 62 ), NLVGetMessage( 5 ), 'E'
2430        end
2431        otherwise nop /* FILE DIRECTORY */
2432    end
2433
2434    if options.!debug == 1 then say time()' CN_SMBTREE_DragFile done'
2435return
2436
2437/*:VRX         CN_SMBTREE_DragStart
2438*/
2439CN_SMBTREE_DragStart:
2440    if options.!debug == 1 then say time()' CN_SMBTREE_DragStart started'
2441
2442    obj = VRInfo( "object" )
2443
2444    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "SourceOrSelected", "SelRH." )
2445    if SelRH.0 = 0 then do
2446        if options.!debug == 1 then say time()' CN_SMBTREE_DragStart aborted'
2447        return
2448    end
2449
2450    call _dropdeprecated
2451    call _GetSMBObjectProperties SelRH.1
2452
2453    select
2454        when SMBObj.udatatype = "WORKGROUP" | SMBObj.udatatype = "SERVER" | SMBObj.udatatype = "DISK" then do
2455            call VRMethod obj, 'StartDrag'
2456        end
2457        when SMBObj.udatatype = "PRINTER" then do
2458            CALL VRMessage 'Main', NLVGetMessage( 62 ), NLVGetMessage( 5 ), 'E'
2459        end
2460        otherwise nop /* FILE DIRECTORY */
2461    end
2462
2463    if options.!debug == 1 then say time()' CN_SMBTREE_DragStart done'
2464return
2465/*:VRX         CreateObject
2466*/
2467CreateObject: procedure
2468    Parse Arg Class, Title, Location, Setup, Collision
2469    /* say 'Creating ['Title']' */
2470say Setup
2471    rc = SysCreateObject( Class, Title, Location, Setup, Collision )
2472    If rc <> 1 Then do
2473        Msg.Text = ' > failed to create ['Title' | 'Class'] at location ['Location']'
2474        Msg.Type = 'Error'
2475        say Msg.Text
2476    end
2477return rc
2478/*:VRX         DT_STATUSBAR_ContextMenu
2479*/
2480DT_STATUSBAR_ContextMenu:
2481    ok = VRSet("DT_STATUSBAR","Caption", VRGet("Main", "HintText"))
2482return
2483
2484/*:VRX         EF_PASSWORD1_KeyPress
2485*/
2486EF_PASSWORD1_KeyPress:
2487    if options.!debug == 1 then say time()' EF_PASSWORD1_KeyPress started'
2488    obj = VRInfo( "Object" )
2489    keystr = VRGet( obj, "KeyString" )
2490/*  say keystr */
2491    select
2492        when keystr = "{Enter}" then call PB_LOGIN_OK_Click
2493        when keystr = "{Newline}" then call PB_LOGIN_OK_Click
2494        when keystr  = "{Esc}" then call PB_LOGIN_CANCEL_Click
2495        otherwise nop
2496    end
2497    if options.!debug == 1 then say time()' EF_PASSWORD1_KeyPress done'
2498return
2499
2500/*:VRX         EF_PASSWORD_Change
2501*/
2502EF_PASSWORD_Change:
2503    Now = VRGet("EF_PASSWORD","value")
2504    if Now = "" | Now = LastPassword then return
2505    ok = SysSleep(1)
2506    LastPassword = Now
2507    if Now <> VRGet("EF_PASSWORD","value") then return
2508    call _UserCredUpdate
2509return
2510
2511/*:VRX         EF_SERVER_Change
2512*/
2513EF_SERVER_Change:
2514    if options.!debug == 1 then say time()' EF_SERVER_Change started'
2515    Now = VRGet("EF_SERVER","value")
2516
2517    if Now = "" | Now = LastServer then return
2518    ok = SysSleep(2)
2519    if Now <> VRGet("EF_SERVER","value") then return
2520
2521    IF options.!editmode = 1 then return
2522
2523    /* Do nothing for incomplete IP addresses */
2524    if strip(translate(VRGet("EF_SERVER","value"),copies(' ',11),'01234567890.')) = "" then do /* got an IP address */
2525        if \_IsValidIPAddress(VRGet("EF_SERVER","value")) then return /* it is invalid or incomplete */
2526    end
2527
2528    /* do nothing if a workgroup was mounted */
2529    if VRGet("EF_SERVER","value") = "*" then return
2530
2531    machine = VRGet("EF_SERVER","value")
2532    ok = VRSet("EF_SHARE","Value", "")
2533    ok = VRMethod("EF_SHARE","Reset")
2534
2535    rh = _GetMachineHandle(machine)
2536    if rh <> "" then do
2537        call _GetSMBObjectProperties rh
2538        if SMBObj.parentrh = ""
2539            then ok = VRSet("EF_NETWORK","Value", "") /* The workgroup might be unknown at this moment */
2540            else ok = VRSet("EF_NETWORK","Value", VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.parentRH,"Caption"))
2541
2542        call _GetSMBObjectShares SMBObj.rh
2543
2544        if SMBObj.shares.0 > 0 then do
2545            ok = VRMethod("EF_SHARE",   "AddStringList", "SMBObj.shares.")
2546        end
2547    end
2548    else do
2549        call _RefreshWorkgroups
2550        smbtree.!machine = _AddSleepingMachine(machine,"","")
2551        call _UserCredUpdate
2552        call _RefreshShares
2553        ok = VRSet( "CN_smbtree", "Painting", 1  )
2554
2555        ok = VRSet("Main", 'Pointer', '<default>' )
2556        ok = VRSet("CN_smbtree","Enabled", 1)
2557        ok = VRSet("TM_Throbber","Enabled", 0)
2558        ok = VRSet("Pict_Throbber","Visible", 0)
2559    end
2560
2561    LastServer = VRGet("EF_SERVER","value")
2562    if options.!debug == 1 then say time()' EF_SERVER_Change done'
2563return
2564
2565/*:VRX         EF_USER1_KeyPress
2566*/
2567EF_USER1_KeyPress:
2568    if options.!debug == 1 then say time()' EF_USER1_KeyPress started'
2569    obj = VRInfo( "Object" )
2570    keystr = VRGet( obj, "KeyString" )
2571    say keystr
2572    select
2573        when keystr = "{Enter}" then ok = VRMethod( "EF_Password1", "SetFocus" )
2574        when keystr = "{Newline}" then ok = VRMethod( "EF_Password1", "SetFocus" )
2575        when keystr  = "{Esc}" then call PB_LOGIN_CANCEL_Click
2576        otherwise nop
2577    end
2578    if options.!debug == 1 then say time()' EF_USER1_KeyPress done'
2579return
2580
2581/*:VRX         EF_USER_Change
2582*/
2583EF_USER_Change:
2584    Now = VRGet("EF_USER","value")
2585    if Now = "" | Now = LastUser  then return
2586    ok = SysSleep(1)
2587    LastUser = Now
2588    if Now <> VRGet("EF_USER","value") then return
2589    call _UserCredUpdate
2590return
2591
2592/*:VRX         EF_WINS_SERVER_Change
2593*/
2594EF_WINS_SERVER_Change:
2595    advanced.!smbconfchanged = 1
2596return
2597
2598/*:VRX         Fini
2599*/
2600Fini:
2601    window = VRWindow()
2602    call VRSet window, "Visible", 0
2603    drop window
2604return 0
2605
2606/*:VRX         GetChildren
2607*/
2608GetChildren: PROCEDURE EXPOSE existrec. exc options. icons. fs. cd. samba.
2609    if options.!debug == 1 then say time()' GetChildren started'
2610    PARSE ARG node, parec
2611
2612    CALL _Dynamic "CALL "fs.!prefix"RxGetMount node, 'info.', 'points.', 'res.'"
2613
2614    IF info.2 > 0 THEN icon = icons.!active
2615                  ELSE icon = icons.!passive
2616
2617    rh = VRMethod("CN_CURRENT", 'AddRecord', parec, 'Last', info.0, icon )
2618    IF rh == '' | datatype(res.0) <> "NUM" THEN RETURN
2619
2620    exc = exc + 1
2621    existrec.exc = rh
2622    userdata = node';'info.2
2623    DO i = 1 TO res.0
2624        userdata = ParseResourceData( userdata, res.i )
2625    END
2626    if userdata = "UNKNOWN" then ok = VRMethod("CN_CURRENT", 'RemoveRecord', rh)
2627    else do
2628        CALL VRMethod "CN_CURRENT", 'SetRecordAttr', rh, 'UserData', userdata
2629        if options.currentdata = userdata then ok = VRMethod("CN_CURRENT", 'SetRecordAttr', rh, 'Selected', 1)
2630    end
2631
2632    DO i = 1 TO points.0
2633        childnode = node || points.i || '\'
2634        CALL GetChildren childnode, rh
2635    END
2636    if options.!debug == 1 then say time()' GetChildren done'
2637RETURN
2638
2639/*:VRX         GetMountPoints
2640*/
2641GetMountPoints: PROCEDURE EXPOSE existrec. options. icons. fs. cd. samba.
2642    if options.!debug == 1 then say time()' GetMountPoints started'
2643/*  CALL VRSet "CN_CURRENT", 'Painting', 0 */
2644/*  if options.!debug == 1 then say time()' '||"GetMountPoints: SysDriveMap(USED) started"  */
2645    drvs = SysDriveMap('C:', 'USED') /* was "REMOTE" */
2646/*  if options.!debug == 1 then say time()' '||"GetMountPoints: SysDriveMap(USED) done" */
2647    ac = 0
2648    DO i = 1 TO WORDS( drvs )
2649        fs = TRANSLATE( SysFileSystemType( WORD( drvs, i )))
2650        IF fs == fs.!fileSystemtype THEN DO
2651            ac = ac + 1
2652            attached.ac = WORD( drvs, i )
2653        END
2654    END
2655    attached.0 = ac
2656
2657    exc = 0
2658    DO i = 1 TO attached.0
2659        node = attached.i'\'
2660
2661        CALL VRMethod 'CB_DRIVES',  'AddString', attached.i
2662
2663        CALL _Dynamic "CALL "fs.!prefix"RxGetMount node, 'info.', 'points.', 'res.'"
2664
2665        IF info.2 > 0 THEN icon = icons.!drive
2666                      ELSE icon = icons.!drive_inactive
2667
2668        rh = VRMethod("CN_CURRENT", 'AddRecord',, 'Last', attached.i, icon )
2669        IF rh == '' THEN ITERATE
2670
2671        exc = exc + 1
2672        existrec.exc = rh
2673        userdata = node';'info.2
2674        DO j = 1 TO res.0
2675            userdata = ParseResourceData( userdata, res.j )
2676        END
2677/*      if options.!debug == 1 then say '  "'attached.i'" "'userdata'"' */
2678        CALL VRMethod "CN_CURRENT", 'SetRecordAttr', rh, 'UserData', userdata /* , 'FileName', 'TESTER.EVP' */
2679        if options.currentdata = userdata then ok = VRMethod("CN_CURRENT", 'SetRecordAttr', rh, 'Selected', 1)
2680
2681        CALL VRMethod "CN_CURRENT", 'SetRecordAttr', rh, 'Expanded', 1
2682
2683        DO j = 1 TO points.0
2684            childnode = node || points.j || '\'
2685            CALL GetChildren childnode, rh
2686        END
2687
2688    END
2689    existrec.0 = exc
2690/*  CALL VRSet "CN_CURRENT", 'Painting', 1 */
2691    if options.!debug == 1 then say time()' '||"GetMountPoints done"
2692RETURN
2693
2694/*:VRX         Halt
2695*/
2696Halt:
2697    signal _VREHalt
2698return
2699
2700/*:VRX         Init
2701*/
2702Init:
2703/* Herwig */
2704/*  CALL VRSet 'Console', 'WindowListTitle', ''  */
2705
2706    window = VRWindow()
2707    call VRSet window,    "Visible", 0
2708    call VRMethod window, "Activate"
2709    drop window
2710
2711RETURN
2712
2713/*:VRX         LoadFileSysFuncs
2714*/
2715LoadFileSysFuncs:
2716    if options.!debug == 1 then say time()' LoadFileSysFuncs() started'
2717
2718    Fatal = 1
2719    RestartCount = 0
2720    FoundEVFS = 1
2721    FoundND = 1
2722
2723    program = VRGet("Application", "Program")
2724    if program = "" then parse source . . program
2725    say "Program = '"program"'"
2726    program = translate(VRParseFileName(Program,'N'))
2727    say "Program = '"program"'"
2728
2729    if SysSearchPath("PATH", "EVFSCTL.EXE") = "" | program = "SMBGUI" then do
2730        FoundEVFS = 0
2731        ForceNDFS = 1
2732    end
2733
2734CtlRestart:
2735    if \ForceNDFS then signal NoNetDrive
2736
2737ForceNDFS:
2738    if options.!debug == 1 then say '  NDFS check entered'
2739    call RxFuncAdd 'NdRxLoadFuncs', 'NDCALLS', 'NdRxLoadFuncs'
2740    SIGNAL ON SYNTAX NAME NoNetdrive
2741    call NdRxLoadFuncs
2742    FoundND = 1
2743    SIGNAL OFF SYNTAX
2744    fs.!prefix         = 'ND'
2745    fs.!fileSystemtype = "NDFS32"
2746    fs.!profileext     = "ndc"
2747    signal CommonToBothFS
2748NoNetdrive:
2749    if options.!debug == 1 then say '  NDFS not found'
2750    CALL RxFuncAdd 'EvfsRxLoadFuncs', 'EVFSCALL.DLL', 'EvfsRxLoadFuncs'
2751    SIGNAL ON SYNTAX NAME NoEVFSCALL
2752    CALL EvfsRxLoadFuncs
2753    FoundEVFS = 1
2754    SIGNAL OFF SYNTAX
2755    fs.!prefix         = 'EVFS'
2756    fs.!fileSystemtype = "EVFS"
2757    fs.!profileext     = "evp"
2758CommonToBothFS:
2759    if options.!debug == 1 then say '  Common version check'
2760    CALL _Dynamic "fsstat = "fs.!prefix"RxQueryIFS()"
2761    if fsstat = 252 then CALL _Dynamic "Found"fs.!prefix" = 0"
2762
2763    if word(fsstat,1) = '0' then do
2764        PARSE VAR fsstat '0 'fsname fsver fsctl .
2765        fs.!name = fsname
2766        fs.!version = fsver
2767
2768        if options.!debug == 1 then DO
2769            say '  fs.!prefix = 'fs.!prefix
2770            say '  fs.!name   = 'fs.!Name
2771            say '  Version    = 'fsver
2772            say '  fsctl      = 'fsctl
2773        end
2774    end
2775    else do
2776        if FoundND = 0 & FoundEVFS = 0 then do
2777            CALL VRMessage 'Main', 'FATAL: Neither EVFS nor Netdrive found: 'fs.!prefix'RxQueryIFS()='fsstat, NLVGetMessage( 5 ), 'E'
2778            signal Halt
2779        end
2780        signal ForceNDFS
2781    end
2782    IF fsctl \= 1 THEN DO
2783        if ReStartCount = 0 then do
2784            'detach 'fs.!prefix'ctl.exe'
2785            RestartCount = 1
2786            ok = SysSleep(1)
2787            signal CtlRestart
2788        end
2789        else do
2790            CALL VRMessage 'Main', NLVGetMessage( 101 ), NLVGetMessage( 5 ), 'E'
2791            signal Halt
2792        end
2793    END
2794
2795    Fatal = 0
2796
2797    if options.!debug == 1 then say time()' LoadFileSysFuncs() done'
2798return
2799
2800/*:VRX         Main_Close
2801*/
2802Main_Close:
2803    CALL Quit
2804RETURN
2805
2806/*:VRX         Main_Create
2807*/
2808Main_Create:
2809    options.!debug    = 1
2810    if options.!debug == 1 then do
2811        ok = VRRedirectStdIO("ON")
2812        say time()' Main_Create started'
2813    end
2814    else ok = VRRedirectStdIO("OFF")
2815
2816    call _InitTempDir
2817    call _LoadOtherFuncs
2818
2819    call NLVSetup
2820    call _StemsInit
2821
2822    call _TabbedDialogSetup
2823    call _ContainersInit
2824    call _GUIInit
2825
2826    CALL _ParseCommandLine
2827
2828    CALL LoadFileSysFuncs
2829
2830    CALL _CltInit
2831
2832    CALL _INILoad
2833
2834    call _TabFix 1
2835    call SW_ADVANCED_Init_Content
2836    call SW_SMBTREE_Init_Content
2837    call SW_CONDET_Init_Content
2838    call SW_SETTINGS_Init_Content
2839
2840    CALL Refresh
2841
2842    if advanced.!savepassive == 1 then CALL _PassiveLoad
2843
2844    IF options.!timesync == 1 THEN CALL _TimeSync
2845
2846    IF options.!autoload == 1 THEN CALL Menu_File_Load_Click
2847
2848    CALL VRSet "CB_MOUNT",  "Selected", 1
2849    CALL VRSet "CB_DRIVES", "Selected", 1
2850    IF options.!autoclose == 1
2851    THEN CALL TM_AutoClose_Trigger
2852    ELSE do
2853        if advanced.!browseauth == 1 then do
2854            /* FIXME: unclear why we have to do the following 4 lines here */
2855            call SW_SETTINGS_Init
2856            call SW_SETTINGS_Init_Content
2857            call SW_ADVANCED_Init
2858            call SW_ADVANCED_Init_Content
2859
2860            window = VRLoadSecondary( "SW_LOGIN", "W" )
2861            call Main_Resize
2862        end
2863        if advanced.!browseimme == 1 then call PB_SMBTREE_REFRESH_Click
2864    end
2865
2866    if options.!debug == 1 then say time()' Main_Create done'
2867return
2868
2869/*:VRX         Main_KeyPress
2870*/
2871Main_KeyPress:
2872    key = VRGet('Main', 'KeyString')
2873    IF key == '{F5}' THEN CALL Refresh
2874RETURN
2875
2876/*:VRX         Main_Resize
2877*/
2878Main_Resize:
2879    if options.!debug == 1 then say time()' Main_Resize started'
2880    ok = VRset("Main","Painting", 0)
2881
2882    /* Basic measurements */
2883    main_iwidth  = VRGet("Main","InteriorWidth")                /* Width of window client-area */
2884    main_iheight = VRGet("Main","InteriorHeight")               /* Height of window client-area */
2885
2886/** This caused weird resizing glitches, horrible jittering, etc.  Instead,
2887 ** what we now do (further down) is set a minimum size in twips for the right
2888 ** pane, below which it simply stops resizing and switches to clipping.  (The
2889 ** left pane resizes all its controls dynamically anyway.)  This better matches
2890 ** standard application behaviour, and makes resizing behave more smoothly.
2891 *
2892 *  if VRMethod( "Screen", "TwipsToPixels", main_iheight) < 600 then
2893 *      ok = VRSet("Main","Height",VRMethod( "Screen", "PixelsToTwips", 580))
2894 *  if VRMethod( "Screen", "TwipsToPixels", main_iwidth)  < 730 then
2895 *      ok = VRSet("Main","Width", VRMethod( "Screen", "PixelsToTwips", 730))
2896 */
2897
2898    sbar_height  = VRGet("GB_STATUSBAR","Height")               /* Height of status-bar */
2899    split_left   = VRGet("SPLIT_Main","Left")                   /* Position of the left edge of the split-bar */
2900    marginx2     = margin * 2                                   /* Common margin around controls */
2901    pbtn_height  = 400                                          /* Height of the panels' internal button areas */
2902
2903    pane_height  = main_iheight - sbar_height - (margin * 4)    /* Height of a split-bar panel */
2904    lpane_width  = split_left - margin                          /* Width of the left split-bar panel */
2905    rpane_width  = main_iwidth - split_left - 60 - margin       /* Width of the right split-bar panel */
2906
2907    /* Tabbed Dialog = right pane */
2908    ok = VRset("TDL_1", "Top",    marginx2)
2909    ok = VRset("TDL_1", "Left",   split_left + 60)
2910    ok = VRset("TDL_1", "Width",  rpane_width    )
2911    ok = VRset("TDL_1", "Height", pane_height    )
2912
2913    /* Current Panel */
2914    ok = VRSet("GB_CURRENT",  "Visible", 1           )
2915    ok = VRSet("GB_CURRENT",  "Top",     marginx2  )
2916    ok = VRSet("GB_CURRENT",  "Left",    margin      )
2917    ok = VRSet("GB_CURRENT",  "Width",   lpane_width )
2918    ok = VRSet("GB_CURRENT",  "Height",  pane_height )
2919
2920    ok = VRset("GB_CURRENT3", "Top",     margin )
2921    ok = VRset("GB_CURRENT3", "Left",    margin )
2922    ok = VRset("GB_CURRENT3", "Height",  245    )
2923    ok = VRset("GB_CURRENT3", "Width",   lpane_width - marginx2)
2924
2925    ok = VRset("DT_CURRENT", "Top",      8   )
2926    ok = VRset("DT_CURRENT", "Left",     8   )
2927    ok = VRset("DT_CURRENT", "Height",   213 )
2928    ok = VRset("DT_CURRENT", "Width",    (lpane_width - marginx2) - 24 )
2929
2930    ok = VRset("GB_CURRENT2", "Left",   margin                )
2931    ok = VRset("GB_CURRENT2", "Top",    245 + marginx2        )
2932    ok = VRset("GB_CURRENT2", "Width",  lpane_width - marginx2)
2933    ok = VRset("GB_CURRENT2", "Height", pane_height - (margin * 5) - pbtn_height - 245 )
2934
2935    ok = VRset("CN_CURRENT", "Top",     margin )
2936    ok = VRset("CN_CURRENT", "Left",    margin )
2937    ok = VRset("CN_CURRENT", "Width",   VRGet("GB_CURRENT2","Width")  - marginx2)
2938    ok = VRset("CN_CURRENT", "Height",  VRGet("GB_CURRENT2","Height") - marginx2)
2939
2940    ok = VRset("PB_DETACH",  "Left",   margin )
2941    ok = VRset("PB_DETACH",  "Top",    pane_height - pbtn_height - marginx2 )
2942    ok = VRset("PB_DETACH",  "Width",  min((lpane_width-margin*3) % 2, 1313)    )
2943    ok = VRset("PB_UNMOUNT", "Left",   VRGet("PB_DETACH","Width") + marginx2)
2944    ok = VRset("PB_UNMOUNT", "Top",    pane_height - pbtn_height - marginx2 )
2945    ok = VRset("PB_UNMOUNT", "Width",  min((lpane_width-margin*3) % 2, 1313)    )
2946
2947    /* Splitbar - reduced in size to make it more noticable */
2948    ok = VRset("SPLIT_Main", "Visible", 1           )
2949    ok = VRset("SPLIT_Main", "Top",     marginx2 + (pane_height-1200)%2  )
2950    ok = VRset("SPLIT_Main", "Height",  1200 /* pane_height */ )
2951
2952    /* Statusbar */
2953    ok = VRSet("GB_STATUSBAR", "Left",  margin )
2954    ok = VRSet("GB_STATUSBAR", "Top",   main_iheight - sbar_height - margin )
2955    ok = VRSet("GB_STATUSBAR", "Width", lpane_width + 50 + rpane_width      )
2956
2957    ok = VRset("DT_STATUSBAR", "Top",   12 )
2958    ok = VRset("DT_STATUSBAR", "Left",  12 )
2959    ok = VRset("DT_STATUSBAR", "Height", VRGet("GB_STATUSBAR","Height") -24 )
2960    ok = VRset("DT_STATUSBAR", "Width", (lpane_width + 50 + rpane_width) - 24 )
2961
2962    /* Modified for notebook pages */
2963    pane_height = marginx2 + pane_height -1180
2964    rpane_width = marginx2 + rpane_width -760
2965    /* Use this as the width for the container pages, which don't have as strict a minimum width */
2966    rcnr_width = rpane_width
2967
2968    /* Minimum size of right panel (based on SW_DIALOG which is the largest) */
2969    if pane_height < 5360 then pane_height = 5360
2970    if rpane_width < 6010 then rpane_width = 6010
2971
2972    /* Dialog page */
2973    ok = VRSet("GB_DIALOG", "Top",    margin /* marginx2 */ )
2974    ok = VRSet("GB_DIALOG", "Left",   margin /* marginx2 */ /* split_left + 60 */ )
2975    ok = VRset("GB_DIALOG", "Height", pane_height )
2976    ok = VRset("GB_DIALOG", "Width",  rpane_width )
2977
2978    ok = VRset("PB_MOUNT",      "Left", margin )
2979    ok = VRset("PB_MOUNT",      "Top",  pane_height - pbtn_height - marginx2)
2980    ok = VRset("PB_EDIT_CANCEL", "Left", VRGet("PB_MOUNT","Width") + marginx2)
2981    ok = VRset("PB_EDIT_CANCEL", "Top",  pane_height - pbtn_height - marginx2)
2982
2983    ok = VRset("PB_DIALOG_HELP", "Left", rpane_width - marginx2 - VRGet("PB_DIALOG_HELP","Width") + 24)
2984    ok = VRset("PB_DIALOG_HELP", "Top",  pane_height - pbtn_height - marginx2)
2985
2986    ok = VRset("GB_SHARE", "Left",  margin )
2987    ok = VRset("GB_SHARE", "Top",   marginx2 /* 245 + marginx2 */ )
2988    ok = VRset("GB_SHARE", "Height",  2252 )
2989    ok = VRset("GB_SHARE", "Width", rpane_width - marginx2 )
2990
2991    ok = VRset("GB_AUTH", "Left",  margin )
2992    ok = VRset("GB_AUTH", "Top",   margin * 3 + VRGet("GB_SHARE","Height") /* 245 + (margin * 3) + VRGet("GB_SHARE","Height") */ )
2993    ok = VRset("GB_AUTH", "Width", rpane_width - marginx2 )
2994
2995    ok = VRset("GB_MPOINT","Left",   margin )
2996    ok = VRset("GB_MPOINT","Top",    /* 245 + */ (margin * 4) + VRGet("GB_SHARE","Height") + VRGet("GB_AUTH","Height"))
2997    ok = VRset("GB_MPOINT","Width",  rpane_width - marginx2 )
2998
2999    /* Advanced page */
3000    ok = VRSet("GB_ADVANCED", "Top",    margin /* marginx2 */ )
3001    ok = VRSet("GB_ADVANCED", "Left",   margin /* marginx2 */ /* split_left + 60 */ )
3002    ok = VRset("GB_ADVANCED", "Height", pane_height )
3003    ok = VRset("GB_ADVANCED", "Width",  rpane_width )
3004
3005    ok = VRset("GB_ADVANCED2", "Left",   margin )
3006    ok = VRset("GB_ADVANCED2", "Top",    /* 245 + */ marginx2)
3007    ok = VRset("GB_ADVANCED2", "Width",  rpane_width - marginx2)
3008    ok = VRset("GB_ADVANCED2", "Height", pane_height - (margin * 5) - pbtn_height /* - 245 */ )
3009
3010    ok = VRset("PB_ADVANCED_APPLY", "Left",   margin )
3011    ok = VRset("PB_ADVANCED_APPLY", "Top",    pane_height - pbtn_height   - marginx2)
3012    ok = VRset("PB_ADVANCED_UNDO", "Left",   VRGet("PB_SMBTREE_CONNECT","Width") + marginx2)
3013    ok = VRset("PB_ADVANCED_UNDO", "Top",    pane_height - pbtn_height   - marginx2)
3014    ok = VRset("PB_ADVANCED_HELP", "Left", rpane_width - marginx2 - VRGet("PB_SMBTREE_HELP","Width") + 24)
3015    ok = VRset("PB_ADVANCED_HELP", "Top",  pane_height - pbtn_height - marginx2)
3016
3017    /* SMBTree page */
3018    ok = VRSet("GB_SMBTREE", "Top",     margin /* x2 */     )
3019    ok = VRSet("GB_SMBTREE", "Left",    margin /* x2 */ /* split_left + 60 */ )
3020    ok = VRset("GB_SMBTREE", "Height",  pane_height     )
3021    ok = VRset("GB_SMBTREE", "Width",   rcnr_width     )
3022
3023    ok = VRset("GB_SMBTREE2","Left",    margin                    )
3024    ok = VRset("GB_SMBTREE2","Top",     /* 45 + */ marginx2        )
3025    ok = VRset("GB_SMBTREE2","Width",   rcnr_width - marginx2)
3026    ok = VRset("GB_SMBTREE2","Height",  pane_height - (margin * 5) - pbtn_height /* - 245 */ )
3027
3028    ok = VRset("CN_SMBTREE",  "Top",    margin )
3029    ok = VRset("CN_SMBTREE",  "Left",   margin )
3030    ok = VRset("CN_SMBTREE",  "Width",  VRGet("GB_SMBTREE2","Width")  - marginx2)
3031    ok = VRset("CN_SMBTREE",  "Height", VRGet("GB_SMBTREE2","Height") - marginx2)
3032
3033    ok = VRset("PB_SMBTREE_CONNECT", "Left",   margin )
3034    ok = VRset("PB_SMBTREE_CONNECT", "Top",    pane_height - pbtn_height   - marginx2)
3035    ok = VRset("PB_SMBTREE_REFRESH", "Left",   VRGet("PB_SMBTREE_CONNECT","Width") + marginx2)
3036    ok = VRset("PB_SMBTREE_REFRESH", "Top",    pane_height - pbtn_height   - marginx2)
3037
3038    hlpmin = VRGet("PB_SMBTREE_REFRESH", "Left") + VRGet("PB_SMBTREE_REFRESH","Width") + marginx2
3039    hlppos = rcnr_width - marginx2 - VRGet("PB_SMBTREE_HELP","Width") + 24   
3040    IF hlppos < hlpmin THEN hlppos = hlpmin
3041
3042    ok = VRset("PB_SMBTREE_HELP", "Left", hlppos )
3043    ok = VRset("PB_SMBTREE_HELP", "Top",  pane_height - pbtn_height - marginx2)
3044
3045    ok = VRset("PICT_THROBBER", "Top",  VRGet("CN_SMBTREE","Height") % 2 - 100 )
3046    ok = VRset("PICT_THROBBER", "Left", VRGet("CN_SMBTREE","Width")  % 2 - 200 )
3047
3048    /* Connection details page */
3049    ok = VRSet("GB_CONDET", "Top",     margin /* x2 */     )
3050    ok = VRSet("GB_CONDET", "Left",    margin /* x2 */  /* split_left + 60 */ )
3051    ok = VRset("GB_CONDET", "Height",  pane_height     )
3052    ok = VRset("GB_CONDET", "Width",   rcnr_width      )
3053
3054    ok = VRset("GB_CONDET2", "Left",   margin )
3055    ok = VRset("GB_CONDET2", "Top",    /* 245 + */ marginx2)
3056    ok = VRset("GB_CONDET2", "Width",  rcnr_width - marginx2)
3057    ok = VRset("GB_CONDET2", "Height", pane_height - (margin * 5) - pbtn_height /* - 245 */ )
3058
3059    ok = VRset("CN_CONDET",  "Top",    margin )
3060    ok = VRset("CN_CONDET",  "Left",   margin )
3061    ok = VRset("CN_CONDET",  "Width",  VRGet("GB_CONDET2","Width")  - marginx2)
3062    ok = VRset("CN_CONDET",  "Height", VRGet("GB_CONDET2","Height") - marginx2)
3063
3064    ok = VRset("PB_CONDET_SAVE", "Left", margin )
3065    ok = VRset("PB_CONDET_SAVE", "Top",  pane_height - pbtn_height - marginx2      )
3066    ok = VRset("PB_CONDET_LOAD", "Left", VRGet("PB_CONDET_SAVE","Width") + marginx2)
3067    ok = VRset("PB_CONDET_LOAD", "Top",  pane_height - pbtn_height - marginx2      )
3068
3069    hlpmin = VRGet("PB_CONDET_LOAD", "Left") + VRGet("PB_CONDET_LOAD","Width") + marginx2
3070    hlppos = rcnr_width - marginx2 - VRGet("PB_CONDET_HELP","Width") + 24
3071    IF hlppos < hlpmin THEN hlppos = hlpmin
3072
3073    ok = VRset("PB_CONDET_HELP", "Left", hlppos )
3074    ok = VRset("PB_CONDET_HELP", "Top",  pane_height - pbtn_height - marginx2)
3075
3076    /* Global settings page */
3077    ok = VRSet("GB_GLOBAL", "Top",     margin /* x2 */     )
3078    ok = VRSet("GB_GLOBAL", "Left",    margin /* x2 */  /* split_left + 60 */ )
3079    ok = VRset("GB_GLOBAL", "Height",  pane_height     )
3080    ok = VRset("GB_GLOBAL", "Width",   rpane_width     )
3081
3082    ok = VRset("GB_GLOBAL2", "Left",  margin )
3083    ok = VRset("GB_GLOBAL2", "Top",   marginx2 /* 245 + marginx2 */ )
3084    ok = VRset("GB_GLOBAL2", "Width", rpane_width - marginx2 )
3085
3086    ok = VRset("GB_RESOLUTION", "Left",  margin )
3087    ok = VRset("GB_RESOLUTION", "Top",   margin * 3 + VRGet("GB_GLOBAL2","Height") /* 245 + (margin * 3) + VRGet("GB_GLOBAL2","Height") */ )
3088    ok = VRset("GB_RESOLUTION", "Width", rpane_width - marginx2 )
3089
3090    ok = VRset("GB_LOGGING","Left",   margin )
3091    ok = VRset("GB_LOGGING","Top",    /* 245 + */ (margin * 4) + VRGet("GB_GLOBAL2","Height") + VRGet("GB_RESOLUTION","Height"))
3092    ok = VRset("GB_LOGGING","Width",  rpane_width - marginx2 )
3093
3094    ok = VRset("PB_SETTINGS_APPLY", "Left", margin )
3095    ok = VRset("PB_SETTINGS_APPLY", "Top",  pane_height - pbtn_height - marginx2      )
3096    ok = VRset("PB_SETTINGS_APPLY", "Height", pbtn_height)
3097    ok = VRset("PB_SETTINGS_UNDO", "Left", VRGet("PB_CONDET_SAVE","Width") + marginx2)
3098    ok = VRset("PB_SETTINGS_UNDO", "Top",  pane_height - pbtn_height - marginx2      )
3099    ok = VRset("PB_SETTINGS_UNDO", "Height", pbtn_height)
3100    ok = VRset("PB_SETTINGS_HELP", "Left", rpane_width - marginx2 - VRGet("PB_CONDET_HELP","Width") + 24)
3101    ok = VRset("PB_SETTINGS_HELP", "Top",  pane_height - pbtn_height - marginx2)
3102    ok = VRset("PB_SETTINGS_HELP", "Height", pbtn_height)
3103
3104    /* SMB.CONF Settings page */
3105    ok = VRSet("GB_SMBCONFX", "Top",     margin /* x2 */     )
3106    ok = VRSet("GB_SMBCONFX", "Left",    margin /* x2 */  /* split_left + 60 */ )
3107    ok = VRset("GB_SMBCONFX", "Height",  pane_height     )
3108    ok = VRset("GB_SMBCONFX", "Width",   rpane_width     )
3109
3110    ok = VRset("GB_SMBCONF2", "Left",  margin )
3111    ok = VRset("GB_SMBCONF2", "Top",   marginx2 )
3112    ok = VRset("GB_SMBCONF2", "Width", rpane_width - marginx2 )
3113    ok = VRset("GB_SMBCONF2", "Height",  pane_height - (margin * 7) - pbtn_height /* - 245 */ )
3114
3115    ok = VRset("PB_SMBCONF_APPLY", "Left", margin )
3116    ok = VRset("PB_SMBCONF_APPLY", "Top",  pane_height - pbtn_height - marginx2      )
3117    ok = VRset("PB_SMBCONF_APPLY", "Height", pbtn_height)
3118    ok = VRset("PB_SMBCONF_UNDO", "Left", VRGet("PB_CONDET_SAVE","Width") + marginx2)
3119    ok = VRset("PB_SMBCONF_UNDO", "Top",  pane_height - pbtn_height - marginx2      )
3120    ok = VRset("PB_SMBCONF_UNDO", "Height", pbtn_height)
3121    ok = VRset("PB_SMBCONF_HELP", "Left", rpane_width - marginx2 - VRGet("PB_CONDET_HELP","Width") + 24)
3122    ok = VRset("PB_SMBCONF_HELP", "Top",  pane_height - pbtn_height - marginx2)
3123    ok = VRset("PB_SMBCONF_HELP", "Height", pbtn_height)
3124
3125    /* DOne with pages */
3126    ok = VRset("Main","Painting", 1)
3127
3128    /* check and empty event queue, trash spurious resize events */
3129    EventString = ''
3130    TrashedResize = 0
3131
3132    do until EventString = 'nop'
3133        EventString = VREvent('N')
3134        if EventString <> 'nop' then do
3135            if EventString = 'CALL Main_Resize' then TrashedResize = 1
3136                                                else interpret eventString
3137        end
3138    end
3139    if TrashedResize then CALL Main_Resize
3140
3141    if options.!debug == 1 then say time()' Main_Resize done'
3142return
3143/*:VRX         Menu_Context_ChangeView_Click
3144*/
3145Menu_Context_ChangeView_Click:
3146    ok = VRSet("Cn_Current","View","NameTree")
3147return
3148
3149/*:VRX         Menu_Context_Detach_All_Click
3150*/
3151Menu_Context_Detach_All_Click:
3152    ok = VRMethod( "CN_CURRENT", "GetRecordList", "All", "umrh." )
3153    do um = 1 to umrh.0
3154        ok = VRMethod( "CN_CURRENT", "SetRecordAttr", umrh.um, "Selected", 1)
3155        call PB_DETACH_Click
3156    end
3157    drop um umrh.
3158return
3159
3160/*:VRX         Menu_Context_Detach_Click
3161*/
3162Menu_Context_Detach_Click:
3163    call PB_DETACH_Click
3164return
3165
3166/*:VRX         Menu_Context_Edit_Click
3167*/
3168Menu_Context_Edit_Click:
3169    if options.!debug == 1 then say time()' Menu_Context_Edit_Click started'
3170    /* call VRMethod "TDL_1", 'PostEvent', 'PageSelected', 'Page', 1 */
3171    ok = VRset("TDL_1", 'Selected', 1)
3172    options.!editmode = 1
3173    CALL VRSet "PB_EDIT_CANCEL","Visible", 1
3174    CALL VRSet "PB_UNMOUNT","Enabled", 0
3175
3176    ok = VRMethod( "TDL_1", "SetTabText", 1, " "NLVGetMessage(33)" " )
3177/*  CALL NLVSetText "DT_DIALOG","Caption",33 */
3178    CALL VRSet "GB_CURRENT", "ENABLED", 0
3179
3180    ok = VRSet("CB_MOUNT","Value","")
3181    ok = VRSet("CB_MOUNT","Selected",1)
3182    ok = VRSet("CB_MOUNT","Value",mtype.1)
3183
3184    parse var p_string p_workgroup':\\'p_server'\'p_share
3185
3186    /* if options.!debug == 1 then say time()' '||p_workgroup */
3187
3188    if options.!debug == 1 then say time()' data   '||data
3189    if options.!debug == 1 then say time()' domain '||p_workgroup
3190    if options.!debug == 1 then say time()' server '||p_server
3191    if options.!debug == 1 then say time()' share  '||p_share
3192    if options.!debug == 1 then say time()' string '||p_string
3193
3194
3195    CALL VRSet "EF_SHARE",  "VALUE", p_share
3196    CALL VRSet "EF_SERVER", "VALUE", p_server
3197    CALL VRSet "EF_NETWORK","VALUE", p_workgroup
3198
3199    /* if options.!debug == 1 then say time()' '||p_node */
3200    parse var p_node p_drive'\'p_directory'\'
3201    CALL VRSet "CB_DRIVES", "Value", p_drive
3202    CALL VRSet "EF_DIRECTORY", "Value", p_directory
3203    if options.!debug == 1 then say time()' Menu_Context_Edit_Click done'
3204return
3205
3206/*:VRX         Menu_Context_Open_Click
3207*/
3208Menu_Context_Open_Click:
3209    ok = VRSet("Menu_Context_Open_Default","Visible",0)
3210return
3211
3212/*:VRX         Menu_Context_Open_Default_Click
3213*/
3214Menu_Context_Open_Default_Click:
3215    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Click started"
3216    if \VRIsValidObject(rh) then return
3217
3218    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3219    PARSE VAR userdata mountpoint ';' mounts ';' .
3220
3221    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3222
3223    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "DEFAULT" )
3224
3225    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Click done"
3226return
3227
3228/*:VRX         Menu_Context_Open_Detail_Click
3229*/
3230Menu_Context_Open_Detail_Click:
3231    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Details_Click started"
3232    if \VRIsValidObject(rh) then return
3233
3234    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3235    PARSE VAR userdata mountpoint ';' mounts ';' .
3236
3237    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3238
3239    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "DETAILS" )
3240
3241    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Details_Click done"
3242return
3243
3244/*:VRX         Menu_Context_Open_Icon_Click
3245*/
3246Menu_Context_Open_Icon_Click:
3247    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Icon_Click started"
3248    if \VRIsValidObject(rh) then return
3249
3250    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3251    PARSE VAR userdata mountpoint ';' mounts ';' .
3252
3253    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3254
3255    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "ICON" )
3256
3257    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Icon_Click done"
3258return
3259
3260/*:VRX         Menu_Context_Open_Settings_Click
3261*/
3262Menu_Context_Open_Settings_Click:
3263    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Settings_Click started"
3264    if \VRIsValidObject(rh) then return
3265
3266    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3267    PARSE VAR userdata mountpoint ';' mounts ';' .
3268
3269    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3270
3271    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "SETTINGS" )
3272
3273    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Settings_Click done"
3274return
3275
3276/*:VRX         Menu_Context_Open_Splitview_Click
3277*/
3278Menu_Context_Open_Splitview_Click:
3279    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Splitview_Click started"
3280    if \VRIsValidObject(rh) then return
3281
3282    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3283    PARSE VAR userdata mountpoint ';' mounts ';' .
3284
3285    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3286
3287    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "SPLITVIEW" )
3288
3289    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Splitview_Click done"
3290return
3291
3292/*:VRX         Menu_Context_Open_Tree_Click
3293*/
3294Menu_Context_Open_Tree_Click:
3295    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Tree_Click started"
3296    if \VRIsValidObject(rh) then return
3297
3298    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', rh, 'UserData')
3299    PARSE VAR userdata mountpoint ';' mounts ';' .
3300
3301    if length(mountpoint) > 3 then mountpoint = strip(mountpoint,'T','\')
3302
3303    ID = VRMethod( "Application", "StartThread", "wps_open", mountpoint, "TREE" )
3304
3305    if options.!debug == 1 then say time()' '||"Menu_Context_Open_Tree_Click done"
3306return
3307
3308/*:VRX         Menu_Context_Refresh_Click
3309*/
3310Menu_Context_Refresh_Click:
3311    CALL Refresh
3312return
3313
3314/*:VRX         Menu_Context_Unmount_Click
3315*/
3316Menu_Context_Unmount_Click:
3317    call PB_UNMOUNT_Click
3318return
3319
3320/*:VRX         Menu_File_Autostart_Activate_Click
3321*/
3322Menu_File_Autostart_Activate_Click:
3323    options.!autostart = 1
3324
3325    Profile    = VRParseFilename(settings.!ini,'DPN')'.'fs.!profileext
3326    ExeName    = VRParseFileName(VRget("Application","Program"),'DPNE')
3327    if ExeName = "" then do
3328        parse source . . script
3329        ExeName = VRParseFilename(script,'DP')'\EVFSGUI.EXE'
3330    end
3331    StartupDir = VRParseFileName(VRget("Application","Program"),'DP')
3332    if StartupDir = "" then do
3333        parse source . . script
3334        StartUpDir = VRParseFilename(script,'DP')
3335    end
3336
3337    ObjTitle   = NLVGetMessage( 59 )
3338    if ObjTitle = "" then ObjTitle = '[EVFS LAN-Connections]'
3339
3340    CALL PB_CONDET_SAVE_Click
3341
3342    rc = CreateObject( 'WPProgram', ObjTitle,'<WP_START>',,
3343            'EXENAME='||ExeName||';'||,
3344            'PROGTYPE=PM;'||,
3345            'TITLE='ObjTitle';'||,
3346            'PARAMETERS='Profile' -AUTOCLOSE -NOGUI;'||,
3347            'STARTUPDIR='StartupDir';'||,
3348            'NOPRINT=YES;'||,
3349            'HIDEBUTTON=DEFAULT;'||,
3350            'MINWIN=DEFAULT;'||,
3351            'CCVIEW=DEFAULT;'||,
3352            'DEFAULTVIEW=DEFAULT;'||,
3353            'OBJECTID=<EVFSGUI_AUTOSTART>',,
3354        'REPLACE' )
3355
3356    IF rc == 1 THEN do
3357        Text = NLVGetMessage( 60 )
3358        if Text = "" then Text = '[Created object in Autostart-Folder]'
3359        CALL VRMessage 'Main', Text, VRGet("Main", "Caption")
3360    end
3361    ELSE do
3362        Text = NLVGetMessage( 61 )
3363        if Text = "" then Text = '[Could not create object in Autostart-Folder]'
3364        Title = NLVGetMessage( 5 )
3365        if Title = "" then Title = '[Error]'
3366        CALL VRMessage 'Main', Text, Title, 'E'
3367    end
3368
3369    options.!autostart = 0
3370return
3371/*:VRX         Menu_File_Autostart_Click
3372*/
3373Menu_File_Autostart_Click:
3374
3375return
3376
3377/*:VRX         Menu_File_Autostart_Deactivate_Click
3378*/
3379Menu_File_Autostart_Deactivate_Click:
3380    ok = SysDestroyObject("<EVFSGUI_AUTOSTART>")
3381    IF ok == 1 THEN do
3382        Text = NLVGetMessage( 79 )
3383        if Text = "" then Text = '[Autostart object created successfully]'
3384        CALL VRMessage 'Main', Text, VRGet("Main", "Caption")
3385    end
3386    ELSE do
3387        Text = NLVGetMessage( 78 )
3388        if Text = "" then Text = '[Could find Autostart object]'
3389        Title = NLVGetMessage( 5 )
3390        if Title = "" then Title = '[Error]'
3391        CALL VRMessage 'Main', Text, Title, 'E'
3392    end
3393return
3394
3395/*:VRX         Menu_File_Click
3396*/
3397Menu_File_Click:
3398    ok = VRSet("Menu_File_LMHosts_Reset", "Enabled", VRFileExists( samba.!lmhosts ))
3399    ok = VRSet("Menu_File_ucCred_Reset",  "Enabled", (VRGet("Pict_PWINMEM","PicturePath") = "#36"))
3400return
3401
3402/*:VRX         Menu_File_Close_Click
3403*/
3404Menu_File_Close_Click:
3405    call Quit
3406return
3407
3408/*:VRX         Menu_File_Daemon_Start_Click
3409*/
3410Menu_File_Daemon_Start_Click:
3411    if options.!debug == 1 then say time()' Menu_File_Daemon_Start_Click started'
3412    if VRFileExists(SysBootDrive()"\ndpsmb.dbg") then do
3413        btns.0 = 2
3414        btns.1 = NLVGetMessage( 6 )
3415        btns.2 = NLVGetMessage( 7 )
3416        confirm = VRMessage('Main', NLVGetMessage( 119 ), NLVGetMessage( 8 ), 'Q', 'btns.', 1, 2 )
3417        IF confirm == 1 THEN do
3418            logFiles = value("LOGFILES",,"OS2ENVIRONMENT")
3419            ok1 = SysFileDelete(Logfiles||'\log.smbc')
3420            ok2 = SysFileDelete(Logfiles||'\log.ndpsmb')
3421            if ok1 <> 0 | ok2 <> 0 then do
3422                ok = VRMessage('Main', NLVGetMessage(5)' 'Logfiles||'\log.smbc RC='ok1||'0D0A'x||NLVGetMessage(5)' 'Logfiles||'\log.ndpsmb RC='ok2, NLVGetMessage( 5 ), 'E')
3423            end
3424            drop ok1 ok2
3425        end
3426    end
3427    address cmd 'detach 'fs.!prefix'CTL.EXE'
3428    ok = VRset("GB_CURRENT","Enabled", 1)
3429    ok = VRset("TDL_1","Enabled", 1)
3430    CALL REFRESH
3431    ok = VRSet("Menu_File_Daemon_Start","Enabled",0)
3432    ok = VRSet("Menu_File_Daemon_Stop","Enabled",1)
3433    if options.!debug == 1 then say time()' Menu_File_Daemon_Start_Click done'
3434return
3435
3436/*:VRX         Menu_File_Daemon_Stop_Click
3437*/
3438Menu_File_Daemon_Stop_Click:
3439    if options.!debug == 1 then say time()' Menu_File_Daemon_Stop_Click started'
3440    ok = PRProcessList(proc)
3441    do I = 1 to proc.0
3442        CurProc = VRParseFileName(proc.i.name,'NE')
3443        if CurProc = fs.!prefix"CTL.EXE" then  do
3444            call charout , '  'CurProc' RC='
3445            ok = PRKillProcess(1,proc.i.pid)
3446            say ok
3447        end
3448    end
3449    ok = VRset("GB_CURRENT","Enabled", 0)
3450    ok = VRset("TDL_1","Enabled", 0)
3451    ok = VRSet("Menu_File_Daemon_Start","Enabled",1)
3452    ok = VRSet("Menu_File_Daemon_Stop","Enabled",0)
3453    if options.!debug == 1 then say time()' Menu_File_Daemon_Stop_Click stopped'
3454return
3455/*:VRX         Menu_File_LMHosts_Reset_Click
3456*/
3457Menu_File_LMHosts_Reset_Click:
3458    call _LMHostsReset
3459return
3460
3461/*:VRX         Menu_File_Load_Click
3462*/
3463Menu_File_Load_Click: PROCEDURE EXPOSE settings. options. icons. advanced. vfs. Profile fs. cd. samba.
3464    IF options.!autoload == 1 then filename = Profile
3465    else filename = VRFileDialog('Main', NLVGetMessage( 55 ), 'L', '*.'fs.!profileext)
3466    IF filename == '' THEN RETURN
3467    IF STREAM( filename, 'C', 'QUERY EXISTS') == '' THEN DO
3468        CALL VRMessage 'Main', NLVGetMessage( 56, filename ), NLVGetMessage( 5 ), 'E'
3469        RETURN
3470    END
3471
3472    CALL LINEIN filename, 1, 0
3473    DO WHILE LINES( filename )
3474        /* Fix Ticket #202 in order to allow blanks in sharenames */
3475        resline  = LINEIN( filename )
3476        nodelen  = pos('\\',resline)-2
3477        node     = left(resline,nodelen)
3478        rwFlag   = word(resline,words(resline))
3479        resource = substr(resline,nodelen+2,length(resline)-(nodelen+2)-(length(rwFlag)+1)+1)
3480        drop resline
3481        drop nodelen
3482
3483        vfs.!drive      = FILESPEC('DRIVE', node )
3484        vfs.!mountpoint = STRIP( node, 'T', '\')
3485
3486        /* In case we only have a volume we reattach the backslash, otherwise restore will fail */
3487        if vfs.!drive = vfs.!mountpoint then vfs.!mountpoint = vfs.!mountpoint||'\'
3488
3489        call ParseResParmString
3490
3491        options.!workgroup  = p_workgroup
3492        options.!server     = p_server
3493        options.!share      = p_share
3494        options.!user       = p_user
3495        options.!password   = p_password
3496        options.!spassword  = p_spassword
3497        options.!master     = p_master
3498        options.!mastertype = p_mtype
3499/*      options.!memlen     = p_memlen
3500        options.!logfile    = p_logfile
3501        options.!loglevel   = p_loglevel */
3502        options.!cachetimeout = p_cachetimeout
3503        options.!cachelistings = p_cachelistings
3504        options.!easupport  = p_easupport
3505
3506        IF rwFlag == 'R' THEN
3507            options.!readonly = 1
3508        ELSE
3509            options.!readonly = 0
3510
3511        CALL Mount
3512
3513    END
3514    CALL STREAM filename, 'C', 'CLOSE'
3515
3516    options.!autoload = 0
3517
3518    CALL Refresh
3519RETURN
3520/*:VRX         Menu_File_Save_Click
3521*/
3522Menu_File_Save_Click:
3523    call PB_CONDET_SAVE_Click
3524return
3525
3526/*:VRX         Menu_File_ucCred_Reset_Click
3527*/
3528Menu_File_ucCred_Reset_Click:
3529    if _ucChkUc() then ok = _ucDelUc()
3530    ok = VRSet("Pict_PWINMEM","PicturePath","#37")
3531    ok = VRSet("EF_USER",    "Value","")
3532    ok = VRSet("EF_PASSWORD","Value","")
3533    call _UserCredUpdate
3534return
3535
3536/*:VRX         Menu_Help_About_Click
3537*/
3538Menu_Help_About_Click:
3539    ok = VRLoadSecondary("SW_ABOUT", "W")
3540return
3541
3542/*:VRX         Menu_Help_Extended_Click
3543*/
3544Menu_Help_Extended_Click:
3545    ok = VRMethod( "Main", "InvokeHelp" )
3546return
3547
3548/*:VRX         Menu_Selected_Connect_Click
3549*/
3550Menu_Selected_Connect_Click:
3551    call PB_SMBTREE_CONNECT_Click
3552return
3553
3554/*:VRX         Menu_Selected_Default_Workgroup_Click
3555*/
3556Menu_Selected_Default_Workgroup_Click:
3557    if options.!debug == 1 then say time()' '||"Menu_Selected_Default_Workgroup_Click started"
3558    if options.!debug == 1 then say '  SMBObj.rh        = "'SMBObj.rh'"'
3559    Success = 0
3560    if SMBObj.rh <> "" then do
3561        if options.!debug == 1 then say '  SMBObj.udatatype = "'SMBObj.udatatype'"'
3562        Success = 1
3563        select
3564            when SMBObj.udatatype = "WORKGROUP" then workgroupname = VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.rh,"Caption")
3565            when SMBObj.udatatype = "DISK"      then workgroupname = VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.gparentrh,"Caption")
3566            when SMBObj.udatatype = "PRINTER"   then workgroupname = VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.gparentrh,"Caption")
3567            when SMBObj.udatatype = "SERVER"    then workgroupname = VRMethod("CN_SMBTREE","GetRecordAttr",SMBObj.parentrh,"Caption")
3568            otherwise Success = 0
3569        end
3570
3571        /* FIXME: switch over to REXXIni calls */
3572        if Success = 1 then ok = TRSetIni("[global]","workgroup", workgroupname, samba.!smbconf)
3573    end
3574    Buttons.1 = NLVGetMessage(2)
3575    Buttons.0 = 1
3576
3577    if Success = 0 then do
3578        id = VRMessage( VRWindow(), NLVGetMessage(5), NLVGetMessage(75), "Error", "Buttons.", 1, 1 )
3579    end
3580    else do
3581        id = VRMessage( VRWindow(), NLVGetMessage(117, workgroupname), NLVGetMessage(75), "Information", "Buttons.", 1, 1 )
3582    end
3583    if options.!debug == 1 then say time()' '||"Menu_Selected_Default_Workgroup_Click done"
3584return
3585
3586/*:VRX         Menu_Selected_DetailsView_Click
3587*/
3588Menu_Selected_DetailsView_Click:
3589    ok = VRSet("CN_smbtree", "View", "Detail")
3590return
3591
3592/*:VRX         Menu_Selected_Info_Click
3593*/
3594Menu_Selected_Info_Click:
3595    if options.!debug == 1 then say time()' Menu_Selected_Info_Click started'
3596
3597    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "SourceOrSelected", "SelRH." )
3598    if SelRH.0 = 0 then do
3599        if options.!debug == 1 then say time()' Menu_Selected_Info_Click aborted'
3600        return
3601    end
3602
3603    call _GetSMBObjectProperties SelRH.1
3604
3605    window = VRLoadSecondary( "SW_INFO", "W" )
3606    if options.!debug == 1 then say time()' Menu_Selected_Info_Click done'
3607return
3608
3609/*:VRX         Menu_Selected_Refresh_Click
3610*/
3611Menu_Selected_Refresh_Click:
3612    ok = VRMethod( "CN_smbtree", "SetRecordAttr", SMBObj.rh, "Icon","#61:PMWP.DLL")
3613    call _DelSMBObjectShares SMBObj.rh
3614    machine = SMBObj.resname
3615    ok = VRSet("TM_RefreshTreeDisplay", "Delay", 1000)
3616    call _RefreshShares
3617return
3618
3619/*:VRX         Menu_Selected_Remove_Click
3620*/
3621Menu_Selected_Remove_Click:
3622    ok = VRMethod( "CN_CONDET", "GetRecordList", "SourceOrSelected", "selrec." )
3623    if selrec.0 = 0 then return
3624
3625    do I = 1 to selrec.0
3626        if VRMethod("CN_CONDET", "GetFieldData", selrec.I, cd.statusfh) = icons.!passive then do
3627            CALL VRMethod "CN_CONDET", 'RemoveRecord', selrec.I
3628        end
3629        else do
3630            mountpoint = VRMethod("CN_CONDET", "GetFieldData", selrec.I, cd.mpointfh)
3631            mpidx = VRMethod("CN_CONDET", "GetFieldData", selrec.I, cd.mpidxfh)
3632            if mpidx = 1 then do
3633                btns.0 = 2
3634                btns.1 = NLVGetMessage( 6 )
3635                btns.2 = NLVGetMessage( 7 )
3636                confirm = VRMessage('Main', NLVGetMessage( 72, mountpoint ), NLVGetMessage( 8 ), 'Q', 'btns.', 1, 2 )
3637                IF confirm \= 1 THEN RETURN
3638
3639                CALL _Dynamic "ok = "fs.!prefix"RxUnmount('"mountpoint"', "mpidx")"
3640                CALL VRMethod "CN_CONDET", 'RemoveRecord', selrec.I
3641                CALL Refresh
3642            end
3643            else do
3644                CALL VRMessage 'Main', NLVGetMessage( 71 ) , NLVGetMessage( 89 )||" "||mountpoint , 'E'
3645            end
3646        end
3647    end
3648return
3649
3650/*:VRX         Menu_Selected_Retry_Click
3651*/
3652Menu_Selected_Retry_Click: PROCEDURE EXPOSE settings. options. icons. vfs. fs. advanced. cd. samba. mtype.
3653
3654    ok = VRMethod( "CN_CONDET", "GetRecordList", "SourceOrSelected", "srcrec." )
3655    if srcrec.0 = 0 then return
3656
3657    srcrec = srcrec.1
3658
3659    p_mpoint    = VRMethod("CN_CONDET", "GetFieldData", srcrec, CD.MpointFH)
3660
3661    p_workgroup = VRMethod("CN_CONDET", "GetFieldData", srcrec, cd.workgrpFH  )
3662    p_server    = VRMethod("CN_CONDET", "GetFieldData", srcrec, CD.ServerFH)
3663    p_share     = VRMethod("CN_CONDET", "GetFieldData", srcrec, CD.ShareFH)
3664    p_user      = VRMethod("CN_CONDET", "GetFieldData", srcrec, CD.UserFH)
3665    p_password  = x2c(VRMethod("CN_CONDET", "GetFieldData", srcrec, CD.SpasswordFH))
3666
3667    ShareLevel = 1
3668    if p_share     = "" then ShareLevel = 2
3669    if p_server    = "" then ShareLevel = 3
3670    if p_workgroup = "" then ShareLevel = 4
3671
3672    ok = VRSet("CB_MOUNT", "Selected", Sharelevel )
3673    ok = VRset("CB_MOUNT", "Value", mtype.sharelevel)
3674
3675    call _UpdateObject "EF_SERVER", p_server
3676    ok = VRset("EF_SHARE"  ,  "Value", p_share)
3677    ok = VRset("EF_NETWORK",  "Value", p_workgroup)
3678    ok = VRset("EF_USER"   ,  "Value", p_user)
3679    ok = VRset("EF_PASSWORD", "Value", p_password)
3680
3681    parse var p_mpoint p_drv '\' p_dir
3682
3683    p_dir = strip(p_dir,'T','\')
3684
3685    ok = VRset("CB_DRIVES"      ,  "Value", p_drv)
3686    ok = VRset("EF_DIRECTORY"   ,  "Value", p_dir)
3687
3688    CALL PB_MOUNT_Click
3689
3690/*  if VRMethod( "CN_CONDET", "ValidateRecord", srcRec) = 1 then do
3691        if VRMethod("CN_CONDET", "GetRecordAttr", srcRec, "Icon") = icons.!passive then ok = VRMethod( "CN_CONDET", "RemoveRecord", srcRec)
3692    end */
3693return
3694
3695/*:VRX         Menu_Selected_TimeSync_Click
3696*/
3697Menu_Selected_TimeSync_Click:
3698    if options.!debug == 1 then say time()' Menu_Selected_TimeSync_Click started'
3699
3700    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "SourceOrSelected", "SelRH." )
3701    if SelRH.0 = 0 then do
3702        if options.!debug == 1 then say time()' Menu_Selected_TimeSync_Click aborted'
3703        return
3704    end
3705
3706    call _GetSMBObjectProperties SelRH.1
3707
3708    options.!timesrv = SMBObj.resname
3709    call _TimeSync
3710
3711    if options.!debug == 1 then say time()' Menu_Selected_TimeSync_Click done'
3712return
3713
3714/*:VRX         Menu_Selected_TreeView_Click
3715*/
3716Menu_Selected_TreeView_Click:
3717    ok = VRSet("CN_smbtree", "View", "IconTree")
3718return
3719
3720/*:VRX         Mount
3721*/
3722Mount: PROCEDURE EXPOSE settings. options. icons. vfs. fs. advanced. cd. samba.
3723    if options.!debug == 1 then say time()' Mount procedure started'
3724    /* Set mouse pointer to wait - this operation might take a few seconds */
3725    call VRSet VRWindow(), 'Pointer', 'Wait'
3726
3727/*  Disabled, because we merge profile now - in earlier revisions
3728    we replaced it but only for preexisting drives - this made only
3729    sense as long as we were unable to detect double connections -
3730    this could be made an option!
3731
3732    IF options.!autoload then do
3733        CALL _Dynamic "ok = "fs.!prefix"RxDetach('"vfs.!drive"')"
3734        if options.!debug == 1 then say time()' '||'Autoload Detach "'vfs.!drive'" =' ok
3735    end */
3736
3737    /* Attach the virtual drive - only if drive is not already attached */
3738    if pos(vfs.!drive,MyFreeDriveMap("C:","FREE")) > 0 then do
3739        CALL _Dynamic "ok = "fs.!prefix"RxAttach('"vfs.!drive"')"
3740
3741        if options.!debug == 1 then say time()' '||'Attach "'vfs.!drive'" =' ok
3742    end
3743
3744    /* Create the mount point and store whether it was created or already existed */
3745    CALL _Dynamic "CreateMP = "fs.!prefix"RxCreateMountPoint('"vfs.!mountpoint"')"
3746
3747    if options.!debug == 1 then say time()' '||'Create "'vfs.!mountpoint'" = 'CreateMP
3748
3749
3750    /* Build the resource parameter string */
3751    src = ''
3752    IF options.!workgroup  \= '' THEN src = src';WORKGROUP='options.!workgroup
3753    IF options.!server     \= '' THEN src = src';SERVER='options.!server
3754    IF options.!share      \= '' THEN src = src';SHARE='options.!share
3755    IF options.!user       \= '' THEN src = src';USER='options.!user
3756    IF options.!password   \= '' THEN src = src';PASSWORD='options.!password
3757    IF options.!spassword  \= '' THEN src = src';SPASSWORD='options.!spassword
3758    IF options.!master     \= '' THEN src = src';MASTER='options.!master
3759    IF options.!mastertype \= '' THEN src = src';MASTERTYPE='options.!mastertype
3760/*  IF options.!memlen     \= '' THEN src = src';MEMLEN='options.!memlen
3761    IF options.!logfile    \= '' THEN src = src';LOGFILE='options.!logfile
3762    IF options.!loglevel   \= '' THEN src = src';LOGLEVEL='options.!loglevel */
3763    IF options.!cachetimeout  \= '' THEN src = src';CTO='options.!cachetimeout
3764    IF options.!cachelistings \= '' THEN src = src';CLD='options.!cachelistings
3765    IF options.!easupport  \= '' THEN src = src';EASUPPORT='options.!easupport
3766
3767    IF options.!readonly = 1 then rwFlag = 'R'; else rwFlag = 'W'
3768
3769    parse var vfs.!mountpoint mpoint ';' .
3770    mpoint = strip(mpoint,'T','\')||'\'
3771
3772    if options.!master   = "" then options.!master   = "WORKGROUP"
3773    if options.!mtype    = "" then options.!mtype    = "1"
3774    if options.!loglevel = "" then options.!loglevel = "0"
3775    if options.!memlen   = "" then options.!memlen   = "2"
3776    if options.!cachetimeout = "" then options.!cachetimeout = "10"
3777    if options.!cachelistings = "" then options.!cachelistings = "32"
3778    if options.!easupport= "" | options.!easupport= " " then options.!easupport = strip(options.!easupport)
3779    if options.!password <> "" & options.!spassword = "" then do
3780        options.!spassword = c2x(options.!password)
3781        options.!password = ""
3782    end
3783
3784    hashstr = mpoint' 'translate(options.!workgroup)' 'translate(options.!server)' 'translate(options.!share)' 'options.!user' 'options.!spassword' 'options.!easupport' 'rwFlag
3785
3786    md5 = rexx_md5(hashstr)
3787
3788    CALL VRMethod "CN_CONDET", 'GetRecordList', 'All', 'records.'
3789    DO i = 1 TO records.0
3790        hash = VRMethod("CN_CONDET","GetFieldData", records.i, cd.hashfh)
3791
3792        if options.!debug == 1 then say VRMethod("CN_CONDET","GetFieldData", records.i, CD.mpointFH)'->'hash
3793        if options.!debug == 1 then say mpoint'->'md5
3794
3795        if hash = md5 then do
3796            If VRMethod("CN_CONDET","GetFieldData", records.i, cd.statusfh) = icons.!active then do /* Same hash, status active */
3797                say "Double connection detected!!"
3798                if options.!spassword <> "" then upw = ":********"
3799                else upw = ""
3800                buttons.0 = 2
3801                buttons.1 = NLVGetMessage(9)
3802                buttons.2 = NLVGetMessage(3)
3803                Answer = VRMessage('Main',NLVGetMessage(64) , NLVGetMessage( 36,options.!user||upw'@'options.!workgroup'\\'options.!server'\'options.!share, vfs.!mountpoint ), 'W','buttons.')
3804                if Answer = 2 then do
3805                    call VRSet VRWindow(), 'Pointer', '<default>'
3806                    say "Double connection - do not mount!!"
3807                    return
3808                end
3809            end
3810            else do /* Same hash, status passive - we have to remove it */
3811                ok = VRMethod("CN_CONDET", "RemoveRecord", records.i )
3812            end
3813        end
3814    end
3815
3816    cd.lastrh = ""
3817    ok = ParseResourceData(vfs.!mountpoint,'SMBFS SMBFS64 \\'options.!workgroup':'options.!server'\'options.!share'@'options.!user||src' 'rwFlag)
3818
3819    /* Now mount the resource */
3820    CALL _Dynamic "ok = "fs.!prefix"RxMount('SMBFS','"vfs.!mountpoint"', '"src"', '"rwFlag"')"
3821
3822    if options.!debug == 1 then say time()' '||'Mount "'vfs.!mountpoint'" =' ok
3823    if ok <> 0 then do
3824        if options.!password <> "" then upw = ":********"
3825            else upw = ""
3826        buttons.0 = 2
3827        buttons.1 = NLVGetMessage(2)
3828        buttons.2 = NLVGetMessage(37)
3829        Answer = VRMessage('Main', SysGetMessage(ok), NLVGetMessage( 36,  options.!user||upw'@'options.!workgroup'\\'options.!server'\'options.!share, vfs.!mountpoint ), 'W','buttons.')
3830        if Answer = 2 then do /* Show explanation */
3831            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')
3832        end
3833        if cd.lastrh <> '' then do
3834            ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.statusfh, icons.!passive) /* Passive Connection icon */
3835            ok = VRMethod("CN_CONDET", "SetRecordAttr", cd.lastrh, "Icon", icons.!passive) /* Passive Connection icon */
3836            ok = VRMethod("CN_CONDET", "SetFieldData",  cd.lastrh, cd.passwordfh, '') /* remove pain text password */
3837        end
3838
3839        /* In case the mountpoint was created for this failed operation, it is (optionally) removed again */
3840        if CreateMP = 0 & advanced.!alwaysmp <> 1 then do
3841            CALL _Dynamic "ok = "fs.!prefix"RxDeleteMountPoint('"vfs.!mountpoint"')"
3842            if options.!debug == 1 then say time()' '||'Remove "'vfs.!mountpoint'" = 'ok
3843        end
3844    end
3845    else do
3846        if options.!storecreds = 1 then do
3847            ok = VRSet("EF_User",    "Value",options.!user)
3848            ok = VRSet("EF_Password","Value",x2c(options.!spassword))
3849        end
3850    end
3851    drop CreateMP /* not required anymore */
3852
3853/*  Obsolete - the IOCtl will not be implemented this way in the plugin
3854    The REXX function is present, but is has no counterpart in the plugin
3855    ok = EvfsRxIoctl( 100 , vfs.!mountpoint, outstring)
3856    if options.!debug == 1 then say time()' '||'RxIoctl "'vfs.!mountpoint'" = 'ok', 'outstring
3857 */
3858    /* Set mouse pointer to default again */
3859    call VRSet VRWindow(), 'Pointer', '<default>'
3860    if options.!debug == 1 then say time()' Mount procedure done'
3861RETURN ok
3862
3863/*:VRX         MyFreeDriveMap
3864*/
3865MyFreeDriveMap: procedure expose options. icons. fs. samba.
3866    if options.!debug == 1 then say time()' MyFreeDriveMap(proc) started'
3867    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:"
3868/*  if options.!debug == 1 then say time()' '||"SysDriveMap(USED) started" */
3869    useddrives= SysDriveMap("C:","USED")
3870/*  if options.!debug == 1 then say time()' '||"SysDriveMap(USED) done" */
3871
3872    Alldr = words(alldrives)
3873    FreeDriveMap = ""
3874    do I = 1 to AllDr
3875        if word(alldrives,1) = word(useddrives,1) then do
3876            Useddrives = subword(useddrives,2)
3877            Alldrives = subword(Alldrives,2)
3878        end
3879        else do
3880            FreeDriveMap = FreeDriveMap||word(alldrives,1)||' '
3881            Alldrives = subword(Alldrives,2)
3882        end
3883    end
3884    if options.!debug == 1 then say time()' MyFreeDriveMap(proc) done, result "'FreeDriveMap'"'
3885return FreeDriveMap
3886/*:VRX         NoEVFSCALL
3887*/
3888NoEVFSCALL:
3889    CALL VRMessage 'Main', NLVGetMessage( 100 ), NLVGetMessage( 5 ), 'E'
3890    signal Halt
3891RETURN
3892
3893/*:VRX         ParseResourceData
3894*/
3895ParseResourceData: PROCEDURE EXPOSE userdata options. icons. advanced. fs. cd. samba.
3896    PARSE ARG userdata, resource
3897    if options.!debug == 1 then say time()' ParseResourceData started'
3898    if options.!debug == 1 then say '  receiving "'userdata'" "'resource'" length ('length(resource)')'
3899
3900/* WARNING! resource has a maximal length of 255 and is truncated otherwise */
3901
3902/*  PARSE VAR resource . ';WORKGROUP='p_workgroup';SERVER='p_server';SHARE='p_share';' . */
3903
3904    if left(word(resource,1),5) <> "SMBFS" then do
3905        /* Support for other filesystems would come here! */
3906        userData = "UNKNOWN"
3907    end
3908    else do
3909        cd.lastrh = VRMethod("CN_CONDET","AddRecord")
3910        PARSE VAR userdata p_mpoint ';' p_mpidx ';' .
3911
3912        p_mpoint = strip(p_mpoint,'T','\')||'\'
3913        p_rw     = word(resource, words(resource))
3914
3915        /* Workaround for truncated resource string */
3916        if length(p_rw) > 1 then do
3917            /* The resource string must have been truncated
3918               p_rw is already wrong and
3919               p_easupport will most likely be also wrong (look below for workaround!) */
3920            p_rw ="W" /* this is guessed only!!! */
3921            if options.!debug == 1 then say '  WARNING! Detected truncated resource string - shorten workgroup name, server name, share name until this message goes away!'
3922        end
3923        /* this should be done unconditionally if the resource string is never truncated */
3924        else resource  = left(resource,length(resource)-length(p_rw))
3925
3926        call ParseResParmString
3927
3928        if p_master   = "" then p_master   = "WORKGROUP"
3929        if p_mtype    = "" then p_mtype    = "1"
3930        if p_loglevel = "" then p_loglevel = "0"
3931        if p_memlen   = "" then p_memlen   = "2"
3932
3933        /* Also works around for a truncated resource string! */
3934        if p_easupport= "" | p_easupport= " " then p_easupport = strip(options.!easupport)
3935
3936        if p_password <> "" & p_spassword = "" then do
3937            p_spassword = c2x(p_password)
3938            p_password = ""
3939        end
3940
3941        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)
3942        ok = VRMethod("CN_CONDET", "SetFieldData", cd.lastrh, cd.passwordfh, p_password, cd.spasswordfh, p_spassword, cd.masterfh, p_master, cd.mtypefh, p_mtype)
3943        ok = VRMethod("CN_CONDET", "SetFieldData", cd.lastrh, cd.ctoFH, p_cachetimeout, cd.cldFH, p_cachelistings)
3944        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)
3945        ok = VRMethod("CN_CONDET", "SetFieldData", cd.lastrh, cd.statusfh, icons.!active) /* Active */
3946        ok = VRMethod("CN_CONDET", "SetRecordAttr", cd.lastrh, "Icon", icons.!active) /* Active */
3947
3948        hashstr = p_mpoint' 'translate(p_workgroup)' 'translate(p_server)' 'translate(p_share)' 'p_user' 'p_spassword' 'p_easupport' 'p_rw
3949
3950        md5 = rexx_md5(hashstr)
3951
3952        ok = VRMethod("CN_CONDET", "SetFieldData", cd.lastrh, cd.hashfh,md5)
3953
3954        SELECT
3955            WHEN p_share  == '' & p_server \= '' THEN DO   /* all shares on server */
3956                IF p_workgroup == '' THEN
3957                    userdata = userdata';\\'p_server'\*'
3958                ELSE
3959                    userdata = userdata';'p_workgroup':\\'p_server'\*'
3960            END
3961            WHEN p_server == '' & p_workgroup \= '' THEN    /* all servers in workgroup */
3962                userdata = userdata';'p_workgroup':\\*'
3963            WHEN p_server == '' & p_workgroup == '' THEN    /* all workgroups */
3964                userdata = userdata';*:\\*'
3965            OTHERWISE DO
3966                IF p_workgroup == '' THEN
3967                    userdata = userdata';\\'p_server'\'p_share
3968                ELSE
3969                    userdata = userdata';'p_workgroup':\\'p_server'\'p_share
3970            END
3971        END
3972    end
3973
3974    if options.!debug == 1 then say '  returning "'userdata'"'
3975    if options.!debug == 1 then say time()' ParseResourceData done'
3976RETURN userdata
3977
3978/*:VRX         ParseResParmString
3979*/
3980ParseResParmString:
3981    PARSE VAR resource . ';WORKGROUP=' p_workgroup ';' .
3982    PARSE VAR resource . ';SERVER=' p_server ';' .
3983    PARSE VAR resource . ';SHARE=' p_share ';' .
3984    PARSE VAR resource . ';USER=' p_user ';' .
3985    PARSE VAR resource . ';PASSWORD=' p_password ';' .
3986    PARSE VAR resource . ';SPASSWORD=' p_spassword ';' .
3987    PARSE VAR resource . ';MASTER=' p_master ';' .
3988    PARSE VAR resource . ';MASTERTYPE=' p_mtype ';' .
3989    PARSE VAR resource . ';MEMLEN=' p_memlen ';' .
3990    PARSE VAR resource . ';LOGFILE=' p_logfile ';' .
3991    PARSE VAR resource . ';LOGLEVEL=' p_loglevel ';' .
3992    PARSE VAR resource . ';CTO=' p_cachetimeout ';' .
3993    PARSE VAR resource . ';CLD=' p_cachelistings ';' .
3994    PARSE VAR resource . ';EASUPPORT=' p_easupport ' '
3995return
3996/*:VRX         PB_ABOUT_CLOSE_Click
3997*/
3998PB_ABOUT_CLOSE_Click:
3999    CALL SW_ABOUT_Close
4000return
4001
4002/*:VRX         PB_ABOUT_COPY_Click
4003*/
4004PB_ABOUT_COPY_Click:
4005
4006    if VRGet("CB_TRAC","set") then DO
4007        remainstr = AboutStr
4008        AboutStr = ''
4009        DO WHILE remainstr <> ''
4010            PARSE VAR remainstr _part '0d0a'x remainstr
4011            AboutStr = AboutStr || _part ||'[[BR]]'||'0d0a'x
4012        END
4013    END
4014    ok = VRMethod( "Application", "PutClipboard", AboutStr )
4015    if options.!debug == 1 then call beep 880*2,10
4016    CALL SW_ABOUT_Close
4017return
4018
4019/*:VRX         PB_ADVANCED_APPLY_Click
4020*/
4021PB_ADVANCED_APPLY_Click:
4022    advanced.!easupport     = VRGet( "CB_EAS",             "Set"   )
4023    advanced.!readonly      = VRGet( "CB_READONLY",        "Set"   )
4024    advanced.!alwaysmp      = VRGet( "CB_ALWAYSMP",        "Set"   )
4025    advanced.!cachetimeout  = VRGet( "SPIN_CACHETIMEOUT",  "Value" )
4026    advanced.!cachelistings = VRGet( "SPIN_CACHELISTINGS", "Value" )
4027
4028    /* Obsolete */
4029    advanced.!memlen        = VRGet( "SPB_MEMLEN",         "Value" )
4030return
4031
4032/*:VRX         PB_ADVANCED_HELP_Click
4033*/
4034PB_ADVANCED_HELP_Click:
4035    CALL VRMethod 'SW_ADVANCED', 'InvokeHelp'
4036return
4037
4038/*:VRX         PB_ADVANCED_UNDO_Click
4039*/
4040PB_ADVANCED_UNDO_Click:
4041    CALL SW_ADVANCED_Init_Content
4042RETURN
4043
4044/*:VRX         PB_ClearCred_Click
4045*/
4046PB_ClearCred_Click:
4047    call Menu_File_ucCred_Reset_Click
4048return
4049
4050/*:VRX         PB_CONDET_HELP_Click
4051*/
4052PB_CONDET_HELP_Click:
4053    CALL VRMethod 'GB_CONDET', 'InvokeHelp'
4054return
4055
4056/*:VRX         PB_CONDET_LOAD_Click
4057*/
4058PB_CONDET_LOAD_Click:
4059    if options.!debug == 1 then say time()' '||"PB_CONDET_LOAD_Click started"
4060    call Menu_File_Load_Click
4061    if options.!debug == 1 then say time()' '||"PB_CONDET_LOAD_Click done"
4062RETURN
4063
4064/*:VRX         PB_CONDET_SAVE_Click
4065*/
4066PB_CONDET_SAVE_Click: PROCEDURE EXPOSE settings. options. icons. Profile fs.  cd. advanced. samba.
4067    if options.!debug == 1 then say time()' '||"PB_CONDET_SAVE_Click started"
4068
4069    if options.!autostart == 0 THEN filename = VRFileDialog('Main', NLVGetMessage( 50 ), 'S', '*.'fs.!profileext)
4070    ELSE filename = Profile
4071
4072    IF filename == '' THEN RETURN
4073
4074    IF STREAM( filename, 'C', 'QUERY EXISTS') \= '' THEN DO
4075        btns.0 = 2
4076        btns.1 = NLVGetMessage( 6 )
4077        if btns.1 = "" then btns.1 = '[Yes]'
4078        btns.2 = NLVGetMessage( 7 )
4079        if btns.2 = "" then btns.2 = '[No]'
4080        Title = NLVGetMessage( 53 )
4081        if Title = "" then Title = "[File exists]"
4082        Text = NLVGetMessage( 54, filename )
4083        if Text = "" then Text = "[File "filename" exists? Overwrite?]"
4084
4085        confirm = VRMessage('Main', Text, Title, 'W', 'btns.', 1, 2 )
4086        IF confirm \= 1 THEN RETURN
4087        CALL VRChAttr filename,, 'HSR'
4088        CALL VRDeleteFile filename
4089    END
4090
4091    CALL VRMethod "CN_CONDET", 'GetRecordList', 'All', 'records.'
4092    DO i = 1 TO records.0
4093        resource = ""
4094        resource = resource||VRMethod("CN_CONDET","GetFieldData", records.i, cd.mpointfh)||" "
4095        resource = resource||'\\'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.workgrpFH  )
4096        resource = resource||':'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.serverfh)
4097        resource = resource||'\'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.sharefh)
4098        resource = resource||'@'||VRMethod("CN_CONDET","GetFieldData", records.i, cd.userfh)
4099        resource = resource||';WORKGROUP='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.workgrpFH  )
4100        resource = resource||';SERVER='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.serverfh)
4101        resource = resource||';SHARE='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.sharefh)
4102        resource = resource||';USER='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.userfh)
4103        resource = resource||';PASSWORD='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.passwordfh)
4104        resource = resource||';SPASSWORD='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.spasswordfh)
4105        resource = resource||';MASTER='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.masterfh)
4106        resource = resource||';MASTERTYPE='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.mtypefh)
4107        resource = resource||';CTO='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.ctoFH)
4108        resource = resource||';CLD='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.cldFH)
4109/*      resource = resource||';MEMLEN='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.memlenfh)
4110        resource = resource||';LOGFILE='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.logfilefh)
4111        resource = resource||';LOGLEVEL='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.loglevelfh) */
4112        resource = resource||';EASUPPORT='||VRMethod("CN_CONDET","GetFieldData", records.i, cd.easupportfh)
4113        resource = resource||' '||VRMethod("CN_CONDET","GetFieldData", records.i, cd.rwfh)
4114        call lineout filename, resource
4115    END
4116    CALL STREAM filename, 'C', 'CLOSE'
4117
4118    if options.!autostart == 0 THEN do
4119        Title = NLVGetMessage( 51 )
4120        if Title = "" then Title = "[Profile saved]"
4121        Text = NLVGetMessage( 52, filename )
4122        if Text = "" then Text = "[Profile saved to "filename"!]"
4123        CALL VRMessage 'Main', Text , Title, 'I'
4124    end
4125
4126    if options.!debug == 1 then say time()' '||"PB_CONDET_SAVE_Click done"
4127RETURN
4128
4129/*:VRX         PB_DETACH_Click
4130*/
4131PB_DETACH_Click: PROCEDURE EXPOSE settings. options. icons. fs. cd. samba.
4132    if options.!debug == 1 then say time()' '||"PB_DETACH_Click started"
4133    CALL VRMethod "CN_CURRENT", 'GetRecordList', 'Selected', 'select.'
4134    IF select.0 < 1 THEN RETURN
4135
4136    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', select.1, 'UserData')
4137    PARSE VAR userdata mountpoint ';' mounts ';' .
4138    drive = STRIP( mountpoint, 'T', '\')
4139
4140    btns.0 = 2
4141    btns.1 = NLVGetMessage( 6 )
4142    btns.2 = NLVGetMessage( 7 )
4143    confirm = VRMessage('Main', NLVGetMessage( 58, drive ), NLVGetMessage( 8 ), 'Q', 'btns.', 1, 2 )
4144    IF confirm \= 1 THEN RETURN
4145
4146    /* TODO: ??  Unmount & delete all child mountpoints? - Do we need this? */
4147    /* FIXME: This is potentially dangerous on Netdrive - what happens with unknown mount types? */
4148    /* FIXME: Unclear under which circumstances we have an alpha value here (which crahed EVFSGUI) */
4149    if datatype(mounts) = 'NUM' then do
4150        /* Unmount any resources */
4151        DO i = 1 TO mounts
4152            CALL _Dynamic "ok = "fs.!prefix"RxUnmount('"mountpoint"', "i-1")"
4153        END
4154    end
4155    else if options.!debug == 1 then say ' '||"mounts = "mounts
4156
4157    CALL _Dynamic "ok = "fs.!prefix"RxDetach('"drive"')"
4158
4159    CALL Refresh
4160    if options.!debug == 1 then say time()' '||"PB_DETACH_Click done"
4161RETURN
4162
4163/*:VRX         PB_DIALOG_HELP_Click
4164*/
4165PB_DIALOG_HELP_Click:
4166    CALL VRMethod 'GB_DIALOG', 'InvokeHelp'
4167return
4168
4169/*:VRX         PB_EDIT_CANCEL_Click
4170*/
4171PB_EDIT_CANCEL_Click:
4172    options.!editmode = 0
4173    CALL VRSet "PB_UNMOUNT","Enabled", 1
4174    CALL VRSet "GB_CURRENT", "ENABLED", 1
4175    ok = VRSet("PB_EDIT_CANCEL","Visible", 0)
4176    ok = VRMethod( "TDL_1", "SetTabText", 1, " "NLVGetMessage(13)" " )
4177/*  CALL NLVSetText 'DT_DIALOG',        "Caption", 13 */
4178RETURN 0
4179
4180/*:VRX         PB_INFO_OK_Click
4181*/
4182PB_INFO_OK_Click:
4183    call SW_INFO_Close
4184RETURN
4185
4186/*:VRX         PB_LOGIN_CANCEL_Click
4187*/
4188PB_LOGIN_CANCEL_Click:
4189    credentials.!entered = 0
4190    call SW_LOGIN_Close
4191RETURN
4192
4193/*:VRX         PB_LOGIN_OK_Click
4194*/
4195PB_LOGIN_OK_Click:
4196    ok = VRSet("EF_USER","Value",VRGet("EF_USER1","Value"))
4197    ok = VRSet("EF_PASSWORD","Value",VRGet("EF_PASSWORD1","Value"))
4198    options.!storecreds = VRGet("CB_STORECREDS1","Set")
4199    credentials.!entered = 1
4200
4201    if p_server <> "" then do
4202        ok = _rpcqueryuser(p_server, VRGet("EF_USER1","Value"), VRGet("EF_PASSWORD1","Value"), VRGet("EF_USER1","Value"))
4203
4204        if word(ok,1) = "1" then do
4205            ok = VRSet("DT_STATUSBAR","Caption", NLVGetMessage(107, rpc.queryuser.FULL_NAME))
4206            say 'rpc.queryuser.DIR_DRIVE    = "'rpc.queryuser.DIR_DRIVE'"'
4207            say 'rpc.queryuser.LOGON_SCRIPT = "'rpc.queryuser.LOGON_SCRIPT'"'
4208        end
4209        else do
4210            CALL VRMessage 'Main', VRGet("EF_USER1","Value")" \\"p_server": "rpc.queryuser.LOGONSTATUS, NLVGetMessage(5), "E"
4211        end
4212    end
4213
4214    call SW_LOGIN_Close
4215RETURN
4216
4217/*:VRX         PB_MOUNT_Click
4218*/
4219PB_MOUNT_Click:
4220    if options.!debug == 1 then say time()' '||"PB_MOUNT_Click started"
4221    ok = VRSet("TM_RefreshCurrentDisplay","Enabled", 0)
4222    say "  network = "network
4223    if options.!editmode = 1 then do
4224        CALL PB_UNMOUNT_Click
4225        options.!editmode = 0
4226        ok = VRMethod("TDL_1","SetTabText", " "strip(NLVGetMessage(13))" ")
4227/*      CALL NLVSetText 'DT_DIALOG',        "Caption", 13 */
4228
4229        CALL VRSet "PB_UNMOUNT","Enabled", 1
4230        CALL VRSet "GB_CURRENT", "ENABLED", 1
4231    end
4232
4233    options.!workgroup  = ''
4234    options.!server     = ''
4235    options.!share      = ''
4236    options.!user       = ''
4237    options.!password   = ''
4238    options.!master     = ''
4239    options.!mastertype = ''
4240    options.!memlen     = advanced.!memlen
4241    options.!easupport  = advanced.!easupport
4242    options.!readonly   = advanced.!readonly
4243    options.!loglevel   = advanced.!loglevel
4244    options.!logfile    = advanced.!logfile
4245    options.!cachetimeout  = advanced.!cachetimeout
4246    options.!cachelistings = advanced.!cachelistings
4247
4248    vfs.!drive      = ''
4249    vfs.!mountpoint = ''
4250
4251    stype    = VRGet( "CB_MOUNT",            "Selected" )
4252    share    = STRIP( VRGet( "EF_SHARE",     "Value" ))
4253    server   = STRIP( VRGet( "EF_SERVER",    "Value" ))
4254    network  = STRIP( VRGet( "EF_NETWORK",   "Value" ))
4255    mtype    = VRGet( "CHK_MTYPE",           "Set" )
4256    userid   = STRIP( VRGet( "EF_USER",      "Value" ))
4257    password = STRIP( VRGet( "EF_PASSWORD",  "Value" ))
4258    mdrive   = VRGet( "CB_DRIVES",           "SelectedText" )
4259    if mdrive = "" then mdrive = VRGet( "CB_DRIVES", "Value" )
4260    mpath    = STRIP( VRGet( "EF_DIRECTORY", "Value" ))
4261
4262    IF ( stype < 1 | stype > 4 ) THEN stype = 1
4263
4264    /* The required/optional/ignored parameters depend on the type of mount
4265     * requested.  (Note, however, that the user, password, easupport and
4266     * memlen parameters are always optional.)
4267     */
4268    SELECT
4269        /* Scenario 1: Mount a single share.
4270         *             Required: share, server
4271         *             Optional: workgroup
4272         *             Unused:   master, mastertype
4273         */
4274        WHEN stype = 1 THEN DO
4275            IF server == '' | share == '' THEN DO
4276                /* error */
4277                RETURN 1
4278            END
4279            options.!server    = server
4280            options.!share     = share
4281            options.!workgroup = network
4282        END
4283
4284        /* Scenario 2: Mount all shares on a server.
4285         *             Required: server
4286         *             Optional: workgroup
4287         *             Unused:   share, master, mastertype
4288         */
4289        WHEN stype = 2 THEN DO
4290            IF server == '' THEN DO
4291                /* error */
4292                RETURN 1
4293            END
4294            options.!server = server
4295            options.!workgroup = network
4296        END
4297
4298        /* Scenario 3: Mount all servers in a workgroup.
4299         *             Required: workgroup
4300         *             Optional: -
4301         *             Unused:   share, server, master, mastertype
4302         */
4303        WHEN stype = 3 THEN DO
4304            IF workgroup == '' THEN DO
4305                /* error */
4306                RETURN 1
4307            END
4308            options.!workgroup  = network
4309        END
4310
4311        /* Scenario 4: Mount all workgroups known to a master.
4312         *             Required: master, mastertype
4313         *             Optional: -
4314         *             Unused:   share, server, workgroup
4315         */
4316        WHEN stype = 4 THEN DO
4317            IF master == '' | mastertype == '' THEN DO
4318                /* error */
4319                RETURN 1
4320            END
4321            options.!master     = network
4322            options.!mastertype = mtype
4323        END
4324    END
4325
4326    options.!user     = userid
4327    options.!password = password
4328
4329    vfs.!drive      = mdrive
4330    vfs.!mountpoint = mdrive'\'mpath
4331
4332    CALL Mount
4333    CALL Refresh
4334    ok = VRSet("TM_RefreshCurrentDisplay","Enabled", 1)
4335    if options.!debug == 1 then say time()' '||"PB_MOUNT_Click done"
4336RETURN 0
4337
4338/*:VRX         PB_NEWMOUNTPOINTCANCEL_Click
4339*/
4340PB_NEWMOUNTPOINTCANCEL_Click:
4341    ok = VRSet("CB_DRIVES","Value","")
4342    ok = VRSet("EF_DIRECTORY","Value","")
4343    call SW_MOUNTPOINT_Close
4344RETURN 0
4345
4346/*:VRX         PB_NEWMOUNTPOINTOK_Click
4347*/
4348PB_NEWMOUNTPOINTOK_Click:
4349    ok = VRSet("CB_DRIVES","Value",VRGet("CB_DRIVES1","Value"))
4350    ok = VRSet("EF_DIRECTORY","Value",VRGet("EF_DIRECTORY1","Value"))
4351
4352    advanced.!readonly  = VRGet("CB_READONLY1","Set")
4353    advanced.!easupport = VRGet("CB_EAS1","Set")
4354    advanced.!alwaysmp  = VRGet("CB_ALWAYSMP1","Set")
4355    advanced.!cachetimeout  = VRGet( "SPIN_CACHETIMEOUT1",  "Value" )
4356    advanced.!cachelistings = VRGet( "SPIN_CACHELISTINGS1", "Value" )
4357
4358    call SW_MOUNTPOINT_Close
4359RETURN
4360
4361/*:VRX         PB_NEWPORTCANCEL_Click
4362*/
4363PB_NEWPORTCANCEL_Click:
4364/*  ok = VRSet("CB_DRIVES","Value","")
4365    ok = VRSet("EF_DIRECTORY","Value","")
4366    call SW_MOUNTPOINT_Close */
4367RETURN 0
4368
4369/*:VRX         PB_NEWPORTCONNECT_Click
4370*/
4371PB_NEWPORTCONNECT_Click:
4372/*  ok = VRSet("CB_DRIVES","Value",VRGet("CB_DRIVES1","Value"))
4373    ok = VRSet("EF_DIRECTORY","Value",VRGet("EF_DIRECTORY1","Value"))
4374
4375    advanced.!readonly  = VRGet("CB_READONLY1","Set")
4376    advanced.!easupport = VRGet("CB_EAS1","Set")
4377    advanced.!alwaysmp  = VRGet("CB_ALWAYSMP1","Set")
4378    advanced.!cachetimeout  = VRGet( "SPIN_CACHETIMEOUT1",  "Value" )
4379    advanced.!cachelistings = VRGet( "SPIN_CACHELISTINGS1", "Value" )
4380
4381    call SW_MOUNTPOINT_Close */
4382RETURN
4383
4384/*:VRX         PB_PROGRESS_ABORT_Click
4385*/
4386PB_PROGRESS_ABORT_Click:
4387    options.!delay = 0
4388    options.!autoload = 0
4389    options.!autoclose = 0
4390    call SW_PROGRESS_Close
4391return
4392
4393/*:VRX         PB_SETTINGS_APPLY_Click
4394*/
4395PB_SETTINGS_APPLY_Click:
4396    advanced.!loglevel    = VRGet("SPIN_LOG_LEVEL", "Value" )
4397    advanced.!logfile     = VRGet("EF_LOGFILE",    "Value" )
4398    advanced.!browseauth  = VRGet("CB_BROWSEAUTH", "Set" )
4399    advanced.!browseimme  = VRGet("CB_BROWSEIMME", "Set" )
4400    advanced.!special     = VRGet("CB_SPECIAL",    "Set" )
4401    advanced.!savepassive = VRGet("CB_SAVEPASSIVE","Set" )
4402    advanced.!lmhosts     = VRGet("CB_LMHOSTS",    "Set" )
4403    advanced.!broadcast   = VRGet("CB_BROADCAST",  "Set" )
4404    advanced.!miniicons   = VRGet("CB_MINIICONS",  "Set" )
4405
4406    /* Note: CB_LOGGING has its own event tied to the click */
4407    options.!storecreds   = VRGet("CB_STORECREDS", "Set" )
4408    options.!debug        = VRGet("CB_DEBUG",      "Set" )
4409
4410    if options.!debug == 1 then do /* Turn on additional columns in connection details view */
4411        ok = VRRedirectStdio("ON")
4412        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.mpidxfh ,       "Visible", 1)
4413        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.passwordfh ,    "Visible", 1)
4414        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.spasswordfh ,   "Visible", 1)
4415        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.masterFH ,      "Visible", 1)
4416        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.mtypeFH ,       "Visible", 1)
4417        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.memlenfh ,      "Visible", 1)
4418        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.logfilefh ,     "Visible", 1)
4419        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.loglevelfh ,    "Visible", 1)
4420        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.hashfh ,        "Visible", 1)
4421    end
4422    else do /* Turn on additional columns in connection details view */
4423        ok = VRRedirectStdio("OFF")
4424        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.mpidxfh ,       "Visible", 0)
4425        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.passwordfh ,    "Visible", 0)
4426        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.spasswordfh ,   "Visible", 0)
4427        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.masterFH ,      "Visible", 0)
4428        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.mtypeFH ,       "Visible", 0)
4429        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.memlenfh ,      "Visible", 0)
4430        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.logfilefh ,     "Visible", 0)
4431        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.loglevelfh ,    "Visible", 0)
4432        ok = VRMethod("CN_CONDET", "SetFieldAttr", cd.hashfh ,        "Visible", 0)
4433    end
4434
4435    ok = VRset("CN_CURRENT", "MiniIcons", advanced.!miniicons)
4436    ok = VRset("CN_SMBTREE", "MiniIcons", advanced.!miniicons)
4437    ok = VRset("CN_CONDET",  "MiniIcons", advanced.!miniicons)
4438
4439    if advanced.!lmhosts = 1 then do
4440        call _LMHostsRead
4441        call _LMHostsUpdate
4442    end
4443    if advanced.!smbconfchanged = 1 then do
4444        name_resolve_order = VRGet("SPIN_NRO1","value")' 'VRGet("SPIN_NRO2","value")' 'VRGet("SPIN_NRO3","value")' 'VRGet("SPIN_NRO4","value")
4445        handle = IniOpen('global', samba.!smbconf)
4446        call IniSet 'name resolve order', name_resolve_order, handle
4447        /* FIXME: Throw an error in this case */
4448        if \_IsValidIPAddress(VRGet("EF_WINS_SERVER","Value")) then ok = VRSet("EF_WINS_SERVER","Value","")
4449        call IniSet 'wins server', VRGet("EF_WINS_SERVER","Value"), handle
4450        call IniSet 'log level', VRGet("SPIN_LOG_LEVEL","Value"), handle
4451        call IniSave handle
4452        call IniClose handle
4453        advanced.!smbconfchanged = 0
4454        ok = VRSet("PB_SETTINGS_UNDO","Enabled", 0)
4455    end
4456    if options.!storecreds = 0 then call Menu_File_ucCred_Reset_Click
4457return
4458
4459/*:VRX         PB_SETTINGS_HELP_Click
4460*/
4461PB_SETTINGS_HELP_Click:
4462    CALL VRMethod 'SW_SETTINGS', 'InvokeHelp'
4463return
4464
4465/*:VRX         PB_SETTINGS_UNDO_Click
4466*/
4467PB_SETTINGS_UNDO_Click:
4468    call SW_SETTINGS_Init_Content
4469return
4470
4471/*:VRX         PB_SMBCONF_APPLY_Click
4472*/
4473PB_SMBCONF_APPLY_Click:
4474    if advanced.!smbconfchanged = 1 then do
4475        client_NTLMv2_auth          = VRGet("CB_client_NTLMv2_auth","Set")
4476        client_lanman_auth          = VRGet("CB_client_lanman_auth","Set")
4477        client_plaintext_auth       = VRGet("CB_client_plaintext_auth","Set")
4478        client_use_spnego           = VRGet("CB_client_use_spnego","Set")
4479        client_use_spnego_principal = VRGet("CB_client_use_spnego_principal","Set")
4480        client_signing              = VRGet("SPIN_client_signing","Value")
4481        client_ipc_signing          = VRGet("SPIN_client_ipc_signing","Value")
4482
4483        if VRGet("SPIN_client_max_protocol","Enabled") = 1 then do
4484            client_max_protocol         = VRGet("SPIN_client_max_protocol","Value")
4485            client_min_protocol         = VRGet("SPIN_client_min_protocol","Value")
4486        end
4487
4488
4489        handle = IniOpen('global', samba.!smbconf)
4490        call IniSet 'client NTLMv2 auth',          YesNo(client_NTLMv2_auth), handle
4491        call IniSet 'client lanman auth',          YesNo(client_lanman_auth), handle
4492        call IniSet 'client plaintext auth',       YesNo(client_plaintext_auth), handle
4493        call IniSet 'client use spnego',           YesNo(client_use_spnego), handle
4494        call IniSet 'client use spnego principal', YesNo(client_use_spnego_principal), handle
4495        call IniSet 'client signing',              client_signing, handle
4496        call IniSet 'client ipc signing',          client_ipc_signing, handle
4497
4498        if VRGet("SPIN_client_max_protocol","Enabled") = 1 then do
4499            call IniSet 'client max protocol',         client_max_protocol, handle
4500            call IniSet 'client min protocol',         client_min_protocol, handle
4501        end
4502
4503        call IniSave handle
4504        call IniClose handle
4505        advanced.!smbconfchanged = 0
4506        ok = VRSet("PB_SMBCONF_UNDO","Enabled", 0)
4507    end
4508return
4509
4510/*:VRX         PB_SMBCONF_HELP_Click
4511*/
4512PB_SMBCONF_HELP_Click:
4513    CALL VRMethod 'SW_SETTINGS', 'InvokeHelp'
4514return
4515
4516/*:VRX         PB_SMBCONF_UNDO_Click
4517*/
4518PB_SMBCONF_UNDO_Click:
4519    call SW_SETTINGS_Init_Content
4520return
4521
4522/*:VRX         PB_SMBTREE_CONNECT_Click
4523*/
4524PB_SMBTREE_CONNECT_Click: PROCEDURE EXPOSE settings. options. icons. fs. advanced. cd. samba. mtype.
4525    if options.!debug == 1 then say time()' '||"PB_CONNECT_Click started"
4526
4527    ok = VRMethod( "CN_SMBTREE", "GetRecordList", "SourceOrSelected", "SelRH." )
4528
4529    if SelRH.0 = 0 then do
4530        if options.!debug == 1 then say time()' '||"PB_CONNECT_Click aborted"
4531        return
4532    end
4533
4534    p_workgroup = ''
4535    p_server    = ''
4536    p_share     = ''
4537
4538    srcFile = ""
4539    srcCtn  = VRGet("CN_SMBTREE","Self")
4540    srcRec  = SelRH.1
4541    trgCtn  = VRGet("CN_CURRENT","Self")
4542    trgRec  = ""
4543
4544    if options.!debug == 1 then do
4545        say '  srcCtn      = "'srcCtn'"'
4546        if srcCtn <> "" then say '  srcCtn name = "'VRGet(srcCtn,'Name')'"'
4547        say '  srcRec      = "'srcRec'"'
4548        say '  trgCtn      = "'trgCtn'"'
4549        if trgCtn <> "" then say '  trgCtn name = "'VRGet(trgCtn,'Name')'"'
4550        say '  trgRec      = "'trgRec'"'
4551    end
4552
4553    ok = VRMethod("CB_MOUNT", "GetStringList", "ShareLevels." )
4554
4555    DragCapt = VRMethod(srcCtn, "GetRecordAttr", srcRec, "Caption")
4556    ParentRH = VRMethod(srcCtn, "GetRecordAttr", srcRec, "Parent")
4557
4558    if ParentRH = "" then do /* A workgroup was dragged */
4559        say "Workgroup dragged!"
4560        parse var DragCapt p_workgroup '0D0A'x .
4561        p_workgroup = strip(p_workgroup)
4562        ok = VRSet("EF_NETWORK","Value",strip(p_workgroup))
4563        call _UpdateObject "EF_SERVER", ""
4564        ok = VRSet("EF_SHARE","Value","")
4565
4566        ShareLevel = 3
4567    end
4568    else do
4569        ParDragCapt = VRMethod(srcCtn, "GetRecordAttr", ParentRH, "Caption")
4570        GParentRH = VRMethod(srcCtn, "GetRecordAttr", ParentRH, "Parent")
4571
4572        if GParentRH = "" then do /* A server was dragged */
4573            say "Server dragged!"
4574            parse var ParDragCapt p_workgroup '0D0A'x .
4575            ok = VRSet("EF_NETWORK","Value",strip(p_workgroup))
4576            p_workgroup = strip(p_workgroup)
4577
4578            parse var DragCapt p_server '0D0A'x .
4579            p_server = strip(p_server)
4580            call _UpdateObject "EF_SERVER", p_server
4581            ok = VRSet("EF_Share","Value","")
4582
4583            ShareLevel = 2
4584        end
4585        else do /* A share was dragged */
4586            say "Share dragged!"
4587            GParDragCapt = VRMethod(srcCtn, "GetRecordAttr", GParentRH, "Caption")
4588
4589            parse var GParDragCapt p_workgroup '0D0A'x .
4590            p_workgroup = strip(p_workgroup)
4591            ok = VRSet("EF_NETWORK","Value",strip(p_workgroup))
4592
4593            parse var ParDragCapt p_server '0D0A'x .
4594            p_server = strip(p_server)
4595            call _UpdateObject "EF_SERVER", p_server
4596
4597            parse var DragCapt p_share '0D0A'x .
4598            p_share = strip(p_share)
4599            ok = VRSet("EF_Share","Value",strip(p_share))
4600
4601            ShareLevel = 1
4602        end
4603    end
4604
4605    say 'p_workgroup = "'p_workgroup'"'
4606    say 'p_server   = "'p_server'"'
4607    say 'p_share = "'p_share'"'
4608
4609    ok = VRSet( "CB_MOUNT", "Selected", Sharelevel )
4610    call CB_MOUNT_Change
4611
4612    if trgRec = "" then do
4613        window = VRLoadSecondary( "SW_MOUNTPOINT", "W" )
4614        if VRGet("CB_DRIVES","Value") = "" then return
4615    end
4616    else do
4617
4618        TargetString = VRMethod(trgCtn, "GetRecordAttr", trgRec, "Caption")
4619
4620        parTrgRH = VRMethod(trgCtn, "GetRecordAttr", trgRec, "Parent")
4621
4622        do while parTrgRH <> ""
4623            partrgCapt = VRMethod(trgCtn, "GetRecordAttr", partrgRH, "Caption")
4624            TargetString = partrgCapt||'\'||TargetString
4625            parTrgRH = VRMethod(trgCtn, "GetRecordAttr", partrgRH , "Parent")
4626        end
4627        say 'TargetString = "'TargetString'"'
4628        ok = VRSet("CB_DRIVES","Value", left(TargetString,2))
4629        ok = VRSet("EF_DIRECTORY","Value", substr(TargetString,4))
4630    end
4631
4632    window = VRLoadSecondary( "SW_LOGIN", "W" )
4633    if credentials.!entered = 1 then call PB_MOUNT_CLICK
4634
4635    if options.!debug == 1 then say time()' '||"PB_CONNECT_Click done"
4636RETURN
4637
4638/*:VRX         PB_SMBTREE_HELP_Click
4639*/
4640PB_SMBTREE_HELP_Click:
4641    CALL VRMethod 'GB_SMBTREE', 'InvokeHelp'
4642return
4643
4644/*:VRX         PB_SMBTREE_REFRESH_Click
4645*/
4646PB_SMBTREE_REFRESH_Click: /* PROCEDURE EXPOSE settings. options. icons. fs. samba. debuglevel advanced. UserCred Refreshmode Tempdir */
4647    if options.!debug == 1 then say time()' '||"PB_REFRESH_Click started"
4648
4649    if advanced.!browseauth = 1 & (UserCred = "--user=%" | UserCred = "" ) then do
4650        window = VRLoadSecondary( "SW_LOGIN", "W" )
4651    end
4652
4653    call _UserCredUpdate
4654    ok = VRset("Pict_Throbber", "Visible", 1)
4655    ok = VRset("Menu_Selected_Connect", "Visible", 0)
4656    ok = VRset("TM_Throbber", "Enabled", 1)
4657    ShowHidden = advanced.!special
4658    BroadCast = advanced.!broadcast
4659    ok = VRSet("TM_RefreshTreeDisplay", "Delay", 1000)
4660    ok = time('R')
4661    call _RefreshTree
4662    if options.!debug == 1 then say time()' '||"PB_REFRESH_Click done"
4663RETURN
4664
4665/*:VRX         PB_UNMOUNT_Click
4666*/
4667PB_UNMOUNT_Click: PROCEDURE EXPOSE settings. options. icons. fs. cd. samba.
4668    if options.!debug == 1 then say time()' '||"PB_UNMOUNT_Click started"
4669    if options.!debug == 1 then say time()' '||'options.!editmode = 'options.!editmode
4670    CALL VRMethod "CN_CURRENT", 'GetRecordList', 'Selected', 'select.'
4671    IF select.0 < 1 THEN RETURN
4672
4673    userdata = VRMethod( "CN_CURRENT", 'GetRecordAttr', select.1, 'UserData')
4674    PARSE VAR userdata mountpoint ';' mounts ';' .
4675say 'userdata="'userdata'"'
4676    IF mounts > 0 & options.!editmode = 0 THEN DO
4677        btns.0 = 2
4678        btns.1 = NLVGetMessage( 6 )
4679        btns.2 = NLVGetMessage( 7 )
4680        confirm = VRMessage('Main', NLVGetMessage( 57, mountpoint ), NLVGetMessage( 8 ), 'Q', 'btns.', 1, 2 )
4681        IF confirm \= 1 THEN RETURN
4682    END
4683
4684    /* Unmount any resources */
4685    DO i = 1 TO mounts
4686        CALL _Dynamic "ok = "fs.!prefix"RxUnmount('"mountpoint"', "i-1")"
4687    END
4688
4689    /* Delete mountpoint */
4690    parent = VRMethod("CN_CURRENT", 'GetRecordAttr', select.1, 'Parent')
4691    IF parent \= '' THEN DO
4692        CALL _Dynamic "ok = "fs.!prefix"RxDeleteMountPoint('"mountpoint"')"
4693    END
4694
4695    CALL Refresh
4696    if options.!debug == 1 then say time()' '||"PB_UNMOUNT_Click done"
4697RETURN 0
4698
4699/*:VRX         Pict_PWINMEM_Click
4700*/
4701Pict_PWINMEM_Click:
4702    if VRGet("Pict_PWINMEM","PicturePath") = "#36" then do
4703        call Menu_File_ucCred_Reset_Click
4704    end
4705return
4706
4707/*:VRX         Quit
4708*/
4709Quit:
4710    if Fatal <> 1 then CALL _INISave
4711    /* ok = VRREdirectSTdio("OFF") */
4712    window = VRWindow()
4713    call VRSet window, "Shutdown", 1
4714    drop window
4715RETURN
4716
4717/*:VRX         Refresh
4718*/
4719Refresh:
4720    if options.!debug == 1 then say time()' Refresh started'
4721    CALL VRSet "CN_CURRENT", 'Painting', 0
4722
4723    CALL VRMethod "CN_CURRENT", 'RemoveRecord', 'All'
4724
4725    /* Remove Active connections from details view */
4726    ok = VRMethod( "CN_CONDET", "GetRecordList", 'All', "rh." )
4727
4728    do I = 1 to rh.0
4729        /* This catches the bug we observed exactly once and were unable to reproduce! */
4730        if cd.statusfh = 'CD.STATUSFH' then do
4731            if options.!debug == 1 then call beep 880, 50
4732            if options.!debug == 1 then call beep 880, 50
4733            if options.!debug == 1 then say "  cd.statusfh is undefined - check why!!!!!!"
4734            leave
4735        end
4736        if options.!debug == 1 then say '  Icon.'i' = "'||VRMethod( "CN_CONDET", "GetFieldData", rh.i, cd.statusfh)'"'
4737        if VRMethod("CN_CONDET","GetFieldData", rh.i, cd.statusfh) = icons.!active then CALL VRMethod "CN_CONDET", 'RemoveRecord', rh.i
4738    end
4739
4740/*  call _AddTemplates */
4741    CALL VRSet "PB_DETACH",  "Enabled", 0
4742    CALL VRSet "PB_UNMOUNT", "Enabled", 0
4743
4744    ok = VRSet("MENU_CONTEXT_OPEN",    "Visible",  0)
4745/*  ok = VRSet("MENU_CONTEXT_SEP1",    "Visible",  0) */
4746    ok = VRSet("MENU_CONTEXT_DETACH",  "Visible",  0)
4747    ok = VRSet("MENU_CONTEXT_UNMOUNT", "Visible",  0)
4748    ok = VRSet("MENU_CONTEXT_EDIT",    "Visible",  0)
4749
4750    ok = VRSet("MENU_SELECTED_REMOVE", "Visible",  0)
4751    ok = VRSet("MENU_SELECTED_RETRY",  "Visible",  0)
4752
4753    if options.!debug == 1 then say '  Remove records, disable buttons done.'
4754
4755    CALL VRMethod 'CB_DRIVES', 'Clear'
4756
4757    CALL VRSet "CN_CURRENT", "Caption", fs.!Name' 'fs.!version
4758
4759    /* Herwig B.: Attention! The SysDrivemap function with the "free" parameter causes hangs in case it is called repeatedly! */
4760    drvs = MyFreeDriveMap('C:', 'FREE')
4761
4762    DO i = 1 TO WORDS( drvs )
4763        drvstem.i = WORD( drvs, i )
4764    END
4765
4766    drvstem.0 = WORDS( drvs )
4767
4768    /* Add any existing EVFS drives */
4769    CALL GetMountPoints
4770
4771    CALL VRMethod "CB_DRIVES", "AddStringList", "drvstem."
4772    CALL VRSet "CN_CURRENT", 'Painting', 1
4773    if options.!debug == 1 then say time()' '||"Refresh done"
4774RETURN 0
4775
4776/*:VRX         SPIN_client_ipc_signing_Change
4777*/
4778SPIN_client_ipc_signing_Change:
4779    advanced.!smbconfchanged = 1
4780return
4781
4782/*:VRX         SPIN_client_max_protocol_Change
4783*/
4784SPIN_client_max_protocol_Change:
4785    advanced.!smbconfchanged = 1
4786return
4787
4788/*:VRX         SPIN_client_min_protocol_Change
4789*/
4790SPIN_client_min_protocol_Change:
4791    advanced.!smbconfchanged = 1
4792return
4793
4794/*:VRX         SPIN_client_signing_Change
4795*/
4796SPIN_client_signing_Change:
4797    advanced.!smbconfchanged = 1
4798return
4799
4800/*:VRX         SPIN_LOG_LEVEL_Change
4801*/
4802SPIN_LOG_LEVEL_Change:
4803    advanced.!smbconfchanged = 1
4804return
4805
4806/*:VRX         SPIN_NRO1_Change
4807*/
4808SPIN_NRO1_Change:
4809    advanced.!smbconfchanged = 1
4810return
4811
4812/*:VRX         SPIN_NRO2_Change
4813*/
4814SPIN_NRO2_Change:
4815    advanced.!smbconfchanged = 1
4816return
4817
4818/*:VRX         SPIN_NRO3_Change
4819*/
4820SPIN_NRO3_Change:
4821    advanced.!smbconfchanged = 1
4822return
4823
4824/*:VRX         SPIN_NRO4_Change
4825*/
4826SPIN_NRO4_Change:
4827    advanced.!smbconfchanged = 1
4828return
4829
4830/*:VRX         SPLIT_Main_Move
4831*/
4832SPLIT_Main_Move:
4833    ok = VRset("Main", "Painting", 0)
4834    NewPos = VRInfo("Left")
4835    OldPos = VRGet("SPLIT_Main","Left")
4836    ok = VRSet("SPLIT_Main","Left", NewPos)
4837    ok = VRset("GB_SMBTREE","Left", NewPos+60)
4838    call Main_Resize
4839    ok = VRset("Main", "Painting", 1)
4840return
4841
4842/*:VRX         SW_ABOUT_Close
4843*/
4844SW_ABOUT_Close:
4845    options.!tracmark = VRGet('CB_TRAC', 'Set')
4846    call SW_ABOUT_Fini
4847return
4848
4849/*:VRX         SW_ABOUT_Create
4850*/
4851SW_ABOUT_Create:
4852    call SW_ABOUT_Init
4853
4854    CALL NLVSetText 'SW_ABOUT',        "Caption", 1
4855    CALL NLVSetText 'PB_ABOUT_CLOSE',  "Caption", 29
4856    CALL NLVSetText 'PB_ABOUT_COPY',   "Caption", 121
4857    CALL NLVSetText 'CB_TRAC',         "Caption", 134
4858
4859    CALL VRSet 'CB_TRAC', 'Set', options.!tracmark
4860
4861    ok = VRSet("DT_About","Caption", Program' (c) 2007-2016 Alexander Taylor'||'0D0A'x||'and Herwig Bauernfeind for bww bitwise works GmbH.')
4862
4863    About.DscFH  = VRMethod( "CN_ABOUT", "AddField", "String", "Component" )
4864    About.ValFH  = VRMethod( "CN_ABOUT", "AddField", "String", "Version" )
4865
4866    call _AboutSambaClientGetInfo
4867
4868return
4869/*:VRX         SW_ABOUT_Fini
4870*/
4871SW_ABOUT_Fini:
4872    window = VRInfo( "Window" )
4873    call VRDestroy window
4874    drop window
4875return
4876/*:VRX         SW_ABOUT_Init
4877*/
4878SW_ABOUT_Init:
4879    window = VRInfo( "Object" )
4880    if( \VRIsChildOf( window, "TabbedDialog" ) ) then do
4881        call VRMethod window, "CenterWindow"
4882        call VRSet window, "Visible", 1
4883        call VRMethod window, "Activate"
4884    end
4885    drop window
4886return
4887
4888/*:VRX         SW_ADVANCED_Close
4889*/
4890SW_ADVANCED_Close:
4891    call SW_ADVANCED_Fini
4892return
4893
4894/*:VRX         SW_ADVANCED_Create
4895*/
4896SW_ADVANCED_Create:
4897    call SW_ADVANCED_Init
4898return
4899
4900/*:VRX         SW_ADVANCED_Fini
4901*/
4902SW_ADVANCED_Fini:
4903    window = VRInfo( "Window" )
4904    call VRDestroy window
4905    drop window
4906return
4907/*:VRX         SW_ADVANCED_Init
4908*/
4909SW_ADVANCED_Init:
4910    /* Title bar */
4911    CALL NLVSetText "SW_ADVANCED",  "Caption", 40
4912
4913    /* Options */
4914    CALL NLVSetText "GB_ADVANCED",          "Caption", 43
4915    CALL NLVSetText "CB_EAS",           "Caption", 44
4916    CALL NLVSetText "CB_READONLY",      "Caption", 45
4917    CALL NLVSetText "CB_ALWAYSMP",      "Caption", 65
4918    CALL NLVSetText "DT_CACHETIMEOUT",  "Caption", 130
4919    CALL NLVSetText "DT_CACHELISTINGS", "Caption", 131
4920
4921    /* Buttons */
4922    CALL NLVSetText "PB_ADVANCED_APPLY",     "Caption", 122
4923    CALL NLVSetText "PB_ADVANCED_UNDO", "Caption", 123
4924    CALL NLVSetText "PB_ADVANCED_HELP",   "Caption", 4
4925
4926    CALL VRSet "SW_ADVANCED", "HelpTag", NLVGetMessage(40)
4927
4928/*  call VRMethod "SW_ADVANCED", "CenterWindow" */
4929    ok = VRSet("SW_ADVANCED", "Visible", 1)
4930/*  call VRMethod "SW_ADVANCED", "Activate" */
4931return
4932
4933/*:VRX         SW_ADVANCED_Init_Content
4934*/
4935SW_ADVANCED_Init_Content:
4936    IF advanced.!easupport     \= "" THEN ok = VRSet("CB_EAS",     "Set",   advanced.!easupport)
4937    IF advanced.!readonly      \= "" THEN ok = VRSet("CB_READONLY","Set",   advanced.!readonly)
4938    IF advanced.!alwaysmp      \= "" THEN ok = VRSet("CB_ALWAYSMP","Set",   advanced.!alwaysmp)
4939    IF advanced.!cachetimeout  \= "" THEN ok = VRSet("SPIN_CACHETIMEOUT",   "Value", advanced.!cachetimeout)
4940    IF advanced.!cachelistings \= "" THEN ok = VRSet("SPIN_CACHELISTINGS",  "Value", advanced.!cachelistings)
4941
4942    /* Obsolete */
4943    IF advanced.!memlen        \= "" THEN ok = VRSet("SPB_MEMLEN", "Value", advanced.!memlen)
4944return
4945
4946/*:VRX         SW_CONDET_Close
4947*/
4948SW_CONDET_Close:
4949    call SW_CONDET_Fini
4950return
4951
4952/*:VRX         SW_CONDET_Create
4953*/
4954SW_CONDET_Create:
4955    call SW_CONDET_Init
4956return
4957
4958/*:VRX         SW_CONDET_Fini
4959*/
4960SW_CONDET_Fini:
4961    window = VRInfo( "Window" )
4962    call VRDestroy window
4963    drop window
4964return
4965/*:VRX         SW_CONDET_Init
4966*/
4967SW_CONDET_Init:
4968
4969return
4970
4971/*:VRX         SW_CONDET_Init_Content
4972*/
4973SW_CONDET_Init_Content:
4974    if VRGet("TM_Throbber","Enabled") = 1 then ok = VRset("Pict_Throbber", "Visible", 0)
4975
4976    /* Hide any "foreign" menu entries */
4977    ok = VRSet("Menu_Selected_Connect", "Visible", 0)
4978return
4979
4980/*:VRX         SW_DIALOG_Close
4981*/
4982SW_DIALOG_Close:
4983    call SW_DIALOG_Fini
4984return
4985
4986/*:VRX         SW_DIALOG_Create
4987*/
4988SW_DIALOG_Create:
4989    call SW_DIALOG_Init
4990return
4991
4992/*:VRX         SW_DIALOG_Fini
4993*/
4994SW_DIALOG_Fini:
4995    window = VRInfo( "Window" )
4996    call VRDestroy window
4997    drop window
4998return
4999/*:VRX         SW_DIALOG_Init
5000*/
5001SW_DIALOG_Init:
5002    LEDSize = VRMethod( "Screen", "PixelsToTwips", 16 )
5003
5004    ok = VRSet("Pict_PWINMEM","Top",  VRGet("EF_USER","Top")+(VRGet("EF_USER","Height")-LEDSize)%2)
5005    ok = VRSet("Pict_PWINMEM","Width",  LEDSize)
5006    ok = VRSet("Pict_PWINMEM","Height", LEDSize)
5007return
5008
5009/*:VRX         SW_DIALOG_Init_Content
5010*/
5011SW_DIALOG_Init_Content:
5012    /* obsolete */
5013    if VRGet("TM_Throbber","Enabled") = 1 then ok = VRset("Pict_Throbber", "Visible", 0)
5014
5015    ok = VRSet("Menu_Selected_Remove",  "Visible",  0)
5016    ok = VRSet("Menu_Selected_Retry",   "Visible",  0)
5017    ok = VRSet("Menu_Selected_Connect", "Visible",  0)
5018
5019    call _DialogPopulate
5020return
5021
5022/*:VRX         SW_INFO_Close
5023*/
5024SW_INFO_Close:
5025    call SW_INFO_Fini
5026return
5027
5028/*:VRX         SW_INFO_Create
5029*/
5030SW_INFO_Create:
5031    if options.!debug == 1 then say time()' SW_INFO_Create started'
5032    call SW_INFO_Init
5033    CALL NLVSetText 'SW_INFO',    "Caption", 92
5034    CALL NLVSetText 'PB_INFO_OK',    "Caption", 2
5035    Info.TypeFH    = VRMethod( "CN_INFO", "AddField", "String", "Type" )
5036    Info.ValueFH   = VRMethod( "CN_INFO", "AddField", "String", "Value" )
5037
5038    if options.!debug == 1 then do
5039        say '  Handle:   "'SMBObj.rh'"'
5040        say '  Resource: "'SMBObj.resname'"'
5041        say '  Comment:  "'SMBObj.comment'"'
5042        say '  Type:     "'SMBObj.udatatype'"'
5043        say '  Message:  "'SMBObj.udatamsg'"'
5044        say '  Icon:     "'SMBObj.icon'"'
5045    end
5046say "Vorher:"rpc.srvinfo.OS_VERSION
5047    drop rpc.
5048say "Vorher:"rpc.srvinfo.OS_VERSION
5049    rpc_success = _rpcsrvinfo(SMBObj.resname,credentials.!username,credentials.!password)
5050
5051    Info.!nbname       = VRMethod( "CN_INFO", "AddRecord")
5052    Info.!comment      = VRMethod( "CN_INFO", "AddRecord")
5053    Info.!domain       = VRMethod( "CN_INFO", "AddRecord")
5054    Info.!DMBLMB       = VRMethod( "CN_INFO", "AddRecord")
5055    if rpc_success = 1 then Info.!capabilities = VRMethod( "CN_INFO", "AddRecord")
5056    Info.!os           = VRMethod( "CN_INFO", "AddRecord")
5057    Info.!server       = VRMethod( "CN_INFO", "AddRecord")
5058    if rpc_success = 1 then Info.!version      = VRMethod( "CN_INFO", "AddRecord")
5059    Info.!status       = VRMethod( "CN_INFO", "AddRecord")
5060    Info.!IP           = VRMethod( "CN_INFO", "AddRecord")
5061    Info.!MAC          = VRMethod( "CN_INFO", "AddRecord")
5062
5063    if rpc_success = 1 then do
5064        if rpc.srvinfo.OS_VERSION = 'RPC.SRVINFO.OS_VERSION' then rpc.srvinfo.OS_VERSION = ''
5065        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!nbname, Info.TypeFH, strip(NLVGetMessage(137),'T',':'),Info.ValueFH, rpc.srvinfo.NETBIOSNAME)
5066        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!comment,Info.TypeFH, strip(NLVGetMessage(125),'T',':'),Info.ValueFH, rpc.srvinfo.SERVERSTRING)
5067        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!capabilities, Info.TypeFH, strip(NLVGetMessage(138),'T',':'),Info.ValueFH, rpc.srvinfo.CAPABILITIES)
5068        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!version,Info.TypeFH, strip(NLVGetMessage(139),'T',':'),Info.ValueFH, rpc.srvinfo.OS_VERSION)
5069        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!status, Info.TypeFH, strip(NLVGetMessage(67),'T',':'),Info.ValueFH, rpc.srvinfo.LOGONSTATUS )
5070        /* we did not get these, but we know them anyway */
5071        if rpc.srvinfo.NETBIOSNAME  = "" then ok = VRMethod( "CN_INFO", "SetFieldData", Info.!nbname, Info.TypeFH, strip(NLVGetMessage(137),'T',':'),Info.ValueFH, SMBObj.resname)
5072        if rpc.srvinfo.SERVERSTRING = "" then ok = VRMethod( "CN_INFO", "SetFieldData", Info.!comment,Info.TypeFH, strip(NLVGetMessage(125),'T',':'),Info.ValueFH, SMBObj.comment)
5073    end
5074    else do
5075        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!nbname, Info.TypeFH, strip(NLVGetMessage(137),'T',':'),Info.ValueFH, SMBObj.resname)
5076        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!comment,Info.TypeFH, strip(NLVGetMessage(125),'T',':'),Info.ValueFH, SMBObj.comment)
5077        ok = VRMethod( "CN_INFO", "SetFieldData", Info.!status, Info.TypeFH, strip(NLVGetMessage(67),'T',':'), Info.ValueFH, SMBObj.udatamsg)
5078    end
5079
5080    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!domain, Info.TypeFH, strip(NLVGetMessage(21), 'T',':'),Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, WorkGroupFH ))
5081    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!os,     Info.TypeFH, strip(NLVGetMessage(93), 'T',':'),Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, OSFH  ))
5082    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!server, Info.TypeFH, strip(NLVGetMessage(19), 'T',':'),Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, VersionFH  ))
5083    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!DMBLMB, Info.TypeFH, strip(NLVGetMessage(124),'T',':'),Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, MBFH  ))
5084    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!IP,     Info.TypeFH, "IP"  ,Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, IPFH  ))
5085    ok = VRMethod( "CN_INFO", "SetFieldData", Info.!MAC,    Info.TypeFH, "MAC" ,Info.ValueFH, VRMethod("CN_SMBTREE", "GetFieldData", SMBObj.RH, MacFH ))
5086
5087    if options.!debug == 1 then say time()' SW_INFO_Create done'
5088return
5089
5090/*:VRX         SW_INFO_Fini
5091*/
5092SW_INFO_Fini:
5093    window = VRInfo( "Window" )
5094    call VRDestroy window
5095    drop window
5096return
5097/*:VRX         SW_INFO_Init
5098*/
5099SW_INFO_Init:
5100    window = VRInfo( "Object" )
5101    if( \VRIsChildOf( window, "TabbedDialog" ) ) then do
5102        call VRMethod window, "CenterWindow"
5103        call VRSet window, "Visible", 1
5104        call VRMethod window, "Activate"
5105    end
5106    drop window
5107return
5108
5109/*:VRX         SW_LOGIN_Close
5110*/
5111SW_LOGIN_Close:
5112    call SW_LOGIN_Fini
5113return
5114
5115/*:VRX         SW_LOGIN_Create
5116*/
5117SW_LOGIN_Create:
5118    call SW_LOGIN_Init
5119    ok = VRSet("SW_LOGIN","Caption",NLVGetMessage(136)' 'strip(p_workgroup' \\'p_server'\'p_share,'T','\'))
5120    CALL NLVSetText 'DT_USER1',       "Caption", 25
5121    CALL NLVSetText 'DT_PASSWORD1',   "Caption", 26
5122    CALL NLVSetText 'CB_STORECREDS1', "Caption", 135
5123    CALL NLVSetText 'PB_LOGIN_OK',    "Caption", 2
5124    CALL NLVSetText 'PB_LOGIN_CANCEL',"Caption", 3
5125
5126    if VRIsValidObject(SMBObj.rh) then do
5127        select
5128            when pos("PDC",VRMethod("CN_smbtree", "GetFieldData", SMBObj.rh, MBFH)) > 0 then LoginIcon = "#63:PMWP.DLL" /* icons.!pdc */
5129            when SMBObj.udatatype = "WORKGROUP" then LoginIcon = SMBObj.Icon
5130            when SMBObj.udatatype = "SERVER"    then LoginIcon = SMBObj.Icon
5131            when SMBObj.udatatype = "DISK"      then do
5132                if pos("PDC",VRMethod("CN_smbtree", "GetFieldData", SMBObj.parentrh, MBFH)) > 0
5133                    then LoginIcon = "#63:PMWP.DLL" /* icons.!pdc */
5134                    else LoginIcon = "#35:PMWP.DLL" /* icons.!pdc */
5135            end
5136            otherwise LoginIcon = "#35:PMWP.DLL" /* icons.!machine_awake */
5137        end
5138        say loginicon
5139        ok = VRSet("Pict_Login","PicturePath", LoginIcon)
5140    end
5141    ok = VRSet("EF_USER1","Value",VRGet("EF_USER","Value"))
5142    ok = VRSet("EF_PASSWORD1","Value",VRGet("EF_PASSWORD","Value"))
5143    ok = VRSet("CB_STORECREDS1","Set",options.!storecreds)
5144return
5145
5146/*:VRX         SW_LOGIN_Fini
5147*/
5148SW_LOGIN_Fini:
5149    window = VRInfo( "Window" )
5150    call VRDestroy window
5151    drop window
5152return
5153/*:VRX         SW_LOGIN_Init
5154*/
5155SW_LOGIN_Init:
5156    window = VRInfo( "Object" )
5157    if( \VRIsChildOf( window, "TabbedDialog" ) ) then do
5158        call VRMethod window, "CenterWindow"
5159        call VRSet window, "Visible", 1
5160        call VRMethod window, "Activate"
5161    end
5162    drop window
5163return
5164
5165/*:VRX         SW_LOGIN_KeyPress
5166*/
5167SW_LOGIN_KeyPress:
5168    obj = VRInfo( "Object" )
5169    keystr = VRGet( obj, "KeyString" )
5170/*  say keystr */
5171    select
5172        when keystr = "{Enter}" then ok = VRMethod( "EF_LoginPassword", "SetFocus" )
5173        when keystr = "{Newline}" then ok = VRMethod( "EF_LoginPassword", "SetFocus" )
5174        when keystr  = "{Esc}" then call PB_LOGIN_CANCEL_Click
5175        otherwise nop
5176    end
5177return
5178
5179/*:VRX         SW_MOUNTPOINT_Close
5180*/
5181SW_MOUNTPOINT_Close:
5182    call SW_MOUNTPOINT_Fini
5183return
5184
5185/*:VRX         SW_MOUNTPOINT_Create
5186*/
5187SW_MOUNTPOINT_Create:
5188    call SW_MOUNTPOINT_Init
5189
5190    ok = VRSet("SW_MOUNTPOINT","Caption",strip(p_workgroup' \\'p_server'\'p_share,'T','\')) /* NLVGetMessage(14)' ' */
5191    CALL NLVSetText 'DT_MPOINT1',   "Caption", 27
5192    CALL NLVSetText 'PB_NEWMOUNTPOINTOK',    "Caption", 2
5193    CALL NLVSetText 'PB_NEWMOUNTPOINTCANCEL',"Caption", 3
5194    CALL NLVSetText 'CB_EAS1',       "Caption", 44
5195    CALL NLVSetText 'CB_READONLY1',  "Caption", 45
5196    CALL NLVSetText 'CB_ALWAYSMP1',  "Caption", 65
5197    CALL NLVSetText "DT_CACHETIMEOUT1",  "Caption", 130
5198    CALL NLVSetText "DT_CACHELISTINGS1", "Caption", 131
5199
5200    ok = VRMethod( "CB_DRIVES",  "GetStringList", "freedrives." )
5201    ok = VRMethod( "CB_DRIVES1", "AddStringList", "freedrives." )
5202    ok = VRSet("CB_DRIVES1", "Value", VRGet("CB_Drives","Value"))
5203
5204    if VRGet("EF_Directory","Value") = "" then ok = VRSet("EF_DIRECTORY1", "Value", VRGet("EF_Directory","Value"))
5205
5206    ok = VRMethod("EF_DIRECTORY1","AddString",p_share)
5207
5208    IF advanced.!easupport     \= "" THEN ok = VRSet("CB_EAS1",            "Set",   advanced.!easupport)
5209    IF advanced.!readonly      \= "" THEN ok = VRSet("CB_READONLY1",       "Set",   advanced.!readonly)
5210    IF advanced.!alwaysmp      \= "" THEN ok = VRSet("CB_ALWAYSMP1",       "Set",   advanced.!alwaysmp)
5211    IF advanced.!cachetimeout  \= "" THEN ok = VRSet("SPIN_CACHETIMEOUT1", "Value", advanced.!cachetimeout)
5212    IF advanced.!cachelistings \= "" THEN ok = VRSet("SPIN_CACHELISTINGS1","Value", advanced.!cachelistings)
5213return
5214
5215/*:VRX         SW_MOUNTPOINT_Fini
5216*/
5217SW_MOUNTPOINT_Fini:
5218    window = VRInfo( "Window" )
5219    call VRDestroy window
5220    drop window
5221return
5222/*:VRX         SW_MOUNTPOINT_Init
5223*/
5224SW_MOUNTPOINT_Init:
5225    window = VRInfo( "Object" )
5226    if( \VRIsChildOf( window, "TabbedDialog" ) ) then do
5227        call VRMethod window, "CenterWindow"
5228        call VRSet window, "Visible", 1
5229        call VRMethod window, "Activate"
5230    end
5231    drop window
5232return
5233
5234/*:VRX         SW_PORTCONNECT_Close
5235*/
5236SW_PORTCONNECT_Close:
5237    call SW_PORTCONNECT_Fini
5238return
5239
5240/*:VRX         SW_PORTCONNECT_Create
5241*/
5242SW_PORTCONNECT_Create:
5243    call SW_PORTCONNECT_Init
5244
5245    ok = VRGetINI("PM_PORT_DRIVER","SMB","SYSTEM")
5246
5247    if ok = "" then do
5248
5249    end
5250    else do
5251        say "Samba Spooler Port driver installed!"
5252        ok = SysINI("SYSTEM","PM_SPOOLER_PORT","ALL:","ports")
5253        smbport.0 = 0
5254        do I = 1 to ports.0
5255            if left(ports.I,3) = "SMB" then do
5256                X = smbport.0
5257                X = X + 1
5258                smbport.0 = X
5259                smbport.X = ports.I
5260            end
5261        end
5262        do I = 1 to smbport.0
5263            say smbport.I
5264        end
5265    end
5266
5267return
5268
5269/*:VRX         SW_PORTCONNECT_Fini
5270*/
5271SW_PORTCONNECT_Fini:
5272    window = VRInfo( "Window" )
5273    call VRDestroy window
5274    drop window
5275return
5276/*:VRX         SW_PORTCONNECT_Init
5277*/
5278SW_PORTCONNECT_Init:
5279    window = VRInfo( "Object" )
5280    if( \VRIsChildOf( window, "TabbedDialog" ) ) then do
5281        call VRMethod window, "CenterWindow"
5282        call VRSet window, "Visible", 1
5283        call VRMethod window, "Activate"
5284    end
5285    drop window
5286return
5287
5288/*:VRX         SW_PROGRESS_Close
5289*/
5290SW_PROGRESS_Close:
5291    options.!delay = 0
5292    call Main_Resize
5293    call VRSet 'Main',    'Visible', 1
5294    call SW_PROGRESS_Fini
5295return
5296
5297/*:VRX         SW_PROGRESS_Create
5298*/
5299SW_PROGRESS_Create:
5300    call SW_PROGRESS_Init
5301    CALL NLVSetText 'SW_PROGRESS',  "Caption", 1
5302    CALL NLVSetText 'DT_PROGRESS',  "Caption", 34
5303    CALL NLVSetText 'PB_PROGRESS_ABORT',  "Caption", 3
5304
5305    if options.!delay > 0 then ok = VRSet("TM_TheCloser","Delay", options.!delay*1000)
5306
5307    CALL VRSet "TM_Progress_Throbber","Enabled", 1
5308    CALL VRSet "TM_TheCloser","Enabled", 1
5309return
5310
5311/*:VRX         SW_PROGRESS_Fini
5312*/
5313SW_PROGRESS_Fini:
5314    call VRDestroy "SW_PROGRESS"
5315return
5316/*:VRX         SW_PROGRESS_Init
5317*/
5318SW_PROGRESS_Init:
5319    call VRMethod "SW_PROGRESS", "CenterWindow", "Parent"
5320    call VRSet    "SW_PROGRESS", "Visible", 1
5321    call VRMethod "SW_PROGRESS", "Activate"
5322return
5323
5324/*:VRX         SW_SETTINGS_Close
5325*/
5326SW_SETTINGS_Close:
5327    call SW_SETTINGS_Fini
5328return
5329
5330/*:VRX         SW_SETTINGS_Create
5331*/
5332SW_SETTINGS_Create:
5333    call SW_SETTINGS_Init
5334return
5335
5336/*:VRX         SW_SETTINGS_Fini
5337*/
5338SW_SETTINGS_Fini:
5339    window = VRInfo( "Window" )
5340    call VRDestroy window
5341    drop window
5342return
5343/*:VRX         SW_SETTINGS_Init
5344*/
5345SW_SETTINGS_Init:
5346    /* Title bar */
5347    call NLVSetText "SW_SETTINGS",       "Caption", 47
5348
5349    /* Options */
5350    call NLVSetText "GB_GLOBAL",         "Caption", 47
5351    call NLVSetText "CB_DEBUG",          "Caption", 42
5352    call NLVSetText "CB_LOGGING",        "Caption", 46
5353    call NLVSetText "CB_BROWSEIMME",     "Caption", 48
5354    call NLVSetText "CB_BROWSEAUTH",     "Caption", 49
5355    call NLVSetText "CB_SPECIAL",        "Caption", 66
5356    call NLVSetText "CB_SAVEPASSIVE",    "Caption", 73
5357    call NLVSetText "CB_LMHOSTS",        "Caption", 133
5358    call NLVSetText "CB_BROADCAST",      "Caption", 74
5359    call NLVSetText "CB_MINIICONS",      "Caption", 70
5360    call NLVSetText "CB_STORECREDS",     "Caption", 135
5361
5362    /* Buttons */
5363    call NLVSetText "PB_SETTINGS_APPLY",  "Caption", 122
5364    call NLVSetText "PB_SETTINGS_UNDO",   "Caption", 123
5365    call NLVSetText "PB_SETTINGS_HELP",   "Caption", 4
5366
5367/*  call VRSet "SW_ADVANCED", "HelpTag", NLVGetMessage(40) */
5368
5369/*  call VRMethod "SW_SETTINGS", "CenterWindow" */
5370    ok = VRSet("SW_SETTINGS", "Visible", 1)
5371/*  call VRMethod "SW_SETTINGS", "Activate" */
5372return
5373
5374/*:VRX         SW_SETTINGS_Init_Content
5375*/
5376SW_SETTINGS_Init_Content:
5377    ok = VRSet("PB_SETTINGS_UNDO","Enabled", 1)
5378
5379    if advanced.!browseauth  \= ""  then ok = VRSet("CB_BROWSEAUTH", "Set",   advanced.!browseauth)
5380    if advanced.!browseimme  \= ""  then ok = VRSet("CB_BROWSEIMME", "Set",   advanced.!browseimme)
5381    if advanced.!broadcast   \= ""  then ok = VRSet("CB_BROADCAST",  "Set",   advanced.!broadcast)
5382    if advanced.!special     \= ""  then ok = VRSet("CB_SPECIAL",    "Set",   advanced.!special)
5383    if advanced.!savepassive \= ""  then ok = VRSet("CB_SAVEPASSIVE","Set",   advanced.!savepassive)
5384    if advanced.!lmhosts     \= ""  then ok = VRSet("CB_LMHOSTS",    "Set",   advanced.!lmhosts)
5385
5386    call VRSet "CB_LOGGING", "Set", VRFileExists(SysBootDrive()"\ndpsmb.dbg")
5387    if options.!debug        \= ""  then ok = VRSet("CB_debug",      "Set",   options.!debug)
5388    if options.!storecreds   \= ""  then ok = VRSet("CB_STORECREDS", "Set",   options.!storecreds)
5389
5390    if advanced.!miniicons   \= ""  then ok = VRSet("CB_MINIICONS",  "Set",   advanced.!miniicons)
5391
5392/*  if advanced.!logfile     \= ""  then ok = VRSet("EF_LOGFILE",    "Value", advanced.!logfile)     /* Obsolete */
5393    if advanced.!loglevel    \= "0" then ok = VRSet("SPIN_LOG_LEVEL", "Value", advanced.!loglevel) */
5394
5395    log_level = IniGet('log level', 'global', samba.!smbconf)
5396    call _SmbConfCreateShadowCopy
5397
5398
5399say "log level ="log_level
5400    if log_level = "" then log_level = 2
5401say "log level ="log_level
5402    ok = VRSet("SPIN_LOG_LEVEL","Value",log_level)
5403
5404    wins_support = translate(IniGet('wins support', 'global', samba.!shadowsmbconf))
5405
5406    if wins_support = "YES" then do /* we are a WINS server ourself */
5407        ok = VRSet("DT_WINS_SERVER","Enabled", 0)
5408        ok = VRSet("EF_WINS_SERVER","BackColor", "PaleGray")
5409        ok = VRSet("EF_WINS_SERVER","Value", "")
5410        ok = VRSet("EF_WINS_SERVER","Enabled", 0)
5411    end
5412    else do
5413        ok = VRSet("EF_WINS_SERVER","Value", IniGet('wins server', 'global', samba.!shadowsmbconf))
5414    end
5415
5416    name_resolve_order = IniGet('name resolve order', 'global', samba.!shadowsmbconf)
5417
5418    do I = 1 to words(name_resolve_order)
5419        ok = VRSet("SPIN_NRO"||I, "value", word(name_resolve_order,I))
5420    end
5421
5422    advanced.!smbconfchanged = 0
5423return
5424
5425/*:VRX         SW_SMBCONF_Close
5426*/
5427SW_SMBCONF_Close:
5428    call SW_SMBCONF_Fini
5429return
5430
5431/*:VRX         SW_SMBCONF_Create
5432*/
5433SW_SMBCONF_Create:
5434    call SW_SMBCONF_Init
5435return
5436
5437/*:VRX         SW_SMBCONF_Fini
5438*/
5439SW_SMBCONF_Fini:
5440    window = VRInfo( "Window" )
5441    call VRDestroy window
5442    drop window
5443return
5444/*:VRX         SW_SMBCONF_Init
5445*/
5446SW_SMBCONF_Init:
5447   
5448    /* Buttons */
5449    call NLVSetText "PB_SMBCONF_APPLY",  "Caption", 122
5450    call NLVSetText "PB_SMBCONF_UNDO",   "Caption", 123
5451    call NLVSetText "PB_SMBCONF_HELP",   "Caption", 4
5452
5453return
5454
5455/*:VRX         SW_SMBCONF_Init_Content
5456*/
5457SW_SMBCONF_Init_Content:
5458    call _SmbConfCreateShadowCopy
5459
5460    client_NTLMv2_auth          = ZeroOne(IniGet('client NTLMv2 auth', 'global', samba.!shadowsmbconf))
5461    if client_NTLMv2_auth = 1 then do
5462        ok = VRSet("CB_client_NTLMv2_auth","Set",client_NTLMv2_auth)       
5463        ok = VRSet("CB_client_lanman_auth","Enabled", 0)
5464        ok = VRSet("CB_client_plaintext_auth","Enabled", 0)
5465    end
5466    else do
5467        client_lanman_auth          = ZeroOne(IniGet('client lanman auth', 'global', samba.!shadowsmbconf))
5468        client_plaintext_auth       = ZeroOne(IniGet('client plaintext auth', 'global', samba.!shadowsmbconf))
5469        ok = VRSet("CB_client_lanman_auth","Set",client_lanman_auth)
5470        ok = VRSet("CB_client_plaintext_auth","Set",client_plaintext_auth)
5471    end
5472
5473    client_use_spnego           = ZeroOne(IniGet('client use spnego', 'global', samba.!shadowsmbconf))
5474    ok = VRSet("CB_client_use_spnego","Set",client_use_spnego)
5475
5476    client_use_spnego_principal = ZeroOne(IniGet('client use spnego principal', 'global', samba.!shadowsmbconf))
5477    ok = VRSet("CB_client_use_spnego_principal","Set",client_use_spnego_principal)
5478
5479    client_max_protocol         = IniGet('client max protocol', 'global', samba.!shadowsmbconf)
5480    if client_max_protocol = "" then do
5481     /* ok = VRSet("SPIN_client_max_protocol","Enabled", 0)
5482        ok = VRSet("DT_client_max_protocol","Enabled", 0) */
5483    end
5484    else ok = VRSet("SPIN_client_max_protocol","Value",client_max_protocol)
5485
5486    client_min_protocol         = IniGet('client min protocol', 'global', samba.!shadowsmbconf)
5487    if client_min_protocol = "" then do
5488     /* ok = VRSet("SPIN_client_min_protocol","Enabled", 0)
5489        ok = VRSet("DT_client_min_protocol","Enabled", 0) */
5490    end
5491    else ok = VRSet("SPIN_client_min_protocol","Value",client_min_protocol)
5492
5493    client_signing         = IniGet('client signing', 'global', samba.!shadowsmbconf)
5494    client_ipc_signing     = IniGet('client ipc signing', 'global', samba.!shadowsmbconf)
5495say "client_signing ="client_signing
5496    ok = VRSet("SPIN_client_signing","Value",client_signing)
5497    ok = VRSet("SPIN_client_ipc_signing","Value",client_signing)
5498
5499    advanced.!smbconfchanged = 0
5500return
5501
5502/*:VRX         SW_SMBTREE_Close
5503*/
5504SW_SMBTREE_Close:
5505    call SW_SMBTREE_Fini
5506return
5507
5508/*:VRX         SW_SMBTREE_Create
5509*/
5510SW_SMBTREE_Create:
5511    call SW_SMBTREE_Init
5512return
5513
5514/*:VRX         SW_SMBTREE_Fini
5515*/
5516SW_SMBTREE_Fini:
5517    window = VRInfo( "Window" )
5518    call VRDestroy window
5519    drop window
5520return
5521/*:VRX         SW_SMBTREE_Init
5522*/
5523SW_SMBTREE_Init:
5524
5525return
5526
5527/*:VRX         SW_SMBTREE_Init_Content
5528*/
5529SW_SMBTREE_Init_Content:
5530    if VRGet("TM_Throbber","Enabled") = 1 then ok = VRset("Pict_Throbber", "Visible", 1)
5531
5532    /* Hide any "foreign" menu entries */
5533    ok = VRSet("Menu_Selected_Remove", "Visible", 0)
5534    ok = VRSet("Menu_Selected_Retry",  "Visible", 0)
5535return
5536
5537/*:VRX         TDL_1_PageSelected
5538*/
5539TDL_1_PageSelected:
5540    page =  VRInfo("Page")
5541
5542    /* call _TabsStrip */
5543    select
5544        when page = 1 then do /* dialog */
5545            call _TabFix 1
5546        end
5547        when page = 2 then do /* advanced */
5548            call SW_ADVANCED_Init_Content
5549        end
5550        when page = 3 then do /* smbtree */
5551            call SW_SMBTREE_Init_Content
5552        end
5553        when page = 4 then do /* condet */
5554            call SW_CONDET_Init_Content
5555        end
5556        when page = 5 then do /* Settings */
5557            call SW_SETTINGS_Init_Content
5558        end
5559        when page = 6 then do /* SMB.CONF */
5560            call SW_SMBCONF_Init_Content
5561        end
5562        otherwise nop
5563    end
5564return
5565/*:VRX         TM_AutoClose_Trigger
5566*/
5567TM_AutoClose_Trigger:
5568    call Quit
5569return
5570
5571/*:VRX         TM_Progress_Throbber_Trigger
5572*/
5573TM_Progress_Throbber_Trigger:
5574    pIdx = VRGet("Pict_Progress_Throbber","PicturePath")
5575    parse var pIdx '#' pidx
5576    pidx = pidx + 1
5577    if pidx = 23 then pidx = 11
5578    ok = VRSet("Pict_Progress_Throbber","PicturePath","#"pidx)
5579return
5580
5581/*:VRX         TM_RefreshCurrentDisplay_Trigger
5582*/
5583TM_RefreshCurrentDisplay_Trigger:
5584    if RefreshMode <> "" then return
5585    if _DaemonRunning() = 0 then do
5586        say "  Daemon not running - disable GUI"
5587        ok = VRset("GB_CURRENT",            "Enabled", 0)
5588        ok = VRset("TDL_1",                 "Enabled", 0)
5589        ok = VRSet("Menu_File_Daemon_Start","Enabled", 1)
5590        ok = VRSet("Menu_File_Daemon_Stop", "Enabled", 0)
5591    end
5592    else do
5593        say "  Daemon running - enable GUI"
5594        ok = VRset("GB_CURRENT",            "Enabled", 1)
5595        ok = VRset("TDL_1",                 "Enabled", 1)
5596        ok = VRSet("Menu_File_Daemon_Start","Enabled", 0)
5597        ok = VRSet("Menu_File_Daemon_Stop", "Enabled", 1)
5598    end
5599    CALL REFRESH
5600return
5601
5602/*:VRX         TM_RefreshTreeDisplay_Trigger
5603*/
5604TM_RefreshTreeDisplay_Trigger:
5605    ShowHidden = advanced.!special
5606    BroadCast  = advanced.!broadcast
5607    DoLMHosts  = advanced.!lmhosts
5608
5609    select
5610        when RefreshMode = "TREE" then do
5611            call _RefreshTreeDisplay
5612
5613            if smbtree.!workgroup <> 'SMBTREE.!WORKGROUP' then do
5614                ok = VRset("Menu_Selected_Connect", "Visible", VRMethod("CN_SMBTREE", "ValidateRecord", smbtree.!workgroup ) )
5615            end
5616        end
5617        when RefreshMode = "SHARE" then do
5618            call _AddSharesDisplay
5619        end
5620        otherwise say "RefreshMode = "RefreshMode
5621    end
5622    call _DialogPopulate
5623return
5624
5625/*:VRX         TM_TheCloser_Trigger
5626*/
5627TM_TheCloser_Trigger:
5628    call SW_PROGRESS_Close
5629return
5630
5631/*:VRX         TM_Throbber_Trigger
5632*/
5633TM_Throbber_Trigger:
5634    pIdx = VRGet("Pict_Throbber","PicturePath")
5635    parse var pIdx '#' pidx
5636    pidx = pidx + 1
5637    if pidx = 23 then pidx = 11
5638    ok = VRSet("Pict_Throbber","PicturePath","#"pidx)
5639return
5640
5641/*:VRX         YesNo
5642*/
5643YesNo: procedure
5644    if arg(1) = 1 then answer = "Yes"
5645                  else answer = "No"
5646return answer
5647
5648/*:VRX         ZeroOne
5649*/
5650ZeroOne: procedure
5651    if translate(arg(1)) = "YES" then answer = 1
5652                                 else answer = 0
5653return answer
Note: See TracBrowser for help on using the repository browser.