.TITLE CRUTAB .IDENT /X01.00/ ; ; AUTHOR: GILBERT J. DELEEUW ; DATE: MAY 3, 1984 ; NAME: CRUTAB - COMPRESS SPACES TO TABS ; FUNCTION: CONVERT SPACES TO TABS ; ; ; PARAMETERS: ; ; R2 - SIZE OF INPUT RECORD ; R3 - ADDRESS OF INPUT RECORD ; ; ; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = CRUTAB:: TST R2 ;TEST LENGTH OF STRING BEQ 70$ ;ZERO LENGTH RECORD ; ; INITIALIZE REGISTERS CLR R0 ;CLEAR SPACE COUNT MOV R3,-(SP) ;STORE BUFFER ADDRESS CLR R4 ;ZERO LINE LOCATION MOV R3,R5 ;ADDRESS FOR OUTPUT ; ; GET NEXT INPUT CHARACTER 10$: MOVB (R3)+,R1 ;GET CHARACTER ; ; IS CHARACTER A SPACE? CMPB #' ,R1 ;SPACE? BNE 15$ INC R0 ;INCREMENT NUMBER OF SPACES INC R4 ;INCREMENT VIRTUAL LOCATION BIT #7,R4 ;TAB STOP? BNE 45$ CMP #1,R0 ;DO NOT SUBSTITUTE FOR SINGLE CHAR BEQ 40$ ; MOVB #11,R1 ;SUBSTITUTE TAB CHARACTER BR 40$ ;MOVE CHARACTER ; 15$: CMPB #11,R1 ;TAB? BNE 20$ ; ADD #10,R4 ;ADD 8 BIC #7,R4 ;TRUNCATE TO PRIOR TAB STOP BR 40$ ; ; 20$: CMPB #10,R1 ;BACK SPACE? BNE 25$ DEC R4 ;BACK UP VIRTUAL LOCATION BR 40$ ; ; ; INSERT ANY DEFERRED SPACES 25$: TST R0 ;DEFERRED SPACES? BEQ 35$ ; 30$: MOVB #' ,(R5)+ ;MOVE IN SPACE SOB R0,30$ ; ; ; MOVE CHARACTER 35$: INC R4 ;NEXT POSITION 40$: MOVB R1,(R5)+ ;MOVE CHARACTER CLR R0 ;MAKE SURE SPACE COUNTER IS CLEAR ; ; LOOP COUNTER 45$: SOB R2,10$ ;LOOP MOV (SP)+,R3 ;ADDRESS OF STRING MOV R5,R2 ;COPY ADDRESS SUB R3,R2 ;SUBTRACT STARTING ADDRESS ; ; FINISHED 70$: RTS PC ;RETURN TO CALLER .END