      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      CALL INITI0
      IF((OPTIO0.NE.4))GOTO 10000
        CALL SIMPL0
        GOTO 10001
10000   IF((OPTIO0.NE.5))GOTO 10002
          CALL BINAR0
          GOTO 10003
10002     CALL LOAD
          CALL PAIR
          CALL GROW
          CALL LABEL
          CALL REPORT
10003 CONTINUE
10001 CALL SWT
      END
      INTEGER FUNCTION ENTER(LINE)
      INTEGER LINE(1)
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER H
      INTEGER HASH
      INTEGER I,P
      INTEGER * 4 MARKF
      INTEGER TEXT(102)
      INTEGER EQUAL
      H=HASH(LINE)
      P=BUCKE0(H)
10004 IF((P.EQ.0))GOTO 10005
        I=SYMST0(P+1)
        CALL SEEKF(TEXTL0(I),TEXTF0,0)
        CALL GETLIN(TEXT,TEXTF0)
        IF((EQUAL(LINE,TEXT).NE.1))GOTO 10006
          ENTER=I
          RETURN
10006   P=SYMST0(P)
      GOTO 10004
10005 IF((NEXTI0.LT.6000))GOTO 10007
        CALL ERROR('too many unique lines; symbol table overflow.')
10007 I=NEXTI0
      NEXTI0=NEXTI0+(1)
      H=HASH(LINE)
      SYMST0(NEXTS0)=BUCKE0(H)
      SYMST0(NEXTS0+1)=I
      BUCKE0(H)=NEXTS0
      NEXTS0=NEXTS0+(2)
      CALL WIND(TEXTF0)
      TEXTL0(I)=MARKF(TEXTF0)
      CALL PUTLIN(LINE,TEXTF0)
      ENTER=I
      RETURN
      END
      SUBROUTINE GENLI0
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER OI,NI
      INTEGER JUNK
      INTEGER GETLIN
      INTEGER LINE(102)
      INTEGER AAAAA0
      INTEGER AAAAC0
      INTEGER AAAAE0
      INTEGER AAAAF0(12)
      INTEGER AAAAB0
      INTEGER AAAAG0(13)
      INTEGER AAAAH0(10)
      INTEGER AAAAD0
      INTEGER AAAAI0(13)
      INTEGER AAAAJ0(10)
      DATA AAAAF0/160,160,160,170,180,233,160,170,180,233,252,0/
      DATA AAAAG0/170,227,228,160,170,180,233,160,170,180,248,252,0/
      DATA AAAAH0/170,227,228,160,170,180,233,239,252,0/
      DATA AAAAI0/170,227,233,160,170,180,248,160,170,180,233,252,0/
      DATA AAAAJ0/170,227,233,160,170,180,233,238,252,0/
      OI=2
      NI=2
10011   GOTO 10012
10013     AAAAA0=1
          GOTO 10008
10014   GOTO 10015
10016     AAAAD0=160
          AAAAE0=1
          GOTO 10010
10017   GOTO 10015
10018     AAAAB0=160
          AAAAC0=1
          GOTO 10009
10019   GOTO 10015
10020     AAAAB0=227
          AAAAC0=2
          GOTO 10009
10021     AAAAD0=227
          AAAAE0=2
          GOTO 10010
10022   GOTO 10015
10023     GOTO 10024
10012   IF((OLDCO0(OI).NE.0))GOTO 10025
        IF((NEWCO0(NI).NE.0))GOTO 10025
        GOTO 10013
10025   IF((OLDCO0(OI).EQ.1))GOTO 10026
        IF((NEWCO0(NI).NE.1))GOTO 10026
        GOTO 10016
10026   IF((OLDCO0(OI).NE.1))GOTO 10027
        IF((NEWCO0(NI).EQ.1))GOTO 10027
        GOTO 10018
10027   IF((OLDCO0(OI).NE.1))GOTO 10028
        IF((NEWCO0(NI).NE.1))GOTO 10028
        GOTO 10020
10028   IF((OLDCO0(OI).NE.2))GOTO 10029
        IF((NEWCO0(NI).NE.2))GOTO 10029
        GOTO 10023
10029   CONTINUE
10015 CONTINUE
      GOTO 10011
10024 RETURN
10008 IF((VERBO0.NE.1))GOTO 10030
        CALL PUTCH(138,-11)
