Get DOS Time
From CometWiki
Get DOS Time
Syntax:
DOSMS(AX-value,BX-value,CX-value,DX-value) EXCP=statement-label
Entry:
AX-value = "@2C00@" BX-value = "@0000@" CX-value = "@0000@" DX-value = "@0000@"
Return:
Byte 2 of the CX register (i.e., the CH byte) contains the hour (0 to 23; in hex).
.
Byte 1 of the CX register (i.e., the CL byte) contains the minute (0 to 59; in hex).
.
Byte 2 of the DX register (i.e., the DH byte) contains the second (0 to 59; in hex).
.
Byte 1 of the DX register (i.e., the DL byte) contains the hundredths of seconds (0 to 99; in hex).
Discussion:
The DOSMS function call can be used to get the DOS system time. This function requires that the AX-value be set to "@2C00@", and that the other entry values be set to null.
After the function is executed, the DOS time is returned in the registers as described above. Note that the values are returned in hex and must be converted to decimal for meaningful use.
Example:
! S STIME,DSK
! O TIME,DSK
! L T00,E
! R QMONITOR
!
!========== GET DOS TIME =======================================
!
LENGTH 2 & LOCAL AX$,BX$,CX$,DX$ ! Define registers
LOCAL HOUR$,MIN$,SEC$,HUND$ ! Define time variables
LENGTH 1 & LOCAL CH$,CL$,DH$,DL$ ! Define sub-registers
LENGTH 2.0 & LOCAL HOUR,MIN,SEC,HUND ! Define numeric times
!
100 FORMAT (ET) ! Screen format
!
CLEAR ! Initialize all variables
!
AX$="@2C00@" ! Set AX register for "GET TIME"
BX$="@0000@" ! Set BX register to null
CX$="@0000@" ! Set CX register to null
DX$="@0000@" ! Set DX register to null
!
DOSMS(AX$,BX$,CX$,DX$) ! Perform DOSMS system call
!
HOUR$ = SUB(CX$,2,1) ! Hour (hex) = CH byte of CX
MIN$ = SUB(CX$,1,1) ! Minute (hex) = CL byte of CX
SEC$ = SUB(DX$,2,1) ! Second (HEX) = DH byte of DX
HUND$ = SUB(DX$,1,1) ! Hundredths (hex) = DL byte of DX
!
HOUR$ = "@00@" + HOUR$ ! Addleading null byte to HOUR$
MIN$ = "@00@" + MIN$ ! Add leading null byte to MIN$
SEC$ = "@00@" + SEC$ ! Add leading null byte to SEC$
HUND$ = "@00@" + HUND$ ! Add leading null byte to HUND$
!
HOUR = HEXDEC(HOUR$) ! Convert hex HOUR$ to decimal HOUR
MIN = HEXDEC(MIN$) ! Convert hex MIN$ to decimal MIN
SEC = HEXDEC(SEC$) ! Convert hex SEC$ to decimal SEC
HUND = HEXDEC(HUND$) ! Convert hex HUND$ to decimal HUND$
!
PRINT (0,100) ! Set typewriter mode
!
PRINT (0) "HOUR: ";HOUR
PRINT (0) "MINUTE: ";MIN
PRINT (0) "SECONDS: ";SEC
PRINT (0) "HUNDREDTHS:";HUND
INPUT (0) ""
RUN "QMONITOR"
END