.TITLE SRDLST-LIST THE DIRECTORY .IDENT /V5.1/ ; UPDATE AUDIT CONTROL-13 NOV 1979 12:08:30 ; EDIT # 0070 24 Mar 1981 14:36:48 DR0:[300,57]SRDLST.MAC;122 ; PREVIOUS EDIT 24 Mar 1981 14:35:14 DR0:[300,57]SRDLST.MAC;121 ;+ ;**-1 ; ;**SRD--SORT DIRECTORY ; ;THIS MODULE CREATS A SELECTIVE LISTING OF THE FILE ; ; ; THIS TASK WILL SORT A RSX11 DIRECTORY ;THEN CREATE A LISTING WITH MANY SELECTION OPTIONS ;**-1 ; ;THIS IS THE MAIN ROUTINE, AND IS PURE. ; ; ;- ; ;SYSTEM MACRO CALLS ; .MCALL FHDOF$,CALLR,DIR$,QIO$S,WTSE$S,PUT$S,GCMLD$ .MCALL QIOW$S FHDOF$ DEF$L GCMLD$ DTSTR: .BYTE 40,2,'-,3,'-,2,' ,2,':,2,':,2,' ,0 .EVEN ;**-4 FUTABL: .BYTE H.UFAT+F.EFBK+2 ;FCS'S END OF FILE .BYTE 12.,40,40 ;SIZE,LEADING CHAR,TRAILING CHAR .WORD SIZECV ;CONVERTION ROUTINE .BYTE H.PROG,10.,'[,'] .WORD UICCV ;OWNER UIC CONVERSTION .BYTE H.FNUM,16.,'(,') ;FILE NUMBER .WORD FIDCV .BYTE H.FPRO,22.,'[,'] .WORD FPROCV .WORD 0 ;END OF TABLE ; FPSTR: .ASCIZ /RWED/ CRMSG: .BYTE 15 .EVEN .PAGE ;;;;;;;;;;;; PRINT OUT GRAND TOTALS ************* SRDGTT:: BIT #NHSW,SWMS1$ ; NEVER LIST HEADERS BNE 21$ MOV #FILMSG,R0 ; LIST OUT FILE COUNTS MOV GNUMFS,R1 MOV #33012,R2 CALL $CBTA MOV #FTMSG,R0 MOV GNUMFT,R1 MOV #33012,R2 CALL $CBTA BIT #SDSW,SWMSK$ ; ENSURE AT LEFT MARGIN BEQ 19$ QIOW$S #IO.WVB,#1,#17.,,,,<#CRMSG,#1> 19$: PUT$S #LSTFDB,#GTMSG,#GTMSGL PUT$S #LSTFDB,#FILMSG,#FMLEN ; SHOW SELECTED BLOCKS USED/ALLOCATED BIT #NHSW,SWMS1$ ; NEVER LIST HEADERS BNE 21$ BIT #FOSW,SWMS1$ BNE 20$ BIT #,SWMSK$ ; WERE HEADERS READ ? BEQ 21$ ; NO 20$: MOV #SBAREA,R0 MOV #GTBLKU,R1 CLR R2 CALL $CDDMG MOVB #'.,(R0)+ MOVB #'/,(R0)+ MOV #GTBLKA,R1 CLR R2 CALL $CDDMG MOVB #'.,(R0)+ MOV R0,R2 SUB #SBMSG,R2 PUT$S #LSTFDB,#SBMSG,R2 21$: MOV #LINBUF,LSTFDB+F.NRBD+2 2$: RETURN .PAGE ; ;DIRECTORY IS SORTED,NOW GENERATE LISTING SRDLST:: MOV #LINBUF,LSTFDB+F.NRBD+2 MOV DIRBF$,R5 ;SET START OF DIRECTORY BUFFER UNPACK: TST (R5) ;ANY THING REMAINING TO UN-PACK? BNE UNP1 ;CONTINUE BIT #NHSW,SWMS1$ ; NEVER LIST HEADERS BNE 21$ MOV #FILMSG,R0 ; LIST OUT FILE COUNTS MOV NUMFS,R1 BNE 1$ ; DON'T SHOW ZERO SELECTED IF WILDCARD UIC TST NXUIC$ BNE 2$ 1$: MOV #33012,R2 CALL $CBTA MOV #FTMSG,R0 MOV NUMFT,R1 MOV #33012,R2 CALL $CBTA TST UFDFDB+F.BDB ; IS DIRECTORY STILL OPEN ??? BNE 21$ ; YES--DON'T PRINT TOTALS YET BIT #SDSW,SWMSK$ ; ENSURE AT LEFT MARGIN BEQ 19$ QIOW$S #IO.WVB,#1,#17.,,,,<#CRMSG,#1> 19$: PUT$S #LSTFDB,#FILMSG,#FMLEN ; SHOW SELECTED BLOCKS USED/ALLOCATED BIT #NHSW,SWMS1$ ; NEVER LIST HEADERS BNE 21$ BIT #FOSW,SWMS1$ BNE 20$ BIT #,SWMSK$ ; WERE HEADERS READ ? BEQ 21$ ; NO 20$: MOV #SBAREA,R0 MOV #TBLKU,R1 CLR R2 CALL $CDDMG MOVB #'.,(R0)+ MOVB #'/,(R0)+ MOV #TBLKA,R1 CLR R2 CALL $CDDMG MOVB #'.,(R0)+ MOV R0,R2 SUB #SBMSG,R2 PUT$S #LSTFDB,#SBMSG,R2 21$: MOV #LINBUF,LSTFDB+F.NRBD+2 2$: RETURN .ENABL LSB UNP1: INC NUMFT MOV R5,READHD+Q.IOPL ;SET FILE ID POINTER INCASE HEADER IS NEEDE ;**-11 MOV LSTFDB+F.NRBD+2,R0 ;SET TO POINT AT START OF REC ADD #D.FNAM,R5 ;POINT AT FILE-NAME PORTION BIT #SVSW,SWMSK$ ;ONLY 1 VERSION WANTED? BEQ CVAS ;BR IF NO TST SVNUM$ ;EXPLICIT ONE BNE 10$ ;YES MOV #-D.SIZ,R3 ;BACK UP 1 ENTRY 2$: ADD R5,R3 ;COPY CURRENT NAME MOV R5,R1 ;GET CURRENT AGAIN ;**-2 MOV #4,R2 ;SIZE OF NAME 5$: CMP (R3)+,(R1)+ ;NAMES THE SAME? BNE CVAS ;BR IF NO-LIST IT SOB R2,5$ ;DO ALL 4 7$: ADD #,R5 ;SAME NAME-FORGET IT! UNPK0: JMP UNPACK ;TRY NEXT 10$: MOV SVNUM$,R1 ;GET VERSION TO SELECT CMP R1,#-1 ; OLDEST VERSION ??? BEQ 12$ ; YES CMP (R5),R1 ;VERSION CORRECT ? BNE 7$ ;BR IF NO-TRY NEXT BR CVAS 12$: MOV #D.SIZ,R3 BR 2$ .DSABL LSB ; CVAS: MOV #3,R3 ;NUMBER OF WORDS IN NAME 20$: MOV (R5)+,R1 ;GET A RADIX-50 WORD CALL $C5TA ;CONVERT TO ASCII DEC R3 ;COUNT NUMBER OF ENTRIES DONE BGT 20$ ;BR IF STILL DOING NAME BMI 30$ ;BR IF JUST DID TYPE MOVB #'.,(R0)+ ;SEPARATE NAME AND TYPE BR 20$ ;---AND DO TYPE 30$: MOVB #';,(R0)+ ;SEPARATE TYPE AND VERSION MOV (R5)+,R1 ;NOW GET VERSION CLR R2 ;SET ZERO SUPPRESS FLAG CALL $CBOMG ;CONVERT TO ASCII BIT #SESW,SWMSK$ ;IS THIS A SELECTIVE LIST? BEQ CKDATE ;BR IF NO-CK FOR DATE SELECTION MOV #SEBUF$,R2 ;SET SELECTION STRING ADDRESS MOV LSTFDB+F.NRBD+2,R1 ;SET START OF NAME CALL MATCH ;++002 BCC FOUND ;++002 SUCESS IN EVERY ( WELL NEARLY ) ;++002 ... PACKET. FAILED: BIT #NESW,SWMSK$ ;++002 NEGATED TESTS ? BNE CKDATE ;++002 YES JMP UNPACK ;++002 NO, GET NEXT F-S TO TRY FOUND: BIT #NESW,SWMSK$ ;++002 NEGATED TESTS ? BEQ CKDATE ;++002 NO JMP UNPACK ;++002 YES .PAGE CKDATE: BIT #FOSW,SWMS1$ ; BY FILE OWNER AS WELL?? BNE 10$ ; YES BIT #,SWMSK$ ;FULL LISTING, OR DATE SELECT? BEQ LSTENT ;BR IF NO 10$: CLR HDBUF$ ;ZERO THIS WORD FOR FCP ;**-4 DIR$ #READHD ;READ THE FILE HEADER BCC 20$ CALL $ALERR BR 10$ 20$: WTSE$S #EFN1 CMPB IOSB$,#IS.SUC ; OKAY? BEQ HROK CMPB IOSB$,#IE.SQC ; FILE ID/SEQ NUMBER CHECK BNE 25$ DIAG SQCHK BR 40$ 25$: CMPB IOSB$,#IE.PRI ; PRIV BEQ 30$ DIAG HDRE ; SOME OTHER ERROR BR 40$ 30$: DIAG HDPRV 40$: CALL PUTLST JMP UNPACK UNPK2: JMP UNPACK HROK: MOVB HDBUF$,R1 ;GET OFFSET TO IDENT AREA IN HEADER ASL R1 ;MAKE AWORD OFFSET ; CHECK FILE OWNER VS /FO:GRP:MEM SWITCH ; A ZERO IN THE SWITCH VALUE MEANS WILDCARD THERE TST FOSGRP BEQ 5$ CMPB FOSGRP,HDBUF$+H.PROJ BNE UNPK2 ; GROUP DOESN'T MATCH 5$: TST FOSMEM BEQ 6$ CMPB FOSMEM,HDBUF$+H.PROG BNE UNPK2 ; MEMBER DOESN'T MATCH 6$: ; FOR DATE SELECT, USE REVISION DATE (IF EVER REVISED), OR ; CREATION DATE (IF NEVER REVISED). THIS ADDR IN R1. ; ALWAYS POINT R3 TO CREATION DATE: ADD #HDBUF$,R1 ; POINT AT IDENT AREA MOV R1,R3 ; POINT TO CREATION DATE ADD #I.CRDT,R3 BIT #RDSW,SWMS1$ ; USE REVISION DATE ?? BEQ 1$ ; NO !!!! TST I.RVNO(R1) ; EVER REVISED ?? BEQ 1$ ; NO--USE CREATION DATE ADD #,R1 ; YES--USE REVISION DATE 1$: ADD #,R1 BIT #DASW,SWMSK$ ;DOING DATESELCTION? BEQ LSTENT ;NO-LIST IT MOV R0,-(SP) CALL CNVDAT ;CONVERT DATE TO INTEGER MOV (SP)+,R0 TST R2 BEQ LSTENT ; BAD DATE FORMAT ; FOR DATE SELECTION, SEE IF THE FILE'S DATE IS AFTER THE AFTER-DATE, ; AND BEFORE THE BEFORE-DATE------INCLUSIVE OF THE END POINTS. CMP BEVAL$,R2 BLO UNPK2 CMP AFVAL$,R2 BHI UNPK2 .PAGE .ENABLE LSB ;**-25 LSTENT: BIT #HDSW,SWMSK$ ;HAS HEADER BEEN LISTED? BNE LSTE1 ;BR IF YES BIS #,SWMSK$ ;FLAG AS PRINTED BIT #NHSW,SWMS1$ ; NO HEADER SPECIFIED ? BNE LSTE1 ; RIGHT SUB #D.SIZ,R5 ;BACK UP TO DO THIS 1 AGAIN DEC NUMFT MOV LSTFDB+F.NRBD+2,R0 ;RESET POINTER TO TOP OF BUFFER TST NXUIC$ ; WILDCARD UIC??? BNE 1$ ; YES BITB #FD.SPL,LSTFDB+F.BKP1 ; IS OUTPUT AUTO-SPOOLED ? BNE 1$ ; BR IF YES BIT #SPSW,SWMSK$ ;LISTING BEING SPOOLED ? BEQ 4$ ;NO 1$: CALL PUTLST CALL PUTLST 4$: MOV #" *,(R0)+ ;FLAG NEW ENTRY ;**-5 MOV #"* ,(R0)+ ;THAT MAKES LISTING EASIER TO READ MOV ,(R0)+ ;COPY THE DEVICE NAME MOV ,R1 ;GET THE UNIT NUMBER ASR R1 ;DIV BY 10(8) ASR R1 ;... ASR R1 ;... BEQ 6$ ;BR IF UNIT # < 10(8) ADD #'0,R1 ;TURN IT INTO ASCII MOVB R1,(R0)+ ;PUT IT IN O/P BUFFER 6$: MOV ,R1 ;GET IT AGAIN BIC #^C<7>,R1 ;MAKE IT 0-7 ADD #'0,R1 ;TURN IT INTO ASCII MOVB R1,(R0)+ ;PUT IN O/P BUFFER MOVB #':,(R0)+ ;PLANT USUAL DELIMITER MOVB #'[,(R0)+ ;SET UIC DELIMITER MOV UFDFDB+F.FNAM,R1 ;GET DIRECTORY NAME CALL 20$ ;CONVERT GROUP NAME TO ENGLISH MOVB #',,(R0)+ ;SEPARATE GROUP & USER MOV UFDFDB+F.FNAM+2,R1 ;GET OTHER HALF OF NAME CALL 20$ ;CONVERT PROGRAMMER NUMBER MOVB #'],(R0)+ ;TERMINATE UIC MOVB #' ,(R0)+ ;SEPARATE MOV #DATIM$,R1 ;POINT AT DATE & TIME 10$: MOVB (R1)+,(R0)+ ;FILL IN DATE CMP R1,# ;FINISH DATE? BLO 10$ ;BR IF NO CALL PUTLS1 ;PRINT THAT ; PUT COMMAND LINE TST CMDBLK+G.CMLD BEQ 15$ PUT$S #LSTFDB,CMDBLK+G.CMLD+2,CMDBLK+G.CMLD MOV #LINBUF,LSTFDB+F.NRBD+2 MOV #LINBUF,R0 ; **** GIVE MSG IF WE HAVE TO DO IT IN PIECES**** 15$: TST UFDFDB+F.BDB ; IS DIRECTORY OPEN??? BEQ 11$ ; NO DIAG 0 ; YES--PUT MESSAGE 11$: JMP UNPACK ;DO FILE LISTING AGAIN 20$: MOV R0,-(SP) ;SAVE START POINT ;**-4 CALL $C5TA ;CHANGE TO ENGLISH MOV (SP)+,R2 ;GET TOP OF LIST DEC R0 ;BACK UP TO LAST CHAR IN STRING 30$: CMPB R2,R0 ;ALL DONE? BHIS 50$ ;BR IF DONE CMPB #'0,(R2) ;LEADING ZERO? BNE 50$ ;BR IF NO MOVB 1(R2),(R2) ;MOVE UP STRING MOVB 2(R2),1(R2) ;... DEC R0 ;SHORTEN STRING BR 30$ ;TRY FOR MORE 50$: INC R0 ;RESET POINTER PAST STRING RETURN .DSABL LSB .PAGE LSTE1: INC NUMFS ; ACCUM TOTAL BLOCKS USED/ALLOCATED MOV #HDBUF$+H.UFAT,R4 ; ADDR OF USER ATTRIBUTES ADD F.HIBK+2(R4),TBLKA+2 ; ALLOC ADC TBLKA ADD F.HIBK(R4),TBLKA MOV F.EFBK+2(R4),R1 ; USED BEQ 1$ TST F.FFBY(R4) ; 1ST FREE BYTE = 0? BNE 1$ DEC R1 ; YES--DON'T COUNT THE BLOCK 1$: ADD R1,TBLKU+2 ADC TBLKU BIT #LISW,SWMSK$ ; JUMP OUT IF LISTING NOT WANTED BEQ PUT1A BIT #,SWMSK$ ;FULL LISTING BEQ 60$ ;BR IF NO MOV LSTFDB+F.NRBD+2,R1;START OF LINE BUF ADD #20.,R1 ;POINT AT END OF NAME FIELD CALL PUTDTM ; INSERT DATE AND TIME BIT #FUSW,SWMSK$ ;REALLY BIG LISTING BEQ 51$ ;LIST THAT MUCH MOV #FUTABL,R3 ;FORMAT TABLE ADDRESS 10$: MOVB (R3)+,R4 ;PICK UP NEXT OFFSET BEQ 51$ ;BR WHEN END ADD #HDBUF$,R4 ;ADJ FOR ADDRESS OF BUFFER ;**-21 MOVB (R3)+,R1 ;PICK UP SIZE OF FIELD 20$: MOV R1,R2 ;COPY THAT ADD R0,R2 ;FIND HOW BIG THE LINE WILL BE MOV LINSZ$,-(SP) ;PUSH MAX SIZE OF RECORD ADD LSTFDB+F.NRBD+2,(SP) ;ADD IN START OF RECORD CMP R2,(SP)+ ;WILL IT GET TOO BIG? BLOS 30$ ;BR IF NO CALL PUTLST ;WRITE IT OUT MOV (PC)+,(R0)+ ;INSERT SOME SPACE .BYTE 40,40 ;2 SPACES BR 20$ ;TRY AGAIN 30$: MOV R2,-(SP) ;PUSH END OF BUFFER MOVB (R3)+,(R0)+ ;INSERT LEADING CHAR BNE 40$ ;BR IF NOT A NULL DEC R0 ;BACK UP OVER NULL 40$: MOVB (R3)+,-(SP) ;SAVE TRAILING CHAR FOR LATER MOV (R4)+,R1 ;PICK UP 16 BIT ARG CALL @(R3)+ ;DISPATCH TO ROUTINE MOVB (SP)+,(R0)+ ;COPY TRAILING CHAR MOV (SP)+,R1 ;GET END OF FIELD ADDRESS 50$: CMP R0,R1 ;IS RECORD UP TO END OF FIELD BHIS 10$ ;BR WHEN FIELD IS FULL MOVB #40,(R0)+ ;SPACE FILL BR 50$ ;TRY AGAIN ;;;; PRINT REVISION DATE & TIME 51$: MOVB HDBUF$,R3 ASL R3 ADD #HDBUF$,R3 MOV I.RVNO(R3),R4 BEQ 60$ ; NEVER REVISED, FORGET IT ADD #I.RVDT,R3 CALL PUTDTM CMP R4,#1 ; SHOW REV COUNT IF > 1 BEQ 60$ MOV R4,R1 CLR R2 MOVB #'(,(R0)+ CALL $CBDMG MOVB #'.,(R0)+ MOVB #'),(R0)+ 60$: .ENABL LSB PUT1: BIT #SDSW,SWMSK$ ;++003 SELECTIVE DELETE ? BNE 1$ ;++003 YES, LIST USING READ-WITH-PROMPT ;**-3 CALL PUTLST ;OUTPUT THE LINE PUT1A: BIT #DESW,SWMSK$ ;DELETE ? BNE 5$ ;YES - GO DO IT BR UNPK1 ;++003 NO - GO GET NEXT ONE 1$: MOV LSTFDB+F.NRBD+2,R2 ;++003 LOCATE FILE-SPEC FOR O-P SUB R2,R0 ;++003 CALC. LENGTH MOV #PRMPT,R1 ;++003 INITIALIZE PROMPT BUFFER MOV (PC)+,(R1)+ ;++003 .BYTE 15,12 ;++003 PROMPT ON NEW LINE 100$: MOVB (R2)+,(R1)+ ;++003 COPY PROMPT SOB R0,100$ ;++003 TILL END MOVB #' ,(R1)+ ;++003 POP THE QUESTION MOVB #'?,(R1)+ ;++003 MOVB #' ,(R1)+ ;++003 SUB #PRMPT,R1 ;++003 CALC LENGTH CLRB LINBUF ;ERASE ANY PREVIOUS YES'S QIOW$S #IO.RPR,#1,#17.,,#IOSB$,,<#LINBUF,#1,,#PRMPT,R1,#0> MOV LSTFDB+F.NRBD+2,R0 ;++003 TSTB IOSB$ ;ANY ERR-MUST BE EOF BGT 3$ ;BR IF NO ERR RETURN ;*** EXIT THIS RUN ### 3$: CMPB #'Y,LINBUF ;ANSWER YES BEQ 5$ ;YES CMPB #'Y!40,LINBUF ;NO, LOWER-CASE PERHAPS ? BNE UNPK1 5$: MOV R5,R0 ;COPY PLACE IN DIRECTORY BUFFER MOV #UFDFDB+F.FNB+N.FVER+2,R1 ;POINT AT FILE NAME BLOCK END MOV #8.,R2 ;SET NUMBER OF WORDS IN DIRECTORY ENTRY 10$: MOV -(R0),-(R1) ;COPY THE DATA SOB R2,10$ ;DO ALL MOV #UFDFDB,R0 ;POINT AT FDB PROPER MOV SAVDID,F.FNB+N.DID(R0) ;RESTORE MOV SAVDID+2,F.FNB+N.DID+2(R0) ;DIRECTORY ID MOV SAVUNM,F.FNB+N.UNIT(R0) ;DEVICE UNIT NUMBER MOV SAVDVN,F.FNB+N.DVNM(R0) ;---AND FINALLY NAME CALL .DLFNB BCC UNPK1 ;BR IF DELETE WORKED DIAG FDEL ;ISSUE DIAGNOSTIC MESSAGE UNPK1: JMP UNPACK ;DO THE NEXT .DSABL LSB .PAGE PUTDTM: MOV #DTSTR,R2 ;DATE-TIME FORMAT STRING 2$: MOVB (R2),(R0)+ ;SPACE FILL CMP R0,R1 ;FULL? BLO 2$ ;BR WHEN FIELD NOT FULL MOVB (R2)+,(R0)+ ;ONE MORE 4$: MOVB (R2)+,R1 ;GET NEXT SIZE BEQ 8$ 6$: MOVB (R3)+,(R0)+ ;COPY DATE SOB R1,6$ ;COUNT FIELD MOVB (R2)+,(R0)+ ;TERMINATOR BR 4$ 8$: RETURN SIZECV: ;**-2 CLR R2 ;SET ZERO SUPPRESS FLAG TST -2>(R4) ;FIRST FREE BYTE 0 ? BNE 10$ ;NO, PROCEED TST R1 BEQ 10$ DEC R1 ;YES, DON'T COUNT THIS BLOCK 10$: CALL $CBDMG ;CONVERT TO ASCII MOV >(R4),R1 ;GET HIEST ALLOCATED MOVB #'.,(R0)+ ;SHOW THAT # IS DECIMAL MOVB #'/,(R0)+ ;INSERT A SEPARTOR CLR R2 ;ZERO SUPPRESS CALL $CBDMG ;CONVERT MOVB #'.,(R0)+ ;ADD THE DECIMAL INDICATOR RETURN ;AND RETURN ; UICCV: MOV R1,-(SP) ;SAVE UIC CLRB R1 ;REMOVE PROGRAMMER NUMBER SWAB R1 ;GET PROGECT INTO LO BYTE CLR R2 ;SUPPRESS ZERO'S CALL $CBOMG ;CONVERT THAT MUCH CLR R1 ;GET READY FOR UNSIGNED--- BISB (SP)+,R1 ; MOVE BYTE OF PROGRAMMER NUMBER CLR R2 ;ZERO SUPPRESS MOVB #',,(R0)+ ;SEPARATE WITH COMMA CALLR $CBOMG ;COVERT FOR OUTPUT ; FIDCV: CLR R2 ;SUPPRESS ZEROS CALL $CBOMG ;CONVERT TO OCTAL MOVB #',,(R0)+ ;SEPARATE MOV (R4),R1 ;GET SEQ NUMBER CLR R2 ;ZERO SUPRESS AGAIN CALLR $CBOMG ;CONVERT THAT ; FPROCV: MOV #4,R2 ;NUMBER OF FILELDS TO CONVERT 10$: MOV #FPSTR,R3 ;FORMAT STRING 20$: ASR R1 ;MOVE 1 BIT INTO C BCS 30$ ;BR IF NOT ACTIVE MOVB (R3),(R0)+ ;INSERT A DESRIPTOR CHAR 30$: INC R3 ;ADJ FORMAT STRING TSTB (R3) ;END OF LIST BNE 20$ ;BR IF NO MOVB #',,(R0)+ ;INSERT A SEPARATOR SOB R2,10$ ;LOOP? DEC R0 ;NO-BACK UP OVER LAST COMMA RETURN ; ;PUTLST---PUT A RECORD INTO LISTING FILE ; PUTLST: SUB #2,LSTFDB+F.NRBD+2 ; 2 LEADING SPACES PUTLS1: SUB LSTFDB+F.NRBD+2,R0 ;FIND LENGTH OF LINE MOV R0,LSTFDB+F.NRBD ;SET LENGTH INTO FDB PUT$S #LSTFDB ;WRITE THE LINE MOV #LINBUF,LSTFDB+F.NRBD+2 BCC 10$ FERR PUTE ;???CAN'T DO PUT??? 10$: MOV #LINBUF,R0 ;GET RECORD BUFFER RETURN ;**-6 .END