; ; DEC3.MAC ; ; DECODE A SERIES OF ASCII CHARACTERS WHOSE RESULT IS 3 UNSIGNED ; INTEGERS ; ; THE INTEGERS CAN BE SEPARATED BY ANY CHARACTER OR ANY SERIES OF ; CHARACTERS THAT ARE NOT DIGITS FROM 0 THROUGH 9. ; USE THIS BY MAKING THE STATEMENT: CALL DEC3(MO,DA,YR,FLAG,ANS,MAX) ; WHERE MO,DA,YR, AND FLAG ARE INTEGERS AND ANS IS A 20 BYTE ARRAY ; FLAG WILL BE SET TO THE NUMBER OF INTEGERS ENTERED ; MAX IS AN OPTIONAL INTEGER = TO MAX NO. OF CHARACTERS THROUGH WHICH IT ; WILL SEARCH. IF A NUMBER BEGINS ON OR BEFORE THE MAXIMUM, IT WILL ; BE CONVERTED EVEN IFTHE END OF THE NUMBER COMES AFTER THE MAXIMUM. .TITLE DEC3 DEC3:: MOV 12(R5),R0 MOV R0,R3 TST 14(R5) ; WAS THERE A MAX NO. OF CHARACTERS? BLE NOMAX ; NO THERE WASN'T ADD @14(R5),R3 ; WAS A MAXIMUM, USE IT BR CONT NOMAX: ADD #20.,R3 ; NO MAX, USE 20 CONT: DEC R0 CLR @2(R5) CLR @4(R5) CLR @6(R5) CLR @10(R5) FIND1: INC R0 CMP R0,R3 ; HAVE WE REACHED END OF CHARACTER STRING BHIS END ; YES CMPB (R0),#'9 ; IS THIS CHARACTER TOO HIGH? BGT FIND1 ; YES CMPB (R0),#'0 ; IS THIS CHARACTER TOO LOW BLT FIND1 ; YES CALL $CDTB ; CONVERT 1ST NO. TO BINARY MOV R1,@2(R5) ; STORE RESULT AT NO1 INC @10(R5) ; REMEMBER HOW MANY NO. FOUND DEC R0 ; R0 IS ONE TOO FAR FIND2: INC R0 ; FIND THE NEXT NO. (R0 CONTAINS THE CMP R0,R3 ; ...ADDRESS OF THE 1ST BYTE AFTER END BHIS END ; ...OF 1ST NO.) CMPB (R0),#'9 BGT FIND2 CMPB (R0),#'0 BLT FIND2 CALL $CDTB ; IF GET HERE, FOUND 2ND NUMBER MOV R1,@4(R5) ; STORE RESULT AT NO2 INC @10(R5) DEC R0 FIND3: INC R0 CMP R0,R3 BHIS END CMPB (R0),#'9 BGT FIND3 CMPB (R0),#'0 BLT FIND3 CALL $CDTB MOV R1,@6(R5) INC @10(R5) END: RETURN .END