C PROGRAM AVCLNR C C SEARCH LIST OF AVAILABLE SOFTWARE C C PETE SCHILLING ALCOA TECHNICAL CENTER SEPTEMBER, 1974 C C CLEAN THE INDEX OF AVAILABLE SOFTWARE. READ AND REWRITE THE C INDEX FILE, ELIMINATING DUPLICATE ENTRIES AND 'STOP' WORDS, C AND PRINTING A FREQUENCY TABLE. C DIMENSION INPUT(21), JNPUT(21), KNPUT(21) C COMMON / AVLUNS / LUTT, LUFL COMMON / AVNONW / NSTOP, KSTOP(12,150) C DATA IBLNK / ' ' / DATA INPUT / 21 * ' ' / DATA JNPUT / 21 * ' ' / DATA LUFL / 26 / DATA LUOU / 27 / DATA LULP / 3 / DATA LUTT / 5 / C C TO START - - C C GET THE LIST OF 'STOP' WORDS. CALL AVSTOP C C OPEN THE INPUT AND OUTPUT FILES. OPEN ( UNIT = LUFL, MODE = 'ASCII', ACCESS = 'SEQIN', 1 FILE = 'PROGMS.IDX', DEVICE = 'DSK:', DISPOSE = 'SAVE', 2 DIRECTORY = '101,15' ) OPEN ( UNIT = LUOU, MODE = 'ASCII', ACCESS = 'SEQOUT', 1 FILE = 'PROGMS.NWX', DEVICE = 'DSK:', DISPOSE = 'SAVE', 2 DIRECTORY = '101,15' ) C C INITIALIZE THE COUNTERS. I0 = 1 KOUNT = 0 NCHAR = 1 NRECS = 0 NWRDS = 0 C C PRINT A PAGE HEADING. WRITE ( LUTT, 10 ) WRITE ( LULP, 10 ) 10 FORMAT ( '1FREQUENCY DISTRIBUTION OF WORDS IN INDEX OF' / 1 ' AVAILABLE SOFTWARE FOR THE DECSYSTEM-10.' / ) C C MAIN PROCESSING LOOP * * * * * * * * * * * * * * * * * * * * * * * C C READ AN INPUT RECORD. 20 READ ( LUFL, 25, END = 200 ) KNPUT 25 FORMAT ( 21A1 ) C C FIND THE BLANK CHARACTER AT THE END OF THE CURRENT ENTRY. DO 30 I = 2, 16 IF ( KNPUT(I) .EQ. IBLNK ) GO TO 40 30 CONTINUE I = 17 C 40 KCHAR = I C C COMPARE THE CURRENT ENTRY WITH THE 'STOP' LIST. IF IT IS IN THAT C LIST, DO NOT REWRITE IT. DO 50 I = I0, NSTOP IF ( NCOMP ( KNPUT, 1, KCHAR, KSTOP(1,I), 1 ) ) 60, 20, 50 50 CONTINUE I = NSTOP + 1 C 60 I0 = I - 1 C C COMPARE THE CURRENT ENTRY WITH THE PREVIOUS GOOD ONE. IF ( NCOMP ( KNPUT, 1, 21, JNPUT, 1 ) ) 70, 20, 70 C C IF THE CURRENT ENTRY IS NOT IDENTICAL TO THE PREVIOUS GOOD ONE, SAVE C AND COUNT IT. 70 WRITE ( LUOU, 25 ) KNPUT CALL MOVE ( KNPUT, 1, 21, JNPUT, 1 ) NRECS = NRECS + 1 C C COMPARE THE FREQUENCY TABLE ENTRY WITH THE CURRENT ONE. IF ( NCOMP ( INPUT, 1, NCHAR, KNPUT, 1 ) ) 90, 80, 90 C C IF THE NEW ENTRY IS THE SAME, COUNT IT. 80 KOUNT = KOUNT + 1 GO TO 20 C C IF THE NEW ENTRY IS DIFFERENT, PRINT AND COUNT THE OLD ONE. 90 WRITE ( LULP, 100 ) KOUNT, ( INPUT(I), I = 1, NCHAR ) 100 FORMAT ( I5, 1X, 21A1 ) NWRDS = NWRDS + 1 C C RESET THE COUNT AND SAVE THE CURRENT ENTRY. KOUNT = 1 CALL MOVE ( KNPUT, 1, 21, INPUT, 1 ) NCHAR = KCHAR C C GO GET THE NEXT INPUT RECORD. GO TO 20 C C END-OF-FILE PROCESSING * * * * * * * * * * * * * * * * * * * * * * * * C C PRINT THE LAST FREQUENCY ENTRY AND THE COUNT. 200 WRITE ( LULP, 100 ) KOUNT, ( INPUT(I), I = 1, NCHAR ) C C PRINT THE GRAND TOTAL OF WORDS AND ENTRIES. WRITE ( LUTT, 210 ) NWRDS, NRECS WRITE ( LULP, 210 ) NWRDS, NRECS 210 FORMAT ( / ' THE INDEX CONTAINS', I5, ' DIFFERENT WORDS' 1 ' AND', I5, ' ENTRIES.' ) C C CLOSE THE INPUT AND OUTPUT FILES. CLOSE ( UNIT = LUFL ) ENDFILE LUOU CALL EXIT END