DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

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

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T c

⟦c00842b71⟧ TextFile

    Length: 3507 (0xdb3)
    Types: TextFile
    Names: »cell.clu«

Derivation

└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
    └─ ⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z« 
        └─⟦2109abc41⟧ 
            └─ ⟦this⟧ »./X.V10R4/xdemo/cell.clu« 

TextFile

cell = cluster is new, set_neighbors, set_test_list,
		  clear,
		  get_x, get_y,
		  set_generation, get_generation,
		  set_alive, get_alive,
		  born_neighbor, dead_neighbor,
		  get_died, get_born,
		  generate, affect_neighbors

    cells = sequence[cell]
    acell = array[cell]

    rep = record[
	      Alive_Last:     bool,
	      Alive_Now:      bool,
	      Generation:     int,
	      Neighbors:      cells,
	      Neigh_Count:    int,
	      Test_List:      acell,
	      X: 	      int,
	      Y: 	      int
		 ]

    New = proc (X: int, Y: int) returns (cvt)
	return (rep${
		    Alive_Last:     false,
		    Alive_Now:      false,
		    Generation:     -1,
		    Neighbors:      _cvt[null, cells](nil),
		    Neigh_Count:    0,
		    Test_List:      _cvt[null, acell](nil),
		    X:		    X,
		    Y:		    Y
		     })
	end New

    Set_Neighbors = proc (C: cvt, Ns: cells)
	C.Neighbors := Ns
	end Set_Neighbors

    Set_Test_List = proc (C: cvt, TL: acell);
	C.Test_List := TL
	end Set_Test_List;

    Clear = proc (C: cvt, G: int);
	C.Alive_Last  := false
	C.Alive_Now   := false
	C.Generation  := G
	C.Neigh_Count := 0
	end Clear;

    Get_X = proc (C: cvt) returns (int);
	return (C.X)
	end Get_X;

    Get_Y = proc (C: cvt) returns (int);
	return (C.Y)
	end Get_Y;

    Set_Generation = proc (C: cvt, G: int);
	C.Generation := G
	end Set_Generation;

    Get_Generation = proc (C: cvt) returns (int);
	return (C.Generation)
	end Get_Generation;

    Set_Alive = proc (C: cvt, Al: bool, Generation: int) returns (bool)
	C.Alive_Last := C.Alive_Now
	C.Alive_Now  := Al
	Changed: bool := C.Alive_Last ~= Al
	if (Changed cand
	    (C.Generation ~= Generation))
	   then acell$AddH(C.Test_List, up(C))
		C.Generation := Generation
	   end
	return (Changed)
	end Set_Alive

    Get_Alive = proc (C: cvt) returns (bool);
	return (C.Alive_Now)
	end Get_Alive;

    Born_Neighbor = proc (C: cvt)
	C.Neigh_Count := C.Neigh_Count + 1
	end Born_Neighbor

    Dead_Neighbor = proc (C: cvt)
	C.Neigh_Count := C.Neigh_Count - 1
	end Dead_Neighbor

    Get_Died = proc (C: cvt) returns (bool)
	return (C.Alive_Last cand ~ C.Alive_Now)
	end Get_Died

    Get_Born = proc (C: cvt) returns (bool)
	return (C.Alive_Now cand ~ C.Alive_Last)
	end Get_Born

    Generate = proc (C: cvt) returns (bool)
	C.Alive_Last := C.Alive_Now
	Count: int := C.Neigh_Count
	if ((Count < 2) cor (Count > 3))
	   then C.Alive_Now := false
	 elseif (Count = 3)
	   then C.Alive_Now := true
	 end
	return (C.Alive_Now ~= C.Alive_Last)
	end Generate

    Affect_Neighbors = proc (C: cvt, Generation: int)
  	if (C.Alive_Last)
	   then if (~ C.Alive_Now)
		   then for N: cell in cells$Elements(C.Neighbors) do
			    NR: rep := down(N)
			    NR.Neigh_Count := NR.Neigh_Count - 1
			    if (NR.Generation ~= Generation)
			       then acell$AddH(NR.Test_List, N)
				    NR.Generation := Generation
			       end
			    end
		        if (C.Generation ~= Generation)
			   then acell$AddH(C.Test_List, up(C))
				C.Generation := Generation
			   end
		   end
	   else if (C.Alive_Now)
		   then for N: cell in cells$Elements(C.Neighbors) do
			    NR: rep := down(N)
			    NR.Neigh_Count := NR.Neigh_Count + 1
			    if (NR.Generation ~= Generation)
			       then acell$AddH(NR.Test_List, N)
				    NR.Generation := Generation
			       end
			    end
		        if (C.Generation ~= Generation)
			   then acell$AddH(C.Test_List, up(C))
				C.Generation := Generation
			   end
		   end
	   end
	end Affect_Neighbors
    end cell