Introduction

Language Structure

IB Statements

File System

Comet 32 Runtime

Index

Get DOS Date

Syntax: DOSMS(AX-value,BX-value,CX-value,DX-value) EXCP=statement-label
Entry:
  AX-value = "@2A00@"
  BX-value = "@0000@"
  CX-value = "@0000@"
  DX-value = "@0000@"
Return:
  The CX register contains the year (1980 to 2099; in hex -- see
  conversion note below).

  Byte 2 of the DX register (i.e., the DH byte) contains the month
  (1 to 12; in hex).

  Byte 1 of the DX register (i.e., the DL byte) contains the day (1
  to 31; in hex).

  Byte 1 of the AX register (i.e., the AL byte) contains the
  weekday number (0 = Sunday, 1 = Monday, 2 = Tuesday, etc.; in
  hex).
Discussion: The DOSMS function call can be used to get the DOS system date. This function requires that the AX-value be set to "@2A00@", and that the other entry values be set to null.

After the function is executed, the DOS date 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.

Special note: The CX register returns the year portion of the DOS system date. In order to get the correct year, you must first reverse the order of the bytes in the CX register, and then convert to decimal. This is demonstrated in the following sample program.

Example:
  ! S SDATE,DSK
  ! O DATE,DSK
  ! L T00,E
  ! R QMONITOR
  !
  !==========  GET DOS DATE =======================================
  !
  LENGTH 2 & LOCAL AX$,BX$,CX$,DX$          ! Define registers
             LOCAL MONTH$,DAYNUM$,WEEKDAY$  ! Define date variables
  LENGTH 4 & LOCAL YEAR$                    ! Define year
  LENGTH 1 & LOCAL AL$,CH$,CL$,DH$,DL$      ! Define sub-registers
  LENGTH 4.0 & LOCAL YEAR                   ! Define numeric year
  LENGTH 2.0 & LOCAL MONTH,DAYNUM,WEEKDAY   ! Define numeric dates
  !
  100 FORMAT (ET)                           ! Screen format
  !
  CLEAR                        ! Initialize all variables
  !
  AX$="@2A00@"                 ! Set AX register for "GET DATE"
  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
  !
  YEAR$ = CX$                  ! Year (hex) = CX register
  MONTH$= SUB(DX$,2,1)         ! Month (hex) = DH byte of DX
  DAYNUM$= SUB(DX$,1,1)        ! Day (hex) = DL byte of DX register
  WEEKDAY$=SUB(AX$,1,1)        ! Weekday (hex) = AL byte of AX
  !
  CH$ = SUB(CX$,2,1)           ! Get CH byte from CX (year)
  CL$ = SUB(CX$,1,1)           ! Get CL byte from CX (year)
  YEAR$ = CH$ + CL$            ! Recombine CH and CL bytes
  !
  MONTH$   = "@00@" + MONTH$   ! Add leading null byte to MONTH$
  DAYNUM$  = "@00@" + DAYNUM$  ! Add leading null byte to DAYNUM$
  WEEKDAY$ = "@00@" + WEEKDAY$ ! Add leading null byte to WEEKDAY$
  !
  YEAR = HEXDEC(YEAR$)         ! Convert hex YEAR$ to decimal YEAR
  MONTH= HEXDEC(MONTH$)        ! Convert hex MONTH$ to decimal
  DAYNUM = HEXDEC(DAYNUM$)     ! Convert hex DAYNUM$ to decimal
  WEEKDAY= HEXDEC(WEEKDAY$)    ! Convert hex WEEKDAY$ to decimal
  !
  PRINT (0,100)                ! Set typewriter mode
  !
  PRINT (0) "YEAR:      ";YEAR
  PRINT (0) "MONTH:     ";MONTH
  PRINT (0) "DAY        ";DAYNUM
  PRINT (0) "WEEKDAY # :";WEEKDAY
  INPUT (0) ""
  RUN "QMONITOR"
  END