home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / PROG / MXMNU244.ZIP / MARXMENU.DOC < prev    next >
Encoding:
Text File  |  1993-07-07  |  509.7 KB  |  15,404 lines

  1.     
  2.     
  3.     
  4.     
  5.     
  6.      
  7.     
  8.      ===================================================================
  9.     
  10.     
  11.                        <*> Computer Tyme MarxMenu <*>
  12.     
  13.                               Reference Manual
  14.     
  15.                     Copyright 1989 - 1993 by Marc Perkel
  16.     
  17.          All Rights Reserved * Version 2.44 * Release Date: 07-01-93
  18.     
  19.      Computer Tyme * 411 North Sherman Suite 300 * Springfield, MO 65802
  20.     
  21.                   (417) 866-1222 voice * (417) 866-1665 bbs
  22.     
  23.                              Fax: (417) 866-0135
  24.     
  25.                             CompuServe: 71333,427
  26.     
  27.                               MHS: Marc @ CTyme
  28.     
  29.                   Internet: Marc @ CTyme.MHS.Compuserve.com
  30.     
  31.      ===================================================================
  32.     
  33.  
  34.     Computer Tyme * MarxMenu * Table of Contents            Page #1
  35.     -----------------------------------------------------------------
  36.     
  37.       Copyright .............................................. 1
  38.       License Agreement ...................................... 1
  39.       MarxMenu Trademarks .................................... 3
  40.       Technical Support ...................................... 3
  41.       Installation ........................................... 4
  42.       Getting Started Quick .................................. 6
  43.       Use MarxHelp ........................................... 8
  44.       Common Questions and Mistakes .......................... 8
  45.       MarxMenu Features ...................................... 12
  46.       Overview of the MarxMenu System ........................ 13
  47.       What MarxMenu Does ..................................... 15
  48.       The MARX.BAT File ...................................... 15
  49.       DROPTO.BAT ............................................. 18
  50.       Support for early DOS versions ......................... 19
  51.       About Environment Variables ............................ 20
  52.       Dealing with Multiple DOS Shells ....................... 21
  53.       MarxMenu and TSR Control ............................... 22
  54.       Network Users .......................................... 22
  55.       Network Menu Strategy .................................. 23
  56.       Using TRUENAME on Networks ............................. 24
  57.       Novell Users ........................................... 24
  58.       The Novell Menu Translator ............................. 25
  59.       Logging out under Menu Control ......................... 26
  60.       Logging in with MarxMenu ............................... 27
  61.       Using Novell's Login ................................... 27
  62.       The CONFIG.SYS File .................................... 28
  63.       The AUTOEXEC.BAT File .................................. 29
  64.       Using a Menu File to Log In ............................ 30
  65.       Novell Search Drives ................................... 31
  66.       Novell Drive Mapping Tricks ............................ 32
  67.       Setting File Attributes ................................ 32
  68.       Novell Semaphores ...................................... 33
  69.       Using Semaphores for Software Metering ................. 34
  70.       NetWare MHS & MarxMenu ................................. 34
  71.       Upgrading MarxMenu ..................................... 35
  72.       Customizing MarxMenu Sample Files ...................... 36
  73.       Menu Analysis .......................................... 37
  74.       Onkey Statements ....................................... 37
  75.       Popup Menus ............................................ 39
  76.       The Console ............................................ 40
  77.       Repositioning the Top Window ........................... 40
  78.       Mouse Support .......................................... 41
  79.       Starting off the Easy Way .............................. 41
  80.       About Variables ........................................ 41
  81.       Numeric Variables ...................................... 42
  82.       Boolean Variables ...................................... 43
  83.       String Variables ....................................... 43
  84.       Real Numbers ........................................... 43
  85.       Local Variables ........................................ 44
  86.       Dates .................................................. 44
  87.       Passing Parameters to Procedures ....................... 45
  88.       About Constants ........................................ 46
  89.       About Arrays ........................................... 47
  90.       About Qualifiers ....................................... 47
  91.       Pointer Variables ...................................... 49
  92.  
  93.     Computer Tyme * MarxMenu * Table of Contents            Page #2
  94.     -----------------------------------------------------------------
  95.     
  96.       Comments in Menu Files ................................. 49
  97.       The MarxMenu Compiler .................................. 50
  98.       MarxMenu Language Rules ................................ 50
  99.       Compiler Compatibility ................................. 51
  100.       A word about DOS versions .............................. 51
  101.       A word about BUGS ...................................... 52
  102.       Tips From the Master ................................... 52
  103.       Computers do Simple Tasks .............................. 53
  104.       Complex Tasks are made of Simple Tasks ................. 53
  105.       Learning Good Programming Habits ....................... 54
  106.       Use Long Names ......................................... 54
  107.       Use Comments Liberally ................................. 56
  108.       Indent Your code ....................................... 57
  109.       For Duplicate Tasks, Use Procedures .................... 57
  110.       Don't Program Yourself into a Corner ................... 58
  111.       For the POWER User ..................................... 58
  112.       Where MarxMenu is Heading .............................. 59
  113.       A word to Writers and Reviewers ........................ 60
  114.       Security Issues ........................................ 61
  115.       Keeping Users in the Menu .............................. 62
  116.       Using BREAK.SYS ........................................ 62
  117.       Using the SHELL= Command ............................... 63
  118.       Conditional Statements ................................. 64
  119.       Environment Variables used by MarxMenu ................. 65
  120.       MarxMenu DataBase Functions ............................ 66
  121.       Additional Information ................................. 67
  122.       Computer Tyme on Compuserve ............................ 67
  123.       MarxMenu Commands ...................................... 68
  124.       | ...................................................... 69
  125.       ( ...................................................... 69
  126.       ) ...................................................... 69
  127.       * ...................................................... 69
  128.       + ...................................................... 70
  129.       - ...................................................... 70
  130.       / ...................................................... 70
  131.       < ...................................................... 70
  132.       <= ..................................................... 71
  133.       <> ..................................................... 71
  134.       = ...................................................... 71
  135.       > ...................................................... 71
  136.       >= ..................................................... 72
  137.       Abs .................................................... 72
  138.       Actual ................................................. 72
  139.       Alias .................................................. 72
  140.       AllowAbort ............................................. 73
  141.       AllowEsc ............................................... 73
  142.       And .................................................... 73
  143.       AnsiWindows ............................................ 73
  144.       AppendArray ............................................ 74
  145.       ApplicationMemory ...................................... 74
  146.       ArcTan ................................................. 74
  147.       ArrayInsert ............................................ 74
  148.       AssignList ............................................. 75
  149.       BadDate ................................................ 75
  150.       Bat .................................................... 75
  151.  
  152.     Computer Tyme * MarxMenu * Table of Contents            Page #3
  153.     -----------------------------------------------------------------
  154.     
  155.       BatFileName ............................................ 76
  156.       BigShadow .............................................. 76
  157.       BinString .............................................. 76
  158.       BiosDate ............................................... 76
  159.       Blanked ................................................ 76
  160.       BlankMessage ........................................... 77
  161.       BlankScreenProgram ..................................... 77
  162.       BlankTime .............................................. 78
  163.       Blink .................................................. 78
  164.       BlockBox ............................................... 79
  165.       BootDrive .............................................. 79
  166.       BoxBorderColor ......................................... 79
  167.       BoxHeader .............................................. 79
  168.       BoxHeaderColor ......................................... 80
  169.       BoxHeaderLeft .......................................... 80
  170.       BoxHeaderRight ......................................... 80
  171.       BoxFooter .............................................. 81
  172.       BoxFooterLeft .......................................... 81
  173.       BoxFooterRight ......................................... 81
  174.       BoxInsideColor ......................................... 82
  175.       Break .................................................. 82
  176.       BrightBackground ....................................... 82
  177.       BtrvAbortTransaction ................................... 83
  178.       BtrvBeginTransaction ................................... 83
  179.       BtrvClearOwner ......................................... 83
  180.       BtrvClose .............................................. 83
  181.       BtrvCreate ............................................. 84
  182.       BtrvDelete ............................................. 86
  183.       BtrvEndTransaction ..................................... 86
  184.       BtrvGetEqual ........................................... 87
  185.       BtrvGetFirst ........................................... 87
  186.       BtrvGetGreater ......................................... 88
  187.       BtrvGetGreaterOrEqu .................................... 88
  188.       BtrvGetLast ............................................ 88
  189.       BtrvGetLess ............................................ 89
  190.       BtrvGetLessOrEqu ....................................... 90
  191.       BtrvGetNext ............................................ 90
  192.       BtrvGetPrev ............................................ 90
  193.       BtrvIndexes ............................................ 91
  194.       BtrvInsert ............................................. 91
  195.       BtrvOpen ............................................... 91
  196.       BtrvPageSize ........................................... 92
  197.       BtrvRecLen ............................................. 92
  198.       BtrvRecords ............................................ 92
  199.       BtrvReset .............................................. 92
  200.       BtrvResult ............................................. 93
  201.       BtrvResultMessage ...................................... 94
  202.       BtrvSetOwner ........................................... 94
  203.       BtrvStepFirst .......................................... 94
  204.       BtrvStepLast ........................................... 95
  205.       BtrvStepNext ........................................... 95
  206.       BtrvStepPrev ........................................... 96
  207.       BtrvStop ............................................... 96
  208.       BtrvUnUsedPages ........................................ 96
  209.       BtrvUpdate ............................................. 97
  210.  
  211.     Computer Tyme * MarxMenu * Table of Contents            Page #4
  212.     -----------------------------------------------------------------
  213.     
  214.       BtrvVersion ............................................ 97
  215.       BuildPath .............................................. 97
  216.       CancelListEntry ........................................ 98
  217.       CapFirstChar ........................................... 98
  218.       CapsColor .............................................. 98
  219.       CapsLock ............................................... 99
  220.       Chain .................................................. 99
  221.       Char ................................................... 99
  222.       ChDir .................................................. 99
  223.       CleanFileName .......................................... 100
  224.       ClearKbdBuffer ......................................... 100
  225.       ClearKeyEvents ......................................... 100
  226.       ClearLine .............................................. 100
  227.       ClearScreen ............................................ 101
  228.       ClearScreenFirst ....................................... 101
  229.       ClearScreenOnExit ...................................... 101
  230.       ClockColor ............................................. 101
  231.       ClockMode .............................................. 102
  232.       ClockPos ............................................... 102
  233.       ClosePrinter ........................................... 103
  234.       ClusterSize ............................................ 103
  235.       CmdLine ................................................ 103
  236.       CMOS ................................................... 104
  237.       ColdBoot ............................................... 104
  238.       ColorScreen ............................................ 104
  239.       ComBaud ................................................ 104
  240.       ComBlockErrors ......................................... 105
  241.       ComBlockNumber ......................................... 105
  242.       ComBlockSize ........................................... 105
  243.       ComBreakReceived ....................................... 105
  244.       ComBytesRemaining ...................................... 105
  245.       ComBytesTransferred .................................... 106
  246.       ComCD .................................................. 106
  247.       ComCDAbort ............................................. 106
  248.       ComCharReady ........................................... 106
  249.       ComDataBits ............................................ 106
  250.       ComDonePort ............................................ 107
  251.       ComDrainSendBuffer ..................................... 107
  252.       ComDTR ................................................. 107
  253.       ComEchoRecChar ......................................... 107
  254.       ComEchoSendChar ........................................ 107
  255.       ComEmptyRecBuffer ...................................... 108
  256.       ComEmptySendBuffer ..................................... 108
  257.       ComErrorLimit .......................................... 108
  258.       ComFileName ............................................ 108
  259.       ComFileSize ............................................ 108
  260.       ComInitPort ............................................ 109
  261.       ComLastChar ............................................ 109
  262.       ComLastLine ............................................ 109
  263.       ComNewLineProgram ...................................... 109
  264.       ComParity .............................................. 110
  265.       ComPort ................................................ 110
  266.       ComProtocol ............................................ 110
  267.       ComReadChar ............................................ 110
  268.       ComReadln .............................................. 111
  269.  
  270.     Computer Tyme * MarxMenu * Table of Contents            Page #5
  271.     -----------------------------------------------------------------
  272.     
  273.       ComReadTimeout ......................................... 111
  274.       ComRec1kXmodem ......................................... 111
  275.       ComRecKermit ........................................... 111
  276.       ComRecXmodem ........................................... 112
  277.       ComRecYmodem ........................................... 112
  278.       ComRecYmodemG .......................................... 112
  279.       ComRecZmodem ........................................... 112
  280.       ComResult .............................................. 113
  281.       ComRI .................................................. 113
  282.       ComRTS ................................................. 113
  283.       ComSendBreak ........................................... 113
  284.       ComSend1kXmodem ........................................ 113
  285.       ComSendKermit .......................................... 114
  286.       ComSendXmodem .......................................... 114
  287.       ComSendYmodem .......................................... 114
  288.       ComSendYmodemG ......................................... 115
  289.       ComSendZmodem .......................................... 115
  290.       ComStopBits ............................................ 115
  291.       ComStripHighBit ........................................ 116
  292.       ComThisLine ............................................ 116
  293.       ComTimeout ............................................. 116
  294.       ComTotalErrors ......................................... 116
  295.       ComUseInt14 ............................................ 117
  296.       ComUseUart ............................................. 117
  297.       ComWatchCD ............................................. 117
  298.       ComWrite ............................................... 117
  299.       ComWriteln ............................................. 118
  300.       ComWriteTimeout ........................................ 118
  301.       ComXmitAbortProgram .................................... 118
  302.       ComXmitEnding .......................................... 118
  303.       ComXmitStarting ........................................ 119
  304.       ComXmitStatusProgram ................................... 119
  305.       Comment ................................................ 119
  306.       Console ................................................ 119
  307.       ConsoleBorderColor ..................................... 120
  308.       ConsoleHeaderColor ..................................... 120
  309.       ConsoleInsideColor ..................................... 120
  310.       ConsolePos ............................................. 120
  311.       Const .................................................. 120
  312.       Cos .................................................... 121
  313.       CountryCode ............................................ 121
  314.       CpuClass ............................................... 121
  315.       CpuName ................................................ 121
  316.       CurrencySymbol ......................................... 122
  317.       CurrentDirectory ....................................... 122
  318.       CurrentEnvironment ..................................... 122
  319.       CurrentWindow .......................................... 122
  320.       Cursor ................................................. 122
  321.       CustomBox .............................................. 123
  322.       DateSeparator .......................................... 123
  323.       DateString ............................................. 123
  324.       Day .................................................... 123
  325.       DayOf .................................................. 123
  326.       DayOfWeek .............................................. 124
  327.       DayOfWeekOf ............................................ 124
  328.  
  329.     Computer Tyme * MarxMenu * Table of Contents            Page #6
  330.     -----------------------------------------------------------------
  331.     
  332.       DecimalSeparator ....................................... 124
  333.       Delete ................................................. 124
  334.       DelFile ................................................ 125
  335.       Devices ................................................ 125
  336.       DirectoriesOnly ........................................ 126
  337.       DisplayType ............................................ 126
  338.       DiskType ............................................... 126
  339.       Dispose ................................................ 127
  340.       DosVersion ............................................. 127
  341.       DosVersionString ....................................... 127
  342.       DosWindow .............................................. 128
  343.       DoubleLineBox .......................................... 128
  344.       DPMIInstalled .......................................... 128
  345.       DPMIVersion ............................................ 128
  346.       DrawBox ................................................ 128
  347.       Drives ................................................. 129
  348.       DriveType .............................................. 129
  349.       DvAppNumber ............................................ 129
  350.       DvFrame ................................................ 130
  351.       DvFreeze ............................................... 130
  352.       DvHide ................................................. 130
  353.       DvKillTask ............................................. 130
  354.       DvLastHandle ........................................... 130
  355.       DvLoaded ............................................... 130
  356.       DvMoveWindow ........................................... 131
  357.       DvMyHandle ............................................. 131
  358.       DvPifExecute ........................................... 131
  359.       DvResizeWindow ......................................... 131
  360.       DvSetBottom ............................................ 131
  361.       DvSetTop ............................................... 132
  362.       DvUnFreeze ............................................. 132
  363.       DvUnHide ............................................... 132
  364.       Else ................................................... 132
  365.       ElseIf ................................................. 133
  366.       EmsInstalled ........................................... 133
  367.       EmsVersion ............................................. 133
  368.       EndComment ............................................. 133
  369.       Endif .................................................. 134
  370.       EndLoop ................................................ 134
  371.       EndOfFile .............................................. 134
  372.       EndProc ................................................ 135
  373.       EndWhile ............................................... 135
  374.       EnvFree ................................................ 135
  375.       EnvSize ................................................ 135
  376.       EraseTopWindow ......................................... 135
  377.       EraseWindow ............................................ 136
  378.       Execute ................................................ 136
  379.       ExistDir ............................................... 137
  380.       ExistFile .............................................. 137
  381.       ExistOnPath ............................................ 138
  382.       ExitCode ............................................... 138
  383.       ExitMenu ............................................... 138
  384.       Exp .................................................... 138
  385.       Explode ................................................ 138
  386.       ExplodeDelay ........................................... 139
  387.  
  388.     Computer Tyme * MarxMenu * Table of Contents            Page #7
  389.     -----------------------------------------------------------------
  390.     
  391.       Extension .............................................. 139
  392.       FileAppend ............................................. 139
  393.       FileAssign ............................................. 139
  394.       FileAttr ............................................... 140
  395.       FileClose .............................................. 140
  396.       FileCreate ............................................. 140
  397.       FileDate ............................................... 141
  398.       FileFlush .............................................. 141
  399.       FileLog ................................................ 141
  400.       FileOpen ............................................... 141
  401.       FilePart ............................................... 142
  402.       FilePos ................................................ 142
  403.       FileReadln ............................................. 142
  404.       FileRename ............................................. 142
  405.       FileResult ............................................. 142
  406.       FileSeek ............................................... 143
  407.       FileSize ............................................... 143
  408.       FileTime ............................................... 143
  409.       FileWrite .............................................. 143
  410.       FileWriteln ............................................ 143
  411.       FixPath ................................................ 144
  412.       Floppies ............................................... 144
  413.       ForceExplosion ......................................... 144
  414.       ForceExtension ......................................... 144
  415.       Fraction ............................................... 144
  416.       FreeDiskSpace .......................................... 144
  417.       FreeEms ................................................ 145
  418.       FreeMem ................................................ 145
  419.       FreeMemory ............................................. 145
  420.       FullLineReturn ......................................... 145
  421.       GetMem ................................................. 145
  422.       GotoXY ................................................. 146
  423.       HexString .............................................. 146
  424.       HiddenAndSystem ........................................ 146
  425.       HighWord ............................................... 146
  426.       Hour ................................................... 147
  427.       HourOf ................................................. 147
  428.       Hundredth .............................................. 147
  429.       IdleProgram ............................................ 147
  430.       If ..................................................... 148
  431.       InactiveBox ............................................ 149
  432.       InactiveBoxColor ....................................... 149
  433.       InactiveShadow ......................................... 149
  434.       Include ................................................ 149
  435.       IncludeDirectories ..................................... 150
  436.       InFile ................................................. 150
  437.       InMem .................................................. 151
  438.       InputBlankChar ......................................... 151
  439.       InputLength ............................................ 151
  440.       InputString ............................................ 152
  441.       Insert ................................................. 152
  442.       InsertMode ............................................. 152
  443.       Int .................................................... 152
  444.       Integer ................................................ 153
  445.       Intr ................................................... 153
  446.  
  447.     Computer Tyme * MarxMenu * Table of Contents            Page #8
  448.     -----------------------------------------------------------------
  449.     
  450.       InverseColor ........................................... 153
  451.       InvertString ........................................... 153
  452.       IpxLoaded .............................................. 153
  453.       Jump ................................................... 154
  454.       KbdReady ............................................... 154
  455.       KeyEvent ............................................... 154
  456.       KeyFromMouse ........................................... 154
  457.       KeySave ................................................ 155
  458.       KillMusic .............................................. 155
  459.       LastDrive .............................................. 155
  460.       LastKey ................................................ 155
  461.       Left ................................................... 155
  462.       Length ................................................. 156
  463.       Ln ..................................................... 156
  464.       Loc .................................................... 156
  465.       Local .................................................. 157
  466.       LockWord ............................................... 158
  467.       Logoff ................................................. 158
  468.       LogoffTime ............................................. 159
  469.       Logout ................................................. 159
  470.       LongestLine ............................................ 160
  471.       Loop ................................................... 160
  472.       LoopIndex .............................................. 161
  473.       LoopLevel .............................................. 161
  474.       LoopLimit .............................................. 161
  475.       LowerCase .............................................. 162
  476.       LowWord ................................................ 162
  477.       MachineName ............................................ 162
  478.       MakeListEntry .......................................... 162
  479.       MarxVersion ............................................ 163
  480.       MasterEnvironment ...................................... 163
  481.       Max .................................................... 163
  482.       MatrixInvert ........................................... 163
  483.       McpClass ............................................... 164
  484.       McpName ................................................ 164
  485.       Mem .................................................... 164
  486.       MemL ................................................... 164
  487.       MemSize ................................................ 165
  488.       MemW ................................................... 165
  489.       MemoryLoc .............................................. 165
  490.       MenuFileName ........................................... 165
  491.       MenuKeyBuffer .......................................... 165
  492.       MhsDirectory ........................................... 166
  493.       MhsMailDirectory ....................................... 166
  494.       MhsReadFile ............................................ 166
  495.       MhsSendDirectory ....................................... 167
  496.       MhsUserDirectory ....................................... 167
  497.       Mid .................................................... 167
  498.       Min .................................................... 167
  499.       MinorDosVersion ........................................ 168
  500.       Minute ................................................. 168
  501.       MinuteOf ............................................... 168
  502.       MkDir .................................................. 168
  503.       Mod .................................................... 168
  504.       ModifyPath ............................................. 169
  505.  
  506.     Computer Tyme * MarxMenu * Table of Contents            Page #9
  507.     -----------------------------------------------------------------
  508.     
  509.       Month .................................................. 169
  510.       MonthOf ................................................ 169
  511.       Mouse .................................................. 169
  512.       MouseHorizontal ........................................ 170
  513.       MouseIRQ ............................................... 170
  514.       MouseType .............................................. 170
  515.       MouseVersion ........................................... 170
  516.       MouseVertical .......................................... 170
  517.       MoveWindow ............................................. 171
  518.       MsDos .................................................. 171
  519.       MxCmd .................................................. 171
  520.       NamePart ............................................... 172
  521.       NetworkVersion ......................................... 172
  522.       NextWord ............................................... 172
  523.       Nil .................................................... 172
  524.       NoBoxBorder ............................................ 172
  525.       NoExit ................................................. 172
  526.       Not .................................................... 173
  527.       NotesLeft .............................................. 173
  528.       NotesPlayed ............................................ 173
  529.       NovAccountExpDate ...................................... 173
  530.       NovAddUserToGroup ...................................... 173
  531.       NovAddToSet ............................................ 174
  532.       NovAttach .............................................. 174
  533.       NovAttachedServers ..................................... 174
  534.       NovAutoDetach .......................................... 175
  535.       NovBinderyAccess ....................................... 175
  536.       NovBroadcastMode ....................................... 175
  537.       NovCaptureCopies ....................................... 175
  538.       NovCaptureFF ........................................... 176
  539.       NovCaptureFile ......................................... 176
  540.       NovCaptureFlush ........................................ 176
  541.       NovCaptureForm ......................................... 176
  542.       NovCaptureQueue ........................................ 177
  543.       NovCaptureReset ........................................ 177
  544.       NovCaptureSetup ........................................ 177
  545.       NovCaptureTabSize ...................................... 177
  546.       NovCaptureTimeOut ...................................... 178
  547.       NovCaptureUseBanner .................................... 178
  548.       NovChangePassword ...................................... 178
  549.       NovChangeObjPassword ................................... 178
  550.       NovCleanVolumeName ..................................... 179
  551.       NovClearConnection ..................................... 179
  552.       NovCloseBindery ........................................ 179
  553.       NovCloseSemaphore ...................................... 179
  554.       NovConnection .......................................... 179
  555.       NovConnectionsInUse .................................... 180
  556.       NovConsoleOperator ..................................... 180
  557.       NovCreateObject ........................................ 180
  558.       NovCreateProperty ...................................... 182
  559.       NovDefaultServer ....................................... 182
  560.       NovDeleteFromSet ....................................... 182
  561.       NovDeleteObject ........................................ 183
  562.       NovDeleteProperty ...................................... 183
  563.       NovDetach .............................................. 183
  564.  
  565.     Computer Tyme * MarxMenu * Table of Contents            Page #10
  566.     -----------------------------------------------------------------
  567.     
  568.       NovDownServer .......................................... 183
  569.       NovEndCapture .......................................... 184
  570.       NovForceDownServer ..................................... 184
  571.       NovFreeDirSlots ........................................ 184
  572.       NovFreeVolumeSpace ..................................... 184
  573.       NovFullName ............................................ 184
  574.       NovGetConnections ...................................... 185
  575.       NovGetMessage .......................................... 185
  576.       NovGraceLoginReset ..................................... 185
  577.       NovGraceLogins ......................................... 186
  578.       NovGroupMembers ........................................ 186
  579.       NovGroups .............................................. 186
  580.       NovInGroup ............................................. 187
  581.       NovLastLoginDate ....................................... 187
  582.       NovLogin ............................................... 187
  583.       NovLoginName ........................................... 188
  584.       NovLogout .............................................. 188
  585.       NovMapDrive ............................................ 188
  586.       NovMapRoot ............................................. 188
  587.       NovMaxConnections ...................................... 189
  588.       NovMinPasswordLength ................................... 189
  589.       NovMyLoginName ......................................... 189
  590.       NovMyPassword .......................................... 189
  591.       NovMyPrintQueues ....................................... 190
  592.       NovObjectID ............................................ 190
  593.       NovObjects ............................................. 190
  594.       NovObjectSecurity ...................................... 191
  595.       NovOpenBindery ......................................... 191
  596.       NovOpenSemaphore ....................................... 191
  597.       NovPasswordExpDate ..................................... 192
  598.       NovPreferredServer ..................................... 192
  599.       NovPrimaryServer ....................................... 192
  600.       NovPrintQueues ......................................... 192
  601.       NovPropertySecurity .................................... 193
  602.       NovPropertyValues ...................................... 193
  603.       NovReadGroups .......................................... 194
  604.       NovReadSecurityEquals .................................. 194
  605.       NovRemoveUserFromGroup ................................. 194
  606.       NovRenameObject ........................................ 195
  607.       NovResult .............................................. 195
  608.       NovScanProperties ...................................... 195
  609.       NovScanTrusteePaths .................................... 195
  610.       NovSecurityEquals ...................................... 196
  611.       NovSemaphoreTimeout .................................... 196
  612.       NovSemaphoreUsers ...................................... 196
  613.       NovSemaphoreValue ...................................... 196
  614.       NovSendMessage ......................................... 197
  615.       NovServerLogin ......................................... 197
  616.       NovServers ............................................. 197
  617.       NovServerTime .......................................... 197
  618.       NovSetPreferredServer .................................. 198
  619.       NovSetPrimaryServer .................................... 198
  620.       NovSetProperty ......................................... 198
  621.       NovShellVersion ........................................ 199
  622.       NovSignalSemaphore ..................................... 199
  623.  
  624.     Computer Tyme * MarxMenu * Table of Contents            Page #11
  625.     -----------------------------------------------------------------
  626.     
  627.       NovStaticObject ........................................ 199
  628.       NovStaticProperty ...................................... 199
  629.       NovStationAddress ...................................... 199
  630.       NovTotalDirSlots ....................................... 200
  631.       NovTotalVolumeSpace .................................... 200
  632.       NovUsedVolumeSpace ..................................... 200
  633.       NovUserInGroup ......................................... 201
  634.       NovUsers ............................................... 201
  635.       NovUsersLoggedIn ....................................... 201
  636.       NovVersionNumber ....................................... 202
  637.       NovVolumeNumber ........................................ 202
  638.       NovVolumes ............................................. 202
  639.       NovWaitOnSemaphore ..................................... 202
  640.       NovWritePropValue ...................................... 202
  641.       NumberOfElements ....................................... 203
  642.       Now .................................................... 203
  643.       NumericOnly ............................................ 203
  644.       NumLock ................................................ 203
  645.       Offset ................................................. 204
  646.       OnKey .................................................. 204
  647.       OnScreenOnly ........................................... 206
  648.       OpenPrinter ............................................ 206
  649.       OptionSwitch ........................................... 206
  650.       Or ..................................................... 206
  651.       Ord .................................................... 207
  652.       OutFile ................................................ 207
  653.       OverKey ................................................ 207
  654.       Overlay ................................................ 207
  655.       Overlayed .............................................. 208
  656.       PadLeft ................................................ 208
  657.       PadRight ............................................... 208
  658.       ParallelPorts .......................................... 208
  659.       ParamStr ............................................... 209
  660.       ParentEnvironment ...................................... 209
  661.       Password ............................................... 209
  662.       PathPart ............................................... 209
  663.       PauseAfterExecute ...................................... 210
  664.       PcType ................................................. 210
  665.       Pi ..................................................... 210
  666.       PickFile ............................................... 210
  667.       PickMany ............................................... 211
  668.       PickManyPositions ...................................... 211
  669.       PickOne ................................................ 212
  670.       PickPosition ........................................... 212
  671.       Port ................................................... 212
  672.       Pos .................................................... 212
  673.       PosInList .............................................. 213
  674.       PosInSortedList ........................................ 213
  675.       Power .................................................. 213
  676.       Pred ................................................... 213
  677.       Print .................................................. 214
  678.       PrinterName ............................................ 214
  679.       Println ................................................ 214
  680.       PrintScreen ............................................ 214
  681.       Procedure .............................................. 214
  682.  
  683.     Computer Tyme * MarxMenu * Table of Contents            Page #12
  684.     -----------------------------------------------------------------
  685.     
  686.       PullMenu ............................................... 216
  687.       Qualifier .............................................. 216
  688.       QualVal ................................................ 216
  689.       Random ................................................. 217
  690.       ReadAscTextFile ........................................ 217
  691.       ReadDirectory .......................................... 217
  692.       ReadEnv ................................................ 218
  693.       ReadEnvironment ........................................ 218
  694.       ReadFileBlock .......................................... 219
  695.       ReadKey ................................................ 219
  696.       Readln ................................................. 220
  697.       ReadlnAsc .............................................. 220
  698.       ReadSqDirectory ........................................ 220
  699.       ReadTextFile ........................................... 221
  700.       Real ................................................... 222
  701.       Reboot ................................................. 222
  702.       ReleaseDate ............................................ 222
  703.       Repeat ................................................. 222
  704.       ResizeWindow ........................................... 223
  705.       Return ................................................. 223
  706.       ReturnCode ............................................. 223
  707.       Right .................................................. 224
  708.       RmDir .................................................. 224
  709.       RollWindow ............................................. 224
  710.       Run .................................................... 225
  711.       SavePosition ........................................... 225
  712.       ScreenHeight ........................................... 226
  713.       ScreenWidth ............................................ 226
  714.       ScrollLock ............................................. 226
  715.       ScrollMove ............................................. 226
  716.       Second ................................................. 226
  717.       SecondOf ............................................... 227
  718.       Security ............................................... 227
  719.       Segment ................................................ 227
  720.       SelectPath ............................................. 227
  721.       SerialNumber ........................................... 228
  722.       SerialPorts ............................................ 228
  723.       Set .................................................... 228
  724.       SetArraySize ........................................... 228
  725.       SetEnv ................................................. 228
  726.       SetTimerTask ........................................... 229
  727.       SetTopWindow ........................................... 229
  728.       SetWindowUnder ......................................... 230
  729.       Shadow ................................................. 230
  730.       ShadowColor ............................................ 230
  731.       ShadowPosition ......................................... 230
  732.       Shared ................................................. 231
  733.       ShellEnvironment ....................................... 231
  734.       Shl .................................................... 231
  735.       Shr .................................................... 231
  736.       Sin .................................................... 232
  737.       SingleLineBox .......................................... 232
  738.       SmallShadow ............................................ 232
  739.       SortArray .............................................. 232
  740.       SortArrayLinked ........................................ 233
  741.  
  742.     Computer Tyme * MarxMenu * Table of Contents            Page #13
  743.     -----------------------------------------------------------------
  744.     
  745.       Sound .................................................. 233
  746.       SplitPath .............................................. 233
  747.       SpxFreeConnections ..................................... 234
  748.       SpxLoaded .............................................. 234
  749.       SpxMaxConnections ...................................... 234
  750.       Sqr .................................................... 234
  751.       StandardIO ............................................. 234
  752.       Str .................................................... 235
  753.       StuffAKey .............................................. 235
  754.       StuffKBD ............................................... 235
  755.       StuffKeyboardNow ....................................... 235
  756.       Succ ................................................... 235
  757.       Suggest ................................................ 236
  758.       TaskNumber ............................................. 236
  759.       TextBackground ......................................... 236
  760.       TextColor .............................................. 236
  761.       TextMode ............................................... 237
  762.       TextPos ................................................ 237
  763.       TextSeek ............................................... 237
  764.       Then ................................................... 237
  765.       TimeOf ................................................. 237
  766.       Timer .................................................. 238
  767.       TimeSeparator .......................................... 238
  768.       TimeString ............................................. 238
  769.       TMaxActiveTasks ........................................ 238
  770.       TMaxCreateTask ......................................... 239
  771.       TMaxCut ................................................ 239
  772.       TMaxDeleteTask ......................................... 239
  773.       TMaxDirectSwitching .................................... 239
  774.       TMaxEMSMemLim .......................................... 239
  775.       TMaxGetPasteBuffer ..................................... 240
  776.       TMaxInstalled .......................................... 240
  777.       TMaxMaxTasks ........................................... 240
  778.       TMaxNameTask ........................................... 240
  779.       TMaxPaste .............................................. 240
  780.       TMaxReadTaskInfo ....................................... 241
  781.       TMaxResult ............................................. 241
  782.       TMaxReturnCount ........................................ 241
  783.       TMaxSetPasteBuffer ..................................... 241
  784.       TMaxSwitchTasks ........................................ 242
  785.       TMaxSwitchToManager .................................... 242
  786.       TMaxTakeOver ........................................... 242
  787.       TMaxTaskOpenFiles ...................................... 242
  788.       TMaxThisTask ........................................... 242
  789.       TMaxVersion ............................................ 243
  790.       Today .................................................. 243
  791.       Tomorrow ............................................... 243
  792.       Tone ................................................... 243
  793.       TotalDiskSpace ......................................... 243
  794.       TotalEms ............................................... 244
  795.       Trim ................................................... 244
  796.       TrimInputString ........................................ 244
  797.       TrueName ............................................... 244
  798.       TSRs ................................................... 245
  799.       UnBlank ................................................ 245
  800.  
  801.     Computer Tyme * MarxMenu * Table of Contents            Page #14
  802.     -----------------------------------------------------------------
  803.     
  804.       UniqueFileName ......................................... 246
  805.       Until .................................................. 246
  806.       UpperCase .............................................. 246
  807.       UpperCaseOnly .......................................... 246
  808.       UseArrows .............................................. 247
  809.       UseCommand ............................................. 247
  810.       UsedDiskSpace .......................................... 247
  811.       UseNovPassword ......................................... 248
  812.       Value .................................................. 248
  813.       Var .................................................... 248
  814.       VarType ................................................ 248
  815.       VCPIInstalled .......................................... 249
  816.       VCPIVersion ............................................ 249
  817.       VideoMode .............................................. 249
  818.       VideoPage .............................................. 249
  819.       ViewArray .............................................. 249
  820.       ViewTextFile ........................................... 250
  821.       VinCheckService ........................................ 250
  822.       VinesInt ............................................... 251
  823.       VinesLoaded ............................................ 251
  824.       VinUserName ............................................ 251
  825.       VinSerialNumber ........................................ 251
  826.       Volume ................................................. 251
  827.       VT100mode .............................................. 251
  828.       Wait ................................................... 252
  829.       WaitOrKbdReady ......................................... 252
  830.       WhereX ................................................. 252
  831.       WhereXAbs .............................................. 252
  832.       WhereY ................................................. 252
  833.       WhereYAbs .............................................. 252
  834.       While .................................................. 253
  835.       WholeFileNames ......................................... 253
  836.       Window ................................................. 253
  837.       WindowHeight ........................................... 253
  838.       WindowWidth ............................................ 254
  839.       WinX ................................................... 254
  840.       WinY ................................................... 254
  841.       Within ................................................. 254
  842.       WordStarKeys ........................................... 254
  843.       WorkString ............................................. 255
  844.       Write .................................................. 255
  845.       WriteAscTextFile ....................................... 255
  846.       WriteCenter ............................................ 255
  847.       WriteError ............................................. 255
  848.       WriteFileBlock ......................................... 255
  849.       Writeln ................................................ 256
  850.       WritelnAsc ............................................. 256
  851.       WritelnError ........................................... 256
  852.       WriteTextFile .......................................... 256
  853.       WriteVertical .......................................... 257
  854.       XmsInstalled ........................................... 257
  855.       XmsVersion ............................................. 257
  856.       Xor .................................................... 257
  857.       Year ................................................... 258
  858.       YearOf ................................................. 258
  859.  
  860.     Computer Tyme * MarxMenu * Table of Contents            Page #15
  861.     -----------------------------------------------------------------
  862.     
  863.       String Constants ....................................... 258
  864.       Time and Date Constants ................................ 259
  865.       Video Constants ........................................ 259
  866.       Color Constants ........................................ 259
  867.       Boolean Constants ...................................... 260
  868.  
  869.     Computer Tyme * MarxMenu * Users Manual                 Page #1
  870.     -----------------------------------------------------------------
  871.     
  872.      COPYRIGHT
  873.     
  874.     This manual is copyrighted material and all rights are reserved.
  875.     MarxMenu is a programming language which describes to the computer what
  876.     it is supposed to do. Even though some of the individual words in
  877.     MarxMenu are used in other programming languages, I claim a copyright on
  878.     the collection of words which make up the MarxMenu language. I therefore
  879.     consider it an infringement of my Copyright to create a software product
  880.     which uses the MarxMenu language, or translates MarxMenu source code,
  881.     without purchasing a license to do so.
  882.     
  883.     The combinations of definitions of commands in this manual constitute a
  884.     copyrighted work. Any publication which describes a computer language
  885.     for which the MarxMenu command set is a subset is a violation of the
  886.     copyright of this software and this written manual.
  887.     
  888.     You agree not to translate, modify, disassemble, decompile, or reverse
  889.     engineer any of our programs. This program contains proprietary memory
  890.     variable and array addressing algorithms which are considered to be
  891.     trade secrets and our property. These algorithms include, but are not
  892.     limited to, the MarxMenu variable addressing structures and concepts as
  893.     well as those data structures MarxMenu uses in it's database features.
  894.     
  895.     Our claim of intellectual property and trade secrets is not limited to
  896.     the actual implementation of code, but extends to the MarxMenu source
  897.     language and the user interface language constructs that are unique to
  898.     this software product.
  899.     
  900.     In addition to intellectual property rights protected by law, your use
  901.     of this product constitutes your acceptance of these terms and
  902.     conditions and your acknowledgement of the above rights.
  903.     
  904.     In other words, don't try to clone MarxMenu.
  905.     
  906.     
  907.      LICENSE AGREEMENT
  908.     
  909.     You are licensed to use this program on a single CPU or workstation. If
  910.     you are running on a network, you are required to license a separate
  911.     copy for each workstation or a file server license for each file server.
  912.     If you are running on a multiuser operating system such as Concurrent
  913.     DOS, you are required to license a copy for each workstation. Everyone
  914.     who uses this menu, must license a copy unless several people share the
  915.     same workstation.
  916.     
  917.     This software is licensed and not sold. The license begins when Computer
  918.     Tyme receives payment in full. You may not transfer, sublease or rent
  919.     this software without the written consent of Computer Tyme. You are not
  920.     allowed to distribute MarxMenu in runtime form with software you've
  921.     developed unless it is in combination with a paid-for copy of MarxMenu,
  922.     or you have made special arrangements in writing with Computer Tyme to
  923.     do so.
  924.     
  925.  
  926.     Computer Tyme * MarxMenu * Users Manual                 Page #2
  927.     -----------------------------------------------------------------
  928.     
  929.     Network licenses include a license to use this software on a local hard
  930.     disk in stand-alone mode provided that the computer is part of a
  931.     computer network. Computers that are not connected to the network are
  932.     not covered. The network license also includes a license for a single
  933.     network supervisor to use the software at home for menu development and
  934.     testing.
  935.     
  936.     Site licenses require the payment of an annual renewal and support fee.
  937.     If the annual renewal fee is not paid within six months of the due date
  938.     then the site license status is considered expired and terminated.
  939.     
  940.     The warranty is limited to the diskettes to be machine readable for a
  941.     period of 180 days after purchase. Although we try hard to write perfect
  942.     software that has no bugs, we do not guarantee that. This software is
  943.     provided AS IS. We also do not guarantee that this product is fit for
  944.     any particular purpose and we are not liable for any damages that might
  945.     occur from use of this product. We reserve the right to make changes to
  946.     any and all parts of this software at any time without obligation to
  947.     notify any person or entity of such changes. This agreement is governed
  948.     by the laws of the State of Missouri.
  949.     
  950.     Use of this product constitutes your acceptance of the terms and
  951.     conditions of this license and of my copyright and your agreement to
  952.     abide by these terms and conditions. We may terminate this license at
  953.     any time if you are in breach of any of its terms or conditions.
  954.     
  955.     We reserve the right to conduct or have conducted audits to verify your
  956.     compliance with this agreement.
  957.     
  958.     I would like to thank the following people for making this product
  959.     possible:
  960.     
  961.     Joe Smith, and Kevin Moore for helping write this manual. My wife Vicki
  962.     for being good to me and helping with revisions and editing.
  963.     
  964.     The Computer Tyme staff for being the best employees in the world.
  965.     
  966.     Borland International for writing Turbo Pascal and keeping it bug free
  967.     and well supported.
  968.     
  969.     TurboPower Software for their very powerful extensions to Turbo Pascal
  970.     and their well written, well supported product.
  971.     
  972.     All users who actually paid for this product so that we may continue to
  973.     eat.
  974.     
  975.     Those of you who have pointed out bugs and made suggestions to improve
  976.     our product.
  977.     
  978.  
  979.     Computer Tyme * MarxMenu * Users Manual                 Page #3
  980.     -----------------------------------------------------------------
  981.     
  982.      MARXMENU TRADEMARKS
  983.     
  984.     MarxMenu is a registered trademark of Computer Tyme. DOS ToolBox,
  985.     Directory Master, MarxBase, MarxCom, anything that begins with the word
  986.     Marx, and The Network Survival Kit are trademarks of Computer Tyme.
  987.     
  988.      Lotus is a registered trademark of Lotus Development.
  989.      Wordstar is a registered trademark of MicroPro International.
  990.      Smart Software is a trademark of Informix.
  991.      MS-DOS and MS-Windows are trademarks of Microsoft.
  992.      Turbo Pascal is a trademark of Borland International.
  993.      OPRO and TPRO are trademarks of TurboPower Software.
  994.      Netware, Novell and Btrieve are trademarks of Novell.
  995.      Concurrent DOS and DR-DOS are trademarks of Novell.
  996.      DesqView and QEMM are trademarks of Quarterdeck.
  997.      IBM and OS/2 are trademarks of International Business Machines.
  998.     
  999.      Created using Turbo Pascal
  1000.      Copyright 1983-92 by Borland International
  1001.     
  1002.     When I first started writing this program my friends referred to it as
  1003.     Marc's Menu. That's where the name MarxMenu came from. It has nothing to
  1004.     do with either Carl or Groucho Marx.
  1005.     
  1006.     
  1007.      TECHNICAL SUPPORT
  1008.     
  1009.     Technical support for MarxMenu is provided in several ways. The first is
  1010.     by calling our voice line 1-417-866-1222. We would ask that you not call
  1011.     the 800 number as that is for orders and ordering information only.
  1012.     
  1013.     We have several support staff and will try to answer your questions as
  1014.     quickly and efficiently as possible. We at Computer Tyme look at
  1015.     technical support as an opportunity to improve our product.
  1016.     
  1017.     We also have a 24 hour 3 line BBS system. The BBS system is written in
  1018.     MarxMenu script and the source code to the BBS is available for
  1019.     download. Users with modems can leave messages about support issues.
  1020.     There are several user uploaded menus here and it serves as a forum for
  1021.     MarxMenu users to share ideas and techniques.
  1022.     
  1023.     Our BBS number is 1-417-866-1665. It supports 14400 baud but is 2400
  1024.     baud compatible. Use 8 bits, no parity, 1 stop bit (8N1). You will also
  1025.     need to set your terminal emulation mode to ANSI or VT100. Do not try to
  1026.     call the BBS with 7 bits or even parity. It won't work.
  1027.     
  1028.     On our BBS are additional sample menu files that other MarxMenu users
  1029.     like yourself have uploaded. We encourage you to share your work with
  1030.     others so that more MarxMenu users can benefit.
  1031.     
  1032.  
  1033.     Computer Tyme * MarxMenu * Users Manual                 Page #4
  1034.     -----------------------------------------------------------------
  1035.     
  1036.     When uploading problem menus to our BBS, try to isolate the problem and
  1037.     send as small a sample as you can that demonstrates the problem. Be sure
  1038.     to add a comment block in your code describing the problem and include
  1039.     your name and phone number so that we can call you back when we are done
  1040.     with your menu.
  1041.     
  1042.     We are also available on Compuserve in the Novell vendors forum. From
  1043.     any Compuserve prompt type GO COMPTYME. We have section 3.
  1044.     
  1045.     We also have 3 fax servers on line. Our fax number is 417-866-0135. If
  1046.     you're having a problem with menu code please don't fax long menus to
  1047.     us. We prefer that you upload the code to our BBS so that we can run it.
  1048.     
  1049.     We also offer a Fast Update Service which includes regular upgrades sent
  1050.     to you automatically as we come out with them. This doesn't mean every
  1051.     version of MarxMenu, but every few months after making several
  1052.     improvements and the product is at a stable point. The Fast Update
  1053.     Service includes special access to our support BBS.
  1054.     
  1055.     This service is for the very fierce MarxMenu user who has to have the
  1056.     "Latest and Greatest" all the time.
  1057.     
  1058.     Computer Tyme provides technical support for users evaluating the
  1059.     software as well as registered users. You should know your MarxMenu
  1060.     version number before you call. If you type MARXMENU at the command line
  1061.     it will give you a version number and a release date.
  1062.     
  1063.     
  1064.      INSTALLATION
  1065.     
  1066.     The following installation instructions are for both MarxMenu single
  1067.     user version and MarxMenu network version. The network version is
  1068.     included in The Network Survival Kit.
  1069.     
  1070.     The single user version of MarxMenu is installed by copying the disks
  1071.     into a subdirectory called MARX to keep the files better organized.
  1072.     However, this is not necessary. Copy all the disks that come with
  1073.     MarxMenu into a directory on your hard disk or network.
  1074.     
  1075.     The Network Survival Kit is installed by copying the disk into a
  1076.     directory on your server. Typically you would make a directory called
  1077.     NSK under the PUBLIC directory. That way the NSK directory will inherit
  1078.     the rights of PUBLIC. It will unpack into about 3.5 megs of programs and
  1079.     documentation.
  1080.     
  1081.     Once the files are copied into the proper directory, for example,
  1082.     PUBLIC\NSK on the network or C:\MARX on a single hard drive, type
  1083.     INSTALL. Be sure to have your serial number and access code ready. When
  1084.     this is done, you can run some of the sample menus by typing MARX
  1085.     <menu>.
  1086.     
  1087.  
  1088.     Computer Tyme * MarxMenu * Users Manual                 Page #5
  1089.     -----------------------------------------------------------------
  1090.     
  1091.     Be sure to print out the DOC files on any programs you are interested in
  1092.     and print out the MARXREAD.ME file. MARXHELP is activated by typing
  1093.     MARXHELP at the command line.
  1094.     
  1095.     IMPORTANT: Make sure you do not run the install from the floppy disk.
  1096.     
  1097.     If you are running the Network Survival Kit on several file servers that
  1098.     are bridged together, and you have purchased several single server
  1099.     MarxMenus, be sure not to install the same serial number on more than
  1100.     one file server. MarxMenu is smart enough to detect this. If you have a
  1101.     multi-server version of MarxMenu, then you can install MarxMenu on
  1102.     several fileservers without getting a license violation error.
  1103.     
  1104.     On a Novell netowrk, MarxMenu stores it's serial number information in
  1105.     the Bindery as well as the MARXMENU.EXE file. Thus when you get a new
  1106.     version of MarxMenu it will serialize itself the first time you run it.
  1107.     This makes updates easier.
  1108.     
  1109.                -------- V E R Y * I M P O R T A N T --------
  1110.     
  1111.     The MarxMenu subdirectory must be path accessible. That is, you must
  1112.     have a path statement in your AUTOEXEC.BAT file that includes the
  1113.     directory where the menu system resides. A typical path statement might
  1114.     look like this:
  1115.     
  1116.      PATH=C:\;C:\DOS;C:\MARX;
  1117.     
  1118.     MarxMenu requires up to 100 bytes of free environment space. It won't
  1119.     run without it. The way you get more environment space is to add a SHELL
  1120.     command to your CONFIG.SYS file.
  1121.     
  1122.      SHELL=COMMAND.COM /P /E:nnn
  1123.     
  1124.     Where NNN is the number of bytes for the environment to reserve. Note
  1125.     that if you are running DOS 3.1 then NNN is the number of 16 byte blocks
  1126.     to allocate for the environment.
  1127.     
  1128.      For DOS 3.2 or later:
  1129.      SHELL=COMMAND.COM /P /E:400
  1130.     
  1131.      For DOS 3.1:
  1132.      SHELL=COMMAND.COM /P /E:25
  1133.     
  1134.     If MarxMenu gives you an environment space error, this is where you go
  1135.     to fix it. After changing the CONFIG.SYS file, you will have to reboot
  1136.     the computer to make it take effect.
  1137.     
  1138.     Another situation that can cause an "Out of Environment Space" error is
  1139.     having more than one COMMAND.COM loaded. You can test for this by
  1140.     running RAMMAP or MAPMEM. These programs will show you what's in memory.
  1141.     If you need to load a second COMMAND.COM be sure to use the /E switch to
  1142.     expand the environment of the new COMMAND.COM.
  1143.     
  1144.  
  1145.     Computer Tyme * MarxMenu * Users Manual                 Page #6
  1146.     -----------------------------------------------------------------
  1147.     
  1148.      GETTING STARTED QUICK
  1149.     
  1150.     After installing the software the first thing to do is try it out. Type
  1151.     MARX QUICK (or MARX QUICKNOV for Novell networks) and a menu should come
  1152.     up. Then select the Utilities option. This will open up another window.
  1153.     You then choose DOS Menu and then Free Space. If everything goes right
  1154.     the menu will run FREE.EXE and then return to the menu. After returning
  1155.     to the menu press ESC a few times and exit back to the command line.
  1156.     
  1157.     If everything works right then MarxMenu is working. If you get errors
  1158.     then you'll need to fix them before going on. If you get an "Out of
  1159.     environment space" error then you'll have to increase the environment
  1160.     space before continuing.
  1161.     
  1162.     The MarxMenu disk contains many sample menus for you to start with.
  1163.     Which one to use depends on what your needs are. Typically on a single
  1164.     user system you might start with QUICK menu.
  1165.     
  1166.     To start with the QUICK menu, copy it to a different name such as MY.MNU
  1167.     as follows:
  1168.     
  1169.      COPY QUICK.MNU MY.MNU
  1170.     
  1171.     Then edit MY.MNU with your favorite editor. You will quickly see how
  1172.     this menu works and will be able to substitute your programs for the
  1173.     ones it is set up for. You can then test and run your menu by typing
  1174.     MARX MY.
  1175.     
  1176.     If you want more of a self-configuring menu you might try the LEVEL1
  1177.     menu. This menu requires no programming and lets you set up menus
  1178.     interactively.
  1179.     
  1180.     On a Novell network you might start with the QUICKNOV menu or translate
  1181.     your existing Novell menus with NOVTRANS. The LOGIN menu requires a lot
  1182.     of customization for your system. I wouldn't start on this menu until
  1183.     your regular menus are written.
  1184.     
  1185.     In the QUICK and QUICKNOV examples we have defined AddChoice and Task
  1186.     procedures. These procedures are written in MarxMenu so you won't find
  1187.     them in the list of MarxMenu's internal commands. AddChoice commands are
  1188.     used with OnKey Task commands to create selections in the menu.
  1189.     
  1190.        AddChoice('Directory Master',1)
  1191.        AddChoice('Pick Directory',2)
  1192.        AddChoice('Memory Map',3)
  1193.        AddChoice('Free Space',4)
  1194.     
  1195.        CornerStretchBox ('DOS Menu',38,15)
  1196.     
  1197.  
  1198.     Computer Tyme * MarxMenu * Users Manual                 Page #7
  1199.     -----------------------------------------------------------------
  1200.     
  1201.        OnKey Task(1)
  1202.           DM
  1203.     
  1204.        OnKey Task(2)
  1205.           PD
  1206.     
  1207.        OnKey Task(3)
  1208.           RamMap
  1209.           Pause
  1210.     
  1211.        OnKey Task(4)
  1212.           Free
  1213.           Pause
  1214.     
  1215.     It's that simple! The AddChoice controls what you see on the screen and
  1216.     the OnKey Task controls what it does. Under the OnKey command it's just
  1217.     like writing a batch file.
  1218.     
  1219.     The numbers in the AddChoice statements correspond to the OnKey Task(n)
  1220.     statements so that Tasks are associated with choices. The
  1221.     CornerStretchBox creates a self-sizing box where the upper left corner
  1222.     position coordinates are specified.
  1223.     
  1224.     You won't find the commands AddChoice, CornerStretchBox, or Task in the
  1225.     manual. That's because they are procedures defined in Include files. The
  1226.     QUICK and QUICKNOV menus include CUSTOM.INC and WINSUP.INC which allow
  1227.     you to set up various features of the menus. CUSTOM.INC can include
  1228.     either NOVELL.INC, BLOCK.INC, or GRID.INC which change the look and feel
  1229.     of the menus. You might want to experiment with these to see which one
  1230.     you like the best. You'll have to go into these three Include files if
  1231.     you want to change the colors.  PLEASE NOTE:  If you revise an include
  1232.     file, you will need to recompile your .MNU file with the MARXCOMP
  1233.     compiler.  Typing "MARX {menuname}" will not incorporate changes made
  1234.     to any Include files until after you type "MARXCOMP {menuname}".
  1235.     
  1236.     When you execute a menu after modifying include (INC) files, MarxMenu
  1237.     doesn't automatically recompile the menu the same way it does when you
  1238.     modify the menu file directly. After changing an Include file referenced
  1239.     within a menu, you need to force a recompile by typing MARXCOMP QUICK or
  1240.     you can delete the MRX file to force a recompile.
  1241.     
  1242.     These menus are designed to get you going quickly. If you want to do
  1243.     weird stuff MarxMenu can do weird stuff, but it takes a little more
  1244.     work. The reason we have so many commands in MarxMenu is to be able to do
  1245.     weird stuff so if you need to do something strange, we probably already
  1246.     have a command to do it.
  1247.     
  1248.     The example menus on disk (MNU files) show a variety of uses for
  1249.     MarxMenu. They can be used like libraries of routines to cut code from
  1250.     and paste into your current menu. A good way to learn MarxMenu is to
  1251.     print out the example menus and study the code.
  1252.     
  1253.  
  1254.     Computer Tyme * MarxMenu * Users Manual                 Page #8
  1255.     -----------------------------------------------------------------
  1256.     
  1257.      USE MARXHELP
  1258.     
  1259.     MarxHelp is a TSR pop-up help program for MarxMenu. It acts as an online
  1260.     reference guide to all of the MarxMenu commands. MarxHelp only takes 8k
  1261.     of RAM and is very useful while writing your MarxMenu menus. It gives
  1262.     you the complete manual on-line and is fully indexed electronically. It
  1263.     even has a keyword search to help you find the command you are looking
  1264.     for.
  1265.     
  1266.     I strongly encourage the use of MarxHelp. MarxHelp has everything this
  1267.     manual has in it and more and it is easier to read and find things than
  1268.     thumbing through pages. MarxHelp is updated with every release of
  1269.     MarxMenu and contains new features and program changes the paper manual
  1270.     doesn't. Once you get used to using it, you won't want to go back to
  1271.     paper documentation. Using MarxHelp is better than using the manual.
  1272.     
  1273.     To load MarxHelp type MarxHelp at the command line. This prepares
  1274.     MarxHelp to be available as a TSR while you're creating or editing a
  1275.     menu file. Then if you want to pop up an index press Shift-F3. The
  1276.     Shift-F2 key will repeat your last help topic and Shift-F1 will look up
  1277.     the word your cursor is on.
  1278.     
  1279.     To get more help on MarxMenu type MarxHelp /?. If you need to unload
  1280.     MarxHelp from memory, type MarxHelp /U. Once you bring up MarxHelp, read
  1281.     the Help on Help section for more detailed information on how to use
  1282.     MarxHelp. MarxHelp also contains the entire text of the DOS ToolBox and
  1283.     Network Survival Kit utilities.
  1284.     
  1285.     MarxHelp comes with the Computer Tyme Network Survival Kit. It can also
  1286.     be downloaded from our support BBS. It does not come bundled with the
  1287.     single user version.
  1288.     
  1289.     
  1290.      COMMON QUESTIONS AND MISTAKES
  1291.     
  1292.     There are some common mistakes people make that I get a lot of calls
  1293.     about. I'm going to attempt to point these out so that you don't waste a
  1294.     long distance call over something that's in the book.
  1295.     
  1296.     When running MarxMenu as a menu you type MARX menuname and not MARXMENU
  1297.     menuname. You must run the MARX.BAT file in order for MarxMenu to be
  1298.     able to execute other programs.
  1299.     
  1300.     MarxMenu MUST be in your search path. When you type PATH at the command
  1301.     line, make sure that the MarxMenu directory is in the path. If it isn't,
  1302.     put it in because MarxMenu will not work unless it is added to the path.
  1303.     If your menu is stuck in a loop and you can't get out, it is because
  1304.     MarxMenu is not in the path.
  1305.     
  1306.  
  1307.     Computer Tyme * MarxMenu * Users Manual                 Page #9
  1308.     -----------------------------------------------------------------
  1309.     
  1310.     When running MarxMenu on a network, MarxMenu will want to create it's
  1311.     temporary batch files in the same directory where MarxMenu is located.
  1312.     The user must have enough rights to create these files. If you don't
  1313.     want to give the user rights in this directory then set an environment
  1314.     variable TEMP to point to a directory where the user does have rights.
  1315.     If you notice that you (as supervisor) can run the menu just fine, but
  1316.     your users get errors, it's because they don't have enough rights.
  1317.     
  1318.     When using MarxMenu to logon to or logoff from the network, you need
  1319.     to follow all the rules in the sections on network usage. It is very
  1320.     tricky to do these functions and there are things you can do and things
  1321.     you can't. There are things that you think should work but don't. So, I
  1322.     strongly suggest that you follow the instructions. I have spent hundreds
  1323.     of hours fighting these issues and I have pretty much figured out what
  1324.     you can do and what you can't do.
  1325.     
  1326.     If you are getting "Bad Command or Filename" errors when running
  1327.     MarxMenu, edit the first line of MARX.BAT and turn ECHO ON. Then you can
  1328.     watch what is happening. You can also put PAUSE in so it won't go by too
  1329.     fast that you can't see it.
  1330.     
  1331.     Another common question is, "Do you have a command that does this?" The
  1332.     quickest way to hunt up commands is to use the MarxHelp TSR. Besides
  1333.     being highly cross-indexed, it also has word search capabilities.
  1334.     
  1335.     Several of the example files have Include files. I use the INC extension
  1336.     on these files. Commands like AddChoice and CornerStretchBox are
  1337.     procedures that are defined in these Include files and are not MarxMenu
  1338.     commands. This is also where the menu colors are defined.
  1339.     
  1340.     When using the Novell menu translator you may get a "Window Out Of
  1341.     Bounds" error. This means that the Novell menu has more choices than
  1342.     will fit on the screen. The solution is to break up the menu into
  1343.     submenus.
  1344.     
  1345.     Also, when running the translator you type MARXMENU NOVTRANS menu, not
  1346.     MARX NOVTRANS menu. Since the menu translator is being used as a
  1347.     translator instead of a menu you use MARXMENU instead of MARX.
  1348.     
  1349.     When upgrading MarxMenu from a previous version, you must chase everyone
  1350.     out of the menu before upgrading. Otherwise the MARXMENU.OVR file is
  1351.     locked and can't be overwritten. I suggest deleting the old MARXMENU.OVR
  1352.     file first. If you can delete it then everyone is out. I get calls about
  1353.     this where the supervisor swears everyone is out of the menu when they
  1354.     aren't. If you can't delete the file then someone has it open.
  1355.     
  1356.     When you upgrade MarxMenu the MRX files need to be recompiled. If the
  1357.     MNU files are available and the users have enough rights then this
  1358.     happens automatically. But, if the users don't have enough rights they
  1359.     won't be able to run the menus. You will have to go in and recompile
  1360.     them. IMPORTANT! Do not lose the MNU files. The MRX files cannot
  1361.     be uncompiled and if you don't have the MNU files, you have no
  1362.     way to alter your menus.
  1363.     
  1364.  
  1365.     Computer Tyme * MarxMenu * Users Manual                 Page #10
  1366.     -----------------------------------------------------------------
  1367.     
  1368.     You must have some free environment space for MarxMenu to use. If you
  1369.     get an "Out of Environment Space" error, it means that you are out of
  1370.     environment space. First check to see that you have SHELL= command in
  1371.     your CONFIG.SYS file. Then use RAMMAP to see it you are loading more
  1372.     than one COMMAND.COM. You can also use the FREE.EXE program to show you
  1373.     how much environment space you have. If FREE doesn't show that you have
  1374.     very much free space then you are going to have to figure out why.
  1375.     
  1376.     When Novell installs their utilities they flag files as "Sharable
  1377.     Read-Only". Don't do this with MarxMenu. This is a bad idea and is a
  1378.     left over from DOS 2.11. Even though Novell still does it, don't you do
  1379.     it. It can, and often does, cause problems.
  1380.     
  1381.     Not all programs are compatible. Sometimes you never know why. The
  1382.     solution often is to find a work around. MarxMenu supports many kinds of
  1383.     work around tricks. Sometimes the trick is to exit the menu with the
  1384.     keyboard buffer stuffed to run a program from the command line.
  1385.     
  1386.     Because of the power and flexibility of MarxMenu, many new users try to
  1387.     do complex things too fast. I recommend that you start with the basic
  1388.     menu examples and get familiar with the software. Once you are familiar
  1389.     with MarxMenu you aren't as likely to get in over your head with it's
  1390.     more complex features.
  1391.     
  1392.     Q.) This is a big manual. Will it be hard to learn?
  1393.     
  1394.     A.) No. MarxMenu is one of the easiest menus to learn and install. You
  1395.     don't have to learn hundreds of commands to make it work. Just start
  1396.     with the sample menus. But, if you want to do complicated tasks, the
  1397.     commands are there. But the more complicated the task the more effort it
  1398.     will take to make it work.
  1399.     
  1400.     Q.) I type MARXMENU QUICK and when I try to run something it dumps me
  1401.     back at the command line.
  1402.     
  1403.     A.) To run a menu you need to run the MarxMenu from MARX.BAT. You should
  1404.     type MARX QUICK instead of MARXMENU QUICK.
  1405.     
  1406.     Q.) I'm getting "Error accessing Overlays!"
  1407.     
  1408.     A.) MarxMenu requires the file MARXMENU.OVR file to be in the same
  1409.     directory as the MARXMENU.EXE file. In previous versions of MarxMenu the
  1410.     EXE and OVR files were combined. This causes file sharing problems on
  1411.     some networks and dumb multitaskers such as Windows. So we had to
  1412.     separate the overlay file.
  1413.     
  1414.     Q.) Everything was working fine and then I moved the files to another
  1415.     directory and now I'm getting "Bad command or File Name".
  1416.     
  1417.  
  1418.     Computer Tyme * MarxMenu * Users Manual                 Page #11
  1419.     -----------------------------------------------------------------
  1420.     
  1421.     A.) The MARX.BAT is generated for a specific directory. Use your editor
  1422.     or MARXEDIT to edit MARX.BAT to run in the new directory. If you
  1423.     are still having problems change the ECHO OFF to ECHO ON and
  1424.     watch the batch file execute. You can type MARXMENU INST to
  1425.     recreate the batch files.
  1426.     
  1427.     Q.) I get stuck in the menu and it won't exit. Just keeps looping.
  1428.     
  1429.     A.) The MXSTOP.BAT, BATEXIT.BAT and DROPTO.BAT files need to be in the
  1430.     same directory as MARX.BAT and MarxMenu. MarxMenu must be on your search
  1431.     path in order to work.
  1432.     
  1433.     Q.) I'm running LanTastic and when two people use the menu at the same
  1434.     time I get a "File Sharing Violation" error.
  1435.     
  1436.     A.) This is solved by setting the MARXMENU.OVR file to "Read Only".
  1437.     
  1438.     Q.) I tried changing the menu colors by editing the NOVELL.INC file but
  1439.     no colors changed. What am I doing wrong?
  1440.     
  1441.     A.) MarxMenu automatically recompiles when you change the menu file
  1442.     because it compares the date of the MNU file to the MRX file. Include
  1443.     files are not compared this way. What you need to do after changing an
  1444.     Include file is to force MarxMenu to recompile. This is done by typing
  1445.     MARXCOMP <menu> or by deleting the MRX file.
  1446.     
  1447.     Q.) When I run some programs, (MultiMate) and come back to the menu my
  1448.     colors are gone. It comes up in black and white.
  1449.     
  1450.     A.) Some programs change the video mode to BW80 and leave it that way.
  1451.     MarxMenu comes up black and white when this happens. Add the command
  1452.     MODE CO80 after the offending program and your colors will come back.
  1453.     
  1454.     Q.) Under an OnKey statement, I'm mixing batch file commands and
  1455.     MarxMenu commands (using the "|" (vertical bar)). It seems that all the
  1456.     MarxMenu commands execute first rather than in the order that I
  1457.     specified.
  1458.     
  1459.     A.) Yes, since MarxMenu is a zero "k" menu system, all batch files
  1460.     commands are written to a batch file and executed when MarxMenu exits.
  1461.     It is also important to remember that when you return to MarxMenu that
  1462.     you come back to the beginning of the menu and not the last line you
  1463.     left.
  1464.     
  1465.     Q.) On my Novell network, I get "Error creating BAT file" when users try
  1466.     to run programs from the menu.
  1467.     
  1468.     A.) This is caused when users don't have enough access rights for
  1469.     MarxMenu to create temporary batch files. Use the SET TEMP=directory
  1470.     to point to a directory where the user has full access rights.
  1471.     
  1472.  
  1473.     Computer Tyme * MarxMenu * Users Manual                 Page #12
  1474.     -----------------------------------------------------------------
  1475.     
  1476.     Q.) I'm trying to execute a program and read the DOS errorlevel code and
  1477.     it isn't working. What am I doing wrong?
  1478.     
  1479.     A.) To read a DOS errorlevel code into a ReturnCode you must use the
  1480.     MarxMenu Execute command. You must also set UseCommand to Off and you
  1481.     need to specify the COM or EXE extension. You also can't use the DOS
  1482.     piping or redirection commands.
  1483.     
  1484.     Q.) Can I run Windows with MarxMenu?
  1485.     
  1486.     A.) Yes, MarxMenu works just fine with Windows. It can start Windows and
  1487.     when you exit Windows it comes back to MarxMenu.
  1488.     
  1489.     Q.) When I try to log off a Novell network from the menu I get a
  1490.     "Missing Batch File" error.
  1491.     
  1492.     A.) The reason you get a "Missing Batch File" error is because MARX.BAT
  1493.     is on the network and is no longer accessible after LOGOUT runs. Under
  1494.     MarxMenu the correct way to log off is to create an OFF.BAT file in the
  1495.     SYS:LOGIN directory and run |Logoff under an OnKey command. MarxMenu
  1496.     will automatically find this batch file and run it.
  1497.     
  1498.      Example:
  1499.        OnKey 'L'
  1500.          |LogOff
  1501.     
  1502.     Q.) When I call your BBS I get a lot of arrow characters on my screen.
  1503.     What am I doing wrong?
  1504.     
  1505.     A.) My BBS uses ANSI sequences. Turn on your ANSI or VT100 emulation in
  1506.     your terminal program and it will work just fine.
  1507.     
  1508.     
  1509.      MARXMENU FEATURES
  1510.     
  1511.     The basic idea behind MarxMenu is to display choices to the user, let
  1512.     him select a command, run the program without taking any memory, and
  1513.     return to the menu when done.
  1514.     
  1515.     The way MarxMenu works is that you start it with a batch file which runs
  1516.     MarxMenu. When the user selects an option MarxMenu writes a batch file
  1517.     and quits. The first batch file (MARX.BAT) calls the batch file that
  1518.     MarxMenu created which runs your application. When your application
  1519.     finishes the MARX.BAT file reloads MarxMenu and waits for the user to
  1520.     make a new choice.
  1521.     
  1522.     MarxMenu uses a script language that is designed around being simple to
  1523.     use and to read. The script language is used to paint the screen, wait
  1524.     for the user to input a key, and then write a batch file based on that
  1525.     key. To help you get going, MarxMenu comes with several prewritten
  1526.     sample menus that you can use as templates to make your menus. These
  1527.     templates are somewhat feature rich so that you don't have to figure out
  1528.     very much to get your MarxMenu going. The sample menus are designed to
  1529.     meet the needs of most menu users and are designed to get you up and
  1530.     running quick with as little pain as possible.
  1531.     
  1532.  
  1533.     Computer Tyme * MarxMenu * Users Manual                 Page #13
  1534.     -----------------------------------------------------------------
  1535.     
  1536.     But, MarxMenu is feature rich and has plenty of commands for those of
  1537.     you who want to do something weird. With over 850 commands and growing
  1538.     we have attempted to deal with many problems that users and network
  1539.     supervisors need to solve. So if you want to do something that my menu
  1540.     templates aren't set up to do then you have the power to get in and make
  1541.     MarxMenu do what you want. But it takes a little more effort to make it
  1542.     happen.
  1543.     
  1544.     The stranger you want to get with MarxMenu the more learning and effort
  1545.     it will take. But, unlike all the other menu systems out there, MarxMenu
  1546.     will get as strange as you need it to get. MarxMenu is a programming
  1547.     language targeted at non-programmers and puts the power of a
  1548.     professional programmer into the hands of those who have never written a
  1549.     line of code before. Even though MarxMenu may not be a true compiler or
  1550.     have the execution speed of C or Pascal, MarxMenu supports a far richer
  1551.     command language and a more elaborate method of automatic memory
  1552.     management. With MarxMenu you can write programs that would normally
  1553.     require 30 points higher IQ and used to be limited to the realm of the
  1554.     serious computer nerd - like me!
  1555.     
  1556.     
  1557.      OVERVIEW OF THE MARXMENU SYSTEM
  1558.     
  1559.     MarxMenu is not just another fill-in-the-blank menu system. It is a menu
  1560.     programming language and job control language. It gives you total
  1561.     freedom to do whatever you want, but total freedom has a price. You will
  1562.     need to know and understand how to use a text editor. This isn't
  1563.     difficult if you are familiar with using a word processor. And you will
  1564.     need to have a basic understanding of DOS and how batch files work.
  1565.     
  1566.     With a text editor you can create a menu file which is a text file with
  1567.     an MNU extension. Or, you can copy and then modify the text file
  1568.     QUICK.MNU which displays the menus you see when MarxMenu is executed.
  1569.     This text file contains a set of instructions for MarxMenu to follow.
  1570.     MarxMenu will then read your menu file and run the instructions.
  1571.     
  1572.      A menu file might look as follows:
  1573.     
  1574.      DrawBox 31 5 18 4
  1575.      UseArrows
  1576.      Writeln   '  W - WordStar'
  1577.      Write     '  L - Lotus'
  1578.     
  1579.      OnKey 'W'
  1580.         CD\WORDSTAR
  1581.         WS
  1582.     
  1583.      OnKey 'L'
  1584.         CD\LOTUS
  1585.         LOTUS
  1586.     
  1587.  
  1588.     Computer Tyme * MarxMenu * Users Manual                 Page #14
  1589.     -----------------------------------------------------------------
  1590.     
  1591.     The above example is a fully working MarxMenu program. Just because
  1592.     MarxMenu has over 850 commands doesn't mean you have to use them all.
  1593.     The reason there are so many commands is that people keep calling and
  1594.     asking if we can add such and such. Most of the time we do. That's why
  1595.     the manual gets behind sometimes.
  1596.     
  1597.     The instructions must be from the vocabulary of words that MarxMenu
  1598.     understands. These words make up the command list included in this
  1599.     manual. They must be used precisely as the instructions in this manual
  1600.     tell you to use them. This process is called programming.
  1601.     
  1602.     I know that for many of you the word programming is a scary word. Put
  1603.     your fears at ease, MarxMenu is one of the easiest programming languages
  1604.     there is. It is a little harder than writing batch files and a lot
  1605.     easier than Basic. It requires a working knowledge of DOS and an
  1606.     understanding of writing batch files as explained in your DOS manual.
  1607.     
  1608.     The point that we want to make is, do not let the fear of learning and
  1609.     the fear of programming prevent you from learning to write your own
  1610.     menus. If you have never touched a computer before and are sitting down
  1611.     with your first PC, read the manuals first. Become familiar with the
  1612.     MS-DOS operating system. Learn how to write batch files, make
  1613.     subdirectories, copy files, format floppies, etc. If you don't
  1614.     understand something, ask a friend. All of us had to learn sometime, and
  1615.     there is no such thing as a stupid question.
  1616.     
  1617.     After you have mastered some of the basic concepts of the operating
  1618.     system, then learn MarxEdit. This is the text editor included with your
  1619.     MarxMenu program. Use it to write your own batch files. Then attempt to
  1620.     write your own menus by modifying the sample menus (files with a MNU
  1621.     extension) which come with MarxMenu. Print these menus and study them,
  1622.     referring to this manual or MarxHelp for help on command definitions.
  1623.     You do not have to completely understand them to start making changes.
  1624.     Programming is a trial and error process.
  1625.     
  1626.     A computer, like a musical instrument, is only as good as the player.
  1627.     The more you learn about it the more you'll find it can do. In fact, a
  1628.     computer can help raise your effective IQ as you learn the disciplines
  1629.     of logic and reason. As a hammer is a tool of the hand, enhancing your
  1630.     physical strength, a computer is a tool of the mind, enhancing your
  1631.     mental strength. You will learn that as you develop a relationship with
  1632.     your computer, that you will be able to process information in ways you
  1633.     never dreamed.
  1634.     
  1635.     MarxMenu is an excellent learning tool. By the time you become
  1636.     proficient with the menu language, you will have learned the fundamental
  1637.     concepts behind the MS-DOS operating system. You will find yourself
  1638.     going back and forth between this manual and the DOS manual that came
  1639.     with your computer. When you master the language, you will have enough
  1640.     computing skills to be a real resource in your office environment. In
  1641.     this day and age, knowing how to "make the damn things work" is a key in
  1642.     moving up the corporate ladder.
  1643.     
  1644.  
  1645.     Computer Tyme * MarxMenu * Users Manual                 Page #15
  1646.     -----------------------------------------------------------------
  1647.     
  1648.     If you have sufficient excess income to afford a personal computer, or
  1649.     are in a job that provides you with a workstation, you are smart enough
  1650.     to learn this program. All it requires is that you take the time. You
  1651.     can do it. It is worth your time, and you will make up the time spent in
  1652.     the results you'll get. Good luck and enjoy.
  1653.     
  1654.     
  1655.      WHAT MARXMENU DOES
  1656.     
  1657.     So with hundreds of menus on the market, what makes this one so great.
  1658.     Well, let me tell you about it. MarxMenu is a menu language rather than
  1659.     a fill in the blank kind of menu. MarxMenu gives you total control of
  1660.     your computer system.
  1661.     
  1662.     It is also a job control language allowing you to program processes too
  1663.     difficult to do with batch files. MarxMenu can be used to do anything
  1664.     from overnight batch job processing to generating control scripts for
  1665.     mainframes.
  1666.     
  1667.     Because of it's simple syntax, MarxMenu makes an excellent teaching
  1668.     language putting more programming power in the hands of the student
  1669.     programmer than any other programming language.
  1670.     
  1671.     As a menu, MarxMenu can be as simple or as complex as you want. If you
  1672.     want simple, nothing is easier. If you want POWER, nothing is more
  1673.     powerful. If you want to get really weird, MarxMenu can do really weird.
  1674.     
  1675.     So if you want the menu to remind you to go vote, MarxMenu knows when
  1676.     the first Tuesday after the first Monday in November on even years is.
  1677.     If you are into Astrology, and you want certain menu items to appear
  1678.     only if Mars is in the right place in the sky, MarxMenu can calculate
  1679.     the orbit of Mars for you.
  1680.     
  1681.     MarxMenu can be used to program games, write running software demos and
  1682.     online tutorial programs. It can be used to write testing programs. It
  1683.     can be used to write custom software installation programs. It can be
  1684.     used to assist other applications to make other software more network
  1685.     friendly.
  1686.     
  1687.     MarxMenu has a compiler for high speed execution. Even very large menus
  1688.     come up in under 4 seconds on a 4.77mhz IBM XT on an ArcNet lan. The
  1689.     compiler also provides security in that you can keep your source files
  1690.     separate so no one can alter the menu files.
  1691.     
  1692.  
  1693.     Computer Tyme * MarxMenu * Users Manual                 Page #16
  1694.     -----------------------------------------------------------------
  1695.     
  1696.      THE MARX.BAT FILE
  1697.     
  1698.     In order for MarxMenu to work, a MARX.BAT file must be created. This is
  1699.     done by typing INSTALL. The first thing that INSTALL does is unpack the
  1700.     compressed menu files and documentation files. Then it will bring up the
  1701.     installation menu.
  1702.     
  1703.     The MARX.BAT file looks like this:
  1704.     
  1705.      @ECHO OFF
  1706.      C:\MARX\MARXMENU.EXE %1
  1707.      %MXCMD%
  1708.      MARX %1
  1709.     
  1710.     The first line of MARX.BAT turns the echo off. This may be changed to
  1711.     ECHO ON for debugging purposes. PAUSE commands can be inserted to debug
  1712.     a menu. This allows you to see what's going on.
  1713.     
  1714.     The second line of MARX.BAT runs MARXMENU.EXE. The second parameter %1
  1715.     is the name of the menu file to run. A third parameter can be added to
  1716.     tell MarxMenu to use a specific directory for creating temporary batch
  1717.     files. Otherwise MarxMenu will create temporary batch files in the same
  1718.     directory as MARXMENU.EXE.
  1719.     
  1720.     When the user selects a program to run, MarxMenu writes a temporary
  1721.     batch file which contains within it the commands to run the program.
  1722.     Then MarxMenu writes a command to the environment variable MXCMD to
  1723.     execute the temporary batch file and exits.
  1724.     
  1725.     What it writes depends on the version of DOS you are running. If you are
  1726.     running DOS 3.3 or later, MXCMD is set to CALL <batch>. If you are
  1727.     running an earlier version of DOS then MXCMD is set to COMMAND /C
  1728.     <batch>.
  1729.     
  1730.     Whatever command is written to MXCMD is executed in line 3. This usually
  1731.     calls the temporary batch file that MarxMenu created. This executes your
  1732.     program and returns to MARX.BAT.
  1733.     
  1734.     Line four jumps back to the beginning of the batch file and starts all
  1735.     over. %0 is MARX.BAT and %1 is the name of the menu you are running.
  1736.     
  1737.              MARX.BAT
  1738.              --------   +--MarxMenu Creates--+
  1739.       +----> @ECHO OFF  |                    |
  1740.       |      MARXMENU.EXE %1                 |
  1741.       |      %MXCMD% >--+                    +-> $MX00000.BAT
  1742.       | +--> MARX %1 +  |                        ------------
  1743.       | |            |  +----------------------> CD\WORDSTAR
  1744.       +-|------<-----+                           WS --+
  1745.         |                                             |
  1746.         +-------------------------------------------<-+
  1747.     
  1748.  
  1749.     Computer Tyme * MarxMenu * Users Manual                 Page #17
  1750.     -----------------------------------------------------------------
  1751.     
  1752.      Note: MarxMenu sets MXCMD = CALL $MX00000.BAT
  1753.     
  1754.     You can also tell MarxMenu where to put it's temporary batch files by
  1755.     setting an environment variable TEMP to point to a temporary file
  1756.     directory.
  1757.     
  1758.      Example:
  1759.        SET TEMP=F:\TMPFILES
  1760.     
  1761.     This is compatible with the way DOS 5 and Windows uses temp files.
  1762.     
  1763.     When you exit the menu system. MarxMenu sets MXCMD to MXSTOP. This jumps
  1764.     to a batch file called MXSTOP which gets you out of MARX.BAT. MXSTOP.BAT
  1765.     can be modified to control what happens when MarxMenu is exited.
  1766.     
  1767.     The default MXSTOP.BAT file is as follows.
  1768.     
  1769.      SET MXCMD=
  1770.      SET KSV=
  1771.      REM You can control menu exiting with this file!
  1772.     
  1773.     Note that by adding your own commands to MXSTOP that you can control
  1774.     what happens when you exit. You could loop right back to the menu if you
  1775.     want. Or, you could force a controlled network logoff.
  1776.     
  1777.     I strongly recommend upgrading to DOS 3.3 or later whenever it is
  1778.     possible to do so.
  1779.     
  1780.     The name of the temporary batch file is as follows:
  1781.     
  1782.                       $MX00000.BAT
  1783.                           ||||
  1784.             Shells--------+|++--------Network Station (Hex)
  1785.                       Task Number
  1786.     
  1787.     The five zeros are used for single user versions of MarxMenu. On a network
  1788.     they change as follows:
  1789.     
  1790.     The last two zeros is the station number on the network. This is either
  1791.     read directly from the shell, if you are using Novell, or from the
  1792.     environment variable STATION if you are on another network. The third
  1793.     zero is the task number if you are running DesqView, or from an
  1794.     environment variable TASK if you are running some other multitasker.
  1795.     
  1796.     The second zero is replaced by one less than the number of COMMAND.COM
  1797.     shells you are running. This way if you run COMMAND.COM under MarxMenu
  1798.     and then run MarxMenu again under that, it doesn't get lost when you
  1799.     exit.
  1800.     
  1801.  
  1802.     Computer Tyme * MarxMenu * Users Manual                 Page #18
  1803.     -----------------------------------------------------------------
  1804.     
  1805.     The first zero is for future expansion. In case something comes along
  1806.     that we haven't thought of.
  1807.     
  1808.     If you want to do custom tricks, MarxMenu has an internal variable
  1809.     called MxCmd. Setting this to your own command overrides the way
  1810.     MarxMenu would normally use it.
  1811.     
  1812.     But now you ask, does MarxMenu leave a trail of batch files that will
  1813.     clutter up my drive or network? Not at all. MarxMenu keeps using the
  1814.     same names over and over again. If a user crashed his system, it might
  1815.     leave a batch file but it would be overwritten the next time he used the
  1816.     menu. Not only that, all batch files can be kept in the same directory
  1817.     so cleaning up is as simple as typing DEL $MX*.BAT!
  1818.     
  1819.     By writing to the MXCMD variable you can run an EXE or COM file directly
  1820.     without having to create another batch file.
  1821.     
  1822.      Example:
  1823.         OnKey 'M'
  1824.            |MxCmd = 'RAMMAP'
  1825.     
  1826.     This runs RamMap directly from the MARX.BAT file.
  1827.     
  1828.     Another trick is to run another batch file without the CALL statement.
  1829.     This creates a one-way jump to another batch file.
  1830.     
  1831.     Another debugging feature. You can change the first line of the MARX.BAT
  1832.     file as follows:
  1833.     
  1834.      @ECHO %MXECHO%
  1835.     
  1836.     This allows you to turn the echo on for debugging purposes by typing:
  1837.     
  1838.      SET MXECHO=ON
  1839.     
  1840.     This way you don't have to change the MARX.BAT file to debug. If you use
  1841.     this, make sure that MXECHO is set to either ON or OFF.
  1842.     
  1843.     
  1844.      DROPTO.BAT
  1845.     
  1846.     If you are going to run a shell like COMMAND.COM under MarxMenu it is
  1847.     sometimes better to use DROPTO.BAT which is created during the install
  1848.     process. DropTo allows you to jump from the temporary batch file that
  1849.     MarxMenu creates to DropTo, which deletes the temporary batch file and
  1850.     executes the rest of the command line.
  1851.     
  1852.      Usage: DROPTO %0 COMMAND.COM
  1853.     
  1854.  
  1855.     Computer Tyme * MarxMenu * Users Manual                 Page #19
  1856.     -----------------------------------------------------------------
  1857.     
  1858.     If you are using DropTo inside a MarxMenu, the %0 is automatically added
  1859.     for you.
  1860.     
  1861.      Example:
  1862.         OnKey 'C'
  1863.            DropTo COMMAND.COM
  1864.     
  1865.      DROPTO.BAT
  1866.      ----------
  1867.      DEL %1
  1868.      SET KSV=
  1869.      SET MXCMD=
  1870.      %2 %3 %4 %5 %6 %7 %8 %9
  1871.     
  1872.     Here's how it works:
  1873.     
  1874.          $MX00000.BAT <------deletes this file--------+
  1875.          ------------                                 |
  1876.          DROPTO %0 COMMAND.COM ------------> DEL %1 >-+
  1877.                                              SET KSV=
  1878.                                              SET MXCMD=
  1879.                   %2 executes COMMAND.COM--> %2 %3 %4 %5 %6 %7 %8 %9
  1880.     
  1881.     The advantages are that the temporary batch file is eliminated so if the
  1882.     user never returns to the menu, it leaves no temporary file to clutter
  1883.     up the drive. Also, DROPTO.BAT becomes the pending batch file that is
  1884.     running rather than the temporary file.
  1885.     
  1886.     
  1887.      SUPPORT FOR EARLY DOS VERSIONS
  1888.     
  1889.     There are two main differences between DOS versions earlier than 3.3 and
  1890.     versions 3.3 and above. One is the CALL command for batch files and the
  1891.     other is the way you specify environment space when using COMMAND.COM.
  1892.     
  1893.     I have enhanced the support for early DOS versions (3.1, 3.2). MarxMenu
  1894.     executes COMMAND /C /E:nn (batchfile) >NUL to have one batch file call
  1895.     another. The first two lines of the batch files created are as follows:
  1896.     
  1897.      ECHO OFF
  1898.      CTTY CON
  1899.      ....
  1900.     
  1901.     This eliminates the ECHO OFF from being seen.
  1902.     
  1903.     Also whenever possible, when MarxMenu loads a copy of COMMAND.COM, it
  1904.     adds the /E:nnn command to set the environment space to the same as that
  1905.     of the Master Environment. In version 3.1 it is translated to paragraphs
  1906.     instead of bytes.
  1907.     
  1908.  
  1909.     Computer Tyme * MarxMenu * Users Manual                 Page #20
  1910.     -----------------------------------------------------------------
  1911.     
  1912.     One thing to note in early versions of DOS. If you run a batch file
  1913.     under COMMAND /C and your batch file has SET commands to set environment
  1914.     variables, the changes you make will disappear as soon as you get back
  1915.     to MARX.BAT. Why? Because you loaded another COMMAND.COM and the SET
  1916.     commands set its environment. When this COMMAND.COM ends, it takes its
  1917.     environment with it. Under DOS 3.3 or later, which uses CALL instead of
  1918.     another shell, the SET commands live. (Yet another reason to upgrade).
  1919.     
  1920.     
  1921.      ABOUT ENVIRONMENT VARIABLES
  1922.     
  1923.     I've been talking a lot about environment variables. Some of you out
  1924.     there in novice land don't know what an environment variable is. Many
  1925.     others don't know the intricate secrets handed down from the Great DOS
  1926.     Masters who know all the intricate undocumented features of DOS.
  1927.     
  1928.     Your DOS shell, COMMAND.COM owns an area of memory called the Master
  1929.     Environment. It contains strings in the form Name=Value. Included among
  1930.     those strings are your COMSPEC and your PATH. Your COMSPEC tells DOS and
  1931.     other programs where to find COMMAND.COM. Your PATH tells DOS and other
  1932.     programs what directories to search when loading programs. Another
  1933.     common environment variable is your PROMPT. This controls what your DOS
  1934.     prompt will look like.
  1935.     
  1936.     Environment variables are commonly set using the SET command. This is
  1937.     done by typing SET NAME=VALUE.
  1938.     
  1939.      Example:
  1940.         SET COLOR=BLUE
  1941.     
  1942.     So what does this actually do? Nothing, unless you have a program that
  1943.     reads the environment variables that is looking for one called COLOR.
  1944.     This way, environment variables can be used to leave messages to other
  1945.     programs and control how they behave.
  1946.     
  1947.     Besides leaving messages, environment variables can be accessed by batch
  1948.     files. If you use %NAME% in a batch file, DOS will substitute the VALUE
  1949.     of the variable for the %NAME% expression. And this feature is important
  1950.     to MarxMenu's operation.
  1951.     
  1952.     MarxMenu uses an environment variable called MXCMD. In the MARX.BAT file
  1953.     the third line is %MXCMD%. So MarxMenu controls MARX.BAT by writing
  1954.     values to MXCMD.
  1955.     
  1956.     In order to do this, there must be enough room in the environment for
  1957.     the command to fit. That is why you need to make sure that you have a
  1958.     SHELL command in your CONFIG.SYS to set space for MarxMenu to use.
  1959.     
  1960.     Now so far I've only talked about the Master Environment. That's the one
  1961.     that the first COMMAND.COM owns. Each program that is loaded, including
  1962.     TSR's, gets a copy of the Master Environment in its own environment. This
  1963.     is called the CURRENT Environment.
  1964.     
  1965.  
  1966.     Computer Tyme * MarxMenu * Users Manual                 Page #21
  1967.     -----------------------------------------------------------------
  1968.     
  1969.     One interesting feature of the Current Environment is that it is smaller
  1970.     than the Master Environment. DOS only creates enough space to hold a
  1971.     copy of the space used in the Master Environment and a little more to
  1972.     store the name of the program that is running.
  1973.     
  1974.     If one program executes another program, the environment of the parent
  1975.     program is called the Parent Environment. You will probably never need
  1976.     to deal with the Parent Environment but MarxMenu can access it in case
  1977.     you do.
  1978.     
  1979.     Another environment is the SHELL ENVIRONMENT. This is the one that THEY
  1980.     never talk about. The one you'll never read about in any books. The one
  1981.     you'll never learn about in any DOS classes. This is the one your
  1982.     parents never mentioned.
  1983.     
  1984.     The Shell Environment is normally the same as the Master Environment.
  1985.     But, if you are running more than one level of COMMAND.COM, the Shell
  1986.     Environment is the environment of the last COMMAND.COM in memory. This
  1987.     environment is the most important environment to MarxMenu.
  1988.     
  1989.     So why load up two or more COMMAND.COM's? There are several cases where
  1990.     this could occur. One case is when you want to run COMMAND.COM as a
  1991.     program under MarxMenu. This way you can type EXIT to get back to the
  1992.     menu. If you do this and then run MarxMenu again, you have two levels of
  1993.     COMMAND.COM. In this case, the first COMMAND.COM is the Master
  1994.     Environment and the second COMMAND.COM is the Shell Environment.
  1995.     
  1996.     Another place where more than one COMMAND.COM is used is if you are
  1997.     running Microsoft Windows 3 or DesqView. Both of these programs are able
  1998.     to run a DOS shell. When you do, this is a second level of COMMAND.COM.
  1999.     
  2000.     What is important is that SET commands and %NAME% commands in batch
  2001.     files deal only with the Shell Environment and not the Master
  2002.     Environment.
  2003.     
  2004.     MarxMenu can treat environment variables as if they were MarxMenu
  2005.     variables. By writing to environment variables you can store information
  2006.     that stays there even if you leave MarxMenu and return.
  2007.     
  2008.      Example:
  2009.        Writeln %PATH%
  2010.        %PATH% = 'C:\;C:\DOS;'
  2011.     
  2012.  
  2013.     Computer Tyme * MarxMenu * Users Manual                 Page #22
  2014.     -----------------------------------------------------------------
  2015.     
  2016.      DEALING WITH MULTIPLE DOS SHELLS
  2017.     
  2018.     If you are running more than one level of COMMAND.COM (shelling from
  2019.     Windows, DesqView, Word Perfect Office) and having environment space
  2020.     problems here's a trick. Before you load up your fancy shells, put this
  2021.     in a batch file like your AUTOEXEC.BAT.
  2022.     
  2023.      SET MXCMD=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  2024.     
  2025.     This variable will be trashed by MarxMenu thus freeing up the
  2026.     environment space it occupied. This will not only allow MarxMenu to run
  2027.     but may solve problems with other programs you are running that need
  2028.     environment space as well.
  2029.     
  2030.     Another option is, if you can control how the second shell is run, add
  2031.     the /E switch to the command line of COMMAND.COM to force a larger
  2032.     default environment space.
  2033.     
  2034.      Example:
  2035.         COMMAND.COM /E:400
  2036.     
  2037.     
  2038.      MARXMENU AND TSR CONTROL
  2039.     
  2040.     MarxMenu along with the TSR utilities that come with MarxMenu, can load
  2041.     and unload TSR's under menu control. This is handy when you want to run
  2042.     a big application and need to free up some memory to do it. Since
  2043.     MarxMenu is a zero k menu system, unloading TSR's is possible but it
  2044.     has it's tricks.
  2045.     
  2046.     The problem you run into is that when one batch file calls another batch
  2047.     file, the way MarxMenu normally runs, DOS creates a small batch file
  2048.     control block in memory. This control block stays in memory after the
  2049.     TSR is released creating a region of trapped memory. Although this
  2050.     memory is freed, it isn't usable.
  2051.     
  2052.     The way around it is to jump to the batch file that releases memory
  2053.     instead of calling it. This is done by setting MXCMD to the name of the
  2054.     batch file you want to run. The only problem is that when you jump to
  2055.     the other batch file, it won't automatically return to MARX.BAT. You
  2056.     must therefore end your batch file with a command bringing you back to
  2057.     MARX.BAT.
  2058.     
  2059.      MEMHOG.BAT
  2060.      -----------
  2061.      Rem UnLoad SideKick
  2062.      RELEASE SK
  2063.      CD\MEMHOG
  2064.      MEMHOG
  2065.      MARK SK
  2066.      SK
  2067.      MARX MAIN
  2068.     
  2069.  
  2070.     Computer Tyme * MarxMenu * Users Manual                 Page #23
  2071.     -----------------------------------------------------------------
  2072.     
  2073.     In your MAIN menu:
  2074.     
  2075.      OnKey 'H'
  2076.         |MxCmd = MEMHOG
  2077.     
  2078.     See the documentation file on the TSR utilities disk for more
  2079.     information on how to use MARK and RELEASE.
  2080.     
  2081.     
  2082.      NETWORK USERS:
  2083.     
  2084.     The main thing you have to worry about on a network is to make sure that
  2085.     when MarxMenu creates a temporary batch file, that it is a different one
  2086.     for each user on the network.
  2087.     
  2088.     This is handled several ways. If you are on a Novell network, MarxMenu
  2089.     uses your station number as part of the name for the temporary batch
  2090.     file. If you are not using Novell, then you will need to set an
  2091.     environment variable STATION for each workstation on your net. Each one
  2092.     has to be a different number.
  2093.     
  2094.      Example:
  2095.         SET STATION=5
  2096.     
  2097.     You must ensure that the user has enough access rights to create
  2098.     temporary batch files in the directory selected for temporary batch
  2099.     files. One solution is to create a batch file directory and give all the
  2100.     users full access rights to it.
  2101.     
  2102.     MarxMenu has been run on about every DOS based network that exists. If
  2103.     the network runs at all it will generally run MarxMenu. Among the
  2104.     networks that come to mind are Novell, Lantastic, Banyan, 3COM, Lan
  2105.     Manager, IBM, DECNET, ConCurrent DOS, PCMOS, and SCO VPIX. MarxMenu is
  2106.     running on networks as small as two users to as large as 20,000 users.
  2107.     In fact, the bigger your network, the more you need MarxMenu.
  2108.     
  2109.     If you are running Lantastic and get a "sharing violation" error when
  2110.     two people try running the menu at the same time, try setting
  2111.     MARXMENU.OVR to READ ONLY.
  2112.     
  2113.     
  2114.      NETWORK MENU STRATEGY
  2115.     
  2116.     One of the main features of MarxMenu is the ability to create "smart"
  2117.     menus. This allows you to have a single menu that everybody runs but
  2118.     each user sees different selections based on what their access rights
  2119.     are, what groups they are in, what kind of hardware is available, or
  2120.     what workstation they are on.
  2121.     
  2122.     The group access feature is a very good example of using the power of
  2123.     MarxMenu. The idea here is that for instance under Novell you would put
  2124.     users in groups and have menu selections appear based on group
  2125.     membership. Thus only the accounting department sees the payroll
  2126.     selection.
  2127.     
  2128.  
  2129.     Computer Tyme * MarxMenu * Users Manual                 Page #24
  2130.     -----------------------------------------------------------------
  2131.     
  2132.     On non-Novell networks you can group users by having them in a text file
  2133.     list of members. Then you can read the list and test if they are in the
  2134.     list. You can also read environment variables and control choices based
  2135.     upon the result.
  2136.     
  2137.     The rule with networks is to keep things as consistent and simple as
  2138.     possible. A simple well-documented network is a happy network, and it
  2139.     can make the difference whether you go home on the weekends or stay at
  2140.     the office.
  2141.     
  2142.     
  2143.      USING TRUENAME ON NETWORKS
  2144.     
  2145.     Besides using drive letters, networks use a file and directory naming
  2146.     convention called TrueName. The MarxMenu TrueName function returns the
  2147.     true name of a file. TrueName files are specified as follows:
  2148.     
  2149.      Microsoft Networks:
  2150.        \\SERVER\DIRECTORY\FILE
  2151.     
  2152.      Novell Netware:
  2153.        \\SERVER\VOLUME\DIRECTORY\FILE
  2154.     
  2155.     By using TrueNames you can specify files and directories on the network
  2156.     without having to map drive letters or make redirection list entries. If
  2157.     a TrueName of a string ends in a '\' then it is at the root directory.
  2158.     
  2159.      Example:
  2160.        C:\                ;root of C
  2161.        \\TYME\SYS\        ;root of server
  2162.        \\TYME\SYS\PUBLIC  ;not root directory
  2163.     
  2164.     
  2165.      NOVELL USERS:
  2166.     
  2167.     Novell is the most popular network on the market. We have added many
  2168.     enhancements for Novell networks to support things like logging in and
  2169.     logging out, drive mapping, group support, software metering, and status
  2170.     information.
  2171.     
  2172.     Although Novell is a high quality solid product it has its own
  2173.     "personality" and many undocumented features otherwise known as bugs.
  2174.     Most people who are having trouble with MarxMenu under Novell are really
  2175.     having trouble with Novell. Quite frankly, we do more Novell support
  2176.     than we do MarxMenu support.
  2177.     
  2178.     Having said that, we have two Novell networks. One at the lab and one at
  2179.     home and we love networks. But, we have spent hundreds of hours learning
  2180.     all the tricks. And to save you a phone call, and a lot of time, we've
  2181.     decided to share these tricks here in the manual.
  2182.     
  2183.  
  2184.     Computer Tyme * MarxMenu * Users Manual                 Page #25
  2185.     -----------------------------------------------------------------
  2186.     
  2187.     Some of these tricks are from the Great Network Gurus themselves who are
  2188.     so advanced that they no longer exist in physical form. These people
  2189.     live in another dimension of total mental existence and can only be
  2190.     reached by modem. Some of them hang out on Compuserve.
  2191.     
  2192.     We therefore strongly recommend that if you are a serious Novell user
  2193.     that you join Compuserve and hang out in the Novell section. And just
  2194.     because not everyone on Compuserve is a real person doesn't mean that
  2195.     you should feel uncomfortable asking them any question about your
  2196.     network that you need to ask.
  2197.     
  2198.     
  2199.      THE NOVELL MENU TRANSLATOR
  2200.     
  2201.     One nice bonus with Novell networks is that MarxMenu can translate your
  2202.     Novell menus to MarxMenu. This saves you the time of having to recode
  2203.     your system. What you do is type:
  2204.     
  2205.      MARXMENU NOVTRANS <menu>   <- Right Way
  2206.      MARX NOVTRANS <menu>       <- Wrong Way
  2207.     
  2208.     This translates your Novell MNU file to a MarxMenu file. Your MNU file
  2209.     is renamed with an NOV extension.
  2210.     
  2211.     Once the menu is translated you run it by typing MARX <menu> instead of
  2212.     MENU <menu>. MarxMenu can run Novell's menu better than Novell runs
  2213.     their own.
  2214.     
  2215.     Sometimes the translator isn't perfect and it takes a little tweaking of
  2216.     the original menu file for the translator to work properly. If you have
  2217.     problems translating a menu and can't make it fly, upload a copy to our
  2218.     BBS system and let us take a look at it. You might discover something
  2219.     that we should use to enhance the translator menu itself.
  2220.     
  2221.     One problem some users experience is translating Novell menus with
  2222.     greater than 20 menu options. The Novell menus scroll when there are
  2223.     more options than can be displayed on a single screen. NovTrans
  2224.     translated menus do not support this. When we get calls on this issue,
  2225.     we recommend users to break up their menus into logical groupings,
  2226.     putting applications in one window, utilities in another, etc. If you
  2227.     should experience this problem, use logical groupings to work around it.
  2228.     If you get a "Window Out Of Bounds" error it is probably because you
  2229.     have more choices than will fit on the screen.
  2230.     
  2231.     After you are satisfied with the translation you can then start
  2232.     enhancing your menus by editing the new translated menus. You might want
  2233.     to run QUICKNOV and look at it's features. If you like what you see you
  2234.     can use your editor to cut and paste code from QUICKNOV.MNU into your
  2235.     menus.
  2236.     
  2237.  
  2238.     Computer Tyme * MarxMenu * Users Manual                 Page #26
  2239.     -----------------------------------------------------------------
  2240.     
  2241.     You can also start adding InGroup commands to create conditional menus.
  2242.     Under MarxMenu you can have one single smart menu for everybody instead
  2243.     of a lot of individual menus.
  2244.     
  2245.      Example:
  2246.        if InGroup('ACCOUNTING')
  2247.           AddChoice('Payroll',10)
  2248.        endif
  2249.     
  2250.     The translated menu is set up with a lot of features that you can add
  2251.     that the original Novell menu wouldn't do. These features include
  2252.     software metering and usage logging (See METER.INC for details). You can
  2253.     also control screen blanking and add password security for unblanking
  2254.     the screen. MarxMenu can be set up to log you off the network after a
  2255.     period of inactivity (See CUSTOM.INC for details).
  2256.     
  2257.     The translated menu also allows you to select various look and feel
  2258.     options by selecting NOVELL.INC, BLOCK.INC or GRID.INC. These three
  2259.     files are similar and you can edit them to change the colors of your
  2260.     menu interface.
  2261.     
  2262.     One thing to remember is that when you change an Include file you need
  2263.     to force MarxMenu to recompile the menu. It doesn't automatically
  2264.     recompile like it does when you change the .MNU file. To force MarxMenu
  2265.     to recompile you just type MARXCOMP <menu> or delete the MRX file. (The
  2266.     MRX file is the compiled file that MarxMenu uses to actually run your
  2267.     menus.)
  2268.     
  2269.     
  2270.      LOGGING OUT UNDER MENU CONTROL
  2271.     
  2272.     Logging out under menu control is one of the trickiest things to do. The
  2273.     problem is that as soon as LOGOUT executes, you no longer have access to
  2274.     the network. This means that if you are in a batch file, you are going
  2275.     to get a "Missing Batch File" error, unless the batch file is in the
  2276.     \LOGIN directory.
  2277.     
  2278.     Another problem with logging out is making sure that your COMSPEC is
  2279.     pointing to a COMMAND.COM that is either on the local drive or in the
  2280.     \LOGIN directory. Otherwise you will get a "Cannot load COMMAND.COM"
  2281.     error.
  2282.     
  2283.     Another problem that you need to deal with is that your PATH command
  2284.     needs to be changed so that it doesn't refer to mapped drives that are
  2285.     no longer accessible.
  2286.     
  2287.     If you are logging off with a batch file, the batch file must be in the
  2288.     login directory or a local drive. If it is in the login directory your
  2289.     current drive must be the first network drive (usually F:) and this
  2290.     drive must not be map rooted to any directory.
  2291.     
  2292.  
  2293.     Computer Tyme * MarxMenu * Users Manual                 Page #27
  2294.     -----------------------------------------------------------------
  2295.     
  2296.     What you need to do is create a batch file in the \LOGIN directory
  2297.     called OFF.BAT.
  2298.     
  2299.      Example:
  2300.        F:\LOGIN\OFF.BAT
  2301.     
  2302.      SET COMSPEC=C:\COMMAND.COM
  2303.      LOGOUT
  2304.      C:
  2305.      PATH=C:\DOS
  2306.     
  2307.     To run this file the current directory must be F:\LOGIN. When using the
  2308.     MarxMenu command Logoff, MarxMenu changes to the \LOGIN directory of the
  2309.     first network drive, removes any map roots on this drive, and runs
  2310.     OFF.BAT.
  2311.     
  2312.     Setting up an OFF.BAT file is compatible with MarxMenu's automatic
  2313.     network logoff feature. This is where you can set the amount of time to
  2314.     wait at a menu before it automatically logs you off the network.
  2315.     
  2316.     Another way to logout under MarxMenu is to stuff the LOGOUT command into
  2317.     the keyboard buffer and exit MarxMenu.
  2318.     
  2319.      Example:
  2320.         OnKey ESC
  2321.           |StuffKBD 'LOGOUT' + CR
  2322.           |ExitMenu
  2323.     
  2324.     Another logout trick is to use the LOGOFF utility from the Computer Tyme
  2325.     Network Survival Kit. This program automatically fixes your PATH and
  2326.     COMSPEC after the logoff occurs.
  2327.     
  2328.     
  2329.      LOGGING IN WITH MARXMENU
  2330.     
  2331.     If there is any one thing that's trickier than logging out of a Novell
  2332.     network, its logging in. We have spent MANY hours struggling with Novell
  2333.     trying to get it right and have finally figured it out. Much of this
  2334.     comes from the Novell gurus who hang out on Compuserve and know
  2335.     everything there is to know about Novell.
  2336.     
  2337.     The first thing you need to do is make up your mind that you are going
  2338.     to do it right. The technique here might seem somewhat cumbersome, but
  2339.     it works well and will keep you out of trouble.
  2340.     
  2341.     MarxMenu has the ability to log you into a network, map your drives, and
  2342.     set your environment strings without having to touch a Novell utility to
  2343.     do so. MarxMenu can completely eliminate the need for Novell login
  2344.     scripts. The advantage of using MarxMenu to login is that you have the
  2345.     power of over 850 commands to work with instead of just 25 or so.
  2346.     
  2347.  
  2348.     Computer Tyme * MarxMenu * Users Manual                 Page #28
  2349.     -----------------------------------------------------------------
  2350.     
  2351.      USING NOVELL'S LOGIN
  2352.     
  2353.     For those of you who want to stay with Novell's login program here are
  2354.     some tips to keep you out of trouble, and our tech support lines open.
  2355.     
  2356.     The last command in your system login script needs to be EXIT "batch
  2357.     name". This batch file will be the continuation of your login logic and
  2358.     should end up jumping to the menu system. This is where TSR's can be
  2359.     loaded.
  2360.     
  2361.     Never load a TSR or run the menu from within a login script. Until the
  2362.     login script finishes, LOGIN.EXE is in memory and it uses over 100k.
  2363.     
  2364.     The first rule is don't use personal login scripts unless you have to.
  2365.     The simpler the login, the easier it is to maintain. Try to do as much
  2366.     as possible in the batch file you exit to.
  2367.     
  2368.     MarxMenu can be run from this batch file as a post login processor. In
  2369.     this case MarxMenu isn't being used as a menu but as a programming
  2370.     language that is capable of very powerful login logic. The batch file
  2371.     might look as follows:
  2372.     
  2373.      MARXMENU POST.MNU
  2374.      <load TSR's>
  2375.      MARX MAIN
  2376.     
  2377.     In POST.MNU you can set environment variables, test for directories,
  2378.     write batch files, read user lists, map drives, or any number of things
  2379.     that are useful to the login process.
  2380.     
  2381.     
  2382.      THE CONFIG.SYS FILE
  2383.     
  2384.     The place to start is the place where DOS starts when DOS boots. You
  2385.     MUST create a CONFIG.SYS file on your boot disk. The CONFIG.SYS tells
  2386.     DOS how many files and buffers to create, what device drivers to load,
  2387.     and the size of the Master Environment.
  2388.     
  2389.     Unless you are using special drivers, BUFFERS=40 and FILES=40 is a good
  2390.     place to start. STACKS 0,0 will gain you an extra 3k of RAM. But the
  2391.     most important command is the shell statement. A CONFIG.SYS file might
  2392.     look like this:
  2393.     
  2394.      SHELL=COMMAND.COM /P /E:400
  2395.      BUFFERS=40
  2396.      FILES=40
  2397.      DEVICE=ANSI.SYS
  2398.     
  2399.     This sets up enough environment space to allow MarxMenu and DOS SET
  2400.     commands to work properly. You will also want to load any other device
  2401.     drivers like QEMM386.SYS or 386MAX.SYS to take advantage of other
  2402.     features of your computer. If you don't know about CONFIG.SYS files,
  2403.     read the DOS manual.
  2404.     
  2405.  
  2406.     Computer Tyme * MarxMenu * Users Manual                 Page #29
  2407.     -----------------------------------------------------------------
  2408.     
  2409.     Network Note: If you don't have a local hard disk and are booting from a
  2410.     floppy drive, set BUFFERS=4. If you are booting from a diskless
  2411.     workstation, set BUFFERS=1. BUFFERS are used for local drives only and
  2412.     have no effect on network drives. You save 1k of memory for every 2
  2413.     buffers you don't use.
  2414.     
  2415.     
  2416.      THE AUTOEXEC.BAT FILE
  2417.     
  2418.     After the CONFIG.SYS is loaded the AUTOEXEC.BAT runs next. Here you load
  2419.     up your TSR's and network drivers. There are some important tricks to be
  2420.     used here as well.
  2421.     
  2422.     First of all, never load your network shell from your AUTOEXEC.BAT file.
  2423.     Always have it branch to another batch file called LOADNET to load the
  2424.     network shell. Use the AUTOEXEC.BAT only to load special TSR's and the
  2425.     IPX. An AUTOEXEC.BAT might look like this:
  2426.     
  2427.      @Echo Off
  2428.      Cls
  2429.      IPX
  2430.      SET NET=NETX.COM
  2431.      SET COMSPEC=O:COMMAND.COM
  2432.      LOADNET
  2433.     
  2434.     The two SET commands are very important. The first sets a variable
  2435.     called NET to NETX.COM. This will be used later in LOADNET.BAT. By using
  2436.     this variable, you can have users running many different versions of DOS
  2437.     and still use the same LOADNET.BAT file. You could also use a command
  2438.     SET NET=LOADHI EMSNETX.EXE to take advantage of advanced memory manager
  2439.     software.
  2440.     
  2441.     Another trick is to run BESTNET from the Network Survival Kit. BestNet
  2442.     will automatically pick the best network shell and set the NET
  2443.     environment variable for you. You would use the command BESTNET instead
  2444.     of SET NET=NETX.COM in the AUTOEXEC.BAT file.
  2445.     
  2446.     The SET COMSPEC=O:COMMAND.COM is important if you are booting off of
  2447.     either a floppy drive or a diskless workstation. This assumes that O:
  2448.     will eventually be mapped to a directory on the network that has a valid
  2449.     COMMAND.COM in it.
  2450.     
  2451.     It is important to set the comspec BEFORE loading your NET shell. This
  2452.     prevents a problem where Netware wants to go back to the boot disk even
  2453.     after you change the COMSPEC. We don't know why this works but it does.
  2454.     Trust Me. If you are going to use COMMAND.COM on drive C:, ignore this
  2455.     paragraph.
  2456.     
  2457.     Now we go to the LOADNET.BAT file.
  2458.     
  2459.  
  2460.     Computer Tyme * MarxMenu * Users Manual                 Page #30
  2461.     -----------------------------------------------------------------
  2462.     
  2463.      @Echo Off
  2464.      %NET%
  2465.      SET NET=
  2466.      F:
  2467.      STARTUP
  2468.     
  2469.     The big concept behind LOADNET is that this file is NEVER CHANGED. You
  2470.     put it on all your workstations and in the LOGIN directory and it is
  2471.     EXACTLY THE SAME for every computer in your network. Any changes to
  2472.     individual computers are made in the AUTOEXEC.BAT file.
  2473.     
  2474.     So why is this important? Because if you are running diskless
  2475.     workstations what happens is that while you are booting you have a
  2476.     mythical drive A:. As soon as your NET shell loads this drive
  2477.     disappears out from under you and you end up in F:\LOGIN. If you are
  2478.     running LOADNET.BAT when this happens you drop out of A:LOADNET.BAT and
  2479.     land in the middle of F:\LOADNET.BAT. And if your LOADNET.BAT is exactly
  2480.     the same file as the LOADNET.BAT in the \LOGIN directory, you take off
  2481.     running like the transition never occurred.
  2482.     
  2483.     Even if you are not running on diskless workstations now, you might go
  2484.     to it someday. It also creates good programming habits and helps you
  2485.     boot up cleanly.
  2486.     
  2487.     Let's see what LOADNET does. The first line is @ECHO OFF, that's easy.
  2488.     The second line %NET% executes the network shell that you specified with
  2489.     the SET NET=NETX command. This actually loads the network shell. The
  2490.     third line clears the NET variable freeing up space for other
  2491.     environment variables. F: switches you to drive F if you aren't there
  2492.     already. And finally STARTUP is the name of yet another batch file you
  2493.     jump to.
  2494.     
  2495.     The STARTUP.BAT file controls what happens after LOADNET runs. This file
  2496.     can be freely changed so that LOADNET.BAT can stay the same. This lets
  2497.     you modify what happens AFTER the network shell is loaded.
  2498.     
  2499.     If you are using Novell's login program STARTUP.BAT might look like
  2500.     this:
  2501.     
  2502.      @Echo Off
  2503.      LOGIN
  2504.     
  2505.     
  2506.      USING A MENU FILE TO LOG IN
  2507.     
  2508.     If you are going to use MarxMenu to log in instead of Novell's
  2509.     utilities, you will want to print out the sample file LOGIN.MNU on your
  2510.     MarxMenu disk and study it. Your STARTUP.BAT file might look like this:
  2511.     
  2512.  
  2513.     Computer Tyme * MarxMenu * Users Manual                 Page #31
  2514.     -----------------------------------------------------------------
  2515.     
  2516.      @Echo Off
  2517.      SET BOOTUP=LOGIN
  2518.      MarxMenu Login
  2519.      %BOOTUP%
  2520.     
  2521.     If MarxMenu works correctly, it will change the environment variable
  2522.     %BOOTUP% to point to a file that it creates. If for some reason it fails
  2523.     (you make a mistake in the login), it will execute Novell's login and
  2524.     let you get in and fix it.
  2525.     
  2526.     You will have to modify the LOGIN.MNU for your system. The one that I
  2527.     supply will not work on your system. It is to be used as a sample only
  2528.     and provide ideas for your login menu.
  2529.     
  2530.     One word of caution. After modifying this menu, always run MARXCOMP
  2531.     LOGIN to compile it. Otherwise, if you boot up into it you won't have
  2532.     enough access rights to recompile automatically.
  2533.     
  2534.     
  2535.      NOVELL SEARCH DRIVES
  2536.     
  2537.     MarxMenu and Network Survival Kit files need to be in the search path.
  2538.     You can copy the files into a directory that is already in the search
  2539.     path or create a new directory and add it to the search path. Here is a
  2540.     suggested setup.
  2541.     
  2542.      ---+--- SYSTEM
  2543.         |
  2544.         +--- MAIL
  2545.         |
  2546.         +--- LOGIN
  2547.         |
  2548.         +--- HOME -----+--- FRED
  2549.         |              |
  2550.         |              +--- BARNEY
  2551.         |
  2552.         +--- PUBLIC ---+--- DOS
  2553.                        |
  2554.                        +--- UTIL
  2555.                        |
  2556.                        +--- NSK
  2557.     
  2558.     I would use MAP ROOT and set up the following mapped drives:
  2559.     
  2560.       MAP ROOT H: = \HOME\BARNEY
  2561.       MAP ROOT U: = \PUBLIC\UTIL
  2562.       MAP ROOT N: = \PUBLIC\NSK    ;Network Survival Kit
  2563.       MAP ROOT O: = \PUBLIC\DOS
  2564.       MAP ROOT P: = \PUBLIC
  2565.     
  2566.  
  2567.     Computer Tyme * MarxMenu * Users Manual                 Page #32
  2568.     -----------------------------------------------------------------
  2569.     
  2570.       Set PATH=H:\;U:\;N:\;O:\;P:\;
  2571.     
  2572.     The idea here is that the user's home directory is searched first, then
  2573.     the UTIL directory where various network goodies and batch files are
  2574.     kept. Then the NSK directory where only NSK and menu files are. Then the
  2575.     DOS directory where only your original DOS files are. And finally PUBLIC
  2576.     which contains only Novell utilities.
  2577.     
  2578.     Traditionally, with Novell networks, searches have been set up using the
  2579.     current directories of paths such as:
  2580.     
  2581.       Set PATH=H:.;U:.;N:.;O:.;P:.;
  2582.     
  2583.     I have found that since the addition of the MAP ROOT enhancement that
  2584.     this traditional method is not as flexible.
  2585.     
  2586.     
  2587.      NOVELL DRIVE MAPPING TRICKS
  2588.     
  2589.     Many applications require a search drive mapped to the applications
  2590.     directory. Instead of mapping every letter in the alphabet we have
  2591.     discovered a trick. The idea is to create a floating drive letter that
  2592.     you move into the application that needs it.
  2593.     
  2594.     I map a drive W that I call my work drive. I initially set it to the
  2595.     same directory as my home directory. But when I need an extra search
  2596.     path I set it to point to the application as follows:
  2597.     
  2598.      NovMapRoot('W','P:\WINDOWS')
  2599.     
  2600.     Using this method it isn't necessary to modify your search path. You
  2601.     always search through drive W but where W is moves with your
  2602.     applications. If you need more than one extra search drive you can have
  2603.     several floating drives.
  2604.     
  2605.     You might want to include some drive mapping commands at the beginning
  2606.     of your main menu to put the floating drives back to default
  2607.     directories. This way you don't run into problems where a menu choice
  2608.     doesn't work right after running another menu choice.
  2609.     
  2610.     
  2611.      SETTING FILE ATTRIBUTES
  2612.     
  2613.     Historically Novell has recommended setting file attributes to Shareable
  2614.     and Read Only. This was to deal with DOS 3.0 and earlier and network
  2615.     dumb programs. This is now an obsolete process and if you are in the
  2616.     habit of doing this it's time to quit (unless you are still running DOS
  2617.     version 2 on your workstations).
  2618.     
  2619.     I personally flag all my network files Normal as a way of catching
  2620.     network dumb programs.
  2621.     
  2622.  
  2623.     Computer Tyme * MarxMenu * Users Manual                 Page #33
  2624.     -----------------------------------------------------------------
  2625.     
  2626.     MarxMenu is a network smart product. It therefore isn't recommended that
  2627.     any file flagging be done on Computer Tyme software.
  2628.     
  2629.     
  2630.      NOVELL SEMAPHORES
  2631.     
  2632.     For a detailed explanation of Novell Semaphores, read the Novell
  2633.     manuals. What we've done is to export these functions to MarxMenu. We
  2634.     have implemented them slightly different than Novell did and have hidden
  2635.     all the nasties from you such as semaphore handles. All semaphores are
  2636.     accessed by name only.
  2637.     
  2638.     Here's a brief overview of semaphores. Semaphores are names of shared
  2639.     resources that the server keeps track of. Semaphores have three
  2640.     properties. They have a name, value and number of users. The name can be
  2641.     anything up to 48 characters long. The value is a number from -128 to
  2642.     127. If the value is less than 0, the resource the semaphore represents
  2643.     is considered used up.
  2644.     
  2645.     By opening a semaphore, you increase the number of users by one. By
  2646.     closing it, you decrease the number by one. If a single user opens a
  2647.     semaphore many times, it is only counted as one. When you log out, your
  2648.     semaphores are closed. This is also true if you turn your computer off,
  2649.     but it takes 15 minutes for the server to give up on you.
  2650.     
  2651.     The first user to open a semaphore creates it. The last user to close a
  2652.     semaphore deletes it. When a semaphore is created, a value can be
  2653.     assigned. If a semaphore is opened that already exists, the initial
  2654.     value is ignored.
  2655.     
  2656.     When NovWaitOnSemaphore is called by any user, the value is decremented.
  2657.     If the value is not below zero, NovWaitOnSemaphore returns true.
  2658.     Otherwise it returns false and the value is unchanged. The amount of
  2659.     time that NovWaitOnSemaphore will wait is controlled by the variable
  2660.     NovSemaphoreTimeOut.
  2661.     
  2662.     When NovSignalSemaphore is called by any user, the value is incremented.
  2663.     This allows other users to call NovWaitOnSemaphore and get a True value.
  2664.     
  2665.     NovSemaphoreUsers and NovSemaphoreValue are used to read the status of a
  2666.     semaphore without changing it's value.
  2667.     
  2668.     One of the major differences between how MarxMenu uses semaphores and
  2669.     the way Novell uses them is that normally a semaphore dies when the
  2670.     application finishes. This would normally prevent a zero k menu system
  2671.     from being able to use them. MarxMenu uses an interesting trick where it
  2672.     fools Netware into thinking that the semaphore belongs to a TSR in
  2673.     memory. This allows the semaphore to live.
  2674.     
  2675.  
  2676.     Computer Tyme * MarxMenu * Users Manual                 Page #34
  2677.     -----------------------------------------------------------------
  2678.     
  2679.     Semaphores can be used for software metering. I've changed the
  2680.     semaphores to work with TSRs in upper memory. You no longer need a TSR
  2681.     in low memory for semaphores to live. This improves software metering.
  2682.     
  2683.     
  2684.      USING SEMAPHORES FOR SOFTWARE METERING
  2685.     
  2686.     An example of menu code that uses semaphores for software metering can
  2687.     be found in the file METER.INC. This metering ability is limited to
  2688.     Novell networks only.
  2689.     
  2690.     This software metering module counts how many users are using an
  2691.     application and limits it to a fixed number of users. Thus, you can save
  2692.     money on other software by limiting the number of people who can run an
  2693.     application to the number of copies you own.
  2694.     
  2695.     This can also be used to limit an application to 1 user where the
  2696.     application only works on a network for one user at a time.
  2697.     
  2698.     To use this module, add the line INCLUDE 'METER.INC' to your menu. Then
  2699.     under the OnKey you want to meter:
  2700.     
  2701.      OnKey 'W'
  2702.         |if Limit('WP',6) then Return   ;limit to 6 users
  2703.         WP
  2704.     
  2705.     In the above example, a Word Perfect choice is limited to 6 users. Thus
  2706.     you may have 20 users total but only 6 can run Word Perfect at the same
  2707.     time.
  2708.     
  2709.     The way it works is, MarxMenu creates a semaphore when it runs an
  2710.     application and stores the semaphore name in an environment variable
  2711.     named METER. When the user returns to the menu the semaphore is cleared.
  2712.     If the user turns off their computer in the middle of an application,
  2713.     netware will clear the semaphore within 15 minutes.
  2714.     
  2715.     USAGE LOGGING:
  2716.     
  2717.      OnKey 'W'
  2718.         |LogIt('WordPerfect')
  2719.         WP
  2720.     
  2721.     This will send a log line to the log file that is a comma delimited
  2722.     ascii line with fields as follows:
  2723.     
  2724.      "UserName","Program","Start Time","End Time"
  2725.     
  2726.  
  2727.     Computer Tyme * MarxMenu * Users Manual                 Page #35
  2728.     -----------------------------------------------------------------
  2729.     
  2730.      NETWARE MHS & MARXMENU
  2731.     
  2732.     MarxMenu has the ability to interface to NetWare MHS which allows
  2733.     MarxMenu to send and receive messages. You need to have a copy of
  2734.     NetWare MHS to use this feature which can be purchased from your
  2735.     friendly neighborhood NetWare dealer.
  2736.     
  2737.     MHS stands for Message Handling System and the way it works is that you
  2738.     have a dedicated mail transport computer on the network. This computer
  2739.     is like a mailman and it goes around and looks for outgoing mail every
  2740.     little bit. If it finds mail it reads the address and delivers it.
  2741.     
  2742.     Any application program, such as MarxMenu, need only leave a text file
  2743.     in a special outgoing directory and put an address header on the file.
  2744.     Here's an example of how this is done:
  2745.     
  2746.      Example:
  2747.        var Message
  2748.     
  2749.        {MHS Header}
  2750.     
  2751.        AppendArray(Message,'SMF-70')
  2752.        AppendArray(Message,'FROM:MARC @ CTYME')
  2753.        AppendArray(Message,'TO:VICKI @ CTYME')
  2754.        AppendArray(Message,'SUBJECT:The Princess Called!')
  2755.     
  2756.        {Blank line separates header from message}
  2757.     
  2758.        AppendArray(Message,'')
  2759.     
  2760.        AppendArray(Message,'The Princess needs a ride home from dance')
  2761.        AppendArray(Message,'class and wants to get some money to go')
  2762.        AppendArray(Message,'skating. She wants to know if you can pick')
  2763.        AppendArray(Message,'them up at midnight and if 5 little girls')
  2764.        AppendArray(Message,'can stay over night.')
  2765.     
  2766.        WriteTextFile(MhsSendDirectory + '\' + UniqueFileName,Message)
  2767.     
  2768.     When MarxMenu creates a file in this format, MHS will pick up the file
  2769.     and deliver it. When it's delivered it will be like any other message
  2770.     and will appear in your favorite MHS Mail system. You can also use this
  2771.     feature to notify you when your fax server receives a fax.
  2772.     
  2773.     To receive a message, see the example under MhsReadFile. All MHS
  2774.     commands start with Mhs. By using these MHS features, MarxMenu can be
  2775.     used as a network job server that is triggered by messages sent to it
  2776.     and reports it's results by sending messages.
  2777.     
  2778.  
  2779.     Computer Tyme * MarxMenu * Users Manual                 Page #36
  2780.     -----------------------------------------------------------------
  2781.     
  2782.      UPGRADING MARXMENU
  2783.     
  2784.     When installing an upgraded version of MarxMenu be sure to copy the
  2785.     MARXMENU.EXE, MARXMENU.OVR and MARXCOMP.EXE files into your MarxMenu
  2786.     directory. A very common mistake is not copying the MARXMENU.OVR file.
  2787.     If you forget this file MarxMenu will lock up when you try to run it.
  2788.     If you are on a network and anyone on the network is using the menu you
  2789.     won't be able to copy over MARXMENU.OVR. You will have to wait until
  2790.     after hours or chase everyone out of the menu to install the upgrade.
  2791.     
  2792.     A common mistake occurs when you copy the MarxMenu file into a working
  2793.     directory and someone else has the MARXMENU.OVR file open and you fail
  2794.     to notice that it failed to copy. If MarxMenu starts locking up after an
  2795.     upgrade this is probably why. Make sure the file dates on MARXMENU.EXE
  2796.     and MARXMENU.OVR are the same.
  2797.     
  2798.     After installing the new MarxMenu, all your menu files will have to be
  2799.     recompiled. This should happen automatically, but if you are on a
  2800.     network and the users don't have enough access rights the compile will
  2801.     fail. You can recompile all your network menus as follows:
  2802.     
  2803.      WHEREIS *.MNU|DOLIST MARXCOMP @L
  2804.     
  2805.     If you are using MarxMenu to log into the network then be sure to copy
  2806.     the new MarxMenu files into your LOGIN directory and recompile your
  2807.     LOGIN menu.
  2808.     
  2809.     If you install MarxMenu in one directory and then move it to another you
  2810.     will have to run MARXMENU INST to recreate the batch files for that
  2811.     directory. Make sure that the MarxMenu files are on your PATH.
  2812.     
  2813.     Any time you upgrade, MarxMenu should work as well or better than the
  2814.     previous version. Occasionally we make a mistak so you might want to copy
  2815.     your present NSK directory to another temporary directory until the
  2816.     upgrade is complete and tested. This gives you the ability to go back to
  2817.     the old one should the need arise. This procedure should be followed on
  2818.     software upgrades from other vendors as well.
  2819.     
  2820.     
  2821.      CUSTOMIZING MARXMENU SAMPLE FILES
  2822.     
  2823.     Included in the MarxMenu package are menu files which you can easily
  2824.     modify to execute your programs and perform other functions you desire.
  2825.     Using MarxEdit, the text editor included in this package, you can modify
  2826.     and customize these menu files.
  2827.     
  2828.     Also included to demonstrate the power and versatility of the menu
  2829.     system is a game menu NIM.MNU. This is a game written in the menu system
  2830.     that demonstrates some of the logic functions and programmability of the
  2831.     system.
  2832.     
  2833.  
  2834.     Computer Tyme * MarxMenu * Users Manual                 Page #37
  2835.     -----------------------------------------------------------------
  2836.     
  2837.      Here's a simple example of a menu file:
  2838.      ===================================
  2839.      ClearScreen
  2840.      DrawBox 30 9 25 8
  2841.      Writeln ' 1) Lotus'
  2842.      Writeln ' 2) dBase'
  2843.      Writeln ' 3) Wordstar'
  2844.      Writeln
  2845.      Write 'Select: '
  2846.     
  2847.      OnKey '1'
  2848.         cd\lotus
  2849.         123
  2850.     
  2851.      OnKey '2'
  2852.         cd\db3
  2853.         db3
  2854.     
  2855.      OnKey '3'
  2856.         cd\wordstar
  2857.         ws
  2858.     
  2859.      ====================================
  2860.     
  2861.     Notice in looking at the "OnKey" statements that all you have to do is
  2862.     tell MarxMenu how to get to the program. Although, MarxMenu takes care
  2863.     of reloading itself after exiting a selected program, its does not
  2864.     return to its own subdirectory as many other menu programs do.
  2865.     
  2866.     That means that if you execute a program in another subdirectory, when
  2867.     you come back to the menu, you remain in that subdirectory. If you
  2868.     normally run your applications with a batch file, consider having
  2869.     MarxMenu change directories and execute the program for you. This will
  2870.     eliminate debugging problems caused by the actions of your batch files.
  2871.     
  2872.     
  2873.      MENU ANALYSIS
  2874.     
  2875.     Let's start a simple analysis of the example menu file shown above. The
  2876.     ClearScreen statement simply clears the screen to give us a fresh
  2877.     workspace for the menu. DrawBox is the command to draw a box on the
  2878.     screen. The Writeln command writes a line of text to the screen within
  2879.     the box, then positions the cursor on the next line. The menu text shows
  2880.     the available selection keys that the user has access to.
  2881.     
  2882.  
  2883.     Computer Tyme * MarxMenu * Users Manual                 Page #38
  2884.     -----------------------------------------------------------------
  2885.     
  2886.      ONKEY STATEMENTS
  2887.     
  2888.     The OnKey statements control what is actually executed. OnKey statements
  2889.     also allow you to execute hidden commands when you do not want them to
  2890.     appear on the menu screen. One trick we use is to have an OnKey
  2891.     statement define a key that runs MarxEdit on each users personal menu
  2892.     file. We don't show this key on the menu to keep others from poking
  2893.     around in the file. For additional security a password can also be set
  2894.     up on this key.
  2895.     
  2896.     Normally you enter a line of text as if you were creating a BAT file to
  2897.     run your application. Like batch files, if one of your commands is a
  2898.     batch file, all the statements after it will not execute. To prevent
  2899.     this you can use the CALL command to call a batch file in DOS 3.3 or
  2900.     later, or COMMAND /C in DOS 3.1 and 3.2.
  2901.     
  2902.     Normally, text displayed under an OnKey statement is the same text as
  2903.     the batch file created by MarxMenu. There are some exceptions: If a line
  2904.     starts with a "|" (vertical bar), the line will be interpreted by
  2905.     MarxMenu instead of being written to a batch file. This allows commands
  2906.     such as "PASSWORD" to be used. String variables can be passed as part of
  2907.     a batch command if the name of the string variable starts with a "%"
  2908.     symbol.
  2909.     
  2910.     The spaces preceding the commands under the OnKey statement are
  2911.     for clarity only. They are not necessary for MarxMenu to function
  2912.     properly.
  2913.     
  2914.     Sometimes you need more control over what commands actually go into the
  2915.     batch file that MarxMenu executes. You might want to input test from the
  2916.     user or have the user make a choice from a list that will become part of
  2917.     the batch file that is executed. The BAT command is used to do this.
  2918.     
  2919.     Let's say you want the user to enter the name of a directory to back up
  2920.     to a floppy. Here's how this might be done:
  2921.     
  2922.      Example:
  2923.        OnKey 'B'
  2924.           |DrawBox 15 10 55 3
  2925.           |Write 'Enter Directory: '
  2926.           |BackupDir = Readln
  2927.           |if (LastKey = Esc) or (not ExistDir(BackupDir))
  2928.           |   Return
  2929.           |endif
  2930.           |Bat 'XCOPY ' + BackupDir + ' A: /S'
  2931.           DIR A:
  2932.           PAUSE
  2933.     
  2934.  
  2935.     Computer Tyme * MarxMenu * Users Manual                 Page #39
  2936.     -----------------------------------------------------------------
  2937.     
  2938.     Notice that the commands under the OnKey statement start with a vertical
  2939.     bar. This is because they are MarxMenu commands rather than batch file
  2940.     commands. Remember you are dealing with two languages here. MarxMenu
  2941.     understands MarxMenu commands and DOS understands batch commands. When
  2942.     you are under an OnKey statement all commands are written to a memory
  2943.     buffer which are written to a batch file when MarxMenu exits. DOS then
  2944.     runs this batch file. If you start a command with a vertical bar under
  2945.     an OnKey command then MarxMenu will see the command.
  2946.     
  2947.     The BAT command is a MarxMenu command that allows you to write lines to
  2948.     the batch file that is being created. It allows you more specific
  2949.     control of execution by allowing you to include MarxMenu variables in
  2950.     the DOS command.
  2951.     
  2952.     
  2953.      POPUP MENUS
  2954.     
  2955.     If you want to create a popup menu within a menu you can do so by
  2956.     using a "label". A label is a keyword preceded by a colon. To
  2957.     call the popup menu, place the keyword on a line by itself
  2958.     preceded by a carat (Shift 6). The label will precede the popup
  2959.     menu definition.
  2960.     
  2961.     For example if you have a popup menu to load Smart Software, you could
  2962.     name the PopUpMenu Smart. To bring up the Smart PopUpMenu, define a key
  2963.     in your main menu for Smart like this:
  2964.     
  2965.      OnKey 'S'
  2966.         ^Smart
  2967.     
  2968.     The Smart menu itself might look something like this:
  2969.     
  2970.      :Smart
  2971.      BoxHeaderColor ForeColor BackColor
  2972.      BoxBorderColor Yellow Green
  2973.      BoxInsideColor LCyan Green
  2974.      InverseColor Yellow Red
  2975.      BoxHeader = ' Smart Menu '
  2976.      DrawBox 45 16 20 6
  2977.      UseArrows 2 2 16 3
  2978.      ClearLine 205
  2979.      Writeln
  2980.      Writeln '  Data Base'
  2981.      Writeln '  Spread Sheet'
  2982.      Write   '  Word Processor'
  2983.     
  2984.      OnKey 'D'
  2985.        SM D
  2986.     
  2987.  
  2988.     Computer Tyme * MarxMenu * Users Manual                 Page #40
  2989.     -----------------------------------------------------------------
  2990.     
  2991.      OnKey 'S'
  2992.        |BoxHeaderColor ForeColor BackColor
  2993.        |BoxBorderColor Yellow Green
  2994.        |BoxInsideColor White Green
  2995.        |%1 = PickFile('C:\SMART\SPREAD\*.WS',4,5,17)
  2996.        SM S -ALOAD %1
  2997.     
  2998.      OnKey 'W'
  2999.        |BoxHeaderColor ForeColor BackColor
  3000.        |BoxBorderColor Yellow Green
  3001.        |BoxInsideColor White Green
  3002.        |%1 = PickFile('C:\SMART\WORD\*.DOC',4,5,17)
  3003.        SM W -ALOAD %1
  3004.     
  3005.     While developing the menu, program one of the keys to run your favorite
  3006.     editor on the menu file that you are creating. This way, as soon as the
  3007.     change is made, the results will show when you exit your editor. Since
  3008.     MarxMenu allows versatility in creating the look of your menus, a little
  3009.     trial and error will be required to make things look right.
  3010.     
  3011.     
  3012.      THE CONSOLE
  3013.     
  3014.             +---| Console Functions |---+
  3015.             | 1 - Blank Screen          |
  3016.             | 2 - Set Blank Message     |
  3017.             | 3 - Lock Keyboard         |
  3018.             | 4 - Set Blank Time        |
  3019.             +---------------------------+
  3020.     
  3021.     The Console is a popup menu of built-in functions. To activate the
  3022.     console, press the TAB key. A menu will popup in the upper
  3023.     left-hand-corner of the screen. You can change the position of this
  3024.     popup menu with the ConsolePos function.
  3025.     
  3026.     The first command on the Console screen is Blank Screen. Enter 1 and the
  3027.     screen will blank immediately. It will remain blanked until a key is
  3028.     pressed. Enter 2 on the Console menu and you can change the message
  3029.     displayed on the Blank Screen display.
  3030.     
  3031.     Enter 3 and you will be prompted for a word to lock the keyboard. After
  3032.     you enter the lock word the screen will blank and the keyboard will be
  3033.     locked until the exact lock word is typed. Enter 4 to set the number of
  3034.     minutes to wait before blanking the screen.
  3035.     
  3036.     The lock word feature is handy for times when you must leave the
  3037.     keyboard but don't want menu commands displayed for all to see. It also
  3038.     effectively locks the keyboard so someone can't escape to DOS and test
  3039.     the format command on your hard disk. We run this menu on a Novell
  3040.     Network and don't want to let everyone have access to the Supervisors'
  3041.     power at the touch of the escape key should we leave the keyboard.
  3042.     
  3043.  
  3044.     Computer Tyme * MarxMenu * Users Manual                 Page #41
  3045.     -----------------------------------------------------------------
  3046.     
  3047.      REPOSITIONING THE TOP WINDOW
  3048.     
  3049.     One nice feature you can use to play with the positioning of a window is
  3050.     to turn on the scroll lock. This lets you move the top window around the
  3051.     screen using the arrow keys so you can see how it looks. Then you can go
  3052.     into your menu code and set it permanently.
  3053.     
  3054.     Set Scroll Lock to "on". On most keyboards, a scroll lock LED will light
  3055.     up. Now use the arrow keys to move the top window to any position on the
  3056.     screen. Neat huh?
  3057.     
  3058.     If you want to prevent users from moving the menus around using this
  3059.     feature, add the command, "ScrollMove Off" to your menu.
  3060.     
  3061.     
  3062.      MOUSE SUPPORT
  3063.     
  3064.     If you have a standard mouse driver, MarxMenu will detect it and use it
  3065.     automatically. The left button on the mouse is the same as pressing
  3066.     return. The right button on the mouse is the same as pressing escape.
  3067.     Pressing both buttons on the mouse is the same as pressing the tab key.
  3068.     As of yet, the center button on the mouse is not used for anything.
  3069.     
  3070.     The sensitivity of the mouse can be controlled using the MouseHorizontal
  3071.     and MouseVertical commands or by setting environment variables MOUSEX
  3072.     and MOUSEY.
  3073.     
  3074.     
  3075.      STARTING OFF THE EASY WAY
  3076.     
  3077.     For those of you who want to just get a menu going and don't want
  3078.     anything complicated we have included a menu called the LEVEL1 menu.
  3079.     This menu is a fill-in-the-blank type of menu that will get you going
  3080.     quickly and easily.
  3081.     
  3082.     This menu requires no programming and explains itself. You run it by
  3083.     typing the command:
  3084.     
  3085.      MARX LEVEL1
  3086.     
  3087.     The first thing it does is scan your drive to find the directories. Then
  3088.     you just answer the questions and fill in the menu. This isn't as
  3089.     powerful as programming your own menu, but if you want something quick
  3090.     and dirty, this may be the answer for you.
  3091.     
  3092.     Although the LEVEL1 menu example will work on networks, it is mostly
  3093.     intended for single user use.
  3094.     
  3095.  
  3096.     Computer Tyme * MarxMenu * Users Manual                 Page #42
  3097.     -----------------------------------------------------------------
  3098.     
  3099.      ABOUT VARIABLES
  3100.     
  3101.     One of the most unusual things about MarxMenu is its variables. MarxMenu
  3102.     handles variables differently than any other programming language. For
  3103.     the experienced programmer, this may require some adjustment since it's
  3104.     like getting used to driving a Cadillac after driving a VW Beetle.
  3105.     
  3106.     All variables in MarxMenu are like an empty box that can contain
  3107.     anything. A variable can be a number, boolean, string, file, array, etc.
  3108.     The type of variable is controlled internally and the user need not
  3109.     declare variable types.
  3110.     
  3111.     Variables are created with the VAR command:
  3112.     
  3113.      Var X Y Z
  3114.     
  3115.     If the word VAR is on a line by itself, the following lines, up to a
  3116.     blank line, are considered variable names.
  3117.     
  3118.      Var
  3119.        MyAge
  3120.        YourAge
  3121.        HisAge
  3122.        HerAge
  3123.     
  3124.     Variables are initialized to null values; 0 for Numbers, False for
  3125.     Booleans, and '' for strings. Initial values can be set when the
  3126.     variable is created.
  3127.     
  3128.      Var
  3129.        X = 6
  3130.        MyName = 'Marc'
  3131.        Programmer = True
  3132.     
  3133.     Variables can change variable types. If you write a number to a string
  3134.     variable, the variable changes to a number.
  3135.     
  3136.      X = '234'
  3137.      X = Value(X)
  3138.     
  3139.     This is valid in MarxMenu. X now is a number and contains the value 234.
  3140.     
  3141.     When choosing variable names, it is good programming practice to choose
  3142.     long meaningful names. This allows yourself and others to be able to
  3143.     read menus and follow the logic more easily.
  3144.     
  3145.  
  3146.     Computer Tyme * MarxMenu * Users Manual                 Page #43
  3147.     -----------------------------------------------------------------
  3148.     
  3149.      NUMERIC VARIABLES
  3150.     
  3151.     MarxMenu supports two kinds of numbers, 32 bit integers and real
  3152.     (floating point) numbers. Integers are whole numbers in the range of
  3153.     plus or minus 2,147,483,647. This gives you a wide range of numbers but
  3154.     no fractions.
  3155.     
  3156.     With integers the answers to division are always rounded down thus:
  3157.     
  3158.      7 / 3 = 2
  3159.     
  3160.     Numbers beginning with a '$' indicate base 16 or hex numbers.
  3161.     
  3162.      Example:
  3163.        $20 is the same as 32
  3164.     
  3165.     
  3166.      BOOLEAN VARIABLES
  3167.     
  3168.     Boolean variables are True or False. For example:
  3169.     
  3170.      var Adult
  3171.         Adult = True
  3172.         if not Adult then Write 'You must be 21 to enter.'
  3173.     
  3174.     Boolean values can be set by computation:
  3175.      Example:
  3176.         Adult = Age >= 21
  3177.     
  3178.     In this example the result of Age >= 21 is stored in the variable Adult.
  3179.     
  3180.     If you use a boolean variable by itself, MarxMenu assumes you are
  3181.     setting it to on. Thus:
  3182.     
  3183.       ClearScreenOnExit
  3184.     
  3185.     is the same as:
  3186.     
  3187.       ClearScreenOnExit On
  3188.     
  3189.     
  3190.      STRING VARIABLES
  3191.     
  3192.     String variables are limited to 255 characters.
  3193.     
  3194.     In MarxMenu, string literals are delimited by either single or double
  3195.     quotes.
  3196.     
  3197.      "This can't be yogurt!"
  3198.      'Lincoln said "Four score and seven years ago ..." '
  3199.     
  3200.  
  3201.     Computer Tyme * MarxMenu * Users Manual                 Page #44
  3202.     -----------------------------------------------------------------
  3203.     
  3204.      REAL NUMBERS
  3205.     
  3206.     So what's the difference between ordinary numbers and real numbers?
  3207.     Ordinary numbers in MarxMenu are 32 bit integers. These are numbers
  3208.     whose range is about plus or minus two billion. Integers are whole
  3209.     numbers and do not include any fractions.
  3210.     
  3211.     This is why MarxMenu has included REAL numbers (also known as Floating
  3212.     Point numbers). Real numbers in MarxMenu use BCD (Binary Coded Decimal)
  3213.     with 18 digits of accuracy. They have a range of 10 to the plus or minus
  3214.     63rd power, which means up to 63 zeros either side of the decimal point.
  3215.     This lets you work with very big and very small numbers.  MarxMenu has
  3216.     smart rounding algorithms so that 1.0 / 3 * 3 = 1.0 and not
  3217.     0.999999999999999999 like in most languages.
  3218.     
  3219.     Real numbers are specified by using a decimal point. Thus 5.0 specifies
  3220.     a real number. Most normal MarxMenu functions still require the standard
  3221.     32 bit integers. If you get the error: 'REAL found where INTEGER
  3222.     expected.' You need to use an integer.
  3223.     
  3224.     If an integer is passed where a real is expected, the integer is
  3225.     automatically converted to a real. Thus:
  3226.     
  3227.      6.0 * 3 = 18.0
  3228.     
  3229.     The Value function returns real numbers if a decimal point is used in
  3230.     the string. All the relevant math functions will work with reals as well
  3231.     as comparison operators.
  3232.     
  3233.     MarxMenu supports a variety of functions for real numbers. It has trig
  3234.     functions, log functions, and exponential functions. So why do you need
  3235.     real numbers in a menu program? We don't know. The author had a library
  3236.     and threw them in. We figure someone will need them someday.
  3237.     
  3238.     With real numbers you can do trigonometry calculations like those
  3239.     discovered by the ancient Indian chief Pythagoras who discovered what is
  3240.     now known as Pythagoras's triangle.
  3241.     
  3242.     Now we know that a lot of you were taught in Math class that Pythagoras
  3243.     was Greek. Well, it's just not so. Here is the real story:
  3244.     
  3245.     Pythagoras was an Indian chief who had three wives. Two of the wives
  3246.     were twins and weighed 120 pounds each. And they sat next to Pythagoras
  3247.     on a pair of twin deer hides. But Pythagoras also had a third wife who
  3248.     was a large fat woman who sat across from Pythagoras on a hippopotamus
  3249.     hide. This wife weighed 240 pounds.
  3250.     
  3251.     What Pythagoras discovered was that the squaw on the hypopotamus was
  3252.     equal to the sum of the squaws on the other two hides!
  3253.     
  3254.  
  3255.     Computer Tyme * MarxMenu * Users Manual                 Page #45
  3256.     -----------------------------------------------------------------
  3257.     
  3258.      LOCAL VARIABLES
  3259.     
  3260.     MarxMenu also supports local variables. Variables declared within
  3261.     procedures become local variables. Local variables are just like global
  3262.     variables in that you can use them as multidimensional arrays. When the
  3263.     procedure finishes, all local variables are disposed.
  3264.     
  3265.     If a local variable has the same name as a global variable, the local
  3266.     variable will be used.
  3267.     
  3268.     
  3269.      DATES
  3270.     
  3271.     Dates in MarxMenu are stored as the number of seconds since January 1,
  3272.     1980. This gives MarxMenu a date range of 68 years. By subtracting two
  3273.     dates, you get the number of seconds between two periods of time.
  3274.     
  3275.     MarxMenu has several commands that convert text strings to dates. Here
  3276.     are some examples of how MarxMenu sees text dates.
  3277.     
  3278.      Examples:
  3279.        '4-7-91'                 ;04-07-1991 00:00:00
  3280.        'April 7th, 1991 4:35pm' ;04-07-1991 16:35:00
  3281.        '12:35:23a'              ;04-07-1991 00:35:23
  3282.        '3:15'                   ;04-07-1991 03:15:00
  3283.     
  3284.     If the string can't be converted, then the variable BadDate is set to
  3285.     true.
  3286.     
  3287.     MarxMenu can also convert dates to strings by using the DateString and
  3288.     TimeString commands.
  3289.     
  3290.     
  3291.      PASSING PARAMETERS TO PROCEDURES
  3292.     
  3293.     Procedures can accept parameters by declaring variable names on the same
  3294.     line as the name of the procedure.
  3295.     
  3296.     Procedures can return variables by using the Return command. Return
  3297.     exits the procedure returning the parameters on the same line as the
  3298.     Return statement.
  3299.     
  3300.      Example:
  3301.      Procedure Factorial (X)
  3302.      var Y Z
  3303.         Y = 1
  3304.         Z = 1
  3305.         while Y <= X
  3306.            Z = Y * Z
  3307.            Y = Y + 1
  3308.         endwhile
  3309.         Writeln X ' factorial is ' Z
  3310.      EndProc
  3311.     
  3312.  
  3313.     Computer Tyme * MarxMenu * Users Manual                 Page #46
  3314.     -----------------------------------------------------------------
  3315.     
  3316.     In this example, if you were to use Factorial (5) you would get:
  3317.     
  3318.      5 factorial is 120
  3319.     
  3320.      Another example:
  3321.     
  3322.      Procedure AskYesNo (Question)
  3323.      var YesNo
  3324.         DrawBox (34 - (Length(Question) / 2)) 21 Length(Question) + 14 3
  3325.         TextColor LCyan Blue
  3326.         UseArrows Off
  3327.         Write ' ',Question,' (Y/N) '
  3328.         YesNo = UpperCase(ReadKey)
  3329.         YesNo = YesNo = 'Y'
  3330.         if YesNo
  3331.            Write 'Yes'
  3332.         else
  3333.            Write 'No'
  3334.         endif
  3335.         Wait 50
  3336.         EraseTopWindow
  3337.         Return (YesNo)
  3338.      EndProc
  3339.     
  3340.      if AskYesNo 'Do you want to continue? ' then Continue
  3341.     
  3342.     In this example, MarxMenu draws a box and asks a question and waits for
  3343.     a "Yes" or "No" answer.
  3344.     
  3345.     Arrays can be passed as parameters. Parameters are passed by value not
  3346.     by reference. This means that any changes to the passed parameter do not
  3347.     affect the original value.
  3348.     
  3349.     You can copy an array by assigning it equal to another array.
  3350.     
  3351.      Example:
  3352.        Array1 = Array2
  3353.     
  3354.     This creates Array1 with a copy of all the elements of Array2. The
  3355.     previous contents of Array1 are overwritten.
  3356.     
  3357.     
  3358.      ABOUT CONSTANTS
  3359.     
  3360.     Constants are used to give values meaningful names. By using constants a
  3361.     value can be assigned once and the constant name used throughout the
  3362.     menu program. This way, if you change the value of the constant, all the
  3363.     places where that constant is used automatically change.
  3364.     
  3365.  
  3366.     Computer Tyme * MarxMenu * Users Manual                 Page #47
  3367.     -----------------------------------------------------------------
  3368.     
  3369.     This is good programming practice.
  3370.     
  3371.      Examples:
  3372.     
  3373.      Const States = 50 CPU = '80386 SX' WeekEnd = True
  3374.     
  3375.      or
  3376.     
  3377.      Const
  3378.         States = 50
  3379.         CPU = '80386 SX'
  3380.         WeekEnd = True
  3381.     
  3382.     Using the word STATES is just like using 50. Using CPU is just like
  3383.     using '80386 SX'. But if throughout my menu you use CPU, and then you
  3384.     get a new computer with a 80486, you can just change one line:
  3385.     
  3386.      Const CPU = '80486'
  3387.     
  3388.     And all the places you used CPU changes to '80486'. This is the correct
  3389.     way to program.
  3390.     
  3391.     
  3392.      ABOUT ARRAYS
  3393.     
  3394.     MarxMenu supports multidimensional arrays up to 31 dimensions. Unlike
  3395.     other programming languages, arrays need not be declared. MarxMenu
  3396.     creates arrays "on the fly" and automatically takes care of the array
  3397.     size and number of dimensions.
  3398.     
  3399.     Another unusual feature of MarxMenu arrays is that they are an array of
  3400.     MarxMenu variables. This means that elements of MarxMenu arrays need not
  3401.     be of the same type. Element 1 can be a number, element 2 can be a
  3402.     string and element 3 can be another array.
  3403.     
  3404.     This type of variable management leads to the easy creation of very
  3405.     powerful data structures as you will see.
  3406.     
  3407.      Var X
  3408.     
  3409.      X[1] = 'Element 1'
  3410.      X[2] = 3
  3411.      X[3] = True
  3412.      X[4,6] = 9
  3413.      X[4,7] = 'Ten'
  3414.     
  3415.     These are all valid statements. MarxMenu creates a two dimensional array
  3416.     here. If we now execute the following statement:
  3417.     
  3418.  
  3419.     Computer Tyme * MarxMenu * Users Manual                 Page #48
  3420.     -----------------------------------------------------------------
  3421.     
  3422.      X[4] = X[4,6] + X[2]
  3423.     
  3424.     X[4] becomes equal to 12 but variables X[4,6] and X[4,7] are lost. This
  3425.     is because we have changed an array into a number. MarxMenu
  3426.     automatically handles the deallocation of memory used by this array and
  3427.     its elements and returns the space the used to the memory pool.
  3428.     
  3429.     
  3430.      ABOUT QUALIFIERS
  3431.     
  3432.     Qualifiers are named indexes into arrays. They are used to make the
  3433.     source menu file more readable and more organized.
  3434.     
  3435.     Suppose we are creating a data structure to deal with places in the
  3436.     United States. First we will need an array for States.
  3437.     
  3438.      Var States
  3439.     
  3440.      We want to store some facts about the states.
  3441.     
  3442.      Qualifier
  3443.         Population
  3444.         Bird
  3445.         Motto
  3446.         County
  3447.     
  3448.      State[3].Population = 10000000
  3449.      State[3].Bird = 'Chicken'
  3450.      State[3].Motto = 'Best politicians money can buy!'
  3451.     
  3452.     Now states have counties and counties have county seats, sheriffs, and
  3453.     cities.
  3454.     
  3455.      Qualifer
  3456.         Sheriff
  3457.         Seat
  3458.         City
  3459.     
  3460.      State[3].County[7].Sheriff = 'Buck InBred'
  3461.      State[3].County[7].Seat = 'Possum Trot'
  3462.     
  3463.     Now counties have cities and cities have schools, mayors, churches, and
  3464.     taxes.
  3465.     
  3466.      Qualifier
  3467.         Schools
  3468.         Mayor
  3469.         Churches
  3470.         Taxes
  3471.     
  3472.  
  3473.     Computer Tyme * MarxMenu * Users Manual                 Page #49
  3474.     -----------------------------------------------------------------
  3475.     
  3476.      State[3].County[7].City[9].Schools = 8
  3477.      State[3].County[7].City[9].Mayor = 'Virgil Collins'
  3478.      State[3].County[7].City[9].Churches = 120
  3479.      State[3].County[7].City[9].Taxes = '$100,000,000'
  3480.     
  3481.     The above line is the same as:
  3482.     
  3483.      State[3,4,7,3,9,4] = '$100,000,000'
  3484.     
  3485.     As you can see with qualifiers, it is easy to create multidimensional
  3486.     arrays in a way that is organized and readable.
  3487.     
  3488.     In this example, the qualifier Population became equal to 1. Bird became
  3489.     equal to 2. The variable references, State[3].Bird and State[3,2] are
  3490.     the same. It's just that one is more readable than the other. Qualifiers
  3491.     normally begin by assigning 1 to the first name and 2 to the second,
  3492.     etc. This can be modified.
  3493.     
  3494.      Qualifier
  3495.        Color = 7
  3496.        Size
  3497.        Shape
  3498.     
  3499.     In this case Color becomes the number 7; Size becomes the number 8; and
  3500.     Shape becomes the number 9.
  3501.     
  3502.     
  3503.      POINTER VARIABLES
  3504.     
  3505.     In MarxMenu, variables can point to other variables allowing parameters
  3506.     to be passed to procedures by reference as well as by value. A pointer
  3507.     variable stores the location of another variable. Any time a pointer
  3508.     variable is accessed, MarxMenu acts upon the variable that the pointer
  3509.     variable is pointing to. Pointer variables are set using the Loc
  3510.     (location) command.
  3511.     
  3512.      Example:
  3513.        Var A B C
  3514.        A = Loc B
  3515.     
  3516.     MarxMenu supports complex location pointers and pointers to other
  3517.     pointers. MarxMenu will resolve all references until real data is found.
  3518.     
  3519.      Example:
  3520.        B = Loc A
  3521.        C = Loc B
  3522.        C[5] = 20
  3523.        Writeln A[5]  ;returns 20
  3524.     
  3525.  
  3526.     Computer Tyme * MarxMenu * Users Manual                 Page #50
  3527.     -----------------------------------------------------------------
  3528.     
  3529.     Pointers can also be passed as parameters to procedures. Thus if A is an
  3530.     array of strings we can sort A as follows:
  3531.     
  3532.      Procedure SortTest (TestArray)
  3533.         SortArray(TestArray)
  3534.      EndProc
  3535.     
  3536.      SortTest (Loc A)  ;sorts array A
  3537.     
  3538.     
  3539.      COMMENTS IN MENU FILES
  3540.     
  3541.     MarxMenu has three ways to add comments to a menu file. The first way is
  3542.     with the Comment command.
  3543.     
  3544.      Comment
  3545.      ========================
  3546.      This is a comment block.
  3547.      ========================
  3548.      EndComment
  3549.     
  3550.     All lines up to EndComment are ignored.
  3551.     
  3552.     The second way is with a ';'. All text to the right of the ';'
  3553.     (semicolon) is ignored.
  3554.     
  3555.      BlankTime = 20  ;this is where we set the blank time.
  3556.     
  3557.     The third way is using {} or curly braces. Anything inside the curly
  3558.     braces is ignored. Curly braces can be nested.
  3559.     
  3560.      {All of {this} is a comment.}
  3561.     
  3562.     Comments are ignored by the compiler and cost you nothing in execution
  3563.     speed. Comments can save you a lot of time if you have to come back
  3564.     later and work on your menu, or if someone else has to work on it.
  3565.     Therefore, we encourage you to use comments as much as possible.
  3566.     
  3567.     
  3568.      THE MARXMENU COMPILER
  3569.     
  3570.     MarxMenu reads your MNU files and creates MRX files. These MRX files are
  3571.     a highly digested form of the MNU file that you created. MRX files are
  3572.     the compiled files.
  3573.     
  3574.     When you run MarxMenu, the interpreter MARXMENU.EXE looks for the menu
  3575.     file with the MRX extension. If it doesn't find it, MARXMENU.EXE will
  3576.     automatically load MARXCOMP.EXE and compile the menu. MARXMENU.EXE also
  3577.     compares the file dates of the MNU and the MRX files. If the MNU file is
  3578.     newer than the MRX file, the compiler will be loaded.
  3579.     
  3580.  
  3581.     Computer Tyme * MarxMenu * Users Manual                 Page #51
  3582.     -----------------------------------------------------------------
  3583.     
  3584.     MarxMenu will also force a compile if the MRX file was not compiled by
  3585.     the same version and release date of the MarxMenu you are using. MRX
  3586.     files are not compatible from one version of MarxMenu to the next.
  3587.     
  3588.     You can also force a compile from the command line by typing MARXCOMP
  3589.     <menu>. If you are on a network and using MarxMenu to log you in, make
  3590.     sure you run the compiler if you change your login menu file.
  3591.     
  3592.     Once your menus are written, you can remove the MNU file and
  3593.     MARXCOMP.EXE from the system. This prevents anyone from modifying your
  3594.     menus. The MRX files are scrambled for security. This prevents probing
  3595.     eyes from reading strings in the MRX files.
  3596.     
  3597.     One important thing to remember. Don't lose your original MNU files. The
  3598.     MRX files CANNOT be decompiled. If you lose your original menu files
  3599.     you can't change your menus and the MRX files you have will not be
  3600.     compatible with future releases of MarxMenu.
  3601.     
  3602.     
  3603.      MARXMENU LANGUAGE RULES
  3604.     
  3605.     MarxMenu interpretation is left to right and doesn't have any operator
  3606.     precedence. You can control the order of evaluation by using
  3607.     parentheses.
  3608.     
  3609.      Examples:
  3610.     
  3611.        2 + 3 * 4      ;returns 20
  3612.        2 + (3 * 4)    ;returns 14
  3613.     
  3614.        if A > 4 or B < 6 then ...      ;error
  3615.        if (A > 4) or (B < 6) then ...  ;correct
  3616.     
  3617.     Statements are limited to one line and lines are limited to 200
  3618.     characters.
  3619.     
  3620.     
  3621.      COMPILER COMPATIBILITY
  3622.     
  3623.     The MarxMenu compiler is fully compatible with earlier versions of
  3624.     MarxMenu with a few exceptions. The new compiler does a lot more error
  3625.     checking than earlier versions of MarxMenu and will catch errors that
  3626.     you could previously get away with. Other than that, the only difference
  3627.     you should notice will be a speed increase.
  3628.     
  3629.     Earlier versions of MarxMenu had separate names for variable types. The
  3630.     names $VAR, BVAR, #VAR, and FILEVAR act the same as typing VAR.
  3631.     
  3632.     Very early versions of MarxMenu had a different form of the USEARROWS
  3633.     command that required 4 to 5 numbers after it. If you run into this
  3634.     error, just get rid of the numbers after USEARROWS and it will work
  3635.     fine.
  3636.     
  3637.  
  3638.     Computer Tyme * MarxMenu * Users Manual                 Page #52
  3639.     -----------------------------------------------------------------
  3640.     
  3641.      A WORD ABOUT DOS VERSIONS .....
  3642.     
  3643.     Versions of DOS below 3.3 will cause MarxMenu to use 3.5k of RAM where
  3644.     3.3 DOS and above use no memory. 3.2 DOS is very buggy and should be
  3645.     replaced. 3.1 DOS isn't too bad for bugs but if you're using the BACKUP
  3646.     and RESTORE programs that came with it, you're in trouble. They don't
  3647.     work on large files. You'll find that out if you try to restore one of
  3648.     them.
  3649.     
  3650.     MS-DOS 4.01 seems to be pretty clean provided you have the April '89
  3651.     release or later. To determine if you do, check the file date on
  3652.     COMMAND.COM. Earlier versions of DOS 4.01 have SERIOUS BUGS. If you are
  3653.     running any DOS 4 earlier than April '89 you should upgrade immediately.
  3654.     
  3655.     We are happy to announce that MarxMenu runs under DOS 5.0 with no
  3656.     problems or modifications. One feature implemented is the Idle Loop call
  3657.     which allows MarxMenu to conserve CPU power when it's not doing
  3658.     anything. This makes it work better under DesqView and Windows.
  3659.     
  3660.     Speaking of Windows, MarxMenu is not a Windows program. It can however
  3661.     be used to start Windows programs and can be run under Windows. Windows
  3662.     however is an extremely unstable environment. If for some reason you're
  3663.     having trouble with MarxMenu and Windows, it's Windows fault. In spite
  3664.     of glowing reviews that magazine writers seem compelled to write, I
  3665.     recommend avoiding Windows unless you have a program that requires
  3666.     Windows to run.
  3667.     
  3668.     DR-DOS or EZ-DOS are pretty good also. It is very compatible as long as
  3669.     you don't get too strange with it. We recommend version 3.4 or later.
  3670.     DR-DOS has a nasty COMSPEC bug in versions 5 and 6 when running a second
  3671.     COMMAND.COM shell started from a network drive.
  3672.     
  3673.     4DOS is also pretty good but sometimes some of the advanced features in
  3674.     this product can cause it to behave differently than DOS. This requires
  3675.     extra care when writing your menus.
  3676.     
  3677.     MarxMenu should work correctly on 386 multiuser operating systems such
  3678.     as Digital Research's Concurrent DOS 386 or SCO VPIX DOS emulators and
  3679.     PCMOS. Under these systems you will have to set the TASK environment
  3680.     variable if you are running MarxMenu in multiple tasks.
  3681.     
  3682.     MarxMenu will not run correctly under DesqView 2.26. It will run under
  3683.     2.25 or 3.21. So if you are running 2.26, it needs to be upgraded.
  3684.     MarxMenu contains several support functions for DesqView including
  3685.     DesqView API calls to control the DesqView environment.
  3686.     
  3687.     Although we haven't tested MarxMenu in the OS/2 1.3 compatibility box, we
  3688.     have had good success with MarxMenu under OS/2 2.0. We have been able not
  3689.     only to run DOS programs but OS/2 programs as well. If set up right
  3690.     MarxMenu can spawn multiple tasks of both DOS and OS/2 applications.
  3691.     
  3692.  
  3693.     Computer Tyme * MarxMenu * Users Manual                 Page #53
  3694.     -----------------------------------------------------------------
  3695.     
  3696.     If you are running under some weird DOS and are having problems, try it
  3697.     under "regular" DOS and see if it goes away. If it does, try to find out
  3698.     what it is about your weird DOS that makes it not work right. We are
  3699.     interested in being compatible with as many systems as possible. Let us
  3700.     know if you are having problems. But also, try to get your weird DOS
  3701.     vendors to clean up their act.
  3702.     
  3703.     
  3704.      A WORD ABOUT BUGS .....
  3705.     
  3706.     Although we try to create perfect bug-free software, every now and then
  3707.     we make a mistak. If you find one, let us know and we'll fix it. Our
  3708.     standard is to not only have all the functions of MarxMenu work
  3709.     correctly, but for it to be as intuitive and full featured as possible.
  3710.     
  3711.     
  3712.      TIPS FROM THE MASTER
  3713.     
  3714.     Since MarxMenu is a programming language, I want to talk about what
  3715.     programming is and how it is accomplished. I want to dispel some myths
  3716.     and fears relating to it and introduce you to techniques that will help
  3717.     you write code neatly, quickly, and efficiently. From the outside,
  3718.     programming looks like magic; but once you know a few of the tricks, it's
  3719.     really not too hard.
  3720.     
  3721.     Many of us who were raised on 50's and 60's science fiction television
  3722.     learned that it is the brainy types who deal with computers. It almost
  3723.     gives you the impression that the computer is smart and you are dumb. As
  3724.     you use the computer, it is evaluating you, and if it figures out that
  3725.     its smarter than you, it can get your job and replace you.
  3726.     
  3727.     
  3728.      COMPUTERS DO SIMPLE TASKS
  3729.     
  3730.     A computer is a simple device. It does simple tasks. It just does them
  3731.     very fast and accurately. Computers don't even know basic things like
  3732.     how to write letters on the screen or how to read the keyboard. These
  3733.     are programs that the computer runs. Someone had to program your
  3734.     computer to do even the simplest of tasks.
  3735.     
  3736.     As you learn to use MarxMenu start with the simple menus. The SAMPLE.MNU
  3737.     is a very easy program. Study it and understand how it works. Make a
  3738.     copy of it and begin by changing a single selection to run one of your
  3739.     programs.
  3740.     
  3741.     Once you have changed one selection, change several more. Now MarxMenu
  3742.     is running your programs, and you have made it work. Then try something
  3743.     new. Add more selections. Change the size and position of the box to fit
  3744.     your needs.
  3745.     
  3746.     Take the time to play with it. Try new commands. Build up your menu. Be
  3747.     artistic. The more you work with it, the more you will learn.
  3748.     
  3749.  
  3750.     Computer Tyme * MarxMenu * Users Manual                 Page #54
  3751.     -----------------------------------------------------------------
  3752.     
  3753.      COMPLEX TASKS ARE MADE OF SIMPLE TASKS
  3754.     
  3755.     As you learn more about MarxMenu, move on to QUICK.MNU. Here we use more
  3756.     of the power of the MarxMenu language. As you study this menu, you will
  3757.     notice something. Even though it looks complex, it is really a
  3758.     collection of simple tasks. Understand how the moving windows work.
  3759.     Understand that the pop-up menus are just like the main menu. You will
  3760.     see that it is really not a complex menu at all. It is a lot of simple
  3761.     processes hooked together.
  3762.     
  3763.     That is one of the main concepts behind programming. Complex tasks are
  3764.     built out of simple tasks. As you learn the simple tasks, you will
  3765.     quickly understand how to connect them to accomplish complex tasks.
  3766.     
  3767.     When one sees a castle, one can't help but to be impressed. But castles
  3768.     are made of stones. And you can't build castles until you understand how
  3769.     stones work. Then you realize that a castle is just a bunch of stones
  3770.     hooked together. Programming is just like that.
  3771.     
  3772.     To successfully understand MarxMenu, start at the bottom and work your
  3773.     way up. Each little trick you learn becomes another building block for
  3774.     the next trick. What you start with becomes the foundation for the work
  3775.     that you will eventually produce.
  3776.     
  3777.     
  3778.      LEARNING GOOD PROGRAMMING HABITS
  3779.     
  3780.     Programming has its pitfalls, here we hope to give you some tips that
  3781.     will help you avoid common mistakes. This, we hope will give you a head
  3782.     start on the road to MarxMenu being done right.
  3783.     
  3784.     The first concept is patience. Rome wasn't built in a day. You may not
  3785.     be able to write grand and glorious menus the first try. In fact, you
  3786.     may have trouble getting the damn thing to work at all. As you have
  3787.     probably already noticed, no program is perfect. Sometimes there are
  3788.     errors in the manual. Sometimes it just doesn't work like you expected,
  3789.     or does not work the same way as other programs that are familiar to
  3790.     you.
  3791.     
  3792.     But, once you complete the installation, give it some time and realize
  3793.     that there is a lot of potential here. Approach all challenges with a
  3794.     good attitude.
  3795.     
  3796.     
  3797.      USE LONG NAMES
  3798.     
  3799.     I learned computers the hard way. Out on the streets. Hanging around
  3800.     with other computer nerds in the late 70s who never went to college
  3801.     either. I was known as a Bit Wit. My first real computer was an IMSAI
  3802.     kit. Actually, it wasn't all IMSAI, it was a combination of several kits
  3803.     where no two boards came from the same supplier. It was in an IMSAI box,
  3804.     so I called it an IMSAI.
  3805.     
  3806.  
  3807.     Computer Tyme * MarxMenu * Users Manual                 Page #55
  3808.     -----------------------------------------------------------------
  3809.     
  3810.     It was all supposed to work together the salesman told me the day
  3811.     before they went out of business. And it all did after some redesigning.
  3812.     I was tired of fixing CB radios for a living and decided that
  3813.     computers were here to stay and that I was going to learn about them.
  3814.     
  3815.     With that in mind, everything that went wrong became an opportunity for
  3816.     growth. Not that I looked forward to things not working. I programmed
  3817.     the thing from scratch, loading binary codes into memory from an array
  3818.     of switches on the front panel.
  3819.     
  3820.     The first program I developed ran the EPROM burner, which was the only
  3821.     storage device I had. After I saved this program on a chip, I used it
  3822.     to load the second program onto the chip.
  3823.     
  3824.     Eventually I wrote enough software to talk to the screen and keyboard.
  3825.     Now I could type hex codes on the screen and save them to a chip.
  3826.     Eventually I wrote a tape driver and could save stuff on tape. Later, I
  3827.     traded for a North Star disk drive and had a disk system. One 90k
  3828.     floppy. I thought I was in heaven.
  3829.     
  3830.     I was intimately familiar with my computer. All my programs were in
  3831.     object code with no documentation whatsoever. At that point, a friend of
  3832.     mine, Rufus, turned me on to a language called FORTH.
  3833.     
  3834.     Being an interesting language and very powerful, I typed in the whole
  3835.     compiler in hex and adapted it to work on my system. Once I got Forth
  3836.     up, I wrote a line editor in it. Then I used the line editor to write a
  3837.     screen editor. With the screen editor, I rewrote Forth in Forth. The
  3838.     language compiled itself.
  3839.     
  3840.     From working with Forth (which is as much a religion as a programming
  3841.     language) I learned both good and bad habits. Forth is a write-only
  3842.     language and is almost impossible to read even with the best of
  3843.     documentation. On the other hand, it is as close to the machine as you
  3844.     can get in a high level language.
  3845.     
  3846.     After opening up a computer store in 1984, it became time to make the
  3847.     jump from CP/M to the DOS world. Turbo Pascal offered an interesting
  3848.     solution. They had both a CP/M and DOS compiler. This meant that
  3849.     programs I wrote would run on both machines. The thing that struck me
  3850.     about Pascal was that I could read it better than Forth, and didn't
  3851.     even know the language. Not only that, but I could follow the programs
  3852.     that other people wrote and incorporate their code into my code.
  3853.     
  3854.     The more programs I wrote, the more I came to appreciate a language that
  3855.     was reader friendly. I could manage my programs much easier without
  3856.     having to remember so much. Other people could follow what I was doing
  3857.     easier.
  3858.     
  3859.  
  3860.     Computer Tyme * MarxMenu * Users Manual                 Page #56
  3861.     -----------------------------------------------------------------
  3862.     
  3863.     The important thing I learned was that readability is very important in
  3864.     a program. The more complex the program, the more important readability
  3865.     becomes.
  3866.     
  3867.     One of the main design factors in the MarxMenu language is readability.
  3868.     I could have used short names for the commands and it's not like I
  3869.     like to type. I'm still on just two fingers here. It's just that
  3870.     descriptive names are so much more meaningful when putting simple
  3871.     processes together to create complex processes.
  3872.     
  3873.     The point (finally) is, when creating variable names, or procedure
  3874.     names, use long meaningful names. It may take more typing, but it takes
  3875.     a lot less thinking and remembering later on. Consider the following
  3876.     example in choosing variable names.
  3877.     
  3878.      Var KlingonsDestroyedInBattle
  3879.      Var K
  3880.     
  3881.     In the above example, it is obvious which one tells you more about what
  3882.     information is stored in the variable.
  3883.     
  3884.     
  3885.      USE COMMENTS LIBERALLY
  3886.     
  3887.     Even though MarxMenu is easy to read, it still should be commented. The
  3888.     examples that come with this disk do not have as many comments as they
  3889.     should. Don't do as I do, do as I say. I'm lazy and a bad example.
  3890.     
  3891.     Comments are not compiled in your MRX files and cost you nothing at
  3892.     execution time. In order to make commenting easy, we have provided three
  3893.     separate comment commands. Learn these commands first.
  3894.     
  3895.     Every menu should include a title comment. This should include the name
  3896.     and phone number of the person who wrote it. If you have a problem with
  3897.     a menu and you send it to us, we expect a title comment. That way we can
  3898.     call you about it.
  3899.     
  3900.      Comment
  3901.      ====================================================================
  3902.     
  3903.      This comment was created by Marc Perkel 1-417-866-1222
  3904.     
  3905.      Last Updated: 01-28-90
  3906.     
  3907.      This form of comment block is better than using ';' because not using ;
  3908.      allows you to turn your word wrap feature on and do some professional
  3909.      looking editing in the comment block. This kind of comment block should
  3910.      be at the beginning of each and every menu you create.
  3911.     
  3912.  
  3913.     Computer Tyme * MarxMenu * Users Manual                 Page #57
  3914.     -----------------------------------------------------------------
  3915.     
  3916.      The top and bottom bars are for looks only and are not necessary to the
  3917.      comment. I strongly encourage you to use bars and do things for looks
  3918.      in source code. Looks are very important and you should put as much
  3919.      care into your comments as you do in writing a business letter.
  3920.     
  3921.      If you learn MarxMenu well, your source code may be part of your next
  3922.      job interview as you move up the corporate ladder. So you want it to
  3923.      look good.
  3924.     
  3925.      By the way, if you upload your menus to my bulletin board, I expect a
  3926.      comment block at the top of your menu with your phone number so I can
  3927.      get back to you.
  3928.     
  3929.      ====================================================================
  3930.      EndComment
  3931.     
  3932.     
  3933.      INDENT YOUR CODE
  3934.     
  3935.     As programs get more complex, it gets harder to match the IFs with the
  3936.     ELSEs and the ENDIFs. This is where indenting comes in. It creates a
  3937.     logical grouping of statements and you can easily see what goes with
  3938.     what.
  3939.     
  3940.      Procedure IfDemo
  3941.         IF <condition>
  3942.            <statement>
  3943.            <statement>
  3944.         ELSEIF <condition>
  3945.            <statement>
  3946.         ELSEIF <condition>
  3947.            <statement>
  3948.            <statement>
  3949.         ELSE
  3950.            <statement>
  3951.            <statement>
  3952.            WHILE <condition>
  3953.               <statement>
  3954.               <statement>
  3955.            ENDWHILE
  3956.            <statement>
  3957.         ENDIF
  3958.         <statement>
  3959.      EndProc
  3960.     
  3961.     You can easily see how this helps you follow what you are writing. Now
  3962.     here's a new trick. If you are using an IF, and plan to use an ELSE and
  3963.     an ENDIF, on the line under the IF statement, type in your ELSE and
  3964.     ENDIF lines. Then go back and insert your statements in between these
  3965.     lines. This will help you avoid forgetting the ENDIF or getting mixed up
  3966.     as to which IF matches which ELSE.
  3967.     
  3968.  
  3969.     Computer Tyme * MarxMenu * Users Manual                 Page #58
  3970.     -----------------------------------------------------------------
  3971.     
  3972.     A similar trick can be done with parens and brackets. When typing a left
  3973.     paren, type the matching right paren with it. Then fill in the code you
  3974.     want to put inside the parens or brackets.
  3975.     
  3976.     
  3977.      FOR DUPLICATE TASKS, USE PROCEDURES
  3978.     
  3979.     As menus become longer and more complex, many times you are duplicating
  3980.     a process that you have already written. Although it is easy to copy a
  3981.     block of code, it is better to create a procedure.
  3982.     
  3983.     With procedures, the process is put in one place and is given a name.
  3984.     Preferably a long meaningful name. Once this procedure is defined and
  3985.     named, it can be used as if it were part of the MarxMenu language. This
  3986.     makes menus smaller and easier to read. It is also a way for you to
  3987.     combine small processes into large processes. Procedures can be built
  3988.     using other procedures.
  3989.     
  3990.     Once you have a process figured out and working in a procedure, the
  3991.     whole process becomes a black box with a name that you can use
  3992.     elsewhere. The whole process is reduced down to a name that just works!
  3993.     
  3994.     Another advantage of procedures is that if circumstances change and the
  3995.     procedure needs to be modified, you only make a change one place in your
  3996.     menus, and everything that uses that procedure is automatically changed.
  3997.     This makes menu maintenance easier.
  3998.     
  3999.     
  4000.      DON'T PROGRAM YOURSELF INTO A CORNER
  4001.     
  4002.     Using the above techniques will allow you to write very complex menu
  4003.     systems. Failing to use these techniques can limit what you can
  4004.     accomplish. There is a term called "programming yourself into a corner"
  4005.     which refers to a program that is so poorly written, that it can't be
  4006.     modified to accommodate changes and improvements.
  4007.     
  4008.     The height of your programming abilities depends on the foundation on
  4009.     which they are built. You must avoid rushing to the top without first
  4010.     creating a firm foundation on which to build. Good technique is the
  4011.     foundation for good programming. You will have to learn it eventually,
  4012.     it is more efficient to do it right than it is to do it over.
  4013.     
  4014.     Adopting good programming habits reminds me of my favorite light bulb
  4015.     joke:
  4016.     
  4017.     Q. How many psychologists does it take to change a light bulb?
  4018.     
  4019.     A. Only one, but the light bulb has to want to change.
  4020.     
  4021.  
  4022.     Computer Tyme * MarxMenu * Users Manual                 Page #59
  4023.     -----------------------------------------------------------------
  4024.     
  4025.      FOR THE POWER USER:
  4026.     
  4027.     I originally wrote MarxMenu on a dare. I said that in one afternoon I
  4028.     could write a better menu system than one of the most popular menu
  4029.     systems. I met the challenge and then found that there is a lot of
  4030.     demand for power in a menu system. Friends started asking for this and
  4031.     that feature and this program has gone far beyond what I ever intended.
  4032.     
  4033.     The demand for more features has outpaced my ability to keep up with the
  4034.     documentation standards that I expect from other software packages that
  4035.     I buy. Please bear with me; If you find any errors in the manual, or
  4036.     bugs in the program, please let me know and we'll try to correct any
  4037.     problems.
  4038.     
  4039.     I also appreciate your suggestions for improvements. Many of the
  4040.     features included are a result of requests you have made. Many of you
  4041.     are using this program in ways I never dreamed.
  4042.     
  4043.     The main design philosophy behind this product is POWER and Flexibility.
  4044.     I am also committed to keeping the source code as readable as possible.
  4045.     I am loyal to the concept of using NO RAM. None of MarxMenu stays
  4046.     resident. Because of this I can claim that if you are having some kind
  4047.     of problem, it's not the fault of MarxMenu being resident, because
  4048.     MarxMenu is not resident. Also, using NO RAM allows loading of TSR's
  4049.     (memory resident programs) from the menu.
  4050.     
  4051.     For computer consultants, MarxMenu is an excellent way to make money.
  4052.     You can provide your clients with professional looking menu systems
  4053.     customized (by you) to fit their needs. You can provide complex menu
  4054.     structures not possible with any other menu system. And, because
  4055.     MarxMenu uses NO RAM, you don't have to worry about conflicts between
  4056.     MarxMenu and any other software product.
  4057.     
  4058.     Although MarxMenu is copyrighted, the program is not copy protected.
  4059.     There is nothing to prevent you from making hot copies and giving them
  4060.     away to all your clients. I would like to point out that when you give
  4061.     away something you should be selling you lose respect from your clients
  4062.     and attract those who expect you to work for free. You will make more
  4063.     money if you play by the rules. My best and most profitable clients use
  4064.     no hot software whatsoever. Think about it.
  4065.     
  4066.     
  4067.      WHERE MARXMENU IS HEADING
  4068.     
  4069.     MarxMenu will continue to grow and develop. Because MarxMenu is an
  4070.     overlaid program I have the ability to add as many features as I want
  4071.     without slowing down load or processing speed. In fact MarxMenu is 10
  4072.     times as fast today as it was in 1989 and its vocabulary of commands has
  4073.     grown 20 times as well.
  4074.     
  4075.  
  4076.     Computer Tyme * MarxMenu * Users Manual                 Page #60
  4077.     -----------------------------------------------------------------
  4078.     
  4079.     Most of the new features I add to MarxMenu are a result of your
  4080.     requests. Feel free to call me and make suggestions as to what you want
  4081.     to see in MarxMenu. Often my biggest problem in adding new features is
  4082.     getting companies to release information. Thus, if you want something
  4083.     new and I have to go to IBM, Novell, or Microsoft to get information
  4084.     sometimes it takes a while. So if you have any pull with some of these
  4085.     vendors and will help me put the squeeze on them, I'd appreciate it.
  4086.     
  4087.     I'm often asked the question, what other operating systems will I
  4088.     support? Will there be a Windows version? An OS/2 version? Unix?
  4089.     
  4090.     Let me say first that my primary commitment is to the OS that most
  4091.     people actually use, and that is DOS. I am not moved by the industry
  4092.     politics. I focus on the systems that make computers and networks
  4093.     actually work.
  4094.     
  4095.     So for those of you who are asking the question "Will there be a Windows
  4096.     version of MarxMenu?" The answer is no. The reason is, in my view,
  4097.     windows is too unstable a platform in which to develop code for. As I
  4098.     see it, Windows is a programmer angry environment and is fatally flawed
  4099.     by design. I consider this path a mistake and a mistake that I am not
  4100.     going to make.
  4101.     
  4102.     Will there be an OS/2 version? No. IBM made a lot of promises that they
  4103.     didn't keep. I lobbied hard to get IBM to add some features to OS/2 to
  4104.     allow DOS programs to control the OS/2 environment and talk to the OS/2
  4105.     kernal. This would have allowed MarxMenu, as a DOS program to control
  4106.     OS/2 programs. The response was that IBM wants people to move away from
  4107.     DOS and refused to add the necessary features. The Borland compilers
  4108.     that were supposed to be ready when OS/2 was released don't exist.
  4109.     
  4110.     Will there be a Univell version? Maybe. If Novell doesn't make the same
  4111.     mistakes as IBM and Microsoft have and provide a migration path then
  4112.     maybe there will.
  4113.     
  4114.     
  4115.      A WORD TO WRITERS AND REVIEWERS
  4116.     
  4117.     MarxMenu is a multi-level product fulfilling the needs of a large
  4118.     variety of computer users. It is difficult to compare this product on a
  4119.     feature-to-feature basis. This is because MarxMenu has about 10 times as
  4120.     many features as any other menu system. These features allow this
  4121.     product to target a very broad variety of computer users, from the
  4122.     novice user, who will only use the LEVEL1 or QUICK menus, to large
  4123.     companies with hundreds of file servers controlled through the MarxMenu
  4124.     language.
  4125.     
  4126.     One common mistake that writers make when evaluating MarxMenu, is in the
  4127.     area of ease of use. If you are looking for ease of use, stick with the
  4128.     simple menus and the self-configuring menus such as the LEVEL1, QUICK
  4129.     and QUICKNOV examples. By looking at it this way, MarxMenu will be as
  4130.     easy to use as any other menu system out there and can be compared for
  4131.     similar features. Even though MarxMenu supports complex commands, it is
  4132.     not necessary to use them in simple menus.
  4133.     
  4134.  
  4135.     Computer Tyme * MarxMenu * Users Manual                 Page #61
  4136.     -----------------------------------------------------------------
  4137.     
  4138.     If you are doing a comparative review, please let us know on what basis
  4139.     you are making comparisons. This way we can assist you by providing you
  4140.     accurate information in the area of your interest. If you are looking
  4141.     for simple, we can show you simple; if you are looking for power, we can
  4142.     show you power.
  4143.     
  4144.     On the other hand, if you are reviewing power tools and network
  4145.     utilities, you might want to look at the Network Survival Kit and not
  4146.     just MarxMenu. So if you only have a copy of MarxMenu, give us a call
  4147.     and we will get you the latest and greatest.
  4148.     
  4149.     In addition to our software, we also have color prints and color slides
  4150.     available as well as product literature and sample reviews. These are
  4151.     available to make your job easier and help you make those deadlines.
  4152.     
  4153.     MarxMenu tends to be best reviewed as a long article rather than a short
  4154.     one. It is very good if you have a lot of space to fill. With a long
  4155.     article, you can get really in depth with what MarxMenu is able to do.
  4156.     
  4157.     Any publication which reviews any of my products gets a site license to
  4158.     that product whether we like the review or not. Our position is that if
  4159.     you are using MarxMenu yourself, you will get to know it better.
  4160.     
  4161.     Any questions you have about any of my products, feel free to call. The
  4162.     main thing we ask is that you get the product name, price, our address,
  4163.     and our phone number right.
  4164.     
  4165.     
  4166.      SECURITY ISSUES
  4167.     
  4168.     Different users have different security needs that range from none to
  4169.     extreme. If you are in the none category, then you can skip this
  4170.     chapter. But if you need all the security you can get, then read on.
  4171.     
  4172.     First of all, DOS is not a secure operating system. There are various
  4173.     third party programs out there but what I'm going to cover here is how
  4174.     to make DOS secure as possible working with what you get with DOS.
  4175.     
  4176.     The first thing to do is add the command BREAK=OFF to your CONFIG.SYS
  4177.     file. This prevents programs from breaking out of batch files. Avoid
  4178.     using commands that are internal DOS commands like DIR from inside a
  4179.     menu or inside batch files. Use the D.EXE program instead.
  4180.     
  4181.     Use the LockWord option in the screen blanker so that if a menu is left
  4182.     unattended, it will not be accessible to just anyone walking up to a
  4183.     machine. The LockWord command requires the user type a password to
  4184.     release the screen blanker. If you are on a Novell network, you can use
  4185.     the UseNovPassword command. This forces the user to type their Novell
  4186.     password to unblank the screen.
  4187.     
  4188.  
  4189.     Computer Tyme * MarxMenu * Users Manual                 Page #62
  4190.     -----------------------------------------------------------------
  4191.     
  4192.     If a menu choice accesses sensitive materials, then put a password on
  4193.     it. Also, make sure the SUPERVISOR user has a password. There are many
  4194.     times I've walked up to a server and logged in as supervisor and got
  4195.     right in. Make sure that intruder detection is set on. If you don't know
  4196.     what intruder detection is, read the Novell manuals.
  4197.     
  4198.     You can also use the LogoffTime command to log users off the network
  4199.     after a given amount of inactivity. This also helps kick people off so
  4200.     that you can upgrade MarxMenu from time-to-time. (MARXMENU.OVR can't be
  4201.     updated on a network unless all users are out of the menu.)
  4202.     
  4203.     If you have applications that allow you to shell to DOS, you can prevent
  4204.     them from getting to DOS by changing your COMSPEC to point to something
  4205.     other than COMMAND.COM. You could also rename COMMAND.COM in case a
  4206.     program is looking for this file by name. If this doesn't work for you
  4207.     then you can use the COMSP.EXE program to do the same thing.
  4208.     
  4209.     Another defense is to lock the door to the computer room at night and
  4210.     teach employees security policies and make sure they use them. Security
  4211.     policies include such rules as not having your password written on a
  4212.     stick-em note stuck on the side of your monitor.
  4213.     
  4214.     If you are on a network, buy diskless workstations. People can't copy
  4215.     files on or off a workstation that doesn't have a disk drive. It helps keep
  4216.     viruses off your server and lets the network administrators control what
  4217.     is and isn't on the network.
  4218.     
  4219.     
  4220.      KEEPING USERS IN THE MENU
  4221.     
  4222.     Some people need to keep users in the menu and prevent them from
  4223.     escaping to a command line no matter what. There are several things you
  4224.     need to do to accomplish this. The first thing is to use BREAK.SYS to
  4225.     prevent breaking out of batch files. Then you use a shell statement to
  4226.     load COMMAND.COM temporary instead of permanent. Then you use COMSP.EXE
  4227.     to prevent programs from shelling out to DOS.
  4228.     
  4229.     
  4230.      USING BREAK.SYS
  4231.     
  4232.     MarxMenu comes with a device driver called BREAK.SYS. This program
  4233.     enhances the BREAK ON and BREAK OFF functions of DOS to prevent users
  4234.     from using CTRL-C to get out of batch files.
  4235.     
  4236.     Unlike all the other similar programs this one is smart. It only kills
  4237.     CTRL-C if you are in COMMAND.COM but allows your applications to see
  4238.     CTRL-C. And, it only uses about 400 bytes of RAM.
  4239.     
  4240.     All you have to do is add a line to your CONFIG.SYS file:
  4241.     
  4242.  
  4243.     Computer Tyme * MarxMenu * Users Manual                 Page #63
  4244.     -----------------------------------------------------------------
  4245.     
  4246.     DEVICE=BREAK.SYS
  4247.     
  4248.     If you are using BREAK.SYS with QEMM or other memory manager, load the
  4249.     memory manager first.
  4250.     
  4251.     BREAK.SYS can be enabled or disabled by using the BREAK ON and BREAK OFF
  4252.     commands either from the command line or from batch files.
  4253.     
  4254.     Although BREAK.SYS is better than DOS, it isn't perfect. There are still
  4255.     situations where you can break out of batch files. If it is important
  4256.     not to break out then you can use it as follows:
  4257.     
  4258.     DEVICE=BREAK.SYS /C
  4259.     
  4260.     Using it this way the CTRL-C key is completely disabled. Your
  4261.     application software will not get any CTRL-C.
  4262.     
  4263.     BREAK.SYS has another switch /T that works like /C except that once you
  4264.     execute BREAK ON then it returns to smart CTRL-C handling. The idea here
  4265.     is that more often you need bullet proof protection while the system is
  4266.     booting up, but after going to the main menu you can switch to smart
  4267.     protection. At the end of your bootup batch files add the lines:
  4268.     
  4269.     BREAK ON
  4270.     BREAK OFF
  4271.     
  4272.     This will switch BREAK.SYS into smart mode checking.
  4273.     
  4274.     BREAK.SYS has another feature that makes BREAK ON work better. If you
  4275.     use it like this:
  4276.     
  4277.     DEVICE=BREAK.SYS /B
  4278.     
  4279.     Then when you run BREAK ON and the users presses CTRL-\ it will break
  4280.     you out of programs you might otherwise be stuck in. This feature is
  4281.     great for software developers to use when testing code.
  4282.     
  4283.     
  4284.      USING THE SHELL= COMMAND
  4285.     
  4286.     If you really want to make it impossible to break out to DOS then change
  4287.     the SHELL= statement in your CONFIG.SYS file to read:
  4288.     
  4289.     SHELL=COMMAND.COM /E:400 /C AUTOEXEC.BAT
  4290.     
  4291.     With this command, if they get out of the batch file it locks the system
  4292.     up. In some cases this is better than letting the user get access to the
  4293.     command line.
  4294.     
  4295.  
  4296.     Computer Tyme * MarxMenu * Users Manual                 Page #64
  4297.     -----------------------------------------------------------------
  4298.     
  4299.     To use this feature you need to stay in a steady stream of batch files
  4300.     all the way to the menu. If you ever exit or break out of the batch
  4301.     files the system locks up. Without the /P switch, COMMAND.COM is never
  4302.     loaded permanent. So if AUTOEXEC and the batch file that they jump to
  4303.     ever finishes the computer locks up. You can't break out to COMMAND.COM
  4304.     because there is no COMMAND.COM to break out to.
  4305.     
  4306.     If you try to use this with Novell's LOGIN.EXE then you won't be able to
  4307.     use the 'EXIT <string>' command in your login script. This is because
  4308.     EXIT will exit to DOS and lock up. You will need to create a LOG.BAT
  4309.     file as follows:
  4310.     
  4311.      LOG.BAT
  4312.      =======
  4313.      :Start
  4314.      LOGIN
  4315.      REM ** Stay in loop till LOGIN succeeds **
  4316.      if ErrorLevel 1 goto Start
  4317.      ...
  4318.      <other startup commands>
  4319.      ...
  4320.      Marx MainMenu
  4321.     
  4322.     To get to a command line using this system you will need to run
  4323.     COMMAND.COM or DOLIST.EXE from the menu. In the case of COMMAND.COM you
  4324.     will run:
  4325.     
  4326.      COMMAND.COM /E:400
  4327.     
  4328.     This ensures that this second COMMAND.COM has enough environment space
  4329.     to allow for SET commands.
  4330.     
  4331.     
  4332.      CONDITIONAL STATEMENTS
  4333.     
  4334.     MarxMenu has a full complement of conditional statements. They are as
  4335.     follows:
  4336.     
  4337.      IF->ELSE->ENDIF           Where, IF [condition]
  4338.                                          statement
  4339.                                          statement
  4340.                                       ELSE
  4341.                                          statement
  4342.                                          statement
  4343.                                       ENDIF
  4344.     
  4345.      IF->THEN                  Where, IF [condition] THEN statement
  4346.     
  4347.      IF->ELSE->ELSEIF->ENDIF   Where, IF [condition]
  4348.                                          statement
  4349.                                          statement
  4350.                                       ELSEIF [condition]
  4351.                                          statement
  4352.                                          statement
  4353.                                       ELSEIF [condition]
  4354.                                          statement
  4355.  
  4356.     Computer Tyme * MarxMenu * Users Manual                 Page #65
  4357.     -----------------------------------------------------------------
  4358.     
  4359.                                          statement
  4360.                                       ELSE
  4361.                                          statement
  4362.                                          statement
  4363.                                       ENDIF
  4364.     
  4365.         REPEAT->UNTIL          Where, REPEAT
  4366.                                          statement
  4367.                                          statement
  4368.                                       UNTIL [condition]
  4369.     
  4370.         WHILE->ENDWHILE        Where, WHILE [condition]
  4371.                                          statement
  4372.                                          statement
  4373.                                       ENDWHILE
  4374.     
  4375.         PROCEDURE->ENDPROC     PROCEDURE (name)
  4376.                                          statement
  4377.                                          statement
  4378.                                ENDPROC
  4379.     
  4380.         LOOP->ENDLOOP          LOOP (number)
  4381.                                          statement
  4382.                                          statement
  4383.                                ENDLOOP
  4384.     
  4385.     
  4386.      ENVIRONMENT VARIABLES USED BY MARXMENU
  4387.     
  4388.     MarxMenu uses a variety of environment variables to control various
  4389.     MarxMenu functions. Many of these variables are optional.
  4390.     
  4391.      Set MouseX=(Number)
  4392.     
  4393.     Sets the horizontal sensitivity of the mouse. Default is 15.
  4394.     
  4395.      Set MouseY=(Number)
  4396.     
  4397.     Sets the vertical sensitivity of the mouse. Default is 25.
  4398.     
  4399.      Set MxEcho=(On/Off)
  4400.     
  4401.     If you set the first line of MARX.BAT to @ECHO %MXECHO% then by setting
  4402.     the environment variable MxEcho to ON or OFF, you can control the echo
  4403.     in the MARX.BAT file without having to edit it. This allows you to do
  4404.     diagnostics on a network without messing up other users.
  4405.     
  4406.      Set Temp=(Directory)
  4407.     
  4408.  
  4409.     Computer Tyme * MarxMenu * Users Manual                 Page #66
  4410.     -----------------------------------------------------------------
  4411.     
  4412.     Normally, MarxMenu creates temporary batch files in the same directory
  4413.     as MARXMENU.EXE. If you set TEMP to a directory, MarxMenu will use this
  4414.     directory instead. This complies with Windows / DOS 5.0 standards.
  4415.     
  4416.      Set MxCmd=(Command)
  4417.     
  4418.     MarxMenu uses MXCMD to control what the MARX.BAT file executes. You must
  4419.     have enough environment space available for MarxMenu to use.
  4420.     
  4421.      Set KSV=
  4422.     
  4423.     MarxMenu stores a series of keystrokes in the KSV variable when
  4424.     SavePosition is On.
  4425.     
  4426.      Set STATION=(Number)
  4427.     
  4428.     If you are on a network that is not Novell, then you should set this
  4429.     variable to a unique number for each station between 0 and 255.
  4430.     
  4431.      Set TASK=(Number)
  4432.     
  4433.     If you are running a multi-tasking operating system other than DesqView,
  4434.     and MarxMenu is running more than one task, then set an environment
  4435.     variable TASK to a unique number for each task.
  4436.     
  4437.     MarxMenu also accesses your COMSPEC variable and your PATH variable when
  4438.     executing programs.
  4439.     
  4440.     
  4441.      MARXMENU DATABASE FUNCTIONS
  4442.     
  4443.     Well, after talking about it for years, MarxMenu now includes a strong
  4444.     set of database tools. The database is based on Novell's Btrieve
  4445.     interface. Thus it has the reliability of proven database technology. We
  4446.     are pushing Btrieve to the limit and then some in order to get the
  4447.     requirements needed from a database engine.
  4448.     
  4449.     Btrieve is primarily a fixed length database engine with the ability to
  4450.     add a single variable-length field on the end of a record. When using
  4451.     MarxMenu with Btrieve, we typically store MarxMenu-style variables in
  4452.     the variable-length section and reserve the fixed-length section for key
  4453.     fields only. While we recommend you consider this approach you are free
  4454.     to develop and use any data models you prefer.
  4455.     
  4456.     You will notice several unusual things about MarxMenu as a database.
  4457.     We decided that the square model or relationally-linked square model is
  4458.     to limiting. You can do square model databases if you want to, but the
  4459.     experience of getting rid of the square model is like an animal being
  4460.     let out of a cage for the first time. It's a little scary at first.
  4461.     
  4462.  
  4463.     Computer Tyme * MarxMenu * Users Manual                 Page #67
  4464.     -----------------------------------------------------------------
  4465.     
  4466.     When you create a MarxMenu Btrieve database you may define all your
  4467.     fields, if you want, but you are only required to define the fields that
  4468.     will be used as key fields. You will need to define the fields type, and
  4469.     for key fields the key properties.
  4470.     
  4471.     When data is written to a file the data is passed as a MarxMenu array.
  4472.     The first elements of the array have to match the fixed portion of your
  4473.     structure, normally your key fields. Any elements after the key fields
  4474.     are written in MarxMenu format to the variable-length section of the
  4475.     record. Thus, after the key fields you can do whatever you want. Here is a
  4476.     list of some of the flexible features.
  4477.     
  4478.      1) Records do not have to contain the same fields or the same number of
  4479.         fields. You can have 20 fields in one record and 5 fields in the
  4480.         next one. There are no rules that the data in one field of a record
  4481.         has to be of the same data type as the same field of the previous
  4482.         record.
  4483.     
  4484.      2) Records can contain MarxMenu-style arrays. Thus if you are using a
  4485.         phone field as an array of phone numbers you can store as many phone
  4486.         numbers in that field as you want. MarxMenu can support arrays
  4487.         within arrays of up to 30 levels within a single record.
  4488.     
  4489.      3) Since MarxMenu supports writing MarxMenu-style variable structures
  4490.         to database records, you need not have to specify the type of data,
  4491.         the data size, or the structure of the data before you access the
  4492.         file. If you want to write data you just do it.
  4493.     
  4494.     Use of the Btreive commands require that you have Btrieve 5.10 or later.
  4495.     You will need to have the Btrieve NLM running on the server and
  4496.     BRREQUEST.EXE running on the workstation to use this database in
  4497.     client-server mode, or BTRIEVE.EXE running on the workstation if you are
  4498.     not running in client-server mode. All the Btreive database commands
  4499.     start with the BTRV prefix.
  4500.     
  4501.     To use BTRIEVE.EXE load it with the /E switch as follows:
  4502.     
  4503.      BTRIEVE /E
  4504.     
  4505.     Only network versions of MarxMenu contain the BTRV database commands,
  4506.     the single user version is not equiped with this feature.
  4507.     
  4508.     At the time of printing of this manual the Btrieve database commands are
  4509.     new. For more details, new commands, and examples look in the
  4510.     MARXREAD.ME file and the MarxHelp program.
  4511.     
  4512.  
  4513.     Computer Tyme * MarxMenu * Users Manual                 Page #68
  4514.     -----------------------------------------------------------------
  4515.     
  4516.      ADDITIONAL INFORMATION
  4517.     
  4518.     MarxMenu is a growing product with additional features and enhancements
  4519.     being added all the time. Therefore, the manual will never be completely
  4520.     current.
  4521.     
  4522.     Whenever new features are added, the MARXREAD.ME file is updated to show
  4523.     you the new additions since the manual was printed. These changes are
  4524.     also added to the MarxHelp program so that the online help is always
  4525.     kept current with the released software.
  4526.     
  4527.     
  4528.      COMPUTER TYME ON COMPUSERVE
  4529.     
  4530.     The Computer Tyme Section of the Novell Vendor Forum is your window to
  4531.     the body of additional services available on Compuserve. Many services
  4532.     complement specific applications. Others add a new dimension to business
  4533.     endeavors. Still others cater to personal interests, from aviation to
  4534.     Zinfandel wines. Some of these services include:
  4535.     
  4536.     INVEST WISELY - Speed stock purchases and sales with convenient
  4537.     electronic brokerage services. View stock trends online, research
  4538.     investment possibilities, or transfer data from Compuserve for use in
  4539.     your favorite spreadsheet package.
  4540.     
  4541.     TAKE A TRIP - Compare airline schedules and fares on Compuserve. Find
  4542.     the least expensive flight or best time to fly. Book your tickets
  4543.     online, or pass information on to your travel agent.
  4544.     
  4545.     DO YOUR HOMEWORK - Turn hours of research into minutes online, with
  4546.     hundreds of national and international databases representing diverse
  4547.     specializations. Avoid lengthy library searches by pulling up abstracts
  4548.     and full articles directly online.
  4549.     
  4550.     BE INFORMED - Turn to Compuserve's online news service for daily news
  4551.     from the associated Press' national and international wires, United
  4552.     Press International's national and regional wires, The Washington Post,
  4553.     Reuters, and other reputable sources. The Executive News Service scans
  4554.     these wires for articles on topics you select, then clips and saves them
  4555.     for reading at your leisure.
  4556.     
  4557.     DON'T PASS THIS UP - As a Computer Tyme customer, you're entitled to a
  4558.     free Introductory Membership to Compuserve, including:
  4559.     
  4560.     1) A FREE on month membership to access all of Compuserve's Basic
  4561.     Services.
  4562.     
  4563.     2) A $15 introductory usage credit to explore the Computer Tyme Section
  4564.     of the Novell Vendor Forum and Compuserve's other Extended and Premium
  4565.     Service offerings.
  4566.     
  4567.  
  4568.     Computer Tyme * MarxMenu * Users Manual                 Page #69
  4569.     -----------------------------------------------------------------
  4570.     
  4571.     3) A complimentary subscription to Compuserve Magazine, Compuserve's
  4572.     monthly computing magazine.
  4573.     
  4574.     For those of you who are using Novell networks, the best place to get
  4575.     Novell technical support is in the many forums that Novell provides on
  4576.     Compuserve. In fact, it has been my experience that the support on
  4577.     Compuserve is significantly better than what Novell provides directly.
  4578.     If you are a serious Novell user, you definitely need to be on
  4579.     Compuserve. That's where the real Novell support is.
  4580.     
  4581.     To start connecting with Computer Tyme, Novell, and other Compuserve
  4582.     members call 800-524-3388 and ask for representative #419. If you are
  4583.     already a Compuserve member, enter GO COMPTYME at any ! prompt.
  4584.     
  4585.     
  4586.      MARXMENU COMMANDS
  4587.     
  4588.     MarxMenu contains a rich set of commands. They are listed here
  4589.     alphabetically and by command category. You don't have to learn them all
  4590.     so don't let the size of the list scare you.
  4591.     
  4592.     In the following command list, words contained within ( ) are command
  4593.     parameters that must be included after the menu command. The numeric
  4594.     range for the <column> parameter is 1 - 80 decimal, and for the <row>
  4595.     parameter the range is 1 - 25, 43, or 50 decimal depending on how many
  4596.     lines your monitor displays.
  4597.     
  4598.     
  4599.      | (Vertical Bar)
  4600.     
  4601.     Forces MarxMenu interpretation under an OnKey Command. If not for the |
  4602.     (Vertical Bar), the command under an OnKey would be written to a batch
  4603.     file. The | is only used under OnKey commands.
  4604.     
  4605.      Example:
  4606.        OnKey 'S'
  4607.          |password 'hello' 3 4
  4608.          ECHO Type EXIT to return to menu
  4609.          COMMAND.COM
  4610.     
  4611.        OnKey 'X'
  4612.          |if UpperCase(ReadEnv('USERNAME')) = 'SUPERVISOR'
  4613.            SYSCON
  4614.          |else
  4615.          |  SecurityBreach('You do not have access to this function!')
  4616.          |endIf
  4617.     
  4618.     Category: Misc
  4619.     
  4620.  
  4621.     Computer Tyme * MarxMenu * Users Manual                 Page #70
  4622.     -----------------------------------------------------------------
  4623.     
  4624.      ( : Operator
  4625.     
  4626.     Starts logical interpreter grouping.
  4627.     
  4628.     Used to force evaluation of an expression other than the normal left to
  4629.     right order.
  4630.     
  4631.      Example:
  4632.        2 * 3 + 2     evaluates to  8
  4633.        2 * ( 3 + 2 ) evaluates to  10
  4634.     
  4635.     See Also: )
  4636.     
  4637.     Category: Misc
  4638.     
  4639.     
  4640.      ) : Operator
  4641.     
  4642.     Ends logical interpreter grouping.
  4643.     
  4644.     See Also: (
  4645.     
  4646.     Category: Misc
  4647.     
  4648.     
  4649.      * : Operator
  4650.     
  4651.     Multiplies two numbers.
  4652.     
  4653.      Example:
  4654.        4 * 6 ;returns 24
  4655.     
  4656.     Category: Math Float
  4657.     
  4658.     
  4659.      + : Operator
  4660.     
  4661.     Adds two numbers or two strings.
  4662.     
  4663.      Example:
  4664.        "Hello" + " " + "World"  ;returns "Hello World"
  4665.        2 + 2 ;returns 4
  4666.     
  4667.     The plus operator can also used to concatinate arrays or concatinate
  4668.     values to arrays.
  4669.     
  4670.      Example:
  4671.        X[1] = 1
  4672.        X[2] = 2
  4673.     
  4674.        Y[1] = 3
  4675.        Y[2] = 4
  4676.     
  4677.  
  4678.     Computer Tyme * MarxMenu * Users Manual                 Page #71
  4679.     -----------------------------------------------------------------
  4680.     
  4681.        Z = X + Y     ;returns an array containing [1,2,3,4]
  4682.        Z = X + "A"   ;returns an array containing [1,2,'A']
  4683.        Z = "A" + X   ;returns an array containing ['A',1,2]
  4684.     
  4685.     Category: Math String Float Array
  4686.     
  4687.     
  4688.      - : Operator
  4689.     
  4690.     Subtracts two numbers.
  4691.     
  4692.      Example:
  4693.        7 - 4 ;returns 3
  4694.     
  4695.     Category: Math Float
  4696.     
  4697.     
  4698.      / : Operator
  4699.     
  4700.     Divides two numbers.
  4701.     
  4702.      Example:
  4703.        6 / 3 ;returns 2
  4704.     
  4705.     Category: Math Float
  4706.     
  4707.     
  4708.      < : Operator
  4709.     
  4710.     Less Than - Compares two numbers or strings.
  4711.     
  4712.      Example:
  4713.        3 < 4 = True
  4714.        'AB' < 'CD' ;returns True
  4715.     
  4716.     Category: Math String Float
  4717.     
  4718.     
  4719.      <= : Operator
  4720.     
  4721.     Less Than or Equal - Compares two numbers or strings.
  4722.     
  4723.      Example:
  4724.        3 <= 4 = True
  4725.        'AB' <= 'CD' ;returns True
  4726.     
  4727.     Category: Math String Float
  4728.     
  4729.  
  4730.     Computer Tyme * MarxMenu * Users Manual                 Page #72
  4731.     -----------------------------------------------------------------
  4732.     
  4733.      <> : Operator
  4734.     
  4735.     Not Equal - Compares two numbers or strings.
  4736.     
  4737.      Example:
  4738.        3 <> 4 = True
  4739.        'AB' <> 'CD' ;returns True
  4740.     
  4741.     Category: Math String Float
  4742.     
  4743.     
  4744.      = : Operator
  4745.     
  4746.     Equal - Compares two numbers or strings.
  4747.     
  4748.      Example:
  4749.        3 = 4 = False
  4750.        'AB' - 'CD' ;returns False
  4751.     
  4752.     Category: Math String Float
  4753.     
  4754.     
  4755.      > : Operator
  4756.     
  4757.     Greater Than - Compares two numbers or strings.
  4758.     
  4759.      Example:
  4760.        3 > 4 = False
  4761.        'AB' > 'CD' ;returns False
  4762.     
  4763.     Category: Math String Float
  4764.     
  4765.     
  4766.      >= : Operator
  4767.     
  4768.     Greater Than or Equal - Compares two numbers or strings.
  4769.     
  4770.      Example:
  4771.        3 >= 4 = False
  4772.        'AB' >= 'CD' ;returns False
  4773.     
  4774.     Category: Math String Float
  4775.     
  4776.     
  4777.      Abs : Number
  4778.     
  4779.     Returns the absolute value of a number. The absolute value is the value
  4780.     of the number without the sign.
  4781.     
  4782.      Example:
  4783.         Abs(-6) ;returns 6
  4784.     
  4785.  
  4786.     Computer Tyme * MarxMenu * Users Manual                 Page #73
  4787.     -----------------------------------------------------------------
  4788.     
  4789.     Category: Math Float
  4790.     
  4791.     
  4792.      Actual
  4793.     
  4794.     If you want to read or write to a variable directly that is referencing
  4795.     another variable I have provided the command Actual. Actual overrides
  4796.     any pointers set by the command Loc.
  4797.     
  4798.      Example:
  4799.         Dispose Actual B
  4800.         Actual B = 5
  4801.     
  4802.     See Also: Loc
  4803.     
  4804.     Category: Variable
  4805.     
  4806.     
  4807.      Alias
  4808.     
  4809.     Alias (name) = (string)
  4810.     This is a compiler level text substitution command. When (name) is
  4811.     defined as (string) whenever you use (name) it is the same to the
  4812.     compiler as if (string) were typed there.
  4813.     
  4814.      Example:
  4815.        Alias TwoPlusThree = "(2 + 3)"
  4816.        .
  4817.        .
  4818.        .
  4819.        2 * TwoPlusThree = 10
  4820.        .
  4821.        Writeln TwoPlusThree
  4822.     
  4823.     Writeln TwoPlusThree is the same as Writeln (2 + 3)
  4824.     
  4825.     Category: Misc
  4826.     
  4827.     
  4828.      AllowAbort (On/Off)
  4829.     
  4830.     MarxMenu was written to allow processes to be aborted and in a very
  4831.     smooth way eliminating the need for the user to deal with complicated
  4832.     error logic. In some cases this has gotten in the way of specific
  4833.     control when the user presses the escape key or other error occurs.
  4834.     
  4835.     If AllowAbort is set to Off, MarxMenu will continue on to the next
  4836.     command. You can then test LastKey to see if the escape key was pressed.
  4837.     If the user presses escape a nul string is returned.
  4838.     
  4839.     See Also: AllowEsc
  4840.     
  4841.  
  4842.     Computer Tyme * MarxMenu * Users Manual                 Page #74
  4843.     -----------------------------------------------------------------
  4844.     
  4845.     Category: Misc
  4846.     
  4847.     
  4848.      AllowEsc (On/Off)
  4849.     
  4850.     Several MarxMenu commands such as PickOne, PickMany and PickFile allow
  4851.     you to press escape to abort. If you turn AllowEsc Off then the escape
  4852.     key is ignored. This forces the user to make a choice.
  4853.     
  4854.     See Also: AllowAbort
  4855.     
  4856.     Category: Misc
  4857.     
  4858.     
  4859.      And : Operator
  4860.     
  4861.     Returns logical And if operators are boolean; or bitwise And if
  4862.     operators are numeric.
  4863.     
  4864.      Example:
  4865.        if (Month = Dec) and (Day = 25) then Writeln 'Merry Christmas!'
  4866.        7 and 3 = 3  ;0111 and 0011
  4867.     
  4868.     Note: The parentheses are necessary because MarxMenu interprets from
  4869.     right to left.
  4870.     
  4871.     See Also: Or Xor Not
  4872.     
  4873.     Category: Math Boolean
  4874.     
  4875.     
  4876.      AnsiWindows (On,Off)
  4877.     
  4878.     If AnsiWindow is set to On, MarxMenu interprets Ansi escape codes in a
  4879.     window.
  4880.     
  4881.     See Also : VT100mode
  4882.     
  4883.     Category : Display, Modem
  4884.     
  4885.     
  4886.      AppendArray (Array,Value)
  4887.     
  4888.     AppendArray appends Value to the end of an array. The number of elements
  4889.     is increased by one. It is not used to append two arrays "end to end".
  4890.     
  4891.      Example:
  4892.        var X
  4893.        X[1] = 'TEST1'
  4894.        AppendArray(X,'TEST2')
  4895.     
  4896.        Loop X
  4897.           Writeln X[LoopIndex]
  4898.        EndLoop
  4899.     
  4900.  
  4901.     Computer Tyme * MarxMenu * Users Manual                 Page #75
  4902.     -----------------------------------------------------------------
  4903.     
  4904.      This Prints:
  4905.        TEST1
  4906.        TEST2
  4907.     
  4908.     Category: Array
  4909.     
  4910.     
  4911.      ApplicationMemory : Number
  4912.     
  4913.     Returns the number of bytes of memory available to an application when
  4914.     MarxMenu exits out to the MARX.BAT file. This is the actual amount of
  4915.     RAM available to your application.
  4916.     
  4917.     See Also: FreeMemory
  4918.     
  4919.     Category: Memory
  4920.     
  4921.     
  4922.      ArcTan (Radians) : Real
  4923.     
  4924.     Returns the ArcTangent of a real.
  4925.     
  4926.     Category: Math Float
  4927.     
  4928.     
  4929.      ArrayInsert (Array,Position,Count)
  4930.     
  4931.     ArrayInsert inserts space in Array at location Position for Count
  4932.     locations.
  4933.     
  4934.      Example:
  4935.        var A
  4936.        Loop 5
  4937.           A[LoopIndex] = LoopIndex
  4938.        EndLoop
  4939.        ArrayInsert(A,3,1)
  4940.        A[3] = 10
  4941.     
  4942.        Array A will be [1 2 10 3 4 5]
  4943.     
  4944.     Category: Array
  4945.     
  4946.     
  4947.      AssignList (2D Array)
  4948.     
  4949.     AssignList reads the network assign list table and return a 2
  4950.     dimensional array containing the local names and the network names.
  4951.     
  4952.      Example:
  4953.        var X
  4954.        AssignList (X)
  4955.     
  4956.  
  4957.     Computer Tyme * MarxMenu * Users Manual                 Page #76
  4958.     -----------------------------------------------------------------
  4959.     
  4960.        Loop X
  4961.           Writeln X[LoopIndex,1] '=' X[LoopIndex,2]
  4962.        EndLoop
  4963.     
  4964.     See Also: CancelListEntry MakeListEntry
  4965.     
  4966.     Category: Novell MSNet Vines
  4967.     
  4968.     
  4969.      BadDate : Boolean
  4970.     
  4971.     Set to true if you try to convert a string to a date and the date is
  4972.     invalid.
  4973.     
  4974.      Example:
  4975.        TimeOf('02-30-92')   ;Sets BadDate to True
  4976.     
  4977.     See Also: TimeOf
  4978.     
  4979.     Category: Time
  4980.     
  4981.     
  4982.      Bat (String)
  4983.     
  4984.     Bat is used to write a line to the batch file the same way that lines
  4985.     under OnKey commands do. All the same rules apply. The batch file is
  4986.     created when the menu exits. Bat statements give you more control over
  4987.     what MarxMenu executes and allow you to include the contents of MarxMenu
  4988.     variables in your batch files.
  4989.     
  4990.     When using Bat under an OnKey statement, be sure to use the vertical bar
  4991.     in front of it. Bat gives you more control over what is sent to the
  4992.     batch file that MARX.BAT executes.
  4993.     
  4994.      Example:
  4995.        OnKey 'D'
  4996.          CLS
  4997.          |BAT "DIR " HomeDirectory '\' UserName
  4998.          PAUSE
  4999.     
  5000.     See Also: OnKey
  5001.     
  5002.     Category: Execution
  5003.     
  5004.     
  5005.      BatFileName : String
  5006.     
  5007.     Returns the name of the batch file that MarxMenu would create if
  5008.     MarxMenu were to create a batch file automatically.
  5009.     
  5010.     Category: String
  5011.     
  5012.  
  5013.     Computer Tyme * MarxMenu * Users Manual                 Page #77
  5014.     -----------------------------------------------------------------
  5015.     
  5016.      BigShadow
  5017.     
  5018.     Selects big shadow type. This is the default shadow.
  5019.     
  5020.     See Also: SmallShadow ShadowPosition ShadowColor
  5021.     
  5022.     Category: Display
  5023.     
  5024.     
  5025.      BinString (Number, Length) : String
  5026.     
  5027.     BinString converts a number into a base 2 binary string. If Length > 0
  5028.     then the number will have enough leading zeros to make it Length long.
  5029.     If Length = 0 then leading zeros are removed. Length must be 32 or less.
  5030.     
  5031.      Example:
  5032.        Writeln BinString(45,8)    ;returns 00101101
  5033.        Writeln BinString(45,0)    ;returns 101101
  5034.     
  5035.     See Also: HexString
  5036.     
  5037.     Category: String
  5038.     
  5039.     
  5040.      BiosDate : String
  5041.     
  5042.     Returns the date of the rom Bios.
  5043.     
  5044.     Category: System
  5045.     
  5046.     
  5047.      Blanked : Boolean
  5048.     
  5049.     Returns true if the screen blanker has kicked it. This lets you alter
  5050.     your idle program based on whether the screen blanker is active.
  5051.     
  5052.     See Also: IdleProgram
  5053.     
  5054.     Category: Display
  5055.     
  5056.     
  5057.      BlankMessage (String)
  5058.     
  5059.     When the screen blanks out, this one line message is displayed. If
  5060.     BlankMessage is not set, the date and time will be displayed.
  5061.     
  5062.      Example:
  5063.        BlankMessage = 'Out to Lunch!'
  5064.     
  5065.     See Also: ConsolePos
  5066.     
  5067.     Category: String
  5068.     
  5069.  
  5070.     Computer Tyme * MarxMenu * Users Manual                 Page #78
  5071.     -----------------------------------------------------------------
  5072.     
  5073.      BlankScreenProgram : Procedure
  5074.     
  5075.     This allows you to specify a custom procedure to have executed in place
  5076.     of the MarxMenu internal screen blanker. It also overrides the
  5077.     IdleProgram so if you are running something in your idle program that
  5078.     you want to continue to run when the screen goes blank, call your idle
  5079.     procedure from the screen blanker procedure.
  5080.     
  5081.     If you exit your screen blanker and MarxMenu thinks the screen should
  5082.     still be blank it will call it again. You can set UnBlank to True in
  5083.     your screen blanking program to override this and unblank the screen.
  5084.     
  5085.     When MarxMenu determines it's time to activate the screen blanker, it
  5086.     first blanks the screen then calls the BlankScreenProgram. When MarxMenu
  5087.     decides it's ready to unblank the screen it sets UnBlank to true.  When
  5088.     your BlankScreenProgram procedure is finished, MarxMenu will restore
  5089.     your screen to it's original condition upon exit.
  5090.     
  5091.     Commands like UseNovPassword, LockWord, and BlankTime will work with
  5092.     your screen blanker.
  5093.     
  5094.     To set up a blank screen program:
  5095.     
  5096.     BlankScreenProgram = Loc Procedure
  5097.     
  5098.      Example:
  5099.        BlankScreenProgram = Loc RunWorm
  5100.     
  5101.     To switch back to normal screen blanking run:
  5102.     
  5103.      Dispose(ScreenBlankProgram)
  5104.     
  5105.     For an example of a blank screen look at WORM.INC.
  5106.     
  5107.     The BlankScreenProgram can be used to run an external program to blank
  5108.     the screen.  So if you have some slick fractal program that you like
  5109.     MarxMenu will run it.  Here's how you would set it up.
  5110.     
  5111.      BlankScreenProgram = Loc BlankProg
  5112.     
  5113.      Procedure BlankProg
  5114.         Execute 'FRACTAL.EXE'
  5115.         UnBlank = True
  5116.      EndProc
  5117.     
  5118.     See Also: IdleProgram UnBlank
  5119.     
  5120.     Category: Display
  5121.     
  5122.  
  5123.     Computer Tyme * MarxMenu * Users Manual                 Page #79
  5124.     -----------------------------------------------------------------
  5125.     
  5126.      BlankTime (Minutes)
  5127.     
  5128.     Sets the number of minutes before the screen blanks out to prevent
  5129.     screen burn. Since this is not a resident program, screen blanking is
  5130.     only active while the menu system is active. Setting BlankTime to 0
  5131.     prevents screen blanking.
  5132.     
  5133.      Example:
  5134.        BlankTime = 10  ;set to 10 minutes
  5135.        BlankTime = 0   ;disables screen blanking
  5136.        Writeln BlankTime " Minutes of inactivity will cause screen blanking."
  5137.     
  5138.     Category: Display
  5139.     
  5140.     
  5141.      Blink : Boolean
  5142.     
  5143.     Blink is a boolean variable that when set to true allows you to specify
  5144.     colors that will blink. To make a color that blinks, set the background
  5145.     color to a bright color. A bright color is a color from 8 to 15.
  5146.     
  5147.     Normally, when Blink is off, MarxMenu strips the high bit of the colors.
  5148.     When Blink is on, high bit stripping is disabled.
  5149.     
  5150.      Example:
  5151.        Blink
  5152.        TextColor Green LRed
  5153.     
  5154.     Because the background color is light red, the text will blink.
  5155.     
  5156.     Warning: Blinking characters can cause headaches and eye strain. I
  5157.     resisted adding this feature for a long time because I personally hate
  5158.     excessive blinking characters on the screen. I now recognize that
  5159.     blinking can be very effective when used correctly. Please use blinking
  5160.     sparingly.
  5161.     
  5162.     Category: Color
  5163.     
  5164.     
  5165.      BlockBox
  5166.     
  5167.     Selects menu borders to have a block type edge.
  5168.     
  5169.     See Also: SingleLineBox DoubleLineBox CustomBox NoBoxBorder
  5170.     
  5171.      Example:
  5172.        BoxBordercolor yellow black
  5173.        BoxInsideColor White Black
  5174.        BlockBox                      ;<- Set Border Type to Block Style
  5175.        DrawBox 10 10 60 10
  5176.     
  5177.  
  5178.     Computer Tyme * MarxMenu * Users Manual                 Page #80
  5179.     -----------------------------------------------------------------
  5180.     
  5181.     Category: Display
  5182.     
  5183.     
  5184.      BootDrive : String
  5185.     
  5186.     Returns the drive letter of the boot drive. This command only works with
  5187.     DOS 4+, on all other versions of DOS it returns a null string. On
  5188.     diskless workstations the BootDrive will be A.
  5189.     
  5190.     Category: File
  5191.     
  5192.     
  5193.      BoxBorderColor (Foreground,Background)
  5194.     
  5195.     Sets colors for box border.
  5196.     
  5197.      Example:
  5198.        BoxBordercolor LRed black     ;<- Set Border Colors to LRed/Black
  5199.        BoxInsideColor White Black
  5200.        BlockBox
  5201.        DrawBox 10 10 60 10
  5202.     
  5203.     Category: Color
  5204.     
  5205.     
  5206.      BoxHeader (String)
  5207.     
  5208.     There are three possible box header strings.  This command sets the
  5209.     center header message for the next box displayed. This command must be
  5210.     used before the DrawBox command.
  5211.     
  5212.      Example:
  5213.        BoxHeader ' Center BoxHeader String ' ;<- Sets the Box Header String
  5214.        BoxBordercolor LRed Black
  5215.        BoxInsideColor White Black
  5216.        BlockBox
  5217.        DrawBox 5,6,70,9
  5218.     
  5219.     See Also: BoxHeaderLeft BoxHeaderRight
  5220.     See Also: BoxFooter BoxFooterLeft BoxFooterRight
  5221.     
  5222.     Category: Display
  5223.     
  5224.     
  5225.      BoxHeaderColor (Foreground,Background)
  5226.     
  5227.     There are three possible box header strings. This command sets colors
  5228.     for all the box headers and box footers strings.
  5229.     
  5230.      Example:
  5231.        BoxHeader ' Center Box Header String '
  5232.        BoxFooter ' Box Footer String '
  5233.        BoxBordercolor LRed Black
  5234.        BoxInsideColor White Black
  5235.        BoxHeaderColor Yellow Black       ;<-- Set Box Header/Footer Colors
  5236.        DrawBox 5,6,70,9
  5237.     
  5238.  
  5239.     Computer Tyme * MarxMenu * Users Manual                 Page #81
  5240.     -----------------------------------------------------------------
  5241.     
  5242.     Category: Color
  5243.     
  5244.     
  5245.      BoxHeaderLeft (String)
  5246.     
  5247.     There are three possible box header strings. This command sets the
  5248.     left header message for the next box displayed. This command must be
  5249.     used before the DrawBox command.
  5250.     
  5251.      Example:
  5252.        BoxHeaderLeft ' Left Header String ' ;<- Set Left Header String
  5253.        BoxBordercolor LRed Black
  5254.        BoxInsideColor White Black
  5255.        BoxHeaderColor Yellow Black
  5256.        DrawBox 5,6,70,9
  5257.     
  5258.     See Also: BoxHeader BoxHeaderRight
  5259.     See Also: BoxFooter BoxFooterLeft BoxFooterRight
  5260.     
  5261.     Category: Display
  5262.     
  5263.     
  5264.      BoxHeaderRight (String)
  5265.     
  5266.     There are three possible box header strings. This command sets the
  5267.     right header message for the next box displayed. This command must be
  5268.     used before the DrawBox command.
  5269.     
  5270.      Example:
  5271.        BoxHeaderRight 'Right Header String ';<- Set Right Header String
  5272.        BoxBordercolor LRed Black
  5273.        BoxInsideColor White Black
  5274.        BoxHeaderColor Yellow Black
  5275.        DrawBox 5,6,70,9
  5276.     
  5277.     See Also: BoxHeader BoxHeaderLeft
  5278.     See Also: BoxFooter BoxFooterLeft BoxFooterRight
  5279.     
  5280.     Category: Display
  5281.     
  5282.     
  5283.      BoxFooter (String)
  5284.     
  5285.     There are three possible box footer strings. This command sets the
  5286.     center footer message for the next box displayed. This command must be
  5287.     used before the DrawBox command.
  5288.     
  5289.      Example:
  5290.        BoxHeader ' Center Box Header String '
  5291.        BoxFooter ' Box Footer String '   ;<-- Set Center Footer String
  5292.        BoxBordercolor LRed Black
  5293.        BoxInsideColor White Black
  5294.        BoxHeaderColor Ye9llow Black
  5295.        DrawBox 5,6,70,9
  5296.     
  5297.  
  5298.     Computer Tyme * MarxMenu * Users Manual                 Page #82
  5299.     -----------------------------------------------------------------
  5300.     
  5301.     See Also: BoxHeader BoxHeaderLeft BoxHeaderRight
  5302.     See Also: BoxFooterLeft BoxFooterRight
  5303.     
  5304.     Category: Display
  5305.     
  5306.     
  5307.      BoxFooterLeft (String)
  5308.     
  5309.     There are three possible box footer strings. This command sets the
  5310.     Left Footer message for the next box displayed. This command must be
  5311.     used before the DrawBox command.
  5312.     
  5313.      Example:
  5314.        BoxFooter ' Center Footer String '
  5315.        BoxFooterLeft ' Left Footer String '   ;<-- Set Left Footer String
  5316.        BoxFooterRight ' Right Footer String '
  5317.        BoxBordercolor LRed Black
  5318.        BoxInsideColor White Black
  5319.        BoxHeaderColor Yellow Black
  5320.        DrawBox 5,6,70,9
  5321.     
  5322.     See Also: BoxHeader BoxHeaderLeft BoxHeaderRight
  5323.     See Also: BoxFooter BoxFooterRight
  5324.     
  5325.     Category: Display
  5326.     
  5327.     
  5328.      BoxFooterRight (String)
  5329.     
  5330.     There are three possible box footer strings. This command sets the
  5331.     Right Footer message for the next box displayed. This command must be
  5332.     used before the DrawBox command.
  5333.     
  5334.      Example:
  5335.        BoxFooter ' Center Footer String '
  5336.        BoxFooterLeft ' Left Footer String '
  5337.        BoxFooterRight ' Right Footer String ' ;<-- Set Right Footer String
  5338.        BoxHeaderColor Yellow Black
  5339.        BoxBordercolor LRed Black
  5340.        BoxInsideColor White Black
  5341.        DrawBox 5,6,70,9
  5342.     
  5343.     See Also: BoxHeader BoxHeaderLeft BoxHeaderRight
  5344.     See Also: BoxFooter BoxFooterLeft
  5345.     
  5346.     Category: Display
  5347.     
  5348.  
  5349.     Computer Tyme * MarxMenu * Users Manual                 Page #83
  5350.     -----------------------------------------------------------------
  5351.     
  5352.      BoxInsideColor (Foreground,Background)
  5353.     
  5354.     This command sets the colors for the interior of a box.
  5355.     
  5356.      Example:
  5357.        BoxBordercolor LRed Black
  5358.        BoxInsideColor White Black  ;<- Set Inside Colors to White on Black
  5359.        DrawBox 5,6,70,9
  5360.     
  5361.     Category: Color
  5362.     
  5363.     
  5364.      Break (On/Off)
  5365.     
  5366.     Turns DOS break checking On and Off the same way that it does from
  5367.     batch files.
  5368.     
  5369.     Category: System
  5370.     
  5371.     
  5372.      BrightBackground (On/Off)
  5373.     
  5374.     This command switches between bright background modes and blink modes.
  5375.     This doubles the number of colors that MarxMenu can produce.
  5376.     
  5377.     This command affects the video controller directly. Thus, it may not
  5378.     work on all computers especially if you are running something weird.
  5379.     
  5380.     Once this is set in MarxMenu it stays set. So if you run another program
  5381.     that has blink in it, it will use 16 background colors instead. The
  5382.     solution is to set BrightBackground Off right before you run a program
  5383.     that requires blinking.
  5384.     
  5385.      Example:
  5386.        OnKey 'X'
  5387.          |BrightBackground Off
  5388.          PROCOMM
  5389.     
  5390.     Warning! This program uses a trick that may not be compatible with some
  5391.     TSR programs. If you can get away with it, fine. But, if you have
  5392.     problems where TSR's cause your screen to blink, then don't use this
  5393.     command.
  5394.     
  5395.     Category: Video
  5396.     
  5397.  
  5398.     Computer Tyme * MarxMenu * Users Manual                 Page #84
  5399.     -----------------------------------------------------------------
  5400.     
  5401.      BtrvAbortTransaction
  5402.     
  5403.     BtrvAbortTransaction is used to abort all changes to the file that have
  5404.     occurred since the BtrvBeginTransaction was executed.
  5405.     
  5406.     See Also: BtrvBeginTransaction BtrvEndTransaction
  5407.     
  5408.     Category: Btrieve
  5409.     
  5410.     
  5411.      BtrvBeginTransaction
  5412.     
  5413.     Betrieve supports a concept called transaction tracking. With
  5414.     transaction tracking you can use the BtrvBeginTransaction command to set
  5415.     a file condition flag marking the start of a file process. Should the
  5416.     file process be interrupted before the end of the process the files will
  5417.     be restored to the original condition they were in prior to the
  5418.     BtrvBeginTransaction.
  5419.     
  5420.      Result Codes:
  5421.        37 - Transaction is Active
  5422.     
  5423.     See Also: BtrvAbortTransaction BtrvEndTransaction
  5424.     
  5425.     Category: Btrieve
  5426.     
  5427.     
  5428.      BtrvClearOwner (Handle)
  5429.     
  5430.     BtrvClearOwner clears the owner and allows normal access to the file.
  5431.     
  5432.      Example:
  5433.        BtrvClearOwner (Handle)
  5434.     
  5435.     See Also: BtrvSetOwner
  5436.     
  5437.     Category: Btrieve
  5438.     
  5439.     
  5440.      BtrvClose (Handle)
  5441.     
  5442.     BtrvClose closes the file. The parameter `Handle' is the file handle
  5443.     returned from BtrvOpen.
  5444.     
  5445.      Example:
  5446.        BtrvClose (Handle)
  5447.     
  5448.     See Also: BtrvOpen
  5449.     
  5450.     Category: Btrieve
  5451.     
  5452.  
  5453.     Computer Tyme * MarxMenu * Users Manual                 Page #85
  5454.     -----------------------------------------------------------------
  5455.     
  5456.      BtrvCreate (FileName,Fields)
  5457.     
  5458.     BtrvCreate is the most complicated Btrieve call. It defines the creation
  5459.     of the Btrieve database. The fields parameter is a two dimensional
  5460.     MarxMenu array that describes the fields in the file. It is designed to
  5461.     support either standard Btrieve fixed-length fields or MarxMenu key
  5462.     fields. Using MarxMenu fields is the easiest because you only have to
  5463.     define the key fields.  Non-key fields do not have to be predefined.
  5464.     
  5465.     The easiest way to define these fields is to create a comma delimited
  5466.     text file and use ReadAscTextFile('FIELDS.TXT',Fields). This will create
  5467.     the array needed by BtrvCreate. The text file might look as follows:
  5468.     
  5469.        Name,String,35,Key,DUP,MOD,UPPER,DEC
  5470.        CustomerNumber,Auto,Key
  5471.        From,String,35
  5472.        Password,String,15
  5473.        Access,Num
  5474.        Flags,String,10
  5475.        FirstDate,Date
  5476.        LastDate,Date
  5477.        Calls,Num
  5478.        CallTime,Time
  5479.        Phone,String,15
  5480.     
  5481.      Example:
  5482.        Var Fields, FieldHandle
  5483.        ReadAscTextFile('FIELDS.TXT',Fields)
  5484.        BtrvCreate('BBSUSER.BTD',Fields)
  5485.        FileHandle = BtrvOpen('BBSUSER.BTD',Fields)
  5486.     
  5487.     The above example creates a conventional fixed-length database with one
  5488.     key field, the "name" field. Each line in the definition file defines a
  5489.     new field. Each line has at least two parameters. The first parameter is
  5490.     the field name. It is followed by the field type. There are five legal
  5491.     field types.  They are:
  5492.     
  5493.       String - Contains alphanumeric strings. String fields have a required
  5494.                third parameter, the maximum length of the string. In the
  5495.                above example the "Name" and "From" fields both have max
  5496.                lengths of 35 characters.
  5497.     
  5498.       Num    - Integer numeric fields. This field type supports storing
  5499.                integer numbers.
  5500.     
  5501.       Date   - Dates fields. The DOS country code is automatically supported
  5502.                to establish date format. If not specified, the default
  5503.                format is "MM/DD/YY".
  5504.     
  5505.  
  5506.     Computer Tyme * MarxMenu * Users Manual                 Page #86
  5507.     -----------------------------------------------------------------
  5508.     
  5509.       Time   - Time fields. This command also reads the DOS country code to
  5510.                establish the proper format.  Otherwise default is "HH:MM:SS".
  5511.     
  5512.       Auto   - Auto increment field. This field is a numeric field that is
  5513.                filled in by Btrieve. If you pass a zero value, Btrieve will
  5514.                fill it in automatically with sequential unique numbers. The
  5515.                first record being one, the second record being two, etc. If
  5516.                records are deleted the numbers are not reused. If you pass a
  5517.                non-zero value that does not match any other record, Btrieve
  5518.                will accept that value. This feature can be used to provide
  5519.                unique record numbers.
  5520.     
  5521.     USING KEY FIELDS
  5522.     
  5523.     Key fields are fields that are have internal lookup indexs automatically
  5524.     defined and maintained by the Btrieve system. If you want to use the
  5525.     indexed lookup `BtrvGet_____' series of commands then the field you
  5526.     reference must be a key field. You define a key field by adding the
  5527.     parameter "KEY" as the third parameter on the field definition line.
  5528.     When specifying a field as a key field you have four optional
  5529.     configuration parameters as seen in the previous example. They are:
  5530.     
  5531.       DUP  - {Duplicates}  This permits the field to have duplicate values
  5532.              in multiple records. If this parameter is not specified then no
  5533.              two records may have the same value in the affected field. In
  5534.              reality, you will almost always specify this parameter when
  5535.              defining a key field.
  5536.     
  5537.       MOD  - {Modifiable}  This allows existing existing field records to be
  5538.              modified. If this parameter is not specified then once a record
  5539.              is written, the affected field is set in stone and changes are
  5540.              not permitted.
  5541.     
  5542.       UPPER- {UpperCase Only}  Used in cunjunction with string fields only,
  5543.              this will force all text information to be sorted as UPPERCASE.
  5544.              This feature requires Btrieve 6.0 or later.
  5545.     
  5546.       DEC - {Descending Order} This caused the key stored in the affected
  5547.             field to be maintained in reverse order.
  5548.     
  5549.     USING MARXMENU STYLE DATABASE
  5550.     
  5551.     If you wanted to use a MarxMenu-style database then only the first two
  5552.     lines of the above example need be in the file. This would create a file
  5553.     with two fixed-length key fields and put the rest of the fields in the
  5554.     variable-length section. Using the MarxMenu style you can pass anything
  5555.     you want for the rest of the fields.
  5556.     
  5557.  
  5558.     Computer Tyme * MarxMenu * Users Manual                 Page #87
  5559.     -----------------------------------------------------------------
  5560.     
  5561.        Name,String,35,Key,DUP,MOD,UPPER,DEC
  5562.        CustomerNumber,Auto,Key
  5563.     
  5564.                    --------------------------------------
  5565.                    |Name|CustomerNumber|All Other Fields|
  5566.                    --------------------------------------
  5567.                     ^    ^              ^
  5568.                     |    |              |
  5569.      Fixed Length --+----+              +--- Variable Length
  5570.     
  5571.     In a MarxMenu-style database, you pass data to and from the file using
  5572.     MarxMenu-style array variables. The first fields of the array must match
  5573.     the key fields. But the rest of the fields can be anything you want.
  5574.     They can be multidimensional arrays. The fields do not have to be the
  5575.     same from one record to the next. Record number one can have five
  5576.     fields, where record number two can have twenty. After the key fields
  5577.     you can do anything you want.
  5578.     
  5579.      Result Codes:
  5580.         18 - Disk Full
  5581.     
  5582.     Category: Btrieve
  5583.     
  5584.     
  5585.      BtrvDelete (Handle)
  5586.     
  5587.     BtrvDelete deletes a record from a data file at the location of the last
  5588.     data read from the file.
  5589.     
  5590.      Example:
  5591.        BtrvGetEqual(DataVar,'MARC PERKEL',1,Handle)
  5592.        BtrvDelete(Handle)
  5593.     
  5594.     See Also: BtrvInsert
  5595.     
  5596.     Category: Btrieve
  5597.     
  5598.     
  5599.      BtrvEndTransaction
  5600.     
  5601.     BtrvEndTransaction is used at the end of a transaction tracking process.
  5602.     This command updates the files with all the data to be written. Refer to
  5603.     the BtrvBeginTransaction command for additional information.
  5604.     
  5605.     See Also: BtrvAbortTransaction BtrvBeginTransaction
  5606.     
  5607.     Category: Btrieve
  5608.     
  5609.  
  5610.     Computer Tyme * MarxMenu * Users Manual                 Page #88
  5611.     -----------------------------------------------------------------
  5612.     
  5613.      BtrvGetEqual (DataVar,Value,Key,Handle)
  5614.     
  5615.     BtrvGetEqual goes to the previous record of the file based on the key
  5616.     number that you pass and reads the record matching Value into DataVar.
  5617.     The type of value passed has to match the type of data for which the key
  5618.     is defined. If the key is a string then Value is a string. If BtrvResult
  5619.     is zero, the data was found. If BtrvGetNext is called after this, the
  5620.     next sequential record based on the key is read.
  5621.     
  5622.      Example:
  5623.        BtrvGetEqual(DataVar,'MARC PERKEL',1,Handle)
  5624.     
  5625.      Result Codes:
  5626.        4 - Key Value not Found
  5627.        6 - Invalid Key Number
  5628.     
  5629.     See Also: BtrvGetLess BtrvGetLessOrEqu BtrvGetGreater
  5630.     See Also: BtrvGetGreaterOrEqu
  5631.     
  5632.     Category: Btrieve
  5633.     
  5634.     
  5635.      BtrvGetFirst (DataVar,Key,Handle)
  5636.     
  5637.     BtrvGetFirst goes to the first record of the file based on the key
  5638.     number that you pass and reads the record into DataVar. This allows you
  5639.     to access that database in the sorted order of the key. DataVar is a
  5640.     MarxMenu variable and the data read creates an array of the fields
  5641.     stored on disk.
  5642.     
  5643.      Example:
  5644.        Var Fields, Handle, DataVar
  5645.        ReadAscTextFile('FIELDS.TXT',Fields)
  5646.        Handle = BtrvOpen('BBSUSER.BTD',Fields)
  5647.     
  5648.        BtrvGetFirst(DataVar,1,Handle)
  5649.        while BrtvResult = 0
  5650.           loop DataVar
  5651.              Write DataVar[LoopIndex] ' '
  5652.           endloop
  5653.           Writeln
  5654.           BtrvGetNext(DataVar,1,Handle)
  5655.        EndWhile
  5656.     
  5657.     This example dumps the contents of a file to the screen.
  5658.     
  5659.      Result Codes:
  5660.        6 - Invalid Key Number
  5661.     
  5662.  
  5663.     Computer Tyme * MarxMenu * Users Manual                 Page #89
  5664.     -----------------------------------------------------------------
  5665.     
  5666.     See Also: BtrvGetLast BtrvGetNext BtrvGetPrev
  5667.     
  5668.     Category: Btrieve
  5669.     
  5670.     
  5671.      BtrvGetGreater (DataVar,Value,Key,Handle)
  5672.     
  5673.     BtrvGetGreater goes to the next larger record of the file based on the
  5674.     key number that you pass and reads the record greater than Value into
  5675.     DataVar. The type of Value passed has to match the type of data for
  5676.     which the key is defined. If the key is a string then Value is a string.
  5677.     If BtrvResult is zero, the data was found. If BtrvGetPrev is called
  5678.     after this, the next sequential record based on the key is read.
  5679.     
  5680.      Example:
  5681.        BtrvGetLess(DataVar,'MARC PERKEL',1,Handle)
  5682.     
  5683.      Result Codes:
  5684.        6 - Invalid Key Number
  5685.     
  5686.     See Also: BtrvGetEqual BtrvGetLess BtrvGetLessOrEqu
  5687.     See Also: BtrvGetGreaterOrEqu
  5688.     
  5689.     Category: Btrieve
  5690.     
  5691.     
  5692.      BtrvGetGreaterOrEqu (DataVar,Value,Key,Handle)
  5693.     
  5694.     BtrvGetGreaterOrEqu goes to the next larger or equal record of the file
  5695.     based on the key number that you pass and reads the record greater than
  5696.     or equal to Value into DataVar. The type of Value passed has to match
  5697.     the type of data for which the key is defined. If the key is a string
  5698.     then Value is a string. If BtrvResult is zero, the data was found. If
  5699.     BtrvGetPrev is called after this, the next sequential record based on
  5700.     the key is read.
  5701.     
  5702.      Example:
  5703.        BtrvGetLessOrEqu(DataVar,'MARC PERKEL',1,Handle)
  5704.     
  5705.      Result Codes:
  5706.        6 - Invalid Key Number
  5707.     
  5708.     See Also: BtrvGetEqual BtrvGetLess BtrvGetLessOrEqu BtrvGetGreater
  5709.     
  5710.     Category: Btrieve
  5711.     
  5712.  
  5713.     Computer Tyme * MarxMenu * Users Manual                 Page #90
  5714.     -----------------------------------------------------------------
  5715.     
  5716.      BtrvGetLast (DataVar,Key,Handle)
  5717.     
  5718.     BtrvGetLast goes to the last record of the file based on the key number
  5719.     that you pass and reads the record into DataVar. This allows you to
  5720.     access that database in the sorted order of the key. DataVar is a
  5721.     MarxMenu variable and the data read creates an array of the fields
  5722.     stored on disk.
  5723.     
  5724.      Example:
  5725.        Var Fields, Handle, DataVar
  5726.        ReadAscTextFile('FIELDS.TXT',Fields)
  5727.        Handle = BtrvOpen('BBSUSER.BTD',Fields)
  5728.     
  5729.        BtrvGetLast(DataVar,1,Handle)
  5730.        while BrtvResult = 0
  5731.           loop DataVar
  5732.              Write DataVar[LoopIndex] ' '
  5733.           endloop
  5734.           Writeln
  5735.           BtrvGetPrev(DataVar,1,Handle)
  5736.        EndWhile
  5737.     
  5738.     This example dumps the contents of a file to the screen backwards.
  5739.     
  5740.      Result Codes:
  5741.        6 - Invalid Key Number
  5742.     
  5743.     See Also: BtrvGetFirst BtrvGetNext BtrvGetPrev
  5744.     
  5745.     Category: Btrieve
  5746.     
  5747.     
  5748.      BtrvGetLess (DataVar,Value,Key,Handle)
  5749.     
  5750.     BtrvGetLess goes to the next smaller record of the file based on the key
  5751.     number that you pass and reads the record less than Value into DataVar.
  5752.     The type of Value passed has to match the type of data for which the key
  5753.     is defined. If the key is a string then Value is a string. If BtrvResult
  5754.     is zero, the data was found. If BtrvGetPrev is called after this, the
  5755.     next sequential record based on the key is read.
  5756.     
  5757.      Example:
  5758.        BtrvGetLess(DataVar,'MARC PERKEL',1,Handle)
  5759.     
  5760.      Result Codes:
  5761.        6 - Invalid Key Number
  5762.     
  5763.     See Also: BtrvGetEqual BtrvGetLessOrEqu BtrvGetGreater
  5764.     See Also: BtrvGetGreaterOrEqu
  5765.     
  5766.  
  5767.     Computer Tyme * MarxMenu * Users Manual                 Page #91
  5768.     -----------------------------------------------------------------
  5769.     
  5770.     Category: Btrieve
  5771.     
  5772.     
  5773.      BtrvGetLessOrEqu (DataVar,Value,Key,Handle)
  5774.     
  5775.     BtrvGetLessOrEqu goes to the next smaller or equal record of the file
  5776.     based on the key number that you pass and reads the record less than or
  5777.     equal to Value into DataVar. The type of Value passed has to match the
  5778.     type of data for which the key is defined. If the key is a string then
  5779.     Value is a string. If BtrvResult is zero, the data was found. If
  5780.     BtrvGetPrev is called after this, the next sequential record based on
  5781.     the key is read.
  5782.     
  5783.      Example:
  5784.        BtrvGetLessOrEqu(DataVar,'MARC PERKEL',1,Handle)
  5785.     
  5786.      Result Codes:
  5787.        6 - Invalid Key Number
  5788.     
  5789.     See Also: BtrvGetEqual BtrvGetLess BtrvGetGreater BtrvGetGreaterOrEqu
  5790.     
  5791.     Category: Btrieve
  5792.     
  5793.     
  5794.      BtrvGetNext (DataVar,Key,Handle)
  5795.     
  5796.     BtrvGetNext goes to the next record of the file based on the key number
  5797.     that you pass and reads the record into DataVar. This allows you to
  5798.     access that database in the sorted order of the key. DataVar is a
  5799.     MarxMenu variable and the data read creates an array of the fields
  5800.     stored on disk.
  5801.     
  5802.      Result Codes:
  5803.        6 - Invalid Key Number
  5804.        7 - Different Key Number
  5805.        9 - End of File
  5806.     
  5807.     See Also: BtrvGetFirst BtrvGetLast BtrvGetPrev
  5808.     
  5809.     Category: Btrieve
  5810.     
  5811.     
  5812.      BtrvGetPrev (DataVar,Key,Handle)
  5813.     
  5814.     BtrvGetPrev goes to the previous record of the file based on the key
  5815.     number that you pass and reads the record into DataVar. This allows you
  5816.     to access that database in the sorted order of the key. DataVar is a
  5817.     MarxMenu variable and the data read creates an array of the fields
  5818.     stored on disk.
  5819.     
  5820.      Result Codes:
  5821.        6 - Invalid Key Number
  5822.        7 - Different Key Number
  5823.        9 - End of File
  5824.     
  5825.  
  5826.     Computer Tyme * MarxMenu * Users Manual                 Page #92
  5827.     -----------------------------------------------------------------
  5828.     
  5829.     See Also: BtrvGetFirst BtrvGetLast BtrvGetNext
  5830.     
  5831.     Category: Btrieve
  5832.     
  5833.     
  5834.      BtrvIndexes (Handle) : Number
  5835.     
  5836.     BtrvIndexes returns the number of key fields in a file. You must open
  5837.     the file and get a file handle first.
  5838.     
  5839.      Example:
  5840.        Writeln BtrvIndexes (Handle)
  5841.     
  5842.     Category: Btrieve
  5843.     
  5844.     
  5845.      BtrvInsert (DataVar,Handle)
  5846.     
  5847.     BtrvInsert adds a new record to the data file. The data is passed in the
  5848.     array DataVar. If key fields are used, or if you are using traditional
  5849.     style fixed-length fields, then the first elements of the array must
  5850.     match the data structure of the file you defined with BtrvCreate. All
  5851.     elements of the array after these fields are written to the
  5852.     variable-length part of the file. The variable-length part can contain
  5853.     MarxMenu multi-dimensional data structures.
  5854.     
  5855.      Example:
  5856.        BtrvInsert(DataVar,Handle)
  5857.     
  5858.      Result Codes:
  5859.         5 - Duplicate Key
  5860.        18 - Disk Full
  5861.     
  5862.     See Also: BtrvDelete
  5863.     
  5864.     Category: Btrieve
  5865.     
  5866.     
  5867.      BtrvOpen (FileName,Fields) : Handle
  5868.     
  5869.     BtrvOpen is used to open the file for access. Since Btrieve files do not
  5870.     store a list of fields you have to pass the same data structure you did
  5871.     when you created the file. If successful, BtrvOpen will return a file
  5872.     handle. This handle will be referenced by all other commands that access
  5873.     this file.
  5874.     
  5875.      Example:
  5876.        Var Fields, Handle
  5877.        ReadAscTextFile('FIELDS.TXT',Fields)
  5878.        Handle = BtrvOpen('BBSUSER.BTD',Fields)
  5879.        If BtrvResult<>0
  5880.             WriteLn "Btrieve Error: " BtrvResult " While Opening File."
  5881.        EndIf
  5882.     
  5883.  
  5884.     Computer Tyme * MarxMenu * Users Manual                 Page #93
  5885.     -----------------------------------------------------------------
  5886.     
  5887.      Result Codes:
  5888.        46 - Access Denied
  5889.        85 - File Locked
  5890.        86 - File Table Full
  5891.        87 - Handle Table Full
  5892.     
  5893.     See Also: BtrvClose BtrvCreate
  5894.     
  5895.     Category: Btrieve
  5896.     
  5897.     
  5898.      BtrvPageSize (Handle) : Number
  5899.     
  5900.     BtrvPageSize returns the page size of in a file. You must open the file
  5901.     and get a file handle first. The page size is the amount of disk space
  5902.     allocated when a file is extended.
  5903.     
  5904.      Example:
  5905.        Writeln BtrvPageSize (Handle)
  5906.     
  5907.     Category: Btrieve
  5908.     
  5909.     
  5910.      BtrvRecLen (Handle) : Number
  5911.     
  5912.     BtrvRecLen returns the size of the fixed length part of in a file. You
  5913.     must open the file and get a file handle first.
  5914.     
  5915.      Example:
  5916.        Writeln BtrvRecLen (Handle)
  5917.     
  5918.     Category: Btrieve
  5919.     
  5920.     
  5921.      BtrvRecords (Handle) : Number
  5922.     
  5923.     BtrvRecords returns the number of records in a file. You must open the
  5924.     file and get a file handle first.
  5925.     
  5926.      Example:
  5927.        Var Fields, Handle
  5928.        ReadAscTextFile('FIELDS.TXT',Fields)
  5929.        Handle = BtrvOpen('CLIENTS.BTR',Fields)
  5930.        Writeln BtrvRecords (Handle)           ;# of Records in CLIENTS.BTR
  5931.     
  5932.     Category: Btrieve
  5933.     
  5934.  
  5935.     Computer Tyme * MarxMenu * Users Manual                 Page #94
  5936.     -----------------------------------------------------------------
  5937.     
  5938.      BtrvReset
  5939.     
  5940.     BtrvReset is used to clear all transactions and close all files. It's a
  5941.     good idea to start your programs with this command to clear any locks
  5942.     that might be left out there from other programs that might have
  5943.     aborted.
  5944.     
  5945.      Example:
  5946.        var fields
  5947.     
  5948.        btrvreset                           ;Start with a clean slate!
  5949.     
  5950.        readasctextfile('db.txt',fields)    ;Get field Definitions
  5951.        btrvcreate('phone.mb',fields)       ;Create Btrieve File
  5952.        writeln btrvresult                  ;Check for ok
  5953.     
  5954.     Category: Btrieve
  5955.     
  5956.     
  5957.      BtrvResult : Number
  5958.     
  5959.     BtrvResult returns the result code from the last Btrieve call. A zero is
  5960.     considered a success.
  5961.     
  5962.      Example:
  5963.        Procedure BtrieveError
  5964.          If BtrvResult <> 0
  5965.            Writeln 'Btrieve Error #',BtrvResult
  5966.            Writeln 'Exiting Program...'
  5967.            ExitMenu
  5968.          EndIf
  5969.        EndProc
  5970.     
  5971.      Result Codes:
  5972.         4 - Key Value not Found
  5973.         5 - Duplicate Key Value
  5974.         6 - Invalid Key Number
  5975.         7 - Different Key Number
  5976.         9 - End of File
  5977.        10 - Modifiable Key Value Error
  5978.        11 - Invalid File Name
  5979.        12 - File not Found
  5980.        18 - Disk Full
  5981.        20 - Btrieve not Loaded
  5982.        28 - Record too Long
  5983.        29 - Key too Long
  5984.        30 - Not a Btrieve File
  5985.        41 - Operation not Allowed
  5986.        46 - File Access Denied
  5987.        78 - Deadlock Detected
  5988.        86 - File Table Full
  5989.        87 - Handle Table Full
  5990.        92 - Transaction Table Full
  5991.     
  5992.  
  5993.     Computer Tyme * MarxMenu * Users Manual                 Page #95
  5994.     -----------------------------------------------------------------
  5995.     
  5996.     For other codes use BtrvResultMessage to display the error.
  5997.     
  5998.     See Also: BtrvResultMessage
  5999.     
  6000.     Category: Btrieve
  6001.     
  6002.     
  6003.      BtrvResultMessage : String
  6004.     
  6005.     BtrvResultMessage automatically returns a string containing an error
  6006.     message based on the value BtrvResult.
  6007.     
  6008.      Example:
  6009.        Writeln BtrvResultMessage          ;write Btreive Error Message
  6010.     
  6011.     See Also: BtrvResult
  6012.     
  6013.     Category: Btrieve
  6014.     
  6015.     
  6016.      BtrvSetOwner (Owner,Mode,Handle)
  6017.     
  6018.     BtrvSetOwner is really a set password function. It restricts access to
  6019.     the file unless you pass the owners name by setting BtrvOwner. The mode
  6020.     controls access and data encryption as follows:
  6021.     
  6022.        0 : No Btreive access - File Not Encrypted
  6023.        1 : Read Only access  - File Not Encrypted
  6024.        2 : No Btreive access - File Encrypted
  6025.        3 : Read Only access  - File Encrypted
  6026.     
  6027.      Example:
  6028.        BtrvSetOwner('NERD',3,Handle)
  6029.     
  6030.      Result Codes:
  6031.        50 - Owner Already Set
  6032.     
  6033.     See Also: BtrvClearOwner
  6034.     
  6035.     Category: Btrieve
  6036.     
  6037.     
  6038.      BtrvStepFirst (DataVar,Handle)
  6039.     
  6040.     BtrvStepFirst goes to the first physical record of the file and reads
  6041.     the record into DataVar. DataVar is a MarxMenu variable and the data
  6042.     read creates an array of the fields stored on disk.
  6043.     
  6044.      Example:
  6045.        Var Fields, Handle, DataVar
  6046.        ReadAscTextFile('FIELDS.TXT',Fields)
  6047.        Handle = BtrvOpen('BBSUSER.BTD',Fields)
  6048.     
  6049.  
  6050.     Computer Tyme * MarxMenu * Users Manual                 Page #96
  6051.     -----------------------------------------------------------------
  6052.     
  6053.        BtrvStepFirst(DataVar,Handle)
  6054.        while BrtvResult = 0
  6055.           loop DataVar
  6056.              Write DataVar[LoopIndex] ' '
  6057.           endloop
  6058.           Writeln
  6059.           BtrvStepNext(DataVar,Handle)
  6060.        EndWhile
  6061.     
  6062.     This example dumps the contents of a file to the screen.
  6063.     
  6064.     See Also: BtrvStepLast BtrvStepNext BtrvStepPrev
  6065.     
  6066.     Category: Btrieve
  6067.     
  6068.     
  6069.      BtrvStepLast (DataVar,Handle)
  6070.     
  6071.     BtrvStepLast goes to the last physical record of the file and reads the
  6072.     record into DataVar. DataVar is a MarxMenu variable and the data read
  6073.     creates an array of the fields stored on disk.
  6074.     
  6075.      Example:
  6076.        Var Fields, Handle, DataVar
  6077.        ReadAscTextFile('FIELDS.TXT',Fields)
  6078.        Handle = BtrvOpen('BBSUSER.BTD',Fields)
  6079.     
  6080.        BtrvStepLast(DataVar,Handle)
  6081.        while BrtvResult = 0
  6082.           loop DataVar
  6083.              Write DataVar[LoopIndex] ' '
  6084.           endloop
  6085.           Writeln
  6086.           BtrvStepPrev(DataVar,Handle)
  6087.        EndWhile
  6088.     
  6089.     This example dumps the contents of a file to the screen backwards.
  6090.     
  6091.     See Also: BtrvStepFirst BtrvStepNext BtrvStepPrev
  6092.     
  6093.     Category: Btrieve
  6094.     
  6095.     
  6096.      BtrvStepNext (DataVar,Handle)
  6097.     
  6098.     BtrvStepNext goes to the next physical record of the file and reads the
  6099.     record into DataVar. DataVar is a MarxMenu variable and the data read
  6100.     creates an array of the fields stored on disk.  This is normally used to
  6101.     work through a file when the search field in not a key field.
  6102.     
  6103.  
  6104.     Computer Tyme * MarxMenu * Users Manual                 Page #97
  6105.     -----------------------------------------------------------------
  6106.     
  6107.      Example:
  6108.        var fields,temp,handle,vararray
  6109.        readasctextfile('data.txt',fields)
  6110.        handle=btrvopen('phone.mxb',fields)
  6111.        while btrvresult=0
  6112.           btrvstepnext(vararray,handle)       ;<- Step to next file record
  6113.           writeln vararray[1] " " vararray[2]
  6114.        endwhile
  6115.        btrvclose(handle)
  6116.     
  6117.      Result Codes:
  6118.         9 - End of File
  6119.     
  6120.     See Also: BtrvStepFirst BtrvStepLast BtrvStepPrev
  6121.     
  6122.     Category: Btrieve
  6123.     
  6124.     
  6125.      BtrvStepPrev (DataVar,Handle)
  6126.     
  6127.     BtrvStepPrev goes to the previous physical record of the file and reads
  6128.     the record into the variable DataVar. DataVar is a MarxMenu variable and
  6129.     the data read creates an array of the fields stored on disk.
  6130.     
  6131.      Result Codes:
  6132.         9 - End of File
  6133.     
  6134.     See Also: BtrvStepFirst BtrvStepLast BtrvStepNext
  6135.     
  6136.     Category: Btrieve
  6137.     
  6138.     
  6139.      BtrvStop
  6140.     
  6141.     BtrvStop is used to unload BTRIEVE.EXE or BREQUEST.EXE from memory. You
  6142.     can load the requestor before running MarxMenu as a database and unload
  6143.     the requestor when you are finished. This reclaims the memory the
  6144.     requestor was using.
  6145.     
  6146.     Category: Btrieve
  6147.     
  6148.     
  6149.      BtrvUnusedPages (Handle) : Number
  6150.     
  6151.     BtrvUnusedPages returns the number of unused pages in a file. You must
  6152.     open the file and get a file handle first. Unused pages are created when
  6153.     data is deleted from a file.
  6154.     
  6155.      Example:
  6156.        Writeln BtrvPageSize (Handle)
  6157.     
  6158.  
  6159.     Computer Tyme * MarxMenu * Users Manual                 Page #98
  6160.     -----------------------------------------------------------------
  6161.     
  6162.     Category: Btrieve
  6163.     
  6164.     
  6165.      BtrvUpdate (DataVar,Handle)
  6166.     
  6167.     BtrvUpdate changes a record in the data file at the last location
  6168.     accessed with any command that reads a record. The data is passed in the
  6169.     array DataVar. If key fields are used, or if you are using traditional
  6170.     style fixed-length fields, then the first elements of the array must
  6171.     match the data structure of the file you defined with BtrvCreate. All
  6172.     elements of the array after these fields are written to the
  6173.     variable-length part of the file. The variable length part can contain
  6174.     MarxMenu multi-dimensional data structures.
  6175.     
  6176.      Example:
  6177.        BtrvGetEqual(DataVar,'MARC PERKEL',1,Handle)
  6178.        if BtrvResult = 0
  6179.           DataVar[3] = 37
  6180.           BtrvUpdate(DataVar,Handle)
  6181.        endif
  6182.     
  6183.      Result Codes:
  6184.         5 - Duplicate Key
  6185.         7 - Different Key
  6186.        10 - Modifiable Key Value Error
  6187.        80 - Conflict
  6188.     
  6189.     Category: Btrieve
  6190.     
  6191.     
  6192.      BtrvVersion : Number
  6193.     
  6194.     BtrvVersion returns a number representing the version number of Btrieve
  6195.     that you are using. A zero indicates that Btrieve is not installed. If
  6196.     Btrieve is installed then it returns 100 times the version number plus
  6197.     the minor version number. Version 6.0 becomes 600. Version 5.10 becomes
  6198.     510.
  6199.     
  6200.      Example:
  6201.        if BtrieveVersion = 0
  6202.           Writeln "Sorry, but Btrieve must be loaded first!"
  6203.        else
  6204.           Writeln "You are running Btrieve Version #: " BtrvVersion
  6205.        endif
  6206.     
  6207.     Category: Btrieve
  6208.     
  6209.  
  6210.     Computer Tyme * MarxMenu * Users Manual                 Page #99
  6211.     -----------------------------------------------------------------
  6212.     
  6213.      BuildPath (Array)
  6214.     
  6215.     The command BuildPath will build a PATH environment variable based upon
  6216.     the contents of a specified Array variable. The first element in the
  6217.     array becomes the first search path.
  6218.     
  6219.      Example:
  6220.        Var PathList
  6221.        Pathlist[1] = 'F:\PUBLIC'
  6222.        Pathlist[2] = 'F:\DOS'
  6223.        Pathlist[3] = 'F:\UTIL'
  6224.        BuildPath (PathList)  ;sets PATH=F:\PUBLIC;F:\DOS;F:\UTIL
  6225.     
  6226.     See Also: SplitPath FixPath
  6227.     
  6228.     Category: String Array Environment
  6229.     
  6230.     
  6231.      CancelListEntry (Local Name)
  6232.     
  6233.     This will take an entry out of the network redirection list for either a
  6234.     print redirection or disk drive redirection.
  6235.     
  6236.      Example:
  6237.        CancelListEntry 'P:'    ;cancels network drive mapping
  6238.        CancelListEntry 'LPT1'  ;cancels printer redirection
  6239.     
  6240.     See Also: AssignList MakeListEntry
  6241.     
  6242.     Category: Novell MSNet Vines
  6243.     
  6244.     
  6245.      CapFirstChar (On/Off)
  6246.     
  6247.     When CapFirstChar is set to On the first character and all characters
  6248.     following a space are automatically capitalized during a Readln command.
  6249.     
  6250.     See Also: Readln
  6251.     
  6252.     Category: String
  6253.     
  6254.     
  6255.      CapsColor (Foreground,Background)
  6256.     
  6257.     Setting CapsColor allows capital letters and numbers to be a different
  6258.     color than the rest of the text. This is used with the UseArrows command
  6259.     to show which character is the one that selects the options in the
  6260.     window. CapsColor is reset after any TextColor command, so be sure to
  6261.     use CapsColor AFTER TextColor commands.
  6262.     
  6263.     For this option the numbers 0 - 9 and some punctuation characters are
  6264.     considered capitals.
  6265.     
  6266.  
  6267.     Computer Tyme * MarxMenu * Users Manual                 Page #100
  6268.     -----------------------------------------------------------------
  6269.     
  6270.      Example:
  6271.        CapsColor White Blue
  6272.     
  6273.     See Also: DrawBox
  6274.     
  6275.     Category: Color
  6276.     
  6277.     
  6278.      CapsLock : Boolean
  6279.     
  6280.     This variable can be used to read the status of the KeyBoard Caps Lock
  6281.     indicator and to set the current caps lock mode.
  6282.     
  6283.      Example:
  6284.        if CapsLock then Write 'CapsLock is On'
  6285.     
  6286.        CapsLock On  ;Turns CapsLock On
  6287.        CapsLock Off ;Turns CapsLock Off
  6288.     
  6289.        CapsLock ; (by itself) turns CapsLock On.
  6290.     
  6291.        if CapsLock
  6292.           ;do something
  6293.        endif
  6294.     
  6295.     See Also: ScrollLock NumLock
  6296.     
  6297.     Category: System
  6298.     
  6299.     
  6300.      Chain (MenuName)
  6301.     
  6302.     This command will load a new menu. Unlike Jump, MarxMenu stays in
  6303.     memory. The screen is not cleared. If the new menu has exactly the same
  6304.     global variables, the contents of all global variables is retained.
  6305.     Chain allows for a very quick transfer from one menu to another.
  6306.     
  6307.      Example:
  6308.        OnKey 'P'
  6309.          |Chain ('USER')  ;Chains to USER.MNU
  6310.     
  6311.     Category: Execution
  6312.     
  6313.     
  6314.      Char (Number) : String
  6315.     
  6316.     Converts a number into a one character string.
  6317.     
  6318.      Example:
  6319.        Write (Char(65)) ;This will display 'A'
  6320.     
  6321.  
  6322.     Computer Tyme * MarxMenu * Users Manual                 Page #101
  6323.     -----------------------------------------------------------------
  6324.     
  6325.     See Also: Ord
  6326.     
  6327.     Category: String
  6328.     
  6329.     
  6330.      ChDir (String)
  6331.     
  6332.     Changes directories. The variable FileResult can be tested to see if it
  6333.     was successful. ChDir can also be used to change drives.
  6334.     
  6335.      Example:
  6336.        ChDir( 'C:\HOME\MARXMENU' )
  6337.        ChDir( 'B:' )                ; Will make drive B: the current drive
  6338.     
  6339.     Category: Directory
  6340.     
  6341.     
  6342.      CleanFileName (String) : String
  6343.     
  6344.     Returns the full path name or directory name of a string. It also
  6345.     removes occurrences of a '\\' in the string if they aren't at the
  6346.     beginning of the string.
  6347.     
  6348.      Thus the command:
  6349.         CleanFileName('a:\\main.mnu') returns 'A:\MAIN.MNU'.
  6350.     
  6351.     CleanFileName also removes extra ending '\' and capitalizes the path.
  6352.     
  6353.     See Also: TrueName
  6354.     
  6355.     Category: String
  6356.     
  6357.     
  6358.      ClearKbdBuffer
  6359.     
  6360.     ClearKbdBuffer clears the characters out of the keyboard buffer.
  6361.     
  6362.     Category: Keyboard
  6363.     
  6364.     
  6365.      ClearKeyEvents
  6366.     
  6367.     ClearKeyEvents wipes out all key events for the current window. Since
  6368.     child window inherit the key events of it's parent window, this command
  6369.     allows you to wipe out these events when you want to open a new window
  6370.     for another purpose where the existing key events wouldn't be
  6371.     appropiate. This command only affects the current window.
  6372.     
  6373.      Example:
  6374.        DrawBox 2 2 78 20
  6375.        ClearKeyEvents
  6376.        ViewTextFile 'HELP.TXT'
  6377.     
  6378.  
  6379.     Computer Tyme * MarxMenu * Users Manual                 Page #102
  6380.     -----------------------------------------------------------------
  6381.     
  6382.     See Also: KeyEvent
  6383.     
  6384.     Category: Event
  6385.     
  6386.     
  6387.      ClearLine (Char)
  6388.     
  6389.     Clears the current line in the current window. The optional parameter is
  6390.     for the decimal number of the IBM graphics character. If (Char) is
  6391.     present, the line will be filled with the character.
  6392.     
  6393.      Examples:
  6394.         ClearLine       ;Clears screen with blanks
  6395.         ClearLine 205   ;Clears screen with char 205
  6396.     
  6397.     Category: Display Ansi
  6398.     
  6399.     
  6400.      ClearScreen (Char)
  6401.     
  6402.     Clears the screen. The optional parameter is the decimal number
  6403.     equivalent for an IBM graphics character. If (Char) is present, the
  6404.     screen will be filled with (Char).
  6405.     
  6406.      Examples:
  6407.         ClearScreen       ;Clears screen with blanks
  6408.         ClearScreen 177   ;Clears screen with char 177
  6409.     
  6410.     Category: Display Ansi
  6411.     
  6412.     
  6413.      ClearScreenFirst (On/Off)
  6414.     
  6415.     Used in conjunction with Execute. If on, will clear the screen before
  6416.     running the program.
  6417.     
  6418.      Example:
  6419.        OnKey 'D'
  6420.          |ClearScreenFirst On
  6421.          |Execute 'C:\DM.COM'
  6422.     
  6423.     The default is ON.
  6424.     
  6425.     See Also: Execute
  6426.     
  6427.     Category: Execution
  6428.     
  6429.  
  6430.     Computer Tyme * MarxMenu * Users Manual                 Page #103
  6431.     -----------------------------------------------------------------
  6432.     
  6433.      ClearScreenOnExit (On/Off)
  6434.     
  6435.     Controls whether or not the screen is cleared on menu exit. Default on.
  6436.     
  6437.     See Also: Execute
  6438.     
  6439.     Category: Display
  6440.     
  6441.     
  6442.      ClockColor (Foreground,Background)
  6443.     
  6444.     Sets colors for the on screen clock.
  6445.     
  6446.      Example:
  6447.        ClockColor Yellow Brown
  6448.     
  6449.     Category: Color
  6450.     
  6451.     
  6452.      ClockMode
  6453.     
  6454.     ClockMode is a variable whose bits control the format of the on screen
  6455.     clock when it is used.
  6456.     
  6457.      ClockMode Bits:
  6458.      ---------------
  6459.      0 24 hour mode
  6460.      1 AmPm On
  6461.      2 Show Seconds
  6462.      3 UpperCase
  6463.      4 3 char month
  6464.      5 3 char Day of Week
  6465.      6 Show Day of Week
  6466.      7 Dash = 0 Slash = 1 MM-DD-YY or MM/DD/YY
  6467.      8 Long Date
  6468.     
  6469.      Bit 0 on sets hours display to 24 hour mode.
  6470.      Bit 1 turns on the Am/Pm display.
  6471.      Bit 2 on controls if time is shown as HH:MM:SS or just HH:MM.
  6472.      Bit 3 shows date in only upper case.
  6473.      Bit 4 on shows month in 3 characters.
  6474.      Bit 5 shows Day of week as 3 characters.
  6475.      Bit 6 controls if Day of week is displayed.
  6476.      Bit 7 controls if date is shown as MM-DD-YY or MM/DD/YY.
  6477.      Bit 8 shows date in text. (October 3, 1990).
  6478.     
  6479.     The default ClockMode is 326.
  6480.     
  6481.      Example:
  6482.        ClockMode 120
  6483.        ClockColor White Red
  6484.        ClockPos 1,1
  6485.     
  6486.  
  6487.     Computer Tyme * MarxMenu * Users Manual                 Page #104
  6488.     -----------------------------------------------------------------
  6489.     
  6490.     Category: Display
  6491.     
  6492.     
  6493.      ClockPos (Column,Row)
  6494.     
  6495.     Puts a clock on the screen at location (column,row). The command
  6496.     ClockPos 0 0 turns the clock off.
  6497.     
  6498.      Example:
  6499.        ClockPos 7 2
  6500.     
  6501.     Category: Display
  6502.     
  6503.     
  6504.      ClosePrinter
  6505.     
  6506.     In MarxMenu the printer is just another text file. Closing the printer
  6507.     is not required for ordinary printing. If you are changing printers you
  6508.     need to run ClosePrinter before changing the printer name. The printer
  6509.     is automatically opened by MarxMenu anytime you print anything.
  6510.     
  6511.     If you are running Windows or DesqView, closing the printer allows other
  6512.     programs to access the printer. So if you are running under any
  6513.     multitasking shell, be sure to close the printer when you are done with
  6514.     it.
  6515.     
  6516.     If you are using a network like Novell, ClosePrinter will end the print
  6517.     job and send it to the print queue. This avoids the need to wait for
  6518.     print capture timeouts to take effect.
  6519.     
  6520.     Closing the printer is good programming practice and will help you stay
  6521.     out of trouble. It's like what your mother taught you. "When you're done
  6522.     with something, put it away."
  6523.     
  6524.     See Also: OpenPrinter PrinterName
  6525.     
  6526.     Category: Printer
  6527.     
  6528.     
  6529.      ClusterSize (Drive) : Number
  6530.     
  6531.     Returns cluster size in bytes.
  6532.     
  6533.      Example:
  6534.        Writeln (ClusterSize 'C')
  6535.     
  6536.     ClusterSize only looks at the first character of the string for the
  6537.     drive letter.
  6538.     
  6539.      Example:
  6540.        ClusterSize (Path)  ;returns clustersize of current drive.
  6541.     
  6542.  
  6543.     Computer Tyme * MarxMenu * Users Manual                 Page #105
  6544.     -----------------------------------------------------------------
  6545.     
  6546.     Category: System
  6547.     
  6548.     
  6549.      CmdLine : String
  6550.     
  6551.     A System string variable that returns the rest of the command line after
  6552.     the menu name. If you execute MARXMENU GOFILE *.BAT the CmdLine command
  6553.     would return "*.BAT".
  6554.     
  6555.      Example:
  6556.        writeln cmdline  ;returns the command line after the menu name.
  6557.     
  6558.     Category: String
  6559.     
  6560.     
  6561.      CMOS (Number) : Number
  6562.     
  6563.     CMOS allows reads from and write to the CMOS RAM on the clock chip.
  6564.     
  6565.      Example:
  6566.        Writeln CMOS(16)
  6567.        CMOS(16) = $42
  6568.     
  6569.     Category: System
  6570.     
  6571.     
  6572.      ColdBoot
  6573.     
  6574.     Causes a cold reboot of the computer. This differs from a warm boot in
  6575.     that it is a complete system reset that forces the computer to go
  6576.     through the (POST, Power On Self Test) process. A warm boot does not
  6577.     force a complete reset.
  6578.     
  6579.     See Also: Reboot
  6580.     
  6581.     Category: Execution
  6582.     
  6583.     
  6584.      ColorScreen : Boolean
  6585.     
  6586.     Returns true if screen is a color screen and in a color mode.  Note:
  6587.     Running MODE BW80 will cause ColorScreen to return false.
  6588.     
  6589.      Example:
  6590.        If ColorScreen
  6591.            ;Color
  6592.          TextColor( White, Blue )
  6593.        Else
  6594.            ;Monochrome
  6595.          TextColor( White, Black )
  6596.        EndIf
  6597.     
  6598.  
  6599.     Computer Tyme * MarxMenu * Users Manual                 Page #106
  6600.     -----------------------------------------------------------------
  6601.     
  6602.     Category: Video
  6603.     
  6604.     
  6605.      ComBaud : Number
  6606.     
  6607.     Reads or sets the baud rate of the serial port indicated by the ComPort
  6608.     command. Range from 110 to 115,000 baud.
  6609.     
  6610.      Example:
  6611.        ComBaud = 9600
  6612.        Writeln ComBaud
  6613.     
  6614.     See Also: ComDataBits ComStopBits ComParity
  6615.     
  6616.     Category: Modem
  6617.     
  6618.     
  6619.      ComBlockErrors : Number
  6620.     
  6621.     During an upload or download ComBlockErrors returns the number of
  6622.     errors that occurred during the current block.
  6623.     
  6624.     See Also: ComXmitStatusProgram
  6625.     
  6626.     Category: Modem
  6627.     
  6628.     
  6629.      ComBlockNumber : Number
  6630.     
  6631.     During an upload or download ComBlockNumber returns the current block
  6632.     number.
  6633.     
  6634.     See Also: ComXmitStatusProgram
  6635.     
  6636.     Category: Modem
  6637.     
  6638.     
  6639.      ComBlockSize : Number
  6640.     
  6641.     During an upload or download ComBlockSize returns the number of bytes in
  6642.     the block that's being transferred.
  6643.     
  6644.     See Also: ComXmitStatusProgram
  6645.     
  6646.     Category: Modem
  6647.     
  6648.     
  6649.      ComBreakReceived : Boolean
  6650.     
  6651.     Returns True if a break signal has been received at the serial port.
  6652.     
  6653.      Example:
  6654.         if ComBreakReceived then Writeln 'Break Received'
  6655.     
  6656.  
  6657.     Computer Tyme * MarxMenu * Users Manual                 Page #107
  6658.     -----------------------------------------------------------------
  6659.     
  6660.     See Also: ComSendBreak
  6661.     
  6662.     Category: Modem
  6663.     
  6664.     
  6665.      ComBytesRemaining : Number
  6666.     
  6667.     During an upload or download ComBytesRemaining returns the number of
  6668.     bytes that is yet to be transferred.
  6669.     
  6670.     See Also: ComXmitStatusProgram
  6671.     
  6672.     Category: Modem
  6673.     
  6674.     
  6675.      ComBytesTransferred : Number
  6676.     
  6677.     During an upload or download ComBytesTransferred returns the number of
  6678.     bytes that has been transferred.
  6679.     
  6680.     See Also: ComXmitStatusProgram
  6681.     
  6682.     Category: Modem
  6683.     
  6684.     
  6685.      ComCD : Boolean
  6686.     
  6687.     Returns the status of the carrier detect line on serial port indicated
  6688.     by the ComPort Command.
  6689.     
  6690.      Example:
  6691.        if ComCD=True then Writeln 'Carrier Detected'
  6692.        if ComCD then Writeln 'Carrier Detected'
  6693.     
  6694.     Category: Modem
  6695.     
  6696.     
  6697.      ComCDAbort : Boolean
  6698.     
  6699.     ComCDAbort is set to True if ComWatchCD is on and the carrier is lost.
  6700.     This is used as a signal to indicate that the modem has lost connection
  6701.     and the host program should reset and prepare for the next call.
  6702.     
  6703.     See Also: ComWatchCD
  6704.     
  6705.     Category: Modem
  6706.     
  6707.  
  6708.     Computer Tyme * MarxMenu * Users Manual                 Page #108
  6709.     -----------------------------------------------------------------
  6710.     
  6711.      ComCharReady : Boolean
  6712.     
  6713.     Tests to see if a character has been received in the input buffer.
  6714.     
  6715.      Example:
  6716.        if ComCharReady then Ch = ComReadChar
  6717.     
  6718.     See Also: ComReadChar
  6719.     
  6720.     Category: Modem
  6721.     
  6722.     
  6723.      ComDataBits : Number
  6724.     
  6725.     Reads or sets the number of data bits. Range 5 - 8 bits.
  6726.     
  6727.      Example:
  6728.        ComDataBits = 8
  6729.        Writeln ComDataBits
  6730.     
  6731.     See Also: ComBaud ComStopBits ComParity
  6732.     
  6733.     Category: Modem
  6734.     
  6735.     
  6736.      ComDone
  6737.     
  6738.     Uninitializes the port. Deallocates memory used by ComInitPort and
  6739.     restores interrupt vectors.
  6740.     
  6741.     See Also: ComInitPort
  6742.     
  6743.     Category: Modem
  6744.     
  6745.     
  6746.      ComDrainSendBuffer
  6747.     
  6748.     ComDrainSendBuffer waits until all the characters in the send buffer go
  6749.     to the modem. This allows the other end to get the last of the goodbye
  6750.     message without being cut off by a hangup. With buffered modems you
  6751.     should wait a few seconds after this command before hanging up the modem
  6752.     to ensure that all the data has been transferred.
  6753.     
  6754.     Category: Modem
  6755.     
  6756.     
  6757.      ComDTR (On/Off)
  6758.     
  6759.     Turns DTR (Data Terminal Ready) On or Off. Setting DTR to Off can be
  6760.     used to hang up a modem.
  6761.     
  6762.      Example:
  6763.        ComDTR Off
  6764.     
  6765.  
  6766.     Computer Tyme * MarxMenu * Users Manual                 Page #109
  6767.     -----------------------------------------------------------------
  6768.     
  6769.     Category: Modem
  6770.     
  6771.     
  6772.      ComEchoRecChar : Boolean
  6773.     
  6774.     When ComEchoRecChar is set to true then characters received are echoed
  6775.     back to the sender. This option is useful when writing a host
  6776.     communication program. The echoed character is intelligently processed.
  6777.     
  6778.     See Also: ComReadChar
  6779.     
  6780.     Category: Modem
  6781.     
  6782.     
  6783.      ComEchoSendChar : Boolean
  6784.     
  6785.     When ComEchoSendChar is set to true then characters sent are echoed
  6786.     to the local screen. This option is useful when writing a host
  6787.     communication program. The echoed character is intelligently processed.
  6788.     When set to true, the following commands will also be processed for
  6789.     correct com port output: TextColor, GotoXY, ClearScreen, ClearLine.
  6790.     
  6791.     See Also: ComReadChar ComEchoRecChar
  6792.     
  6793.     Category: Modem
  6794.     
  6795.     
  6796.      ComEmptyRecBuffer
  6797.     
  6798.     ComEmptyRecBuffer trashes the data in the receive buffer. This allows
  6799.     you to get rid of incoming trash data.
  6800.     
  6801.     See Also: ComEmptySendBuffer
  6802.     
  6803.     Category: Modem
  6804.     
  6805.     
  6806.      ComEmptySendBuffer
  6807.     
  6808.     ComEmptySendBuffer trashes all the data in the send buffer that hasn't
  6809.     been transferred. This allows you to create a hot key effect and makes
  6810.     host programs act more responsive.
  6811.     
  6812.     See Also: ComEmptyRecBuffer
  6813.     
  6814.     Category: Modem
  6815.     
  6816.  
  6817.     Computer Tyme * MarxMenu * Users Manual                 Page #110
  6818.     -----------------------------------------------------------------
  6819.     
  6820.      ComErrorLimit : Number
  6821.     
  6822.     ComErrorLimit is the maximum number of errors that a file transfer can
  6823.     have before an automatic transfer abort occurs. If set to 0 then it will
  6824.     keep trying forever. The default limit is 100.
  6825.     
  6826.     Category: Modem
  6827.     
  6828.     
  6829.      ComFileName : String
  6830.     
  6831.     During an upload or download ComFileName returns the name of the file
  6832.     being transferred.
  6833.     
  6834.     See Also: ComXmitStatusProgram
  6835.     
  6836.     Category: Modem
  6837.     
  6838.     
  6839.      ComFileSize : Number
  6840.     
  6841.     During an upload or download ComFileSize returns the size of the file
  6842.     being transferred.
  6843.     
  6844.     See Also: ComXmitStatusProgram
  6845.     
  6846.     Category: Modem
  6847.     
  6848.     
  6849.      ComInitPort (Baud,DataBits,Parity,StopBits)
  6850.     
  6851.     Initializes the ComPort. After selecting which com port you want to
  6852.     initialize with the ComPort command, this must be run before other com
  6853.     commands are executed.
  6854.     
  6855.      Example:
  6856.        ComPort = Com1
  6857.        ComInitPort(38400,8,'N',1)
  6858.     
  6859.     See Also: ComDone
  6860.     
  6861.     Category: Modem
  6862.     
  6863.     
  6864.      ComLastChar : String
  6865.     
  6866.     ComLastChar returns the last character that was received with
  6867.     ComReadChar.
  6868.     
  6869.     See Also: ComReadChar ComCharReady ComReadTimeout ComReadln
  6870.     
  6871.     Category: Modem
  6872.     
  6873.  
  6874.     Computer Tyme * MarxMenu * Users Manual                 Page #111
  6875.     -----------------------------------------------------------------
  6876.     
  6877.      ComLastLine : String
  6878.     
  6879.     ComLastLine returns the last line that was received that is not a blank
  6880.     line. BackSpace characters are handled correctly.
  6881.     
  6882.     Category: Modem
  6883.     
  6884.     
  6885.      ComNewLineProgram : Procedure
  6886.     
  6887.     ComNewLineProgram is a procedure variable that if set to point to a
  6888.     procedure is executed every time a new line is received at the modem.
  6889.     
  6890.      Example:
  6891.        ComNewLineProgram = Loc ExamineLastLine
  6892.     
  6893.        Procedure ExamineLastLine
  6894.        var St P
  6895.           P = pos('Time Sync:',ComLastLine)
  6896.           if P = 0 then Return
  6897.           St = mid(ComLastLine,P + 11,17)    ;read Date and Time
  6898.           NovServerTime = TimeOf(St)
  6899.        EndProc
  6900.     
  6901.     In this example, ExamineLastLine is executed once each new line and is
  6902.     scaned for the word "Time Sync:". If the word is found it sets the
  6903.     server time to the value following that word.
  6904.     
  6905.     Category: Modem
  6906.     
  6907.     
  6908.      ComParity : String
  6909.     
  6910.     Reads or sets the parity.
  6911.     
  6912.      N - None
  6913.      E - Even
  6914.      O - Odd
  6915.      M - Mark
  6916.      S - Space
  6917.     
  6918.      Example:
  6919.        ComParity = 'E'
  6920.        Writeln ComParity
  6921.     
  6922.     See Also: ComBaud ComDataBits ComStopBits
  6923.     
  6924.     Category: Modem
  6925.     
  6926.  
  6927.     Computer Tyme * MarxMenu * Users Manual                 Page #112
  6928.     -----------------------------------------------------------------
  6929.     
  6930.      ComPort : Number
  6931.     
  6932.     Sets or reads the port that communication commands will effect. The
  6933.     ComPost command must be executed first before any of the other
  6934.     communication parameters can be set.
  6935.     
  6936.      Example:
  6937.        ComPort = Com1
  6938.        Writeln ComPort
  6939.     
  6940.     Category: Modem
  6941.     
  6942.     
  6943.      ComProtocol : String
  6944.     
  6945.     During an upload or download ComProtocol returns the name of the
  6946.     transfer protocol being used.
  6947.     
  6948.     See Also: ComXmitStatusProgram
  6949.     
  6950.     Category: Modem
  6951.     
  6952.     
  6953.      ComReadChar : String
  6954.     
  6955.     Reads one character from the com port or input buffer. It will wait up
  6956.     to ComReadTimeout ticks for the character. If no character is received
  6957.     then ComTimeOut is set to True. If the ComStripHighBit command it set
  6958.     then this command will automatically remove the high-order bit when
  6959.     reading a character.
  6960.     
  6961.      Example:
  6962.        var Ch
  6963.        Ch = ComReadChar
  6964.     
  6965.     See Also: ComCharReady ComReadTimeout ComReadln
  6966.     
  6967.     Category: Modem
  6968.     
  6969.     
  6970.      ComReadln : String
  6971.     
  6972.     Reads a line from the com port or input buffer. It will wait up to
  6973.     ComReadTimeout ticks for the character. If no character is received then
  6974.     ComTimeOut is set to True.
  6975.     
  6976.      Example:
  6977.        if ComReadln = 'OK' then
  6978.     
  6979.     See Also: ComReadChar ComCharReady ComReadTimeout
  6980.     
  6981.  
  6982.     Computer Tyme * MarxMenu * Users Manual                 Page #113
  6983.     -----------------------------------------------------------------
  6984.     
  6985.     Category: Modem
  6986.     
  6987.     
  6988.      ComReadTimeout : Number
  6989.     
  6990.     This variable controls the number of timer ticks (18.2 ticks per second)
  6991.     that a read command will wait to receive data.
  6992.     
  6993.      Example:
  6994.         ComReadTimeout = 36  ;2 seconds
  6995.     
  6996.     Category: Modem
  6997.     
  6998.     
  6999.      ComRec1kXmodem (FileName)
  7000.     
  7001.     Receive a file using the  1k-Xmodem (XModem1k) transfer protocol.
  7002.     
  7003.      Example:
  7004.        ComRec1kXmodem 'MXMENU.ZIP'
  7005.     
  7006.     See Also: ComSend1kXmodem
  7007.     
  7008.     Category: Modem
  7009.     
  7010.     
  7011.      ComRecKermit
  7012.     
  7013.     Receive a file, or group of files, using the Kermit transfer protocol.
  7014.     
  7015.      Example:
  7016.        ComRecKermit
  7017.     
  7018.     See Also: ComSendKermit
  7019.     
  7020.     Category: Modem
  7021.     
  7022.     
  7023.      ComRecXmodem (FileName)
  7024.     
  7025.     Receive a file using the Xmodem transfer protocol. There are two
  7026.     versions of Xmodem (Checksum and CRC), the ComRecXmodem command is
  7027.     compatible with both versions.
  7028.     
  7029.      Example:
  7030.        ComRecXmodem 'MXMENU.ZIP'
  7031.     
  7032.     See Also: ComSendXmodem
  7033.     
  7034.     Category: Modem
  7035.     
  7036.  
  7037.     Computer Tyme * MarxMenu * Users Manual                 Page #114
  7038.     -----------------------------------------------------------------
  7039.     
  7040.      ComRecYmodem
  7041.     
  7042.     Receive a file, or group of files, using the Ymodem transfer protocol.
  7043.     
  7044.      Example:
  7045.        ComRecYmodem
  7046.     
  7047.     See Also: ComSendYmodem
  7048.     
  7049.     Category: Modem
  7050.     
  7051.     
  7052.      ComRecYmodemG
  7053.     
  7054.     Receive a file, or group of files, using the YmodemG transfer protocol.
  7055.     This protocol does not do any error checking and is therefore only
  7056.     advisable for use with Error correcting modems.
  7057.     
  7058.      Example:
  7059.        ComRecYmodemG
  7060.     
  7061.     See Also: ComSendYmodemG
  7062.     
  7063.     Category: Modem
  7064.     
  7065.     
  7066.      ComRecZmodem
  7067.     
  7068.     Receive a file, or group of files, using the Zmodem transfer protocol.
  7069.     
  7070.      Example:
  7071.        ComRecZmodem
  7072.     
  7073.     See Also: ComSendZmodem
  7074.     
  7075.     Category: Modem
  7076.     
  7077.     
  7078.      ComResult : Number
  7079.     
  7080.     ComResult is a variable like FileResult that returns the success status
  7081.     of com port activity. A result code or zero generally indicates success.
  7082.     
  7083.      Example:
  7084.        ComRecXmodem
  7085.        if ComResult <> 0 then Writeln 'Xfer Not Successful!'
  7086.     
  7087.     Category: Modem
  7088.     
  7089.  
  7090.     Computer Tyme * MarxMenu * Users Manual                 Page #115
  7091.     -----------------------------------------------------------------
  7092.     
  7093.      ComRI : Boolean
  7094.     
  7095.     Returns the status of the ring indicator line on serial ports.
  7096.     
  7097.      Example:
  7098.        if ComRI then Writeln 'Ringing'
  7099.     
  7100.     Category: Modem
  7101.     
  7102.     
  7103.      ComRTS (On/Off)
  7104.     
  7105.     Activates and deactivates RTS/CTS handshaking.
  7106.     
  7107.      Example:
  7108.        ComRTS On
  7109.     
  7110.     Category: Modem
  7111.     
  7112.     
  7113.      ComSendBreak
  7114.     
  7115.     Sends a break signal out the modem.
  7116.     
  7117.     See Also: ComBreakReceived
  7118.     
  7119.     Category: Modem
  7120.     
  7121.     
  7122.      ComSend1kXmodem (FileName)
  7123.     
  7124.     Send a file using the 1k-Xmodem (Xmodem1k) transfer protocol.
  7125.     
  7126.      Example:
  7127.        ComSend1kXmodem 'MXMENU.ZIP'
  7128.     
  7129.     See Also: ComRec1kXmodem
  7130.     
  7131.     Category: Modem
  7132.     
  7133.     
  7134.      ComSendKermit (FileName or Array)
  7135.     
  7136.     Send a file, or group of files, using the Kermit transfer protocol. If
  7137.     you pass a filename it sends the file. If you pass an arrayname then
  7138.     send all the files in the array list.
  7139.     
  7140.      Example:
  7141.        ComSendKermit 'MXMENU.ZIP'          ;Send MXMENU.ZIP via Kermit
  7142.     
  7143.      Example:
  7144.        Var FileList
  7145.        AppendArray(FileList,'FILE1')
  7146.        AppendArray(FileList,'FILE2')
  7147.        ComSendKermit FileList              ;Send FILE1 & FILE2 via kermit
  7148.     
  7149.  
  7150.     Computer Tyme * MarxMenu * Users Manual                 Page #116
  7151.     -----------------------------------------------------------------
  7152.     
  7153.     See Also: ComRecKermit
  7154.     
  7155.     Category: Modem
  7156.     
  7157.     
  7158.      ComSendXmodem (FileName)
  7159.     
  7160.     Send a file using the Xmodem transfer protocol. There are two versions
  7161.     of Xmodem (Checksum and CRC), the ComRecXmodem command is compatible
  7162.     with both versions.
  7163.     
  7164.      Example:
  7165.        ComSendXmodem 'MXMENU.ZIP'
  7166.     
  7167.     See Also: ComRecXmodem
  7168.     
  7169.     Category: Modem
  7170.     
  7171.     
  7172.      ComSendYmodem (FileName or Array)
  7173.     
  7174.     Send a file, or a group of files, using the Ymodem transfer protocol. If
  7175.     you pass a file name then it sends the file. If you pass it an array
  7176.     then it will send all the files in the array list.
  7177.     
  7178.      Example:
  7179.        ComSendYmodem 'MXMENU.ZIP'
  7180.     
  7181.      Example:
  7182.        Var FileList
  7183.        AppendArray(FileList,'FILE1')
  7184.        AppendArray(FileList,'FILE2')
  7185.        ComSendYmodem FileList
  7186.     
  7187.     See Also: ComRecYmodem
  7188.     
  7189.     Category: Modem
  7190.     
  7191.     
  7192.      ComSendYmodemG (FileName or Array)
  7193.     
  7194.     Send a file, or group of files, using the YmodemG transfer protocol. If
  7195.     you pass a file name then it sends that file. If you pass an array then
  7196.     it will send all the files in the array list. This protocol does not do
  7197.     any error checking and is therefore only advisable for use with Error
  7198.     correcting modems.
  7199.     
  7200.      Example:
  7201.        ComSendYmodemG 'MXMENU.ZIP'
  7202.     
  7203.      Example:
  7204.        Var FileList
  7205.        AppendArray(FileList,'FILE1')
  7206.        AppendArray(FileList,'FILE2')
  7207.        ComSendYmodemG FileList
  7208.     
  7209.  
  7210.     Computer Tyme * MarxMenu * Users Manual                 Page #117
  7211.     -----------------------------------------------------------------
  7212.     
  7213.     See Also: ComRecYmodemG
  7214.     
  7215.     Category: Modem
  7216.     
  7217.     
  7218.      ComSendZmodem (FileName or Array)
  7219.     
  7220.     Send a file, or group of files, using the Zmodem protocol. If you pass a
  7221.     file name then it sends that file. If you pass an array then it will
  7222.     send all the files in that array list.
  7223.     
  7224.      Example:
  7225.        ComSendZmodem 'MXMENU.ZIP'
  7226.     
  7227.      Example:
  7228.        Var FileList
  7229.        AppendArray(FileList,'FILE1')
  7230.        AppendArray(FileList,'FILE2')
  7231.        ComSendZmodem FileList
  7232.     
  7233.     See Also: ComRecZmodem
  7234.     
  7235.     Category: Modem
  7236.     
  7237.     
  7238.      ComStopBits : Number
  7239.     
  7240.     Reads or sets the number of stop bits. Range 1 - 2 bits.
  7241.     
  7242.      Example:
  7243.        ComStopBits = 1
  7244.        Writeln ComStopBits
  7245.     
  7246.     See Also: ComBaud ComDataBits ComParity
  7247.     
  7248.     Category: Modem
  7249.     
  7250.     
  7251.      ComStripHighBit (On/Off)
  7252.     
  7253.     This command when set to on (true), will automatically remove the
  7254.     high-order bit when using the ComReadChar command. File transfers and
  7255.     the ComReadLn command are unaffected by this command.
  7256.     
  7257.     See Also: ComReadChar
  7258.     
  7259.     Category: Modem
  7260.     
  7261.  
  7262.     Computer Tyme * MarxMenu * Users Manual                 Page #118
  7263.     -----------------------------------------------------------------
  7264.     
  7265.      ComThisLine : String
  7266.     
  7267.     ComThisLine returns a string of characters that has been received from
  7268.     the com port since the last CR. This can be used to see what prompts are
  7269.     being received for automatic script processing.
  7270.     
  7271.      Example:
  7272.        if pos('Password',ComThisLine) > 0
  7273.           ComWriteln 'Beast'
  7274.        endif
  7275.     
  7276.     Category: Modem
  7277.     
  7278.     
  7279.      ComTimeout : Boolean
  7280.     
  7281.     ComTimeout is set to True if the last command ended in a timeout error.
  7282.     
  7283.      Example:
  7284.        if ComTimeout then Writeln 'Something is stuck!'
  7285.     
  7286.     Category: Modem
  7287.     
  7288.     
  7289.      ComTotalErrors : Number
  7290.     
  7291.     During an upload or download ComTotalErrors returns the number of
  7292.     errors that occurred during the current file transfer.
  7293.     
  7294.     See Also: ComXmitStatusProgram
  7295.     
  7296.     Category: Modem
  7297.     
  7298.     
  7299.      ComUseInt14
  7300.     
  7301.     ComUseInt14 sets MarxMenu to talk to the ports through the Int14 serial
  7302.     port routines. This can be used for network modem sharing applications
  7303.     or if for some reason you don't want to talk to the UART directly. The
  7304.     default Int14 routines are unbuffered.
  7305.     
  7306.     Because of the limitations of the Int14 routines many of the more
  7307.     advance MarxMenu communications commands do nothing when this option is
  7308.     activated.
  7309.     
  7310.     Category: Modem
  7311.     
  7312.  
  7313.     Computer Tyme * MarxMenu * Users Manual                 Page #119
  7314.     -----------------------------------------------------------------
  7315.     
  7316.      ComUseUart
  7317.     
  7318.     ComUseUart sets MarxMenu to talk to the UART directly. This is the
  7319.     default mode. This command can be used to switch back if you used the
  7320.     ComUseInt14 command.
  7321.     
  7322.     Category: Modem
  7323.     
  7324.     
  7325.      ComWatchCD : Boolean
  7326.     
  7327.     When ComWatchCD is set to true MarxMenu watches the carrier detect
  7328.     signal. If carrier detect is lost then several things happen. ComCDAbort
  7329.     is set to true. ComEchoSendChar and ComEchoRecChar are set to false.
  7330.     ComWrite and ComWriteln are disabled. ComCharReady is always true and
  7331.     ComReadChar returns a char 0 when read.
  7332.     
  7333.     This function is there to reset a host program without having to build
  7334.     in a lot of error checking into the MarxMenu script. Setting ComWatchCD
  7335.     to false resets everything and allows you to prepare for the next call.
  7336.     
  7337.     Only set ComWatchCD to true after you receive a carrier detect signal.
  7338.     It is also recommended that you insert a half second delay after
  7339.     receiving a connect to deal with slow modems in fast computers.
  7340.     
  7341.     Category: Modem
  7342.     
  7343.     
  7344.      ComWrite (String)
  7345.     
  7346.     Writes a string to the com port with no CR.
  7347.     
  7348.      Example:
  7349.        ComWrite '+++'
  7350.     
  7351.     See Also: ComWriteln ComWriteTimeout
  7352.     
  7353.     Category: Modem
  7354.     
  7355.     
  7356.      ComWriteln (String)
  7357.     
  7358.     Writes a string to the com port with CR.
  7359.     
  7360.      Example:
  7361.        ComWriteln 'ATDT 1-417-866-1665'
  7362.     
  7363.     See Also: ComWrite ComWriteTimeout
  7364.     
  7365.     Category: Modem
  7366.     
  7367.  
  7368.     Computer Tyme * MarxMenu * Users Manual                 Page #120
  7369.     -----------------------------------------------------------------
  7370.     
  7371.      ComWriteTimeout : Number
  7372.     
  7373.     This variable controls the number of timer ticks (18.2 ticks per second)
  7374.     that a write command will wait to send data.
  7375.     
  7376.      Example:
  7377.         ComWriteTimeout = 36  ;2 seconds
  7378.     
  7379.     Category: Modem
  7380.     
  7381.     
  7382.      ComXmitAbortProgram
  7383.     
  7384.     ComXmitAbortProgram is called while uploads and downloads are in
  7385.     progress. If this is set to a MarxMenu procedure then you can write your
  7386.     own control routine to control protocol abort. Your program needs to
  7387.     return either a true to abort or a false to not abort.
  7388.     
  7389.      Example:
  7390.        ComXmitAbortProgram = loc XmitAbort
  7391.     
  7392.        Procedure XmitAbort
  7393.           if not KbdReady then Return False
  7394.           Return ReadKey = Esc
  7395.        EndProc
  7396.     
  7397.     See Also: ComXmitStatusProgram
  7398.     
  7399.     Category: Modem
  7400.     
  7401.     
  7402.      ComXmitEnding : Boolean
  7403.     
  7404.     This variable is set to true to indicate the ending for an upload or
  7405.     download. It is used to end a communications status window.
  7406.     
  7407.     See Also: ComXmitStatusProgram ComXmitStarting
  7408.     
  7409.     Category: Modem
  7410.     
  7411.     
  7412.      ComXmitStarting : Boolean
  7413.     
  7414.     This variable is set to True to indicate the beginning for an upload or
  7415.     download. It is used to start a communications status window.
  7416.     
  7417.     See Also: ComXmitStatusProgram ComXmitEnding
  7418.     
  7419.     Category: Modem
  7420.     
  7421.  
  7422.     Computer Tyme * MarxMenu * Users Manual                 Page #121
  7423.     -----------------------------------------------------------------
  7424.     
  7425.      ComXmitStatusProgram
  7426.     
  7427.     ComXmitStatusProgram is called while uploads and downloads are in
  7428.     progress. If this is set to a MarxMenu procedure then you can write your
  7429.     own status display routine to show progress status.
  7430.     
  7431.     See Also: ComXmitAbortProgram
  7432.     
  7433.     Category: Modem
  7434.     
  7435.     
  7436.      Comment
  7437.     
  7438.     Starts a Comment Block. All text is ignored until EndComment is
  7439.     encountered.
  7440.     
  7441.      Example:
  7442.        Comment
  7443.        =======================================
  7444.     
  7445.        Everything between Comment and EndComment is ignored.
  7446.     
  7447.        =======================================
  7448.        EndComment
  7449.     
  7450.     See Also: EndComment
  7451.     
  7452.     Category: Misc
  7453.     
  7454.     
  7455.      Console (On/Off)
  7456.     
  7457.     MarxMenu has an built-in system control console that the user can
  7458.     activate by pressing the Tab key. This allows them to dynamically set
  7459.     the screen blanker parameters. The command "CONSOLE OFF" will disable
  7460.     the Tab key function to prevent access console control box.
  7461.     
  7462.     Category: Display
  7463.     
  7464.     
  7465.      ConsoleBorderColor (Color,Color)
  7466.     
  7467.     Sets the color of the console border.
  7468.     
  7469.     See Also: ConsolePos
  7470.     
  7471.     Category: Color
  7472.     
  7473.  
  7474.     Computer Tyme * MarxMenu * Users Manual                 Page #122
  7475.     -----------------------------------------------------------------
  7476.     
  7477.      ConsoleHeaderColor (Color,Color)
  7478.     
  7479.     Sets the color of the console header.
  7480.     
  7481.     See Also: ConsolePos
  7482.     
  7483.     Category: Color
  7484.     
  7485.     
  7486.      ConsoleInsideColor (Color,Color)
  7487.     
  7488.     Sets the color of the console inside.
  7489.     
  7490.     See Also: ConsolePos
  7491.     
  7492.     Category: Color
  7493.     
  7494.     
  7495.      ConsolePos (Column,Row)
  7496.     
  7497.     Sets the coordinates of the pop-up console menu.
  7498.     
  7499.      Example:
  7500.        ConsoleBorderColor( White,Blue )
  7501.        ConsoleHeaderColor( Yellow,Blue )
  7502.        ConsoleInsideColor( Yellow,Blue )
  7503.        ConsolePos( 5,5 )               ; Column 5, Row 5
  7504.     
  7505.     Category: Display
  7506.     
  7507.     
  7508.      Const
  7509.     
  7510.     Creates a constant.
  7511.     
  7512.      Example:
  7513.        Const
  7514.          X = 50
  7515.          St = 'MARXMENU'
  7516.          Flag = True
  7517.     
  7518.     See Also: Var Shared Qualifier
  7519.     
  7520.     Category Variable
  7521.     
  7522.     
  7523.      Cos (Radians) : Real
  7524.     
  7525.     Returns the Cosine of a real.
  7526.     
  7527.     Category: Math Float
  7528.     
  7529.  
  7530.     Computer Tyme * MarxMenu * Users Manual                 Page #123
  7531.     -----------------------------------------------------------------
  7532.     
  7533.      CountryCode : Number
  7534.     
  7535.     Returns the international country code from DOS. The country code is the
  7536.     same number as the international telephone dialing code prefix.
  7537.     
  7538.     Category: International
  7539.     
  7540.     
  7541.      CpuClass : Number
  7542.     
  7543.     Reads the type of CPU you are using and returns a number.
  7544.     
  7545.      1 - 8088, 8086, 80186, V20, V30
  7546.      2 - 80286
  7547.      3 - 80386
  7548.      4 - 80486
  7549.     
  7550.      Example:
  7551.        var Temp
  7552.        Temp = CPUClass   ;<- Read CPu Type into Var Temp
  7553.     
  7554.        if Temp = 1
  7555.           Writeln "This System is an XT Class Machine!"
  7556.     
  7557.        elseif Temp = 2
  7558.           Writeln "This System is an AT Class Machine!"
  7559.     
  7560.        elseif Temp = 3
  7561.           Writeln "That 386 is a powerful machine."
  7562.     
  7563.        else
  7564.           Writeln "Do you really rate having a 486?"
  7565.     
  7566.        endif
  7567.     
  7568.     See Also: CpuName McpClass
  7569.     
  7570.     Category: System
  7571.     
  7572.     
  7573.      CpuName : String
  7574.     
  7575.     Returns the name of the CPU. CPU names include:
  7576.     
  7577.       8088, 8086, V20 ,V30, 80188, 80186, 80286,
  7578.       80386, 80386SX, 80486, 80486SX
  7579.     
  7580.     See Also: CpuClass McpName
  7581.     
  7582.     Category: System
  7583.     
  7584.  
  7585.     Computer Tyme * MarxMenu * Users Manual                 Page #124
  7586.     -----------------------------------------------------------------
  7587.     
  7588.      CurrencySymbol : String
  7589.     
  7590.     Returns the currency symbol based on the country code.
  7591.     
  7592.     Category: International
  7593.     
  7594.     
  7595.      CurrentDirectory : String
  7596.     
  7597.     Returns the current directory.
  7598.     
  7599.      Example:
  7600.        Writeln CurrentDirectory
  7601.     
  7602.     Category: String
  7603.     
  7604.     
  7605.      CurrentEnvironment
  7606.     
  7607.     CurrentEnvironment selects the current environment for use with
  7608.     environment access commands.
  7609.     
  7610.     See Also: ReadEnv SetEnv ReadEnvironment ShellEnvironment
  7611.     See Also: ParentEnvironment MasterEnvironment
  7612.     
  7613.     Category: Environment
  7614.     
  7615.     
  7616.      CurrentWindow : Number
  7617.     
  7618.     Returns the number of the current window. All windows are given a unique
  7619.     number.
  7620.     
  7621.      Example:
  7622.        ThisWindow = CurrentWindow
  7623.     
  7624.     See Also: SetTopWindow
  7625.     
  7626.     Category: Display
  7627.     
  7628.     
  7629.      Cursor (On/Off)
  7630.     
  7631.     MarxMenu automatically turns the cursor on for certain kinds of input.
  7632.     Using Cursor Off prevents MarxMenu from turning the cursor on. Cursor On
  7633.     reverses this and allows MarxMenu to turn the cursor on when needed.
  7634.     
  7635.      Example:
  7636.        Cursor Off
  7637.     
  7638.     Category: Video
  7639.     
  7640.  
  7641.     Computer Tyme * MarxMenu * Users Manual                 Page #125
  7642.     -----------------------------------------------------------------
  7643.     
  7644.      CustomBox (String)
  7645.     
  7646.     Selects a Box border using an 8-character string to define the sides
  7647.     and the corners.
  7648.     
  7649.      Example:
  7650.        CustomBox ('12345678') ;This will help you figure out what
  7651.                               ;position matches which side.
  7652.     
  7653.     See Also: SingleLineBox DoubleLineBox BlockBox NoBoxBorder
  7654.     
  7655.     Category: Display
  7656.     
  7657.     
  7658.      DateSeparator : String
  7659.     
  7660.     Returns the date separator character from the country information.
  7661.     
  7662.     See Also: TimeSeparator DecimalSeparator CountryCode
  7663.     
  7664.     Category: International Time
  7665.     
  7666.     
  7667.      DateString (Time) : String
  7668.     
  7669.     Returns the date of a time value as text. If no parameter is passed then
  7670.     Now is assumed. Uses international date format rules.
  7671.     
  7672.      Example:
  7673.        Writeln DateString            ;returns the date of Now as text
  7674.        Writeln DateString (Tomorrow) ;returns the date of Tomorrow as text
  7675.     
  7676.     Category: Time String International
  7677.     
  7678.     
  7679.      Day : Number
  7680.     
  7681.     Returns the day of the month.
  7682.     
  7683.     Category: Time
  7684.     
  7685.     
  7686.      DayOf (Date) : Number
  7687.     
  7688.     Returns the day of a date. If Date is passed as a string it is
  7689.     converted automatically.
  7690.     
  7691.      Example:
  7692.        DayOf('April 22, 1992')  ;returns 22
  7693.     
  7694.     See Also: TimeOf BadDate
  7695.     
  7696.  
  7697.     Computer Tyme * MarxMenu * Users Manual                 Page #126
  7698.     -----------------------------------------------------------------
  7699.     
  7700.     Category: Time
  7701.     
  7702.     
  7703.      DayOfWeek : Number
  7704.     
  7705.     Returns the day of the week.
  7706.     
  7707.       0=SUNDAY
  7708.       1=MONDAY
  7709.       2=TUESDAY
  7710.       3=WEDNESDAY
  7711.       4=THURSDAY
  7712.       5=FRIDAY
  7713.       6=SATURDAY
  7714.     
  7715.     Category: Time
  7716.     
  7717.     
  7718.      DayOfWeekOf (Date) : Number
  7719.     
  7720.     Returns the DayOfWeek of a date. If Date is passed as a string it is
  7721.     converted automatically.
  7722.     
  7723.      Example:
  7724.        DayOfWeekOf('April 22, 1992')  ;returns 4
  7725.     
  7726.     See Also: TimeOf BadDate
  7727.     
  7728.     Category: Time
  7729.     
  7730.     
  7731.      DecimalSeparator : String
  7732.     
  7733.     Returns the decimal separator character from the country information.
  7734.     
  7735.     See Also: TimeSeparator DateSeparator CountryCode
  7736.     
  7737.     Category: International
  7738.     
  7739.     
  7740.      Delete (String,Pos,Count)
  7741.     
  7742.     Deletes characters from string starting at pos for count.
  7743.     
  7744.      Example:
  7745.        String = 'ABCDEFGH'
  7746.        Delete(String,2,3)
  7747.     
  7748.     This leaves a String containing 'AEFGH'
  7749.     
  7750.     If count exceeds the length of the string, the string is truncated at
  7751.     pos.
  7752.     
  7753.  
  7754.     Computer Tyme * MarxMenu * Users Manual                 Page #127
  7755.     -----------------------------------------------------------------
  7756.     
  7757.     Another use of Delete is to delete elements of an array.
  7758.     
  7759.     Delete (Array,Position,Count)
  7760.     This works exactly like the delete command for strings. It delete
  7761.     elements of an array beginning at Position for Count elements. The
  7762.     NumberOfElements is adjusted accordingly.
  7763.     
  7764.      Example:
  7765.        MyArray[1] = "ONE"
  7766.        MyArray[2] = "TWO"
  7767.        MyArray[3] = "THREE"
  7768.        MyArray[4] = "FOUR"
  7769.        Delete( MyArray,2,2 )
  7770.     
  7771.      ;MyArray now contains..
  7772.        MyArray[1] = "ONE"
  7773.        MyArray[2] = "FOUR"
  7774.     
  7775.     Category: String Array
  7776.     
  7777.     
  7778.      DelFile (Name)
  7779.     
  7780.     Deletes a file by name. FileResult returns a 0 if the file existed and
  7781.     the delete was successful.
  7782.     
  7783.      Example:
  7784.        DelFile( 'C:\NOTES\READ.ME' )
  7785.        If FileResult = 0
  7786.          Writeln('C:\NOTES\READ.ME was successfully deleted!')
  7787.        Else
  7788.          Writeln('C:\NOTES\READ.ME was NOT deleted successfully!')
  7789.        EndIf
  7790.     
  7791.     Category: File
  7792.     
  7793.     
  7794.      Devices (Array)
  7795.     
  7796.     Fills array with list of all devices.
  7797.     
  7798.      Example:
  7799.        var temp
  7800.        devices(temp)                   ;Device list --> array temp
  7801.        loop temp                       ;Loop thru the array
  7802.             writeln temp[loopindex]    ;And Print contents
  7803.        endloop
  7804.     
  7805.     Category: Array
  7806.     
  7807.  
  7808.     Computer Tyme * MarxMenu * Users Manual                 Page #128
  7809.     -----------------------------------------------------------------
  7810.     
  7811.      DirectoriesOnly (On/Off)
  7812.     
  7813.     Forces ReadDirectory to read directories instead of file names.
  7814.     
  7815.     See Also: ReadDirectory
  7816.     
  7817.     Category: Directory
  7818.     
  7819.     
  7820.      DisplayType : Number
  7821.     
  7822.     Returns the current video card type.
  7823.     
  7824.      0 = HercMono
  7825.      1 = CGA
  7826.      2 = MCGA
  7827.      3 = EGA
  7828.      4 = VGA
  7829.      5 = PGC
  7830.     
  7831.     MarxMenu also understands the above constant names. For example, if you
  7832.     want to test for a CGA card:
  7833.     
  7834.      if DisplayType = CGA then ....
  7835.     
  7836.     Category: Video
  7837.     
  7838.     
  7839.      DiskType (Drive) : String
  7840.     
  7841.     DiskType returns the type of disk of a drive letter. Types recognized
  7842.     are:
  7843.     
  7844.      FLOPPY360
  7845.      FLOPPY720
  7846.      FLOPPY12
  7847.      FLOPPY14
  7848.      RAMDISK
  7849.      SUBST
  7850.      HARDDISK
  7851.      BERNOULI
  7852.      NOVELL
  7853.      CDROM
  7854.      UNKNOWN
  7855.      INVALID
  7856.     
  7857.      Example:
  7858.      Writeln DiskType('F')
  7859.     
  7860.     This command will actually read floppy drives which could be slow. The
  7861.     DriveType command can be used to read the floppy drive configuration in
  7862.     CMOS memory.
  7863.     
  7864.  
  7865.     Computer Tyme * MarxMenu * Users Manual                 Page #129
  7866.     -----------------------------------------------------------------
  7867.     
  7868.     See Also: DriveType
  7869.     
  7870.     Category: System
  7871.     
  7872.     
  7873.      Dispose (Variable)
  7874.     
  7875.     This command reclaims memory used by a string variable, file variable,
  7876.     or an array. If you are doing a lot of data manipulation, you might want
  7877.     to reclaim memory space used by arrays you are done with. The disposed
  7878.     variable becomes an untyped variable.
  7879.     
  7880.      Example:
  7881.        Loop( 20 )
  7882.          MyArray[LoopIndex] = LoopIndex
  7883.     
  7884.          ;Check to See Also: if number is odd or even
  7885.          If (MyArray[LoopIndex] Mod 2) = 0
  7886.            Writeln('MyArray[' + Str(LoopIndex) + '] is an EVEN number.' );
  7887.          Else
  7888.            Writeln('MyArray[' + Str(LoopIndex) + '] is an EVEN number.' );
  7889.          EndIf
  7890.        EndLoop
  7891.     
  7892.        ;We're finished with the array so reclaim its memory space.
  7893.        Dispose(MyArray)
  7894.     
  7895.     Category: Memory Array
  7896.     
  7897.     
  7898.      DosVersion : Number
  7899.     
  7900.     Returns the major DOS version number.
  7901.     
  7902.     See Also: DosVersionString MinorDosVersion
  7903.     
  7904.     Category: System
  7905.     
  7906.     
  7907.      DosVersionString : String
  7908.     
  7909.     Returns the DOS version number as a 4 character string. This function
  7910.     always returns 2 places past the decimal point. The form of the string
  7911.     is: #.##
  7912.     
  7913.      Example
  7914.         Writeln DosVersionString   ;prints 4.01
  7915.     
  7916.     See Also: DosVersion MinorDosVersion
  7917.     
  7918.     Category: System String
  7919.     
  7920.  
  7921.     Computer Tyme * MarxMenu * Users Manual                 Page #130
  7922.     -----------------------------------------------------------------
  7923.     
  7924.      DosWindow (On/Off)
  7925.     
  7926.     When you set DosWindow on, MarxMenu will not drop out of the menu system
  7927.     when you use the Execute command. It will give you a display of the DOS
  7928.     screen within the current window. The program you execute must be a
  7929.     well-behaved program like DIR or COPY or some of the other DOS commands
  7930.     that talk to the screen through standard file handles, otherwise is it
  7931.     possible for the application to corrupt your MarxMenu display.
  7932.     
  7933.     See Also: Execute
  7934.     
  7935.     Category: Execution
  7936.     
  7937.     
  7938.      DoubleLineBox
  7939.     
  7940.     Selects double line box.
  7941.     
  7942.     See Also: SingleLineBox BlockBox CustomBox NoBoxBorder
  7943.     
  7944.     Category: Display
  7945.     
  7946.     
  7947.      DPMIInstalled : Boolean
  7948.     
  7949.     Returns True if DPMI services are installed.
  7950.     
  7951.     See Also: DPMIVersion
  7952.     
  7953.     Category: System
  7954.     
  7955.     
  7956.      DPMIVersion : String
  7957.     
  7958.     DPMIVersion returns the version of the DPMI driver you are using. If
  7959.     DPMI isn't present it returns an empty string.
  7960.     
  7961.     See Also: DPMIInstalled
  7962.     
  7963.     Category: System
  7964.     
  7965.     
  7966.      DrawBox (column,row,width,height)
  7967.     
  7968.     Draws a box on the screen. The (column) and (row) are the upper left
  7969.     corner, (width) and (height) is the box size.
  7970.     
  7971.      Example:
  7972.        Explode On
  7973.        Shadow On
  7974.        DoubleLineBox
  7975.        BoxHeaderColor( Yellow,Red )
  7976.        BoxBorderColor( White, Red )
  7977.        BoxInsideColor( Yellow,Red )
  7978.        InverseColor( Black, Gray )
  7979.        CapsColor( Black, Red )
  7980.        BoxHeader = ' << Main Menu >> '
  7981.        DrawBox( 30,10,40,8 )
  7982.     
  7983.  
  7984.     Computer Tyme * MarxMenu * Users Manual                 Page #131
  7985.     -----------------------------------------------------------------
  7986.     
  7987.     DrawBox also creates a logical layer for several display variables.
  7988.     These variables include TextColor, InverseColor, CapsColor. It is
  7989.     important to use these color control commands AFTER the DrawBox command
  7990.     in order to properly restore the colors of the previous DrawBox.
  7991.     
  7992.     If you call up a box and upon finishing it adversely affects the colors
  7993.     of the previous box, you probably used color control commands BEFORE the
  7994.     DrawBox instead of AFTER.
  7995.     
  7996.     Category: Display
  7997.     
  7998.     
  7999.      Drives : Number
  8000.     
  8001.     Returns the number of drives. This includes drive names that can be
  8002.     substituted. Most of the time the answer is 5. This relates to your
  8003.     LastDrive = command in your CONFIG.SYS file.
  8004.     
  8005.     Category: System
  8006.     
  8007.     
  8008.      DriveType (Drive) : String
  8009.     
  8010.     DriveType returns the type of drive of a given drive letter. This is
  8011.     like DiskType with the exception of how it deals with floppy drives.
  8012.     DiskType actually tries to read the floppy so if you put a 720k disk in
  8013.     a 1.4 meg drive then DiskType will return 720. DriveType returns the
  8014.     type of drive the CMOS is configured for.
  8015.     
  8016.     See Also: DiskType
  8017.     
  8018.     Category: System
  8019.     
  8020.     
  8021.      DvAppNumber : Number
  8022.     
  8023.     Returns the DesqView application number or DesqView window number.
  8024.     
  8025.     Category: DesqView
  8026.     
  8027.     
  8028.      DvFrame (Handle,On/Off)
  8029.     
  8030.     Turns the DesqView border frame On or Off for a particular task
  8031.     identified by Handle.
  8032.     
  8033.     Category: DesqView
  8034.     
  8035.  
  8036.     Computer Tyme * MarxMenu * Users Manual                 Page #132
  8037.     -----------------------------------------------------------------
  8038.     
  8039.      DvFreeze (Handle)
  8040.     
  8041.     Freezes a program. The program stops executing.
  8042.     
  8043.     See Also: DvUnFreeze DvPifExecute DvLastHandle
  8044.     
  8045.     Category: DesqView
  8046.     
  8047.     
  8048.      DvHide (Handle)
  8049.     
  8050.     Hides all output from program making it invisible. The program still
  8051.     continues to run.
  8052.     
  8053.     See Also: DvUnHide
  8054.     
  8055.     Category: DesqView
  8056.     
  8057.     
  8058.      DvKillTask (Handle)
  8059.     
  8060.     Kills a program running under DesqView. The handle is the one returned
  8061.     by DvPifExecute in DvLastHandle.
  8062.     
  8063.     See Also: DvPifExecute
  8064.     
  8065.     Category: DesqView
  8066.     
  8067.     
  8068.      DvLastHandle : Number
  8069.     
  8070.     Returns a number that is associated with a program running under
  8071.     DesqView. This number is used to control other programs running under
  8072.     DesqView. It is set by DvPifExecute.
  8073.     
  8074.     See Also: DvPifExecute
  8075.     
  8076.     Category: DesqView
  8077.     
  8078.     
  8079.      DvLoaded : Boolean
  8080.     
  8081.     Returns true if DesqView is loaded.
  8082.     
  8083.     Category: DesqView
  8084.     
  8085.     
  8086.      DvMoveWindow (Handle,X,Y)
  8087.     
  8088.     Moves DesqView window upper left corner to position X,Y.
  8089.     
  8090.     Category: DesqView
  8091.     
  8092.  
  8093.     Computer Tyme * MarxMenu * Users Manual                 Page #133
  8094.     -----------------------------------------------------------------
  8095.     
  8096.      DvMyHandle : Number
  8097.     
  8098.     Returns the DesqView handle of the current process.
  8099.     
  8100.     See Also: DvLastHandle
  8101.     
  8102.     Category: DesqView
  8103.     
  8104.     
  8105.      DvPifExecute (Pif File)
  8106.     
  8107.     Executes another program under DesqView in another window. MarxMenu
  8108.     stays resident in its original window. The window executes according to
  8109.     the contents of the DesqView PIF file. The PIF file can be specified by
  8110.     using the full name. If you leave off the extension, MarxMenu assumes
  8111.     the extension DVP. If you pass a 2-character name, like the two
  8112.     characters in the DesqView menus, then MarxMenu will add -PIF.DVP to the
  8113.     name. If the PIF file is on the path, MarxMenu will find it.
  8114.     
  8115.     Warning! DesqView must be loaded to run this command.
  8116.     
  8117.      Example:
  8118.        DvPifExecute 'BD'
  8119.        DvPifExecute 'BD-PIF'       ;These all execute Big DOS
  8120.        DVPifExecute 'BD-PIF.DVP'
  8121.     
  8122.     The task handle is loaded into a variable named DvLastHandle. When the
  8123.     program starts, it becomes the current top program.
  8124.     
  8125.     See Also: DvLoaded DvLastHandle
  8126.     
  8127.     Category: DesqView
  8128.     
  8129.     
  8130.      DvResizeWindow (Handle,Width,Height)
  8131.     
  8132.     Changes the size of a DesqView window.
  8133.     
  8134.     Category: DesqView
  8135.     
  8136.     
  8137.      DvSetBottom (Handle)
  8138.     
  8139.     Sets the program associated with the handle to the bottom of the task
  8140.     stack.
  8141.     
  8142.     See Also: DvSetTop
  8143.     
  8144.     Category: DesqView
  8145.     
  8146.  
  8147.     Computer Tyme * MarxMenu * Users Manual                 Page #134
  8148.     -----------------------------------------------------------------
  8149.     
  8150.      DvSetTop (Handle)
  8151.     
  8152.     Sets the program associated with the handle to be the top running task.
  8153.     Using DvMyHandle allows MarxMenu to regain control after starting
  8154.     another task.
  8155.     
  8156.      Example:
  8157.         DvSetTop (DvMyHandle)
  8158.     
  8159.     See Also: DvSetBottom DvLastHandle
  8160.     
  8161.     Category: DesqView
  8162.     
  8163.     
  8164.      DvUnFreeze (Handle)
  8165.     
  8166.     UnFreezes a program. The program starts executing again.
  8167.     
  8168.     See Also: DvFreeze DvPifExecute DvLastHandle
  8169.     
  8170.     Category: DesqView
  8171.     
  8172.     
  8173.      DvUnHide (Handle)
  8174.     
  8175.     Reverses the effect of DvHide making program output visible again.
  8176.     
  8177.     See Also: DvHide
  8178.     
  8179.     Category: DesqView
  8180.     
  8181.     
  8182.      Else
  8183.     
  8184.     Starts lines executed if a condition is not true.
  8185.     
  8186.      Example:
  8187.        if X = 1
  8188.           Writeln 'One'
  8189.        else
  8190.           Writeln 'Not One'
  8191.        endif
  8192.     
  8193.     See Also: If Then Endif ElseIf
  8194.     
  8195.     Category: Conditional
  8196.     
  8197.  
  8198.     Computer Tyme * MarxMenu * Users Manual                 Page #135
  8199.     -----------------------------------------------------------------
  8200.     
  8201.      ElseIf
  8202.     
  8203.     Used with IF, ELSE, and ENDIF in conditional statements. After one
  8204.     ElseIf is true, execution continues after the endif statement.
  8205.     
  8206.      Example:
  8207.        if X = 1
  8208.           Writeln 'One'
  8209.     
  8210.        elseif X = 2
  8211.           Writeln 'Two'
  8212.     
  8213.        elseif X = 3
  8214.           Writeln 'Three'
  8215.     
  8216.        elseif X = 4
  8217.           Writeln 'Four'
  8218.     
  8219.        else
  8220.           Writeln 'Other'
  8221.     
  8222.        endif
  8223.     
  8224.     See Also: If Then Endif Else
  8225.     
  8226.     Category: Conditional
  8227.     
  8228.     
  8229.      EmsInstalled : Boolean
  8230.     
  8231.     Returns True if EMS memory manager is installed.
  8232.     
  8233.     See Also: EmsVersion
  8234.     
  8235.     Category: System
  8236.     
  8237.     
  8238.      EmsVersion : String
  8239.     
  8240.     EmsVersion returns the version of the EMS driver you are using. If EMS
  8241.     isn't present it returns an empty string.
  8242.     
  8243.     See Also: EmsInstalled
  8244.     
  8245.     Category: System
  8246.     
  8247.  
  8248.     Computer Tyme * MarxMenu * Users Manual                 Page #136
  8249.     -----------------------------------------------------------------
  8250.     
  8251.      EndComment
  8252.     
  8253.     Ends a comment block.
  8254.     
  8255.      Example:
  8256.        Comment
  8257.        =======================================
  8258.     
  8259.        Everything between Comment and EndComment is ignored.
  8260.     
  8261.        =======================================
  8262.        EndComment
  8263.     
  8264.     See Also: Comment
  8265.     
  8266.     Category: Misc
  8267.     
  8268.     
  8269.      EndIf
  8270.     
  8271.     Ends an if statement.
  8272.     
  8273.      Example:
  8274.        writeln "EndIf Example"
  8275.        if DayOfWeekof(Today)=2                             ;Code Between IF
  8276.           Writeln 'This line will only print on Tuesdays'  ;and ENDIF will
  8277.        endif                                               ;run if cond=True
  8278.        writeln "This line will always execute"
  8279.     
  8280.     See Also: If Else ElseIf Then
  8281.     
  8282.     Category: Conditional
  8283.     
  8284.     
  8285.      EndLoop
  8286.     
  8287.     Ends a loop statement.
  8288.     
  8289.     See Also: Loop LoopIndex LoopLimit
  8290.     
  8291.     Category: Conditional
  8292.     
  8293.     
  8294.      EndOfFile (FileVar) : Boolean
  8295.     
  8296.     Returns True if you are at the end of the file.
  8297.     
  8298.      Example:
  8299.        Var In
  8300.     
  8301.        FileAssign (In,'C:\NOTES\READ.ME')
  8302.        FileOpen (In)
  8303.        While not EndOfFile (In)
  8304.           Writeln (FileReadLn (In))
  8305.        EndWhile
  8306.        FileClose (In)
  8307.     
  8308.  
  8309.     Computer Tyme * MarxMenu * Users Manual                 Page #137
  8310.     -----------------------------------------------------------------
  8311.     
  8312.     Category: File
  8313.     
  8314.     
  8315.      EndProc
  8316.     
  8317.     Ends a Procedure.
  8318.     
  8319.     See Also: Procedure Return
  8320.     
  8321.     Category: Misc
  8322.     
  8323.     
  8324.      EndWhile
  8325.     
  8326.     Ends a While statement.
  8327.     
  8328.     See Also: While
  8329.     
  8330.     Category: Conditional
  8331.     
  8332.     
  8333.      EnvFree : Number
  8334.     
  8335.     Returns the free space in the selected environment.
  8336.     
  8337.      Example:
  8338.        if EnvFree
  8339.           Writeln "WARNING: Environment Memory Critically LOW!!!"
  8340.        endif
  8341.     
  8342.     See Also: EnvSize
  8343.     
  8344.     Category: Environment
  8345.     
  8346.     
  8347.      EnvSize : Number
  8348.     
  8349.     Returns the size of the selected environment.
  8350.     
  8351.      Example:
  8352.        if EnvSize < 20
  8353.           Writeln 'Your environment size is less than 20 bytes!!'
  8354.        endif
  8355.     
  8356.     See Also: EnvFree
  8357.     
  8358.     Category: Environment
  8359.     
  8360.  
  8361.     Computer Tyme * MarxMenu * Users Manual                 Page #138
  8362.     -----------------------------------------------------------------
  8363.     
  8364.      EraseTopWindow
  8365.     
  8366.     Erases the last window created with DrawBox.
  8367.     
  8368.     See Also: EraseWindow
  8369.     
  8370.     Category: Display
  8371.     
  8372.     
  8373.      EraseWindow (Number)
  8374.     
  8375.     Erases a window by number. This allows you to erase a window that is not
  8376.     the top window.
  8377.     
  8378.     See Also: CurrentWindow SetTopWindow EraseTopWindow
  8379.     
  8380.     Category: Display
  8381.     
  8382.     
  8383.      Execute ("command string")
  8384.     
  8385.     This allows you to execute a program without dropping out of MarxMenu.
  8386.     MarxMenu remains resident in memory and takes up approximately 50k. No
  8387.     batch file will be created by MarxMenu.
  8388.     
  8389.     This is handy if you have a small program you want to run from the menu
  8390.     but don't want to allow for the time required by MarxMenu to create and
  8391.     run a batch file. You can also execute some programs in a MarxMenu
  8392.     window (See Also: DosWindow). You can also execute a program and examine
  8393.     the return code.
  8394.     
  8395.     This command can be placed in a progression of menu commands without any
  8396.     special handling. Under an OnKey statement, you will need use a vertical
  8397.     bar in front of the command.
  8398.     
  8399.      Example:
  8400.        OnKey 'D'
  8401.         |UseCommand Off
  8402.         |Execute 'C:\DM.COM'  ;Note the COM extension is required here.
  8403.     
  8404.     Note: If UseCommand is True or On, MarxMenu will load COMMAND.COM to
  8405.     execute your command. If UseCommand is False, MarxMenu will execute your
  8406.     file directly without COMMAND.COM. Using COMMAND.COM will execute
  8407.     slightly slower, use 3.5k more RAM, and allow you to use command lines
  8408.     just like you would from the DOS prompt.
  8409.     
  8410.     If you set UseCommand to Off, you will have to include the COM or EXE
  8411.     extension in the name. If you don't include the extension, MarxMenu will
  8412.     automatically override UseCommand and load the command processor. If the
  8413.     command processor is loaded then you won't be able to read the
  8414.     errorlevel return code from the program you are running.
  8415.     
  8416.  
  8417.     Computer Tyme * MarxMenu * Users Manual                 Page #139
  8418.     -----------------------------------------------------------------
  8419.     
  8420.     MarxMenu will also use COMMAND.COM if you are piping or redirecting
  8421.     output to a file. COMMAND.COM is required when running internal DOS
  8422.     commands like COPY or DIR. It is also required to run batch files.
  8423.     
  8424.     When UseCommand is off, MarxMenu will search the PATH for the executable
  8425.     file if it isn't in the current directory.
  8426.     
  8427.     Not using COMMAND.COM allows you to use the ReturnCode variable to get
  8428.     the ERRORLEVEL from the subprogram. If COMMAND.COM is loaded, the
  8429.     ERRORLEVEL of the subprogram is lost.
  8430.     
  8431.     The ClearScreenFirst (On/Off) controls whether MarxMenu will clear the
  8432.     screen before you execute.
  8433.     
  8434.     The PauseAfterExecute (On/Off) allows you to have a pause like the Pause
  8435.     command in batch files. That way you can read the screen before it
  8436.     restores the MarxMenu screen. MarxMenu will display "Press any key to
  8437.     return to MarxMenu."
  8438.     
  8439.     By setting DosWindow to true MarxMenu will allow some programs to
  8440.     execute with the display going to a MarxMenu window. For this to work
  8441.     the program must output it's text to the standard output device.
  8442.     Programs that write directly to the screen won't work with DosWindow.
  8443.     
  8444.     Be sure not to load any TSR programs using the Execute command or
  8445.     MarxMenu will lock up.
  8446.     
  8447.     See Also: UseCommand DosWindow PauseAfterExecute ClearScreenFirst
  8448.     
  8449.     Category: Execution
  8450.     
  8451.     
  8452.      ExistDir (Directory) : Boolean
  8453.     
  8454.     Used to test whether or not a DIRECTORY exists. It can also test to see
  8455.     if a disk is inserted in a floppy drive or if a drive exists.
  8456.     
  8457.      Example:
  8458.        if not ExistDir 'A:' then Writeln 'Insert disk in drive A:'
  8459.     
  8460.     See Also: ExistFile
  8461.     
  8462.     Category: Directory
  8463.     
  8464.  
  8465.     Computer Tyme * MarxMenu * Users Manual                 Page #140
  8466.     -----------------------------------------------------------------
  8467.     
  8468.      ExistFile : Boolean
  8469.     
  8470.     Used to test whether or not a file or device exists.
  8471.     
  8472.      Example:
  8473.        ExistFile 'MARXMENU.EXE'
  8474.        ExistFile 'LPT2'            ;returns true if LPT2 device exists
  8475.     
  8476.     See Also: ExistDir
  8477.     
  8478.     Category: File
  8479.     
  8480.     
  8481.      ExistOnPath (String) : String
  8482.     
  8483.     Used to search the existing paths for the command to be executed by
  8484.     Execute or other function.
  8485.     
  8486.      Example:
  8487.        OnKey 'D'
  8488.        |Execute(ExistOnPath('DM.COM'))
  8489.     
  8490.     If the file is not found, a null string is returned.
  8491.     
  8492.     Category: File
  8493.     
  8494.     
  8495.      ExitCode
  8496.     
  8497.     This can be set so MarxMenu will return an ErrorLevel that can be used
  8498.     in a batch file.
  8499.     
  8500.      Example:
  8501.         ExitCode = 100
  8502.     
  8503.     When MarxMenu exits it will use ErrorLevel 100.
  8504.     
  8505.     Category: Execution
  8506.     
  8507.     
  8508.      ExitMenu
  8509.     
  8510.     Causes MarxMenu to exit. If the Bat command is used or batch commands
  8511.     are used under an OnKey statement then MarxMenu will create a batch file
  8512.     and set the environment variable MXCMD to point to it. If no batch file
  8513.     is to be created, and MXCMD hasn't been set to any value then the menu
  8514.     system will exit by setting MXCMD to MXSTOP.
  8515.     
  8516.     Category: Execution
  8517.     
  8518.  
  8519.     Computer Tyme * MarxMenu * Users Manual                 Page #141
  8520.     -----------------------------------------------------------------
  8521.     
  8522.      Exp (Real) : Real
  8523.     
  8524.     Returns the Exponential of a real. Inverse of Ln.
  8525.     
  8526.     Category: Math Float
  8527.     
  8528.     
  8529.      Explode (On/Off)
  8530.     
  8531.     Turn exploding windows On/Off.
  8532.     
  8533.      Example:
  8534.        Explode Off                 ;Box just appears!
  8535.        DrawBox 1 1 10 15
  8536.        Explode On                  ;Box grows on screen.
  8537.        Drawbox 20 1 10 15
  8538.     
  8539.     Category: Display
  8540.     
  8541.     
  8542.      ExplodeDelay (Number)
  8543.     
  8544.     Sets the speed of exploding windows. Use this command to adjust the
  8545.     speed of the exploding windows. Default is 15.
  8546.     
  8547.     Category: Display
  8548.     
  8549.     
  8550.      Extension (String) : String
  8551.     
  8552.     Returns the Extension of a file name or sets the Extension.
  8553.     
  8554.      Example:
  8555.        Writeln Extension 'MARXMENU.EXE'  ;returns 'EXE'
  8556.     
  8557.      Example:
  8558.        var FileName
  8559.          FileName = 'TEST.MNU'
  8560.          Extension (FileName) = 'MRX'
  8561.          Writeln FileName        ;this returns 'TEST.MRX'
  8562.     
  8563.     See Also: NamePart PathPart FilePart
  8564.     
  8565.     Category: String
  8566.     
  8567.     
  8568.      FileAppend (FileVar)
  8569.     
  8570.     Opens a file for access and moves the file pointer to the end of the
  8571.     file. File writes will start at the end of the file.
  8572.     
  8573.      Example:
  8574.        var LogFileName
  8575.     
  8576.  
  8577.     Computer Tyme * MarxMenu * Users Manual                 Page #142
  8578.     -----------------------------------------------------------------
  8579.     
  8580.        FileAssign(LogFileName,'USER.LOG')  ; Assign a filename
  8581.        FileAppend(LogFileName)             ; Use FileAppend move to EOF
  8582.        FileWriteLn(LogFileName,"This is a test") ;Write to file
  8583.        FileClose(LogFileName)              ;Close File
  8584.     
  8585.     See Also: FileOpen
  8586.     
  8587.     Category: File
  8588.     
  8589.     
  8590.      FileAssign (FileVar,String)
  8591.     
  8592.     Assigns a file variable to a file name. Files must be given a name
  8593.     before they can be accessed.
  8594.     
  8595.      Example:
  8596.        FileAssign(BatFile,'MARX.BAT')
  8597.     
  8598.     BatFile is a variable and after the FileAssign, it becomes a file
  8599.     variable. All access to the file must be done using the file variable.
  8600.     
  8601.     If an empty string is passed as the filename, MarxMenu will use the
  8602.     standard console file handles.
  8603.     
  8604.     See Also: FileOpen
  8605.     
  8606.     Category: File
  8607.     
  8608.     
  8609.      FileAttr (String) : Number
  8610.     
  8611.     Returns the attribute of a file or directory.
  8612.     
  8613.      Example:
  8614.        ; ATTRDISP.MNU
  8615.        ; ATTRIBUTE BYTE DISPLAY PROGRAM
  8616.        ; Using the FileAttr command. USAGE: "MARXMENU ATTRDISP Filename"
  8617.        var temp
  8618.        temp=binstring(fileattr(cmdline),8)
  8619.        writeln "Menu FileName: " + cmdline + "       " + temp
  8620.        writeln " "
  8621.        if mid(temp,8,1)="1" then writeln "READ-ONLY FLAG SET"
  8622.        if mid(temp,7,1)="1" then writeln "HIDDEN FLAG SET"
  8623.        if mid(temp,6,1)="1" then writeln "SYSTEM FLAG SET"
  8624.        if mid(temp,3,1)="1" then writeln "ARCHIVE BIT SET"
  8625.     
  8626.     Category: File
  8627.     
  8628.  
  8629.     Computer Tyme * MarxMenu * Users Manual                 Page #143
  8630.     -----------------------------------------------------------------
  8631.     
  8632.      FileClose (FileVar)
  8633.     
  8634.     Closes a file and deallocates the memory space used by the file
  8635.     variable.
  8636.     
  8637.     See Also: FileOpen FileAssign
  8638.     
  8639.     Category: File
  8640.     
  8641.     
  8642.      FileCreate (FileVar)
  8643.     
  8644.     Creates a new file. If the file exists, it overwrites the old one.
  8645.     FileCreate opens the file for output. Do not use FileOpen with
  8646.     FileCreate.
  8647.     
  8648.     See Also: FileWriteln FileAssign
  8649.     
  8650.     Category: File
  8651.     
  8652.     
  8653.      FileDate (String) : Number
  8654.     
  8655.     Returns file date as 32 bit integer. See DOS manual for date structure.
  8656.     This function should not be confused with FileTime which is compatible
  8657.     with all other MarxMenu time commands.
  8658.     
  8659.     See Also: FileTime
  8660.     
  8661.     Category: File
  8662.     
  8663.     
  8664.      FileFlush (FileVar)
  8665.     
  8666.     Writes any information that is in the file buffers to disk.
  8667.     
  8668.     See Also: FileWriteln FileAssign
  8669.     
  8670.     Category: File
  8671.     
  8672.     
  8673.      FileLog (FileName,String)
  8674.     
  8675.     FileLog opens the file if it exists, or creates it if it doesn't exist.
  8676.     It then seeks to the end of the file and writes the string to the end.
  8677.     The file is then closed. FileLog is typically used for things such as
  8678.     usage tracking.
  8679.     
  8680.      Example:
  8681.         FileLog('USAGE.LOG','Add This Line!')
  8682.     
  8683.     Category: File
  8684.     
  8685.  
  8686.     Computer Tyme * MarxMenu * Users Manual                 Page #144
  8687.     -----------------------------------------------------------------
  8688.     
  8689.      FileOpen (FileVar)
  8690.     
  8691.     Opens a file for access. FileOpen is not needed if you are using the
  8692.     ReadTextFile command. The following example copies a text file.
  8693.     
  8694.        var Inp Out St
  8695.     
  8696.        FileAssign(Inp,'INPUT.TXT')
  8697.        FileOpen(Inp)
  8698.        FileAssign(Out,'OUTPUT.TXT')
  8699.        FileCreate(Out)
  8700.        while not EndOfFile(Inp)
  8701.           St = FileReadln(Inp)
  8702.           FileWriteln(Out,St)
  8703.        endwhile
  8704.        FileClose(Inp)
  8705.        FileClose(Out)
  8706.     
  8707.     Category: File
  8708.     
  8709.     
  8710.      FilePart (String) : String
  8711.     
  8712.     Returns the file part of a filename.
  8713.     
  8714.      Example:
  8715.        NamePart ('C:\MARX\MARXMENU.EXE') ;returns MARXMENU.EXE
  8716.     
  8717.     See Also: Extension PathPart NamePart
  8718.     
  8719.     Category: String
  8720.     
  8721.     
  8722.      FilePos (FileVar) : Number
  8723.     
  8724.     Returns the current file position in bytes of where you are in a file
  8725.     that you are reading or writing. You can get back to the same place in
  8726.     the file by using FileSeek.
  8727.     
  8728.     See Also: FileSeek
  8729.     
  8730.     Category: File
  8731.     
  8732.     
  8733.      FileReadln (FileVar) : String
  8734.     
  8735.     Reads one line of an open file returning that line as a string.
  8736.     
  8737.      Example:
  8738.        Line3 = FileReadln(BatFile)
  8739.     
  8740.  
  8741.     Computer Tyme * MarxMenu * Users Manual                 Page #145
  8742.     -----------------------------------------------------------------
  8743.     
  8744.     See Also: FileOpen
  8745.     
  8746.     Category: File
  8747.     
  8748.     
  8749.      FileRename (Old,New)
  8750.     
  8751.     Renames a file from old name to new. A file may be moved to a new
  8752.     directory with this command.
  8753.     
  8754.      Example:
  8755.        FileRename ('F:\HOME\MARC\MESSAGE.TXT','F:\HOME\VICKI\MESSAGE.TXT')
  8756.     
  8757.     Category: File
  8758.     
  8759.     
  8760.      FileResult : Number
  8761.     
  8762.     Returns result code from last file IO. Result codes are the same as
  8763.     Turbo Pascal IOResult codes. These codes usually match the errors
  8764.     returned in the AX register of DOS commands. 0 indicates no problem.
  8765.     
  8766.      Example:
  8767.        DelFile 'TEST.TXT'
  8768.        if FileResult = 5 then Writeln 'ACCESS DENIED!'
  8769.     
  8770.     Category: File
  8771.     
  8772.     
  8773.      FileSeek (FileVar,Number)
  8774.     
  8775.     Moves the file pointer to a specified place in the file. This allows you
  8776.     to set the next place in a file that FileReadln will read from.
  8777.     
  8778.     See Also: FilePos FileReadln
  8779.     
  8780.     Category: File
  8781.     
  8782.     
  8783.      FileSize (String) : Number
  8784.     
  8785.     Returns size of file in bytes.
  8786.     
  8787.      Example:
  8788.        FileSize 'CONFIG.SYS'
  8789.     
  8790.     Category: File
  8791.     
  8792.  
  8793.     Computer Tyme * MarxMenu * Users Manual                 Page #146
  8794.     -----------------------------------------------------------------
  8795.     
  8796.      FileTime (File) : Time
  8797.     
  8798.     Returns the time of a file in MarxMenu format. This should not be
  8799.     confused with FileDate that returns the file time on DOS binary format.
  8800.     
  8801.     Category: File Time
  8802.     
  8803.     
  8804.      FileWrite (FileVar,String)
  8805.     
  8806.     Writes text to a file without a carriage return or line feed.
  8807.     
  8808.      Example:
  8809.        FileWrite (Out,Char(12))   ;writes a FormFeed to the file Out
  8810.     
  8811.     See Also: FileOpen
  8812.     
  8813.     Category: File
  8814.     
  8815.     
  8816.      FileWriteln (FileVar,String)
  8817.     
  8818.     Writes text to a file with a carriage return and a line feed.
  8819.     
  8820.      Example:
  8821.        FileWriteln (Out,'This Line')
  8822.     
  8823.     See Also: FileOpen
  8824.     
  8825.     Category: File
  8826.     
  8827.     
  8828.      FixPath
  8829.     
  8830.     This command reads your path command and verifies that all the paths are
  8831.     accessible. Any path that isn't accessible is removed from the master
  8832.     environment. This can be used on network drives to eliminate searching
  8833.     paths on fileservers that are no longer accessible.
  8834.     
  8835.     Category: Environment
  8836.     
  8837.     
  8838.      Floppies : Number
  8839.     
  8840.     Returns number of floppy drives in your computer.
  8841.     
  8842.     Category: System
  8843.     
  8844.  
  8845.     Computer Tyme * MarxMenu * Users Manual                 Page #147
  8846.     -----------------------------------------------------------------
  8847.     
  8848.      ForceExplosion (On/Off)
  8849.     
  8850.     This changes the explosion status of a window that already exists. This
  8851.     allows windows to implode that didn't explode.
  8852.     
  8853.     Category: Display
  8854.     
  8855.     
  8856.      ForceExtension (String,Ext) : String
  8857.     
  8858.     This command forces a file extension on a string.
  8859.     
  8860.      Example:
  8861.        St = ForceExtension('MAIN.MNU','MRX')
  8862.     
  8863.     This sets St equal to MAIN.MRX
  8864.     
  8865.     Category: String
  8866.     
  8867.     
  8868.      Fraction (Real) : Real
  8869.     
  8870.     Returns the fractional part of a real.
  8871.     
  8872.      Example:
  8873.        Fraction (2.36)   ;returns .36
  8874.     
  8875.     Category: Math Float
  8876.     
  8877.     
  8878.      FreeDiskSpace (Drive) : Number
  8879.     
  8880.     Returns free disk space in bytes.
  8881.     
  8882.      Example:
  8883.        Writeln (FreeDiskSpace 'C')
  8884.     
  8885.     FreeDiskSpace only looks at the first character of the string for the
  8886.     drive letter.
  8887.     
  8888.     Category: System
  8889.     
  8890.     
  8891.      FreeEMS : Number
  8892.     
  8893.     Returns free EMS memory in bytes.
  8894.     
  8895.     Category: Memory
  8896.     
  8897.  
  8898.     Computer Tyme * MarxMenu * Users Manual                 Page #148
  8899.     -----------------------------------------------------------------
  8900.     
  8901.      FreeMem(Segment)
  8902.     
  8903.     FreeMem deallocates memory that was allocated with GetMem. FreeMem
  8904.     automatically knows how much memory to deallocate.
  8905.     
  8906.     See Also: GetMem
  8907.     
  8908.     Category: Memory
  8909.     
  8910.     
  8911.      FreeMemory : Number
  8912.     
  8913.     Returns the amount of free memory still available. This is the memory
  8914.     available to MarxMenu or the amount you would have using the Execute
  8915.     command.
  8916.     
  8917.     See Also: ApplicationMemory
  8918.     
  8919.     Category: Memory
  8920.     
  8921.     
  8922.      FullLineReturn (On/Off)
  8923.     
  8924.     The FullLineReturn command is a control parameter affecting the Readln
  8925.     command. When set to On, subsequent Readlns will auto-force a carriage
  8926.     return when a user reaches the last character of the input field.
  8927.     
  8928.     See Also: Readln
  8929.     
  8930.     Category: String
  8931.     
  8932.     
  8933.      GetMem (Number) : Segment
  8934.     
  8935.     GetMem allocates the amount of memory specified in Number and returns
  8936.     the memory segment where the memory was allocated. The memory segment is
  8937.     filled with 0s. The maximum size of the memory block is 65504 bytes.
  8938.     
  8939.     You can then read and write to this memory area using the Mem commands.
  8940.     
  8941.      Example:
  8942.        var RamBlock
  8943.        RamBlock = GetMem(2000)  ;allocate 2000 bytes of memory
  8944.        Mem(RamBlock,0) = 5      ;writes the number 5 to the first byte
  8945.     
  8946.     See Also: FreeMem
  8947.     
  8948.     Category: Memory
  8949.     
  8950.  
  8951.     Computer Tyme * MarxMenu * Users Manual                 Page #149
  8952.     -----------------------------------------------------------------
  8953.     
  8954.      GotoXY (Column,Row)
  8955.     
  8956.     Move cursor to location column,row in current box.
  8957.     
  8958.      Example:
  8959.        GotoXY 35 9
  8960.     
  8961.     Category: Display Ansi
  8962.     
  8963.     
  8964.      HexString (Number, Length) : String
  8965.     
  8966.     HexString converts a number into a base 16 hexadecimal string. If Length
  8967.     > 0 then the number will have enough leading zeros to make it Length
  8968.     long. If Length = 0 then leading zeros are removed. Length must be 8 or
  8969.     less.
  8970.     
  8971.      Example:
  8972.        Writeln HexString(253,4)   ;returns 00FD
  8973.        Writeln HexString(253,0)   ;returns FD
  8974.     
  8975.     See Also: BinString
  8976.     
  8977.     Category: String
  8978.     
  8979.     
  8980.      HiddenAndSystem (On/Off)
  8981.     
  8982.     Controls if ReadDirectory will read hidden and system files.
  8983.     
  8984.     See Also: ReadDirectory
  8985.     
  8986.     Category: File Directory
  8987.     
  8988.     
  8989.      HighWord (Number) : Number
  8990.     
  8991.     Returns the value of the upper 16 bits of a number.
  8992.     
  8993.     See Also: LowWord
  8994.     
  8995.     Category: Math
  8996.     
  8997.     
  8998.      Hour : Number
  8999.     
  9000.     Return the current hour. 24 hour format.
  9001.     
  9002.     Category: Time
  9003.     
  9004.  
  9005.     Computer Tyme * MarxMenu * Users Manual                 Page #150
  9006.     -----------------------------------------------------------------
  9007.     
  9008.      HourOf (Date) : Number
  9009.     
  9010.     Returns the hour of a date. If Date is passed as a string it is
  9011.     converted automatically.
  9012.     
  9013.      Example:
  9014.        HourOf '6:00 pm'  ;returns 18
  9015.     
  9016.     See Also: TimeOf BadDate
  9017.     
  9018.     Category: Time
  9019.     
  9020.     
  9021.      Hundredth : Number
  9022.     
  9023.     Returns the 1/100 of a second from the system clock. Note that the
  9024.     system clock timer tick is 1/18 second so don't expect a lot of accuracy
  9025.     here.
  9026.     
  9027.     Category: Time
  9028.     
  9029.     
  9030.      IdleProgram : Procedure
  9031.     
  9032.     IdleProgram is a variable that when set to the location of a procedure
  9033.     allows the procedure to run while waiting at the keyboard. This is done
  9034.     by writing a procedure that will run while waiting for input.
  9035.     
  9036.     The way you use this is to set an internal variable named IdleProgram to
  9037.     the Loc of the procedure you want to run as follows:
  9038.     
  9039.      Example:
  9040.        IdleProgram = Loc MyProcedure
  9041.     
  9042.     Note: Do not use parentheses around MyProcedure.
  9043.     
  9044.     When writing MyProcedure make it as short and quick as possible. As of
  9045.     now, MyProcedure is called continuously while there is no keyboard
  9046.     input. You can also use a loop in it as follows.
  9047.     
  9048.      Procedure MyProcedure
  9049.         SetItUp
  9050.         while not KBDReady
  9051.            {do your thing}
  9052.         endwhile
  9053.         PutItBack
  9054.      EndProc
  9055.     
  9056.     MarxMenu doesn't automatically exit your procedure or save and restore
  9057.     anything. If you're writing to the screen you have to put everything
  9058.     back the way it was.
  9059.     
  9060.  
  9061.     Computer Tyme * MarxMenu * Users Manual                 Page #151
  9062.     -----------------------------------------------------------------
  9063.     
  9064.     If you want to run a program at a specific time, here's how it can be
  9065.     done:
  9066.     
  9067.      Procedure MyProcedure
  9068.         if Now = TimeOf('11:00pm')
  9069.            Bat 'NIGHT'             ;run NIGHT.BAT
  9070.            ExitMenu
  9071.         endif
  9072.         if Now = TimeOf('5:00')
  9073.            Bat 'MORNING'           ;run MORNING.BAT
  9074.            ExitMenu
  9075.         endif
  9076.      EndProc
  9077.     
  9078.     To disable IdleProgram run:
  9079.     
  9080.       Dispose(IdleProgram)
  9081.     
  9082.     See Also: Run Loc BlankScreenProgram
  9083.     
  9084.     Category: Execution
  9085.     
  9086.     
  9087.      If
  9088.     
  9089.     Used for conditional program control.
  9090.     
  9091.      Usage:
  9092.     
  9093.      IF (condition) THEN (statement)
  9094.     
  9095.      IF (condition)
  9096.         (statement)
  9097.         (statement)
  9098.     
  9099.      ELSEIF (condition)
  9100.         (statement)
  9101.         (statement)
  9102.     
  9103.      ELSE
  9104.         (statement)
  9105.         (statement)
  9106.     
  9107.      ENDIF
  9108.     
  9109.     Category: Conditional
  9110.     
  9111.     See Also: Else ElseIf Then EndIf
  9112.     
  9113.  
  9114.     Computer Tyme * MarxMenu * Users Manual                 Page #152
  9115.     -----------------------------------------------------------------
  9116.     
  9117.      InactiveBox (BoxType)
  9118.     
  9119.     This is used to select the type of box border to use when a window is
  9120.     not the current window. If any inactive box type is specified, then when
  9121.     you execute another DrawBox, the old window's border changes to the
  9122.     inactive box type. The inactive window also loses its headers and
  9123.     shadows.
  9124.     
  9125.     Note that InActiveBox must be used BEFORE the DrawBox command.
  9126.     
  9127.      Example:
  9128.        InActiveBox (SingleLineBox) ;switches to single line box if
  9129.                                     inactive.
  9130.     
  9131.        InactiveBox (NoBoxBorder)   ;disables InActive effect.
  9132.     
  9133.     See Also: InactiveBoxColor InactiveShadow
  9134.     
  9135.     Category: Display
  9136.     
  9137.     
  9138.      InactiveBoxColor (Foreground,Background)
  9139.     
  9140.     Selects the color of the inactive box window. If Black on Black is
  9141.     selected, (default), the inactive box color is the same as the active
  9142.     box color.
  9143.     
  9144.      Example:
  9145.        BoxBorderColor Yellow Blue
  9146.        InActiveBoxColor Brown Blue
  9147.     
  9148.     See Also: InactiveBox InactiveShadow
  9149.     
  9150.     Category: Color
  9151.     
  9152.     
  9153.      InactiveShadow (On/Off)
  9154.     
  9155.     When InactiveShadow is set to Off, the window shadow disappears when
  9156.     then window is not the top window.
  9157.     
  9158.     See Also: InactiveBox InactiveBoxColor
  9159.     
  9160.     Category: Display
  9161.     
  9162.  
  9163.     Computer Tyme * MarxMenu * Users Manual                 Page #153
  9164.     -----------------------------------------------------------------
  9165.     
  9166.      Include (MenuName)
  9167.     
  9168.     This is used to insert the menu code from another file into the menu
  9169.     that you are compiling.
  9170.     
  9171.      Example:
  9172.        Include 'DOS.MNU'
  9173.     
  9174.     This will compile DOS.MNU into your present menu as if that whole file
  9175.     were part of the menu you are working on.
  9176.     
  9177.     This is useful if you have several menus that share common code. By
  9178.     moving this common code to a separate file, and using an Include
  9179.     statement, you can change the common code and update several menus at
  9180.     once. If you are using overlays, it is a good idea to put your shared
  9181.     variables in an Include file. This assures that the shared variables
  9182.     will be the same for all overlays.
  9183.     
  9184.     Changing an Include file does not cause MarxMenu to recompile
  9185.     automatically like changing the MNU does. You will have to force it to
  9186.     compile your menus.
  9187.     
  9188.     This can be done several ways. You can type MARXCOMP (menu) or you can
  9189.     just type DEL *.MRX which will cause all the menus to recompile the next
  9190.     time they are run.
  9191.     
  9192.     Category: Misc
  9193.     
  9194.     
  9195.      IncludeDirectories (On/Off)
  9196.     
  9197.     Controls if ReadDirectory will read directories along with file names.
  9198.     Please note that the Parent Directory [..] will not be shown.
  9199.     
  9200.      Example:
  9201.        Var X
  9202.        IncludeDirectories On
  9203.        DirectoriesOnly on
  9204.        ReadDirectory('*.*',X)
  9205.     
  9206.     See Also: ReadDirectory
  9207.     
  9208.     Category: Directory
  9209.     
  9210.  
  9211.     Computer Tyme * MarxMenu * Users Manual                 Page #154
  9212.     -----------------------------------------------------------------
  9213.     
  9214.      InFile : String
  9215.     
  9216.     When using StandardIO the input and output files by default use the
  9217.     console. The input can be overridden by setting InFile to point to a
  9218.     different file or device.
  9219.     
  9220.      Example:
  9221.        InFile = 'INPUT.TXT'
  9222.        StandardIO
  9223.     
  9224.     See Also: OutFile StandardIO
  9225.     
  9226.     Category: File
  9227.     
  9228.     
  9229.      InMem (TsrName) : Boolean
  9230.     
  9231.     Inmem returns true if the TSR you are looking for is loaded. This allow
  9232.     you to do conditionals based on the presence or absence of a TSR. It
  9233.     will also check for the names of pending batch files.
  9234.     
  9235.      Example:
  9236.        if not InMem('BTRIEVE')
  9237.           Bat 'BTRIEVE.EXE'
  9238.        endif
  9239.     
  9240.     See Also: MemoryLoc
  9241.     
  9242.     Category: Memory
  9243.     
  9244.     
  9245.      InputBlankChar
  9246.     
  9247.     InputBlankChar is used with Readln to display the input string area for
  9248.     entering information into a string. By default it is set to a space
  9249.     character but can be set to an underline or other characters to make the
  9250.     field size visible.
  9251.     
  9252.      Example:
  9253.        InputBlankChar = '_'  ;underline
  9254.        InputLength = 10
  9255.        Write 'Enter Postal Code: '
  9256.        ZipCode = Readln
  9257.     
  9258.     See Also: Readln
  9259.     
  9260.     Category: String
  9261.     
  9262.  
  9263.     Computer Tyme * MarxMenu * Users Manual                 Page #155
  9264.     -----------------------------------------------------------------
  9265.     
  9266.      InputLength
  9267.     
  9268.     When using Readln to get input from the keyboard, MarxMenu normally
  9269.     accepts data from the cursor to the edge of the current window. By
  9270.     setting InputLength to a value, MarxMenu will limit the size of the data
  9271.     to a specific length.
  9272.     
  9273.      Example:
  9274.        InputLength = 10
  9275.        Write 'Enter Postal Code: '
  9276.        ZipCode = Readln
  9277.     
  9278.     InputLength is reset to 0 after each Readln.
  9279.     
  9280.     See Also: Readln
  9281.     
  9282.     Category: String
  9283.     
  9284.     
  9285.      InputString (String)
  9286.     
  9287.     Preloads a string for the Readln command. The next Readln will have the
  9288.     InputString on the screen for you to edit or accept. Once Readln
  9289.     executes, InputString is cleared to a blank string.
  9290.     
  9291.      Example:
  9292.        InputString = ReadEnv('USERNAME')
  9293.        YourName = Readln
  9294.     
  9295.     See Also: Readln
  9296.     
  9297.     Category: String
  9298.     
  9299.     
  9300.      Insert (InsString,OrigString,Pos)
  9301.     
  9302.     Inserts a string into a string.
  9303.     
  9304.      Example:
  9305.        St = 'ABCDEF'
  9306.        Insert('123',St,4)
  9307.     
  9308.     St will become 'ABC123DEF'
  9309.     
  9310.     Category: String
  9311.     
  9312.  
  9313.     Computer Tyme * MarxMenu * Users Manual                 Page #156
  9314.     -----------------------------------------------------------------
  9315.     
  9316.      InsertMode (On/Off)
  9317.     
  9318.     Turns insert mode On and Off for Readln commands.
  9319.     
  9320.     See Also: Readln
  9321.     
  9322.     Category: Keyboard
  9323.     
  9324.     
  9325.      Int (Real) : Real
  9326.     
  9327.     Returns the integer part of a real as a real.
  9328.     
  9329.      Example:
  9330.        Int(2.36)  ;returns 2.0
  9331.     
  9332.     Category: Math Float
  9333.     
  9334.     
  9335.      Integer (Real) : Number
  9336.     
  9337.     Returns the integer part of a real as an integer. The fractional part is
  9338.     truncated.
  9339.     
  9340.      Example:
  9341.        Int(2.36)  ;returns 2
  9342.     
  9343.     Category: Math Float
  9344.     
  9345.     
  9346.      Intr (Interrupt,Registers)
  9347.     
  9348.     Intr works just like MS-DOS except that it lets you choose which
  9349.     interrupt you want to call. See MS-DOS manual for Details.
  9350.     
  9351.     See Also: MS-DOS
  9352.     
  9353.     Category: System
  9354.     
  9355.     
  9356.      InverseColor (Foreground,Background)
  9357.     
  9358.     Sets colors for inverse bar used with UseArrows command.
  9359.     
  9360.      Example:
  9361.        InverseColor Yellow Mag
  9362.     
  9363.     Category: Color
  9364.     
  9365.  
  9366.     Computer Tyme * MarxMenu * Users Manual                 Page #157
  9367.     -----------------------------------------------------------------
  9368.     
  9369.      InvertString (String)
  9370.     
  9371.     InvertString turns a string around so that characters are in reverse
  9372.     order. This allows for correct string compares and sorts in Hebrew and
  9373.     Arabic and other languages that are read from right to left.
  9374.     
  9375.      Example:
  9376.        var St
  9377.        St = 'ABCDE'
  9378.        InvertString(St)
  9379.        Writeln St        ;Returns 'EDCBA'
  9380.     
  9381.     Category: String
  9382.     
  9383.     
  9384.      IpxLoaded : Boolean
  9385.     
  9386.     Returns True if IPX is loaded
  9387.     
  9388.     Category: Novell
  9389.     
  9390.     
  9391.      Jump (Menu)
  9392.     
  9393.     Jumps to another menu and does not return to original menu.
  9394.     
  9395.      Example:
  9396.        Jump 'MYMENU'
  9397.     
  9398.     See Also: Chain
  9399.     
  9400.     Category: Execution
  9401.     
  9402.     
  9403.      KbdReady : Boolean
  9404.     
  9405.     Returns true if a Key has been pressed.
  9406.     
  9407.     See Also: ReadKey
  9408.     
  9409.     Category: Keyboard
  9410.     
  9411.     
  9412.      KeyEvent (Key) : Procedure
  9413.     
  9414.     KeyEvent allows you to assign a procedure to a key so that any time the
  9415.     key is pressed the procedure is called. Setting a key to Nil clears the
  9416.     key. This command can be used to create global OnKey.
  9417.     
  9418.      Example:
  9419.         KeyEvent(F1) = loc ShowHelp   ;runs ShowHelp when F1 is pressed
  9420.         KeyEvent(F1) = Nil            ;clears F1 key
  9421.         Run KeyEvent(F1)              ;executes procedure assigned to F1
  9422.     
  9423.  
  9424.     Computer Tyme * MarxMenu * Users Manual                 Page #158
  9425.     -----------------------------------------------------------------
  9426.     
  9427.     KeyEvents are attached to the current window. New windows inherit the
  9428.     KeyEvents from their parent window. But if you create a new KeyEvent in
  9429.     a window and then erase that window the new KeyEvent is erased and the
  9430.     KeyEvents of the parent window are restored. You can have completely
  9431.     different KeyEvents for each window and those events become active
  9432.     whenever the window becomes active.
  9433.     
  9434.     See Also: ClearKeyEvents
  9435.     
  9436.     Category: Execution Event
  9437.     
  9438.     
  9439.      KeyFromMouse : Boolean
  9440.     
  9441.     Normally mouse activity is translated into keystrokes. This variable is
  9442.     set to true if the keystroke came from the mouse.
  9443.     
  9444.     See Also: KbdReady ReadKey
  9445.     
  9446.     Category: MouseControl
  9447.     
  9448.     
  9449.      KeySave : String
  9450.     
  9451.     Stores your keystrokes that you pressed to get to the menu level where
  9452.     you are at. KeySave is passed to DOS using the SET KSV= command to store
  9453.     your position in the menu system. To make this work, you must execute
  9454.     SavePosition On.
  9455.     
  9456.     This variable can be set by you to force MarxMenu to return to a place
  9457.     in the menu other than where you are. This allows MarxMenu to suggest a
  9458.     next step.
  9459.     
  9460.     See Also: SavePosition
  9461.     
  9462.     Category: String Environment Execution
  9463.     
  9464.     
  9465.      KillMusic
  9466.     
  9467.     This command stops the music and de-allocates the memory used by the
  9468.     music buffer.
  9469.     
  9470.     Category: Music
  9471.     
  9472.     
  9473.      LastDrive : String
  9474.     
  9475.     Returns the drive letter of the last local drive in the system as set by
  9476.     CONFIG.SYS. By default, this is drive letter E. On a Novell network the
  9477.     drive after LastDrive is the first network drive.
  9478.     
  9479.  
  9480.     Computer Tyme * MarxMenu * Users Manual                 Page #159
  9481.     -----------------------------------------------------------------
  9482.     
  9483.     Category: Novell System
  9484.     
  9485.     
  9486.      LastKey : String
  9487.     
  9488.     LastKey returns the last key that was typed at the keyboard. This can be
  9489.     used after a Readln to determine if the ESC key was pressed or perhaps
  9490.     the up or down arrow keys.
  9491.     
  9492.     Sometimes after the press of an ESC key, MarxMenu wants to exit more
  9493.     levels than you want it to. This can be controlled by setting LastKey =
  9494.     ' ' to stop the abort process.
  9495.     
  9496.     See Also: Readln OnKey
  9497.     
  9498.     Category: String
  9499.     
  9500.     
  9501.      Left (String,Count) : String
  9502.     
  9503.     Returns string starting at the beginning for count characters.
  9504.     
  9505.      Example:
  9506.        Left('ABCDEF',3)   ;returns 'ABC'
  9507.     
  9508.     Category: String
  9509.     
  9510.     
  9511.      Length (String) : Number
  9512.     
  9513.     Returns the length of the string or sets the length of a string.
  9514.     
  9515.      Example:
  9516.        Length('ABCD') returns 4.
  9517.     
  9518.      Example:
  9519.        var St
  9520.          St = '123456'
  9521.          Length(St) = 3
  9522.          Writeln St      ;this produces '123'
  9523.     
  9524.     If you set the length longer than the original string the string is
  9525.     padded with blanks on the end.
  9526.     
  9527.     Category: String
  9528.     
  9529.  
  9530.     Computer Tyme * MarxMenu * Users Manual                 Page #160
  9531.     -----------------------------------------------------------------
  9532.     
  9533.      Ln (Real) : Real
  9534.     
  9535.     Returns the Natural Logarithm of a real.
  9536.     
  9537.      Example:
  9538.        Exp(Ln(5) * 3) = 125
  9539.     
  9540.     See Also: Exp
  9541.     
  9542.     Category: Math Float
  9543.     
  9544.     
  9545.      Loc (Procedure or Variable)
  9546.     
  9547.     When used with a procedure, Loc returns the location of a procedure for
  9548.     storing in a variable. The variable is later executed using the Run
  9549.     command.
  9550.     
  9551.     When used with a variable, Loc returns the location of a variable rather
  9552.     than it's contents. Thus B = Loc A sets B to point to A.
  9553.     
  9554.      Example:
  9555.        Var A B
  9556.           B = Loc A
  9557.           B = 9
  9558.           Writeln A  ;returns 9
  9559.     
  9560.      Example:
  9561.        Var A
  9562.     
  9563.      TestLoc (Loc A)
  9564.      Writeln A ;returns 9
  9565.     
  9566.      Procedure TestLoc (B)
  9567.         B = 9
  9568.      EndProc
  9569.     
  9570.     The rule is that all indirect location references are resolved in the
  9571.     process of evaluating an expression.
  9572.     
  9573.      Example:
  9574.        Var A B C D
  9575.           B = Loc A
  9576.           C = Loc B
  9577.           D = Loc C
  9578.           D = 9
  9579.           Writeln A   ; Returns 9
  9580.     
  9581.     As you would expect, qualifiers and multidimensional array addressing
  9582.     works with indirect addressing.
  9583.     
  9584.  
  9585.     Computer Tyme * MarxMenu * Users Manual                 Page #161
  9586.     -----------------------------------------------------------------
  9587.     
  9588.      Example:
  9589.        var A B C D E
  9590.     
  9591.        A[3] = 12
  9592.        C = 3
  9593.        B = Loc C
  9594.     
  9595.        D = Loc E
  9596.        D[7] = 8
  9597.     
  9598.        TestLoc (Loc A[B])
  9599.        Writeln A[B,9,E[7]]
  9600.     
  9601.        Procedure TestLoc (X)
  9602.           Writeln X
  9603.           X[9,D[7]] = 6
  9604.           Writeln X[9,E[7]]
  9605.        EndProc
  9606.     
  9607.     See Also: Run Actual
  9608.     
  9609.     Category: Variable
  9610.     
  9611.     
  9612.      Local : Array
  9613.     
  9614.     Parameters passed to procedures and local variables in a procedure are
  9615.     elements of an array of local variables. By using the word Local you can
  9616.     address passed parameters and local variables as if they were elements
  9617.     of an array.
  9618.     
  9619.      Example:
  9620.        Procedure Test (A,B)
  9621.        var C,D
  9622.           Writeln A B C D
  9623.        EndProc
  9624.     
  9625.     In the above example the variable A is the same as Local[1], B is
  9626.     Local[2], C is Local[3], and D is Local[4]. The Local command can be
  9627.     used to pass a varying number of parameters to a procedure as follows:
  9628.     
  9629.      Example:
  9630.        Procedure Test
  9631.           Loop Local
  9632.              Writeln Local[LoopIndex]
  9633.           endloop
  9634.        EndProc
  9635.     
  9636.        Test (1,2,3,4)
  9637.     
  9638.  
  9639.     Computer Tyme * MarxMenu * Users Manual                 Page #162
  9640.     -----------------------------------------------------------------
  9641.     
  9642.     This allows the procedure Test to accept and process any number of
  9643.     parameters you wish to pass to it.
  9644.     
  9645.     Category: Array
  9646.     
  9647.     
  9648.      LockWord (word)
  9649.     
  9650.     Sets a default word for the console activated keyboard lock. When the
  9651.     screen goes blank, the user has to type the LockWord to unblank the
  9652.     screen. This is a security feature so that if a user leaves the menu
  9653.     unattended, it prevents others from tampering with the system.
  9654.     
  9655.      Example:
  9656.        LockWord = 'secret'
  9657.     
  9658.     See Also: LogoffTime BlankTime UseNovPassword
  9659.     
  9660.     Category: Display
  9661.     
  9662.     
  9663.      Logoff
  9664.     
  9665.     Logoff logs you off the network the same way that LogoffTime does except
  9666.     it does it immediately. See LogoffTime for details as to how.
  9667.     
  9668.      Example:
  9669.        OnKey 'L'
  9670.          |Logoff   ;note the use of the '|' under the OnKey statement
  9671.     
  9672.     See Also: LogoffTime
  9673.     
  9674.     Category: Execution
  9675.     
  9676.     
  9677.      LogoffTime : Number
  9678.     
  9679.     MarxMenu supports automatic logoff after a number of minutes of
  9680.     inactivity set by LogoffTime. This only has effect while you are in the
  9681.     menu and not while an application is running. It is set as follows:
  9682.     
  9683.      LogoffTime = 5 ;sets time to 5 minutes
  9684.     
  9685.     Setting LogoffTime to 0 disables this feature.
  9686.     
  9687.     On a Novell network the current drive is changed to the first network
  9688.     drive letter. Any map roots on this drive are removed. Then it changes
  9689.     to the \LOGIN directory. Typically the current directory will be set to
  9690.     F:\LOGIN.
  9691.     
  9692.     MarxMenu will first look for a batch file in the \LOGIN directory called
  9693.     OFF.BAT. If it doesn't find it, MarxMenu will look for OFF.BAT on the
  9694.     PATH. If this isn't found, MarxMenu will look for LOGOFF.EXE. If this
  9695.     isn't found, then MarxMenu will look for LOGOUT.COM.
  9696.     
  9697.  
  9698.     Computer Tyme * MarxMenu * Users Manual                 Page #163
  9699.     -----------------------------------------------------------------
  9700.     
  9701.     LOGOFF.EXE and LOGOUT.COM are executed by stuffing the keyboard buffer.
  9702.     
  9703.     The best way to use this feature is to create an OFF.BAT file in your
  9704.     \LOGIN directory or on the PATH.
  9705.     
  9706.     Logging off is a tricky process and requires that everything is done
  9707.     right in order for it to work. If strange things happen use ECHO ON and
  9708.     PAUSE in your batch files in order to watch what is happening.
  9709.     
  9710.     See Also: LockWord Logoff
  9711.     
  9712.     Category: Execution
  9713.     
  9714.     
  9715.      Logout
  9716.     
  9717.     Same as Logoff.
  9718.     
  9719.     See Also: Logoff LogoffTime
  9720.     
  9721.     Category: Execution
  9722.     
  9723.     
  9724.      LongestLine
  9725.     
  9726.     This system variable is set whenever a text file is read using the
  9727.     ReadTextFile command. LongestLine is set to the length of the longest
  9728.     line in the file.
  9729.     
  9730.      Example:
  9731.        var temp, temp2
  9732.        write "Name of file to scan: "
  9733.        temp=readln
  9734.        ReadTextFile(temp,temp2)
  9735.        writeln " "
  9736.        write "The longest line in " temp " is "
  9737.        writeln Longestline " Characters."
  9738.     
  9739.     See Also: ReadTextFile
  9740.     
  9741.     Category: File String
  9742.     
  9743.     
  9744.      Loop
  9745.     
  9746.     MarxMenu has a looping structure that lets you execute a piece of code a
  9747.     specific number of times. It is used as follows:
  9748.     
  9749.      Example:
  9750.        Loop 8
  9751.           Writeln 'Pass Number ' LoopIndex
  9752.        EndLoop
  9753.     
  9754.  
  9755.     Computer Tyme * MarxMenu * Users Manual                 Page #164
  9756.     -----------------------------------------------------------------
  9757.     
  9758.     You start with LOOP (Number) which specifies the number of times to
  9759.     execute the code between LOOP and ENDLOOP. There are 2 variables
  9760.     available here for loop control. LoopIndex starts at 1 and is
  9761.     incremented at each EndLoop. When LoopIndex becomes greater than
  9762.     LoopLimit, the loop exits. LoopIndex and LoopLimit refer to the
  9763.     innermost loop.
  9764.     
  9765.     As loops are nested LoopIndexes and LoopLimits are kept in two arrays;
  9766.     LoopIndexStack and LoopLimitStack. There is also a variable called
  9767.     LoopLevel which points to the current loop parameters.
  9768.     
  9769.      Thus:
  9770.        LoopIndex is the same as LoopIndexStack[LoopLevel]
  9771.        LoopLimit is the same as LoopLimitStack[LoopLevel]
  9772.     
  9773.     You may therefore access outer loop parameters through the loop stacks.
  9774.     For instance LoopIndexStack[LoopLevel - 1] would refer to the second
  9775.     innermost loop index. LoopIndexStack[1] refers to the outermost loop.
  9776.     
  9777.     The loop variables can be read and written to so you can adjust the
  9778.     looping parameters while inside the loop. You can even adjust the
  9779.     parameters of outer loops.
  9780.     
  9781.     You can also pass an array to a loop instead of a number. If an array is
  9782.     passed MarxMenu will loop for the number of elements in that array.
  9783.     
  9784.      Example:
  9785.        Var X
  9786.        ReadTextFile('MARXREAD.ME',X)
  9787.        OpenPrinter
  9788.     
  9789.        ;Loop X is the same as Loop NumberOfElements X
  9790.     
  9791.        Loop X
  9792.           PrintLn X[LoopIndex]
  9793.        EndLoop
  9794.        ClosePrinter
  9795.     
  9796.     See Also: EndLoop LoopIndex LoopLimit LoopLevel
  9797.     
  9798.     Category: Conditional
  9799.     
  9800.     
  9801.      LoopIndex : Number
  9802.     
  9803.     Returns the index of the loop you are in.
  9804.     
  9805.      Example:
  9806.        Loop 5
  9807.           Writeln LoopIndex    ;writes the numbers 1 to 5
  9808.        EndLoop
  9809.     
  9810.  
  9811.     Computer Tyme * MarxMenu * Users Manual                 Page #165
  9812.     -----------------------------------------------------------------
  9813.     
  9814.     See Also: Loop EndLoop LoopLimit LoopLevel
  9815.     
  9816.     Category: Conditional
  9817.     
  9818.     
  9819.      LoopLevel : Number
  9820.     
  9821.     Returns the number of nested loops currently running. This includes all
  9822.     nested loops not just the current procedure.
  9823.     
  9824.     See Also: Loop EndLoop LoopLimit LoopIndex
  9825.     
  9826.     Category: Conditional
  9827.     
  9828.     
  9829.      LoopLimit : Number
  9830.     
  9831.     Returns the upper limit of the loop you are in.
  9832.     
  9833.      Example:
  9834.        Loop 5
  9835.           Writeln LoopLimit   ;writes the number 5, 5 times.
  9836.        EndLoop
  9837.     
  9838.     See Also: Loop EndLoop LoopIndex LoopLevel
  9839.     
  9840.     Category: Conditional
  9841.     
  9842.     
  9843.      LowerCase (String) : String
  9844.     
  9845.     Returns the lower case of the string according to international
  9846.     character rules.
  9847.     
  9848.      Example:
  9849.        Writeln LowerCase('ABCDE')   ;returns 'abcde'
  9850.     
  9851.     See Also: UpperCase
  9852.     
  9853.     Category: String International
  9854.     
  9855.     
  9856.      LowWord (Number) : Number
  9857.     
  9858.     Returns the value of the lower 16 bits of a number.
  9859.     
  9860.      Example:
  9861.        LowWord -1   ;returns 255
  9862.     
  9863.     See Also: HighWord
  9864.     
  9865.     Category: Math
  9866.     
  9867.  
  9868.     Computer Tyme * MarxMenu * Users Manual                 Page #166
  9869.     -----------------------------------------------------------------
  9870.     
  9871.      MachineName : String
  9872.     
  9873.     This reads or sets the MachineName for NetBios networks.
  9874.     
  9875.      Example:
  9876.        MachineName = IBM   ;sets the MachineName
  9877.        Writeln MachineName ;displays the MachineName
  9878.     
  9879.     Category: Novell MSNet Vines
  9880.     
  9881.     
  9882.      MakeListEntry (Local Name, Server Name)
  9883.     
  9884.     MakeListEntry adds an entry to the network redirection list for
  9885.     assigning drive letters to network servers or redirecting printer output
  9886.     to network printers.
  9887.     
  9888.      Example:
  9889.        MakeListEntry ('P:','\\TYME\SYS\PUBLIC')
  9890.        MakeListEntry ('LPT1','\\TYME\LASER')
  9891.     
  9892.     See Also: AssignList CancelListEntry
  9893.     
  9894.     Category: Novell MSNet Vines
  9895.     
  9896.     
  9897.      MarxVersion : String
  9898.     
  9899.     Returns the version number of the MarxMenu you are running.
  9900.     
  9901.     Category: String
  9902.     
  9903.     
  9904.      MasterEnvironment
  9905.     
  9906.     MasterEnvironment selects the Master Environment for use with
  9907.     environment access commands.
  9908.     
  9909.     See Also: ReadEnv SetEnv ReadEnvironment ShellEnvironment
  9910.     See Also: CurrentEnvironment ParentEnvironment
  9911.     
  9912.     Category: Environment
  9913.     
  9914.     
  9915.      Max (Num,Num) : Num
  9916.     
  9917.     Returns the largest of two numbers or strings.
  9918.     
  9919.      Example:
  9920.        Writeln Max(2,3)     ;returns 3
  9921.     
  9922.     See Also: Min
  9923.     
  9924.  
  9925.     Computer Tyme * MarxMenu * Users Manual                 Page #167
  9926.     -----------------------------------------------------------------
  9927.     
  9928.     Category: Math String Float
  9929.     
  9930.     
  9931.      MatrixInvert (2D Array)
  9932.     
  9933.     MatrixInvert reverses the coordinates of a 2-dimensional array. This is
  9934.     useful when used with ReadAscTextFile to reverse the field and record
  9935.     layout.
  9936.     
  9937.      Example:
  9938.        var Data NameList
  9939.     
  9940.        ReadAscTextFile('PHONE.LST',Data)
  9941.        MatrixInvert Data
  9942.        NameList = Data[1]
  9943.     
  9944.     Category: Array
  9945.     
  9946.     
  9947.      McpClass : Number
  9948.     
  9949.     Returns the math coprocessor class.
  9950.     
  9951.      0 = None
  9952.      1 = 8078
  9953.      2 = 80287
  9954.      3 = 80387
  9955.      4 = 80487 (486 CPU)
  9956.     
  9957.     See Also: McpName CpuClass
  9958.     
  9959.     Category: System
  9960.     
  9961.     
  9962.      McpName : String
  9963.     
  9964.     Returns the name of the marh coprocessor. If there is no math
  9965.     coprocessor then an empty string is returned. Names include:
  9966.     
  9967.       8078, 80287, 80387, 80487
  9968.     
  9969.     See Also: McpClass CpuName
  9970.     
  9971.     Category: System
  9972.     
  9973.     
  9974.      Mem (seg,ofs) : Number
  9975.     
  9976.     Returns the byte at memory location seg:ofs or lets you write to the
  9977.     byte at seg:ofs.
  9978.     
  9979.      Example:
  9980.        X = Mem(40,5)  ;reads memory into X
  9981.        Mem(40,5) = X  ;writes X into memory
  9982.     
  9983.  
  9984.     Computer Tyme * MarxMenu * Users Manual                 Page #168
  9985.     -----------------------------------------------------------------
  9986.     
  9987.     See Also: MemW MemL
  9988.     
  9989.     Category: Memory
  9990.     
  9991.     
  9992.      MemL (seg,ofs) : Number
  9993.     
  9994.     Returns the long integer at memory location seg:ofs or lets you write to
  9995.     the byte at seg:ofs.
  9996.     
  9997.      Example:
  9998.        X = MemL(40,5)  ;reads memory into X
  9999.        MemL(40,5) = X  ;writes X into memory
  10000.     
  10001.     See Also: Mem MemW
  10002.     
  10003.     Category: Memory
  10004.     
  10005.     
  10006.      MemSize : Number
  10007.     
  10008.     Returns total memory size in K. (640 = 640k)
  10009.     
  10010.     Category: Memory
  10011.     
  10012.     
  10013.      MemW (seg,ofs) : Number
  10014.     
  10015.     Returns the word at memory location seg:ofs or lets you write to the
  10016.     byte at seg:ofs.
  10017.     
  10018.      Example:
  10019.        X = MemW(40,5)  ;reads memory into X
  10020.        MemW(40,5) = X  ;writes X into memory
  10021.     
  10022.     See Also: Mem MemL
  10023.     
  10024.     Category: Memory
  10025.     
  10026.     
  10027.      MemoryLoc (TsrName) : Number
  10028.     
  10029.     MemoryLoc returns the memory segment address of the TSR name you
  10030.     specify. If the TSR isn't in memory it returns a 0.
  10031.     
  10032.      Example:
  10033.        Writeln 'Btrieve is at $' HexString(MemoryLoc('BTRIEVE'),4)
  10034.     
  10035.     See Also: InMem
  10036.     
  10037.     Category: Memory
  10038.     
  10039.  
  10040.     Computer Tyme * MarxMenu * Users Manual                 Page #169
  10041.     -----------------------------------------------------------------
  10042.     
  10043.      MenuFileName : String
  10044.     
  10045.     This returns the name of the current menu file including the complete
  10046.     path. It can be used under an OnKey statement to edit the current menu
  10047.     as follows:
  10048.     
  10049.      Example:
  10050.        OnKey 'E'
  10051.          EDIT MenuFileName
  10052.     
  10053.     Category: String
  10054.     
  10055.     
  10056.      MenuKeyBuffer
  10057.     
  10058.     This is an internal MarxMenu variable. It is where the environment
  10059.     variable KSV= is read. Characters in this string variable are treated as
  10060.     if someone had typed them from the keyboard.
  10061.     
  10062.     This variable can be set to blank in order to override the effects of
  10063.     SET KSV= or can be set to a different value in order to automatically
  10064.     make selections as if they were typed in.
  10065.     
  10066.     See Also: SavePosition KeySave
  10067.     
  10068.     Category: Keyboard
  10069.     
  10070.     
  10071.      MhsDirectory : String
  10072.     
  10073.     Returns the directory of MHS.
  10074.     
  10075.      Example:
  10076.        Writeln MhsDirectory   ; '\\TYME\SYS\MHS'
  10077.     
  10078.     Category: MHS Directory
  10079.     
  10080.     
  10081.      MhsMailDirectory : String
  10082.     
  10083.     Returns the mail directory of MHS.
  10084.     
  10085.      Example:
  10086.        Writeln MhsMailDirectory   ; '\\TYME\SYS\MHS\MAIL'
  10087.     
  10088.     Category: MHS Directory
  10089.     
  10090.  
  10091.     Computer Tyme * MarxMenu * Users Manual                 Page #170
  10092.     -----------------------------------------------------------------
  10093.     
  10094.      MhsReadFile (FileName,Header,Message)
  10095.     
  10096.     MhsReadFile reads FileName into two arrays. The Header array contains the
  10097.     MHS message header. The Message array contains the MHS message.
  10098.     
  10099.      Example:
  10100.        var MailFiles Mail Headers X
  10101.     
  10102.        WholeFileNames
  10103.        ReadDirectory(MhsUserDirectory + '\MHS\*.',MailFiles)
  10104.     
  10105.        Loop MailFiles
  10106.           MhsReadFile(MailFiles[LoopIndex],Mail[LoopIndex],Headers[LoopIndex])
  10107.        EndLoop
  10108.     
  10109.        Loop Mail
  10110.           X = LoopIndex
  10111.           Loop Headers[X]
  10112.              Writeln Headers[X,LoopIndex]
  10113.           EndLoop
  10114.     
  10115.           Loop Mail[X]
  10116.              Writeln Mail[X,LoopIndex]
  10117.           EndLoop
  10118.        EndLoop
  10119.     
  10120.     Category: MHS
  10121.     
  10122.     
  10123.      MhsSendDirectory : String
  10124.     
  10125.     Returns the directory of MHS where messages are placed to be sent.
  10126.     
  10127.      Example:
  10128.        Writeln MhsSendDirectory   ; '\\TYME\SYS\MHS\MAIL\SND'
  10129.     
  10130.     Category: MHS Directory
  10131.     
  10132.     
  10133.      MhsUserDirectory : String
  10134.     
  10135.     Returns the user directory of MHS.
  10136.     
  10137.      Example:
  10138.        Writeln MhsMailDirectory   ; '\\TYME\SYS\MHS\MAIL\USERS\MARC'
  10139.     
  10140.     Category: MHS Directory
  10141.     
  10142.  
  10143.     Computer Tyme * MarxMenu * Users Manual                 Page #171
  10144.     -----------------------------------------------------------------
  10145.     
  10146.      Mid (string,pos,count) : String
  10147.     
  10148.     Returns a string starting at pos for count.
  10149.     
  10150.      Example:
  10151.        Writeln Mid('ABCDEFG',2,3)     ;returns 'CDE'
  10152.     
  10153.     Mid also allows you to write into a string at a specified point.
  10154.     
  10155.      Example:
  10156.        St = 'ABCDEFG'
  10157.        Mid(St,3) = '1'           X becomes 'AB1DEFG'
  10158.        Mid(St,3) = '123'         X becomes 'AB123FG'
  10159.        Mid(St,3) = '1234567'     X becomes 'AB1234567'
  10160.        Mid(St,9) = '12'          X becomes 'ABCDEFG 12'
  10161.     
  10162.     Category: String
  10163.     
  10164.     
  10165.      Min (Num,Num) : Num
  10166.     
  10167.     Returns the smallest of two numbers or strings.
  10168.     
  10169.      Example:
  10170.        Writeln Min(2,3)     ;returns 2
  10171.     
  10172.     See Also: Max
  10173.     
  10174.     Category: Math String Float
  10175.     
  10176.     
  10177.      MinorDosVersion : Number
  10178.     
  10179.     Returns the minor DOS version number.
  10180.     
  10181.     See Also: DosVersion DosVersionString
  10182.     
  10183.     Category: System
  10184.     
  10185.     
  10186.      Minute : Number
  10187.     
  10188.     Returns the current minute.
  10189.     
  10190.     Category: Time
  10191.     
  10192.  
  10193.     Computer Tyme * MarxMenu * Users Manual                 Page #172
  10194.     -----------------------------------------------------------------
  10195.     
  10196.      MinuteOf (Date) : Number
  10197.     
  10198.     Returns the minute of a date. If Date is passed as a string it is
  10199.     converted automatically.
  10200.     
  10201.      Example:
  10202.        MinuteOf '6:15 pm'  ;returns 15
  10203.     
  10204.     See Also: TimeOf BadDate
  10205.     
  10206.     Category: Time
  10207.     
  10208.     
  10209.      MkDir (String)
  10210.     
  10211.     Makes a new directory. The FileResult variable returns the DOS result
  10212.     error code. A zero in FileResult indicates success.
  10213.     
  10214.      Example:
  10215.        MkDir 'C:\MARX'
  10216.     
  10217.     See Also: ChDir RmDir
  10218.     
  10219.     Category: File Directory
  10220.     
  10221.     
  10222.      Mod : Operator
  10223.     
  10224.     Returns the remainder of the division of two numbers.
  10225.     
  10226.      Example:
  10227.        25 mod 7 = 4
  10228.     
  10229.     Category: Math
  10230.     
  10231.     
  10232.      ModifyPath
  10233.     
  10234.     The MarxMenu directory should be in the search path. This is because if
  10235.     you change directories, MarxMenu may not be able to find the menu files.
  10236.     MarxMenu will now test the PATH= environment variable before it writes
  10237.     the batch file to execute a program. If the MarxMenu path is not
  10238.     included, MarxMenu will add the path to the Master Environment if it
  10239.     can.
  10240.     
  10241.     If for some reason you don't want to allow MarxMenu to modify the master
  10242.     environment, use the command:
  10243.     
  10244.      ModifyPath Off
  10245.     
  10246.     Category: Environment
  10247.     
  10248.  
  10249.     Computer Tyme * MarxMenu * Users Manual                 Page #173
  10250.     -----------------------------------------------------------------
  10251.     
  10252.      Month : Number
  10253.     
  10254.     Returns current month.
  10255.     
  10256.     Category: Time
  10257.     
  10258.     
  10259.      MonthOf (Date) : Number
  10260.     
  10261.     Returns the month of a date. If Date is passed as a string it is
  10262.     converted automatically.
  10263.     
  10264.      Example:
  10265.        MonthOf 'April'   ;returns 4
  10266.     
  10267.     See Also: TimeOf BadDate
  10268.     
  10269.     Category: Time
  10270.     
  10271.     
  10272.      Mouse
  10273.     
  10274.     MarxMenu normally uses the mouse if present. If you don't want to use
  10275.     the mouse you can use the command:
  10276.     
  10277.      Mouse Off
  10278.     
  10279.     To turn the mouse back on type:
  10280.     
  10281.      Mouse On
  10282.     
  10283.     The mouse is actually switched on and off at the point when MarxMenu
  10284.     waits at the keyboard for a keypress.
  10285.     
  10286.     Mouse Sensitivity can be set for individual workstations on a network by
  10287.     setting environment variables MouseX and MouseY as follows:
  10288.     
  10289.      Set MouseX=15
  10290.      Set MouseY=25
  10291.     
  10292.     See Also: MouseHorizontal MouseVertical
  10293.     
  10294.     Category: System MouseControl
  10295.     
  10296.     
  10297.      MouseHorizontal (Number)
  10298.     
  10299.     Controls the horizontal sensitivity of the mouse. The larger the number,
  10300.     the less sensitive the mouse. Default is 25.
  10301.     
  10302.      Example:
  10303.        MouseHorizontal = 25
  10304.     
  10305.  
  10306.     Computer Tyme * MarxMenu * Users Manual                 Page #174
  10307.     -----------------------------------------------------------------
  10308.     
  10309.     See Also: MouseVertical Mouse
  10310.     
  10311.     Category: MouseControl
  10312.     
  10313.     
  10314.      MouseIRQ : Number
  10315.     
  10316.     Returns the interrupt number that the mouse driver is using.
  10317.     
  10318.     Category: System MouseControl
  10319.     
  10320.     
  10321.      MouseType : String
  10322.     
  10323.     Reurns the type of mouse being used. If a mouse driver isn't present it
  10324.     returns an empty string.
  10325.     
  10326.      Mouse Types: BUS, SERIAL, HP, INPORT, PS2, UNKNOWN
  10327.     
  10328.     Category: System MouseControl
  10329.     
  10330.     
  10331.      MouseVersion : String
  10332.     
  10333.     MouseVersion returns the version of the mouse driver you are using. If a
  10334.     mouse driver isn't present it returns an empty string.
  10335.     
  10336.     Category: System MouseControl
  10337.     
  10338.     
  10339.      MouseVertical (Number)
  10340.     
  10341.     Controls the vertical sensitivity of the mouse. The larger the number,
  10342.     the less sensitive the mouse. Default is 15.
  10343.     
  10344.      Example:
  10345.        MouseVertical = 15
  10346.     
  10347.     See Also: MouseHorizontal Mouse
  10348.     
  10349.     Category: MouseControl
  10350.     
  10351.     
  10352.      MoveWindow (Horizontal,Vertical)
  10353.     
  10354.     Moves top window. If Horizontal is negative motion is left. If
  10355.     Vertical is negative, motion is up.
  10356.     
  10357.      Example:
  10358.        MoveWindow -3 4 ;moves window 3 spaces left and 4 down
  10359.     
  10360.     Category: Display
  10361.     
  10362.  
  10363.     Computer Tyme * MarxMenu * Users Manual                 Page #175
  10364.     -----------------------------------------------------------------
  10365.     
  10366.      MsDos (Registers)
  10367.     
  10368.     MsDos calls the interrupt 21h system call using values passed in an
  10369.     array of 10 numbers. The array is set up using predefined Qualifiers
  10370.     that represent the registers that are passed. These qualifiers are:
  10371.     
  10372.      AX BX CX DX DI SI DS ES BP FL
  10373.     
  10374.      Example: Get Current Drive
  10375.        var Reg
  10376.        Reg.AX = $1900
  10377.        MsDos (Reg)
  10378.        Writeln Char(LowWord(Reg.AX) + 1) ':'     ;writes C:
  10379.     
  10380.     See Also: Intr
  10381.     
  10382.     Category: System
  10383.     
  10384.     
  10385.      MxCmd : String
  10386.     
  10387.     This is an internal string variable that is written to the environment
  10388.     variable MXCMD. This variable can be written to control what MarxMenu
  10389.     will write to the Shell Environment. If this variable is written to, it
  10390.     overrides anything that MarxMenu automatically writes.
  10391.     
  10392.      Example:
  10393.        OnKey 'A'
  10394.          |MxCmd = 'SHUTDOWN.BAT'
  10395.          |ExitMenu
  10396.     
  10397.     Category: Environment String Execution
  10398.     
  10399.     
  10400.      NamePart (String) : String
  10401.     
  10402.     Returns the name part of a file name.
  10403.     
  10404.      Example:
  10405.        NamePart ('C:\MARX\MARXMENU.EXE') ;returns MARXMENU
  10406.     
  10407.     See Also: Extension PathPart FilePart
  10408.     
  10409.     Category: String
  10410.     
  10411.  
  10412.     Computer Tyme * MarxMenu * Users Manual                 Page #176
  10413.     -----------------------------------------------------------------
  10414.     
  10415.      NetworkVersion : Boolean
  10416.     
  10417.     Returns true if you are running the network version of MarxMenu.
  10418.     
  10419.     Category: Misc
  10420.     
  10421.     
  10422.      NextWord (String) : String
  10423.     
  10424.     This command returns the next logical word of a string variable and
  10425.     removes the string from the original string.
  10426.     
  10427.      Example:
  10428.        StringA = 'one two three'
  10429.        StringB = NextWord(StringA)
  10430.     
  10431.        StringB contains 'one'
  10432.        StringA contains 'two three'
  10433.     
  10434.     Category: String
  10435.     
  10436.     
  10437.      Nil
  10438.     
  10439.     Nil returns a zero or empty value for any type data. As a boolean Nil
  10440.     returns False. As a number Nil returns 0. As a string, Nil returns an
  10441.     empty string.
  10442.     
  10443.     Category: Constants
  10444.     
  10445.     
  10446.      NoBoxBorder
  10447.     
  10448.     Use this command if you don't want a border around the menus.
  10449.     
  10450.     See Also: SingleLineBox DoubleLineBox BlockBox CustomBox
  10451.     
  10452.     Category: Display
  10453.     
  10454.     
  10455.      NoExit
  10456.     
  10457.     Prevents ESC key from allowing you to exit menu. To exit, you must
  10458.     execute the ExitMenu command. This could be password protected.
  10459.     
  10460.     See Also: ExitMenu
  10461.     
  10462.     Category: Execution
  10463.     
  10464.  
  10465.     Computer Tyme * MarxMenu * Users Manual                 Page #177
  10466.     -----------------------------------------------------------------
  10467.     
  10468.      Not : Operator
  10469.     
  10470.     Returns logical Not if operators are boolean; or bitwise Not if
  10471.     operators are numeric.
  10472.     
  10473.      Example:
  10474.        if Not ExistDir('C:\MARX') then Writeln 'Marx not Installed!'
  10475.        Not(0) = -1
  10476.     
  10477.     See Also: And Or Xor
  10478.     
  10479.     Category: Math Boolean
  10480.     
  10481.     
  10482.      NotesLeft : Number
  10483.     
  10484.     NotesLeft returns the number of notes left in the music buffer to play.
  10485.     The music buffer is self-adjusting and can store a day's worth of music.
  10486.     
  10487.     Category: Music
  10488.     
  10489.     
  10490.      NotesPlayed : Number
  10491.     
  10492.     Returns the number of notes played. If NotesLeft ever reaches 0,
  10493.     NotesPlayed also is set to 0.
  10494.     
  10495.     Category: Music
  10496.     
  10497.     
  10498.      NovAccountExpDate (UserName) : Date
  10499.     
  10500.     Returns the Novell account expiration date. You must be logged in to be
  10501.     able to read this.
  10502.     
  10503.      Example:
  10504.        DaysToExpire = NovAccountExpDate(UserName) - Today / SecondsInDay
  10505.     
  10506.     Category: Bindery Time
  10507.     
  10508.     
  10509.      NovAddUserToGroup (User,Group)
  10510.     
  10511.     Adds a user to a group and updates GROUPS_I'M_IN, GROUP_MEMBERS, and
  10512.     SECURITY_EQUALS properties.
  10513.     
  10514.      Example:
  10515.        NovAddUserToGroup ('MARC','EVERYONE')
  10516.     
  10517.     See Also: NovRemoveUserFromGroup
  10518.     
  10519.     Category: Bindery
  10520.     
  10521.  
  10522.     Computer Tyme * MarxMenu * Users Manual                 Page #178
  10523.     -----------------------------------------------------------------
  10524.     
  10525.      NovAddToSet (Obj,Prop,ObjType,MemberObj,MemberType)
  10526.     
  10527.     Adds an object to a property that is a set property.
  10528.     
  10529.      Example: Add a user to a group
  10530.        NovAddToSet(Group,'GROUP_MEMBERS',2,User,1)
  10531.        NovAddToSet(User,"GROUPS_I'M_IN",1,Group,2)
  10532.        NovAddToSet(User,'SECURITY_EQUALS',1,Group,2)
  10533.     
  10534.     See Also: NovDeleteFromSet NovSetProperty
  10535.     
  10536.     Category: Bindery
  10537.     
  10538.     
  10539.      NovAttach (Server)
  10540.     
  10541.     NovAttach is used to create a software link between you and a server,
  10542.     usually a second server. It must be followed by a NovLogin command to
  10543.     log you into the server if you want to do anything useful there.
  10544.     
  10545.      Example:
  10546.        NovAttach 'TYME'
  10547.     
  10548.     See Also: NovDetach
  10549.     
  10550.     Category: Novell
  10551.     
  10552.     
  10553.      NovAttachedServers (Array)
  10554.     
  10555.     Returns a list of servers you are already attached to.
  10556.     
  10557.      Example:
  10558.        var Servers
  10559.        NovAttachedServers(Servers)
  10560.        Loop Servers
  10561.           Writeln Servers[LoopIndex]
  10562.        EndLoop
  10563.     
  10564.     See Also: NovServers
  10565.     
  10566.     Category: Novell Array
  10567.     
  10568.     
  10569.      NovAutoDetach (On/Off)
  10570.     
  10571.     When using MarxMenu to log into a Novell network, MarxMenu will detach
  10572.     from the file server, if NovAutoDetach is on, when the screen blanker
  10573.     kicks in, and reattach when the screen is restored. This keeps the
  10574.     workstation from tying up a connection number while waiting to log in.
  10575.     If you want to use a workstation as a print server without being logged
  10576.     in you will want to set this to Off.
  10577.     
  10578.  
  10579.     Computer Tyme * MarxMenu * Users Manual                 Page #179
  10580.     -----------------------------------------------------------------
  10581.     
  10582.     Default is Off.
  10583.     
  10584.     Category: Novell
  10585.     
  10586.     
  10587.      NovBinderyAccess : Number
  10588.     
  10589.     NovBinderyAccess returns the users bindery access level.
  10590.     
  10591.      0 - Not logged in.
  10592.      1 - Logged in.
  10593.      2 - Object Access.
  10594.      3 - Supervisor Access.
  10595.     
  10596.     Category: Bindery
  10597.     
  10598.     
  10599.      NovBroadcastMode (Mode)
  10600.     
  10601.     This reads or sets the message broadcast mode.
  10602.     
  10603.      Example:
  10604.        Writeln NovBroadcastMode
  10605.        NovBroadcastMode = 3
  10606.     
  10607.      Modes:
  10608.        0 - All Messages, same as running CastOn
  10609.        1 - Server messages only, same as running CastOff
  10610.        2 - Same as 0 but user has to poll server for messages
  10611.        3 - Same as 1 but user has to poll server for messages
  10612.     
  10613.     See Also: NovSendMessage NovGetMessage
  10614.     
  10615.     Category: Novell
  10616.     
  10617.     
  10618.      NovCaptureCopies (Port) : Number
  10619.     
  10620.     NovCaptureCopies reads or sets the number of copies to print for a
  10621.     particular port.
  10622.     
  10623.      Example:
  10624.        NovCaptureCopies (2) = 5      ;Sets LPT2 to print 5 copies
  10625.        Writeln NovCaptureCopies (2)  ;displays the copies setting on LPT2
  10626.     
  10627.     See Also: NovCaptureQueue
  10628.     
  10629.     Category: Novell Printer
  10630.     
  10631.  
  10632.     Computer Tyme * MarxMenu * Users Manual                 Page #180
  10633.     -----------------------------------------------------------------
  10634.     
  10635.      NovCaptureFF (Port) On/Off
  10636.     
  10637.     NovCaptureFF reads or sets the printer Form Feed function of a
  10638.     particular port.
  10639.     
  10640.      Example:
  10641.        NovCaptureFF (2) On       ;Sets LPT2 Form Feed to On
  10642.        Writeln NovCaptureFF (2)  ;displays the Form Feed setting on LPT2
  10643.     
  10644.     See Also: NovCaptureQueue
  10645.     
  10646.     Category: Novell Printer
  10647.     
  10648.     
  10649.      NovCaptureFile (Port) File
  10650.     
  10651.     This command is used to capture the output from an LPT port to a
  10652.     specified file. If output is set to an empty string then this command
  10653.     performs the same function as an endcapture.
  10654.     
  10655.      Example:
  10656.        NovCaptureFile (1) = "PRINTER.TXT"   ;Captures LPT1 output to File.
  10657.        NovCaptureFile (1) = ""              ;Ends Capture of Port.
  10658.     
  10659.     See Also: NovCaptureQueue
  10660.     
  10661.     Category: Novell Printer
  10662.     
  10663.     
  10664.      NovCaptureFlush (Port)
  10665.     
  10666.     This commands flushes any data present in a Netware Print queue to
  10667.     the printer.
  10668.     
  10669.      Example:
  10670.        NovCaptureFlush (2)    ;Flush any data in queue on port 2
  10671.     
  10672.     See Also: NovCaptureQueue
  10673.     
  10674.     Category: Novell Printer
  10675.     
  10676.     
  10677.      NovCaptureForm (Port) : Number
  10678.     
  10679.     NovCaptureForm reads or sets the printer form of a particular port.
  10680.     
  10681.      Example:
  10682.        NovCaptureForm (2) = 3      ;Sets LPT2 to form 3
  10683.        Writeln NovCaptureForm (2)  ;displays the form setting on LPT2
  10684.     
  10685.     See Also: NovCaptureQueue
  10686.     
  10687.  
  10688.     Computer Tyme * MarxMenu * Users Manual                 Page #181
  10689.     -----------------------------------------------------------------
  10690.     
  10691.     Category: Novell Printer
  10692.     
  10693.     
  10694.      NovCaptureQueue (Port)
  10695.     
  10696.     Returns the name of the queue that the port is being captured to. A nul
  10697.     string indicates capturing is not active. This command can also be used
  10698.     to start capturing and set the queue to capture. A server can also be
  10699.     specified.
  10700.     
  10701.      Example:
  10702.        Writeln NovCaptureQueue (2)    ;shows capture queue for LPT2
  10703.        NovCaptureQueue (2) = 'LASER'  ;captures LPT2 to server Laser Printer
  10704.        NovCaptureQueue (2) = 'TYME/LASER'  ;specifies server TYME
  10705.        NovCaptureQueue (2) = ''       ;End Capture on LPT2
  10706.     
  10707.     Category: Novell Printer
  10708.     
  10709.     
  10710.      NovCaptureReset (Port) : String
  10711.     
  10712.     NovCaptureReset can read or set the reset string for a print queue.
  10713.     
  10714.      Example:
  10715.        NovCaptureReset (1) = Esc + char($15)
  10716.        Writeln NovCaptureReset (1) ;reads the capture setup string
  10717.     
  10718.     See Also: NovCaptureSetup
  10719.     
  10720.     Category: Novell Printer
  10721.     
  10722.     
  10723.      NovCaptureSetup (Port) : String
  10724.     
  10725.     NovCaptureSetup can read or set the setup string for a print queue.
  10726.     
  10727.      Example:
  10728.        NovCaptureSetup (1) = Esc + char($15)
  10729.        Writeln NovCaptureSetup (1) ;reads the capture setup string
  10730.     
  10731.     See Also: NovCaptureReset
  10732.     
  10733.     Category: Novell Printer
  10734.     
  10735.     
  10736.      NovCaptureTabSize (Port) : Number
  10737.     
  10738.     NovCaptureTabSize reads or sets the printer TabSize of a particular
  10739.     port. Range is 1 - 18.
  10740.     
  10741.      Example:
  10742.        NovCaptureTabSize (2) = 8       ;Sets LPT2 TabSize to 8 spaces
  10743.        Writeln NovCaptureTabSize (2)   ;displays the TabSize setting on LPT2
  10744.     
  10745.  
  10746.     Computer Tyme * MarxMenu * Users Manual                 Page #182
  10747.     -----------------------------------------------------------------
  10748.     
  10749.     See Also: NovCaptureQueue
  10750.     
  10751.     Category: Novell Printer
  10752.     8
  10753.     
  10754.      NovCaptureTimeOut (Port) : number
  10755.     
  10756.     NovCaptureTimeOut reads or sets the printer TimeOut of a particular
  10757.     port.
  10758.     
  10759.      Example:
  10760.        NovCaptureTimeOut (2) = 10      ;Sets LPT2 to 10 second TimeOut
  10761.        Writeln NovCaptureTimeOut (2)   ;displays the TimeOut setting on LPT2
  10762.     
  10763.     See Also: NovCaptureQueue
  10764.     
  10765.     Category: Novell Printer
  10766.     
  10767.     
  10768.      NovCaptureUseBanner (Port)
  10769.     
  10770.     This reads or sets whether or not a print banner is used.
  10771.     
  10772.      Example:
  10773.        Writeln NovCaptureUseBanner (2)  ;displays if LPT2 is using a banner
  10774.        NovCaptureBanner (2) = On        ;sets banner to On for LPT2
  10775.     
  10776.     See Also: NovCaptureQueue
  10777.     
  10778.     Category: Novell Printer
  10779.     
  10780.     
  10781.      NovChangePassword (OldPassword,NewPassword)
  10782.     
  10783.     Changes the Novell users password from OldPassword to NewPassword.
  10784.     
  10785.      Example:
  10786.        NovChangePassword('OLDPASS','NEWPASS')
  10787.     
  10788.     See Also: NovChangeObjPassword
  10789.     
  10790.     Category: Bindery
  10791.     
  10792.     
  10793.      NovChangeObjPassword (Obj, Type, OldPassword, NewPassword)
  10794.     
  10795.     NovChangeObjPassword is like NovChangePassword except it allows you to
  10796.     change the password on other objects than yourself. Type refers to the
  10797.     object type. Users are type 1.
  10798.     
  10799.      Example:
  10800.         NovChangeObjPassword('DAN',1,'POTATOE','POTATO')
  10801.     
  10802.  
  10803.     Computer Tyme * MarxMenu * Users Manual                 Page #183
  10804.     -----------------------------------------------------------------
  10805.     
  10806.     See Also: NovChangePassword
  10807.     
  10808.     Category: Bindery
  10809.     
  10810.     
  10811.      NovCleanVolumeName (String) : String
  10812.     
  10813.     Returns a string containing the server and volume name of a filename or
  10814.     directory.
  10815.     
  10816.      Example:
  10817.        Writeln NovCleanVolumeName('L:')   ;Returns 'MARX/SYS:LOGIN'
  10818.     
  10819.     See Also: CleanFileName TrueName
  10820.     
  10821.     Category: Novell
  10822.     
  10823.     
  10824.      NovClearConnection (Connection Number)
  10825.     
  10826.     Disconnects a specific connection number from the server. Requires
  10827.     console operator rights to use this command.
  10828.     
  10829.      Example:
  10830.        NovClearConnection 2
  10831.     
  10832.     Category: Novell
  10833.     
  10834.     
  10835.      NovCloseBindery
  10836.     
  10837.     Closes the Novell bindery for access.
  10838.     
  10839.     See Also: NovOpenBindery
  10840.     
  10841.     Category: Bindery
  10842.     
  10843.     
  10844.      NovCloseSemaphore (Name)
  10845.     
  10846.     This closes semaphore Name. If there are no other users using this
  10847.     semaphore, it is deleted.
  10848.     
  10849.      Example:
  10850.        NovCloseSemaphore 'LOTUS'
  10851.     
  10852.     Category: Novell
  10853.     
  10854.  
  10855.     Computer Tyme * MarxMenu * Users Manual                 Page #184
  10856.     -----------------------------------------------------------------
  10857.     
  10858.      NovConnection (ServerName) : Number
  10859.     
  10860.     This returns your workstation's logical connection number to the server
  10861.     specified by ServerName. The ServerName parameter is optional and if not
  10862.     specified then the connection number returned is the connection number
  10863.     on the default server. A zero indicates that you are not connected to
  10864.     any servers.
  10865.     
  10866.      Example:
  10867.        Var Serv1,Serv2
  10868.        Serv1 = 'TYME'
  10869.        Serv2 = 'TSS'
  10870.        Writeln "I'm Connection " NovConnection(Serv1) " on Server "+Serv1
  10871.        Writeln "I'm Connection " NovConnection(Serv2) " on Server "+Serv2
  10872.     
  10873.     Category: Novell
  10874.     
  10875.     
  10876.      NovConnectionsInUse : Number
  10877.     
  10878.     Returns the number of connections in use.
  10879.     
  10880.      Example:
  10881.        Writeln 'There are ' NovConnections ' connections in use.'
  10882.     
  10883.     Category: Novell
  10884.     
  10885.     
  10886.      NovConsoleOperator : Boolean
  10887.     
  10888.     This returns true if the user has Console Operator privileges. This can
  10889.     come in handy when you are trying to determine who gets access to the
  10890.     command line.
  10891.     
  10892.      Example:
  10893.        OnKey Esc
  10894.          |if NovConsoleOperator
  10895.          |   ExitMenu
  10896.          |endif
  10897.     
  10898.     Category: Novell
  10899.     
  10900.     
  10901.      NovCreateObject (Name, ObjectType)
  10902.     
  10903.     Creates a bindery object of a specific object type. If NovStaticObject
  10904.     is set to true, then the object will be permanent unless it is deleted.
  10905.     If set to false, then the object will be automatically deleted if the
  10906.     file server is rebooted.
  10907.     
  10908.      Example:
  10909.     
  10910.  
  10911.     Computer Tyme * MarxMenu * Users Manual                 Page #185
  10912.     -----------------------------------------------------------------
  10913.     
  10914.        ;- This example creates a new user
  10915.     
  10916.        var
  10917.          UserName
  10918.     
  10919.        UserName = 'TIMESYNC'
  10920.     
  10921.        ;- Delete object if it already exists
  10922.     
  10923.        NovDeleteObject(UserName,1);
  10924.     
  10925.        NovStaticObject On               ;Static Object
  10926.        NovObjectSecurity $31
  10927.     
  10928.        NovCreateObject (UserName,1)
  10929.     
  10930.        NovStaticProperty On
  10931.        NovSetProperty On
  10932.        NovPropertySecurity $32
  10933.        NovCreateProperty(UserName,'SECURITY_EQUALS',1)
  10934.     
  10935.        NovPropertySecurity $31
  10936.        NovCreateProperty(UserName,"GROUPS_I'M_IN",1)
  10937.     
  10938.        ;- Copies login control from the supervisor
  10939.     
  10940.        NovSetProperty Off
  10941.        NovPropertySecurity $32
  10942.        NovCreateProperty(UserName,'LOGIN_CONTROL',1)
  10943.        NovPropertyValues(Item,'SUPERVISOR','LOGIN_CONTROL',1)
  10944.        NovWritePropValue(Item,UserName,'LOGIN_CONTROL',1)
  10945.     
  10946.        NovCreateProperty(UserName,'ACCOUNT_BALANCE',1)
  10947.        NovWritePropValue(Set [''],UserName,'ACCOUNT_BALANCE',1)
  10948.     
  10949.        NovPropertySecurity $22
  10950.        NovCreateProperty(UserName,'MISC_LOGIN_INFO',1)
  10951.     
  10952.        NovPropertySecurity $31
  10953.        NovCreateProperty(UserName,'IDENTIFICATION',1)
  10954.        NovWritePropValue(Set ['Time Sync User'],UserName,'IDENTIFICATION',1)
  10955.     
  10956.        NovChangeObjPassword(UserName,1,'','SETTIME')
  10957.     
  10958.        ;- Gives user Console Operator access.
  10959.     
  10960.        NovAddToSet(NovDefaultServer,'OPERATORS',4,UserName,1)
  10961.     
  10962.  
  10963.     Computer Tyme * MarxMenu * Users Manual                 Page #186
  10964.     -----------------------------------------------------------------
  10965.     
  10966.     NovObjectSecurity controls who can access the object. The default
  10967.     security is $11 which allows anyone logged into the network to access
  10968.     the object for both read and write. In this example the security of
  10969.     $31 allows anyone logged in to read the object, but only users with
  10970.     supervisor equivalence can write/modify/delete it.  With some objects
  10971.     as in the above example where we create a new Netware group, you must
  10972.     also assign the necessary properties before the object is functional
  10973.     to Netware.
  10974.     
  10975.     See Also: NovStaticObject NovObjectSecurity NovDeleteObject
  10976.     See Also: NovCreateProperty
  10977.     
  10978.     Category: Bindery
  10979.     
  10980.     
  10981.      NovCreateProperty (Object, Prop, ObjType)
  10982.     
  10983.     Creates a property on the object. The security of the property is
  10984.     controlled by setting the variable NovPropertySecurity. You can also
  10985.     control if the property is an item property or a set property. This is
  10986.     done by setting NovSetProperty to True or False.
  10987.     
  10988.     If NovStaticProperty is true then the property will remain until someone
  10989.     deletes it. If it is not static (dynamic) then it will be deleted if the
  10990.     server is rebooted.
  10991.     
  10992.     A set property contains a list of objects. An item property contains a
  10993.     value up to 128 bytes long. The value can be anything.
  10994.     
  10995.      Example:
  10996.        ; Create a Group Example.
  10997.     
  10998.        NovDeleteObject ('TESTGROUP',2)
  10999.        NovStaticObject On
  11000.        NovObjectSecurity $31
  11001.     
  11002.        NovCreateObject ('TESTGROUP',2)
  11003.     
  11004.        NovSetProperty On
  11005.        NovStaticProperty On
  11006.        NovPropertySecurity $31
  11007.        NovCreateProperty('TESTGROUP','GROUP_MEMBERS',2)
  11008.     
  11009.     See Also: NovStaticProperty NovPropertySecurity NovDeleteProperty
  11010.     See Also: NovCreateObject
  11011.     
  11012.     Category: Bindery
  11013.     
  11014.  
  11015.     Computer Tyme * MarxMenu * Users Manual                 Page #187
  11016.     -----------------------------------------------------------------
  11017.     
  11018.      NovDefaultServer : String
  11019.     
  11020.     Returns the name of the default file server.
  11021.     
  11022.      Example:
  11023.        Writeln NovDefaultServer
  11024.     
  11025.     Category: Novell
  11026.     
  11027.     
  11028.      NovDeleteFromSet (Obj,Prop,ObjType,MemberObject,MemberType)
  11029.     
  11030.     Deletes an object from a property that is a set property.
  11031.     
  11032.      Example:
  11033.        To Remove a user to a group:
  11034.     
  11035.        NovDeleteFromSet(Group,'GROUP_MEMBERS',2,User,1)
  11036.        NovDeleteFromSet(User,"GROUPS_I'M_IN",1,Group,2)
  11037.        NovDeleteFromSet(User,'SECURITY_EQUALS',1,Group,2)
  11038.     
  11039.     See Also: NovAddToSet NovSetProperty
  11040.     
  11041.     Category: Bindery
  11042.     
  11043.     
  11044.      NovDeleteObject (Object,Type)
  11045.     
  11046.     Deletes an object from the bindery.
  11047.     
  11048.      Example:
  11049.        NovDeleteObject('JOE',1)
  11050.     
  11051.     Category: Bindery
  11052.     
  11053.     
  11054.      NovDeleteProperty (Obj,Prop,Type)
  11055.     
  11056.     NovDeleteProperty deletes a property from an object.
  11057.     
  11058.      Example:
  11059.        NovDeleteProperty('TEST','WASTE',2)
  11060.     
  11061.     Category: Bindery
  11062.     
  11063.     
  11064.      NovDetach (Server)
  11065.     
  11066.     This is used to drop the connection to a server. It also logs you off.
  11067.     
  11068.      Example:
  11069.        NovDetach 'TYME'
  11070.     
  11071.  
  11072.     Computer Tyme * MarxMenu * Users Manual                 Page #188
  11073.     -----------------------------------------------------------------
  11074.     
  11075.     See Also: NovAttach
  11076.     
  11077.     Category: Novell
  11078.     
  11079.     
  11080.      NovDownServer
  11081.     
  11082.     Takes the default file server down if there are no files open. You must
  11083.     be supervisor equivalent to user this command.
  11084.     
  11085.     See Also: NovForceDownServer
  11086.     
  11087.     Category: Novell
  11088.     
  11089.     
  11090.      NovEndCapture (Port)
  11091.     
  11092.     Ends printer capture for LPT ports.
  11093.     
  11094.      Example:
  11095.         NovEndCapture (1)  ;cancels LPT1 capture
  11096.     
  11097.     See Also: NovCaptureQueue
  11098.     
  11099.     Category: Novell Printer
  11100.     
  11101.     
  11102.      NovForceDownServer
  11103.     
  11104.     Takes the default file server down regardless of open files.  You must be
  11105.     supervisor equivalent to use this command.
  11106.     
  11107.     See Also: NovDownServer
  11108.     
  11109.     Category: Novell
  11110.     
  11111.     
  11112.      NovFreeDirSlots (Path) : Number
  11113.     
  11114.     Returns the number of free directory slots for this volume.
  11115.     
  11116.      Example:
  11117.        Writeln NovFreeDirSlots 'SYS:'
  11118.        Writeln NovFreeDirSlots 'F:'
  11119.     
  11120.     See Also: NovTotalDirSlots
  11121.     
  11122.     Category: Novell
  11123.     
  11124.  
  11125.     Computer Tyme * MarxMenu * Users Manual                 Page #189
  11126.     -----------------------------------------------------------------
  11127.     
  11128.      NovFreeVolumeSpace (Path) : Number
  11129.     
  11130.     Returns the free file space of the volume in bytes.
  11131.     
  11132.      Example:
  11133.        Writeln NovFreeVolumeSpace 'SYS:'
  11134.        Writeln NovFreeVolumeSpace 'F:'
  11135.     
  11136.     See Also: NovTotalVolumeSpace NovUsedVolumeSpace
  11137.     
  11138.     Category: Novell
  11139.     
  11140.     
  11141.      NovFullName (User)
  11142.     
  11143.     Returns the Full Name of the user as set by Syscon. If NovFullName is
  11144.     used without a parameter then MyLoginName is assumed.
  11145.     
  11146.      Example:
  11147.        Writeln NovFullName 'MARC'  ;Writes Marc Perkel
  11148.     
  11149.     See Also: NovLoginName
  11150.     
  11151.     Category: Bindery
  11152.     
  11153.     
  11154.      NovGetConnections (Array,Name,Type)
  11155.     
  11156.     NovGetConnections return an array of connection numbers that a specified
  11157.     user or other object is attached to. For users use type 1.
  11158.     
  11159.      Example:
  11160.        var Connections
  11161.        NovGetConnections(Connections,'VICKI',1)
  11162.        Loop Connections
  11163.           NovSendMessage('The Princess Called!',Connections[LoopIndex])
  11164.        EndLoop
  11165.     
  11166.     Category: Bindery
  11167.     
  11168.     
  11169.      NovGetMessage : String
  11170.     
  11171.     When in broadcast mode 2 or 3 this polls the server for stored messages
  11172.     and returns them if found.
  11173.     
  11174.      Example:
  11175.        NovBroadcastMode = 3
  11176.        Writeln NovGetMessage
  11177.     
  11178.     See Also: NovSendMessage NovBroadcastMode
  11179.     
  11180.  
  11181.     Computer Tyme * MarxMenu * Users Manual                 Page #190
  11182.     -----------------------------------------------------------------
  11183.     
  11184.     Category: Novell
  11185.     
  11186.     
  11187.      NovGraceLoginReset (User) : Number
  11188.     
  11189.     Returns the number of grace logins that Novell resets when the user
  11190.     changes his password.
  11191.     
  11192.      Example:
  11193.        Writeln NovGraceLoginReset (NovMyLoginName)
  11194.     
  11195.     If the User parameter is not included, MarxMenu will assume the current
  11196.     user.
  11197.     
  11198.     You can also set the grace login reset as follows:
  11199.     
  11200.      NovGraceLoginReset = 5
  11201.     
  11202.     See Also: NovGraceLogins
  11203.     
  11204.     Category: Bindery
  11205.     
  11206.     
  11207.      NovGraceLogins (User) : Number
  11208.     
  11209.     Returns the number of grace logins the user has left.
  11210.     
  11211.      Example:
  11212.        Writeln 'You have ' NovGraceLogins (NovMyLoginName) ' left!'
  11213.     
  11214.     If the User parameter is not included, MarxMenu will assume the current
  11215.     user.
  11216.     
  11217.     You can also set the grace logins as follows:
  11218.     
  11219.      NovGraceLogins = 5
  11220.     
  11221.     See Also: NovPasswordExpDate NovGraceLoginReset
  11222.     
  11223.     Category: Bindery
  11224.     
  11225.     
  11226.      NovGroupMembers (Group,Array)
  11227.     
  11228.     This reads all the members of Group and puts them into an array.
  11229.     
  11230.      Example:
  11231.        var Members
  11232.        NovGroupMembers ('EVERYONE',Members)
  11233.        Loop Members
  11234.           Writeln Members[LoopIndex]
  11235.        EndLoop
  11236.     
  11237.  
  11238.     Computer Tyme * MarxMenu * Users Manual                 Page #191
  11239.     -----------------------------------------------------------------
  11240.     
  11241.     Category: Bindery Array
  11242.     
  11243.     
  11244.      NovGroups (Array)
  11245.     
  11246.     Fills array with list of all groups.
  11247.     
  11248.      Example:
  11249.        var Groups
  11250.        NovGroups (Groups)
  11251.        Loop Groups
  11252.           Writeln Groups[LoopIndex]
  11253.        EndLoop
  11254.     
  11255.     See Also: NovUsersLoggedIn NovUsers NovPrintQueues NovServers
  11256.     
  11257.     Category: Bindery
  11258.     
  11259.     
  11260.      NovInGroup (Group) : Boolean
  11261.     
  11262.     Returns true if you are in the group.
  11263.     
  11264.      Example:
  11265.        If NovInGroup ('PAYROLL') then Writeln 'Accounting'
  11266.     
  11267.     Category: Bindery
  11268.     
  11269.     
  11270.      NovLastLoginDate (User) : Date
  11271.     
  11272.     Returns the date and time the user last logged in.
  11273.     
  11274.      Example:
  11275.        DaysSinceLogin = NovLastLoginDate(UserName) - Today / SecondsInDay
  11276.     
  11277.     If the User parameter is not included, MarxMenu will assume the current
  11278.     user.
  11279.     
  11280.     Category: Bindery Time
  11281.     
  11282.     
  11283.      NovLogin (Name,Password)
  11284.     
  11285.     This logs you into a file server. It is different than the Novell's
  11286.     login program in that it doesn't execute any login scripts. It merely
  11287.     gets you in. You can include the preferred server with the name.
  11288.     
  11289.      Example:
  11290.        NovLogin ('MARC','PASSWORD')
  11291.        NovLogin ('TYME/MARC','PASSWORD')
  11292.     
  11293.  
  11294.     Computer Tyme * MarxMenu * Users Manual                 Page #192
  11295.     -----------------------------------------------------------------
  11296.     
  11297.     NovLogin will automatically attach to the file server for you and
  11298.     preserve all default and preferred server settings.
  11299.     
  11300.     The variable NovResult is set to 0 or 223 if successful. The 223 result
  11301.     indicated a grace login.
  11302.     
  11303.     If you are using Netware 3, MarxMenu shells a program named SUBLOGIN.EXE
  11304.     which does encrypted passwords. This program needs to be on the search
  11305.     path. If you are using MarxMenu to log into the network the you will
  11306.     need a copy of SUBLOGIN in the LOGIN directory.
  11307.     
  11308.     If you don't use SUBLOGIN you will have to go to the server console and
  11309.     type:
  11310.     
  11311.      SET ALLOW UNENCRYPTED PASSWORDS = ON
  11312.     
  11313.     See Also: NovDetach
  11314.     
  11315.     Category: Novell
  11316.     
  11317.     
  11318.      NovLoginName (Connection) : String
  11319.     
  11320.     This returns the login name of the user at any specified connection.
  11321.     This can also be used to see who else is on the network. If no
  11322.     connection is specified, the current connection is assumed.
  11323.     
  11324.      Example:
  11325.        Writeln NovLoginName       ;name of user on this connection
  11326.        Writeln NovLoginName (2)   ;name of user on connection 2
  11327.     
  11328.     See Also: NovFullName
  11329.     
  11330.     Category: Bindery
  11331.     
  11332.     
  11333.      NovLogout
  11334.     
  11335.     This logs you off the server. Warning! Make sure that you are running
  11336.     MarxMenu from a local drive and not the server you are logging out of.
  11337.     MarxMenu needs access to overlays within MARXMENU.EXE and a Logout can
  11338.     cut off access. This command automatically runs FixPath.
  11339.     
  11340.     See Also: FixPath Logoff LogoffTime
  11341.     
  11342.     Category: Novell Vines
  11343.     
  11344.  
  11345.     Computer Tyme * MarxMenu * Users Manual                 Page #193
  11346.     -----------------------------------------------------------------
  11347.     
  11348.      NovMapDrive (Drive,Directory)
  11349.     
  11350.     This will map a drive letter to a directory like the Novell MAP
  11351.     command does. You may specify volume names and server names.
  11352.     
  11353.      Example:
  11354.        NovMapDrive ('J','TYME2/SYS:PUBLIC\DOS')
  11355.     
  11356.     Mapping a drive to a nul string ('') deletes the drive map.
  11357.     
  11358.     See Also: NovMapRoot
  11359.     
  11360.     Category: Novell
  11361.     
  11362.     
  11363.      NovMapRoot (Drive,Path)
  11364.     
  11365.     NovMapRoot works like Novell's MAP ROOT command. It allows you to map a
  11366.     drive letter to a subdirectory and make it look like the root directory
  11367.     of that drive. You may specify volume names and server names.
  11368.     
  11369.      Example:
  11370.        NovMapRoot('P','TYME/SYS:PUBLIC')
  11371.     
  11372.     P:\ is the same as the TYME/SYS:PUBLIC directory
  11373.     
  11374.     See Also: NovMapDrive
  11375.     
  11376.     Category: Novell
  11377.     
  11378.     
  11379.      NovMaxConnections : Number
  11380.     
  11381.     Returns the maximum number of connections that your Netware will allow.
  11382.     
  11383.     Category: Novell
  11384.     
  11385.     
  11386.      NovMinPasswordLength (User) : Number
  11387.     
  11388.     Returns the minimum length of the password that Novell will accept for a
  11389.     new password.
  11390.     
  11391.      Example:
  11392.        Writeln NovGraceLoginReset (NovMyLoginName)
  11393.     
  11394.     If the User parameter is not included, MarxMenu will assume the current
  11395.     user.
  11396.     
  11397.     Category: Bindery
  11398.     
  11399.  
  11400.     Computer Tyme * MarxMenu * Users Manual                 Page #194
  11401.     -----------------------------------------------------------------
  11402.     
  11403.      NovMyLoginName : String
  11404.     
  11405.     This returns the login name of the user.
  11406.     
  11407.      Example:
  11408.        Writeln NovMyLoginName
  11409.     
  11410.     Category: Bindery
  11411.     
  11412.     
  11413.      NovMyPassword (Password) : Boolean
  11414.     
  11415.     Novell won't let you read the password, but it will let you guess and
  11416.     tell you if you're right. This routine returns true if the password
  11417.     passed is the correct password.
  11418.     
  11419.      Example"
  11420.        var Pass
  11421.        Pass = Readln
  11422.        if NovMyPassword (Pass)
  11423.           ;Do Something
  11424.        else
  11425.           Writeln 'Bad Password!'
  11426.        endif
  11427.     
  11428.     Category: Bindery
  11429.     
  11430.     
  11431.      NovMyPrintQueues (Array)
  11432.     
  11433.     Returns a list of all print queues that the user has access too.
  11434.     
  11435.      Example:
  11436.        var Queues
  11437.        NovMyPrintQueues (Queues)
  11438.        Loop Queues
  11439.           Writeln Queues[LoopIndex]
  11440.        EndLoop
  11441.     
  11442.     See Also: NovPrintQueues
  11443.     
  11444.     Category: Bindery Array
  11445.     
  11446.     
  11447.      NovObjectID (User) : String
  11448.     
  11449.     NovObjectID returns the users Novell object identification code. This is
  11450.     the same as the name of the users mail directory.
  11451.     
  11452.      Example:
  11453.        MailDir = 'F:\MAIL\' + NovObjectID (NovMyLoginName)
  11454.     
  11455.  
  11456.     Computer Tyme * MarxMenu * Users Manual                 Page #195
  11457.     -----------------------------------------------------------------
  11458.     
  11459.     Category: Bindery
  11460.     
  11461.     
  11462.      NovObjects (2D Array)
  11463.     
  11464.     NovObjects reads all objects from the bindery returning a 2-dimensional
  11465.     array containing all object names and object types.
  11466.     
  11467.      Example:
  11468.        NovObjects (X)
  11469.        Loop X
  11470.           Writeln X[LoopIndex,1] ' ' X[LoopIndex,2]
  11471.        EndLoop
  11472.     
  11473.      Common Object Types:
  11474.        1 - User
  11475.        2 - Group
  11476.        3 - Print Queue
  11477.        4 - File Server
  11478.        5 - Job Server
  11479.        6 - Gateway
  11480.        7 - Print Server
  11481.     
  11482.     See Also: NovScanProperties NovPropertyValues
  11483.     
  11484.     Category: Bindery Array
  11485.     
  11486.     
  11487.      NovObjectSecurity : Number
  11488.     
  11489.     NovObjectSecurity is used when objects are created to determine who can
  11490.     read or write the object. The number is one byte. The upper 4 bits
  11491.     control who can read the object, the lower 4 bits control who can write
  11492.     to the object.
  11493.     
  11494.       0000 Anyone
  11495.       0001 Logged In
  11496.       0010 Only your Object
  11497.       0011 Supervisor
  11498.       0100 Netware Itself
  11499.     
  11500.     The default is $11 (00010001) which is anyone logged in can read or
  11501.     write to the object.
  11502.     
  11503.     NovObjectSecurity can also read and set the security of an existing
  11504.     object.
  11505.     
  11506.      Example:
  11507.        NovObjectSecurity('MARXMENU',600) = $13
  11508.        Writeln NovObjectSecurity('MARXMENU',600)
  11509.     
  11510.  
  11511.     Computer Tyme * MarxMenu * Users Manual                 Page #196
  11512.     -----------------------------------------------------------------
  11513.     
  11514.     See Also: NovCreateObject NovStaticObject NovPropertySecurity
  11515.     
  11516.     Category: Bindery
  11517.     
  11518.     
  11519.      NovOpenBindery
  11520.     
  11521.     Opens the Novell bindery for access.
  11522.     
  11523.     See Also: NovCloseBindery
  11524.     
  11525.     Category: Bindery
  11526.     
  11527.     
  11528.      NovOpenSemaphore (Name,Value)
  11529.     
  11530.     This opens semaphore Name and assigns it an initial value. If the
  11531.     semaphore already exists, the value isn't changed. The number of
  11532.     semaphore users is increased by one if this user hasn't already opened
  11533.     this semaphore name.
  11534.     
  11535.      Example:
  11536.        NovOpenSemaphore ('LOTUS',0)
  11537.     
  11538.     See Also: NovCloseSemaphore NovSemaphoreUsers
  11539.     
  11540.     Category: Novell
  11541.     
  11542.     
  11543.      NovPasswordExpDate (UserName) : Date
  11544.     
  11545.     Returns the Novell password expiration date. You must be logged in to be
  11546.     able to read this.
  11547.     
  11548.      Example:
  11549.        DaysToExpire = NovPasswordExpDate(UserName) - Today / SecondsInDay
  11550.     
  11551.     See Also: NovGraceLogins
  11552.     
  11553.     Category: Bindery Time
  11554.     
  11555.     
  11556.      NovPreferredServer : String
  11557.     
  11558.     Returns the name of the preferred file server. This is set with the
  11559.     NovSetPreferredServer command.
  11560.     
  11561.     Normally the default server is controlled by the current directory. If a
  11562.     preferred server is set then this default is changed. Setting the
  11563.     preferred server to blank resets the default server. When MarxMenu
  11564.     terminates the Preferred server setting is terminated.
  11565.     
  11566.  
  11567.     Computer Tyme * MarxMenu * Users Manual                 Page #197
  11568.     -----------------------------------------------------------------
  11569.     
  11570.     Category: Novell
  11571.     
  11572.     
  11573.      NovPrimaryServer : String
  11574.     
  11575.     Returns the name of the primary file server. This is the one you first
  11576.     logged into.
  11577.     
  11578.     Category: Novell
  11579.     
  11580.     
  11581.      NovPrintQueues (Array)
  11582.     
  11583.     Fills array with list of all print Queues. The user might not have
  11584.     access rights to all these queues.
  11585.     
  11586.      Example:
  11587.        var Queues
  11588.        NovPrintQueues (Queues)
  11589.        Loop Queues
  11590.           Writeln Queues[LoopIndex]
  11591.        EndLoop
  11592.     
  11593.     See Also: NovMyPrintQueues NovUsersLoggedIn NovUsers
  11594.     See Also: NovGroups NovServers
  11595.     
  11596.     Category: Bindery Array Printer
  11597.     
  11598.     
  11599.      NovPropertySecurity : Number
  11600.     
  11601.     NovPropertySecurity is used when properties are created to determine who
  11602.     can read or write the property. The number is one byte. The upper 4 bits
  11603.     controls who can read the property, the lower 4 bits control who can
  11604.     write to the property.
  11605.     
  11606.       0000 Anyone
  11607.       0001 Logged In
  11608.       0010 Only your Object
  11609.       0011 Supervisor
  11610.       0100 Netware Itself
  11611.     
  11612.     The default is $11 (00010001) which is anyone logged in can read or
  11613.     write to the property.
  11614.     
  11615.     NovPropertySecurity can also read and set the security of an existing
  11616.     property.
  11617.     
  11618.      Example:
  11619.        NovPropertySecurity('MARXMENU','USERS',600) = $13
  11620.        Writeln NovPropertySecurity('MARXMENU','USERS',600)
  11621.     
  11622.  
  11623.     Computer Tyme * MarxMenu * Users Manual                 Page #198
  11624.     -----------------------------------------------------------------
  11625.     
  11626.     See Also: NovCreateProperty NovObjectSecurity NovSetProperty
  11627.     
  11628.     Category: Bindery
  11629.     
  11630.     
  11631.      NovPropertyValues (Array, Object, Prop, Type)
  11632.     
  11633.     Reads property values of object into an array. If the property is a Set
  11634.     property, then the names of the objects contained in the set are read.
  11635.     If the property is an Item property, then the property is read as an
  11636.     array of strings that are all 128 bytes in length. These strings will
  11637.     contain binary data.
  11638.     
  11639.      Example:       ;shows contents of bindery
  11640.        StandardIO
  11641.     
  11642.        Var Objects, Obj, Prop, Ty, Values
  11643.     
  11644.        Qualifier ObjName ObjType
  11645.     
  11646.        NovObjects (Objects)
  11647.     
  11648.        Loop Objects
  11649.           Obj = Objects[LoopIndex].ObjName
  11650.           Ty = Objects[LoopIndex].ObjType
  11651.           Writeln Obj ' --------- ' Ty
  11652.           NovScanProperties (Prop,Obj,Ty)
  11653.           Loop Prop
  11654.              Writeln '   ' Prop[LoopIndex]
  11655.              NovPropertyValues(Values,Obj,Prop[LoopIndex],Ty)
  11656.              Loop Values
  11657.                 Writeln '      ' Values[LoopIndex]
  11658.              EndLoop
  11659.           EndLoop
  11660.        EndLoop
  11661.     
  11662.     See Also: NovObjects NovScanProperties NovWritePropValue
  11663.     
  11664.     Category: Bindery Array
  11665.     
  11666.     
  11667.      NovReadGroups (User,Array)
  11668.     
  11669.     This reads all the groups that User belongs to and puts them into an
  11670.     array.
  11671.     
  11672.      Example:
  11673.        var Groups
  11674.        NovReadGroups ('VICKI',Groups)
  11675.        Loop Groups
  11676.           Writeln Groups[LoopIndex]
  11677.        EndLoop
  11678.     
  11679.  
  11680.     Computer Tyme * MarxMenu * Users Manual                 Page #199
  11681.     -----------------------------------------------------------------
  11682.     
  11683.     Category: Bindery Array
  11684.     
  11685.     
  11686.      NovReadSecurityEquals (Name,Array)
  11687.     
  11688.     This reads all the security equivalences that Name belongs to and puts
  11689.     them into an array. (This includes groups).
  11690.     
  11691.      Example:
  11692.        var SecEq
  11693.        NovReadSecurityEquals ('VICKI',SecEq)
  11694.        Loop SecEq
  11695.           Writeln SecEq[LoopIndex]
  11696.        EndLoop
  11697.     
  11698.     Category: Bindery Array
  11699.     
  11700.     
  11701.      NovRemoveUserFromGroup (User,Group)
  11702.     
  11703.     Removes a user to a group and updates GROUPS_I'M_IN, GROUP_MEMBERS, and
  11704.     SECURITY_EQUALS properties.  You must be supervisor equivalent in order
  11705.     to use this command.
  11706.     
  11707.      Example:
  11708.        NovRemoveUserFromGroup ('MARC','EVERYONE')
  11709.     
  11710.     See Also: NovAddUserToGroup
  11711.     
  11712.     Category: Bindery
  11713.     
  11714.     
  11715.      NovRenameObject (OldName, NewName, ObjType)
  11716.     
  11717.     Renames an object.
  11718.     
  11719.      Example:
  11720.        NovRenameObject('VICKY','VICKI',1)
  11721.          ;corrects serious spelling error
  11722.     
  11723.     Category: Bindery
  11724.     
  11725.     
  11726.      NovResult : Number
  11727.     
  11728.     NovResult is a variable like FileResult that returns the success status
  11729.     of the previous Novell system call. A zero generally indicates success.
  11730.     
  11731.     Category: Novell
  11732.     
  11733.  
  11734.     Computer Tyme * MarxMenu * Users Manual                 Page #200
  11735.     -----------------------------------------------------------------
  11736.     
  11737.      NovScanProperties (Array, Object, ObjType)
  11738.     
  11739.     NovScanProperties reads the properties (not the values) into an array.
  11740.     You also have to pass the object type.
  11741.     
  11742.      Novell Object Types:
  11743.        1 - User
  11744.        2 - Group
  11745.        3 - Print Queue
  11746.        4 - File Server
  11747.        5 - Job Server
  11748.        6 - Gateway
  11749.        7 - Print Server
  11750.     
  11751.      Example:
  11752.        var Properties
  11753.        NovScanProperties (Properties,NovMyLoginName,1)
  11754.     
  11755.        Loop NumberOfElements(Properties)
  11756.           Writeln(Properties[LoopIndex])
  11757.        EndLoop
  11758.     
  11759.     See Also: NovObjects NovPropertyValues
  11760.     
  11761.     Category: Bindery Array
  11762.     
  11763.     
  11764.      NovScanTrusteePaths (2D Array,ObjectName,ObjectType)
  11765.     
  11766.     Returns a 2-dimensional array containing the name of the trustee paths
  11767.     assigned to the object and the trustee access rights.
  11768.     
  11769.      Example:
  11770.        var X
  11771.        NovScanTrusteePaths (X,'MARC',1)
  11772.        Loop X
  11773.           Writeln X[LoopIndex,1] ' ' X[LoopIndex,2]
  11774.        EndLoop
  11775.     
  11776.     Category: Novell Array
  11777.     
  11778.     
  11779.      NovSecurityEquals (Security) : Boolean
  11780.     
  11781.     Returns True if user has the security equivalent of Security.
  11782.     
  11783.      Example:
  11784.        if NovSecurityEquals ('SUPERVISOR')
  11785.           Execute ('SYSCON')
  11786.        endif
  11787.     
  11788.  
  11789.     Computer Tyme * MarxMenu * Users Manual                 Page #201
  11790.     -----------------------------------------------------------------
  11791.     
  11792.     Category: Bindery
  11793.     
  11794.     
  11795.      NovSemaphoreTimeout
  11796.     
  11797.     This variable controls the amount of time (in 1/18 seconds) that
  11798.     MarxMenu will wait for the value of a semaphore to become not negative.
  11799.     The initial value is 50.
  11800.     
  11801.      Example:
  11802.        NovSemaphoreTimeout = 50
  11803.     
  11804.     See Also: NovWaitOnSemaphore NovSignalSemaphore
  11805.     
  11806.     Category: Novell
  11807.     
  11808.     
  11809.      NovSemaphoreUsers (Name) : Number
  11810.     
  11811.     This returns the number of users that have the semaphore open. This can
  11812.     be used for software metering. Read file METER.INC to use this feature.
  11813.     
  11814.      Example:
  11815.        if NovSemaphoreUsers ('LOTUS') > 5
  11816.           Writeln 'Sorry, all copies of LOTUS are in use.'
  11817.        endif
  11818.     
  11819.     Category: Novell
  11820.     
  11821.     
  11822.      NovSemaphoreValue (Name) : Number
  11823.     
  11824.     This returns the value of a semaphore. The value is initially set with
  11825.     NovOpenSemaphore and can be adjusted with NovSignalSemaphore or
  11826.     NovWaitOnSemaphore.
  11827.     
  11828.      Example:
  11829.        Writeln NamSemaphoreValue
  11830.     
  11831.     See Also: NovOpenSemaphore NovSignalSemaphore NovWaitOnSemaphore
  11832.     
  11833.     Category: Novell
  11834.     
  11835.     
  11836.      NovSendMessage (Message,Connection)
  11837.     
  11838.     Sends a message to the specified connection number just like the Novell
  11839.     SEND command.
  11840.     
  11841.      NovResults:
  11842.           0 - Successful
  11843.         252 - Buffer Full
  11844.         253 - Invalid Connection Number
  11845.         255 - Blocked (running CastOff)
  11846.     
  11847.  
  11848.     Computer Tyme * MarxMenu * Users Manual                 Page #202
  11849.     -----------------------------------------------------------------
  11850.     
  11851.     See Also: NovGetMessage NovBroadcastMode
  11852.     
  11853.     Category: Novell
  11854.     
  11855.     
  11856.      NovServerLogin (On/Off)
  11857.     
  11858.     Enables or disables logins to file server. This requires the user have
  11859.     Console Operator status to use this feature.
  11860.     
  11861.      Example:
  11862.        if NovConsoleOperator then NovServerLogin Off
  11863.     
  11864.     Category: Novell
  11865.     
  11866.     
  11867.      NovServers (Array)
  11868.     
  11869.     This command returns a string array of the file servers you are
  11870.     connected to.
  11871.     
  11872.      Example:
  11873.        var Servers
  11874.        NovServers(Servers)
  11875.        Loop Servers
  11876.           Writeln Servers[LoopIndex]
  11877.        EndLoop
  11878.     
  11879.     Category: Bindery Array
  11880.     
  11881.     
  11882.      NovServerTime : Time
  11883.     
  11884.     NovServerTime can read or set the date and time of a Novell file server.
  11885.     
  11886.      To read the server time:
  11887.         X = NovServerTime
  11888.     
  11889.      To set the server time:
  11890.         NovServerTime = X
  11891.     
  11892.     Category: Novell Time
  11893.     
  11894.     
  11895.      NovSetPreferredServer (Server)
  11896.     
  11897.     Sets the preferred file server. Passing a '' will switch you back to the
  11898.     default or primary file server.
  11899.     
  11900.     See Also: NovSetPrimaryServer NovPreferredServer
  11901.     
  11902.     Category: Novell
  11903.     
  11904.  
  11905.     Computer Tyme * MarxMenu * Users Manual                 Page #203
  11906.     -----------------------------------------------------------------
  11907.     
  11908.      NovSetPrimaryServer (Server)
  11909.     
  11910.     The primary file server is the one that executes your login scripts. It
  11911.     can also be set using the NovSetPrimaryServer command.
  11912.     
  11913.     See Also: NovSetPreferredServer NovPrimaryServer
  11914.     
  11915.     Category: Novell
  11916.     
  11917.     
  11918.      NovSetProperty (On/Off)
  11919.     
  11920.     NovSetProperty is a variable that controls if the property to be created
  11921.     is going to be a set property or an item property.
  11922.     
  11923.     A set property contains a list of objects. An item property contains a
  11924.     value up to 128 bytes long. The value can be anything.
  11925.     
  11926.     NovSetProperty can also be used to read if a property is an item or a
  11927.     set.
  11928.     
  11929.      Example:
  11930.        if NovSetProperty (Object,Property,ObjectType)
  11931.           NovPropertyValues(Values,Object,Property,ObjectType)
  11932.           Loop Values
  11933.              Writeln Values[LoopIndex]
  11934.           EndLoop
  11935.        endif
  11936.     
  11937.     See Also: NovPropertySecurity NovCreateProperty NovStaticProperty
  11938.     
  11939.     Category: Bindery
  11940.     
  11941.     
  11942.      NovShellVersion : String
  11943.     
  11944.     Returns the Novell shell version number.
  11945.     
  11946.     Category: Novell
  11947.     
  11948.     
  11949.      NovSignalSemaphore (Name)
  11950.     
  11951.     This increments the value of a semaphore. It is used to indicate that
  11952.     you are done with a resource and makes it available for the next user.
  11953.     
  11954.     See Also: NovOpenSemaphore NovWaitOnSemaphore
  11955.     
  11956.     Category: Novell
  11957.     
  11958.  
  11959.     Computer Tyme * MarxMenu * Users Manual                 Page #204
  11960.     -----------------------------------------------------------------
  11961.     
  11962.      NovStaticObject : Boolean
  11963.     
  11964.     This variable controls if objects created will be static or dynamic
  11965.     objects. Dynamic objects are deleted when the file server is rebooted.
  11966.     
  11967.     NovStaticObject can also be used to read if an object is static or not.
  11968.     
  11969.      Example:
  11970.        Writeln NovStaticObject('MARXMENU',600)  ;test for static object
  11971.     
  11972.     See Also: NovCreateObject NovObjectSecurity
  11973.     
  11974.     Category: Bindery
  11975.     
  11976.     
  11977.      NovStaticProperty : Boolean
  11978.     
  11979.     This variable controls if objects created will be static or dynamic
  11980.     objects. Dynamic objects are deleted when the file server is rebooted.
  11981.     
  11982.     NovStaticProperty can also be used to read if an property is static or
  11983.     not.
  11984.     
  11985.      Example:
  11986.        Writeln NovStaticProperty('MARXMENU','USERS',600)
  11987.     
  11988.     See Also: NovCreateProperty NovPropertySecurity
  11989.     
  11990.     Category: Bindery
  11991.     
  11992.     
  11993.      NovStationAddress (Connection) : String
  11994.     
  11995.     This returns the stations internetwork address at connection.
  11996.     
  11997.      Example:
  11998.        NovStationAddress (NovConnection)
  11999.           Returns the address of the user's workstation.
  12000.     
  12001.        NovStationAddress (1)
  12002.           Returns the address of station 1.
  12003.     
  12004.        254:41 where 254 is the network number and 41 is the node number.
  12005.     
  12006.     The second parameter (Connection) is optional. If it is left out, the
  12007.     current connection is assumed.
  12008.     
  12009.      Example:
  12010.        NovStationAddress ;Returns the address of the users workstation.
  12011.     
  12012.  
  12013.     Computer Tyme * MarxMenu * Users Manual                 Page #205
  12014.     -----------------------------------------------------------------
  12015.     
  12016.     Category: Novell
  12017.     
  12018.     
  12019.      NovTotalDirSlots (Path) : Number
  12020.     
  12021.     Returns the total number of directory slots for this volume.
  12022.     
  12023.      Example:
  12024.        Writeln NovTotalDirSlots 'SYS:'
  12025.        Writeln NovTotalDirSlots 'F:'
  12026.     
  12027.     See Also: NovFreeDirSlots
  12028.     
  12029.     Category: Novell
  12030.     
  12031.     
  12032.      NovTotalVolumeSpace (Path) : Number
  12033.     
  12034.     Returns the total file space of the volume in bytes.
  12035.     
  12036.      Example:
  12037.        Writeln NovTotalVolumeSpace 'SYS:'
  12038.        Writeln NovTotalVolumeSpace 'F:'
  12039.     
  12040.     See Also: NovFreeVolumeSpace NovUsedVolumeSpace
  12041.     
  12042.     Category: Novell
  12043.     
  12044.     
  12045.      NovUsedVolumeSpace (Path) : Number
  12046.     
  12047.     Returns the used volume space of Path.
  12048.     
  12049.      Example:
  12050.        Writeln NovUsedVolumeSpace('F:')
  12051.     
  12052.     See Also: NovFreeVolumeSpace NovTotalVolumeSpace
  12053.     
  12054.     Category: Novell
  12055.     
  12056.     
  12057.      NovUserInGroup (Name,Group) : Boolean
  12058.     
  12059.     This is used to test if other users are in a group. Returns true is the
  12060.     specified user is in the specified group.
  12061.     
  12062.      Example:
  12063.        if NovUserInGroup ('KEVIN','MAILUSERS')
  12064.           ;do something
  12065.        endif
  12066.     
  12067.     See Also: NovInGroup
  12068.     
  12069.  
  12070.     Computer Tyme * MarxMenu * Users Manual                 Page #206
  12071.     -----------------------------------------------------------------
  12072.     
  12073.     Category: Bindery
  12074.     
  12075.     
  12076.      NovUsers (Array)
  12077.     
  12078.     Fills array with list of all users.
  12079.     
  12080.      Example:
  12081.        var Users
  12082.        NovUsers(Users)
  12083.        Loop Users
  12084.           Writeln Users[LoopIndex]
  12085.        EndLoop
  12086.     
  12087.     See Also: NovUsersLoggedIn NovGroups NovPrintQueues NovServers
  12088.     
  12089.     Category: Bindery Array
  12090.     
  12091.     
  12092.      NovUsersLoggedIn (Array)
  12093.     
  12094.     Fills array with list of all users that are currently logged in.
  12095.     
  12096.      Example:
  12097.        var Users
  12098.        NovUsersLoggedIn(Users)
  12099.        Loop Users
  12100.           Writeln Users[LoopIndex]
  12101.        EndLoop
  12102.     
  12103.     See Also: NovUsers NovGroups NovPrintQueues NovServers
  12104.     
  12105.     Category: Novell Array
  12106.     
  12107.     
  12108.      NovVersionNumber : Number
  12109.     
  12110.     Returns the Novell Netware version number.
  12111.     
  12112.     Category: Novell
  12113.     
  12114.     
  12115.      NovVolumeNumber (Directory) : Number
  12116.     
  12117.     Returns the Novell volume number of a directory.
  12118.     
  12119.      Example:
  12120.        Writeln NovVolumeNumber ('F:')
  12121.     
  12122.     Category: Novell
  12123.     
  12124.  
  12125.     Computer Tyme * MarxMenu * Users Manual                 Page #207
  12126.     -----------------------------------------------------------------
  12127.     
  12128.      NovVolumes (Array)
  12129.     
  12130.     Reads volumes on the default server into an array.
  12131.     
  12132.      Example:
  12133.        var X
  12134.        NovVolumes(X)
  12135.        Loop NumberOfElements(X)
  12136.           Writeln X[LoopIndex]
  12137.        EndLoop
  12138.     
  12139.     Category: Novell Array
  12140.     
  12141.     
  12142.      NovWaitOnSemaphore (Name) : Boolean
  12143.     
  12144.     This decrements the value of a semaphore and if the value is zero or
  12145.     more, returns true. If the value of the semaphore is negative, it
  12146.     returns false. This is used to indicate that you are out of whatever you
  12147.     are testing for.
  12148.     
  12149.     See Also: NovSignalSemaphore NovOpenSemaphore NovSemaphoreTimeout
  12150.     
  12151.     Category: Novell
  12152.     
  12153.     
  12154.      NovWritePropValue (Array,Obj,Prop,Type)
  12155.     
  12156.     NovWritePropValue is used to write values to Item properties only and
  12157.     not to static properties. Item properties contain data in 128-byte
  12158.     segments. These segments are passed as an array of strings. If you are
  12159.     passing binary data then build the binary data into the string array.
  12160.     Any strings that have less than 128 bytes are padded with zeros.
  12161.     
  12162.      Example:
  12163.        AppendArray(Values,'123')
  12164.        AppendArray(Values,'456')
  12165.        AppendArray(Values,'789')
  12166.        NovWritePropValue(Values,'TEST','WASTE',2)
  12167.     
  12168.     See Also: NovPropertyValues
  12169.     
  12170.     Category: Bindery
  12171.     
  12172.     
  12173.      NumberOfElements (Array) : Number
  12174.     
  12175.     This function returns the number of elements in the array. If the
  12176.     variable is not an array, 0 is returned.
  12177.     
  12178.      Example:
  12179.        var Lines
  12180.        ReadTextFile('MARXREAD.ME',Lines)
  12181.        Writeln 'The file is ' NumberofElements (Lines) ' lines long.'
  12182.     
  12183.  
  12184.     Computer Tyme * MarxMenu * Users Manual                 Page #208
  12185.     -----------------------------------------------------------------
  12186.     
  12187.     Category: Array
  12188.     
  12189.     
  12190.      Now : Time
  12191.     
  12192.     Returns the current moment or sets the system clock.
  12193.     
  12194.      Read the current moment:
  12195.         X = Now
  12196.      Set the system clock:
  12197.         Now = X
  12198.     
  12199.     See Also: Today Tomorrow
  12200.     
  12201.     Category: Time
  12202.     
  12203.     
  12204.      NumericOnly (On/Off)
  12205.     
  12206.     When NumericOnly is set to On only numbers will be accepted as input to
  12207.     Readln commands.
  12208.     
  12209.     See Also: Readln
  12210.     
  12211.     Category: String
  12212.     
  12213.     
  12214.      NumLock : Boolean
  12215.     
  12216.     Returns true if the keyboard Num Lock light is On. This command can also
  12217.     set the Num Lock On and Off.
  12218.     
  12219.      Example:
  12220.        if NumLock then Write 'NumLock is On'
  12221.     
  12222.        NumLock On  ;Turns NumLock On
  12223.        NumLock Off ;Turns NumLock Off
  12224.     
  12225.        NumLock (by itself) turns NumLock On.
  12226.     
  12227.        To test for NumLock:
  12228.        if NumLock
  12229.           Writeln 'NumLock is On'
  12230.        endif
  12231.     
  12232.     See Also: CapsLock ScrollLock
  12233.     
  12234.     Category: System
  12235.     
  12236.  
  12237.     Computer Tyme * MarxMenu * Users Manual                 Page #209
  12238.     -----------------------------------------------------------------
  12239.     
  12240.      Offset (String) : Number
  12241.     
  12242.     Returns the memory offset where string is located.
  12243.     
  12244.     See Also: Segment
  12245.     
  12246.     Category: Memory
  12247.     
  12248.     
  12249.      OnKey (Char)
  12250.     
  12251.     When char is selected, the line(s) following are executed up to the next
  12252.     OnKey or end of file. This means that they are written to a BATCH file.
  12253.     
  12254.      Example:
  12255.        Onkey 'W'
  12256.           cd\wordstar
  12257.           ws
  12258.           cd\menu
  12259.     
  12260.     In the above example if 'W' is selected, MarxMenu will create a
  12261.     temporary batch file containing all the lines under the OnKey command.
  12262.     All the lines under an OnKey are written literally to the batch file
  12263.     with few exceptions. All leading and trailing blanks are stripped.
  12264.     String variables are evaluated and their value passed if the name of the
  12265.     string variable name starts with a '%'.
  12266.     
  12267.     If a line begins with a '|' (vertical bar), the line is interpreted
  12268.     rather than written to a batch file. If a '^Label' is used under an
  12269.     OnKey, a jump is made to the 'Label' and interpretation is resumed. This
  12270.     is commonly used to jump to a submenu.
  12271.     
  12272.     Another way to include MarxMenu variables and have more control inside
  12273.     the batch file is to use Bat commands. Bat commands are MarxMenu
  12274.     commands that create lines in the batch file you are creating.
  12275.     
  12276.     Any OnKey statement that causes a batch file to be written to will cause
  12277.     the menu to exit. MarxMenu normally will exit with ErrorLevel 0 unless
  12278.     an ExitCode is set.
  12279.     
  12280.     The first blank line under an OnKey ends what is written to the batch
  12281.     file. One common mistake is that when MarxMenu commands are intermixed
  12282.     with batch file statements that all the MarxMenu commands are executed
  12283.     first. This is because the batch statements are written to a batch file
  12284.     and executed when MarxMenu exist.
  12285.     
  12286.      Example:
  12287.        OnKey 'W'
  12288.          |ChDir('c:\wordstar')
  12289.          WS
  12290.          |ChDir('c:\menu')
  12291.     
  12292.  
  12293.     Computer Tyme * MarxMenu * Users Manual                 Page #210
  12294.     -----------------------------------------------------------------
  12295.     
  12296.     The above example won't work. Here's why. MarxMenu changes to the
  12297.     c:\wordstar directory. Then it stores WS in a batch file buffer. Then it
  12298.     changes to the c:\menu directory. Then MarxMenu writes the batch file
  12299.     and exits and you are in the wrong directory.
  12300.     
  12301.     Here is an example of using conditional statements under an OnKey
  12302.     command:
  12303.     
  12304.      Example:
  12305.        OnKey 'S'
  12306.          |if DisplayType = 'HERCMONO'
  12307.             |ChDir('C:\MONSMART')
  12308.             SMART
  12309.          |else
  12310.             |ChDir('C:\COLSMART')
  12311.             SMART
  12312.          |endif
  12313.     
  12314.     In the above example MarxMenu tests to see if a color-compatible screen
  12315.     is available. If so it runs SMART out of the color directory. Otherwise
  12316.     it runs SMART out of the mono directory. Note that all commands that
  12317.     MarxMenu sees start with the vertical bar character.
  12318.     
  12319.     Sometimes you want to execute a command where the command is created by
  12320.     a complex set of rules. The BAT command is useful here.
  12321.     
  12322.      Example:
  12323.        OnKey 'P'
  12324.          |Bat 'CAPTURE Q=' + Queue + ' C=1 NB NFF TI=5 Local=' + PrnPort
  12325.     
  12326.     In this example the |Bat command allows more specific control over
  12327.     what is sent to the batch file for execution.
  12328.     
  12329.     See Also: MxCmd Bat UseArrows OnScreenOnly
  12330.     
  12331.     Category: Conditional
  12332.     
  12333.     
  12334.      OnScreenOnly (On/Off)
  12335.     
  12336.     This allows you to restrict selections to only what is actually on the
  12337.     screen. Hidden OnKey commands will not execute if this is set on. This
  12338.     allows you to limit user selection to the choices on the screen.
  12339.     
  12340.      Example:
  12341.        OnScreenOnly On
  12342.     
  12343.     See Also: OnKey
  12344.     
  12345.  
  12346.     Computer Tyme * MarxMenu * Users Manual                 Page #211
  12347.     -----------------------------------------------------------------
  12348.     
  12349.     Category: Conditional
  12350.     
  12351.     
  12352.      OpenPrinter
  12353.     
  12354.     This command opens the printer device. It is not necessary to use this
  12355.     command since that it is done automatically whenever you print. But, if
  12356.     you are running under a multitasking shell like Windows or DesqView, it
  12357.     will reserve the printer for your task.
  12358.     
  12359.     If the printer is locked, or if you have specified a file name that
  12360.     can't be created, the variable FileResult will contain the DOS error
  12361.     code (usually 5 for access denied). A FileResult of 0 indicates success.
  12362.     
  12363.     See Also: ClosePrinter FileResult PrinterName
  12364.     
  12365.     Category: Printer
  12366.     
  12367.     
  12368.      OptionSwitch (String1,String2) : Boolean
  12369.     
  12370.     This command tests if String1 contains the option switch String2. If it
  12371.     does, it will remove the switch from String1.
  12372.     
  12373.      Example:
  12374.        String1 = 'Test /A/B/C'
  12375.        HasB = OptionSwitch(String1,'B')
  12376.     
  12377.      HasB will be true.
  12378.      String1 will contain 'Test /A/C'
  12379.     
  12380.     Category: String
  12381.     
  12382.     
  12383.      Or : Operator
  12384.     
  12385.     Returns logical Or if operators are boolean; or bitwise Or if operators
  12386.     are numeric.
  12387.     
  12388.      Example:
  12389.        if (B < 9) or (C > 5) then .....  ;boolean or
  12390.        X or $0F                          ;bitwise or
  12391.     
  12392.     See Also: And Xor Not
  12393.     
  12394.     Category: Math Boolean
  12395.     
  12396.  
  12397.     Computer Tyme * MarxMenu * Users Manual                 Page #212
  12398.     -----------------------------------------------------------------
  12399.     
  12400.      Ord (Char) : Number
  12401.     
  12402.     Returns the numeric value of an ascii character.
  12403.     
  12404.      Example:
  12405.        Ord('A')            ;returns 65
  12406.        Char(Ord('A') + 1)  ;returns 'B'
  12407.     
  12408.     See Also: Char
  12409.     
  12410.     Category: String
  12411.     
  12412.     
  12413.      OutFile : String
  12414.     
  12415.     When using StandardIO the input and output files by default use the
  12416.     console. The output can be overridden by setting InFile to point to a
  12417.     different file or device.
  12418.     
  12419.      Example:
  12420.        OutFile = 'OUTPUT.TXT'
  12421.        StandardIO
  12422.     
  12423.     See Also: InFile StandardIO
  12424.     
  12425.     Category: File
  12426.     
  12427.     
  12428.      OverKey : String
  12429.     
  12430.     When using UseArrows, OverKey returns the character that selects the
  12431.     item that the inverse bar is over.
  12432.     
  12433.     This can be used with IdleProgram to display context sensitive help as
  12434.     you move the inverse bar over different selections.
  12435.     
  12436.     See Also: IdleProgram
  12437.     
  12438.     Category: String
  12439.     
  12440.     
  12441.      OverLay (MenuName)
  12442.     
  12443.     Overlay loads another menu as if that menu were a procedure of the
  12444.     current menu. After the overlaid menu exits, control is returned to the
  12445.     calling menu at the next line after the overlay command.
  12446.     
  12447.     Like the Chain command, Overlay is very fast and doesn't require
  12448.     MarxMenu to be reloaded.
  12449.     
  12450.      Example:
  12451.        Overlay 'SUBMENU'
  12452.     
  12453.  
  12454.     Computer Tyme * MarxMenu * Users Manual                 Page #213
  12455.     -----------------------------------------------------------------
  12456.     
  12457.     When using overlays, all variables declared as shared are accessible to
  12458.     the main program and all overlays. The shared variables have to be the
  12459.     same for all overlays.
  12460.     
  12461.     See Also: Shared Chain
  12462.     
  12463.     Category: Execution
  12464.     
  12465.     
  12466.      Overlayed : Boolean
  12467.     
  12468.     Overalyed returns true if menu is loaded as an overlay.
  12469.     
  12470.     Category: Execution
  12471.     
  12472.     
  12473.      PadLeft (String,Length) : String
  12474.     
  12475.     PadLeft will return String filled with blanks on the left side so that
  12476.     the length of the string is Length.
  12477.     
  12478.      Example:
  12479.        Writeln PadLeft('123',5)   ;returns '  123'
  12480.     
  12481.     See Also: PadRight
  12482.     
  12483.     Category: String
  12484.     
  12485.     
  12486.      PadRight (String,Length) : String
  12487.     
  12488.     PadRight will return String filled with blanks on the right side so that
  12489.     the length of the string is Length.
  12490.     
  12491.      Example:
  12492.        Writeln PadRight('123',5)   ;returns '123  '
  12493.     
  12494.     See Also: PadLeft
  12495.     
  12496.     Category: String
  12497.     
  12498.     
  12499.      ParallelPorts : Number
  12500.     
  12501.     Returns number of parallel ports.
  12502.     
  12503.     Category: System
  12504.     
  12505.  
  12506.     Computer Tyme * MarxMenu * Users Manual                 Page #214
  12507.     -----------------------------------------------------------------
  12508.     
  12509.      ParamStr (Num) : String
  12510.     
  12511.     Returns the DOS parameter string from the command line. The 0 parameter
  12512.     is MARXMENU.EXE. The 1 parameter is the name of the menu file you are
  12513.     using. This is like the %1 %2 %3 ... in batch file parameters.
  12514.     
  12515.     Category: String
  12516.     
  12517.     
  12518.      ParentEnvironment
  12519.     
  12520.     ParentEnvironment selects the parent environment for use with
  12521.     environment access commands.
  12522.     
  12523.     See Also: ReadEnv SetEnv ReadEnvironment ShellEnvironment
  12524.     See Also: CurrentEnvironment MasterEnvironment
  12525.     
  12526.     Category: Environment
  12527.     
  12528.     
  12529.      Password (Pswd,column,row)
  12530.     
  12531.     This command opens up a password box at row and column. The user must
  12532.     type the password correctly before the command will execute.
  12533.     
  12534.      Example:
  12535.        OnKey 'X'
  12536.           |PassWord('shell',4,3)
  12537.           COMMAND.COM
  12538.     
  12539.     The password is case sensitive if the password in the source code is
  12540.     lower case. But if the password in the source code is in uppercase then
  12541.     the password is not case sensitive.
  12542.     
  12543.      Example:
  12544.        Password 'CRITTER' 4 3    ;will accept critter or CRITTER
  12545.        Password 'CriTTeR' 4 3    ;will only accept CriTTeR
  12546.     
  12547.     Category: Conditional
  12548.     
  12549.     
  12550.      PathPart (String) : String
  12551.     
  12552.     Returns the path part of a filename.
  12553.     
  12554.      Example:
  12555.        PathPart ('C:\MARX\MARXMENU.EXE') ;returns C:\MARX
  12556.     
  12557.     See Also: Extension NamePart FilePart
  12558.     
  12559.     Category: String
  12560.     
  12561.  
  12562.     Computer Tyme * MarxMenu * Users Manual                 Page #215
  12563.     -----------------------------------------------------------------
  12564.     
  12565.      PauseAfterExecute (On/Off)
  12566.     
  12567.     If on, this command causes the message "Press any key to return to
  12568.     MarxMenu..." to appear after an execute command is executed.
  12569.     
  12570.     See Also: Execute
  12571.     
  12572.     Category: Execution
  12573.     
  12574.     
  12575.      PcType : String
  12576.     
  12577.     PcType returns the type of computer you are running as a string.
  12578.     
  12579.       Types: PC, XT, AT, PS2.
  12580.     
  12581.     Category: System
  12582.     
  12583.     
  12584.      Pi : Real
  12585.     
  12586.     Returns the value of Pi to 18 digits.
  12587.     
  12588.     Category: Math Float
  12589.     
  12590.     
  12591.      PickFile (FileSpec,column,row,height) : String
  12592.     
  12593.     Allows you to display a directory of files on the screen from a menu.
  12594.     Normally used to display a list of files for the user to choose from.
  12595.     Could be used in a command to load a word processor or database. Allows
  12596.     selection of the file to be loaded by the word processor or database
  12597.     program. The filename can be passed to a percent variable placed in the
  12598.     batch file executing the application. See example files on MarxMenu
  12599.     distribution disk.
  12600.     
  12601.      Example:
  12602.        FileName = PickFile('C:\WORDSTAR\*.DOC',3,4,17)
  12603.     
  12604.     Notice: The use of a variable with a name that starts with a '%' allows
  12605.     the choice to be passed to a batch file for execution.
  12606.     
  12607.     The three numbers represent the column and row of the upper left corner
  12608.     of the box and the height of the box. All DrawBox commands can be used
  12609.     here to control the looks of the PickFile window. This includes the
  12610.     BoxHeader command.
  12611.     
  12612.     Category: String
  12613.     
  12614.  
  12615.     Computer Tyme * MarxMenu * Users Manual                 Page #216
  12616.     -----------------------------------------------------------------
  12617.     
  12618.      PickMany(SourceArray,DestinationArray)
  12619.     
  12620.     PickMany displays a string array in the current window and allows you to
  12621.     choose as many lines as you want. The chosen lines go into
  12622.     DestinationArray.
  12623.     
  12624.     When the window appears, the space bar toggles the marked status of the
  12625.     line. The right arrow sets the marked status and the left arrow resets
  12626.     the marked status. Ctrl-Right-Arrow marks all lines, Ctrl-Left-Arrow
  12627.     unmarks all lines. The return key accepts the selection and exits. The
  12628.     ESC key aborts.
  12629.     
  12630.     If using a mouse, the left button toggles the mark on the current line.
  12631.     The right button accepts and exits.
  12632.     
  12633.     If no selections are made by marking selections then pressing Return on
  12634.     an entry selects the item the cursor bar is over. If ESC is pressed,
  12635.     the DestinationArray is left unchanged. You can test LastKey to see what
  12636.     was pressed.
  12637.     
  12638.      Example:
  12639.        ;PICK&DEL.MNU      Usage "MARXMENU PICK&DEL mask"
  12640.        ;
  12641.        var temp,work,hitlist
  12642.        boxheader "PICK&DEL: A MarxMenu Demo"
  12643.        boxfooter "Space=Mark, <Enter>=DoIt"
  12644.        drawbox 25,5,30,15
  12645.        readdirectory(cmdline,work)     ;Read Dir into Array work
  12646.        pickmany(work,hitlist)          ;Use PickMany to select files!
  12647.        boxheader "Deleting Files"
  12648.        drawbox 20,10,40,4
  12649.        loop hitlist
  12650.           writeln " Now Deleting File: " hitlist[loopindex]
  12651.           delfile hitlist[loopindex]
  12652.           wait (10)
  12653.        endloop
  12654.        erasetopwindow
  12655.        erasetopwindow
  12656.     
  12657.     See Also: PickManyPositions PickOne
  12658.     
  12659.     Category: String Array
  12660.     
  12661.  
  12662.     Computer Tyme * MarxMenu * Users Manual                 Page #217
  12663.     -----------------------------------------------------------------
  12664.     
  12665.      PickManyPositions (Array)
  12666.     
  12667.     After running PickMany an array PickManyPositions is created that has
  12668.     the position numbers in the original array that were chosen.
  12669.     
  12670.     See Also: PickMany
  12671.     
  12672.     Category: String Array
  12673.     
  12674.     
  12675.      PickOne (Array) : String
  12676.     
  12677.     This command displays an array in the current window and lets you pick a
  12678.     line and returns the chosen line.
  12679.     
  12680.      Example:
  12681.        var BatFiles, BatName
  12682.        ReadDirectory('*.BAT',BatFiles)
  12683.        DrawBox 35 10 20 9
  12684.        BatName = PickOne(BatFiles)
  12685.     
  12686.     See Also: PickMany PickPosition
  12687.     
  12688.     Category: String Array
  12689.     
  12690.     
  12691.      PickPosition : Number
  12692.     
  12693.     The variable PickPosition works with the PickOne command. PickPosition
  12694.     returns the number of which element in the array was picked.
  12695.     
  12696.     See Also: PickOne
  12697.     
  12698.     Category: String Array
  12699.     
  12700.     
  12701.      Port (Number) : Number
  12702.     
  12703.     Returns the value at the port or writes a number to a port.
  12704.     
  12705.      Example:
  12706.        X = Port(20)   ;Reads port 20 into X
  12707.        Port(20) = X   ;Writes X to Port 20
  12708.     
  12709.     Category: Memory
  12710.     
  12711.  
  12712.     Computer Tyme * MarxMenu * Users Manual                 Page #218
  12713.     -----------------------------------------------------------------
  12714.     
  12715.      Pos (substring,string) : Number
  12716.     
  12717.     Finds position of substring in string. If substring isn't found, Pos
  12718.     returns 0.
  12719.     
  12720.      Example:
  12721.        pos('CD','ABCDE') returns 3
  12722.     
  12723.     Category: String
  12724.     
  12725.     
  12726.      PosInList (String,Array) : Number
  12727.     
  12728.     Scans a string array looking for a match on string and returns the array
  12729.     index of the first matched string if found or a zero if not found.
  12730.     
  12731.      Example:
  12732.        X[1] = 'JOE'
  12733.        X[2] = 'KEVIN'
  12734.        X[3] = 'MARC'
  12735.        Writeln PosInList('KEVIN',X)   ;returns 2
  12736.     
  12737.     See Also: PosInSortedList
  12738.     
  12739.     Category: Array
  12740.     
  12741.     
  12742.      PosInSortedList (String,Array) : Number
  12743.     
  12744.     Scans a string array looking for a match on string in a sorted array and
  12745.     returns the array index of the first matched string if found or a zero
  12746.     if not found. The array must be in sorted order. A binary search is used
  12747.     to make this command very fast.
  12748.     
  12749.      Example:
  12750.        X[1] = 'JOE'
  12751.        X[2] = 'KEVIN'
  12752.        X[3] = 'MARC'
  12753.        SortArray (X)
  12754.        Writeln PosInList('KEVIN',X)   ;returns 2
  12755.     
  12756.     See Also: PosInList
  12757.     
  12758.     Category: Array
  12759.     
  12760.  
  12761.     Computer Tyme * MarxMenu * Users Manual                 Page #219
  12762.     -----------------------------------------------------------------
  12763.     
  12764.      Power (Real,Real) : Real
  12765.     
  12766.     Raises a real to a given power.
  12767.     
  12768.      Example:
  12769.        Power(3,4)  ;returns 81.0
  12770.     
  12771.     Category: Math Float
  12772.     
  12773.     
  12774.      Pred (Number) : Number
  12775.     
  12776.     Returns number minus 1.
  12777.     
  12778.      Example:
  12779.        Pred(5)  ;returns 4
  12780.     
  12781.     See Also: Succ
  12782.     
  12783.     Category: Math
  12784.     
  12785.     
  12786.      Print (String)
  12787.     
  12788.     Prints string to the printer with no CR or LF. If there is an error
  12789.     printing, the error is returned in FileResult.
  12790.     
  12791.      Example:
  12792.        Print Char(12)  ;prints a form feed
  12793.     
  12794.     Category: Printer
  12795.     
  12796.     
  12797.      PrinterName (String)
  12798.     
  12799.     Sets the filename for the printer to use. The default name is PRN.
  12800.     Other common printer names include: LPT1, LPT2, LPT3, and AUX. You can
  12801.     also use filenames to direct printer output to a file.
  12802.     
  12803.     See Also: ClosePrinter OpenPrinter
  12804.     
  12805.     Category: Printer
  12806.     
  12807.     
  12808.      Println (String)
  12809.     
  12810.     Prints string to the printer with CR and LF.
  12811.     
  12812.     See Also: Print
  12813.     
  12814.     Category: Printer
  12815.     
  12816.  
  12817.     Computer Tyme * MarxMenu * Users Manual                 Page #220
  12818.     -----------------------------------------------------------------
  12819.     
  12820.      PrintScreen (On/Off)
  12821.     
  12822.     Turns the print screen function On and Off. Turning the print screen off
  12823.     disables the print screen key. This can be used to prevent a computer
  12824.     from locking up when the user hits the Print Screen key with no printer
  12825.     attached.
  12826.     
  12827.      Example:
  12828.        PrintScreen Off
  12829.     
  12830.     Category: Printer
  12831.     
  12832.     
  12833.      Procedure (name)
  12834.     
  12835.     This word begins the definition of a procedure. A procedure is like a
  12836.     subroutine. Once the procedure is defined, all you have to do to call
  12837.     the procedure is use its name. The procedure definition is terminated by
  12838.     the command EndProc.
  12839.     
  12840.      Example:
  12841.        Procedure SelectFile
  12842.           BoxHeaderColor ForeColor BackColor
  12843.           BoxBorderColor Cyan Mag
  12844.           BoxInsideColor Yellow Mag
  12845.           InverseColor Yellow Red
  12846.           Return PickFile (FileType,4,5,17)
  12847.        EndProc
  12848.     
  12849.     Whenever we use the word SelectFile in the menu, all the lines of the
  12850.     procedure SelectFile will execute.
  12851.     
  12852.     Parameters can be passed to procedures. When a parameter is passed it is
  12853.     normally passed by value. This mean that a copy of the original is
  12854.     passed. Whatever you do to the copy doesn't affect the original value.
  12855.     
  12856.      Example:
  12857.        var A
  12858.        Procedure Square (X)
  12859.           X = X * X
  12860.           Writeln X
  12861.        EndProc
  12862.     
  12863.        A = 6
  12864.        Square (A)   ;prints 36
  12865.        Writeln A    ;prints 6
  12866.     
  12867.     In the above example Square (A) will write 36 but Writeln A will write
  12868.     6. The reason is that Square passes a copy of A to X but the value of X
  12869.     is not returned to A. If you want the original A to be affected you
  12870.     would use the Loc command.
  12871.     
  12872.  
  12873.     Computer Tyme * MarxMenu * Users Manual                 Page #221
  12874.     -----------------------------------------------------------------
  12875.     
  12876.      A = 6
  12877.      Square (Loc A) ;prints 36
  12878.      Writeln A      ;prints 36
  12879.     
  12880.     In this example we pass Loc A to the Square procedure. Thus, instead of X
  12881.     being set to 6, X is set to point to A. As a pointer, any operation
  12882.     performed on X is performed on A instead.
  12883.     
  12884.     You can also return parameters from procedures using the Return command.
  12885.     
  12886.      Example:
  12887.        Procedure Cube (X)
  12888.           Return X * X * X
  12889.        EndProc
  12890.     
  12891.        Writeln Cube(3)    ;returns 27
  12892.     
  12893.     In MarxMenu you can return any number of parameters as long as the
  12894.     calling procedure is expecting the same number of parameters.
  12895.     
  12896.      Example:
  12897.        Procedure CenterOfScreen
  12898.           Return (ScreenWidth / 2) (ScreenHeight / 2)
  12899.        EndProc
  12900.     
  12901.        GotoXY(CenterOfScreen)
  12902.     
  12903.     In the above example, GotoXY expects two parameters. CenterOfScreen
  12904.     returns two parameters so MarxMenu is happy with it.
  12905.     
  12906.     See Also: EndProc Return Loc
  12907.     
  12908.     Category: Misc
  12909.     
  12910.     
  12911.      PullMenu (On/Off)
  12912.     
  12913.     Controls the behavior of the left and right arrow keys when using
  12914.     pull-down menus. Default is Off. See PULL.MNU for example.
  12915.     
  12916.     Category: Display
  12917.     
  12918.     
  12919.      Qualifier
  12920.     
  12921.     Used to create qualifiers which are named elements of an array.
  12922.     
  12923.      Example:
  12924.        Var President
  12925.        Qualifier FirstName, LastName
  12926.     
  12927.  
  12928.     Computer Tyme * MarxMenu * Users Manual                 Page #222
  12929.     -----------------------------------------------------------------
  12930.     
  12931.        President.FirstName = 'George'
  12932.        President.LastName  = 'Washington'
  12933.     
  12934.     See Also: Var Constant Shared
  12935.     
  12936.     Category: Variable
  12937.     
  12938.     
  12939.      QualVal (Qualifier) : Number
  12940.     
  12941.     Returns the numeric value of a qualifier.
  12942.     
  12943.      Example:
  12944.         Qualifier A B C
  12945.         Writeln QualVal C    ;returns 3
  12946.     
  12947.     See Also: Qualifier
  12948.     
  12949.     Category: Variable
  12950.     
  12951.     
  12952.      Random : Number
  12953.     
  12954.     The Random command returns random numbers between 0 and +2,147,483,647.
  12955.     (2^31). The algorithm has been checked for good uniformity and takes
  12956.     advantage of re-seeding itself from random events like the timer
  12957.     interrupt and keyboard input.
  12958.     
  12959.     To get a random number in a specific range, use the Mod command.
  12960.     
  12961.      Example:
  12962.        Write 'Pick a Number from 1 to 10 '
  12963.        Writeln (Random mod 10 + 1)
  12964.     
  12965.     Category: Math
  12966.     
  12967.     
  12968.      ReadAscTextFile (FileName,2D Array)
  12969.     
  12970.     ReadAscTextFile reads a standard comma delimited text file into a
  12971.     2-dimensional array. The lines of the file must be limited to 1000
  12972.     characters and the number of lines must be less than 13100. It also has
  12973.     to fit in memory.
  12974.     
  12975.     All text in quotes is converted to strings. Numbers not in quotes are
  12976.     translated as numbers unless there is a '.' in which case they are
  12977.     translated as floating point numbers.
  12978.     
  12979.     See Also: ReadlnAsc
  12980.     
  12981.     Category: File Array
  12982.     
  12983.  
  12984.     Computer Tyme * MarxMenu * Users Manual                 Page #223
  12985.     -----------------------------------------------------------------
  12986.     
  12987.      ReadDirectory (Path,Array)
  12988.     
  12989.     Reads a directory into an array. This command is controlled by several
  12990.     variables that control its behavior.
  12991.     
  12992.     If WholeFileNames is set to true, the names that are returned contain
  12993.     the whole path. If HiddenAndSystem is set to true, then Hidden and
  12994.     System files are also read. If IncludeDirectories is set to true, then
  12995.     directories are also read.
  12996.     
  12997.     If DirectoriesOnly is set to true, then only directory names are read.
  12998.     
  12999.      Example:
  13000.        Var X
  13001.        WholeFileNames Off
  13002.        ReadDirectory('*.MNU',X)
  13003.        Loop X
  13004.           Execute ('COPY ' + X[LoopIndex] + ' A:')
  13005.        EndLoop
  13006.     
  13007.     Here's a recursive example where we use ReadDirectory to read all the
  13008.     directories on the current drive.
  13009.     
  13010.      StandardIO
  13011.      DirectoriesOnly
  13012.      WholeFileNames
  13013.     
  13014.      ReadSubdirectories(CleanFileName('\'))
  13015.     
  13016.      Procedure ReadSubdirectories (Dir)
  13017.      var Subs
  13018.         Writeln Dir
  13019.         ReadDirectory(Dir,Subs)
  13020.         Loop Subs
  13021.            ReadSubdirectories(Subs[LoopIndex])
  13022.         EndLoop
  13023.      EndProc
  13024.     
  13025.     See Also: WholeFileNames HiddenAndSystem IncludeDirectories
  13026.     See Also: DirectoriesOnly ReadSqDirectory
  13027.     
  13028.     Category: Array Directory
  13029.     
  13030.  
  13031.     Computer Tyme * MarxMenu * Users Manual                 Page #224
  13032.     -----------------------------------------------------------------
  13033.     
  13034.      ReadEnv (String) : String
  13035.     
  13036.     Returns the environment string specified.
  13037.     
  13038.      Example:
  13039.        PathString = ReadEnv('PATH')
  13040.     
  13041.     You can also read environment strings by enclosing the environment
  13042.     variable name in '%' like you do in batch files.
  13043.     
  13044.      Example:
  13045.        PathString = %PATH%
  13046.     
  13047.     See Also: SetEnv ReadEnvironment ShellEnvironment
  13048.     See Also: CurrentEnvironment ParentEnvironment MasterEnvironment
  13049.     
  13050.     Category: Environment
  13051.     
  13052.     
  13053.      ReadEnvironment (Array)
  13054.     
  13055.     Reads all environment variables into an array. The variable LongestLine
  13056.     is set to the length of the longest environment variable.
  13057.     
  13058.      Example:
  13059.        Var Env
  13060.        ReadEnvironment (Env)
  13061.        Writeln 'Your current environment variables are:'
  13062.        Loop Env
  13063.           Writeln Env[LoopIndex]
  13064.        EndLoop
  13065.        Writeln
  13066.        Writeln('Your Environment Size is ',Str(EnvSize))
  13067.        Writeln('You are using ',Str(EnvSize-EnvFree),' bytes.')
  13068.        Writeln('You have ',Str(EnvFree),' bytes free.')
  13069.     
  13070.     See Also: SetEnv ReadEnv ShellEnvironment
  13071.     See Also: CurrentEnvironment ParentEnvironment MasterEnvironment
  13072.     
  13073.     Category: Environment Array
  13074.     
  13075.     
  13076.      ReadFileBlock (Name,Offset,Size,Segment)
  13077.     
  13078.     ReadFileBlock reads disk file Name starting at byte Offset for Size
  13079.     bytes into memory buffer Segment. It is intended to read any kind of
  13080.     file.
  13081.     
  13082.     The maximum value for Size is 65504. The segment must be as large as the
  13083.     number of bytes you are reading. The following example will copy a small
  13084.     file.
  13085.     
  13086.  
  13087.     Computer Tyme * MarxMenu * Users Manual                 Page #225
  13088.     -----------------------------------------------------------------
  13089.     
  13090.      Example:
  13091.        Var RamBlock Size
  13092.        Size = FileSize 'MARXREAD.ME'
  13093.        RamBlock = GetMem(Size)
  13094.        ReadFileBlock('MARXREAD.ME' 0 Size RamBlock)
  13095.        WriteFileBlock('COPYREAD.ME' 0 Size RamBlock)
  13096.        FreeMem(RamBlock)
  13097.     
  13098.     See Also: WriteFileBlock GetMem FreeMem
  13099.     
  13100.     Category: File Memory
  13101.     
  13102.     
  13103.      ReadKey : String
  13104.     
  13105.     Returns the character that is input from the keyboard. If UseArrows is
  13106.     on then the inverse bar will appear in the current window for selecting
  13107.     a choice.
  13108.     
  13109.      Example:
  13110.        Var Key
  13111.     
  13112.        Repeat
  13113.          Writeln( 'Press the <ESC> key to exit this program.' )
  13114.          Key = ReadKey
  13115.        Until Key = Esc
  13116.     
  13117.     See Also: UseArrows UpperCaseOnly
  13118.     
  13119.     Category: Keyboard
  13120.     
  13121.     
  13122.      Readln : String
  13123.     
  13124.     Reads a string from the keyboard. By default the size of the string is
  13125.     from the cursor position to one space left of the right side of the
  13126.     current window. The size can be set to a smaller value using the
  13127.     InputLength command.
  13128.     
  13129.     InputString can be set to preload the string with a value for editing.
  13130.     UppercaseOnly can be set to force the string be entered in uppercase.
  13131.     
  13132.      Example:
  13133.        Name   = Readln
  13134.        Number = Value (Readln) ;Converts to an numerical value
  13135.        State  = UpperCase (ReadLn)
  13136.     
  13137.     See Also: InputString UpperCaseOnly InsertMode InputLength
  13138.     See Also: TrimInputString InputBlankChar CapsOnly Security
  13139.     See Also: NumericOnly CapFirstChar FullLineReturn
  13140.     
  13141.  
  13142.     Computer Tyme * MarxMenu * Users Manual                 Page #226
  13143.     -----------------------------------------------------------------
  13144.     
  13145.     Category: Keyboard String
  13146.     
  13147.     
  13148.      ReadlnAsc (File,Array)
  13149.     
  13150.     ReadlnAsc reads a single line from a comma delimited Ascii file and
  13151.     breaks the fields out into an array.
  13152.     
  13153.     All fields in quotes are considered strings. If the field is just comma
  13154.     delimited and numeric then it is converted to a number. If it has a
  13155.     decimal point then it is converted to a real number.
  13156.     
  13157.      Example:
  13158.        var F Fields
  13159.        FileAssign(F,'TEST.ASC')
  13160.        FileOpen(F)
  13161.        while not EndOfFile(F)
  13162.           ReadlnAsc(F,Fields)
  13163.           loop Fields
  13164.              Write Fields[LoopIndex] ' '
  13165.           endloop
  13166.           Writeln
  13167.        EndWhile
  13168.     
  13169.     See Also: ReadAscTextFile
  13170.     
  13171.     Category: File
  13172.     
  13173.     
  13174.      ReadSqDirectory (Path,2DArray)
  13175.     
  13176.     ReadSqDirectory works like ReadDirectory but rather than just returning
  13177.     the file name it returns all the information about the file in a 2
  13178.     dimensional array.  The fields of the array are as follows:
  13179.     
  13180.      1 - Name
  13181.      2 - Date last Updated
  13182.      3 - Size
  13183.      4 - Attributes
  13184.     
  13185.     Under Netware there are several other fields:
  13186.     
  13187.      5 - Date Created
  13188.      6 - Date last Accessed
  13189.      7 - Date last Archived
  13190.      8 - Owner
  13191.      9 - Maximum Rights Mask (Directories)
  13192.     
  13193.      Example:
  13194.        Var X Y
  13195.        ReadSqDirectory('*.EXE',X)
  13196.        Writeln 'Listing File Name, Date Last Accessed, and Size.'
  13197.        Loop X
  13198.           Y = LoopIndex
  13199.           Writeln X[Y,1] ' ' DateString(X[Y,6]) ' ' X[Y,3]
  13200.        EndLoop
  13201.     
  13202.  
  13203.     Computer Tyme * MarxMenu * Users Manual                 Page #227
  13204.     -----------------------------------------------------------------
  13205.     
  13206.     See Also: WholeFileNames HiddenAndSystem IncludeDirectories
  13207.     See Also: DirectoriesOnly ReadDirectory
  13208.     
  13209.     Category: Array Directory
  13210.     
  13211.     
  13212.      ReadTextFile (FileName,Array)
  13213.     
  13214.     This command reads a text file into a string array. It also sets the
  13215.     variable LongestLine to the length of the longest line in the file.
  13216.     
  13217.      Example:
  13218.        Var Docs
  13219.     
  13220.        ReadTextFile('MARXMENU.DOC',Docs)
  13221.          ;After the read, Docs[1] becomes the first line of the file.
  13222.          ;Docs[NumberOfElements(Docs)] becomes the last line.
  13223.        Loop NumberOfElements(Docs)
  13224.            ; Convert each line to its uppercase equivalent
  13225.          Docs[LoopIndex] = UpperCase Docs[LoopIndex]
  13226.        EndLoop
  13227.          ;Save the newly formatted array
  13228.        WriteTextFile ('NEWMM.DOC',Docs)
  13229.     
  13230.     Do not use FileOpen with ReadTextFile.
  13231.     
  13232.     The power of the ReadTextFile and WriteTextFile have expanded. You can
  13233.     now load and save arrays of any variable types, multidimensional arrays,
  13234.     and mixed array types. This includes strings, numbers, and booleans.
  13235.     File variables are also stored. When a file variable is stored and
  13236.     reloaded the FileAssign command is not necessary.
  13237.     
  13238.     See Also: LongestLine
  13239.     
  13240.     Category: File Array
  13241.     
  13242.     
  13243.      Real (Integer) : Real
  13244.     
  13245.     Returns the real equivalent of an integer.
  13246.     
  13247.      Example:
  13248.        Real(5)  ;returns 5.0
  13249.     
  13250.     See Also: Integer
  13251.     
  13252.     Category: Math Float
  13253.     
  13254.  
  13255.     Computer Tyme * MarxMenu * Users Manual                 Page #228
  13256.     -----------------------------------------------------------------
  13257.     
  13258.      Reboot
  13259.     
  13260.     Causes the computer to do a warm reboot.
  13261.     
  13262.     See Also: ColdBoot
  13263.     
  13264.     Category: Execution
  13265.     
  13266.     
  13267.      ReleaseDate : String
  13268.     
  13269.     Returns the MarxMenu Release Date.
  13270.     
  13271.     Category: String
  13272.     
  13273.     
  13274.      Repeat
  13275.     
  13276.     Used for program control. Usage:
  13277.     
  13278.      REPEAT
  13279.         (statement)
  13280.         (statement)
  13281.      UNTIL (condition)
  13282.     
  13283.      Example:
  13284.        Var Key
  13285.     
  13286.        Repeat
  13287.          Key = ReadKey
  13288.          If Key = 'A'
  13289.            Bat( 'DOLIST.EXE' )
  13290.            ExitMenu
  13291.          EndIf
  13292.          If Key = F1 Then Help
  13293.        Until Key = Esc
  13294.     
  13295.     Category: Conditional
  13296.     
  13297.     
  13298.      ResizeWindow (Horizontal Vertical)
  13299.     
  13300.     Changes the size of the top window. The horizontal and vertical numbers
  13301.     are added to the current size. Use negative numbers to shrink the
  13302.     window. The top left corner stays in the same place.
  13303.     
  13304.      Example:
  13305.        DrawBox 15 5 30 15
  13306.        ResizeWindow 15 5
  13307.     
  13308.     See Also: MoveWindow
  13309.     
  13310.  
  13311.     Computer Tyme * MarxMenu * Users Manual                 Page #229
  13312.     -----------------------------------------------------------------
  13313.     
  13314.     Category: Display
  13315.     
  13316.     
  13317.      Return (param,param,...)
  13318.     
  13319.     Exits a procedure and optionally returns parameters to the calling
  13320.     procedure. It can return as many parameters as you want as long as the
  13321.     calling program uses the same number of parameters. Otherwise, you will
  13322.     get an "Invalid number of parameters" error.
  13323.     
  13324.      Example:
  13325.        Procedure SmallRandomNumber
  13326.        {Returns a random number between 1 and 100}
  13327.        var SmallRand
  13328.           SmallRand = Random mod 100
  13329.           Return (SmallRand + 1)
  13330.        EndProc
  13331.     
  13332.     See Also: Procedure EndProc
  13333.     
  13334.     Category: Misc
  13335.     
  13336.     
  13337.      ReturnCode : Number
  13338.     
  13339.     When you use the Execute function, a ReturnCode value is fed into this
  13340.     variable when you return to the menu. The code returned is the same as
  13341.     what the DOS ErrorLevel would be. This will not work if you use the
  13342.     UseCommand On function because COMMAND.COM would have been loaded and
  13343.     the returncode would be lost.
  13344.     
  13345.     You also have to specify the COM or EXE extension or else MarxMenu will
  13346.     use COMMAND.COM and the return code will be lost.
  13347.     
  13348.      Example:
  13349.        Execute 'INMEM.EXE SK'
  13350.        if ReturnCode = 0 then Writeln 'Sidekick not Loaded!'
  13351.     
  13352.     See Also: ExitCode
  13353.     
  13354.     Category: Execution
  13355.     
  13356.     
  13357.      Right (string,count) : String
  13358.     
  13359.     Returns right characters of string for length count.
  13360.     
  13361.      Example:
  13362.        Right('ABCDEF',3) returns 'DEF'
  13363.     
  13364.     Category: String
  13365.     
  13366.  
  13367.     Computer Tyme * MarxMenu * Users Manual                 Page #230
  13368.     -----------------------------------------------------------------
  13369.     
  13370.      RmDir (String)
  13371.     
  13372.     Removes a directory. The FileResult variable returns the DOS result
  13373.     error code. A zero in FileResult indicates success. You can't remove a
  13374.     directory that contains files or other directories.
  13375.     
  13376.      Example:
  13377.        RmDir 'C:\NETUTILS'
  13378.     
  13379.     See Also: ChDir MkDir
  13380.     
  13381.     Category: Directory
  13382.     
  13383.     
  13384.      RollWindow (Number)
  13385.     
  13386.     Windows can be looked at as a stack. RollWindow will roll a previous
  13387.     window to the top of the stack making the previous window the current
  13388.     window.
  13389.     
  13390.      Example:
  13391.          ;Make the third window on the stack the active window
  13392.        RollWindow 3
  13393.          ;Write out message
  13394.        Writeln 'You have mail waiting!'
  13395.          ;Now put the windows back
  13396.        PushBackWindow (3)
  13397.     
  13398.        Procedure PushBackWindow (N)
  13399.     
  13400.        ;Will roll a window back to its original position on the stack
  13401.        ;The parameter should be the same as the parameter for the call
  13402.        ;to RollWindow. If you use RollWindow(3) then use PushBackWindow(3)
  13403.     
  13404.          Loop N
  13405.            RollWindow N
  13406.          EndLoop
  13407.        EndProc ;PushBackWindow
  13408.     
  13409.     See Also: CurrentWindow SetTopWindow
  13410.     
  13411.     Category: Display
  13412.     
  13413.     
  13414.      Run variable (parameters)
  13415.     
  13416.     This runs a procedure that was stored in a variable.
  13417.     
  13418.      Example:
  13419.      var Y
  13420.     
  13421.  
  13422.     Computer Tyme * MarxMenu * Users Manual                 Page #231
  13423.     -----------------------------------------------------------------
  13424.     
  13425.      Procedure WriteSquared (X)
  13426.         Writeln (X * X)
  13427.      EndProc
  13428.     
  13429.      Y = Loc WriteSquared
  13430.      Run Y(3)   ; This will write a 9 on the screen
  13431.     
  13432.     Warning! Don't put the variable you are running in parentheses.
  13433.     
  13434.         Run (Y,3)  ; this won't work
  13435.     
  13436.     See Also: Loc
  13437.     
  13438.     Category: Misc
  13439.     
  13440.     
  13441.      SavePosition (On/Off)
  13442.     
  13443.     If SavePosition is On, MarxMenu will return to the last menu selection
  13444.     you made when MarxMenu is re-entered. As you select menu layers your
  13445.     keystrokes are stored in an internal string variable called KeySave. On
  13446.     exit, MarxMenu writes KeySave to an environment variable KSV. On return
  13447.     to MarxMenu, this variable is retrieved. The return point may be altered
  13448.     by using the command KeySave = (String).
  13449.     
  13450.     Another thing this points out is that environment variables can be used
  13451.     to store information and allow MarxMenu to remember things from one
  13452.     selection to another. Since MarxMenu doesn't stay memory resident, this
  13453.     is the only way I have found to store information.
  13454.     
  13455.     Category: Keyboard Environment
  13456.     
  13457.     
  13458.      ScreenHeight : Number
  13459.     
  13460.     Returns number of rows of character on your screen. Normally this is 25.
  13461.     
  13462.     Category: Video
  13463.     
  13464.     
  13465.      ScreenWidth : Number
  13466.     
  13467.     Returns number of columns of character on your screen. Normally this is
  13468.     80.
  13469.     
  13470.     Category: Video
  13471.     
  13472.  
  13473.     Computer Tyme * MarxMenu * Users Manual                 Page #232
  13474.     -----------------------------------------------------------------
  13475.     
  13476.      ScrollLock : Boolean
  13477.     
  13478.     Returns true if Scroll Lock is on. This command can also set the Scroll
  13479.     Lock on and off.
  13480.     
  13481.      Example:
  13482.        if ScrollLock then Write 'ScrollLock is On'
  13483.     
  13484.        ScrollLock On  ;Turns ScrollLock On
  13485.        ScrollLock Off ;Turns ScrollLock Off
  13486.     
  13487.        ScrollLock (by itself) turns ScrollLock On.
  13488.     
  13489.        To test for ScrollLock:
  13490.        if ScrollLock
  13491.           <do something>
  13492.        endif
  13493.     
  13494.     See Also: CapsLock NumLock
  13495.     
  13496.     Category: System
  13497.     
  13498.     
  13499.      ScrollMove (On/Off)
  13500.     
  13501.     This allows you to control whether or not the ScrollLock will allow you
  13502.     to move the top window. Default is On.
  13503.     
  13504.      Example:
  13505.        ScrollMove Off
  13506.     
  13507.     Category: Display
  13508.     
  13509.     
  13510.      Second : Number
  13511.     
  13512.     Returns the current second.
  13513.     
  13514.     Category: Time
  13515.     
  13516.     
  13517.      SecondOf (Date) : Number
  13518.     
  13519.     Returns the second of a date. If Date is passed as a string it is
  13520.     converted automatically.
  13521.     
  13522.      Example:
  13523.        SecondOf '6:32:23'  ;returns 23
  13524.     
  13525.     See Also: TimeOf BadDate
  13526.     
  13527.  
  13528.     Computer Tyme * MarxMenu * Users Manual                 Page #233
  13529.     -----------------------------------------------------------------
  13530.     
  13531.     Category: Time
  13532.     
  13533.     
  13534.      Security (On/Off)
  13535.     
  13536.     When security is on, Readln echos '*' instead of the letters that are
  13537.     being typed. This is used for such things as entering passwords other
  13538.     than using the password command.
  13539.     
  13540.      Example:
  13541.        Security On
  13542.     
  13543.     See Also: Readln
  13544.     
  13545.     Category: String
  13546.     
  13547.     
  13548.      Segment (String) : Number
  13549.     
  13550.     Returns the memory segment where string is located.
  13551.     
  13552.     See Also: Offset
  13553.     
  13554.     Category: Memory
  13555.     
  13556.     
  13557.      SelectPath : String
  13558.     
  13559.     This command uses another program in the Computer Tyme DOS TOOLBOX
  13560.     called Pick Directory to read a text into a variable. You must have
  13561.     Computer Tyme Pick Directory for this feature to work.
  13562.     
  13563.      Example:
  13564.        OnKey 'B'
  13565.        |%BackPath = SelectPath
  13566.        cd %BackPath
  13567.        backup c: a:
  13568.     
  13569.     Category: Directory
  13570.     
  13571.     
  13572.      SerialNumber
  13573.     
  13574.     This returns your MarxMenu serial number in a numeric variable. If you
  13575.     are using an unregistered evaluation version of MarxMenu the result is
  13576.     (0)-Zero.
  13577.     
  13578.      Example:
  13579.        if SerialNumber <> 0
  13580.             writeln "My MarxMenu serial number is: " SerialNumber
  13581.        else
  13582.             writeln "This is an unregistered MarxMenu, no serial number."
  13583.        endif
  13584.     
  13585.  
  13586.     Computer Tyme * MarxMenu * Users Manual                 Page #234
  13587.     -----------------------------------------------------------------
  13588.     
  13589.      SerialPorts : Number
  13590.     
  13591.     Returns number of serial ports.
  13592.     
  13593.     Category: System
  13594.     
  13595.     
  13596.      Set [Value,Value,Value,Value]
  13597.     
  13598.     Set is used to define an array made up of specific values.
  13599.     
  13600.      Example:
  13601.        X = Set[2,3,5,7] ;Variable X becomes an array containing 2 3 5 and 7.
  13602.     
  13603.     Category: Array
  13604.     
  13605.     
  13606.      SetArraySize (Array,Size)
  13607.     
  13608.     If the array is larger than Size the array is truncated. If it is
  13609.     smaller, memory is allocated for the array.
  13610.     
  13611.     Category: Array
  13612.     
  13613.     
  13614.      SetEnv (String)
  13615.     
  13616.     This is used to set environment strings. It can be used on the Current,
  13617.     Parent, Master or Shell environment.
  13618.     
  13619.      Example:
  13620.        SetEnv ('PATH=C:\')
  13621.        SetEnv ('COMSPEC=X:COMMAND.COM')
  13622.     
  13623.     You can also set the environment by using '%' on each side of the
  13624.     environment variable.
  13625.     
  13626.      Example:
  13627.        %PATH% = 'C:\'
  13628.        %COMSPEC% = 'O:\COMMAND.COM'
  13629.     
  13630.     MarxMenu also allows you to select which environment you are working
  13631.     with. This is done with the following commands.
  13632.     
  13633.      CurrentEnvironment
  13634.      ParentEnvironment
  13635.      MasterEnvironment
  13636.      ShellEnvironment   (default)
  13637.     
  13638.     See Also: ReadEnv ReadEnvironment ShellEnvironment
  13639.     See Also: CurrentEnvironment ParentEnvironment MasterEnvironment
  13640.     
  13641.  
  13642.     Computer Tyme * MarxMenu * Users Manual                 Page #235
  13643.     -----------------------------------------------------------------
  13644.     
  13645.     Category: Environment
  13646.     
  13647.     
  13648.      SetTimerTask (Loc Procedure,Ticks)
  13649.     
  13650.     SetTimerTask allows for background multitasking or real time events. The
  13651.     Ticks parameter specifies how often the task will run in clock ticks
  13652.     (18.2 times a second). If 6 ticks are specified then the task will run
  13653.     every 6 clock ticks or about 3 times a second. This command can be used
  13654.     to run scheduled events as well as periodic events.
  13655.     
  13656.      Example:
  13657.        SetTimerTask(Loc BlinkColor,9)
  13658.     
  13659.        Procedure BlinkColor
  13660.           gotoxy 5 5
  13661.           textcolor white (random mod 7)+1
  13662.           writeln " * Colors Change * "
  13663.        EndProc
  13664.     
  13665.     Category: Event
  13666.     
  13667.     
  13668.      SetTopWindow (Number)
  13669.     
  13670.     Selects a window by number making it the current window and moves it to
  13671.     the top.
  13672.     
  13673.      Example:
  13674.        DrawBox ....
  13675.        ThisWindow = CurrentWindow
  13676.        DrawBox ....
  13677.        DrawBox ....
  13678.        SetTopWindow (ThisWindow)
  13679.     
  13680.     See Also: CurrentWindow RollWindow SetWindowUnder
  13681.     
  13682.     Category: Display
  13683.     
  13684.     
  13685.      SetWindowUnder (Window1,Window2)
  13686.     
  13687.     This command moves Window1 underneath Window2. This can be used to put a
  13688.     window back in the stack after you use SetTopWindow.
  13689.     
  13690.      Example:
  13691.        SetWindowUnder (StatusWindow,StatusWindow + 1)
  13692.     
  13693.     See Also: CurrentWindow SetTopWindow RollWindow
  13694.     
  13695.     Category: Display
  13696.     
  13697.  
  13698.     Computer Tyme * MarxMenu * Users Manual                 Page #236
  13699.     -----------------------------------------------------------------
  13700.     
  13701.      Shadow (On/Off)
  13702.     
  13703.     Turn window shadows On/Off.
  13704.     
  13705.      Example:
  13706.        Shadow On
  13707.     
  13708.     Category: Display
  13709.     
  13710.     
  13711.      ShadowColor (Foreground,Background)
  13712.     
  13713.     Sets the color of the shadow. There are actually two shadow colors.
  13714.     MarxMenu stores different values for big shadows and small shadows.
  13715.     
  13716.     See Also: BigShadow SmallShadow ShadowPosition Shadow
  13717.     
  13718.     Category: Color
  13719.     
  13720.     
  13721.      ShadowPosition (Number)
  13722.     
  13723.     Selects the shadow position around the window. A zero (default) sets the
  13724.     shadow position to the bottom right side. A one sets the shadow position
  13725.     to the bottom left. Using ShadowPosition turns shadowing on so a Shadow
  13726.     On command is not required.
  13727.     
  13728.      Example:
  13729.        ShadowPosition 1
  13730.     
  13731.     See Also: Shadow ShadowColor BigShadow SmallShadow
  13732.     
  13733.     Category: Display
  13734.     
  13735.     
  13736.      Shared
  13737.     
  13738.     The key word SHARED can be used to define variables just like VAR. Any
  13739.     variable defined with SHARED is passed globally to and from overlays.
  13740.     
  13741.     The important thing is that the Shared variables must be defined exactly
  13742.     the same way between the overlays. There is also a predefined variable
  13743.     called COMMON. Technically, Shared variables are qualifiers off of
  13744.     COMMON.
  13745.     
  13746.      Example:
  13747.        Shared Var1 Var2 Var3
  13748.     
  13749.     See Also: Var Constant Qualifier
  13750.     
  13751.     Category: Variable
  13752.     
  13753.  
  13754.     Computer Tyme * MarxMenu * Users Manual                 Page #237
  13755.     -----------------------------------------------------------------
  13756.     
  13757.      ShellEnvironment
  13758.     
  13759.     ShellEnvironment selects the environment of the last COMMAND.COM in
  13760.     memory for use with environment access commands. This is usually the
  13761.     same as the Master Environment.
  13762.     
  13763.     More than one COMMAND.COM is loaded when you are running a shell under
  13764.     Windows or DesqView. When using these programs, you will want to access
  13765.     the Shell Environment instead of the Master Environment. The Shell
  13766.     Environment is the one that will run batch files.
  13767.     
  13768.     See Also: ReadEnv SetEnv ReadEnvironment MasterEnvironment
  13769.     See Also: CurrentEnvironment ParentEnvironment
  13770.     
  13771.     Category: Environment
  13772.     
  13773.     
  13774.      Shl : Operator
  13775.     
  13776.     Shift left, does a binary 32 bit shift left.
  13777.     
  13778.      Example:
  13779.        Writeln 5 Shl 2  ;returns 20
  13780.     
  13781.     See Also: Shr
  13782.     
  13783.     Category: Math
  13784.     
  13785.     
  13786.      Shr : Operator
  13787.     
  13788.     Shift right, does a binary 32 bit shift right.
  13789.     
  13790.      Example:
  13791.        Writeln 20 Shr 2  ;returns 5
  13792.     
  13793.     See Also: Shl
  13794.     
  13795.     Category: Math
  13796.     
  13797.     
  13798.      Sin (Radians) : Real
  13799.     
  13800.     Returns the Sine of a real.
  13801.     
  13802.     Category: Math Float
  13803.     
  13804.  
  13805.     Computer Tyme * MarxMenu * Users Manual                 Page #238
  13806.     -----------------------------------------------------------------
  13807.     
  13808.      SingleLineBox
  13809.     
  13810.     Selects single line box for menu borders.
  13811.     
  13812.     See Also: DoubleLineBox BlockBox CustomBox NoBoxBorder
  13813.     
  13814.     Category: Display
  13815.     
  13816.     
  13817.      SmallShadow
  13818.     
  13819.     Selects small shadow type.
  13820.     
  13821.     See Also: BigShadow ShadowPosition ShadowColor
  13822.     
  13823.     Category: Display
  13824.     
  13825.     
  13826.      SortArray (Array)
  13827.     
  13828.     SortArray will do an alphabetical sort on an array of strings.
  13829.     
  13830.      Example:
  13831.        Sort a Text File:
  13832.     
  13833.        Usage: DIR|MARXMENU SORT|MORE
  13834.               MARXMENU SORT INFILE OUTFILE
  13835.     
  13836.        SORT.MNU
  13837.          var SortBuf
  13838.          StandardIO
  13839.          ReadTextFile  (ParamStr(2),SortBuf)
  13840.          SortArray(SortBuf)
  13841.          WriteTextFile (ParamStr(3),SortBuf)
  13842.     
  13843.     Category: Array
  13844.     
  13845.     
  13846.      SortArrayLinked Array,KeyArray
  13847.     
  13848.     SortArrayLinked will sort an array based upon the contents of a key
  13849.     array.
  13850.     
  13851.      Example:
  13852.        var NumberArray,key
  13853.     
  13854.        writeln "Array sequential on element 1"
  13855.     
  13856.        loop 10
  13857.             NumberArray[loopindex,1]=loopindex
  13858.             NumberArray[loopindex,2]=(random mod 50 + 1)
  13859.             writeln NumberArray[loopindex,1] "   " NumberArray[loopindex,2]
  13860.        endloop
  13861.     
  13862.  
  13863.     Computer Tyme * MarxMenu * Users Manual                 Page #239
  13864.     -----------------------------------------------------------------
  13865.     
  13866.        MatrixInvert NumberArray
  13867.        key = NumberArray[2]
  13868.        matrixinvert NumberArray
  13869.        sortarraylinked NumberArray,key
  13870.     
  13871.        writeln "Array now sorted based on element 2"
  13872.     
  13873.        loop 10
  13874.             writeln NumberArray[loopindex,1] "   " NumberArray[loopindex,2]
  13875.        endloop
  13876.     
  13877.     See Also: MatrixInvert
  13878.     
  13879.     Category: Array
  13880.     
  13881.     
  13882.      Sound (On/Off)
  13883.     
  13884.     Turn sound effects On/Off.
  13885.     
  13886.     Category: Display
  13887.     
  13888.     
  13889.      SplitPath (Array)
  13890.     
  13891.     SplitPath reads the PATH environment variable and splits it up into an
  13892.     array of strings that are directories the path is made up of. All
  13893.     directory names are capitalized.
  13894.     
  13895.      Example:
  13896.        var P
  13897.        SplitPath P
  13898.        Loop P
  13899.           Writeln P[LoopIndex]   ;writes the directories in PATH
  13900.        EndLoop
  13901.     
  13902.     See Also: BuildPath FixPath
  13903.     
  13904.     Category: String Array Environment
  13905.     
  13906.     
  13907.      SpxFreeConnections : Number
  13908.     
  13909.     Returns the number of free SPX connections.
  13910.     
  13911.     Category: Novell
  13912.     
  13913.  
  13914.     Computer Tyme * MarxMenu * Users Manual                 Page #240
  13915.     -----------------------------------------------------------------
  13916.     
  13917.      IpxLoaded : Boolean
  13918.     
  13919.     Returns True if SPX is loaded
  13920.     
  13921.     Category: Novell
  13922.     
  13923.     
  13924.      SpxMaxConnections : Number
  13925.     
  13926.     Returns the maximum number of SPX connections allowed.
  13927.     
  13928.     Category: Novell
  13929.     
  13930.     
  13931.      Sqr (Real) : Real
  13932.     
  13933.     Returns the Square Root of a real.
  13934.     
  13935.     Category: Math Float
  13936.     
  13937.     
  13938.      StandardIO (On/Off)
  13939.     
  13940.     This tells MarxMenu to use standard Input and Output file handles for
  13941.     reading the keyboard and writing to the screen when turned On. When
  13942.     turned Off, MarxMenu does direct screen writes. When StandardIO is on,
  13943.     several MarxMenu commands will send ANSI escape sequences. The commands
  13944.     that send ANSI sequences are as follows:
  13945.     
  13946.      TextColor
  13947.      TextBackground
  13948.      ClearScreen
  13949.      ClearLine
  13950.      GotoXY
  13951.     
  13952.     The input and output can be redirected by using the InFile and OutFile
  13953.     variables.
  13954.     
  13955.     See Also: InFile OutFile
  13956.     
  13957.     Category: Display Ansi
  13958.     
  13959.     
  13960.      Str (Number) : String
  13961.     
  13962.     Returns a string value from a numeric variable.
  13963.     
  13964.      Example:
  13965.        writeln "*"+Str(6 * 5)+"*"  ;returns the string '*30*'
  13966.     
  13967.     See Also: Value
  13968.     
  13969.  
  13970.     Computer Tyme * MarxMenu * Users Manual                 Page #241
  13971.     -----------------------------------------------------------------
  13972.     
  13973.     Category: String
  13974.     
  13975.     
  13976.      StuffAKey (String or Number)
  13977.     
  13978.     Stuffs a single key into the DOS keyboard buffer when MarxMenu exits.
  13979.     The limit is 16 characters.
  13980.     
  13981.      Example:
  13982.        StuffAKey($3F00) ;stuff the F5 key
  13983.        StuffAKey F5     ;same thing
  13984.     
  13985.     Do not mix StuffAKey with StuffKBD. Use one or the other.
  13986.     
  13987.     Category: Execution Keyboard String
  13988.     
  13989.     
  13990.      StuffKBD (String)
  13991.     
  13992.     Stuffs the string into the DOS keyboard buffer when MarxMenu exits. The
  13993.     limit is 16 characters.
  13994.     
  13995.      Example:
  13996.        StuffKBD 'LOGOUT' + CR
  13997.     
  13998.     Category: Execution Keyboard String
  13999.     
  14000.     
  14001.      StuffKeyboardNow
  14002.     
  14003.     Normally the keyboard stuffing is done as MarxMenu quits. This forces
  14004.     the keyboard to be stuffed immediately.
  14005.     
  14006.     Category: Keyboard
  14007.     
  14008.     
  14009.      Succ (Number) : Number
  14010.     
  14011.     Returns number plus 1.
  14012.     
  14013.      Example:
  14014.        Succ(4)  ;returns 5
  14015.     
  14016.     See Also: Pred
  14017.     
  14018.     Category: Math
  14019.     
  14020.  
  14021.     Computer Tyme * MarxMenu * Users Manual                 Page #242
  14022.     -----------------------------------------------------------------
  14023.     
  14024.      Suggest (Char)
  14025.     
  14026.     Normally the UseArrows command will start in the upper left-hand corner.
  14027.     By using the Suggest command, you can set it to start on any menu
  14028.     selection.
  14029.     
  14030.      Example:
  14031.        Suggest 'E'
  14032.     
  14033.     Category: Display
  14034.     
  14035.     
  14036.      TaskNumber : Number
  14037.     
  14038.     Reads the current task number. If running DesqView or Software Carousel,
  14039.     this is set to the window number. If running TaskMax this is set to the
  14040.     TaskID. If running in a DOS session under Windows it is set to the
  14041.     virtual machine number It can also be set by setting the TASK=
  14042.     environment variable.
  14043.     
  14044.     The TaskNumber is used to create unique batch files in an operating
  14045.     environment that supports multiple tasks so that temporary files from
  14046.     one task don't trash temporary files from another task when running
  14047.     MarxMenu more than once.
  14048.     
  14049.     Category: System
  14050.     
  14051.     
  14052.      TextBackground (color)
  14053.     
  14054.     Sets text background color.
  14055.     
  14056.      Example:
  14057.        TextBackground Blue
  14058.     
  14059.     Category: Color Ansi
  14060.     
  14061.     
  14062.      TextColor (Foreground,Background)
  14063.     
  14064.     Sets the color of text to be displayed on the screen. TextColor resets
  14065.     the value of CapsColor.
  14066.     
  14067.      Example:
  14068.        loop 16
  14069.             TextColor loopindex,Brown
  14070.             Writeln "This is a test"
  14071.        endloop
  14072.     
  14073.     Category: Color Ansi
  14074.     
  14075.  
  14076.     Computer Tyme * MarxMenu * Users Manual                 Page #243
  14077.     -----------------------------------------------------------------
  14078.     
  14079.      TextMode (num)
  14080.     
  14081.     Sets the video text mode.
  14082.     
  14083.      0 = 40 column BW
  14084.      1 = 40 column COLOR
  14085.      2 = 80 column BW
  14086.      3 = 80 column COLOR
  14087.      7 = Mono
  14088.      258 = 43/50 line EGA BW
  14089.      259 = 43/50 line EGA COLOR
  14090.     
  14091.      Example:
  14092.        TextMode BW80
  14093.     
  14094.     Category: Video
  14095.     
  14096.     
  14097.      TextPos : Number
  14098.     
  14099.     TextPos returns the current position in a text file. This can be saved
  14100.     so that you can go to the same place using TextSeek.
  14101.     
  14102.     See Also: TextSeek
  14103.     
  14104.     Category: File
  14105.     
  14106.     
  14107.      TextSeek (Number)
  14108.     
  14109.     TextSeek moves to a specific byte in a text file.
  14110.     
  14111.     See Also: TextPos
  14112.     
  14113.     Category: File
  14114.     
  14115.     
  14116.      Then
  14117.     
  14118.     Conditional control.
  14119.     
  14120.      Example:
  14121.        if <condition> then <do something>
  14122.     
  14123.     See Also: If Else Endif ElseIf
  14124.     
  14125.     Category: Conditional
  14126.     
  14127.  
  14128.     Computer Tyme * MarxMenu * Users Manual                 Page #244
  14129.     -----------------------------------------------------------------
  14130.     
  14131.      TimeOf (String) : Number
  14132.     
  14133.     Converts a string representing a date to a time number. The number is
  14134.     the number of seconds since 01-01-80. Conversion follows international
  14135.     rules based on the country code.
  14136.     
  14137.      Examples:
  14138.        '4-7-91'                 ;04-07-1991 00:00:00
  14139.        'April 7th, 1991 4:35pm' ;04-07-1991 16:35:00
  14140.        '12:35:23a'              ;04-07-1991 00:35:23
  14141.        '3:15'                   ;04-07-1991 03:15:00
  14142.     
  14143.     If the string can't be converted, then BadDate is set to true.
  14144.     
  14145.     See Also: BadDate
  14146.     
  14147.     Category: International Time
  14148.     
  14149.     
  14150.      Timer : Number
  14151.     
  14152.     Returns the system timer 32 bit value that is set to 0 at midnight and
  14153.     is incremented 18.2 times a second.
  14154.     
  14155.     Category: Time
  14156.     
  14157.     
  14158.      TimeSeparator : String
  14159.     
  14160.     Returns the time separator character from the country information.
  14161.     
  14162.     See Also: DecimalSeparator DateSeparator CountryCode
  14163.     
  14164.     Category: International Time
  14165.     
  14166.     
  14167.      TimeString (Time) : String
  14168.     
  14169.     Returns the time as a string in HH:MM:SS format. 24 hour. If no
  14170.     parameter is passed, Now is assumed.
  14171.     
  14172.      Example:
  14173.        Writeln TimeString
  14174.           ;returns the time of Now as text
  14175.        Writeln TimeString (Now + (5 * SecondsInHour))
  14176.           ;returns the time of 5 hours from now as text
  14177.     
  14178.     Category: String Time
  14179.     
  14180.  
  14181.     Computer Tyme * MarxMenu * Users Manual                 Page #245
  14182.     -----------------------------------------------------------------
  14183.     
  14184.      TMaxActiveTasks : Number
  14185.     
  14186.     Returns the number of active tasks started under TaskMax.
  14187.     
  14188.     Category: TaskMax
  14189.     
  14190.     
  14191.      TMaxCreateTask (command string)
  14192.     
  14193.     TMaxCreateTask creates a new task and executes it. You pass it a command
  14194.     line just like you would use the EXECUTE program. Like the EXECUTE
  14195.     program, if you use the COM or EXE extension then you won't load a
  14196.     secondary COMMAND.COM and save yourself 5k of memory and gain some
  14197.     speed. When the program exits that task is cleared.
  14198.     
  14199.     The TaskID of the created task is returned in TMaxResult.
  14200.     
  14201.      Example:
  14202.        TMaxCreateTask 'DIR *.*'
  14203.     
  14204.     See Also: TMaxReturnCount TMaxResult
  14205.     
  14206.     Category: TaskMax
  14207.     
  14208.     
  14209.      TMaxCut (TaskID)
  14210.     
  14211.     Activates TaskMax data-cutting function.
  14212.     
  14213.     See Also: TMaxPaste TMaxGetPasteBuffer TMaxSetPasteBuffer
  14214.     
  14215.     Category: TaskMax
  14216.     
  14217.     
  14218.      TMaxDeleteTask (TaskID)
  14219.     
  14220.     Kills the task identified by TaskID.
  14221.     
  14222.     See Also: TMaxTaskOpenFiles
  14223.     
  14224.     Category: TaskMax
  14225.     
  14226.     
  14227.      TMaxDirectSwitching (On/Off)
  14228.     
  14229.     Turns On or Off the ability to use the direct switch keys without going
  14230.     through the task manager menu. Default is On. By setting it to Off the
  14231.     direct switch keys work normally. TaskMax sometimes conflicts with
  14232.     applications when direct switching is On.
  14233.     
  14234.      Example:
  14235.        TMaxdirectSwitching Off
  14236.     
  14237.  
  14238.     Computer Tyme * MarxMenu * Users Manual                 Page #246
  14239.     -----------------------------------------------------------------
  14240.     
  14241.     Category: TaskMax
  14242.     
  14243.     
  14244.      TMaxEMSMemLim (Number)
  14245.     
  14246.     This is a variable that can be either read or set to the maximum number
  14247.     of bytes of EMS memory that each task can have. This prevents one task
  14248.     from hogging up all the EMS. Setting this to 0 disables limiting.
  14249.     
  14250.      Example:
  14251.        TMaxEMSMemLim = 2000000   ;2 megs per task
  14252.        Writeln TMaxEMSLim
  14253.     
  14254.     Category: TaskMax
  14255.     
  14256.     
  14257.      TMaxGetPasteBuffer (Array)
  14258.     
  14259.     Reads the TaskMax paste buffer into an array of strings.
  14260.     
  14261.     See Also: TMaxCut TMaxPaste TMaxSetPasteBuffer
  14262.     
  14263.     Category: TaskMax
  14264.     
  14265.     
  14266.      TMaxInstalled : Boolean
  14267.     
  14268.     This function returns true if TaskMax is installed. Any other TaskMax
  14269.     command produces a run-time error if used when TaskMax is not installed.
  14270.     
  14271.      Example:
  14272.        if not TMaxInstalled
  14273.           Writeln 'This menu requires TaskMax to run!'
  14274.        endif
  14275.     
  14276.     Category: TaskMax
  14277.     
  14278.     
  14279.      TMaxMaxTasks : Number
  14280.     
  14281.     Returns the total number of tasks allowed by TaskMax. Default is 20.
  14282.     
  14283.     Category: TaskMax
  14284.     
  14285.     
  14286.      TMaxNameTask (Task,Name)
  14287.     
  14288.     Normally TaskMax automatically names tasks according to what program is
  14289.     running. TMaxNameTask allows you to override the default task name with
  14290.     a task name of your choosing. The name is limited to 8 characters,
  14291.     
  14292.      Example:
  14293.        TMaxNameTask (2,'MYNAME')   ;renames task 2
  14294.     
  14295.  
  14296.     Computer Tyme * MarxMenu * Users Manual                 Page #247
  14297.     -----------------------------------------------------------------
  14298.     
  14299.     Category: TaskMax
  14300.     
  14301.     
  14302.      TMaxPaste (TaskID)
  14303.     
  14304.     Activates TaskMax data pasting function.
  14305.     
  14306.     See Also: TMaxCut TMaxGetPasteBuffer TMaxSetPasteBuffer
  14307.     
  14308.     Category: TaskMax
  14309.     
  14310.     
  14311.      TMaxReadTaskInfo (2D Array)
  14312.     
  14313.     Reads the task information table into a 2-dimensional array where the
  14314.     first field is the task name and the second field is the TaskId number.
  14315.     The TaskID number is used by all TMax commands that act on a single task
  14316.     (TMaxDelete, TMaxSwitchTasks... ).
  14317.     
  14318.      Example:
  14319.        var Tasks
  14320.        TMaxReadTaskInfo(Tasks)
  14321.        Loop Tasks
  14322.           Writeln Tasks[LoopIndex,1] ' ' Tasks[LoopIndex,2]
  14323.        EndLoop
  14324.     
  14325.     Category: TaskMax
  14326.     
  14327.     
  14328.      TMaxResult : Number
  14329.     
  14330.     TMaxResult is a variable containing return information that other TMax
  14331.     command return or the result status of a TMax command.
  14332.     
  14333.     Category: TaskMax
  14334.     
  14335.     
  14336.      TMaxReturnCount
  14337.     
  14338.     This variable sets the number of timer ticks (18.2 ticks per second)
  14339.     that TMaxCreateTask will execute in a program before returning to the
  14340.     original program. If it is set to 0 it will stay in the original
  14341.     program. By setting TMaxReturnCount to a number other than 0 you can run
  14342.     a program for a few seconds and come back. This is used to preload tasks
  14343.     that you might later want to switch to.
  14344.     
  14345.       Example:
  14346.         TMaxReturnCount = 27      ;1.5 Seconds
  14347.         TMaxCreateTask 'DM3.EXE'  ;load a file manager
  14348.         TMaxReturnCount = 0       ;set back to 0 for normal usage
  14349.     
  14350.     See Also: TMaxCreateTask
  14351.     
  14352.  
  14353.     Computer Tyme * MarxMenu * Users Manual                 Page #248
  14354.     -----------------------------------------------------------------
  14355.     
  14356.     Category: TaskMax
  14357.     
  14358.     
  14359.      TMaxSetPasteBuffer (Array)
  14360.     
  14361.     Sets the TaskMax paste buffer to the strings in array.
  14362.     
  14363.     See Also: TMaxCut TMaxPaste TMaxGetPasteBuffer
  14364.     
  14365.     Category: TaskMax
  14366.     
  14367.     
  14368.      TMaxSwitchTasks (TaskID)
  14369.     
  14370.     Switches the current task out and selects the task identified be TaskID.
  14371.     
  14372.     Category: TaskMax
  14373.     
  14374.     
  14375.      TMaxSwitchToManager
  14376.     
  14377.     This command brings up the task manager the same way as if you had
  14378.     pressed the hot key.
  14379.     
  14380.     Category: TaskMax
  14381.     
  14382.     
  14383.      TMaxTakeOver (On/Off)
  14384.     
  14385.     This allows your MarxMenu program to become the task manager menu. When
  14386.     the user presses the hot key to pop up the task switching menu it will
  14387.     pop up your MarxMenu program instead. You can disable this by setting it
  14388.     to Off.
  14389.     
  14390.     Category: TaskMax
  14391.     
  14392.     
  14393.      TMaxTaskOpenFiles (TaskID) : Number
  14394.     
  14395.     Returns the number of open files a task has. You may want to test to see
  14396.     if a task that open files before deleting the task.
  14397.     
  14398.      Example:
  14399.        if TMaxTaskOpenFiles (3) > 0
  14400.           Writeln 'Task 3 has open files.'
  14401.        endif
  14402.     
  14403.     See Also: TMaxDeleteTask
  14404.     
  14405.     Category: TaskMax
  14406.     
  14407.  
  14408.     Computer Tyme * MarxMenu * Users Manual                 Page #249
  14409.     -----------------------------------------------------------------
  14410.     
  14411.      TMaxThisTask : Number
  14412.     
  14413.     Returns the TaskID of the current task.
  14414.     
  14415.     Category: TaskMax
  14416.     
  14417.     
  14418.      TMaxVersion : Number
  14419.     
  14420.     Returns the version number of TaskMax.
  14421.     
  14422.     Category: TaskMax
  14423.     
  14424.     
  14425.      Today : Date
  14426.     
  14427.     Returns the current day as a date. The date returned has the time set to
  14428.     midnight or 00:00:00. It can also be used to set the system date.
  14429.     
  14430.      Read the current day;
  14431.         X = Today
  14432.      Set the system clock:
  14433.         Today = TimeOf '08-19-91'
  14434.     
  14435.     See Also: Tomorrow Now
  14436.     
  14437.     Category: Time
  14438.     
  14439.     
  14440.      Tomorrow : Time
  14441.     
  14442.     Returns the time of the day after today at midnight.
  14443.     
  14444.     See Also: Today Now
  14445.     
  14446.     Category: Time
  14447.     
  14448.     
  14449.      Tone (Frequency,Duration)
  14450.     
  14451.     This command plays a note at Frequency cycles per second for a period of
  14452.     Duration 1/18 of a second. The reason it is in 1/18 seconds is because
  14453.     there is a standard interrupt that returns that time period. The IBM
  14454.     series computers are not music oriented machines so don't throw away
  14455.     your Compact Disk player.
  14456.     
  14457.     The maximum duration is 255 1/18 of a second. Normally, MarxMenu will
  14458.     create a break in between notes equal to 1/8 of the duration of the
  14459.     note. If you want to eliminate the break and create a 'slur' (music
  14460.     term), add 256 to the duration. This tells MarxMenu to connect the notes
  14461.     without a break.
  14462.     
  14463.  
  14464.     Computer Tyme * MarxMenu * Users Manual                 Page #250
  14465.     -----------------------------------------------------------------
  14466.     
  14467.     Category: Music
  14468.     
  14469.     
  14470.      TotalDiskSpace (Drive) : Number
  14471.     
  14472.     Returns total disk space in bytes.
  14473.     
  14474.      Example:
  14475.        Writeln (TotalDiskSpace 'C')
  14476.     
  14477.     TotalDiskSpace only looks at the first character of the string for
  14478.     the drive letter.
  14479.     
  14480.     Category: System
  14481.     
  14482.     
  14483.      TotalEMS : Number
  14484.     
  14485.     Returns total EMS memory in bytes.
  14486.     
  14487.      Example:
  14488.        Writeln TotalEMS
  14489.     
  14490.     Category: Memory
  14491.     
  14492.     
  14493.      Trim (String or Array)
  14494.     
  14495.     Trims white space from both ends of a string. White space is
  14496.     blank characters and lower.
  14497.     
  14498.      Example:
  14499.        St = ' ABC '
  14500.        Trim St        ;St now is 'ABC'
  14501.     
  14502.     When used with an array Trim removes blank lines from the beginning and
  14503.     end of the array. It doesn't trim the elements of the array.
  14504.     
  14505.     Category: String Array
  14506.     
  14507.     
  14508.      TrimInputString (On/Off)
  14509.     
  14510.     TrimInputString if set to On will cause blank characters to be trimmed
  14511.     from the front and tail of a string read from the keyboard with Readln.
  14512.     By default, TrimInputString is set to true.
  14513.     
  14514.     See Also: Readln
  14515.     
  14516.     Category: String
  14517.     
  14518.  
  14519.     Computer Tyme * MarxMenu * Users Manual                 Page #251
  14520.     -----------------------------------------------------------------
  14521.     
  14522.      TrueName (String) : String
  14523.     
  14524.     There is an undocumented feature of DOS called TRUENAME. It returns the
  14525.     real name of a file or directory looking past such things as drive
  14526.     mappings and Assigned or Substituted drives. On local drives you get the
  14527.     drive and path where the file really is. On networks you get server and
  14528.     volume information where the server name starts with a '\\'.
  14529.     
  14530.      Example:
  14531.        TrueName ('H:')  ;returns \\TYME\SYS\HOME\MARC
  14532.     
  14533.     See Also: CleanFileName
  14534.     
  14535.     Category: String File
  14536.     
  14537.     
  14538.      TSRs (Array)
  14539.     
  14540.     TSRs returns a list of all TSRs in memory as well as the names of
  14541.     pending batch files.
  14542.     
  14543.      Example:
  14544.        var TsrList
  14545.        TSRs(TsrList)
  14546.        Loop TsrList
  14547.           Writeln TsrList[LoopIndex]
  14548.        EndLoop
  14549.     
  14550.     See Also: InMem
  14551.     
  14552.     Category: Memory
  14553.     
  14554.     
  14555.      UnBlank : Boolean
  14556.     
  14557.     Unblank returns true if MarxMenu has determined that the screen blanker
  14558.     should finish. Your screen blanker needs to call UnBlank to determine
  14559.     when to unblank the screen.
  14560.     
  14561.      Example:
  14562.        while not UnBlank
  14563.           <your screen blanker>
  14564.        endwhile
  14565.     
  14566.     You can also set UnBlank to true when you want to UnBlank the screen.
  14567.     This can be used if you write your own screen blanker that is an
  14568.     external program.
  14569.     
  14570.     An example of writing your own screen blanker is included in the file
  14571.     WORM.INC.
  14572.     
  14573.  
  14574.     Computer Tyme * MarxMenu * Users Manual                 Page #252
  14575.     -----------------------------------------------------------------
  14576.     
  14577.      Example:
  14578.        Procedure MyBlanker
  14579.           Execute 'MYBLANK.EXE'
  14580.           UnBlank = True
  14581.        EndProc
  14582.     
  14583.     See Also: BlankScreenProgram
  14584.     
  14585.     Category: Display
  14586.     
  14587.     
  14588.      UniqueFileName : String
  14589.     
  14590.     Uses the create new file call to get a filename that is different than
  14591.     any other filename. It is tied to the DOS call that is used to create a
  14592.     unique filename according to the rules of your operating system.
  14593.     
  14594.     Category: File String
  14595.     
  14596.     
  14597.      Until
  14598.     
  14599.     Conditional control.
  14600.     
  14601.      Example:
  14602.        Repeat
  14603.           <statement>
  14604.           <statement>
  14605.        Until <condition>
  14606.     
  14607.     See Also: Repeat.
  14608.     
  14609.     Category: Conditional
  14610.     
  14611.     
  14612.      UpperCase (String) : String
  14613.     
  14614.     Return UpperCase of String including support for international
  14615.     characters.
  14616.     
  14617.      Example:
  14618.        Name = UpperCase(Name)
  14619.     
  14620.     See Also: LowerCase
  14621.     
  14622.     Category: String International
  14623.     
  14624.  
  14625.     Computer Tyme * MarxMenu * Users Manual                 Page #253
  14626.     -----------------------------------------------------------------
  14627.     
  14628.      UpperCaseOnly : Boolean
  14629.     
  14630.     Setting UpperCaseOnly to On forces text entered with Readln or ReadKey
  14631.     to upper case.
  14632.     
  14633.      Example:
  14634.        UpperCaseOnly On
  14635.     
  14636.     See Also: Readln
  14637.     
  14638.     Category: String
  14639.     
  14640.     
  14641.      UseArrows
  14642.     
  14643.     UseArrows tells MarxMenu that the selection will be made by moving an
  14644.     inverse video bar over the selections. No parameters are required for
  14645.     this command to work. It will pick the first line with a capital letter
  14646.     as the first menu selection. All text in the window must be indented at
  14647.     least one space and there must be one space between the end of the line
  14648.     and the right wall of the window. Multiple items on the same line must
  14649.     be separated by two or more spaces.
  14650.     
  14651.     The OnKey selection is triggered by either the first capital letter in
  14652.     the selection or by a number from 0 - 9 or some punctuation characters.
  14653.     This number or letter will be a different color if you use the CapsColor
  14654.     command. (See Also: PULL.MNU for an example).
  14655.     
  14656.     UseArrows Off will disable this feature.
  14657.     
  14658.     See Also: ReadKey
  14659.     
  14660.     Category: Display
  14661.     
  14662.     
  14663.      UseCommand (On/Off)
  14664.     
  14665.     Used with Execute. UseCommand will load COMMAND.COM before running the
  14666.     specified program. Its not as fast, because the system has to find and
  14667.     load COMMAND.COM, then the specified program. The advantage is if
  14668.     COMMAND.COM is loaded, it will allow you to run batch files and internal
  14669.     DOS commands. It also doesn't require you to specify the COM or EXE
  14670.     extension.
  14671.     
  14672.      Example:
  14673.        OnKey 'D'
  14674.        |UseCommand On
  14675.        |Execute 'DM'
  14676.     
  14677.     The default is Off.
  14678.     
  14679.  
  14680.     Computer Tyme * MarxMenu * Users Manual                 Page #254
  14681.     -----------------------------------------------------------------
  14682.     
  14683.     See Also: Execute
  14684.     
  14685.     Category: Execution
  14686.     
  14687.     
  14688.      UsedDiskSpace (Drive) : Number
  14689.     
  14690.     Returns used disk space in bytes.
  14691.     
  14692.      Example:
  14693.        Writeln (UsedDiskSpace 'C')
  14694.     
  14695.     UsedDiskSpace only looks at the first character of the string for the
  14696.     drive letter.
  14697.     
  14698.     Category: System
  14699.     
  14700.     
  14701.      UseNovPassword : Boolean
  14702.     
  14703.     If UseNovPassword is set to true then the screen blanker will require
  14704.     that the user type his Novell password to unblank the screen. Full
  14705.     Novell security and intruder detection is active here. If Novell's
  14706.     intruder detection is active, then if an intruder fails to type in the
  14707.     password after a number of attempts, then Netware will not accept the
  14708.     correct password until intruder detection allows it.
  14709.     
  14710.     If you don't know what intruder detection is, read the Netware manuals
  14711.     on the subject. It is something you should use.
  14712.     
  14713.     Category: Novell
  14714.     
  14715.     
  14716.      Value (String) : Number
  14717.     
  14718.     Converts String to Number. Leading $ indicates Hex.
  14719.     
  14720.      Example:
  14721.        Value '5'   ;returns 5
  14722.     
  14723.     See Also: Str
  14724.     
  14725.     Category: String Math Real
  14726.     
  14727.     
  14728.      Var
  14729.     
  14730.     In MarxMenu all variables must be declared before they can be
  14731.     referenced.  The VAR command is used to declare variables.
  14732.     
  14733.      Example:
  14734.        var X,Y,Z
  14735.        var
  14736.          X = 5
  14737.          Y = 6
  14738.     
  14739.  
  14740.     Computer Tyme * MarxMenu * Users Manual                 Page #255
  14741.     -----------------------------------------------------------------
  14742.     
  14743.     See Also: Constant Shared Qualifier
  14744.     
  14745.     Category: Variable
  14746.     
  14747.     
  14748.      VarType (Variable) : String
  14749.     
  14750.     VarType returns the type of data contained in a variable. Types returned
  14751.     include the following:
  14752.     
  14753.       NUL
  14754.       NUMBER
  14755.       REAL
  14756.       STRING
  14757.       ARRAY
  14758.       FILE
  14759.       POINTER
  14760.       PROCEDURE
  14761.       UNKNOWN
  14762.     
  14763.     Category: Variable
  14764.     
  14765.     
  14766.      VCPIInstalled : Boolean
  14767.     
  14768.     Returns True if VCPI services are installed.
  14769.     
  14770.     See Also: VCPIVersion
  14771.     
  14772.     Category: System
  14773.     
  14774.     
  14775.      VCPIVersion : String
  14776.     
  14777.     VCPIVersion returns the version of the VCPI driver you are using. If
  14778.     VCPI isn't present it returns an empty string.
  14779.     
  14780.     See Also: VCPIInstalled
  14781.     
  14782.     Category: System
  14783.     
  14784.     
  14785.      VideoMode : Number
  14786.     
  14787.     Returns Current Video Mode.
  14788.     
  14789.      Example:
  14790.        Writeln VideoMode
  14791.     
  14792.     Category: Video
  14793.     
  14794.  
  14795.     Computer Tyme * MarxMenu * Users Manual                 Page #256
  14796.     -----------------------------------------------------------------
  14797.     
  14798.      VideoPage : Number
  14799.     
  14800.     Returns Current Video Page.
  14801.     
  14802.     Category: Video
  14803.     
  14804.     
  14805.      ViewArray (Array)
  14806.     
  14807.     Allows you to view an array of strings in the current window. Works just
  14808.     like ViewTextFile.
  14809.     
  14810.      Example:
  14811.        var New
  14812.        ReadTextFile ('MARXREAD.ME',New)
  14813.        DrawBox 1 2 80 23
  14814.        ViewArray New
  14815.     
  14816.     See Also: ViewTextFile
  14817.     
  14818.     Category: Display Array
  14819.     
  14820.     
  14821.      ViewTextFile (Name)
  14822.     
  14823.     This command lets you view a text file in the current window.
  14824.     
  14825.      Example:
  14826.        DrawBox 1 2 80 23
  14827.        ViewTextFile 'MARXREAD.ME'
  14828.     
  14829.     See Also: ViewArrayFile
  14830.     
  14831.     Category: Display File
  14832.     
  14833.     
  14834.      VinCheckService (Service) : Number
  14835.     
  14836.     Returns information about the requested service.
  14837.     
  14838.      Services:
  14839.     
  14840.         1 - Communications
  14841.         2 - Primary 3270 Emulation ID
  14842.         3 - Async Terminal Emulation
  14843.         4 - File Deflection
  14844.         5 - BPS
  14845.         6 - Undocumented
  14846.         7 - StreetTalk
  14847.         8 - Environment
  14848.         9 - NetBios
  14849.        10 - Secondary 3270 Emulation ID
  14850.        11 - Semaphore
  14851.        12 - 3270 Emulation Active Status
  14852.        13 - 3270 Keyboard Interrupt Simulator
  14853.        14 - Advanced 3270 SNA
  14854.        15 - Undocumented
  14855.        16 - Undocumented
  14856.  
  14857.     Computer Tyme * MarxMenu * Users Manual                 Page #257
  14858.     -----------------------------------------------------------------
  14859.     
  14860.     
  14861.      Return Codes:
  14862.         0 - Service is Installed
  14863.         1 - Service is not Installed
  14864.         2 - Invalid Service Number
  14865.     
  14866.     Category: Vines
  14867.     
  14868.     
  14869.      VinesInt : Number
  14870.     
  14871.     Returns the interrupt number the Vines software is servicing.
  14872.     
  14873.     Category: Vines
  14874.     
  14875.     
  14876.      VinesLoaded : Boolean
  14877.     
  14878.     VinesLoaded returns true if the Vines shell is loaded.
  14879.     
  14880.     Category: Vines
  14881.     
  14882.     
  14883.      VinUserName : String
  14884.     
  14885.     Returns the StreetTalk name of the person who is logged in.
  14886.     
  14887.     Category: Vines
  14888.     
  14889.     
  14890.      VinSerialNumber (Drive) : Number
  14891.     
  14892.     Returns the Vines serial number on the server that the drive letter
  14893.     references.
  14894.     
  14895.      Example:
  14896.        Writeln VinSerialNumber ('Z')
  14897.     
  14898.     Category: Vines
  14899.     
  14900.     
  14901.      Volume (Drive)
  14902.     
  14903.     Returns the volume label of the specified drive.
  14904.     
  14905.      Example:
  14906.        Writeln Volume 'C'   ;volume label on drive C
  14907.     
  14908.     Category: System
  14909.     
  14910.  
  14911.     Computer Tyme * MarxMenu * Users Manual                 Page #258
  14912.     -----------------------------------------------------------------
  14913.     
  14914.      VT100mode (On/Off)
  14915.     
  14916.     There are some differeences between ANSI and VT100 codes. When VT100mode
  14917.     is on the AnsiWindows respond to VT100 sequences.
  14918.     
  14919.     See Also: AnsiWindows
  14920.     
  14921.     Category: Modem
  14922.     
  14923.     
  14924.      Wait (Number)
  14925.     
  14926.     Delay for a number of 1/100 seconds. Wait 250 delays 2 1/2 seconds.
  14927.     
  14928.     If you are running a multi-tasker like Windows 3 or DesqView, and the
  14929.     delay is over 1/4 second, MarxMenu will release time slices back to DOS
  14930.     and not bog down the CPU power on long waits. MarxMenu also releases CPU
  14931.     cycles while idle at the keyboard.
  14932.     
  14933.      Example:
  14934.        Wait 300   ;3 second delay
  14935.     
  14936.     See Also: WaitOrKbdReady
  14937.     
  14938.     Category: Misc
  14939.     
  14940.     
  14941.      WaitOrKbdReady (Number)
  14942.     
  14943.     This command is just like the WAIT command except the wait is aborted by
  14944.     pressing any key. Time to wait is in hundredths of a second. This
  14945.     command is useful when using MarxMenu to write a running demo.
  14946.     
  14947.      Example:
  14948.        WaitOrKbdReady 300   ;3 second delay or until KeyPress
  14949.     
  14950.     See Also: Wait
  14951.     
  14952.     Category: Keyboard
  14953.     
  14954.     
  14955.      WhereX : Number
  14956.     
  14957.     Returns the horizontal position of the cursor within the current window.
  14958.     
  14959.     Category: Display
  14960.     
  14961.  
  14962.     Computer Tyme * MarxMenu * Users Manual                 Page #259
  14963.     -----------------------------------------------------------------
  14964.     
  14965.      WhereXAbs : Number
  14966.     
  14967.     Returns the horizontal screen position of the cursor.
  14968.     
  14969.     Category: Display
  14970.     
  14971.     
  14972.      WhereY : Number
  14973.     
  14974.     Returns the vertical position of the cursor within the current window.
  14975.     
  14976.     
  14977.      WhereYAbs : Number
  14978.     
  14979.     Returns the vertical screen position of the cursor.
  14980.     
  14981.     Category: Display
  14982.     
  14983.     
  14984.      While
  14985.     
  14986.     Used for program control. Usage:
  14987.     
  14988.      WHILE (condition)
  14989.         (statement)
  14990.         (statement)
  14991.      ENDWHILE
  14992.     
  14993.     Execution stays in the while loop as long as the condition is true.
  14994.     
  14995.     See Also: EndWhile
  14996.     
  14997.     Category: Conditional
  14998.     
  14999.     
  15000.      WholeFileNames (On/Off)
  15001.     
  15002.     Controls if ReadDirectory will return the whole name and path or just
  15003.     the filename part.
  15004.     
  15005.      Example:
  15006.        Var X
  15007.        WholeFileNames Off          ;Just filename, no paths!
  15008.        ReadDirectory('*.MNU',X)
  15009.        Loop X
  15010.           Execute ('COPY ' + X[LoopIndex] + ' A:')
  15011.        EndLoop
  15012.     
  15013.     See Also: ReadDirectory
  15014.     
  15015.     Category: File Directory
  15016.     
  15017.  
  15018.     Computer Tyme * MarxMenu * Users Manual                 Page #260
  15019.     -----------------------------------------------------------------
  15020.     
  15021.      Window (X,Y,Width,Height)
  15022.     
  15023.     Window changes the size of the active area of the screen. It can be used
  15024.     to either reduce or expand where text can be written.
  15025.     
  15026.     See Also: DrawBox
  15027.     
  15028.     Category: Display
  15029.     
  15030.     
  15031.      WindowHeight : Number
  15032.     
  15033.     Returns number of rows in current window.
  15034.     
  15035.     Category: Display
  15036.     
  15037.     
  15038.      WindowWidth : Number
  15039.     
  15040.     Returns number of columns in current window.
  15041.     
  15042.     Category: Display
  15043.     
  15044.     
  15045.      WinX : Number
  15046.     
  15047.     Returns the horizontal location of the left hand corner of the window.
  15048.     
  15049.     See Also: WinY
  15050.     
  15051.     Category: Display
  15052.     
  15053.     
  15054.      WinY : Number
  15055.     
  15056.     Returns the vertical location of the left-hand corner of the window.
  15057.     
  15058.     See Also: WinX
  15059.     
  15060.     Category: Display
  15061.     
  15062.     
  15063.      Within (Start,End) : Boolean
  15064.     
  15065.     Within returns true if a value is within the range from Start to End.
  15066.     Within works with numbers and strings.
  15067.     
  15068.      Example:
  15069.        Within (Start,End) : Boolean
  15070.        Within returns True if a value is within the range from Start to End.
  15071.        Within works with numbers and strings.
  15072.     
  15073.      Example:
  15074.         if X within(5,7) then Write 'X is Within 5 to 7'
  15075.         if not (Ch within('A','Z')) Write 'Lower Case'
  15076.     
  15077.  
  15078.     Computer Tyme * MarxMenu * Users Manual                 Page #261
  15079.     -----------------------------------------------------------------
  15080.     
  15081.     Category: Misc
  15082.     
  15083.     
  15084.      WordStarKeys (On/Off)
  15085.     
  15086.     In the early days of MarxMenu I mapped many of the cursor movement keys
  15087.     to match the WordStar key strokes. Now you can turn this off to get the
  15088.     real scan codes from the arrow keys.
  15089.     
  15090.     See Also: Readln
  15091.     
  15092.     Category: String
  15093.     
  15094.     
  15095.      WorkString : String
  15096.     
  15097.     WorkString is a MarxMenu variable that contains the string that Readln
  15098.     is editing. This string can be accessed by KeyEvent routines so that a
  15099.     KeyEvent procedure can set what is being entered.
  15100.     
  15101.      Example:
  15102.        WorkString = PickOne(List)
  15103.     
  15104.     See Also: KeyEvent
  15105.     
  15106.     Category: String
  15107.     
  15108.     
  15109.      Write (String)
  15110.     
  15111.     Writes (String) on the screen at the current cursor position.
  15112.     
  15113.      Example:
  15114.        Write ' - Heading - '
  15115.     
  15116.     Category: Display
  15117.     
  15118.     
  15119.      WriteAscTextFile (File,2DArray)
  15120.     
  15121.     WriteAscTextFile writes a 2-dimensional array to a comma delimited
  15122.     ascii text file.
  15123.     
  15124.     Category: File
  15125.     
  15126.     
  15127.      WriteCenter (String)
  15128.     
  15129.     Writes (String) centered in current window.
  15130.     
  15131.     Category: Display
  15132.     
  15133.  
  15134.     Computer Tyme * MarxMenu * Users Manual                 Page #262
  15135.     -----------------------------------------------------------------
  15136.     
  15137.      WriteError (String)
  15138.     
  15139.     This command works just like Write except that it writes to the DOS
  15140.     error device handle. This can be used to put messages on the screen when
  15141.     the output is redirected to a file.
  15142.     
  15143.     See Also: WritelnError
  15144.     
  15145.     Category: Display
  15146.     
  15147.     
  15148.      WriteFileBlock (Name,Offset,Size,Segment)
  15149.     
  15150.     WriteFileBlock writes disk file Name starting at byte Offset for Size
  15151.     bytes from memory buffer Segment. It is intended to write any kind of
  15152.     file. If the file doesn't exist, it is created.
  15153.     
  15154.     The maximum value for Size is 65504. The segment must be as large as the
  15155.     number of bytes you are writing.
  15156.     
  15157.     See Also: ReadFileBlock GetMem FreeMem
  15158.     
  15159.     Category: File Memory
  15160.     
  15161.     
  15162.      Writeln (String)
  15163.     
  15164.     Writes (String) on the screen followed by a CR-LF (carriage
  15165.     return-line feed).
  15166.     
  15167.      Example:
  15168.        Writeln 'The time is: ' TimeString
  15169.     
  15170.     Category: Display
  15171.     
  15172.     
  15173.      WritelnAsc (File,Array)
  15174.     
  15175.     WritelnAsc writes one line to the end of a comma delimited ascii text
  15176.     file. Each element of the array becomes one field of that line.
  15177.     
  15178.      Example:
  15179.        var A
  15180.        A[1] = 'MARC PERKEL'
  15181.        A[2] = 'ONION'
  15182.        A[3] = 37
  15183.        WritelnAsc('TEST.TXT',A)
  15184.        ;appends "MARC PERKEL","ONION",37 to file TEST.TXT
  15185.     
  15186.     Category: File
  15187.     
  15188.  
  15189.     Computer Tyme * MarxMenu * Users Manual                 Page #263
  15190.     -----------------------------------------------------------------
  15191.     
  15192.      WritelnError (String)
  15193.     
  15194.     This command works just like Writeln except that it writes to the DOS
  15195.     error device handle. This can be used to put messages on the screen when
  15196.     the output is redirected to a file.
  15197.     
  15198.     See Also: WriteError
  15199.     
  15200.     Category: Display
  15201.     
  15202.     
  15203.      WriteTextFile (FileName,Array)
  15204.     
  15205.     This command writes a string array to a text file. Do not use FileCreate
  15206.     or any other file commands with this. This command does it all.
  15207.     
  15208.      Example:
  15209.        var X
  15210.        ReadTextFile('MARXREAD.ME',X)
  15211.        WriteTextFile('A:MARXREAD.ME',X)  ;copies file to A:
  15212.     
  15213.     See Also: ReadTextFile
  15214.     
  15215.     Category: File Array
  15216.     
  15217.     
  15218.      WriteVertical (String)
  15219.     
  15220.     Writes (String) vertically on the screen from the current cursor
  15221.     position.
  15222.     
  15223.      Example:
  15224.        WriteVertical( 'Hello' )
  15225.     
  15226.          ;This would display
  15227.            H
  15228.            e
  15229.            l
  15230.            l
  15231.            o
  15232.     
  15233.     Category: Display
  15234.     
  15235.     
  15236.      XmsInstalled : Boolean
  15237.     
  15238.     Returns True if XMS memory manager is installed.
  15239.     
  15240.     See Also: XmsVersion
  15241.     
  15242.     Category: System
  15243.     
  15244.  
  15245.     Computer Tyme * MarxMenu * Users Manual                 Page #264
  15246.     -----------------------------------------------------------------
  15247.     
  15248.      XmsVersion : String
  15249.     
  15250.     XmsVersion returns the version of the XMS driver you are using. If XMS
  15251.     isn't present it returns an empty string.
  15252.     
  15253.     See Also: XmsInstalled
  15254.     
  15255.     Category: System
  15256.     
  15257.     
  15258.      Xor : Operator
  15259.     
  15260.     Returns logical Xor if operators are boolean; or bitwise Xor if
  15261.     operators are numeric.
  15262.     
  15263.     Xor (exclusive or) means one or the other but not both can be true.
  15264.     
  15265.      Example:
  15266.        A = True
  15267.        B = False
  15268.        A Xor B    ;returns true
  15269.     
  15270.     See Also: And Or Not
  15271.     
  15272.     Category: Math Boolean
  15273.     
  15274.     
  15275.      Year : Number
  15276.     
  15277.     Returns current Year.
  15278.     
  15279.      Example:
  15280.        Writeln Year    ;returns 1993
  15281.     
  15282.     Category: Time
  15283.     
  15284.     
  15285.      YearOf (Date) : Number
  15286.     
  15287.     Returns the year of a date. If Date is passed as a string it is
  15288.     converted automatically.
  15289.     
  15290.      Example:
  15291.        Writeln YearOf Today    ;returns 1993
  15292.     
  15293.     See Also: TimeOf BadDate
  15294.     
  15295.     Category: Time
  15296.     
  15297.  
  15298.     Computer Tyme * MarxMenu * Users Manual                 Page #265
  15299.     -----------------------------------------------------------------
  15300.     
  15301.      STRING CONSTANTS
  15302.     
  15303.        F1   = #0#59   SF1  = #0#84   CF1  = #0#94   AF1  = #0#104
  15304.        F2   = #0#60   SF2  = #0#85   CF2  = #0#95   AF2  = #0#105
  15305.        F3   = #0#61   SF3  = #0#86   CF3  = #0#96   AF3  = #0#106
  15306.        F4   = #0#62   SF4  = #0#87   CF4  = #0#97   AF4  = #0#107
  15307.        F5   = #0#63   SF5  = #0#88   CF5  = #0#98   AF5  = #0#108
  15308.        F6   = #0#64   SF6  = #0#89   CF6  = #0#99   AF6  = #0#109
  15309.        F7   = #0#65   SF7  = #0#90   CF7  = #0#100  AF7  = #0#110
  15310.        F8   = #0#66   SF8  = #0#91   CF8  = #0#101  AF8  = #0#111
  15311.        F9   = #0#67   SF9  = #0#92   CF9  = #0#102  AF9  = #0#112
  15312.        F10  = #0#68   SF10 = #0#93   CF10 = #0#103  AF10 = #0#113
  15313.        F11  = #0#133  SF11 = #0#135  CF11 = #0#137  AF11 = #0#139
  15314.        F12  = #0#134  SF12 = #0#136  CF12 = #0#138  AF12 = #0#140
  15315.     
  15316.        ALT1 = #0#120  BKSP = #8
  15317.        ALT2 = #0#121  CR   = #13
  15318.        ALT3 = #0#122  CRLF = #13#10
  15319.        ALT4 = #0#123  ESC  = #27
  15320.        ALT5 = #0#124  FF   = #12
  15321.        ALT6 = #0#125  LF   = #10
  15322.        ALT7 = #0#126
  15323.        ALT8 = #0#127
  15324.        ALT9 = #0#128
  15325.        ALT0 = #0#129
  15326.     
  15327.        Key              Scan     WordStar
  15328.        ----------------------------------
  15329.        UpArrow        = #0#72    ^E
  15330.        DownArrow      = #0#80    ^X
  15331.        LeftArrow      = #0#75    ^S
  15332.        RightArrow     = #0#77    ^D
  15333.        HomeKey        = #0#71    ^W
  15334.        EndKey         = #0#79    ^Z
  15335.        CtrlLeftArrow  = #0#115   ^A
  15336.        CtrlRightArrow = #0#116   ^F
  15337.        PgUpKey        = #0#73    ^R
  15338.        PgDnKey        = #0#81    ^C
  15339.        InsKey         = #0#82    ^V
  15340.        DelKey         = #0#83    ^G
  15341.     
  15342.     Category: Constants
  15343.     
  15344.  
  15345.     Computer Tyme * MarxMenu * Users Manual                 Page #266
  15346.     -----------------------------------------------------------------
  15347.     
  15348.      TIME AND DATE CONSTANTS
  15349.     
  15350.        Jan = 1        Sun = 0
  15351.        Feb = 2        Mon = 1
  15352.        Mar = 3        Tue = 2
  15353.        Apr = 4        Wed = 3
  15354.        May = 5        Thu = 4
  15355.        Jun = 6        Fri = 5
  15356.        Jul = 7        Sat = 6
  15357.        Aug = 8
  15358.        Sep = 9        SecondsInHour = 3600
  15359.        Oct = 10       SecondsInDay  = 86400
  15360.        Nov = 11
  15361.        Dec = 12
  15362.     
  15363.     Category: Constants
  15364.     
  15365.     
  15366.      VIDEO CONSTANTS
  15367.     
  15368.      Video Modes:   Display Types:
  15369.     
  15370.        BW40 = 0       0 = HercMono
  15371.        CO40 = 1       1 = CGA
  15372.        BW80 = 2       2 = MCGA
  15373.        CO50 = 3       3 = EGA
  15374.        MONO = 7       4 = VGA
  15375.     
  15376.     Category: Constants
  15377.     
  15378.     
  15379.      COLOR CONSTANTS
  15380.     
  15381.        Black   = 0    DGrey    = 8
  15382.        Blue    = 1    LBlue    = 9
  15383.        Green   = 2    LGreen   = 10
  15384.        Cyan    = 3    LCyan    = 11
  15385.        Red     = 4    LRed     = 12
  15386.        Magenta = 5    LMagenta = 13
  15387.        Brown   = 6    Yellow   = 14
  15388.        Grey    = 7    White    = 15
  15389.     
  15390.     Category: Constants
  15391.     
  15392.     
  15393.      BOOLEAN CONSTANTS
  15394.     
  15395.        True    Yes    On
  15396.        False   No     Off
  15397.     
  15398.     Category: Constants
  15399.     
  15400.  
  15401.     Computer Tyme * MarxMenu * Users Manual                 Page #267
  15402.     -----------------------------------------------------------------
  15403.     
  15404.