10030 GOTO 10033
10031 OI=OI+(1)
      NI=NI+(1)
10033 IF((OLDCO0(OI).NE.0))GOTO 10032
      IF((NEWCO0(NI).NE.0))GOTO 10032
        JUNK=GETLIN(LINE,OLDCP0)
        IF((VERBO0.NE.1))GOTO 10034
          CALL PRINT(-11,AAAAF0,OI-1,NI-1)
          CALL PUTLIN(LINE,-11)
10034   JUNK=GETLIN(LINE,NEWCP0)
      GOTO 10031
10032 GOTO 10035
10009 CALL PUTCH(138,-11)
      GOTO 10038
10036 OI=OI+(1)
10038 IF((OLDCO0(OI).NE.1))GOTO 10037
        JUNK=GETLIN(LINE,OLDCP0)
        IF((VERBO0.NE.1))GOTO 10039
          CALL PRINT(-11,AAAAG0,AAAAB0,OI-1)
          GOTO 10040
10039     CALL PRINT(-11,AAAAH0,AAAAB0,OI-1)
10040   CALL PUTLIN(LINE,-11)
      GOTO 10036
10037 GOTO 10041
10010 CALL PUTCH(138,-11)
      GOTO 10044
10042 NI=NI+(1)
10044 IF((NEWCO0(NI).NE.1))GOTO 10043
        JUNK=GETLIN(LINE,NEWCP0)
        IF((VERBO0.NE.1))GOTO 10045
          CALL PRINT(-11,AAAAI0,AAAAD0,NI-1)
          GOTO 10046
10045     CALL PRINT(-11,AAAAJ0,AAAAD0,NI-1)
10046   CALL PUTLIN(LINE,-11)
      GOTO 10042
10043 GOTO 10047
10041 GOTO(10019,10021),AAAAC0
      GOTO 10041
10047 GOTO(10017,10022),AAAAE0
      GOTO 10047
10035 GOTO 10014
      END
      SUBROUTINE GENRE0
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER OI,NI
      INTEGER JUNK
      INTEGER GETLIN
      INTEGER LINE(102)
      INTEGER AAAAK0
      INTEGER AAAAL0
      INTEGER AAAAM0(11)
      INTEGER AAAAN0(9)
      INTEGER AAAAO0(12)
      INTEGER AAAAP0(9)
      INTEGER AAAAQ0(11)
      INTEGER AAAAR0(9)
      DATA AAAAM0/219,227,227,221,237,227,160,252,170,238,0/
      DATA AAAAN0/219,227,227,221,237,227,170,238,0/
      DATA AAAAO0/219,227,227,221,237,227,160,170,170,170,238,0/
      DATA AAAAP0/219,227,227,221,237,227,170,238,0/
      DATA AAAAQ0/219,227,227,221,237,227,160,252,170,238,0/
      DATA AAAAR0/219,227,227,221,237,227,170,238,0/
      OI=2
      NI=2
10050   GOTO 10051
10052     OI=OI+(1)
          NI=NI+(1)
          JUNK=GETLIN(LINE,NEWCP0)
          CALL PUTLIN(LINE,-11)
        GOTO 10053
10054     CALL PRINT(-11,AAAAM0)
          AAAAL0=1
          GOTO 10049
10055     CALL PRINT(-11,AAAAN0)
        GOTO 10053
10056     CALL PRINT(-11,AAAAO0)
          CALL PRINT(-11,AAAAP0)
          AAAAK0=1
          GOTO 10048
10057   GOTO 10053
10058     AAAAK0=2
          GOTO 10048
10059     CALL PRINT(-11,AAAAQ0)
          AAAAL0=2
          GOTO 10049
10060     CALL PRINT(-11,AAAAR0)
        GOTO 10053
10061     GOTO 10062
10051   IF((OLDCO0(OI).NE.0))GOTO 10063
        IF((NEWCO0(NI).NE.0))GOTO 10063
        GOTO 10052
10063   IF((OLDCO0(OI).EQ.1))GOTO 10064
        IF((NEWCO0(NI).NE.1))GOTO 10064
        GOTO 10054
10064   IF((OLDCO0(OI).NE.1))GOTO 10065
        IF((NEWCO0(NI).EQ.1))GOTO 10065
        GOTO 10056
