(FILECREATED " 5-Dec-85 17:16:13" {PHYLUM}<LOOPS>SOURCES>COURSE>SIMPLEG.;2 12508  

      previous date: "15-SEP-83 13:59:43" {PHYLUM}<LOOPS>SOURCES>COURSE>SIMPLEG.;1)


(* Copyright (c) 1985 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT SIMPLEGCOMS)

(RPAQQ SIMPLEGCOMS ((FNS CENTER CLEARWINDOW ComputeTurtleArrayIndex DRAW DrawT DrawTurtle 
			   EraseTurtle FORWARD JUMP POINT PRETTY0 PRETTY1 PRETTY2 PRETTY3 
			   SetUpTurtleArray TREE TRITRI TURN)
	(FNS CCurve CCurve1)
	(RECORDS LINE TURTLE)
	(BITMAPS t1 t2 t3 t4 t5 t6 t7 t8)
	[VARS TURTLE TurtleArray (TurtleArrow (QUOTE (((0 0 0)
						       (10 0 0))
						      ((7 4 0)
						       (10 0 0))
						      ((7 -4 0)
						       (10 0 0]
	(P (SETQ WINDOW1
		 (CREATEW (create REGION LEFT ← 300 BOTTOM ← 25 WIDTH ← 700 HEIGHT ← 700)
			  
    "                                ------ Turtle Graphics Window ------           July 1,1983 "
			  10))
	   (* This sets up the bit maps for each of the 8 turtles)
	   (SetUpTurtleArray)
	   (SETQ TURTLE
		 (create TURTLE HEADING ← 0 CURRENTX ← 0 CURRENTY ← 0 WINDOW ← WINDOW1 ERASED? ← T))
	   (CENTER)
	   (CLOSEW WINDOW1))))
(DEFINEQ

(CENTER
  [LAMBDA NIL                                                (* edited: " 5-Dec-85 16:38")
                                                             (* Move the TURTLE to the center of the TurtleWindow)
    (with TURTLE TURTLE (SETQ CURRENTX (FQUOTIENT (WINDOWPROP WINDOW (QUOTE WIDTH))
							2))
	    (SETQ CURRENTY (FQUOTIENT (WINDOWPROP WINDOW (QUOTE HEIGHT))
					  2))
	    (SETQ HEADING 0))
    (DrawTurtle])

(CLEARWINDOW
  [LAMBDA NIL                                                (* dmr: "22-JUL-83 11:47")
    (CLEARW TURTLE:WINDOW)
    (if (GREATERP TURTLE:HEADING 360)
	then (TURTLE:HEADING← (FDIFFERENCE TURTLE:HEADING 360])

(ComputeTurtleArrayIndex
  [LAMBDA NIL                                                (* edited: " 5-Dec-85 16:40")
    (with TURTLE TURTLE (if (LESSP HEADING 0)
			      then (SETQ HEADING (FPLUS HEADING 360))
				     (ComputeTurtleArrayIndex)
			    else (PLUS (QUOTIENT (REMAINDER HEADING 360)
						       45)
					   1])

(DRAW
  [LAMBDA (LINELIST WINDOW)                                  (* dmr: "22-JUL-83 11:48")
    (for LINE in LINELIST do (DRAWLINE LINE:X1 LINE:Y1 LINE:X2 LINE:Y2 1 NIL
					       (if TURTLE:WINDOW=NIL
						   then WINDOW1
						 else TURTLE:WINDOW])

(DrawT
  [LAMBDA NIL                                                (* dmr: " 7-JUL-83 14:36")
    (FORWARD 50)
    (TURN 90 (QUOTE RIGHT))
    (FORWARD 50)
    (TURN 90 (QUOTE LEFT))
    (FORWARD 50)
    (TURN 90 (QUOTE LEFT))
    (FORWARD 125)
    (TURN 90 (QUOTE LEFT))
    (FORWARD 50)
    (TURN 90 (QUOTE LEFT))
    (FORWARD 50)
    (TURN 90 (QUOTE RIGHT))
    (FORWARD 50])

(DrawTurtle
  [LAMBDA NIL                                                (* edited: " 5-Dec-85 16:40")
    (with TURTLE TURTLE (SETQ ERASED? NIL)
	    (BITBLT (ELT TurtleArray (ComputeTurtleArrayIndex))
		      NIL NIL WINDOW (DIFFERENCE CURRENTX 12)
		      (DIFFERENCE CURRENTY 12)
		      NIL NIL NIL (QUOTE INVERT)
		      NIL])

(EraseTurtle
  [LAMBDA NIL                                                (* dmr: "27-JUL-83 16:14")
    (PROG NIL
	    (if TURTLE:ERASED?
		then (RETURN))
	    (TURTLE:ERASED?←T)
	    (BITBLT (ELT TurtleArray (ComputeTurtleArrayIndex))
		      NIL NIL TURTLE:WINDOW (DIFFERENCE TURTLE:CURRENTX 12)
		      (DIFFERENCE TURTLE:CURRENTY 12)
		      NIL NIL NIL (QUOTE INVERT])

(FORWARD
  [LAMBDA (DISTANCE LINEWIDTH)                               (* dmr: "22-JUL-83 11:50")
    (PROG (nextx nexty)
	    [nextx← (FPLUS TURTLE:CURRENTX (FTIMES DISTANCE (COS TURTLE:HEADING]
	    [nexty← (FPLUS TURTLE:CURRENTY (FTIMES DISTANCE (SIN TURTLE:HEADING]
	    (EraseTurtle)
	    (DRAWLINE TURTLE:CURRENTX TURTLE:CURRENTY nextx nexty (if LINEWIDTH=NIL
									then 1
								      else LINEWIDTH)
			NIL TURTLE:WINDOW)
	    (TURTLE:CURRENTX←nextx)
	    (TURTLE:CURRENTY←nexty)
	    (DrawTurtle])

(JUMP
  [LAMBDA (DISTANCE LINEWIDTH)                               (* dmr: "21-JUL-83 16:54")
    (PROG (nextx nexty)                                    (* This is the same code as FORWARD sans the DRAWLINE)
	    (EraseTurtle)
	    [nextx← (FPLUS TURTLE:CURRENTX (FTIMES DISTANCE (COS TURTLE:HEADING]
	    [nexty← (FPLUS TURTLE:CURRENTY (FTIMES DISTANCE (SIN TURTLE:HEADING]
	    (TURTLE:CURRENTX←nextx)
	    (TURTLE:CURRENTY←nexty)
	    (DrawTurtle])

(POINT
  [LAMBDA (THETA)                                            (* dmr: "21-JUL-83 11:28")
    (EraseTurtle)
    TURTLE:HEADING←THETA
    (DrawTurtle])

(PRETTY0
  [LAMBDA NIL                                                (* dmr: "30-JUN-83 13:19")
    (for i from 1 to 10
       do (FORWARD 50)
	    (TURN 178])

(PRETTY1
  [LAMBDA NIL                                                (* edited: "15-SEP-83 13:56")
    (CENTER)
    (POINT 90)
    (for i from 1 to 10
       do (DrawT)
	    (DrawT)
	    (TURN 10])

(PRETTY2
  [LAMBDA NIL                                                (* edited: "15-SEP-83 13:56")
    (CLEARWINDOW)
    (CENTER)
    (POINT 90)
    (for i from 1 to 10
       do (DrawT)
	    (TURN 10)
	    (DrawT))
    (for i from 1 to 75 do (JUMP 3])

(PRETTY3
  [LAMBDA NIL                                                (* dmr: "30-JUN-83 13:42")
    (CENTER)
    (POINT 0)
    (for i from 1 to 20
       do (PRETTY0)
	    (JUMP 30])

(SetUpTurtleArray
  [LAMBDA NIL                                                (* dmr: "21-JUL-83 11:26")
    (SETQ TurtleArray (ARRAY 8 (QUOTE POINTER)))
    (SETA TurtleArray 3 t1)
    (SETA TurtleArray 2 t2)
    (SETA TurtleArray 1 t3)
    (SETA TurtleArray 8 t4)
    (SETA TurtleArray 7 t5)
    (SETA TurtleArray 6 t6)
    (SETA TurtleArray 5 t7)
    (SETA TurtleArray 4 t8])

(TREE
  [LAMBDA NIL                                                (* dmr: " 7-JUL-83 14:36")
    (FORWARD 50)
    (TURN 90 (QUOTE RIGHT))
    (FORWARD 50)
    (TURN 90 (QUOTE LEFT))
    (FORWARD 50)
    (TURN 90 (QUOTE LEFT))
    (FORWARD 125)
    (TURN 90 (QUOTE LEFT))
    (FORWARD 50)
    (TURN 90 (QUOTE LEFT))
    (FORWARD 50)
    (TURN 90 (QUOTE RIGHT))
    (FORWARD 50])

(TRITRI
  [LAMBDA (SIDE)                                             (* dmr: "24-JUL-83 18:33")
    (FORWARD 100)
    (TURN 120 (QUOTE RIGHT))
    (FORWARD 25)
    (TURN 120 (QUOTE LEFT))
    (FORWARD 100)
    (TURN 120 (QUOTE RIGHT))
    (FORWARD 25)
    (TURN 120 (QUOTE LEFT))
    (FORWARD 100)
    (TURN 120 (QUOTE RIGHT))
    (FORWARD 25])

(TURN
  [LAMBDA (THETA DIRECTION)                                  (* dmr: "21-JUL-83 16:37")
                                                             (* THETA is number of degrees to turn.
							     Direction is either (QUOTE LEFT) or 
							     (QUOTE RIGHT.))
                                                             (* DrawArrow (fetch CURRENTX of TURTLE) 
							     (fetch CURRENTY of TURTLE) 
							     (fetch HEADING of TURTLE))
    (EraseTurtle)
    TURTLE:HEADING←
    (if (EQUAL DIRECTION NIL) or (EQUAL DIRECTION (QUOTE LEFT))
	then (FPLUS TURTLE:HEADING THETA)
      else (FDIFFERENCE TURTLE:HEADING THETA))
    (if (LESSP TURTLE:HEADING 0)
	then (TURTLE:HEADING←TURTLE:HEADING+360))
    (if (GREATERP TURTLE:HEADING 360)
	then (TURTLE:HEADING← (REMAINDER TURTLE:HEADING 360)))
    (DrawTurtle)                                           (* DrawArrow (fetch CURRENTX of TURTLE) 
							     (fetch CURRENTY of TURTLE) 
							     (fetch HEADING of TURTLE))
    ])
)
(DEFINEQ

(CCurve
  [LAMBDA (len angle minlen ds)                              (* dmr: "27-JUL-83 16:34")
    minLen←minlen
    (CCurve1 len angle ds])

(CCurve1
  [LAMBDA (len angle ds)                                     (* dmr: "27-JUL-83 16:35")
    (if (LESSP len minLen)
	then (POINT angle)
	       (FORWARD len)
      else (CCurve1 (FQUOTIENT len (SQRT 2.0))
			(FPLUS angle 45)
			ds)
	     (CCurve1 (FQUOTIENT len (SQRT 2.0))
			(FDIFFERENCE angle 45)
			ds])
)
[DECLARE: EVAL@COMPILE 

(RECORD LINE ((X1 Y1 Z1)
		(X2 Y2 Z2)))

(RECORD TURTLE (HEADING CURRENTX CURRENTY WINDOW ERASED?))
]

(RPAQ t1 (READBITMAP))
(25 25
"@@AL@@@@"
"@@CF@@@@"
"@@BB@@@@"
"AHCF@L@@"
"BDADAB@@"
"BDALAB@@"
"BBCFFB@@"
"CJNCML@@"
"@OHHF@@@"
"@FALC@@@"
"@BCNA@@@"
"@DBJA@@@"
"@D@HA@@@"
"@D@HA@@@"
"@B@HB@@@"
"@C@HB@@@"
"@GHHGH@@"
"@DL@NL@@"
"@IGOBF@@"
"CB@HBB@@"
"BD@LAB@@"
"BD@D@J@@"
"GL@L@L@@"
"@@C@@@@@"
"@@B@@@@@")

(RPAQ t2 (READBITMAP))
(25 25
"@@AOHG@@"
"@@@HHLH@"
"@@@IHHH@"
"@@COFCH@"
"@AL@CN@@"
"@C@@AH@@"
"@F@GHH@@"
"@D@AHL@@"
"@D@CHD@@"
"NL@FHD@@"
"KH@LHD@@"
"HHAH@GH@"
"HHC@@HH@"
"KHB@@HH@"
"LH@@AOH@"
"@H@@AAH@"
"@L@@CCH@"
"@O@@FC@@"
"HIN@L@@@"
"OHGO@@@@"
"@@DD@@@@"
"@ALL@@@@"
"@A@H@@@@"
"@A@H@@@@"
"@AOH@@@@")

(RPAQ t3 (READBITMAP))
(25 25
"@@@@@@@@"
"AN@@A@@@"
"AC@@AH@@"
"CA@@AD@@"
"AMANCD@@"
"@DNALL@@"
"@GH@G@@@"
"@A@@A@@@"
"@B@@@H@@"
"@F@@LKH@"
"@D@@FFH@"
"ILCOODH@"
"JH@@FGH@"
"FL@@LL@@"
"@D@@@H@@"
"@B@@AH@@"
"@GH@AL@@"
"@EN@ND@@"
"AMAOCD@@"
"CA@@AD@@"
"CI@@AD@@"
"@N@@CH@@"
"@@@@@@@@"
"@@@@@@@@"
"@@@@@@@@")

(RPAQ t4 (READBITMAP))
(25 25
"F@AO@@@@"
"I@AC@@@@"
"AHAB@@@@"
"@HCF@@@@"
"@HGL@@@@"
"@OHF@@@@"
"@D@C@@@@"
"@L@AHC@@"
"NHD@LCH@"
"K@F@FBH@"
"I@C@CLH@"
"K@A@A@H@"
"M@AHAAH@"
"@H@M@O@@"
"@H@E@H@@"
"@D@G@H@@"
"@CAO@H@@"
"@A@@AH@@"
"@AL@A@@@"
"@@F@NJ@@"
"@DEOIG@@"
"@GLHAAH@"
"@CAHA@H@"
"@AO@@IH@"
"@@F@@G@@")

(RPAQ t5 (READBITMAP))
(25 25
"@@AL@@@@"
"AN@D@O@@"
"BB@DAA@@"
"BCAHAB@@"
"AONGNN@@"
"@AH@M@@@"
"@A@HG@@@"
"@C@HC@@@"
"@B@HA@@@"
"@B@HA@@@"
"@B@HA@@@"
"@B@HA@@@"
"FB@HA@@@"
"GABJC@@@"
"EICNBC@@"
"DGALGO@@"
"DAALDA@@"
"C@LHNB@@"
"AKNCIN@@"
"@NCN@@@@"
"@@AB@@@@"
"@@BA@@@@"
"@@BM@@@@"
"@@CC@@@@"
"@@AN@@@@")

(RPAQ t6 (READBITMAP))
(25 25
"@@CL@D@@"
"@@DB@B@@"
"@@DD@B@@"
"@@FD@B@@"
"D@COMN@@"
"L@N@F@@@"
"LAH@C@@@"
"LF@@A@@@"
"JL@AI@@@"
"IH@CA@@@"
"O@@FA@@@"
"C@HLAO@@"
"A@IHA@H@"
"A@K@CHH@"
"B@N@BDH@"
"B@OHFDH@"
"A@@@DC@@"
"@L@AH@@@"
"CB@C@@@@"
"NCHN@@@@"
"HFOLB@@@"
"HDAKN@@@"
"HD@HD@@@"
"LL@HL@@@"
"G@@G@@@@")

(RPAQ t7 (READBITMAP))
(25 25
"@GL@@F@@"
"@LH@AI@@"
"@HH@AA@@"
"@HH@AA@@"
"@LOOMG@@"
"@GL@CD@@"
"@G@@AL@@"
"@D@@@H@@"
"FHF@@D@@"
"JHL@@DH@"
"IIOONFH@"
"HHL@@EH@"
"KHF@@D@@"
"FH@@@H@@"
"@L@@@H@@"
"@N@@AH@@"
"@ON@CL@@"
"@HKONJ@@"
"@I@@AC@@"
"@HH@BAH@"
"@LL@A@H@"
"@FD@AM@@"
"@CN@@B@@"
"@@@@@@@@"
"@@@@@@@@")

(RPAQ t8 (READBITMAP))
(25 25
"GHAOH@@@"
"HLACH@@@"
"HDON@@@@"
"LGJG@@@@"
"DL@AL@@@"
"CH@@F@@@"
"AAOHCAH@"
"CAL@AAH@"
"BAF@@KH@"
"FAC@@NH@"
"GAAH@DH@"
"I@@L@DH@"
"IH@F@FH@"
"IL@C@EH@"
"FD@AHH@@"
"FF@@@H@@"
"BC@@@H@@"
"@AL@A@@@"
"@@G@CN@@"
"@@MOOK@@"
"@AA@@A@@"
"@AA@@@H@"
"@AHH@@H@"
"@@HH@A@@"
"@@GH@@@@")

(RPAQQ TURTLE (0 340.0 333.0 {WINDOW}#55,150554 NIL))

(RPAQ TurtleArray (READARRAY 8 (QUOTE POINTER) 1))
({BITMAP}#64,63044
{BITMAP}#64,63052
{BITMAP}#74,124140
{BITMAP}#64,63006
{BITMAP}#64,63014
{BITMAP}#64,63022
{BITMAP}#64,63030
{BITMAP}#64,63036
NIL
)

(RPAQQ TurtleArrow (((0 0 0)
		       (10 0 0))
		      ((7 4 0)
		       (10 0 0))
		      ((7 -4 0)
		       (10 0 0))))
(SETQ WINDOW1 (CREATEW (create REGION LEFT ← 300 BOTTOM ← 25 WIDTH ← 700 HEIGHT ← 700)
		       
    "                                ------ Turtle Graphics Window ------           July 1,1983 "
		       10))
(* This sets up the bit maps for each of the 8 turtles)
(SetUpTurtleArray)
(SETQ TURTLE (create TURTLE HEADING ← 0 CURRENTX ← 0 CURRENTY ← 0 WINDOW ← WINDOW1 ERASED? ← T))
(CENTER)
(CLOSEW WINDOW1)
(PUTPROPS SIMPLEG COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1158 8494 (CENTER 1168 . 1650) (CLEARWINDOW 1652 . 1902) (ComputeTurtleArrayIndex 1904
 . 2282) (DRAW 2284 . 2574) (DrawT 2576 . 3039) (DrawTurtle 3041 . 3413) (EraseTurtle 3415 . 3837) (
FORWARD 3839 . 4408) (JUMP 4410 . 4909) (POINT 4911 . 5082) (PRETTY0 5084 . 5276) (PRETTY1 5278 . 5520
) (PRETTY2 5522 . 5843) (PRETTY3 5845 . 6068) (SetUpTurtleArray 6070 . 6501) (TREE 6503 . 6965) (
TRITRI 6967 . 7383) (TURN 7385 . 8492)) (8495 9041 (CCurve 8505 . 8658) (CCurve1 8660 . 9039)))))
STOP