.TITLE DIRTRL - OUTPUT DIRECTORY TRAILING MESSAGES .IDENT /21DEC81/ .ENABLE GBL ; ;+ ;***** ; ; DIRTRL.MAC - .DRTR1 AND .DRTR2 SUBROUTINES TO OUTPUT TRAILING ; MESSAGES TO LISTING DEVICE ; ; .DRTR1 - OUTPUTS USED/ALLOCATED BLOCK COUNTS FOR INDIVIDUAL UFD ; ; .DRTR2 - OUTPUTS GRAND TOTALS FOR MULTIPLE UFD LISTINGS ; ; CALLING REQUIREMENTS/RESTRICTIONS ; ; R0-R4 ASSUMED FREE - NEITHER SAVED NOR RESTORED ; DOUBLE PRECISION DATA BLOCKS CONTAINING # BLOCKS USED/ALLOCATED, ETC. ; MUST BE IN A SPECIFIC ORDER IN "DIRATA.MAC" MODULE ; ; REGISTER USAGE: ; R0 POINTS TO BUFFER TO HOLD ULTIMATE LINE OF OUTPUT ; R1 POINTS TO DOUBLE PRECISION INTEGER VARIABLE TO CONVERT AND PLACE ; IN TRAILING MESSAGE -- DESTROYED BY CONVERSION ROUTINE ; R2 USED ; R3 POINTS TO MESSAGE DATA BLOCK CONTAINING TEXT OF TRAILING MESSAGE, ; A SINGLE NULL ENTRY INDICATES A SUBSTITUTION POINT (E.G. ; CONVERT # AND PUT IT IN STRING), A DOUBLE NULL ENTRY INDICATES ; END OF MESSAGE TEXT ; R4 POINTS TO DOUBLE PRECISION INTEGER LIST TO CONVERT ; ; PAUL SORENSON ; PULMONARY RESEARCH ; S3, MAYO CLINIC ; ROCHESTER, MN 55904 ; ;***** ; ; UPDATE 12/21/81 -- PRS; ORIGINAL UPDATE ; ; UPDATE 4/11/82 -- PRS; CHANGE SWITCH MASK DEFINITIONS TO REFLECT NEW ; LISTING OPTIONS ; ;***** ;- ; .NLIST BEX .PSECT $PDATA,D,RO,LCL,CON,REL .ENABL LC ; ; TRAILING MESSAGE DATA ; TMSG1: .ASCIZ / ** Total of / ; SINGLE NULLS SIGNAL PROGRAM TO INSERT .ASCIZ &./& ; APPROPRIATE DATA .ASCIZ /. Blocks in / .ASCIZ /. Files/ .BYTE 0 ; DOUBLE NULL IN MESSAGE DATA SIGNALS END ; OF MESSAGE TEXT .EVEN TMSG2: .ASCIZ / ** Grand total of / ;SINGLE NULLS SIGNAL PROGRAM TO INSERT .ASCIZ $./$ ; APPROPRIATE DATA .ASCIZ /. Blocks in / .ASCIZ /. Files and / .ASCIZ /. Directories/ .BYTE 0 ; DOUBLE NULL IN MESSAGE DATA SIGNALS END ; OF MESSAGE TEXT .EVEN .DSABL LC .PSECT $CODE1,I,RO,LCL,CON,REL .DRTR1:: ;ENTRY POINT FOR INDIVIDUAL UFD MESSAGE MOV #TMSG1,R3 ;FETCH START ADDRESS OF TRAILING MESSAGE DATA MOV #$TBLKU,R4 ;FETCH ADDRESS OF 1ST OF 3 DOUBLE PRECISION ; VARIABLES TO BE PLACED IN MESSAGE, ORDER OF ; VARIABLES IN .PSECT IS IMPORTANT !!! BR COMMON ;BRANCH TO COMMON PROCESS .DRTR2:: ;ENTRY POINT FOR GRAND TOTALS MESSAGE MOV #TMSG2,R3 ;FETCH START ADDRESS OF TRAILING MESSAGE DATA MOV #$GTBU,R4 ;FETCH ADDRESS OF 1ST OF 4 DOUBLE PRECISION ; VARIABLES TO BE PLACED IN MESSSAGE COMMON: ; COMMON PROCESSING SECTION BIT #FUSW!MISW,SWMSK$ ;CHECK LISTING SWITCHES THAT ; READ HEADERS BEQ EXIT ;HEADERS NOT READ, NO TRAILING MESSAGE BIT #LISW,SWMSK$ ;LISTING OF FILES SELECTED ? BNE 1$ ;BRANCH IF YES BIT #DESW!PUSW,SWMSK$ ;WAS IT A DELETE/PURGE WITH NO LIST ? BNE EXIT ;BRANCH IF YES-SKIP TRAILING MESSAGE ;DIRECTORY WITH NO LIST-JUST SHOW FILE TOTALS 1$: MOV #LINBUF,R0 ;FETCH START ADDRESS OF BUFFER FOR BUILDING ; THE TRAILING MESSAGE MOV R0,LSTFDB+F.NRBD+2 ;SAVE IT AS NEXT RECORD POINTER CALL .DRPUT ;PUT NULL RECORD FOR SPACING 5$: MOVB (R3)+,(R0)+ ;MOVE MESSAGE DATA TO OUTPUT BUFFER BNE 5$ ; CONTINUE TO FIRST NULL DEC R0 ;BACK UP OUTPUT POINTER OVER NULL TSTB (R3) ;CHECK NEXT CHARACTER IN MESSAGE DATA BLOCK ; FOR NULL = END OF MESSAGE BEQ ENDUP ;BRANCH IF NULL, DONE MOV R4,R1 ;SETUP ADDRESS OF # TO CONVERT CLR R2 ;CLEAR R2=ENABLE ZERO SUPPRESSION CALL $CDDMG ;CONVERT DOUBLE PRECISION TO ASCII ; PLACING RESULT IN OUTPUT BUFFER ADD #4,R4 ;STEP R4 POINTER TO NEXT # TO CONVERT BR 5$ ;CONTINUE TIL DONE ENDUP: CALL .DRPUT ;OUTPUT RECORD CALL .DRPUT ; AND OUTPUT NULL LINE FOR SPACING EXIT: RETURN ;AND EXIT .END ;.DRTRX