;MSC:COUNT.MAC.107 25-Jun-84 LQ+4D.18H.13M.48S., by BUDNE ; PUT INPUT BUFFER AT 400K ;MSC:COUNT.MAC.104 29-May-84 LQ+6D.18H.9M.45S., by BUDNE ; LIST DISK PAGES (INSTEAD OF BLOCKS), HACK ^H ;MSC:COUNT.MAC.93 28-May-84 LQ+6D.17H.33M.54S., by BUDNE ; STAND ALONE; REQUIRES NO FORTRAN OUTPUT ROUTINE TITLE COUNT Hack Page Density SEARCH MACSYM, MONSYM, CMD ;Sorry Charlie .REQUI SYS:CMD, SYS:MACREL SALL ; WHAT ABOUT ^K ^S, /FORTRAN? JCL?? ;Stolen from PR ;version 3, file name,ext,structures. ;written by Charles R. Colbert,1979 TAB=="I"-100 LF=="J"-100 FF=="L"-100 CR=="M"-100 BS=="H"-100 PSIZE==^D66 ;PHYSICAL LINES ON A PAGE WIDTH==^D132 ;COMUMNS ON A PAGE TXTSIZ==PSIZE-4 ;PRINTED LINES ON A PAGE T1==1 T2==2 T3==3 P1==7 CNT==11 P==17 FTSIN==1 ;== 0 FOR BIN, <> 0 FOR SIN IBUFSZ==5*340K ;SIZE OF INPUT BUFFER IBUF=400K ;ADDRESS FOR INPUT BUFFER LPDL==50 BEGIN: JFCL RESET MOVE P, [-LPDL,,PDL-1] TMSG SETZM PAGCNT SETZM CHRCNT SETZM LINCNT CONT: CALL CMDINI ;< HERE ON @CONTINUE PROMPT (->) ;EMIT PROMPT SETZM SEPARF ;NO-SEP SETZM NOECHF ;ECHO MOVSI T1, (GJ%OLD!GJ%IFG) ;ALLOW WILDS, OLD FILES HLLM T1, CJFNBK+.GJGEN HRROI T1, [ASCIZ 'LST'] MOVEM T1, CJFNBK+.GJEXT MOVEI T1, [ FLDDB. .CMFIL,,,,,[ ;READ FILESPEC FLDDB. .CMIFI,CM%SDH ] ] ;TRY AGAIN CALL RFIELD MOVEM T2, IJFN DOSWIT: MOVEI T1, [ FLDDB. .CMSWI,,SWITAB,,,[ FLDDB. .CMCFM ] ] CALL RFIELD TSZ T3, T3 ;FIRST? JUMPN T3, SWDONE ;SECOND HRRZ T2, (T2) ;GET SWITCH DATA SETOM (T2) ;SET THE FLAG JRST DOSWIT SWDONE: DOFILE: SETZM CHRLIN HRRZ T1, IJFN MOVE T2, [FLD(7,OF%BSZ)!OF%RD] ;Read, Byte size of 7 OPENF ERJMP DONEXT ;CANNOT OPEN FILE.. SETZM ICNT ;ZERO BYTES AVAIL. SETZ CNT, CALL LOOP ;PROCESS THIS FILE HRRZ T1, IJFN ;JUST JFN TLO T1, (CO%NRJ) ;DO NOT RELEASE CLOSF ;CLOSE THE JFN TRN ;?? DONEXT: MOVE T1, IJFN ;JFN + FLAGS TLNN T1, (GJ%DEV!GJ%DIR!GJ%NAM!GJ%EXT!GJ%VER) ;WILD? JRST DONE ;NOPE, WE'RE DONE SKIPN SEPARF ;DO EACH FILE SEPARATE?? JRST GETNXT ;NOPE CALL TYPNAM ;YES CALL DOTYPE ;YES, TYPE STATS SETZM PAGCNT ;ZERO PAGES SETZM CHRCNT ;ZERO CHARS SETZM LINCNT ;ZERO LINES GETNXT: MOVE T1,IJFN GNJFN JRST DONE ;ALL DONE.. JRST DOFILE DONE: RLJFN TRN MOVE T1, IJFN ;GET OLD JFN TLNE T1, (GJ%DEV!GJ%DIR!GJ%NAM!GJ%EXT!GJ%VER) ;WILD? SKIPN SEPARF ;WAS WILD, DONE SEP.? CALL DOTYPE ;NO, DO SUMMARY MOVEI 1, "G"-100 ;GET A FEEP PBOUT ;PRINT IT OUT HALTF ;STOP!! TMSG JRST CONT TYPNAM: TMSG < FILE: > MOVEI T1,.PRIOU ;TTY HRRZ T2, IJFN ;GET INPUT JFN SETZ T3, JFNS RET DOTYPE: STKVAR MOVEI T1, .PRIOU PUSHJ P, CRLF FMSG MOVE T2, CHRCNT PUSHJ P, I12 PUSHJ P, CRLF FMSG MOVE T2, LINCNT PUSHJ P, I12 PUSHJ P, CRLF FMSG MOVE T2, PAGCNT PUSHJ P, I12 PUSHJ P, CRLF FMSG MOVE T2, CHRCNT ADDI T2, ^D<5*512>-1 IDIVI T2, ^D<5*512> MOVEM T2, DPAGES ;SAVE DISK PAGES PUSHJ P, I12 SKIPE CHRCNT SKIPN PAGCNT POPJ P, PUSHJ P, CRLF PUSHJ P, CRLF FMSG FLTR T2, DPAGES FLTR T3, PAGCNT FDVR T2, T3 MOVEM T2, BPP PUSHJ P, F12.4 PUSHJ P, CRLF FMSG MOVSI T2, (1.0) FDVR T2, BPP PUSHJ P, F12.4 PUSHJ P, CRLF FMSG FLTR T2, CHRCNT FLTR T3, PAGCNT FDVR T2, T3 PUSHJ P, F12.4 PUSHJ P, CRLF FMSG FLTR T2, CHRCNT FLTR T3, LINCNT FDVR T2, T3 PUSHJ P, F12.4 CRLF: FMSG < > POPJ P, LOOP: PUSHJ P,GETC JRST EOF AOS CHRCNT ;TOTAL CHARS AOS CHRLIN ;CHARACTERS ON THIS LINE CAIN T1, CR JRST [SETZM CHRLIN JRST LOOP.2] CAIN T1, FF JRST [PUSHJ P,PAGE ;if form feed call pager JRST LOOP.2] CAIN T1, BS JRST [ SOSGE CHRLIN SETZM CHRLIN JRST LOOP.2 ] CAIN T1, LF JRST [PUSHJ P,INC ;if line feed call line counter. JRST LOOP.2] LOOP.2: MOVE T2, CHRLIN ;GET THIS LINE CAIL T2, WIDTH ;OVER THE WIDTH? PUSHJ P, INC ;YES, NEW LINE CAILE CNT, TXTSIZ ;Leave a space at the bottom of a page. PUSHJ P, PAGE JRST LOOP EOF: CALLRET PAGE ;No more data in file, end of file. IFE FTSIN,< GETC: HRRZ 1,IJFN ;HERE TO GET A NEW CHARACTER BIN ERJMP .POPJ .POPJ1: AOS (P) .POPJ: POPJ P, > IFN FTSIN,< GETC: SOSGE ICNT ;COUNT DOWN JRST GETSTR ;GET MORE ILDB 1, IPTR ;LOAD A BYTE .POPJ1: AOS (P) .POPJ: POPJ P, GETSTR: HRRZ 1, IJFN HRROI 2, IBUF MOVX 3, -IBUFSZ SIN ADD 3, [IBUFSZ] ;GET COUNT OF BYTES READ JUMPE 3, .POPJ ;NONE? MOVEM 3, ICNT ;OK, KEEP GOING MOVE 3, [POINT 7,IBUF] ;FRESH BP MOVEM 3, IPTR JRST GETC > ;FTSIN INC: AOS CNT ;HERE ON A SETZM CHRLIN ;START A FRESH LINE POPJ P, PAGE: AOS T1,PAGCNT ;HERE ON IDIVI T1,^D10 ;MOD BY 10 MOVEI T1,"0"(T2) ;DIGITIFY THE LOW ORDER 10 SKIPN NOECHF ;ECHO?? PBOUT ;TYPE IT ADDM CNT,LINCNT SETZB CNT,CHRLIN ;ZERO LINES/PAGE & CHARACTERS ON THIS LINE POPJ P, SWITAB: 2,,2 T NO-ECHO,NOECHF T SEPARATE,SEPARF SUBTTL NEW I/O I10: SKIPA T3, [NO%LFL!FLD(^D10,NO%COL)!^D10] I12: MOVE T3, [NO%LFL!FLD(^D12,NO%COL)!^D10] NOUT JSERR POPJ P, F12.4: MOVE T3, [FL%ONE!FL%PNT!FLD(7,FL%FST)!FLD(4,FL%SND)] FLOUT JSERR POPJ P, SUBTTL STORAGE IJFN: BLOCK 1 ;INPUT FILE JFN IFN FTSIN,< ICNT: BLOCK 1 IPTR: BLOCK 1 > ;FTSIN CHRLIN: BLOCK 1 ;TALLY OF CHARS ON THIS LINE CHRCNT: BLOCK 1 ;TALLY OF CHARS PRINTED PAGCNT: BLOCK 1 ;TALLY OF PAGES PRINTED LINCNT: BLOCK 1 ;TALLY OF ALL LINES NOECHF: BLOCK 1 ;ECHO OF DIGITS SEPARF: BLOCK 1 ;DO WILD FILES SEPARATELY PDL: BLOCK LPDL ;PUSH DOWN LIST CMDSTG ;STORAGE FOR CMD PACKAGE END BEGIN