C File- AMOEBA.FLX KL Danneil 1-Feb-83 FLECS trial PROGRAM AMOEBA 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 BYTE LTSX !TSX lead-in character for special terminal modes EQUIVALENCE (LOUT(1),RGRA),(LOUT(5),RGRC) EQUIVALENCE (LHOM(1),RGRB) C CLEAR SCREEN= "030 HOME= "031 CURSOR POSITION= "020,XPOS,YPOS (COPS) DATA LHOM/"030,"031,"040,"040/ !Cops DATA LOUT/"031,"020,"040,"040,"000,"000/ C DATA LHOM/"033,'H',"033,'J'/ !VT52 - Home, Erase to end of page C DATA LOUT/"033,'Y',"040,"040/ DATA LSTRT/' '/ 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/ DATA LTSX/"035/ C I1=0 I2=0 I3=0 Attach-to-Terminal Init-ialize Determine-Terminal-Type Clear-Screen Repeat Loop !Loop Forever 30 CONTINUE !START WORKING IX=1.0+79.99*RAN(I1,I2) IY=1.0+23.99*RAN(I1,I2) LOOPS= 1 Repeat Loop !Loop forever LSTRT=LSTRT+1 DO (I=1,78) DO (J=1,24) LTOT(I,J)=0 FIN FIN LSTRT= 31.+88.5*RAN(I1,I2) WHEN (LOOPS .GE. 5) LSTRT= "040 LOOPS= 1 FIN ELSE LOOPS= LOOPS+1 FIN IF((LSTRT .LE."036).OR.(LSTRT .GE."177)) LSTRT="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) Clear-Screen I3=1 Repeat Until (IC3 .GE. 384) Write-Where-We-Are Keep-Track-of-our-Status Where-We-Want-to-go Erase-Where-we-were WHEN (IC5 .LT. 25) IC5= IC5+1 ELSE IC5=0 REWIND 1 FIN FIN FIN FIN !Repeat forever C END STOP TO Attach-to-Terminal C CALL ASSIGN(1,'TT:/C') FIN TO Init-ialize C C "035 - SEND SPECIAL TSX LEAD IN CHAR 'M' FLAGS TRANSPARENCY MODE TTYOUT WRITE (1,980) LTSX 980 FORMAT (' ',1A1,'M') FIN TO Clear-Screen C WRITE(1,1) RGRB 1 FORMAT(' ',A4) FIN TO Determine-Terminal-Type C C DETERMINE WHICH TERMINAL THIS IS TRMTYP= 0 REPEAT UNTIL ((TRMTYP .GE. 0) .AND. (TRMTYP .LE. 3)) 999 WRITE (1,1000) 1000 FORMAT ('$',' WHAT TERMINAL IS THIS ? COPS= 0 & ADDS520= 1 ADDS980= 2 VT52=3 ? ') READ (5,1002) TRMTYP 1002 FORMAT (1I1) D WRITE (1,1003) TRMTYP D1003 FORMAT (' ','TRMTYP= ',1I3) FIN SELECT (TRMTYP) (0) !Default COPS !CURSOR CNTRL DEFINED IN DATA D TYPE *,'Selected TRMTYP= COPS' FIN (1) !DEFINE ADDS520 CNTRL HERE LHOM(1)= "014 !Formfeed LHOM(2)= "040 LOUT(1)= "013 !Cursor position command LOUT(2)= "000 !Y POSITION LOUT(3)= "020 LOUT(4)= "000 !X POSITION D TYPE *,'Selected TRMTYP= ADDS520' FIN (2) !DEFINE ADDS980 CNTRL HERE LHOM(1)= "014 !Formfeed LHOM(2)= "040 LOUT(1)= "013 !Cursor position command LOUT(2)= "000 !Y POSITION LOUT(3)= "033 LOUT(4)= "005 LOUT(5)= "000 !X POSITION D TYPE *,'Selected TRMTYP= ADDS980' FIN (3) !DEFINE VT52 CNTRL HERE LHOM(1)= "033 LHOM(2)= 'H' !Home LHOM(3)= "033 LHOM(4)= 'J' !Erase to end of page LOUT(1)= "033 LOUT(2)= 'Y' !Cursor position x,y D TYPE *,'Selected TRMTYP= VT52' FIN FIN FIN TO Write-Where-We-Are C SELECT (TRMTYP) (0) C HERE FOR COPS TRMTYP= 0 LOUT(3)=IY+LBL-1 LOUT(4)=IX+LBL-1 FIN (1) C ADDS 520 TERMINAL HERE TRMTYP= 1 LOUT(2)= IY-1 LOUT(2)=LOUT(2)+"100 !ADDS 520 Y position C ADDS 520 X POSITION C LOWER 4 BITS =0 TO 9 BITS 5 TO 7 SPEC. FIELD ON SCREEN LOUT(4)= IX/10 LOUT(4)= (IX-LOUT(4)*10) .OR. LOUT(4)*16 FIN (2) C ADDS 980 TERMINAL HERE TRMTYP= 2 LOUT(2)= IY-1 LOUT(5)= IX+LBL-1 !ADDS 980 X POSITION FIN (3) C HERE FOR VT52 TRMTYP= 3 LOUT(3)=IY+LBL-1 LOUT(4)=IX+LBL-1 FIN FIN WHEN (TRMTYP .EQ. 2) WRITE (1,2002) (LOUT(L),L=1,6),LDOT 2002 FORMAT ('+',7A1,$) FIN ELSE WRITE(1,3) RGRA,LDOT 3 FORMAT('+',A4,2A1,$) FIN IXO=IX IYO=IY FIN TO Keep-Track-of-our-Status C IC2=IC2+1 IF (IC2 .EQ. 10000) IC1= IC1+1 IC2= 0 FIN UNLESS (LTOT(IX,IY) .EQ. 1) LTOT(IX,IY)=1 IC3=IC3+1 UNLESS (IC3 .EQ. IC4) IF(IC4.GE.1728) INCR=20 IF(IC4.GE.1908) INCR=1 IC4=IC4+INCR FIN FIN FIN TO Where-We-Want-to-go C C NOW FIGURE OUT WHERE WE WANT TO GO 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 FIN TO Erase-Where-we-were C C NOW ERASE WHERE WE WERE WHEN (LTOT(IXO+1,IYO).EQ.1) WRITE(1,3) RGRA,LSTRT ELSE WRITE(1,3) RGRA,LSTRT,LBL WHEN ((LTOT(IXO-1,IYO) .EQ. 1).OR.(IXO .EQ. 1)) CONTINUE ELSE C CHANGE Y POSITION VT52, OR X POSITION OTHERS IE. GOBBLE POSITION-1 SELECT (TRMTYP) (1) !ADDS 520 LOUT(4)=LOUT(4)-1 IF ((LOUT(4) .AND. "17) .GT. "11) LOUT(4)= LOUT(4) .AND. "171 FIN (2) LOUT(5)= LOUT(5)-1 !ADDS 980 (OTHERWISE) LOUT(4)=LOUT(4)-1 FIN WRITE(1,3) RGRA,LBL 31 CONTINUE FIN FIN END