10065   IF((OLDCO0(OI).NE.1))GOTO 10066
        IF((NEWCO0(NI).NE.1))GOTO 10066
        GOTO 10058
10066   IF((OLDCO0(OI).NE.2))GOTO 10067
        IF((NEWCO0(NI).NE.2))GOTO 10067
        GOTO 10061
10067   CONTINUE
10053 CONTINUE
      GOTO 10050
10062 RETURN
10048 GOTO 10070
10068 OI=OI+(1)
10070 IF((OLDCO0(OI).NE.1))GOTO 10069
      GOTO 10068
10069 GOTO 10071
10049 GOTO 10074
10072 NI=NI+(1)
10074 IF((NEWCO0(NI).NE.1))GOTO 10073
        JUNK=GETLIN(LINE,NEWCP0)
        CALL PUTLIN(LINE,-11)
      GOTO 10072
10073 GOTO 10075
10071 GOTO(10057,10059),AAAAK0
      GOTO 10071
10075 GOTO(10055,10060),AAAAL0
      GOTO 10075
      END
      SUBROUTINE GENSC0
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER OI,NI,OFFSET,LENGTH
      INTEGER JUNK
      INTEGER GETLIN
      INTEGER LINE(102)
      INTEGER AAAAS0
      INTEGER AAAAT0
      INTEGER AAAAU0(6)
      INTEGER AAAAV0(4)
      INTEGER AAAAW0(9)
      INTEGER AAAAX0(9)
      INTEGER AAAAY0(4)
      INTEGER AAAAZ0(4)
      DATA AAAAU0/170,233,225,170,238,0/
      DATA AAAAV0/174,170,238,0/
      DATA AAAAW0/170,233,172,170,233,228,170,238,0/
      DATA AAAAX0/170,233,172,170,233,227,170,238,0/
      DATA AAAAY0/174,170,238,0/
      DATA AAAAZ0/247,170,238,0/
      OI=2
      NI=2
      OFFSET=0
10078   GOTO 10079
10080     OI=OI+(1)
          NI=NI+(1)
          JUNK=GETLIN(LINE,NEWCP0)
        GOTO 10081
10082     CALL PRINT(-11,AAAAU0,OI-2+OFFSET)
          AAAAT0=1
          GOTO 10077
10083     CALL PRINT(-11,AAAAV0)
          OFFSET=OFFSET+(LENGTH)
        GOTO 10081
10084     AAAAS0=1
          GOTO 10076
10085     CALL PRINT(-11,AAAAW0,OI-1-LENGTH+OFFSET,OI-2+OFFSET)
          OFFSET=OFFSET-(LENGTH)
        GOTO 10081
10086     AAAAS0=2
          GOTO 10076
10087     CALL PRINT(-11,AAAAX0,OI-1-LENGTH+OFFSET,OI-2+OFFSET)
          OFFSET=OFFSET-(LENGTH)
          AAAAT0=2
          GOTO 10077
10088     CALL PRINT(-11,AAAAY0)
          OFFSET=OFFSET+(LENGTH)
        GOTO 10081
10089     GOTO 10090
10079   IF((OLDCO0(OI).NE.0))GOTO 10091
        IF((NEWCO0(NI).NE.0))GOTO 10091
        GOTO 10080
10091   IF((OLDCO0(OI).EQ.1))GOTO 10092
        IF((NEWCO0(NI).NE.1))GOTO 10092
        GOTO 10082
10092   IF((OLDCO0(OI).NE.1))GOTO 10093
        IF((NEWCO0(NI).EQ.1))GOTO 10093
        GOTO 10084
10093   IF((OLDCO0(OI).NE.1))GOTO 10094
        IF((NEWCO0(NI).NE.1))GOTO 10094
        GOTO 10086
10094   IF((OLDCO0(OI).NE.2))GOTO 10095
        IF((NEWCO0(NI).NE.2))GOTO 10095
        GOTO 10089
10095   CONTINUE
10081 CONTINUE
      GOTO 10078
10090 CALL PRINT(-11,AAAAZ0)
      RETURN
10076 LENGTH=0
      GOTO 10098
10096 OI=OI+(1)
10098 IF((OLDCO0(OI).NE.1))GOTO 10097
        LENGTH=LENGTH+(1)
      GOTO 10096
10097 GOTO 10099
10077 LENGTH=0
      GOTO 10102
