.TITLE NMUNG .GLOBL NMUNG ;CALL NMUNG(INSTRG,OUTSTRG,LETR) CONVERT SYMBOLS TO LEGAL ;RAD50. 6 CHARS IN/OUT ; FORMAT OF OUTPUT SYMBOL NAME: ; SAME AS INPUT, BLANK FILLED, IF STARTS WITH ALPHA ; $ IF SYMBL STARTS WITH @ (FORTRAN LINE #) ; .[] IF SYMBOL IS PURE NUMERIC. IS ; POSTFIXED IF NUMBER IS 4 OR FEWER DIGITS LONG. DOTFLG: .WORD 0 ;NONZERO IF SYMBOL WAS PURE NUMERIC. LETR: .WORD 0 ;TEMPLATE LETTER NMUNG: MOV 2(R5),R0 ;INPUT ADDRESS MOV 4(R5),R1 ;OUT ADDR MOV @6(R5),LETR ;SAVE LETTER FOR ISN'S CLR DOTFLG ;NOT PURE NUMERIC YET MOV R1,R2 MOV #6,R5 ;COUNT INPUT SIZE MOV R5,R4 ;AND OUTPUT SIZE CLR -(SP) ;FLAG NO ALPHA YET 10$: MOVB (R0)+,R3 ;TRASH LEADING BLANKS CMPB R3,#40 ;OK? BLOS 1$ ;NO,BR TST @SP ;ANY ALPHA YET? BNE 101$ ;YES, OK TO GO ON CMPB R3,#100 ;ATSIGN? BNE 100$ MOVB LETR,(R2)+ ;YES, FILL IN LEADING LETTER DEC R4 ;AND COUNT DOWN MOVB #'$,R3 ;YES, TURN INTO $ (LEGAL RAD50) 100$: CMPB R3,#'. ;DOT IS OK BEQ 102$ ;SO SKIP ERROR STUFF CMPB R3,#'$ ;DOLLAR IS OK TOO BEQ 102$ CMPB R3,#'A ;ALPHA START SYMBOL? BHIS 102$ ;YES, ALL WELL ;NON-ALPHA SYMBOL START...SCREWUP. MOVB #'.,(R2)+ ;SO FILL IN . FIRST (A LA F4P LISTING) INC DOTFLG ;SAY SYMBOL WAS A NUMERIC DEC R4 ;COUNT DOWN INPUTS INC @SP ;AND FLAG WE HAVE ALPHA 102$: 101$: INC @SP ;FLAG ALPHA MOVB R3,(R2)+ ;FILL IN OUTPUT DEC R4 ;COUNT OUTPUTS BLE 20$ ;IF NO MORE ROOM, ESCAPE NOW! 1$: DEC R5 ;LESS INPUT BGT 10$ ;DO ALL INPUTS TST R4 ;ANY OUTPUT TO FILL UP? BEQ 20$ ;IF NO, SKIP TST DOTFLG ;WAS THIS A STATEMENT NUMBER (PURE NUMERIC) BEQ 3$ ;NO, DO THE USUAL BLANKFILL MOVB LETR,(R2)+ ;FILL IN A POSTFIX UNIQUE LETTER DEC R4 ;COUNT DOWN SPACES TO ADD BLE 20$ ;AND SKIP OUT IF NOW DONE. 3$: MOVB #40,(R2)+ ;FILL IN TRAILING SPACES IF NEEDED. DEC R4 BGT 3$ 20$: TST (SP)+ RTS PC .END