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

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

GUITools: EVFSGUI: more client settings, SMBMON: made rpm/yum aware, cosmetics

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