`L i=L\Ʃx ? N'i  ͭЅ?0ȱ Ѕ?iȱi lԠԠ͠ԠϠŠͮŠ SYSTEM.APPLE   L$J6+6ˡ6á6 á*6!F *STK OFLOW*תPFF+ ˡ g:9 "8(2ȡ-'*- ?- ,( 6!+7(c) Regents of the University of California, UCSD, 1979 8>  n XPASCALSYUSERPROGDEBUGGERPRINTERRINITIALIGETCMD ^oWP.CODErE^oءDOC.TEXTrE^oB PILOT.TEXTE^o MEMDISP.TEXT^oINDEX.TO.DECDOM SYSTEM.LIBRARYoAyorEoˠI[ MASTER.TEXT^o[c MASTER.CODE^ocm TWOD.TEXTrE^oJmq TWOD.CODErE^oJq{ TWOD1.TEXTE^oڠ{PRETTYPAS.TEXTo{ BLIZZARD.CODE^oSCINOTATN.TEXToSCINOTATN.CODEoWP.TEXTrEPSCAL27* SYSTEM.PASCAL^oE*+SYSTEM.MISCINFOE+-SYSTEM.CHARSETo-3 PRIMAKER.TEXT^o36 PRIMAKER.CODE^o6: PRIREAD.TEXT^o:= PRIREAD.CODE^o=C PRINTSET.TEXT^oCI SETINT.TEXT^o&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`+*xH&x'8*7Ixix&&  ') + &п x) ++`FG8`0($ p,&") (jJJ>L+ "?I>  N `  ` x V Nx .x- z `V0^*^*>` aI꽌ɪVɭ&Y&&Y& 꽌ɪ\8`&Íáɡ 럚肚X2šá.  !š Í 7ÄU ǐɄ:6ń~66! á ~횩 ˄˥ń á   uš  gá 0Ä+  ɡ"á 4"á61 ɚ %ɡšɡš  PꟚšw#ńE z 0 Qȡ2 š:X f Ą ɡ 낫š ꓡ3š땫Ě:4ꓡ삫Ú š Kȡ*ńȄ4šáRתPńȄ ,ń.áš蕿@쾿  .Tá " * vAA4B2C&DXDVEFF.GGH J`JJ KKKK>LLNOORQQR SRSSS@VJ*`x4*<Nf ~  5 4T há1á/   Q lMȡš ȡ뾿  + d>š 0ˡ oɡ`   áá0Oš *š -Í-ë0zY 000á'/á 0z00 rT\  ɡ 逫-á-32768ת Pġ>o00ń á3 á+á! "ˡ  +Uz    00áQP 0á0 é000+ á1 š3    šš$ !邚邫镫ë퓡h  ! "ˡ ɡ!  ! "ˡf  N "ˡ  )á á ávˡ á cń# Ȅ ꚹ6áÄ5   šš  ġš  šš!ꂚꂫꕫëS  ! "ˡ! "ˡ që   dÄÍ" ˄"ɡ  dá  dá C#C˄ C      áá ~צ/13:! ) ! 767 9U?28˄šá  d2  dÍÍˡ 퓄 Ä퓡Pצ     n á9 铡/! !!2ˡń Ȅ! ~Í`~W ˡ!  ,ȫ$* "ë넡, ~ *Í2~ š˄ `1 b~ éÍ~  , Ą쓡"á  :"ë á 쓡ת$ ( ́$ʁ$ ʁ$ ʁ$ ʁ$ʁ$!"ʁ$ʁ$ʁ$ʁ$FZ5 ,  2 ˡ䀮šNjˡ>'á 2 @$ńˡá á˶w š   ɍL  "ˡ.ˡ   d쓡  3?š?ˡ5ء ߕނ߂ɡ < X4ب" h ! ! Ä & ! !  Ä  2  šˡ 퓄 Ä퓡ġ  á ġMáš6 삫뻥 d #( 0ٕš ګ۫ š۫ ګ,1 ū   áš .c+áYšPá+ ɡ _" ġ. . fj </   ȡQɫ  ȡ 1  1ȡ? ȡ  ˡ.$  š t@.  ,áצ to continue) & ,Í ˫hp(&:+:azȄaA:)~áë .$$&ˡ . .6%ˡ .Rˡ .=˄+&ȡ .& |&$&!F:F FˡFJ.BACKׯ7צ.INFO$.GRAFׯצ.FOTOA <! ȡ   צ0H" ġ  *@#22š2222ȡ2š5252á4w4]ץ11á4\1šV42233z 3042221é42é1Ä2*á444ń55P.TEXTׯ]צ.CODE  d˯7 H Pצצ22ȡ5233 ȡ 23aĩ3zȄ 23aA22š*á ?צ:22ȡá;2á!2ȡ5252š[ץˡ njáˡu á ǘ^ " ǐ !    ˡń eˡ]ÍIááǏ :áˡńǍ8FNo user programתP8F0ˡۂ.ɡ3 ꕞNˡ.Nצ Your file is   bytes long.UáV?&צSYSTEM.WRK.TEXTERת צ:SYSTEM.LINKERƁ&̨<́b ́cʁcȡ~ؤ́dʁdתʁd0ʁdʁd؞&"á*ʁd ضá0?ʁdצ*SYSTEM.STARTUP(߫7́%́eʁ%ʁeȡlضʁ%ʁbQ́fƁfʁdƁfƁ&ʁݢʁݢʁʁݢʁݢʁݢʁݢ  ʁ تٞ&"á ~٤  :SYSTEM.ASSMBLERת :SYSTEM.COMPILERת :SYSTEM.EDITORת :SYSTEM.FILʀ=ʀ* ʀ́ʁܢGʁܢHʁܢIʁܢ%O tƀ&́ʁܢʁʁܢʁܢ%́ݲ ʁݢʁݢʁݢʁݢʁݢ ʁݢʁݢ ʁݢ ʁݢ ʁݣ  ʁݢʁܢ́ʁݢ٢ š٢ ٢٢ 4$  ؗ(/  ؗ(tDoo odoo'z*SYSTEM.MISCINFOתPƀƀ Ƃ)*SYSTEM.LIBRARYתPƂ)ݡƁ%́#̂Rʁ#ʂRȡƁʁ#uƁʁ#́$̂SʂS0ʁ$̂TƁ%ʁ#̂UʂTʂSʂTʂUʁ$Ɓʁ#á ʂT ʂTʂUʁ#́#d  >*z_Iצ IO error: (צUnimplemented instruction(צFloating point error(uString overflowת(]Programmed HALTת(EProgrammed break-pointת(&qS>'oYC:*ile not foundת(צ dup dir entry(צfile already open(צ file not open(צbad input format(ring buffer overflowת(צdisk write protected(cillegal block #ת(Killegal buffer addressת(,$mU>*z_Iצ IO error: (צUnimplemented instruction(צFloating point error(uString overflowת(]Programmed HALTת(EProgrammed break-pointת(&qS>'oYC:*ת(file not foundת(צ dup dir entry(צfile already open(צ file not open(צbad input format(ring buffer overflowת(צdisk write protected(cillegal block #ת(Killegal buffer addressת(,$mUצSystem IO error(צ unknown cause( parity (CRC)ת(צillegal unit #(illegal IO requestת(צdata-com timeout(vol went off-lineת(file lost in dirת(צ bad file name(צno room on vol( vol not foundצUnknown run-time error(צValue range error(צNo proc in seg-table(Exit from uncalled procת(Stack overflowת(צInteger overflow(Divide by zeroת(צNIL pointer reference(צProgram interrupted by user(N*SYSTEM.WRK.CODENתeצ4Do you want to E(xit from or R(eturn to the editor?:3ʼn& D%:ŮƂƂ0ƂXƁ<s$` 0T @NDZ 8 T z ~ x\6 ݞ 8FNo debugger in systemתP8F6ˡۂ.ɡ3 ꕞNˡ.Nצ Your file is   bytes long.UáV?&צSYSTEM.WRK.TEXTN*SYSTEM.WRK.CODENתeצ4Do you want to E(xit from or R(eturn to the editor?:3ʼn& D%:ŮƂƂ0ƂXƁ<s$` 0T @NDZ 8 T z ~ x\6 ݞ ʁ% Ɓf(ߡʁ% ʁbʁ%́bʁ%́%;??ٟá'C CONSOLEצSYSTERMGRAPHICצPRINTERREMINצREMOUTex<ƋD*SYSTEM.CHARSETת(ƋDʋI&"áǀʋUʋTʋKƆD ʋT  ̑ʑȡƆD   ̑ʑȡƈD  ل7@ǀ ?̑ʑȡƊDؤؤ P  ƋDצSYSTEM.WRK.CODEsSYSTEM.WRK.CODE׷Fš5צ.CODE. Execute what file? .á-::-::(:.CODE-:-"ˡ צ Can't open -   áث 7_ac  7& š+ š%::9 ƀ:ײ9 ƀ:צSYSTEM.SWAPDISK&:(7-צ*SYSTEM.WRK.CODE[*]To what codefile? (׷,á$,,ˡ-,::(,צ$,999':::::&:(áצAssembleצCompile what text? (ׯ.á(::(:צ.TEXT-:( "ˡ$ Can't find ~ e ת*U  !! !:!!ڤ  ڤ  áڤ R áצ Assemblingצ Compiling...á E*SYSTEM.LIBRARY, Can't load required intrinsic(s)lƀ/#Required intrinsic(s) not available+1  Ɓ5l 0d ^ڤ áڤ ! not codeʁ81ʁ9"ˡ Bad block #01Ɓ5aݡ9צ Linking...ܡ #צMust L(ink firstƁ5ƀ:צ.Conflict between intrinsic and user segment(s)ƁƁ"áB̂2ʁ ʁ "ˡ%  Ɓ Ɓ^rުP"ˡCۡ>"áIllegal file nameצNo file ́7́8ʁ8́9ʁ9ˡ ۢڤ ɡ$ޢ ȡSڤ ˡ@۳-ܢ0ۤ ݢ`ڤá Zxȡ2ݤˡ"ޢ`ݤۼ: TڪצCurrent date is C -C-C %צSystem re-initialized'+p .4 < j 2  MayתצJunJulתצAug Sepת צOct Novת צDec ???תצ??????ת 6!  % 7888% š tצ Welcome ?, toצU.C.S.D. Pascal System II.1SYSTERM:ת(8:98 6ëצ???JanתצFebMarתצAprMayתצJunJulתצAug Sepת צOct NovH d    0&צצ.צ??? צ*SYSTEM.WRK.TEXT& *SYSTEM.WRK.CODEײ ,  7 :9CONSOLE:ת(:9R,"6 77::9988:9  6  ۪1٦׷)צ: ܢܢšA.á צ.CODE m%צ:) Running...ء ء  :98:9á'צ*SYSTEM.STARTUP % áá  6   FצMCommand: E(dit, R(un, F(ile, C(omp, L(ink, X(ecute, A(ssem, D(ebug,? [II.1] P')%?á@Fצ*Command: U(ser restart,(* $L CONSOLE:*)  PROGRAM PRIMES;  (*C$ PAUL NORRIS, SEPT. 1980*)  (* PROGRAM TO CALCULATE HOWMANY PRIMES AND WRITE THEM TO DISK.*)   CONST MAX=3511;ESC=27; (HOWMANY=3511;  (*THERE ARE 3512 PRIMES FROM 0 TO 32767, INCLUDING 2. *)   VAR TEST,NUMBN^.#!#.1!1. ?!$ .11.!!!#    ****"""""""## .11.# >$.1!!! !!!6**""! ! .1!!? ? <5)"!!!?! """"!!"""""???!!9!!!!?!!!8!  !?!!!--3!!!1)%#!!!!!!!!.)!!!! !!! !>!!!!!! !!!!3--!!!!! !!"""?  ? "??( <12#.) *>*> ?  !#-1!> ? !!  !? ?!!!?!!!! >!!   !6>60HH06>>*>**"*6">""> $88>>>>>>*? ><>{:> (not saved) No workfileS%  O ?(&Ɓ.񄓡9&צThrow away current workfile ?  ءצ*SY I(nitialize, H(altP')%$z쓡 Linking...   ˡ&צ Restarting...צ U not allowedRRJHá68AX0qz((* "D&(,.- Dx f >     FצMCommand: E(dit, R(un, F(ile, C(omp, L(ink, X(ecute, A(ssem, D(ebug,? [II.1x3]P')%?á@Fצ*Command: U(ser restart, I(nitialize, H(altP')%$z쓡 Linking...   ˡ&צ Restarting...צ U not allowedRRJHá6ER, $PRIMESFOUND,I(*INDEX*): INTEGER; $KEY: CHAR; $PRIME: ARRAY[1..MAX] OF INTEGER; $P: FILE OF INTEGER;   BEGIN   WRITELN;  WRITELN('THIS PROGRAM WILL CALCULATE ',HOWMANY);  WRITELN('PRIMES AND WRITE THEM TO DISK.');  WRITELN;  WRITELN('PRESS ANY KEY TO BEGIN PROGRAM, OR');  WRITELN('ESCAPE KEY TO END.');  READ(KEYBOARD,KEY);  IF (ORD(KEY)=ESC) THEN EXIT(PROGRAM);   WRITELN(2); (*MANUALLY PRINT FIRST PRIME BECAUSE N^ Ƿ  Ƿ ɡǷ ˥Ƿ Ƿ ɄǷ ˡ1Ƿ 횶Ƿ  צPRIMES ARE CALCULATED.צPRESS ANY KEY TO SAVE TO DISK.צ PRIMEFILEǷ ꩎ȡ Ƿ 𥍿:PHNY KEY TO BEGIN PROGRAM, ORESCAPE KEY TO END.á Ƿ  Ƿ ɡǷ ˥Ƿ Ƿ ɄǷ ˡ1Ƿ 횶Ƿ  צPRIMES ARE CALCULATED.צPRESS ANY KEY T׶THIS PROGRAM WILL CALCULATE Ƿ PRIMES AND WRITE THEM TO DISK."PRESS ANY KEY TO BEGIN PROGRAM, ORESCAPE KEY TO END.á" PRIMES TO HOWMANY DO "BEGIN "P^:=PRIME[I]; "PUT(P) "END;(*OF THE DO LOOP*)  CLOSE(P,LOCK)  END.(*OF THE PROGRAM*)   &END; (* OF THE CONDITIONAL *) " TEST:=TEST+2  END;(*OF THE OUTER WHILE LOOP*)   (*NOW WRITE IT TO DISK*)  WRITELN('PRIMES ARE CALCULATED.');  WRITELN('PRESS ANY KEY TO SAVE TO DISK.');  READ(KEYBOARD,KEY);   REWRITE(P,'PRIMEFILE');  FOR I:=1"WHILE (TEST MOD PRIME[NUMBER]<>0) AND $(PRIME[NUMBER]*PRIME[NUMBER]0) $THEN (*TEST IS A PRIME*) &BEGIN (PRIMESFOUND:=PRIMESFOUND+1; (PRIME[PRIMESFOUND]:=TEST; (WRITELN(PRIME[PRIMESFOUND]) IT'S NOT IN ARRAY.*);   NUMBER:=1; (*INDEX TO PRIME ARRAY*)  PRIME[NUMBER]:=3; WRITELN(3);  PRIMESFOUND:=1;  TEST:=5; (*FIRST NUMBER TO TEST FOR PRIMALITY.*)   WHILE (PRIMESFOUNDMAXWORDSIZE) THEN &WRITELN('WORD LENGTH MUST BE ONE TO ',MAXWORDSIZE,' LETTERS.');  UNTIL (WORDLENGTH>=1) AND (WORDLENGTH<=MAXWORDSIZE);  ('OF LETTERS PER CODEWORD.');  WRITELN;  WRITELN;  WRITELN(' 4= "EASY"');  WRITELN(' 6= "HARD"');  REPEAT #READ(KEYBOARD,ANSWER); #(*CHANGE KEYBOARD INPUT INTO A NUMBER. #THIS STEP NECESSARY TO PREVENT RUN-TIME #ERROR ON ERRONEOUS Y;   CONST YSTART=8; &  VAR ANSWER: CHAR;   BEGIN  (*PROMPT FOR AND RECEIVE WORDLENGTH*)  PAGE(OUTPUT);  GOTOXY(0,YSTART);  WRITELN('HOW LONG DO YOU WISH YOUR CODEWORD');  WRITELN('TO BE? ',MAXWORDSIZE,' IS THE MAXIMUM NUMBER');  WRITELN IF (ANSWER='Y') THEN WISHTOPLAY:=TRUE #ELSE IF (ANSWER='N') THEN &BEGIN &PAGE(OUTPUT); &EXIT(PROGRAM) &END (ELSE SETUP (*KEEP GOING BACK (UNTIL THE FOOL PRESSES EITHER ('Y' OR 'N'!*) (  END;(*OF PROCEDURE SETUP*)   PROCEDURE CHOOSEDIFFICULTE');  WRITELN('DOING AS YOU TRY TO GUESS IT. YOU');  WRITELN('MAY ADJUST THE LEVEL OF DIFFICULTY');  WRITELN('AT WHICH YOU WISH TO PLAY.');  WRITELN;  WRITELN;  WRITELN(' DO YOU WISH TO CONTINUE? (Y/N)');  READ(KEYBOARD,ANSWER); WER : CHAR; $  BEGIN  PAGE(OUTPUT);  GOTOXY(0,YSTART);  WRITELN('THIS PROGRAM WILL ALLOW YOU TO PLAY');  WRITELN('THE GAME OF MASTERMIND WITH YOUR');  WRITELN('APPLE. THE COMPUTER WILL SELECT THE');  WRITELN('CODEWORD AND TELL YOU HOW YOU ARER; $ $CODEWORD, $GUESS : STRING; $ $SAMELEVEL, $ALLRIGHT, $WISHTOQUIT, $WISHTOPLAY : BOOLEAN; $  CHOICES : ARRAY[1..MAXNUMBEROFLETTERS] $ OF CHAR; 9  PROCEDURE SETUP;  CONST YSTART=6 ;  VAR ANSPROGRAM MASTER;  (*POSES MASTERMIND PROBLEMS*)  (*$C PAUL NORRIS, JULY 1980 *)   USES APPLESTUFF;   CONST MAXWORDSIZE=7;  MAXNUMBEROFLETTERS=8;    VAR NUMBROFTRIES, $WORDLENGTH, $NUMBROFLETTERS, $RIGHTPLACE, $WRONGPLACE : INTEGSETUP CHOOSE FORM FORMAT ACCEPT MAIN EVAL ` [ON^ELN(' "HARD"=7');  WRITELN(' MAXIMUM=',MAXNUMBEROFLETTERS);  REPEAT #READ(KEYBOARD,ANSWER); #NUMBROFLETTERS:=ORD(ANSWER)-48; %IF (NUMBROFLETTERS<1) OR &(NUMBROFLETTERS>MAXNUMBEROFLETTERS) & THEN (BEGIN (WRITELN('ANSWER MUST BE IN THE RANGE ONE TO'); (WRITELN(MAXNUMBEROFLETTERS:15) (END;(*OF THE CONDITIONAL*)  UNTIL (NUMBROFLETTERS>=1) OR #(NUMBROFLETTERS<=MAXNUMBEROFLETTERS);  END;(*OF PROCEDURE CHOOSEDIFFICULTY*) #   PROCEDURE FORMCODEWORD;  VAR I : INTEGER;  MATCH. THAT IS, HOW MANY LETTERS IN  GUESS MATCH LETTERS IN CODEWORD, BUT  ARE IN THE WRONG LOCATION. MUST ALSO  INSURE THAT NO LETTER IS MATCHED MORE  THAN ONCE IN EITHER CODEWORD OR GUESS.*)  FOR I:=1 TO LENGTH(CODEWORD) DO #FOR J:=1 TO LENGTH(CE.  MARK THEIR LOCATIONS.*)  FOR I:=1 TO LENGTH(CODEWORD) DO #IF CODEWORD[I]=GUESS[I] THEN &BEGIN &RIGHTPLACE:=RIGHTPLACE+1; &MATCHCODE[I]:=TRUE; &MATCHGUESS[I]:=TRUE &END;   (*OF LOCATIONS NOT MARKED FIND HOW MANY BLES*)  RIGHTPLACE:=0;  WRONGPLACE:=0;  ALLRIGHT:=FALSE;  FOR I:=1 TO LENGTH(CODEWORD) DO #MATCHCODE[I]:=FALSE;  FOR J:=1 TO LENGTH(GUESS) DO #MATCHGUESS[J]:=FALSE;   (*FIND NUMBER OF LETTERS IN GUESS WHICH  ARE THE RIGHT LETTER IN THE RIGHT PLAND;   PROCEDURE EVALUATION;   VAR MATCHCODE: ARRAY [1..MAXWORDSIZE] 0OF BOOLEAN; 0  MATCHGUESS: ARRAY[1..MAXWORDSIZE] 2OF BOOLEAN; % %I, %J: INTEGER; %  BEGIN   IF WISHTOQUIT=TRUE THEN EXIT(EVALUATION);   (*INITIALIZE VARIA&THEN &BEGIN &WRITELN('PRESS ANY KEY TO CONTINUE'); &READ(KEYBOARD,CONT); # GOTOXY(0,NUMBROFTRIES+3); &WRITELN(' ':40);(*CLEAR 4 LINES*) &WRITELN(' ':40); &WRITELN(' ':40); &WRITELN(' ':40) &END  UNTIL (LENGTHOK=TRUE) AND (LETTERSOK=TRUE)  EROFLETTERS]]) &THEN LETTERSOK:=FALSE; #IF LENGTHOK=FALSE THEN &WRITELN('YOUR GUESS HAS WRONG WORDLENGTH'); #IF LETTERSOK=FALSE THEN &WRITELN('USE ONLY LETTERS A THROUGH ', )CHOICES[NUMBROFLETTERS]); #IF (LENGTHOK=FALSE) OR (LETTERSOK=FALSE) &END #ELSE WISHTOQUIT:=FALSE;(*NECESSARY TO #AVOID FALLING THROUGH MAIN PROGRAM #PERPETUALLY ONCE YOU'VE QUIT*) # #IF (LENGTH(GUESS)=WORDLENGTH) THEN &LENGTHOK:=TRUE;  FOR I:=1 TO LENGTH(GUESS) DO  IF NOT (GUESS[I] IN ['A'..CHOICES[NUMBUSER GIVES UP, GIVE HIM CODEWORD*) #IF (GUESS='Q')THEN &BEGIN &WRITELN('THE CODEWORD WAS ',CODEWORD); # WRITELN('PRESS ANY KEY TO CONTINUE'); &READ(KEYBOARD,CONT); &WISHTOQUIT:=TRUE;(*TO AVOID EVALUATION*) &WISHTOPLAY:=FALSE; &EXIT(ACCEPTGUESS)  (*INITIALIZED TO AVOID INDEXING BEYOND  CURRENT LENGTH OF STRING IN COMPILER.  CHANGE IF MAXWORDLENGTH CHANGED*)  REPEAT #LENGTHOK:=FALSE; #LETTERSOK:=TRUE; #GOTOXY(0,NUMBROFTRIES+3); #WRITE('GUESS:'); #READLN(GUESS); # #(* QUIT ROUTINE *) &(*LACE':15);  WRITELN('************************************');  END;   PROCEDURE ACCEPTGUESS;  VAR LENGTHOK, (LETTERSOK: BOOLEAN;  (CONT: CHAR; (I: INTEGER;   BEGIN  GUESS:='AAAAAAA'; PLAYED.');  WRITELN;  WRITELN('PRESS ANY KEY TO CONTINUE.');  READ(KEYBOARD,CONT);   PAGE(OUTPUT);  GOTOXY(0,0);  WRITELN('CODEWORD: ',WORDLENGTH,' LETTERS, ',  ' A THROUGH ',CHOICES[NUMBROFLETTERS]);  WRITELN('GUESS','RIGHT PLACE':15,  'WRONG P TO RIGHT LENGTH*)  DELETE(CODEWORD,WORDLENGTH+1, 'MAXWORDSIZE-WORDLENGTH);  END;(*FORMCODEWORD*)   PROCEDURE FORMATSCREEN;   VAR CONT: CHAR;   BEGIN   PAGE(OUTPUT);  WRITELN('TO GIVE UP,TYPE "Q"');  WRITELN('THE CODEWORD WILL BE DIS IN ORDER TO AVOID INDEXING BEYOND  CURRENT STRING LENGTH*)   (*NOW FORM CODEWORD*)  RANDOMIZE;(*TO AVOID GETTING SAME -CODEWORD EVERY TIME*)  FOR I:=1 TO WORDLENGTH DO  CODEWORD[I]:=CHOICES[1+(RANDOM MOD NUMBROFLETTERS)];   (*CUT CODEWORD DOWN(  BEGIN  (* NOW FORM ARRAY OF LETTERS *)  FOR I:=1 TO NUMBROFLETTERS DO  CHOICES[I]:=CHR(I+ORD('A')-1);   (*INITIALIZE CODEWORD*)  (*CHANGE THIS SECTION IF MAXWORDSIZE IS CHANGED*)  CODEWORD:='AAAAAAA';(*MUST INITIALIZE GUESS) DO %IF (MATCHCODE[I]=FALSE) AND ((MATCHGUESS[J]=FALSE) THEN # IF CODEWORD[I]=GUESS[J] THEN .BEGIN .WRONGPLACE:=WRONGPLACE+1; .MATCHCODE[I]:=TRUE; .MATCHGUESS[J]:=TRUE; .END;   (*NOW PRINT GUESS AT LEFT HAND MARGIN  AND OUTPUT RIGHTPLACE AND WRONGPLACE  TO TELL USER HOW HE'S DOING.*)  GOTOXY(0,NUMBROFTRIES+2);  WRITELN(GUESS:8,RIGHTPLACE:12, ,WRONGPLACE:15);   IF (RIGHTPLACE=LENGTH(CODEWORD)) #THEN ALLRIGHT:=TRUE  END;   PROCEDURE SUCCESSROUTINE;   VAR CONT: CHA KEY TO CONTINUE. צ CODEWORD:  צ LETTERS, צ A THROUGH ^GUESSצ RIGHT PLACE WRONG PLACEצ$*****************k ȡ^A1צAAAAAAAPȡ1؛^쎂11f t TO GIVE UP,TYPE "Q"צTHE CODEWORD WILL BE DISPLAYED.PRESS ANY MININUM=1 "EASY"=4 "HARD"=7 MAXIMUM= 0ōHצ"ANSWER MUST BE IN THE RANGE ONE TO ȍ"0ōNצWORD LENGTH MUST BE ONE TO   LETTERS.Ȅ צ$HOW MANY LETTERS SHALL I CHOOSE FROMצ#TO GET EACH LETTER OF THE CODEWORD?צ"HOW LONG DO YOU WISH YOUR CODEWORDצTO BE?  צ IS THE MAXIMUM NUMBERצOF LETTERS PER CODEWORD.צ 4= "EASY"צ 6= "HARDUESS IT. YOUצ"MAY ADJUST THE LEVEL OF DIFFICULTYצAT WHICH YOU WISH TO PLAY.צ DO YOU WISH TO CONTINUE? (Y/N)YáZNá  Ͷ צ#THIS PROGRAM WILL ALLOW YOU TO PLAY THE GAME OF MASTERMIND WITH YOUR#APPLE. THE COMPUTER WILL SELECT THEצ!CODEWORD AND TELL YOU HOW YOU ARE!DOING AS YOU TRY TO G"@* PAUL NORRIS, JULY 1980 NT: CHAR;   BEGIN   PAGE(OUTPUT);  WRITELN('TO  MASTER &EVALUATION; &UNTIL (ALLRIGHT=TRUE) OR )(WISHTOQUIT=TRUE); #SUCCESSROUTINE; #ANOTHERGAME #END (*OF THE WHILE*)  END.(*PROGRAM*)  $ $ $ $ &END )ELSE ANOTHERGAME  END;(*OF THE PROCEDURE*)    BEGIN (*MAIN PROGRAM*)  SETUP;  WHILE (WISHTOPLAY=TRUE) DO #BEGIN #CHOOSEDIFFICULTY; #FORMCODEWORD; #FORMATSCREEN; #NUMBROFTRIES:=0; &REPEAT &ACCEPTGUESS; &NUMBROFTRIES:=NUMBROFTRIES+1; VAR ANSWER: CHAR;   BEGIN  PAGE(OUTPUT);  GOTOXY(0,YSTART);  WRITELN('DO YOU WISH TO PLAY ANOTHER GAME?');  READ(KEYBOARD,ANSWER);  IF (ANSWER='Y') THEN WISHTOPLAY:=TRUE #ELSE IF (ANSWER='N') THEN &BEGIN &PAGE(OUTPUT); &WISHTOPLAY:=FALSER;   BEGIN  IF (WISHTOQUIT=TRUE) THEN *EXIT(SUCCESSROUTINE);  WRITELN('YOU GOT IT IN ',NUMBROFTRIES,' TRIES!');  WRITELN('PRESS ANY KEY TO CONTINUE');  READ(KEYBOARD,CONT)  END;   PROCEDURE ANOTHERGAME;   CONST YSTART=10;  *******************MצAAAAAAAPצGUESS:PQsצTHE CODEWORD WAS 1צPRESS ANY KEY TO CONTINUE[Z[áȡ ۛA^3YOUR GUESS HAS WRONG WORDLENGTHCצUSE ONLY LETTERS A THROUGH ^צPRESS ANY KEY TO CONTINUE ("(* 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^IJRESS ANY KEY TO CONTINUE  צ!DO YOU WISH TO PLAY ANOTHER GAME?YáZNá Z v 3Z%\[ >>0LR^  *1盾曾á  1á\3$X[צYOU GOT IT IN  צ TRIES!PRESS ANY KEY TO CONTINUE  צ!DO YOU WISH TO PLAY ANOTHER GAME?YáZNá Z v 3Z%\[ >>0ȡP*1盾曾á  1á\3$X[צYOU GOT IT IN  צ TRIES!P ( ( (I "[\1ȡȡ1ȡ11盾盾á1ȡfy,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; (* 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 (* evaluateʃ]ʃ\ʃ^ʃ]ʃ_ʃ\ʃ_áʃ_ʃ_ʃ^ʃ_̃\ʃ^̃]ٕ̃aʃaȡق̃_ʃ_̃^ʃ^Ɓ ʃ_ʃ^Ƃ8ʃ_ńʃ^Ɓ ʃ_šƁ ʃ_ʃ^ʃ^Ƃ8ʃ_ɡƂ8ʃ_njƃP̃[ƃVN@@@njƃP̃ZƃXG@̃aʃaȡƃXS@@@Ǵʃ[̃_ʃ_ɡ̃_ʃ_š̃_ʃZƃXƃVL?ǂ̃^ʃ^ɡ̃^ʃ^š̃^ƃ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<.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*) 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; ʃ^áʃ_ʃ^ƃVƃVƃRWVצColor(O,G,B,V,W): range reenצlue oצiolet Qצhite4BW,_  "$&(kOȡ ȡ njǴצtype to exit.>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 (workN^Iڠʮ 5VƃRWVצColor(O,G,B,V,W): range reenצlue oצiolet Q<>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*) , ,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 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:$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=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; $ RRAY [1..60] OF STRING; nitems: INTEGER; PROCEDURE init; (* ---- *) VAR fiOK: BOOLEAN; ch:CHAR; BEGIN writeln; writeln('Program to convert Pascal Programs'); writeln(' to a conventional format'); writeln(' with UPPER/lower case fonts'); REPEAT writeln; writeln('Input File Name: '); &writeln(' ( for System.wrk.text, to quit! )'); &write(' --> '); readln(fni); IF eof THEN exit(PROGRAM); imin:=1; imax:=nitems; IF debugyes THEN writeln(inpitem); REPEAT imean:= (imax+imin) DIV 2; citem:=items[imean]; IF debugyes THEN writeln('index=',imean,' ',citem); IF inpitem>citem THEN imin:=imeh'; nitems:=i; END; FUNCTION FoundItem( inpitem:STRING ):BOOLEAN; (* --------- To match inpitem with an ordered list of nitems of items:string. *) VAR imin,imax,imean:INTEGER; citem:STRING; BEGIN i:=i+1; items[i]:='to'; i:=i+1; items[i]:='type'; i:=i+1; items[i]:='unit'; i:=i+1; items[i]:='until'; i:=i+1; items[i]:='uses'; i:=i+1; items[i]:='var'; i:=i+1; items[i]:='while'; i:=i+1; items[i]:='witi]:='real'; i:=i+1; items[i]:='record'; i:=i+1; items[i]:='repeat'; i:=i+1; items[i]:='segment'; i:=i+1; items[i]:='separate'; i:=i+1; items[i]:='set'; i:=i+1; items[i]:='string'; i:=i+1; items[i]:='then'; i:=i+1; items[i]:='nil'; i:=i+1; items[i]:='not'; i:=i+1; items[i]:='of'; i:=i+1; items[i]:='or'; i:=i+1; items[i]:='packed'; i:=i+1; items[i]:='procedure'; i:=i+1; items[i]:='program'; i:=i+1; items['; i:=i+1; items[i]:='goto'; i:=i+1; items[i]:='if'; i:=i+1; items[i]:='implementation'; i:=i+1; items[i]:='in'; i:=i+1; items[i]:='integer'; i:=i+1; items[i]:='interface'; i:=i+1; items[i]:='mod'; ]:='downto'; i:=i+1; items[i]:='else'; i:=i+1; items[i]:='end'; i:=i+1; items[i]:='external'; i:=i+1; items[i]:='file'; i:=i+1; items[i]:='for'; i:=i+1; items[i]:='forward'; i:=i+1; items[i]:='function i:=i+1; items[i]:='begin'; i:=i+1; items[i]:='boolean'; i:=i+1; items[i]:='case'; i:=i+1; items[i]:='char'; i:=i+1; items[i]:='const'; i:=i+1; items[i]:='div'; i:=i+1; items[i]:='do'; i:=i+1; items[iPROCEDURE inititems; (* --------- *) VAR i:INTEGER; BEGIN (*$R-,I-*) (* setup items list for reserved words *) i:=0; i:=i+1; items[i]:='and'; i:=i+1; items[i]:='array'; case:=['A'..'Z']; lowercase:=['a'..'z']; numeral:= ['0'..'9']; letter:=uppercase+lowercase; alphanumeric:=letter+numeral; q1:=''''; q2:=concat(q1,q1); q3:=concat(q2,q1); q4:=concat(q3,q1); END;(*init*) ;writeln; if eof then exit(program); $ debugyes:=false; typeyes:=true; incomment:=false; CASE ch OF 'y','Y': typeyes:=true; 'n','N': typeyes:=false; 'd','D': debugyes:=true; END;(* case *) upper IF length(fno)=0 THEN fno:='printer:' ELSE IF fno='printer' THEN fno:='printer:'; IF pos('.text',fno)<1 THEN fno:=concat(fno,'.text'); rewrite(fo,fno); writeln; $write('Want output (also) on Console:? (Y/N) '); read(ch) IF NOT fiOK THEN writeln('File: ',fni,' not found! Try again!'); UNTIL fiOK; $writeln; writeln('Output File Name: '); $writeln(' ( for Printer:, to quit! )'); $write(' --> '); readln(fno); IF eof THEN exit(PROGRAM); IF length(fni)=0 THEN fni:='system.wrk.text'; (*$I-*) reset(fi,fni); IF ioresult<>0 THEN fni:=concat(fni,'.text'); reset(fi,fni); fiOK:=(ioresult=0); an+1 &ELSE imax:=imean; $UNTIL imin>=imax; $ $if (imin=imax) and (inpitem=items[imin]) &then founditem:=true &else founditem:=false; END; (*founditem*) PROCEDURE toLowerCase(wi:STRING; VAR wo:STRING); (* ----------- *) VAR l,i:INTEGER; BEGIN wo:=wi; l:=length(wi); FOR i:=1 TO l DO IF wi[i] IN uppercase THEN wo[i]:=chr(ord(wi[i])+32) ELSE wo[i]:=wi[i]; END; PROCEDURE toUpperCase(wi:STRING; VAR PATTERNS ne *) BEGIN (* program ======= *) init; inititems; WHILE NOT eof(fi) DO BEGIN readln(fi,si); massageline; writeln(fo,so); IF typeyes THEN writeln(so); END; close(fo,lock); END. IF (lnw=1) AND (iw>1) THEN fixword; lw:=0; upper:=false; lower:=false; END;(* if else *) END;(*for*) IF lw>0 THEN fixword ELSE IF lnw>0 THEN fixnonword; END;(* messageli fixnonword; IF ch IN uppercase THEN upper:=true ELSE IF ch IN lowercase THEN lower:=true; lnw:=0; END(* if then *) ELSE BEGIN lnw:=lnw+1; item:=0; iw:=1; (*index of char in si *) IF debugyes THEN writeln(si); FOR iw:=1 TO ls DO BEGIN ch:=si[iw]; IF ch IN letter THEN BEGIN lw:=lw+1; IF (lw=1) AND (iw>1) THEN word,'/'); END; BEGIN $inquotes:=false; " ls:=length(si); IF ls=0 THEN BEGIN so:=si; exit(massageline); END; lw:=0; (*length of a word(identifier) *) lnw:=0; (*length of non-word *) IN toggle(inquotes); delete( word1, pos(q1,word1),1); END; END; item:=item+1; IF item=1 THEN so:=word ELSE so:=concat(so,word); IF debugyes THEN writeln(' non-word: /',,word)>0 THEN inquotes:=false (* else if pos(q3,word)>0 then inquotes:=true else if pos(q2,word)>0 then inquotes:=false *) ELSE BEGIN word1:=word; WHILE pos(q1,word1)>0 DO BEG ELSE so:=concat(so,word); END; PROCEDURE fixnonword; VAR word1:STRING; BEGIN word:=copy(si,iw-lnw,lnw); IF pos('(*',word)>0 then incomment:=true; if pos('*)',word)>0 THEN incomment:=false; IF pos(q4RE fixword; BEGIN word:=copy(si,iw-lw,lw); IF debugyes THEN write(word,'-->'); fixcaps(word); IF debugyes THEN writeln(word); item:=item+1; IF item=1 THEN so:=word ND; PROCEDURE toggle(VAR sw:BOOLEAN); (* ------ toggles sw->t->f *) BEGIN IF sw THEN sw:=false ELSE sw:=true; END; PROCEDURE MassageLine; (* ----------- *) PROCEDUOT (incomment OR inquotes) AND (lower OR upper) THEN BEGIN IF founditem( word2 ) ,THEN .BEGIN 0touppercase(word,word); 0exit(fixcaps); .END; END; IF upper AND lower THEN exit(fixcaps); word:=word2; "E ELSE wo[i]:=wi[i]; END; PROCEDURE fixcaps( VAR word:STRING ); (* ------- *) VAR word2:STRING; BEGIN IF length(word)=1 THEN exit(fixcaps); toLowerCase(word,word2); $ IF N wo:STRING); (* ----------- *) VAR l,i:INTEGER; BEGIN wo:=wi; l:=length(wi); FOR i:=1 TO l DO IF wi[i] IN lowercase THEN wo[i]:=chr(ord(wi[i])-32) "p*0?.ؿ 000   "$&(*,.024 Smith presents:צ' R E C U R S I V E B L I Z Z A R D' R E C U R S I V E B L I Z Z A R Dצ by צ Bo (after 6th flake)צ צPress any key to continue  ~ For your visual delectation, GrannyKdKuKdK@ (This program produces snowflakes using a$recursive algorithm with variations chosen at random.צPress Q at any time to Quit i?hj  ȡ   hɄ  ȡ]hńš ގ ȡš  h*0 NhKudKH oٓ؍UH H H oAT |mki`h>ȡ!B H ]?г   ȡR% , A ÚH  H    ,  % Ao šok,  ÍA  Í؍@ o G F ũiM   ! iˍiA*  A0i      B%o  Ɖ  á^?,,HH,,,,# % %ȡI " !!"#š "!  V0N _š á š# % %ȡI " !!"#š "!  š ȡ $ $$0 ˡ$ "     N68:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~ &0  ءء68:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~   "$&(*,.024b Doran pqij0`m`; -Qá`Pá 0 c& * d  &<Tl* GrannyN^yN 0NOTATION := '1.0E-6'; 0EXAMPLE := '0.000006'; 0PREFIX := 'MICRO'; 0SYMBOL := '/U'; .END; )'M': BEGIN 0NOTATION := '1.0E-9'; 0EXAMPLE := '0.003006009'; 0PREFIX := 'NANO'; 0SYMBOL := '/N'; .END; )'N': BEGIN 0NOTATION := '1.0E-12'; 0EXAMPLE : := 'DECI'; 0SYMBOL := '/D' .END; )'J': BEGIN 0NOTATION := '1.0E-2'; 0EXAMPLE := '0.01'; 0PREFIX := 'CENTI'; 0SYMBOL := '/C'; .END; )'K': BEGIN 0NOTATION := '1.0E-3'; 0EXAMPLE := '0.003'; 0PREFIX := 'MILLI'; 0SYMBOL := '/M'; .END; )'L': BEGI0NOTATION := '1.0E2'; 0EXAMPLE := '100'; 0PREFIX := 'HECTO'; 0SYMBOL := '/H'; .END; )'H': BEGIN 0NOTATION := '1.0E1'; 0EXAMPLE := '10'; 0PREFIX := 'DEKA'; 0SYMBOL := '/DA'; .END; )'I': BEGIN 0NOTATION := '1.0E-1'; 0EXAMPLE := '0.10'; 0PREFIX; 0SYMBOL := 'G'; .END; )'E': BEGIN 0NOTATION := '1.0E6'; 0EXAMPLE := '1003006'; 0PREFIX := 'MEGA'; 0SYMBOL := 'M'; .END; )'F': BEGIN 0NOTATION := '1.0E3'; 0EXAMPLE := '1003'; 0PREFIX := 'KILO'; 0SYMBOL := '/K'; .END; )'G': BEGIN '1003006009003006'; 0PREFIX := 'PETA'; 0SYMBOL := 'P'; .END; )'C': BEGIN 0NOTATION := '1.0E12'; 0EXAMPLE := '1003006009003'; 0PREFIX := 'TERA'; 0SYMBOL := 'T'; .END; )'D': BEGIN 0NOTATION := '1.0E9'; 0EXAMPLE := '1003006009'; 0PREFIX := 'GIGA' 2; #END; (*CLEARFROM*) # #PROCEDURE CHOICE; #BEGIN &READ (KEYBOARD,CH); &CASE CH OF )'A': BEGIN 0NOTATION := '1.0E18'; 0EXAMPLE :='1003006009003006009'; 0PREFIX := 'EXA'; 0SYMBOL := 'E'; .END; )'B': BEGIN 0NOTATION := '1.0E15'; 0EXAMPLE :=  (' TO CONTINUE: TO ABORT.'); &READ (KEYBOARD,CH); &IF (CH=CHR(27)) THEN EXIT (PROGRAM) &ELSE &HEADING; #END; (*INTRO*) & #PROCEDURE CLEARFROM; #BEGIN &GOTOXY (0,LINE); &WRITE (CHR(11)); &LINE := LINE+1; &IF LINE>12 THEN LINE :=ELN; &WRITELN ('SMALL TO LARGE "REAL" NUMBERS.'); &WRITELN; &WRITELN  (' THREE SELECTION OPTIONS ARE OFFERED.'); &WRITELN; &WRITELN  ('(SYMBOLS IN LOWER CASE PRECEDED BY A (/))'); # WRITELN;WRITELN; &WRITE DING*) # #PROCEDURE INTRODUCTION; #BEGIN &GOTOXY (5,4); &WRITELN  ('SCIENTIFIC NOTATION--A GUIDE'); &WRITELN;WRITELN; &WRITELN  (' PRESENTS THE STANDARD INTERNATIONAL'); &WRITELN; &WRITELN  ('PREFIXES AND SYMBOLS OF A RANGE OF VERY'); &WRITING[20]; )CH :CHAR; )LINE :INTEGER; ) #PROCEDURE HEADING; #BEGIN &PAGE (OUTPUT); &LINE := 2; &WRITELN  ('SCIENTIFIC : PREFIX : SYMBOL : EXAMPLE'); &WRITELN  ('--------------------------------------------'); #END; (*HEA PROGRAM SCINOTATION;   (*PRESENTS SCIENTIFIC NOTATION;SHOWS STANDARD INTERNATIONAL  PREFIXES AND SYMBOLS TO MATCH AND ORDINARY EXAMPLES.BY  MAX J.NAREFF,SAN FRANCISCO,CA.8/80*)  #VAR NOTATION, )PREFIX,SYMBOL :STRING; )EXAMPLE :STR= '0.003006009003'; 0PREFIX := 'PICO'; 0SYMBOL := '/P'; .END; )'O': BEGIN 0NOTATION := '1.0E-15'; 0EXAMPLE := '0.003006009003006'; 0PREFIX := 'FEMTO'; 0SYMBOL := '/F'; .END; )'P': BEGIN 0NOTATION := '1.0E-18'; 0EXAMPLE := '0.003006009003006009'; 0PREFIX := 'ATTO'; 0SYMBOL := '/A'; .END; &END; (*CASE*) #END; (*CHOICE*)  #PROCEDURE SCIENCENOTATION; &VAR CH :CHAR; #BEGIN &CLEARFROM; &GOTOXY (8,16); &WRITELN ('SCIENTIFIC NOTATION'); &WRITELN; &WRIT &SCIENTIFIC : PREFIX : SYMBOL : EXAMPLE,--------------------------------------------צSCIENTIFIC NOTATION--A GUIDEצ' PRESENTS THE STANDARD INTERNA" SCINOTAT #WRITELN ('THE END':23);  END. TION:8,':':4,PREFIX:6,':':4,SYMBOL:3,':':5,EXAMPLE); #END; (*DISPLAY*) #  BEGIN (*MAIN*) #PAGE (OUTPUT); #INTRODUCTION; #REPEAT &INDEX; &DISPLAY; &WRITELN ('ANOTHER?-->Y/N':27); &READ (KEYBOARD,CH) #UNTIL (CH = 'N'); #WRITELN; ); &WRITELN; &WRITE ('SELECT GROUP':26); &READ (KEYBOARD,CH); (BEGIN +CASE CH OF )'A': SCIENCENOTATION; )'B': SIPREFIX; )'C': SISYMBOL; +END; (*CASE*) (END; (*BEGIN*) #END; (*INDEX*) # #PROCEDURE DISPLAY; #BEGIN &CLEARFROM; &WRITELN  (NOTA :[P]:/A :'); &CHOICE; #END; (*SISYMBOL*) # #PROCEDURE INDEX; &VAR CH :CHAR; #BEGIN &GOTOXY (0,16); &WRITELN  ('[A] SCIENTIFIC NOTATION':30); &WRITELN  ('[B] STANDARD INTL.PREFIX':31); &WRITELN  ('[C] STANDARD INTL.SYMBOL':31&GOTOXY (5,16); &WRITELN  ('STANDARD SYMBOL (/-LOWER CASE)'); &WRITELN; &WRITELN  ('[A]: E :[B]: P :[C]: T :[D]: G :[E]: M'); &WRITELN  ('[F]:/K :[G]:/H :[H]:/DA:[I]:/D :[J]:/C'); &WRITELN  ('[K]:/M :[L]:/U :[M]:/N :[N]:/P :[O]:/F'); &WRITE  ('A'); &WRITELN  ('[E]:MEGA [F]:KILO [G]:HECTO [H]:DEKA'); &WRITELN  ('[I]:DECI [J]:CENTI [K]:MILLI [L]:MICRO'); &WRITE  ('[M]:NANO [N]:PICO [O]:FEMTO [P]:ATTO'); &CHOICE; #END; (*SIPREFIX*) & # #PROCEDURE SISYMBOL; #BEGIN &CLEARFROM; 0E-12 : [O]:1.0E-15'); &WRITE  (' : [P]:1.0E-18 :'); &CHOICE; #END; (*SCINOTAT*) # # #PROCEDURE SIPREFIX; #BEGIN &CLEARFROM; &GOTOXY (11,16); &WRITELN ('STANDARD PREFIX'); &WRITELN; &WRITELN  ('[A]:EXA [B]:PETA [C]:TERA [D]:GIGELN  ('[A]:1.0E+18 : [B]:1.0E+15 : [C]:1.0E+12'); &WRITELN  ('[D]:1.0E+9 : [E]:1.0E+6 : [F]:1.0E+3'); &WRITELN  ('[G]:1.0E+2 : [H]:1.0E+1 : [I]:1.0E-1'); &WRITELN  ('[J]:1.0E-2 : [K]:1.0E-3 : [L]:1.0E-6'); &WRITELN  ('[M]:1.0E-9 : [N]:1.TIONAL'PREFIXES AND SYMBOLS OF A RANGE OF VERYצSMALL TO LARGE "REAL" NUMBERS.צ( THREE SELECTION OPTIONS ARE OFFERED.צ)(SYMBOLS IN LOWER CASE PRECEDED BY A (/))& TO CONTINUE: TO ABORT.á  š,Uצ1.0E18P~1003006009003006009ת,EXAתPEPUצ1 (*6/17/80*)   PROGRAM WORDPROC;   VAR INTSTRING,WORD,INLINE,INPUTFILE,OUTLINE,OUTPUTFILE,TEMPSTRING,TITLE:STRING; $CMDLIST: STRING[120]; $INFILE,OUTFILE:TEXT;  INDENT,LINES,NUMCOPIES,PGLINES,PGSIZE,POSIT,STEP,WIDTH:INTEGER;  AIFLAG,BIGTN^:~\ ׶  ANOTHER?-->Y/NNáTHE ENDR^ tz : *  צ :[P]:/A :צ[A] SCIENTIFIC NOTATION[B] STANDARD INTL.PREFIX[C] STANDARD INTL.SYMBOL SELECT GROUPع  AC U:,:SE)צ&[A]: E :[B]: P :[C]: T :[D]: G :[E]: Mצ&[F]:/K :[G]:/H :[H]:/DA:[I]:/D :[J]:/Cצ&[K]:/M :[L]:/U :[M]:/N :[N]:/P :[O]:/Fצ :[P]:/A : [C]:TERA [D]:GIGA&[E]:MEGA [F]:KILO [G]:HECTO [H]:DEKA'[I]:DECI [J]:CENTI [K]:MILLI [L]:MICROצ&[M]:NANO [N]:PICO [O]:FEMTO [P]:ATTOצSTANDARD SYMBOL (/-LOWER CAצ&[J]:1.0E-2 : [K]:1.0E-3 : [L]:1.0E-6צ'[M]:1.0E-9 : [N]:1.0E-12 : [O]:1.0E-15 : [P]:1.0E-18 :P צSTANDARD PREFIX&[A]:EXA [B]:PETA Bi; e, pצSCIENTIFIC NOTATION'[A]:1.0E+18 : [B]:1.0E+15 : [C]:1.0E+12צ&[D]:1.0E+9 : [E]:1.0E+6 : [F]:1.0E+3צ&[G]:1.0E+2 : [H]:1.0E+1 : [I]:1.0E-1PUצ1.0E-9P~ 0.003006009ת,NANOתPצ/NPU1.0E-12תP~0.003006009003ת,צPICOP/PתPUצ1.0E-15P~צ0.003006009003006,צFEMTOPצ/FPgU1.0E-18תP~0.003006009003006009ת,צATTOP/AתP(:AP 4l,HECTOתP/HתPUצ1.0E1P~צ10,DEKAתPצ/DAPUצ1.0E-1P~0.10ת,צDECIP/DתPUצ1.0E-2P~0.01ת,צCENTIPצ/CPU1.0E-3תP~צ0.003,צMILLIPצ/MPU1.0E-6תP~צ0.000006,MICROתP/U.0E15P~1003006009003006ת,צPETAPPPUצ1.0E12P~ 1003006009003ת,TERAתPTPU1.0E9תP~ 1003006009ת,צGIGAPGPUצ1.0E6P~צ1003006,צMEGAPMPUצ1.0E3P~צ1003,KILOתPצ/KPU1.0E2תP~100תITLFLAG,DSFLAG,ENHANCFLAG,ILFLAG,INDFLAG,JUSTFLAG:BOOLEAN;  MORE,NLFLAG,TITLFLAG,UCFLAG:BOOLEAN;   PROCEDURE SENDPRINTER(SEND:INTEGER);  CONST PRINTER=6;  BEGIN; "IF OUTPUTFILE='PRINTER:' THEN UNITWRITE(PRINTER,SEND,1,0,12);  END(*SENDPRINTER*);   PROCEDURE PAGEUP;  BEGIN; "SENDPRINTER(12); (*FF*) "PGLINES:=0; "WRITELN(OUTFILE); "WRITELN(OUTFILE);  IF TITLFLAG THEN BEGIN; $IF BIGTITLFLAG AND NOT ENHANCFLAG THEN SENDPRINTER(1); $WRITELN(OUTFILE,TITLE); $IF BIGTITLFLAG AND NOT ENHANC"IF LENGTH(WORD)>4 THEN NUM:=DEC(COPY(WORD,4,LENGTH(WORD)-4)); "CASE (1+POS(COPY(WORD,1,3),CMDLIST) DIV 3) OF $1: (*AI*) AIFLAG:=TRUE; $2: (*BT*) BIGTITLFLAG:=TRUE; $3: (*CM*) POSIT:=LENGTH(INLINE); $4: (*DS*) DSFLAG:=TRUE; $5: (*EA*) AIFLAG:=FALSE;END(*TAB*);  PROCEDURE NL;  VAR I:INTEGER;  BEGIN; "NLFLAG:=TRUE; "SENDOUT; "IF INDFLAG AND NOT(ILFLAG) AND (INDENT>0) THEN $FOR I:=1 TO INDENT DO OUTLINE:=CONCAT(OUTLINE, ' ');  END(*NL*);  BEGIN; RD);  END(*PLACEIN*); PROCEDURE COMMAND;  VAR I,NUM:INTEGER;  PROCEDURE TAB;  BEGIN; "IF NUM>0 THEN "BEGIN; $WORD:=''; $FOR I:=1 TO NUM DO WORD:=CONCAT(WORD,' '); $PLACEIN; "END "ELSE IF NUM<0 THEN DELETE(OUTLINE,NUM+LENGTH(OUTLINE),-1*NUM);  (OUTLINE[1]=' ')) THEN &DELETE(OUTLINE,1,INDENT); "IF LENGTH(WORD)+LENGTH(OUTLINE)>WIDTH+1 THEN "BEGIN; $SENDOUT; $IF INDFLAG AND NOT(ILFLAG) AND (INDENT>0) THEN &FOR I:=1 TO INDENT DO OUTLINE:=CONCAT(OUTLINE,' '); "END; "OUTLINE:=CONCAT(OUTLINE,WO"IF JUSTFLAG THEN JUST; "WRITELN(OUTFILE,OUTLINE); "INCLINE; "IF DSFLAG THEN "BEGIN; $WRITELN(OUTFILE); $INCLINE; "END; "OUTLINE:='';  END(*SENDOUT*);   PROCEDURE PLACEIN;  VAR I:INTEGER;  BEGIN; "IF LENGTH(OUTLINE)>0 THEN $IF (ILFLAG AND INCLINE;  BEGIN;  PGLINES:=PGLINES+1; "IF PGLINES>PGSIZE THEN PAGEUP;  END(*INCLINE*);   BEGIN; "IF LENGTH(OUTLINE)>0 THEN $WHILE ((OUTLINE[LENGTH(OUTLINE)]=' ') AND (LENGTH(OUTLINE)>1)) DO &DELETE(OUTLINE,LENGTH(OUTLINE),1); NOT UCFLAG THEN FLAGCASE:=32 ELSE FLAGCASE:=0; $END $ELSE IF WORD[I]='/' THEN FLAGCASE:=0 " ELSE BEGIN; &TEMPWORD[J]:=WORD[I+1]; " I:=I+1; $ J:=J+1; $END; "END; "WORD:=COPY(TEMPWORD,1,J-1);  END(*UPLOW*);   PROCEDURE SENDOUT;  PROCEDURELSE FLAGCASE:=0; "TEMPWORD:=WORD; "J:=1; "FOR I:=1 TO LENGTH(WORD) DO "BEGIN; $IF (WORD[I]<>'/') AND (WORD[I]<>'^') THEN BEGIN; &IF WORD[I] IN ['A'..'Z'] THEN (TEMPWORD[J]:=CHR(ORD(WORD[I])+FLAGCASE) $ ELSE TEMPWORD[J]:=WORD[I]; &J:=J+1; $ IF&IF (X>WIDTH) AND (STEP=1) THEN X:=NONBLK; &IF (X0 DO $BEGIN &IF COPY(OUTLINE,X,1)<>' ' THEN X:=X+STEP (ELSE BEGIN (INSERT(' ',OUTLINE,X); (BLANKS:=BLANKS-1; (WHILE (COPY(OUTLINE,X,1)=' ') AND (X>=NONBLK) DO X:=X+STEP; (END; "BEGIN; $COUNT:=LENGTH(OUTLINE); $BLANKS:=WIDTH-COUNT; $NONBLK:=1; $IF OUTLINE[1]=' ' THEN $ WHILE OUTLINE[NONBLK]=' ' DO NONBLK:=NONBLK+1 $ ELSE IF INDFLAG THEN NONBLK:=INDENT+1; $IF STEP=1 THEN BEGIN; &STEP:=-1; &X:=WIDTH; $END $ELSE BEGIN; GIN; "TEMP:=ORD(S[LENGTH(S)])-48; "FOR I:=1 TO (LENGTH(S)-1) DO "BEGIN; $TEMP:=TEMP+(ORD(S[I])-48)*ROUND(PWROFTEN(LENGTH(S)-I)); "END; "DEC:=TEMP;  END(*DEC*);   PROCEDURE JUST;  VAR BLANKS,COUNT,NONBLK,X:INTEGER;  BEGIN; "IF NOT NLFLAG THEN %BYTEFACE=RECORD CASE BOOLEAN OF .TRUE: (INT: INTEGER); .FALSE:(PTR: ^PAB); .END;  VAR BCHEAT: BYTEFACE;  BEGIN; "BCHEAT.INT:=-16384;  KEYPRESS:=(BCHEAT.PTR^[0]>127);  END(*KEYPRESS*); FUNCTION DEC (S:STRING):INTEGER;  VAR I,TEMP:INTEGER;  BEFLAG THEN SENDPRINTER(2); $WRITELN(OUTFILE); $WRITELN(OUTFILE); $PGLINES:=3; "END;  END(*PAGEUP*);  PROCEDURE ENDPGM;  BEGIN; "GOTOXY(0,0); "PAGE(OUTPUT);  END(*ENDPGM*);   FUNCTION KEYPRESS:BOOLEAN;  TYPE PAB=PACKED ARRAY[0..1] OF 0..255; $6: (*EI*) INDFLAG:=FALSE; $7: (*EJ*) JUSTFLAG:=FALSE; $8: (*EL*) BEGIN; 0ILFLAG:=FALSE; 0NUM:=INDENT-LENGTH(OUTLINE); 0IF NUM>0 THEN TAB; .END; $9: (*EM*) IF NOT ENHANCFLAG THEN .BEGIN; 0ENHANCFLAG:=TRUE; 0SENDPRINTER(1); .END; #10: (*ET*) BEGIN; 0TITLE:=OUTLINE; 0OUTLINE:=''; 0TITLFLAG:=TRUE; .END; #11: (*IF*) IF (PGSIZE-PGLINES)0 THEN NL; 0PAGEUP; .END; #12: (*IL*) ILFLAG:=TRUE; #13: (*IM*) INDFLAG:=TRUE; #14: (*IS*) INDENT:=NUM; #15: (*IT*"WRITE('OUTPUT FILE? '); "READLN(OUTPUTFILE); "IF LENGTH(OUTPUTFILE)<1 THEN OUTPUTFILE:='PRINTER:'; "IF OUTPUTFILE[1]=CHR(27) THEN EXIT(PROGRAM); "IF (OUTPUTFILE<>'CONSOLE:') AND (OUTPUTFILE<>'PRINTER:') THEN "BEGIN; $IF LENGTH(OUTPUTFILE)<6 THEN &(INPUTFILE:=CONCAT('#4:',INPUTFILE); (RESET(INFILE,INPUTFILE); (IOSUCCESS:=(IORESULT=0); &END; $END; $IF NOT IOSUCCESS THEN WRITELN('FILE NOT FOUND'); $(*I+*) "END; "CLOSE(INFILE); "WRITELN(' PASCAL WORD PROCESSOR USES ',INPUTFILE); PROGRAM); " CLOSE(INFILE); $(*$I-*) $RESET(INFILE,INPUTFILE); $IOSUCCESS:=(IORESULT=0); $IF NOT IOSUCCESS THEN $BEGIN; &INPUTFILE:=CONCAT(INPUTFILE,'.TEXT'); $ RESET(INFILE,INPUTFILE); &IOSUCCESS:=(IORESULT=0); &IF NOT IOSUCCESS THEN &BEGIN; FAULTS'); "WRITELN(',CR TO TERMINATE'); "WRITELN; "IOSUCCESS:=FALSE; "WHILE NOT IOSUCCESS DO "BEGIN; $WRITE('INPUT FILE? '); $READLN(INPUTFILE); $IF LENGTH(INPUTFILE)<1 THEN INPUTFILE:='#4:SYSTEM.WRK.TEXT'; $IF INPUTFILE[1]=CHR(27) THEN EXIT( VAR IOSUCCESS:BOOLEAN;  BEGIN; "PAGE(OUTPUT); "WRITELN('PASCAL WORD PROCESSOR - 6/11/80'); "WRITELN; "WRITELN('INPUT DEFAULT IS SYSTEM.WRK.TEXT'); "WRITELN('OUTPUT DEFAULT IS PRINTER:'); "WRITELN('COPIES DEFAULT IS 1'); "WRITELN('CR TO UTILIZE DEOSIT+1]<>' ' THEN DELETE(WORD,LENGTH(WORD),1); &END; &IF (WORD[1]='^') AND (NOT(WORD[2] IN ['/','^'])) THEN COMMAND &ELSE BEGIN; (UPLOW; (PLACEIN;  END; $END; "END; "NLFLAG:=TRUE; "SENDOUT;  END(*PROCESS*);   PROCEDURE GETFILES; IT' ')) DO &BEGIN; (POSIT:=POSIT+1; &END; &WORD:=COPY(INLINE,TEMP,POSIT-TEMP+1); &IF WORD[LENGTH(WORD)-1] IN ['.',':','?','!'] THEN &BEGIN; (WORD:=CONCAT(WORD,' '); (IF POSIT+1<=LENGTH(INLINE) THEN *IF INLINE[PS); (END; (WRITELN; $ END; $END; $NEXTIN; $WORD:=' '; $WHILE NOT EOF(INFILE) AND (COPY(INLINE,POSIT,1)=' ') DO $BEGIN; &POSIT:=POSIT+1; &IF AIFLAG THEN PLACEIN; &NEXTIN; $END;  IF NOT EOF(INFILE) THEN $BEGIN; &TEMP:=POSIT; &WHILE ((POS"POSIT:=LENGTH(INLINE); "WHILE NOT (EOF(INFILE)) DO "BEGIN;  IF KEYPRESS THEN $BEGIN; &READ(KEYBOARD,CH); $ IF CH>=' ' THEN &BEGIN; (WRITE(CHR(7),'TERMINATE? ',CHR(7)); (READ(INPUT,CH); (IF CH='Y' THEN (BEGIN; *NUMCOPIES:=1; *EXIT(PROCESH:CHAR;  PROCEDURE NEXTIN;  BEGIN;  IF POSIT=LENGTH(INLINE) THEN "BEGIN; $INLINE:=''; $WHILE NOT(EOF(INFILE)) AND (LENGTH(INLINE)<1) DO READLN(INFILE,INLINE); $INLINE:=CONCAT(INLINE,' '); $POSIT:=1; "END;  END(*NEXTIN*);  BEGIN(*PROCESS*); IN; 0IF NUM>WIDTH THEN NUM:=NUM-WIDTH; 0NUM:=NUM-LENGTH(OUTLINE); 0TAB; .END; #31: (*TI*) IF LENGTH(OUTLINE)>0 THEN NL; #32: (*UC*) UCFLAG:=TRUE; #33: (*UL*) UCFLAG:=FALSE; #END;  END(*COMMAND*);   PROCEDURE PROCESS;  VAR TEMP:INTEGER;  C; #24: (*PP*) FOR I:=1 TO 3 DO NL; #25: (*PS*) PGSIZE:=NUM; #26: (*RS*) BEGIN; 0WIDTH:=66; 0INDENT:=5; 0PGSIZE:=55; .END; #27: (*SK*) IF NUM>0 THEN FOR I:=1 TO NUM DO NL; #28: (*SS*) DSFLAG:=FALSE; #29: (*ST*) BIGTITLFLAG:=FALSE; #30: (*TB*) BEG#22: (*PD*) IF NUM IN [8,10,12,16] THEN .BEGIN; 0IF NUM=8 THEN SENDPRINTER(28) 2ELSE IF NUM=10 THEN SENDPRINTER(29) 4ELSE IF NUM=12 THEN SENDPRINTER(30) 6ELSE SENDPRINTER(31); .END; #23: (*PG*) BEGIN; 0IF LENGTH(OUTLINE)>0 THEN NL; 0PAGEUP; .END) TITLFLAG:=TRUE; #16: (*JS*) JUSTFLAG:=TRUE; #17: (*LC*) UCFLAG:=FALSE; #18: (*LW*) WIDTH:=NUM; #19: (*NL*) NL; #20: (*NM*) IF ENHANCFLAG THEN .BEGIN; 0ENHANCFLAG:=FALSE; 0SENDPRINTER(2); .END; #21: (*NT*) TITLFLAG:=FALSE; OUTPUTFILE:=CONCAT(OUTPUTFILE,'.TEXT') &ELSE IF COPY(OUTPUTFILE,LENGTH(OUTPUTFILE)-4,5)<>'.TEXT' THEN (OUTPUTFILE:=CONCAT(OUTPUTFILE,'.TEXT'); "END; "WRITELN(' PASCAL WORD PROCESSOR USES ',OUTPUTFILE); "WRITE('NUMBER OF COPIES? '); "READLN(TEMPSTRING);  IF LENGTH(TEMPSTRING)<1 THEN TEMPSTRING:='1';  IF TEMPSTRING[1]=CHR(27) THEN EXIT(PROGRAM); "NUMCOPIES:=DEC(TEMPSTRING);  END(*GETFILES*);   PROCEDURE INIT;  BEGIN; "RESET(INFILE,INPUTFILE); "REWRITE(OUTFILE,OUTPUTFILE); "CMDLIST:='^AI^ȡ ثB7šȡ |ةšةإ~ b~šVPJE!ByuqmiTG6 |xt\RNNV 䥀áRצP쩃~š 퓡~P~תP婃ɡ ~šثثس!á á á~š šCצPȡ'Pצ QP ɡ~~NTn  멃쓄ń/ȡ"~~Pצ QP *V PšK ~š~~ å~ń ~~~  ~צP+T d ~š~ Ä ~~šA 멃쓄ń/ȡ"~~Pצ QP~~PǠPF **P+,-,-ȡ,/˥,^˄O,+,* +,++ **+,/á*+,,,++,,-+-P 橃橃š-..-.XR~ڕ~ á~ٛ á á 㩃ši~  ة- ץ~P~ Ą ةةũÄɩÄ yMZUצPRINTER:  " 楁A暑퓄暑퓄'f @ڪP0-././ȡ!-.0.$" WORDPROC "ENDPGM;  END. ='CONSOLE:')) THEN (CLOSE(OUTFILE,LOCK) (ELSE CLOSE(OUTFILE); &CLOSE(INFILE); &SENDPRINTER(12); (*FF*) $END; " WRITELN; $WRITE('MORE? '); $READLN(TEMPSTRING); $IF LENGTH(TEMPSTRING)<1 THEN MORE:=FALSE &ELSE MORE:=NOT(TEMPSTRING[1]<>'Y'); "END;CPI*) "WRITELN(OUTFILE); "WRITELN(OUTFILE);  END(*INIT*);   BEGIN(*MAIN*); "MORE:=TRUE; "WHILE MORE DO "BEGIN; $GETFILES; $WHILE NUMCOPIES>0 DO $BEGIN; &INIT; &PROCESS; &NUMCOPIES:=NUMCOPIES-1; &IF NOT((OUTPUTFILE='PRINTER:') OR (OUTPUTFILE"INLINE:=''; "JUSTFLAG:=FALSE; "LINES:=0; "NLFLAG:=FALSE; "OUTLINE:=''; "PGLINES:=0; "PGSIZE:=55; "STEP:=1; "TITLE:=''; "TITLFLAG:=FALSE; "UCFLAG:=FALSE; "WIDTH:=66; "SENDPRINTER(2); (*DEFAULT NORMAL DENSITY*) "SENDPRINTER(29); (*DEFAULT 10 BT^CM^DS^EA^EI^EJ^EL^EM^ET^IF^IL^IM^IS^IT^JS^LC^LW'; "CMDLIST:=CONCAT(CMDLIST,'^NL^NM^NT^PD^PG^PP^PS^RS^SK^SS^ST^TB^TI^UC^UL'); "AIFLAG:=FALSE; "BIGTITLFLAG:=FALSE; "DSFLAG:=FALSE; "ENHANCFLAG:=FALSE; "ILFLAG:=FALSE; "INDENT:=5; "INDFLAG:=FALSE; ɄPP QPMR h䥂 Y ġJ TERMINATE? Yá P  䩃  䥀ɥЩ䛾 ˄ ةؕP@DP QPȡЩ ˡ ^å@   ~V PASCAL T MATERIAL ITSELF AS WELL AS  IMBEDDED FORMAT COMMANDS.  /THESE FORMAT COMMANDS ARE OF THE  FORM ^^/A/A (WHERE /A/A REPRESENTS TWO  ALPHABETIC CHARACTERS).  /THE /PASCAL /WORD /PROCESSOR ALSO  RECOGNIZES ^//A (WHERE /A IS ANY  ALPHABETIC CHARACTER) TEXT TO BE  PRINTED (ALONG WITH FORMAT COMMANDS)  USING THE /PASCAL /EDITOR.  /ANY ERRORS IN TEXT OR FORMAT ARE ALSO  CORRECTED USING THE /PASCAL /EDITOR.  ^PP /THE TEXTUAL MATERIAL ENTERED USING  THE /PASCAL /EDITOR PROGRAM WILL CONSIST  OF THE TEX^TI ^UC PASCAL WORD PROCESSOR ^LC ^ET  ^BT ^PG ^JS ^NL /THE /PASCAL /WORD  /PROCESSOR ALLOWS THE USER TO PRINT  NEATLY FORMATTED REPORTS, MANUALS,  DOCUMENTS ETC.  /IT IS USED IN CONJUNCTION WITH THE  /PASCAL /EDITOR PROGRAM.  /THE USER ENTERS THE N^qBIM^IS^IT^JS^LC^LWxKKxצ-^NL^NM^NT^PD^PG^PP^PS^RS^SK^SS^ST^TB^TI^UC^ULǥx륀ЦתP~צP7תPBšJUצPRINTER:UCONSOLE:ׯ  MORE? ,P,ɡ ,Y˓` @  V <$Kצ6^AI^BT^CM^DS^EA^EI^EJ^EL^EM^ET^IF^IL^IM^IS^IT^JS^LC^LWxKKxצ-^NL^NM^NT^PD^PG^PP^PS^RS^SK^SS^ST^TB^TI^UC^ULǥx륀ЦתP~צP7תPBšJ.TEXT׷UUPצ.TEXTUP PASCAL WORD PROCESSOR USES UNUMBER OF COPIES? ,P,ɡ,1P,á,X UKצ6^AI^BT^CM^DS^EA^EI^EJ^EL^EM^ET^IF^IL^צFILE NOT FOUND PASCAL WORD PROCESSOR USES צ OUTPUT FILE? UPUɡUPRINTER:תPUáUCONSOLE:׷UצPRINTER:dUɡ!UUP.TEXTUP;UUؓ INPUT FILE? Pɡצ#4:SYSTEM.WRK.TEXTPá"ؓfPצ.TEXTUP"ؓ0#4:SP"ؓWORD PROCESSOR - 6/11/80צ INPUT DEFAULT IS SYSTEM.WRK.TEXTצOUTPUT DEFAULT IS PRINTER:צCOPIES DEFAULT IS 1CR TO UTILIZE DEFAULTS,CR TO TERMINATEAS A CASE SHIFT.  /THUS IF THE USER IS IN THE NORMAL  LOWER CASE MODE, THEN ^/THE WILL  PRINT /THE.  ^PP  /THE BASIC UNIT OF TEXT IS THE  PARAGRAPH.  /NEW PARAGRAPHS ARE SIGNALLED BY  ^^/P/P AT THE BEGINNING.  /EACH TIME THE /PASCAL /WORD /PROCESSOR  ENCOUNTERS ^^/P/P, IT WILL SKIP  TWO LINES AND BEGIN A NEW PARAGRAPH.  /TEXT WITHIN A PARAGRAPH IS ENTIRELY  FREE FORM. /THE /PASCAL /WORD  /PROCESSOR WILL FIT THE MAXIMUM NUMBER  OF WORDS ON EACH LINE THATGTH(55), AND /INDENT(5).  ^CM SK  ^PP ^IL ^^/S/KNN ^EL  /SKIP NN LINES.  ^CM SS  ^PP ^IL ^^/S/S ^EL  /ENTER SINGLE SPACE MODE.  ^CM ST  ^PP ^IL ^^/S/T ^EL  /PRINT TITLE IN NORMAL MODE (SMALL  TITLE).  ^CM TB  ^PP ^IL ^^/T/BNN ^EL  /POSITION THE FIRST COLUMN AND START A NEW  PARAGRAPH.  ^CM PS  ^PP ^IL ^^/P/SNN ^EL  /SET THE NUMBER OF PRINTED LINES PER  PAGE TO NN. /THE DEFAULT NUMBER OF  PRINTED LINES IS 55.  ^CM RS  ^PP ^IL ^^/R/S ^EL  /RESET TO DEFAULT /PAGE /WIDTH(66),  /PAGE /LEN /PRINTER. 8, 10, 12, OR 16 CHARACTERS  PER INCH MAY BE SELECTED AS NN.  /DEFAULT SETTING IS 10 /C/P/I.  ^CM PG  ^PP ^IL ^^/P/G ^EL  /EXECUTE A FORM FEED (LINE PRINTER).  ^CM PP  ^PP ^IL ^^/P/P ^EL  /SKIP TWO LINES. /POSITION PRINT HEAD  AT TH /ENDS THE ENHANCED PRINTING MODE.  ^CM NT  ^PP ^IL ^^/N/T ^EL  /SUPPRESSES THE TITLE ON ALL SUBSEQUENT  PAGES.  ^CM PD  ^PP ^IL ^^/P/DNN ^EL  /ALLOWS SELECTION OF DIFFERENT PRINT  DENSITIES FOR THE /PAPER /TIGER WIDTH TO NN. /THE  DEFAULT LINE WIDTH IS 66 CHARACTERS.  ^CM NL  ^PP ^IL ^^/N/L ^EL  /EXECUTE A CARRIAGE-RETURN AND LINE FEED  TO POSITION THE PRINT HEAD AT THE  BEGINNING OF A NEW LINE. /OVERRIDES  PARAGRAPH RULES.  ^CM NM  ^PP ^IL ^^/N/M ^EL  ^CM JS  ^PP ^IL ^^/J/S ^EL  /ENTER THE /RIGHT-/JUSTIFICATION MODE.  /TEXT WILL BE RIGHT JUSTIFIED BY  ADDING SPACES WITHIN THE TEXT.  ^CM LC OR UL  ^PP ^IL ^^/L/C OR ^^/U/L ^EL  /SET LOWER CASE MODE.  ^CM LW  ^PP ^IL ^^/L/WNN ^EL  /SET THE LINE  /INDENTS ALL SUBSEQUENT TEXT. /THE  INDENT WILL BE 5 SPACES UNLESS RESET  BY THE ^^/I/S COMMAND.  ^CM IS  ^PP ^IL ^^/I/S ^EL  /SETS THE INDENT VALUE TO NN.  ^CM IT  ^PP ^IL ^^/I/T ^EL  /RE-ACTIVATES PRINTING OF TITLE ON ALL  SUBSEQUENT PAGES.  PAGE. /AVOIDS  PRINTING OF HEADINGS AS THE LAST  LINES ON A PAGE. /SKIPS IF LINE IS  WITHIN THE LAST NN LINES.  ^CM IL  ^PP ^IL ^^/I/L ^EL  /START A LABEL AT THE LEFT MARGIN DURING  INDENT MODE.  ^CM IM  ^PP ^IL ^^/I/M ^EL /ENDS THE RIGHT-JUSTIFY MODE.  ^CM EL  ^PP ^IL ^^/E/L ^EL  /FLAGS THE END OF A LABEL.  ^CM EM  ^PP ^IL ^^/E/M ^EL  /ENTER THE ENHANCED PRINTING MODE.  ^CM ET  ^PP ^IL ^^/E/T ^EL  /ENDS THE TITLE.  ^CM IF  ^PP ^IL ^^/I/FNN ^EL  /CONDITIONAL NEWWILL BE REGARDED AS A  COMMENT AND WILL NOT BE PROCESSED.  ^CM DS  ^PP ^IL ^^/D/S ^EL  /SET DOUBLE SPACE MODE.  ^CM EA  ^PP ^IL ^^/E/A ^EL  /END THE /AS-/IS MODE.  ^CM EI  ^PP ^IL ^^/E/I ^EL  /ENDS THE INDENT MODE.  ^CM EJ  ^PP ^IL ^^/E/J ^EL  /ENTER THE /AS-/IS MODE. /THIS WILL  DEFEAT THE EXTRA SPACE SUPPRESSION  FEATURE OF THE NORMAL PARAGRAPH  MODE OF OPERATION.  ^CM BT  ^PP ^IL ^^/B/T ^EL  /FLAGS TITLE TO BE PRINTED IN ENHANCED  MODE.  ^CM CM  ^PP ^IL ^^/C/M ^EL  /REST OF LINE PRINTING  MODES CANNOT BE MIXED ON THE SAME LINE.  ^PP /THE FORMAT COMMANDS ARE LISTED  ON THE FOLLOWING PAGES.  ^PG ^EJ ^NL  ^IM ^IS20 ^IL ^UC COMMAND ^EL FUNCTION  ^LC ^NL ^IL ------- ^EL --------  ^CM AI  ^JS ^PP ^IL ^^/A/I ^EL WORD /PROCESSOR IS  DESIGNED TO BE USED IN CONJUNCTION WITH  THE /INTEGRAL /DATA /SYSTEM PRINTER  /MODEL 440.  /SPECIAL COMMANDS ARE INCLUDED TO ALLOW  PRINTING IN DIFFERENT PRINT DENSITIES  AND^/OR IN ENHANCED MODE.  /NOTE THAT ENHANCED AND NORMAL IT CAN  WITHOUT VIOLATING THE LINE WIDTH LIMITS.  /THUS ALL EXTRA SPACES WILL BE  SUPPRESSED ON PRINT OUT.  /OTHER COMMANDS SUCH AS ^^/A/I  (/AS-IS /MODE) ARE USED TO SUPPRESS  THIS PARAGRAPH MODE OF OPERATION.  ^PP /THIS VERSION OF  THE /PASCAL /E PRINT HEAD TO COLUMN NN.  /OVERRIDES THE PARAGRAPH MODE.  ^CM TI  ^PP ^IL ^^/T/I ^EL  /FLAGS THE FOLLOWING TEXT AS A TITLE  TO BE PRINTED ON EACH PAGE.  (NOTE: TITLE MUST BE FOLLOWED BY A  ^^/P/G COMMAND TO ENSURE PRINTING  TITLE ON THE FIRST PAGE).  ^CM UC  ^PP ^IL ^^/U/C ^EL  /SET UPPER CASE MODE.  ^EJ "WHILE I<=LENGTH(WS) DO $BEGIN &IF(WS[I]=APOSTROPHE) AND B THEN (BEGIN *INSERT(APOSTROPHE,WS,I); I:=I+1 (END &ELSE (IF WS[I]='@' THEN *BEGIN DELETE(WS,I,1); *IF B THEN INSERT(''',',WS,I) *ELSE INSERT(',''',WS,I); *I:=I+1; B:=NOT(B) *END; &I:=&IF ORD(C)MOD 4 =0 THEN WRITELN(O); $END; "WRITELN(O,'END;');  END;  PROCEDURE T(WS:STRING);  VAR "I:INTEGER; "B:BOOLEAN;  BEGIN "WRITE(O,'WRITE'); "IF WS[LENGTH(WS)]=';' THEN $WS:=COPY(WS,1,LENGTH(WS)-1) "ELSE WRITE(O,'LN'); "I:=1; B:=TRUE; "WRITELN(O,'BEGIN X:=CONCAT('','',ANS,'',''); Y:=CONCAT('','',S,'','');'); "WRITELN(O,'FLAG:=POS(X,Y)>0 '); "WRITELN(O,'END;'); "WRITELN(O,'PROCEDURE INITIALIZE;'); "WRITELN(O,'BEGIN'); "FOR C:='A' TO 'Z' DO $BEGIN &WRITE(O,C,':=0;',C,'S:='''';'); S,IS,JS,KS,LS,'); "WRITELN(O,'MS,NS,OS,PS,QS,RS,SS,TS,US,VS,WS,XS,YS,ZS:STRING;'); "WRITELN(O,'ANS:STRING; FLAG:BOOLEAN;'); "WRITELN(O,'PROCEDURE MATCH(S:STRING); VAR X,Y:STRING;'); NAME,';'); "WRITELN(O,'(*$G+*)'); "WRITELN(O,'LABEL 0,1,2,3,4,5,6,7,8,9,10;'); "WRITELN(O,'TYPE CHARSET=SET OF CHAR;'); "WRITELN(O,'VAR A,B,C,D,E,F,G,H,I,J,K,'); "WRITELN(O,'L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z:INTEGER;'); "WRITELN(O,'AS,BS,CS,DS,ES,FS,GS,HS); "WRITELN('ERROR: ',MESSAGE); "WRITELN('TYPE ANYTHING TO CONTINUE'); "READLN(ZZZ); "BADSYNTAX:=TRUE  END;   PROCEDURE SKIP;  BEGIN "WHILE I^=' ' DO GET(I)  END;   PROCEDURE TRANSLATE;   PROCEDURE HEADING;  BEGIN "WRITELN(O,'PROGRAM ',(* L+*)  PROGRAM PILOT;  CONST "APOSTROPHE=''''; "EL=10;  VAR "BADSYNTAX:BOOLEAN; "ZZZ, "WS, "NAME:STRING; "I,O:TEXT; "VARIABLES,DIGITS,LETTERS:SET OF CHAR; "C:CHAR; "J:INTEGER; "  PROCEDURE ERROR(MESSAGE:STRING);  BEGIN "WRITELN(WN^hI+1 $END; "WRITELN(O,'(''',COPY(WS,3,LENGTH(WS)-2),''');'); "IF NOT B THEN ERROR('UNMATCHED @')  END;  PROCEDURE LINE;  VAR "J:INTEGER;  BEGIN "SKIP; "IF I^ IN DIGITS THEN $BEGIN READ(I,C); WRITE(O,C,':'); $SKIP; IF I^IN DIGITS THEN ERROR('LABEL MUST BE SINGLE DIGIT') $END; "READLN(I,WS); "IF WS[1] IN['Y','N'] THEN $BEGIN &IF WS[1] = 'Y' THEN (WRITE(O,'IF FLAG THEN ') &ELSE WRITE(O,'IF NOT FLAG THEN '); &WS:=COPY(WS,2,LENGTH(WS)-1) $END; "IF LENGT1 YN^"WRITE('TRANSLATE WHAT FILE?'); "READLN(NAME); "RESET(I,CONCAT(NAME,'.TEXT')); "REWRITE(O,CONCAT(NAME,'.P.TEXT')); "WRITE('START TRANSLATE'); "TRANSLATE; "IF BADSYNTAX THEN $CLOSE(O,PURGE) "ELSE $CLOSE(O,LOCK)  END. ' ELN('*:',NAME); #WRITELN(O,'BEGIN INITIALIZE; '); #WHILE NOT EOF(I) DO %LINE; #WRITELN(O,EL,':END.') !END; % %  BEGIN (* PILOT *) "VARIABLES:=['A'..'Z'];DIGITS:=['0'..'9']; LETTERS:=['A'..'Z']; "BADSYNTAX:=FALSE; %BEGIN READLN(I,WS); WRITELN(WS); 'WRITELN(O,'PROCEDURE ',COPY(WS,3,LENGTH(WS)-2),';'); 'WRITELN(O,'LABEL 0,1,2,3,4,5,6,7,8,9,10;'); 'WRITELN(O,'BEGIN'); 'WHILE (I^<>'*') AND (NOT(EOF(I))) DO )LINE; 'WRITELN(O,EL,':END;'); 'READLN(I) %END; #WRITABLE EXPECTED'); )4: IF(WS[3] IN VARIABLES)AND(WS[4]='S') THEN .WRITELN(O,'READLN(',COPY(WS,3,2),');') ,ELSE ERROR('STRING VARIABLE EXPECTED') *END %END; SKIP  END;  BEGIN (*TRANSLATE*) #WRITELN('TRANSLATING...'); #HEADING; SKIP; #WHILE I^='*' DO%'X': WRITELN(O,'FLAG:=',COPY(WS,3,LENGTH(WS)-2),';'); %'A': IF LENGTH(WS)>4 THEN ERROR('ASK STATEMENT TOO LONG') *ELSE CASE LENGTH(WS) OF )2: WRITELN(O,'READLN(ANS);'); )3: IF WS[3] IN VARIABLES THEN WRITELN(O,'READLN(',WS[3],');') ,ELSE ERROR('VARIF NOT (WS[3] IN DIGITS) THEN ERROR('DIGIT EXPECTED'); ,WRITELN(O,'GOTO ',WS[3],';') *END; %'E': WRITELN(O,'GOTO ',EL,';'); %'C': WRITELN(O,COPY(WS,3,LENGTH(WS)-2),';'); %'U': WRITELN(O,COPY(WS,3,LENGTH(WS)-2)); E WS[1] OF  'R': WRITELN(O,'(*',COPY(WS,3,LENGTH(WS)-2),'*)'); %'T': T(WS); %'M': BEGIN IF WS[3]='@' THEN ,WRITELN(O,'MATCH(',COPY(WS,4,LENGTH(WS)-4),');') ,ELSE WRITELN(O,'MATCH(''',COPY(WS,3,LENGTH(WS)-2),''');'); *END; %'J': BEGIN % IH(WS)>2 THEN IF WS[3]=' ' THEN DELETE(WS,3,1); "IF LENGTH(WS)<2 THEN $ERROR('LINE TOO SHORT') "ELSE $IF WS[2]<>':' THEN &ERROR('COLON EXPECTED') $ELSE &IF NOT(WS[1] IN ['T','R','A','M','J','E','C','U','X']) THEN (ERROR('ILLEGAL COMMAND') &ELSE CASPROGRAM MEMDISP;  "(* MODIFICATION OF DISKDISP BY STEVE LLOYD &BY JEFFREY SUE *) & "(* CONTRIBUTED TO THE S.F. APPLE CORE *) "  TYPE BUF = PACKED ARRAY[0..15] OF CHAR;   VAR "ADDR: PACKED RECORD $CASE BOOLEAN OF &FALSE: (I:INTEGER); &T"GETADDR; "FIRST := FALSE; "WHILE FLAG DO "BEGIN $SHOW; $PROMPT; $GETADDR; "END;  END. (* MEMDISP *)  $WRITELN('PRESS SPACE to continue, ESC to STOP'); $READ(INPCH); "UNTIL INPCH=CHR(ESCAPE);   END; (* SHOW *) "   PROCEDURE INIT;  BEGIN "FIRST := TRUE; "FLAG := TRUE; "CHS := '0123456789ABCDEF'; "PROMPT;  END; (*INIT*)    BEGIN "INIT; J]); &IF M>127 THEN M := M - 128; &IF (M>31) AND (M<127) THEN (WRITE(CHR(M)) &ELSE WRITE('!'); $END; $ADDR.I:=ADDR.I+8; $WRITELN; "END;  END;    PROCEDURE SHOW; "CONST ESCAPE=27;  BEGIN " "REPEAT $SHOWBUF; $WRITELN; =='); "GOTOXY(34,3); WRITELN('====='); " "FOR I := 0 TO 15 DO "BEGIN $HEX16(ADDR.I); $WRITE(' : '); " $(* HEX DUMP *) $FOR J := 0 TO 7 DO &HEX(ORD(ADDR.P^[J])); $WRITE(' '); $ $(* ASCII DUMP *) $FOR J := 0 TO 7 DO $BEGIN &M := ORD(ADDR.P^[   PROCEDURE SHOWBUF;  BEGIN "PAGE(OUTPUT); " "(* DISPLAY SCREEN HEADER *) "WRITELN; "GOTOXY(0,2); WRITE('ADDR'); "GOTOXY(14,2); WRITE('HEX DUMP'); "GOTOXY(34,2); WRITE('ASCII'); "GOTOXY(0,3); WRITE('===='); "GOTOXY(14,3); WRITE('======$B:=N DIV A; $HEX4(B); $N:=N-B*A; $A:=A DIV 16; "END;  END; (*HEX16*) "   PROCEDURE HEX(N : INTEGER);  (* DISPLAY 8 BIT N AS A HEX STRING *) "VAR A : INTEGER;  BEGIN "A := N DIV 16; "HEX4(A); "HEX4(N-A*16); "WRITE(' ');  END; (* HEX *)  UTPUT 4 BIT HEX DIGIT*) "IF (A>=0) AND (A<=15) THEN $WRITE(CHS[A+1]) "ELSE WRITE('?');  END; (*HEX4*)    PROCEDURE HEX16(N: INTEGER);  VAR A,B,I: INTEGER;  BEGIN (*OUTPUT 16 BIT N AS HEX*)  A:=4096; "FOR I:=1 TO 4 DO "BEGIN ITE(' '); &READ(INPCH); &FLAG:=(INPCH='Y') OR (INPCH='y'); &WRITELN; $END;  END;  "IF FLAG THEN "BEGIN $WRITE('ENTER STARTING ADDRESS: '); $ADDR.I:=HEXIN;  END;   END; (* GETADDR *)    PROCEDURE HEX4(A: INTEGER);  BEGIN (*OR (J<0); "HEXIN:=F;  END; (*HEXIN*) " "  PROCEDURE GETADDR;  BEGIN "IF NOT(FIRST) THEN "BEGIN $INPCH := ' '; $WHILE (INPCH<>'Y') AND (INPCH<>'y') AND (INPCH<>'N') AND (INPCH<>'n') DO $BEGIN &WRITELN('DO YOU WISH TO LOOK AT MORE MEMORY ?'); &WR END; (*PROMPT*)    FUNCTION HEXIN:INTEGER;  VAR S:STRING; $I,J,F: INTEGER;  BEGIN "READLN(S); "S:=CONCAT(S,' '); (*LENGTH>=1*) "I:=1; "F:=0; "REPEAT $J:=POS(COPY(S,I,1),CHS)-1; $IF J>=0 THEN F:=F*16+J; " I:=I+1; "UNTIL (I>LENGTH(S)) Os every byte to its'); "WRITELN('equivalent hexidecimal form.'); "WRITELN; "WRITELN('You may terminate the listing at the '); "WRITELN('end of a screen simply by pressing ESC.'); "WRITELN('To continue listing press the SPACE BAR.'); "WRITELN; Y.'); "WRITELN; "WRITELN('It displays the information in both'); "WRITELN('ASCII and HEX format. The ASCII format'); "WRITELN('displays only the printable chaRacters,'); "WRITELN('converting all others to a "!". The'); "WRITELN('HEX format convertRUE: (P:^BUF); "END; " "I,J,K,L,M,N : INTEGER; "FIRST,FLAG : BOOLEAN; "INPCH,CH : CHAR; "CHS : STRING[16]; $  PROCEDURE PROMPT; "VAR INPCH : CHAR;  BEGIN "PAGE(OUTPUT); "WRITELN('THIS PROGRAM ALLOWS ACCESS TO ANY'); "WRITELN('ADDRESS IN MEMOR SAN FRANCISCO APPLE CORE PASCAL DECEMBER DOM December, 1980 By Paul Norris PRIMAKER ..... Calculates primes < 32767 and writes th ' "PROCEDURE FSEEK(VAR F: FIB; RECNUM: INTEGER); PROCEDURE FREADREAL(VAR F: FIB; VAR X: REAL); "PROCEDURE FWRITEREAL(VAR F: FIB; X: REAL; W, D: INTEGER);   IMPLEMENTATION $ "PROCEDURE FSEEK(*VAR F: FIB; RECNUM: INTEGER*); $LABEL 1; $VAR BYTE,B !''"NO LONG INTEGER R PASCALIOTRANSCENAPPLESTUTURTLEGRTURTLEGR  , Pascal Librarian ory contents as hex and ASCII. The San Francisco Apple Corps thanks all of the contributors for their programs. Keep sending programs in for everyone to share and learn from. Jeffrey Sueterpreter, get started now with this translator. By Jeffrey Sue MEMDISP ...... Modification of the program DISKDISP by Steve Lloyd, to display arbitrary mem Typed in by George Golden, from Byte Magazine PILOT ........ Converts Pilot programs into Pascal. Pilot is a simple language used for Computer Assisted Instruction. If you can't wait for Apple's insing program which converts from upper case only to upper and lower case, does even margins and more. DOC.TEXT ..... The manual for WP, which is an example of input for the word processing program. By Max Nareff SCINOTATN .... Prints scientific notation and prefixes for a wide range of numbers. By Greg Sue WP ........... A word procesm into upper and lower case (e.g. for use with an upper and lower case board or terminal). By Bob Doran BLIZZARD ..... Displays random snowflake patterns on the high resolution screen. program into upper and lower case, keeping reserved words (like PROCEDURE) and single letter variables as upper case. Nice for producing a pretty listing or for converting strings in a progra 2 dimensional screen. Includes hidden line adjustment. TWOD1 ........ Another plot, with a different function. Shows how to insert your own function to be plotted. PRETTYPAS .... Converts PASCAL or other printers. SETINT ....... Does the same thing as PRINTSET, in another way MASTER ....... Plays one side of the game of Mastermind By David Cheng TWOD ......... Simulated three dimensional plotting on a em to disk PRIREAD ...... Reads the file created by PRIMAKER and prints it to the screen PRINTSET ..... Throws software switches to choose alternate character sets on a Centronics 737 printer. Adaptable fLOCK,N: INTEGER; "BEGIN SYSCOM^.IORSLT := INOERROR; $IF F.FISOPEN THEN &WITH F,FHEADER DO (BEGIN BLOCK := 0; BYTE := FBLKSIZE; *IF (RECNUM < 0) OR NOT FSOFTBUF OR 2((DFKIND = TEXTFILE) AND (FRECSIZE = 1)) THEN ,GOTO 1; (*NO SEEK ALLOWED*) *IF FRECSIZE < FBLKSIZE THEN ,BEGIN N := FBLKSIZE DIV FRECSIZE; .WHILE RECNUM-N >= 0 DO 0BEGIN RECNUM := RECNUM-N; 2BYTE := BYTE+N*FRECSIZE; 2WHILE BYTE > FBLKSIZE DO 4BEGIN BLOCK := BLOCK+1; 6BYTE := BYTE-FBLKSIZE 4END 0END ,END; *WHILE RECNUM > 0 DO ,tI$'>ߡڑ߳RI@߳}:#9oLE.6Z"O$<=*A     4?GER .REAL RvCHAR @BOOLEAN STRING d~TEXT RINTERACTINPUT OUTPUT KEYBOARDFALSE TRUE NIL hMAXINT TYPE TRIX=RECORD CASE INTEGER OF /0:(REALNUMBER:REAL); /1:(PART:PACKED RECORD 4MANT:0..127; JII.1.A Copyright(c)1979 Regents of the University of California, San Diego--)PINTEGER .REAL RvCHAR @BOOLEAN STRING d~TEXT RINTERACTINPUT OUTPUT KEYBOARDFALSE TRUE NIL hMAXINT 26; $TYPE TRIX=RECORD CASE INTEGER OF /0:(REALNUMBER:REAL); /1:(PART:PACKED RECORD 4MANT:0..127; JII.1.A Copyright(c)1979 Regents of the University of California, San Diego--)PINTE$ $CONST EXPCONV=126; $TYPE TRIX=RECORD CASE INTEGER OF /0:(REALNUMBER:REAL); /1:(PART:PACKED RECORD 4LMANT:INTEGER; 4MANT:0..127; 4EXPT:0..255; 4SGN:0..1; 3END) .END; $ ${6800-990 (IEEE standard on high byte first) compatible $CONST EXPCONV=1{$ } "FUNCTION SIN(X:REAL):REAL; "FUNCTION COS(X:REAL):REAL; "FUNCTION EXP(X:REAL):REAL; "FUNCTION ATAN(X:REAL):REAL; "FUNCTION LN(X:REAL):REAL; "FUNCTION LOG(X:REAL):REAL; "FUNCTION SQRT(X:REAL):REAL;   IMPLEMENTATION $(* 6502 compatible *) $ $ ݞ$' ݑ$ $݂ō $݂ġ ݂$ $ $ȡ%  0 ފ$čV   .ˡ:  Eɡ  -ݑ š 0 0 ߿`ġ(   ݂. ݕ ؂݂3  ݕ 0 . ݑ0 ݕ݂ ؂ ɡ  |, R -   $ $ ݞ$' ݑ$ $݂ō $݂ġ ݂$ $ $ȡ%  0 ފ$čV   .ˡ:  E.áBڲzؼ0ݞ$ڲzjeEÍɍEáޢ >ۓɡ ؼ݀$ ؼݞ$ۡܡ ؼ$ Dɍ -   "ˡ\ݣ ݣ šݢ ݣ ݢݣݣ ݣ ݣݣńݢݣݢݢݢˡݢݢ ۚݢܚ  / |á +-Í-ڲzؼ 0ݢݣޢÄɡ3ڕġ$ڕšš"šޣ Ąޣ ݣ ˡRݣ &ݢ ݢݢ!ݣ "ˡݣ ˄ݢ!ۂBEGIN RECNUM := RECNUM-1; .BYTE := BYTE+FRECSIZE; .WHILE BYTE > FBLKSIZE DO ' "PROCEDURE FSEEK(VAR F: FIB; RECNUM: INTEGER); PROCEDURE FREADREAL(VAR F: FIB; VAR X: REAL); "PROCEDURE FWRITEREAL(VAR F: FI