home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpmhelp / syslib.hlp < prev    next >
Text File  |  1994-07-27  |  37KB  |  783 lines

  1. Directory Manipulation Routines -- DIRECT, DIR, DIRSEL, DIRALP
  2. Numeric String Evaluation Routines -- EVAL, EVAL16, EVAL10, EVAL8, EVAL2
  3. Byte-Oriented File Input/Output Routines
  4. FI$OPEN and FO$OPEN, et al -- Byte-Oriented Input and Output File Open
  5. FI$CLOSE and FO$CLOSE, et al -- Byte-Oriented Input and Output File Close
  6. F$GET and F$PUT, et al -- Byte-Oriented Input and Output
  7. CP/M File Input/Output Routines
  8. INITFCB -- Initialize FCB
  9. File Manipulation -- F$OPEN, F$CLOSE, F$MAKE, F$DELETE
  10. File Input/Output Routines -- F$READ and F$WRITE
  11. Input Line Editor -- INLINE
  12. String Output Routines -- PRINT, LPRINT, PSTR, LPSTR
  13. Numeric  Output Routines -- PHL4HC,PHL5DC,PHLDC,PA2HC,PA3DC,PADC, L's, M's
  14. String and Value Comparison Routines -- COMPHD,COMPB,COMPBC,SCANNER,INSTR
  15. <CR> <LF> Output -- CRLF and LCRLF
  16. Conditional Input -- CONDIN
  17. General Input Routines -- CST, CIN, RIN
  18. General Output Routines -- COUT, LOUT, POUT, CCOUT, CLOUT, CPOUT
  19. Misc Routines -- BDOS, CAPS, CIO, EN, FILLB, FILLBC, MOVEB, MOVEBC, CATH
  20. :Directory Manipulation Routines -- DIRECT, DIR, DIRSEL, DIRALP
  21.      Routine Name:  DIRECT
  22.      Function:   DIRECT  loads  a copy of the directory  of  the  currently 
  23. logged-in disk drive into the 32 x 64 byte buffer pointed to by HL, selects 
  24. all  file entries which match the contents of the 11-byte file name  buffer 
  25. pointed  to  by  DE (buffer may contain ?'s as  wild  specifications),  and 
  26. alphabetizes the entries in the buffer either by file name/type or by  file 
  27. type/name.   Only  entries  where the extent is zero (1st file  entry)  are 
  28. returned.
  29.      Inputs:  HL points to the 32 x 64 byte buffer for the directory
  30.               DE points to the 11-byte file name/type buffer containing the 
  31. file name/type to select
  32.               A  is alphabetization indicator;  A=0 => alphabetize by  file 
  33. name and type, A<>0 => alphabetize by file type and name
  34.      Outputs:  A = number of entries in directory buffer
  35.      Registers Affected:  PSW
  36.      SYSLIB Routines Called:  -None- (All calls within module)
  37.      Special Error Conditions:  -None-
  38.  
  39.      Routine Name:  DIR
  40.      Function:   DIR loads a copy of the directory of the currently logged-
  41. in disk drive into the 32 x 64 byte buffer pointed to by L.   On return,  A 
  42. contains a count of the number of entries in the directory.
  43.      Inputs:  HL points to the 32 x 64 byte buffer for the directory
  44.      Outputs:  A = number of entries in directory buffer
  45.      Registers Affected:  PSW
  46.      SYSLIB Routines Called:  -None-
  47.      Special Error Conditions:  -None-
  48.  
  49.      Routine Name:  DIRSEL (DIRSELECT)
  50.      Function:  DIRSEL scans the directory buffer pointed to by HL for  the 
  51. file   name/type  pointed  to  by  DE  (may  contain  ?'s  for  wild   card 
  52. specifications).   It restructures the directory buffer to contain only the 
  53. matching entries.   On return, A=number of entries in buffer.  Only entries 
  54. with extents equal to zero are selected;  all entries with non-zero extents 
  55. are rejected.
  56.      Inputs:  HL points to the 32 x 64 byte buffer for the directory
  57.               DE points to the 11-byte file name/type buffer
  58.               A = number of entries in directory buffer
  59.      Outputs:  A = number of entries in directory buffer
  60.      Registers Affected:  PSW
  61.      SYSLIB Routines Called:  -None-
  62.      Special Error Conditions:  -None-
  63.  
  64.      Routine Name:  DIRALP (DIRALPHABETIZE)
  65.      Function:   DIRALP alphabetizes the directory buffer pointed to by  HL 
  66. according  to the compare option passed in C (if C=0,  alphabetize by  file 
  67. name & type; if C<>0, alphabetize by file type & name).
  68.      Inputs:  HL points to the 32 x 64 byte buffer for the directory
  69.               C = alphabetization flag (FN & FT if C=0, FT & FN if C<>0)
  70.               A = number of entries in directory buffer
  71.      Outputs:  -None- (buffer is alphabetized)
  72.      Registers Affected:  -None-
  73.      SYSLIB Routines Called:  -None-
  74.      Special Error Conditions:  -None-
  75. :Numeric String Evaluation Routines -- EVAL, EVAL16, EVAL10, EVAL8, EVAL2
  76.      Routine Name:  EVAL
  77.      Function:  This routine converts the character string pointed to by HL 
  78. into  the  16-bit  binary  number represented by  it.   EVAL  performs  the 
  79. conversion until a non-hexadecimal character is encountered,  at which time 
  80. it  looks at the last character and the previous character to determine  if 
  81. the string is representing a binary, octal, decimal, or hexadecimal number.  
  82. Input string characters may be upper- or lower-case.  Valid formats for the 
  83. input string are --
  84.           bbbbbbbbbbbbbbbbB -- b=0 or b=1; Binary string
  85.           ttttt or tttttD -- 0 <= t <= 9; Decimal string
  86.           hhhhH or hhhhX -- 0 <= h <= F; Hexadecimal string
  87.           oooooooO or oooooooQ -- 0 <= o <= 7; Octal string
  88.  
  89.  
  90.      Inputs:  HL points to the first byte of the string to convert
  91.               String is loaded in a buffer
  92.      Outputs:  HL points to next character after converted string
  93.                DE contains 16-bit value
  94.                A = E
  95.                CARRY  Flag  Set means an error was  encountered  in  string 
  96. format
  97.      Registers Affected:  PSW, DE, HL
  98.      SYSLIB Routines Called:  CAPS, EVAL16, EVAL10, EVAL8, EVAL2
  99.      Special  Error Conditions:  CARRY Flag Set indicates that an error was 
  100. encountered  in  the evaluation of the string;  if so,  HL  points  to  the 
  101. offending character
  102.  
  103.      Routine Name:  EVAL16
  104.      Function:   EVAL16 converts the string of ASCII hexadecimal characters 
  105. pointed to by HL into a 16-bit binary value.   Conversion progresses  until 
  106. an invalid hexadecimal digit (0-9, A-F) is encountered.
  107.      Inputs:  HL points to the first byte of the string to convert
  108.               String is loaded in a buffer
  109.      Outputs:  HL points to the offending character
  110.                DE contains the 16-bit value
  111.                A = E
  112.      Registers Affected:  PSW, DE, HL
  113.      SYSLIB Routines Called:  CAPS
  114.      Special Error Conditions:  -None-
  115.  
  116.      Routine Name:  EVAL10
  117.      Function:   EVAL10  converts  the string of ASCII  decimal  characters 
  118. pointed to by HL into a 16-bit binary value.   Conversion progresses  until 
  119. an invalid decimal digit (0-9) is encountered.
  120.      Inputs:  HL points to the first byte of the string to convert
  121.               String is loaded in a buffer
  122.      Outputs:  HL points to the offending character
  123.                DE contains the 16-bit value
  124.                A = E
  125.      Registers Affected:  PSW, DE, HL
  126.      SYSLIB Routines Called:  -None-
  127.      Special Error Conditions:  -None-
  128.  
  129.      Routine Name:  EVAL8
  130.      Function:  EVAL8 converts the string of ASCII octal characters pointed 
  131. to  by  HL  into a 16-bit binary value.   Conversion  progresses  until  an 
  132. invalid octal digit (0-7) is encountered.
  133.      Inputs:  HL points to the first byte of the string to convert
  134.               String is loaded in a buffer
  135.      Outputs:  HL points to the offending character
  136.                DE contains the 16-bit value
  137.                A = E
  138.      Registers Affected:  PSW, DE, HL
  139.      SYSLIB Routines Called:  -None-
  140.      Special Error Conditions:  -None-
  141.  
  142.      Routine Name:  EVAL2
  143.      Function:   EVAL2  converts  the  string of  ASCII  binary  characters 
  144. pointed to by HL into a 16-bit binary value.   Conversion progresses  until 
  145. an invalid binary digit (0-1) is encountered.
  146.      Inputs:  HL points to the first byte of the string to convert
  147.               String is loaded in a buffer
  148.      Outputs:  HL points to the offending character
  149.                DE contains the 16-bit value
  150.                A = E
  151.      Registers Affected:  PSW, DE, HL
  152.      SYSLIB Routines Called:  -None-
  153.      Special Error Conditions:  -None-
  154. :Byte-Oriented File Input/Output Routines
  155.      The  following  documentation covers the series of byte-oriented  file 
  156. input/output  routines  in  SYSLIB.   These  routines  allow  the  user  to 
  157. sequentially  read from (GET) and write to (PUT) a file on a  byte-for-byte 
  158. basis.   Hence,  these routines provide an exceptionally simple method  for 
  159. handling input from and output to a file.
  160.      A  typical program which employs these routines must open the required 
  161. files before doing any processing,  must then perform the processing on the 
  162. opened  files,  and  must  then  close the files  when  the  processing  is 
  163. complete  (closing the files is optional for input files and mandatory  for 
  164. output files).
  165.      SYSLIB provides four sets of routines for byte-oriented file input and 
  166. output.  These routines are --
  167.  
  168.    Input Open     Output Open     GET    PUT   Input Close  Output Close
  169.    ----------     -----------     ---    ---   -----------  ------------
  170.     FI$OPEN        FO$OPEN       F$GET  F$PUT   FI$CLOSE     FO$CLOSE
  171.     F1I$OPEN       F1O$OPEN      F1$GET F1$PUT  F1I$CLOSE    F1O$CLOSE
  172.     F2I$OPEN       F2O$OPEN      F2$GET F2$PUT  F2I$CLOSE    F2O$CLOSE
  173.     F3I$OPEN       F3O$OPEN      F3$GET F3$PUT  F3I$CLOSE    F3O$CLOSE
  174.  
  175.      This system allows the user to have up to 8 files open  simultaneously 
  176. -- four  are  open for input using GET and four are open for  output  using 
  177. PUT.   For  example,  the  following is a sample code section  using  these 
  178. routines for two files:
  179.  
  180.  
  181.           EXT  FI$OPEN   ; DECLARE LIBRARY REFERENCES
  182.           EXT  FO$OPEN
  183.           EXT  FI$CLOSE
  184.           EXT  FO$CLOSE
  185.           EXT  F$GET
  186.           EXT  F$PUT
  187.           ...
  188.           LXI  D,FCBI    ; PT TO FCB OF INPUT FILE
  189.           CALL FI$OPEN
  190.           LXI  D,FCBO    ; PT TO FCB OF OUTPUT FILE
  191.           CALL FO$OPEN
  192.           ...
  193.           [body containing CALL F$GET and CALL F$PUT where required]
  194.           ...
  195.           CALL FI$CLOSE  ; CLOSE FILE
  196.           CALL FO$CLOSE
  197.           ...
  198.           END
  199.  
  200.      Note  that  only  the routines to be used are referenced  in  the  EXT 
  201. statements.   If you do not need a particular routine, do not reference it.  
  202. Not  referencing  an unneeded routine generally saves the  overhead  memory 
  203. space of loading it from the library.
  204.      Each set of OPEN,  CLOSE,  GET,  and PUT routines is contained in  one 
  205. library  module,  so  referencing any of these routines causes  the  entire 
  206. module  to  be  loaded,  and all the routines are accessable  to  the  user 
  207. (provided  they  are  mentioned  in the extenal  definitions)  without  any 
  208. additional memory  overhead.   Specifically,  FI$OPEN,  FI$CLOSE,  FO$OPEN, 
  209. FO$CLOSE,  F$GET,  and F$PUT are contained in one module,  and reference to 
  210. any  of  these routines loads the entire module;  the same is true for  the 
  211. other sets of routines.
  212.      The  CLOSE routine for output (FO$CLOSE) is ALWAYS required;  it fills 
  213. the  rest  of the current block with Ctrl-Z followed by  <NULL>  bytes  and 
  214. properly  closes file.   The CLOSE routine for input (FI$CLOSE) is required 
  215. ONLY  IF  you  are going to later open another file  for  input  using  the 
  216. corresponding  OPEN routine (FI$OPEN).   FI$CLOSE only serves to reset  the 
  217. OPEN  flag  (used  to  GET to ascertain that the  file  has  been  properly 
  218. opened).
  219. :FI$OPEN and FO$OPEN, et al -- Byte-Oriented Input and Output File Open
  220.      Routine Names:  FI$OPEN, F1I$OPEN, F2I$OPEN, F3I$OPEN
  221.      Function:  Open the file whose FCB is pointed to by DE for input  (use 
  222. with F$GET).
  223.      Inputs:  DE = ptr to FCB of file to open
  224.      Outputs:  -None- (File is Opened)
  225.      Registers Affected:  PSW
  226.      SYSLIB Routines Called:  F$OPEN, PRINT
  227.      Special Error Conditions:  Failure to properly open aborts to CP/M.
  228.  
  229.      Routine Names:  FO$OPEN, F1O$OPEN, F2O$OPEN, F3O$OPEN
  230.      Function:  Open the file whose FCB is pointed to by DE for output (use 
  231. with F$PUT).
  232.      Inputs:  DE = ptr to FCB of file to open
  233.      Outputs:  -None- (File is Opened)
  234.      Registers Affected:  PSW
  235.      SYSLIB Routines Called:  F$OPEN, PRINT
  236.      Special Error Conditions:  Failure to properly open aborts to CP/M.
  237. :FI$CLOSE and FO$CLOSE, et al -- Byte-Oriented Input and Output File Close
  238.      Routine Names:  FI$CLOSE, F1I$CLOSE, F2I$CLOSE, F3I$CLOSE
  239.      Function:   Close  the  file previously opened  by  the  corresponding 
  240. FI$OPEN  routine.   Use  of these routines is optional if the another  file 
  241. will  not  be  opened later in the program  by  the  corresponding  FI$OPEN 
  242. routine.
  243.      Inputs:  -None-
  244.      Outputs:  -None- (File is Closed)
  245.      Registers Affected:  -None-
  246.      SYSLIB Routines Called:  F$OPEN, PRINT
  247.      Special  Error  Conditions:   If a file is not already opened  by  the 
  248. corresponding FI$OPEN routine, no error results.
  249.  
  250.      Routine Names:  FO$CLOSE, F1O$CLOSE, F2O$CLOSE, F3O$CLOSE
  251.      Function:   Close  the  file previously opened  by  the  corresponding 
  252. FO$OPEN  routine.   Use of these routines is MANDATORY after output to  the 
  253. file (using the corresponding F$PUT routine) is complete.
  254.      Inputs:  -None-
  255.      Outputs:  -None- (File is Closed)
  256.      Registers Affected:  -None-
  257.      SYSLIB Routines Called:  F$OPEN, PRINT
  258.      Special  Error  Conditions:  If a file is  not  already  opened,  this 
  259. routine aborts to CP/M.
  260. :F$GET and F$PUT, et al -- Byte-Oriented Input and Output
  261.      Routine Names:  F$GET, F1$GET, F2$GET, F3$GET
  262.      Function:   Get  the  next byte in sequence from the  file  previously 
  263. opened by the corresponding FI$OPEN routine.   Byte is returned in Register 
  264. A.
  265.      Inputs:  -None-
  266.      Outputs:  A = Next byte from file
  267.                Carry Flag is Set (C) if EOF or past EOF read occurs
  268.                Carry Flag is Reset (NC) if read was OK
  269.      Registers Affected:  PSW
  270.      SYSLIB Routines Called:  F$OPEN, PRINT
  271.      Special  Error Conditions:  Error condition is returned in Carry Flag.  
  272. If  a file was not previously opened by the corresponding FI$OPEN  routine, 
  273. aborts to CP/M.
  274.  
  275.      Routine Names:  F$PUT, F1$PUT, F2$PUT, F3$PUT
  276.      Function:   Put  the  byte  in Register A onto the  end  of  the  file 
  277. previously opened by the corresponding FO$OPEN routine.
  278.      Inputs:  A = Byte to PUT
  279.      Outputs:  -None-
  280.      Registers Affected:  -None-
  281.      SYSLIB Routines Called:  F$OPEN, PRINT
  282.      Special  Error Conditions:  If a file was not previously opened by the 
  283. corresponding  FO$OPEN  routine,  aborts to CP/M.   If an error  occurs  in 
  284. writing to the disk, aborts to CP/M.
  285. :CP/M File Input/Output Routines
  286.      The  following  routines are general-purpose file I/O  routines  which 
  287. interface to CP/M through the Entry Point at location 5.  They preserve BC, 
  288. DE,  and  HL,  and  they return with the standard CP/M error codes for  the 
  289. corresponding routines.
  290.      Specifically, these routines are --
  291.  
  292.           INITFCB   Initialize FCB from a string of the form "filename.typ"
  293.           F$OPEN    Open a file
  294.           F$CLOSE   Close a file
  295.           F$MAKE    Create a file
  296.           F$DELETE  Delete a file
  297.           F$READ    Read a block (128 bytes) from a file
  298.           F$WRITE   Write a block (128 bytes) to a file
  299. :INITFCB -- Initialize FCB
  300.      Routine Name:  INITFCB
  301.      Function:   Given the name of a file (filename.typ) pointed to  by  HL 
  302. and  a 33-byte buffer pointed to by DE,  INITFCB initializes this buffer as 
  303. an  FCB  containing  the file name and file type correctly  placed  in  the 
  304. buffer  and  all  other entries zero.   The input string  consists  of  1-8 
  305. characters for the file name,  a decimal point (optional),  1-3  characters 
  306. for  the file type (optional),  and a trailing character of space (<SP>) or 
  307. less.  Wild cards (?,*) may be included in the string.  A sample usage is: 
  308.  
  309.           ...
  310.           LXI  H,NAME
  311.           LXI  D,FCB     ; HL PTS TO FILE NAME, DE PTS TO BUFFER
  312.           CALL INITFCB
  313.           ...
  314. NAME:     DB   'FILE.TYP',0
  315. FCB:      DS   33
  316.           ...
  317.  
  318.  
  319.      Inputs:  HL = pointer to file name string "filename.typ<SP>"
  320.               DE = pointer to FCB buffer
  321.      Outputs:  A = Error Code
  322.                    0 --> No Error
  323.                    1 --> File name > 8 characters
  324.                    2 --> File type > 3 characters
  325.      Registers Affected:  PSW
  326.      SYSLIB Routines Called:  -None-
  327.      Special Error Conditions:  -None-
  328. :File Manipulation -- F$OPEN, F$CLOSE, F$MAKE, F$DELETE
  329.      Routine Name:  F$OPEN
  330.      Function:   Open the file specified by the FCB pointed to by  DE.   If 
  331. file is not found, F$OPEN asks the user (on CON:) if he wishes to create it 
  332. and  does  so if the answer is 'Y' or 'y' (F$OPEN simply  returns  with  an 
  333. appropriate error code if answer is negative).
  334.      Inputs:  DE = pointer to FCB
  335.      Outputs:  A = Error Code
  336.                    0    --> No Error
  337.                    0FFH --> File not opened or created
  338.      Registers Affected:  PSW
  339.      SYSLIB Routines Called:  BDOS, CAPS, CIN, COUT, CRLF, PRINT
  340.      Special Error Conditions:  -None-
  341.  
  342.      Routine Name:  F$CLOSE
  343.      Function:  Close the file whose FCB is pointed to by DE.
  344.      Inputs:  DE = pointer to FCB
  345.      Outputs:  A = Error Code
  346.                    0    --> No Error
  347.                    0FFH --> Error in closing file
  348.      Registers Affected:  PSW
  349.      SYSLIB Routines Called:  BDOS
  350.      Special Error Conditions:  -None-
  351.  
  352.      Routine Name:  F$MAKE
  353.      Function:  Create (Make) the file whose FCB is pointed to by DE.
  354.      Inputs:  DE = pointer to FCB
  355.      Outputs:  A = Error Code
  356.                    0FFH --> No directory space available
  357.                    Not 0FFH --> No Error; Value is byte address in
  358.                                 TBUFF (80H-0FFH) of directory entry
  359.                                 allocated to the FCB
  360.      Registers Affected:  PSW
  361.      SYSLIB Routines Called:  BDOS, F$DELETE
  362.      Special Error Conditions:  -None-
  363.  
  364.      Routine Name:  F$DELETE
  365.      Function:   Delete  the file whose FCB is pointed to by DE.   If  file 
  366. does not exist, nothing happens (no error message or code is given).
  367.      Inputs:  DE = pointer to FCB
  368.      Outputs:  -None-
  369.      Registers Affected:  PSW
  370.      SYSLIB Routines Called:  BDOS
  371.      Special Error Conditions:  -None-
  372. :File Input/Output Routines -- F$READ and F$WRITE
  373.      Routine Name:  F$READ
  374.      Function:  Read next block (128 bytes) from the opened file whose  FCB 
  375. is pointed to by DE into TBUFF (buffer at 80H - 0FFH).
  376.      Inputs:  DE = pointer to FCB
  377.      Outputs:  A = Error Code
  378.                    0 --> No Error
  379.                    1 --> Read past end of file
  380.                    2 --> Reading unwritten data in random access
  381.      Registers Affected:  PSW
  382.      SYSLIB Routines Called:  BDOS
  383.      Special Error Conditions:  -None-
  384.  
  385.      Routine Name:  F$WRITE
  386.      Function:   Write  next block (128 bytes) from TBUFF (buffer at 80H  - 
  387. 0FFH) to the opened file whose FCB is pointed to by DE.
  388.      Inputs:  DE = pointer to FCB
  389.      Outputs:  A = Error Code
  390.                    0    --> No Error
  391.                    1    --> Error in extending file
  392.                    2    --> End of disk data
  393.                    0FFH --> No more directory space
  394.      Registers Affected:  PSW
  395.      SYSLIB Routines Called:  BDOS
  396.      Special Error Conditions:  -None-
  397. :Input Line Editor -- INLINE
  398.      Routine Name:  INLINE
  399.      Function:   INLINE allows the user to input a line of text  from  CON: 
  400. into the buffer pointed to by HL.   The user is allowed to edit the text as 
  401. he types it, and INLINE responds to the following editor commands:
  402.  
  403.    Key Command      Function
  404.    -----------      --------
  405.      <BS>           Delete previous character and back up cursor
  406.      <DEL>          Delete previous character and echo it (like CP/M)
  407.      <CR>           Input complete -- return to calling program
  408.      <LF>           Skip down to next physical line and insert a <CR> <LF>
  409.                       into buffer
  410.      <TAB>          Tabulate to next tab stop (every 8, as in CP/M)
  411.      Ctrl-U,        Erase current line (clear buffer) and restart input
  412.        Ctrl-X
  413.      Ctrl-R         Retype current line
  414.  
  415. On exit,  the buffer contains the text entered followed by a <NULL> (binary 
  416. 0); the <CR> typed to end the input is NOT placed in the buffer.
  417.  
  418.      Inputs:  HL = pointer to input line buffer
  419.      Outputs:  -None- (Input line buffer contains text typed by user)
  420.      Registers Affected:  -None-
  421.      SYSLIB Routines Called:  CCOUT, CIN, COUT, CRLF
  422.      Special  Error Conditions:  <BEL> (Beep at CON:) is output if  attempt 
  423. is made to delete character (<BS> or <DEL>) before beginning of  line.   No 
  424. limit  or  error  checking  is done on the size of the  input  line  buffer 
  425. (buffer  overflow  is possible,  so it is recommended that buffer  is  made 
  426. arbitrarily large).   Hash mark (#) is printed in response to Ctrl-R, Ctrl-
  427. U, and Ctrl-X.
  428. :String Output Routines -- PRINT, LPRINT, PSTR, LPSTR
  429.      Routine Names:  PRINT, LPRINT
  430.      Function:   Print  string  pointed to by the return  address  on  CON: 
  431. (PRINT) or LST: (LPRINT).   String is terminated by a binary 0.  Control is 
  432. returned to byte following string.
  433.      Inputs:  Return Address = pointer to string to be printed
  434.      Outputs:  HL points to byte after string
  435.                (string is printed on CON: or LST:)
  436.      Registers Affected:  HL
  437.      SYSLIB Routines Called:  PSTR (for PRINT); LSTR (for LPRINT)
  438.      Special  Error Conditions:  The string MUST be terminated by a  binary 
  439. 0!!!
  440.  
  441.      Routine Names:  PSTR, LPSTR
  442.      Function:   Print  string  pointed to by HL on  CON:  (PSTR)  or  LST: 
  443. (LPSTR).  String is terminated by a binary 0.
  444.      Inputs:  HL = pointer to string to be printed
  445.      Outputs:  -None- (string is printed on CON: or LST:)
  446.      Registers Affected:  -None-
  447.      SYSLIB  Routines Called:  CCOUT,  COUT (for PSTR);  LCOUT,  LOUT  (for 
  448. LPSTR)
  449.      Special  Error Conditions:  The string MUST be terminated by a  binary 
  450. 0!!!
  451. :Numeric Output Routines -- PHL4HC,PHL5DC,PHLDC,PA2HC,PA3DC,PADC, L's, M's
  452.      Routine Names:  PHL4HC, LHL4HC
  453.      Function:   Print  HL  as  four (4)  hexadecimal  characters  on  CON: 
  454. (PHL4HC) or LST: (LHL4HC).
  455.      Inputs:  HL = value to be printed
  456.      Outputs:  -None- (Value is printed)
  457.      Registers Affected:  -None-
  458.      SYSLIB Routines Called:  PA2HC (for PHL4HC); LA2HC (for LHL4HC)
  459.      Special Error Conditions:  -None-
  460.  
  461.      Routine Name:  MHL4HC
  462.      Function:   Store HL as four (4) hexadecimal characters in the  4-byte 
  463. memory buffer pointed to by DE.  On return, DE points to the byte following 
  464. this buffer.
  465.      Inputs:  HL = value to be converted and stored
  466.               DE points to 4-byte buffer
  467.      Outputs:  DE points to byte after buffer
  468.      Registers Affected:  DE
  469.      SYSLIB Routines Called:  MA2HC
  470.      Special Error Conditions:  -None-
  471.  
  472.      Routine Names:  PHL5DC, LHL5DC
  473.      Function:  Print HL as five (5) decimal characters on CON: (PHL5DC) or 
  474. LST: (LHL5DC).
  475.      Inputs:  HL = value to be printed
  476.      Outputs:  -None- (Value is printed)
  477.      Registers Affected:  -None-
  478.      SYSLIB Routines Called:  POUT (for PHL5DC); LOUT (for LHL5DC)
  479.      Special Error Conditions:  -None-
  480.  
  481.      Routine Name:  MHL5DC
  482.      Function:  Store HL at five (5) decimal characters in memory in the 5-
  483. byte buffer pointed to by DE.   On return, DE points to the byte after this 
  484. buffer.
  485.      Inputs:  HL = value to be converted and stored
  486.               DE points to a 5-byte buffer
  487.      Outputs:  DE points to the byte following the buffer
  488.      Registers Affected:  DE
  489.      SYSLIB Routines Called:  -None-
  490.      Special Error Conditions:  -None-
  491.  
  492.      Routine Names:  PHLDC, LHLDC
  493.      Function:  Print HL as up to five (5) decimal characters with  leading 
  494. spaces (<SP>) on CON: (PHLDC) or LST: (LHLDC).
  495.      Inputs:  HL = value to be printed
  496.      Outputs:  -None- (Value is printed)
  497.      Registers Affected:  -None-
  498.      SYSLIB Routines Called:  POUT (for PHLDC); LOUT (for LHLDC)
  499.      Special Error Conditions:  -None-
  500.  
  501.      Routine Name:  MHLDC
  502.      Function:   Store HL as up to five (5) decimal characters with leading 
  503. spaces in the 5-byte memory buffer pointed to by DE.
  504.      Inputs:  HL = value to be converted and printed
  505.               DE points to the 5-byte buffer
  506.      Outputs:  DE points to the byte after the buffer
  507.      Registers Affected:  DE
  508.      SYSLIB Routines Called:  -None-
  509.      Special Error Conditions:  -None-
  510.  
  511.      Routine Names:  PA2HC, LA2HC
  512.      Function:   Print A as two (2) hexadecimal characters on CON:  (PA2HC) 
  513. or LST: (LA2HC).
  514.      Inputs:  A = value to be printed
  515.      Outputs:  -None- (Value is printed)
  516.      Registers Affected:  -None-
  517.      SYSLIB  Routines Called:  EN (for both);  POUT (for PA2HC);  LOUT (for 
  518. LA2HC)
  519.      Special Error Conditions:  -None-
  520.  
  521.      Routine Name:  MA2HC
  522.      Function:   Store  A as two (2) hexadecimal characters in  the  2-byte 
  523. memory buffer pointed to by HL.  On return, HL points to byte after buffer.
  524.      Inputs:  A = value to be converted and stored
  525.               HL points to 2-byte buffer
  526.      Outputs:  HL points to byte after this buffer
  527.      Registers Affected:  HL
  528.      SYSLIB Routines Called:  EN
  529.      Special Error Conditions:  -None-
  530.  
  531.      Routine Names:  PA3DC, LA3DC
  532.      Function:  Print A as three (3) decimal characters on CON: (PA3DC)  or 
  533. LST: (LA3DC).
  534.      Inputs:  A = value to be printed
  535.      Outputs:  -None- (Value is printed)
  536.      Registers Affected:  -None-
  537.      SYSLIB Routines Called:  POUT (for PA3DC); LOUT (for LA3DC)
  538.      Special Error Conditions:  -None-
  539.  
  540.      Routine Name:  MA3DC
  541.      Function:   Store  A  as three (3) decimal characters  in  the  3-byte 
  542. memory buffer pointed to by HL.  On return, HL points to the byte after the 
  543. buffer.
  544.      Inputs:  A = value to be converted and stored
  545.               HL points to the 3-byte buffer
  546.      Outputs:  HL points to the byte after the buffer
  547.      Registers Affected:  HL
  548.      SYSLIB Routines Called:  -None-
  549.      Special Error Conditions:  -None-
  550.  
  551.      Routine Names:  PADC, LADC
  552.      Function:   Print A as up to three (3) decimal characters with leading 
  553. spaces (<SP>) on CON: (PADC) or LST: (LADC).
  554.      Inputs:  A = value to be printed
  555.      Outputs:  -None- (Value is printed)
  556.      Registers Affected:  -None-
  557.      SYSLIB Routines Called:  POUT (for PADC); LOUT (for LADC)
  558.      Special Error Conditions:  -None-
  559.  
  560.      Routine Name:  MADC
  561.      Function:  Store A as up to three (3) decimal characters with  leading 
  562. spaces in the 3-byte memory buffer pointed to by HL.   On return, HL points 
  563. to the byte after the buffer.
  564.      Inputs:  A = value to be converted and stored
  565.               HL points to the 3-byte memory buffer
  566.      Outputs:  HL points to the byte after the buffer
  567.      Registers Affected:  HL
  568.      SYSLIB Routines Called:  -None-
  569.      Special Error Conditions:  -None-
  570. :String and Value Comparision Routines -- COMPHD,COMPB,COMPBC,SCANNER,INSTR
  571.      Routine Name:  COMPHD
  572.      Function:  Compare HL to DE.  On return, Zero Flag Set => HL=DE, Carry 
  573. Flag Set => HL<DE.
  574.      Inputs:  HL, DE -- Values to compare
  575.      Outputs:  Zero and Carry Flags
  576.      Registers Affected:  PSW
  577.      SYSLIB Routines Called:  -None-
  578.      Special Error Conditions:  -None-
  579.  
  580.      Routine Names:  COMPB, COMPBC
  581.      Function:  Vector Compare Routines.   Compare the vector pointed to by 
  582. HL with that pointed to by DE (Vectors are of equal length).  Vectors are B 
  583. bytes long for COMPB and BC bytes long for COMPBC.   On exit, Zero Flag Set 
  584. indicates  that  vectors are identical;  Carry Flag Set indicates that  the 
  585. vector pointed to by HL is less than the vector pointed to by DE.
  586.      Inputs:  HL, DE -- Pointers to vectors to compare
  587.               B (for COMPB), BC (for COMPBC) -- number of bytes in vectors
  588.      Outputs:  Zero and Carry Flags
  589.      Registers Affected:  PSW
  590.      SYSLIB Routines Called:  -None-
  591.      Special Error Conditions:  -None-
  592.  
  593.      Routine Name:  SCANNER
  594.      Function:  SCANNER scans the vector of bytes pointed to by HL for  the 
  595. vector  of bytes pointed to by DE.   The HL-byte vector is B bytes long and 
  596. the DE-byte vector is C bytes long.   On return, if found, HL points to the 
  597. beginning location within the original HL vector of the located vector  and 
  598. the  Zero  Flag is Set;  if not found,  Zero Flag is not set and HL is  not 
  599. affected (points to the beginning of the original HL-byte vector).
  600.      Inputs:  HL = Pointer to vector to be scanned
  601.               DE = Pointer to vector to scan for
  602.               B = Number of bytes in HL-vector
  603.               C = Number of bytes in DE-vector
  604.      Outputs:  If found, Zero Set and HL pts to located vector
  605.                If not found, Zero Reset and HL unaffected
  606.      Registers Affected:  PSW, HL
  607.      SYSLIB Routines Called:  -None-
  608.      Special Error Conditions:  Automatic success if vector searched for is 
  609. null.
  610.  
  611.      Routine Name:  INSTR
  612.      Function:   INSTRING Function.   Scan the string pointed to by HL  for 
  613. the string pointed to by DE.  A string is a vector of bytes terminated by a 
  614. binary 0.
  615.           On return,  if found,  Zero Flag is Set and HL points to 1st byte 
  616. of substring within scanned string;  if not found, Zero Flag is not set and 
  617. HL is not affected.
  618.      Inputs:  HL = Pointer to string to be scanned
  619.               DE = Pointer to string to scan for
  620.      Outputs:  If found, Zero Set and HL pts to located substring
  621.                If not found, Zero Reset and HL unaffected
  622.      Registers Affected:  PSW, HL
  623.      SYSLIB Routines Called:  -None-
  624.      Special Error Conditions:  Automatic success if string searched for is 
  625. null.
  626. :<CR> <LF> Output -- CRLF and LCRLF
  627.      Routine Names:  CRLF, LCRLF
  628.      Function:  Print <CR> and <LF> on CON: (CRLF) or LST: (LCRLF).
  629.      Inputs:  -None-
  630.      Outputs:  -None- (<CR> <LF> is printed)
  631.      Registers Affected:  -None-
  632.      SYSLIB Routines Called:  POUT (for CRLF); LOUT (for LCRLF)
  633.      Special Error Conditions:  -None-
  634. :Conditional Input -- CONDIN
  635.      Routine Name:  CONDIN
  636.      Function:  Input a character from CON: if one is available; otherwise, 
  637. return a flag stating that a character is not available on CON:.
  638.      Inputs:  -None-
  639.      Outputs:  A = character typed at CON: (if available)
  640.                Zero Flag is set (Z) if no character is available
  641.                Zero Flag is reset (NZ) if character is available
  642.      Registers Affected:  PSW
  643.      SYSLIB Routines Called:  CST, CIN
  644.      Special Error Conditions:  -None-
  645. :General Input Routines -- CST, CIN, RIN
  646.      Routine Name:  CST
  647.      Function:   Input  the status on CON: in Register  A.   If  Read  Data 
  648. Available, A=0; otherwise, A=1.
  649.      Inputs:  -None-
  650.      Outputs:  A = Console Status
  651.                    0 --> Read Data Available (RDA)
  652.                    1 --> Read Data Not Available (Not RDA)
  653.      Registers Affected:  PSW
  654.      SYSLIB Routines Called:  -None-
  655.      Special Error Conditions:  -None-
  656.  
  657.      Routine Names:  CIN, RIN
  658.      Function: Input character from CON: (CIN) or RDR: (RIN) in Register A.
  659.      Inputs:  -None-
  660.      Outputs:  A = Character input from CON: or RDR:
  661.      Registers Affected:  PSW
  662.      SYSLIB Routines Called:  -None-
  663.      Special Error Conditions:  -None-
  664. :General Output Routines -- COUT, LOUT, POUT, CCOUT, CLOUT, CPOUT
  665.      Routine Names:  COUT, LOUT, POUT
  666.      Function:  Output character in Register A to CON: (COUT), LST: (LOUT), 
  667. or PUN: (POUT).
  668.      Inputs:  A = Character to output
  669.      Outputs:  -None- (Character is output)
  670.      Registers Affected:  -None-
  671.      SYSLIB Routine Called:  -None-
  672.      Special Error Conditions:  -None-
  673.  
  674.      Routine Names:  CCOUT, CLOUT, CPOUT
  675.      Function:  Output character in Register A to CON: (COUT), LST: (LOUT), 
  676. or  PUN:  (POUT) with control character processing.   All  characters  with 
  677. ASCII  codes  less than <SP> (space = 20H) in value except  <NULL>,  <BEL>, 
  678. <BS>,  <LF>,  and  <CR>  are  output  as an uparrow  (^)  followed  by  the 
  679. corresponding letter generated by adding 40H to the character value  (i.e., 
  680. 1 outputs as "^A",  2 as "^B", etc.).  Again, the characters less than <SP> 
  681. in value NOT output in this manner are --
  682.  
  683.           <NULL>  <BEL>  <BS>  <LF>  <CR>
  684.  
  685. Any character of value greater than <SP> is output normally.
  686.      Inputs:  A = Character to output
  687.      Outputs:  -None- (Character/Code is output)
  688.      Registers Affected:  PSW (only the Flags; Register A is NOT affected)
  689.      SYSLIB Routines Called:  COUT (for CCOUT); LOUT (for CLOUT); POUT (for 
  690. CPOUT)
  691.      Special Error Conditions:  -None-
  692. :Miscellaneous Routines -- BDOS,  CAPS,  CIO,  EN,  FILLB,  FILLBC,  MOVEB, 
  693. MOVEBC, CATH
  694.      Routine Name:  BDOS
  695.      Function:   Call CP/M Entry Point at location 5 and preserve Registers 
  696. HL and DE.
  697.      Inputs:  -As Required by User-
  698.      Outputs:  PSW, BC
  699.      Registers Affected:  PSW, BC
  700.      SYSLIB Routines Called:  -None-
  701.      Special Error Conditions:  -Determined by Routines Called-
  702.  
  703.      Routine Name:  CAPS
  704.      Function:   Capitalize ASCII character in Register A if it  is  lower-
  705. case alphabetic (a-z); otherwise, return A unaffected.
  706.      Inputs:  A = character to capitalize
  707.      Outputs:  A = capitalized character
  708.      Registers Affected:  PSW
  709.      SYSLIB Routins Called:  -None-
  710.      Special Error Conditions:  -None-
  711.  
  712.      Routine Name:  CIO
  713.      Function:   CP/M  I/O through BIOS Jump Table.   This routine  indexes 
  714. into the CP/M BIOS Jump Table and allows the user to address any routine in 
  715. the  BIOS  (accessable  routines  only).   It is  called  with  Register  A 
  716. containing  the index offset (see table below) and Registers BC  containing 
  717. any required input arguments.  The following table summarizes the BIOS Jump 
  718. Table entries --
  719.  
  720. Offset Function                    Offset Function
  721.    0   Warm Start                     7   Home Disk Head
  722.    1   Console Status; A=0FFH if      8   Select Disk; C=Disk Number (A=0,
  723.        char ready, A=0 if not             B=1, C=2, D=3) passed
  724.    2   Console Input; A=result        9   Set Track Number; C=Track Number
  725.    3   Console Output; C=char passed      passed
  726.    4   List Output; C=char passed    10   Set Sector Number; C=Sector
  727.    5   Punch Output; C=char passed        Number passed
  728.    6   Reader Input; A=result        11   Set DMA Address; BC=adr passed
  729.                                      12   Read Disk; A=0 if ok, 1 if err
  730.                                      13   Write Disk; A=0 if ok, 1 if err
  731. Any other offset results in a Cold Start being performed.
  732.  
  733.      Inputs:  A = Offset
  734.               BC = Data Passed to Routine
  735.      Outputs:  A = Output or Error Indicator
  736.      Registers Affected:  PSW
  737.      SYSLIB Routines Called:  -None-
  738.      Special Error Conditions:  -None-
  739.  
  740.      Routine Name:  EN
  741.      Function:   Exchange Nybbles in Register A;  High-order four bits  are 
  742. exchanged with Low-order four bits of Register A.
  743.      Inputs:  A = Byte input
  744.      Outputs:  A = Byte output
  745.      Registers Affected:  PSW
  746.      SYSLIB Routines Called:  -None-
  747.      Special Error Conditions:  -None-
  748.  
  749.      Routine Names:  FILLB, FILLBC
  750.      Function:   These routines fill an area of memory with a constant byte 
  751. value.  FILLB can fill up to a 256-byte buffer, and FILLBC can fill up to a 
  752. 65,536-byte (within reason) buffer.
  753.      Inputs:  HL points to the first byte of the buffer to be filled
  754.               B (for FILLB) or BC (for FILLBC) = number of bytes in buffer
  755.               A = byte value to fill buffer with
  756.      Outputs:  -None- (Buffer is filled)
  757.      Registers Affected:  -None-
  758.      SYSLIB Routines Called:  -None-
  759.      Special Error Conditions:  -None-
  760.  
  761.      Routine Names:  MOVEB, MOVEBC
  762.      Function:   Move  the block of memory pointed to by HL to  the  memory 
  763. location  pointed to by DE.   MOVEB can move up to a 256-byte  buffer,  and 
  764. MOVEBC can move up to a 65,536-byte buffer.
  765.      Inputs:  HL points to the first byte of the buffer to move
  766.               DE points to the first byte of the buffer to move to
  767.               B (for MOVEB) or BC (for MOVEBC) = number of bytes in buffer
  768.      Outputs:  -None- (Buffer is moved)
  769.      Registers Affected:  -None-
  770.      SYSLIB Routines Called:  -None-
  771.      Special Error Conditions:  -None-
  772.  
  773.      Routine Name:  CATH
  774.      Function:   Convert the ASCII Hexadecimal character in the A  Register 
  775. to binary in the A Register.   If invalid character (not 0-9,  A-F), return 
  776. <SP> (20 Hex) in A Register as error code.
  777.      Input:  A = ASCII Hex Character (0-9, A-F)
  778.      Output:  A = Binary value represented by char
  779.      Registers Affected:  PSW
  780.      SYSLIB Routines Called:  -None-
  781.      Special Error Conditions:  If invalid hex char, <SP> (20 Hex) returned 
  782. in A Register.
  783.