home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ZSYS / ZSYSARK / Z3HLP03.ARK / SYSLIB42.LBR / SYSLIB0.HZP / SYSLIB0.HLP
Text File  |  1990-03-23  |  13KB  |  319 lines

  1.  Introduction to SYSLIB 4
  2.  Comments on Software Engineering 
  3.  Library Definitions and Terms 
  4.  Parameter-Passing Conventions 
  5.  Overview of SYSLIB 4 Routines 
  6. :                 Introduction to SYSLIB 4 
  7.  
  8. SYSLIB 4 is an integrated tool set which is designed to assist
  9. you, the assembly language programmer, in writing programs.  It
  10. is intended to place you at a higher level of abstraction and
  11. allow you to concentrate on the problem at hand without having
  12. to concern yourself with the low-level implementation details
  13. of the operating system interface, input/output, text parsing
  14. and evaluation, math, and sorting.
  15.  
  16. To illustrate this point, consider an assembly language program
  17. which needs to access a disk directory, then display a sorted
  18. list of file names.  Without SYSLIB 4 or similar library, you
  19. would have to write a relatively sophisticated body to code to
  20. access the directory, load it in memory, sort, and display it.
  21.  
  22. SYSLIB 4, however, provides you with a "toolbox" of routines to
  23. call on to perform some of the more tedious functions.  One of
  24. these tools, DIRF, loads the elements of a disk directory which
  25. match a file spec into a memory buffer for you.
  26.  
  27.  
  28. But, more than just providing a set of tools, SYSLIB 4 was
  29. designed with structured programming and software engineering
  30. in mind.  The basic goal in software design is that the
  31. programs meet the stated requirements.  In applying software
  32. engineering, we want more than just this.  Among other things,
  33. we want the program to be:
  34.  
  35.           o Modifiable             o Efficient
  36.           o Reliable               o Understandable
  37.  
  38. SYSLIB 4 offers a significant set of facilities which can help
  39. to achieve these goals.
  40.  
  41. :            Comments on Software Engineering 
  42.  
  43. We are experiencing a SOFTWARE CRISIS today, the basis of which
  44. is simply that it is more difficult to build reliable software
  45. systems that we think it should be.  All too often, the
  46. symptoms of the SOFTWARE CRISIS are seen:
  47.  
  48.     o Cost - unpredictable and judged excessive
  49.     o Efficiency - time and space utilitization are
  50.         not efficient
  51.     o Modifiability - software is difficult to change
  52.     o Reliability - software often fails
  53.     o Responsiveness - user needs are not met
  54.     o Timeliness - software is not delivered on time
  55.     o Transportability - software used on one system
  56.         may not be used on another
  57.  
  58.  
  59. The bottom line in the design of a software system is that the
  60. software should meet its stated requirements.  To achieve this
  61. end, the field of SOFTWARE ENGINEERING has arisen.  The goals
  62. of SOFTWARE ENGINEERING are:
  63.  
  64.    1.  Modifiability - Software should be easy to change, and
  65. software should be designed with later change in mind.
  66.  
  67.    2.  Efficiency - The software system should use available
  68. resources in an optimal manner.
  69.  
  70.    3.  Reliability - The software should perform according to
  71. specification and recover safely from failure during use.
  72.  
  73.    4.  Understandability - Software should be easy to read and
  74. follow.  Understandability is the tool used to pass from a
  75. particular problem space to a solution.
  76.  
  77.  
  78. SYSLIB 4 attempts to help you achieve the goals of Software
  79. Engineering by applying these principles:
  80.  
  81.    1.  Abstraction and Information Hiding - Unnecessary detail
  82. is hidden from you.  For example, the DIRF routine loads the
  83. contents of a disk directory into a memory buffer.  How this
  84. load is done is hidden -- all you need to know is that the load
  85. was done and you have a vector of directory entries.
  86.  
  87.    2.  Modularity - SYSLIB 4 is very modular in design.  Each
  88. routine in the library performs one and only one function, and
  89. the documentation provides complete detail as to what that
  90. function is, what its input parameters are, what its output
  91. parameters are, what its side effects are, and other data.
  92.  
  93.  
  94.    3.  Localization and Loose Coupling - SYSLIB 4 modules are
  95. loosely coupled -- each module may be treated independently of
  96. the others.  Additionally, the modules are strongly cohesive --
  97. the components of each module are intimately related to each
  98. other but not to components of other modules.
  99.  
  100.    4.  Uniformity - The calling conventions between the various
  101. SYSLIB 4 modules are consistent with each other, and it is
  102. frequently the case that the output parameters from one module
  103. may be directly used as input parameters to another.
  104.  
  105.    5.  Completeness - Each module or group of related modules
  106. are functionally complete.  No additional functions are needed.
  107.  
  108.    6.  Confirmability - A program written using SYSLIB 4
  109. modules can be readily decomposed for incremental testing.
  110.  
  111. :         Definitions and Terms 
  112.  
  113. Some terms are used frequently in the SYSLIB 4 documentation.
  114. These terms are defined below.
  115.  
  116.    1.  Buffer - A contiguous vector of bytes in memory.  The
  117. buffer is known by its starting address and size as:
  118.  
  119.     BUFFER:    DEFS    40    ; 40-byte buffer
  120.  
  121.    2.  Character - A one-byte (8-bit) value.  A value range
  122. within the ASCII character set (a 7-bit value) is implied but
  123. not required, so a character could have a value of 81H.
  124.  
  125.    3.  Directory - An index to files on a disk.  A directory
  126. entry contains the name of a file, the User number it resides
  127. in, the file size, and where the file is located on the disk.
  128. The information loaded by SYSLIB directory routines does not
  129. include file location information, but does include every-
  130. thing else.  In another sense, the term directory is used to
  131. refer to a particular disk and user area (such as A4 or B31).
  132.  
  133.    4.  FCB (File Control Block) - A 36-byte buffer satisfying
  134. the full definition of a CP/M File Control Block.  SYSLIB 4
  135. FCB's are ALWAYS 36 bytes long.  In many cases, when routines
  136. need a user-supplied FCB, you need only fill in the file name
  137. and type fields (bytes 1-11) and need not concern yourself with
  138. the rest of the fields.  The INITFCB routine stores zero in all
  139. bytes except bytes 1-11 of the FCB.
  140.  
  141.    5.  File - Any CP/M file, either text or binary.  SYSLIB 4
  142. makes no distinction between these two types of files.
  143.  
  144.    6.  String - Any sequence of ASCII characters terminated by
  145. a <NULL> character, which is a byte of value 0.  Examples of
  146. strings are:
  147.  
  148.     DEFB    'This is a string',0
  149.     DEFB    1,2,3,'This is also',0
  150.  
  151. :              Parameter-Passing Conventions 
  152.  
  153. SYSLIB 4 is very consistent in its parameter-passing conven-
  154. tions.  In all cases, parameters are passed to and from SYSLIB
  155. 4 routines in registers.  If more values are required than
  156. there are available registers, the register values are pointers
  157. to specification blocks which contain the desired parameters
  158. (see the FXn$xxxxx and the SORT routines).  In nearly all
  159. cases, the following register usage rules apply:
  160.  
  161. The HL Register Pair is used --
  162.  
  163.    1. as a buffer pointer; for example, HL contains the address
  164.     of the buffer used by DIRF
  165.  
  166.    2. as a string pointer; for example, HL points to the first
  167.     byte of a string for the EVAL routine
  168.  
  169.    3. to hold the first operand for math routines; for example,
  170.     DIVHD divides HL by DE
  171.  
  172.  
  173. The DE Register Pair is used --
  174.  
  175.    1. to point to an FCB; for example, DE contains the address
  176.     of the FCB used by DIRF
  177.  
  178.    2. to contain the second operand for math routines; for
  179.     example, SUBHD subtracts DE from HL
  180.  
  181.    3. to point to special blocks (buffers) used by SYSLIB 4
  182.     routines; for example, DE points to the Sort
  183.     Specification Block for the SORT routine
  184.  
  185. The BC Register Pair is used to contain a DU form, where B
  186.     hold a Disk Number (A=0) and C hold a User Number
  187.  
  188.  
  189. The A Register is used to --
  190.  
  191.    1. contain an Input Flag; for example, A contains the
  192.     selection flag used by DIRF
  193.  
  194.    2. contain an Error Return Code; if the value of this code
  195.     is 0, the Zero Flag (Z) is also set, and vice-versa;
  196.     for example, A contains a TPA overflow error flag
  197.     returned by the DIRF routine
  198.  
  199.    3. contain a character input or output from a a SYSLIB 4
  200.     routine; for example, CIN returns a character in A and
  201.     COUT outputs a character in A
  202.  
  203. :            Overview of SYSLIB 4 Routines 
  204.  
  205. SYSLIB 4 contains many routines grouped into the following
  206. functional areas:
  207.  
  208.    1. Directory Manipulation Routines.  These routines deal
  209.     with directory access.  The entries of a disk direc-
  210.     tory can be loaded into a memory buffer, selected
  211.     against an FCB, sorted, and manipulated.
  212.  
  213.    2. Numeric String Evaluation Routines.  These routines
  214.     convert character strings into 16-bit binary values.
  215.     Strings like those below are processed:
  216.  
  217.     DEFB    '123',0        ; value is 123 decimal
  218.     DEFB    '5AH',0        ; value is 5A hexadecimal
  219.     DEFB    '110B',0    ; value is 110 binary
  220.     DEFB    '77Q',0        ; value is 77 octal
  221.  
  222.  
  223.    3. Byte-Oriented File Input/Output Routines.  These routines
  224.     support input and output to and from files on the basis
  225.     of a byte at a time.  FX$GET, for example, returns the
  226.     next byte from the current file in A.
  227.  
  228.    4. CP/M File Input/Output Routines.  These routines support
  229.     input and output to and from files on the basis of a
  230.     128-byte block at a time.  Provisions for deleting
  231.     files, renaming files, and computing file sizes also
  232.     exist.
  233.  
  234.    5. User/Disk Manipulation Routines.  These routines allow
  235.     the program to find out what disk and user area it is
  236.     in and to move between directories.
  237.  
  238.  
  239.    6. File Name String Parser.  This routine is used to convert
  240.     a file name text string into an acceptable form and
  241.     place it into an FCB.  For example, the following con-
  242.     version can be done:
  243.  
  244.     DEFB    'MYFILE.TXT',0        ; string
  245.  
  246.     DEFB    0            ; ..converted to
  247.     DEFB    'MYFILE  '
  248.     DEFB    'TXT'
  249.     DEFS    24
  250.  
  251.    7. Input Line Editors.  These routines accept user input
  252.     with editing and return a pointer to the first byte of
  253.     user input in string form (terminated by a binary 0).
  254.  
  255.  
  256.    8. String Output Routines.  These routines send strings to
  257.     various devices.  Routines are provided to send strings
  258.     of characters to the console or printer with or without
  259.     control-character processing.
  260.  
  261.    9. Numeric Output Routines.  These routines convert binary
  262.     values to character sequences and output them to
  263.     various devices.  Output to the console and printer is
  264.     provided, and the output is either in the form of
  265.     decimal or hexadecimal numbers.
  266.  
  267.    10. String and Value Comparison Routines.  These routines
  268.     provide various comparison functions for both strings
  269.     and numbers.  One string may be compared against
  270.     another string or a substring of another string.  Two
  271.     16-bit numbers can be compared.
  272.  
  273.  
  274.    11. Character-Oriented Input/Output Routines.  These
  275.     routines provide input and output services on a
  276.     character-for-character basis to a variety of devices.
  277.     Output to the console and the printer is provided.
  278.     Also, device status, such as console input status,
  279.     routines are available.
  280.  
  281.    12. Math Routines.  These routines perform mathematical
  282.     calculations on 16-bit quantities.  Add, subtract,
  283.     multiply, divide, rotate, shift, logical AND, logical
  284.     OR, and logical XOR are some of the functions provided.
  285.  
  286.    13. CRC Routines.  These routines support computation of
  287.     Cyclic Redundancy Check values for byte streams.  A
  288.     number of different CRC calculation routines are
  289.     available for different CRC polynomials.
  290.  
  291.  
  292.    14. Random Number Generator Routines.  These routines
  293.     implement a pseudo-random number generator which
  294.     returns an 8-bit value when called.  The seed value for
  295.     this generator may be fed to it, thereby generating the
  296.     same sequence for each given seed, or it may be
  297.     selected randomly.
  298.  
  299.    15. Sort Routines.  These routines provide a fast, general-
  300.     purpose in-memory sort capability.  The sort algorithm
  301.     is very efficient (a Shell Sort), and may be performed
  302.     using element pointers or not using pointers (pointers
  303.     cost more memory but speed up the sort even further).
  304.  
  305.  
  306.    16. Capitalization and Character Test/Skip Routines.  These
  307.     routines are useful for text parsing.  A variety of
  308.     evaluation routines are provided to determine the type
  309.     of character being dealt with (such as alphabetic,
  310.     numeric, hexadecimal, space, punctuation, etc).  Both
  311.     string and individual character capitalization capa-
  312.     bilities are also provided.
  313.  
  314.    17. Memory Allocation Routines.  These routines provide a
  315.     dynamic memory allocation mechanism that constantly
  316.     checks for TPA overflow.  After defining the bounds of
  317.     a memory buffer, requests for space from this area may
  318.     be issued on a byte-for-byte basis.
  319.