`L i=L\Ʃx ? N'i  ͭЅ?0ȱ Ѕ?iȱi lԠԠ͠ԠϠŠͮŠ SYSTEM.APPLE   L$JLјJ 8彐.mĿ"Š>?( X֮ˍL հ˩($8` Ґh Hǹxhx N`8Ύ߽0|ϩHhHh ӈ ө ө ӘVYԦΝYԮߝꪽԦ ө  Ͱ()I يJJJ(jǩF؅G(  7ֈ k( F G  Xj0 Ю $Ӱ8 xH ߩ`Ǚx kh kL~ѩ@(LYLWҭH͍h (ͥpi)ͥˤ˹HH(x rh(`~Ȍ``hhh )hJ¥jJJhhihhhJi֍hhha [U8ſƅh)x h H('eƍ8ƅи ĘHH`ߠ ߮ D.TEXT$gf BALANCED.CODE$g DISKIO.TEXT$g DISKIO.CODE$gEXTgESPIRODEMO.CODEg蠖 HILBERT.TEXT$gE HILBERT.CODE$g蠞 GRAFDEMO.TEXT$gE GRAFDEMO.CODE$gGRAFCHARS.CODEgGRAFCHARS.TEXTgf TREE.TEXTr=$gf TREE.CODEr=$g BALANCEsu LINEFEED.CODE$guySOROCGOTO.TEXTgӟy{SOROCGOTO.CODEg{|SOROC.MISCINFOgӞ|HAZELGOTO.TEXTgӟHAZELGOTO.CODEg蠂HAZEL.MISCINFOg3 CROSSREF.TEXT$gC CROSSREF.CODE$gSPIRODEMO.TAPPLE3 & SYSTEM.APPLE$g&*FORMATTER.CODEg*0FORMATTER.DATAg08 LIBRARY.CODE$g8A LIBMAP.CODE$gAb SETUP.CODE=$grbg BINDER.CODE$ggo CALC.CODEr=$g̝os LINEFEED.TEXT$g&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`+*xH&x'8*7Ixix&&  ') + &п x) ++`FG8`0($ p,&") (jJJ>L+ "?I>  N `  ` x V Nx .x- z `V0^*^*>` aI꽌ɪVɭ&Y&&Y& 꽌ɪ\8`& ө ө ө ӽ`Hh`Q꽌ɪɖν*Ͻ%ϙEΈ 꽌ɪ`8` Hh݌`  $(,048<@DHLPTX\`dhlptx|Հ؈䤨谴T}iU・~R콥S~8vw\vȥ]vv\w]V𽥃WlXx |ƄRSL{ȱȱńRRLSҠXx ~~~~LSҠXx P~Qȑ~LSҠXxX XY |0 L\Xx t|ut}|=0 8|8|}8||ȥ}|MHLHlLSH|8|}8z|~{|@|:~8|~(~8 ~8~Z[ 8~Z[LѠP~ ~i jik|Lhj ~|it}iu8ttXutY|i h0 L LllL=LC/ L ߰8L ߦt~ hI=+ L ߤt~I= ~ LȄHHL;hh tuLhhVtWu\z]{XiXYt8xtut8xtu8tTERFAC3LABEL MOD 'NOT &OF OR (PROCEDURPROGRAM !PACKED +REPEAT RECORD -SET *SEGMENT !SEPARATE6THEN TO TYPE UNIT 2UNTIL USES 1VAR WHILE WITH ))))?)`vߗ߸)))@#AND 'ARRAY ,BEGIN CASE CONST DIV 'DO DOWNTO END ELSE EXTERNAL5FOR FILE .FORWARD "FUNCTION GOTO IF IMPLEMEN4IN )INe ~a{8 ~ȱa {8 LT0:A[_ ҕ~L+݈qȱi~8A ݅ȹ݅ȱ~Ɔ4i Lȱ|ȱ}|ȩȥ}ȩLݠȑȑ~uHtH`,BMcބޥHH8(iPH ۠'(hH'O'OhhmhLۭJL80%`M8$LLLhhhhhhhhץHH` ܩȑآL ܥ8ؘ ܩ؈ȩؠ#hthuhhhheȱÈ jh`@ fנ f׭0`L` CLL۠LۥHH j ڥhhLۦ vې` ۤOȄ`H$)A[hIH80(hI`i(L8(hI`LۥJ) )i i`¥ĥ`` - 9HL r 9 MȽ`H 9٠L rH $h`   -y6=CLjO808 0PLڥ8 0 ۥ``) ` )? Lvۢ 8` GڅFڅl```LۥH ۠' `H 9٠ hlQ`) թ` 9 Ȣ`JJJJ ϱ` r,p 0*P$ ۤ b ۢ`H - 9٠L r׊H 9h ɢ`) 2 r׭0` r׹)` ( `) ' r׹J)?L I@L3؊  L3؎,QLxת,c*A[ Lע0H)@hILө Ъhhh(`N`hhhhhhHH)> ` Yܠ0* )` r׮ ؎`(54#ƊgƈЪ 6`י ֙QRTW = Э*0 LqŐ`8Hh`HHH*@^]U)j7 [ )L3~ lJf)jjAUIL3ة0 $ڐ> L׈ ϐ8 (ֹH 7֥ +ֹP 7 7)*Ȫ`FG8`0($ p,&"VU>)Q>jj``P@J I*I `\xDŽ XׅІ X?;78H<8H  8`Ί aՍxՍՍՍե>?Ռ8T8ՌWuՌvՠ ýI꽌ɪ꽌ɭ蠪ϮәVE]ӾV]H)]ӾV]ԙ)]ӾT]ԙ)]ӦΨ 8$hU>`ȅSϭ߅83IߐiżQHPH ~P~ȱP~~P꽥QLSҠ RhPhQLE RR8tSut\ȱt]X i RHLfRtȱRuVt tVuWRTȱRU⦆RXȱRYRRR콆SLSҠ8|}`|ȱ|L8||tȥ}|utetȱtet|8|}Ƅ`t et HHH> o>HBtCu\8t\]u]\Z][ 8\Z][Lѥ]H\HuHtHAH@H > ޽Р SYSTEM.PASCAL Insert boot disk with SYSTEM.PASCAL on it, then press RESET#usthL'hح/0 !"opqr)VV#$6| L+ "?I>  N `  ` x V Nx .x- z `V0^*^*>` aI꽌ɪVɭ&Y&&Y& 꽌ɪ\8`&`L i=L\Ʃx ? N'i  ͭЅ?0ȱ Ѕ?iȱi lԠԠ͠ԠϠŠͮŠ SYSTEM.APPLE   L$JFG8`0($ p,&"L=Y?&D&Y?&C? 꽌ɪ\8`&&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`+*xH&x'8*7Ixix&&  AB A') +B A&п Ax) ++`ʖ8'x0|&HhHh @ @ @ @VY@'&Y@xꪽ@' @ @ @ @ @`Hh` aI꽌ɪVɭ&? $? $?`HJ݌h Hh݌` @?Hh݌``  !"#$%&'()*+,-./0123456789:;<=>? @A @x @A - @x8`->0ݩ>ʥ ` H t>x$50xh$50xLAJJJJ`HHjf5 t>h $50x`80^݌Hh ? ?݌ $? $? $? ? ? ?EEHJh #? $HIHHHHhHH A? .?hHHHj .? ] H^HVP {>( F> =$0x8x @A- @# H8`L(B >k @@f0x> %> %>Hh @A#-8` BAD MEDIA, OR BAD DRIVE. SpPh>h?hhhhhBPhh AOhM=< =H*H?H>H`@QVTNMFEA@?642* xP66!NOW FORMATTING DISKETTE IN DRIVE  0B:2*"0 82 2,& צERROR: UNABLE TO FORMAT DISK. DISKETTE WRITE PROTECTED,  צ IS NOT ONLINE.  é ń ȄDESTROY DIRECTORY OF   : :ȡ   צ ? 99@@9966 LIBRARIA POԡá  Code write errorQ*\ 8 t & n &(*  ZצApple Pascal Librarian [1.1]PZצOutput code file -> P1P1*1צ*SYSTEM.LIBRARYP1á 11ԥ ȡ ר ֳCֳZצNotice? ȡk٤šYZצ Copy slot P ? ֳ ڡxֹ ֳ@@쥀&(*  ZצApple Pascal Librarian [1.1]P ա Թ9ԥ!ZIncompatible byte sexתP ԡZצMSlot # to link and , = for all, ? for select, N(ew file, Q(uit, A(bortPթ=á;ZצCopying all slots...Pȡ ڡ?á| ւ0ֳ  ˡRڤť4ڤÍ=ګZSlot to link into? תP = š>á#"Z Read error # תPˡ+ZצI/O error - no room on diskP~ؤ٤ؤˡؤ4٤ɥ4٤ō4٤4ؤ4٤TؤT٤4٤ !" d ZצPá ֳZתPڳ ٤á (ɡ(ZצNot enough room to copy slotPDؤD٤ˡ D٤  ȡˡ'ZצError reading slot P 򥀬ˡ ZצInterface read errorPˡق!k  ٤ ׷ ؤˡZWARNING - Slot תP + already linked. Please reconfirm (y/n) - š ۡ ZצInterface write errorP(ō ԶؕDɡIá%ˡ á áZInterface errorתP  ȡZצLink info read errorPF ˡ"ZCode file overflowתP    ԡZצ bad link infoPۓ3>`&ԡȡڡ  -ܢۤ ܢ ۤ ׷ '(ܢۤ )  ܢ ۤۤ ڡZצCode file length - P * á ˡ$٢B""ˡ""Zצ I/O error # P 6ZצLink code file -> PP*צ*SYSTEM.LIBRARYPš3"ˡ#Pצ.CODEUÍVٚ$ȡܾۤˡ&  BȡO٤ݢܢ`٤ܢ`٤ښܢp٤ܢ٤ܢ٤V dáZB4(C)Apple Computer Inc. 1979,1980 (C)U.C.Regents 1979ZצOutput code file -> P1P1*1צ*SYSTEM.LIBRARYP1á 11ԥ ȡ ר ֳCֳZצNotice? XLIBMAP YYXmap output file name: PׯצCONSOLE:P.á :ˡUVUVȡ3UUU UUצ.TEXTצ.TEXTÍצ.TEXTPnot a code filelist linker info table (Y/N)? ٳ-@@ٳZZolist referenced items (Y/N)? ٳ@@ٳrary name: ,P,צ +,*,*SYSTEM.LIBRARYתP,"ˡ.CODE,P,,ˡצbad file[VVȡ]ɥɍ,ō#!+צ, code type is +| + +צPre-II.1 segment+++צF----------------------------------------------------------------------K++  [צenter libáX 8G,pȡōˡ;+ Segment #+ +: +.+צ Segment #+ +: + ˡr+צSystem version = +\ + ++ + separate proc P #+ + global  public constant separate } unit q private bcá-+צ Private dataseg # = + +& Da[Z "߹ZM+ + global addr P #+ +צ, I #+ +Z6+ + public var base = + +Z5+ +צ constant value of + +Y5+ +צ external proc P # cáj+ separate procedure segment+<+ data segment+d`7b  :́ʁʁZ䍡 [<Ɓ́́ʁʁȡƁʁʁ́Ɓˡˡs + Pascal host outer block++צ Pascal segment+s +צ library unitcá'+ (UNLINKED INTRINSIC)+8cá%+ (LINKED INTRINSIC)++ste reference'+צ big reference W>% ˡ)+צ (+ +צ times)+ (once)++ 5+5ȡ , ++#h +# c+ completely linked segment+sō+ ++ áI ١%+library read error!+ ١آ~ تPY+ + P+צ word referenceB+ by |ȡ" - >ō  ˡ,+Interface read error+ |   4  á á  ٚ.ȡ$ˡ,  Tȡaݢܢ`ܢ`ښܢpܢܢhB+"á襁++ LIBRARY MAP FOR +,++š+ ++++fdz|2 ץ+W/צLibrary map utility II.1 [a2]ȡ!\unknownת\צII.1\צ3.0| Undefinedת| צP-Code (most sig. 1st)| צP-Code (least sig. 1st)| PDP-11ת| 8080ת| Z-80ת| GA 440ת| 6502ת| 6800תon system disk for nowN*SYSTEM.WRK.TEXT'N8 d&..TEXT&!Lost workfile! Y*..CODEPOld code removed, Text  and N*SYSTEM.WRK.CODE'N8 d..CODELost workfile! Code  file saved  ~=,on system disk for nowN*SYSTEM.WRK.TEXT'N8 d&..TEXT&!Lost workfile! Y*..CODEPOld code removed, Text  and N*SYSTEM.WRK.CODE'N8 d..CODELost workfile! Code  file saved  ~=,on system disk for nowN*SYSTEM.WRK.TEXT'N8 d&..TEXT&!Lost workfile! Y*..CODEPOld code removed, Text  and N*SYSTEM.WRK.CODE'N8 d..CODELost workfile! Code  file saved  ~=,on system disk for nowN*SYSTEM.WRK.TEXT'N8 d&..TEXT&!Lost workfile! Y*..CODEPOld code removed, Text  and N*SYSTEM.WRK.CODE'N8 d..CODELost workfile! Code  file saved  ~=,on system disk for nowN*SYSTEM.WRK.TEXT'N8 d&..TEXT&!Lost workfile! Y*..CODEPOld code removed, Text  and N*SYSTEM.WRK.CODE'N8 d..CODELost workfile! Code  file saved  ~=,on system disk for nowN*SYSTEM.WRK.TEXT'N8 d&..TEXT&!Lost workfile! Y*..CODEPOld code removed  ^  PASCALSYSETUP NUMBER2 NUMBER3 NUMBER4 NUMBER5 NUMBER6 NUMBER7 NUMBER8 NUMBER9 INITS TEACHSET | TI 9900תX X+S  &fF" ++++fdz|2 ץ+W/צLibrary map utility II.1 [a2]ȡ!\unknownת, Text  and N*SYSTEM.WRK.CODE'N8 d..CODELost workfile! Code  file saved  ~=,on system disk for nowN*SYSTEM.WRK.TEXT'N8 d&..TEXT&!Lost workfile! Y*..CODEPOld code removedتPR צ'IF YOU HAVE A VIDEO TERMINAL AND EXPECTצ&TO USE THE SCREEN ORIENTED EDITOR, THE%CHANGES SETUP CAN MAKE WILL BE NOT BE׮'SUFFICIENT. YOU WILL ALSO HAVE TO BIND׮(IN THE PROCEDURE ٤٤צ INITIALIZING  TE x^04 , GHT(צKEY TO END FILE)צ KEY FOR FLUSH)צ KEY FOR BREAK*צ KEY FOR STOP*NON-PRINTING CHARACTER+צKEY TO DELETE LINE,EDITOR "ESCAPE" KEY,LEAD-IN CHAR FROM KEYBOARD-צEDITOR "ACCEPT" KEY-צKEY TO DELETE CHARACTER+צVERTICAL MOVE DELAY"  /ڢתPڢ/ + +צ +צ L@æINITS ث /ȡSOR UP'KEY TO MOVE CURSOR DOWN'KEY TO MOVE CURSOR LEFT(KEY TO MOVE CURSOR RIGHT(צKEY TO END FILE)צ KEY FOR FLUSH)צ KEY FOR BREAK*צ KEY FOR STOP*NON-PRINTING CHARACTER+צKEY TO DELETE LINE,EDITOR "ESCAPE" KN HEIGHT%צ SCREEN WIDTH&LEAD-IN TO SCREENMOVE CURSOR HOMEצERASE TO END OF SCREEN ERASE TO END OF LINE צMOVE CURSOR RIGHT!צMOVE CURSOR UP! BACKSPACE" ERASE LINE#צ ERASE SCREEN#KEY TO MOVE CURKEY FOR BREAK]/PREFIXED[KEY FOR FLUSH]/PREFIXED[KEY TO END FILE]/ PREFIXED[EDITOR 'ESCAPE' KEY]/ PREFIXED[KEY TO DELETE LINE]/ צ!PREFIXED[KEY TO DELETE CHARACTER]/ צPREFIXED[EDITOR "ACCEPT" KEY]/ צ SCREE]$צ%PREFIXED[KEY FOR MOVING CURSOR RIGHT]/צ$PREFIXED[KEY FOR MOVING CURSOR LEFT]/"PREFIXED[KEY FOR MOVING CURSOR UP]/צ$PREFIXED[KEY FOR MOVING CURSOR DOWN]/ PREFIXED[NON-PRINTING CHARACTER]/צPREFIXED[KEY FOR STOP]/PREFIXED[PREFIXED[MOVE CURSOR UP]$צPREFIXED[MOVE CURSOR RIGHT]$צPREFIXED[ERASE TO END OF LINE]$ PREFIXED[ERASE TO END OF SCREEN]$צPREFIXED[MOVE CURSOR HOME]$PREFIXED[DELETE CHARACTER]$צPREFIXED[ERASE SCREEN]$PREFIXED[ERASE LINEW.PتP,+,---ٚ-P-,-V6TFTRUE׮FALSE׮ HAS CLOCK HAS 8510AHAS LOWER CASEצHAS RANDOM CURSOR ADDRESSINGHAS SLOW TERMINALSTUDENTFSצGSRSצUSSPتP+ +(++!T&ڪP. (á  WW--̀ƀצENTER ƀVƀ/̀ʀPʀʀٚʀؚʀʀʀʀW.تo צNULצSOHצSTXצETXצEOTצENQצACKצBELצBSHTצLFVTצFFCRצSOSIצDLEצDC1צDC2צDC3צDC4צNAKצSYNצETBצCANצEMSUBESC, Text  and N*SYSTEM.WRK.CODE'N8 d..CODELost workfile! Code  file saved  ~=, on system disk for nowN*SYSTEM.WRK.TEXT'N8 d&..TEXT&!Lost workfile! Y*..CODEPOld code removed, Text  and N*SYSTEM.WRK.CODE'N8 d..CODELost workfile! Code  file saved  ~=,GOTOXY IN THE OPERATING׮צ(SYSTEM. SEE SECTION 4.7 OF THE DOCUMENT.Eצ#NOTE: DISK UPDATES CREATE THE FILE:צ NEW.MISCINFOצ(ON YOUR DISK. THE NAME OF THIS FILE MUSTBE CHANGED USING THE FILER TO: ׮ SYSTEM.MISCINFO׮צ&IN ORDER FOR THE CHANGES YOU HAVE MADETO BE LOADED AT BOOTSTRAP TIME.׮T צ"ALL NON-PRINTING CHARACTERS EXCEPT&CARRIAGE RETURN (CR) WILL ECHO AS "?".׮צ&THE INPUT ABORT CHARACTER, "*", CAN BE(!צ&TYPED IN RESPONSERRENT SETUP ONצ$ DISK AS THE FILE "NEW.MISCINFO"צ! WHICH MUST BE CHANGED IN THE FILER TO "SYSTEM.MISCINFO"צ$M(EMORY) UPDATE CHANGES THE SETUP INצ! MEMORY UNTIL THE NEX ڂ6NƁ.`צ QUIT: D(ISK) OR M(EMORY) UPDATE,צ R(ETURN) H(ELP) E(XIT) *NEW.MISCINFO٥`_/_́ʁȡ__'D(ISK) UPDATE PUTS THE CU  ?P#QP꿹!ááE %T "ڪPP-תP---<. LتP  ˡ-ڕڕ   aA!áHڦתP /ۄ ><áצPצ<>/áQšHۓ<?IتPٓצ BUG LOCATION צ'PLEASE WRITE DOWN THIS LOCATION AND ANY&SUPPORTING DETAILS YOU CAN, AND REPORT$IT TO THE UCSD SUPPORT STAFF AT YOUREARLIEST CONVENIENCERBACKSPACE'צ(CHARACTER WILL BE ECHOED TO THE TERMINAL"WHEN THE 'KEY TO DELETE CHARACTER'׮צ IS TYPED.   .d< L d  OR THAT CHARACTER,׮&JUST TYPE IT IN (AND CR). BOOLEANS ARE׮צ!INPUT BY TYPING "TRUE" OR "FALSE"צ (AND CR). FOR MORE INFORMATION,$PLEASE SEE THE SYSTEM DOCUMENTATION.׮z צ"HINTS ON DEALING WITH BACKSPACING:'THE 'KEY TO DELETE CHARACTER' SHOULD BE׮(SET TO THE KEY YOU WISH TO TYPE TO CAUSE׮צA BACKSPACE. THE ' STARTS AS DECIMAL.$NON-PRINTING CHARACTERS MAY BE INPUT׮צ'BY TYPING THE KEY WHICH GENERATES THEIRצ&VALUE (FOLLOWED BY CR) OR, IF THERE IS%AN ASCII MNEMONIC FOR THAT CHARACTER,׮&JUST TYPE IT IN (AND CR). BOOLEANS ARE׮צ!INPUT BY TYPING "TRDING TO THE FORMAT:!->O-{OCTAL}-!׮צ! !'--DEFAULT----!----------->DIGIT--->(CR)׮"! ! ! ! ! !׮צ"!->H-{HEX}---! !->(-)-! !-DIGIT<-!! !׮צ!->D{DECIMAL}!Oצ$THE DEFAULT RADIXRE GIVEN IN OCTAL, DECIMAL OR'HEXADECIMAL RADIX, CHARACTERS ARE GIVEN׮&AS THEIR ASCII VALUE AS NUMBERS AND AS׮צ#THEIR ASCII MNEMONIC. BOOLEANS AREצ(EITHER TRUE OR FALSE. ENTER NUMBERS, OR(CHARACTERS AS THEIR ASCII NUMERIC VALUE,׮צACCORQF// CTER 84צ$WILL ECHO ON THE SCREEN THE SEQUENCECHARAQFCTER׮$AND WILL BE UNDERSTOOD AS THE STRING׮צ& "CHARACTER". WHEN YOU ACCESS A FIELD,$YOU WILL BE SHOWN ITS CURRENT VALUE.׮צ&NUMBERS AELETE YOUR RESPONSE( /צ%TO A QUESTION CHARACTER BY CHARACTER,צ(ECHOING EACH CHARACTER AS IT IS DELETED.%THE ECHOED DELETED CHARACTERS WILL BE׮(ENCLOSED IN ANGLE BRACKETS. FOR EXAMPLE,׮צ!TYPING THE SEQUENCE OF CHARACTERSCHARAצ%THE LINE DELETE CHARACTER, "*" ALLOWS(<(YOU TO DELETE A RESPONSE YOU GAVE IF YOU׮צ'HAVE NOT YET TYPED CR. CR WILL BE SENTצ'TO THE TERMINAL AND YOU WILL BE ABLE TOצ'START OVER ON A NEW LINE. THE BACKSPACEצ(CHARACTER, "*" WILL D TO MOST REQUESTS FOR"INPUT AND WILL ESCAPE YOU FROM THE׮צ(SEQUENCE WHICH ASKED THE QUESTION, E.G.,(WHEN CHANGING A VALUE, TYPING "*" TO THEת( !"PROMPT "NEW VALUE" WILL ESCAPE THE׮צ"CHANGE WITHOUT ALTERING THE VALUE.Y*T SYSTEM INITIALIZATIONצ"R(ETURN) TAKES YOU BACK INTO SETUPצ IF YOU'RE NOT DONEE(XIT) TERMINATES THIS PROGRAM"DMC ,R썡07 C(ONTINUE) Q(UIT)CUN Vצ OCTAL DECIMAL HEXADECIMALء.ǀɡצ ASCII ɡ CONTROLɡ 1) ń ġצ RADIX FROM ;צOCTALDDECIMAL1צ HEXADECIMALYC6 / TO EITHER ^DECIMAL OR HEXADECIMALVOCTAL OR HEXADECIMAL6OCTAL OR DECIMAL H(ELP) Q(UIT)צ&S(INGLE) ALLOWS YOU TO EXAMINE 1 VALUEצ BY NAME'P(ROMPTED) TAKES YOU THROUGH ALL FIELDSצ(R(ADIX) ALLOWS YOU TO CHANGE THE ASSUMEDLD: [쓄Hצ DIDN'T FIND NAME OF FIELD: 쓡]R쓄<쓡4 FIELD NAME = آخLצ#CHANGE: S(INGLE) P(ROMPTED) R(ADIX) \ڪP.P.....O T : Tצ NEW VALUE: .썓!צ NEW VALUE:  썡׷خeJT |á á $NAME OF FIE 쓄 쓡 N썡쓡ۮ46X r˦ SHOWSCALARˡ˦ SHOWSCALARCURRENT VALUE IS ٢L lALLOWED VALUES ARE:צSHOWALLآá+_'Dɡ_ؑȡ#_*hȡ  (á 2ECIMAL5צNOW HEXADECIMALO> 3l: O(CT) D(EC) H(EX) Q(UIT)/ 'DO 5썡ġ ASCII MNEMONIC FOR THE CHARACTER C(ONTINUE)Cá &  쓡jWANT TO CHANGE THIS VALUE? (Y,N,!)YE@썡p | Gצ NOW OCTALL NOW D!->(-)-! !-DIGIT<-!! !!->D{DECIMAL}!ڡצ OR IF YOUR KEYBOARD CAN GENERATEצ%THE VALUE YOU WANT, JUST TYPE THE KEY&AND THEN TYPE CARRIAGE RETURN, OR TYPE$THE ..  IN THE FORMAT BELOW:צ!->O-{OCTAL}-!צ! !צ'--DEFAULT----!----------->DIGIT--->(CR)"! ! ! ! ! !"!->H-{HEX}---! ߡ 0 A  ₚ ȡ00 A  ōޡĄȄ  "INPUT VALUES IN THE DECIMAL RANGE: F 0  ( DO 6-á = C / ~D5 -á1 FFȡ    ɡ^@ ?b צ NEW VALUE: ܄ ȄBo!! o!  DELׯ !˄Ȅᚹ    ń ġ= ɡ  A ء!ɡ&o! o!DáצDEL (ٳ?IfH 4 HS   Qá ,   צ"SETUP: C(HANGE T(EACH H(ELP Q(UIT צ[S.2]  צ(C(HANGE) ALLOWS YOU TO CHANGE OR EXAMINEצ& THE VARIOUS PIECES OF INFORMATIONצ' THE SYSTEM HAS ABOUT YOUR HARDWARE CONFIGURATION$T(EACH) TEACHES YOU HOW TO USE SETUP&Q(UIT) ALLOWS YOU TO MAKE YOUR CHANGES( PERMANENT AND TO L4 CALCULAT  ˦READING O.S. SEG #15멄 멄 멄 8``  멄`멄`` ` `ȡ# a a   צWRITING SEG DICT OF NEW O.S.8u( á ( š צ NEW.PASCAL``` ` ŦNOT ENOUGH ROOM TO READ SEGMENT8멄  ` ˦READING O.S. SEG #15멄 멄 멄 8``  멄`멄`` ` `ȡ# a a   צWRITING SEG D8צREADING SEG DICT OF O.S.8á ( š צ NEW.PASCAL``` ` ŦNOT ENOUGH ROOM TO READ SEGMENT8멄  ` ڂ ؤ,ץ<8d APPLE GOTOXY BINDER8צ SYSTEM.PASCAL"˦NO FILE SYSTEM.PASCALצGOTOXY MUST BE PROCEDURE #2ȦNO PROCEDURE #2 IN CODE FILEڕ ˡxצ COPYING SEGMENT  ک ˦WRITING OUT SEGMENTؤ۩ ۢٚ-á-"ˡ"VV-PV.CODEUV"á˦READING SEG DICT OF GOTOXY FILEˡ3ˡ$צGOTOXY MUST BE IN SEG #0 OR #1ؤVVV˦READING GOTOXYVتP١rERROR: Press space to continue?,, ˡ ,TھƁ1"ˡFILE WHICH CONTAINS GOTOXY? -PBFAPPLEBIN EAVE THIS PROGRAM,CT$ } "A6` ^6H*  "" B.:t4  צ(C(HANGE) ALLOWS YOU TO CHANGE OR EXAMINEצ& THE VARIOURMATIONצ' THE SYSTEM HAS ABOUT YOUR HARDWARE CONFIGURATION$T(EACH) TEACHES YOU HOW TO USE SETUP&Q(UIT) ALLOWS YOU TO MAKE YOUR CHANGES( PERMANENT AND TO LEAVE THIS PROGRAM,CT$ } "A6` ^6H*  "" B.:t4  צ(C(HANGE) ALLOWS YOU TO CHANGE OR EXAMINEצ& THE VARIOU;ȡ ;훾#azȄ (0|Ȫ ꊃ0 ڡRfd.ˡ.áړ dڡ99 ˸O^|,  >F Z & R CH J $TOTALIDSF%z$INDEX %$OPERATOR$$'ALPHA %$$NUMERIC %$$NUM \%9ANSWER %ȡ%  0 ފ$čV   .ˡ:  Eɡ  -ݑ š 0 0 ߿`ġ(   ݂. ݕ ؂݂3  ݕ 0 . ݑ0 ݕ݂ ؂ ɡ  7a ɍ -   $ $ ݞ$' ݑ$ $݂ō $݂ġ ݂$ $ $Ձn7c->;P;á ˡadÄddvdéc*Unexpected end of expression cIllegal Symbol : Try Again/צ ae#LOG e#LN e#ABS רe#SQRT e#$$E ר$$a-@Ue #))PI ר))7I@e #..FAC ר. fܩd`Ad  . 'ܡ_ 'P e#SIN רآe#COS ݢe# TAN ר ܹ%cצDivision by zero Tá cצ MOD by zero F ۡ $<* d` d Xۡ cڥe#/dá dáڥ7 34   a۩d ÄW H+צCannot calculate powercۡs"  ۩ddof+cu/Rh dáڥ9d$d e#dápe áI#ȡe# $Table full. Not donecˡe#ڼ8 á!Unrecognized ID צ Undefined LNc  Undefined SQRTc !ɍ3!Cannot calculate factorial GTR 33c077ȡߊ xcצ ")" missingJd  cIllegal symbol!dˡc "(" missing*   Undefined TANcצ Undefined LOGc5dd ddd ddddd##^x )&AMLF "$&(*,.024I8:<>@BDFHJLNPRTVXZ\^`bdfhjlnprv dؓ ˡ  dá:/dá"dˡdڨe#e#   8 רȡ ˸LASTX d%še# dd d(n @'(*$U-*)  PROGRAM GOXY;   PROCEDURE FGOTOXY(X,Y:INTEGER);   (* SOROC IQ 120 GOTOXY *)   VAR SEND: PACKED ARRAY[0..3] OF 0..255; $  BEGIN "IF X>79 THEN X:=79 "ELSE IF X<0 THEN X:=0; "IF Y>23 THEN Y:=23 "ELSE IF Y<0 THEN Y:=0; "SEND[0]:=27; (O^ӟӟ ƎHnP86H@.CODEEED.CODESKSWAPDISK֎؎,nr r nrnʤr BETbn6 6 `bb\n6 r  @ BETAN@PASCALCOCOMPINITDECLARATBODYPARTROUTINE STATEMENCASESTATFORSTATEBODY1 BODY3 WRITELINUNITPARTCOMPOPTINUMSTRINFINISHPRzPlF [EBBB B B B B BBBPRz)B&LINEFEED ] OF 0..255; 'TWOFACE=RECORD CASE BOOLEAN OF 1TRUE:(INT:INTEGER); 1FALSE:(PTR:^PA); /END; / "VAR CHEAT:TWOFACE; "  BEGIN "CHEAT.INT:=-16625; {BF0F hex} "CHEAT.PTR^[0]:=255 {Set flag}  END.  { The Apple Pascal system has a linefeed flag at location BF0F hex. If "this flag is set to 255 (FF hex), line feeds will be suppressed. If "it is set to 0 (default), line feeds will be passed. } "  PROGRAM LINEFEED;  "TYPE PA=PACKED ARRAY[0..1* LEAD-IN *) "SEND[1]:=ORD('='); (* DC1 *) "SEND[2]:=32+Y; "SEND[3]:=32+X; "UNITWRITE(2,SEND,4);  END;   BEGIN (* DUMMY MAIN *)  END.  D[0]:=126; (* LEAD-IN *) "SEND[1]:=17; (* DC1 *) "IF X<30 THEN SEND[2]:=X+96 +ELSE SEND[2]:=X; "SEND[3]:=Y+96; "UNITWRITE(2,SEND,4);  END;   BEGIN (* DUMMY MAIN *)  END.  (*$U-*)  PROGRAM GOXY;   PROCEDURE FGOTOXY(X,Y:INTEGER);   (* HAZELTINE 1500 AND 1510 GOTOXY *)   VAR SEND: PACKED ARRAY[0..3] OF 0..255; $  BEGIN "IF X>79 THEN X:=79 "ELSE IF X<0 THEN X:=0; "IF Y>23 THEN Y:=23 "ELSE IF Y<0 THEN Y:=0; "SENO^ӟӟʂ5ȡܤAaẑ5ʂ5ȡܤA09̂5ʂ YT *LP  ? תP7UsdhmN:vB :" DBE>A ƎHnP86H@.CODEGOTO.CODEKAPDISK֎؎,nr r nrnʤr BETbn6 6 `bb\n6 r BETAWOšOɡšɡ= 肿 邿NTEBODY1 BODY3 WRITELINUNITPARTCOMPOPTINUMSTRINFINISHPRzPlF[EBBB B B B B BBBPRz)dGOXY pGOXY  BEGIN W:=W1; "IF W=NIL THEN " BEGIN &NEW(W); &NEW(X); &WITH W^ DO (BEGIN *KEY:=ID; LEFT:=NIL; RIGHT:=NIL; *FIRST:=X; LAST:=X; (END; &X^.LNO:=N; X^.NEXT:=NIL; W1:=W; $END "ELSE $IF IDW^.KEY THE ROOT: WORDREF; %K,K1: INTEGER; %N: INTEGER; (* CURRENT LINE NUMBER *) %ID: ALPHA; %F,G: TEXT; %A: PACKED ARRAY[1..C1] OF CHAR; %CH: CHAR; %SOURCE,DEST: STRING[20]; %  PROCEDURE SEARCH(VAR W1: WORDREF);  VAR W: WORDREF; X: ITEMREF; 9; (* MAX LINE NUMBER *) &  TYPE ALPHA=PACKED ARRAY[1..C1] OF CHAR; %WORDREF=^WORD; %ITEMREF=^ITEM; %WORD=RECORD ,KEY: ALPHA; ,FIRST,LAST: ITEMREF; ,LEFT,RIGHT: WORDREF; *END; %ITEM=PACKED RECORD 3LNO: 0..C4; 3NEXT: ITEMREF; 1END; 1 !VAR06 *)  (* *)  (********************************************************)   CONST C1=10; (* LENGTH OF WORDS *) &C2=10; (* NUMBERS PER LINE *) &C3= 6; (* DIGITS PER NUMBER *) &C4=999PROGRAM CROSSREF;  (********************************************************)  (* *)  (* CROSS REFERENCE GENERATOR USING BINARY TREE. *)  (* FROM WIRTH,ALGORITHMS+DATA STRUCTURES=PROGRAMS,P2O^CCODEe3RTEXTׯ Z ~ ]P ?~ KL$7?.ת.ׯۓ2Save as .  ƎHnP86H@.CODEGOTO.CODEKAPDISK֎؎,nr r nrnʤr BETbn6 6 `bb\n6 r BETAWOšOɡšɡ~ɡ `鿥`ZDY3 WRITELINUNITPARTCOMPOPTINUMSTRINFINISHPRzPlF[EBBB B B B B BBBPRz)N SEARCH(W^.RIGHT) ELSE $BEGIN NEW(X); X^.LNO:=N; X^.NEXT:=NIL; *W^.LAST^.NEXT:=X; W^.LAST:=X; $END;  END; (* SEARCH *)   PROCEDURE PRINTTREE(W: WORDREF); "PROCEDURE PRINTWORD(W: WORD); "VAR L: INTEGER; X: ITEMREF; "BEGIN $WRITE(G,' ',W.KEY); $X:=W.FIRST; L:=0;  REPEAT &IF L=C2 THEN (BEGIN *WRITELN(G); *L:=0; WRITE(G,' ':C1+1) (END; (L:=L+1; WRITE(G,X^.LNO:C3); X:=X^.NEXT; $UNTIL X=NIL; $WRITELN(G); "END; (* PRINTWORD *)  BEGIN (* PRINTTREE *) "IF W<> NIL THEN $BEGIN &PO^ğE 9 9?FT &J. wצ.wá%wwצ.TEXT9wDESTINATION FILE? l l9 'á  : 9 9kk{ ɡf k k99kkġf  áf9k k9 9   ץ 89e  INPUT FILE? wצ.wá%wwצ.TEXT9wDESTINATION FILE? l l9 'á  ٟá8 ۥۢۢۢښۢښ'ڢٚ;ٵ ٢,ٱ ٢'ڢښ٢ښب    á    á ;b؟ˡ أB@CROSSREF F)  END.  1; ,UNTIL K1=K; *ID:=A; SEARCH(ROOT); (END &ELSE (BEGIN *CH:=F^; WRITE(G,CH); GET(F); (END; $END; (* WHILE NOT EOLN *) $WRITELN(G); GET(F); "END; (* WHILE NOT EOF *) "PAGE(G); PRINTTREE(ROOT);  PAGE(G); PAGE(G);  CLOSE(G,LOCK); "CLOSE( ['A'..'Z','a'..'z'] THEN (BEGIN *K:=0; *REPEAT ,IF K=K1 THEN K1:=K *ELSE ,REPEAT .A[K1]:=' '; .K1:=K1-"RESET(F,SOURCE); "WRITE('DESTINATION FILE? '); "READLN(DEST); "REWRITE(G,DEST); "WHILE NOT EOF(F) DO "BEGIN IF N=C4 THEN N:=0; $N:=N+1; WRITE(G,N:C3); $WRITE(G,': '); $WHILE NOT EOLN(F) DO $BEGIN (* SCAN NON-EMPTY LINE *) &CH:=F^; &IF CH INRINTTREE(W^.LEFT); &PRINTWORD(W^); &PRINTTREE(W^.RIGHT); $END;  END; (* PRINTTREE *)    BEGIN (* MAIN *)  ROOT:=NIL; N:=0; K1:=C1; "WRITE('INPUT FILE? '); "READLN(SOURCE); "IF POS('.',SOURCE)=0 THEN SOURCE:=CONCAT(SOURCE,'.TEXT');  PROGRAM SPIRODEMO;   USES TURTLEGRAPHICS,APPLESTUFF;   VAR "DISTANCE,ANGLE,CHANGE: INTEGER; "CH: CHAR; "COL: SCREENCOLOR; "  PROCEDURE NEXTLINE;  BEGIN "MOVE(DISTANCE); "TURN(ANGLE); "DISTANCE:=DISTANCE+CHANGE; "IF (DISTANCE MOD 40)=0 THEO^2E áצCHANGE:  š ɡ   XP )(.rBETbn6 6 `bb\n6 r BETAWꂫ(á á4@צTHAT'S ALL FOLKS...>צWELCOME TO WHILEPLOTצENTER ANGLE 0 TO QUIT.צANGLE: BpSPIRODEM $UNTIL KEYPRESS; $READ(KEYBOARD,CH); $TEXTMODE; "UNTIL FALSE;  END.  EAT WRITE('CHANGE: '); $READLN(CHANGE); UNTIL CHANGE >0; $REPEAT (* FOR EACH SPIRALLELOGRAM *) &DISTANCE:=10; &INITTURTLE; &PENCOLOR(WHITE); &WHILE DISTANCE < 250 DO NEXTLINE; $ FILLSCREEN(REVERSE); &FILLSCREEN(REVERSE); &ANGLE:=ANGLE+15; FOLKS...');  EXIT(PROGRAM);  END;    BEGIN (* MAIN PROGRAM *) "COL:=WHITE; "WRITELN('WELCOME TO WHILEPLOT'); "WRITELN('ENTER ANGLE 0 TO QUIT.'); "WRITELN; "REPEAT $WRITELN; WRITE('ANGLE: '); $READLN(ANGLE); $IF ANGLE=0 THEN GOODBYE; $REPN $BEGIN &IF COL=WHITE2 THEN COL:=WHITE 4ELSE COL:=SUCC(COL); & WHILE COL IN [BLACK,BLACK1,BLACK2,RADAR] & DO COL:=SUCC(COL); $END; "PENCOLOR(COL);  END; (* NEXTLINE *)  "  PROCEDURE GOODBYE;  BEGIN "TEXTMODE; "WRITELN; WRITELN('THAT''S ALL   PROGRAM HILBERT;   USES TURTLEGRAPHICS;   VAR SIZE,DELTA,N: INTEGER; $ORDER: INTEGER; $CH: CHAR; $  PROCEDURE HIL(I:INTEGER);  VAR A,B: INTEGER; " "PROCEDURE HIL1; "BEGIN $TURN(A); HIL(-B); TURN(A); "END; (* HIL1 *) " "PROCEDURE HIL2N^EEō+צTHAT'S ALL FOLKS...ȡ Ǿ놫nj` ^  ^*BETbn6 6 `bb\n6 r BETAW,áǴš Z Z4צWELCOME TO HILBERTצENTER ORDER 0 TO QUIT.צORDER:  B0HILBERT " MOVETO(140-DELTA,96-DELTA); $PENCOLOR(WHITE); " HIL(ORDER); " (* WAIT FOR KEYSTROKE,THEN SWITCH TO TEXT *)  READ(KEYBOARD,CH); TEXTMODE; "UNTIL FALSE;  END.   &BEGIN (WRITELN('THAT''S ALL FOLKS...'); (EXIT(PROGRAM); &END; " INITTURTLE; $DELTA:=2; " (* CALC STARTING X,Y AND SIZE *) " FOR N:=2 TO ORDER DO DELTA:=DELTA*2; " DELTA:=DELTA-1; " SIZE:=190 DIV DELTA; " DELTA:=(DELTA*SIZE) DIV 2; END; $HIL1; HIL2; HIL1; "END;  END; (* HIL *)   BEGIN (* MAIN PROGRAM *) "WRITELN('WELCOME TO HILBERT'); "WRITELN('ENTER ORDER 0 TO QUIT.'); "REPEAT (* FOR EACH ORDER *) " WRITE('ORDER: '); READLN(ORDER); " IF (ORDER < 1) OR (ORDER > 7) THEN ; "BEGIN $MOVE(SIZE); $HIL(B); $TURN(-A); MOVE(SIZE); TURN(-A); $HIL(B); $MOVE(SIZE); "END; (* HIL2 *) "  BEGIN (* HIL *) "IF I=0 THEN TURN(180) "ELSE "BEGIN $IF I>0 THEN $ BEGIN & A:=90; B:=I-1; $ END $ELSE BEGIN &A:=-90; B:=I+1; $  (*$S+*) (* USE SWAPPING OPTION FOR LARGE PROGRAMS *)   PROGRAM GRAFDEMO;  (***************************************************************)  (* *)  (* THIS IS A HURRIDLY-WRITTEN EXAMPLE EX<0) OR (TURTLEY<0) OR (TURTLEY>YMAX); "ERASE;  END;  $  PROCEDURE WALLBUMP;  BEGIN "PENCOLOR(NONE); MOVETO(XMID,YMID); "PENCOLOR(WHITE); "I:=0; "WHILE I<40 DO $BEGIN &IF (TURTLEX>XMAX) )OR (TURTLEX<0) )OR (TURTLEY>YMAX) )OR (TURTLEY<0) )R I:=1 TO 300 DO $BEGIN &MOVE(I); &TURN(-45); $END; "WAIT(2000); ERASE;  END;  $  PROCEDURE SQUIGGLE;  BEGIN "PENCOLOR(NONE); MOVETO(XMID,YMID); "PENCOLOR(WHITE); "REPEAT $TURN((RANDOM MOD 90)-60); $MOVE(3); "UNTIL (TURTLEX>XMAX) OR (TURTL"TURNTO(45); $FOR I:=-19 TO 27 DO &BEGIN (PENCOLOR(NONE); (MOVETO(I*10,0); (PENCOLOR(WHITE); (MOVE(500); &END; $WAIT(2000); ERASE;  END;  $  PROCEDURE SPIRAL;  BEGIN "PENCOLOR(NONE); MOVETO(XMID,YMID); "TURNTO(0); PENCOLOR(RANDCOLOR); "FOIZONTAL LINES *) "FOR I:=18 DOWNTO 1 DO $BEGIN &PENCOLOR(NONE); &MOVETO(0,I*10); &PENCOLOR(WHITE); &MOVETO(XMAX,I*10); $END; "WAIT(2000); "FILLSCREEN(REVERSE); "FILLSCREEN(REVERSE); "WAIT(2000); ERASE;  END;  " PROCEDURE DIAGONALS;  BEGIN ); /END -ELSE FILLSCREEN(REVERSE); $END; "WAIT(3000); ERASE;  END;  "  PROCEDURE GRID;  BEGIN "(* DRAW VERTICAL LINES *) "FOR I:=1 TO 27 DO $BEGIN &PENCOLOR(NONE); &MOVETO(I*10,YMAX); &PENCOLOR(WHITE); &MOVETO(I*10,0); $END; "(* DRAW HOR; &IF I=2 THEN /BEGIN 1PENCOLOR(NONE); 1MOVETO(SKIP,SKIP); 1PENCOLOR(WHITE); 1MOVETO(SKIP,YMAX-SKIP); 1MOVETO(XMAX-SKIP,YMAX-SKIP); 1MOVETO(XMAX-SKIP,SKIP); 1MOVETO(SKIP,SKIP); 1VIEWPORT(SKIP+1,XMAX-SKIP-1,SKIP+1,YMAX-SKIP-1); 1FILLSCREEN(BLACK(TURNTO(5*I); MOVE(400); &END; "WAIT(2000); "IF KEYPRESS THEN GOODBYE; "FILLSCREEN(REVERSE); "FILLSCREEN(REVERSE); " "FOR I:=0 TO 4 DO $BEGIN &SKIP:=I*15; &(* USE VIEWPORT TO SPECIFY PORTION OF SCREEN *) &VIEWPORT(SKIP,XMAX-SKIP,SKIP,YMAX-SKIP)EEN(BLACK);  END;    FUNCTION RANDCOLOR: SCREENCOLOR;  BEGIN "RANDCOLOR:=COLORS[RANDOM MOD 6];  END; " "  PROCEDURE FAN;  BEGIN "FOR J:=1 TO 3 DO $FOR I:=17 DOWNTO 1 DO &BEGIN (PENCOLOR(NONE); MOVETO(0,0); (PENCOLOR(REVERSE);  BEGIN "TEXTMODE; "READ(KEYBOARD,CH); "WRITELN; "WRITELN('THAT''S ALL FOLKS...'); "EXIT(PROGRAM);  END;  "  PROCEDURE ERASE;  BEGIN "IF KEYPRESS THEN GOODBYE; "VIEWPORT(0,XMAX,0,YMAX); "FRAME(WHITE); "VIEWPORT(1,XMAX-1,1,YMAX-1); "FILLSCROR DELAY:=1 TO TIME DO;  END;    PROCEDURE FRAME(COLOR: SCREENCOLOR);  BEGIN "PENCOLOR(NONE); MOVETO(0,0); "PENCOLOR(COLOR); "MOVETO(0,YMAX); MOVETO(XMAX,YMAX); "MOVETO(XMAX,0); MOVETO(0,0);  PENCOLOR(NONE);  END;    PROCEDURE GOODBYE; TYPE PICTURE=PACKED ARRAY[0..53,0..120] OF BOOLEAN;   VAR I,J,K,SKIP,ROW: INTEGER; $CH: CHAR;  COLORS: ARRAY[0..5] OF SCREENCOLOR;  BUTTER: PICTURE;  BIT: BOOLEAN;    PROCEDURE WAIT(TIME:INTEGER);  VAR DELAY: INTEGER;  BEGIN "F *)  (***************************************************************)   USES TURTLEGRAPHICS,APPLESTUFF;   CONST XMAX=279; &YMAX=191; &XMID=140; &YMID=96; & ANSWER SOME OF YOUR QUESTIONS. *)  (* *)  (* MANY THANKS TO THE FINE TEAM AT UCSD. *)  (* ENJOY YOUR NEW PASCAL SYSTEM. BILL ATKINSON, MAY 5 1979 *)  (* SHOWING THE USE OF *)  (* ROUTINES IN TURTLEGRAPHICS AND APPLESTUFF UNITS. *)  (* *)  (* IT DOES HAVE A DESCRIPTION OF DRAWBLOCK TOWARD THE END. *)  (* I HOPE IT HELPS TO THEN BEGIN ) TURN(180); & PENCOLOR(RANDCOLOR); . I:=I+1; .END &ELSE TURN((RANDOM MOD 45)-22); &MOVE(10); $END; "ERASE;  END;  "  PROCEDURE POLYGON(SIDES,EDGE: INTEGER);  VAR I,ANG: INTEGER;  BEGIN "ANG:=360 DIV SIDES; "(* SKIP POLYGONS WHICH DON'T CLOSE ALL THE WAY *) "IF (ANG*SIDES)<>360 THEN EXIT(POLYGON); "PENCOLOR(WHITE);  FOR I:=1 TO SIDES DO $BEGIN &MOVE(EDGE); &TURN(-ANG); $END; "PENCOLOR(NONE);  END; "   PROCEDURE POLYGONS;  BEGIN "PENCOLOR(NON;  BEGIN  STUFF(BUTTER,' X X III IIIIXXX *** XX ');  STUFF(BUTTER,' X X I I I II XXX XX ');  STUFF(BUTTER,'XXXX X III I II XXXX XX ');  STUF X X I I IXX* ************ ***** ** X ');  STUFF(BUTTER,'XXXX X II I XX ***** ****** ***** XX ');  STUFF(BUTTER,' X X I I I XX ****** **** XX ');  END;    PROCEDURE BUTTER3 STUFF(BUTTER,'XXX X I XX** **** ***** * XX ');  STUFF(BUTTER,' X X II XX **** ** ** * * *** ***** X ');  STUFF(BUTTER,' X X II XX ******** *** ** ***** **** XX ');  STUFF(BUTTER,'UTTER,'XXX XX** * ****** X ');  STUFF(BUTTER,' X XX*** ***** XX ');  STUFF(BUTTER,' XXI XX *** *** *** X '); ');  STUFF(BUTTER,' X X--- - **** XX ');  STUFF(BUTTER,' X* --- - ***** X ');  STUFF(BUTTER,' X ** ****** XX ');  STUFF(B ****XX ');  STUFF(BUTTER,' X X ----- --- --- **** X ');  STUFF(BUTTER,' X X ---------------- - ***XX ');  STUFF(BUTTER,' X X----- --- --- - ** * X  STUFF(BUTTER,' X XX ----- ----- - * * XX ');  STUFF(BUTTER,'X XXX ------ ---- ** XX ');  END;   PROCEDURE BUTTER2;  BEGIN  STUFF(BUTTER,' X X --- ------------ --- * * X ');  STUFF(BUTTER,' X XXXX ---------- *** XX ');  STUFF(BUTTER,' X XXX -- --------- -- *** XX '); XXXX ---- XX ');  STUFF(BUTTER,' XXX XXXXX --- * X ');  STUFF(BUTTER,' XX XXXXX --- ** XX ');  STUFF(BUTTER,' X XXXX X XXXXXX X ');  STUFF(BUTTER,'XX XXXXXXX *X ');  STUFF(BUTTER,' XX XXXXXX ----- * X ');  STUFF(BUTTER,' X X X STUFF(BUTTER,' XX XXXXXXX X ');  STUFF(BUTTER,' XX XXXXXXX X ');  STUFF(BUTTER,' X XXXXXXX X ');  STUFF(BUTTER,'BUTTER,' XX XXXXXXXXXXX ');  STUFF(BUTTER,' XXX XXXXXXXXXXXXXXXXXXXXX ');  STUFF(BUTTER,' XXXXXXXXXXXXXXXX XXXXXXXXX XX '); ITMAP FORM STRINGS *)  VAR J: INTEGER;  BEGIN "FOR J:=1 TO LENGTH(S) DO $BEGIN &BIT:=(S[J]<>' '); &BITMAP[ROW,J+59]:=BIT; " BITMAP[ROW,60-J]:=BIT; (* SYMMETRIC *) $END; "ROW:=ROW-1;  END;  "  PROCEDURE BUTTER1;  BEGIN "ROW:=53;  STUFF(E); "FOR I:=1 TO 40 DO $BEGIN &MOVETO((RANDOM MOD 400)-50,(RANDOM MOD 300)-50); &TURNTO(0); &POLYGON((RANDOM MOD 9)+3,(RANDOM MOD 40)+5); $END; "WAIT(4000); ERASE;  END;    PROCEDURE STUFF(VAR BITMAP: PICTURE; S:STRING);  (* MAKE BUTTERFLY BF(BUTTER,' XX X I I I 0 I XXXXXXXXX ');  STUFF(BUTTER,' XX X II I 00 I X XXXX ');  STUFF(BUTTER,' XX X I I II 000 I X ');  STUFF(BUTTER,'XXXXXX X I III I II 0 I X ');  STUFF(BUTTER,' X X X II I III II 0 I X ');  STUFF(BUTTER,' X X X II I I 00 II 0 I X ');  STUFF(BUTTER,' *)  (************************************************************************)    PROCEDURE FLUTTER;  BEGIN "(* DRAW SIX BUTTERFLIES *) "DRAWBLOCK(BUTTER,16,0,0,120,54, 10, 0,14); "DRAWBLOCK(BUTTER,16,0,0,120,54,150, 64,1---------I---------------I---------------I *)  (* *)  (* FOR EXAMPLE, MODE 0=FILL BLACK, 10=COPY SOURCE, 14=OR, 6=XOR, ETC. *)  (*  (* I TRUE I FALSE I I *)  (* I---------------I---------------I---------------I *)  (* I TRUE I TRUE I MSB MODE I *)  (* I------)  (* I---------------I---------------I---------------I *)  (* I FALSE I TRUE I I *)  (* I---------------I---------------I---------------I *) *)  (* CURRENT SCREEN SOURCE RESULTANT SCREEN *)  (* I---------------I---------------I---------------I *)  (* I FALSE I FALSE I LSB MODE I * *)  (* *)  (* MODE RANGES 0..15 TO FILL IN THE FOLLOWING TRUTH TABLE: *)  (*  (* 6. HEIGHT IN DOTS *)  (* 7. XSCREEN WHERE TO PUT IT ON THE HIRES SCREEN (0..279) *)  (* 8. YSCREEN " " (0..191) *)  (* 9. MODE BEFORE TRANSFERING *)  (* 4. YSKIP HOW MANY ROWS TO SKIP *)  (* 5. WIDTH IN DOTS *) RS TO DRAWBLOCK ARE: *)  (* 1. SOURCE ARRAY NAME *)  (* 2. ROWSIZE IN BYTES 2*(( DOTSWIDE+15 ) DIV 16 ) *)  (* 3. XSKIP HOW MANY DOTS TO SKIP ROCEDURE INITBUTTERFLY;  BEGIN "BUTTER1; "BUTTER2; "BUTTER3;  BUTTER4;  END;   (************************************************************************)  (* *)  (* PARAMETE STUFF(BUTTER,' XXXXXIII X ');  STUFF(BUTTER,' X X ');  STUFF(BUTTER,' XX ');  END;    PUTTER,' X I I 00 III X ');  STUFF(BUTTER,' X IIII I X ');  STUFF(BUTTER,' X I I XXXX '); ');  STUFF(BUTTER,' X X I 0 I 00 I 00 I X ');  STUFF(BUTTER,' X X I 0 I I I X ');  STUFF(BUTTER,'X X I I 0 I I X ');  STUFF(BXXXX X X I I I 00 I IX ');  STUFF(BUTTER,' X XX I I 0 I 00 I I X ');  END;   PROCEDURE BUTTER4;  BEGIN  STUFF(BUTTER,'XXX X I I 000 I II X 4); "DRAWBLOCK(BUTTER,16,0,0,120,54, 10,128,14); "DRAWBLOCK(BUTTER,16,0,0,120,54,150,128,14); "DRAWBLOCK(BUTTER,16,0,0,120,54, 10, 64,14); "DRAWBLOCK(BUTTER,16,0,0,120,54,150, 0,14); "WAIT(8000); FILLSCREEN(REVERSE); WAIT(3000); "FILLSCREEN(REVERSE); "(* USE XOR MODE TO REMOVE ONE AT A TIME *) "DRAWBLOCK(BUTTER,16,0,0,120,54, 10, 0, 6); "DRAWBLOCK(BUTTER,16,0,0,120,54,150, 64, 6); "DRAWBLOCK(BUTTER,16,0,0,120,54, 10,128, 6); "DRAWBLOCK(BUTTER,16,0,0,120,54,150,128, 6); "D --- * * X צ< X XXXX ---------- *** XX < X XXX -- --------- -- *** XX צ< X XX ----- ----- - * * XX  nj`,ȡ-D nj`Z<ȡ2ġ ǐ  ȡrǿ áNǿǿǿ   Ǹ  ȡ ǿȡǿǿ6צTHAT'S ALL FOLKS...Hǿ ǿ  2 Bp GRAFDEMO ND.  " " "  ; "COLORS[0]:=WHITE; "COLORS[1]:=REVERSE; "COLORS[2]:=GREEN; "COLORS[3]:=VIOLET; "COLORS[4]:=ORANGE; "COLORS[5]:=BLUE; " "REPEAT $FAN; $GRID; $SPIRAL; $SQUIGGLE; $DIAGONALS; $WALLBUMP; " POLYGONS; $FLUTTER; "UNTIL KEYPRESS; "GOODBYE;  ERAWBLOCK(BUTTER,16,0,0,120,54, 10, 64, 6); "DRAWBLOCK(BUTTER,16,0,0,120,54,150, 0, 6);  END;    BEGIN "WRITELN('PRESS ANY KEY TO QUIT.'); "WRITELN('PLEASE WAIT WHILE CREATING BUTTERFLY'); "INITBUTTERFLY; "INITTURTLE; "FRAME(WHITE); "RANDOMIZE- ---- ** XX ~צ< X X --- ------------ ****XX < X X ----- --- --- **** X צ< X X ---------------- - ***XX < X X----- --- --- - ** * X צ< X X--- - **** XX < X* --- - ***** X צ< X ** ****** XX تP0/. -0/.-  ǿ 0.0-/-/.0.0.Zȡ1Ǵ 'ȡǀ@, V,ȡB0dGRAFCHAR \*x6 x6ǖ@x6 ǀx6ǖǀx6 @x6ǖ@ Ǹ  x6 x6ǖ@x6 ǀx6ǖǀx6 @x6ǖPRESS ANY KEY TO QUIT.$PLEASE WAIT WHILE CREATING BUTTERFLY         5z"v 8FZ$x6 x6ǖ@x6 ǀx6ǖǀx6 @x6ǖ@ Ǹ  x6 x6ǖ@x6 ǀx6ǖǀx6 @x6ǖPRESS A X I I XXXX < XXXXXIII X צ< X X < XX  I I X 4 THEN WRITE(CHR(7)); (* BEEP *) &IF LEVEL<=4 THEN (BEGIN *PENCOLOR(NONE); MOVETO(X+44,Y+3); *PENCOLOR(WHITE); MOVETO(X+56,Y+DELTAY[LEVEL]); *SHOWTREE(P^.LEFTPTR,LEVEL+1); *PENCOLOR(NONE); MOVETO(X+44,Y-3); *PENCOLOR(WHITE); MOVETO(X+56,ETO(X,Y-5); MOVETO(X,Y); "PENCOLOR(NONE); MOVETO(X+2,Y-4); "WSTRING(W); MOVETO(X,Y);  END;     PROCEDURE SHOWTREE(P: NODEPTR; LEVEL: INTEGER);  VAR X,Y: INTEGER;  BEGIN "IF P<>NIL THEN $BEGIN &X:=TURTLEX; &Y:=TURTLEY; &BOXWORD(P^.WORD);&PRINTTREE(P^.RIGHTPTR); $END;  END;    PROCEDURE BOXWORD(W: WORDSTRING);  (* BEGIN AND END PEN AT LEFT OF BOX *)  VAR X,Y: INTEGER;  BEGIN "X:=TURTLEX; Y:=TURTLEY; "PENCOLOR(WHITE); MOVETO(X,Y+5); "MOVETO(X+44,Y+5); MOVETO(X+44,Y-5); "MOV TREE FURTHER *) $BEGIN &IF W>P^.WORD THEN INSERTIT(W,P^.RIGHTPTR); &IF WNIL THEN $BEGIN &PRINTTREE(P^.LEFTPTR); &WRITELN(P^.WORD); NG; $W: WORDSTRING; $DELTAY: ARRAY[0..4] OF INTEGER; $   PROCEDURE INSERTIT(W: WORDSTRING; VAR P: NODEPTR);  BEGIN "IF P=NIL THEN (* MAKE NEW NODE *) $BEGIN &NEW(P); &P^.LEFTPTR:=NIL; &P^.RIGHTPTR:=NIL; &P^.WORD:=W; $END "ELSE (* CHASE DOWN***********************)   USES TURTLEGRAPHICS;   CONST WORDLENGTH=6;  CONSOLE=1;   TYPE WORDSTRING=STRING[WORDLENGTH]; %NODEPTR=^NODE; %NODE=RECORD ,WORD: WORDSTRING; ,LEFTPTR,RIGHTPTR: NODEPTR; *END; *  VAR ROOT: NODEPTR; $S: STRI   PROGRAM TREE;   (**************************************)  (* *)  (* MAKE AND PLOT A SIMPLE BINARY TREE *)  (* (PROGRAM BY BILL ATKINSON) *)  (* *)  (***************B0٪á L؟ˡ(ت  ,, \ٟˡw  š 5IF P2^.BAL=+1 THEN P1^.BAL:=-1 ELSE P1^.BAL:=0; 5P:=P2; 3END; 1P^.BAL:=0; H:=FALSE; /END; (* CASE -1 *) / *END; (* CASE *) &END (* IF WP^.WORD THEN &BEGIN (INSERTIT(W,P^.RIGHT,H); (IF H THEN (* RIGHT BRANCH HAS GROWON *) 5P^.LEFT:=P1^.RIGHT; 5P1^.RIGHT:=P; 5P^.BAL:=0; 5P:=P1; 3END 1ELSE 3BEGIN (* DOUBLE LR ROTATION *) 5P2:=P1^.RIGHT; 5P1^.RIGHT:=P2^.LEFT; 5P2^.LEFT:=P1; 5P^.LEFT:=P2^.RIGHT; 5P2^.RIGHT:=P; 5IF P2^.BAL=-1 THEN P^.BAL:=+1 ELSE P^.BAL:=0; (INSERTIT(W,P^.LEFT,H); (IF H THEN (* LEFT BRANCH HAS GROWN *) *CASE P^.BAL OF ,1: BEGIN 1P^.BAL:=0; 1H:=FALSE; /END; (* CASE1 *) / ,0: P^.BAL:=-1; + +-1: BEGIN (* REBALANCE *) 1P1:=P^.LEFT; 1IF P1^.BAL=-1 THEN 3BEGIN 5(* SINGLE LL ROTATI,P2: NODEPTR;  BEGIN "IF P=NIL THEN (* MAKE NEW NODE *) $BEGIN &NEW(P); H:=TRUE; &WITH P^ DO (BEGIN *LEFT:=NIL; *RIGHT:=NIL; *WORD:=W; *BAL:=0; $ END; $END " "ELSE (* CHASE DOWN TREE FURTHER *) $IF W1011 11 ENTER WORD: &Páȡ--66-צTHE WORDS IN ORDER ARE:Ǫ BINARY TREE:`  .4xd  š ȡR,8ڥ1,8ڥ1צTHAT'S ALL FOLKS...>1011 11 ENTER WORD: &N *) *CASE P^.BAL OF +-1: BEGIN 1P^.BAL:=0; 1H:=FALSE; /END; (* CASE -1 *) / ,0: P^.BAL:=+1; , ,1: BEGIN (* REBALANCE *) 1P1:=P^.RIGHT; 1IF P1^.BAL=+1 THEN 3BEGIN (* SINGLE RR ROTATION *) 5P^.RIGHT:=P1^.LEFT; 5P1^.LEFT:=P; 5P^.BAL:=0; 5P:=P1; 3END 1ELSE 3BEGIN (* DOUBLE RL ROTATION *) 5P2:=P1^.LEFT; 5P1^.LEFT:=P2^.RIGHT; 5P2^.RIGHT:=P1; 5P^.RIGHT:=P2^.LEFT; 5P2^.LEFT:=P; 5IF P2^.BAL=+1 THEN P^.BAL:=-1 ELSE P^.BAL:=0; 5IF P2^.BAL=-1 THEN P1^.BAL:=+1 ELSE P1^.BAL:=0; 5P:=P2; ڪá'  á_ߢߢá á ߚB0BALANCED " READLN; TEXTMODE; "UNTIL FALSE; (* TILL ZERO LENGTH EXIT *)  END.   RTIT(W,ROOT,BOOL); $WRITELN; $WRITELN('THE WORDS IN ORDER ARE:'); $PRINTTREE(ROOT); $WRITELN; READLN; $INITTURTLE; MOVETO(0,182); $WSTRING('AVL-BALANCED'); $MOVETO(0,170); $WSTRING('BINARY TREE:'); $MOVETO(0,96); $SHOWTREE(ROOT,0); [1]:=24; "DELTAY[2]:=12; "DELTAY[3]:=6; "DELTAY[4]:=3; " "REPEAT $WRITE('ENTER WORD: '); $UNITCLEAR(CONSOLE); (* NO TYPE-AHEAD *) $READLN(S); $IF LENGTH(S)=0 THEN GOODBYE; $IF LENGTH(S)<=WORDLENGTH THEN W:=S &ELSE W:=COPY(S,1,WORDLENGTH); $INSEE); MOVETO(X+56,Y-DELTAY[LEVEL]); *SHOWTREE(P^.RIGHT,LEVEL+1); $ END; $END;  END;    PROCEDURE GOODBYE;  BEGIN "TEXTMODE; "WRITELN; WRITELN('THAT''S ALL FOLKS...'); "EXIT(PROGRAM);  END;    BEGIN "ROOT:=NIL; "DELTAY[0]:=48; "DELTAY&BOXWORD(P^.WORD); &IF LEVEL>4 THEN WRITE(CHR(7)); (* BEEP *) &IF LEVEL<=4 THEN (BEGIN *PENCOLOR(NONE); MOVETO(X+44,Y+3); *PENCOLOR(WHITE); MOVETO(X+56,Y+DELTAY[LEVEL]); *SHOWTREE(P^.LEFT,LEVEL+1); *PENCOLOR(NONE); MOVETO(X+44,Y-3); *PENCOLOR(WHIT "MOVETO(X,Y-5); MOVETO(X,Y); "PENCOLOR(NONE); MOVETO(X+2,Y-4); "WSTRING(W); MOVETO(X,Y);  END;     PROCEDURE SHOWTREE(P: NODEPTR; LEVEL: INTEGER);  VAR X,Y: INTEGER;  BEGIN "IF P<>NIL THEN $BEGIN &X:=TURTLEX; &Y:=TURTLEY; ^.WORD); &PRINTTREE(P^.RIGHT); $END;  END;    PROCEDURE BOXWORD(W: WORDSTRING);  (* BEGIN AND END PEN AT LEFT OF BOX *)  VAR X,Y: INTEGER;  BEGIN "X:=TURTLEX; Y:=TURTLEY; "PENCOLOR(WHITE); MOVETO(X,Y+5); "MOVETO(X+44,Y+5); MOVETO(X+44,Y-5); 3END; 3P^.BAL:=0; H:=FALSE; /END; (* CASE1 *) * *END; (* CASE *) &END (* IF W>P^.WORD *) & $ELSE H:=FALSE;   END; (* INSERTIT *) " " " " 5  PROCEDURE PRINTTREE(P: NODEPTR);  BEGIN "IF P<>NIL THEN $BEGIN &PRINTTREE(P^.LEFT); &WRITELN(P á_ߢߢá á  ߚ  ؟ˡ(ت  ,, \ٟˡw  š ȡR,8ڥ1D(BUFFER[72]); (* PREFIX INFORMATION BYTE *) "CRTINFO[LEADIN]:=BUFFER[62]; PREFIXED[LEADIN]:=FALSE; "CRTINFO[ERASEOS]:=BUFFER[64]; PREFIXED[ERASEOS]:=ODD(BYTE DIV 8); "CRTINFO[ERASEOL]:=BUFFER[65]; PREFIXED[ERASEOL]:=ODD(BYTE DIV 4);  CRTINFO[RIGHT] *)  (****************************************************************)  VAR BUFFER: PACKED ARRAY[0..511] OF CHAR; $I,BYTE: INTEGER;  F: FILE;  BEGIN "RESET(F,'*SYSTEM.MISCINFO'); "I:=BLOCKREAD(F,BUFFER,1); "CLOSE(F); "BYTE:=OR (****************************************************************)  (* *)  (* READ SYSTEM.MISCINFO AND GET CRT CONTROL CHARACTER INFO *)  (* ADIN);    VAR CH: CHAR; $RECNUM: INTEGER; $LASTCHANGE: BOOLEAN; $DATAFILE: FILE OF PERSON;  CRTINFO: PACKED ARRAY[CRTCOMMAND] OF CHAR; $PREFIXED: ARRAY[CRTCOMMAND] OF BOOLEAN; $ $   PROCEDURE GETCRTINFO; SETOFCHAR=SET OF CHAR; %PERSON=RECORD 1NAME: STRING[NAMELEN]; 1COMPANY: STRING[COMPLEN]; 1STREET: STRING[STREETLEN]; 1CITYSTATE: STRING[CITYLEN]; 1TEL: STRING[TELELEN]; /END;  CRTCOMMAND= (ERASEOS,ERASEOL,UP,DOWN,RIGHT,LEFT,LECREEN CONTROL. *)  (* *)  (*********************************************************)   CONST NAMELEN=32; &COMPLEN=32;  STREETLEN=20; &CITYLEN=30;  TELELEN=14; &  TYPE (*$V-*)  (*$G+*)  PROGRAM DISKIO;  (*********************************************************)  (* *)  (* PROGRAM TO DEMONSTRATE RANDOM ACCESS DISK FILES *)  (* AND TERMINAL-INDEPENDENT SO^E,8ڥ1צTHAT'S ALL FOLKS...>1011 11 ENTER WORD: &Páȡ--77-6צTHE WORDS IN ORDER ARE:Ƕ AVL-BALANCEDǪצ BINARY TREE:`< JP ȡR,8ڥ1,8ڥ1צTHAT'S ALL FOLKS...>1011 11 ENTER WORD: &Páȡ--7:=BUFFER[66]; PREFIXED[RIGHT]:=ODD(BYTE DIV 2); "CRTINFO[UP]:=BUFFER[67]; PREFIXED[UP]:=ODD(BYTE); "CRTINFO[LEFT]:=BUFFER[68]; PREFIXED[LEFT]:=ODD(BYTE DIV 32);  CRTINFO[DOWN]:=CHR(10); PREFIXED[DOWN]:=FALSE;  END;    PROCEDURE CRT(C: CRTCOMMAND);  (*****************************************************************)  (* *)  (* CRT COMMANDS ARE: ERASEOS,ERASEOL,UP,DOWN,RIGHT,LEFT. *)  (* ame: ',NAME); &WRITELN('Company: ',COMPANY); &WRITELN('Street: ',STREET); &WRITELN('City & State: ',CITYSTATE); &WRITELN('Telephone: ',TEL); $END;  END;    PROCEDURE CHANGEREC(VAR REC: PERSON);  BEGIN "GOTOXY(0,12); CRT(ME,NAMELEN); &CHECK(COMPANY,COMPLEN); &CHECK(STREET,STREETLEN); &CHECK(CITYSTATE,CITYLEN); &CHECK(TEL,TELELEN); $END;  END; (* VALIDATE *)    PROCEDURE SHOWREC(REC: PERSON);  BEGIN "GOTOXY(0,4); CRT(ERASEOS); "WITH REC DO $BEGIN &WRITELN('N$IF LENGTH(S) > MAXLEN THEN GOTO 1; $FOR I:=1 TO LENGTH(S) DO &IF NOT (S[I] IN [' '..'}']) THEN GOTO 1; $EXIT(CHECK); (* STRING IS OK *) "1: ZEROREC(REC); EXIT(VALIDATE); "END; (* CHECK *) "  BEGIN (* VALIDATE *) "WITH REC DO $BEGIN $ CHECK(NALID. *)  (* *)  (*********************************************************) "PROCEDURE CHECK(VAR S: STRING; MAXLEN: INTEGER); "LABEL 1; "VAR I: INTEGER; "BEGIN CEDURE VALIDATE(VAR REC: PERSON);  (*********************************************************)  (* *)  (* TRIES TO DETECT AND ZERO AN UNINITIALIZED RECORD *)  (* NO CHANGE IF ALL FIELDS ARE VA FUNCTION YES: BOOLEAN;  BEGIN "YES:= GETCHAR(['Y','y','N','n']) IN ['Y','y'];  END;    PROCEDURE ZEROREC(VAR REC: PERSON);  BEGIN "WITH REC DO $BEGIN &NAME:=''; &COMPANY:=''; &STREET:=''; &CITYSTATE:=''; &TEL:=''; $END;  END;    PRO$IF S1[1] IN OKSET THEN STEMP:=CONCAT(STEMP,S1) &ELSE IF S1[1]=CHR(8) THEN (BEGIN *CRT(LEFT); WRITE(' '); CRT(LEFT); *DELETE(STEMP,LENGTH(STEMP),1); (END; "UNTIL S1[1] = CHR(13); "IF LENGTH(STEMP) <> 0 THEN S:=STEMP "ELSE WRITE(S);  END;   CHAR;  BEGIN "OKSET:=[' '..'}']; "S1:=' '; "STEMP:=''; "REPEAT " IF LENGTH(STEMP) = 0 THEN S1[1]:=GETCHAR(OKSET + [CHR(13)]) &ELSE IF LENGTH(STEMP)=MAXLEN THEN S1[1]:=GETCHAR([CHR(13),CHR(8)]) -ELSE S1[1]:=GETCHAR(OKSET + [CHR(13),CHR(8)]); STRING ENTERED, DEFAULT AND PRINT PREVIOUS VALUE. *)  (* *)  (***************************************************************)  VAR S1: STRING[1];  STEMP: STRING[80];  OKSET: SET OF RING(VAR S: STRING; MAXLEN: INTEGER);  (***************************************************************)  (* *)  (* GET AND ECHO A STRING UP TO MAXLEN CHARS LONG. *)  (* IF NULL  GOOD: BOOLEAN;  BEGIN  REPEAT $READ(KEYBOARD,CH); $IF EOLN(KEYBOARD) THEN CH:=CHR(13); $GOOD:= CH IN OKSET; $IF NOT GOOD THEN WRITE(CHR(7)) &ELSE IF CH IN [' '..'}'] THEN WRITE(CH); "UNTIL GOOD; "GETCHAR:=CH;  END;    PROCEDURE GETST *)  (* GET A CHARACTER, BEEP IF NOT IN OKSET, ECHO ONLY IF PRINTING *)  (* *)  (******************************************************************)  VAR CH: CHAR; AT(Y: INTEGER; S: STRING);  BEGIN "GOTOXY(0,Y); "WRITE(S); "CRT(ERASEOL);  END;    FUNCTION GETCHAR(OKSET: SETOFCHAR): CHAR;  (******************************************************************)  (* *)  (*****************************************************************)  BEGIN "IF PREFIXED[C] THEN UNITWRITE(1,CRTINFO[LEADIN],1,0,12); "UNITWRITE(1,CRTINFO[C],1,0,12);  END;    PROCEDURE PROMPTERASEOS); "PROMPTAT(12,'(Press return for no change)'); "WITH REC DO $BEGIN &GOTOXY(0,14); &WRITE('Name: '); GETSTRING(NAME,NAMELEN); WRITELN; &WRITE('Company: '); GETSTRING(COMPANY,COMPLEN); WRITELN; &WRITE('Street: '); GETSTRING(STREET,STREETLEN); WRITELN; &WRITE('City & State: '); GETSTRING(CITYSTATE,CITYLEN); WRITELN; &WRITE('Telephone: '); GETSTRING(TEL,TELELEN); WRITELN; #END;  END; (* CHANGEREC *) " "  PROCEDURE NEWFILE;  VAR SU'N','n': NEXT; &'F','f': NEWFILE; &'V','v': VIEW; &'C','c': CHANGE; $END; "UNTIL CH IN ['Q','q']; " "CLOSE(DATAFILE,LOCK);  PROMPTAT(12,'THAT''S ALL FOLKS...');  END.    END; " "  BEGIN (* MAIN PROGRAM *) "GETCRTINFO; "GOTOXY(0,0); CRT(ERASEOS); "NEWFILE; "REPEAT $PROMPTAT(0,'>DISKIO: V(iew, C(hange, N(ext, F(ile, Q(uit '); $CH:=GETCHAR(['N','n','F','f','V','v','C','c','Q','q']); $CRT(ERASEOS); $CASE CH OF &&(*$I-*) &PUT(DATAFILE); $ (*$I+*) &IF (IORESULT<>0) OR EOF(DATAFILE) THEN (BEGIN *GOTOXY(0,20); *WRITELN(CHR(7),'UNABLE TO EXTEND FILE, NO DATA WRITTEN'); $ WRITELN('Use Filer K(runch command to make space after file.'); (END; $END; Y(0,4); *WRITE('Record ',RECNUM,' not in file.'); ( EXIT(NEXT); (END; $END;  GOTOXY(0,2); WRITE('Record number ',RECNUM); "VALIDATE(DATAFILE^); "SHOWREC(DATAFILE^);  IF LASTCHANGE THEN $BEGIN &CHANGEREC(DATAFILE^); &SEEK(DATAFILE,RECNUM); D; "LASTCHANGE:=FALSE;  END; " "  PROCEDURE NEXT;  (* VIEW OR CHANGE NEXT RECORD *)  BEGIN "RECNUM:=RECNUM+1; "SEEK(DATAFILE,RECNUM); "GET(DATAFILE); "IF EOF(DATAFILE) THEN $BEGIN &ZEROREC(DATAFILE^); &IF NOT LASTCHANGE THEN (BEGIN *GOTOX$READLN(RECNUM); "UNTIL IORESULT=0; "(*$I+*) "SEEK(DATAFILE,RECNUM); "GET(DATAFILE); "IF EOF(DATAFILE) THEN $BEGIN &GOTOXY(0,4); &WRITE('Record ',RECNUM,' not in file.'); $END "ELSE $BEGIN &VALIDATE(DATAFILE^); &SHOWREC(DATAFILE^);  EN0); &WRITELN(CHR(7),'UNABLE TO EXTEND FILE, NO DATA WRITTEN'); &WRITELN('Use Filer K(runch command to make space after file.'); $END; "LASTCHANGE:=TRUE;  END; "   PROCEDURE VIEW;  BEGIN "(*$I-*) "REPEAT $PROMPTAT(2,'View which record ? '); EOF(DATAFILE) THEN (* EXTENDING FILE *) ZEROREC(DATAFILE^); "VALIDATE(DATAFILE^); "SHOWREC(DATAFILE^); "CHANGEREC(DATAFILE^); "SEEK(DATAFILE,RECNUM); "(*$I-*) "PUT(DATAFILE);  (*$I+*) "IF (IORESULT<>0) OR EOF(DATAFILE) THEN $BEGIN &GOTOXY(0,2IL SUCESSFUL; "(*$I+*) "RECNUM:=-1;  LASTCHANGE:=FALSE;  END;    PROCEDURE CHANGE;  BEGIN "(*$I-*) "REPEAT $PROMPTAT(2,'Change which record ? '); $READLN(RECNUM); "UNTIL IORESULT=0; "(*$I+*) "SEEK(DATAFILE,RECNUM); "GET(DATAFILE); "IF0(* INITIALIZE CONTENTS OF FILE *) 0FOR IREC:=0 TO MAXREC DO 2BEGIN 4SEEK(DATAFILE,IREC); 4PUT(DATAFILE); 2END; 0CLOSE(DATAFILE,LOCK); (* LOCK IT IN PLACE *) 0RESET(DATAFILE,FILENAME); . SUCESSFUL := (IORESULT = 0); .END; & END; &END; "UNT,READLN(MAXREC); ,SEEK(DATAFILE,MAXREC); ,ZEROREC(DATAFILE^); ,(*$I-*) ,PUT(DATAFILE); ,(*$I+*) ,IF (IORESULT<>0) OR EOF(DATAFILE) THEN .BEGIN 0PROMPTAT(14,'Not enough room. Press return '); 0READLN; 0SUCESSFUL:=FALSE; .END ,ELSE .BEGIN ; (* TRY TO OPEN AN OLD FILE *) $SUCESSFUL := (IORESULT=0); $IF NOT SUCESSFUL THEN (* START A NEW FILE? *) &BEGIN (PROMPTAT(10,'Start a new file ? '); (IF YES THEN *BEGIN ,REWRITE(DATAFILE,FILENAME); ,PROMPTAT(12,'Reserve how many records ? '); CESSFUL: BOOLEAN; $FILENAME: STRING[30];  IREC,MAXREC: INTEGER;  BEGIN "CLOSE(DATAFILE,LOCK); (* IN CASE IT'S ALREADY OPEN *) "(*$I-*) "REPEAT $GOTOXY(0,1); CRT(ERASEOS); $PROMPTAT(8,'File Name: '); READLN(FILENAME); $RESET(DATAFILE,FILENAME) DISKIO ԡá  Code write errorQ*\ 8 t & n &(*  ZצApple Pascal Librarian [1.1]Pbdfu THAT'S ALL FOLKS...4 #BH:NV  L &UNABLE TO EXTEND FILE, NO DATA WRITTEN3Use Filer K(runch command to make space after file. P2E צ->DISKIO: V(iew, C(hange, N(ext, F(ile, Q(uit BH@BH@{ wsoCvh  - "$&5*,.02468:<>@KDFYJLNPRTVmZ\^`  not in file.Record number  "˥ &UNABLE TO EXTEND FILE, NO DATA WRITTEN3Use Filer K(runch command to make space after file.ce after file. View which record ?  "á =צRecord   not in file.  F쓡?צRecord ,K(B Change which record ?  "á  "˥ &UNABLE TO EXTEND FILE, NO DATA WRITTEN3Use Filer K(runch command to make spa"ؓ צStart a new file ?  צReserve how many records ?  "˥ 1צNot enough room. Press return ?ȡ"Name:  Company: ٢ Street: ٢"City & State: ٢-Telephone: ٢=  File Name: Company: צStreet: $City & State: /צTelephone: ?   (Press return for no change) 8צ ٢צ ٢"צ٢-צ٢=צ2š5ȡ$ڛ?   9 R  ٢ ٢" ٢- ٢= ( بEצName:  צPá- 0á - -==P=Q=P#á  áˡP  @@{ʁ w {ƁT 2{ w w .تPR    #? `$ h-?ƁƂ/Ɓצ*SYSTEM.MISCINFOƁ́ƁH́w>{w@{ʁwA{ʁwB{ʁwC{ʁwDB*ZצOutput code file -> P1P1*1צ*SYSTEM.LIBRARYP1á 11ԥ ȡ ר ֳCֳZצNotice?