10100 NI=NI+(1)
10102 IF((NEWCO0(NI).NE.1))GOTO 10101
        LENGTH=LENGTH+(1)
        JUNK=GETLIN(LINE,NEWCP0)
        CALL PUTLIN(LINE,-11)
      GOTO 10100
10101 GOTO 10103
10099 GOTO(10085,10087),AAAAS0
      GOTO 10099
10103 GOTO(10083,10088),AAAAT0
      GOTO 10103
      END
      SUBROUTINE GROW
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER I,NX
      I=1
      GOTO 10106
10104 I=I+(1)
10106 IF((I.GE.NEWSI0))GOTO 10105
        NX=NEWXR0(I)
        IF((NX.LE.0))GOTO 10107
          IF((NEWXR0(I+1).GE.0))GOTO 10108
          IF((NEWXR0(I+1).NE.OLDXR0(NX+1)))GOTO 10108
            OLDXR0(NX+1)=I+1
            NEWXR0(I+1)=NX+1
10108   CONTINUE
10107 GOTO 10104
10105 I=NEWSI0
      GOTO 10111
10109 I=I-(1)
10111 IF((I.LE.1))GOTO 10110
        NX=NEWXR0(I)
        IF((NX.LE.0))GOTO 10112
          IF((NEWXR0(I-1).GE.0))GOTO 10113
          IF((NEWXR0(I-1).NE.OLDXR0(NX-1)))GOTO 10113
            OLDXR0(NX-1)=I-1
            NEWXR0(I-1)=NX-1
10113   CONTINUE
10112 GOTO 10109
10110 RETURN
      END
      INTEGER FUNCTION HASH(LINE)
      INTEGER LINE(1)
      INTEGER I
      HASH=0
      I=1
      GOTO 10116
10114 I=I+(1)
10116 IF((LINE(I).EQ.0))GOTO 10115
        HASH=HASH+(LINE(I))
      GOTO 10114
10115 HASH=MOD(IABS(HASH),6073)+1
      RETURN
      END
      SUBROUTINE INITI0
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER MKTEMP,OPEN
      INTEGER ARGNO,I
      INTEGER GETARG
      INTEGER ARG(180)
      INTEGER AAABA0
      INTEGER AAABB0
      OPTIO0=1
      VERBO0=0
      ARGNO=1
      IF((GETARG(1,ARG,180).EQ.-1))GOTO 10117
      IF((ARG(1).NE.173))GOTO 10117
        CALL MAPSTR(ARG,1)
        I=2
        GOTO 10120
10118   I=I+(1)
10120   IF((ARG(I).EQ.0))GOTO 10119
          AAABA0=ARG(I)
          GOTO 10121
10122       OPTIO0=5
          GOTO 10123
10124       OPTIO0=4
          GOTO 10123
10125       OPTIO0=1
          GOTO 10123
10126       OPTIO0=2
          GOTO 10123
10127       OPTIO0=3
          GOTO 10123
10128       VERBO0=1
          GOTO 10123
10121     AAABB0=AAABA0-225
          GOTO(10122,10124,10125,10129,10129,10129,10129,10129,10129,101
     *29,10129,10129,10129,10129,10129,10129,10126,10127,10129,10129,101
     *28),AAABB0
10129       CALL USAGE
10123   GOTO 10118
10119   ARGNO=2
10117 IF((GETARG(ARGNO,ARG,180).NE.-1))GOTO 10130
        OLDFI0=-10
        NEWFI0=-12
        GOTO 10131
10130   OLDFI0=OPEN(ARG,1)
        IF((OLDFI0.NE.-3))GOTO 10132
          CALL CANT(ARG)
10132   ARGNO=ARGNO+(1)
        IF((GETARG(ARGNO,ARG,180).NE.-1))GOTO 10133
          NEWFI0=-10
          GOTO 10134
10133     NEWFI0=OPEN(ARG,1)
          IF((NEWFI0.NE.-3))GOTO 10135
            CALL CANT(ARG)
10135     ARGNO=ARGNO+(1)
10134 CONTINUE
10131 IF((GETARG(ARGNO,ARG,180).EQ.-1))GOTO 10136
        CALL USAGE
