а`рLг­Й° iЌж=L\Ж©Ќx© …©Ђ…?…©…©…©…© яўN ±ЩРр'Ґi…ђжКРйЖРМ ш­иАўЅБ эыиаРхрюИАРН­ЃА­ЃА©Р…?©0… ±…И± я­‰А©Р…?©… ±i…И±i я­ЂАlшяНХУФ ВППФ ЖТПН УМПФ ¶ОП ЖЙМЕ УЩУФЕН®БРРМЕ  SYSTEM.APPLEЅ€А шўЅ¬ эыиаРхрю© L$ьккJHERE Ю1N^Rўrў ЬЪ –ЎZfPOLORGRAPH.TEXT–ЎfrPOLORLOOP.TEXTЬ¦ЎrЂEPICYCLOID.TEXT7 ЂЋHYPO.THREE.TEXT7 Ћ” FLOWER.TEXT ЬU ”ћKINETICART.TEXTтўћўKINETICART.CODEтўў¬ TWOD.TEXTІЉ ЬJ ¬° TWOD.CODEІЉ ЬJ °є TWOD1.TEXTЉPGRAPH2Ј( GENEPOOL.TEXT Ьrў(. DRAW.TEXT’Љ Ь§џ.4PIECEMAKER.TEXT† 4: DRAWLINE.TEXT Ьљ :< DRAWLINE.CODE Ьљ <D FIGURE.TEXT ЬХЎDPCOLOR.BAR.TEXTЬеЎPT POLOR.EX.TEXT ЬF TZREALSTR.PC.TEXTж&руЅЊАыЙХРркЅЊАыЙЄРт ЅЊАыЙ–Рз©…'ЅЊАы*…&ЅЊАы%&™,E'€зЁР·ЅЊАыЙЮР®кЅЊАыЙЄР¤`†+…*НxрH©…&­x…'8е*р7°IяоxђiюОxЕ&ђҐ&Й °Ё § №И · Ґ') +ЄЅЂА№Ф · ж&Рї · ­x) +ЄЅЃА¦+`кўКРэжFРжG8йРр`0($ p,&"Ґ) …Ґ(jJJ…р©…>L+ ¦р"Жж?жҐIР…жр¤№> …сўдр N ђЪ`  ў`Ґр x V Nx ъ °ы¤.ЊxДрРжҐ-ЕсРм ’ °з z ` ўVК0ы№^*^*‘>ИРн`  €рaЅЊАыIХРфкЅЊАыЙЄРт VЅЊАыЙ­Рз©€„&јЊАыYЦ¤&™Ро„&јЊАыYЦ¤&™ИРојЊАыЩЦРЅЊАыЙЮР кЅЊАыЙЄр\8` ь„&ИР(*$S+*)  PROGRAM GENEPOOL;  (*$C Copyright 1980 JDEisenberg *)  USES TURTLEGR,APPLESTU;   CONST #GENE0=0; GENE1=1; #WIDTH=35; HEIGHT=32; (* AREA OF A FACE *) #X0=0; Y0=148; (* BASE X,Y FOR FACES *) #BEL=7; (* ASCII BELL CODE#PENCOLOR(NONE); #MOVETO(COL*7,184-ROW*8)  END;   PROCEDURE ERSLINE(ROW:INTEGER);  BEGIN #AT(0,ROW); #WSTRING(' ');  END;   PROCEDURE PSPACEBAR;  BEGIN #AT(3,23); #WSTRING('Press spacebar to continue'))END; )XBASE:=XBASE+14 &END (* FOR GENE *) #END (* FOR TRAIT *)  END;   PROCEDURE DRAWME(PERSON:ZYGOTE;ATROW,ATCOL:INTEGER);  BEGIN #DRAWFACE(PERSON,ATROW,ATCOL); #DRAWGENES(PERSON,ATROW,ATCOL)  END; #  PROCEDURE AT(COL,ROW:INTEGER);  BEGIN #FOR TRAIT:=FACE TO HAIR DO BEGIN &YBASE:=Y0-(ATROW*HEIGHT)+ORD(TRAIT)*5; &XBASE:=X0+ATCOL*WIDTH; &FOR GENE:=GENE0 TO GENE1 DO BEGIN )DRAWCOLOR:=COLOURS[TRAIT,PERSON.TRAITS[TRAIT,GENE]]; )FOR INX:=0 TO 3 DO BEGIN ,SKIPTO(XBASE,YBASE+INX); ,MOVE(9) N:ZYGOTE;ATROW,ATCOL:INTEGER);  VAR #GENE:INTEGER; #TRAIT:CHARACTERISTIC; #XBASE,YBASE:INTEGER; (* WHERE X,Y LEFT CORNER IS NOW *) #INX:INTEGER; (* WHICH FILLER LINE TO DRAW *)  BEGIN #(*COLOUR IN THE GENE SQUARES *) 4 #END; #(* NOW DRAW EYES/NOSE/MOUTH *) #DRAWCOLOR:=BLACK2; #SKIPTO(XBASE+3,YBASE-3); MOVETO(XBASE+3,YBASE-3); #SKIPTO(XBASE+8,YBASE-3); MOVETO(XBASE+8,YBASE-3); #SKIPTO(XBASE+6,YBASE-7); MOVETO(XBASE+6,YBASE-9);  END;   PROCEDURE DRAWGENES(PERSOOR:=COLOURS[HAIR,PERSON.SHOWSUP[HAIR]]; #XBASE:=X0+ATCOL*WIDTH+6; YBASE:=Y0-(ATROW*HEIGHT)+23; #INX:=0; #WHILE INX < 13 DO BEGIN &SKIPTO(XBASE+INX,YBASE); &IF PERSON.SEX=FEMALE THEN MOVETO(XBASE+6,YBASE+3) &ELSE MOVETO(XBASE+INX,YBASE+3); &INX:=INX+#XBASE:=X0+ATCOL*WIDTH; #SKIPTO(XBASE+10,YBASE-10); MOVE(5); #FOR INX:=11 TO 12 DO BEGIN &SKIPTO(XBASE+(24-DRAWLEN),YBASE-INX); &MOVETO(XBASE+DRAWLEN,YBASE-INX); &IF PERSON.SEX=FEMALE THEN DRAWLEN:=DRAWLEN+2 #END; #(* NOW DRAW THE HAIR *) #DRAWCOL #FOR INX:=6 TO 9 DO BEGIN &SKIPTO(XBASE+(13-DRAWLEN),YBASE-INX); &MOVETO(XBASE+DRAWLEN,YBASE-INX); &IF PERSON.SEX=FEMALE THEN DRAWLEN:=DRAWLEN-1 #END; #(* SHOULDERS *) #DRAWCOLOR:=VIOLET; #IF PERSON.SEX=MALE THEN DRAWLEN:=24 ELSE DRAWLEN:=22; W LONG TO DRAW THE LINE *)  BEGIN #(* DRAW THE FACE FIRST *) #XBASE:=X0+ATCOL*WIDTH+5; #YBASE:=Y0-(ATROW*HEIGHT)+22; #DRAWCOLOR:=COLOURS[FACE,PERSON.SHOWSUP[FACE]]; #FOR INX:=0 TO 5 DO BEGIN &SKIPTO(XBASE,YBASE-INX); &MOVE(13) #END; #DRAWLEN:=13;OR)  END;   PROCEDURE DRAWFACE(PERSON:ZYGOTE;ATROW,ATCOL:INTEGER);  VAR #GENE:INTEGER; TRAIT:CHARACTERISTIC; #XBASE,YBASE:INTEGER; (* WHERE X,Y LEFT CORNER IS NOW *) #INX, (* WHICH FILLER LINE TO DRAW *) #DRAWLEN:INTEGER; (* HO#NMALE, (* HOW MANY MALES *) #NFEMALE, (* HOW MANY FEMALES *) #ROWSIZE, (* # TO DISPLAY PER ROW *) #COLOFFSET: (* IN ORDER TO CENTER FACES *) &INTEGER; &  PROCEDURE SKIPTO(X,Y:INTEGER);  BEGIN #PENCOLOR(NONE); MOVETO(X,Y); PENCOLOR(DRAWCOL -NHOMDOM, (* NUMBER HOMOZYGOUS DOMINANT *) -NHETDOM, (* NUMBER HETEROZYGOUS DOMINANT *) -NHOMREC: (* NUMBER HETEROZYGOUS RECESSIVE *) 0INTEGER; *END; #RESTART, #NOPADDLES:BOOLEAN; #NKIDS, (* SIZE OF THEKIDS ARRAY *) PE; )SHOWSUP:ARRAY[FACE..HAIR] OF GENETYPE; &END; &  VAR  DRAWCOLOR:SCREENCOLOR; #COLOURS: &ARRAY[FACE..HAIR,DOMINANT..RECESSIVE] OF SCREENCOLOR; #KEY:CHAR; #MOM,DAD:ZYGOTE; #THEKIDS:ARRAY[0..23] OF ZYGOTE; #STATS: ARRAY[FACE..HAIR] OF RECORD *) #ESC=27; (* CODE FOR ESC KEY *) #  TYPE #SEXTYPE=(MALE,FEMALE); #GENETYPE=(DOMINANT,RECESSIVE); #CHARACTERISTIC=(FACE,HAIR); #ZYGOTE= &RECORD )SEX:SEXTYPE; )(* EACH TRAIT HAS TWO GENES *) )TRAITS:ARRAY[FACE..HAIR,0..1] OF GENETY;  REPEAT &READ(KEYBOARD,KEY) #UNTIL (KEY=' ') OR (KEY=CHR(ESC)); #ERSLINE(23)  END;   PROCEDURE GENERATION;  VAR #INX:INTEGER; #ASEX:SEXTYPE; #TRAIT:CHARACTERISTIC;  BEGIN #(* DRAW THE PARENTS *) #FILLSCREEN(BLACK); #DRAWME(MOM,0,3); DRAWME(DAD,0,4); #(* GENERATE THE KIDS *)  INX:=0; #NKIDS:=23; #NMALE:=1; NFEMALE:=1; (* GUARANTEES ONE OF EACH *) #FOR TRAIT:=FACE TO HAIR DO BEGIN &STATS[TRAIT].NHOMDOM:=0; &STATS[TRAIT].NHOMREC:=0; &STATS[TRAIT].NHETDOM:=0;KIDS[INX],0,INX+2); #END; #(* MAKE ONLY FACES SHOW UP *) #SETCOLOURS(ORANGE,BLUE,NONE,NONE); #EXPKIDS[0].SEX:=FEMALE; #AT(1,6); WSTRING('Above you see four Zorkons.'); #AT(1,8); WSTRING('Zorkons may have green or white hair'); #AT(1,9); WSTRING('and (INX MOD 2)=0 THEN SEX:=MALE ELSE SEX:=FEMALE; )CASE INX DIV 2 OF ,0: SHOWSUP[FACE]:=DOMINANT; ,1: SHOWSUP[FACE]:=RECESSIVE; )END; )CASE INX DIV 2 OF ,0: SHOWSUP[HAIR]:=DOMINANT; ,1: SHOWSUP[HAIR]:=RECESSIVE; )END; &END; (* WITH *) &DRAWFACE(EXP&COLOURS[FACE,RECESSIVE]:=RECFACE; &COLOURS[HAIR,DOMINANT]:=DOMHAIR; &COLOURS[HAIR,RECESSIVE]:=RECHAIR; #END;  BEGIN #FILLSCREEN(BLACK); #(* SET UP ALL COMBINATIONS OF HAIR/FACE COLOURS *) #FOR INX:=0 TO 3 DO BEGIN &WITH EXPKIDS[INX] DO BEGIN )IFom ->'); #AT(25,3); WSTRING('<- Dad');  END;   PROCEDURE EXPLAIN;  VAR #INX:INTEGER; #EXPKIDS:ARRAY[0..3] OF ZYGOTE; # #PROCEDURE SETCOLOURS(DOMFACE,RECFACE,DOMHAIR,RECHAIR:SCREENCOLOR); #BEGIN &COLOURS[FACE,DOMINANT]:=DOMFACE; TS[FACE].NHOMREC:3); #GOTOXY(2,23); WRITE('PRESS SPACEBAR TO CONTINUE'); #TEXTMODE; (* POOF-APPEARS LIKE MAGIC *) #REPEAT &READ(KEYBOARD,KEY) #UNTIL KEY = ' '; #GRAFMODE  END;   PROCEDURE LEGEND;  BEGIN #FILLSCREEN(BLACK); #AT(8,3); WSTRING('MOMREC:3); #GOTOXY(1,18); WRITE('OFFSPRING''S FACES'); #GOTOXY(10,19); #WRITE('HOMOZYGOUS DOMINANT: ',STATS[FACE].NHOMDOM:3); #GOTOXY(10,20); #WRITE('HETEROZYGOUS DOMINANT:',STATS[FACE].NHETDOM:3); #GOTOXY(10,21); #WRITE('HOMOZYGOUS RECESSIVE: ',STA#GOTOXY(1,13); WRITE('OFFSPRING''S HAIR'); #GOTOXY(10,14); #WRITE('HOMOZYGOUS DOMINANT: ',STATS[HAIR].NHOMDOM:3); #GOTOXY(10,15); #WRITE('HETEROZYGOUS DOMINANT:',STATS[HAIR].NHETDOM:3); #GOTOXY(10,16); #WRITE('HOMOZYGOUS RECESSIVE: ',STATS[HAIR].NH'); #GOTOXY(10,6); SHOWZYGOTE(DAD,HAIR); #GOTOXY(10,7); SHOWZYGOTE(DAD,FACE); #GOTOXY(1,9); WRITE('OUT OF THESE 24 CHILDREN,'); #GOTOXY(6,10); WRITE(NMALE:2,' ARE MALE'); #GOTOXY(6,11); WRITE(NFEMALE:2,' ARE FEMALE'); SE BEGIN )WRITE('HETEROZYGOUS DOMINANT'); &END #END; #  BEGIN #(* WRITE INVISIBLY ON TEXT PAGE *) #PAGE(OUTPUT); #GOTOXY(1,1); WRITE('MOTHER'); #GOTOXY(10,2); SHOWZYGOTE(MOM,HAIR); #GOTOXY(10,3); SHOWZYGOTE(MOM,FACE); #GOTOXY(1,5); WRITE('FATHER #BEGIN &IF WHAT=HAIR THEN )WRITE('HAIR: ') &ELSE )WRITE('FACE: '); &IF WHO.TRAITS[WHAT,GENE0]=WHO.TRAITS[WHAT,GENE1] THEN BEGIN )WRITE('HOMOZYGOUS'); )IF WHO.TRAITS[WHAT,GENE0]=DOMINANT THEN ,WRITE('DOMINANT') )ELSE ,WRITE('RECESSIVE') &END EL&END #END; (* FOR *) #(* AND DISPLAY THEM *) #FOR INX:=0 TO NKIDS DO &DRAWME(THEKIDS[INX],1+(INX DIV ROWSIZE), )(INX MOD ROWSIZE)+COLOFFSET);  END;   PROCEDURE STATISTICS;  VAR KEY:CHAR;  #PROCEDURE SHOWZYGOTE(WHO:ZYGOTE;WHAT:CHARACTERISTIC);IT,GENE0]; /IF SHOWSUP[TRAIT]=RECESSIVE THEN 2STATS[TRAIT].NHOMREC:=STATS[TRAIT].NHOMREC+1 /ELSE 2STATS[TRAIT].NHOMDOM:=STATS[TRAIT].NHOMDOM+1 ,END ELSE BEGIN /SHOWSUP[TRAIT]:=DOMINANT; /STATS[TRAIT].NHETDOM:=STATS[TRAIT].NHETDOM+1 ,END )END NFEMALE:=NFEMALE+1 )END; )FOR TRAIT:=FACE TO HAIR DO BEGIN ,TRAITS[TRAIT,GENE0]:=MOM.TRAITS[TRAIT,RANDOM MOD 2]; ,TRAITS[TRAIT,GENE1]:=DAD.TRAITS[TRAIT,RANDOM MOD 2]; ,IF TRAITS[TRAIT,GENE0]=TRAITS[TRAIT,GENE1] THEN BEGIN /SHOWSUP[TRAIT]:=TRAITS[TRA  END; #ROWSIZE:=8; #COLOFFSET:=0; #FOR INX:=0 TO 23 DO BEGIN &WITH THEKIDS[INX] DO BEGIN )IF INX=1 THEN SEX:=MALE )ELSE IF INX=2 THEN SEX:=FEMALE )ELSE IF (RANDOM MOD 2)=0 THEN BEGIN ,SEX:=MALE; NMALE:=NMALE + 1 )END ELSE BEGIN ,SEX:=FEMALE; blue or orange faces.'); #AT(1,11); WSTRING('Orange face genes are'); #AT(1,12); WSTRING('dominant over blue face'); #AT(1,13); WSTRING('genes.'); #DRAWFACE(EXPKIDS[0],2,6); DRAWFACE(EXPKIDS[3],2,7); #PSPACEBAR; #(* MAKE ONLY HAIR SHOW UP *) #SETCOLOURS(NONE,NONE,GREEN,WHITE1); #DRAWFACE(EXPKIDS[0],2,6); DRAWFACE(EXPKIDS[3],2,7); #(* RESTORE COLOURS TO NORMAL *) #SETCOLOURS(ORANGE,BLUE,GREEN,WHITE1); #AT(1,15); WSTRING('Green hair genes are dominant'); #AT(1,16); WSTRING('over white hair&TRAITS[HAIR,GENE0]:=DOMINANT; &TRAITS[HAIR,GENE1]:=RECESSIVE; &TRAITS[FACE,GENE0]:=DOMINANT; &TRAITS[FACE,GENE1]:=RECESSIVE; &SHOWSUP[HAIR]:=DOMINANT; &SHOWSUP[FACE]:=DOMINANT; #END; #(* SET UP FATHER SAME AS MOM, BUT MALE *) #DAD:=MOM; #DAD.SEXBEGIN &EXPLAIN; EXPLAIN2; EXPLAIN3; &EXPLAIN4; GENERATION #END ELSE BEGIN &ERSLINE(1); ERSLINE(20); &ERSLINE(22); ERSLINE(23) #END  END;   PROCEDURE INITPARENTS;  BEGIN #(* SET UP MOTHER WITH ALL THE GENES *) #WITH MOM DO BEGIN &SEX:=FEMALE; #AT(2,20); WSTRING('A simulation of a genetics experiment'); #AT(5,22); WSTRING('Copyright 1980 by JDEisenberg'); #AT(1,23); WSTRING('Press spacebar to start, ? for help'); #REPEAT &READ(KEYBOARD,KEY) #UNTIL (KEY=' ') OR (KEY='?'); #IF KEY='?' THEN ) #ELSE &WSTRING('Use paddle zero to select'); #AT(1,11); WSTRING('the genetic types.'); #PSPACEBAR  END;   PROCEDURE SPLASHPAGE;  VAR INX:INTEGER;  BEGIN #GENERATION; #AT(7,1); WSTRING('Welcome to the GenePool'); #LEGEND; #AT(1,6); WSTRING('You may select male and female genetic'); #AT(1,7); WSTRING('types, and a random sampling of their'); #AT(1,8); WSTRING('offspring will be produced.'); #AT(1,10); #IF NOPADDLES THEN &WSTRING('Use the arrow keys to select'DRAWME(ONEKID,0,5); #AT(1,16); WSTRING('Finally, if the child gets one dominant'); #AT(1,18); WSTRING('and one recessive gene for a trait,'); #AT(1,20); WSTRING('the child is HETEROZYGOUS DOMINANT.'); #PSPACEBAR  END;   PROCEDURE EXPLAIN4;  BEGIN #AT(1,12); WSTRING('If both genes are recessive, then the'); #AT(1,14); WSTRING('child is called HOMOZYGOUS RECESSIVE.'); #PSPACEBAR; #FOR TRAIT:=FACE TO HAIR DO BEGIN &ONEKID.TRAITS[TRAIT,GENE0]:=DOMINANT; &ONEKID.SHOWSUP[TRAIT]:=DOMINANT; #END; #GOUS DOMINANT for that trait.'); #PSPACEBAR; #FOR TRAIT:=FACE TO HAIR DO BEGIN &FOR GENE:=GENE0 TO GENE1 DO BEGIN )ONEKID.TRAITS[TRAIT,GENE]:=RECESSIVE; &END; &ONEKID.SHOWSUP[TRAIT]:=RECESSIVE #END; #DRAWME(ONEKID,0,4); IT,GENE]:=DOMINANT; &END; &ONEKID.SHOWSUP[TRAIT]:=DOMINANT #END; #FILLSCREEN(BLACK); #DRAWME(ONEKID,0,3); #AT(1,6); WSTRING('If both genes for hair (or face) are'); #AT(1,8); WSTRING('dominant, then the child is called'); #AT(1,10); WSTRING('HOMOZYWSTRING('from each parent.'); #PSPACEBAR;  END;   PROCEDURE EXPLAIN3;  VAR #ONEKID:ZYGOTE; #TRAIT:CHARACTERISTIC; #GENE:INTEGER;  BEGIN #ONEKID.SEX:=MALE; #FOR TRAIT:=FACE TO HAIR DO BEGIN &FOR GENE:=GENE0 TO GENE1 DO BEGIN )ONEKID.TRAITS[TRA#AT(12,5); WSTRING('->'); #AT(1,13); WSTRING('The bottom row shows their face genes'); #PSPACEBAR; #AT(12,5); WSTRING(' '); #AT(1,15); WSTRING('Each Zorkon child wears two hair'); #AT(1,16); WSTRING('(and face) colour genes, one from'); #AT(1,17); ('->'); #AT(1,9); WSTRING('The boxes beneath them tell you what'); #AT(1,10); WSTRING('genes they carry.'); #PSPACEBAR; #AT(12,5); WSTRING(' '); #AT(1,12); WSTRING('The top row shows their hair genes.'); #PSPACEBAR; #AT(12,4); WSTRING(' '); up hair.'); #DRAWFACE(EXPKIDS[3],4,7); #PSPACEBAR  END;   PROCEDURE EXPLAIN2;  BEGIN #LEGEND; #AT(1,6); WSTRING('This is a typical Zorkon couple,'); #AT(1,7); WSTRING('Martha and Sam.'); #PSPACEBAR; #AT(12,4); WSTRING('->'); #AT(12,5); WSTRING genes.'); #PSPACEBAR; #AT(1,18); WSTRING('Male Zorkons have square'); #AT(1,19); WSTRIОЗЁ§жбгеу бод уфтбйзиф ибйт®§©»ЌђЈДТБЧЖБCE(EXPKIDS[2],4,6); #PSPACEBAR; #AT(1,20); WSTRING('Female Zorkons have round'); #AT(1,21); WSTRING('faces and flat, piled-:=MALE  END;   PROCEDURE CHOOSETYPES;  VAR #LASTPOS,POSITION:INTEGER; #GOTCHA,HADERROR:BOOLEAN;  &PROCEDURE DRAWCURSOR; &VAR ROW,COL,XBASE,YBASE:INTEGER; &BEGIN )ROW:=(POSITION DIV ROWSIZE)+1; )COL:=(POSITION MOD ROWSIZE)+COLOFFSET; )XBASE:=X0+COL*WIDTH+11; )YBASE:=Y0-(ROW*HEIGHT)+4; )SKIPTO(XBASE-3,YBASE);MOVETO(XBASE+3,YBASE); )SKIPTO(XBASE,YBASE-3);MOVETO(XBASE,YBASE+3) &END;  &PROCEDURE GETPOSITION; &BEGIN )IF KEYPRESS THEN BEGIN ,READ(KEYBOARD,KEY); ,IF KEY=CHR(ESC) T)IF (NOT RESTART) AND (KEY <> CHR(ESC)) THEN ,GENERATION &UNTIL RESTART OR (KEY=CHR(ESC)); #UNTIL KEY=CHR(ESC); #PAGE(OUTPUT); #TEXTMODE  END. ; &COLOURS[HAIR,RECESSIVE]:=WHITE1; &COLOURS[FACE,DOMINANT]:=ORANGE; &COLOURS[FACE,RECESSIVE]:=BLUE; &RESTART:=FALSE; &INITPARENTS #END;   BEGIN #RANDOMIZE; #REPEAT &INITIALISE; &SPLASHPAGE; &REPEAT )CHOOSETYPES; N'T HAVE PADDLES ATTACHED *) &POS0:=PADDLE(0); &FOR DELAY:=1 TO 50 DO BEGIN END; &POS1:=PADDLE(1); &NOPADDLES:=((POS0=255) AND (POS1=255)) AND 1((BUTTON(0)) AND (BUTTON(1))); &(* SET UP COLOURS FOR FACE/HAIR DISPLAY *) &COLOURS[HAIR,DOMINANT]:=GREEN:=THEKIDS[POSITION]; &DRAWCURSOR #END; # #PROCEDURE INITIALISE; #VAR POS0,POS1,DELAY:INTEGER; (* FOR READING PADDLES *) #BEGIN &INITTURTLE; &(* IF BOTH PADDLES READ 255, AND BOTH BUTTONS *) &(* ARE PRESSED, THEN IT'S A SAFE BET THAT YOU *) &(* DO,WRITE(CHR(BEL)); (* K'DING *) ,IF NOT HADERROR THEN BEGIN /CHARTYPE(5); (* REVERSE VIDEO *) /AT(3,23); WSTRING('Females have rounded faces'); /CHARTYPE(10); (* NORMAL VIDEO *) /HADERROR:=TRUE; ,END; )END &UNTIL THEKIDS[POSITION].SEX=FEMALE; &MOMOR THEN ERSLINE(23); &HADERROR:=FALSE; &REPEAT )GOTCHA:=FALSE; )AT(3,18); WSTRING('Choose the new female genetic type.'); )REPEAT ,GETPOSITION; ,DRAWCURSOR; ,DRAWCURSOR )UNTIL GOTCHA; )IF THEKIDS[POSITION].SEX <> FEMALE THEN BEGIN HADERROR THEN BEGIN /CHARTYPE(5); (* REVERSE VIDEO *) /AT(3,23); WSTRING('Males have square faces'); /CHARTYPE(10); (* NORMAL VIDEO *) /HADERROR:=TRUE ,END; )END &UNTIL THEKIDS[POSITION].SEX=MALE; &DAD:=THEKIDS[POSITION]; &DRAWCURSOR; &IF HADERRG('<-,-> to move; spacebar to choose') )ELSE ,WSTRING('Press button to choose'); )DRAWCOLOR:=REVERSE; )REPEAT ,GETPOSITION; ,DRAWCURSOR; ,DRAWCURSOR )UNTIL GOTCHA; )IF THEKIDS[POSITION].SEX<>MALE THEN BEGIN ,WRITE(CHR(BEL)); (* K'DING *) ,IF NOT&WSTRING('Press S for statistics'); &AT(3,21); &WSTRING('Press RETURN to start again'); &AT(3,22); WSTRING('Press ESC to exit'); &REPEAT )GOTCHA:=FALSE; )AT(3,18); WSTRING('Choose the new male genetic type'); )AT(3,19); )IF NOPADDLES THEN ,WSTRINITION-LASTPOS)>3 THEN LASTPOS:=POSITION; ,POSITION:=LASTPOS DIV (240 DIV NKIDS); ,IF POSITION > NKIDS THEN POSITION:=NKIDS; ,GOTCHA:=BUTTON(0) )END &END; & #BEGIN &LASTPOS:=0; POSITION:=0; &HADERROR:=FALSE; &AT(3,20); N POSITION:=POSITION+1; /IF POSITION < 0 THEN POSITION:=NKIDS; /IF POSITION > NKIDS THEN POSITION:=0; ,END )END; )IF NOT NOPADDLES THEN BEGIN (* UNGRAMMATICAL BUT CORRECT *) ,POSITION:=PADDLE(0); ,(* MAKE SURE PADDLE REALLY IS MOVING *) ,IF ABS(POSHEN EXIT(CHOOSETYPES); ,IF EOLN(KEYBOARD) THEN BEGIN /RESTART:=TRUE; /EXIT(CHOOSETYPES) ,END; ,IF KEY='S' THEN BEGIN /STATISTICS ,END; ,IF NOPADDLES THEN BEGIN /GOTCHA:=(KEY=' '); /IF ORD(KEY)=8 THEN POSITION:=POSITION-1 /ELSE IF ORD(KEY)=21 THEN^§џ§џN^§џ†  (END; $END;  REPEAT UNTIL KEYPRESS;  TEXTMODE;  END.  *DRAWBLOCK(GUY,2,0,0,16,16,FIL*SIZE+4,RANK*SIZE+4,4); (IF SQ>20 THEN *DRAWBLOCK(GUY,2,0,0,16,16,FIL*SIZE+4,RANK*SIZE+4,6); (VIEWPORT(0,279,0,191); (MOVETO(200,50); (CHARTYPE(10); (WCHAR(CHR(SQ DIV 10 + ORD('0'))); (WCHAR(CHR(SQ MOD 10 + ORD('0')));(RANK+1)*SIZE); $COLOR := ORANGE; $IF ODD(RANK) <> ODD(FIL) THEN COLOR:=WHITE; $FILLSCREEN(COLOR); $IF COLOR<>WHITE THEN (BEGIN (SQ:=SQ+1; (IF ODD(SQ) THEN GUY:=KING ELSE GUY:=SINGLE; (IF SQ<13 THEN 1,I);  FOR I:=1 TO 3 DO MAP(2,I);  MAP(3,1); MAP(3,2);  MAP(4,1); MAP(5,1);  SINGLE:=KING;  MAP(3,7); MAP(4,7); MAP(5,7);  MAP(6,7); MAP(7,7);  SQ:=0;  FOR RANK:=7 DOWNTO 0 DO "FOR FIL:=0 TO 7 DO $BEGIN $VIEWPORT(FIL*SIZE,(FIL+1)*SIZE,RANK*SIZE, MAP (ROW, COL: INTEGER);  BEGIN  KING[ROW,COL]:=FALSE;  KING[17-ROW,COL]:=FALSE;  KING[ROW,17-COL]:=FALSE;  KING[17-ROW,17-COL]:=FALSE;  END;   BEGIN  INITTURTLE;  FOR I:=1 TO 16 DO "FOR J:=1 TO 16 DO $KING[I,J]:=TRUE;  FOR I:=1 TO 5 DO MAP(PROGRAM DRAWBOARD;   USES TURTLEGRAPHICS, APPLESTUFF;   CONST SIZE = 24;    TYPE PICTURE = PACKED ARRAY[1..16,1..16] OF BOOLEAN;   VAR RANK, FIL, SQ: INTEGER;  I, J: INTEGER;  COLOR: SCREENCOLOR;  GUY, KING, SINGLE: PICTURE;   PROCEDUREprogram test;  uses turtlegraphics;    type box = packed array[1..24,1..32] of boolean;   var boxes: packed array[1..4] of box;  d, i, j, k: integer;  F: file of box;   begin   rewrite(f, 'box.data');   for i:=1 t BEGIN $ $LENGTH := ABS(X2-X1); $IF ABS(Y2-Y1)>LENGTH THEN (LENGTH := ABS(Y2-Y1); $XINCREMENT := (X2-X1)/LENGTH; $YINCREMENT := (Y2-Y1)/LENGTH; $X := X1 + 0.5 ; Y := Y1 + 0.5; $FOR I := 1 TO LENGTH DO (BEGIN *PLOT(TRUNC(X),TRUNC(Y)); *X := X+XINTEGER); " "(* PROGRAM FROM 'PRINCIPLES OF %INTERACTIVE COMPUTER GRAPHICS' BY %NEWMAN AND SPROULL % %ENTERED 9 OCT 80 BY LEE MEADOR %WITH ACCOMPANYING ROUTINES TO %CALL IT, ETC. *) % "VAR LENGTH,I:INTEGER; &X,Y,XINCREMENT,YINCREMENT:REAL; & PROGRAM DRAWLINE;   USES TURTLEGRAPHICS;   VAR XA,XB,YA,YB:INTEGER;  S:STRING;   PROCEDURE PLOT (X,Y:INTEGER); #  BEGIN # #PENCOLOR(BLACK); #MOVETO(X,Y); #PENCOLOR(WHITE); #MOVE(1); #  END (* PLOT *);   PROCEDURE DDA(X1,Y1,X2,Y2:N^љ љ "for j:=0 to 7 do $begin $drawblock(boxes[j mod 4+1],4,0,0,24, (24,i*24-i,j*24-j,10);  end;  readln;  TEXTMODE;  end.  j:=1 to 24 do &if boxes[1,i,j] & then write('x') 'else write(' '); $end;  readln;   writeln('writing boxes');  for i:=1 to 4 do $begin $f^:=boxes[i]; $put(f); $end;  close(f,lock);   initturtle;  pencolor(white);   for i:=0 to 7 do 12 to 12 do $begin $d:=abs(i*i+j*j); $if d<=63 &then boxes[1,i+12,j+12]:=true; $if abs(64-d)<=7 &then boxes[2,i+12,j+12]:=true; $if (abs(i)<= 6) and (abs(j)<= 6) &then boxes[4,i+12,j+12]:=true; $end; &  for i:=1 to 24 do $begin $writeln; $foro 4 do "for j:=1 to 24 do # for k:=1 to 24 do &boxes[i,j,k]:=false;   for i:=1 to 4 do "for j:=1 to 24 do $begin $boxes[i,j,24]:=true; $boxes[i,24,j]:=true; $boxes[i,j,1]:=true; $boxes[i,1,j]:=true; $end;    for i:=-12 to 12 do "for j:=-INCREMENT; *Y := Y+YINCREMENT; *END   END (* DDA *);   BEGIN (* MAIN PROGRAM *)   INITTURTLE;   XA := 10; YA := 10;  XB := 250; YB := 50;   DDA(XA,YA,XB,YB);  MOVETO(137,90);  WSTRING('DRAWN BY THE POINT');  PENCOLOR(NONE);   S := 'PUSH TO CONTINUE';  MOVETO(139-7*(LENGTH(S) DIV 2),180);  WSTRING(S);   READLN(S);  TEXTMODE;   END.  GTH(S); "B:=Y-2; T:=Y+10; "VIEWPORT(L,R,B,T); "FILLSCREEN(BLACK); "VIEWPORT(0,279,0,191);  PENCOLOR(NONE); MOVETO(L,B); "PENCOLOR(WHITE); MOVETO(L,T); "MOVETO(R,T); MOVETO(R,B); MOVETO(L,B); "PENCOLOR(NONE); MOVETO(L+3,B+2); "WSTRING(S);  END; *********************)  (* *)  (* WRITE A STRING IN ERASED BOX *)  (* *)  (********************************)  VAR L,R,B,T: INTEGER;  BEGIN "PENCOLOR(NONE); MOVETO(X,Y); "L:=X-3; R:=X+2+7*LEN  PROGRAM FIGURE;   USES TRANSCEND, TURTLEGRAPHICS;   VAR X : ARRAY [0..360] OF INTEGER; $Y : ARRAY [0..360] OF INTEGER; $I : INTEGER; $ANGLE, DELTAANGLE, NUMBEROFPOINTS : REAL;   PROCEDURE BOXSTRING(X,Y: INTEGER; S: STRING);  (***********N^ћХЎNTINUEЄPЗ‹Ґѕ†Џ•ЗґНҐН¶ҐPНћ¶НћНћћ№ ћћН№фБњZЁ®>Ж‚ЫЖ‚ЫѕН їЫ‚М№ф¦.TEXTЧЖ‚НЖ‚ѕ•ЛЖ‚ѕИЌЖ‚Ж‚ѕѕ.Л„Ў%Ж‚М‚.Ж‚.Ж‚PНЖ‚.¦.TEXTЧUНЖ‚.ЄPЖ‚Ж‚ѕѕ.ГЎ Ж‚Ж‚ѕН№Ж‚Ч¦*SYSTEM.WRK.TEXTЄPННЩШННН­ЩЫ•ЂМШЪ•ЂЭЕЎШЪ•ЂМЖ ЩЫ•ЭЉ‰‡ЅЖШЪ•ЭЉ‰‡ЅЖ Ыіo?‰ѓЅЖ ЪіS?‰ѓЅМЭМЬжИЎ/Ж јћЖ јћПЖ Ж јЖ јѓЅЖ Ж јЖјѓЅЬ‚М№ц­6Љ№цН « «Зъ«2«нлмкОЗ‰ZНЧ¦DRAWN BY THE POINTННҐЧ¦PUSH TO CO"0*` DRAWLINE    PROCEDURE WRITECHARS;  VAR HORIZ,VERT,ASCII: INTEGER;  BEGIN "INITTURTLE; "ASCII:=0; "FOR VERT:=0 TO 18 DO $BEGIN &MOVETO(0,180-VERT*10); &FOR HORIZ:=0 TO 39 DO (BEGIN *WCHAR(CHR(ASCII)); *ASCII:=(ASCII+1) MOD 128; (END; " END; "READLN;  END;   PROCEDURE FILLARRAYS;  CONST RADIANS = 57.29957795;  XRADIUS = 139; &YRADIUS = 95; &XMID = 139; &YMID = 95;  VAR I : INTEGER;  MAXANGLE : REAL;  BEGIN "MAXANGLE := 360/RADIANS; "DELTAANGLE := (360.0/RADIANS VAR L,R,B,T: INTEGER;  BEGIN "PENCOLOR(NONE); MOVETO(X,Y); "L:=X-3; R:=X+2+7*LENGTH(S); "B:=Y-2; T:=Y+10; "VIEWPORT(L,R,B,T); "FILLSCREEN(BLACK); "VIEWPORT(0,279,0,191);  PENCOLOR(NONE); MOVETO(L,B); "PENCOLOR(WHITE); MOVETO(L,T); "MOVETO(R,TNMODE : SCREENCODE;   PROCEDURE BOXSTRING(X,Y: INTEGER; S: STRING);  (********************************)  (* *)  (* WRITE A STRING IN ERASED BOX *)  (* *)  (********************************)   PROGRAM FIGURE;   USES TRANSCEND, TURTLEGRAPHICS;   CONST XWIDTH = 23; &YWIDTH = 16;   VAR X : ARRAY [0..360] OF INTEGER; $Y : ARRAY [0..360] OF INTEGER; $I, XLOCATE, YLOCATE : INTEGER; $ANGLE, DELTAANGLE, NUMBEROFPOINTS : REAL;  PEO^ћеЎ"BOXSTRING(10,90,'FILLING ARRAY'); "FILLARRAYS; "FILLSCREEN(WHITE ); "CIRCLE; "REPEAT I := I + 1 UNTIL (I > 2000); "BOXSTRING(60, 90, 'HIT RETURN TO CONTINUE'); "READLN; "TEXTMODE; "WRITELN('THAT''S ALL FOLKS...');  END.   ; (MOVETO (X[M],Y[M]); &END; # $END;  END;   BEGIN; (* MAIN PROGRAM *) "WRITELN('INTER NUMBER OF POINTS: '); "GOTOXY (24,2); "READLN(NUMBEROFPOINTS); "INITTURTLE; "FILLSCREEN(WHITE); "VIEWPORT(1,278,1,190); I]); $END;  UNTIL (ANGLE >= MAXANGLE);  END;   PROCEDURE CIRCLE;  VAR K, N, M :INTEGER;  BEGIN "K := TRUNC(NUMBEROFPOINTS) - 1; "FOR N := 0 TO K DO $BEGIN $FOR M := N TO K DO &BEGIN (PENCOLOR (NONE); (MOVETO (X[N],Y[N]); (PENCOLOR (BLACK)) / NUMBEROFPOINTS; "I := 0; "ANGLE := 0; "REPEAT " BEGIN &X [I] := ROUND(XRADIUS * COS (ANGLE) + XMID); &Y [I] := ROUND(YRADIUS * SIN (ANGLE) + YMID); &I := I +1; &ANGLE := I * DELTAANGLE; $ WRITELN(I,' ANGLE=',ANGLE*RADIANS,' X=',X[I],' Y=',Y[); MOVETO(R,B); MOVETO(L,B); "PENCOLOR(NONE); MOVETO(L+3,B+2); "WSTRING(S);  END;    PROCEDURE WRITECHARS;  VAR HORIZ,VERT,ASCII: INTEGER;  BEGIN "INITTURTLE; "ASCII:=0; "FOR VERT:=0 TO 18 DO $BEGIN &MOVETO(0,180-VERT*10); &FOR HORIZ:=0 TO 39 DO (BEGIN *WCHAR(CHR(ASCII)); *ASCII:=(ASCII+1) MOD 128; (END; " END; "READLN;  END;    BEGIN; (* MAIN PROGRAM *) "WRITELN('HIT RETURN TO START: '); "GOTOXY (22,2); "READLN; "INITTURTLE; " "(**********************"BOXSTRING(60, 90, 'HIT RETURN TO CONTINUE'); "READLN; "TEXTMODE; "WRITELN('THAT''S ALL FOLKS...');  END.   "VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); "FILLSCREEN(ORANGE); "YLOCATE := YLOCATE + YWIDTH; "VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); "FILLSCREEN(BLUE); "YLOCATE := YLOCATE + YWIDTH; "VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); "FILLSCREEN(WHITE2); "  "YLOCATE := YLOCATE + YWIDTH; "VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); "FILLSCREEN(WHITE1); "YLOCATE := YLOCATE + YWIDTH; "VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); "FILLSCREEN(BLACK2); "YLOCATE := YLOCATE + YWIDTH; TH; "VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); "FILLSCREEN(BLACK1); "YLOCATE := YLOCATE + YWIDTH; "VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); "FILLSCREEN(GREEN); "YLOCATE := YLOCATE + YWIDTH; "VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); "FILLSCREEN(VIOLET);,YLOCATE+YWIDTH); "FILLSCREEN(WHITE); "YLOCATE := YLOCATE + YWIDTH; "VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); "FILLSCREEN(BLACK); "YLOCATE := YLOCATE + YWIDTH; "VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); "FILLSCREEN(REVERSE); "YLOCATE := YLOCATE + YWID"(*FILL SCREEN WITH BANDS 12 POSIBLE*) "(*"COLORS". *) "(***********************************) "YLOCATE := 0; " "VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); "FILLSCREEN(NONE); "YLOCATE := YLOCATE + YWIDTH; "VIEWPORT(0,279,YLOCATE := XLOCATE + XWIDTH; "VIEWPORT(XLOCATE,XLOCATE+XWIDTH,0,191); "FILLSCREEN(BLUE); "XLOCATE := XLOCATE + XWIDTH; "VIEWPORT(XLOCATE,XLOCATE+XWIDTH,0,191); "FILLSCREEN(WHITE2); " "(***********************************) ORT(XLOCATE,XLOCATE+XWIDTH,0,191); "FILLSCREEN(WHITE1); "XLOCATE := XLOCATE + XWIDTH; "VIEWPORT(XLOCATE,XLOCATE+XWIDTH,0,191); "FILLSCREEN(BLACK2); "XLOCATE := XLOCATE + XWIDTH; "VIEWPORT(XLOCATE,XLOCATE+XWIDTH,0,191); "FILLSCREEN(ORANGE); "XLOCATE,191); "FILLSCREEN(BLACK1); "XLOCATE := XLOCATE + XWIDTH; "VIEWPORT(XLOCATE,XLOCATE+XWIDTH,0,191); "FILLSCREEN(GREEN); "XLOCATE := XLOCATE + XWIDTH; "VIEWPORT(XLOCATE,XLOCATE+XWIDTH,0,191); "FILLSCREEN(VIOLET); "XLOCATE := XLOCATE + XWIDTH; "VIEWP"YLOCATE := XLOCATE + XWIDTH; "VIEWPORT(XLOCATE,XLOCATE+XWIDTH,0,191); "FILLSCREEN(BLACK); "XLOCATE := XLOCATE + XWIDTH; "VIEWPORT(XLOCATE,XLOCATE+XWIDTH,0,191); "FILLSCREEN(REVERSE); "XLOCATE := XLOCATE + XWIDTH; "VIEWPORT(XLOCATE,XLOCATE+XWIDTH,0ERTICALY. *) "(***********************************) "XLOCATE := 0; " "VIEWPORT(XLOCATE,XLOCATE+XWIDTH,0,191); "FILLSCREEN(NONE); "XLOCATE := XLOCATE + XWIDTH; "VIEWPORT(XLOCATE,XLOCATE+XWIDTH,0,191); "FILLSCREEN(WHITE); " YLOCATE := YLOCATE + YWIDTH; " IF (PENMODE <> WHITE2) THEN PENMODE := SUCC(PENMODE); &IF (PENMODE = RADAR) THEN PENMODE := SUCC(PENMODE); $END; " "(***********************************) "(*FILL SCREEN WITH BANDS 12 POSIBLE*) "(*"COLORS" V*************) "(*FILL SCREEN WITH BANDS 12 POSIBLE*) "(*"COLORS". *) "(***********************************) "YLOCATE := 0; " "FOR I := 1 TO 12 DO $BEGIN " VIEWPORT(0,279,YLOCATE,YLOCATE+YWIDTH); " FILLSCREEN(PENMODE);N^F F NG := ''; "I := 1; "WHILE ((TESTSTRING [I] <> '0') AND (I <= (TESTLENGTH - 1))) DO &BEGIN (DECIMALSTRING := CONCAT (DECIMALSTRING, COPY (TESTSTRING, I, 1)); (I := SUCC (I); &END; "DECIMALLENGTH := LENGTH (DECIMALSTRING); "IF (DECIMALLENGTH > 0) $T TESTSTRING : STRING; $  BEGIN "INTEGERVALUE := TRUNC (NUMBER); "DECIMALVALUE := ROUND ((NUMBER - INTEGERVALUE ) * DECIMALPLACES); "STR (INTEGERVALUE, INTEGERSTRING); "STR (DECIMALVALUE, TESTSTRING); "TESTLENGTH := LENGTH (TESTSTRING); "DECIMALSTRIPROGRAM TESTPROCD;   VAR INN : REAL; $OUT : STRING; $  PROCEDURE FIXSTRING (NUMBER : REAL; VAR STG : STRING);   CONST DECIMALPLACES = 100;   VAR INTEGERVALUE, DECIMALVALUE, DECIMALLENGTH, TESTLENGTH, I : INTEGER; $INTEGERSTRING, DECIMALSTRING,STARTP ENDP ;tN^–Ў–ЎN (B); 0XX := TRUNC (C) + 95; 0YY := TRUNC (D) +139; 0MOVETO (XX, YY); 0B := B + INC; .END; *END; $END; $READLN; $TEXTMODE;  END.  UNC (Q); &SUM := IP + IQ; &IF (ODD (SUM)) (THEN *MAXVAL := Q * TWOPI (ELSE *MAXVAL := Q * PI; &INITTURTLE; &PENCOLOR (WHITE); &IF (A = 'S') (THEN *BEGIN ,WHILE (B <= MAXVAL) DO .BEGIN 0R := 110 * SIN (N * B); 0C := R * COS (B); 0D := R * SITWOPI/200; &B := 0.0; &WRITELN ('ENTER "S" FOR SINE, "C" FOR COSINE; THEN "P" & "Q"'); &READLN (A); &READLN (P); &READLN (Q); &IF (Q = 0.0) THEN EXIT (POLORGRAPHICS); &N := P/Q; &IF (N = 0.0) THEN EXIT (POLORGRAPHICS); &IP := TRUNC (P); &IQ := TRPROGRAM POLORGRAPHS;  USES TURTLEGRAPHICS, TRANSCEND;   CONST PI = 3.14159; &TWOPI = 6.28318;   VAR B, C, D, INC, MAXVAL, N, P, Q, R, X : REAL; $IP, IQ, SUM, XX, YY : INTEGER; $A : CHAR;   BEGIN "N := 1.0; "WHILE (N > 0) DO $BEGIN &INC := HEN &STG := CONCAT (INTEGERSTRING, '.', DECIMALSTRING) $ELSE &STG := INTEGERSTRING; "END; (* FIXSTRING *)    BEGIN  REPEAT  BEGIN  READLN (INN);  IF (INN <> 0)  THEN  BEGIN  FIXSTRING (INN, OUT);  WRITELN (' IN = ',INN,' OUT = ',OUT);  END;  END;  UNTIL (INN = 0);  END.  "WHILE ((TESTSTRING [I] <> '0') AND (I <= (TESTLENGTH - 1))) DO &BEGIN (DECIMALSTRING := CONCAT (DECIMALSTRING, COPY (TESTSTRING, I, 1)); (I := SUCC (I); &END; "DECIMALLENGTH := LENGTH (DECIMALSTRING); "IF (DECIMALLENGTH > 0) $THEN &STG := CONCAT ; $  BEGIN "INTEGERVALUE := TRUNC (NUMBER); "DECIMALVALUE := ROUND ((NUMBER - INTEGERVALUE ) * DECIMALPLACES); "STR (INTEGERVALUE, INTEGERSTRING); "STR (DECIMALVALUE, TESTSTRING); "TESTLENGTH := LENGTH (TESTSTRING); "DECIMALSTRING := ''; "I := 1; "CHARTYPE(6); "WSTRING(S);  END;   PROCEDURE FIXSTRING (NUMBER : REAL; VAR STG : STRING);   CONST DECIMALPLACES = 100;   VAR INTEGERVALUE, DECIMALVALUE, DECIMALLENGTH, TESTLENGTH, I : INTEGER; $INTEGERSTRING, DECIMALSTRING, TESTSTRING : STRING "B:=Y-2; T:=Y+10; "(* VIEWPORT(L,R,B,T) *); "(* FILLSCREEN(BLACK) *); "VIEWPORT(0,279,0,191);  PENCOLOR(NONE); MOVETO(L,B); "PENCOLOR(WHITE); MOVETO(L,T); "MOVETO(R,T); MOVETO(R,B); MOVETO(L,B); "PENCOLOR(NONE); MOVETO(L+3,B+2); **************)  (* *)  (* WRITE A STRING IN ERASED BOX *)  (* *)  (********************************)  VAR L,R,B,T: INTEGER;  BEGIN "PENCOLOR(NONE); MOVETO(X,Y); "L:=X-3; R:=X+2+7*LENGTH(S);F INTEGER; $Y : ARRAY[0..MAXPOINTS] OF INTEGER;   FUNCTION POWER (X, Y : REAL) : REAL;   VAR Z : REAL;   BEGIN "Z := EXP (Y * LN (X));  POWER := Z;  END; (* POWER *)   PROCEDURE BOXSTRING(X,Y: INTEGER; S: STRING);  (******************PROGRAM POLORGRAPH;   USES TURTLEGRAPHICS,TRANSCEND;   CONST RADIAN = 57.2957795;  A = 95;  MAXPOINTS = 2002;   VAR QSTART, QEND, QDELTA,  TIMESSIN, TIMESANGLE, $NPTS, R : REAL; $K : INTEGER; $X : ARRAY[0..MAXPOINTS] ON^F –Ў(INTEGERSTRING, '.', DECIMALSTRING) $ELSE &STG := INTEGERSTRING; "END; (* FIXSTRING *)   PROCEDURE READIN;   VAR BLANKLINES : INTEGER;    BEGIN "GOTOXY (0,0); "WRITELN('R = A * (B * SIN (C * ANGLE)); '); "FOR BLANKLINES := 1 TO 10 DO " WRITELN(' '); "GOTOXY (0,0); "WRITELN; "WRITELN; "WRITELN ('INPUT INTERATIONS(0 TO QUIT):'); "GOTOXY (30,2); "READLN (NPTS);  WRITELN ('INPUT B :'); "N^F ¦Ў BEGIN " PARAMETERS; " FUNCT; (PLOT; " READLN; " TEXTMODE;  END; "UNTIL (NPTS = 0);  END.  "FIXSTRING (TIMESSIN, B); "FIXSTRING (TIMESANGLE, C); "FIXSTRING (A, ASTR); "STRG := CONCAT ('R = ',ASTR,' * COS (',B,' * SIN (',C,' * ANGLE))'); "BOXSTRING (0,0,STRG)  END;    BEGIN (* MAIN *) "REPEAT " READIN; " IF (NPTS <> 0) THEN $ 1],Y[1]); "PENCOLOR (WHITE); "KMINUS1 := K - 1; "FOR I := 0 TO KMINUS1 DO $ MOVETO (X[I],Y[I]);  PENCOLOR (NONE); "MOVETO (X[K],Y[K]); "FIXSTRING (NPTS, STRNPTS); "STRG := CONCAT ('NPTS=',STRNPTS); "BOXSTRING (0,169,STRG); (A) * COS (2 * ANGLE); *) $(* IF (RSQR < 0) THEN RSQR := -RSQR; *) $(* R := SQRT (RSQR); *)  END;    PROCEDURE PLOT;   VAR I, KMINUS1 : INTEGER;  STRG, ASTR, B, C,STRNPTS : STRING;   BEGIN "INITTURTLE; "PENCOLOR (NONE); "MOVETO (X[$(* ARCHIMEDEAN SPRIAL ? *) $(* R := (A * ANGLE)/100; *) $(* RECTANGULAR HYPERBOLA A = 15 *) $(* RSQR := SQR (A)/COS (2 * ANGLE); *) $(* IF (RSQR < 0) THEN RSQR := -RSQR; *) $(* R := SQRT (RSQR); *) $(* RSQR := SQR $(* CARDIOID A = 73 0) $(* R := A * (1 + COS (ANGLE)); *) $(* ELLIPSE A = 85 *) $(* R := A * (1 + ((1/2) * COS (ANGLE))); *) $(* LIMACON A =105 *) $(* R := A * ((1/2) + COS (ANGLE)) *);  QSTART/RADIAN; "K := 0; "REPEAT $R := A * COS (TIMESSIN * SIN (TIMESANGLE * ANGLE)); $X[K] := ROUND(R * COS (ANGLE)) +139; $Y[K] := ROUND(R * SIN (ANGLE)) + 95; $ANGLE := ANGLE + QDELTA; $K := K + 1; "UNTIL (K >= (NPTS + 1)) DELTA := (QEND - QSTART)/NPTS;  WRITELN('NPTS =',NPTS); "WRITELN('QSTART=',QSTART);  WRITELN('QEND =',QEND);  WRITELN('QDELTA=',QDELTA);  END;   PROCEDURE FUNCT;   VAR RSQR, ANGLE : REAL;   BEGIN "QDELTA := QDELTA/RADIAN; "ANGLE :=GOTOXY (30,3); "READLN (TIMESSIN); "WRITELN ('INPUT C :'); "GOTOXY (30,4); "READLN (TIMESANGLE); "IF (NPTS > MAXPOINTS) THEN NPTS := MAXPOINTS - 2;  END;    PROCEDURE PARAMETERS;   BEGIN "QSTART := 0; "QEND := 360; "QPROGRAM POLORGRAPH;   USES TURTLEGRAPHICS,TRANSCEND;   CONST RADIAN = 57.2957795;  A = 95;  MAXPOINTS = 2002;   VAR QSTART, QEND, QDELTA,  TIMESSIN, TIMESANGLE, $NPTS, R : REAL; $K, INTERVALNPTS : INTEGER; $X : ARRAY[0 := SQRT (RSQR); *)  END;    PROCEDURE PLOT (INTERVAL : INTEGER);   VAR I, KMINUS1 : INTEGER;  STRG, ASTR, B, C,STRNPTS : STRING;   BEGIN "INITTURTLE; "PENCOLOR (NONE); "MOVETO (X[0],Y[0]); "PENCOLOR (WHITE); "KMINUS1 := K - 1; "I :LAR HYPERBOLA A = 15 *) $(* RSQR := SQR (A)/COS (2 * ANGLE); *) $(* IF (RSQR < 0) THEN RSQR := -RSQR; *) $(* R := SQRT (RSQR); *) $(* RSQR := SQR (A) * COS (2 * ANGLE); *) $(* IF (RSQR < 0) THEN RSQR := -RSQR; *) $(* R$(* ELLIPSE A = 85 *) $(* R := A * (1 + ((1/2) * COS (ANGLE))); *) $(* LIMACON A =105 *) $(* R := A * ((1/2) + COS (ANGLE)) *); $(* ARCHIMEDEAN SPRIAL ? *) $(* R := (A * ANGLE)/100; *) $(* RECTANGUSSIN * SIN (TIMESANGLE * ANGLE)); $X[K] := ROUND(R * COS (ANGLE)) +139; $Y[K] := ROUND(R * SIN (ANGLE)) + 95; $ANGLE := ANGLE + QDELTA; $K := K + 1; "UNTIL (K >= (NPTS + 1)) $(* CARDIOID A = 73 0) $(* R := A * (1 + COS (ANGLE)); *) RE PARAMETERS;   BEGIN "QSTART := 0; "QEND := 360; "QDELTA := (QEND - QSTART)/NPTS;  END;   PROCEDURE FUNCT;   VAR RSQR, ANGLE : REAL;   BEGIN "QDELTA := QDELTA/RADIAN; "ANGLE := QSTART/RADIAN; "K := 0; "REPEAT $R := A * COS (TIMEDLN (NPTS);  WRITELN ('INPUT B :'); "GOTOXY (30,3); "READLN (TIMESSIN); "WRITELN ('INPUT C :'); "GOTOXY (30,4); "READLN (TIMESANGLE); "IF (NPTS > MAXPOINTS) THEN NPTS := MAXPOINTS - 2;  END;    PROCEDU"WRITELN('R = A * (B * SIN (C * ANGLE)); '); "FOR BLANKLINES := 1 TO 10 DO " WRITELN(' '); "GOTOXY (0,0); "WRITELN; "WRITELN; "WRITELN ('INPUT INTERATIONS(0 TO QUIT):'); "GOTOXY (30,2); "REALENGTH > 0) $THEN &STG := CONCAT (INTEGERSTRING, '.', DECIMALSTRING) $ELSE &STG := INTEGERSTRING; "END; (* FIXSTRING *)   PROCEDURE READIN;   VAR BLANKLINES : INTEGER;    BEGIN "GOTOXY (0,0); ; "DECIMALSTRING := ''; "I := 1; "WHILE ((TESTSTRING [I] <> '0') AND (I <= (TESTLENGTH - 1))) DO &BEGIN (DECIMALSTRING := CONCAT (DECIMALSTRING, COPY (TESTSTRING, I, 1)); (I := SUCC (I); &END; "DECIMALLENGTH := LENGTH (DECIMALSTRING); "IF (DECIMAL DECIMALSTRING, TESTSTRING : STRING; $  BEGIN "INTEGERVALUE := TRUNC (NUMBER); "DECIMALVALUE := ROUND ((NUMBER - INTEGERVALUE ) * DECIMALPLACES); "STR (INTEGERVALUE, INTEGERSTRING); "STR (DECIMALVALUE, TESTSTRING); "TESTLENGTH := LENGTH (TESTSTRING)"PENCOLOR(NONE); MOVETO(L+3,B+2); "CHARTYPE(6); "WSTRING(S);  END;   PROCEDURE FIXSTRING (NUMBER : REAL; VAR STG : STRING);   CONST DECIMALPLACES = 100;   VAR INTEGERVALUE, DECIMALVALUE, DECIMALLENGTH, TESTLENGTH, I : INTEGER; $INTEGERSTRING,2+7*LENGTH(S); "B:=Y-2; T:=Y+10; "(* VIEWPORT(L,R,B,T) *); "(* FILLSCREEN(BLACK) *); "VIEWPORT(0,279,0,191);  PENCOLOR(NONE); MOVETO(L,B); "PENCOLOR(WHITE); MOVETO(L,T); "MOVETO(R,T); MOVETO(R,B); MOVETO(L,B); ****************************)  (* *)  (* WRITE A STRING IN ERASED BOX *)  (* *)  (********************************)  VAR L,R,B,T: INTEGER;  BEGIN "PENCOLOR(NONE); MOVETO(X,Y); "L:=X-3; R:=X+..MAXPOINTS] OF INTEGER; $Y : ARRAY[0..MAXPOINTS] OF INTEGER;   FUNCTION POWER (X, Y : REAL) : REAL;   VAR Z : REAL;   BEGIN "Z := EXP (Y * LN (X));  POWER := Z;  END; (* POWER *)   PROCEDURE BOXSTRING(X,Y: INTEGER; S: STRING);  (****= INTERVAL; "WHILE (I <= KMINUS1) DO $BEGIN " MOVETO (X[I],Y[I]);  I := I + INTERVAL; $END; "READLN; "FIXSTRING (NPTS, STRNPTS); "STRG := CONCAT ('NPTS=',STRNPTS); "BOXSTRING (0,169,STRG); "FIXSTRING (INTERVAL, STRNPTS); "STRG := CONCAT ('INTERVAL=',STRNPTS); "BOXSTRING (0,181,STRG); "FIXSTRING (TIMESSIN, B); "FIXSTRING (TIMESANGLE, C); "FIXSTRING (A, ASTR); "STRG := CONCAT ('R = ',ASTR,' * COS (',B,' * SIN (',C,' * ANGLE))'); "BOXSTRING (0,0,STRG)  END;    BENTEGERSTRING, DECIMALSTRING, TESTSTRING : STRING; $  BEGIN "INTEGERVALUE := TRUNC (NUMBER); "DECIMALVALUE := ROUND ((NUMBER - INTEGERVALUE ) * DECIMALPLACES); "STR (INTEGERVALUE, INTEGERSTRING); "STR (DECIMALVALUE, TESTSTRING); "TESTLENGTH := LENGTHMOVETO(L,B); "PENCOLOR(NONE); MOVETO(L+3,B+2); "CHARTYPE(6); "WSTRING(S);  END;   PROCEDURE FIXSTRING (NUMBER : REAL; VAR STG : STRING);   CONST DECIMALPLACES = 100;   VAR INTEGERVALUE, DECIMALVALUE, DECIMALLENGTH, TESTLENGTH, I : INTEGER; $I"PENCOLOR(NONE); MOVETO(X,Y); "L:=X-3; R:=X+2+7*LENGTH(S); "B:=Y-2; T:=Y+10; "(* VIEWPORT(L,R,B,T) *); "(* FILLSCREEN(BLACK) *); "VIEWPORT(0,279,0,191);  PENCOLOR(NONE); MOVETO(L,B); "PENCOLOR(WHITE); MOVETO(L,T); "MOVETO(R,T); MOVETO(R,B); (X,Y: INTEGER; S: STRING);  (********************************)  (* *)  (* WRITE A STRING IN ERASED BOX *)  (* *)  (********************************)  VAR L,R,B,T: INTEGER;  BEGIN IVE := TRUE; &END $ELSE &XNEGATIVE := FALSE; "IF (X <> 0) $THEN $ Z := EXP (Y * LN (X)) $ELSE &Z := 0;  IF (XNEGATIVE) $THEN &BEGIN (IF (ODD (ROUND (Y))) *THEN ,Z := -Z; $END; "POWER := Z;  END; (* POWER *)   PROCEDURE BOXSTRING : INTEGER; $XFUN, YFUN :STRING; $X : ARRAY[0..MAXPOINTS] OF INTEGER; $Y : ARRAY[0..MAXPOINTS] OF INTEGER;   FUNCTION POWER (X, Y : REAL) : REAL;   VAR Z : REAL;  XNEGATIVE : BOOLEAN;   BEGIN "IF (X < 0) $THEN &BEGIN (X := -X; (XNEGATPROGRAM POLORGRAPH;   USES TURTLEGRAPHICS,TRANSCEND;   CONST RADIAN = 57.2957795;  XCENTER = 139; &YCENTER = 95;  MAXPOINTS = 2002;   VAR QSTART, QEND, QDELTA,  PANGLE, PDELTA, $A, B, $NPTS, R : REAL; $K, INTERVALNPTSN^F 7  READLN; " TEXTMODE;  END; (UNTIL (INTERVALNPTS = 0); &END; "UNTIL (NPTS = 0);  END.  GIN (* MAIN *) "REPEAT " READIN; " IF (NPTS <> 0) THEN $ BEGIN " PARAMETERS; " FUNCT; (REPEAT ( WRITELN (' INTERVAL OF NPTS'); ( READLN (INTERVALNPTS); ( IF (INTERVALNPTS <> 0) THEN * BEGIN * PLOT (INTERVALNPTS); " (TESTSTRING); "DECIMALSTRING := ''; "I := 1; "WHILE ((TESTSTRING [I] <> '0') AND (I <= (TESTLENGTH - 1))) DO &BEGIN (DECIMALSTRING := CONCAT (DECIMALSTRING, COPY (TESTSTRING, I, 1)); (I := SUCC (I); &END; "DECIMALLENGTH := LENGTH (DECIMALSTRING); "IF (DECIMALLENGTH > 0) $THEN &STG := CONCAT (INTEGERSTRING, '.', DECIMALSTRING) $ELSE &STG := INTEGERSTRING; "END; (* FIXSTRING *)   PROCEDURE READIN;   VAR BLANKLINES : INTEGER;    BEGIN "G" TEXTMODE;  END; (UNTIL (B = 0); &END; "UNTIL (NPTS = 0);  END.  0,7); *WRITELN (' '); *GOTOXY (0,7); *WRITELN ('NUMBER OF FIGURES:'); ( GOTOXY (19,7); *READLN (B); ( IF (B <> 0) THEN * BEGIN " PARAMETERS; * PLOT (1); " READLN; TRG := YFUN; "BOXSTRING (3,2,STRG);   END;    BEGIN (* MAIN *) "XFUN := 'X = A * COS ** 3 (Q)'; "YFUN := 'Y = A * SIN ** 3 (Q)'; "B := 0; "REPEAT " READIN; $PARAMETERS; $IF (NPTS <> 0) THEN $ BEGIN " FUNCT; (REPEAT ( GOTOXY (STRING); "STRG := CONCAT ('A=',ASTRING); "BOXSTRING (3, 27,STRG); " (* "B" *) "FIXSTRING (B, BSTRING); "STRG := CONCAT ('B=',BSTRING); "BOXSTRING (3,157,STRG); " (* "X" *) "STRG := XFUN; "BOXSTRING (3,14,STRG);  (* "Y" *) "S"FIXSTRING (NPTS, STRNPTS); "STRG := CONCAT ('NPTS=',STRNPTS); "BOXSTRING (3,169,STRG); (* "INTERVAL" *) "FIXSTRING (INTERVALNPTS, STRNPTS); "STRG := CONCAT ('INTERVAL=',STRNPTS); "BOXSTRING (3,181,STRG); (* "A" *) "FIXSTRING (A, A *RY := Y[I] * COS (PANGLE) - X[I] * SIN (PANGLE); *PX := ROUND(RX + XCENTER); *PY := ROUND(RY + YCENTER); *MOVETO (PX, PY);  I := I + INTERVAL; $ END; " PANGLE := PANGLE + PDELTA; $END; "READLN; " (* "NPTS" *) * SIN (PANGLE); &PX := ROUND(RX + XCENTER); &PY := ROUND(RY + YCENTER); &MOVETO (PX, PY); " PENCOLOR (WHITE); " KMINUS1 := K - 1; " I := INTERVAL; " WHILE (I <= KMINUS1) DO $ BEGIN *RX := X[I] * COS (PANGLE) + Y[I] * SIN (PANGLE); ASTR, BSTRING, ASTRING, STRNPTS : STRING;   BEGIN "BINTEGER := ROUND (B); "INITTURTLE; "PANGLE := 0; "FOR J := 1 TO BINTEGER DO $BEGIN " PENCOLOR (NONE); " RX := X[0] * COS (PANGLE) + Y[0] * SIN (PANGLE); &RY := Y[0] * COS (PANGLE) - X[0]$Y[K] := ROUND (A * POWER (SIN (ANGLE), 3)) ; $ANGLE := ANGLE + QDELTA; $K := K + 1; "UNTIL (K >= (NPTS + 1)) $END;    PROCEDURE PLOT (INTERVAL : INTEGER);   VAR I, J, BINTEGER, KMINUS1,  PX, PY : INTEGER; $RX, RY : REAL; $STRG, RYSTRG, 0) THEN " PDELTA := 90/B/RADIAN;  END;  PROCEDURE FUNCT;   VAR ANGLE : REAL;   BEGIN "QDELTA := QDELTA/RADIAN; "ANGLE := QSTART/RADIAN; "K := 0; "REPEAT $X[K] := ROUND (A * POWER (COS (ANGLE), 3)) ; D OF INTER CIRCLE):'); "GOTOXY (30,4); "READLN (A); "IF (NPTS > MAXPOINTS) THEN NPTS := MAXPOINTS - 2;  END;    PROCEDURE PARAMETERS;   BEGIN "QSTART := 0; "QEND := 360; "IF (NPTS <> 0) THEN " QDELTA := (QEND - QSTART)/NPTS;  IF (B <>OTOXY (0,0); "WRITELN(XFUN); "WRITELN(YFUN); "FOR BLANKLINES := 1 TO 14 DO " WRITELN(' '); "GOTOXY (0,3); "WRITELN ('INPUT INTERATIONS(0 TO QUIT):'); "GOTOXY (30,3); "READLN (NPTS);  WRITELN ('INPUT A(RAN^F 7 D OF INTER CIRCLE):'); "GOTOXY (30,4); "READLN (A); "IF (NPTS > MAXPOINTS) THEN NPTS := MAXPOINTS - 2;  END;    PROCEDURE PARAMETERS;   BEGIN "QSTART := 0; "QEND := 360; "IF (NPTS <> 0) THEN " QDELTA := (QEND - QSTART)/NPTS;  IF (B <>OTOXY (0,0); "WRITELN(XFUN); "WRITELN(YFUN); "FOR BLANKLINES := 1 TO 14 DO " WRITELN(' '); "GOTOXY (0,3); "WRITELN ('INPUT INTERATIONS(0 TO QUIT):'); "GOTOXY (30,3); "READLN (NPTS);  WRITELN ('INPUT A(RA"DECIMALLENGTH := LENGTH (DECIMALSTRING); "IF (DECIMALLENGTH > 0) $THEN &STG := CONCAT (INTEGERSTRING, '.', DECIMALSTRING) $ELSE &STG := INTEGERSTRING; "END; (* FIXSTRING *)   PROCEDURE READIN;   VAR BLANKLINES : INTEGER;    BEGIN "G (TESTSTRING); "DECIMALSTRING := ''; "I := 1; "WHILE ((TESTSTRING [I] <> '0') AND (I <= (TESTLENGTH - 1))) DO &BEGIN (DECIMALSTRING := CONCAT (DECIMALSTRING, COPY (TESTSTRING, I, 1)); (I := SUCC (I); &END; NTEGERSTRING, DECIMALSTRING, TESTSTRING : STRING; $  BEGIN "INTEGERVALUE := TRUNC (NUMBER); "DECIMALVALUE := ROUND ((NUMBER - INTEGERVALUE ) * DECIMALPLACES); "STR (INTEGERVALUE, INTEGERSTRING); "STR (DECIMALVALUE, TESTSTRING); "TESTLENGTH := LENGTHMOVETO(L,B); "PENCOLOR(NONE); MOVETO(L+3,B+2); "CHARTYPE(6); "WSTRING(S);  END;   PROCEDURE FIXSTRING (NUMBER : REAL; VAR STG : STRING);   CONST DECIMALPLACES = 100;   VAR INTEGERVALUE, DECIMALVALUE, DECIMALLENGTH, TESTLENGTH, I : INTEGER; $I"PENCOLOR(NONE); MOVETO(X,Y); "L:=X-3; R:=X+2+7*LENGTH(S); "B:=Y-2; T:=Y+10; "(* VIEWPORT(L,R,B,T) *); "(* FILLSCREEN(BLACK) *); "VIEWPORT(0,279,0,191);  PENCOLOR(NONE); MOVETO(L,B); "PENCOLOR(WHITE); MOVETO(L,T); "MOVETO(R,T); MOVETO(R,B); (X,Y: INTEGER; S: STRING);  (********************************)  (* *)  (* WRITE A STRING IN ERASED BOX *)  (* *)  (********************************)  VAR L,R,B,T: INTEGER;  BEGIN IVE := TRUE; &END $ELSE &XNEGATIVE := FALSE; "IF (X <> 0) $THEN $ Z := EXP (Y * LN (X)) $ELSE &Z := 0;  IF (XNEGATIVE) $THEN &BEGIN (IF (ODD (ROUND (Y))) *THEN ,Z := -Z; $END; "POWER := Z;  END; (* POWER *)   PROCEDURE BOXSTRING : INTEGER; $XFUN, YFUN :STRING; $X : ARRAY[0..MAXPOINTS] OF INTEGER; $Y : ARRAY[0..MAXPOINTS] OF INTEGER;   FUNCTION POWER (X, Y : REAL) : REAL;   VAR Z : REAL;  XNEGATIVE : BOOLEAN;   BEGIN "IF (X < 0) $THEN &BEGIN (X := -X; (XNEGATPROGRAM POLORGRAPH;   USES TURTLEGRAPHICS,TRANSCEND;   CONST RADIAN = 57.2957795;  XCENTER = 139; &YCENTER = 95;  MAXPOINTS = 2002;   VAR QSTART, QEND, QDELTA,  PANGLE, PDELTA, $A, B, $NPTS, R : REAL; $K, INTERVALNPTS 0) THEN " PDELTA := 90/B/RADIAN;  END;  PROCEDURE FUNCT;   VAR ANGLE : REAL;   BEGIN "XFUN := 'X = 2A COS Q + A COS (2A)'; "YFUN := 'Y = 2A SIN Q - A SIN (2A)'; "QDELTA := QDELTA/RADIAN; "ANGLE := QSTART/RADIAN; "K := 0; "REPEAT $X[K] := ROUND (2*A*COS (ANGLE) + A* COS (2*ANGLE)); $Y[K] := ROUND (2*A*SIN (ANGLE) - A* SIN (2*ANGLE)); $ANGLE := ANGLE + QDELTA; $K := K + 1; "UNTIL (K >= (NPTS + 1)) $END;    PROCEDURE PLOT (INTERVAL : INTEGER);   VAR I, J, BINTEGER, KMINN^U U " TEXTMODE;  END; (UNTIL (B = 0); &END; "UNTIL (NPTS = 0);  END.  (0,7); *WRITELN (' '); *GOTOXY (0,7); *WRITELN ('NUMBER OF FIGURES:'); ( GOTOXY (19,7); *READLN (B); ( IF (B <> 0) THEN * BEGIN " PARAMETERS; * PLOT (1); " READLN; *) "STRG := XFUN; "BOXSTRING (3,14,STRG);  (* "Y" *) "STRG := YFUN; "BOXSTRING (3,2,STRG);   END;    BEGIN (* MAIN *) "B := 0; "REPEAT " READIN; $PARAMETERS; $IF (NPTS <> 0) THEN $ BEGIN " FUNCT; (REPEAT ( GOTOXYRNPTS); "BOXSTRING (3,181,STRG); (* "A" *) "FIXSTRING (A, ASTRING); "STRG := CONCAT ('A=',ASTRING); "BOXSTRING (3, 27,STRG); " (* "B" *) "FIXSTRING (B, BSTRING); "STRG := CONCAT ('B=',BSTRING); "BOXSTRING (3,157,STRG); " (* "X"" PANGLE := PANGLE + PDELTA; $END; "READLN; " (* "NPTS" *) "FIXSTRING (NPTS, STRNPTS); "STRG := CONCAT ('NPTS=',STRNPTS); "BOXSTRING (3,169,STRG); (* "INTERVAL" *) "FIXSTRING (INTERVALNPTS, STRNPTS); "STRG := CONCAT ('INTERVAL=',ST$ BEGIN *RX := X[I] * COS (PANGLE) + Y[I] * SIN (PANGLE); *RY := Y[I] * COS (PANGLE) - X[I] * SIN (PANGLE); *PX := ROUND(RX + XCENTER); *PY := ROUND(RY + YCENTER); *MOVETO (PX, PY);  I := I + INTERVAL; $ END; LE) + Y[0] * SIN (PANGLE); &RY := Y[0] * COS (PANGLE) - X[0] * SIN (PANGLE); &PX := ROUND(RX + XCENTER); &PY := ROUND(RY + YCENTER); &MOVETO (PX, PY); " PENCOLOR (WHITE); " KMINUS1 := K - 1; " I := INTERVAL; " WHILE (I <= KMINUS1) DO US1,  PX, PY : INTEGER; $RX, RY : REAL; $STRG, RYSTRG, ASTR, BSTRING, ASTRING, STRNPTS : STRING;   BEGIN "BINTEGER := ROUND (B); "INITTURTLE; "PANGLE := 0; "FOR J := 1 TO BINTEGER DO $BEGIN " PENCOLOR (NONE); " RX := X[0] * COS (PANGPROGRAM FLOWER;  (*====================================*)  (* *)  (* PROBLEM SOLVING USING PASCAL *)  (* PAGE 171 *)  (* MOD FOR APPLE ][ BY R.L. PENNELL *)  (* SAN DIEGO APPLE CORM MOD 18 - 8);  END;   PROCEDURE INITIALIZE;  VAR "X:INTEGER; "CH:CHAR;  BEGIN "RANDOMIZE; "FOR X:=1 TO 150 DO $WITH LINES[X] DO &BEGIN (X1:=0;X2:=0;Y1:=0;Y2:=0; (LCOLOR:=BLACK; &END; "MUSIC:=FALSE; "COLOR:=FALSE; "WRITELN('KINETIC ART.LOR:BOOLEAN; "ONE,TWO:COUNTER; "NL:LINE; "AT,NUMLINES:INTEGER; "CLOR:SCREENCOLOR; "LINES:ARRAY[1..150] OF LINE; "CH:CHAR; "  PROCEDURE GETNEWCOUNT(VAR C:COUNTER);  BEGIN "C.COUNT:=5*(RANDOM MOD 10 + 1); "C.DX:=(RANDOM MOD 18 - 8); "C.DY:=(RANDO PROGRAM ART;  USES TURTLEGRAPHICS,APPLESTUFF;  CONST "C=13;  TYPE "COUNTER=RECORD ,COUNT:INTEGER; ,DX:INTEGER; ,DY:INTEGER; *END; "LINE=RECORD )X1:INTEGER; )X2:INTEGER; )Y1:INTEGER; )Y2:INTEGER; )LCOLOR:SCREENCOLOR; 'END;  VAR "MUSIC,CON^Іўтў$BLOSSOM; "END. 0 TO 4 DO #BEGIN # $PENCOLOR(WHITE); $MOVE(5*SCALE); $PEDAL(2); $MOVE(-5*SCALE); $TURN(72); #END; "END (*BLOSSOM*); " "BEGIN (*MAIN PROGRAM*) $INITTURTLE; $SCALE:=4; $PENCOLOR(WHITE); $MOVETO(140,-20*SCALE); $MOVETO(140,95); $TURN(90); R; % %BEGIN 'PENCOLOR(WHITE); 'FOR I:=1 TO 10 DO 'BEGIN )MOVE(SIZE*SCALE); )TURN(9); 'END; )PENCOLOR(NONE); %END (*ARC*); '  BEGIN (*PEDEL*) $TURN(-45); $ARC; $TURN(90); $ARC; $TURN(135); "END (*PEDEL*); " "BEGIN (*BLOSSOM*) $FOR I:=E *)  (* *)  (*====================================*)  USES TURTLEGRAPHICS;  VAR SCALE:INTEGER;   PROCEDURE BLOSSOM;  VAR I:INTEGER;  "PROCEDURE PEDAL(SIZE:INTEGER); %PROCEDURE ARC; %VAR I:INTEGE..TERRY PUNDIAK'); "WRITELN(' (SEE NOV.80 BYTE P62 FOR THEORY'); "WRITELN('DO YOU WANT SOUNDS?'); "READ(CH); "IF CH = 'Y' THEN MUSIC:=TRUE; "WRITELN(' DO YOU WANT COLOR?'); "READ(CH); "IF CH = 'Y' THEN COLOR:=TRUE; "REPEAT $WRITELN('TYPE NUMBER (1..150) TO DISPLAY AT ONETIME'); $WRITELN('(SUGGESTION: USE 75)'); $READ(NUMLINES); "UNTIL (NUMLINES > 0) AND (NUMLINES < 151); "WRITELN('TYPE TO START TO QUIT'); "READ(CH); "WITH NL DO $BEGIN &LCOLOR:=WHITE; ШН Ћ‚ЏљШўНЋ•љШўНЋ•љ­0НМЗ–МШЪИЎ,ҐШЗ–€•¤МЫљЫўљЫўљЫўљЫўљШ‚М№ц««¶¦KINETIC ART...TERRY PUNDIAKЧНћ¶Нћ¶Ч¦ (SEE NOV.80 BYTE P62 FOR THEORYНћ¶Нћ¶Ч¦DO YOU WANT SOUNDS?Нћ¶НћBpЋART &REMOVELINE(LINES[AT]); $UNTIL KEYPRESS; $READ(CH); " TEXTMODE; "UNTIL CH='Q';  END. " n  END;   BEGIN(*MAIN*); "REPEAT $INITIALIZE; $REPEAT &GETNEWLINE; &IF MUSIC THEN NOTE(NL.Y1 DIV 4,4); &DRAWLINE; &IF MUSIC THEN NOTE(NL.Y2 DIV 4,8); &LINES[AT]:=NL; &IF AT=NUMLINES THEN (BEGIN *AT:=1; (END &ELSE AT:=AT+1; URE REMOVELINE(L:LINE);  BEGIN "PENCOLOR(NONE); "MOVETO(L.X1,L.Y1); "CASE L.LCOLOR OF " WHITE1,GREEN,VIOLET:PENCOLOR(BLACK1); +RADAR,WHITE2,REVERSE,ORANGE,BLUE:PENCOLOR(BLACK2); +WHITE,BLACK,NONE:PENCOLOR(BLACK); (END; "MOVETO(L.X2,L.Y2);>191) THEN BOUNCE(382,N,TWO.DY); "NL.Y2:=N; "ONE.COUNT:=ONE.COUNT-1; "TWO.COUNT:=TWO.COUNT-1;  END;   PROCEDURE DRAWLINE;  BEGIN "WITH NL DO $BEGIN &PENCOLOR(NONE); &MOVETO(X1,Y1); &PENCOLOR(LCOLOR); &MOVETO(X2,Y2); $END;  END; $  PROCED"IF (N<0) OR (N>279) THEN BOUNCE(558,N,ONE.DX); "NL.X1:=N; "N:=NL.Y1+ONE.DY; "IF (N<0) OR (N>191) THEN BOUNCE(382,N,ONE.DY); "NL.Y1:=N; "N:=NL.X2+TWO.DX; "IF (N<0) OR (N>279) THEN BOUNCE(558,N,TWO.DX); "NL.X2:=N; "N:=NL.Y2+TWO.DY; "IF (N<0) OR (N= LIM-N;  END;    PROCEDURE GETNEWLINE;  VAR !N:INTEGER; !  BEGIN "IF ONE.COUNT=0 THEN $BEGIN &GETNEWCOUNT(ONE); $ IF COLOR THEN NEWCOLOR(NL.LCOLOR); $END; "IF TWO.COUNT=0 THEN $GETNEWCOUNT(TWO);  N:=NL.X1+ONE.DX; BEGIN  CT:=RANDOM MOD 5; "CASE CT OF &0: C:=WHITE; &1: C:=BLUE; &2: C:=ORANGE; &3: C:=VIOLET; &4: C:=GREEN; $END;  END;    PROCEDURE BOUNCE(LIM:INTEGER;VAR N,D:INTEGER);  BEGIN "NOTE(NL.Y1 DIV 4,1); "D:=-D; "IF N<0 THEN N:=-N "ELSE N:&X1:=RANDOM MOD 279+1; &X2:=RANDOM MOD 279+1; &Y1:=RANDOM MOD 191+1; &Y2:=RANDOM MOD 191+1; $END; "GETNEWCOUNT(ONE); "GETNEWCOUNT(TWO); "CLOR:=WHITE; "AT:=1; "INITTURTLE;  END;    PROCEDURE NEWCOLOR(VAR C:SCREENCOLOR);  VAR "CT:INTEGER; ¶ЖНћЩYГЎ«¶¦ DO YOU WANT COLOR?ЧНћ¶Нћ¶ЖНћЩYГЎ«¶Ч¦*TYPE NUMBER (1..150) TO DISPLAY AT ONETIMEНћ¶Нћ¶Ч¦(SUGGESTION: USE 75)Нћ¶Нћ¶ҐН ћчЕчЗ—Й„Ўф¶¦#TYPE TO START TO QUITЧНћ¶Нћ¶ЖНћ«НЗЋ‚« НЗЋ‚« НЗїЋ‚« НЗїЋ‚«ҐПҐП««Н­ *НЋМЩ№Шљ№%Ш љ№ Ш љ№Шљ№Шљ№¬№ ­>ф†НШШш‘љЩшЙЎЩЩш‘љ№ЩЪЩш•љ­(пГЎ ҐПкЎҐПмГЎҐПтр‚МШЙШЗЕЌЎ З.ЖҐ ; (* angle of y-axis w.r.t x-axis *) & &y:=ymin; & &FOR iy:=1 to ny DO (*go thru each y-slice. *) & (BEGIN * *yh:=trunc( scale(y,ymin,ymax,140)*cos(th) ); *yv:=trunc( scale(y,ymin,ymax,140)*sin(th) ); *x:=xmin; * *FOR ix:=1 to nx DO (* evaluatey,dx,dy,th:real; &h,v,v0,h0, yh,yv:integer;  $BEGIN $ &nx:=45; ny:=30; (* # of points on grid to evaluate function. *) & &dx:=(xmax-xmin)/nx; &dy:=(ymax-ymin)/ny; & &FOR i:=0 to 279 DO (begin vmax[i]:=0; vmin[i]:=255 end; & &th:=45*0.0174533"(* The transformations between the plotting coords $(x,y,z) and the screen coords (h,v) are defined in $eqns.(1) & (2) below. *) " $VAR &nx,ny, ix,iy,i,imin,imax : integer; &Vmin,Vmax,Varray : array [0..279] of 0..255; (*max V for each H*) &x, "Function SCALE( x,xmin,xmax:real; plotsize:integer ):integer; " "(*scale graph coords to plotter (crt) coord.*) " $begin &scale:=round( plotsize*(x-xmin)/(xmax-xmin) ); $end;    "Procedure PLOT2D; " "(* 2D Plotting *) integer; $color:screencolor; $x:real; $inst:char; $ " "Function FUNC( x,y: real ) : real; " "(*user defined function to be plotted. "also, user should set xmin..zmax above *) " $begin &func:=-2*x*exp(-x*x-y*y); (*deriv of Gaussian*) $end;  ) 1408 280-7554 (home) h h*)   (*plot 2-d function on crt dc800920*)   uses TRANSCEND, TURTLEGRAPHICS;  "CONST (*plotting coord limits for Func below.*) " xmin=-3.0; xmax=3.0; $ymin=-3.0; ymax=3.0; $zmin=-0.5; zmax=0.8;   VAR $i:(* $L Printer: *)   program TwoDPlot;    h(*  Contributed to SF Apple Core Pascal DOM by  David Cheng (no disclaimers!! I am only a beginner Pascal hacker!)  I welcome all communications and suggestions!  my phone #'s are 415 494-4240 (workN^IЎJ ПШ« фс‚МШЙШЗїЕЌЎ З~ЖҐ ПШ« ун‚МШЙШЗЕЌЎ З.ЖҐПШ« хо‚МШЙШЗїЕЌЎ З~ЖҐПШ«п•«м•«­њНтфНцНухН­ЖШЁНЩЫНЭ№Н№- Н№'Н№!¬ №  %')')+ЪЬН­ R№xННООлЎф†НОлЎх†НҐ©З–€•¤Ґ Ё©чГЎ«№©‚«Ґ©З–€•¤ОНЎц¶ҐѓНћН©ѓQГЎфћћћ№ ћћћ№тБ†‚‚ю#”љтґв&V ­>ф†НШШш‘љЩшЙЎЩЩш‘љ№ЩЪЩш•љ­(пГЎ ҐПкЎҐПмГЎҐПтр‚МШЙШЗЕЌЎ З.ЖҐ ПШ« фс‚МШЙШЗїЕЌЎ З~ЖҐ ПШ« ун‚МШЙШЗЕЌЎ З.ЖҐПШ« хо‚МШЙШЗїЕЌЎ З~ЖҐПШ«п•«м•«­њНтфНцНухН­ЖШЁНЩЫНЭ№Н№- Н№'Н№!¬ №  %')')+ЪЬН­ R№xННООлЎф†НОлЎх func at discrete >x, for each y-slice. *) * ,BEGIN .h:=scale(x,xmin,xmax,180)+yh; (* eqn(1) *) .if h<0 then h:=0 else if h>279 then h:=279; .v:=yv+scale(func(x,y),zmin,zmax,130); (* eqn(2) *) .if v<0 then v:=0 else if v>255 then v:=255; .x:=x+dx; . .if ix<>1 then (* interpolate for all acreen points. *) 0repeat 2i:=i+1; 2Varray[i]:=v0+((i-h0)*(v-v0)) div (h-h0); 0until i=h 0 .else 0begin 0 2i:=h;imin:=h; 2Varray[imin]:=v; 0end; . .h0:=h; v0:=v; 0 $ END;(*for ix*) Ч¦hiteНћ¶Нћ«№4¬ѓBW№,_ †ґ "$&(kOНО«Зи«кпИЎҐҐјЉђЉ‡Ѕк‚«№т¶НћН «Зи«кпИЎҐҐјЉђЉ‡Ѕк‚«№р¶НћН НЗЊЗґНЧ¦type to exit.Н¶НћНћћћћ№ћћНћћ¤Кѓ^Зя€љЬГЎНКѓ_Кѓ^НЬ‚М№оЖѓVЖѓVјЖѓRјѓЅЫ‚М№к­WЫлсV№Вь№о«¶Ч¦Color(O,G,B,V,W): Нћ¶ҐНћо№ц¶¦rangeЧНћ¶Нћ «№ф¶¦reenЧНћ¶Нћ«№ф¶Ч¦lueНћ¶Нћ «№o¶Ч¦ioletНћ¶Нћ «№Q¶€¤Кѓ]ЪКѓ\•Кѓ^Кѓ]•ЏКѓ_Кѓ\•†‚Зя€љЪКѓ_ГЎф№Кѓ_МКѓ_МЖЩЗ€¤Кѓ^Зя€љКѓ_Мѓ\Кѓ^Мѓ]Ь‚М№тЪММШЩ•‚МѓaЬКѓaИЎмЬЩ‚•Мѓ_ЖКѓ_З€¤шМѓ^лНКѓ^ЖЃ Кѓ_З€¤шЙКѓ^Ж‚8Кѓ_З€¤шЕ„ЎНКѓ^ЖЃ Кѓ_З€¤шЕЎЖЃ Кѓ_З€¤Кѓ^Зя€љКѓ^Ж‚8Кѓ_З€¤шЙЎЖ‚8Кѓ_З€ЗЊПЖѓPјН‰ђћМѓ[ЖѓVјіN@Аі@@ЗЊПЖѓPјН‰ђћМѓZЖѓXіG@АЅМЮМѓaЬКѓaИЎрЖѓXјіS@Аі@@ЗґПКѓ[‚Мѓ_Кѓ_ЙЎМѓ_№Кѓ_ЗЕЎЗМѓ_КѓZЖѓXјЖѓVјПіїіL?НМЗ‚П‚Мѓ^Кѓ^ЙЎМѓ^№Кѓ^ЗяЕЎЗяМѓ^ЖѓXЖѓXјЖѓTјѓЅЬЛЎ7Ъ‚МЖЪЗЖЖј‰ђЖјЖјђ’ЖјЖјђ–Нђ’Ѕ­ .ЪЖјЖј–‰ђЖјЖј–‡ћМ­"-ММЖѓTіђ@@і@А–ЮЉ‡ЅЖѓRі@@і@А–ЭЉ‡ЅМЗМѓ`ЪКѓ`ИЎ-ЖЃ ЪЗ€¤Зя€љЖ‚8ЪЗ€¤ЗяЗя€љЪ‚М№цЖѓP-і.Ћ<9ъ‰ђЅЖѓVі@АЅМЭМѓ`ЫКѓ`ИЎиЖѓVјі@Аі@@"0 *( TWODPLOT $write(chr(7)); $fillscreen(reverse); $ $(* msg on screen *) $pencolor(none); $moveto(140,180); $WString('type to exit.'); $readln; $ $textmode; " "end. $ &'W': begin writeln('hite' ); color:=white end; & $end; $ $InitTurtle; $ $Plot2D; $for i:=1 to 1000 do x:=x*2/2; (* 6-sec wait! *) $write(chr(7)); (* beep *) $fillscreen(reverse); (* reverse display polarity *) $ $for i:=1 to 1000 do x:=x*2/2;lor(O,G,B,V,W): ');Read(inst); $ $case inst of $ &'O': begin writeln('range'); color:=orange end; &'G': begin writeln('reen' ); color:=green end; &'B': begin writeln('lue' ); color:=blue end; &'V': begin writeln('iolet'); color:=orange end; vmin[h] then vmin[h]:=v; .if ix=1 then pencolor(none); .moveto(h,v); . ,END; (*for ix*) * *y:=y+dy; ( * ( (END; (* for iy *)   "END; (* PLOT2D *)    (* main program ********************)   "begin " $color:=white; $ $write('Co, ,imax:=i; 0 0  *FOR ix:=1 to (imax-imin+1) DO * (* plot one y-slice. *) ,BEGIN , .h:=ix+imin-1; .v:=Varray[h]; . .pencolor(color); .IF (vvmin[h]) then pencolor(none); . .IF v>vmax[h] then vmax[h]:=v; .IF v<Н№мБК®ЃіВш 5ВИКтѓVјЖѓRјѓЅЫ‚М№к­WЫлсV№Вь№о«¶Ч¦Color(O,G,B,V,W): Нћ¶ҐНћо№ц¶¦rangeЧНћ¶Нћ «№ф¶¦reenЧНћ¶Нћ«№ф¶Ч¦lueНћ¶Нћ «№o¶Ч¦ioletНћ¶Нћ «№Q¶N^IЎЪ  *FOR ix:=1 to (imax-imin+1) DO * (* plot one y-slice. *) ,BEGIN , .h:=ix+imin-1; .v:=Varray[h]; . .pencolor(color); .IF (vvmin[h]) then pencolor(none); . .IF v>vmax[h] then vmax[h]:=v; .IF v1 then (* interpolate for all acreen points. *) 0repeat 2i:=i+1; 2Varray[i]:=v0+((i-h0)*(v-v0)) div (h-h0); 0until i=h 0 .else 0begin 0 2i:=h;imin:=h; 2Varray[imin]:=v; 0end; . .h0:=h; v0:=v; 0 $ END;(*for ix*) , ,imax:=i; 0 0 >x, for each y-slice. *) * ,BEGIN .h:=scale(x,xmin,xmax,180)+yh; (* eqn(1) *) .if h<0 then h:=0 else if h>279 then h:=279; .v:=yv+scale(func(x,y),zmin,zmax,130); (* eqn(2) *) .if v<0 then v:=0 else if v>255 then v:=255; .x:=x+dx; . .if ixw.r.t x-axis *) & &y:=ymin; & &FOR iy:=1 to ny DO (*go thru each y-slice. *) & (BEGIN * *yh:=trunc( scale(y,ymin,ymax,140)*cos(th) ); *yv:=trunc( scale(y,ymin,ymax,140)*sin(th) ); *x:=xmin; * *FOR ix:=1 to nx DO (* evaluate func at discrete v,v0,h0, yh,yv:integer;  $BEGIN $ &nx:=45; ny:=30; (* # of points on grid to evaluate function. *) & &dx:=(xmax-xmin)/nx; &dy:=(ymax-ymin)/ny; & &FOR i:=0 to 279 DO (begin vmax[i]:=0; vmin[i]:=255 end; & &th:=45*0.0174533; (* angle of y-axis ons between the plotting coords $(x,y,z) and the screen coords (h,v) are defined in $eqns.(1) & (2) below. *) " $VAR &nx,ny, ix,iy,i,imin,imax : integer; &Vmin,Vmax,Varray : array [0..279] of 0..255; (*max V for each H*) &x,y,dx,dy,th:real; &h,"Function SCALE( x,xmin,xmax:real; plotsize:integer ):integer; " "(*scale graph coords to plotter (crt) coord.*) " $begin &scale:=round( plotsize*(x-xmin)/(xmax-xmin) ); $end;    "Procedure PLOT2D; " "(* 2D Plotting *) "(* The transformati $end; $*) $ $(* SINC FUNCTION *) $VAR Z:REAL; $BEGIN Z:=X*Y; &IF Z=0 THEN Z:=1 ELSE Z:=Z/ABS(Z); &Z:=Z*SQRT(X*X+Y*Y); &IF Z=0 THEN FUNC:=1 &ELSE FUNC:=SIN(Z)/Z; $END; $   $i:integer; $color:screencolor; $x:real; $inst:char; $ " "Function FUNC( x,y: real ) : real; " "(*user defined function to be plotted. "also, user should set xmin..zmax above *) " $(* $begin &func:=-2*x*exp(-x*x-y*y); ( *deriv of Gaussian* )) 1408 280-7554 (home) h h*)   (*plot 2-d function on crt dc800920*)   uses TRANSCEND, TURTLEGRAPHICS;  "CONST (*plotting coord limits for Func below.*) " xmin=-10.0; xmax=10.0; $ymin=-10.0; ymax=10.0; $zmin=-0.3; zmax=1.0;   VAR (* $L Printer: *)   program TwoDPlot;    h(*  Contributed to SF Apple Core Pascal DOM by  David Cheng (no disclaimers!! I am only a beginner Pascal hacker!)  I welcome all communications and suggestions!  my phone #'s are 415 494-4240 (work=v; .if ix=1 then pencolor(none); .moveto(h,v); . ,END; (*for ix*) * *y:=y+dy; ( * ( (END; (* for iy *)   "END; (* PLOT2D *)    (* main program ********************)   "begin " $color:=white; $ $write('Color(O,G,B,V,W): ');Read(inst); $ $case inst of $ &'O': begin writeln('range'); color:=orange end; &'G': begin writeln('reen' ); color:=green end; &'B': begin writeln('lue' ); color:=blue end; &'V': begin writeln('iolet'); color:=orangоооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо=x*2/2; $write(chr(7)); $fillscreen(reverse); $ $(* msg on screen *) $pencolor(none); $moveto(140,180); $WString('type to exit.'); $readln; $ $textmode; " "end. $ e end; &'W': begin writeln('hite' ); color:=white end; & $end; $ $InitTurtle; $ $Plot2D; $for i:=1 to 1000 do x:=x*2/2; (* 6-sec wait! *) $write(chr(7)); (* beep *) $fillscreen(reverse); (* reverse display polarity *) $ $for i:=1 to 1000 do x:оооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо