home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / zsys / znode-12 / s / z3help13.lbr / Z3LIB2.HZP / Z3LIB2.HLP
Encoding:
Text File  |  1993-06-12  |  21.0 KB  |  568 lines

  1.  Introducton to IOP Concepts
  2.  IOP            - GETION,  GETIOP,  GETIOS, IOMATCH, PUTIOD
  3.  IOP Recording  - IORCOFF, IORCON,  IORLOFF, IORLON
  4.  DU/Max DU      - GETDUOK, GETMDISK, GETMUSER, PUTs, HIGHUSER
  5.  DU from FCB    - GCMDDU
  6.  Messages       - GETMSG,  GETSHM,  PUTSHM
  7.  Named Dir      - ADDNDR,  DIRNDR,  DUNDR,  GETNDR,  SUBNDR
  8.  Path           - GETPATH
  9.  Processor Spd  - GETSPEED, PUTSPEED
  10.  Quiet Flag     - GETQUIET, PUTQUIET
  11.  RCP Address    - GETRCP
  12.  Shell Stack    - GETSH1,  GETSH2
  13.  Wheel Byte     - GETWHL,  PUTWHL
  14. :             Introduction to IOP Concepts 
  15.  
  16. This set of routines provide access to the system I/O Package
  17. (IOP).  The devices in an IOP are identified by a logical ID
  18. (referring to the generic CON,  RDR, PUN, and LST devices) and
  19. a physical ID (referring to the specific device under the
  20. generic).  By convention, routines in this collection always
  21. pass the logical ID in the B register and the physical ID in
  22. the C register.  The following table shows the assignments:
  23.  
  24.           Logical ID
  25.            (B Reg)       Device
  26.           ----------     ------
  27.               0           CON:
  28.               1           RDR:
  29.               2           PUN:
  30.               3           LST:
  31.  
  32.  
  33. The IOP status table, contained in every IOP, returns info on
  34. the physical IDs.  It tells how many physical devices (PID) are
  35. available for each logical ID, and the current assignment (0 to
  36. PID-1).  This table is structured as:
  37.  
  38.        Offset              Number of  Current
  39.        Bytes     Device     Devices  Assignment
  40.        ------    ------    --------- ----------
  41.         0-1       CON:      Byte 0     Byte 1
  42.         2-3       RDR:      Byte 2     Byte 3
  43.         4-5       PUN:      Byte 4     Byte 5
  44.         6-7       LST:      Byte 6     Byte 7
  45.  
  46. For example, if byte 0 (number of physical consoles) is 5, then
  47. byte 1 (current physical console assignment) can only be in the
  48. range from 0 to 4.  GETIOS returns the address of this table.
  49.  
  50.  
  51. The routines in the IOP collection are:
  52.  
  53.     GETION    Return a string giving the name of the device
  54.               identified by a logical ID and a physical ID
  55.  
  56.     GETIOP    Return the address and size of the IOP
  57.  
  58.     GETIOS    Return a pointer to the IOP status table
  59.  
  60.     IOMATCH   Searches for a physical device name associated
  61.               with a particular logical ID
  62.  
  63.     PUTIOD    Select and IOP device by logical and physical ID
  64.  
  65. :IOP Address     GETION - GETIOP - GETIOS - IOMATCH - PUTIOD 
  66.  
  67. GETION - Return Address of Name for specified device
  68.  
  69.   ENTER:  B = Logical Device ID (0..3)
  70.           C = Physical ID
  71.   EXIT : HL = Address of String Naming the indicated device
  72.           A <> 0, Zero Flag Clear (NZ) if No Error
  73.               A = 0, Zero Flag Set (Z) if No IOP or Range Error
  74.   USES : AF,HL
  75.  
  76.  Usage:  GETION (Get IO Name) returns a pointer to the string
  77.   describing the device whose logical ID (0 to 3, where CON=0,
  78.   RDR=1, PUN=2, and LST=3) is in B and physical ID is in C.
  79.  
  80. GETIOP - Return address and size of IOP Buffer Definition
  81.  
  82.   ENTER: None
  83.   EXIT : HL = Address of IOP Buffer
  84.           A = # of 128-byte blocks in Buffer, Zero Clear (NZ)
  85.               A = 0, Zero Flag Set (Z) if No Buffer
  86.   USES : AF,HL
  87.  
  88.  Usage:  This routine simply returns details on the IOP Buffer
  89.   Address and size from the Environment Descriptor, but it does
  90.   not say if an IOP is resident.  To find this out, examine the
  91.   first byte of the IOP Buffer.  If zero, then no IOP is exists.
  92.  
  93.  
  94. Example:
  95.     EXT    GETIOP        ; Declare the routine
  96.     ...            ; ..preceeding code
  97.     CALL    GETIOP        ; Get IOP Buff data from ENV
  98.     JR    Z,NOIOP        ; ..jump if No IOP Buffer
  99.     LD    A,(HL)        ; Else get first byte
  100.     OR    A        ; Is anything installed?
  101.     JR    Z,LODIOP    ; ..jump to load if not there
  102.     ...            ; Else continue, IOP present
  103.  
  104. GETIOS - Return pointer to I/O Package Status Table
  105.  
  106.   ENTER: None
  107.   EXIT : HL = Address of IOP Status Table
  108.           A <> 0, Zero Flag Clear (NZ) if Ok
  109.               A = 0 Zero Set (Z) if No IOP Loaded
  110.   USES : AF,HL
  111.  
  112.  Usage:  This routine returns a pointer to the I/O Package
  113.   status table in HL.  The table is structured as:
  114.  
  115.           Offset              Number of  Current
  116.           Bytes     Device     Devices  Assignment
  117.           ------    ------    --------- ----------
  118.            0-1       CON:      Byte 0     Byte 1
  119.            2-3       RDR:      Byte 2     Byte 3
  120.            4-5       PUN:      Byte 4     Byte 5
  121.            6-7       LST:      Byte 6     Byte 7
  122.  
  123. IOMATCH - Search for Physical Device Name for Logical ID
  124.  
  125.   ENTER: HL = Address of Device Name String
  126.           B = Logical ID (Con=0, Rdr=1, Pun=2, Lst=3)
  127.   EXIT :  C = Physical ID
  128.           A <> 0, Zero Flag Clear (NZ) if Ok
  129.               A = 0, Zero Flag Clear if Not Found or No IOP
  130.   USES : AF,C
  131.  
  132.  Usage:  This routine searches for the name of a physical
  133.   device associated with a particular logical ID.  This name
  134.   is a Null-terminated string or any character less than or
  135.   equal to a space.  The name is capitalized internally.  If
  136.   found, C returns the physical ID of the device.
  137.  
  138. Example:
  139.     EXT    IOMATCH        ; Declare the routine
  140.     ...            ; ..preceeding code
  141.     LD    HL,MYCON    ; Point to Name String
  142.     LD    B,0        ; Select CON device
  143.     CALL    IOMATCH        ; Search for the device
  144.     JR    Z,ERROR        ; ..jump error if Bad
  145.     ...            ; Else C=Physical ID of MYCON
  146.  MYCON:    DEFB    'CRT1',0    ; Name of desired CON device
  147.  
  148. PUTIOD - Select the IOP device from specified Logical ID
  149.  
  150.   ENTER:  B = Logical ID (Con=0, Rdr=1, Pun=2, Lst=3)
  151.           C = Physical ID
  152.   EXIT :  A <> 0, Zero Flag Clear (NZ) if Ok
  153.               A = 0, Zero Flag Set (Z) if No IOP or Range Error
  154.                      (physical or logical ID number invalid)
  155.   USES : AF
  156.  
  157.  Usage:  This routine is used to select an IOP device from a
  158.   set of Logical and Physical IDs.  Logical ID numbers are in 
  159.   the range of 0 to 3, where CON = 0, RDR = 1, PUN = 2, and 
  160.   LST = 3.  See the introductory IOP section for more details.
  161.  
  162. :IOP Recording      IORCOFF - IORCON - IORLOFF - IORLON 
  163.  
  164. IORCON  - Turn Console I/O Recording On in Current IOP
  165. IORCOFF - Turn Console I/O Recording Off in Current IOP
  166. IORLON  - Turn List I/O Recording On in Current IOP
  167. IORLOFF - Turn List I/O Recording Off in Current IOP
  168.  
  169.   ENTER: HL = Addr of ZCPR3 FCB for recorded information
  170.   EXIT :  A <> 0, Zero Flag Clear (NZ) if Ok
  171.               A = 0, Zero Flag Set (Z) if No IOP or
  172.                      recording not supported in IOP
  173.   USES : AF
  174.  
  175.  Usage:  These routines enable or disable functions specified
  176.   above.  The FCB passed to these routines is a standard ZCPR3
  177.   FCB, where offset 0 contains the disk and offset 13 contains
  178.   the user data.  A particular IOP may or may not pay attention
  179.   to this FCB pointer, depending on implementation.
  180.  
  181. :DU   GETDUOK, GETMDISK, GETMUSER, PUTDUOK, PUTMDISK, PUTMUSER 
  182.  
  183. GETDUOK - Return the value of the DUOK flag
  184.  
  185.   ENTER: None
  186.   EXIT : A <> 0, Zero Flag Clear (NZ) if DU: use Ok
  187.              A = 0, Zero Flag Set (Z) if DU: use NOT Allowed
  188.   USES : AF
  189.  
  190.  Usage:  Return the DUOK flag value which tells the program if
  191.   it is permissible to specify the DU: prefix to change Disk
  192.   and User area.  ZCPR3 utilities can always specify a DIR:
  193.   prefix (named directory) in identifying the Disk and User
  194.   area to examine, but in some "secure" applications it is not
  195.   desirable to allow the user to employ the DU: prefix to
  196.   access ANY Disk/User area.  This flag (DUOK) tells the
  197.   utility if it is OK for the user to employ the DU: prefix.
  198.  
  199. GETMDISK - Return the Maximum allowable Disk Number
  200.  
  201.   ENTER: None
  202.   EXIT : A = Maximum Disk Number (A = 1,..P = 16)
  203.   USES : AF
  204.  
  205.  Usage:  This routine is used to obtain information from the
  206.   ZCPR3 Environment Descriptor which may be used to restrict
  207.   access to certain parts of the system.  For instance, a
  208.   "normal user" may be denied access to disks C and D and to
  209.   any user area beyond 10.  A "priveleged user" who has the
  210.   power to change the ZCPR3 Environment Descriptor can gain
  211.   access to any desired disk or user area.
  212.  
  213. GETMUSER - Return the Maximum allowable User Area Number
  214.  
  215.   ENTER: None
  216.   EXIT : A = Maximum allowable User Ares (0..31)
  217.   USES : AF
  218.  
  219.  Usage:  This routine provides information from the ZCPR3
  220.   Environment Descriptor which may be used to restrict access
  221.   to certain parts of the system.  For instance, a "normal
  222.   user" may be denied access to Disks C and D and to any User
  223.   area beyond 10.  A "priveleged user" who has the power to
  224.   change the ZCPR3 Environment Descriptor can gain access to
  225.   any desired Disk or User Area.
  226.  
  227. PUTDUOK - Set the DU OK byte to specified value
  228.  
  229.   ENTER: A = DUOK Value (0 = DU Not Ok, 0FFH = DU is Ok)
  230.   EXIT : None
  231.   USES : None
  232.  
  233.  Usage:  This routine sets the DU OK byte from A.  If A = 0,
  234.   DUOK is False and DU: form of file specification is NOT Ok.
  235.   If A<>0 (0FFH is preferred), DUOK is True and file specifi-
  236.   cation using the DU: form is permitted.
  237.  
  238. PUTMDISK - Set the Maximum Allowable Disk in the ENV
  239.  
  240.   ENTER: A = Maximum Allowable Disk Number (A = 1,..P = 16)
  241.   EXIT : None
  242.   USES : None
  243.  
  244.  Usage:  This routine sets the maximum allowable disk in the
  245.   Environment Descriptor.  Valid Disk numbers range from 1 for
  246.   Drive A, to 16 for Drive P.
  247.  
  248. PUTMUSER - Set the Maximum Allowable User Number (0..31)
  249.  
  250.   ENTER: A = Maximum Allowable User Number (0..31)
  251.   EXIT : None
  252.   USES : None
  253.  
  254.  Usage:  This routine sets the Maximum allowable User Area in
  255.   the Environment Descriptor.  Valid User numbers range from 0
  256.   through 31.
  257.  
  258. HIGHUSER - Return flag showing Users > 15 Support             (*)
  259.  
  260.   ENTER: None
  261.   EXIT : F - Zero Clear (NZ) if Users > 15 supported
  262.                  Zero Set (Z) if No ZCPR 3.3 or NO users > 15
  263.          A - Undefined
  264.   USES : AF
  265.   REQUIREMENTS: Command Processor must be ZCPR 3.3 or later
  266.  
  267.  Usage:  This routine returns a flag indicating whether User
  268.   Numbers greater than 15 are supported.  This definition is
  269.   obtained from the ZCPR 3.3 or later Command Processor.
  270.   NOTE: The Command Processor must NOT have been overwritten.
  271.  
  272. :GCMDDU - Return Drive and User Number in External FCB         (*)
  273.  
  274.   ENTER: None
  275.   EXIT : BC = DU.  B=Drive (A=0,..P=15), C=User (0..31)
  276.   USES : BC
  277.   REQUIREMENTS: FCB MUST have been parsed by ZCPR 3.3 or later
  278.                 which places User # in FCB+13, Drive in FCB+14.
  279.  
  280.  Usage:  This routine returns the Drive and User for the File
  281.   specified in the ZCPR 3.3 and later External FCB.  It is
  282.   often used to determine where the file was actually found
  283.   (Shell, Path, etc) in order to log into, or save that
  284.   location.
  285.  
  286. :Messages        GETMSG - GETSHM - PUTSHM 
  287.  
  288. GETMSG - Return the address of the ZCPR3 Message Buffer
  289.  
  290.   ENTER: None
  291.   EXIT : HL = Address of the ZCPR3 Message Buffer
  292.           A <> 0, Zero Flag Clear (NZ) if Valid
  293.               A = 0, Zero Flag Set (Z) if No Buffer
  294.   USES : AF,HL
  295.  
  296.  Usage:  This routine is used in conjunction with other message
  297.   routines for synchronization between programs, and status
  298.   info.  See Z3LIB information sections on ZCPR3 Messages.
  299.  
  300. GETSHM - Get value of Shell Message for Specified Msg Number
  301.  
  302.   ENTER:  B = Message Number (0, 1, 2)
  303.   EXIT :  A = Message Value (Zero Flag Set Accordingly)
  304.   USES : AF
  305.  
  306.  Usage:  This routine returns the value of the shell message
  307.   whose number is specified.  There are three shell messages, 
  308.   so 0 <= B <= 2 (you must be sure a valid value is presented).
  309.  
  310. PUTSHM - Set the value of specified Shell Message Number
  311.  
  312.   ENTER:  A = Message Value
  313.           B = Message Number (0,1,2)
  314.   EXIT : None
  315.   USES : None
  316.  
  317.  Usage:  This routine is used to place a message into one of
  318.   the three message positions in the Shell area.
  319.  
  320. :Named Dir      ADDNDR - DIRNDR - DUNDR - GETNDR - SUBNDR 
  321.  
  322. ADDNDR - Add Directory Name to the Named Directory Buffer
  323.  
  324.   ENTER:  A = Password Flag (0-Set to Spaces, <>0-Set from DE)
  325.          DE = Addr of Password buffer if A <> 0 (8-chars)
  326.          HL = Addr of FCB containing DU and Disk Name
  327.   EXIT :  A <> 0, Zero Flag Clear (NZ) if Name add successful
  328.               A = 0, Zero Set (Z) if No Buffer, or Buff Full
  329.   USES : AF
  330.  
  331.  Usage:  This routine adds a Named Directory to the NDR Buffer
  332.   defined in the Environment Descriptor.  The Name, along with
  333.   Disk and User locations are passed in ZCPR3 FCB form where
  334.   the Disk is at offset 0 (A=1,..P=16), and the User number is
  335.   at offset 13 (0..31).  The Directory Name is in the FN field
  336.   of the FCB.  An optional password of up to eight characters
  337.   (space-filled on right) may be passed as a string in the DE
  338.   register pair.  On input, if A=0 then the DE pointer is
  339.   ignored and the password is set empty (all spaces).
  340.  
  341.   ADDNDR capitalizes the disk name and password, and sorts the
  342.   Named Directory Buffer by DU after addition.  No check is
  343.   made for duplicate names or duplicate DU references.
  344.  
  345. DIRNDR - Find Named Directory Buffer entry for specified Name
  346.  
  347.   ENTER: HL = Addr of 8-char buffer with Name to Find
  348.   EXIT : HL = Addr of NDR Entry, if found
  349.          BC = DU (Disk in B - A=1,..P=16) if found
  350.           A <> 0, Zero Flag Clear (NZ) if Name Fount
  351.               A = 0, Zero Flag Set (Z) if No NDR or Not Found
  352.   USES : AF,BC,HL
  353.  
  354.  Usage: This routine is used to recover the Drive and User data
  355.   for a specified Name from the Named Directory Buffer.  The
  356.   entry name is automatically capitalized.  If found, the Drive
  357.   is returned in register B (A=1,..P=16), and the User in reg C
  358.   (0..31).  The HL register pair will point to the NDR entry
  359.   which is structured around 18-byte entries as:
  360.  
  361.     DEFB    1        ; Disk (A=1,..P=16)
  362.     DEFB    15        ; User (0 to 31)
  363.     DEFB    'ROOT    '    ; Name, 8-chars, space filled
  364.     DEFB    'MYPASS  '    ; Password, 8-char, space fill
  365.  
  366. DUNDR - Find Named Directory Entry from Drive/User Spec
  367.  
  368.   ENTER: BC = Drive/User in DU: to locate (Disk A=1,..P=16)
  369.   EXIT : HL = Address of NDR Entry if Found
  370.           A <> 0, Zero Flag Clear (NZ)if Found
  371.               A = 0 Zero Flag Set if No NDR Buff or Not Found
  372.   USES : AF,HL
  373.  
  374.  Usage:  This routine is used to locate a Named Directory from
  375.   Drive/User specification in DU form where the Drive is in
  376.   register B (drive A=1,..P=16), and User is in reg C (0..31).
  377.   If found, the address of the 18-byte Named Directory Buffer
  378.   entry is returned.  Entries are structured as:
  379.  
  380.     DEFB    2        ; Disk (A=1,..P=16)
  381.     DEFB    0        ; User (0..31)
  382.     DEFB    'HELP    '    ; Name, 8-char, space filled
  383.     DEFB    '        '    ; Password, 8-char, space fill
  384.  
  385. GETNDR - Return Named Directory Buffer parms from ENV
  386.  
  387.   ENTER: None
  388.   EXIT : HL = Address of NDR Buffer
  389.           A = Buffer Size in 128-byte blocks, Zero Clear (NZ)
  390.               A = 0, Zero Set (Z)if NO NDR Buffer
  391.   USES : AF,HL
  392.  
  393.  Usage:  This routine returns the address and size of the Named
  394.   Directory Buffer as defined in the Environment Descriptor.
  395.   It does not indicate the status of any entries within it.  To
  396.   determine this, examine the first byte in the buffer.  If
  397.   Zero, then No NDR is present in the Buffer.
  398.  
  399. Example:
  400.     EXT    GETNDR        ; Declare the routine
  401.     ...            ; ..preceeding code
  402.     CALL    GETNDR        ; Get data from ENV
  403.     JR    Z,NONDRBF    ; ..jump if no NDR Bufr exists
  404.     LD    A,(HL)        ; Have an NDR. Is data there?
  405.     OR    A
  406.     JR    Z,LODNDR    ; ..jump if not and load some
  407. SUBNDR - Remove Specified Named Directory entry from NDR Buffer
  408.  
  409.   ENTER: HL = Address of 8-char Buffer containg Name
  410.   EXIT : A <> 0, Zero Flag Clear (NZ) if removal successful
  411.              A = 0, Zero Flag Set if No NDR or Name Not Found
  412.   USES : AF
  413.  
  414.  Usage:  This routine removes an entry specified by Name from
  415.   the Named Directory Buffer.  The name must be provided as a
  416.   string of up to eight characters, space-filled on right if
  417.   less than eight chars.  The name is capitalized before it
  418.   is checked against possible entries.  If located, the entry
  419.   is removed, and the remaining buffer is repacked.
  420.  
  421. :GETPATH - Return Addr of the Command Search Path from the ENV
  422.  
  423.   ENTER: None
  424.   EXIT : HL = Address of ZCPR3 Search Path from Env Descriptor
  425.           A = Number of Elements, Zero Flag Clear (NZ) if Ok
  426.               A = 0, Zero Set (Z) if No Path defined in ENV
  427.   USES : AF,HL
  428.  
  429.  Usage:  Return the address of the ZCPR3 Command-Search Path as
  430.   defined in the Environment Descriptor.  If there is a ZCPR3
  431.   Path, it will be structured as a series of two-byte path
  432.   elements structured as:
  433.  
  434.     DEFB    1    ; Disk #1 (Current='$', A=1,..P=16)
  435.     DEFB    15    ; User #1 (Current='$', 0..31)
  436.     DEFB    '$'    ; Disk #2
  437.     DEFB    0    ; User #2
  438.     DEFB    0    ; End-of-List is Drive = 0
  439.  
  440. :Processor Speed       GETSPEED - PUTSPEED 
  441.  
  442. GETSPEED - Return Processor Speed in MHz from ENV
  443.  
  444.   ENTER: None
  445.   EXIT : A = Processor speed in MegaHertz
  446.   USES : AF
  447.  
  448.  Usage:  This routine is most often used in Software timing
  449.   loops to permit a greater amount of portability in software.
  450.   The returned value in to the nearest MegaHertz, so 1 = 1 MHz,
  451.   4 = 4 MHz, etc.
  452.  
  453. PUTSPEED - Set Processor Speed in ENV to Specified value
  454.  
  455.   ENTER: A = Processor Speed in MHz
  456.   EXIT : None
  457.   USES : None
  458.  
  459.  Usage:  This routine sets the Processor Speed as defined in
  460.   the Environment Descriptor to the specified value in Mega-
  461.   Hertz where 1 = 1 MHz, 4 = 4 MHz.
  462.  
  463. :Quiet Flag         GETQUIET - PUTQUIET 
  464.  
  465. GETQUIET - Return value of QUIET Flag
  466.  
  467.   ENTER: None
  468.   EXIT : A = Value of Quiet Flag from ENV.  Zero Flag Set
  469.              accordingly (0=Z=Not Quiet, 0FFH=NZ=Quiet)
  470.   USES : AF
  471.  
  472.  Usage:  This routine is often used in programs to suppress
  473.   unneeded/unwanted status messages.  By sensing the Quiet
  474.   flag and using conditional print statements, more pleasing
  475.   operation can result.  The Quiet Flag value in stored in
  476.   the Environment Descriptor.
  477.  
  478. PUTQUIET - Set the value of the Quiet Flag
  479.  
  480.   ENTER: A = Quiet Glag value (0=Not Quiet, 0FFH=Quiet)
  481.   EXIT : None
  482.   USES : None
  483.  
  484.  Usage:  This routine sets the Quiet Flag to the specified
  485.   value.  While 0FFH is preferred to indicate Quiet operation,
  486.   any Non-Zero value will suffice.
  487.  
  488. :GETRCP - Return Address and Size of RCP defined in ENV
  489.  
  490.   ENTER: None
  491.   EXIT : HL = Address of RCP Buffer
  492.           A = Size of Bufr in 12-byte blocks, Zero Clear (NZ)
  493.               A = 0, Zero Flag Set (Z) if No RCP Defined
  494.   USES : AF,HL
  495.  
  496.  Usage:  This routine simply returns the Resident Command
  497.   Package buffer definitions contained in the Environment
  498.   Descriptor.  Your program must check for a valid package
  499.   if necessary by examining the first byte of the buffer.
  500.  
  501. Example:
  502.     EXT    GETFCP        ; Declare the routine
  503.     ...            ; ..preceeding code
  504.     CALL    GETFCP        ; Get ENV definitions
  505.     JR    Z,NOFCPBUF    ; ..jump if No RCP exists
  506.     LD    A,(HL)        ; Check first byte of bufr
  507.     OR    A        ; Anything there?
  508.     JR    Z,LODRCP    ; ..jump if not to load
  509.     ...            ; Else have an RCP in place
  510. :Shell Stack         GETSH1 - GETSH2 
  511.  
  512. GETSH1 - Return Defined Shell Stack Parameters from ENV
  513.  
  514.   ENTER: None
  515.   EXIT : HL = Address of Shell Stack
  516.           B = Number of bytes in each Shell Stack Entry
  517.           A = Number of Possible Entries, Zero Clear (NZ)
  518.               A = 0, Zero Flag Set (Z) if No Shell Stack
  519.   USES : AF,B,HL
  520.  
  521.  Usage:  This routine simply returns data on the overall Shell
  522.   Stack system from the Environment Descriptor.  See SHPUSH
  523.   and SHPOP routines for details on other facilities for
  524.   dealing with Shell Stacks provided by Z3LIB.  
  525.  
  526. GETSH2 - Return Defined Shell Stack Parameters from ENV
  527.  
  528.   ENTER: None
  529.   EXIT : HL = Address of Shell Stack
  530.          DE = Number of bytes allowed in each Stack Entry
  531.          B,A = Number of allowed Entries, Zero Clear (NZ)
  532.               A = 0, Zero Set (Z) if No Shell Stack defined
  533.   USES : AF,B,DE,HL
  534.  
  535.  Usage:  This is an alternative routine to recover Shell Stack
  536.   parameters from the Environment Descriptor.  For some uses,
  537.   this form is more easily manipulated than GETSH1 covered
  538.   above.  See SHPUSH and SHPOP routines for details on other
  539.   facilities for dealing with Shell Stacks provided by Z3LIB.
  540.  
  541. :Wheel Byte              GETWHL - PUTWHL 
  542.  
  543. GETWHL - Return the Wheel Byte value from the ENV
  544.  
  545.   ENTER: None
  546.   EXIT : A = Wheel Byte, Flags set accordingly
  547.              (0, Z, Not Wheel; 0FFH, NZ, IS Wheel)
  548.   USES : AF
  549.  
  550.  Usage:  This routine is used to restrict users from accessing
  551.   parts of programs, or affecting program flow.  For example,
  552.   you may not wish remote users to change the Path definition.
  553.   By assigning "No Wheel" status to remote users, the PATH
  554.   utility will refuse to allow changes since it senses the
  555.   priveleges with this routine.
  556.     While a 0FFH value is listed for granting Wheel priveleges,
  557.   any non-zero value currently suffices.
  558.  
  559. PUTWHL - Set the value of the Wheel Byte in the ENV
  560.  
  561.   ENTER: A = Wheel Byte Value to set (0=No Wheel, 0FFH=Wheel)
  562.   EXIT : None
  563.   USES : None
  564.  
  565.  Usage:  This routine is used to set the Wheel Byte to ON
  566.   (0FFH) or OFF (0) thereby granting or denying Wheel
  567.   priveleges to executing programs.
  568.