SUBROUTINE VFY(FLAG) C C DYNAMICALLY VERIFY THE UNIVERSE C INCLUDE 'TRKCOMMON.FTN' REAL LAUNCH INTEGER SCAN,WHOM,CREW,HYPER,TORPS,FLAG,ERRCNT LOGICAL*1 THRU,XSHIP,CLOAK,CLON,FBASE,OK BYTE MESSAG,INITLS,CLRIT(2),CMD,CHAR CHARACTER*6 SUBR(8) DATA SUBR/'TORPI ','EBASE ','PHASER','MTORPS','MSHIPS','MHOMER', 1 'MHOLE ','MANTI '/ DATA CLRIT/"33,'K'/ C C IF (FLAG.EQ.0.OR.FLAG.GT.8) GOTO 5000 WRITE (5,1000) SUBR(FLAG) 1000 FORMAT (' MTVFY -- Verification requested by ',A6) C C Verify and clean-up if needed C 5000 DO 15000 KK=1,IUNIMX C IOFF=(KK-1)*20 ERRCNT = 0 DO 5001, I=1,8 DO 5001, J=1,20,2 IF (IBASE(I,IOFF+J).EQ.0.AND.IBASE(I,IOFF+J+1).EQ.0) GOTO 5001 CALL UNIV(IBASE(I,IOFF+J),IBASE(I,IOFF+J+1),CHAR,KK) IF (CHAR.EQ.'B') GOTO 5001 IF (IBASE(I,IOFF+J).EQ.0.OR.IBASE(I,IOFF+J).EQ.IMAXX) IBASE(I,J) = 1 IF (IBASE(I,IOFF+J+1).EQ.0.OR.IBASE(I,IOFF+J+1).EQ.IMAXY) 1 IBASE(I,IOFF+J) = 1 WRITE (5,5002) KK,I,IBASE(I,IOFF+J),IBASE(I,IOFF+J+1) 5002 FORMAT (' Univ ',I1,' User ',I1,' lost starbase at ',I3,',',I3, 1 ' -- restored.') CALL UNIVIN(IBASE(I,IOFF+J),IBASE(I,IOFF+J+1),'B',KK) ERRCNT=ERRCNT+1 5001 CONTINUE C C Verify any freighters C DO 6001, I=1,8 IF (FLOAD(KK,I).EQ.0) GOTO 6001 IX=FXCORD(KK,I) IY=FYCORD(KK,I) CALL UNIV(IX,IY,CHAR,KK) IF (CHAR.EQ.'F') GOTO 6001 CALL UNIVIN(IX,IY,'F',KK) WRITE (5,6002) KK,I,IX,IY 6002 FORMAT (' Univ ',I1,' User ',I1,' lost freighter at ',I3,',',I3, 1 ' -- restored') ERRCNT=ERRCNT+1 6001 CONTINUE DO 5003, I=1,IHOLE(KK) C C Verify the black holes, and clean-up C IX=HX(KK,I) IY=HY(KK,I) CALL UNIV(IX,IY,CHAR,KK) IF (CHAR.EQ.'#') GOTO 5003 WRITE (5,5004) KK,I,IX,IY 5004 FORMAT (' Univ ',I1,' Lost black hole #',I1,' at ',I3,',',I3, 1 ' -- restored.') CALL UNIVIN(IX,IY,'#',KK) ERRCNT=ERRCNT+1 5003 CONTINUE C C Search for extraneous bases, and black holes C DO 5100, I=1,IMAXX DO 5100, J=1,IMAXY CALL UNIV(I,J,CHAR,KK) IF (CHAR.NE.'#') GOTO 5007 C C Verify this black hole C OK = .FALSE. DO 5005, L=1,IHOLE(KK) IX=HX(KK,L) IY=HY(KK,L) IF (IX.EQ.I.AND.IY.EQ.J) OK=.TRUE. 5005 CONTINUE IF (OK) GOTO 5007 WRITE (5,5006) KK,I,J 5006 FORMAT (' Univ ',I1,' Extraneous black hole at ',I3,',',I3, 1 ' -- deleted.') CALL UNIVIN(I,J,'.',KK) ERRCNT=ERRCNT+1 GOTO 5010 5007 CALL UNIV(I,J,CHAR,KK) IF (CHAR.NE.'B') GOTO 5010 C C IT'S A BASE C OK=.FALSE. DO 5008, K=1,8 DO 5008, L=1,20,2 IF (IBASE(K,IOFF+L).EQ.I.AND.IBASE(K,IOFF+L+1).EQ.J) OK=.TRUE. 5008 CONTINUE IF (OK) GOTO 5010 WRITE (5,5009) KK,I,J 5009 FORMAT (' Univ ',I1,' Extraneous star base at ',I3,',',I3, 1 ' -- deleted.') CALL UNIVIN(I,J,'.',KK) ERRCNT=ERRCNT+1 5010 CALL UNIV(I,J,CHAR,KK) IF (CHAR.EQ.'^'.OR.CHAR.EQ.'+'.OR.CHAR.EQ.'@'.OR.CHAR.EQ.'*') 1 GOTO 5100 C C This should be a ship or freighter to verify ... C CALL UNIV(I,J,CHAR,KK) IF (CHAR.LT.'1'.OR.CHAR.GT.'8') GOTO 5050 DECODE (1,5075,CHAR) ISH 5075 FORMAT (I1) K=XCORD(ISH) L=YCORD(ISH) IF (K.EQ.I.AND.L.EQ.J.AND.KK.EQ.IUNIV(ISH)) GOTO 5100 WRITE (5,5011) KK,CHAR,I,J 5011 FORMAT (' Univ ',I1,' Extraneous ship #',A1,' at ',I3,',',I3, 1 ' -- deleted.') CALL UNIVIN(I,J,'.',KK) ERRCNT=ERRCNT+1 GOTO 5100 C C Must be a freighter C 5050 IF (CHAR.NE.'F') GOTO 5100 DO 5051 II=1,8 IF (FLOAD(KK,II).EQ.0) GOTO 5051 IX=FXCORD(KK,II) IY=FYCORD(KK,II) IF (IX.EQ.I.AND.IY.EQ.J) GOTO 5100 5051 CONTINUE WRITE (5,5052) KK,I,J 5052 FORMAT (' Univ ',I1,' Extraneous freighter at ',I3,',',I3, 1 ' -- deleted') ERRCNT=ERRCNT+1 CALL UNIVIN(I,J,'.',KK) C 5100 CONTINUE C 15000 CONTINUE C IF (FLAG.GT.0.AND.FLAG.LE.8) WRITE (5,1010) SUBR(FLAG),ERRCNT 1010 FORMAT (' MTVFY -- *',A6,'* Errors detected = ',I2) RETURN END