10136 NEXTI0=1
      NEXTS0=1
      TEXTF0=MKTEMP(3)
      IF((TEXTF0.NE.-3))GOTO 10137
        CALL ERROR('can''t open temporary file.')
10137 OLDCP0=MKTEMP(3)
      IF((OLDCP0.NE.-3))GOTO 10138
        CALL ERROR('can''t open temporary file.')
10138 NEWCP0=MKTEMP(3)
      IF((NEWCP0.NE.-3))GOTO 10139
        CALL ERROR('can''t open temporary file.')
10139 RETURN
      END
      SUBROUTINE LABEL
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER OI,NI,OX,NX
      INTEGER AAABC0(41)
      INTEGER AAABD0(24)
      DATA AAABC0/207,236,228,223,248,242,229,230,160,168,170,233,169,16
     *0,189,160,170,233,172,160,206,229,247,223,248,242,229,230,160,168,
     *170,233,169,160,189,160,170,233,170,238,0/
      DATA AAABD0/233,238,160,236,225,226,229,236,186,160,160,227,225,23
     *8,167,244,160,232,225,240,240,229,238,0/
      OI=2
      NI=2
10140   OX=OLDXR0(OI)
        NX=NEWXR0(NI)
        GOTO 10141
10142     GOTO 10143
10144     OLDCO0(OI)=1
          OI=OI+(1)
        GOTO 10145
10146     NEWCO0(NI)=1
          NI=NI+(1)
        GOTO 10145
10147     OLDCO0(OI)=0
          OI=OI+(1)
          NEWCO0(NI)=0
          NI=NI+(1)
        GOTO 10145
10148     NEWCO0(NI)=1
          NI=NI+(1)
          OLDCO0(NX)=1
          OLDCO0(OI)=1
          OI=OI+(1)
          NEWCO0(OX)=1
        GOTO 10145
10141   IF((OI.LT.OLDSI0))GOTO 10149
        IF((NI.LT.NEWSI0))GOTO 10149
        GOTO 10142
10149   IF((OI.GE.OLDSI0))GOTO 10150
        IF((OX.GE.0))GOTO 10150
        GOTO 10144
10150   IF((NI.GE.NEWSI0))GOTO 10151
        IF((NX.GE.0))GOTO 10151
        GOTO 10146
10151   IF((OX.NE.NI))GOTO 10152
        IF((NX.NE.OI))GOTO 10152
        GOTO 10147
10152   IF((OI.GT.OLDSI0))GOTO 10153
        IF((NI.GT.NEWSI0))GOTO 10153
        GOTO 10148
10153   CONTINUE
          CALL PRINT(-15,AAABC0,OI,OX,NI,NX)
          CALL ERROR(AAABD0)
10145 CONTINUE
      GOTO 10140
10143 OLDCO0(1)=2
      OLDCO0(OLDSI0)=2
      NEWCO0(1)=2
      NEWCO0(NEWSI0)=2
      RETURN
      END
      SUBROUTINE LOAD
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER LNO,I
      INTEGER ENTER
      INTEGER H
      INTEGER LINE(102)
      INTEGER GETLIN
      DO 10154 H=1,6073
        BUCKE0(H)=0
10154 CONTINUE
10155 DO 10156 LNO=1,6000
        OLDCO0(LNO)=0
        NEWCO0(LNO)=0
10156 CONTINUE
10157 LNO=2
      GOTO 10160
10158 LNO=LNO+(1)
10160 IF((GETLIN(LINE,OLDFI0).EQ.-1))GOTO 10159
        IF((LNO.LE.6000))GOTO 10161
          CALL ERROR('old file too large to handle.')
10161   CALL PUTLIN(LINE,OLDCP0)
        I=ENTER(LINE)
        OLDCO0(I)=OLDCO0(I)+(1)
        OLDLN0(I)=LNO
        OLDXR0(LNO)=-I
      GOTO 10158
10159 OLDSI0=LNO
      LNO=2
      GOTO 10164
10162 LNO=LNO+(1)
10164 IF((GETLIN(LINE,NEWFI0).EQ.-1))GOTO 10163
        IF((LNO.LE.6000))GOTO 10165
          CALL ERROR('new file too large to handle.')
10165   CALL PUTLIN(LINE,NEWCP0)
        I=ENTER(LINE)
        NEWCO0(I)=NEWCO0(I)+(1)
        NEWXR0(LNO)=-I
      GOTO 10162
