10  REM-LIFE  DEVELOPED FOR 2000F
20  DIM S[29,29]
30  DIM M$[72]
40  Y=A=S=0
50  MAT S=ZER
60  PRINT "INSTRUCTIONS";
70  INPUT J$[1,1]
80  IF J$[1,1]="N" THEN 340
90  PRINT "THIS IS JOHN CONWAY'S GAME OF LIFE.  ARTICLES FURTHER DESCRIBING"
100  PRINT "HIS GAME MAY BE FOUND IN THE MATHEMATICAL GAMES SECTION OF"
110  PRINT "SCIENTIFIC AMERICAN ISSUES: OCTOBER '70, NOVEMBER '70, FEBRUARY '71."
120  PRINT 
130  PRINT "THE GAME INVOLVES CELLULAR GENERATION GROWTH.  EACH CELL IS"
140  PRINT "ONE PRINTED CHARACTER.  A CELL IS SURROUNDED BY EIGHT OTHER"
150  PRINT "CELLS, IN THREE DIRECTIONS: DIAGONALLY,HORIZONTALLY,VERITCALLY."
160  PRINT "IN EACH GENERATION CELLS DIE AND GROW SIMULTANEOUSLY."
170  PRINT 
180  PRINT "A CELL DIES FROM OVERPOPULATION IF IT IS SUSRROUNDED BY MORE"
190  PRINT "THAT THREE LIVING CELLS. IT WILL ALSO DIE OF ISOLATION IF IT HAS"
200  PRINT "LESS THAN TWO CELLS SURROUNDING IT.  NEW CELLS CAN BE FORMED IN"
210  PRINT "EMPTY POSITIONS ONLY; IF AND ONLY IF IT HAS THREE CELLS AROUND IT."
220  PRINT 
230  PRINT "YOU WILL BE ASKED TO ENTER THE FIRST, LAST, AND THE INTERVAL"
240  PRINT "BETWEEN THE GENERATIONS TO BE PRINTED."
250  PRINT 
260  PRINT "ENTER YOUR APTTERN INT QUOTES -- A LINE AT A TIME -- A '*' WHERE"
270  PRINT "YOU WANT A LIVE CELL AND A ' ' (SPACE) FOR AN EMPTY ONE."
280  PRINT "MAX BOARD SIZE IS 28 BY 28."
290  PRINT 
300  PRINT "WHEN YOU'RE FINISHED, TYPE THE WORD 'DONE' AS YOUR LAST LINE."
310  PRINT "BE SURE EACH LINE YOU ENTER IS IN QUOTES."
320  PRINT 
330  PRINT "NOTE: IF THE LIMITS OF THIS PROGRAM ARE REACHED, IT WILL TERMINATE."
340  PRINT 
350  PRINT "WHICH GENERATION SHALL THE PRINTING START WITH";
360  INPUT T
370  PRINT "AND THE LAST GENERATION";
380  INPUT R1
390  PRINT "ALSO, HOW MANY SHALL I SKIP";
400  INPUT O
410  O=O+1
420  PRINT "ENTER PATTERN:"
430  FOR M=1 TO 28
440  ENTER 255,T9,M$
445  IF T9=-256 THEN 450
447  PRINT 
450  IF M$="DONE" THEN 570
460  IF LEN(M$)<29 THEN 490
470  PRINT "NO MORE THAN 28 CELLS PER LINE"
480  GOTO 440
490  FOR R=1 TO LEN(M$)
500  IF M$[R,R]=" " THEN 550
510  IF M$[R,R]#"*" THEN 580
520  S[M,R]=1
530  A=A+1
540  S=S MAX R
550  NEXT R
560  NEXT M
570  GOTO 600
580  PRINT "'";M$[R,R];"' IS NEITHER A BLANK NOR A '*' - TYPE THE LINE AGAIN"
590  GOTO 440
600  DIM X[29,29]
610  IF  NOT Y THEN 630
620  GOTO 20
630  V=G=0
650  Y=N1=M-1
660  PRINT "GENERATION = 0  POPULATION =";A
670  GOSUB 1100
680  G=G+1
690  A=V=0
700  MAT S=ZER
710  FOR M=1 TO N1
720  FOR R=1 TO S
730  J=0
740  IF M>28 OR R>28 THEN 1420
750  IF  NOT X[M,R+1] OR R=S THEN 770
760  J=J+1
770  IF  NOT X[M+1,R+1] OR M=N1 OR R=S THEN 790
780  J=J+1
790  IF  NOT X[M+1,R] OR M=N1 THEN 810
800  J=J+1
810  IF M=N1 OR R=1 THEN 840
820  IF  NOT X[M+1,R-1] THEN 840
830  J=J+1
840  IF R=1 THEN 870
850  IF  NOT X[M,R-1] THEN 870
860  J=J+1
870  IF M=1 OR R=1 THEN 900
880  IF  NOT X[M-1,R-1] THEN 900
890  J=J+1
900  IF M=1 THEN 930
910  IF  NOT X[M-1,R] THEN 930
920  J=J+1
930  IF M=1 OR R=S THEN 960
940  IF  NOT X[M-1,R+1] THEN 960
950  J=J+1
960  IF J=3 THEN 980
970  IF J#2 OR  NOT X[M,R] THEN 1000
980  S[M,R]=1
990  A=A+1
1000  NEXT R
1010  NEXT M
1020  IF A=0 THEN 1390
1030  IF G=R1 THEN 1050
1040  IF G<T OR (G-T)/O#INT((G-T)/O) THEN 1070
1050  PRINT "GEN="G;TAB(2*R-1)"POP="A
1060  GOTO 1080
1070  V=9
1080  GOSUB 1100
1090  GOTO 680
1100  J=A=50
1110  C=D=0
1120  FOR M=1 TO N1
1130  FOR R=1 TO S
1140  IF  NOT S[M,R] THEN 1210
1150  J=J MIN M
1160  A=A MIN R
1170  C=C MAX M
1180  D=D MAX R
1190  IF V=9 THEN 1210
1200  PRINT TAB(2*R-2);"*";
1210  NEXT R
1220  IF V=9 THEN 1240
1230  PRINT 
1240  NEXT M
1250  IF G=R1 THEN 1400
1260  C=C-J+3
1270  D=D-A+3
1280  MAT X=ZER
1290  FOR M=1 TO N1
1300  FOR R=1 TO S
1310  IF  NOT S[M,R] THEN 1330
1320  X[M-J+2,R-A+2]=1
1330  NEXT R
1340  NEXT M
1350  MAT S=ZER
1360  N1=C
1370  S=D
1380  RETURN 
1390  PRINT "NO MORE LIFE IN GENERATION";G
1400  PRINT "**END OF RUN**"
1410  GOTO 1430
1420  PRINT "CELL HAS REACHED LIMITS OF PROGRAM.  PROGRAM MUST TERMINATE."
1430  PRINT 
1440  PRINT "ANOTHER RUN ";
1450  INPUT J$[1,1]
1455  Y=A=S=0
1457  MAT S=ZER
1460  IF J$[1,1]="Y" THEN 340
1470  END 
