image of READY prompt

Wang2200.org

Listing of file='LIFE' on disk='vmedia/games.wvd.zip'

# Sector 633, program filename = 'LIFE'
0010 REM GAME OF LIFE
0020 REM CREATED BY JOHN HORTON CONWAY,1971
0030 REM A$()=ASSOCIATION MATRIX
0040 REM P$()=POPULATION MATRIX
0050 REM P=POPULATION, B=BIRTHS, D=DEATHS
0060 REM G=GENERATION, G$=GENERATION CHARACTER
0070 REM R1,R7,C1,C7=FLAGS FOR BIRTHS IN ROWS 1,17 & COL. 1,17
0080 REM
0090 DIM P$(17)17,A$(17)17,C$64,G$1,Z$1,Q$(17)17
0100 SELECT PRINT 005
0110 PRINT HEX(03);"GAME OF LIFE"
   : PRINT
0120 PRINT "ENTER POINTS:"
   : PRINT
   : PRINT "'0=CURSOR RIGHT"
0130 PRINT "'1=CURSOR LEFT"
   : PRINT "'2=CURSOR UP"
0140 PRINT "'3=CURSOR DOWN"
   : PRINT "+ =ADD POINT"
0150 PRINT "- =DELETE PT."
   : PRINT "CR=DONE"
0160 B$=HEX(01)
   : INIT(0A)STR(B$,2)
   : INIT(09)C$
0170 SELECT PRINT 405
   : INIT(".")P$()
   : GOSUB '15
   : INIT(" ")P$()
0180 Z1,Z2=5
   : G=0
   : G$="0"
0190 PRINT STR(B$,1,Z1-1);STR(C$,1,10+3*Z2);
0200 KEYIN Z$,210,240
   : GOTO 200
0210 IF Z$<>"+" THEN 220
   : GOSUB 280
   : GOTO 200
0220 IF Z$<>"-" THEN 230
   : GOSUB 270
   : GOTO 200
0230 IF Z$=HEX(0D) THEN 350
   : GOTO 200
0240 ON VAL(Z$)+1 GOSUB 260,320,340,330
0250 GOTO 200
0260 REM (SPACE)
   : Z$=" "
   : PRINT HEX(09);
   : GOTO 300
0270 REM (-)
   : Z$=" "
   : PRINT ".";
   : GOTO 290
0280 REM (+)
   : Z$="0"
   : PRINT "*";
   : P=P+1
0290 Z0$=STR(P$(Z1),Z2,1)
   : STR(P$(Z1),Z2,1)=Z$
   : IF Z0$=" " THEN 300
   : P=P-1
0300 IF Z2>15 THEN 310
   : PRINT HEX(0909);
   : Z2=Z2+1
   : RETURN
0310   PRINT HEX(08);
   : RETURN
0320 REM (BACK)
   : IF Z2<3 THEN 250
   : PRINT HEX(080808);
   : Z2=Z2-1
   : RETURN
0330 REM (DOWN)
   : IF Z1>15 THEN 250
   : PRINT HEX(0A);
   : Z1=Z1+1
   : RETURN
0340 REM (UP)
   : IF Z1<3 THEN 250
   : PRINT HEX(0C);
   : Z1=Z1-1
   : RETURN
0350 SELECT PRINT 005(64)
   : FOR I=1 TO 17
   : Q$(I)=P$(I)
   : NEXT I
0360 SELECT CI 001
   : PRINT HEX(03)
   : GOSUB '15
   : GOTO 770
0370 REM CALCULATE ASSOCIATION MATRIX
0380 INIT(30)A$()
   : FOR I=2 TO 16
   : K=2
0390 J=POS(STR(P$(I),K)<>" ")
   : IF J=0 THEN 420
   : K=K+J
0400 ADD(STR(A$(I-1),K-2,3),01)
   : ADD(STR(A$(I),K-2,3),01)
0410 ADD(STR(A$(I+1),K-2,3),01)
   : GOTO 390
0420 NEXT I
0430 REM ADD BIRTHS, DELETE DEATHS, CHECK FOR BIRTHS IN COL.1,17
0440 C1,C7,B,D=0
   : FOR I=1 TO 17
   : K=1
0450 IF K>17 THEN 480
   : J=POS(STR(A$(I),K)>"4")
   : IF J=0 THEN 480
0460 K=K+J
   : IF STR(P$(I),K-1,1)=" " THEN 450
0470 STR(P$(I),K-1,1)=" "
   : D=D+1
   : GOTO 450
