.TITLE CHEKIT .IDENT /V01.05/ .NLIST BEX .ENABL LC ; ; AUTHOR: WAYNE L. DERNONCOURT ; NAVAL ORDNANCE STATION, INDIAN HEAD, MD ; DATE: MAY 1981 ; ; REVISION HISTORY: ; AUG.7,81-WLD:ADD BETTER ERROR HANDLING ON FILE NAMES ; AUG.7,81-WLD:MINS, MAXS, RECORD COUNTS AND SUMMARIES ; MAY 23,82-WLD:USE WAIT FOR SINGLE EVENT FLAG AFTER THE BRANCH ; TRY TO SPEED UP THE OPERATION ; SEP 18,82-WLD:Use two word intergers in finding out number of ; records in given in file ; SEP 18,82-WLD:Zero length records crashes the program ; SEP 18,82-WLD:Convert file name to upper case ; OCT 11,83-WLD:Fix error in overwriting the "Is more ; information on specific ..." ; OCT 11,83-WLD:Add summary option to starting over ; OCT 11,83-WLD:Convert response to Uppercase ; ; ; THIS PROGRAM IS TO ANALYZE AND REPORT ON RECORDS IN A GIVEN FILE. ; THIS FILE NAME IS ASKED FOR AND READ IN AT RUN TIME ALONG WITH ; OTHER VARIABLES. THESE WOULD BE THE CRITICAL COLUMN AND THE ; RELATIONSHIP THAT IS DESIRED WITH THE RECORDS IN THE FILE. ; ; .SBTTL CALLS ; .MCALL ALUN$C,QIOW$C,QIO$C,EXIT$S .MCALL QIO$,DIR$,WTSE$C .MCALL FSRSZ$,FDBK$A,FDBDF$,FDOP$R,OPEN$R,GET$ .MCALL CLOSE$ ; .SBTTL ASSIGN ; ; FSRSZ$ 1 INFILE: FDBDF$ ;MY INPUT FILE FDBK$A ,,,,FILEIO ; .SBTTL GO START: NOP ; TERM=2 ALUN$C TERM,TI,0 QIO$C IO.ATT,TERM,,,TISTAT MOV CHNGIT,TMPBRA ; .SBTTL SOURCE ; ; READ WITH PROMPT ; QIOW$C IO.RPR,TERM,1,,TISTAT,, MOV TISTAT+2,INLEN ;MOVE NUMBER OF CHARS IN TO BUFFER ; MOV #FILE1,R0 MOV #FILE1,R1 MOV INLEN,R2 CALL $CVTUC ; FDOP$R #INFILE,#1,#TESTFL ;RUN TIME FDOP$ ; OPEN$R #INFILE,,,,#INBUF,#160.,IOERR QIO$C IO.WLB,TERM,,,,, MOV #200.,MIN CLR MAX CLR T1CNTR CLR T2CNTR CLR SEKSHN CLR RECNO ; ; FIND THE MINIMUM AND MAXIMUM RECORD LENGTHS IN FILE ; MOV #INFILE,R0 A: NOP GET$ ,,,IOERR INC T2CNTR BNE 5$ INC T1CNTR 5$: INC RECNO MOV F.BKST(R0),R1 CMP MIN,R1 BLE 10$ MOV R1,MIN BR A 10$: CMP MAX,R1 BGE A MOV R1,MAX BR A ; ; GET INFORMATION ABOUT WHAT THE USER WANTS TO DO ; AGAIN: CLR ECNTR CLR RECNO MOV #TMPRT,R0 MOVB #' ,R1 MOV #5,R2 5$: MOVB R1,(R0)+ SOB R2,5$ MOV TMPBRA,CHNGIT QIOW$C IO.RPR,TERM,1,,,, MOV #RESPN,R0 CALL $CDTB MOV R1,CRITCL CMP R1,MIN ;THE CRITICAL HAS TO BE GREATER THAN ;MINIMUM RECORD SIZE FOUND BGE 7$ ;OKAY SO FAR JMP SUMMRY ;LESS THAN MINIMUM FOUND, PRINT THE SUMMARY 7$: CMP R1,MAX ;THE CRITICAL HAS TO BE LESS THAN ;THE MAXIMUM RECORD SIZE FOUND BLE 8$ JMP SUMMRY 8$: NOP QIOW$C IO.RPR,TERM,1,,,, MOV #6,R1 MOV #RELATE,R0 ADD #14.,R0 ;HAVE TO TAKE CARE OF DECREMENT 10$: CMP RESPN,-(R0) ;FIND RELATIONSHIP BEQ 20$ SOB R1,10$ JMP SUMMRY 20$: ASL R1 ADD ADDS(R1),CHNGIT ;FIX THE BRANCH CLR PRTCUE ;ASSUME THAT DO NOT WANT TO PRINT LINES QIOW$C IO.RPR,TERM,1,,,, CMPB #'Y,RESPN BNE 30$ INC PRTCUE 30$: MOVB #' ,TOBIG QIO$C IO.WLB,TERM,,,,, ; MORE: INC RECNO GET$ #INFILE,#INBUF,,IOERR MOV F.BKST(R0),R1 CMP R1,CRITCL CHNGIT: BR MORE ;CHANGE THIS LOCATION AS NEEDED ;TO BNE,BEQ,BGE,BLT,BGT,BLE ;THIS PROGRAM USES NEGATIVE LOGIC ; ; SPECIFIED MAXIMUM LENGTH EXCEEDED, GET THE INFORMATION ; INC ECNTR ;INCREMENT THE EVENTS COUNTER TST PRTCUE BEQ MORE MOV R1,TMPBUF ;MOVE THE RECORD LENGTH TO TEMP. STORAGE MOV #TIPRT,R0 ;PREP TO PRINT INFO LINE MOV RECNO,R1 ;RECORD NUMBER CLR R2 CALL $CBDMG ;CONVERT IT MOVB #':,(R0)+ MOV TMPBUF,R1 ;GET THE LENGTH BACK AGAIN CLR R2 CALL $CBDSG ;CONVERT IT MOVB #'.,(R0)+ MOV #TIPRT,R1 SUB R1,R0 ;FIGURE OUT NUMBER OF CHARACTERS TO PRINT MOV R0,OUTLEN+14. ;TELL SYSTEM HOW MANY DIR$ #OUTLEN ;PRINT IT HERE MOV #INBUF,R0 ;GET READY TO CHANGE THE OUTPUT BUFFER MOV #OUTBUF,R1 MOV TMPBUF,R2 BNE 10$ INC R2 10$: INC R2 ASR R2 WTSE$C 1 ;WAIT UNTIL THE I/O FROM THE PREVIOUS ;MATCH IS FINISHED 20$: MOV (R0)+,(R1)+ ;CHANGE IT SOB R2,20$ MOV TMPBUF,R1 BNE 25$ MOV #" ,OUTBUF MOV #2,R1 25$: CMP #80.,R1 BGT 30$ MOV #80.,R1 30$: MOV R1,OUT+14. ;NUMBER OF CHARS TO PRINT DIR$ #OUT ;PRINT OUT THE LINE BR MORE ; ; .SBTTL ERROR SECTION ; R0 CONTAINS ADDRESS OF FDB IN ERROR IOERR: CMPB F.ERR(R0),#IE.EOF ;END OF FILE (EOF) ? BEQ NOPROB ;IF YES, LET'S EXIT CMPB F.ERR(R0),#IE.RBG ;ILLEGAL RECORD SIZE? BEQ IORBG ;THE RECORD IS TO BIG CMPB F.ERR(R0),#IE.NSF ;NON-EXISTENT FILE? BEQ IONSF ;THE FILE DOES NOT EXIST CMPB F.ERR(R0),#IE.BNM ;ILLEGAL FILE NAME? BEQ IOBNM ;CAN ONLY USE FILES IN DEF.UIC AND DEV ; ; CLEAR OUT THE ERROR PRINT OUT ; MOV R0,R3 MOV #TIPRT,R0 MOV #" ,R1 MOV #15.,R2 10$: MOV R1,(R0)+ SOB R2,10$ MOV #TIPRT,R0 ; ; LOW BYTE ; MOVB F.ERR(R3),R1 JSR PC,FLERR ; ; HIGH BYTE ; MOVB F.ERR+1(R3),R1 JSR PC,FLERR ; ; WHOLE WORD ; MOV F.ERR(R3),R1 JSR PC,FLERR ; QIO$C IO.WLB,TERM,,,,, BR NOUSE IORBG: TST SEKSHN ;COME HERE WHEN RECORD IS TO BIG BNE IO1 MOV #TOBIG,R0 MOV RECNO,R1 CLR R2 CALL $CBDMG MOV #INBUF,R0 MOV #OUTBUF,R1 MOV #40.,R2 WTSE$C 1 ;Finish the terminal I/O before doing more 10$: MOV (R0)+,(R1)+ SOB R2,10$ QIO$C IO.WLB,TERM,,,,, QIO$C IO.WLB,TERM,1,,,, JMP A IO1: JMP MORE ; IONSF: NOP QIO$C IO.WLB,TERM,,,,, BR NOUSE ; IOBNM: NOP QIO$C IO.WLB,TERM,,,,, BR NOUSE ; NOPROB: TST SEKSHN BNE ALOKAY ; INC SEKSHN ;ONLY WANT TO COME HERE ONCE MOV #MINLEN,R0 MOV MIN,R1 CLR R2 CALL $CBDSG MOV #MAXLEN,R0 MOV MAX,R1 CLR R2 CALL $CBDSG MOV #TMPRT1,R0 MOV #T1CNTR,R1 CLR R2 CALL $CDDMG SUMMRY: NOP WTSE$C 1 QIO$C IO.WLB,TERM,,,,, BR ALT ALOKAY: MOV #TMPRT,R0 MOV ECNTR,R1 CLR R2 CALL $CBDMG QIO$C IO.WLB,TERM,,,,, ALT: MOV #" ,RESPN ;WANT TO GO AGAIN? I DON'T KNOW ASK WTSE$C 1 QIOW$C IO.RPR,TERM,3,,,, MOV #RESPN,R0 MOV #RESPN,R1 MOV #1,R2 CALL $CVTUC CMPB #'N,RESPN BEQ NOUSE CMPB #'S,RESPN BEQ SUMMRY CMPB #'Y,RESPN BNE ALT MOV #INFILE,R0 CLR R1 ;THE .POINT ROUTINE CAN BE FOUND CLR R3 ;IN THE I/O OPERATIONS MANUAL FOR RSX-11M MOV #1,R2 ;V3.2, PAGE 4-17& 4-18. NOTICE THE ERROR ; ON PAGE 4-18, ITEM 5, R0 POINTS TO THE FDB ; AND R1, NOT R0 IS CLEARED CALL .POINT ;LETS REWIND THE FILE JMP AGAIN NOUSE: NOP ; ; WRITE OUT SOME BLANKS AND DETACH TERMINAL ; QIOW$C IO.DET,TERM,1 EXIT$S ; ; .SBTTL VARIABLE LENGTH QIO's ; ; DATA AREAS ; ; FIRST WE DO THE QIO FOR VARIABLE LENGTH WRITES TO THE TERMINAL ; OUTLEN: QIO$ IO.WLB,TERM,,,,, OUT: QIO$ IO.WLB,TERM,1,,,, ; .SBTTL DATA AREA ; FILEIO: .BLKW 2 TISTAT: .BLKW 2 TIPRT: .BLKB 12. .BYTE 012,015 INBUF: .BLKB 160. .EVEN OUTBUF: .BLKB 80. .EVEN ECNTR: .BLKW 1 ;ERROR COUNTER T1CNTR: .WORD 0 ;TOTAL NUMBER LINES READ IN *** T2CNTR: .WORD 0 ;DOUBLE PRECISION INTEGER *** ; TOTERR: .ASCII <012>/Total number of records flagged:/ TMPRT: .ASCII / / TILENY=.-TOTERR .EVEN TI1=. OVER: .ASCII <012><012><015>/Is more information on spe/ ;WELL .ASCII !cific record lengths desired? (Y/N/S)! TILEN0=.-TI1 .EVEN TMPBRA: .BLKW 1 ;PLACE TO STORE TEMPORARY BRANCH RECNO: .BLKW 1 ;RECORD NUMBER TMPBUF: .BLKW 1 ;TEMPORARY BUFFER, STORE LENGTH CRITCL: .BLKW 1 ;STORE CRITICAL COLUMN, I.E. GT,LE,EQ,NE, ETC. RESPN: .BLKB 4 ;RESPONSE BUFFER PRTCUE: .WORD 0 ;PRINT THE LINE? 0-NO, ELSE-YES MAX: .BLKW 1 ;LOCATION TO STORE MAXIMUM RECORD LENGTH MIN: .BLKW 1 ;LOCATION TO STORE MINIMUM RECORD LENGTH SEKSHN: .WORD 0 ;SECTION SWITCH TI1=. ; ; PRINT OUT IDENTIFICATION MESSAGE NAMPLZ: .ASCII <012><012>/Record length examination program - CHEKIT/<012><015> .ASCII <012><012>/File to examine:/ TILEN1=.-TI1 .EVEN TI1=. THNKNG: .ASCII /I am thinking please wait, thank you/<012><012> TILENZ=.-TI1 .EVEN TI1=. LENPLZ: .ASCII <015><012>/Critical column:/ TILEN2=.-TI1 .EVEN TI1=. RELPLZ: .ASCII <012><015>/Available relationships: EQ,NE,LT,LE,GT,GE/ .ASCII <015><012>/Desired relationship with data:/ TILEN3=.-TI1 .EVEN TI1=. PRTPLZ: .ASCII <015><012>/Do you want to print out the lines:/ TILEN4=.-TI1 .EVEN TI1=. NINNY: .ASCII /Record:/ TOBIG: .ASCII / / .ASCII <015><012>?I/O ERROR 330, -40. Suspect that record was ? .ASCII /greater than 160. characters/<012><015>/Here is first 80:/ TILEN5=.-TI1 .EVEN TI1=. NOFILE: .ASCII <015><012><012>?I/O ERROR 346, -26. File does not? .ASCII ? exist on the?<012><015>?system default device and? .ASCII ? current user uic? TILEN6=.-TI1 .EVEN TI1=. BADNAM: .ASCII <015><012><012>?I/O ERROR 312, -54. Bad file name.? .ASCII ? as the program is?<012><015>?currently written, the? .ASCII ? file to be analyzed must be?<012><015>?on the default? .ASCII ? device, SY0:, and in the default uic.? TILEN7=.-TI1 .EVEN TI1=. MINMAX: .ASCII <015><012>/Minimum record length:/ MINLEN: .ASCII / / .ASCII <015><012>/Maximum record length:/ MAXLEN: .ASCII / / .ASCII <015><012><012>/Total number of records in file:/ TMPRT1: .ASCII / / TILEN8=.-TI1 .EVEN ADDS: .WORD 0000,1000,0400,2000,1400,3000,2400 RELATE: .ASCII / / /NE/ /EQ/ /GE/ /LT/ /GT/ /LE/ TESTFL: .WORD 0,0,0,0 INLEN: .BLKW 1 .WORD FILE1 FILE1: .BLKB 16. .EVEN .PAGE .SBTTL SUBROUTINES ; ; THIS SUBROUTINE DESCRIBES THE ERROR HOPEFULLY IN MORE DETAIL ; FLERR: CLR R2 MOV R1,TMPBRA ;TMPBRA WILL NOT BE USED ANYMORE FOR THE CALL $CBDSG ;BRANCH USE IT FOR THIS MOVB #'.,(R0)+ MOVB #' ,(R0)+ MOVB #'(,(R0)+ MOV TMPBRA,R1 CLR R2 CALL $CBOMG MOVB #'),(R0)+ MOVB #':,(R0)+ MOVB #' ,(R0)+ MOVB #' ,(R0)+ RTS PC ; .END START