home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / XEQ160.ZIP / XEQ.DOC < prev   
Text File  |  1993-12-16  |  17KB  |  393 lines

  1. comment *
  2.                    XEQ
  3.                -----
  4.        XEQ - COM File Library and Command Executor
  5.  
  6. This program allows COM files to be stored inside XEQ's code and executed
  7. by the command:
  8.     XEQ command
  9. For example, if BEEP.COM has been added to XEQ then:
  10.     XEQ BEEP
  11. will execute the BEEP program stored inside XEQ. The original BEEP.COM
  12. can be removed from the hard disk (onto a backup floppy!!!). If the
  13. specified command is not in XEQ it is passed to the DOS for execution as
  14. if directly typed at the DOS prompt.
  15.  
  16. PURPOSE
  17.     The purpose is to prevent wasted hard-disk space by those pesky
  18. little COM files we don't seem to be able to do without. When hard disks
  19. are formatted they are given an allocation size (called a cluster size)
  20. and this is typically 2048 or 4096 bytes. So when you save a 7 byte
  21. COM file like BEEP.COM, it takes up a full cluster. By combining these
  22. COM files into this program or LIBRARY, several COM files can be stored
  23. in one file (the XEQ program itself) and still be accessed without this waste
  24. in hard disk space.
  25.  
  26. In order to make the body of XEQ as small as possible, only a limited
  27. number of options are available. They are
  28.  
  29.     XEQ [/R][<command>] Execute <command> if it is in the library
  30.                 or passes it to DOS for execution if not
  31.     XEQ /A<command>   Add <command>.COM to library if not existent
  32.     XEQ /D<command>   Delete command from library if existent
  33.     XEQ /E<command>   Extract command from library to .COM file if existent
  34.     XEQ /L          List the <commands> in the library
  35.     XEQ /H          Display HELP information
  36.     XEQ           Attempt to run internal AUTOXEQ.COM, else HELP
  37.     XEQ /P<parms>      As above but passed <parms> to AUTOXEQ.COM
  38.     XEQ /C[<command>] Suppress the reprocessing of the command line
  39.     XEQ /F          Freeze library
  40.  
  41. COMMAND DETAILS
  42.  
  43. /R - run a command
  44.  
  45. If no switch is given, the /R is assumed. If the given command name
  46. is in the library it is executed directly from there. XEQ internally
  47. relocates the stored file in memory so that the memory image is
  48. identical to the image if it had been loaded from the COM file on
  49. disk. This includes the way DOS loaded a COM file and the pretests
  50. for argument suitability and register set up. Thus ALL COM files
  51. should execute normally when run from within XEQ.
  52.  
  53. If the command is not found in XEQ then the string is passed to a DOS
  54. shell for execution. A second copy of COMMAND.COM is spawned with the
  55. command added after the /C switch. Therefore the command can be an
  56. internal, external, batch, EXE or COM file. (NOTE: SEE TSR LIMITATION
  57. BELOW.)
  58.  
  59. If no command is given with the /R switch XEQ operates as if no argument
  60. of any kind had been given and attempts to run the internal AUTOXEQ.COM,
  61. else HELP.
  62.  
  63. /A - add a command
  64.  
  65. Adds a COM file to the XEQ library. The filename given must either
  66. have no extension or .COM and the name part can contain standard DOS
  67. wildcards. A drive and/or path may be given to the target file.
  68. If the file is already in the library it will not be added. A warning
  69. message is given in this eventuality. Similarly if there is
  70. insufficient room to add a file, the addition of this file will be
  71. skipped with a warning. When wildcards exist, XEQ will attempt to add
  72. all files even if a given file cannot be found or is too big. Any attempt
  73. to add the current XEQ.COM file to itself (even if renamed under
  74. DOS3.x) will be prevented. (In DOS 2.x this safety feature can be
  75. thwarted by renaming XEQ.COM. A file called XEQ.COM is the only one
  76. excluded from being added.)
  77.  
  78. /D - delete a command
  79.  
  80. Removes the named command from the library. The filename given must either
  81. have no extension or .COM and the name part can contain standard DOS
  82. wildcards. A prompt asks for confirmation of the delete. 'Y' will
  83. delete the command, 'N' will skip deleting the command, 'G' will GO
  84. and delete this command and all further matching ones without asking
  85. again and 'A' will abort the entire delete process. Obviously 'G' is final
  86. and cannot be aborted once selected. Abort will cancel the effect of
  87. any 'Y' answers previously, AND NO COMMANDS WILL HAVE BEEN DELETED.
  88.  
  89. /E - extract a COM file
  90.  
  91. When the /E switch is used to extract a COM file, a full path for the
  92. resulting file may be specified. If the file already exists at that location,
  93. extraction does not occur. The filename given must either
  94. have no extension or .COM and the name part can contain standard DOS
  95. wildcards. The extracted file has the same date stamp as the COM file it was
  96. originally stored from. The file is NOT deleted from the library.
  97.  
  98. /L - list the library files
  99.  
  100. Displays a list of all files stored in XEQ. The original time and
  101. date stamp are displayed along with the file's byte size. At the end
  102. of the list the remaining space in XEQ is displayed, along with an
  103. indication of how much space has been saved by using XEQ (and
  104. deleting the original COM files). This computation is based upon
  105. the following:
  106.  
  107. DOS 2.x
  108. The value is the difference between the total clusters used by
  109. XEQ.COM on the default drive and the sum of all the clusters which
  110. would have been used on the default drive if each command was in its
  111. own COM file.
  112. The results can be misleading if say, you run XEQ/L while
  113. the drive default points to a floppy with a cluster size of 1024, but
  114. the DOS path executed XEQ.COM from the harddisk with a different
  115. cluster size. In this case the savings indicated are the bytes saved
  116. IF XEQ.COM WAS LOCATED ON THE DEFAULT DRIVE.
  117.  
  118. DOS 3.x
  119. The value is as above, but uses the cluster size of the drive it
  120. found XEQ.COM on and assumes that the COM files would have been on
  121. that drive if they were in separate files.
  122. Under DOS 3.x the savings always relate to the drive the path found
  123. XEQ.COM on and is independent of the default drive cluster size.
  124.  
  125. /H - Display the help screen
  126.  
  127. NO ARGUMENTS
  128. XEQ will try to find internal command AUTOXEQ.COM and if found will
  129. execute it. This can be any COM file so named. Arguments can be supplied
  130. using the /P command. If no such internal file exists, then HELP is
  131. displayed.
  132.  
  133. This feature can make XEQ perform a certain action if no arguments
  134. are supplied to it.
  135.  
  136. /P Run AUTOXEQ with parameters
  137. This performs as with NO ARGUMENTS above, but also passes the given
  138. parameters to the AUTOXEQ internal program. For example, if LIST.COM
  139. was stored in XEQ.COM as AUTOXEQ, then XEQ /PXEQ.DOC will start
  140. LIST.COM and pass it the file name XEQ.DOC.
  141.  
  142. /C Run the command but do not reprocess the command line Normally
  143. when XEQ is run without the /C switch, both the command line is
  144. reprocessed and the final program name is inserted for PMAP etc.
  145. (see below). If the command is not present then AUTOXEQ is run, if it
  146. is present in the library. When the /C switch is present, the
  147. original command line from the DOS prompt is passed to the final
  148. program and the program name returned by the program as argument 0 is
  149. the original XEQ name.  For example:
  150.  
  151. If the DOS line is:
  152.  
  153. C> XEQ pgm arg1
  154.  
  155. then <pgm> sees only 1 argument <arg1> and the internally stored
  156. program name is <pgm>. If <pgm> was in C, argv[0] = pgm and argv[1] =
  157. arg1.
  158.  
  159. If the DOS line is:
  160.  
  161. C> XEQ /C pgm arg1
  162.  
  163. then <pgm> sees 3 arguments </C> <pgm> and <arg1> and the internally
  164. stored program name is <XEQ>. If <pgm> was in C, argv[0]=XEQ,
  165. argv[1]=/C, argv[2]=pgm and argv[3]=arg1.
  166.  
  167. The primary purpose of the /C switch is to allow programs resident in
  168. XEQ to ascertain where they originally came from, when this is desirable.
  169.  
  170.  
  171. /F Freeze the library.  If you enter this switch and then answer Y,
  172. the library file will be frozen. This means ALL commands are
  173. inoperative except the /R or implied /R.  This prevents, among other
  174. things, an end-user of the library from seeing or changing its
  175. contents. A frozen library cannot be readily unfrozen.  In an
  176. emergency you can use a BINARY file editor (or DEBUG/SYMDEB) to
  177. change a single BYTE as follows:
  178.  
  179.     VERSION            OFFSET        OLD    NEW
  180.       1.40             05BFH         1     8
  181.       1.50             05BFH         1     8
  182.       1.60             06D3H         1     8
  183.  
  184. WARNING! This is version specific data.    
  185.  
  186. REMEMBER that DEBUG/SYMDEB load the programs at 0100 so these offsets
  187. will need 0100 added to the to locate the right address.
  188.  
  189. LIMITATIONS
  190.  
  191.     As a COM file can only be 64K long, COM files cannot
  192. be added to XEQ if this figure would be violated, as XEQ is a COM file
  193. itself. The /L command indicates the amount of space left and any
  194. attempt to add a file which would exceed the 64k limit is prevented. Any
  195. number of COM files can be added until this number is reached.
  196.         When a command is added or deleted from XEQ, a new copy of XEQ must
  197. be rewritten to disk. How it is written back depends on the version of DOS
  198. you are running.
  199.  
  200. DOS 2.x users
  201.  
  202. The revised library is always written to the current drive and directory as
  203. XEQ.COM, regardless of where the original copy of XEQ was found
  204. (it may have been loaded from elsewhere because of DOS's path
  205. capability). Therefore to update the original copy of XEQ, the /D or /A
  206. commands should be performed in the drive and directory of the
  207. original. If not, then the original copy of XEQ will still exist in its
  208. original location and the updated version in the current drive and
  209. directory. The new version of XEQ will always be called XEQ.COM, regardless
  210. of whether the original program was called XEQ.COM or not.
  211.  
  212. DOS3.x users
  213.  
  214. The revised library will be written over the original using the original's
  215. name. Thus doing a proper update of the original. The library can be given
  216. any name and this will be retained during the updating.
  217.  
  218. MULTIPLE LIBRARIES
  219.  
  220. For DOS 2.x user it is recommended that only one library XEQ.COM exist on the
  221. system. As adding or deleting from a renamed library file results in
  222. the new copy being called XEQ.COM on the current drive, care would
  223. have to be taken to prevent the overwriting of a legitimate XEQ.COM,
  224. and the new XEQ.COM would have to be renamed to the original name of
  225. the revised library.
  226.  
  227. For DOS 3.x users multiple libraries are more feasible as the updated library
  228. is always the original file no matter what it was called or where it
  229. was located. Thus maintaining multiple libraries is much simpler. CED
  230. (see below) can be used to avoid the need to remember which library
  231. contains a given command.
  232.  
  233. TERMINATE & STAY RESIDENT PROGRAMS
  234.  
  235. TSR programs can be stored inside XEQ and will install just like the
  236. original program. HOWEVER, NEVER RUN A TSR PROGRAM THROUGH XEQ WHICH
  237. IS NOT STORED IN XEQ. When XEQ cannot find a program it passes the name to
  238. DOS to run in a shell. If this program is a TSR it will freeze more
  239. memory than needed. XEQ has no way of knowing if a program it is
  240. about to execute externally is a TSR.
  241.  
  242. Beginning with version 1.10, XEQ will put the name of the file being
  243. run into the space between the end of the environment table and the
  244. start of the program. This is where DOS 3.x puts the running program
  245. name and XEQ will only duplicate this when running under DOS3.x. The
  246. purpose of this is to allow the running program to know its own name
  247. and to let TSR memory map programs like MAP.COM and MAPMEM.COM show
  248. the real program name which is resident.
  249.  
  250. A limitation exists for this however. The name stored is of the form
  251. d:\path\filename.COM. The space available to store this string cannot
  252. be increased and is set by the original running of XEQ. So if XEQ is
  253. the name of the comm library, the name of the actual program stored
  254. can only use the first 3 letters, truncating the full name. If this
  255. is important to you, the solution is to rename the library to a
  256. filename of 8 letters.  This will ensure sufficient space for any
  257. revision to any other name.  Starting with version 1.3 this is the
  258. mode of operation. Earlier versions destroyed the path information
  259. and this gave trouble to programs expecting to be able to recover the
  260. full drive, path and name information from argv[0] (in C) or %0 (in
  261. compiled batch files).
  262.  
  263. Starting with version 1.30, the final program name is also correctly
  264. set for such memory mapping programs as PMAP.
  265.  
  266. ARGUMENTS AND THE /C AND /P COMMANDS
  267.  
  268. The way XEQ processes arguments can be confusing, especially when the
  269. /C and/or /P switches are used. The limitation above added further
  270. problems. To help, I have included a simple program called ARGS.COM
  271. which will display the arguments passed to it.  This can be put into
  272. XEQ (as either ARGS.COM, or renamed to AUTOXEQ.COM) to see how these
  273. switches change the process.  Some examples of the resulting output
  274. are shown below. This example assumes that ARGS.COM is stored in
  275. XEQ.COM as both ARGS.COM and AUTOEXEC.COM.
  276.  
  277. e:\XEQ>xeq
  278. Arg[0] = E:\XEQ\AUT.COM
  279.  
  280. e:\XEQ>xeq args
  281. Arg[0] = E:\XEQ\ARG.COM
  282.  
  283. e:\XEQ>xeq /c
  284. Arg[0] = E:\XEQ\XEQ.COM
  285. Arg[1] = AUTOXEQ
  286.  
  287. e:\XEQ>xeq /p test
  288. Arg[0] = E:\XEQ\AUT.COM
  289. Arg[1] = TEST
  290.  
  291. e:\XEQ>xeq /c /p test
  292. Arg[0] = E:\XEQ\XEQ.COM
  293. Arg[1] = AUTOXEQ
  294. Arg[2] = test
  295.  
  296. The first example shows the limitation detailed above. Because the
  297. base program name (XEQ.COM) has only 3 letters to the left of the
  298. period, only 3 characters from the AUTOXEQ.COM nme can be returned.
  299.  
  300. Note also that in the last example, the /C must be the first argument on
  301. the line.
  302.  
  303. USAGE TIP
  304.  
  305. The CED utility and its synonym feature can make the use of XEQ
  306. transparent in use. For example, if BEEP.COM is stored inside XEQ then a 
  307. synonym like
  308.     SYN BEEP XEQ BEEP
  309. will cause BEEP to be run out of the XEQ file just by entering BEEP.
  310.  
  311. The DOSKEY function found in more recent versions of MS-DOS and the ALIAS
  312. feature of 4DOS can be used in a similar manner as that described for CED.
  313.  
  314. DISCLAIMER
  315.  
  316.     Hardwood Software Associates guarantees XEQ.COM will do NOTHING
  317. useful at all. You use it at your own risk (make backups of the COM files
  318. stored within XEQ before deleting them from your hard disk). However, it
  319. seems to perform as described here and may be of use to you.
  320.  
  321.     Colin J. Stearman [71036,256]
  322.     Senior Associate
  323.     HS Associates
  324.     143 Ash Street
  325.     Hopkinton, MA 01748
  326.  
  327. ======================================================================
  328.             EDIT LOG
  329.     REV    DATE        NAME        DETAIL
  330.     1.01    14-MAR-87    C.STEARMAN    Fixed bug if COM file name
  331.                         is one character
  332.     1.02    27-MAR-87       C.STEARMAN    Aligned file size column
  333.                         Added disk bytes saved calc
  334.     1.03    1-APR-87        C.STEARMAN      Fixed bug if in list if file
  335.                         was longer than 9999 bytes.
  336.                         Fixed error in saved space
  337.                         computation
  338.     1.10    2-APR-87    C.STEARMAN    Under DOS 3.x updating writes
  339.                         to original file. Also updates
  340.                         command name in environment 
  341.                         for MAP, added wildcard,
  342.                         fixed yet another space
  343.                         computation bug, used local
  344.                         stack for external run only
  345.     1.11   13-APR-87        C.STEARMAN    Revised space saved compute,
  346.                         see note above
  347.     1.12   16-APR-87        C.STEARMAN      Fixed bug in load_run module
  348.                         which did not initialize stack
  349.                         correctly. Bug manifested it-
  350.                         self when MODE was run
  351.                         internally. Returned bad
  352.                         parameters message
  353.         1.13   22-APR-87       C.STEARMAN       Fixed wrong message of file
  354.                         not found in /A
  355.                         Improved construction of PSP
  356.                         when running internals. May
  357.                         clean up some compatability
  358.                         problems. Fixed drive validity
  359.                         test. If wild cards in argu-
  360.                         ments, did not set AX correct-
  361.                         ly per DOS loaded.
  362.     1.14  29-APR-87       C.STEARMAN        Fixed bug when executing ext-
  363.                         ernal commands. Local stack
  364.                         trashed passed command string.
  365.                         Also stack crash caused by
  366.                         allowing XEQ.COM to grow to
  367.                         large. Caused random crashes.
  368.                         Added confirm delete
  369.     1.15 30-MAY-87          C.STEARMAN    Cleaned up help screen and
  370.                         identified which library file
  371.                         was accessed. Fixed bug in
  372.                         extract where a 1 character
  373.                         filename did not have .COM
  374.                         added to it.
  375.     1.20 15-MAR-91          C.STEARMAN    Added /H and the search for 
  376.                         internal command AUTOXEQ.COM
  377.     1.21 24-MAR-91          C.STEARMAN    Added /P for parameters to
  378.                         AUTOXEQ.COM
  379.     1.30 24-APR-91          C.STEARMAN    Modified storage method for
  380.                         program name to include path,
  381.                         added program name for PMAP
  382.     1.31 24-APR-91          C.STEARMAN    Added the /C switch
  383.     1.40 01-FEB-92          C.STEARMAN    Added /F switch
  384.     1.50 08-AUG-93          C.STEARMAN    Made /C switch work with no
  385.                         arguments
  386.     1.60 16-DEC-93          C.STEARMAN    Made /C switch work with and
  387.                         without an argument. Suppress
  388.                         case conversion for arguments.
  389.                         Made /R switch same as no
  390.                         switch if no command supplied.
  391. ======================================================================
  392. *
  393.