; TABIT.SUB - CMD FILE TO ASM SUBROUTINE TABIT .OPEN TABIT.MAC .ENABLE DATA .NLIST MD,CND .TITLE TABIT .GLOBL TABIT .IDENT /VER1.0/ ; @SD@ TABIT ; SUBPRGM ID: TABIT ; PROGRAMMER: TSGT MARVIN L FREIMUND / ADLS ; CREATED ON: 29 JUL 78 FOR PROJECT 050540 ; ; DESCRIPTION: TABIT IS A MACRO-11 LANGUAGE SYSTEMS SUBROUTINE USED ON ; THE PDP-11 TO REPLACE TABS IN A TEXT LINE WITH THE PROPER NUM- ; BER OF SPACES. ; ; CALL FORMAT: CALL TABIT(BUFF,NCHR) ; ; WHERE... ; ; BUFF = THE NAME OF THE BUFFER CONTAINING THE TEXT LINE ; NCHR = CONSTANT OR INTEGER*2 VARIABLE NUMBER OF CHARAC- ; TERS INS THE BUFF ; ; SBPGMS USED: NONE ; ; @ED@ ; TABIT: MOV 2(R5),R0 ; R0 => NEXT INPUT CHAR MOV @4(R5),R4 ; (R4=NMBR CHARS) ADD R0,R4 ; R4 => END OF BUFF (+1) MOV R0,R1 ; R1 => CURRENT TAB STOP 1$: CMPB #11,(R0)+ ; WAS THAT A TAB? BNE 6$ ; NOPE DEC R0 ; YES, GO BACK TO IT. 2$: CMP R0,R1 ; NOW COMPUTE NEXT TAB STOP BLT 3$ ; THAT'S IT ADD #10,R1 ; UP TO NEXT STOP BR 2$ ; LOOK AGAIN 3$: MOV R1,R2 ; NEXT TAB STOP ... CMP R2,R4 ; IF THIS TAB IS BEYOND THE BUFFER END BGE 5$ ; THEN JUST BLANK TO THE END OF BUFFER SUB R0,R2 ; ... MINUS CURR POSN IS SKIP FACTOR MOV R4,R3 ; GET END OF BUFFER ADDRESS SUB R2,R3 ; AND BACK UP NMB SPACES (-1) INC R3 ; R3 => PLACE TO GET CHAR MOV R4,R2 ; R2 => PLACE TO PUT CHAR 4$: MOVB -(R3),-(R2) ; DECREMENT AND MOVE CHAR CMP R2,R1 ; HIT TAB YET? BNE 4$ ; NOPE 5$: MOVB #40,(R0)+ ; YES, MOVE BLNKS UP TO THE TAB CMP R0,R1 ; THERE YET? BLT 5$ ; NOPE, GO BACK AND REPT 6$: CMP R0,R4 ; CHECKED WHOLE BUFFER? BLT 1$ ; NOPE, GO LOOK SOME MORE RTS PC ; YES. DONE. RETURN TO CALLER .END .DISABLE DATA .CLOSE MAC TABIT,TABIT/-SP=TABIT .ASK Z WANT TO SPOOL LISTING .IFT Z PIP TABIT.LST/SP ; TABIT.SUB - FINISHED. ; TABIT.TST - CMD FILE TO TST SUBROUTINE TABIT .OPEN TABIT.DAT .ENABLE DATA THIS IS LINE ONE. IT HAS NO SPACES. IT IS SHORT THIS IS LINE TWO. TAB TAB TAB TABTAB THIS IS LINE THR. IT HAS NO TABS BUT IT IS A VERY LOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOONG LINE THIS IS LINE FOR. IT HAS A TAB BEFORE EVERY WORD IN IT. THIS IS THE END. .DISABLE DATA .CLOSE .OPEN TABITT.FTN .ENABLE DATA C TABITT - PROGRAM TO TEST SUBROUTINE TABIT C BYTE BUFF(72) CALL BEGIN OPEN (UNIT=1,NAME='TABIT.DAT',TYPE='OLD') OPEN (UNIT=2,NAME='TABIT.OUT',TYPE='NEW') 100 READ (1,1001,END=300) BUFF 200 WRITE (2,2002) (BUFF(I),I=1,72) CALL TABIT(BUFF,72) WRITE (2,2002) (BUFF(I),I=1,72) 210 WRITE (2,2102) GOTO 100 300 CLOSE (UNIT=1) CLOSE (UNIT=2) CALL QUIT 1001 FORMAT (72A1) 2002 FORMAT (1H ,72A1) 2102 FORMAT (1H ) END .DISABLE DATA .CLOSE F4P TABITT,TABITT/-SP=TABITT .ASK Z DO YOU WANT TO TASK BUILD .IFF Z .GOTO FIN .OPEN TABITT.BLD .ENABLE DATA TABITT/CP/FP,TABITT/-SP=TABITT,TABIT / LIBR=F4PRES:RO // .DISABLE DATA .CLOSE TKB @TABITT.BLD .ASK Z WANT TO SPOOL LISTINGS .IFT Z PIP TABITT.LST/SP,TABITT.BLD,TABITT.MAP .FIN: ;TABIT.TST - FINISHED.