DataMuseum.dk

Presents historical artifacts from the history of:

MIKADOS

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about MIKADOS

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦d99d4f8cb⟧ TextFile

    Length: 7648 (0x1de0)
    Types: TextFile
    Notes: Mikados_K
    Names: »LIFE.K«

Derivation

└─⟦89d8689a3⟧ Bits:30003591 MIKADOS Pascal compiler (01.02.1982 E)
    └─⟦this⟧ »LIFE.K« 

Mikados K File

PROGRAM LIFE;
 
               (***************************************)
               (*                                     *)
               (*     G A M E   O F   L I F E         *)
               (*                                     *)
               (***************************************)
 
CONST
   ON      = 9;        (* LIVING CELL SIGN *)
   MAXROW  = 23;
   MAXROW1 = 24;
   MAXCOL  = 40;
   MAXCOL1 = 41;
 
TYPE
   STATE       = (DEAD,STABLE,STABLE2,GROWING);
   NEIGHBORS   = 0 .. 17;   (* 0 TO 8 = DEAD CELL *)
                            (* 9 = CELL ALIVE WITH NO NEIGBORS *)
                            (* 10 - 17 = CELL ALIVE WITH NEIGBORS *)
   COLINDEX    = 0 .. MAXCOL1;
   ROWINDEX    = 0 .. MAXROW1;
   BOARD       = PACKED ARRAY( ROWINDEX,COLINDEX ) OF NEIGHBORS;
  
VAR
   BOARDSTATE  : STATE;
   ACTBOARD    : BOARD;
   SAVBOARD    : BOARD;
   SAV2BOARD   : BOARD;
   GENERATION  : INTEGER;
   ALIVECOUNT  : INTEGER;
   OUTCOUNT    : INTEGER;
  
                       (* C L E A R B O A R D *)
 
PROCEDURE CLEARBOARD(VAR B: BOARD);
VAR ROW,COL: INTEGER;
BEGIN
   FOR ROW := 0 TO MAXROW1 DO
       FOR COL := 0 TO MAXCOL1 DO
           B( ROW,COL ) := 0;
END (*CLEARBOARD*);
  
                       (* S E T C E L L *)
 
PROCEDURE SETCELL(VAR B: BOARD; ROW: ROWINDEX; COL: COLINDEX) ;
BEGIN
   B( ROW-1,COL-1 ) := B( ROW-1,COL-1 ) + 1;
   B( ROW-1,COL   ) := B( ROW-1,COL   ) + 1;
   B( ROW-1,COL+1 ) := B( ROW-1,COL+1 ) + 1;
   B( ROW  ,COL-1 ) := B( ROW  ,COL-1 ) + 1;
   B( ROW  ,COL   ) := B( ROW  ,COL   ) + ON;
   B( ROW  ,COL+1 ) := B( ROW  ,COL+1 ) + 1;
   B( ROW+1,COL-1 ) := B( ROW+1,COL-1 ) + 1;
   B( ROW+1,COL   ) := B( ROW+1,COL   ) + 1;
   B( ROW+1,COL+1 ) := B( ROW+1,COL+1 ) + 1;
 
   ALIVECOUNT         := ALIVECOUNT+1;
END (* SETCELL *);
  
                       (* R E M O V E C E L L *)
 
PROCEDURE REMOVECELL(VAR B: BOARD; ROW: ROWINDEX; COL: COLINDEX);
BEGIN
   B( ROW-1,COL-1 ) := B( ROW-1,COL-1 ) - 1;
   B( ROW-1,COL   ) := B( ROW-1,COL   ) - 1;
   B( ROW-1,COL+1 ) := B( ROW-1,COL+1 ) - 1;
   B( ROW  ,COL-1 ) := B( ROW  ,COL-1 ) - 1;
   B( ROW  ,COL   ) := B( ROW  ,COL   ) - ON;
   B( ROW  ,COL+1 ) := B( ROW  ,COL+1 ) - 1;
   B( ROW+1,COL-1 ) := B( ROW+1,COL-1 ) - 1;
   B( ROW+1,COL   ) := B( ROW+1,COL   ) - 1;
   B( ROW+1,COL+1 ) := B( ROW+1,COL+1 ) - 1;
 
   ALIVECOUNT         := ALIVECOUNT-1;
END (* REMOVECELL *);
 
                       (* R E A D G E N E R A T I O N *)
 
PROCEDURE READGENERATION;
VAR TEST       : BOOLEAN;
    CH         : CHAR;
    ROW,ROWMIN,ROWMAX,ROW0 : ROWINDEX;
    COL,COLMIN,COLMAX,COL0 : COLINDEX;
