;
; NAME: SYSINT
;
OBJNAM .SBR
;
; FUNCTION: This module accepts as input a date field (in
; AlphABasic format) and returns the internal (absolute) format
; in a floating point.
; Note that the results of this conversion may be converted to be
; relative to a different starting date than that chosen by
; AlphaMicro. For example, to make 1/1/1900 the first day, subtract
; the constant 2415020 from the returned result.
; NOTE: the routine $DSTOI apparently translates any date prior to
; 3/1/1900 incorrectly (it returns a result which is well past the
; end of the 20th century).
;
; CALLING SEQUENCE:
; XCALL SYSINT,SYS,INT where
; SYS is date in AlphaBasic format (B,3 or B,4)
; INT is a date in internal format (F,6)
;
; AUTHOR: Tom Dahlquist
;
; PROGRAM HISTORY:
; 09/28/87 Written.
;
EXTERN $DSTOI
SEARCH SYS
SEARCH SYSSYM
;
; This is a map of the parameters passed by AlphaBasic XCALL.
;
ASECT
.=0
XCALL:
NUMARG: WORD 0
TYPE1: WORD 0
ADDR1: LWORD 0
SIZE1: LWORD 0
TYPE2: WORD 0
ADDR2: LWORD 0
SIZE2: LWORD 0
PSECT
RADIX 16
VMAJOR=1
VMINOR=0
PHDR -1,0,PH$REE!PH$REU
CMPW @A3,#2 ; check # of args...
BLO RTN ; leave if too small.
MOVW TYPE1(A3),D7 ; check type of arg1--
ANDW #0F,D7 ; get rid of extraneous bits...
CMPW D7,#6 ; must be binary,
BNE RTN ; leave if not.
CMP SIZE1(A3),#3 ; check size of arg1--
BLO RTN ; leave if < 3.
MOVW TYPE2(A3),D7 ; check type of arg2--
ANDW #0F,D7
CMPW D7,#4 ; must be floating point.
BNE RTN
MOV ADDR1(A3),A6 ; A6 -> input value...
MOVB 1(A6),D7 ; get day...
LSLW D7,#8. ; shift left one byte...
MOVB @A6,D7 ; move in day...
LSL D7,#8. ; shift left one word...
LSL D7,#8.
MOVB 2(A6),D7 ; and move in year.
CALL $DSTOI ; and convert to internal.
MOV ADDR2(A3),A6 ; A6 -> return value area...
FLTOF D7,@A6 ; store return value.
RTN: RTN
END