10163 NEWSI0=LNO
      RETURN
      END
      SUBROUTINE PAIR
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER I,J
      I=2
      GOTO 10168
10166 I=I+(1)
10168 IF((I.GE.NEWSI0))GOTO 10167
        J=-NEWXR0(I)
        IF((OLDCO0(J).NE.1))GOTO 10169
        IF((NEWCO0(J).NE.1))GOTO 10169
          NEWXR0(I)=OLDLN0(J)
          OLDXR0(OLDLN0(J))=I
10169 GOTO 10166
10167 NEWXR0(1)=1
      OLDXR0(1)=1
      NEWXR0(NEWSI0)=OLDSI0
      OLDXR0(OLDSI0)=NEWSI0
      RETURN
      END
      SUBROUTINE REPORT
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER AAABE0
      CALL REWIND(OLDCP0)
      CALL REWIND(NEWCP0)
      AAABE0=OPTIO0
      GOTO 10170
10171   CALL GENLI0
      GOTO 10172
10173   CALL GENRE0
      GOTO 10172
10174   CALL GENSC0
      GOTO 10172
10170 GOTO(10171,10173,10174),AAABE0
        CALL ERROR('in report:  can''t happen.')
10172 RETURN
      END
      SUBROUTINE SIMPL0
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER LINE1(102),LINE2(102)
      INTEGER LINENO,M1,M2
      INTEGER EQUAL,GETLIN
      INTEGER AAABF0(16)
      INTEGER AAABG0(12)
      INTEGER AAABH0(12)
      INTEGER AAABI0(18)
      INTEGER AAABJ0(18)
      DATA AAABF0/170,181,233,170,238,170,184,248,170,243,170,184,248,17
     *0,243,0/
      DATA AAABG0/228,233,230,230,229,242,229,238,244,170,238,0/
      DATA AAABH0/228,233,230,230,229,242,229,238,244,170,238,0/
      DATA AAABI0/229,239,230,160,239,238,160,239,236,228,160,230,233,23
     *6,229,170,238,0/
      DATA AAABJ0/229,239,230,160,239,238,160,238,229,247,160,230,233,23
     *6,229,170,238,0/
      LINENO=0
10175   M1=GETLIN(LINE1,OLDFI0)
        M2=GETLIN(LINE2,NEWFI0)
        IF((M1.EQ.-1))GOTO 10177
        IF((M2.EQ.-1))GOTO 10177
        GOTO 10176
10177     GOTO 10178
10176   LINENO=LINENO+(1)
        IF((EQUAL(LINE1,LINE2).NE.0))GOTO 10179
          IF((VERBO0.NE.1))GOTO 10180
            CALL PRINT(-11,AAABF0,LINENO,LINE1,LINE2)
            GOTO 10181
10180       CALL PRINT(-11,AAABG0)
            RETURN
10181   CONTINUE
10179 CONTINUE
      GOTO 10175
10178 IF((M1.NE.M2))GOTO 10182
        RETURN
10182 IF((VERBO0.NE.0))GOTO 10183
        CALL PRINT(-11,AAABH0)
        GOTO 10184
10183   IF((M1.NE.-1))GOTO 10185
          CALL PRINT(-11,AAABI0)
          GOTO 10186
10185     IF((M2.NE.-1))GOTO 10187
            CALL PRINT(-11,AAABJ0)