0480 K=1
0490 IF K>17 THEN 520
   : J=POS(STR(A$(I),K)="1")
   : IF J=0 THEN 520
0500 K=K+J
   : IF STR(P$(I),K-1,1)=" " THEN 490
0510 STR(P$(I),K-1,1)=" "
   : D=D+1
   : GOTO 490
0520 K=1
0530 IF K>17 THEN 560
   : J=POS(STR(A$(I),K)="2")
   : IF J=0 THEN 560
0540 K=K+J
   : IF STR(P$(I),K-1,1)=" " THEN 530
0550 STR(P$(I),K-1,1)=" "
   : D=D+1
   : GOTO 530
0560 K=1
0570 J=POS(STR(A$(I),K)="3")
   : IF J=0 THEN 610
0580 IF J+K>2 THEN 590
   : C1=1
0590 K=K+J
   : IF STR(P$(I),K-1,1)<>" " THEN 570
0600 STR(P$(I),K-1,1)=G$
   : B=B+1
   : IF K<18 THEN 570
   : C7=1
0610 NEXT I
0620 REM CHECK FOR BIRTHS IN ROW 1,17
0630 R1=POS(P$(1)<>" ")
   : R7=POS(P$(17)<>" ")
0640 REM AUTO-SHIFT
0650 PRINT STR(B$,1,8);
   : IF R1+R7=0 THEN 700
0660 IF R1=0 THEN 680
   : IF R7=0 THEN 690
0670 PRINT STR(B$,1,8);"OFF SCREEN     "
   : GOTO 1040
0680 GOSUB '02
   : GOTO 700
0690 GOSUB '03
0700 IF C1+C7=0 THEN 740
   : IF C1=0 THEN 720
   : IF C7=0 THEN 730
0710 GOTO 670
0720 GOSUB '01
   : GOTO 740
0730 GOSUB '00
0740 GOSUB '15
   : G=G+1
   : P=P+B-D
   : PRINT STR(B$,1,8);TAB(15)
0750 PRINT TAB(15)
0760 IF B+D<>0 THEN 770
   : PRINT STR(B$,1,8);"STABLE"
   : GOTO 1040
0770 PRINT HEX(01);
0780 PRINT "...CENSUS..."
   : PRINT
   : PRINT "GENERATION";G
0790 PRINT "POPULATION";P
   : PRINT "BIRTHS";B
   : PRINT "DEATHS";D
0800 ADD(G$,01)
   : IF G$<>HEX(3A) THEN 810
   : G$="A"
   : GOTO 820
0810 IF G$<="Z" THEN 820
   : G$="0"
0820 KEYIN Z$,830,830
   : GOTO 860
0830 PRINT
   : PRINT "STOPPED";HEX(0C)
0840 KEYIN Z$,850,850
   : GOTO 840
0850 PRINT TAB(15)
0860 IF P<>0 THEN 370
   : PRINT
   : PRINT "EXTINCT"
   : GOTO 1040
0870 DEFFN'00
   : PRINT "SHIFTING RIGHT"
0880 FOR I=1 TO 17
   : P$=P$(I)
   : P$(I)=" "
0890 IF STR(P$,16)<>" " THEN 670
   : STR(P$(I),2)=P$
   : NEXT I
   : RETURN
0900 DEFFN'01
   : PRINT "SHIFTING LEFT"
0910 FOR I=1 TO 17
   : P$(I)=STR(P$(I),2)
0920 IF STR(P$(I),1,1)<>" " THEN 670
   : NEXT I
   : RETURN
0930 DEFFN'02
   : PRINT "SHIFTING UP"
0940 IF P$(2)<>" " THEN 670
0950 FOR I=1 TO 16
   : P$(I)=P$(I+1)
   : NEXT I
   : P$(17)=" "
   : RETURN
0960 DEFFN'03
   : PRINT "SHIFTING DOWN"
0970 IF P$(16)<>" " THEN 670
0980 FOR I=17 TO 2 STEP -1
   : P$(I)=P$(I-1)
   : NEXT I
   : P$(1)=" "
   : RETURN
0990 REM PRINT MATRIX
1000 DEFFN'15
   : PRINT HEX(01);
1010 FOR I=2 TO 16
   : PRINT STR(C$,1,16);
1020 FOR J=2 TO 16
   : PRINT STR(P$(I),J,1);"  ";
   : NEXT J
1030 PRINT
   : NEXT I
   : RETURN
1040 REM
1041 DEFFN'14
   : LOAD DC R"MENU"