; ; DBLBIN.MAC ; SOURCE FOR MACRO SUBROUTINE TO INTERPRET FOUR SUCCESSIVE STRING BYTES ; AS A LONG (2 WORD) INTEGER AND RETURN ITS VALUE AS A FLOATING NUMBER. ; BASIC CALL: ; CALL "DBLBIN"(A$,A) ; WHERE: ; A$ = STRING WHOSE FIRST 4 BYTES CONTAIN LONG INTEGER ; A = RETURNED VALUE OF LONG INTEGER ; .MCALL ULODHD ULODHD START,END,DBLBIN ; ; DEFINE FLOATING REGISTER ; AC0=%0 ; START: DBLBIN: JSR R4,@#GTRGPI ;GET ARGUMENTS .BYTE 3,2,0 .EVEN JSR PC,@#PARCHK ;CHECK FOR TRAILING PAREN MOV SP,R5 ;R5 IS ARG LIST PTR MOV (R5)+,R4 ;R4 HAS LEN OF STRING MOV (R5)+,R3 ;ADDRESS OF STRING -> R3 MOV #4,R2 MOV SP,R0 CMP R4,R2 ;SEE IF WE HAVE FULL LEN BLT 2$ ;IF NOT, BRANCH 1$: MOVB (R3)+,(R0)+ ;PUT NUMBER ON STACK SOB R2,1$ ;ENSURING WORD ALIGNMENT BR 5$ 2$: SUB R4,R2 ;GET MISSING LEN -> R2 3$: CLRB (R0)+ ;CLEAR OUT A FEW BYTES SOB R2,3$ TST R4 ;CHECK LEN OF WHAT WE HAVE BLE 5$ ;IF ZERO, BRANCH 4$: MOVB (R3)+,(R0)+ ;PUT IN WHAT WE HAVE SOB R4,4$ 5$: SETL ;SET LONG INTEGER MODE LDCLF (SP)+,AC0 ;CONVERT THE NUMBER SETI ;BACK TO INTEGER MODE JSR PC,@#NSTORE ;STORE THE RESULT ADD #12,SP ;GET RID OF REST ON STACK RTS PC ;RETURN END: .END