home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / bbs / emx-util.lbr / TOS.MZC / TOS.MAC
Text File  |  1988-01-30  |  3KB  |  185 lines

  1.  
  2. ; TOS.MAC    EMX remote CP/M system time utility
  3. ;
  4. ; This routine must be linked with the EMXSUBS.REL file
  5. ;
  6. ;
  7. ; v1.22 - 07/30/84    Updated to be in sync with source code release
  8. ;            version 3.00 of EMX
  9. ;                    - Simon Ewins
  10. ;
  11. ; v1.00 - 06/10/84    The original, written in Z80 code for assembly
  12. ;            with M80 and L80, for use with EMSBYE, and the
  13. ;            EMX message system, developed by Simon Ewins of
  14. ;            Toronto, Ontario., Canada
  15. ;
  16. ;            Written by:    Mark Howard - Sysop
  17. ;                    CNY Technical RCPM
  18. ;                    Syracuse, NY  (315) 437-4890
  19. ;
  20.     .Z80
  21.     ASEG
  22.     ORG    100H
  23. ;
  24.     JP    START
  25. ;
  26. VER::    DB    1
  27. VERR::    DB    22
  28. ;
  29.     INCLUDE    EMXHDR.MAC
  30.     INCLUDE    GETTIM.MAC
  31. ;
  32. START::    LD    SP,STACK    ; Use our own stack
  33. ;
  34. ; Make sure BYE is active
  35. ;
  36.     LD    A,(REENTR)    ; Get re-entry byte
  37.     OR    A        ; 1=signed on
  38.     CALL    Z,LOCAL        ; Must be local
  39. ;
  40. ; Determine the LOGON, LOGOFF and elapsed time
  41. ;
  42.     LD    A,(LOCFLG)    ; Are we local?
  43.     OR    A
  44.     JR    NZ,LOC1
  45.     LD    HL,LOGSTR    ; Hl -> logon time
  46.     LD    DE,ONTIM    ; Point to where to put it
  47.     LD    BC,8        ; No. of bytes
  48.     LDIR            ; Move em
  49. ;
  50. LOC1::    CALL    GETTIM        ; Get the current time
  51.     LD    HL,TIME        ; Point to the time string
  52.     LD    DE,CURTIM    ; Where to put it
  53.     LD    BC,8
  54.     LDIR            ; Move it
  55.     LD    HL,DATE        ; Get the date
  56.     LD    DE,CURDAT
  57.     LD    BC,8
  58.     LDIR            ; Move it
  59.     LD    A,(LOCFLG)    ; Check status
  60.     OR    A
  61.     CALL    Z,CALCTIM    ; Calculate the elapsed time
  62. ;
  63. ; Print the results
  64. ;
  65.     CALL    PRINT
  66.     DB    CR,LF,'Today is ......... '
  67. ;
  68. CURDAT::DB    '00/00/00',0
  69.     CALL    PRINT
  70.     DB    CR,LF,'Current time ..... '
  71. ;
  72. CURTIM::DB    '00:00:00',0
  73.     LD    A,(LOCFLG)    ; Check one more time
  74.     OR    A
  75.     JP    NZ,WBOOT    ; If local, warm boot
  76. ;
  77.     CALL    PRINT
  78.     DB    CR,LF,'Logged on at ..... '
  79. ;
  80. ONTIM:    DB    '00:00:00',0
  81.     CALL    PRINT
  82.     DB    CR,LF,'Connect time ..... '
  83. ;
  84. ELPTIM::DB    '00:00:00',0
  85. ;
  86. WBOOT::    CALL    PRINT
  87.     DB    CR,LF,0
  88.     JP    0        ; Warm boot
  89. ;
  90. ;    ----------------  local subroutines  -------------------
  91. ;
  92. ; Calculate the elapsed time - from TIMEDIF.ASM
  93. ;
  94. CALCTIM::
  95.     LD    HL,ONTIM+6    ; Point to start time secs
  96.     CALL    GETBIN        ; Get binary
  97.     LD    D,A        ; Save it
  98.     LD    HL,CURTIM+6    ; Stop time secs
  99.     CALL    GETBIN
  100.     LD    E,0        ; Reset the borrow flag
  101.     SUB    D        ; Subtract
  102.     JR    NC,SKBS        ; Skip if no borrow
  103.     DEC    E        ; Else make e = ff
  104.     ADD    A,60        ; Make mod 60
  105. ;
  106. SKBS::    LD    HL,ELPTIM+7 ; Point to elapsed time seconds
  107.     CALL    STORA
  108.     LD    HL,ONTIM+3
  109.     CALL    GETBIN
  110.     LD    D,A
  111.     LD    HL,CURTIM+3
  112.     CALL    GETBIN
  113.     INC    E        ; If not borrow
  114.     JR    NZ,SKBM1    ; Then skip
  115.     INC    D        ; Else add borrowed value
  116. ;
  117. SKBM1::    LD    E,0
  118.     SUB    D
  119.     JR    NC,SKBM2    ; Skip if no borrow
  120.     DEC    E
  121.     ADD    A,60        ; Make mod 60
  122. ;
  123. SKBM2::    LD    HL,ELPTIM+4
  124.     CALL    STORA        ; Store it
  125. ;
  126.     LD    HL,ONTIM
  127.     CALL    GETBIN
  128.     LD    D,A
  129.     LD    HL,CURTIM
  130.     CALL    GETBIN
  131.     INC    E
  132.     JR    NZ,SKBH1
  133.     INC    D
  134. ;
  135. SKBH1::    SUB    D
  136.     JR    NC,SKBH2
  137.     ADD    A,24        ; Add 24 hrs
  138. ;
  139. SKBH2::    LD    HL,ELPTIM+1
  140.     JR    STORA
  141. ;
  142. GETBIN::LD    A,(HL)        ; Get tens
  143.     AND    0FH
  144.     LD    B,A        ; Save
  145.     XOR    A
  146.     LD    C,10        ; Set up multiplier
  147. ;
  148. MUL:;    ADD    A,C
  149.     DEC    B
  150.     JR    NZ,MUL
  151.     LD    B,A        ; Save tens
  152.     INC    HL        ; Point to units
  153.     LD    A,(HL)
  154.     AND    0FH
  155.     ADD    A,B        ; Add tens
  156.     RET            ; Return value in ac
  157. ;
  158. STORA:; LD    B,-1
  159. ;
  160. TLP:;    INC    B
  161.     SUB    10
  162.     JR    NC,TLP
  163.     ADD    A,10
  164.     OR    30H
  165.     LD    (HL),A
  166.     DEC    HL
  167.     LD    A,30H
  168.     ADD    A,B
  169.     LD    (HL),A
  170.     RET
  171. ;
  172. LOCAL::    LD    A,0FFH
  173.     LD    (LOCFLG),A    ; Indicate that we are local
  174.     RET
  175. ;
  176. ; Data
  177. ;
  178. LOCFLG::DB    0        ; If nz, then was local
  179. ;
  180.     DS    128        ; Stack area
  181. ;
  182. STACK    EQU    $
  183. ;
  184.     END
  185.