home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / jsage / znode3 / z3lib / libhl45a.lbr / DSLIB.LBR / DSLIB.HZP / DSLIB.HLP
Encoding:
Text File  |  1993-06-07  |  15.3 KB  |  389 lines

  1.  Introduction                        25 Aug 92
  2.  System Identity      - TIMINI, GETDOS, FINDCK, CKTDF
  3.  Clock Reading        - RCLOCK, RDCLK
  4.  File Stamp Routines  - GSTAMP, PSTAMP, GETTD, SETTD
  5.  Directory Selection  - DDIRQS, DDIRQ, DDIRNPAK, DDIRPAK, DDIRSEL
  6.  Time Conversions     - U2PTIM, P2UTIM, U2MTIM, M2UTIM
  7.  Utility Routines     - BCD2BIN, BIN2BCD, DVERS
  8.  DateStamper(tm) T&D  - OPENTD, CLOSTD, FSTNXT, RWTD
  9. :           Introduction to DSLIB 
  10.  
  11. This library contains a collection of routines to facilitate
  12. addition of File Time and Date Stamping and Real Time Clock
  13. features.  A common Date and Time format is used to exchange
  14. date and time data with user programs.  It uses BCD digits as:
  15.  
  16.     Byte Offset  00  01  02  03  04  05
  17.          --  --  --  --  --  --
  18.          YY  MM  DD  hh  mm  ss
  19.  
  20.    Where YY = Year (78-99 is 1978-1999, 00-77 is 2000-2077),
  21. MM = Month (1..12), DD = Day (1..28,30,31), hh = Hour (0..23),
  22. mm = Minute (00..59), ss = Second (00..59).
  23.  
  24. Generalized routines are included which uniformly return Clock
  25. time, as well as File Stamp data from ZSDOS/ZDDOS, CP/M 2.2 or
  26. ZRDOS 1.x with Plu*Perfect Systems' DateStamper(tm), and
  27. Digital Research's CP/M Plus (also known as CP/M 3).  The
  28. common data structures are automatically converted to the
  29. appropriate internal formats for the running system.
  30.    As with the Clock structure, File Stamp data is handled in
  31. a consistent DateStamper(tm)/ZSDOS format of packed BCD digits
  32. in a 15-byte field as:
  33.  
  34.         |-- Create --|  |- L.Access -|  |-- Modify --|
  35.  Byte Offset    00 01 02 03 04  05 06 07 08 09  10 11 12 13 14
  36.         -- -- -- -- --  -- -- -- -- --  -- -- -- -- --
  37.         YY MM DD hh mm  YY MM DD hh mm  YY MM DD hh mm
  38.  
  39. Where YY = Year (78-99 is 1978-1999, 00-77 is 2000-2077), MM =
  40. Month (1..12), DD = Day (1..28,30,31), hh = Hour (0..23), mm =
  41. Minute (00..59).
  42.  
  43. In addition to the generalized interface routines, entry points
  44. exist for DateStamper(tm) specific routines.  Many of these
  45. specific routines are automatically called from the generalized
  46. routines when DateStamper is detected.
  47.  
  48. Conversion routines also exist to manage interfaces between
  49. Date/Time fields of DateStamper(tm), the MS-DOS compatible
  50. DosDisk(tm), and the CP/M Plus-compatible P2DOS format.
  51. :           System Identity 
  52.  
  53. TIMINI - See if there is a Clock we can read.
  54.  
  55.    TIMTYP - Byte variable for Type of Time/Date Stamping and
  56.         clock in use ("3"=CP/M Plus, "S"=Internal ZSDOS
  57.         or ZDDOS, "D"=DateStamper).
  58.  
  59.   ENTER: None
  60.   EXIT : A = Time method, Zero Flag Clear (NZ) if Clock found
  61.        A = 0, Zero Flag Set (Z) if no clock found
  62.   USES : AF
  63.  
  64.  Usage: This routine calls GETDOS setting DOSVER and DOSTYP,
  65.   then looks for a clock to read, implying a File Stamp method.
  66.   Types are: "S"=ZSDOS/ZDDOS Internal, "D"=DateStamper,
  67.   "3"=CP/M Plus (CP/M 3.x, also termed P2DOS type).  This byte
  68.   may be accessed when desired, and is used by GSTAMP and
  69.   PSTAMP to Get and Set File Stamps respectively.
  70.  
  71. GETDOS - Determine DOS type & Version, set global variables.
  72.  
  73.    DOSTYP - Byte variable for DOS type ("S"=ZSDOS, "D"=ZDDOS,
  74.         "1"=CP/M 1.x, "2"=CP/M 2.x, "3"=CP/M Plus (3.x),
  75.         "R"=ZRDOS, 0=Unknown)
  76.    DOSVER - Byte variable for DOS version # (vendor specific)
  77.  
  78.   ENTER: None
  79.   EXIT : A = DOS Type Character, Zero Clear (NZ) if identified
  80.        A = 0, Zero Flag Set (Z) if Not identified
  81.   USES : AF
  82.  
  83.  Usage: This routine is used to identify the running DOS type
  84.   and version.  It is called from TIMINI, but may be called
  85.   separately.  After it is called, DOSTYP and DOSVER globals
  86.   may be directly accessed.
  87.  
  88. FINDCK - Check for DateStamper(tm) clock and set read status
  89.  
  90.   ENTER: None
  91.   EXIT :  A <> 0, Zero Flag Clear (NZ) if Clock Found
  92.      HL = pointer to Clock starting address if Found
  93.         A = 0, Zero Flag Set (Z), HL = - if Not Found
  94.   USES : AF,BC,DE,HL
  95.  
  96.  Usage: Used with DateStamper(tm)-specific interfaces.  Call
  97.   this routine near the beginning of a program to determine
  98.   clock status.  This routine is not needed if the recommended
  99.   TIMINI/RCLOCK generalized routines are used.
  100.  
  101. CKTDF - Check for DateStamper(tm) Time&Date File on drive
  102.  
  103.   ENTER: None
  104.   EXIT : A <> 0, Zero Flag Reset (NZ) if T&D file located Ok
  105.        A = 0, Zero Flag Set (Z) if NO T&D file present
  106.   USES : AF,BC,DE,HL
  107.   REQUIREMENTS: User must log desired drive before calling
  108.  
  109.  Usage: This routine is used with DateStamper(tm)-specific File
  110.   Stamp routines only, or with routines where individual file
  111.   stamp access is too slow.  It should be called before any
  112.   attempt is made to access File Stamp information.  A common
  113.   use is to set flags for mode changing between Stamp and Non-
  114.   Stamp operations.
  115.  
  116. :RCLOCK - Read clock identified by TIMINI to specified addr
  117.  
  118.   ENTER: HL = Address of 6-byte area to receive time string
  119.   EXIT :  A = 0, Zero Flag Set (Z) if Ok, Time String filled
  120.         A <> 0, Zero Flag Clear (NZ) if Error
  121.   USES : HL,DE,BC,AF
  122.  
  123.  Usage: This routine forms a generalized Clock Read for ZSDOS,
  124.   DateStamper or CP/M Plus clocks identified by TIMINI.  It
  125.   reads clock data to the specified address in the standard
  126.   format.  Since CP/M Plus does not return a valid read flag,
  127.   the status is always assumed to be True, for a good read.
  128.   Note: You must insure that a valid clock is installed and
  129.   working before calling this routine.
  130.  
  131. Example:
  132.     EXT    TIMINI,RCLOCK    ; Always declare both routines
  133.     ...            ; preliminary code
  134.     CALL    TIMINI        ; Initialize and identify clock
  135.     ...            ; other program code
  136.     LD    HL,TIMSTR    ; Place the time here
  137.     CALL    RCLOCK        ; and read the clock
  138.     JR    NZ,BADCLK    ; Jump if error reading clock
  139.     ...            ; else proceed to use it
  140.  TIMSTR: DEFS    6        ; Date/Time: YY MM DD HH MM SS
  141.  
  142. RDCLK - Read DateStamper(tm) clock to specified buffer
  143.  
  144.   ENTER: HL = Pointer to 6-byte buffer location
  145.   EXIT : HL = Pointer to last byte of Date/Time string if Ok
  146.       A <> 0, Zero Flag Clear (NZ) if Ok
  147.         A = 0, Zero Set (Z), HL = 0 if Bad Clock Read
  148.   USES : AF,BC,DE,HL
  149.   REQUIREMENTS:  FINDCK must have been previously called.
  150.  
  151.  Usage: This routine is used to read a DateStamper(tm)-specific
  152.   clock.  Date and Time information is returned in the same
  153.   format as other routines in this library.
  154.  
  155. Example:
  156.     EXT    RDCLK,FINDCK    ; Declare the routine
  157.     ...            ; initial program code
  158.     CALL    FINDCK        ; Call this early in program
  159.     ...            ; intervening program code
  160.     LD    HL,TIMSTR    ; Set addr for 6-byte buffer
  161.     CALL    RDCLK        ; Read the clock.
  162.     JR    Z,NOGOOD    ; jump if bad read
  163. :           File Stamp Routines 
  164.  
  165. GSTAMP - Return File Date Stamp data for specified file
  166. PSTAMP - Set File Date Stamp data for specified file
  167.  
  168.   ENTER: DE = Pointer to FCB for file of interest
  169.      HL = Pointer to 15-byte buffer for/with Stamp data
  170.   EXIT :  A <> 0 Zero Flag Clear (NZ) if Operation Successful
  171.             A = 0, Zero Flag Set (Z) on Error
  172.   USES : AF,BC,HL
  173.   SIDE EFFECTS: Current DMA address is altered by this routine.
  174.   REQUIREMENTS: TIMINI must have been called to set global
  175.     variables.  Drive and User area for the specified file
  176.     must be set prior to calling either of these routines.
  177.  
  178.  Usage: These routines are recommended for File Stamp access in
  179.   CP/M-compatible systems.  They use the DOSTYP and TIMTYP
  180.   variables to determine stamp method in effect, and will read
  181.   and write File Stamps under ZSDOS and DateStamper with CP/M
  182.   2.2 or ZRDOS, and will read stamps from CP/M Plus (CP/M 3.x).
  183. Example:
  184.     EXT    GSTAMP,PSTAMP,TIMINI    ; Declare routines
  185.     ...            ; preceding code
  186.     CALL    TIMINI        ; Set the Time sybsystem early
  187.     ...            ; other program code
  188.     CALL    SETFCB        ; Set an FCB to a desired file
  189.     LD    DE,FCB        ; point to it
  190.     LD    HL,TBUFF    ; and to buffer for Stamps
  191.     CALL    GSTAMP        ; Get stamp for this file
  192.     JR    Z,NOSTAMP    ; go to error handler if bad
  193.     ...            ; Use the data
  194.     CALL    SETDAT        ; Set stamp data in buffer
  195.     LD    DE,FCB        ; point to FCB for file
  196.     LD    HL,TBUFF    ; and to buffer with Stamps
  197.     CALL    PSTAMP        ; Stamp file with TBUFF values
  198.     JR    Z,NOSTAMP    ; jump Error if bad return
  199.     ...            ; Else carry on.
  200.  
  201.  FCB:    DEFS    36        ; FCB for file of interest
  202.  TBUFF:    DEFS    15        ; Buffer for Stamp data
  203. GETTD - Get DateStamper(tm) File Stamp for specified file
  204.  
  205.   ENTER:  A - Contains T&D Sector Index (0..7) (from FSTNXT)
  206.      DE - Contains Random Record Number    (from FSTNXT)
  207.      HL = Pointer to 15-byte buffer for Date/Time info
  208.   EXIT :  A <> 0, Zero Flag Clear (NZ) if OK
  209.         A = 0, Zero Set (Z) if No File or Read Error
  210.   USES : AF,BC,DE,HL
  211.   REQUIREMENTS: User must log onto drive containg File & Stamp
  212.   SIDE EFFECTS: DMA is altered by this routine
  213.  
  214.  Usage: This is a DateStamper(tm)-specific routine returning
  215.   file stamp data for a file using FSTNXT call parameters.
  216.  
  217. Example:
  218.     EXT    GETTD        ; Declare the routine
  219.     ...            ; check DateStamper
  220.     ...            ; Log drive, Call FSTNXT
  221.     LD    HL,USRDAT    ; Put 15-byte Stamp data here
  222.     CALL    GETTD        ; Fill in destination string
  223.     JR    Z,NODATA    ; jump if bad/no stamp
  224.     ...            ; Else process the stamp
  225. SETTD - Set DateStamper File Stamp into for specified file.
  226.  
  227.   ENTER:  A - Contains T&D Sector Index (0..7) (from FSTNXT)
  228.      DE - Contains Random Record Number    (from FSTNXT)
  229.      HL = Pointer to Stamp data in 15-byte buffer
  230.   EXIT :  A <> 0, Zero Flag Clear (NZ) if OK
  231.         A = 0, Zero Set (Z) if No File or Read Error
  232.   USES : AF,BC,DE,HL
  233.   REQUIREMENTS: You must log onto drive containing file & Stamp
  234.   SIDE EFFECTS: DMA is altered by this routine
  235.  
  236.  Usage: This DateStamper(tm)-specific routine sets File Stamp
  237.   data for a specified file to user-supplied values.
  238.  
  239. Example:
  240.     EXT    SETTD        ; Declare the routine
  241.     ...            ; Validate DateStamper
  242.     ...            ; log drive, call FSTNXT
  243.     LD    HL,USRDAT    ; Point to 15-byte Stamp field
  244.     CALL    SETTD        ; Set DateStamper File Stamp
  245.     JR    Z,BADSET    ; jump if if Error
  246.     ...            ; Else carry on!
  247. ::DSLIB1.HLP
  248. :U2PTIM - Convert ZSDOS/DateStamper Time to P2DOS (CP/M Plus)
  249.  
  250.   ENTER: DE = Points to Universal Time string (Source)
  251.      HL = Points to P2DOS Time string (Destination)
  252.   EXIT :  A = 0, Zero Set (Z) if Ok, Dest time set (less secs)
  253.         A <> 0, Zero Clear (NZ) if error, Dest zeroed
  254.      DE = Pointer to Secs byte in Source string (not moved)
  255.      HL = Pointer to Secs byte in Dest string (not filled)
  256.   USES : HL,DE,BC,AF
  257.  
  258.  Usage: Utility conversion of Time from ZSDOS/DateStamper(tm)
  259.   to CP/M Plus type.  Only the Date, Hour and Minute fields are
  260.   converted, but registers are returned such that a single LDI
  261.   move instruction after the routine will move any seconds
  262.   information.  Years 78-99 are assumed to be 1978-1999, 0-77
  263.   as 2000-2077.  This routine would commonly be used in
  264.   programs such as Library Utilities which internally use a
  265.   CP/M Plus type of stamp.
  266.  
  267. Example:
  268.     EXT    U2PTIM        ; Declare the variable
  269.     ...            ; Read a clock or stamp
  270.     LD    DE,UTIM        ; Set source time spec address
  271.     LD    HL,PTIM        ; ..and dest time spec addr
  272.     CALL    U2PTIM        ; Do the conversion
  273.     JR    NZ,ERROR    ; ..jump if conversion error
  274.     ...            ; Else use the P2DOS string
  275.  
  276. P2UTIM - Convert P2DOS (CP/M Plus) Time spec to Standard
  277.  
  278.   ENTER: HL = Points to P2DOS (CP/M Plus) Time string (Source)
  279.      DE = Points to Universal Time string (Destination)
  280.   EXIT :  A = 0, Zero Set (Z), Dest string filled (less secs)
  281.         Errors only due to bad entry.  (Check YY=MM=0)
  282.      HL = Points to Secs byte in Source string (Not moved)
  283.      DE = Points to Secs byte in Dest string (not filled)
  284.   USES : HL,DE,BC,AF
  285.  
  286.  Usage: Commonly used to provide interface from CP/M Plus
  287.   systems to CP/M 2.2, or in Library Utility routines to
  288.   provide time interface.  Source stamp is P2DOS (CP/M Plus
  289.   compatible), destination is ZSDOS/DateStamper(tm) standard.
  290.   A single LDI move instruction after conversion will move the
  291.   seconds byte.  Only dates from 1 Jan 1978 thru 31 Dec 2077
  292.   will be properly converted.  Other dates will set Year and
  293.   Month bytes to zero.  Check this state for error condition.
  294.  
  295. Example:
  296.     EXT    P2UTIM        ; Declare the variable
  297.     ...            ; Read a clock or Stamp
  298.     LD    DE,UTIM        ; Point to the Dest string
  299.     LD    HL,PTIM        ; .and the Source string
  300.     CALL    P2UTIM        ; Do the conversion
  301.     LDI            ; Move the seconds (if desired)
  302.     LD    HL,UTIM        ; Check for errors
  303.     LD    A,(HL)        ; Get years byte
  304.     INC    HL        ; ..advance to Months
  305.     OR    L        ; ...and check for errors
  306.     JR    Z,ERROR        ; Jump if error
  307.     ...            ; ..continue on
  308. U2MTIM - Convert Universal Time Spec to MS-DOS/DosDisk(tm)
  309.  
  310.   ENTER: DE = Points to Universal Time string (Source)
  311.      HL = Points to MS-DOS format Time string (Destination)
  312.   EXIT :  A = 0, Zero Set (Z) if Ok, Dest time set (less secs)
  313.         A <> 0, Zero Clear (NZ) if error, Dest str zeroed
  314.      DE = Pointer to Secs byte in Source string (not moved)
  315.      HL = Pointer to High-order time byte in MS-DOS field
  316.         (low-order byte has secs field nulled)
  317.   USES : HL,DE,BC,AF
  318.  
  319.  Usage: Commonly used to convert from internal time format to
  320.   External form for writing to MS-DOS disk formats.  Conversion
  321.   of seconds data to the format used in the MS-DOS Time spec is
  322.   a user program responsibility.  Dates from 1 January 1980 to
  323.   31 December 2077 will be properly converted.
  324.  
  325. Example:
  326.     EXT    U2MTIM        ; Declare the variable
  327.     ...            ; Read a clock or stamp
  328.     LD    DE,UTIM        ; Source time spec string addr
  329.     LD    HL,MTIM        ; ..dest time spec string addr
  330.     CALL    U2MTIM        ; Do the conversion
  331.     JR    NZ,ERROR    ; ..jump if conversion error
  332.     ...            ; Else use P2DOS string
  333. M2UTIM - Convert MS-DOS/DosDisk(tm) Time to Universal
  334.  
  335.   ENTER: HL = Points to MS-DOS Time string (Source)
  336.      DE = Points to Universal Time string (Destination)
  337.   EXIT :  A = 0, Zero Set (Z), Dest string filled (less secs)
  338.         A <> 0, Zero Clear (NZ) if Error, Dest Nulled
  339.      HL = Points to Second (hi-order) byte in MS-DOS string
  340.      DE = Points to Secs byte in Dest string (not filled)
  341.   USES : HL,DE,BC,AF
  342.  
  343.  Usage: Commonly used to convert MS-DOS time to internal format
  344.   for internal program manipulation.  Conversion of seconds is
  345.   your responsibility.  Dates from 1 Jan 1980 thru 31 Dec 2077
  346.   will be properly converted.  Others produce null date.
  347.  
  348. Example:
  349.     EXT    M2UTIM        ; Declare the variable
  350.     ...            ; Read a clock or stamp
  351.     LD    DE,UTIM        ; Point to the Dest string
  352.     LD    HL,MTIM        ; ..and the Source string
  353.     CALL    M2UTIM        ; Do the conversion
  354.     JR    NZ,ERROR    ; ..handle error if bad
  355.     ...            ; Else convert secs & continue
  356.  
  357. :BCD2BIN - Convert Binary Coded Decimal (BCD) byte to binary
  358.  
  359.   ENTER: A = BCD digit to convert (0-99 value)
  360.   EXIT : A = binary byte representation of digit(s) (00-63H)
  361.   USES : AF
  362.  
  363.  Usage: This routine is primarily used in conversions of dates
  364.   used by DSLIB routines but is available for other uses.  It
  365.   converts a packed BCD byte in the range of 0 to 99 to a
  366.   binary byte of 0..63H.
  367.  
  368. BIN2BCD - Convert binary byte to packed BCD.
  369.  
  370.   ENTER: A = Binary digit to convert (00-63H, 0-99 decimal)
  371.   EXIT : A = Packed BCD byte (1 or 2 digits)
  372.   USES : AF
  373.  
  374.  Usage: This routine is commonly used to convert bytes in the
  375.   range of 0-99 (00-63H) to a packed BCD byte.  It is primarily
  376.   used in date conversion routines in DSLIB but is available
  377.   for other uses.
  378.  
  379. DVERS - Return the DSLIB version number
  380.  
  381.   ENTER: None
  382.   EXIT : HL - Contains the Version Number (H=major, L=minor)
  383.   USES : HL.  Other registers unaffected
  384.  
  385.  Usage: This routine is most often used for control or
  386.   debugging purposes to embed the linked library version.
  387.  
  388. ::DSLIB2.HLP
  389.