;
                                 SYSLIB.REL                                   

             Size (recs) CRC   Version    Author/Latest Issue      Disk
SYSLIB.REL    22k (173)  7F7B  4.4        Harold Bower 6/91        Z3LIB4
SYSLIBS.REL   20k (160)  49AA  4.4        Harold Bower 6/91        Z3LIB4

  1- Introduction  2- Help Files                                              


   "Version 4" of SYSLIB is  an  upgrade  of  SYSLIB 3.6  for  Z80  compatible
computers.   See SYSLIB.HLP,  accessed from Z3HELP-Y.LBR,  for details on each
supplied routine.
:1
 Introduction to The Libraries, Version 4  - 1/4 

   Version 4 of "The Libraries" is  the culmination of over two years of work.
Beginning with  the Version 3.6 libraries,  each  routine  was  optimized  for 
performance on  Z80 compatible  microprocessors,  and  much  restructuring was 
performed to reduce code size  and  increase  functionality for programs using 
these new routines.  Some of the ground rules for this effort were:

 o  Convert source code to Zilog mnemonics and optimize
    routines for execution on Z80 and HD64180 Processors

 o  Isolate unitialized Data into the DSEG where possible to
    permit ROMming of programs and for future growth to the
    Z280 processor

 o  Extract common code in routines to reduce redundancy

 o  Add routines and a new library to take advantage of
    developments in Command Processors and Operating Systems
    for CP/M-compatible computers
 Introduction - 2/4 

The newer family of 8-bit processors such as the Z80,  NSC-800, 64180 and Z180
are capable of much more than the older 8080 and 8085 chips.   Until now, they 
have been  saddled  with the inefficient  routines  in  the older  Version 3.6 
libraries.   Since the majority of  systems have migrated to the ZCPR3 Command
Processor  replacement  which  cannot   operate  on   the   older  processors, 
sacrificing  backward  compatibility  with  the  8080  was  not  considered  a 
significant shortcoming.  In a like vein, CP/M 1.4 remnants have been deleted,
requiring CP/M 2.2 or later "type" systems to operate correctly.

The original routines  placed  data  as  well  as  executable code in the Code 
Segment, or CSEG.   In some routines,  several hundred bytes  of uninitialized 
data was included in program code  which served only  to increase  the size of 
the program image.  Another undesireable feature of this approach is that this 
practice will not  be  permitted  in  newer  processors  using  the  so-called 
protected mode of execution.   Moving data storage to  a separate segment with 
the  DSEG  assembler directive will  make  programs  portable  to  these newer 
systems,  and  allow them to be placed in Read Only Memory (ROM).   Because of 
initialization requirements in some  modules,  this goal could not  be totally 
achieved.
 Introduction - 3/4 

Many  cases of duplicate  code were identified within library routines.   Such
cases were  simplified  by extracting the common fragments,  and  linking them 
only once.   This feature is  transparent and  handled  automatically  by your 
linker.   Only one precaution is necessary with this scheme.   These extracted
routine names  generally begin  with  an  "at"  sign  (@),  and,  with  a  few 
exceptions, are undocumented.   If you link your own library routines with the 
Version 4 Libraries,  insure that no duplication of names  occurs,  or strange 
things will happen.

Correction of deficiencies and  differences  between  Library routines and the 
documentation was also  a high priority during this effort.   These Help files 
should exactly reflect routine parameters and functioning.   Where differences
exist between the printed  manual and these Help files,  the Help files should
be considered the more accurate.
 Introduction - 4/4 

The only deviation from the documentation is in  routines where the A register 
returns a value of 0 with the Zero Flag Set (Z) on one condition, and the Zero 
Flag Reset (NZ) on the other condition.  For most routines, the Non-zero value 
is  derived from  a 0FFH value in the A register as  specified  in the printed
documentation.   This should NOT be considered as an absolute, however, and in 
new development,  you should consider any non-zero  value  as valid,  not just 
0FFH.  This change is reflected in these help files.

Several enhancements  have  been  made  to  SYSLIB  routines.   Among the more 
significant are:

  - DFREE now additionally returns CP/M Plus Free Space
  - xFN1 Filename print routines mask Most Significant Bits
  - DIRQ/DIRQS routines call DBUFFER to reduce programming
	requirements for additional support functions
  - DIRF/DIRQ/DIRQS routines now ignore CP/M Plus Date Stamps
  - New routines have been added for Filename comparisons, Hex
	conversions and console output masking the MSB.  These
	are documented in the SYSLIB Help file
:2
 SYSLIB Help Files: 

SYSLIB0 -->  Introduction and Background                    
SYSLIB1 -->  Overview of SYSLIB4 and Directory Manipulation 
SYSLIB2 -->  Numeric String Evaluation                      
SYSLIB3 -->  Byte-Oriented File I/O                         
SYSLIB4 -->  General-Purpose File Manipulation              
SYSLIB5 -->  Numeric Output                                 
SYSLIB6 -->  Character-Oriented I/O                         
SYSLIB7 -->  General-Purpose Arithmetic                     
SYSLIB8 -->  User, Disk, and DMA Manipulation               
SYSLIB9 -->  File Name Parser/FCB Initialization            
SYSLIBA -->  Input Line Editors                             
SYSLIBB -->  General-Purpose Sort & Miscellaneous Routines  
SYSLIBC -->  Capitalization, Char Test/Skip, ARGV Parser    
SYSLIBD -->  String and File Name Output                    
SYSLIBE -->  String and Value Comparison                    
SYSLIBF -->  CRC Calculation                                
SYSLIBG -->  Random Number Generator                        
SYSLIBH -->  Memory Allocation and Bounds Test              
SYSLIBI -->  Case, Computed GOTO, and Arithmetric IF        
SYSLIBJ -->  Library (LBR) File Manipulation                

