-+-+-+-+-+-+-+-+ START OF PART 3 -+-+-+-+-+-+-+-+ X`09IF ((LOGFLAG.NE.0).AND.MOD(MDATE+12,20).EQ.0) CALL GAME(+1,1) X5500`09CONTINUE XD`09CALL PME_EXIT X`09NCYCLE=1 XC`20 X`09IF (WIN.EQ.1) GOTO 100 X`09IF (WIN.EQ.2) GOTO 5700 X`09N=0 X`09DO 5600 J=1,70 X5600`09IF (OWNER(J).EQ.1) N=N+1 X`09IF (N.LT.30) GOTO 5700 X`09IF (NUMBER(9).GT.N/2) GOTO 5700 X`09TYPE 982 X982`09FORMAT(' The computer acknowledges defeat. Do'/ X`091`09' you wish to smash the rest of the enemy?') X`09ACCEPT 981,ORDERS X981`09FORMAT(4A1) X`09IF ((ORDERS.NE.'Y').AND.(ORDERS.NE.'y')) CALL EXIT X`09TYPE 980 X980`09FORMAT(' The enemy inadvertantly revealed its code used for'/ X`091`09' receiving battle information. You can display what they''ve'/ X`091`09' learned through the command ''JE''(cr)(lf), followed by the'/ X`091`09' sector number.') X`09SPECAL=.TRUE. X`09WIN=2 X`09AUTOMV=.FALSE. X`09GOTO 100 X5700`09IF ((NUMBER(9).GT.0).OR.(LIMIT(9).GT.0)) GOTO 5800 X`09CALL ERASE_PAGE(1,1) X`09TYPE 979 X979`09FORMAT(' The enemy is incapable of defeating you.'/ X`091`09' You are free to rape the empire as you wish.'/ X`091`09' There may be, however, remnants of the enemy fleet'/ X`091`09' to be routed out and destroyed.') X`09WIN=1 X`09AUTOMV=.FALSE. X`09GOTO 100 X5800`09DO 5900 I=1,70 X5900`09IF (OWNER(I).EQ.1) GOTO 100 X`09DO 6000 I=1,LIMIT(1) X6000`09IF (RLMAP(I).NE.0) GOTO 100 X`09CALL ERASE_PAGE(1,1) X`09WIN=1 X`09TYPE 978 X978`09FORMAT(' You have been rendered incapable of'/ X`091`09' defeating the rampaging enemy fascists! The'/ X`091`09' empire is lost. If you have any ships left, you may'/ X`091`09' attempt to harass enemy shipping.') X`09AUTOMV=.FALSE. X`09GOTO 100 X`09END X`0C XC BLOCK DATA FOR EMPIRE XC X`09SUBROUTINE BLOCK_DATA_EMPDAT XC X`09INCLUDE 'EMPIRE.INC/NOLIST' XC X`09DATA COMMAN/'S','R','I','K','O','L','F','G','P','H', X`091`09 'Y','T','V','J','?','U',0,'B','N','+'/ X X`09DATA COMM/'D','E','W','Q','A','Z','X','C','S', X`091`09 'L','B','F','T','G','V','J','U',-1,-1, X`092`09 'O','P','R','I','M','K','N', X`093`09 'S','?','Y','H'/ X X`09DATA IOTAB/0,500,700,900,1100,1200,1300,1400,1500,2000, X`091`09 2200,2400,2600,2700,2800,2900/ X X`09DATA OVRPOP/ X`091`09 9,001,002,9,003,004,05,9,9,9,06,9,07,9,9,08, X`092`09 0,499,199,0,199,199,83,0,0,0,99,0,99,0,0,99/ X X`09DATA COMSCN/'M','N','O','S','T','V','P','Y','C','L','H','J', X`091`09'G','R','0','Q','+','A','0',0, X`092`09'LO','NU','LI','TR','AR','TA','PA','A1', X`093`09'T3','A0','CO','CH','Q0','Q1','JE','CY','EX',0,0,0/ X X`09DATA ARROW/-101,-100,-99,-1,0,1,99,100,101/ X`09DATA CMYTBL/6104,6103,6102,6105,6101,6106,6107,6108,0/ X`09DATA CRAHIT/0,0,0,0, 200, 400,0,0,0, 500,0, 600,0,0, 700/ X`09DATA CRALOC/0,500,0,700,900,1100,0,0,0,1200,0,1300,0,0,1400/ X`09DATA HITS/1,1,0,3,2,3,0,0,0,8,0,8,0,0,12/ X`09DATA IARROW/0,1,-99,-100,-101,-1,99,100,101,0/ X`09DATA INDEX/11,12,0,13,14,15,0,0,0,16,0,17,0,0,18/ X`09DATA KBFUDG/-101,-100,-99,-1,1,99,100,101,0/ X`09DATA KBTBL/'Q','W','E','A','D','Z','X','C',' '/ X`09DATA LOPMAX/500,200,0,200,200,100,0,0,0,100,0,100,0,0,100/ X`09DATA OKA/'+',' ','*','X','O'/ X`09DATA OKB/'+',' ','O','t','*'/ X`09DATA OKC/'.',' ','O','*','X'/ X`09DATA PH/1,2,4,5,6,10,12,15/ X`09DATA PHAZE/'A','F','D','S','T','R','C','B'/ X`09DATA STEP/37/,POSIT/65/,START/102/,GIGI/0/,SWIDTH/70/,OUTOFGAS/0/ X`09DATA TIPE/1,2,0,3,4,5,0,0,0,6,0,7,0,0,8/ X X`09END X`0C X`09SUBROUTINE GAME(ICODE,LFLAG) XC XC THIS SUBROUTINE READS IN THE GAME MAP AND INITIALIZES THE MAP ARRAYS XC IT ALSO SAVES AND RESTORES THE GAME FROM THE SAVE FILE XC`09ICODE: FUNCTION, -1=RESTORE, 0=INIT, 1=SAVE XC X`09INCLUDE 'EMPIRE.INC/NOLIST' X`09COMMON/CITIES/CITIES(128) XC X`09DATA IFILE/'G','A','M','E','S',':','E','M','R','A',0/ XC X`09IF (ICODE) 1800,100,1500`09`09!-1/0/+1 = RESTORE/INIT/SAVE XC XC HERE TO INITIALIZE THE GAME XC X100`09DO 200 I=1,70`09`09`09!CLEAR ARRAYS X`09 X(I)=0 X`09 FOUND(I)=0 X`09 OWNER(I)=0 X`09 PHASE(I)=0 X`09 TARGET(I)=0 X`09 FIPATH(I)=0 X200`09CONTINUE X`09DO 300 I=1,1500 X`09 CODEFU(I)=0 X`09 CODELA(I)=0 X`09 MYCODE(I)=0 X300`09CONTINUE X`09DO 400 I=1,200 X`09 RANGE(I)=0 X`09 RANG(I)=0 X400`09CONTINUE X`09DO 500 I=1,500 X500`09 AR2S(I)=0 X`09DO 600 I=1,3000 X`09 RLMAP(I)=0 X600`09CONTINUE X`09DO 700 I=1,6000 X`09 EMAP(I)=' ' X`09 PMAP(I)=' ' X700`09CONTINUE XC X`09MODE=1 X`09ISEC=-1 X`09CALL TIME(PAMELA) X`09CALL DATE(REEED) X`09`09`09`09`09!THIS GETS UPDATED IN TWO PLACES!!!! X`09VERSION=8`09`09`09!VERSION OF DATA WITHIN EMSAVE.DAT FILE X`09IB=1 X XC-----MAP SELECTION------- XC PICK ONE OF THE MAPS RANDOMLY. MAPS ARE IN FILES A-F XC X`09TRY=0`09`09`09`09!TRY AGAIN`20 X900`09TRY=TRY+1 X`09IFILE(10)='A' X`09IFILE(10)=IFILE(10)+RND(10)`09!CURRENTLY SIX MAPS, ALLOW 4 EXTRA X`09IF (TRY .LE. 8) GOTO 1000`09!TRY AGAIN IF YOU DON'T HAVE ALL OF THEM X`09TYPE 999 X999`09FORMAT(' Generating new map ...') X`09CALL GEN X`09TRY=0 X`09GOTO 1100 X1000`09OPEN(UNIT=1,NAME=IFILE,ACCESS='SEQUENTIAL',FORM='UNFORMATTED', X`091`09TYPE='OLD',READONLY,ERR=900) X`09READ(1) (D(I),I=1,223) X`09READ(1) (D(I),I=224,446) X`09READ(1) (D(I),I=447,667) X `09CLOSE(UNIT=1) XC XC-----CITY AND A-MAP INITIALIZATION-------- XC X1100`09CALL INITIA(TRY)`09`09! TRANSFER MAP FROM D() INTO MAPBUF X1200`09C=RND(70)+1`09`09`09`09!** PICK OUR CITY X`09ID=RND(70)+1`09`09`09`09! PICK ENEMY CITY X`09IF (X(C).EQ.0.OR.X(ID).EQ.0) GOTO 1200 X`09IF (X(C).EQ.X(ID)) GOTO 1200 X`09IF ((EDGER(X(C)).EQ.8).OR.(EDGER(X(ID)).EQ.8)) GOTO 1200 X`09IF (TRY.NE.0) GOTO 1300 X1250`09PCON=CITIES(RMAP(X(ID))) X`09ECON=CITIES(RMAP(X(C))) X`09IF (PCON.LE.100) GOTO 1200`09! NOTE RMAP IS REALLY OWNER X`09IF (ECON.LE.100) GOTO 1200`09! FROM MAP GENERATOR X`09PTOT=PCON/100+MOD(PCON,100) X`09ETOT=ECON/100+MOD(ECON,100) X`09IF (PTOT.LE.ETOT) GOTO 1275 X`09I=C X`09C=ID X`09ID=I X`09GOTO 1250 X1275`09DIFF=MIN(11,((ETOT*2*100+45)/PTOT)/100)-1 X`09IF (PCON.EQ.ECON) DIFF=3 X`09K1=0 X`09DO 1280 I=1,70 X`09IF (X(I).EQ.0) GOTO 1280 X`09IF (RMAP(X(I)).NE.RMAP(X(ID))) GOTO 1280 X`09J1=0 X`09IF (IDIST(X(I),X(ID)).LE.6) J1=1 X`09IF (IDIST(X(I),X(ID)).LE.4) J1=2 X`09IF (IDIST(X(I),X(ID)).LE.3) J1=3 X`09K1=K1+J1 X1280`09CONTINUE X`09K2=0 X`09DO 1290 I=1,70 X`09IF (X(I).EQ.0) GOTO 1290 X`09IF (RMAP(X(I)).NE.RMAP(X(C))) GOTO 1290 X`09J2=0 X`09IF (IDIST(X(I),X(C)).LE.6) J2=1 X`09IF (IDIST(X(I),X(C)).LE.4) J2=2 X`09IF (IDIST(X(I),X(C)).LE.3) J2=3 X`09K2=K2+J2 X1290`09CONTINUE X`09TYPE 994,MAX(1,MIN(10,DIFF-K1+K2)) X994`09FORMAT(' Difficulty estimate:',I3, X`091 ' where 1 is easy and 10 is most challenging') X1300`09Z6=X(ID) X`09TYPE 998,X(ID)`09`09`09`09! TELL US WHERE IT IS X998`09FORMAT(' Your city is at ',I4) X`09DO 1400 I=1,6000 X1400`09RMAP(I)=OMAP(I) X`09RMAP(Z6)='O'`09`09`09`09! MARK IT ON MAP X`09RMAP(X(C))='X' X`09CALL SONAR(X(C))`09`09`09! DO SENSOR SCANS X`09CALL SENSOR(Z6) X`09MODE=0 X`09CALL LTR(Z6,0)`09`09`09`09! SHOW THE CITY X`09MODE=1 X`09CALL STROUT('What do you demand that this city produce?',13) X`09OWNER(ID)=1 X`09MDATE=0 X`09CALL PHASIN(ID,E) X`09TYPE 993,E X993`09FORMAT('+',A1,$) X`09OWNER(C)=2 X`09PHASE(C)=1 X`09FOUND(C)=5 X`09Z6=X(ID) X`09RETURN`09`09`09! RETURN TO ORDERS MODE XC XC HERE TO SAVE A GAME XC`20 X1500`09IF (MODE.EQ.0) TYPE 997 X997`09FORMAT(' A few moments please ...'/) X1600`09CONTINUE X`09CALL TIME(PAMELA) X`09CALL DATE(REEED) X`09IF (LFLAG.EQ.0) THEN X X`09OPEN(UNIT=1,NAME='EMSAVE',ACCESS='SEQUENTIAL',FORM='UNFORMATTED', X`091`09STATUS='UNKNOWN') X X`09ELSE X X`09AB=' ' X`09AC=' ' X`09I1=MDATE/100 X`09IF (I1.NE.0) AB=I1+48 X`09I2=(MDATE-(I1*100))/10 X`09IF ((I2.NE.0).OR.(AB.NE.' ')) AC=I2+48 X`09I3=MOD(MDATE,10) X`09OPEN(UNIT=1,NAME='EMSAVE.'//CHAR(AB)//CHAR(AC)//CHAR(I3+48), X`091 ACCESS='SEQUENTIAL',FORM='UNFORMATTED',STATUS='NEW') X`09END IF X X`09WRITE(1) LIMIT,MDATE,VERSION,PAMELA,REEED X`09DO 1680 I=1,6000 X`09EMAP(I)=EMAP(I)-MOD(I,100) X`09RMAP(I)=RMAP(I)-MOD(I,100) X`09OMAP(I)=OMAP(I)-MOD(I,100) X1680`09CONTINUE X`09 WRITE(1) EMAP,RMAP,PMAP,OMAP X`09DO 1690 I=1,6000 X`09EMAP(I)=EMAP(I)+MOD(I,100) X`09RMAP(I)=RMAP(I)+MOD(I,100) X`09OMAP(I)=OMAP(I)+MOD(I,100) X1690`09CONTINUE X`09 WRITE(1) RLMAP X`09WRITE(1) TROOPT X`09WRITE(1) NUMBER X`09WRITE(1) X,TARGET,FOUND X`09WRITE(1) OWNER,PHASE X`09DO 1700 I=1,16 X1700`09CALL WRITE(IOTAB(I),LIMIT(I),I) X`09WRITE(1) J1TS X`09WRITE(1) OUTOFGAS X`09WRITE(1) LOCI X`09WRITE(1) NSHIFT,FIPATH X`09write(1) ccityrounds,pcityrounds,producedunits X`09WRITE(1) LOGFLAG X`09CLOSE(UNIT=1) X`09RETURN XC XC HERE TO RESTORE A GAME XC X1800`09TYPE 997 X`09OPEN(UNIT=1,NAME='EMSAVE',ACCESS='SEQUENTIAL',FORM='UNFORMATTED', X`091 STATUS='OLD',ERR=2200) X`09READ(1) LIMIT,MDATE,VERSION,PAMELA,REEED X`09READ(1) EMAP,RMAP,PMAP,OMAP X`09IF (VERSION.LT.8) GOTO 1830 X`09DO 1820 I=1,6000 X`09EMAP(I)=EMAP(I)+MOD(I,100) X`09RMAP(I)=RMAP(I)+MOD(I,100) X`09OMAP(I)=OMAP(I)+MOD(I,100) X1820`09CONTINUE X1830`09IF(VERSION.GE.6) GOTO 1850 X`09DO 1850 I=1,6000 X`09 IF((EMAP(I).GE.'1').AND.(EMAP(I).LE.'8')) CALL TRAN(EMAP(I)) X`09 IF((RMAP(I).GE.'1').AND.(RMAP(I).LE.'8')) CALL TRAN(RMAP(I)) X`09 IF((PMAP(I).GE.'1').AND.(PMAP(I).LE.'8')) CALL TRAN(PMAP(I)) X1850`09CONTINUE X`09READ(1) RLMAP X`09READ(1) TROOPT X`09READ(1) NUMBER X`09READ(1) X,TARGET,FOUND X`09READ(1) OWNER,PHASE X`09DO 1900 I=1,16 X1900`09CALL READ(IOTAB(I),LIMIT(I),I) X`09IF (VERSION.LE.4) READ(1) (J1TS(I),I=1,1500) X`09IF (VERSION.GE.5) READ(1) J1TS X`09READ(1) OUTOFGAS X`09READ(1) LOCI X`09READ(1) NSHIFT,FIPATH X`09if (version.ge.7) read(1,END=2000)ccityrounds,pcityrounds,producedunits X`09IF (VERSION.GE.8) READ(1,END=2000)LOGFLAG X2000`09VERSION=8`09`09`09!TRANSLATE TO NEW VERSION X`09CLOSE(UNIT=1) X`09TYPE 996,PAMELA,REEED X996`09FORMAT(' Ready to resume game terminated at ',8A1,' on ', X`091`099A1,/) X X`09MODE=1 X`09ISEC=-1 X`09RETURN X X2200`09TYPE 995 X995`09FORMAT (' Unable to open save file, EMSAVE.DAT, Starting new game.') X`09GOTO 100`09 X`09END X`0C`20 X`09SUBROUTINE READ(BEG,LIM,NUM) XC X`09INCLUDE 'EMPIRE.INC/NOLIST' XC X`09DO 100 J=BEG+1,BEG+LIM X`09READ(1) K X`09RLMAP(J)=K X`09IF (NUM.LT.9) READ(1) MYCODE(J) X`09IF (NUM.GT.8) READ(1) CODEFU(J-1500),CODELA(J-1500) X`09IF (NUM.EQ.9) READ(1) AR2S(J-1500) X`09IF (NUM.EQ.2) READ(1) RANGE(J-500) X`09IF (NUM.EQ.10) READ(1) RANG(J-2000) X100`09CONTINUE X`09RETURN X`09END XC`20 X`09SUBROUTINE WRITE(BEG,LIM,NUM) XC X`09INCLUDE 'EMPIRE.INC/NOLIST' XC X`09DO 100 J=BEG+1,BEG+LIM X`09K=RLMAP(J) X`09WRITE(1) K X`09IF (NUM.LT.9) WRITE(1) MYCODE(J) X`09IF (NUM.GT.8) WRITE(1) CODEFU(J-1500),CODELA(J-1500) X`09IF (NUM.EQ.9) WRITE(1) AR2S(J-1500) X`09IF (NUM.EQ.2) WRITE(1) RANGE(J-500) X`09IF (NUM.EQ.10) WRITE(1) RANG(J-2000) X100`09CONTINUE X`09RETURN X`09END XC`20 X`09SUBROUTINE INITIA(FLAG) XC X`09INCLUDE 'EMPIRE.INC/NOLIST' X`09BYTE DECODE X`09EXTERNAL DECODE XC X`09DO 300 I=1,6000 X`09IF (FLAG.NE.0) OMAP(I)=DECODE(I) X`09IF (OMAP(I).NE.'*') GOTO 300 X`09N1=RND(70)+1`09`09`09`09!** X`09DO 100 N3=N1,N1+70 X`09N=N3 X`09IF (N.GT.70) N=N-70 X100`09IF (X(N).EQ.0) GOTO 200 X200`09X(N)=I X300`09CONTINUE X`09RETURN X`09END X X`09SUBROUTINE TRAN(AB) XC XC TRANSLATE OLD ENEMY UNITS TO NEW CHARACTERS XC X`09INCLUDE 'EMPIRE.INC/NOLIST' X`09BYTE OLDE(8),NEWE(8) X`09DATA OLDE/'1','2','3','4','5','6','7','8'/ X`09DATA NEWE/'a','f','d','s','t','r','c','b'/ X X`09DO 10 I=1,8 X10`09 IF(AB.EQ.OLDE(I)) AB=NEWE(I) X`09RETURN X`09END X X`0C X`09SUBROUTINE EDIT(Z5) XC`20 XC EDIT MODE COMMAND SUBROUTINE XC TEST ROUTINES FOR PATH XC`20 X`09INCLUDE 'EMPIRE.INC/NOLIST' XC`20 X`09Z6=Z5 X`09WHTFLG=0 X`09MOVFLG=0 X`09OLDJ=JECTOR X`09CALL SECTOR(PMAP(1)) X100`09LINE=KLINE(KI,JECTOR) X`09IADJST=LINE+KI-300 X`09IF (Z6.EQ.0) Z6=IADJST+1240 X`09DIR=1 X200`09IF (GIGI.NE.0) CALL REGIS_ON X`09CALL CURSOR(Z6-IADJST) X`09IF (GIGI.NE.0) CALL CENTER_CURSOR X`09E=GETCHX() X`09IF (GIGI.NE.0) CALL REGIS_OFF X`09Z7=Z6 X`09DO 300 I=1,8 X300`09IF (E.EQ.COMM(I)) Z6=Z6+IARROW(I+1)`09!IF CURSOR MOVE, CHANGE LOCATION X`09IF ((SCRCHK(Z6).EQ.1).AND.(ORDER(Z6).EQ.0)) GOTO 400 X`09Z6=Z7`09`09`09`09`09!IF NOT ON SCREEN, GET BACK X`09GOTO 4500 X X400`09IF (Z6.EQ.Z7) GOTO 500 X`09GOTO 200 X500`09DO 600 I=10,30 X`09J=I X600`09IF (E.EQ.COMM(I)) GOTO 700 X`09GOTO 4500 XC`09`09`09 L, B, F, T, G, V, J, U,-1,-1`09`09PRIV CMDS X700`09IF (PASS) GOTO (800,900,1000,1100,1200,1400,1500,1600,1700,1800) J-9 XC`09`09O, P, R, I, M, K, N, S, ?, Y, H`09`09`09NORMAL CMDS X`09GOTO (1300,1900,4300,2100,2500,2700,2900,3100,3200,4200,4400) J-19 X`09GOTO 4500 X X800`09ISEC=-1`09`09`09`09`09!N - DISPLAY ENEMY SECTOR X`09CALL SECTOR(EMAP(1)) X`09GOTO 200 X X900`09BEG=Z6`09`09`09`09`09!B - SET BEG X`09IX='B' X`09TYPE 999,IX X999`09FORMAT('+',A1,$) X`09GOTO 200 X X1000`09END=Z6`09`09`09`09`09!F - SET END X`09IX='E' X`09TYPE 999,IX X`09GOTO 200 X X1100`09FLAG=1000`09`09`09`09!T - SINGLE STEP & TRACE PATH X`09CALL PATH(BEG,END,DIR,OKC,FLAG) X`09GOTO 200 X X1200`09FLAG=1001`09`09`09`09!G - SHOW PATH CHOSEN X`09CALL PATH(BEG,END,DIR,OKC,FLAG) X`09GOTO 200 X X1300`09CONTINUE`09`09`09`09!O - RETURN TO CALLER X`09JECTOR=OLDJ`09`09`09`09!RESTORE SECTOR NUMBER X`09LINE=KLINE(KI,JECTOR) X`09IADJST=LINE+KI-300 X`09CALL SECTOR(PMAP(1))`09`09`09! REFRESH OUR MAP X`09RETURN X X1400`09DIR=-DIR`09`09`09`09!V - REVERSE DIRECTION X`09GOTO 200 X X1500`09H2=30`09`09`09`09`09!J - DISPLAY CODE VALUES FOR X`09OWN2=RMAP(Z6)`09`09`09`09! ENEMY UNITS X`09IF (OWN2.LT.'a' .OR. OWN2.GT.'9') GOTO 4500 X`09CALL FIND(OWN2,Z6,Z8,H2) X`09CALL LIB$SET_CURSOR(1,50) X`09CALL STROUT(' Code:',2) X`09TYPE 998,CODEFU(Z8-1500),CODELA(Z8-1500) X998`09FORMAT('+ ',2I6,1X$) X`09GOTO 200 X X1600`09ISEC=-1`09`09`09`09`09!U - DISPLAY REFERENCE SECTOR X`09CALL SECTOR(RMAP(1)) X`09GOTO 200 X X1700`09CONTINUE`09! SHOULDN'T HAPPEN X1800`09CONTINUE X`09STOP XC`20 XC P: PRINT OUT NEW SECTOR XC X1900`09ISEC=-1 X`09CALL LIB$SET_CURSOR(2,40) X`09CALL STROUT(' New Sector:',12) X`09JECTOR=IPHASE(GETCHX()) X`09IF (JECTOR.LT.0.OR.JECTOR.GT.9) GOTO 1900 X`09CALL SECTOR(PMAP(1)) X`09ISEC=-1 X`09Z6=0 X`09GOTO 100 XC`20 XC R: PRINT OUT THE ROUND NUMBER XC XC2000`09CALL LIB$SET_CURSOR(2,50) XC`09CALL STROUT(' Round #',12) XC`09CALL DECPRT(MDATE) XC`09CALL EOL XC`09GOTO 200 XC`20 XC I: DIRECTIONAL STASIS XC X2100`09AB=RMAP(Z6) X`09IF ((AB.LT.'A').OR.(AB.GT.'T')) GOTO 4500 X`09E=GETCHX() X`09DO 2200 I=1,8 X`09J=I X2200`09IF (COMM(I).EQ.E) GOTO 2300 X`09GOTO 4500 +-+-+-+-+-+-+-+- END OF PART 3 +-+-+-+-+-+-+-+-