home *** CD-ROM | disk | FTP | other *** search
/ PC-Test Pro / PCTESTPRO.iso / filetool / initme / entp / inityme.inc < prev    next >
Encoding:
MarxMenu script  |  1996-01-18  |  17.6 KB  |  1,029 lines

  1. Comment
  2. ==================================================================
  3.  
  4. This section contains the logic for processing IF statements. I'm
  5. writing an interpreter language in MarxMenu. You can add your own
  6. conditionals for IniTyme here.
  7.  
  8. ==================================================================
  9. EndComment
  10.  
  11. Var
  12.   SearchList
  13.   SearchListNot
  14.   HardwareList
  15.   HardwareRead
  16.   GroupList
  17.   DsGroupList
  18.   GroupsRead
  19.   GettingString
  20.   DsConnectionType
  21.   DsIniArray
  22.   DsContext
  23.   DsUserTyped
  24.   DsUserTypeless
  25.   DsRan
  26.   DsFileName
  27.   Assume
  28.   ExitFlag
  29.  
  30.  
  31. Procedure PushStack (V)
  32.    AppendArray(Stack,V)
  33. EndProc
  34.  
  35.  
  36. Procedure PopStack
  37.    if NumberOfElements(Stack) = 0
  38.       Error ('Stack Empty!',LoopIndex)
  39.    endif
  40.    Return PopArray(Stack)
  41. EndProc
  42.  
  43.  
  44. Procedure Nugget
  45. var Word P FirstChar
  46.    Trim(IfLine)
  47.    FirstChar = Left(IfLine,1)
  48.    Word = NextWord(IfLine)
  49.  
  50.    if FirstChar Within('0','9')
  51.       PushStack(Value(Word))
  52.  
  53.    elseif (FirstChar = '"') or (FirstChar = "'")
  54.       PushStack(Word)
  55.  
  56.    else
  57.       P = Hash('!' + Word)
  58.       if P <> Nil
  59.          Run P
  60.       else
  61.          if GettingString
  62.             PushStack(Word)
  63.          else
  64.             Error ('Word "' + Word + '" not Recognized!',LoopIndex)
  65.          endif
  66.       endif
  67.    endif
  68.    GettingString Off
  69.  
  70. EndProc
  71.  
  72.  
  73. Procedure Interpret
  74.    while IfLine > ''
  75.       Nugget
  76.    endwhile
  77. EndProc
  78.  
  79.  
  80. Procedure ExecValueOf
  81. var V P
  82.    V = UpperCase(NextString)
  83.    if Right(V,1) <> '=' then V = V + '='
  84.    P = FindLine(V)
  85.    if P = 0
  86.       PushStack('')
  87.    else
  88.       PushStack RightOfEqual Orig[P]
  89.    endif
  90. EndProc
  91.  
  92.  
  93. Procedure ExecValue
  94.    PushStack(Value(NextParam))
  95. EndProc
  96.  
  97.  
  98. Procedure ExecString
  99.    PushStack(Str(NextParam))
  100. EndProc
  101.  
  102.  
  103. Procedure NextParam
  104.    Nugget
  105.    Return PopStack
  106. EndProc
  107.  
  108.  
  109. Procedure NextString
  110.    GettingString On
  111.    Nugget
  112.    Return PopStack
  113. EndProc
  114.  
  115.  
  116. Procedure ExecLeftParen
  117. var OldParenLevel
  118.    OldParenLevel = ParenLevel
  119.    ParenLevel = ParenLevel + 1
  120.    repeat
  121.       Nugget
  122.    until ParenLevel = OldParenLevel
  123. EndProc
  124.  
  125.  
  126. Procedure ExecRightParen
  127.    ParenLevel = ParenLevel - 1
  128. EndProc
  129.  
  130.  
  131. Procedure ExecWrite
  132.    Interpret
  133.    Loop Stack
  134.       Write LoopVal
  135.    EndLoop
  136.    dispose(Stack)
  137. EndProc
  138.  
  139.  
  140. Procedure ExecWriteln
  141.    ExecWrite
  142.    Writeln
  143. EndProc
  144.  
  145.  
  146. Procedure ExecIf
  147. var B
  148.    Interpret
  149.  
  150.    ;- Multiple conditionals are ANDed
  151.  
  152.    B = PopStack
  153.    while NumberOfElements Stack > 0
  154.       B = B and PopStack
  155.    endwhile
  156.  
  157.    if not B
  158.       LoopIndex = GoToList[LoopIndex]
  159.    endif
  160. EndProc
  161.  
  162.  
  163. Procedure ExecGoTo
  164.    LoopIndex = GoToList[LoopIndex]
  165. EndProc
  166.  
  167.  
  168. Procedure DsIni
  169. var X St Done
  170.  
  171.    if DsRan then Return
  172.  
  173.    Swapping On
  174.    Execute 'DSINI.EXE ' + DsFileName
  175.  
  176.    if TestMode
  177.       if not ExistFile(DsFileName)
  178.          DsFileName = 'DS.INI'
  179.       endif
  180.    endif
  181.  
  182.    ReadTextFile(DsFileName,DsIniArray)
  183.    if DsFileName <> 'DS.INI' then DelFile(DsFileName)
  184.  
  185.    X = PosInListLeft('CONNECTIONTYPE',DsIniArray)
  186.    if X > 0
  187.       DsConnectionType = RightOfEqual(DsIniArray[X])
  188.    endif
  189.  
  190.    if DsConnectionType = 'NDS'
  191.  
  192.       X = PosInListLeft('CONTEXT',DsIniArray)
  193.       if X > 0
  194.          DsContext = RightOfEqual(DsIniArray[X])
  195.       endif
  196.  
  197.       X = PosInListLeft('USERTYPELESS',DsIniArray)
  198.       if X > 0
  199.          DsUserTypeless = RightOfEqual(DsIniArray[X])
  200.       endif
  201.  
  202.       X = PosInListLeft('USERTYPED',DsIniArray)
  203.       if X > 0
  204.          DsUserTyped = RightOfEqual(DsIniArray[X])
  205.       endif
  206.  
  207.       X = PosInList('[GroupsImIn]',DsIniArray)
  208.       if X > 0
  209.          repeat
  210.             X = X + 1
  211.             St = DsIniArray[X]
  212.             Done = (St = '') or (St StartsWith '[')
  213.             if not Done
  214.                AppendArray(DsGroupList,RightOfEqual(St))
  215.             endif
  216.          until X = NumberOfElements(DsIniArray) or Done
  217.       endif
  218.  
  219.    endif
  220.  
  221.    dispose(DsIniArray)
  222.    DsRan = True
  223. EndProc
  224.  
  225.  
  226. Procedure ReadGroupList
  227. var St
  228.    if GroupsRead then Return
  229.    if NovConnection > 0
  230.       NovReadGroups(NovLoginName,GroupList)
  231.    else
  232.       St = %GROUPS%
  233.       if St = ''
  234.          St = %S_GROUPS%
  235.       endif
  236.       if St > ''
  237.          while St > ''
  238.             AppendArray(GroupList,UpperCase(NextWord(St)))
  239.          endwhile
  240.       endif
  241.    endif
  242.    GroupsRead = True
  243. EndProc
  244.  
  245.  
  246. Procedure AddHW (St)
  247.    AppendArray(HardwareList,St)
  248. EndProc
  249.  
  250.  
  251. Procedure SetupHardwareList
  252. var C Dev
  253.    if HardwareRead then Return
  254.    if ColorScreen
  255.       AddHW('COLOR')
  256.    else
  257.       AddHW('MONO')
  258.    endif
  259.  
  260.    C = DisplayType
  261.    if C = 0
  262.       AddHW('HERC')
  263.  
  264.    elseif C = 1
  265.       AddHW('CGA')
  266.  
  267.    elseif C = 2
  268.       AddHW('MCGA')
  269.  
  270.    elseif C = 3
  271.       AddHW('EGA')
  272.  
  273.    elseif C = 4
  274.       AddHW('VGA')
  275.  
  276.    endif
  277.  
  278.    C = CpuClass
  279.    if C = 1
  280.       AddHW('8086')
  281.  
  282.    elseif C = 2
  283.       AddHW('80286')
  284.  
  285.    elseif C = 3
  286.       AddHW('80386')
  287.  
  288.    elseif C = 4
  289.       AddHW('80486')
  290.  
  291.    endif
  292.  
  293.    Devices(Dev)
  294.    Loop Dev
  295.       AddHW(LoopVal)
  296.    EndLoop
  297.  
  298.    if EmsInstalled then AddHW('EMS')
  299.    if XmsInstalled then AddHW('XMS')
  300.    if Mouse then AddHW('MOUSE')
  301.    if McpClass > 0 then AddHW('MATH')
  302.    if DpmiInstalled then AddHW('DPMI')
  303.    if VcpiInstalled then AddHW('VCPI')
  304.  
  305.    SortArray(HardwareList)
  306. {
  307.    Writeln
  308.    Loop HardwareList
  309.       Writeln LoopVal
  310.    EndLoop
  311.    Writeln
  312. }
  313.    HardwareRead
  314. EndProc
  315.  
  316.  
  317. Procedure MakeSearchList
  318. var P St St2
  319.    if IfLine StartsWith '='
  320.       delete(IfLine,1,1)
  321.       Trim(IfLine)
  322.    endif
  323.  
  324.    P = Pos(' ',IfLine)
  325.    if P = 0 then P = Length(IfLine) + 1
  326.  
  327.    St = left(IfLine,P-1)
  328.    delete(IfLine,1,P)
  329.  
  330.    dispose(SearchList)
  331.    dispose(SearchListNot)
  332.  
  333.    while St > ''
  334.       St2 = Uppercase(NextWordDelim(St,',;'))
  335.       if St2 StartsWith '!'
  336.          delete(St2,1,1)
  337.          AppendArray(SearchListNot,St2)
  338.       else
  339.          AppendArray(SearchList,St2)
  340.       endif
  341.    endwhile
  342. EndProc
  343.  
  344.  
  345. Procedure ExecFile
  346.    MakeSearchList
  347.  
  348.    Assume False
  349.    Loop SearchListNot
  350.       Assume True
  351.       if ExistFile(LoopVal)
  352.          PushStack False
  353.          Return
  354.       endif
  355.    EndLoop
  356.  
  357.    Loop SearchList
  358.       Assume False
  359.       if ExistFile(LoopVal)
  360.          PushStack True
  361.          Return
  362.       endif
  363.    EndLoop
  364.  
  365.    PushStack Assume
  366. EndProc
  367.  
  368.  
  369. Procedure ExecDir
  370.    MakeSearchList
  371.  
  372.    Assume False
  373.    Loop SearchListNot
  374.       Assume True
  375.       if ExistDir(LoopVal)
  376.          PushStack False
  377.          Return
  378.       endif
  379.    EndLoop
  380.  
  381.    Loop SearchList
  382.       Assume False
  383.       if ExistDir(LoopVal)
  384.          PushStack True
  385.          Return
  386.       endif
  387.    EndLoop
  388.  
  389.    PushStack Assume
  390. EndProc
  391.  
  392.  
  393. Procedure ExecContext
  394.    DsIni
  395.    MakeSearchList
  396.  
  397.    Assume False
  398.    Loop SearchListNot
  399.       Assume True
  400.       if LoopVal = DsContext
  401.          PushStack False
  402.          Return
  403.       endif
  404.    EndLoop
  405.  
  406.    Loop SearchList
  407.       Assume False
  408.       if LoopVal = DsContext
  409.          PushStack True
  410.          Return
  411.       endif
  412.    EndLoop
  413.  
  414.    PushStack Assume
  415. EndProc
  416.  
  417.  
  418. Procedure FindGroup (Group)
  419.    if PosInList(Group,GroupList) > 0
  420.       Return True
  421.    endif
  422.    Return False
  423. EndProc
  424.  
  425.  
  426. Procedure ExecGroups
  427.    ReadGroupList
  428.    MakeSearchList
  429.  
  430.    Assume False
  431.    Loop SearchListNot
  432.       Assume True
  433.       if FindGroup(LoopVal)
  434.          PushStack False
  435.          Return
  436.       endif
  437.    EndLoop
  438.  
  439.    Loop SearchList
  440.       Assume False
  441.       if FindGroup(LoopVal)
  442.          PushStack True
  443.          Return
  444.       endif
  445.    EndLoop
  446.  
  447.    PushStack Assume
  448. EndProc
  449.  
  450.  
  451. Procedure FindDsGroup (Group)
  452.    if PosInList(Group,DsGroupList) > 0
  453.       Return True
  454.  
  455.    elseif PosInListLeft('CN=' + Group + '.',DsGroupList) > 0
  456.       Return True
  457.  
  458.    elseif PosInListLeft(Group + '.',DsGroupList) > 0
  459.       Return True
  460.  
  461.    endif
  462.    Return False
  463. EndProc
  464.  
  465.  
  466. Procedure ExecDsGroups
  467.    DsIni
  468.    MakeSearchList
  469.  
  470.    Assume False
  471.    Loop SearchListNot
  472.       Assume True
  473.       if FindDsGroup(LoopVal)
  474.          PushStack False
  475.          Return
  476.       endif
  477.    EndLoop
  478.  
  479.    Loop SearchList
  480.       Assume False
  481.       if FindDsGroup(LoopVal)
  482.          PushStack True
  483.          Return
  484.       endif
  485.    EndLoop
  486.  
  487.    PushStack Assume
  488. EndProc
  489.  
  490.  
  491. Procedure ExecInGroup
  492. var Group
  493.    ReadGroupList
  494.    Group = UpperCase(NextWord(IfLine))
  495.    PushStack(FindGroup(Group))
  496. EndProc
  497.  
  498.  
  499. Procedure ExecDsInGroup
  500. var Group
  501.    DsIni
  502.    Group = UpperCase(NextWord(IfLine))
  503.    PushStack(FindDsGroup(Group))
  504. EndProc
  505.  
  506.  
  507. Procedure ExecHardware
  508.    SetupHardwareList
  509.    MakeSearchList
  510.  
  511.    Assume False
  512.    Loop SearchListNot
  513.       Assume True
  514.       if PosInSortedList(LoopVal,HardwareList) > 0
  515.          PushStack False
  516.          Return
  517.       endif
  518.    EndLoop
  519.  
  520.    Loop SearchList
  521.       Assume False
  522.       if PosInSortedList(LoopVal,HardwareList) > 0
  523.          PushStack True
  524.          Return
  525.       endif
  526.    EndLoop
  527.  
  528.    PushStack Assume
  529. EndProc
  530.  
  531.  
  532. Procedure ExecStation
  533. var S
  534.    if NovConnection > 0
  535.       S = NovStationAddress
  536.    else
  537.       S = %STATION%
  538.       if S = ''
  539.          S = %S_STATION%
  540.       endif
  541.    endif
  542.    PushStack(S)
  543. EndProc
  544.  
  545.  
  546. Procedure ExecStations
  547. var S
  548.    if NovConnection > 0
  549.       S = NovStationAddress
  550.    else
  551.       S = %STATION%
  552.       if S = ''
  553.          S = %S_STATION%
  554.       endif
  555.    endif
  556.    MakeSearchList
  557.  
  558.    if S = ''
  559.       PushStack False
  560.       Return
  561.    endif
  562.  
  563.    Assume False
  564.    Loop SearchListNot
  565.       Assume True
  566.       if pos(LoopVal,S) > 0
  567.          PushStack False
  568.          Return
  569.       endif
  570.    EndLoop
  571.  
  572.    Loop SearchList
  573.       Assume False
  574.       if pos(LoopVal,S) > 0
  575.          PushStack True
  576.          Return
  577.       endif
  578.    EndLoop
  579.  
  580.    PushStack Assume
  581. EndProc
  582.  
  583.  
  584. Procedure ExecNetwork
  585. var N
  586.    if NovConnection > 0
  587.       N = 'NOVELL'
  588.    else
  589.       N = %NETWORK%
  590.       if N = ''
  591.          N = %S_NETWORK%
  592.       endif
  593.    endif
  594.    MakeSearchList
  595.  
  596.    if N = ''
  597.       PushStack False
  598.       Return
  599.    endif
  600.  
  601.    Assume False
  602.    Loop SearchListNot
  603.       Assume True
  604.       if LoopVal = N
  605.          PushStack False
  606.          Return
  607.       endif
  608.    EndLoop
  609.  
  610.    Loop SearchList
  611.       Assume False
  612.       if LoopVal = N
  613.          PushStack True
  614.          Return
  615.       endif
  616.    EndLoop
  617.  
  618.    PushStack Assume
  619. EndProc
  620.  
  621.  
  622. Procedure ExecUsers
  623. var U
  624.    if NovConnection > 0
  625.       U = NovLoginName
  626.    else
  627.       U = %USER%
  628.       if U = ''
  629.          U = %S_USER%
  630.       endif
  631.    endif
  632.  
  633.    MakeSearchList
  634.  
  635.    if U = ''
  636.       PushStack False
  637.       Return
  638.    endif
  639.  
  640.    Assume False
  641.    Loop SearchListNot
  642.       Assume True
  643.       if LoopVal = U
  644.          PushStack False
  645.          Return
  646.       endif
  647.    EndLoop
  648.  
  649.    Loop SearchList
  650.       Assume False
  651.       if LoopVal = U
  652.          PushStack True
  653.          Return
  654.       endif
  655.    EndLoop
  656.  
  657.    PushStack Assume
  658. EndProc
  659.  
  660.  
  661. ;- Not Supported
  662. Procedure ExecRev
  663.    IfLine = ''
  664.    dispose(Stack)
  665.    PushStack True
  666. EndProc
  667.  
  668.  
  669. Procedure ExecPlus
  670. var A B
  671.    B = NextParam
  672.    A = PopStack
  673.    PushStack(A + B)
  674. EndProc
  675.  
  676.  
  677. Procedure ExecMinus
  678. var A B
  679.    B = NextParam
  680.    A = PopStack
  681.    PushStack(A - B)
  682. EndProc
  683.  
  684.  
  685. Procedure ExecTimes
  686. var A B
  687.    B = NextParam
  688.    A = PopStack
  689.    PushStack(A * B)
  690. EndProc
  691.  
  692.  
  693. Procedure ExecDiv
  694. var A B
  695.    B = NextParam
  696.    A = PopStack
  697.    PushStack(A / B)
  698. EndProc
  699.  
  700.  
  701. Procedure ExecEqual
  702. var A B
  703.    B = NextParam
  704.    A = PopStack
  705.    PushStack(A = B)
  706. EndProc
  707.  
  708.  
  709. Procedure ExecNotEqual
  710. var A B
  711.    B = NextParam
  712.    A = PopStack
  713.    PushStack(A <> B)
  714. EndProc
  715.  
  716.  
  717. Procedure ExecGreater
  718. var A B
  719.    B = NextParam
  720.    A = PopStack
  721.    PushStack(A > B)
  722. EndProc
  723.  
  724.  
  725. Procedure ExecLess
  726. var A B
  727.    B = NextParam
  728.    A = PopStack
  729.    PushStack(A < B)
  730. EndProc
  731.  
  732.  
  733. Procedure ExecGreaterEqual
  734. var A B
  735.    B = NextParam
  736.    A = PopStack
  737.    PushStack(A >= B)
  738. EndProc
  739.  
  740.  
  741. Procedure ExecLessEqual
  742. var A B
  743.    B = NextParam
  744.    A = PopStack
  745.    PushStack(A <= B)
  746. EndProc
  747.  
  748.  
  749. Procedure ExecAnd
  750. var A B
  751.    B = NextParam
  752.    A = PopStack
  753.    PushStack(A and B)
  754. EndProc
  755.  
  756.  
  757. Procedure ExecOr
  758. var A B
  759.    B = NextParam
  760.    A = PopStack
  761.    PushStack(A or B)
  762. EndProc
  763.  
  764.  
  765. Procedure ExecXor
  766. var A B
  767.    B = NextParam
  768.    A = PopStack
  769.    PushStack(A Xor B)
  770. EndProc
  771.  
  772.  
  773. Procedure ExecNot
  774.    PushStack(not NextParam)
  775. EndProc
  776.  
  777.  
  778. Procedure ExecUpperCase
  779.    PushStack(UpperCase(NextParam))
  780. EndProc
  781.  
  782.  
  783. Procedure ExecExistFile
  784.    PushStack(ExistFile(NextString))
  785. EndProc
  786.  
  787.  
  788. Procedure ExecExistDir
  789.    PushStack(ExistDir(NextString))
  790. EndProc
  791.  
  792.  
  793. Procedure ExecEnvVar
  794.    PushStack(ReadEnv(NextString))
  795. EndProc
  796.  
  797.  
  798. Procedure ExecInMem
  799.    PushStack(InMem(UpperCase(NextString)))
  800. EndProc
  801.  
  802.  
  803. Procedure ExecVlmLoaded
  804.    PushStack(VlmLoaded)
  805. EndProc
  806.  
  807.  
  808. Procedure ExecShellLoaded
  809.    PushStack(NovShellLoaded)
  810. EndProc
  811.  
  812.  
  813. Procedure ExecCPU
  814.    PushStack(CPUClass)
  815. EndProc
  816.  
  817.  
  818. Procedure ExecMathChip
  819.    PushStack(McpClass > 0)
  820. EndProc
  821.  
  822.  
  823. Procedure ExecUserName
  824.    if NovConnection > 0
  825.       PushStack(NovLoginName)
  826.    else
  827.       if %USER% > ''
  828.          PushStack(%USER%)
  829.       else
  830.          PushStack(%S_USER%)
  831.       endif
  832.    endif
  833. EndProc
  834.  
  835.  
  836. Procedure ExecDsUserTyped
  837.    DsIni
  838.    PushStack(DsUserTyped)
  839. EndProc
  840.  
  841.  
  842. Procedure ExecDsUserTypeless
  843.    DsIni
  844.    PushStack(DsUserTypeless)
  845. EndProc
  846.  
  847.  
  848. Procedure ExecDsContext
  849.    DsIni
  850.    PushStack(DsContext)
  851. EndProc
  852.  
  853.  
  854. Procedure ExecDsConnectionType
  855.    DsIni
  856.    PushStack(DsConnectionType)
  857. EndProc
  858.  
  859.  
  860. Procedure ExecDisplay
  861. var Disp
  862.    Disp = DisplayType
  863.  
  864.    if Disp = 0
  865.       PushStack 'HERC'
  866.  
  867.    elseif Disp = 1
  868.       PushStack 'CGA'
  869.  
  870.    elseif Disp = 3
  871.       PushStack 'EGA'
  872.  
  873.    elseif Disp = 4
  874.       PushStack 'VGA'
  875.  
  876.    else
  877.       PushStack ''
  878.  
  879.    endif
  880. EndProc
  881.  
  882.  
  883. Procedure ExecDayOfWeek
  884. var D
  885.    D = DayOfWeek
  886.  
  887.    if D = 0
  888.       PushStack 'SUN'
  889.  
  890.    elseif D = 1
  891.       PushStack 'MON'
  892.  
  893.    elseif D = 2
  894.       PushStack 'TUE'
  895.  
  896.    elseif D = 3
  897.       PushStack 'WED'
  898.  
  899.    elseif D = 4
  900.       PushStack 'THU'
  901.  
  902.    elseif D = 5
  903.       PushStack 'FRI'
  904.  
  905.    elseif D = 6
  906.       PushStack 'SAT'
  907.  
  908.    endif
  909. EndProc
  910.  
  911.  
  912. Procedure ExecMonth
  913. var D
  914.    D = Month
  915.  
  916.    if D = 1
  917.       PushStack 'JAN'
  918.  
  919.    elseif D = 2
  920.       PushStack 'FEB'
  921.  
  922.    elseif D = 3
  923.       PushStack 'MAR'
  924.  
  925.    elseif D = 4
  926.       PushStack 'APR'
  927.  
  928.    elseif D = 5
  929.       PushStack 'MAY'
  930.  
  931.    elseif D = 6
  932.       PushStack 'JUN'
  933.  
  934.    elseif D = 7
  935.       PushStack 'JUL'
  936.  
  937.    elseif D = 8
  938.       PushStack 'AUG'
  939.  
  940.    elseif D = 9
  941.       PushStack 'SEP'
  942.  
  943.    elseif D = 10
  944.       PushStack 'OCT'
  945.  
  946.    elseif D = 11
  947.       PushStack 'NOV'
  948.  
  949.    elseif D = 12
  950.       PushStack 'DEC'
  951.  
  952.    endif
  953. EndProc
  954.  
  955.  
  956. Procedure ExecTrue
  957.    PushStack(True)
  958. EndProc
  959.  
  960.  
  961. Procedure ExecFalse
  962.    PushStack(False)
  963. EndProc
  964.  
  965.  
  966. Procedure ExecExit
  967.    ExitFlag On
  968. EndProc
  969.  
  970.  
  971. Procedure SetupLibWords
  972.    Hash ('!(')                     = Loc ExecLeftParen
  973.    Hash ('!)')                     = Loc ExecRightParen
  974.    Hash ('!+')                     = Loc ExecPlus
  975.    Hash ('!-')                     = Loc ExecMinus
  976.    Hash ('!<')                     = Loc ExecLess
  977.    Hash ('!<=')                    = Loc ExecLessEqual
  978.    Hash ('!<>')                    = Loc ExecNotEqual
  979.    Hash ('!=')                     = Loc ExecEqual
  980.    Hash ('!>')                     = Loc ExecGreater
  981.    Hash ('!>=')                    = Loc ExecGreaterEqual
  982.    Hash ('!AND')                   = Loc ExecAnd
  983.    Hash ('!CONTEXT')               = Loc ExecContext
  984.    Hash ('!CPU')                   = Loc ExecCPU
  985.    Hash ('!DAYOFWEEK')             = Loc ExecDayOfWeek
  986.    Hash ('!DIR')                   = Loc ExecDir
  987.    Hash ('!DISPLAY')               = Loc ExecDisplay
  988.    Hash ('!DSCONNECTIONTYPE')      = Loc ExecDsConnectionType
  989.    Hash ('!DSCONTEXT')             = Loc ExecDsContext
  990.    Hash ('!DSGROUPS')              = Loc ExecDsGroups
  991.    Hash ('!DSINGROUP')             = Loc ExecDsInGroup
  992.    Hash ('!DSUSERTYPED')           = Loc ExecDsUserTyped
  993.    Hash ('!DSUSERTYPELESS')        = Loc ExecDsUserTypeless
  994.    Hash ('!ENVVAR')                = Loc ExecEnvVar
  995.    Hash ('!EXISTDIR')              = Loc ExecExistDir
  996.    Hash ('!EXISTFILE')             = Loc ExecExistFile
  997.    Hash ('!EXIT')                  = Loc ExecExit
  998.    Hash ('!FALSE')                 = Loc ExecFalse
  999.    Hash ('!FILE')                  = Loc ExecFile
  1000.    Hash ('!GOTO')                  = Loc ExecGoto
  1001.    Hash ('!GROUPS')                = Loc ExecGroups
  1002.    Hash ('!HARDWARE')              = Loc ExecHardWare
  1003.    Hash ('!IF')                    = Loc ExecIf
  1004.    Hash ('!INGROUP')               = Loc ExecInGroup
  1005.    Hash ('!INMEM')                 = Loc ExecInMem
  1006.    Hash ('!MATHCHIP')              = Loc ExecMathChip
  1007.    Hash ('!MONTH')                 = Loc ExecMonth
  1008.    Hash ('!NETWORK')               = Loc ExecNetwork
  1009.    Hash ('!NOT')                   = Loc ExecNot
  1010.    Hash ('!OR')                    = Loc ExecOr
  1011.    Hash ('!READENV')               = Loc ExecEnvVar
  1012.    Hash ('!REV')                   = Loc ExecRev
  1013.    Hash ('!SHELLLOADED')           = Loc ExecShellLoaded
  1014.    Hash ('!STATION')               = Loc ExecStation
  1015.    Hash ('!STATIONS')              = Loc ExecStations
  1016.    Hash ('!STRING')                = Loc ExecString
  1017.    Hash ('!TRUE')                  = Loc ExecTrue
  1018.    Hash ('!UPPERCASE')             = Loc ExecUpperCase
  1019.    Hash ('!USERNAME')              = Loc ExecUserName
  1020.    Hash ('!USERS')                 = Loc ExecUsers
  1021.    Hash ('!VALUE')                 = Loc ExecValue
  1022.    Hash ('!VALUEOF')               = Loc ExecValueOf
  1023.    Hash ('!VLMLOADED')             = Loc ExecVlmLoaded
  1024.    Hash ('!WRITE')                 = Loc ExecWrite
  1025.    Hash ('!WRITELN')               = Loc ExecWriteln
  1026.    Hash ('!XOR')                   = Loc ExecXor
  1027. EndProc
  1028.  
  1029.