;*************************** AMUS Program Label ****************************** ; Filename: FILANA.M68 Date: 10/4/91 ; Category: UTIL Hash Code: 300-064-167-550 Version: ; Initials: ULTR/AM Name: DAVID PALLMANN ; Company: UTLRASOFT Telephone #: 5163484848 ; Related Files: ; Min. Op. Sys.: Expertise Level: ; Special: ; Description: File analysis utility--file size in bytes, number of 7-bit ; characters, number of 8-bit characters, number of line feeds & form feeds ; ;***************************************************************************** ;**************************************************************************** ;* * ;* FILANA * ;* File Analysis Program * ;* * ;**************************************************************************** ;[100] 03 October 1991 14:29 Edited by David Pallmann ; Created. ;version number VMAJOR =1 VMINOR =0 VSUB =0 VEDIT =100. VWHO =0 ;universals SEARCH SYS SEARCH SYSSYM SEARCH TRM ;ASCII character definitions $LF =12 $FF =14 $CR =15 ;variables .OFINI .OFDEF CHARS, 4 ; total character count .OFDEF CHAR7S, 4 ; 7-bit character count .OFDEF CHAR8S, 4 ; 8-bit character count .OFDEF LINES, 4 ; line count .OFDEF PAGES, 4 ; page count .OFDEF FILE, D.DDB ; file DDB .OFSIZ MEMSIZ ;*********** ;* START * ;*********** ;initialization START: PHDR -1,0,PH$REE!PH$REU ; program header GETIMP MEMSIZ,A5 ; allocate local memory for variables ;************ ;* CMDLIN * ;************ ;command line processing CMDLIN: BYP ; bypass spaces/tabs LIN ; end of line? JEQ USAGE ; yes - explain command usage FSPEC FILE(A5),LIT ; INIT FILE(A5) ; ;********** ;* OPEN * ;********** OPEN: OPENI FILE(A5) ; ;************ ;* BYPASS * ;************ ;bypass header if an AlphaWRITE document BYPASS: CMPW FILE+D.EXT(A5),#[WRT] ; BNE GET ; MOV #510.,D0 ; 10$: FILINB FILE(A5) ; SOB D0,10$ ; ADD #510.,CHARS(A5) ; ;********* ;* GET * ;********* ;get byte and process GET: CTRLC CLOSE ; ^C check FILINB FILE(A5) ; get byte TST FILE+D.SIZ(A5) ; end of file? BEQ CLOSE ; yes INC CHARS(A5) ; increment character count CALL SCAN.LINES ; update line feed count CALL SCAN.PAGES ; update page count CMPB D7,#127. ; 7-bit or 8-bit? BLOS 20$ ; 7-bit INC CHAR8S(A5) ; increment 8-bit character count BR GET ; loop 20$: INC CHAR7S(A5) ; increment 7-bit character count BR GET ; loop ;*********** ;* CLOSE * ;*********** ;close file, report on file contents, and exit CLOSE: CLOSE FILE(A5) ; close file CTRLC ABORT ; ^C check L1: TYPESP File size is ; MOV CHARS(A5),D1 ; DCVT 0,OT$TRM!OT$TSP ; TYPE byte ; CMP D1,#1 ; BEQ 10$ ; TYPE s ; 10$: TYPE < (> ; MOV CHAR7S(A5),D1 ; DCVT 0,OT$TRM!OT$TSP ; TYPE 7-bit character ; CMP D1,#1 ; BEQ 20$ ; TYPE s ; 20$: TYPE <, > ; MOV CHAR8S(A5),D1 ; DCVT 0,OT$TRM!OT$TSP ; TYPE 8-bit character ; CMP D1,#1 ; BEQ 30$ ; TYPE s ; 30$: TYPECR ) ; L2: TYPESP File contains ; MOV LINES(A5),D1 ; DCVT 0,OT$TRM!OT$TSP ; MOVW FILE+D.EXT(A5),D7 ; CMPW D7,#[WRT] ; BEQ 20$ ; CMPW D7,#[T ] ; BEQ 20$ ; TYPE line feed ; CMP D1,#1 ; BEQ 90$ ; TYPE s ; BR 90$ ; 10$: TYPE line ; CMP D1,#1 ; BEQ 90$ ; TYPE s ; BR 90$ ; 20$: TYPE carriage return ; CMP D1,#1 ; BEQ 90$ ; TYPE s ; BR 90$ ; 90$: TYPE <, > ; MOV PAGES(A5),D1 ; DCVT 0,OT$TRM!OT$TSP ; TYPE form feed ; CMP D1,#1 ; BEQ 99$ ; TYPE s ; 99$: CRLF ; L3: CRLF ; EXIT ; ABORT: TYPECR ?Aborted ; CRLF ; EXIT ; ;*********** ;* USAGE * ;*********** ;explain command usage USAGE: TYPECR Usage: .FILANA filespec CRLF ; EXIT ; ;**************** ;* SCAN.LINES * ;**************** ;Function: Update line count ; ;Inputs: D1 - character SCAN.LINES: MOVW FILE+D.EXT(A5),D7 ; CMPW D7,#[WRT] ; BEQ SL.WRT ; CMPW D7,#[T ] ; BEQ SL.SV ; SL.OTH: CMPB D1,#$LF ; line feed? BNE 10$ ; no INC LINES(A5) ; increment line count 10$: RTN ; SL.WRT: TSTB D1 ; BNE 10$ ; INC LINES(A5) ; 10$: RTN ; SL.SV: CMPB D1,#$CR ; BNE 10$ ; INC LINES(A5) ; 10$: RTN ; ;**************** ;* SCAN.PAGES * ;**************** ;Function: Update page count ; ;Inputs: D1 - character SCAN.PAGES: CMPW FILE+D.EXT(A5),#[WRT] ; BEQ SP.WRT ; CMPB D1,#$FF ; form feed? BNE 10$ ; no INC PAGES(A5) ; 10$: RTN ; SP.WRT: CMPB D1,#^H096 ; 2.1x page break? BLO 10$ ; no CMPB D1,#^H098 ; 2.1x page break? BHI 10$ ; no INC PAGES(A5) ; 10$: RTN ; END .