SUBROUTINE CONFIG(IU) C C DYNAMICALLY CONFIGURE MTREK OPTIONS C INCLUDE 'TRKCOMMON.FTN' REAL LAUNCH INTEGER SCAN,WHOM,CREW,HYPER,TORPS LOGICAL*1 THRU,XSHIP,CLOAK,CLON,FBASE,OK BYTE MESSAG,INITLS,CLRIT(2) DATA CLRIT/"33,'K'/ BYTE CMD,CHAR WRITE (5,100) 100 FORMAT (' Configuration options;',//, 1 ' K,init,max - set homing topedo options',/, 2 ' H,numb,warp - set black hole speed',/, 3 ' D,hdr,cdr - set homing drain, and cloaking drain',/, 4 ' M,num,[0,1] - if [1-8] initialize new black hole at warp "N"',/, 5 ' - if [0] delete black hole',/, 6 ' 1-8,x,y - to place black hole N to coord X,Y',/, 7 ' F,freq - to set the frequency for repair',/, 8 ' U,univ - to set working universe to "uni"',/, 9 ' V - to verify universe structure.') 101 WRITE (5,102) 102 FORMAT ('$CON>') READ (5,103,END=104) CMD,Z,X,Y 103 FORMAT (A1,3F10.0) IF (CMD.GE.'a'.AND.CMD.LE.'z') CMD = CMD - 32 IF (IU.EQ.0.AND.CMD.NE."125) GOTO 8010 IF (CMD.EQ."113) GOTO 1000 IF (CMD.EQ."110) GOTO 2000 IF (CMD.EQ."104) GOTO 3000 IF (CMD.EQ."115) GOTO 4000 IF (CMD.EQ."126) GOTO 5000 IF (CMD.EQ."106) GOTO 6000 IF (CMD.EQ."125) GOTO 8000 IF (CMD.GE.'1'.AND.CMD.LE.'8') GOTO 7000 104 RETURN 1000 CONTINUE C C Process homing torpedo options C IF (X.GE.2.AND.X.LT.20) ICNTRL(4)=X IF (X.GE.2.AND.X.LT.20) ICNTRL(3)=Y WRITE (5,1001) ICNTRL(4),ICNTRL(3) 1001 FORMAT (' Initial homer allocation = ',I2,/, 1 ' Maximum number of active homers = ',I2) GOTO 101 2000 CONTINUE C C Process black hole speed C IF (X.EQ.0) GOTO 2010 IF (X.GT.IHOLE(IU)) GOTO 2020 I=X IF (Y.GT.8) GOTO 2020 HWARP(IU,I)=Y WRITE (5,2001) I,HWARP(IU,I) 2001 FORMAT (' Black hole #',I1,' set to warp ',F3.1) GOTO 101 2010 IF (Y.GT.8) GOTO 2020 DO 2011, I=1,IHOLE(IU) HWARP(IU,I)=Y WRITE (5,2001)I,HWARP(IU,I) 2011 CONTINUE GOTO 101 2020 CONTINUE WRITE (5,2021)X,Y 2021 FORMAT (' Invalid parameters; N = ',F10.0,' Warp = ',F10.1) GOTO 101 3000 CONTINUE C C Process HDRAIN,CDRAIN C IF (X.EQ.0) GOTO 3002 RCNTRL(7)=X WRITE (5,3001) X 3001 FORMAT (' Drain for homing (HDRAIN) = ',F6.2) 3002 IF (Y.EQ.0) GOTO 101 RCNTRL(8)=Y WRITE (5,3003) Y 3003 FORMAT (' Drain for cloaking (CDRAIN) = ',F6.2) GOTO 101 4000 CONTINUE C C Initialize/delete black hole C I=X IF (I.EQ.IHOLE(IU).AND.Y.EQ.0) GOTO 4001 IF (I.EQ.IHOLE(IU)+1.AND.Y.GT.0) GOTO 4002 WRITE (5,4003) 4003 FORMAT (' Invalid assignment.') GOTO 101 4001 IF (IHOLE(IU).EQ.1) GOTO 4004 IHOLE(IU)=IHOLE(IU)-1 IX=HX(IU,I) IY=HY(IU,I) CALL UNIVIN(IX,IY,'.',IU) HX(IU,I)=0 HY(IU,I)=0 WRITE (5,4005) I,IX,IY 4005 FORMAT (' Black hole #',I1,' at position ',I3,',',I3,' deleted.') GOTO 101 4002 IX=RAN(0,1)*100.+1. IF (IX.GT.100) IX=100 IY=RAN(1,0)*100.+1. IF (IY.GT.100) IY=100 CALL UNIV(IX,IY,CHAR,IU) IF (CHAR.NE.'.') GOTO 4002 HX(IU,I)=IX HY(IU,I)=IY CALL UNIVIN(IX,IY,'#',IU) HWARP(IU,I)=Y IHOLE(IU)=I WRITE (5,4006)I,IX,IY,Y 4006 FORMAT (' Black hole #',I1,' initialized.',/,' Location = ', 1 I3,',',I3,/,' Warp = ',F4.2) GOTO 101 4004 WRITE (5,4007) 4007 FORMAT (' There must be at least one black hole.') GOTO 101 5000 CONTINUE CALL VFY(0) GOTO 101 6000 CONTINUE C C This section is to set the frequency for damage repair C I = X IF (I.LT.3.OR.I.GT.15) GOTO 6010 ICNTRL(7) = I WRITE (5,6001) I 6001 FORMAT (' Damage repair frequency set to 1% per ',I2,' sec.') GOTO 101 6010 WRITE (5,6011) I 6011 FORMAT (' Bad value 3 < ',I2,' < 15 specified.') GOTO 101 7000 DECODE(1,7001,CMD) I 7001 FORMAT (I1) IF (I.EQ.0.OR.I.GT.IHOLE(IU)) GOTO 7010 C C Move the black hole to the desired coord C IX=HX(IU,I) IY=HY(IU,I) IIX=X IIY=Y HX(IU,I)=IIX HY(IU,I)=IIY CALL UNIVIN(IX,IY,'.',IU) CALL UNIVIN(IIX,IIY,'#',IU) WRITE (5,7002) I,IX,IY,IIX,IIY 7002 FORMAT (' Black hole #',I1,' moved from ',I3,',',I3,' to ',I3, 1 ',',I3) GOTO 101 7010 WRITE (5,7011) I,IHOLE(IU) 7011 FORMAT (' Hole #',I1,' invalid -- There are only ',I2, 1 ' in system.') GOTO 101 8000 IU = X IF (IU.LT.1.OR.IU.GT.IUNIMX) GOTO 8005 WRITE (5,8001) IU 8001 FORMAT (' Working universe set to ',I1) GOTO 101 8005 WRITE (5,8006) 8006 FORMAT (' Invalid universe specifier, defaulting to 1.') IU=1 GOTO 101 8010 WRITE (5,8011) 8011 FORMAT (' Must specify working universe first.') GOTO 101 END