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-2.LBR / D.LBR / DSLIB.HZP / DSLIB.HLP
Text File  |  2000-06-30  |  21KB  |  534 lines

  1.  System Identity      - TIMINI, GETDOS, FINDCK, CKTDF
  2.  Clock Reading        - RCLOCK, RDCLK
  3.  File Stamp Routines  - GSTAMP, PSTAMP, GETTD, SETTD
  4.  Directory Selection  - DDIRQS, DDIRQ, DDIRNPAK, DDIRPAK, DDIRSEL
  5.  Time Conversions     - U2PTIM, P2UTIM, U2MTIM, M2UTIM
  6.  Utility Routines     - FSTNXT, BCD2BIN, BIN2BCD, DVERS
  7.  DateStamper(tm) T&D  - OPENTD, CLOSTD, RWTD
  8. :                     System Identity 
  9.  
  10. TIMINI - See if there is a Clock we can read.
  11.  
  12.    TIMTYP - Byte variable for Type of Time/Date Stamping and
  13.         clock in use ("3"=CP/M Plus, "S"=Internal ZSDOS
  14.         or ZDDOS, "D"=DateStamper).
  15.  
  16.   ENTER: None
  17.   EXIT : A = Time method, Zero Flag Clear (NZ) if Clock found
  18.          A = 0, Zero Flag Set (Z) if no clock found
  19.   USES : AF
  20.  
  21.  Usage: This routine calls GETDOS setting DOSVER and DOSTYP,
  22.   then looks for a clock to read, implying a File Stamp method.
  23.   Types are: "S"=ZSDOS/ZDDOS Internal, "D"=DateStamper,
  24.   "3"=CP/M Plus (CP/M 3.x, also termed P2DOS type).  This byte
  25.   may be accessed when desired, and is used by GSTAMP and
  26.   PSTAMP to Get and Set File Stamps respectively.
  27.  
  28. GETDOS - Determine DOS type & Version, set global variables.
  29.  
  30.    DOSTYP - Byte variable for DOS type ("S"=ZSDOS, "D"=ZDDOS,
  31.         "1"=CP/M 1.x, "2"=CP/M 2.x, "3"=CP/M Plus (3.x),
  32.         "R"=ZRDOS, 0=Unknown)
  33.    DOSVER - Byte variable for DOS version # (vendor specific)
  34.  
  35.   ENTER: None
  36.   EXIT : A = DOS Type Character, Zero Clear (NZ) if identified
  37.          A = 0, Zero Flag Set (Z) if Not identified
  38.   USES : AF
  39.  
  40.  Usage: This routine is used to identify the running DOS type
  41.   and version.  It is called from TIMINI, but may be called
  42.   separately.  After it is called, DOSTYP and DOSVER globals
  43.   may be directly accessed.
  44.  
  45. FINDCK - Check for DateStamper(tm) clock and set read status
  46.  
  47.   ENTER: None
  48.   EXIT :  A <> 0, Zero Flag Clear (NZ) if Clock Found
  49.      HL = pointer to Clock starting address if Found
  50.            A = 0, Zero Flag Set (Z), HL = - if Not Found
  51.   USES : AF,BC,DE,HL
  52.  
  53.  Usage: Used with DateStamper(tm)-specific interfaces.  Call
  54.   this routine near the beginning of a program to determine
  55.   clock status.  This routine is not needed if the recommended
  56.   TIMINI/RCLOCK generalized routines are used.
  57.  
  58. CKTDF - Check for DateStamper(tm) Time&Date File on drive
  59.  
  60.   ENTER: None
  61.   EXIT : A <> 0, Zero Flag Reset (NZ) if T&D file located Ok
  62.          A = 0, Zero Flag Set (Z) if NO T&D file present
  63.   USES : AF,BC,DE,HL
  64.   REQUIREMENTS: User must log desired drive before calling
  65.  
  66.  Usage: This routine is used with DateStamper(tm)-specific File
  67.   Stamp routines only, or with routines where individual file
  68.   stamp access is too slow.  It should be called before any
  69.   attempt is made to access File Stamp information.  A common
  70.   use is to set flags for mode changing between Stamp and Non-
  71.   Stamp operations.
  72.  
  73. :RCLOCK - Read clock identified by TIMINI to specified addr
  74.  
  75.   ENTER: HL = Address of 6-byte area to receive time string
  76.   EXIT :  A = 0, Zero Flag Set (Z) if Ok, Time String filled
  77.           A <> 0, Zero Flag Clear (NZ) if Error
  78.   USES : HL,DE,BC,AF
  79.  
  80.  Usage: This routine forms a generalized Clock Read for ZSDOS,
  81.   DateStamper or CP/M Plus clocks identified by TIMINI.  It
  82.   reads clock data to the specified address in the standard
  83.   format.  Since CP/M Plus does not return a valid read flag,
  84.   the status is always assumed to be True, for a good read.
  85.   Note: You must insure that a valid clock is installed and
  86.   working before calling this routine.
  87.  
  88. Example:
  89.     EXT    TIMINI,RCLOCK    ; Always declare both routines
  90.     ...            ; ..preliminary code
  91.     CALL    TIMINI        ; Initialize and identify clock
  92.     ...            ; ..other program code
  93.     LD    HL,TIMSTR    ; Place the time here
  94.     CALL    RCLOCK        ; ..and read the clock
  95.     JR    NZ,BADCLK    ; Jump if error reading clock
  96.     ...            ; ..else proceed to use it
  97.  TIMSTR: DEFS    6        ; Date/Time: YY MM DD HH MM SS
  98.  
  99. RDCLK - Read DateStamper(tm) clock to specified buffer
  100.  
  101.   ENTER: HL = Pointer to 6-byte buffer location
  102.   EXIT : HL = Pointer to last byte of Date/Time string if Ok
  103.       A <> 0, Zero Flag Clear (NZ) if Ok
  104.           A = 0, Zero Set (Z), HL = 0 if Bad Clock Read
  105.   USES : AF,BC,DE,HL
  106.   REQUIREMENTS:  FINDCK must have been previously called.
  107.  
  108.  Usage: This routine is used to read a DateStamper(tm)-specific
  109.   clock.  Date and Time information is returned in the same
  110.   format as other routines in this library.
  111.  
  112. Example:
  113.     EXT    RDCLK,FINDCK    ; Declare the routine
  114.     ...            ; ..initial program code
  115.     CALL    FINDCK        ; Call this early in program
  116.     ...            ; ..intervening program code
  117.     LD    HL,TIMSTR    ; Set addr for 6-byte buffer
  118.     CALL    RDCLK        ; Read the clock.
  119.     JR    Z,NOGOOD    ; ..jump if bad read
  120. :                   File Stamp Routines 
  121.  
  122. GSTAMP - Return File Date Stamp data for specified file
  123. PSTAMP - Set File Date Stamp data for specified file
  124.  
  125.   ENTER: DE = Pointer to FCB for file of interest
  126.      HL = Pointer to 15-byte buffer for/with Stamp data
  127.   EXIT :  A <> 0 Zero Flag Clear (NZ) if Operation Successful
  128.           A = 0, Zero Flag Set (Z) on Error
  129.   USES : AF,BC,HL
  130.   SIDE EFFECTS: Current DMA address is altered by this routine.
  131.   REQUIREMENTS: TIMINI must have been called to set global
  132.     variables.  Drive and User area for the specified file
  133.     must be set prior to calling either of these routines.
  134.  
  135.  Usage: These routines are recommended for File Stamp access in
  136.   CP/M-compatible systems.  They use the DOSTYP and TIMTYP
  137.   variables to determine stamp method in effect, and will read
  138.   and write File Stamps under ZSDOS and DateStamper with CP/M
  139.   2.2 or ZRDOS, and will read stamps from CP/M Plus (CP/M 3.x).
  140. Example:
  141.     EXT    GSTAMP,PSTAMP,TIMINI    ; Declare routines
  142.     ...            ; ..preceding code
  143.     CALL    TIMINI        ; Set the Time sybsystem early
  144.     ...            ; ..other program code
  145.     CALL    SETFCB        ; Set an FCB to a desired file
  146.     LD    DE,FCB        ; .point to it
  147.     LD    HL,TBUFF    ; ..and to buffer for Stamps
  148.     CALL    GSTAMP        ; Get stamp for this file
  149.     JR    Z,NOSTAMP    ; ..go to error handler if bad
  150.     ...            ; Use the data
  151.     CALL    SETDAT        ; Set stamp data in buffer
  152.     LD    DE,FCB        ; .point to FCB for file
  153.     LD    HL,TBUFF    ; ..and to buffer with Stamps
  154.     CALL    PSTAMP        ; Stamp file with TBUFF values
  155.     JR    Z,NOSTAMP    ; ..jump Error if bad return
  156.     ...            ; Else carry on.
  157.  
  158.  FCB:    DEFS    36        ; FCB for file of interest
  159.  TBUFF:    DEFS    15        ; Buffer for Stamp data
  160. GETTD - Get DateStamper(tm) File Stamp for specified file
  161.  
  162.   ENTER:  A - Contains T&D Sector Index (0..7) (from FSTNXT)
  163.      DE - Contains Random Record Number    (from FSTNXT)
  164.      HL = Pointer to 15-byte buffer for Date/Time info
  165.   EXIT :  A <> 0, Zero Flag Clear (NZ) if OK
  166.           A = 0, Zero Set (Z) if No File or Read Error
  167.   USES : AF,BC,DE,HL
  168.   REQUIREMENTS: User must log onto drive containg File & Stamp
  169.   SIDE EFFECTS: DMA is altered by this routine
  170.  
  171.  Usage: This is a DateStamper(tm)-specific routine returning
  172.   file stamp data for a file using FSTNXT call parameters.
  173.  
  174. Example:
  175.     EXT    GETTD        ; Declare the routine
  176.     ...            ; .check DateStamper
  177.     ...            ; ..Log drive, Call FSTNXT
  178.     LD    HL,USRDAT    ; Put 15-byte Stamp data here
  179.     CALL    GETTD        ; Fill in destination string
  180.     JR    Z,NODATA    ; ..jump if bad/no stamp
  181.     ...            ; Else process the stamp
  182. SETTD - Set DateStamper File Stamp into for specified file.
  183.  
  184.   ENTER:  A - Contains T&D Sector Index (0..7) (from FSTNXT)
  185.      DE - Contains Random Record Number    (from FSTNXT)
  186.      HL = Pointer to Stamp data in 15-byte buffer
  187.   EXIT :  A <> 0, Zero Flag Clear (NZ) if OK
  188.           A = 0, Zero Set (Z) if No File or Read Error
  189.   USES : AF,BC,DE,HL
  190.   REQUIREMENTS: You must log onto drive containing file & Stamp
  191.   SIDE EFFECTS: DMA is altered by this routine
  192.  
  193.  Usage: This DateStamper(tm)-specific routine sets File Stamp
  194.   data for a specified file to user-supplied values.
  195.  
  196. Example:
  197.     EXT    SETTD        ; Declare the routine
  198.     ...            ; .Validate DateStamper
  199.     ...            ; ..log drive, call FSTNXT
  200.     LD    HL,USRDAT    ; Point to 15-byte Stamp field
  201.     CALL    SETTD        ; Set DateStamper File Stamp
  202.     JR    Z,BADSET    ; ..jump if if Error
  203.     ...            ; Else carry on!
  204. :DDIRQS - Return sorted directory with file stamps and sizing
  205.  DDIRQ  - Return sorted directory with file stamps
  206.  
  207.   ENTER: HL = Address of TPA buffer start
  208.      DE = Points to FCB entry to match directory entries
  209.       A = Select character
  210.         B7 - 1 = Select SYStem files
  211.         B6 - 1 = Select Non-SYStem files
  212.         B5 - 1 = Select All users
  213.       C = Secondary select
  214.         B7 - 1=Sort Type then Name, 0=Name then Type
  215.         B0 - 1=Search DateStamper first, then DosDisk
  216.             then P2DOS stamps; 0=Skip DateStamper
  217.   EXIT :  A <> 0, Zero Flag Clear (NZ) if Ok,
  218.           A = 0, Zero Set (Z) if TPA Overflow
  219.      BC = Number of files in Sorted Directory Array
  220.      HL = Address of first file in buffer
  221.   USES : HL,BC,AF
  222.   SIDE EFFECT: Dos DMA Address is set to 80H
  223.  
  224.  Usage: These routines provide a replacement for the SYSLIB
  225.   routines DIRQS and DIRQ.  File Stamps are automatically
  226.   appended to Directory data from DateStamper(tm), P2DOS (CP/M
  227.   Plus), and Plu*Perfect Systems' DosDisk.  The Last Access
  228.   field is nulled in P2DOS, and the single DosDisk stamp is
  229.   returned in the Last Modified field.  Each entry is 31 char-
  230.   acters long (16 for file entry, 15 for stamp).
  231.  
  232. Example:
  233.     EXT    DDIRQS        ; ..or DDIRQ.  DON'T use both
  234.     ...
  235.     CALL    CODEND        ; Get lower TPA value in HL
  236.     LD    DE,MYFCB    ; Match this file spec
  237.     LD    C,01H        ; Sort Name/Type, DS first
  238.     LD    A,0E0H        ; SYS & Non-SYS, all user areas
  239.     CALL    DDIRQS        ; Do the call (or to DDIRQ)
  240.     JP    Z,ERROR        ; ..error if not enough space
  241.     LD    A,B        ; Do we have any files?
  242.     OR    C        ; ..BC has number of files
  243.     JP    Z,NOFILS    ; Jump if no files in array
  244.     ...            ; ..use the files in the array
  245.  
  246.  MYFCB:    DEFB    0,'???????????',0,0,0,0        ; FCB to match
  247.     DEFB    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  248.  
  249. DDIRNPAK - Negate selection markings in Directory Buffer
  250.  
  251.   ENTER: HL = Points to Directory Buffer from DDIRQ/DDIRQS
  252.      BC = Number of entries in the Buffer
  253.   EXIT : BC = Number of entries in Buffer after select/packing
  254.   USES : BC
  255.  
  256.  Usage: This routine is used to delete file entries from DDIRQS
  257.   or DDIRQ directory routines.  Upon completion, only entries
  258.   previously unmarked remain, and the table is compressed to
  259.   only these entries. This is similar to the SYSLIB routine
  260.   DIRNPAK, but tailored to Time/Date Stamped Directory lists.
  261.  
  262. Example:
  263.     EXT    DDIRNPAK    ; Declare the routine
  264.     ...            ; Build dir table (DDIRQ(S))
  265.     ...            ; ..and select entries
  266.     LD    HL,(BUFF)    ; Buffer start (DDIRQ/DDIRQS)
  267.     LD    BC,(COUNT)    ; ..# of entries (DDIRQ/DDIRQS)
  268.     CALL    DDIRNPAK    ; Keep unselected & pack Buffer
  269.     ...            ; ..continue w/ new file count
  270.  
  271. DDIRPAK - Pack Directory Buffer from DDIRQ/DDIRQS
  272.  
  273.   ENTER: HL = Points to Directory Buffer from DDIRQ/DDIRQS
  274.      BC = Number of entries in the Buffer
  275.   EXIT : BC = New Number of Buffer entries after select/pack
  276.   USES : BC
  277.  
  278.  Usage: Compress File ID array from Directory Sort routine
  279.   retaining only marked file entries.  This routine is similar
  280.   to the SYSLIB routine DIRPAK, but functions with Time/Date
  281.   Stamped Directory lists.
  282.  
  283. Example:
  284.     EXT    DDIRPAK        ; Declare the routine
  285.     ...            ; build dir tbl (DDIRQ/DDIRQS)
  286.     ...            ; ..and select entries
  287.     LD    HL,(BUFF)    ; Buffer start (DDIRQ/DDIRQS)
  288.     LD    BC,(COUNT)    ; ..# of entries (DDIRQ/DDIRQS)
  289.     CALL    DDIRPAK        ; Keep selected entries & pack
  290.     ...            ; ..continue w/new file count
  291.  
  292. DDIRSEL - Select entries from DDIRQ/DDIRQS Directory Buffer
  293.  
  294.   ENTER: HL = Points to Directory Buffer from DDIRQ/DDIRQS
  295.      DE = FCB entry to select against
  296.      BC = Number of entries in the Buffer
  297.       A = Select flag: Bit 7 - Select Non-SYStem files
  298.                Bit 6 - Select SYStem files
  299.                Bit 5 - Select All Users
  300.                Bits 4..0 - User Number
  301.   EXIT : None.  Selected files are marked
  302.   USES : None
  303.  
  304.  Usage: Select file entries by setting the MSB of the first
  305.   byte (User #) based on file name and type in FCB, and
  306.   selection flags.  This routine is similar to the SYSLIB
  307.   routine DIRSEL, but accomodates Time/Date Stamped Directory
  308.   lists.
  309.  
  310. Example:
  311.     EXT    DDIRSEL        ; Declare the routine
  312.     ...            ; Build Dir (DDIRQ/DDIRQS)
  313.     LD    HL,(BUFF)    ; Buffer start (DDIRQ/DDIRQS)
  314.     LD    DE,MYFCB    ; .FCB criteria for selection
  315.     LD    BC,(COUNT)    ; ..and # entries (from DDIRQ)
  316.     LD    A,01100000B    ; SYS files in All User Areas
  317.     CALL    DDIRSEL        ; Mark matching entries
  318.     ...            ; ..continue on
  319. :U2PTIM - Convert ZSDOS/DateStamper Time to P2DOS (CP/M Plus)
  320.  
  321.   ENTER: DE = Points to Universal Time string (Source)
  322.      HL = Points to P2DOS Time string (Destination)
  323.   EXIT :  A = 0, Zero Set (Z) if Ok, Dest time set (less secs)
  324.           A <> 0, Zero Clear (NZ) if error, Dest zeroed
  325.      DE = Pointer to Secs byte in Source string (not moved)
  326.      HL = Pointer to Secs byte in Dest string (not filled)
  327.   USES : HL,DE,BC,AF
  328.  
  329.  Usage: Utility conversion of Time from ZSDOS/DateStamper(tm)
  330.   to CP/M Plus type.  Only the Date, Hour and Minute fields are
  331.   converted, but registers are returned such that a single LDI
  332.   move instruction after the routine will move any seconds
  333.   information.  Years 78-99 are assumed to be 1978-1999, 0-77
  334.   as 2000-2077.  This routine would commonly be used in
  335.   programs such as Library Utilities which internally use a
  336.   CP/M Plus type of stamp.
  337.  
  338. Example:
  339.     EXT    U2PTIM        ; Declare the variable
  340.     ...            ; Read a clock or stamp
  341.     LD    DE,UTIM        ; Set source time spec address
  342.     LD    HL,PTIM        ; ..and dest time spec addr
  343.     CALL    U2PTIM        ; Do the conversion
  344.     JR    NZ,ERROR    ; ..jump if conversion error
  345.     ...            ; Else use the P2DOS string
  346.  
  347. P2UTIM - Convert P2DOS (CP/M Plus) Time spec to Standard
  348.  
  349.   ENTER: HL = Points to P2DOS (CP/M Plus) Time string (Source)
  350.      DE = Points to Universal Time string (Destination)
  351.   EXIT :  A = 0, Zero Set (Z), Dest string filled (less secs)
  352.           Errors only due to bad entry.  (Check YY=MM=0)
  353.      HL = Points to Secs byte in Source string (Not moved)
  354.      DE = Points to Secs byte in Dest string (not filled)
  355.   USES : HL,DE,BC,AF
  356.  
  357.  Usage: Commonly used to provide interface from CP/M Plus
  358.   systems to CP/M 2.2, or in Library Utility routines to
  359.   provide time interface.  Source stamp is P2DOS (CP/M Plus
  360.   compatible), destination is ZSDOS/DateStamper(tm) standard.
  361.   A single LDI move instruction after conversion will move the
  362.   seconds byte.  Only dates from 1 Jan 1978 thru 31 Dec 2077
  363.   will be properly converted.  Other dates will set Year and
  364.   Month bytes to zero.  Check this state for error condition.
  365.  
  366. Example:
  367.     EXT    P2UTIM        ; Declare the variable
  368.     ...            ; Read a clock or Stamp
  369.     LD    DE,UTIM        ; Point to the Dest string
  370.     LD    HL,PTIM        ; ..and the Source string
  371.     CALL    P2UTIM        ; Do the conversion
  372.     LDI            ; Move the seconds (if desired)
  373.     LD    HL,UTIM        ; Check for errors
  374.     LD    A,(HL)        ; Get years byte
  375.     INC    HL        ; ..advance to Months
  376.     OR    L        ; ...and check for errors
  377.     JR    Z,ERROR        ; Jump if error
  378.     ...            ; ..continue on
  379. U2MTIM - Convert Universal Time Spec to MS-DOS/DosDisk(tm)
  380.  
  381.   ENTER: DE = Points to Universal Time string (Source)
  382.      HL = Points to MS-DOS format Time string (Destination)
  383.   EXIT :  A = 0, Zero Set (Z) if Ok, Dest time set (less secs)
  384.           A <> 0, Zero Clear (NZ) if error, Dest str zeroed
  385.      DE = Pointer to Secs byte in Source string (not moved)
  386.      HL = Pointer to High-order time byte in MS-DOS field
  387.             (low-order byte has secs field nulled)
  388.   USES : HL,DE,BC,AF
  389.  
  390.  Usage: Commonly used to convert from internal time format to
  391.   External form for writing to MS-DOS disk formats.  Conversion
  392.   of seconds data to the format used in the MS-DOS Time spec is
  393.   a user program responsibility.  Dates from 1 January 1980 to
  394.   31 December 2077 will be properly converted.
  395.  
  396. Example:
  397.     EXT    U2MTIM        ; Declare the variable
  398.     ...            ; Read a clock or stamp
  399.     LD    DE,UTIM        ; Source time spec string addr
  400.     LD    HL,MTIM        ; ..dest time spec string addr
  401.     CALL    U2MTIM        ; Do the conversion
  402.     JR    NZ,ERROR    ; ..jump if conversion error
  403.     ...            ; Else use P2DOS string
  404. M2UTIM - Convert MS-DOS/DosDisk(tm) Time to Universal
  405.  
  406.   ENTER: HL = Points to MS-DOS Time string (Source)
  407.      DE = Points to Universal Time string (Destination)
  408.   EXIT :  A = 0, Zero Set (Z), Dest string filled (less secs)
  409.           A <> 0, Zero Clear (NZ) if Error, Dest Nulled
  410.      HL = Points to Second (hi-order) byte in MS-DOS string
  411.      DE = Points to Secs byte in Dest string (not filled)
  412.   USES : HL,DE,BC,AF
  413.  
  414.  Usage: Commonly used to convert MS-DOS time to internal format
  415.   for internal program manipulation.  Conversion of seconds is
  416.   your responsibility.  Dates from 1 Jan 1980 thru 31 Dec 2077
  417.   will be properly converted.  Others produce null date.
  418.  
  419. Example:
  420.     EXT    M2UTIM        ; Declare the variable
  421.     ...            ; Read a clock or stamp
  422.     LD    DE,UTIM        ; Point to the Dest string
  423.     LD    HL,MTIM        ; ..and the Source string
  424.     CALL    M2UTIM        ; Do the conversion
  425.     JR    NZ,ERROR    ; ..handle error if bad
  426.     ...            ; Else convert secs & continue
  427.  
  428. :FSTNXT - File search returning DateStamper(tm) Indices
  429.  
  430.   ENTER:  C - Search First (17) or Search Next (18) DOS command
  431.      DE - Points to FCB containg the target Filename.type
  432.   EXIT :  A = Dir Index (0..3), Carry Flag Clear (NC) If Found
  433.           A indeterminate, Carry Flag Set (C) If NOT Found
  434.      DE - Contains random Sector number in !!!TIME&.DAT
  435.       B - Index into T&D sector (0..7)
  436.   USES : AF,BC,DE,HL
  437.   REQUIREMENTS: User must log Drive and User before calling
  438.  
  439.  Usage: This routine is used in DateStamper-specific systems to
  440.   perform File searches and return indices into the Time & Date
  441.   file.  Use this call for Function 17 and 18 Search calls in
  442.   lieu of a direct call to the BDOS vector at location 5.
  443.  
  444. Example:
  445.     EXT    FSTNXT        ; Declare the routine
  446.     ...            ; Log Drive/User & Set FCB
  447.     LD    C,17        ; Set for Search First command
  448.     LD    DE,FCB        ; ..addr FCB for desired name
  449.     CALL    FSTNXT        ; Search for the desired file
  450.     JR    NC,FOUND    ; ..jump if file found
  451.     ...            ; Else do not found things
  452.  
  453. BCD2BIN - Convert Binary Coded Decimal (BCD) byte to binary
  454.  
  455.   ENTER: A = BCD digit to convert (0-99 value)
  456.   EXIT : A = binary byte representation of digit(s) (00-63H)
  457.   USES : AF
  458.  
  459.  Usage: This routine is primarily used in conversions of dates
  460.   used by DSLIB routines but is available for other uses.  It
  461.   converts a packed BCD byte in the range of 0 to 99 to a
  462.   binary byte of 0..63H.
  463.  
  464. BIN2BCD - Convert binary byte to packed BCD.
  465.  
  466.   ENTER: A = Binary digit to convert (00-63H, 0-99 decimal)
  467.   EXIT : A = Packed BCD byte (1 or 2 digits)
  468.   USES : AF
  469.  
  470.  Usage: This routine is commonly used to convert bytes in the
  471.   range of 0-99 (00-63H) to a packed BCD byte.  It is primarily
  472.   used in date conversion routines in DSLIB but is available
  473.   for other uses.
  474.  
  475. DVERS - Return the DSLIB version number
  476.  
  477.   ENTER: None
  478.   EXIT : HL - Contains the Version Number (H=major, L=minor)
  479.   USES : HL.  Other registers unaffected
  480.  
  481.  Usage: This routine is most often used for control or
  482.   debugging purposes to embed the linked library version.
  483.  
  484. :OPENTD - Open DateStamper(tm) Time & Date file for Read/Write
  485.  
  486.   ENTER: A = 0 for Read, A = 0FFH for Write
  487.   EXIT : A <> 0, Zero Flag Clear (NZ) if OK
  488.          A = 0, Zero Flag Set (Z) if Open Error
  489.   USES : AF,BC,DE,HL
  490.   REQUIREMENTS: You must select the drive before calling
  491.  
  492.  Usage: This DateStamper-specific routine is used to access
  493.   large numbers of stamps, or where performance penalties in
  494.   per-file stamp accesses are undesireable.  This routine Opens
  495.   the TIME&DAT file in User 0 on the current drive.  If opened
  496.   for writing, the R/O attribute is cleared.  The User Number
  497.   is restored on exit.
  498.  
  499. CLOSTD - Close DateStamper(tm) Time & Date file
  500.  
  501.   ENTER: None
  502.   EXIT : A <> 0, Zero Flag Clear (NZ) if OK
  503.          A = 0, Zero flag Set (Z) if Error
  504.   USES : AF,BC,DE,HL
  505.  
  506.  Usage: This DateStamper-specific routine closes the TIME&DAT
  507.   file in user 0 of current drive, and sets the R/O bit.  It is
  508.   used in conjunction with OPENTD above.
  509.  
  510. RWTD - Read or write to Time & Date file on current drive.
  511.  
  512.   ENTER:  A = 0 to Read, A = 0FFH to Write
  513.      DE - Contains Random Record to Read or Write
  514.   EXIT : HL - Addresses the start of T&D sector Read/Written
  515.       A <> 0, Zero Flag Clear (NZ) if OK
  516.           A = 0, Zero Flag Set (Z) if Error
  517.   USES : AF,BC,DE,HL and BDOS DMA Address
  518.  
  519.  Usage: DateStamper(tm)-specific routine normally used only for
  520.   Directory list, Catalog or Archive programs where access to
  521.   blocks of Date Stamps is desired.
  522.   NOTE: You must reset DMA address after call if needed.
  523.  
  524. Example:
  525.     EXT    RWTD        ; Declare the routine
  526.     ...            ; Log drive, Set DMA addr
  527.     LD    DE,(RECNUM)    ; Get T&D Rec # from FSTNXT or
  528.                 ; ..specified Random rec number
  529.     LD    A,MODE        ; A=0 for read, A=FF for write
  530.     CALL    RWTD        ; Perform the action
  531.     JR    NZ,RWOK        ; ..jump if OK
  532.     ...            ; Else perform error activity
  533.  RWOK:    ...            ; Sector has been read/written
  534.