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