PROGRAM ANAMAK C Author: T. R. Wyant C Date: 20-Jul-1990 PARAMETER LUNANA = 1 ! LUN for anagram file. PARAMETER LUNCLR = 2 ! LUN for cleartext file. PARAMETER LUNTI = 5 ! LUN for terminal input. PARAMETER LUNTO = 6 ! LUN for terminal output. INTEGER*2 WRDSIZ ! Size of words handled. PARAMETER (WRDSIZ = 255) CHARACTER*40 ANAFIL ! Anagram file name. CHARACTER*40 CLRFIL ! Cleartext file name. CHARACTER*40 FILNAM ! File name (for errors). INTEGER*2 FILLEN ! Length of file name. LOGICAL*1 FANBYT(WRDSIZ) ! Anagram file anagram, as bytes CHARACTER*(WRDSIZ) FANWRD ! Anagram file anagram. LOGICAL*1 FILBYT(WRDSIZ) ! Anagram file record, as bytes. CHARACTER*(WRDSIZ) FILWRD ! Anagram file record. INTEGER*2 WRDLEN ! Length of word. INTEGER*4 RECLO ! Low record. INTEGER*4 RECHI ! High record. INTEGER*4 RECTRY ! Record to try. EQUIVALENCE (FILWRD, FILBYT) EQUIVALENCE (FANWRD, FANBYT) CALL ERRSET (29, , .FALSE., , .FALSE.) CALL ERRSET (39, , .FALSE., , .FALSE.) WRITE (LUNTO, 1010) ' ' WRITE (LUNTO, 1010) ' ANAMAK - Make a file into anagram ', 1 'and plaintext.' WRITE (LUNTO, 1010) ' ' 1000 CONTINUE CLOSE (UNIT=LUNANA) WRITE (LUNTO, 1010) ' ' 1010 FORMAT (8A) WRITE (LUNTO, 1010) '$Enter input file name: ' READ (LUNTI, 1010, END=9900) CLRFIL IF (CLRFIL .EQ. ' ') GO TO 1000 WRITE (LUNTO, 1010) '$Enter output file name: ' READ (LUNTI, 1010, END=9900) ANAFIL IF (ANAFIL .EQ. ' ') GO TO 1000 FILNAM = CLRFIL OPEN (UNIT=LUNCLR, FILE=CLRFIL, 1 ORGANIZATION='SEQUENTIAL', ACCESS='SEQUENTIAL', 2 STATUS='OLD', READONLY, SHARED, FORM='FORMATTED', 3 ERR=9000) FILNAM = ANAFIL OPEN (UNIT=LUNANA, FILE=ANAFIL, 1 ORGANIZATION='SEQUENTIAL', ACCESS='SEQUENTIAL', 2 STATUS='NEW', FORM='FORMATTED', CARRIAGECONTROL='LIST', 3 ERR=9000) 1400 CONTINUE READ (UNIT=LUNCLR, FMT=1010, END=9900) FILWRD 1420 CONTINUE CALL SCNTXT (WRDSIZ, FILBYT, WRDLEN) IF (WRDLEN .GT. WRDSIZ) GO TO 1400 FILWRD = FILWRD(WRDLEN:) IF (FILWRD .EQ. ' ') GO TO 1400 CALL MAKANA (WRDSIZ, FILBYT, WRDLEN, FANBYT) WRITE (UNIT=LUNANA, FMT=1010) FANWRD(:WRDLEN), ' ', 1 FILWRD(:WRDLEN) FILWRD = FILWRD(WRDLEN+1:) GO TO 1420 9000 CONTINUE FILLEN = INDEX (FILNAM, ' ') WRITE (LUNTO, 1010) ' Error - Failed to open ', FILNAM(:FILLEN) GO TO 9900 9900 CONTINUE CLOSE (UNIT=LUNCLR) CLOSE (UNIT=LUNANA) CALL EXIT END SUBROUTINE SCNTXT (WRDSIZ, CLRBYT, WRDLEN) INTEGER*2 WRDSIZ ! Size of words handled. LOGICAL*1 CLRBYT(WRDSIZ) ! Word to look up, as bytes. INTEGER*2 WRDLEN ! Length of word. LOGICAL*1 LCAYE ! Lower case 'a'. PARAMETER (LCAYE = 'a') LOGICAL*1 LCZEE ! Lower case 'z'. PARAMETER (LCZEE = 'z') LOGICAL*1 UCAYE ! Upper case 'A'. PARAMETER (UCAYE = 'A') LOGICAL*1 UCZEE ! Upper case 'Z'. PARAMETER (UCZEE = 'Z') DO 1280 WRDLEN = 1, WRDSIZ IF (CLRBYT(WRDLEN) .GE. LCAYE .AND. 1 CLRBYT(WRDLEN) .LE. LCZEE) THEN GO TO 1290 ELSE IF (CLRBYT(WRDLEN) .GE. UCAYE .AND. 1 CLRBYT(WRDLEN) .LE. UCZEE) THEN GO TO 1290 END IF 1280 CONTINUE WRDLEN = WRDSIZ + 1 1290 CONTINUE RETURN END