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 / BEEHIVE / ZSUS / Z3HELP-6.LBR / ZA.LBR / Z3LIB1.HZP / Z3LIB1.HLP
Text File  |  2000-06-30  |  19KB  |  478 lines

  1.  Introduction to the ZCPR3 Environment
  2.  Command Line  -- APPCL, CLRCL, GETCL1, GETCL2, PUTCL
  3.  CRT/PRT Data  -- GETCRT, GETPRT, PUTCRT, PUTPRT
  4.  External FCB  -- GETEFCB
  5.  Environment   -- GETENV, GETVID
  6.  FCP Address   -- GETFCP
  7.  Filenames     -- GETFN1, GETFN2, GETFNX, PUTFNX
  8.  Initialize    -- WHRENV, Z3INIT
  9.  System Data   -- ZSYSCHK, Z33CHK, GETBDOS, GETCCP, GETECP
  10. :     Introduction to the ZCPR3 Environment 
  11.  
  12. Any program running under ZCPR3 is within a ZCPR3 environment.
  13. Many facilities and data are available to this program which
  14. to not exist for normal CP/M programs.  For instance, a program
  15. running under the ZCPR3 environment can:
  16.  
  17.   o  Find out what name it was invoked by
  18.   o  Access a set of messages from ZCPR3 which tell it a number
  19.     of things about how it was invoked
  20.   o  Send messages to ZCPR3 and programs which run after it
  21.     completes
  22.   o  Find out many things about its environment, such as the
  23.     processor speed, CRT and printer characteristics,
  24.     maximum number of disks
  25.   o  Determine the your terminal characteristics and use them
  26.     to enhance the display with visual attributes such as
  27.     Cursor Addressing and Highlighted text.
  28.  
  29. The information outlined above and more is available to any
  30. program thru the ZCPR3 Environment Descriptor.  This is a 256-
  31. byte block of memory containing addresses and other data in a
  32. precisely-defined format.  ZCPR3 utilities may be written with
  33. an internal Environment Descriptor or they may access an
  34. Environment Descriptor residing at some fixed memory location
  35. (this is the preferred approach).  When executed, programs can
  36. extract specific information from the Descriptor for use.
  37.  
  38.  
  39. The following information is contained within a ZCPR3
  40. Environment Descriptor:
  41.  
  42.    - address of External Path    - size of External Path
  43.    - address of RCP              - size of RCP
  44.    - address of FCP              - size of FCP
  45.    - address of IOP              - size of IOP
  46.    - address of Named Dir        - size of Named Dir
  47.    - address of Command Line     - size of Command Line
  48.    - address of Env Descriptor   - size of Env Descriptor
  49.    - address of Shell Stack      - size of Shell Stack
  50.    - address of Z3 Messages      - size of Stack Entries
  51.    - address of External FCB     - address of External Stk
  52.    - address of Wheel Byte       - quiet flag
  53.    - processor speed             - DU approval flag
  54.    - maximum disk allowed        - maximum user allowed
  55.    - data on CRT                 - data on Printer
  56.    - two reserved file names     - ZCPR3 TERMCAP (Z3TCAP)
  57.  
  58.  
  59. The purpose of Z3LIB is to provide you with easy access to
  60. information in the ZCPR3 Environment Descriptor and to allow
  61. you to easily use this information.  To illustrate, some of the
  62. Z3LIB routines are:
  63.  
  64.      o  GETPRT  - return data on the width, number of lines,
  65.           and form feed ability of the printer
  66.      o  GETCL2  - return the address of the first char of the
  67.           next command to be run, if any
  68.      o  GETEFCB - return the address of the external FCB so
  69.           the program can determine its name
  70.      o  SHPUSH  - push a command line on the shell stack
  71.      o  SHPOP   - pop a command line from the shell stk
  72.      o  IFT     - invoke the next IF level and make it T
  73.      o  IFEND   - back up to previous IF level
  74.  
  75.  
  76. This HLP file describes those Z3LIB routines which provide
  77. access to the ZCPR3 Environment Descriptor data.  All of these
  78. routines are of the general name:
  79.  
  80.           GETxxxxx
  81.  
  82. where the mnemonic following the GET prefix alludes to what 
  83. information is being obtained.
  84.  
  85. :Command Line   APPCL  CLRCL  GETCL1  GETCL2  PUTCL 
  86.  
  87. APPCL - Append Command String to Command Line Buffer
  88.  
  89.   ENTER: HL = address of command string to append
  90.   EXIT :  A <> 0, Zero Flag Clear (NZ) if Append Complete
  91.           A = 0, Zero Flag Set (Z) if buffer overflows or
  92.         No Command Line Buff (No change to Comnd Line)
  93.   USES : AF
  94.   SIDE EFFECTS: Command Line Buffer is changed
  95.  
  96.  Usage: APPCL appends the specified Null-terminated Command
  97.   String to the end of the ZCPR3 Command Line Buffer for
  98.   execution.  A leading semicolon is prepended to allow this
  99.   line to execute after the last line in the buffer.  The
  100.   command line buffer contents are repacked to avert overflow
  101.   in most cases.  PUTCL is a complementary function in which
  102.   the Command String is added to the beginning of the Command
  103.   Line Buffer as the first command.
  104.  
  105. CLRCL - Clear the Command Line Buffer
  106.  
  107.   ENTER: None
  108.   EXIT : A <> 0, Zero Flag Clear (NZ) if Command Line Cleared
  109.          A = 0 Zero Flag Set (Z) if No Command Line Buffer
  110.   USES : AF
  111.  
  112.  Usage: CLRCL clears the Command Line Buffer by setting it to 
  113.   empty.  Any remaining commands in the buffer will not be
  114.   executed when control is returned to ZCPR3.
  115.  
  116. GETCL1 - Return pointer to Command Line Buffer
  117.  
  118.   ENTER: None
  119.   EXIT : HL = Address of Command Line Buffer (0 if nonexistent)
  120.       A = Size of Buffer
  121.   USES : AF,HL
  122.  
  123.  Usage: This routine is used to locate and return Command Line
  124.   Buffer parameters.  The Command Line Buffer is structured as:
  125.  
  126.     CMDLIN:    DEFW    Address of next character to process
  127.         DEFB    Size of Buffer in Bytes
  128.         DEFB    <dummy used for BDOS READLN function>
  129.         DEFB    ....(chars in command line)
  130.         DEFB    0        ; End of Comnd String
  131.  
  132. GETCL2 - Return Next Command Info from Command Line Buffer
  133.  
  134.   ENTER: None
  135.   EXIT : HL = Addr of Next Command.  (0 if No Comnd Line Buff)
  136.       A = First char of Command, Zero Clear (NZ) if valid
  137.           A = 0, Zero Flag Set (Z) if No characters in line
  138.   USES : AF,HL
  139.  
  140.  Usage: This routine is used in applications where you need to
  141.   directly access characters in the next command stored in the
  142.   Command Line Buffer.
  143.  
  144. PUTCL - Store Command line at beginning of Command Line Buff
  145.  
  146.   ENTER: HL = Address of Null-Terminated Command Line
  147.   EXIT :  A <> 0, Zero Flag Clear (NZ) if Ok
  148.           A = 0 Zero Set (Z) if Overflow (No Buffer change)
  149.   USES : AF
  150.  
  151.  Usage: This routine adds a Command Line as a prefix in the
  152.   ZCPR3 Command Line Buffer as opposed to APPCL which appends
  153.   to the end of the Command Line Buffer.  Buffer contents are
  154.   repacked so that an overflow is averted in most cases.  If a
  155.   Command already exists in the Buffer, the new line is post-
  156.   fixed with a semicolon so continuation is enabled.
  157.  
  158. :CRT/PRT Data   GETCRT  GETPRT  PUTCRT  PUTPRT 
  159.  
  160. GETCRT - Return Address of CRT data record from ENV
  161.  
  162.   ENTER: None
  163.   EXIT : HL = Address of CRT Record
  164.   USES : HL
  165.  
  166.  Usage: This routine is used to determine the parameters of
  167.   the installed terminal. The CRT record is structured as:
  168.  
  169.     CRTDAT: DEFB    80     ; Width of CRT in characters
  170.             DEFB    24     ; Number of lines on the screen
  171.             DEFB    22     ; Number of text lines on screen
  172.  
  173.   The number of text lines should be two less than the total
  174.   number of lines.  You may provide more overlap by making it
  175.   3 or 4 less.  This record element tells utilities like PAGE
  176.   how many lines to output before pausing to allow you to read
  177.   the screen.  This can be reduced (go to 20 or 18 lines) to
  178.   allow you to see more of the last screen.
  179.  
  180. GETPRT - Return the address of the Printer Data Record
  181.  
  182.   ENTER: None
  183.   EXIT : HL = Address of Printer Data Record
  184.   USES : HL
  185.  
  186.  Usage: This routine provides data on some of the printer
  187.   characteristics for use in formatting routines, or other
  188.   uses.  The returned pointer is to a Printer Data Record as:
  189.  
  190.      PRTDAT: DEFB    80    ; Width of Printer in characters
  191.              DEFB    66    ; Number of Lines on Printer page
  192.              DEFB    58    ; Number of Text Lines per page
  193.              DEFB     1    ; Form Feed Flag (0=Can't FF, 1=Can)
  194.  
  195.   Programs such as PRINT may use the difference between the
  196.   third and second entries to determine top and bottom margins,
  197.   and test the last byte to determine whether to issue a Form
  198.   Feed or count Line Feed chars to advance to the next page.
  199.  
  200. PUTCRT - Stores Terminal select byte  (* No real function *)
  201.  
  202.   ENTER: A = Selection value (0)
  203.   EXIT : A <> 0, Zero Flag Clear (NZ) if Entry was 0
  204.          A = 0, Zero Flag Set (Z) if invalid (Not 0)
  205.   USES : AF
  206.  
  207.  Usage: This routine performs no actual function in the
  208.   Extended Environment which supports only one defined CRT
  209.   Data Block.  For compatibility, it senses the Select
  210.   value and simply returns status based on it.
  211.  
  212. PUTPRT - Store Printer Selection byte (0..1) in Environment
  213.  
  214.   ENTER: A = Printer Selection value (0 or 1)
  215.   EXIT : A <> 0, Zero Flag Clear (NZ) if Ok
  216.          A = 0, Zero Flag Set (Z) if invalid (not 0 or 1)
  217.   USES : AF
  218.  
  219.  Usage: PUTPRT stores the selection (0 or 1) in the PRT
  220.   selection buffer of the ZCPR3 Environment Descriptor
  221.   showing that it is the currently active printer. Under
  222.   the Extended Environment, only two printers may be
  223.   defined instead of the four originally supported.
  224.  
  225. :GETEFCB - Return the address of the ZCPR3 External FCB
  226.  
  227.   ENTER: None
  228.   EXIT : HL = Address of External FCB
  229.           A <> 0, Zero Flag Clear (NZ) if Ok
  230.           A = 0, Zero Flag Set (Z) if Not Found
  231.   USES : AF,HL
  232.  
  233.  Usage: Under ZCPR3, a program can find out by what name it was
  234.   invoked through the External FCB.  Bytes 1-8 of the External
  235.   FCB (first byte is 0) contain the name of the program just
  236.   executed by ZCPR3.
  237.  
  238.   This feature is particularly useful for programs like Shells
  239.   which have to push their name and operational parameters onto
  240.   the Shell Stack in order to be reinvoked when a command line
  241.   completes.  A Shell can use the data in the External FCB to
  242.   determine what its name is without having to assume that it
  243.   has a particular name at all times.
  244.  
  245. :Environment   GETENV  GETVID 
  246.  
  247. GETENV - Return address of the ZCPR3 Environment Descriptor
  248.  
  249.   ENTER: None
  250.   EXIT : HL = Address of Encironment Descriptor
  251.   USES : HL
  252.  
  253.  Usage:  This function is useful for those programs which need
  254.   to modify the ZCPR3 Environment Descriptor.  Most of the
  255.   routines in Z3LIB which access the environment descriptor do
  256.   so in a R/O mode (they do not allow the program to change
  257.   data in it).  Some programs may need to do this, so GENENV is
  258.   provided.  Z3LDR, for example, loads a new Environment
  259.   Descriptor from a file on disk, and it uses GETENV to find
  260.   out where to load the file.
  261.  
  262. GETVID - Return Address of the ZCPR3 TCAP (Z3TCAP)
  263.  
  264.   ENTER: None
  265.   EXIT : HL = Address of Z3TCAP Buffer
  266.           A <> 0, Zero Flag Clear (NZ) if Ok
  267.           A = 0, Zero Flag Set (Z) if No entry in Buffer
  268.   USES : AF,HL
  269.  
  270.  Usage:  This function is useful for those programs which need
  271.   to modify the ZCPR3 TCAP Buffer and those programs which need
  272.   to determine if the TCAP is loaded.  It may be desirable to
  273.   call this routine before a screen-oriented utility is
  274.   executed to insure that a TCAP is available.
  275.  
  276. :GETFCP - Return Address of the Flow Command Package buffer
  277.  
  278.   ENTER: None
  279.   EXIT : HL = Address of FCB Buffer
  280.           A = # of 128-byte FCP Blocks, Zero Clear (NZ) if Ok
  281.               A = 0, Zero Flag Set (Z) if No buffer
  282.   USES : AF,HL
  283.  
  284.  Usage:  This routine is used to simply return the FCB parms
  285.   from the Environment Descriptor.  The starting address and
  286.   size of the FCP Buffer in terms of 128-byte blocks are
  287.   returned.  To find out if an FCP is installed, look at the
  288.   first byte of the FCP buffer.  If it is zero, then no FCP is
  289.   present.  
  290.  
  291. Example:
  292.     EXT    GETFCP        ; Declare the routine
  293.     ...            ; ..preliminary code
  294.     CALL    GETFCP        ; Get addr/size from ENV
  295.     JR    Z,NOFCP        ; ..jump if No FCB buffer avail
  296.     LD    A,(HL)        ; Examine the first buffer byte
  297.     OR    A        ; Anything installed?
  298.     JR    Z,LODFCP    ; ..jump to load an FCP if not
  299.     ...            ; Else use existing one
  300.  
  301. :Filenames     GETFN1  GETFN2  GETFNX  PUTFNX 
  302.  
  303. GETFN1 - Return Address of Shell Variable File Name
  304. GETFN2 - Return Address of 1st Filename of System File Names
  305.  
  306.   ENTER: None
  307.   EXIT : HL = Address of the respective 11-char Filename entry
  308.   USES : HL
  309.  
  310.  Usage:  These routines return the address in HL of the shell
  311.   variable filename (GETFN1) and the first filename of the four
  312.   System File Names (GETFN2) in the ZCPR3 Environment
  313.   Descriptor.  Each filename entry is 11 bytes long, matching
  314.   the filename and filetype fields of the CP/M FCB.
  315.  
  316.   These names are used to pass names of special files to
  317.   programs for later use.  Their exact definition is not
  318.   presented and left to you.  One application of these is
  319.   to allow GETFN1 to return the name of the master HLP file
  320.   (HELP.HLP) to be used as an index into the Help System.
  321.  
  322. GETFNX - Return Address of nth Filename of System File Names
  323.  
  324.   ENTER:  A = File Name Number (1..4) in ENV File Name Buffer
  325.   EXIT : HL = Addr of first byte of indicated file (11 chars)
  326.           A <> 0, Zero Flag Clear (NZ) if Ok
  327.               A = 0, Zero Flag Set (Z) if Input Not in 1..4
  328.   USES : AF,HL
  329.  
  330.  Usage:  GETFNX returns the address of the nth file name in the
  331.   ZCPR3 Environment Descriptor.  There are four system files,
  332.   numbered 1 to 4, and they are structured like the FN.FT
  333.   fields of an FCB (11 bytes each).
  334.  
  335.   On input, A=1..4 to indicate the file name.  On output, HL
  336.   points to the first byte.  A validity check is done on the
  337.   value of A which MUST be 1..4.
  338.  
  339. PUTFNX - Set nth (1..4) File Name in Environment Descriptor
  340.  
  341.   ENTER:  A = File Name Number (1..4)
  342.          HL = Address of FCB+1 of New File Name value
  343.   EXIT :  A <> 0, Zero Flag Clear (NZ) if Ok
  344.               A = 0, Zero Flag Set (Z) if A not in 1..4
  345.   USES : AF
  346.  
  347.  Usage:  PUTFNX sets the nth (1..4) file name in the ZCPR3
  348.   Environment Descriptor to the FCB-entry pointed to by HL
  349.   (FCB+1, or the FN field, is pointed to by HL).  A is used
  350.   to identify the file name.
  351.  
  352. :Initialize    WHRENV  Z3INIT 
  353.  
  354. WHRENV - Return installed ZCPR3 Environment Descriptor Addr
  355.  
  356.   ENTER: HL = Candidate address of Environment Descriptor
  357.   EXIT : HL = Points to start addr of ENV (0 if Not Found)
  358.           A <> 0, Zero Flag Clear (NZ) if ENV Validated
  359.               A = 0, Zero Flag Set (Z) if Not Found
  360.   USES : AF,BC,DE,HL
  361.  
  362.  Usage:  This routine provides a means of locating a ZCPR3
  363.   Environment Descriptor without the assistance of ZCPR 3.3 or
  364.   later Command Processors.  Calling WHRENV with a candidate
  365.   address of the DOS Entry address loaded from locations 6 and
  366.   7 will cause a search for an Environment from that address up
  367.   through FEFFH.  Calling it with a parameter of 0 precludes a
  368.   search to signify that the auto-search is to be disabled.
  369.  
  370. Example:
  371.     EXT    WHRENV,Z3INIT    ; Declare routines
  372.     ...            ; ..any header info here
  373.     LD    HL,(6)        ; Load candidate location
  374.     CALL    WHRENV        ; ..and test it
  375.     LD    (Z3EADR),HL    ; Save any returned value
  376.     JR    Z,NOENV        ; ..jump if No ENV validated
  377.     CALL    Z3INIT        ; Else set Globals (or Z3VINIT)
  378.  
  379. Z3INIT - Set Global Bufr to arbitrary address for ZCPR3 ENV
  380.  
  381.   ENTER: HL = Address of ZCPR3 Environment Descriptor
  382.   EXIT : None
  383.   USES : None
  384.  
  385.  Usage:  This routine is used to set a Global Variable to the
  386.   ZCPR3 pointer value installed in the program header.  This
  387.   Global variable is used by other Z3LIB routines.
  388.  
  389. Example:
  390.     EXT    Z3INIT        ; Declare the routine
  391.     ...            ; ..Header code
  392.     LD    HL,Z3ENV    ; Load the Env Desc address
  393.     CALL    Z3INIT        ; ..and install!
  394.     ...            ; Carry on!
  395.  
  396. :ZSYSCHK - Validate ZCPR3 Environment Descriptor Address       (*)
  397.  
  398.   ENTER: HL = Points to candidate Z3 Environment
  399.   EXIT :  A = 0, Zero Set (Z) if valid Environment
  400.           A <> 0, Zero Clear (NZ) if environment NOT valid
  401.   USES : AF
  402.  
  403.  Usage: This routine checks various parameters in an Environment
  404.   Descriptor predicated on the specified address to see if it is
  405.   valid.  It will print a message if the Environment is invalid.
  406.   NOTE: For best results on ZCPR 3.3 or later, pass the value
  407.         in HL when program started.  This will NOT work on ZCPR
  408.         3.0, but will detect BG ii and versions since ZCPR 3.3.
  409.  
  410. Example:
  411.     EXT    ZSYSCHK        ; Declare the routine
  412.     ...
  413.     LD    HL,(ENVADR)    ; Load candidate environment
  414.     CALL    ZSYSCHK        ; Is it valid? (message if not)
  415.     RET    NZ        ; ..quit if invalid
  416.     ...            ; Else continue with valid ENV
  417.  
  418. Z33CHK - Check for presence of ZCPR 3.3 or later              (*)
  419.  
  420.   ENTER: None
  421.   EXIT : A = 0, Zero Set (Z) if CCP is ZCPR 3.3 or later
  422.          A <> 0, Zero Clear (NZ) if not ZCPR >= 3.3
  423.   USES : AF
  424.  
  425.  Usage: This routine should be used in the initial setup portion
  426.   of a program if many of the new Z3LIB routines are to be used.
  427.   Routines such as Z33FNAME rely on specific entry points in the
  428.   Command Processor which only exist in ZCPR 3.3 or later.  If
  429.   such calls are made under other Command Processors, or if the
  430.   CP is overwritten, your program will be unable to function.
  431.  
  432. Example:
  433.     EXT    Z33CHK        ; Declare the routine
  434.     ...
  435.     CALL    Z33CHK        ; Is CP ZCPR 3.3 or later?
  436.     JR    NZ,NOTZ3    ; ..jump if Not
  437.     ...            ; Else we can use it
  438.  
  439. GETBDOS - Return Basic Disk Operating System Start Address    (*)
  440.  
  441.   ENTER: None
  442.   EXIT : HL = Calculated or Loaded BDOS starting address
  443.   USES : HL
  444.  
  445.  Usage:  This routine will return the starting address of the
  446.   Basic Disk Operating System (BDOS) from an Extended ENV if
  447.   present, else it will calculate the starting address from the
  448.   BIOS Warm Boot vector assuming a 3.5k BDOS size.  You should
  449.   NOT use this address as the top of available memory, but only
  450.   to locate the DOS.  Use the address at locations 6 & 7 or
  451.   GZMTOP to find the highest usable memory location depending
  452.   on whether or not the CCP is to be retained.
  453.  
  454. GETCCP - Return Command Processor Starting Address            (*)
  455.  
  456.   ENTER: None
  457.   EXIT : HL = Calculated or Loaded CCP starting address
  458.   USES : HL
  459.  
  460.  Usage:  This routine will return the starting address of the
  461.   Command Processor for use in calculating addresses of entry
  462.   points, and in locating ZCPR 3 configuration bytes.  This
  463.   routine first attempts to locate the CCP address from an
  464.   Extended ENV if present, otherwise it will calculate the
  465.   starting address from the BIOS Warm Boot vector assuming a
  466.   3.5k BDOS and a 2k CCP.
  467.  
  468. GETECP - Return Address of Extended Command Processor Name    (*)
  469.  
  470.   ENTER: None
  471.   EXIT : HL = Address of ECP Name
  472.   USES : HL
  473.   REQUIREMENTS: The ZCPR 3.3 or later Command Processor
  474.  
  475.  Usage:  This routine is used to locate the name of the ZCPR
  476.   Version 3.3 or later Extended Command Processor.
  477.   NOTE: The Command Processor must NOT have been overwritten.
  478.