SUBROUTINE TREAD(STR, NC) BYTE STR CALL INCHAR(STR, NC, .FALSE., 0, NC, IERR) IF (.NOT.(NC .EQ. 0 .AND. IERR .NE. -2)) GOTO 2000 STR = ' ' C ELSE IF (STR >= 'a' & STR <= 'z') C STR = (STR - 'a') + 'A' 2000 CONTINUE RETURN END SUBROUTINE RBUFF COMMON/MESS/CLEARF LOGICAL CLEARF CALL CLEAR CLEARF = .FALSE. C C DRAW NEW SCREEN C CALL BUFFIL(2, 4, 'Energy :', 10) CALL BUFFIL(3, 4, 'Shields :', 10) CALL BUFFIL(5, 4, 'Warp :', 10) CALL BUFFIL(6, 4, 'Course :', 10) CALL BUFFIL(8, 4, 'X co-ord :', 10) CALL BUFFIL(9, 4, 'Y co-ord :', 10) CALL BUFFIL(11, 4, 'Torps :', 10) CALL BUFFIL(12, 4, 'Seekers :', 10) CALL BUFFIL(13, 4, 'Hyper :', 10) CALL BUFFIL(15, 4, 'Def Ship :', 10) CALL BUFFIL(16, 4, 'Def Direc:', 10) CALL BUFFIL(2, 71, 'Scores', 6) CALL BUFFIL(4, 69, '1', 1) CALL BUFFIL(5, 69, '2', 1) CALL BUFFIL(6, 69, '3', 1) CALL BUFFIL(7, 69, '4', 1) CALL BUFFIL(8, 69, '5', 1) CALL BUFFIL(9, 69, '6', 1) CALL BUFFIL(10, 69, '7', 1) CALL BUFFIL(11, 69, '8', 1) CALL BUFFIL(13, 69, 'TARGET:', 7) CALL BUFFIL(15, 69, 'Dir :', 5) CALL BUFFIL(16, 69, 'Dist:', 5) CALL BUFFIL(17, 69, 'Sect:', 5) CALL OUTCH(0, 0) RETURN END SUBROUTINE REFRSH(ME) C COMMON PARAMETER MAXSHP = 8, MAXHOM = 4, MAXTRP = 10 COMMON/TORPE/TLOCS(MAXSHP, MAXTRP, 2), TDIR(MAXSHP, MAXTRP), IT(MA *XSHP) COMMON/TRKDAT/ENERGY(MAXSHP), SHIELD(MAXSHP), XCORD(MAXSHP), YCORD *(MAXSHP), TORPS(MAXSHP), HOLX, HOLY, HOLW, CDRAIN, NDRAIN, TDRAIN, * SCAN(MAXSHP), PHA(MAXSHP), I1, I2, HYPER(MAXSHP), ISENT(MAXSHP, 1 *0), XPOD(MAXSHP), YPOD(MAXSHP), DPOD(MAXSHP), IPODST(MAXSHP), WPOD *(MAXSHP), XHOM(MAXSHP, MAXHOM), YHOM(MAXSHP, MAXHOM), WHOM(MAXSHP, * MAXHOM), NHOM(MAXSHP), TRBEAM(MAXSHP), SCORE(MAXSHP), CREW(MAXSHP *), DIR(MAXSHP), WARP(MAXSHP), LAUNCH(MAXSHP), UNIV(100, 100), MESS *AG(480), THRU, SHPACT(MAXSHP), CLOAK(MAXSHP), NET(MAXSHP), SHPNAM( *10, MAXSHP) REAL LAUNCH, NDRAIN INTEGER*2SCAN, WHOM, CREW, HYPER, TORPS, TRBEAM LOGICAL*1THRU, SHPACT, CLOAK, NET BYTE UNIV, MESSAG BYTE SHPNAM C NOTE: BHOLE AND EMPTY ARE THE CHARACTERS FOR THE BLACK HOLE C AND EMPTY SPACE. C END COMMON BYTE STRNG(10) BYTE ACT(8) INTEGER DEFSHP REAL DEFDIR COMMON/DEFLTS/DEFSHP, DEFDIR INTEGER OLDSHP COMMON/OLDSTF/OLDSCR(MAXSHP), OLDCRS, OLDWRP, OLDEN, OLDSH, OLDX, *OLDY, IOLDT, IOLDH, IOLDP, OLDDIR, OLDSHP DATA OLDSHP/0/, OLDDIR/ - 1.0/, OLDWRP/ - 1.0/, OLDEN/ - 1.0/ DATA OLDSH/0.0/, OLDX/ - 1.0/, OLDY/ - 1.0/, IOLDT/0/, IOLDH/0/ DATA IOLDP/0/ DATA ACT/8*' '/, OLDSCR/8* - 1E - 10/ IF (.NOT.(OLDEN .NE. ENERGY(ME))) GOTO 2020 OLDEN = ENERGY(ME) ENCODE(7, 1001, STRNG) OLDEN 1001 FORMAT(F7.1) CALL BUFFIL(2, 15, STRNG, 7) 2020 CONTINUE IF (.NOT.(OLDSH .NE. SHIELD(ME))) GOTO 2040 OLDSH = SHIELD(ME) ENCODE(7, 1011, STRNG) OLDSH 1011 FORMAT(F7.1) CALL BUFFIL(3, 15, STRNG, 7) 2040 CONTINUE IF (.NOT.(OLDWRP .NE. WARP(ME))) GOTO 2060 OLDWRP = WARP(ME) ENCODE(4, 1021, STRNG) OLDWRP 1021 FORMAT(F4.2) CALL BUFFIL(5, 18, STRNG, 4) 2060 CONTINUE IF (.NOT.(OLDCRS .NE. DIR(ME))) GOTO 2080 OLDCRS = DIR(ME) V = CLKDIR(OLDCRS) ENCODE(5, 1031, STRNG) V 1031 FORMAT(F5.2) CALL BUFFIL(6, 17, STRNG, 5) 2080 CONTINUE IF (.NOT.(OLDX .NE. XCORD(ME))) GOTO 2100 OLDX = XCORD(ME) ENCODE(5, 1041, STRNG) OLDX 1041 FORMAT(F5.1) CALL BUFFIL(8, 17, STRNG, 5) 2100 CONTINUE IF (.NOT.(OLDY .NE. YCORD(ME))) GOTO 2120 OLDY = YCORD(ME) ENCODE(5, 1051, STRNG) OLDY 1051 FORMAT(F5.1) CALL BUFFIL(9, 17, STRNG, 5) 2120 CONTINUE IF (.NOT.(IOLDT .NE. TORPS(ME))) GOTO 2140 IOLDT = TORPS(ME) ENCODE(2, 1061, STRNG) IOLDT 1061 FORMAT(I2) CALL BUFFIL(11, 20, STRNG, 2) 2140 CONTINUE IF (.NOT.(IOLDH .NE. NHOM(ME))) GOTO 2160 IOLDH = NHOM(ME) ENCODE(2, 1071, STRNG) IOLDH 1071 FORMAT(I2) CALL BUFFIL(12, 20, STRNG, 2) 2160 CONTINUE IF (.NOT.(IOLDP .NE. HYPER(ME))) GOTO 2180 IOLDP = HYPER(ME) ENCODE(1, 1081, STRNG) IOLDP 1081 FORMAT(I1) CALL BUFFIL(13, 21, STRNG, 1) 2180 CONTINUE IF (.NOT.(OLDSHP .NE. DEFSHP)) GOTO 2200 OLDSHP = DEFSHP ENCODE(1, 1091, STRNG) OLDSHP 1091 FORMAT(I1) CALL BUFFIL(15, 21, STRNG, 1) 2200 CONTINUE IF (.NOT.(OLDDIR .NE. DEFDIR)) GOTO 2220 OLDDIR = DEFDIR ENCODE(5, 1101, STRNG) DEFDIR 1101 FORMAT(F5.2) CALL BUFFIL(16, 17, STRNG, 5) 2220 CONTINUE DO 2240 J = 1, 8 IF (.NOT.((OLDSCR(J) .NE. SCORE(J)) .OR. (SHPACT(J).XOR.(ACT(J) *.EQ. '*')))) GOTO 2260 IF (.NOT.(SHPACT(J))) GOTO 2280 ACT(J) = '*' GOTO 2290 2280 CONTINUE ACT(J) = ' ' 2290 CONTINUE OLDSCR(J) = SCORE(J) ENCODE(10, 1111, STRNG) OLDSCR(J), ACT(J) 1111 FORMAT(F8.0, 1X, A1) CALL BUFFIL(J + 3, 71, STRNG, 10) 2260 CONTINUE 2240 CONTINUE 2250 CONTINUE CALL OUTCH(0, - 1) RETURN END SUBROUTINE BNDRY(IXLOW, IXHI, IYLOW, IYHI) C COMMON PARAMETER MAXSHP = 8, MAXHOM = 4, MAXTRP = 10 COMMON/TORPE/TLOCS(MAXSHP, MAXTRP, 2), TDIR(MAXSHP, MAXTRP), IT(MA *XSHP) COMMON/TRKDAT/ENERGY(MAXSHP), SHIELD(MAXSHP), XCORD(MAXSHP), YCORD *(MAXSHP), TORPS(MAXSHP), HOLX, HOLY, HOLW, CDRAIN, NDRAIN, TDRAIN, * SCAN(MAXSHP), PHA(MAXSHP), I1, I2, HYPER(MAXSHP), ISENT(MAXSHP, 1 *0), XPOD(MAXSHP), YPOD(MAXSHP), DPOD(MAXSHP), IPODST(MAXSHP), WPOD *(MAXSHP), XHOM(MAXSHP, MAXHOM), YHOM(MAXSHP, MAXHOM), WHOM(MAXSHP, * MAXHOM), NHOM(MAXSHP), TRBEAM(MAXSHP), SCORE(MAXSHP), CREW(MAXSHP *), DIR(MAXSHP), WARP(MAXSHP), LAUNCH(MAXSHP), UNIV(100, 100), MESS *AG(480), THRU, SHPACT(MAXSHP), CLOAK(MAXSHP), NET(MAXSHP), SHPNAM( *10, MAXSHP) REAL LAUNCH, NDRAIN INTEGER*2SCAN, WHOM, CREW, HYPER, TORPS, TRBEAM LOGICAL*1THRU, SHPACT, CLOAK, NET BYTE UNIV, MESSAG BYTE SHPNAM C NOTE: BHOLE AND EMPTY ARE THE CHARACTERS FOR THE BLACK HOLE C AND EMPTY SPACE. C END COMMON BYTE BLUNK(2) BYTE BLUNK2(2) BYTE OBUFF( - 9: + 9, - 9: + 9), NBUFF( - 9: + 9, - 9: + 9) BYTE JUNK COMMON/BNDRY/IXX, IYY, ID, MINID8, JUNK, OBUFF, NBUFF EQUIVALENCE(BLUNK(2), NBUFF( - 9, - 9)) EQUIVALENCE(BLUNK2(2), OBUFF( - 9, - 9)) BYTE ALPHA DO 2300 IX1 = IXLOW, IXHI IX = IX1 - IXX DO 2320 IY1 = IYLOW, IYHI IY = IY1 - IYY ALPHA = UNIV(IX1, IY1) IF (.NOT.(ALPHA .EQ. ' ')) GOTO 2340 IF (.NOT.(((IX .EQ. -ID .OR. IX .EQ. ID .OR. IX .EQ. 0) .AND *. (IY1 .EQ. 100 .OR. IY1 .EQ. 1)) .OR. ((IY .EQ. -ID .OR. IY .EQ. *MINID8 .OR. IY .EQ. 0) .AND. (IX1 .EQ. 100 .OR. IX1 .EQ. 1)))) GOT *O 2360 NBUFF(IX, IY) = '-' 2360 CONTINUE GOTO 2350 2340 CONTINUE IF (.NOT.((ALPHA .GE. 48+1) .AND. (ALPHA .LE. 48+8) .AND. (C *LOAK(ALPHA-48)))) GOTO 2380 NBUFF(IX, IY) = ' ' GOTO 2390 2380 CONTINUE IF (.NOT.(ALPHA .LT. 0)) GOTO 2400 NBUFF(IX, IY) = '%' GOTO 2410 2400 CONTINUE NBUFF(IX, IY) = ALPHA 2410 CONTINUE 2390 CONTINUE 2350 CONTINUE 2320 CONTINUE 2330 CONTINUE 2300 CONTINUE 2310 CONTINUE RETURN END C SRSCAN - REFRESH SHORT RANGE SCAN SUBROUTINE SRSCAN(ME) C COMMON PARAMETER MAXSHP = 8, MAXHOM = 4, MAXTRP = 10 COMMON/TORPE/TLOCS(MAXSHP, MAXTRP, 2), TDIR(MAXSHP, MAXTRP), IT(MA *XSHP) COMMON/TRKDAT/ENERGY(MAXSHP), SHIELD(MAXSHP), XCORD(MAXSHP), YCORD *(MAXSHP), TORPS(MAXSHP), HOLX, HOLY, HOLW, CDRAIN, NDRAIN, TDRAIN, * SCAN(MAXSHP), PHA(MAXSHP), I1, I2, HYPER(MAXSHP), ISENT(MAXSHP, 1 *0), XPOD(MAXSHP), YPOD(MAXSHP), DPOD(MAXSHP), IPODST(MAXSHP), WPOD *(MAXSHP), XHOM(MAXSHP, MAXHOM), YHOM(MAXSHP, MAXHOM), WHOM(MAXSHP, * MAXHOM), NHOM(MAXSHP), TRBEAM(MAXSHP), SCORE(MAXSHP), CREW(MAXSHP *), DIR(MAXSHP), WARP(MAXSHP), LAUNCH(MAXSHP), UNIV(100, 100), MESS *AG(480), THRU, SHPACT(MAXSHP), CLOAK(MAXSHP), NET(MAXSHP), SHPNAM( *10, MAXSHP) REAL LAUNCH, NDRAIN INTEGER*2SCAN, WHOM, CREW, HYPER, TORPS, TRBEAM LOGICAL*1THRU, SHPACT, CLOAK, NET BYTE UNIV, MESSAG BYTE SHPNAM C NOTE: BHOLE AND EMPTY ARE THE CHARACTERS FOR THE BLACK HOLE C AND EMPTY SPACE. C END COMMON BYTE BLUNK(2) BYTE BLUNK2(2) BYTE OBUFF( - 9: + 9, - 9: + 9), NBUFF( - 9: + 9, - 9: + 9) BYTE JUNK COMMON/BNDRY/IXX, IYY, ID, MINID8, JUNK, OBUFF, NBUFF EQUIVALENCE(BLUNK(2), NBUFF( - 9, - 9)) EQUIVALENCE(BLUNK2(2), OBUFF( - 9, - 9)) CLINE & COLUMN FOR CENTER OF SCAN DISPLAY CALL STRMOV(BLUNK, 1, 361, NBUFF, 1) ID = SCAN(ME) MINID8 = MIN(ID, 8) IXX = XCORD(ME) IYY = YCORD(ME) IXLOW = MAX(2, IXX - ID) IXHI = MIN(99, IXX + ID) IYLOW = MAX(2, IYY - ID) IYHI = MIN(99, IYY + MINID8) DO 2420 IX1 = IXLOW, IXHI IX = IX1 - IXX DO 2440 IY1 = IYLOW, IYHI IY = IY1 - IYY ALPHA = UNIV(IX1, IY1) IF (.NOT.((ALPHA .GE. 48+1) .AND. (ALPHA .LE. 48+8) .AND. (CLO *AK(ALPHA-48)))) GOTO 2460 NBUFF(IX, IY) = ' ' GOTO 2470 2460 CONTINUE IF (.NOT.(ALPHA .LT. 0)) GOTO 2480 NBUFF(IX, IY) = '%' GOTO 2490 2480 CONTINUE NBUFF(IX, IY) = ALPHA 2490 CONTINUE 2470 CONTINUE 2440 CONTINUE 2450 CONTINUE 2420 CONTINUE 2430 CONTINUE IF (.NOT.(IXX-ID .LE. 1)) GOTO 2500 CALL BNDRY(1, 1, MAX(1, IYY - ID), MIN(100, IYY + MINID8)) GOTO 2510 2500 CONTINUE IF (.NOT.(IXX+ID .GE. 100)) GOTO 2520 CALL BNDRY(100, 100, MAX(1, IYY - ID), MIN(100, IYY + MINID8)) 2520 CONTINUE 2510 CONTINUE IF (.NOT.(IYY-ID .LE. 1)) GOTO 2540 CALL BNDRY(MAX(1, IXX - ID), MIN(99, IXX + ID), 1, 1) GOTO 2550 2540 CONTINUE IF (.NOT.(IYY+ID .GE. 100)) GOTO 2560 CALL BNDRY(MAX(1, IXX - ID), MIN(99, IXX + ID), 100, 100) 2560 CONTINUE 2550 CONTINUE IF (.NOT.(NBUFF(-ID, -ID) .EQ. ' ')) GOTO 2580 NBUFF( - ID, - ID) = '.' 2580 CONTINUE IF (.NOT.(NBUFF(-ID, MINID8) .EQ. ' ')) GOTO 2600 NBUFF( - ID, MINID8) = '.' 2600 CONTINUE IF (.NOT.(NBUFF(ID, MINID8) .EQ. ' ')) GOTO 2620 NBUFF(ID, MINID8) = '.' 2620 CONTINUE IF (.NOT.(NBUFF(ID, -ID) .EQ. ' ')) GOTO 2640 NBUFF(ID, - ID) = '.' 2640 CONTINUE DO 2660 IY = - 9, + 8 ICURSX = - 999 DO 2680 IX = - 9, + 9 IF (.NOT.(NBUFF(IX, IY) .NE. OBUFF(IX, IY))) GOTO 2700 IF (.NOT.(ICURSX .GE. IX-2)) GOTO 2720 DO 2740 III = ICURSX + 1, IX CALL OUTCH(' ', 1) CALL OUTCH(NBUFF(III, IY), 1) 2740 CONTINUE 2750 CONTINUE GOTO 2730 2720 CONTINUE CALL TPOS(9 - IY, 2*IX + 43) CALL OUTCH(NBUFF(IX, IY), 1) 2730 CONTINUE ICURSX = IX OBUFF(IX, IY) = NBUFF(IX, IY) 2700 CONTINUE 2680 CONTINUE 2690 CONTINUE 2660 CONTINUE 2670 CONTINUE CALL OUTCH(0, - 1) RETURN END