C C C ************************************************* C * * C * PHASER CONTROL TARGET SELECTION SUBROUTINE * C * * C ************************************************* C SUBROUTINE TARSEL(TEST2,NSEC,NP,J) COMMON QUAD(8,8),SECT(10,10),NGAL(8,8),K(7,5),STATUS(13),R1,C1,R,C &,H1,POW,SHLD(5),NTORP,A,B,H(7),N1,N2,N3,N4,N5,N6,II,JJ,RANK,ITR(4) COMMON/ALPHA/ALPH(30) COMMON/TESTS1/TROM1,TROM2,TDISAB,TDEST,TWON,TLOST,TRESC,TALTOW, &TBOFF,TALERT,TLOOS,TBALEN,TALSD,TINTRD DIMENSION NSEC(6,2),NP(6),IH(6),NK(6) INTEGER SECT,QUAD,R1,C1,R,C,SHLD,H1,A,B,POW,H LOGICAL TROM1,TROM2,TDISAB,TDEST,TWON,TLOST,TRESC,TALTOW,TBOFF, &TALERT,TLOOS,TBALEN,TALSD,TINTRD,TEST1,TEST2,TAUTOF,TKILL,TALL LOGICAL*1 EE,IMAGE(72),ANS,DUMMY(4),ALPH,ENDB,ENDS DATA ENDB,ENDS/' ','s'/ C TEST2=.FALSE. TAUTOF=.FALSE. IF(POW.GT.0)GOTO 60 130 TYPE 131 131 FORMAT(1X,'Power exhausted - order aborted'/) TEST2=.TRUE. RETURN 60 TYPE 61,POW 61 FORMAT(1X,'Power available to phasers: ',I5,' units') IF(TAUTOF)GOTO 310 10 TYPE 11 11 FORMAT(1X,'FIRING MODE? ',$) READ(5,41,ERR=10)ANS 41 FORMAT(A1) CALL CAPMSK(ANS,1) 1 IF(ANS.EQ.'M')GOTO 140 IF(ANS.EQ.'A')GOTO 2 IF(ANS.EQ.'C')GOTO 220 90 TYPE 91 91 FORMAT(1X,'AUTO or MANUAL? ',$) READ(5,41,ERR=90)ANS CALL CAPMSK(ANS,1) IF(ANS.NE.' ')GOTO 1 GOTO 220 2 IF(STATUS(4).GE.0.)GOTO 3 TYPE 101 101 FORMAT(/1X,'Short Range Sensors inoperative -- auto-fire unavailab &le'/1X,'Switching to manual control'/) WRITE(3,101) GOTO 140 3 TAUTOF=.TRUE. TYPE 111 111 FORMAT(/1X,'PHASER AUTO-FIRE ENGAGED') WRITE(3,111) NTARG=0 DO 4 I=1,7 IF(K(I,1).EQ.0 .OR. K(I,4).EQ.1)GOTO 4 IF(.NOT.TROM2 .AND. I.EQ.7)GOTO 4 NTARG=NTARG+1 J=NTARG NK(J)=I NSEC(J,1)=K(I,1) NSEC(J,2)=K(I,2) KPOW=K(I,3) IF(K(I,4).EQ.2)KPOW=2106 IH(J)=SIZHIT(K(I,1),K(I,2),KPOW,A,B) IF(J.EQ.1)GOTO 4 I1=0 5 IF(IH(J-I1).LE.IH(J-I1-1))GOTO 4 IZ=IH(J-I1-1) NZ=NK(J-I1-1) IH(J-I1-1)=IH(J-I1) NK(J-I1-1)=NK(J-I1) IH(J-I1)=IZ NK(J-I1)=NZ ZR=NSEC(J-I1-1,1) ZC=NSEC(J-I1-1,2) NSEC(J-I1-1,1)=NSEC(J-I1,1) NSEC(J-I1-1,2)=NSEC(J-I1,2) NSEC(J-I1,1)=ZR NSEC(J-I1,2)=ZC I1=I1+1 IF(J-I1-1.NE.0)GOTO 5 4 CONTINUE IF(NTARG.NE.0)GOTO 6 TYPE 121 121 FORMAT(1X,'** NO TARGETS IDENTIFIED **') WRITE(3,121) GOTO 220 6 EE=ENDS VRB='have' IF(NTARG.EQ.1)EE="0 IF(NTARG.EQ.1)VRB='has' CALL CROP(EE,1) CALL CROP(VRB,4) 250 TYPE 251,NTARG,EE,VRB 251 FORMAT(1X,I1,' target',A1,1X,A4,' been identified') WRITE(3,251)NTARG,EE,VRB 7 IF(NTARG.EQ.1)TYPE 261 261 FORMAT(1X,'IS THE TARGET',$) IF(NTARG.GT.1)TYPE 271 271 FORMAT(1X,'ARE ANY OF THE TARGETS',$) 280 TYPE 281 281 FORMAT(1H+,' TO BE ONLY DISABLED? ',$) READ(5,41,ERR=7)ANS CALL CAPMSK(ANS,1) TKILL=.FALSE. TALL=.FALSE. NPWRQ=0 IF(ANS.EQ.'N')TKILL=.TRUE. IF(ANS.EQ.'A')TALL=.TRUE. IF(ANS.EQ.'C')GOTO 220 IF(TKILL .OR. TALL)GOTO 12 IF(ANS.NE.'Y')GOTO 7 12 DO 8 I=1,NTARG KR=NSEC(I,1) KC=NSEC(I,2) IF(TKILL)GOTO 22 IF(TALL .OR. NTARG.EQ.1)GOTO 18 290 TYPE 291,KR,KC 291 FORMAT(1X,'IS VESSEL IN SECTOR',I3,',',I3,' TO BE DISABLED? ',$) READ(5,41,ERR=290)ANS CALL CAPMSK(ANS,1) IF(ANS.EQ.'N')GOTO 22 IF(ANS.EQ.'Y')GOTO 18 IF(ANS.NE.'C')GOTO 290 340 TYPE 201,KR,KC WRITE(3,201)KR,KC NSEC(I,1)=0 NTARG=NTARG-1 GOTO 8 18 HITSZ=K(NK(I),3)-50 IF(K(NK(I),3).GE.100)GOTO 9 TYPE 331 331 FORMAT(1X,'Vessel is already disabled') GOTO 340 22 HITSZ=K(NK(I),3) 9 NP(I)=HITSZ*SQRT(FLOAT((A-KR)**2+(B-KC)**2))*0.1+1.5 NPWRQ=NPWRQ+NP(I) 8 CONTINUE IF(NTARG.EQ.0)GOTO 220 TYPE 301,NPWRQ 301 FORMAT(1X,'Estimated power required:',I5,' units') WRITE(3,301)NPWRQ 310 TYPE 311 311 FORMAT(1X,'POWER ALLOCATED TO PHASERS? ',$) READ(5,321,ERR=310)TOTP 321 FORMAT(F10.0) NTOTP=TOTP GOTO 23 140 TYPE 141 141 FORMAT(1X'TARGET SECTORS & POWER ALLOCATED TO EACH?') 30 READ(5,31,ERR=150)NCHAR,IMAGE 31 FORMAT(Q,72A1) IF(NCHAR.EQ.0 .OR. IMAGE(1).EQ.ALPH(3))GOTO 220 IF(NCHAR.GT.72)NCHAR=72 N1=0 NTOTP=0 NTARG=1 NN=1 J=1 TEST1=.FALSE. DO 15 I=1,NCHAR IF(I.EQ.NCHAR .AND. NN.LT.3 .AND. I.GT.1)GOTO 150 IF(I.EQ.NCHAR)GOTO 14 IF(IMAGE(I).EQ.ALPH(27))GOTO 230 IF(IMAGE(I).EQ.ALPH(29) .AND. N1.NE.0 .AND. NN.EQ.3)GOTO 70 IF(IMAGE(I).EQ.ALPH(30) .AND. NN.LT.3)GOTO 160 IF(IMAGE(I).EQ.ALPH(28) .AND. NN.EQ.1)GOTO 160 IF(IMAGE(I).EQ.ALPH(28))GOTO 150 IF(IMAGE(I).EQ.ALPH(29) .AND. NN.NE.3)GOTO 150 IF(IMAGE(I).EQ.ALPH(30) .AND. NN.NE.2)GOTO 150 GOTO 13 150 TYPE 151 151 FORMAT(/1X'*** INPUT ERROR - check format (#,#/#;...) ***'/) GOTO 60 230 TYPE 231 231 FORMAT(/1X,'*** INPUT ERROR - integer variables only ***'/) GOTO 60 240 TYPE 241,J 241 FORMAT(/1X,'*** INVALID TARGET SECTOR - entry #',I2,' ***'/) GOTO 60 80 TYPE 81,J 81 FORMAT(/1X,'*** INVALID POWER INPUT - entry #',I2,' ***'/) GOTO 60 13 N1=N1+1 IF(N1.GT.4)GOTO 150 DUMMY(N1)=IMAGE(I) IF(TEST1)GOTO 70 GOTO 15 14 TEST1=.TRUE. IF(I.NE.1)GOTO 13 GOTO 220 160 DECODE(N1,161,DUMMY,ERR=150)NSEC(J,NN) 161 FORMAT(I2) IF(NSEC(J,NN).LE.0 .OR. NSEC(J,NN).GT.10)GOTO 240 GOTO 26 70 DECODE(N1,71,DUMMY,ERR=150)NP(J) 71 FORMAT(I4) IF(NP(J).LT.0)GOTO 80 29 NTOTP=NTOTP+NP(J) 26 IF(TEST1)GOTO 16 N1=0 NN=NN+1 IF(NN.LE.3)GOTO 15 NN=1 J=J+1 IF(J.GT.6)GOTO 16 NTARG=NTARG+1 15 CONTINUE 16 J=NTARG 25000 WRITE(3,25001)IMAGE 25001 FORMAT(1X,'Target sectors & power allocations:'/1X,72A1) DO 17 I=1,J GOTO(19,170,210,17,170,19,170),SECT(NSEC(I,1),NSEC(I,2))+1 170 TYPE 171,NSEC(I,1),NSEC(I,2) 171 FORMAT(1X'NO ALIEN VESSEL IN SECTOR',I3,',',I3,' - is this target &cancelled? ',$) 180 READ(5,181,ERR=190)ANS 181 FORMAT(A1) CALL CAPMSK(ANS,1) IF(ANS.EQ.ALPH(25))GOTO 200 IF(ANS.EQ.ALPH(14))GOTO 17 190 TYPE 191 191 FORMAT(1X'*** ANSWER NOT ACCEPTABLE - USE "Y" OR "N" ***') GOTO 170 210 TYPE 211 211 FORMAT(1X,'Your own ship has been entered as a target - automatic &abort') WRITE(3,211) 200 TYPE 201,NSEC(I,1),NSEC(I,2) 201 FORMAT(1X'*** TARGET IN SECTOR',I3,',',I3,' CANCELLED ***') WRITE(3,201)NSEC(I,1),NSEC(I,2) NSEC(I,1)=0 NTARG=NTARG-1 NTOTP=NTOTP-NP(I) IF(NTARG.GT.0)GOTO 17 TEST2=.TRUE. RETURN 19 IF(TROM1)POW=POW-5 IF(POW.LE.0)GOTO 130 IF(SECT(NSEC(I,1),NSEC(I,2)).EQ.0)GOTO 170 17 CONTINUE 23 IF(NTOTP.LE.0)GOTO 220 IF(POW.GE.NTOTP)GOTO 28 20 TYPE 21,NTOTP 21 FORMAT(/1X'*** INSUFFICIENT POWER AVAILABLE - power requested:',I5 &,' units') GOTO 60 28 EE=ENDB IF(NTARG.GT.1)EE='s' WRITE(3,1001)NTOTP 1001 FORMAT(1X,'TOTAL POWER ALLOCATED TO PHASERS=',I6) 50 TYPE 51,EE 51 FORMAT(/1X,'Phasers energized and locked on target',A1) WRITE(3,51) IF(.NOT.TAUTOF)RETURN NTP=0 DO 24 I=1,J IF(NSEC(I,1).EQ.0)GOTO 24 IF(NTP.EQ.NTOTP)GOTO 25 NTP=NTP+NP(I) IF(NTP.LE.NTOTP)GOTO 24 NP(I)=NTOTP-(NTP-NP(I)) NTP=NTOTP GOTO 24 25 NSEC(I,1)=0 24 CONTINUE IF(NTP.EQ.NTOTP)RETURN N=1 DO 27 I=1,NTOTP-NTP IF(NSEC(N,1).EQ.0)GOTO 27 NP(N)=NP(N)+1 N=N+1 IF(N.GT.J)N=1 27 CONTINUE RETURN 220 TYPE 221 221 FORMAT(1X,'*** COMMAND CANCELLED ***') TEST2=.TRUE. RETURN END