BEGIN
   GENERATION := 0;
   ALIVECOUNT := 0;
   CLEARBOARD(ACTBOARD);
   SAVBOARD := ACTBOARD;
   SAV2BOARD := ACTBOARD;
   ROWMIN := MAXROW; ROWMAX := 0;
   COLMIN := MAXCOL; COLMAX := 0;
   ROW    := 0;
   TEST   := FALSE;
   WRITELN;
   WRITELN('****** GAME OF LIFE ******');
   WRITELN('PLEASE ENTER COLONY');
   WRITELN('NONBLANK INDICATES LIVING CELL, BLANK IS DEAD CELL');
   WRITELN('TERMINATE INPUT BY ENTERING BLANK LINE');
   WRITELN('TERMINATE GAME OF LIFE BY ENTERING   >.BR');
   WHILE (ROW < MAXROW) AND NOT TEST DO
   BEGIN
      READLN;
      TEST := EOLN;
      ROW  := ROW+1;
      COL  := 0;
      WHILE (COL < MAXCOL) AND NOT EOLN DO
      BEGIN
         COL := COL+1;
         READ(CH);
         IF CH <> ' ' THEN
         BEGIN
            SETCELL(SAVBOARD,ROW,COL);
            IF ROW < ROWMIN THEN ROWMIN := ROW;
            IF COL < COLMIN THEN COLMIN := COL;
            IF ROW > ROWMAX THEN ROWMAX := ROW;
            IF COL > COLMAX THEN COLMAX := COL;
         END;
      END;
   END;
   (* PUT THE FIGURE IN THE MIDDLE *)
   ROW0 := (MAXROW1-ROWMIN-ROWMAX) DIV 2;
   COL0 := (MAXCOL1-COLMIN-COLMAX) DIV 2;
   FOR ROW := ROWMIN-1 TO ROWMAX+1 DO
      FOR COL := COLMIN-1 TO COLMAX+1 DO
         ACTBOARD( ROW+ROW0,COL+COL0 ) := SAVBOARD( ROW,COL );
   CLEARBOARD(SAVBOARD);
END (* READGENERATION *);
  
                  (* C E L L O N *)
 
PROCEDURE CELLON(Y,X: INTEGER);
BEGIN
   GOTOXY( X+1, Y+3 );
   WRITE('*')
END (* CELLON *);
 
                       (* C E L L O F F *)
 
PROCEDURE CELLOFF(Y,X: INTEGER);
BEGIN
   GOTOXY( X+1,Y+3 );
   WRITE(' ')
END (* CELLOFF *);
  
                       (* N E X T G E N E R A T I O N *)
 
PROCEDURE NEXTGENERATION;
VAR ROW: ROWINDEX;
    COL: COLINDEX;
BEGIN
   GENERATION := GENERATION+1;
   SAV2BOARD  := SAVBOARD;
   SAVBOARD   := ACTBOARD;
   GOTOXY( 35, 1 );
   WRITE(GENERATION:3);
   OUTCOUNT   := 0;
   FOR ROW := 1 TO MAXROW DO
      FOR COL := 1 TO MAXCOL DO
         CASE SAVBOARD( ROW,COL ) OF
            3 : BEGIN
                   (* A NEW CELL IS BORN! *)
                   SETCELL(ACTBOARD,ROW,COL);
                   CELLON(ROW-1,(COL-1)*2);
                END;
            9,10,13,14,15,16,17 :
                BEGIN
                   (* A CELL DIES. IF 9 OR 10 FOR LONELINESS *)
                   (*        IF 13 TO 17 BECAUSE TOO CROWDED *)
                   REMOVECELL(ACTBOARD,ROW,COL);
                   CELLOFF(ROW-1,(COL-1)*2);
                END;
         END (* CASE *);
END (* NEXTGENERATION *);
  
                       (* P R I N T G E N E R A T I O N *)
 
PROCEDURE PRINTGENERATION;
VAR ROW: ROWINDEX;
    COL: COLINDEX;
BEGIN
   OUTCOUNT := 0;
   FOR ROW := 1 TO MAXROW DO
      FOR COL := 1 TO MAXCOL DO
         IF ACTBOARD( ROW,COL ) > 8 THEN
            CELLON(ROW-1,(COL-1)*2);
END (* PRINTGENERATION *);
 
               (* M A I N *)
BEGIN
   READGENERATION;
   CLEARSCREEN;
   GOTOXY( 20, 1 );
   WRITELN('GENERATION NO.   0    GROWING');
   PRINTGENERATION;
   REPEAT
      NEXTGENERATION;
      IF EOF(OUTPUT) THEN
        BEGIN
          GOTOXY( 1, MAXROW );
          WRITELN('COLONY KILLED BY OPERATOR');
          EXIT(LIFE)
        END;
      IF ALIVECOUNT = 0 THEN
         BOARDSTATE := DEAD
      ELSE
         IF SAVBOARD = ACTBOARD THEN
            BOARDSTATE := STABLE
         ELSE
            IF SAV2BOARD = ACTBOARD THEN
               BOARDSTATE := STABLE2
            ELSE
               BOARDSTATE := GROWING;
   UNTIL (BOARDSTATE <> GROWING);
   IF BOARDSTATE = STABLE THEN
   BEGIN
     GOTOXY( 42, 1 );
     WRITELN('STABLE ');
   END
   ELSE
     IF BOARDSTATE = DEAD THEN
     BEGIN
       GOTOXY( 42, 1 );
       WRITELN('DEAD   ')
     END
     ELSE
        IF BOARDSTATE = STABLE2 THEN
        BEGIN
          GOTOXY( 42, 1 );
          WRITELN('STABLE OVER 2 GENERATIONS')
        END;
  GOTOXY( 1, MAXROW )
