C AMOEBA.FTN, WRITTEN BY 12/20/78 C MODIFIED FOR CRT TERMINALS DIMENSION IXAR(9),IYAR(9) INTEGER TRMTYP,RGRC LOGICAL*1 LTOT(78,24) LOGICAL*1 L0,LBL,LDOT,LOUT(6),LHOM(4),LSTRT(78),LKEY(4) EQUIVALENCE (LOUT(1),RGRA),(LOUT(5),RGRC) EQUIVALENCE (LHOM(1),RGRB) C CLEAR SCREEN= "030 HOME= "031 CURSOR POSITION= "020,XPOS,YPOS (COPS) DATA LOUT/031,"020,"040,"040,"000,"000/ C DATA LOUT/"033,"131,"040,"040/ DATA LHOM/"030,"031,"040,"040/ !DATA LHOM/"033,"110,"033,"112/ DATA LKEY/"033,"106,"033,"107/ DATA LSTRT/78*' '/ DATA L0,LBL,LDOT/'0',' ','.'/ DATA IXAR/1,1,1,0,0,0,-1,-1,-1/ DATA IYAR/1,0,-1,1,0,-1,1,0,-1/ I1=0 I2=0 I3=0 C CALL ASSIGN(1,'TT:/C') !ASSIGN(1,'TT1:') CALL ASSIGN(1,'TI:') C CALL ASSIGN(2,'GOBBLE.DAT') C DETERMINE WHICH TERMINAL THIS IS TRMTYP= 0 C GOTO 30 !SHORT CUT FOR NOW 999 WRITE (1,1000) 1000 FORMAT (' ',' WHAT TERMINAL IS THIS ? COPS= 0 1 ADDS520= 1 ADDS980= 2'/ 1 '$',' VT52=3 ADDS580=4 ? ') C READ (5,1002) TRMTYP READ (1,1002) TRMTYP 1002 FORMAT (1I1) IF (TRMTYP .EQ. 0) GOTO 30 !CURSOR CNTRL DEFINED IN DATA C DEFINE ADDS520 & ADDS580 CNTRL HERE IF ((TRMTYP .NE. 1).AND.(TRMTYP .NE. 4)) GOTO 1004 LHOM(1)= "035 !SEND SPECIAL TSX LEAD IN CHAR LHOM(2)= 'M' !M FLAGS TRANSPARENCY MODE TTYOUT WRITE (1,980) LHOM(1),LHOM(2) !TELL TSX USE TRANSPARENCY MODE 980 FORMAT (' ',2A1) LHOM(1)= "014 LHOM(2)= "040 LOUT(1)= "013 LOUT(2)= "000 !Y POSITION LOUT(3)= "020 LOUT(4)= "000 !X POSITION WRITE (1,1) RGRB !CLEAR SCREEN IF (TRMTYP .EQ. 1) GOTO 30 !if true, ADDS520 so all done C REDEFINE FOR ADDS580 LHOM(1)= "201 !SET THE 8th BIT - TRY TO FOOL RSX INTO SENDING CHAR LOUT(1)= "213 !WITHOUT CHANGING IT LOUT(3)= "220 GOTO 30 1004 IF (TRMTYP .NE. 2) GOTO 1006 !DEFINE ADDS980 CNTRL HERE LHOM(1)= "014 LHOM(2)= "040 LOUT(1)= "013 LOUT(2)= "000 !Y POSITION LOUT(3)= "033 LOUT(4)= "005 LOUT(5)= "000 !X POSITION GOTO 30 1006 IF (TRMTYP .NE. 3) GOTO 999 !DEFINE VT52 CNTRL HERE OR ERROR!! LHOM(1)= "033 LHOM(2)= "110 LHOM(3)= "033 LHOM(4)= "112 LOUT(1)= "033 LOUT(2)= "131 30 CONTINUE !START WORKING IX=1.0+79.99*RAN(I1,I2) IY=1.0+23.99*RAN(I1,I2) LOOPS= 0 32 DO 23 I=1,78 LSTRT(I)=LSTRT(I)+1 DO 23 J=1,24 23 LTOT(I,J)=0 LSTRT(1)= 31.+88.5*RAN(I1,I2) LOOPS= LOOPS+1 IF (LOOPS .LT. 5) GOTO 24 LSTRT(1)= "040 LOOPS= 0 24 CONTINUE 25 IF(LSTRT(1).LE."036.OR.LSTRT(1).GE."177) LSTRT(1)="037 C USE - AS 1ST CHARACTER IC1=0 IC2=0 IC3=0 IC4=192 IC5= 0 INCR=192 C START BY ERASING THE SCREEN IF(I3.EQ.0) WRITE(1,1) RGRB I3=1 1 FORMAT(' ',A4) 11 FORMAT(' ',78A1) C NOW WRITE WHERE WE ARE 2 CONTINUE IF((TRMTYP.EQ.1).OR.(TRMTYP.EQ.2).OR.(TRMTYP.EQ.4)) GOTO 2000 C if true,MUST BE ADDS TERMINAL C HERE FOR VT52 & COPS LOUT(3)=IY+LBL-1 LOUT(4)=IX+LBL-1 GOTO 3000 C ADDS TERMINALS HERE 2000 LOUT(2)= IY-1 C IF (TRMTYP .EQ. 1) LOUT(2)=LOUT(2)+"100 IF ((TRMTYP .EQ. 1).OR.(TRMTYP .EQ. 4)) LOUT(2)= LOUT(2).OR."100 C ADDS 980 X POSITION IF (TRMTYP .EQ. 2) LOUT(5)= IX+LBL-1 C IF (TRMTYP .EQ. 1) GOTO 3010 IF ((TRMTYP .EQ. 1).OR.(TRMTYP .EQ. 4)) GOTO 3010 WRITE (1,2002) RGRA,RGRC,LDOT 2002 FORMAT ('+',A4,3A1,$) GOTO 3002 C ADDS 520 X POSITION C LOWER 4 BITS =0 TO 9 BITS 5 TO 7 SPEC. FIELD ON SCREEN 3010 LOUT(4)= (IX-1)/10 LOUT(4)= ((IX-1)-LOUT(4)*10) .OR. (LOUT(4)*16) LOUT(4)= LOUT(4) .OR. "200 !TRY TO FAKE RSX OUT C 3000 WRITE(1,3) RGRA,LDOT 3002 IXO=IX IYO=IY 3 FORMAT('+',A4,2A1,$) C KEEP TRACK OF OUR STATUS IC2=IC2+1 IF(IC2.EQ.10000) IC1=IC1+1 IF(IC2.EQ.10000) IC2=0 IF(LTOT(IX,IY).EQ.1) GO TO 22 LTOT(IX,IY)=1 IC3=IC3+1 IF(IC3.NE.IC4) GO TO 22 IF(IC4.GE.1728) INCR=20 IF(IC4.GE.1908) INCR=1 IC4=IC4+INCR C THIS STATEMENT FOR A SHORT CYCLE TIME IF(IC3.GE.1920) GO TO 30 C NOW FIGURE OUT WHERE WE WANT TO GO 22 INDX=1.0+8.99*RAN(I1,I2) IY=IY+IYAR(INDX) IX=IX+IXAR(INDX) IF(IY.LT.1) IY=1 IF(IX.LT.1) IX=1 IF(IY.GT.24) IY=24 IF(IX.GT.78) IX=78 C NOW ERASE WHERE WE WERE C WRITE(1,3) RGRA,LBL IF(LTOT(IXO+1,IYO).EQ.1) WRITE(1,3) RGRA,LSTRT(1) IF(LTOT(IXO+1,IYO).NE.1) WRITE(1,3) RGRA,LSTRT(1),LBL IF(LTOT(IXO-1,IYO).EQ.1) GO TO 31 IF(IXO.EQ.1) GO TO 31 C CHANGE Y POSITION VT52, OR X POSITION OTHERS C IE. GOBBLE POSITION-1 IF (TRMTYP .NE. 2) LOUT(4)=LOUT(4)-1 IF (TRMTYP .EQ. 2) LOUT(5)= LOUT(5)-1 !ADDS980 C IF (TRMTYP .NE. 1) GOTO 3030 IF ((TRMTYP .NE. 1).AND.(TRMTYP .NE. 4)) GOTO 3030 IF ((LOUT(4) .AND. "17) .GT. "11)LOUT(4)=LOUT(4) .AND. "171 3030 WRITE(1,3) RGRA,LBL 31 IC5= IC5+1 IF (IC5 .GE. 25) IC5= 0 IF (IC5 .EQ. 0) REWIND 1 IF(IC3.EQ.384) GO TO 32 GO TO 2 END