10187   CONTINUE
10186 CONTINUE
10184 RETURN
      END
      SUBROUTINE BINAR0
      INTEGER OLDCO0(6000),NEWCO0(6000),OLDXR0(6000),NEWXR0(6000),OLDLN0
     *(6000),BUCKE0(6073),SYMST0(12000)
      INTEGER * 4 TEXTL0(6000)
      COMMON /C1/OLDCO0
      COMMON /C2/NEWCO0
      COMMON /C3/OLDXR0
      COMMON /C4/NEWXR0
      COMMON /C5/OLDLN0
      COMMON /C6/BUCKE0
      COMMON /C7/SYMST0
      COMMON /C8/TEXTL0
      INTEGER NEXTS0,NEXTI0,NEWSI0,OLDSI0
      INTEGER OLDFI0,NEWFI0,TEXTF0,OLDCP0,NEWCP0
      INTEGER OPTIO0,VERBO0
      COMMON /DIFFC0/NEXTS0,NEXTI0,OLDFI0,NEWFI0,TEXTF0,NEWSI0,OLDSI0,OL
     *DCP0,NEWCP0,OPTIO0,VERBO0
      INTEGER M1,M2,I,LEN,BUF1(1024),BUF2(1024)
      INTEGER READF
      INTEGER * 4 BLOCK
      INTEGER AAABK0(26)
      INTEGER AAABL0(12)
      INTEGER AAABM0(12)
      INTEGER AAABN0(26)
      INTEGER AAABO0(18)
      INTEGER AAABP0(18)
      DATA AAABK0/170,177,176,236,186,160,170,182,172,173,184,172,176,23
     *3,160,170,182,172,173,184,172,176,233,170,238,0/
      DATA AAABL0/228,233,230,230,229,242,229,238,244,170,238,0/
      DATA AAABM0/228,233,230,230,229,242,229,238,244,170,238,0/
      DATA AAABN0/170,177,176,236,186,160,170,182,172,173,184,172,176,23
     *3,160,170,182,172,173,184,172,176,233,170,238,0/
      DATA AAABO0/229,239,230,160,239,238,160,239,236,228,160,230,233,23
     *6,229,170,238,0/
      DATA AAABP0/229,239,230,160,239,238,160,238,229,247,160,230,233,23
     *6,229,170,238,0/
      BLOCK=-1
10188   M1=READF(BUF1,1024,OLDFI0)
        M2=READF(BUF2,1024,NEWFI0)
        IF((M1.NE.M2))GOTO 10190
        IF((M1.EQ.-1))GOTO 10190
        GOTO 10189
10190     GOTO 10191
10189   DO 10192 I=1,M1
          IF((BUF1(I).EQ.BUF2(I)))GOTO 10194
            IF((VERBO0.NE.1))GOTO 10195
              CALL PRINT(-11,AAABK0,BLOCK+I,BUF1(I),BUF2(I))
              GOTO 10196
10195         CALL PRINT(-11,AAABL0)
              RETURN
10196     CONTINUE
10194     CONTINUE
10192   CONTINUE
10193   BLOCK=BLOCK+(M1)
      GOTO 10188
10191 IF((M1.NE.M2))GOTO 10197
        RETURN
10197 IF((VERBO0.NE.0))GOTO 10198
        CALL PRINT(-11,AAABM0)
        RETURN
10198 IF((M1.EQ.-1))GOTO 10199
      IF((M2.EQ.-1))GOTO 10199
        IF((M1.GE.M2))GOTO 10200
          LEN=M1
          M1=-1
          GOTO 10201
10200     LEN=M2
          M2=-1
10201   DO 10202 I=1,LEN
          IF((BUF1(I).EQ.BUF2(I)))GOTO 10204
            CALL PRINT(-11,AAABN0,BLOCK+I,BUF1(I),BUF2(I))
10204     CONTINUE
10202   CONTINUE
10203 CONTINUE
10199 IF((M1.NE.-1))GOTO 10205
        CALL PRINT(-11,AAABO0)
        GOTO 10206
10205   IF((M2.NE.-1))GOTO 10207
          CALL PRINT(-11,AAABP0)
10207 CONTINUE
10206 RETURN
      END
      SUBROUTINE USAGE
      CALL ERROR('Usage:  diff [-{b|c|d|r|s|v}] [old_file [new_file]].')
      END
C ---- Long Name Map ----
C Textloc                        textl0
C Symstore                       symst0
C Newsize                        newsi0
C Newcopy                        newcp0
C simplecompare                  simpl0
C Oldlno                         oldln0
C Oldfile                        oldfi0
C Nextinx                        nexti0
C Textfile                       textf0
C Oldcount                       oldco0
C collectdeletions               collf0
C Newfile                        newfi0
C genscript                      gensc0
C collectinsertions              collg0
C genrevision                    genre0
C Nextsym                        nexts0
C Option                         optio0
C Newcount                       newco0
C Oldxref                        oldxr0
C Verbose                        verbo0
C initialize                     initi0
C diffcom                        diffc0
C collectunchanged               colle0
C genlisting                     genli0
C Oldsize                        oldsi0
C Oldcopy                        oldcp0
C Newxref                        newxr0
C Bucket                         bucke0
C binarycompare                  binar0