END (* MAIN *).

Mikados K File

0x0000…000f Line {l1=0x0d, l2=»PROGRAM LIFE;«, l3=0x0d}
0x000f…0012 Line {l1=0x01, l2=» «, l3=0x01}
0x0012…004c Line {l1=0x38, l2=»               (***************************************)«, l3=0x38}
0x004c…0086 Line {l1=0x38, l2=»               (*                                     *)«, l3=0x38}
0x0086…00c0 Line {l1=0x38, l2=»               (*     G A M E   O F   L I F E         *)«, l3=0x38}
0x00c0…00fa Line {l1=0x38, l2=»               (*                                     *)«, l3=0x38}
0x00fa…0134 Line {l1=0x38, l2=»               (***************************************)«, l3=0x38}
0x0134…0137 Line {l1=0x01, l2=» «, l3=0x01}
0x0137…013e Line {l1=0x05, l2=»CONST«, l3=0x05}
0x013e…016d Line {l1=0x2d, l2=»   ON      = 9;        (* LIVING CELL SIGN *)«, l3=0x2d}
0x016d…017f Line {l1=0x10, l2=»   MAXROW  = 23;«, l3=0x10}
0x017f…0191 Line {l1=0x10, l2=»   MAXROW1 = 24;«, l3=0x10}
0x0191…01a3 Line {l1=0x10, l2=»   MAXCOL  = 40;«, l3=0x10}
0x01a3…01b5 Line {l1=0x10, l2=»   MAXCOL1 = 41;«, l3=0x10}
0x01b5…01b8 Line {l1=0x01, l2=» «, l3=0x01}
0x01b8…01be Line {l1=0x04, l2=»TYPE«, l3=0x04}
0x01be…01ef Line {l1=0x2f, l2=»   STATE       = (DEAD,STABLE,STABLE2,GROWING);«, l3=0x2f}
0x01ef…0225 Line {l1=0x34, l2=»   NEIGHBORS   = 0 .. 17;   (* 0 TO 8 = DEAD CELL *)«, l3=0x34}
0x0225…0268 Line {l1=0x41, l2=»                            (* 9 = CELL ALIVE WITH NO NEIGBORS *)«, l3=0x41}
0x0268…02ae Line {l1=0x44, l2=»                            (* 10 - 17 = CELL ALIVE WITH NEIGBORS *)«, l3=0x44}
0x02ae…02ce Line {l1=0x1e, l2=»   COLINDEX    = 0 .. MAXCOL1;«, l3=0x1e}
0x02ce…02ee Line {l1=0x1e, l2=»   ROWINDEX    = 0 .. MAXROW1;«, l3=0x1e}
0x02ee…0330 Line {l1=0x40, l2=»   BOARD       = PACKED ARRAY( ROWINDEX,COLINDEX ) OF NEIGHBORS;«, l3=0x40}
0x0330…0334 Line {l1=0x02, l2=»  «, l3=0x02}
0x0334…0339 Line {l1=0x03, l2=»VAR«, l3=0x03}
0x0339…0352 Line {l1=0x17, l2=»   BOARDSTATE  : STATE;«, l3=0x17}
0x0352…036b Line {l1=0x17, l2=»   ACTBOARD    : BOARD;«, l3=0x17}
0x036b…0384 Line {l1=0x17, l2=»   SAVBOARD    : BOARD;«, l3=0x17}
0x0384…039d Line {l1=0x17, l2=»   SAV2BOARD   : BOARD;«, l3=0x17}
0x039d…03b8 Line {l1=0x19, l2=»   GENERATION  : INTEGER;«, l3=0x19}
0x03b8…03d3 Line {l1=0x19, l2=»   ALIVECOUNT  : INTEGER;«, l3=0x19}
0x03d3…03ee Line {l1=0x19, l2=»   OUTCOUNT    : INTEGER;«, l3=0x19}
0x03ee…03f2 Line {l1=0x02, l2=»  «, l3=0x02}
0x03f2…0424 Line {l1=0x30, l2=»                       (* C L E A R B O A R D *)«, l3=0x30}
0x0424…0427 Line {l1=0x01, l2=» «, l3=0x01}
0x0427…044c Line {l1=0x23, l2=»PROCEDURE CLEARBOARD(VAR B: BOARD);«, l3=0x23}
0x044c…0463 Line {l1=0x15, l2=»VAR ROW,COL: INTEGER;«, l3=0x15}
0x0463…046a Line {l1=0x05, l2=»BEGIN«, l3=0x05}
0x046a…0489 Line {l1=0x1d, l2=»   FOR ROW := 0 TO MAXROW1 DO«, l3=0x1d}
0x0489…04ac Line {l1=0x21, l2=»       FOR COL := 0 TO MAXCOL1 DO«, l3=0x21}
0x04ac…04cb Line {l1=0x1d, l2=»           B( ROW,COL ) := 0;«, l3=0x1d}
0x04cb…04e0 Line {l1=0x13, l2=»END (*CLEARBOARD*);«, l3=0x13}
0x04e0…04e4 Line {l1=0x02, l2=»  «, l3=0x02}
0x04e4…0510 Line {l1=0x2a, l2=»                       (* S E T C E L L *)«, l3=0x2a}
0x0510…0513 Line {l1=0x01, l2=» «, l3=0x01}
0x0513…0554 Line {l1=0x3f, l2=»PROCEDURE SETCELL(VAR B: BOARD; ROW: ROWINDEX; COL: COLINDEX) ;«, l3=0x3f}
0x0554…055b Line {l1=0x05, l2=»BEGIN«, l3=0x05}
0x055b…0589 Line {l1=0x2c, l2=»   B( ROW-1,COL-1 ) := B( ROW-1,COL-1 ) + 1;«, l3=0x2c}
0x0589…05b7 Line {l1=0x2c, l2=»   B( ROW-1,COL   ) := B( ROW-1,COL   ) + 1;«, l3=0x2c}
0x05b7…05e5 Line {l1=0x2c, l2=»   B( ROW-1,COL+1 ) := B( ROW-1,COL+1 ) + 1;«, l3=0x2c}
0x05e5…0613 Line {l1=0x2c, l2=»   B( ROW  ,COL-1 ) := B( ROW  ,COL-1 ) + 1;«, l3=0x2c}
0x0613…0642 Line {l1=0x2d, l2=»   B( ROW  ,COL   ) := B( ROW  ,COL   ) + ON;«, l3=0x2d}
0x0642…0670 Line {l1=0x2c, l2=»   B( ROW  ,COL+1 ) := B( ROW  ,COL+1 ) + 1;«, l3=0x2c}
0x0670…069e Line {l1=0x2c, l2=»   B( ROW+1,COL-1 ) := B( ROW+1,COL-1 ) + 1;«, l3=0x2c}
0x069e…06cc Line {l1=0x2c, l2=»   B( ROW+1,COL   ) := B( ROW+1,COL   ) + 1;«, l3=0x2c}
0x06cc…06fa Line {l1=0x2c, l2=»   B( ROW+1,COL+1 ) := B( ROW+1,COL+1 ) + 1;«, l3=0x2c}
0x06fa…06fd Line {l1=0x01, l2=» «, l3=0x01}
0x06fd…0725 Line {l1=0x26, l2=»   ALIVECOUNT         := ALIVECOUNT+1;«, l3=0x26}
0x0725…0739 Line {l1=0x12, l2=»END (* SETCELL *);«, l3=0x12}
0x0739…073d Line {l1=0x02, l2=»  «, l3=0x02}
0x073d…076f Line {l1=0x30, l2=»                       (* R E M O V E C E L L *)«, l3=0x30}
0x076f…0772 Line {l1=0x01, l2=» «, l3=0x01}
0x0772…07b5 Line {l1=0x41, l2=»PROCEDURE REMOVECELL(VAR B: BOARD; ROW: ROWINDEX; COL: COLINDEX);«, l3=0x41}
0x07b5…07bc Line {l1=0x05, l2=»BEGIN«, l3=0x05}
0x07bc…07ea Line {l1=0x2c, l2=»   B( ROW-1,COL-1 ) := B( ROW-1,COL-1 ) - 1;«, l3=0x2c}
0x07ea…0818 Line {l1=0x2c, l2=»   B( ROW-1,COL   ) := B( ROW-1,COL   ) - 1;«, l3=0x2c}
0x0818…0846 Line {l1=0x2c, l2=»   B( ROW-1,COL+1 ) := B( ROW-1,COL+1 ) - 1;«, l3=0x2c}
0x0846…0874 Line {l1=0x2c, l2=»   B( ROW  ,COL-1 ) := B( ROW  ,COL-1 ) - 1;«, l3=0x2c}
0x0874…08a3 Line {l1=0x2d, l2=»   B( ROW  ,COL   ) := B( ROW  ,COL   ) - ON;«, l3=0x2d}
0x08a3…08d1 Line {l1=0x2c, l2=»   B( ROW  ,COL+1 ) := B( ROW  ,COL+1 ) - 1;«, l3=0x2c}
0x08d1…08ff Line {l1=0x2c, l2=»   B( ROW+1,COL-1 ) := B( ROW+1,COL-1 ) - 1;«, l3=0x2c}
0x08ff…092d Line {l1=0x2c, l2=»   B( ROW+1,COL   ) := B( ROW+1,COL   ) - 1;«, l3=0x2c}
0x092d…095b Line {l1=0x2c, l2=»   B( ROW+1,COL+1 ) := B( ROW+1,COL+1 ) - 1;«, l3=0x2c}
0x095b…095e Line {l1=0x01, l2=» «, l3=0x01}
0x095e…0986 Line {l1=0x26, l2=»   ALIVECOUNT         := ALIVECOUNT-1;«, l3=0x26}
0x0986…099d Line {l1=0x15, l2=»END (* REMOVECELL *);«, l3=0x15}
0x099d…09a0 Line {l1=0x01, l2=» «, l3=0x01}
0x09a0…09da Line {l1=0x38, l2=»                       (* R E A D G E N E R A T I O N *)«, l3=0x38}
0x09da…09dd Line {l1=0x01, l2=» «, l3=0x01}
0x09dd…09f8 Line {l1=0x19, l2=»PROCEDURE READGENERATION;«, l3=0x19}
0x09f8…0a13 Line {l1=0x19, l2=»VAR TEST       : BOOLEAN;«, l3=0x19}
0x0a13…0a2b Line {l1=0x16, l2=»    CH         : CHAR;«, l3=0x16}
0x0a2b…0a53 Line {l1=0x26, l2=»    ROW,ROWMIN,ROWMAX,ROW0 : ROWINDEX;«, l3=0x26}
0x0a53…0a7b Line {l1=0x26, l2=»    COL,COLMIN,COLMAX,COL0 : COLINDEX;«, l3=0x26}
0x0a7b…0a82 Line {l1=0x05, l2=»BEGIN«, l3=0x05}
0x0a82…0a97 Line {l1=0x13, l2=»   GENERATION := 0;«, l3=0x13}
0x0a97…0aac Line {l1=0x13, l2=»   ALIVECOUNT := 0;«, l3=0x13}
0x0aac…0ac6 Line {l1=0x18, l2=»   CLEARBOARD(ACTBOARD);«, l3=0x18}
0x0ac6…0ae0 Line {l1=0x18, l2=»   SAVBOARD := ACTBOARD;«, l3=0x18}
0x0ae0…0afb Line {l1=0x19, l2=»   SAV2BOARD := ACTBOARD;«, l3=0x19}
0x0afb…0b1e Line {l1=0x21, l2=»   ROWMIN := MAXROW; ROWMAX := 0;«, l3=0x21}
0x0b1e…0b41 Line {l1=0x21, l2=»   COLMIN := MAXCOL; COLMAX := 0;«, l3=0x21}
0x0b41…0b52 Line {l1=0x0f, l2=»   ROW    := 0;«, l3=0x0f}
0x0b52…0b67 Line {l1=0x13, l2=»   TEST   := FALSE;«, l3=0x13}
0x0b67…0b74 Line {l1=0x0b, l2=»   WRITELN;«, l3=0x0b}
0x0b74…0b9f Line {l1=0x29, l2=»   WRITELN('****** GAME OF LIFE ******');«, l3=0x29}
0x0b9f…0bc3 Line {l1=0x22, l2=»   WRITELN('PLEASE ENTER COLONY');«, l3=0x22}
0x0bc3…0c06 Line {l1=0x41, l2=»   WRITELN('NONBLANK INDICATES LIVING CELL, BLANK IS DEAD CELL');«, l3=0x41}
0x0c06…0c3d Line {l1=0x35, l2=»   WRITELN('TERMINATE INPUT BY ENTERING BLANK LINE');«, l3=0x35}
0x0c3d…0c77 Line {l1=0x38, l2=»   WRITELN('TERMINATE GAME OF LIFE BY ENTERING   >.BR');«, l3=0x38}
0x0c77…0ca0 Line {l1=0x27, l2=»   WHILE (ROW < MAXROW) AND NOT TEST DO«, l3=0x27}
0x0ca0…0caa Line {l1=0x08, l2=»   BEGIN«, l3=0x08}
0x0caa…0cb9 Line {l1=0x0d, l2=»      READLN;«, l3=0x0d}
0x0cb9…0cce Line {l1=0x13, l2=»      TEST := EOLN;«, l3=0x13}
0x0cce…0ce4 Line {l1=0x14, l2=»      ROW  := ROW+1;«, l3=0x14}
0x0ce4…0cf6 Line {l1=0x10, l2=»      COL  := 0;«, l3=0x10}
0x0cf6…0d22 Line {l1=0x2a, l2=»      WHILE (COL < MAXCOL) AND NOT EOLN DO«, l3=0x2a}
0x0d22…0d2f Line {l1=0x0b, l2=»      BEGIN«, l3=0x0b}
0x0d2f…0d47 Line {l1=0x16, l2=»         COL := COL+1;«, l3=0x16}
0x0d47…0d5b Line {l1=0x12, l2=»         READ(CH);«, l3=0x12}
0x0d5b…0d77 Line {l1=0x1a, l2=»         IF CH <> ' ' THEN«, l3=0x1a}
0x0d77…0d87 Line {l1=0x0e, l2=»         BEGIN«, l3=0x0e}
0x0d87…0daf Line {l1=0x26, l2=»            SETCELL(SAVBOARD,ROW,COL);«, l3=0x26}
0x0daf…0de0 Line {l1=0x2f, l2=»            IF ROW < ROWMIN THEN ROWMIN := ROW;«, l3=0x2f}
0x0de0…0e11 Line {l1=0x2f, l2=»            IF COL < COLMIN THEN COLMIN := COL;«, l3=0x2f}
0x0e11…0e42 Line {l1=0x2f, l2=»            IF ROW > ROWMAX THEN ROWMAX := ROW;«, l3=0x2f}
0x0e42…0e73 Line {l1=0x2f, l2=»            IF COL > COLMAX THEN COLMAX := COL;«, l3=0x2f}
0x0e73…0e82 Line {l1=0x0d, l2=»         END;«, l3=0x0d}
0x0e82…0e8e Line {l1=0x0a, l2=»      END;«, l3=0x0a}
0x0e8e…0e97 Line {l1=0x07, l2=»   END;«, l3=0x07}
0x0e97…0ebe Line {l1=0x25, l2=»   (* PUT THE FIGURE IN THE MIDDLE *)«, l3=0x25}
0x0ebe…0ee9 Line {l1=0x29, l2=»   ROW0 := (MAXROW1-ROWMIN-ROWMAX) DIV 2;«, l3=0x29}
0x0ee9…0f14 Line {l1=0x29, l2=»   COL0 := (MAXCOL1-COLMIN-COLMAX) DIV 2;«, l3=0x29}
0x0f14…0f3b Line {l1=0x25, l2=»   FOR ROW := ROWMIN-1 TO ROWMAX+1 DO«, l3=0x25}
0x0f3b…0f65 Line {l1=0x28, l2=»      FOR COL := COLMIN-1 TO COLMAX+1 DO«, l3=0x28}
0x0f65…0fa5 Line {l1=0x3e, l2=»         ACTBOARD( ROW+ROW0,COL+COL0 ) := SAVBOARD( ROW,COL );«, l3=0x3e}
0x0fa5…0fbf Line {l1=0x18, l2=»   CLEARBOARD(SAVBOARD);«, l3=0x18}
0x0fbf…0fda Line {l1=0x19, l2=»END (* READGENERATION *);«, l3=0x19}
0x0fda…0fde Line {l1=0x02, l2=»  «, l3=0x02}
0x0fde…1003 Line {l1=0x23, l2=»                  (* C E L L O N *)«, l3=0x23}
0x1003…1006 Line {l1=0x01, l2=» «, l3=0x01}
0x1006…1027 Line {l1=0x1f, l2=»PROCEDURE CELLON(Y,X: INTEGER);«, l3=0x1f}
0x1027…102e Line {l1=0x05, l2=»BEGIN«, l3=0x05}
0x102e…1046 Line {l1=0x16, l2=»   GOTOXY( X+1, Y+3 );«, l3=0x16}
0x1046…1055 Line {l1=0x0d, l2=»   WRITE('*')«, l3=0x0d}
0x1055…1068 Line {l1=0x11, l2=»END (* CELLON *);«, l3=0x11}
0x1068…106b Line {l1=0x01, l2=» «, l3=0x01}
0x106b…1097 Line {l1=0x2a, l2=»                       (* C E L L O F F *)«, l3=0x2a}
0x1097…109a Line {l1=0x01, l2=» «, l3=0x01}
0x109a…10bc Line {l1=0x20, l2=»PROCEDURE CELLOFF(Y,X: INTEGER);«, l3=0x20}
0x10bc…10c3 Line {l1=0x05, l2=»BEGIN«, l3=0x05}
0x10c3…10da Line {l1=0x15, l2=»   GOTOXY( X+1,Y+3 );«, l3=0x15}
0x10da…10e9 Line {l1=0x0d, l2=»   WRITE(' ')«, l3=0x0d}
0x10e9…10fd Line {l1=0x12, l2=»END (* CELLOFF *);«, l3=0x12}
0x10fd…1101 Line {l1=0x02, l2=»  «, l3=0x02}
0x1101…113b Line {l1=0x38, l2=»                       (* N E X T G E N E R A T I O N *)«, l3=0x38}
0x113b…113e Line {l1=0x01, l2=» «, l3=0x01}
0x113e…1159 Line {l1=0x19, l2=»PROCEDURE NEXTGENERATION;«, l3=0x19}
0x1159…116d Line {l1=0x12, l2=»VAR ROW: ROWINDEX;«, l3=0x12}
0x116d…1181 Line {l1=0x12, l2=»    COL: COLINDEX;«, l3=0x12}
0x1181…1188 Line {l1=0x05, l2=»BEGIN«, l3=0x05}
0x1188…11a8 Line {l1=0x1e, l2=»   GENERATION := GENERATION+1;«, l3=0x1e}
0x11a8…11c4 Line {l1=0x1a, l2=»   SAV2BOARD  := SAVBOARD;«, l3=0x1a}
0x11c4…11e0 Line {l1=0x1a, l2=»   SAVBOARD   := ACTBOARD;«, l3=0x1a}
0x11e0…11f5 Line {l1=0x13, l2=»   GOTOXY( 35, 1 );«, l3=0x13}
0x11f5…120e Line {l1=0x17, l2=»   WRITE(GENERATION:3);«, l3=0x17}
0x120e…1223 Line {l1=0x13, l2=»   OUTCOUNT   := 0;«, l3=0x13}
0x1223…1241 Line {l1=0x1c, l2=»   FOR ROW := 1 TO MAXROW DO«, l3=0x1c}
0x1241…1262 Line {l1=0x1f, l2=»      FOR COL := 1 TO MAXCOL DO«, l3=0x1f}
0x1262…1288 Line {l1=0x24, l2=»         CASE SAVBOARD( ROW,COL ) OF«, l3=0x24}
0x1288…129f Line {l1=0x15, l2=»            3 : BEGIN«, l3=0x15}
0x129f…12cd Line {l1=0x2c, l2=»                   (* A NEW CELL IS BORN! *)«, l3=0x2c}
0x12cd…12fc Line {l1=0x2d, l2=»                   SETCELL(ACTBOARD,ROW,COL);«, l3=0x2d}
0x12fc…1329 Line {l1=0x2b, l2=»                   CELLON(ROW-1,(COL-1)*2);«, l3=0x2b}
0x1329…133f Line {l1=0x14, l2=»                END;«, l3=0x14}
0x133f…1362 Line {l1=0x21, l2=»            9,10,13,14,15,16,17 :«, l3=0x21}
0x1362…1379 Line {l1=0x15, l2=»                BEGIN«, l3=0x15}
0x1379…13ba Line {l1=0x3f, l2=»                   (* A CELL DIES. IF 9 OR 10 FOR LONELINESS *)«, l3=0x3f}
0x13ba…13fb Line {l1=0x3f, l2=»                   (*        IF 13 TO 17 BECAUSE TOO CROWDED *)«, l3=0x3f}
0x13fb…142d Line {l1=0x30, l2=»                   REMOVECELL(ACTBOARD,ROW,COL);«, l3=0x30}
0x142d…145b Line {l1=0x2c, l2=»                   CELLOFF(ROW-1,(COL-1)*2);«, l3=0x2c}
0x145b…1471 Line {l1=0x14, l2=»                END;«, l3=0x14}
0x1471…148b Line {l1=0x18, l2=»         END (* CASE *);«, l3=0x18}
0x148b…14a6 Line {l1=0x19, l2=»END (* NEXTGENERATION *);«, l3=0x19}
0x14a6…14aa Line {l1=0x02, l2=»  «, l3=0x02}
0x14aa…14e6 Line {l1=0x3a, l2=»                       (* P R I N T G E N E R A T I O N *)«, l3=0x3a}
0x14e6…14e9 Line {l1=0x01, l2=» «, l3=0x01}
0x14e9…1505 Line {l1=0x1a, l2=»PROCEDURE PRINTGENERATION;«, l3=0x1a}
0x1505…1519 Line {l1=0x12, l2=»VAR ROW: ROWINDEX;«, l3=0x12}
0x1519…152d Line {l1=0x12, l2=»    COL: COLINDEX;«, l3=0x12}
0x152d…1534 Line {l1=0x05, l2=»BEGIN«, l3=0x05}
0x1534…1547 Line {l1=0x11, l2=»   OUTCOUNT := 0;«, l3=0x11}
0x1547…1565 Line {l1=0x1c, l2=»   FOR ROW := 1 TO MAXROW DO«, l3=0x1c}
0x1565…1586 Line {l1=0x1f, l2=»      FOR COL := 1 TO MAXCOL DO«, l3=0x1f}
0x1586…15b0 Line {l1=0x28, l2=»         IF ACTBOARD( ROW,COL ) > 8 THEN«, l3=0x28}
0x15b0…15d6 Line {l1=0x24, l2=»            CELLON(ROW-1,(COL-1)*2);«, l3=0x24}
0x15d6…15f2 Line {l1=0x1a, l2=»END (* PRINTGENERATION *);«, l3=0x1a}
0x15f2…15f5 Line {l1=0x01, l2=» «, l3=0x01}
0x15f5…1613 Line {l1=0x1c, l2=»               (* M A I N *)«, l3=0x1c}
0x1613…161a Line {l1=0x05, l2=»BEGIN«, l3=0x05}
0x161a…162e Line {l1=0x12, l2=»   READGENERATION;«, l3=0x12}
0x162e…163f Line {l1=0x0f, l2=»   CLEARSCREEN;«, l3=0x0f}
0x163f…1654 Line {l1=0x13, l2=»   GOTOXY( 20, 1 );«, l3=0x13}
0x1654…1682 Line {l1=0x2c, l2=»   WRITELN('GENERATION NO.   0    GROWING');«, l3=0x2c}
0x1682…1697 Line {l1=0x13, l2=»   PRINTGENERATION;«, l3=0x13}
0x1697…16a2 Line {l1=0x09, l2=»   REPEAT«, l3=0x09}
0x16a2…16b9 Line {l1=0x15, l2=»      NEXTGENERATION;«, l3=0x15}
0x16b9…16d4 Line {l1=0x19, l2=»      IF EOF(OUTPUT) THEN«, l3=0x19}
0x16d4…16e3 Line {l1=0x0d, l2=»        BEGIN«, l3=0x0d}
0x16e3…1703 Line {l1=0x1e, l2=»          GOTOXY( 1, MAXROW );«, l3=0x1e}
0x1703…1734 Line {l1=0x2f, l2=»          WRITELN('COLONY KILLED BY OPERATOR');«, l3=0x2f}
0x1734…174a Line {l1=0x14, l2=»          EXIT(LIFE)«, l3=0x14}
0x174a…1758 Line {l1=0x0c, l2=»        END;«, l3=0x0c}
0x1758…1776 Line {l1=0x1c, l2=»      IF ALIVECOUNT = 0 THEN«, l3=0x1c}
0x1776…1793 Line {l1=0x1b, l2=»         BOARDSTATE := DEAD«, l3=0x1b}
0x1793…179f Line {l1=0x0a, l2=»      ELSE«, l3=0x0a}
0x179f…17c5 Line {l1=0x24, l2=»         IF SAVBOARD = ACTBOARD THEN«, l3=0x24}
0x17c5…17e7 Line {l1=0x20, l2=»            BOARDSTATE := STABLE«, l3=0x20}
0x17e7…17f6 Line {l1=0x0d, l2=»         ELSE«, l3=0x0d}
0x17f6…1820 Line {l1=0x28, l2=»            IF SAV2BOARD = ACTBOARD THEN«, l3=0x28}
0x1820…1846 Line {l1=0x24, l2=»               BOARDSTATE := STABLE2«, l3=0x24}
0x1846…1858 Line {l1=0x10, l2=»            ELSE«, l3=0x10}
0x1858…187f Line {l1=0x25, l2=»               BOARDSTATE := GROWING;«, l3=0x25}
0x187f…18a2 Line {l1=0x21, l2=»   UNTIL (BOARDSTATE <> GROWING);«, l3=0x21}
0x18a2…18c2 Line {l1=0x1e, l2=»   IF BOARDSTATE = STABLE THEN«, l3=0x1e}
0x18c2…18cc Line {l1=0x08, l2=»   BEGIN«, l3=0x08}
0x18cc…18e3 Line {l1=0x15, l2=»     GOTOXY( 42, 1 );«, l3=0x15}
0x18e3…18fd Line {l1=0x18, l2=»     WRITELN('STABLE ');«, l3=0x18}
0x18fd…1905 Line {l1=0x06, l2=»   END«, l3=0x06}
0x1905…190e Line {l1=0x07, l2=»   ELSE«, l3=0x07}
0x190e…192e Line {l1=0x1e, l2=»     IF BOARDSTATE = DEAD THEN«, l3=0x1e}
0x192e…193a Line {l1=0x0a, l2=»     BEGIN«, l3=0x0a}
0x193a…1953 Line {l1=0x17, l2=»       GOTOXY( 42, 1 );«, l3=0x17}
0x1953…196e Line {l1=0x19, l2=»       WRITELN('DEAD   ')«, l3=0x19}
0x196e…1978 Line {l1=0x08, l2=»     END«, l3=0x08}
0x1978…1983 Line {l1=0x09, l2=»     ELSE«, l3=0x09}
0x1983…19a9 Line {l1=0x24, l2=»        IF BOARDSTATE = STABLE2 THEN«, l3=0x24}
0x19a9…19b8 Line {l1=0x0d, l2=»        BEGIN«, l3=0x0d}
0x19b8…19d4 Line {l1=0x1a, l2=»          GOTOXY( 42, 1 );«, l3=0x1a}
0x19d4…1a04 Line {l1=0x2e, l2=»          WRITELN('STABLE OVER 2 GENERATIONS')«, l3=0x2e}
0x1a04…1a12 Line {l1=0x0c, l2=»        END;«, l3=0x0c}
0x1a12…1a29 Line {l1=0x15, l2=»  GOTOXY( 1, MAXROW )«, l3=0x15}
0x1a29…1a3a Line {l1=0x0f, l2=»END (* MAIN *).«, l3=0x0f}
0x1a3a…1a40 00 00 20 20 20 20                                                                                 ┆      ┆
0x1a40…1a60 20 20 20 47 4f 54 4f 58 59 28 20 34 32 2c 20 31 20 29 3b 1a 2e 20 20 20 20 20 20 20 20 20 20 57   ┆   GOTOXY( 42, 1 ); .          W┆
0x1a60…1a80 52 49 54 45 4c 4e 28 27 53 54 41 42 4c 45 20 4f 56 45 52 20 32 20 47 45 4e 45 52 41 54 49 4f 4e   ┆RITELN('STABLE OVER 2 GENERATION┆
0x1a80…1aa0 53 27 29 2e 0c 20 20 20 20 20 20 20 20 45 4e 44 3b 0c 15 20 20 47 4f 54 4f 58 59 28 20 31 2c 20   ┆S').         END;    GOTOXY( 1, ┆
0x1aa0…1ac0 4d 41 58 52 4f 57 20 29 15 0f 45 4e 44 20 28 2a 20 4d 41 49 4e 20 2a 29 2e 0f 00 00 29 15 0f 45   ┆MAXROW )  END (* MAIN *).   )  E┆
0x1ac0…1ae0 4e 44 20 28 2a 20 4d 41 49 4e 20 2a 29 2e 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆ND (* MAIN *).                  ┆
0x1ae0…1b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ┆                                ┆
            […0x15…]
0x1da0…1dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 63   ┆                               c┆
0x1dc0…1de0 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63   ┆cccccccccccccccccccccccccccccccc┆

Reduced view