.TITLE EDDAT .IDENT /V1.0/ ; ; THIS IS THE SYSLIB MODULE EDDAT MODIFIED TO WORK IN A SUPERVISOR ; MODE LIBRARY. THE REASON THE ORIGINAL SYSLIB ROUTINE DID NOT WORK ; IS BECAUSE IT CONTAINED READ ONLY DATA AND USED THE 'JSR R5,$SAVRG' ; FORM OF A SUBROUTINE CALL WHICH ARE NOT ALLOWED. THE READ ONLY DATA ; WAS THE MONTH ABBREVIATIONS WHICH ARE NOW PUSHED ONTO THE STACK. ; THIS ROUTINE WAS DISASSEMBLED FROM SYSLIB, MODIFIED AND THEN ; REASSEMBLED. ; ; LAST EDIT: 6-NOV-1987 14:43:04 ; ; MODIFYED BY: PETER STADICK ; CARGILL INC. ; P.O. DRAWER AR ; RESERVE,LA 70084 ; ; EDIT HISTORY: CREATED NOV-87 PJS ; ; .PSECT CLUNK,RO,I,LCL,REL $DAT:: ; JSR R5,$SAVRG ; SYSLIB REGISTER SAVE MOV R3,-(SP) ; SAVE REGISTERS ON STACK MOV R4,-(SP) MOV R5,-(SP) MOV #"EC,-(SP) ; PUSH MONTH ABREVIATIONS ON STACK MOV #"VD,-(SP) MOV #"NO,-(SP) MOV #"CT,-(SP) MOV #"PO,-(SP) MOV #"SE,-(SP) MOV #"UG,-(SP) MOV #"LA,-(SP) MOV #"JU,-(SP) MOV #"UN,-(SP) MOV #"YJ,-(SP) MOV #"MA,-(SP) MOV #"PR,-(SP) MOV #"RA,-(SP) MOV #"MA,-(SP) MOV #"EB,-(SP) MOV #"NF,-(SP) MOV #"JA,-(SP) MOV R1,R4 ; SAVE PARAMETERS IN R4 AND R5 MOV R2,R5 MOV (R4)+,-(SP) ; PUSH PARAMETERS ON STACK MOV (R4)+,-(SP) MOV (R4)+,R1 ; CONVERT DAY OF MONTH TO ASCII JSR PC,A20 MOVB #55,(R0)+ ; PUT IN DASH DEC (SP) ; COMPUTE OFFSET INTO STACK FOR MOV (SP),R1 ; MONTH ABBREVIATION ASL (SP) ADD (SP)+,R1 ADD SP,R1 ADD #2,R1 MOVB (R1)+,(R0)+ ; PUT MONTH ABREVIATION IN OUTPUT STRING MOVB (R1)+,(R0)+ MOVB (R1)+,(R0)+ MOVB #55,(R0)+ ; PUT IN DASH MOV (SP)+,R1 JSR PC,A10 ; ADD ON YEAR ADD #36.,SP ; ADJUST SP BACK B10: MOV (SP)+,R5 ; RESTORE REGISTERS MOV (SP)+,R4 MOV (SP)+,R3 RTS PC $TIM:: ; JSR R5,$SAVRG ; SYSLIB REGISTER SAVE MOV R3,-(SP) ; SAVE REGISTERS ON STACK MOV R4,-(SP) MOV R5,-(SP) MOV R1,R4 ; SAVE PARAMETER IN R4 MOV #3,R5 CMP R2,R5 ; CHECK OUTPUT SIZE BLOS A80 ; JUMP IF NO FRACTION TO BE INCLUDED JSR PC,A70 ; DISPLAY FRACTION MOVB #56,(R0)+ ; ADD DECIMAL POINT MOV R0,R3 ; MULTIPLY BY 10 MOV (R4),R0 ASL R0 ASL R0 ASL R0 ADD (R4),R0 ADD (R4)+,R0 ; SET UP FOR DIVIDE MOV (R4)+,R1 JSR PC,$DIV MOV R0,R1 MOV R3,R0 BR A20 A80: MOV R2,R5 ; BR A70 A60: MOVB #72,(R0)+ ; PUT SEMICOLON IN OUTPUT STRING A70: MOV (R4)+,R1 JSR PC,A10 DEC R5 BGT A60 MOV R4,R1 ; ALL DONE SO RESTORE REGISTERS AND RETURN MOV R5,R2 BR B10 A20: CLR R2 BR A30 A10: MOV PC,R2 A30: JSR PC,CBDAT ; CONVERT BINARY TO 2 DIGIT ASCII MOV R4,R1 MOV R5,R2 RTS PC ; THIS IS THE EQUIVILENT OF THE ROUTINE '$CBDAT' IN SYSLIB. CBDAT: MOV R3,-(SP) ; PRESERVE R3 CLR R3 ; DIVIDE TO FIND TENS DIGIT 30$: INC R3 SUB #10.,R1 BGT 30$ BEQ 40$ ; IF ZERO THEN DON'T ADD BACK ADD #10.,R1 ; R1 CONTAINS ONE DIGIT DEC R3 40$: ADD #60,R3 ; CONVERT TO ASCII TST R2 BNE 10$ ; IF WE DON'T SUPPRESS ZEROS PRINT IT ANYWAY CMP #60,R3 BEQ 20$ ; WE SUPPRESS ZEROS AND IT IS ZERO SO JUMP 10$: MOVB R3,(R0)+ ; WRITE DIGIT TO STRING 20$: ADD #60,R1 ; CONVERT TO ASCII MOVB R1,(R0)+ ; WRITE DIGIT TO STRING MOV (SP)+,R3 ; RESTORE R3 RTS PC .END