Ignore:
Timestamp:
Sep 25, 2011, 7:05:11 PM (14 years ago)
Author:
Herwig Bauernfeind
Message:

GUI-Tools: EVFSGUI 2.5.x: More work done

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/guitools/shared/smbtree.vrs

    r638 r640  
    1010    if UserCred   = 'USERCRED'   | UserCred = '' | UserCred = '--user=%' then UserCred = '-N'
    1111    if ShowHidden = 'SHOWHIDDEN' | ShowHidden = '' then ShowHidden = 0
    12 
    1312    if BroadCast = 1 then BroadCast = '-b'; else BroadCast = ''
    1413
    15     say       '  detach 'samba.!smbtreeexe' 'BroadCast' -S 'debuglevel' 'UserCred' >'samba.!msg
    16     address cmd 'detach 'samba.!smbtreeexe' 'BroadCast' -S 'debuglevel' 'UserCred' >'samba.!msg
     14    say "  UserCred="UserCred
     15
     16    /* smbtree -S = List workgroups (domains) and servers of tree */
     17    say       '  detach 'samba.!smbtreeexe' 'BroadCast' -S 'UserCred' 'debuglevel' >'samba.!msg
     18    address cmd 'detach 'samba.!smbtreeexe' 'BroadCast' -S 'UserCred' 'debuglevel' >'samba.!msg
    1719
    1820    if BroadCast = '-b' then BroadCast = 1; else BroadCast = 0
     
    3133_RefreshTreeDisplay:
    3234    say time()' _RefreshTreeDisplay() started'
    33     say '  samba.!msg = "'samba.!msg'"'
     35
    3436    stat = stream(samba.!msg,'c','open read')
    3537    if stat <> "READY:" then return
    3638
    37     if UserCred = 'USERCRED' | UserCred = '' | UserCred = '--user=%' then do
    38         UserCred = '-N'
    39     end
    40 
     39    if UserCred = 'USERCRED' | UserCred = '' | UserCred = '--user=%' then UserCred = '-N'
    4140    if ShowHidden = 'SHOWHIDDEN' | ShowHidden = '' then ShowHidden = 0
     41    if BroadCast = 1 then BroadCast = '-b'; else BroadCast = ''
    4242
    4343    ok = VRset("TM_RefreshTreeDisplay","Enabled",0)
    44 /*  ok = VRSet("Main", "StatusText", NLVGetMessage(50)) */
    4544    ok = VRSet("CN_smbtree", 'Enabled', 0 )
    46 /*  ok = VRSet("Main", 'Pointer', 'Wait' ) */
    4745
    4846    ok = VRSet( "CN_smbtree", "Painting", 0  )
     
    5048
    5149    drop smbtree.
    52     drop smbtreeline.
    53 
    54     sl = 0
    55 
    56     do until lines(samba.!msg) = 0
    57         sl = sl + 1
    58         smbtreeline.sl = linein(samba.!msg)
    59     end
    60     smbtreeline.0 = sl
    61     ok = stream(samba.!msg,'c','close')
    62     ok = SysFileDelete(samba.!msg)
     50
     51    ok = file2stem(samba.!msg,"smbtreeline.")
    6352
    6453    do sl = 1 to smbtreeline.0
    6554        Header = c2x(left(smbtreeline.sl,3))
    6655        select
    67             when Header = "09095C" then do /* share - obsolete, we do that differently now see below! */
    68                 smbtreeline.sl = strip(smbtreeline.sl,,'09'x)
    69                 parse var smbtreeline.sl '\\'machine'\'share '09'x comment
    70                 machine = strip(machine)
    71                 share   = strip(share)
    72                 comment = strip(comment)
    73                 text = translate(share' 'comment)
    74                 res = _GuessIcon(text)
    75                 if VRGet("CN_smbtree","View") = "IconTree" then do
    76                     parent = smbtree.!machine
    77                     smbtree.!share = VRMethod( "CN_smbtree", "AddRecord",parent,, share||'0D0A'x||comment, res)
    78                     ok = VRMethod( "CN_smbtree", "SetRecordAttr", smbtree.!share, "ReadOnly", 1)
    79                     if pos("$", share) > 0 then ok = VRMethod( "CN_smbtree", "SetRecordAttr", smbtree.!share, "Visible", ShowHidden)
    80                 end
    81             end /* end of obsolete share code */
    82             when Header = "095C5C" then do /* Machine */
     56            when Header = "09095C" then nop /* share - obsolete, we only list domains and servers here */
     57            when Header = "095C5C" then do  /* machine */
    8358                smbtreeline.sl = strip(smbtreeline.sl,,'09'x)
    8459                parse var smbtreeline.sl '\\'machine '0909'x comment
     
    8661                comment = strip(comment)
    8762                if VRGet("CN_smbtree","View") = "IconTree" then parent = smbtree.!workgroup; else parent = ""
    88                 smbtree.!machine = VRMethod( "CN_smbtree", "AddRecord",parent,, machine||'0D0A'x||comment)
    8963                /* We make any machine as sleeping initially */
    90                 ok = VRMethod( "CN_smbtree", "SetRecordAttr", smbtree.!machine, "Icon","#61:PMWP.DLL")
    91                 ok = VRMethod( "CN_smbtree", "SetRecordAttr", smbtree.!machine, "ReadOnly", 1)
    92                 ok = VRMethod( "CN_smbtree", "SetFieldData",  smbtree.!machine, NBFH, machine, CommentFH, Comment, WorkGroupFH, CurWG)
     64                smbtree.!machine = _AddSleepingMachine(machine,comment,parent)
     65
    9366                ok = VRSet( "CN_smbtree", "Painting", 1  )
    9467                ok = VRSet( "CN_smbtree", "Painting", 0  )
    95                 if VRGet("CN_smbtree","View") = "Detail" then do
    96                     address cmd samba.!nmblookupexe' 'machine' 'debuglevel' -N >'samba.!msg
    97                     ipstr = ""
    98                     ip = ""
    99                     do until lines(samba.!msg) = 0
    100                         nmblookupline = linein(samba.!msg)
    101                         if pos(strip(machine)'<',nmblookupline) > 0 then do
    102                             parse var nmblookupline ip .
    103                             if pos(strip(ip), ipstr) = 0 then do
    104                                 ipstr = ipstr||ip','
    105                             end
    106                         end
    107                     end
    108                     ok = SysFileDelete(samba.!msg)
    109                     ipstr = strip(ipstr,,',')
     68
     69                if VRGet("CN_smbtree","View") <> "Detail" then do
     70                    /* Tree view */
     71                    call _RefreshShares
     72                end
     73                else do /* Fill records for details view */
     74                    ok = VRSet("Main", 'Pointer', 'Wait' )
     75                    /* Get all IP addresses of the machine */
     76                    IPStr = _GetMachineIP(machine)
    11077                    ok = VRMethod( "CN_smbtree", "SetFieldData", smbtree.!machine, IPFH, IPStr)
     78                    parse var IPStr MachineIP ',' .
     79                    if strip(MachineIP) = "" then MachineIP = machine
     80                    ok = VRSet("Main", 'Pointer', '<default>' )
     81
     82                    /* Find out OS, version */
     83                    say     '  'samba.!smbclientexe' -L "'machine'" 'UserCred' 'debuglevel' 2>'samba.!msg' 1>NUL'
     84                    address cmd samba.!smbclientexe' -L "'machine'" 'UserCred' 'debuglevel' 2>'samba.!msg' 1>NUL'
     85                    smbline = linein(samba.!msg)
    11186                    ok = stream(samba.!msg,'c','close')
    112                     if ip <> "" then do
    113                         address cmd samba.!smbclientexe' -L "'strip(machine)'" -I "'ip'" -N 'debuglevel' 2>'samba.!msg' 1>NUL'
    114                         smbline = linein(samba.!msg)
    115                         ok = stream(samba.!msg,'c','close')
    116                         parse var smbline "Domain=["WorkGroup"] OS=["OS"] Server=["Server"]"Rest
    117                         ok = VRMethod( "CN_smbtree", "SetFieldData", smbtree.!machine, OSFH, OS)
    118                         /* WorkGroupFH, Workgroup */
    119                         address cmd samba.!nmblookupexe' -A 'machine' 'debuglevel' -N >'samba.!msg
    120                         Master = ""
    121                         do until lines(samba.!msg) = 0
    122                             nmblookupline = linein(samba.!msg)
    123                             if pos('<1b>', nmblookupline) > 0 then Master = Master||"LMB," /* + */
    124                             if pos('<1d>', nmblookupline) > 0 then Master = Master||"DMB," /* * */
    125                             if pos('MAC',nmblookupline) > 0 then do
    126                                 parse var nmblookupline . '=' MAC
    127                                 MAC = strip(MAC)
    128                             end
    129                         end
    130                         Master= strip(Master,,',')
    131                         ok = stream(samba.!msg,'c','close')
    132                         ok = SysFileDelete(samba.!msg)
    133                         ok = VRMethod( "CN_smbtree", "SetFieldData", smbtree.!machine, MBFH, Master,MacFH,MAC)
    134                     end
    135                 end
    136                 else do
    137                     call _RefreshShares
    138                 end
    139             end
    140             when smbtreeline.sl = "" then nop
    141             otherwise do
    142                 say '  Workgroup: "'smbtreeline.sl'"'
     87                    parse var smbline "Domain=["WorkGroup"] OS=["OS"] Server=["Version"]"Rest
     88                    ok = VRMethod( "CN_smbtree", "SetFieldData", smbtree.!machine, OSFH, OS, VersionFH, Version, WorkgroupFH, WorkGroup)
     89
     90                    /* Find out server role, MAC */
     91                    MACRoles = _GetMachineMACRoles(machineIP)
     92                    parse var MACRoles MAC '|' Roles; drop MACRoles
     93                    ok = VRMethod( "CN_smbtree", "SetFieldData", smbtree.!machine, MBFH, Roles, MacFH,MAC)
     94                    if pos("PDC",Roles) > 0 then ok = VRMethod( "CN_smbtree", "SetRecordAttr", smbtree.!machine, "Icon","#63:PMWP.DLL")
     95                end
     96            end
     97            when smbtreeline.sl = "" then nop /* skip empty lines */
     98            otherwise do /* possibly a new workgroup */
     99                say '  Possible workgroup: "'smbtreeline.sl'"'
     100                /* check for eventual error messages */
    143101                if pos("RECEIVING",translate(smbtreeline.sl)) > 0 | pos("TDB(",translate(smbtreeline.sl)) > 0 then do
    144102                    Msg.Type = "W"
     
    146104                    call _ShowMsg
    147105                end
    148                 else do
     106                else do /* it is really a new workgroup */
    149107                    if VRGet("CN_smbtree","View") = "IconTree" then do
    150                         smbtree.!workgroup = VRMethod( "CN_smbtree", "AddRecord",,, smbtreeline.sl,"#62:PMWP.DLL")
    151                         ok = VRMethod( "CN_smbtree", "SetFieldData", smbtree.!workgroup, WorkGroupFH, smbtreeline.sl)
    152                         ok = VRMethod( "CN_smbtree", "SetRecordAttr", smbtree.!workgroup, "Collapsed", 0)
    153                         ok = VRMethod( "CN_smbtree", "SetRecordAttr", smbtree.!workgroup, "ReadOnly", 1)
    154                         ok = VRMethod( "CN_smbtree", 'SetRecordAttr', smbtree.!workgroup, "UserData", "WORKGROUP|")
     108                        smbtree.!workgroup = _AddWorkGroup(smbtreeline.sl)
    155109                    end
    156110                    CurWG = smbtreeline.sl
     
    172126_RefreshShares:
    173127    say time()' _RefreshShares() started'
    174     /* RefreshID = RANDOM() */
     128
    175129    smbmachine = TempDir||"smbmachine."||machine
    176130    MaxSmbClient = 32 /* Do not run more than MaxSmbClient instances of smbclient.exe at the same time */
     
    195149    if UserCred   = 'USERCRED'   | UserCred = '' | UserCred = '--user=%' then UserCred = '-N'
    196150
    197     say       '  detach 'samba.!smbclientexe' -L "'strip(machine)'" 'UserCred' 'debuglevel' 1>'smbmachine' 2>NUL'
    198     address cmd 'detach 'samba.!smbclientexe' -L "'strip(machine)'" 'UserCred' 'debuglevel' 1>'smbmachine' 2>NUL'
     151    say       '  detach 'samba.!smbclientexe' -L "'machine'" 'UserCred' 'debuglevel' 2>'smbmachine' 1>&2'
     152    address cmd 'detach 'samba.!smbclientexe' -L "'machine'" 'UserCred' 'debuglevel' 2>'smbmachine' 1>&2'
    199153
    200154    if UserCred = '-N' then UserCred = ''
     
    213167
    214168    ok = SysFileTree(Tempdir||'smbmachine.*',smbmachine.,'FO')
    215     say '  'smbmachine.0' file(s) to process.'
    216 
    217169    if smbmachine.0 = 0 then do /* we are done, no more files around, cleanup, disable Timer and exit */
    218170        RefreshMode = ""
     171        ok = VRset("TM_RefreshTreeDisplay","Enabled",0)
    219172        ok = VRSet("CN_smbtree","Enabled", 1)
    220         ok = VRset("TM_RefreshTreeDisplay","Enabled",0)
    221         ok = VRSet( "CN_smbtree", "Painting", 0  )
    222         ok = VRSet( "CN_smbtree", "Painting", 1  )
     173        ok = VRSet("CN_smbtree", "Painting", 0  )
     174        ok = VRSet("CN_smbtree", "Painting", 1  )
    223175        say time()' _AddSharesDisplay() completed'
    224176        return /* exit here */
    225177    end
     178    else say '  'smbmachine.0' file(s) to process.'
    226179
    227180    if UserCred   = 'USERCRED'   | UserCred = '' | UserCred = '--user=%' then UserCred = '-N'
     
    229182
    230183    do I = 1 to smbmachine.0
    231         say ' Going for "'smbmachine.I'"'
     184        call charout , '  Going for "'smbmachine.I'", got '
    232185        if VRIsValidObject("DT_STATUSBAR") then ok = VRSet("DT_STATUSBAR","Caption", VRGet("DT_STATUSBAR","Caption")||'.')
    233186        stat = stream(smbmachine.I,'c','open read')
    234 
     187        say '"'stat'"'
     188
     189        infoline = ""
    235190        if stat = "READY:" then do /* we found a readable output file */
    236191            OneWorkGroupOnly = 0
    237             /* Machine = VRParseFilename(smbmachine.I,'E') */
     192           
    238193            Machine = substr(smbmachine.I,pos('.',smbmachine.I)+1)
    239194
    240195            smbtree.!machine = _GetMachinehandle(Machine)
    241             say '  Machine (handle) = "'machine'" ('smbtree.!machine')'
    242 
     196           
    243197            if smbtree.!machine = "" then do /* invalid (old) file */
    244198                say time()' _AddSharesDisplay() exit with Invalid file found (no corresponding machine)'
     
    247201                iterate
    248202            end
     203            line = linein(smbmachine.I) /* PID line */
    249204            line = linein(smbmachine.I)
     205            if pos('creating lame', line) > 0 then do
     206                line = linein(smbmachine.I)
     207                line = linein(smbmachine.I)
     208            end
     209            if pos('Server=[', line) > 0 then do
     210                infoline = linein(smbmachine.I)
     211                parse var infoline "Domain=["WorkGroup"] OS=["OS"] Server=["Server"]"Rest
     212                ok = VRMethod( "CN_smbtree", "SetFieldData", smbtree.!machine, OSFH, OS, VersionFH, Server)
     213                line = linein(smbmachine.I)
     214            end
    250215            say '  Answer "'line'"'
    251216            ok = VRMethod('CN_smbtree', 'SetRecordAttr', smbtree.!machine, 'UserData', "SERVER|"||strip(line))
     
    321286                wgh = _GetMachinehandle(workgroup)
    322287                if wgh = "" then do /* The machine appears to be in a new workgroup - add it as well */
    323                     /* NOTE: This should be obsolete now because the list of available
    324                        workgroups should always have been updated before we get here */
    325                     wgh = VRMethod( "CN_smbtree", "AddRecord",,, workgroup,"#62:PMWP.DLL")
    326                     ok = VRMethod( "CN_smbtree", "SetFieldData", wgh, WorkGroupFH, workgroup)
    327                     ok = VRMethod( "CN_smbtree", "SetRecordAttr", wgh, "Collapsed", 0)
    328                     ok = VRMethod( "CN_smbtree", "SetRecordAttr", wgh, "ReadOnly", 1)
    329                     ok = VRMethod( "CN_smbtree", 'SetRecordAttr', wgh, "UserData", "WORKGROUP|")
     288                    /* NOTE: This should be obsolete now because the list of available     */
     289                    /*       workgroups should always have been updated before we get here */
     290                    wgh = _AddWorkGroup(workgroup)
    330291                end
    331292                /* we only do this for machines with empty parent (=workgroup) handle */
     
    339300                    /* There are multiple workgroups, we need additional */
    340301                    /* measures to find out which is our workgroup       */
    341                     say     '  'samba.!smbclientexe' -L "'Machine'" -N 'debuglevel' 2>'samba.!msg' 1>NUL'
    342                     address cmd samba.!smbclientexe' -L "'Machine'" -N 'debuglevel' 2>'samba.!msg' 1>NUL'
    343                     infoline = linein(samba.!msg)
    344                     if word(infoline,1) = "creating" then do /* upcase tables are missing */
    345                         say "Missing upcase tables detected!"
     302                    if infoline <> "" then do
     303                        say     '  'samba.!smbclientexe' -L "'Machine'" -N 'debuglevel' 2>'samba.!msg' 1>NUL'
     304                        address cmd samba.!smbclientexe' -L "'Machine'" -N 'debuglevel' 2>'samba.!msg' 1>NUL'
    346305                        infoline = linein(samba.!msg)
    347                         infoline = linein(samba.!msg)
     306
     307                        if word(infoline,1) = "creating" then do /* upcase tables are missing */
     308                            say "Missing upcase tables detected!"
     309                            infoline = linein(samba.!msg)
     310                            infoline = linein(samba.!msg)
     311                        end
     312                        IF options.!debug == 1 THEN say '  Response = "'Infoline'"'
     313                        ok = stream(samba.!msg,'c','close')
     314                        ok = SysFileDelete(samba.!msg)
    348315                    end
    349                     IF options.!debug == 1 THEN say '  Response = "'Infoline'"'
    350                     ok = stream(samba.!msg,'c','close')
    351                     ok = SysFileDelete(samba.!msg)
    352 
    353                     parse var infoline "Domain=["WorkGroup"] "Rest
     316
     317                    parse var infoline "Domain=["WorkGroup"] OS=["OS"] Server=["Server"]"Rest
     318
    354319                    wgh = _GetMachinehandle(workgroup)
    355320                    if wgh <> "" & VRMethod('CN_smbtree', 'GetRecordAttr', smbtree.!machine, 'Parent') = "" then do
     
    358323                end
    359324                else do
    360                     /* The machine does not allow browsing and does not report a workgroup */
    361                     say '  "'Machine'" does not allow browsing. Unable to determine workgroup.'
    362                 end
    363             end
     325                    /* The machine does not allow browsing and does not report a workgroup here */
     326                    say '  "'Machine'" does not allow browsing.'
     327                end
     328            end
     329
     330            ok = VRSet("Main", 'Pointer', 'Wait' )
     331            /* Find out IPs */
     332            IPStr = _GetMachineIP(machine)
     333            ok = VRMethod( "CN_smbtree", "SetFieldData", smbtree.!machine, IPFH, IPStr)
     334            parse var IPStr MachineIP ',' .
     335            if strip(MachineIP) = "" then MachineIP = machine
     336            ok = VRSet("Main", 'Pointer', '<default>' )
     337
     338            /* Find out server role, MAC */
     339            MACRoles = _GetMachineMACRoles(machineIP)
     340            parse var MACRoles MAC '|' Roles; drop MACRoles
     341            ok = VRMethod( "CN_smbtree", "SetFieldData", smbtree.!machine, MBFH, Roles, MacFH,MAC)
     342            if pos("PDC",Roles) > 0 then ok = VRMethod( "CN_smbtree", "SetRecordAttr", smbtree.!machine, "Icon","#63:PMWP.DLL")
    364343
    365344            say time()' _AddSharesDisplay() success and cleanup'
     
    368347            if ok <> 0 then say '  Failure 'ok' deleting "'smbmachine.I'"!'
    369348        end
    370         else say '  Got "'stat'" for "'smbmachine.I'"'
    371349    end
    372350
     
    398376    end
    399377    if match = 0 then rh.I = "" /* return an empty handle, if there was no match */
     378    say '  Handle for "'Machine'" = "'rh.I'"'
    400379return rh.I
    401380
     
    407386    if BroadCast = 1 then BroadCast = '-b'; else BroadCast = ''
    408387
    409     say         samba.!smbtreeexe' 'BroadCast' -D 'debuglevel' 'UserCred' >'samba.!msg
     388    say     '  'samba.!smbtreeexe' 'BroadCast' -D 'debuglevel' 'UserCred' >'samba.!msg
    410389    address cmd samba.!smbtreeexe' 'BroadCast' -D 'debuglevel' 'UserCred' >'samba.!msg
    411390
     
    413392    if UserCred = '-N' then UserCred = ''
    414393
    415     drop wgline.
    416 
    417     sl = 0
    418 
    419     do until lines(samba.!msg) = 0
    420         sl = sl + 1
    421         wgline.sl = linein(samba.!msg)
    422     end
    423     wgline.0 = sl
    424     ok = stream(samba.!msg,'c','close')
    425     ok = SysFileDelete(samba.!msg)
    426 
    427     do sl = 1 to wgline.0
    428        if pos("RECEIVING",translate(wgline.sl)) > 0 | pos("TDB(",translate(wgline.sl)) > 0 then do
    429             iterate /* We ignore errors here */
    430         end
    431         workgroup = wgline.sl
     394    ok = File2Stem(samba.!msg,"workgroups.")
     395    do I = 1 to workgroups.0
     396        workgroup = translate(workgroups.I)
     397        if pos("RECEIVING",workgroup) > 0 | pos("TDB(",workgroup) > 0 then iterate /* We ignore errors here */
    432398        wgh = _GetMachinehandle(workgroup)
    433         if wgh = "" then do /* A new workgroup was found -- add it */
    434             wgh = VRMethod( "CN_smbtree", "AddRecord",,, workgroup,"#62:PMWP.DLL")
    435             ok = VRMethod( "CN_smbtree", "SetFieldData", wgh, WorkGroupFH, workgroup)
    436             ok = VRMethod( "CN_smbtree", "SetRecordAttr", wgh, "Collapsed", 0)
    437             ok = VRMethod( "CN_smbtree", "SetRecordAttr", wgh, "ReadOnly", 1)
    438             ok = VRMethod( "CN_smbtree", 'SetRecordAttr', wgh, "UserData", "WORKGROUP|")
    439         end
     399        if wgh = "" then wgh = _AddWorkGroup(workgroup) /* A new workgroup was found -- add it */
    440400    end
    441401    say time()' _RefreshWorkgroups() done'
    442402return
    443403
     404/*:VRX         _AddWorkgroup
     405*/
     406_AddWorkGroup: procedure expose WorkGroupFH
     407    workgroup = arg(1)
     408    wgh= VRMethod( "CN_smbtree", "AddRecord",,, workgroup,"#62:PMWP.DLL")
     409    ok = VRMethod( "CN_smbtree", "SetFieldData",  wgh, WorkGroupFH, workgroup)
     410    ok = VRMethod( "CN_smbtree", "SetRecordAttr", wgh, "Collapsed", 0)
     411    ok = VRMethod( "CN_smbtree", "SetRecordAttr", wgh, "ReadOnly", 1)
     412    ok = VRMethod( "CN_smbtree", 'SetRecordAttr', wgh, "UserData", "WORKGROUP|")
     413return wgh
     414
     415/*:VRX         _AddSleepingMachine
     416*/
     417_AddSleepingMachine: procedure expose WorkGroupFH NBFH CommentFH
     418    machine = arg(1)
     419    comment = arg(2)
     420    parent  = arg(3)
     421    mh = VRMethod( "CN_smbtree", "AddRecord",parent,, machine||'0D0A'x||comment)
     422    ok = VRMethod( "CN_smbtree", "SetFieldData",  mh, NBFH, machine, CommentFH, comment)
     423    ok = VRMethod( "CN_smbtree", "SetRecordAttr", mh, "Icon","#61:PMWP.DLL")
     424    ok = VRMethod( "CN_smbtree", "SetRecordAttr", mh, "ReadOnly", 1)
     425    ok = VRMethod( "CN_smbtree", "SetRecordAttr", mh, "Collapsed", 1)
     426    ok = VRMethod( "CN_smbtree", 'SetRecordAttr', mh, "UserData", "SERVER|")
     427    if parent <> "" then do
     428        WGName  = translate(VRMethod("CN_smbtree","GetRecordAttr",parent,"Caption"))
     429        parse var WGName  WGName '0D0A'x .
     430        ok = VRMethod( "CN_smbtree", "SetFieldData",  mh, WorkgroupFH, strip(WGName))
     431    end
     432return mh
     433
     434/*:VRX         _GetMachineIP
     435*/
     436_GetMachineIP: procedure expose debuglevel samba.
     437    /* Get all IP addresses of the machine */
     438    machine = arg(1)
     439    say     '  'samba.!nmblookupexe' 'machine' 'debuglevel' >'samba.!msg
     440    address cmd samba.!nmblookupexe' 'machine' 'debuglevel' >'samba.!msg
     441    ok = file2stem(samba.!msg,"nmblookup.")
     442    ipstr = ""; ip = ""
     443    do i = 1 to nmblookup.0
     444        if pos(strip(machine)'<',nmblookup.i) = 0 then iterate
     445        parse var nmblookup.i ip .
     446        if pos(strip(ip), ipstr) = 0 then ipstr = ipstr||ip','
     447    end
     448    ipstr = strip(ipstr,,',')
     449return IpStr
     450
     451/*:VRX         _GetMachineRole
     452*/
     453_GetMachineMACRoles: procedure expose debuglevel samba.
     454    machine = arg(1) /* May be name or IP */
     455    say     '  'samba.!nmblookupexe' -A 'machine' 'debuglevel' >'samba.!msg
     456    address cmd samba.!nmblookupexe' -A 'machine' 'debuglevel' >'samba.!msg
     457    ok = file2stem(samba.!msg,"nmblookup.")
     458    Roles = ""
     459    MAC = 'xx-xx-xx-xx-xx-xx'
     460    do I = 1 to nmblookup.0
     461        select
     462            when pos('<1c>', nmblookup.I) > 0 then Roles = Roles||"PDC," /* # */
     463            when pos('<1b>', nmblookup.I) > 0 then Roles = Roles||"LMB," /* + */
     464            when pos('<1d>', nmblookup.I) > 0 then Roles = Roles||"DMB," /* * */
     465            when pos('MAC',  nmblookup.I) > 0 then do
     466                parse var nmblookup.I . '=' MAC
     467                MAC = strip(MAC)
     468            end
     469            otherwise nop
     470        end
     471    end
     472    Roles = strip(Roles,,',')
     473    if Roles = "" then Roles = "Workstation"
     474return MAC'|'Roles
     475
     476/*:VRX         file2stem
     477*/
     478file2stem:
     479    msgfile = arg(1)
     480    msgstem = arg(2)
     481    if right(msgstem,1) <> '.' then msgstem = msgstem'.'
     482    say '  file2stem("'msgfile'","'msgstem'")'
     483    dyn = 'drop 'msgstem
     484    interpret dyn
     485    stemcount = 0
     486    do while lines(msgfile) > 0
     487        stemcount = stemcount + 1
     488        inline = linein(msgfile)
     489        if pos('creating lame',inline) > 0 then do
     490            stemcount = stemcount - 1
     491            iterate
     492        end
     493        dyn = msgstem||stemcount' = inline'
     494        interpret dyn
     495    end
     496    dyn = msgstem||"0 = "stemcount
     497    interpret dyn
     498    ok = stream(msgfile,'c','close')
     499    ok = SysFileDelete(msgfile)
     500    drop msgfile msgstem
     501return stemcount
Note: See TracChangeset for help on using the changeset viewer.