.TITLE FMTQIO .IDENT /V7.01/ ;+ ; ; *** FM.QIO ; ; THIS ROUTINE TAKES A BINARY NUMBER (2 WORDS) AND FORMATS IT AS ; N,NNN,NNN. ; TO BE USED WITH ACCOUNTING SYSTEM VERSION 7. ; ; STEVE THOMPSON SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA NY 14853 ; ; INPUT: ; R0 BUFFER ADDRESS ; R1 ADDRESS OF 2-WORD BLOCK CONTAINING NUMBER. ; ; OUTPUT: ; R0 UPDATED ; R1,R2 USED ; R3,R4,R5 PRESERVED ; ; REVISION HISTORY ; ---------------- ; ; SMT821 23-APR-82 CHANGED ENTRY POINT NAMES OF ACCOUNTING ; SUPPORT ROUTINES (SEE MODIFY.TXT) ; ;- COMMA = ', ; COMMA BUF: .BLKB 12. ; FORMATTER WORKSPACE FM.QIO::JSR R5,$SAVRG ; SAVE R3,R4 AND R5 MOV R0,R5 ; COPY BUFFER POINTER MOV #BUF,R0 ; SET ADDRESS FOR INTERNAL FORMAT CLR R2 ; SET NO LEADING ZEROES CALL $CDDMG ; FORMAT AS DECIMAL WITHOUT COMMAS SUB #BUF,R0 ; CALCULATE NUMBER OF DIGITS MOV R0,R2 ; COPY IT DEC R0 ; REMOVE A DIGIT BEQ 10$ ; IF EQ ONLY ONE DIGIT (CAN SKIP DIVISION) MOV #3,R1 ; SET DIVISOR CALL $DIV ; DIVIDE INTO GROUPS 10$: MOV R0,-(SP) ; SAVE NUMBER OF COMMAS REQUIRED ASL R0 ; MULTIPLY BY THREE ADD (SP),R0 ; NEG R0 ; CALC. PLACES LEFT OF LEADING COMMA ADD R2,R0 ; MOV #BUF,R4 ; GET ADDRESS OF INTERNAL FORMATTED VERSION 15$: MOVB (R4)+,(R5)+ ; MOVE A LEADING DIGIT DEC R0 ; DONE YET? BNE 15$ ; IF NE NO, LOOP MOV (SP)+,R0 ; RESTORE NUMBER OF GROUPS OF 3 BEQ 30$ ; IF EQ THAT'S IT. 20$: MOVB #COMMA,(R5)+ ; PUT IN A COMMA MOVB (R4)+,(R5)+ ; THEN THREE DIGITS MOVB (R4)+,(R5)+ ; MOVB (R4)+,(R5)+ ; DEC R0 ; ANY MORE GROUPS TO MOVE? BNE 20$ ; IF NE YES, LOOP 30$: MOV R5,R0 ; RESTORE UPDATED BUFFER POINTER RETURN ; AND RETURN TO CALLER .END