LnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!)SOS DRVR"CHARSET )((8*,;((*,((+)((9/(p((>3  =9 :9 .(+( 8#8# %3(8 ((,+)(%.4$)?((,(103 ?<g) /SYSTEM.STAR.LIB:g)PLUTIL.LST>g0g1III.BLM.18u' *SOS.DRIVER $g'{&*SOS.KERNEL ,Vg'a*SOS.INTERPG#Dg(~SYSTEM.MISCINFOig(Vt"-SYSTEM.PASCALk3dg(~.SYSTEM.STARTUP >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@L 7  3  5  >>< (&20 *, **>> "2*&" " >>  ">> "8""> """"""<  `9`<ȭ=` * @jI`:ȭpȭqé,i0LÈ`,g HH`LL! l      5  Hdcefh&+si M0  h) `(" ( (È& 8 `)2ȱL1upp<`uqq=L> vuL L L <Li Li ,g0L HH`! ( 9EKQWbmz`(" ((è%È`2ȭ3`1`d`c`+È`&È` * IMk`4`5`6`7`8<L<`<p<`,ms<L=q=L> ,lXL ==L> ,lCL <=L> <,n)LL8 L8 u:L8 ;)ߍ;j`; ;j`uBL8 uCL8 u)u;) u;L8   x) `(, Lu%CYgu #1:CY` 9C<m><=m@=>@?AL8 >m<>@m=@<=L8 <m>?=m@AL8 C9L8 ; ;k`;);k`,@`<,m pHe҅Ґhe…å逅h,23Lhґȥӑ,10 h0  `,g0L ҅ӥĥŰ+,0p 4 Ls Ls i )"|tȌs|st HH` MjH,: <J h̰ <rh,oL`L i,1HȊ©L,52,9-P" a{)9 Ln90$0%,7 ҥ L$0T,8OK50P;ҥ,8 L%\   8҅¥Ӆé҅L,5,6  * @jIH,5 p  ,9P"<:J H) +̰ H) +ʭcP h̰ʩd8,h)ec efeede`,5 H h 4 `5!   4(P 4 4 `,g0L,10kH0 ԥ f0)ĭ9)9҅xh(ĥŐ`8 iIi`9A)I@`a{ ~I)_ bJ) b) )ab)a a,h0& &+%a0 +hcefd(c,@cfabdf`cnx  (,4h`dd ((((PPPPBTVSPLH   5"ʘ HH` (# (=  0`)aI!SHOLES 1!1!2@23#3#4$4$5%5%6^67&7&8*8*9(9(0)0)-_-=+=+\|QWERTYUI OP[{]}`~`~ASDFGHJ K L ;:;:'"'"ZXCVBNM ,<,<.>.>/?/?d0hp00000>" <"<"""<< <"""<"><$""< """"  "" 6***""""""""""<""< :< $"""2,"""""**6"""""< >>8  8>> ""*:<"">""""""""""""">>><2"<""">""" ""  ">"6**"""""&*2""""""""""""*,"" "" ">""""""""""""""**6"""""""> >>>3`)1`Ɂ" (cefd`Hcefh) `xÙ+(`xÙ&(`)4`)5`)6`)7`)8`)9`,i0!M:0p ȱq L`" (~)y ~JJ* I `x|x|,,}P-X~ F }~L } `,}0 x) `(`hh% ( ΍ ύ逅Ñ}`` " ( ĩ~Íĩϭ & &υΠÑΈ~ F ~ҰةeÅÐLLW x0Lx:9,<0 `Ld L)(I bL)8 ʪi)I8R & h:1ߠ*x (,< K 1x ` (`98  bLH8 xʍ6ʍ7hh)ɄJJRH88,< ʠʠ &,5դԦ kˍ12/` N=    `H Wh (0­1í2L-. * <өхυ L"= N8 =i N% JL@ҭ"A N! xLC L 'Lp- >)AE)H ;*J%/hh`դ8eԅԥi ՄԐhh, (MIPLIOKN`ȑȥ.- * ө<ѩ ϩ - (A= NL% AҩA N= ,>- JD)3E)X,qȑ ;?L x0LC L '##D0C 3 *̍m%%#$  " ` L ``(%, ( *x (I  ) (j` DÈ` ȑ`! (`.-LLL$?`?` hh- ( `)ߍQI "L), (3C> SHJI̍ƅԥDžծ*x (3'͝ )X@ @ ' (  L "x) Q(`x)(` 2H1H` (& ( ( (    + / @ C H K R Y j o t | ,/DIMV_x}  RU;Profile Driver -- Copyright (C) 1983 by Apple Computer Inc.`.PROFILE&%      . 3 6 9 < ? B E H N S V \ _ b w      ! ( 0 7 I N S _  . G R Y f {    ! $ 4 9 F I P S V \ a h m p s x |   !%*/369<?BEJMRUX]`h  2;AGMS[fot|        BGLQgjox',/25:BGKORY\aelpu !$(+.147<?BFILORUX]`finsw| > `ʝ"`t  !#%')+;CNU\eh "*-036<BLORX_fj &+38;?DGLTot <?J}΅н(I I $0;P̑бʑΈ,:JՐ̑ʈ0 Ցʭr̈A萠L> ֦ڱΑ0Б֤ l L p,:0 JfiΥiώJe΅Хiю@ F $p̑бʑΈ0 Б̱ΑʈeمΐeمАA萿հ0`ՑʭrpȐ`=m@< F l AL> 8p,:Jf׮@$PA F $P@/A'ʤ˅΄ϥ̤ͅЄ F $̑бʑΈ0Ƞ l L> $)טɀIim>ٮ@8pذ `$0"8,:Jک@ׅפ؈۩MjL,:08*Ȅ F ,:A@@8A@q==C)CB)B Crx 00 )ߍ:) J,P,QJ,R,S,T,V( > `,k<,: JI`I`<,:J̰`=m@>,:J}ʅ̽(I I `<Mj,:0pJՐ̑ʈ`pJн},,P,`,g$ ( $g " x) (,`% (gL,}0, `gé ĩ `:) j:;jN;~j;O,:0'???>>8?>p<<AA<0,80ʬ8ʠ6ʠ7( hL8 989::m8ʥi,;Ɂ)˭5i ɠ)54`x* ,< ʝ88 (`…ʍ0Åˍ142;)5I)5i 4`)5;`xH)$ 45R8 h(`x ( 3  +J FF tѤ `U t`*8`AB*0 B8` L=?՝ԝϝН ` 1`*x (DEHG 1h H J IFD`*@L&I/O ERRORINTERPRETER FILE NOT FOUNDINVALID INTERPRETER FILEINCOMPATIBLE INTERPRETERDRIVER FILE NOT FOUNDINVALID DRIVER FILEDRIVER FILE TOO LARGEROM ERROR: PLEASE NOTIFY YOUR DEALERTOO MANY DEVICESTOO MANY BLOCK DEVICESEMPTY DRIVER FILE '(i%%%h}%%`8 ȥ!8 !)"qȥ#q#e$ȱe%L)%`@(((( % %`((((࠰$(ɠH(@(h((((@(`%z %% %~(A{(L%`.8(.Je.&ʈ.s(1 6$P8"ȥ#L1$8"ȥ#(ϸ`"##L]$"qȥ#q0,$p)@"q"ȩq"8`*$% $% 8% $L$* $8%8 $`8 &'$% 8&$'% 8$%%`H   q ȥ q Hi hi 1  % H H ȱ h h % $$ 0 e e H i hi âz %` 1 8`    # &ȱ ' # i" i# # #`8 ȥ H h `8 6$P`8"#%#%"$w"$#%"`荚ٍ荺 荚`荺``` D ( )  * ) 4* * h* ))` L% q ȥ q Hi hi  i" i# #% $ȱ %ȱ &ȱ '`<!((g %(r(z(q( %y(i(0z %"#$ %&' $"#$%&'   `%$%ɠ%* " ~#C #p $ %*0"#)#)i $"% * %*  L! {" j% %ƌ(X#"$% "$ #%%& '   ` {" & ɠ% %)  !( (" %(r(z(q( %y(a(0: %   "$%&e$'e% R % < !"#$%&'()*+,-./0123456789:;<=>?@ABCDE%e,ȥ,*,- y,,,-,,,ȱ,,- yL+,ȑ,` 2"p-,-L(Ġ %>,i-i8, ȱ,%,W,pp ڠ %p`l  " ) i SOS KRNLb.D1/SOS.INTERPŠ̠Š.D1/SOS.DRIVERР頞 0 ) (lH'&3&'&#e'#%e'%'&"$"$#%'#%h`$e #4:=Z_bpsv{ "%(+.2ADGJx{~\mrv{#&+25FKQT\adgjmry~$/6;>AHOTW\_bx{'69@IPW]`cfjmpsx} H FFLx (̠`x (̠` [   `L `` ``I FF x (̠%L#fowz*13579;=?ACFNWaehmpx "'+@J ʈc(()o/ e/''ʈ((''()(1i / e/''ʈ((''((''((''' ('`ŠDAY, DD-MON-YY HH:MMSUNMONTUEWEDTHUFRISATJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECé٠ŠҠî!((ͽϠРРSOS NTRPSOS DRVR(.D1(YYYYMMDDWHHMMSSMMM̱忠ΠͽŠ堠Р͠Ю̠Ɔx߭ nʰ0 ̰+泱Ƴ m° x̰ ̐8` m° x̰8 ۢ8 ˰y ` ¥ nʰ泱Ƴ T̰#泪 Ѳ *Ƴ ` L:Ϡ`泑Ƴ` LaĥH8`JȘ I8`  S`ۈۥۥ۩Íۭۍۭۍ հL¢H8`Jj Ȅ ۍۆeۅiۅ Lɰ ʰWۅۄ ¦J> ɩE` eĐL Ȑ 15WL QL5WW{5 ې'`,55 ې'` ݠ B1 ȩȑ Lɦ8`5  @ R㥶i ` İG8`F`X8``éۅĩ >` T֩xxMH]@ Kۅ5H ɐE$ eİ Ȱ h`h`8`W h8`hR`hLҿ i x +ۅ5ۅ6 ǰ `E8<W`­ `0XLۅ5` ռ``ߤeI`IiţO`Ȯʆ/ )󘑡`()0zq 滅ѺY Ueۅ5Ѻ Ѻ  Qܐ'`i ҩ *C8/y.i/ ȑ  © $ E7<3W`ȽLֽȄ @8`R ) [)_[AͰ")[)_[A:0/.ЩȑΘ8e * ȩ`Loü 7)?۽۩ W٠Յ<ōōř ռV7 uM78 V榠=ü#)@5 ɐ /ݐE ) .) @L `lqhٯ޿=ϓTXIֲ̛̐~ؠIJK,-NOPQ0vt `` LLɠ8`ΛLL渠`0 `8`HiHiH ihhȱh`86)IH)heuQɸ` ` W` ] %饚0` W` ߰4`)|E8LLLRLLLLL*LLLLLhh`LLL`SOS 1.3 01-NOV-82(C) 1980, 1982 BY APPLE COMPUTER INC. ) `G`î** }*`o^`on 8 JJAj@` *?($`ΠņɠŠ堠РѠ͠஠әƆH v?c,,,,h߈ߢ~))`3PLLP*%(i&`Ѕ񩏍E H pph`Xۅ ۩ۍۅ Lɰ ʰۅۄÍÍۙ'Ù ۍ*ۨ  Ѝ۹ۙ8v- ðJ ¥ ð, ðLO ʰƥLT`'  mې浰``8 8 Wٍۭۅ5ۅƭۅ X̰ ìۈۑ T̰ۅƭۅ X̰ۙ%ۍ" T`K8`)` İ ۱ۈ` ưW/ۈęۈЍ۩@` 8 MƐ  5 Q8`LŅ ͱ ͰU..++,,IJ/ ӥ-.?Цե,J+jѲ4Ƴǥ4聠 H hH kh8`8-ȥ.L 8*Ʊ )8 0*-`.G.ʱ*+,EP'.E.LұE0+,,ӄ*p-e  )LBѠٳ )8`i (` )N8`*eȱ+eȱ,i۠Ѻ*ȱ+L - ť.Lkҥ. ՅL ͐Ld ~ pа.J/)@߅4N8`) ))УJ8` ۑȭۑǠۑۑȭۑ($S8`O8` "` / 򑺠+* ͐H h8` ΰi `()  *ǵ յý5Ņ4gȩυɩč5 iψ }.8` iϙLIѠ ˢ L΢ ΰ LϠ ˢ ΰ1` Đ@ АP8`B8`ۑJJJJ -ѥ +jѲ84ƳJJ 2ΐ3泑ƳLTΩ潑ƽ`ƱƳ ΰ( {Π۵*+)e`8`)` J J + ΰ" 0 ΰ 🱼ѼL8`ǩ Ϡ` ϰ ƑȥǑ` Ѻе*`)ȥ+8ۍې  ,ѺLTΠ"LΠ5 խ ɐ /ݐE`C8`)@ ϰa)ۥ,8ېu+J,\ ȱLJΠ) ϰ'#,J(] { ΰ ƑȥǑ.8` { ΰ,JѲ ƳL΅ƱƳ ΰҥ,J0`#$"0#`!qȱi 5H5Ƶ ǽ jh5`L2̩ƍv̥Ǎw̩ÎL%ϠƄǥLj̩۬L~̠HHh` ̐`*ѺG0?M`)J"u-- M8`۬` # ː`  = O̰)= I`JJJJѶQi Lˢ  0 ̐ `"L˦ `H8`8$$"$= O̰=`$0`#$"0`$` H hQ)fʅ F jF jF jF &!  eװ*  ̰F湥 ƹ`Z8`@  ʰ泭ۑƳ ʐ` ʐ` ˰ ƹ Wː`ۘ . . .۪8*JۦȱѶ"` ɰ Ȑ`E`Ɔ X̐8`>>5Ѷ Qܩ<`>`\ʊJJJJ ۍ۩  ˰Fȱ X̰6 0 Lɠ 0ۑۑ8ȱ`H8` ɹ $  8JJJJ8 ` ۠ǽi `< Ȱ+<#5 ې'` ɐ /ݐE`W8`R` 5&i ` Ȱ 0i `<8> ȐT eİF cȰB)Hh5 ˭)*ȑƑȥǑ'(ȑ`L)ɭ)Ѷ*e`M) `ۅH)Ѱ%}ʈh Qܐ'``hi ` p6۽ʹZ5 HȐ/i i `гW8`0( ɐ Ȱ ʮ6E`5 խ ɐ ޢ ȰLȍ۱Ǎ X̰% & !J8` *LĢ `8 iۥƍۥǍ`ۅ %  6 )Ѱ Ѱ` 𝭧e ǐ bǰL*ۈ5ȱ۠ƍȱǍ X̐ H h1  /ݐE`ۈۅ ۅ 8ƭ X̐`LLŠǠ  ݭv̅w̅ ðzv̍ŭw̍ŭƭ ­ōō T̰]ŅƮņ X̠8iȱiiȱi ṰŅǭŅ XLōۭ۩ۅ ȱ8D`F`8eYƍťǍŠ)͠(` L Ͱ2 ~ P kҐ#L8 T 2ΠHHȑhhȑ`Ld )N8` xհ*eȱ+eȱ,i۠Ѻ۹ۑ񥤅- ť.Lcԥ.La Ͱ$)rJ Lɰ )# Ԑ)Hۑۑh8`P) հ Wհҥ,J+j泭۪ƳۑȊ ) ~ fPL ͊.>.ʱ+,EP!.E.Lw+,,ӄ*- P*e (` հB հ5 Wհ0,J۪泭ۑƳ s߭lߩ * xLx @h hhh ,0)ߨ)Ah&'0HHHH xhhhh ,0)ߍLLhhh@)&&&(&('+*H)H(h)H@x )HH30.0\-JM-, J3,e$,d,,  * *l߅߅H ߅ \xi ߅LHHH *ح)0 D) HHHH,, ߩ0  xLߍ󠠩à٠΀ƉŠŠӠҠȠHHH *ح)0 D) HHHH,, ߘ)@ *)X  xI)}h)L, L )ڠ) w߭)Ů􅮈 ߠ'x)) J,QJ,SJ,U,P,W(`)(()  8)j`J j߅`0X ٠͠堘ӠȠŠ=`Insert volume: Τ in device: 蠠ɠ then press the ALPHA LOCK key twicex)_ @,P,R,T,V) )) `)8( ߠ',@ ߠ0  '葺 ݰL`5`i 祻(8`2ޝ51©ޅéąŅƍ >ϩ 1ޠ== f ɰ`ޭ`5=(5= i Х(`=H hDC5 L3ܵ ɐ /ݐ 8`5 ˥JJJJ8 H h ` ܠ825H h5 ɐ /ݐ 8`Hh ܥ5 `ɥܥܥܥܥ5`܅܅܅܅܅5`( ݰ)Ѻ ݰL ݰ泱Ƴ ʰȭۮ ʰͩΪΩۦ eװqȭqLJ  ˰Aۅƭۅ X̰2%&N  ʰƭ X̐`Ӏ堁ӠҠՈ՘̠ƠŠӠ̠ɤӮȪŅ͠Ϊ ܆5 HȰۈ)ۅƭۅ X̰ 3ڰLÍLT̥L㼠  ʰ` İK ХP8` LɐH80)N  հ)@LO ˰)0 ̐` M ­۠泭ۑƳѲƱƳ X̰ RڰäJۑĥ` İo!)N8`WپX0 ĥLä X0 ĥLà !"#$ Đ2@H AڰCŰrP` 3ڰ(` AڰѶ? İG8`Fە1 ռ İ ЩP߭)@N8`1@8` Aڰ񈱴 ˦,+* ʈJj =ؠ yiȩ`y4泱ƳHhz ʠiȱizLA`L;ؠ"  `1` Đ7@8V۩ Lɠ۪8ۊ۠X)JJJƄ X Ġȱ۠ ȍ۱۠ ۭ) ۍ ð*)#  O̰``)(`N8` ) xհۈ ̰آ*գ  Ͱ ݢգ LvL{ؠ;i ڥ(8` ְ( ȱ5 HȦ)`Lxץ: ש ְ⥺i ꥻ(8`Lx Lxש u )۠0)p խ.8`)@ ϰ) ϰۈۅƭۅǭۅ5 X̰ *ƭ۬͵̶L  ΐ` Wհ> H۪ȱHۑhƳh sϰq ` ʰiȱi `)5©éՅĩ5 }JJ+`.`8`ɂ )`@ ש ְO ֤Fȑȱȱȱ008 8hhh H(`x )HH'Ƚ!88x , ,,(`," , *)` `   `x )HH8(=&(+ʈ&ਹ''&&hh(` * @ HH` 2``ӠР    0) ) $p10LYeieLVȱ d0L`Hȱ hh` WɸSI I.ȩ8A 8ɸ4ɠ(H)h h8   `    i Ȣ d` $,)?P^ GL㢮 5L}P.)(Ơ L`ޠ LR  稱 I)0JJJJѤ  БĈ` H`)à`֩ нѽ>`]PU]]UPPX0 0 PPXPP  į󠠩ҙ̙ɠΠɊՐӠӢ̢ՠҠŠԠҚРĠ鱃ԠȠࠠLQ  * WHHH>%H H @`)h8`  HШБˆeЅА SYSTEM FAILURE = $hh8`hhhxآY_Z@tPRVT,p S JJJJ ) ʍL@ i0i6`îӉ͠堧ǥӥ``HhHy)(h`H` 0L?i `h` `` `x)( 8 `jjJJԥ)եӬɂ )Ӆ҅`  `H0Xh`Π'à̠ȈL` 8`څ  Lk%  Lk8Lu텚8嚅 L L Ld V ``  h` ک V `ۅץ  VLFx) ( :` H ) L  .P'pб0 &L:L5'8+8`0Fܢ` ř,Ř 0 8f)J ӭƅХDžѥL1LUȑ  i ߩLL )  札)  ҩLL` **éL0;` H ) 4 )ߍ) hjjjjۥ0CF = -$(L !LLL&L L-LJ٥eƦ ,L  # ` (L.L…ҥÅ,] Xx,f (I0јIFjFjFji```x@gŽPy+wLwԠ͠ŠԹ.D1 .D2 .D3 .D`HJJJJh)y` (2P Q,PQ"PɀQ@PAQ`8`nɀ<)nopoLpp` 0h8蘠fȊf` ab 1abo)abaݰb L9c`` a N0Ioa0H ha`pLopna n`  3ɠ/8 L %iLɠ8逨J Hh $`b >_-%^%p_^^_ab"08^c_L8^c_L8^c_L8^c_ȑcc\] ab^_ ``aV R0M bba dda `Q8STRQ ST`c\ȱc]a  b 5DU e\^e]_ ^_ ^_LH8\^]_?Je\^e]_,78\^]_ ^ݰ_ ^_LH^_ $bL@A^_aoQ*@A RQL@A `T8`RLSJTKQHIQiHiIKNJ)M8逅OPOPHMIN'a MHNILHOIPaOHPI8JHFKIGFGaHMINNMʆSTL8HSITQQSTde0f`   cCȱcD C Ea  UV 1 ELUFVG FUUCVDեYCWZDXWXCUDV[ v`b0WXYZiUcȥVcWX eeYZ ggE` @SATRDžŠƠŚ̮ÎȠ Ӡ̠Ӡ` LL#L/LL'Lgab `abBcd cdBrcadbho:ab.cݰdDcݰd8abҊ v+abcabRcdTefVghXijSdfhj RR`^0U ` 0 ʠ0 8 `ůàՠԠàࠝӢӠ ȠDž̖͌͊頀ϐωŠŠӠҠȠγ`%!^0 ^)@`a R =` *^)ـooL]^)?i |TU QTU]qUoqTITsUsprRprqs]ToUXa` RL=Xa` R` *R`X`U T  *\AX[ @F\B9ɏ5\o*Ɂo)[[ @^`U V  *C?^0: ݳ ٢ ^)?i` *)@o `p^ XiH 1h `)X0 8~X 1`C X`)X0`C РǠ𠠐ŠŠӠҠȠƠŮƠҢâӠUAQY @?ZY 9ZYY^TU QZo ts;ttttt ts?tt@ttt tss18tAttBttst t St8tLbut~sts tt tt t tttL ctDta s5sLub s&sLuA ssLu  s StLu CtЫsvv cv xح)pRSERRSTUVARX8  W8LZW RSUTVW@RRSTVXWRHH LRUSTUWVR3vRRvjjj)*R`pA'rFͰͰͰͰͰͰͰNj䋂 Y.D1/SYSTEM.PASCALg.D1/SYSTEM.MISCINFO<Put Pascal system disk in built-in drive. Press RETURN.!?_ @` ;*(|@΍ߞJBITڌ*xY6YsB_>3F b$9ˉ?$^V`ZRybÇԮSͰͰ lllllllllllllllla^^^^^^^hhhHH``8Zv[vvv vZ[``)s svLw`)ssvL&whhhhhhHH`tststt`tststP tt`hvhvhh h h  vvh)s1 svhhh) $v v vHH`hhh))Z[L} }    ~HH`* |8  }L} |`|` } }` }`8\] ~ h|vvv v`|svLwsvsL&wsvW|vX|vvv vV|`V|}|sv~|v|vvv v`}|svLwsvL&whhhvhvhvhvhhvvh)ssvhhh vHH`hhhhhi thht thsthhhtt FvHH` s` `svL&wLysv{v{vvv v{`{{sv{v{vvv v`{svLwsvL&wsv{v{vvv v{`{|sv|v thj thh t thsth   hht t t.tU t8\Z][TZ[ te t tt e    FvHH`(LzLyhhh th th thjw w`svywyw w w w ww ww w t t t t`hhhyhyhhTy y xHH` yyy yy y  `tstty ty tt`svL&whhh th ths x yHH`}x|x yx|x`|x tsvzxv{xv}xȘvv v txx`xxhhsvhvhvhhvv vHH`svywyww ww w}xw w w w v`# Fv`vvv cv`v Fv`hhhhwwhhjjjjwjvj vLw wvsw }x|xHH`wswsw w`hhhhhhUsȑȭsȭsȭsȭsȭsȭsȢs y s }~)yL!&X(E'+@FGH{|}~ @ Ev0vDvvLQv1vEv `uv Fv`|v Fv`nsPnsPv`# Fv`vvv cv`v Fv`v`# Fv`vvv cv`v Fv`v`# Fv`vvv cv`v Fv`SU T쀍VW@RRSTUVARARWXYZ[ 8 8 ť 8i杩村ƝRSTbVcWXYZd[e\RHH LURSTUVWRmvmwwyz{{|}}}|Fxy exxx&yvexxweyyxȩxxixyzxȱzxȱzxȱzxziz{|i|}Г\]\8\]L})L8|~}L~) w~fjv|) y|f}jx8xvyz{{HzHz{{HzHzw9ޓz{9ߓ{{HzHz{v {HzHHxiHLHHLHHLV??zF~H~HLX hh&ņL0eeƆL򆥆8儅ņ 8刪8刪ƄLhh&eȹ~Ȅh)1~)wf~jjj)?vńevw9ܒ hHHLhHHL @hhHHHHh|h}h~hzxI%vyI%wzȥzLhhh ~he~Ȅ Ȅvl %~8~e~ h9 0 ʚL %~~ hI9ʚL %~0~ hʚL|v|z}{zve|ʥ~z{ƅ|}hh &hezheHzH}H|He|HHLh~hh|h}hzh{{zȱz~80 iff| ==HHLhvhwh~hh|h}| x%vvy%ww~80vwwvxyyxi v&wx&yhzh{{zȱ檥HHL펭kmhjhkhlhmXk&ljȑlLjjlLQjlLLװwvwvLVL{ he`zhea{zHzHL he`heaHHLhh a `&L揥`a lhezheHzHLXX{0{wvz{LLV^__`XȱY`ȱL+ XYXYXXYL XYXYX步kg\8孅\]\)\]H\H0X\\8\]\ȥ\ȥ^\ȥ_\\^]_8\Z][LXeXYL iIiIi挥IiIiƌ8別剰 ` gf!ffgff8fg8&&`ffgff&&`hhhh 挥IiIiHHLhhhh 挥HHLhvhwhxhyz{Ey0y{)zx!{0wEȩLLshh0HHLIiIiHHLhvhwhhevewHHLhIihIiHHLhvhwhh8vwHHLgfff fefgegfgffff`hh0 hhLΌhh"IiIiIiIi lHHLHHLfgLX&XeYei揭W8XYL XiXYL hvhwv&whxhyy8\v\]w]8\Z][L\xȥ]xL ņhvhwhxhyv&wyZxȥ[xZevZ[ew[8\Z][LL ņhvhwwZvȥ[vLhvhwwvZȱv[mmvLhlhlhhLhvhwhevvhewwwHvHLhhhvhwhevvhewwwvLkmhjhkhlhm Lɢhvhwhh%wH%vHLhvhwhhwHvHLhhIHIHLXXhhQX0XŏoXf0bXE0XRXŎIE8XveawvHvHL冠Xw e`veawhvhvL冠X e`eaHHL𨭙whvhwȱvHvHLhvhwhxhyyvxȥwxLȱXȘ vX)XYXHXHXevXYL ȱX khjhkjHjHLȱXvevevlPe`fQeag fHfHL Pe`fQeagfi fggHfHL gPe`fQeag hfhfLX  eg`edfaeeg fHfHL冠X  `edfaeegfi fggHfHL冠X  eg`edfaeeg hfhfL冠Xw e`HHXYp X lLhh)X0 eXXYLeTveUwUwv8vXwvYL HHLXHXHL飨RHRHL gRe`fSeag fHfHL Re`fSeagfi fggHfHL gRe`fSeag hfhfLèPHPHL g\R]S]S_\ȥ]Z[[ )z RPRRSQRRQ RȥRi fL XaXYX `&a` `a`RdSeSedvȱdevd`ȱ`Zȱ[`XiXYXiXY  nXLLL=LN   Faf`LM hxhyhvhwXYwy`LvxvwxyaLL Lwyhxhyxyxyhvhwvwvwvxx ȱvxvx #n0 2)LҰ%n HHLHHLh)vhh)hvL nhxhyhvhwEy0wyvx/1'w0+!hvhwhvhwHHLhHHL%nHHLhhh ~hxe~ |ŀ8~e|vl8hhhheȱe a{8 ȱa {8 Lu0:A[_ ҕLLqȱi8A ȹȱՀƈ4i Lȱ~ȱ~ȩȥȩLȑ  LXiXYLhvhwhxhywyvxȑvxLje`jkeakle`lmeamakm ʱjlL[`L{jlLh`ha hhhhhhhhL򆭙kmhlhmhellhemmhjhkhejjhekkXL=aʱjlmkL͢`L뢱jlL8\Z][JHjHLv| w}L5)@ w}Lwv0|0X ?lhzhhhTLsUwT8vUwv8vXȥwYzT VL SRSLȱ yxȱyxL`x8xyx8xyx zxб wvȱwvЗLABzDF@GPtI$KL nN(kPQChSU焵V!cX_Z[^]k _#ǭ`xXb'dxehSgiQYjoNln9?oIqr|otEv7w߄y @{Η|½~v``| Ȗv Ȗw?}:w}NE||0vEvvv|)0L Lv $| ,0 2) LҰ0 2)HHL8w#0 xyzL]Fxfyfzzzvxyzz aLvɀ牢L(xyvxIxyIiyxxHyHLhh' HHHHLHHHH0 2)LҰ? w֢| Lw}v |  Lv Ȗv|L^LILhhhh:ɀ ,IiIi&lh{hzhyhx Y xHyHzH{HL Y LLv ȖwLi ћ Lw8}8eP&$0 LhhLҰwe}8eL^iL^挅@Fxfyfzeee~ffffإ Lr % a `v Ȗ| Ȗ U LvE|v|w&}0  F2)2LҰv L}x ~8&&&&&&&~ȥ~ ; % a `v Ȗ| Ȗ U LvE|v|w}M0 2)LҰ FL }| L}wL w0 2)LҰL v 5Li| }8wei L i8~yyzzv`v Ȗ| ȖvIvL2v Ȗ| Ȗ UL˛w} Lɛ|LS}%v0tn50h0 2)XLҰw } $Lɛ}v| Ś L ^%!0~0500 2)LҰ L [Fxfyfzf{F~fff8{zy~`| Ù`v|`4) ``5)@v|v`0  F2)hhLҰ` {ezeyexe~ a ` 8{zy~x4) ` ; a `w}"$x~yzŀ {Ł|8`w}w}x~x)@ L94)  L90 2)hhLҰ`0!ƍL`&&&0 ƃƃ`\0 2)hhhhLҰ40$494) 0-L™"L™&% 8`$ `Vvvv`w8}Iȥ}v Ì665``ō0 2)bENŃ ƃƌ!Ffff 5&Ō0*0  F2)hhLҰ0 2)`Ń 0"kgffff惩ŃO0 2):46vlhh0jH*vjHHHl`w $x$y $z}J`} $~ $ $vLח$xp$~P!0 2)hhLҰx)x~)~y̢|8`$~ $$`|)@0 2)п)8`0戨L 0 8`hh •v h0 LE LElnLdLj/ L 8L •v hI=+ L •v襀I= ƀ LȄHHLhhhhh*68jh*v ȑLNdoǤKKK*5@KlKĥKKK@#AND 'ARRAY ,BEGIN CASE CONST DIV 'DO DOWNTO END ELSE EXTERNAL5FOR FILE .FORWARD "FUNCTION GOTO IF IMPLEMEN4IN )INTERFAC3LABEL MOD 'NOT &OF OR (OTHERWIS6PROCEDURPROGRAM !PACKED +REPEAT RECORD -SET *SEGMENT !SEPARATE6THEN TO TYPE UNIT 2UNTIL USES||he}}hhɀL" n10LTv <=TU~ L򆥉}zL~? |$RќĆL||}z{Lv ɳ 6L| ɳ|}zЬ{~  6L򆤀+8 Ɛ x Lس``  {L |L L򆥏HHHH}H|H{HzHyHxH~ |LL |L򆥏HHHH}H|H{HzHyHxH~ zL~ zL`hhL`hhhhLhhhhhhL~[Z[h))hhxhyhzh{0Lh0{h|h}he漥HHHH ~x -x 楽HH`Y|{{{-x-x2|e{{{ `hhLHHLLȰLhh nHHLhh nLhhɀ A~L n10 @{LȅɥHHHH jyL |LȑVȑUT8U8񹅻񹅼8X廑Y弑zL뮩L審L審L/ Stack overflow Type to continueeHH LsL審L審pX8XYL審 L審 L審 L審 L審 L寢hhhhCQHPH PȱPPQL RhPhQL9 RSwR8vSwv^ȱv_ȱv\ȱv]X i RHLj RwRvȱRwVv ΫwWvVwWWURTȱRUWYRXȱRYRRRSL ӯsPQvȑ RȥST^xȥ_xȥ\xȥ]xx\y]^_WVW8\Z][LlXz C ~ƆSRSLtȱ ȱņڠRRL Xz CL Xz CPQȑL XzX )XY  ~0 LOXz L ~8~}8|~}~L~L8~lm8 ƁPȹPȹPȹPȹPȹPȹPȹP Ym~Lhl w~iviwY8vvXwvYU~iTiURSy8xyRER`hh )Lhh ΫLhhw vwLehhWwVvWw]}\|]}XiXYv8zvwv8zvw8vv~wv~\ť~8~8~~ȥ~))i )HHl0 ~8~8\~ȥ]~8~Ə8 ƏL,ء4ت /6: á :@4 @ A P @6d2& |" "%: ˡ J#鿥  &'azȄaAB%Type to continue% " ġ2 2fj <32 &ˡ 2 26!ˡ 2Rˡ 2=˄+&ȡ   ,á- .ت/S# /أ d-, P# /أd-, I# /أ -.@0! áצ IO error # / d-צ Exec err # /d-.jlmnopqrstuvwxyz{|}~>?@O^^PROTOTYPE RUNTIME SYSTEM.PASCAL$< $ \ &PASCALSYUSERPROGINITIALIGETCMD UCSDFILE EXTFILEMEXTFILEMTABLE INFORMATIONCI4Current date is Hd*BKed on U.  P ? Apple //X @{BB@6bBB@ijpbZb ԳԳ@444ȓ4.484854צ/46444ȩ4å.ˍo˩4ń\88P.TEXTׯ7ĻD<ꓡ"á삫ûš > "ˡ˫   ɡĻ2꓄ > >"ˡ ꄓr<Lá > "á=ˡ땏ˡ 3ء #צ ۂ #ء >  >݂"ˡ ޕ݂ނɡ  <Ąɡ낫š ꓡ š땫@ >'@ ;> )#%0ë>>@@@| V  )šá4?š?VP>:+>P:X;髁@@@˄@#@ˡ @@#>@@ O@ ˡ? @ ?>@ > ? @ ?>쓡 @ ?>@ > á@ > :@ >:@ >:![L&á'횩)ˡ8 >#> \ˡآآآ*:UU šC+P VVPVU _aaO@á ( ˄ ë 9:ץaššë 铄˄dS79P7 a(7 آآ-? :آ&آ#> ?  ڢڢצڢ ڢ  آأأآآآ 9Pš8P8>뫀 8a a:a aa>ʁ@ צ" ˄ Ʉ8>ʁ@"ؚ"álʁ@&ʁ@ > "áVʁ@ ʁ@"Ä:ʁ@铡-@ ʁ@ >ʁ@ @>ʁ@ @>ʁ@{ 7( آڢآآ"٢ڢ٣ PSYSTEMPW\PIj 8́@́AƁAa@ƁAǐƁAP:ץaá:/Pa8ʁ@ >"á"ʁ@ˡ ʁ@ʁ@ʁ@ צʁ@ ʁ@á áÄڡɡá ɡ 럚肚`諁6"  >  >b) á إaaġ00000תȡ  ڕ0ق,  & "ë 넡6 & Í< š˄ u 8 Íáš#ńW   0  𓍡ńȄ (˫/ ˡ   Í wˡ ˡ ! ˡ(  Ǖš]6W.TEXTת .CODEתš!!Ȅ!!P!x!P ( >ˡ 뚹  צ`&Ꟛ צ.CODE$.BACKׯצ.ASCIaF*:˄/˄&ڲ#áצ:áD6>,ת(.Ä !á צ[š!!!(  šá áK<"á83 ɻ  X\Hب&̂(ʂ( ʂ(ʂ(ʂ($ʂ(̂)ʂ)!&ʂ)ʂ)ʂ($ʂ($Pd= šš > "ˡ "Lá"  që   N "ˡ  )á á áˡNo user programתP4text? [C Compiling... ~UUkUSYSPASCAL/RUNSYS.CODE:JJzׯ{ y@צ>>  OQSUWY[] ''A>zˡ@*B;̀̀آA'ʀˡBʀáʀá>??>D;TPVvP jLV~ &"#n####&XHv4  R: thd z  `"B$>"z>@t!-ǀ@? ? צPEz>ׯ{ y@צ>>  OQSUWY[] ''A>zˡ@*B;̀̀آA'ʀˡBʀáʀá>??>D;T ,+z>>"ȡ{ˡo!צError # . closing FILE or DEVICE opened by last program$>"z>@t!-ǀ@? ? צPE š:X fˡ ؞!؟?!? ?ˡMx?š3ġ  ?w?v?ádt J~*!ˡ !蟚dt*ńȄ4šáRתPńȄ ,ń.áš蕿@šQȡ2é000+-Í-ë0^ 000á'3á 000 {]\ ȡ3"#쾿 > 9dá. 6áá:00áQP 0á0 뾿 9šš > | á1á3  ] |Nš  ɡ'áצ-32768 ` 逫-ġ@00ń0ˡ ɡc ȡꫀZš "1諀멀ȡ! ꫀ𩀄򩀄"7ũ  @š& "ˡ鿩/ȡšš  > ;N áEF > 섡/ F >"ˡFFFFF>N >=" "ˡ v  á ń# Ȅ ꚹ~á^"Ä<7=+ > ˍ >  BFF >"ˡFFTF(7SYSPASCAL/RUNSYS.TEXT*:>tZt^+ZJtZt^+Z |LPRt^DEVO/SYSPASCALtJJ|r;t^JJ;t^; ~UUxS ^!SECommand: E(dit, R(un, F(ile, C(omp, L(ink, X(ecute, A(ssem,*٢ š٢ ٢٢ 4$  ؗ(/  ؗ(Ƃ+ ƃ*SYSTEM.MISCINFOתPƃ"á̃DܢʃDʃDܢʃDȡIP  ٲ7)؞7)ؿ؂پ$áڸ444Z ȡ+ؾaġ +ز+ؾ $ 2تPww"á\w++L+IÄ)++LIBRARY FILES:ׯ w  " تP"á 3 Gצ&Warning: Cannot open the library file + <+צ Warning: צ is not usedR پ$ò$ÄZ11خu تP"á T n$2$ $š$$צ.CODE $$ š$$ צ:š/:n@A$P.LIBTPZ ȡ6ݤˡ&ޢ`ݤۼޢݤ> Xأأ أ > ,11ȡd1d1ٲ ٲ  ٗ 1!&ءdt >? ? ޢ ȡڤ ˡpݢڤ?Xܢ0ۤ ݢ`ڤáޣ!ݢ`ڤˡ  ޣ ר d't!צPΦתP22>  pq%sy!{P{ %צSystem re-initialized& j28h4rP  צCONSOLE:(#צSYSTERM:(>z ë0???JanFebMarAprMayJunJulAugSepOctNovDec?????????ר d't!צPΦתP22>  pq%sy!{P{ %צSystem re-initialized& j28h4 צCONSOLE:(#צSYSTERM:(>z ë0???JanFebMarAprMayJunJulAugSepOctNovDec?????????$  wx55ȡ"5555vu *?    H2צ*צ:צ??"?[צ0Bצ0tצ0,k\M B3&ʂddʂdضáSʂdšJ?ʂd1Ƃ;צ*SYSTEM.STARTUP.P1 Ƃ;P צPGתPˡǀ?P:ײP)@$$ Ȅ٤ ̂d ʂdʂd >ʂd׷ړ ؞&"ڡؿʂdá ʂd ʂd.áʂdʂdʂd ˻عcʂdצCONSOLEjʂdSYSTERMתYʂdצGRAPHICHʂdPRINTERת7ʂdצREMIN(ʂdREMOUTתE ʃE ʃE  ʃEʃD̃EʃEʃEʃEʃEʃEʃEʃEʃE  ʃE 4$Ƃ+̂dʂdȡ+٤ ̂eʂeתʂeʂeܣʃDܢʃD%ܢ% ʃD>ʃDʃD+ >&?̃DʃDʃDʃDʃD%̃E ʃEʃEʃEʃEʃE ʃEʃE ʃ+3w w+w+b43  n 4ńV54̂.5ʂ.ȡ;5575) ʂ 5554 Ƃצ*SYSTEM.LIBRARYPxƂ ʂx+3:-Error: Required library files are not present 3L?Required intrinsic(s) not available (possible bad library file)X PުPvƁnPvƁΪPƂ;PƂ;ƂƁƂgƂf̂dƂPʂd צP:Ƃá: ݓۤ ۤ Äݓ š ۤ  ɍX ޚ "ˡ8ˡޚ   dܓڢڢ   "ġ$ނ#˄ɡۤ  dáߢ  dá ߢ &ޣ˄ ߢ  ߢ ۤ ߢޣ"ߢ ޣ#ޢ ޢۤ ޢ á٢á( ת$&(0!    š ڪ 0ޢߢšáޢޣߢ  dޣ"ޢ#ޣ$)ޣߢ  dÍÍޢ  ܓۤ ۤ Äܓۤ  dÄÍߢۢڤ   ڪP44444444"ߚ44 4 4!4"d4$4% 4#44#4á74-4& 4&44&4T ڢڢ& ڢ&ڣڣڢ$ڢڣ"ڢÄڢá     á ۢڤ š sá ŶÄ)ڤ ܢɡ ڶá  á ġMáš6 ܂ۻݪ d ( ڣ"ڣ١ڢڣڢ#ڣ$ڣáڣ$ڣ#š ڢ#ڣ$ڣ%fڢ%ڢ١ڢ&ڣ$ڣ$ ڢ&ڣڣڢÄڣ% ܣġ ۤ ٤ ڨ ܢܣ*@ٕ۶š ڸ۸۶ š۸ ڸ:   ȡQ  ȡ   ȡ? ȡ  ġܡ=" áܡ ܓצ $  ޓ(ݤ ߢܯߢ  d˯7 H ۣȡڤ  ۣ צۣۢ0H dō (ܓ(*(ܡ )*) *)* ܓ)ת) (!($IKPz(  Íܡ  , Ąܓ"á    (( )(á (((ܡ( **(( *Ä(*Ä**Ȅ*Ą*MȄ*)v*ȡO(ۤ +++ō++ɍ+ ō+ ȍ+ ( ́ ́ ʁ ʁ צ ʁ ʁ ˄ʁ @˄ʁ ˄3 ʁ ! ʁ Þ"Ä  = &)ʁ á ʁ   "ń,ʁ !  ʁ ޾Vb& |"̂iƂiƂPƂiƁǠƂiP?̂e?>ʂe?>"ˡ$Unable to open ̂iv̂jʂjʂj1ʂj ʂj 1> 1Ɓ1ƀƀƀ 1v*ƁP!1Execution aborted. Put in system disk and reboot.Td ءPšP T6ˡ!PPƂ/ƂPƂ̂iƂiƂPƂiƁǠƂiP?̂e?>ʂe?>"ˡ$Unable to open ̂iv̂jʂjʂj1ʂj ʂj 1> 1Ɓ1ƀƀƀ  $ $šš&$۞$$ۂۂە R%%&"ˡ.&"ˡ$  " áP$ނ š: -Ʉ  $ $ $šš$%&$۞$$ۂۂەߓf%%&"ˡ|ɡ& & "ˡN$ߡá4 á,á"$#0á-=?#?"?#?"?"?"002 ,٪PتPZ,PƀPZ3ƀ3ZƀU$UáVV?"ɡYV?"YB?#V,á?#VZ,,ZYYV?#VVY,W?"Wǐš ?"VUiV, ;?  ō> ? 0*2 )2ܪP/ۻ0/ٻ1 23/3"32\ 6۪Pá? ?"11ǐȡs. .ٻ..3P33? 223.20;> > ;>c> 0Ʉ  廹> ō> 0 0,?? 19 c? ??á>0 ;? ?,2-2ȡ ނ0ō>- >>+2ȡ09ō>0 ˡ c> >>0Ʉ廹> ٪P3-, ,á55תآ1آ 0 5 6633 ȡ 6363 dȡ 6 3 65 4/ á5  5 -5 ---525 ˡ 5. 5.2,2h  ػ!2 jڝ?"ɡ6?#?#ھá?#٧?#ڝ?"ٕ?"ڕ?"?J=á=2áˡL2" ۝?"ܓ?#۾á ?#ܡ$?#RšR?#ئתPVdá;<:PP#PC/š:7צ:P; ./Ad ?3 1ˡI á+ݢˡڦתRáצ!צ2ڧ? š ǀڧ?ǀǀ Ǔš@:צ!á צ!P$;ئ00000תP  0ڂȡ۾0Ʉ< R<87  áG:/ |77áBš2@/áf9šoá+ھ.á ھ/á 2á9&á9á  áán8ڧ? á 6ȡ/ݾ!á ݾ /P޾ /P 5RR3ۂɄݓVá(۾'ۂ@n: צ/˄5ȡ0ƀƀP̀ʀȡ0ܾaġ 00ܾ 87CONSOLE1:7SYSTERM2:7GRAPHIC3:7PRINTER6:5REMIN7:6REMOUT8ת802Ȅ&0á݂0 4 6ȡ4 0.  á5٪P,6YتPš  ȡ޾ *:Í#Í*á ޾:ˍ צ:P?P#áL۾ ݏ۾0 4ޕ P5:Ä:P.áٳ ا?ǀǓ ا?ǀ:1!&ÍXÍc(ÍEÍ QáG'á@=+á3@á)Fá Gá Há >z? ؚ21!$4YP>3$M l 0 nL T "&"ˡ.&"ˡ$  " áP$ނ š: -XWɡ?#X?#XW?"XWš?#X?#XW?"X?"W?"?#VVVU2 R2 ػ%2تP3+&+2T'á  ܚ2"  P ٨ ب5 5߻5޻5ݻ5ܻ56; ; ;  <  3 5=(=2hx? ?"? ? ?  . /202hh%hh%HH`%ʎ%HHצP*תP)*TESTUTIL: TEST Program for PLUTIL RoutinesתP)AMBתP)צv.10/83PR)PR)Pš)P R))Pš)P RSSAd8TESTUTIL ǰȑHH`0&# L? zD<F`"tL>nRJRl: * ( 2  R     6&>@). Calls the SOS routine GET_MARK.}  :?  hhҰ L0? hhhh Ӱ HHL#6?e ?hhhhhhưȑHH`# D?hhhhhhhh   * <L*?   d *hhhhL#"!6?   * <L*?   * <b L%$:?   * <c L%$j** * <LedbVRQPONMLKJIHFDCA>963?  hhhhhhꍴ0 ȩhh * <Ȱ ȩLa`XMJ0-*('& ~? * <LGF=:43-,+*%" f?   d *hhhhL#"!6?  hhhhϰ j쭳j*쭲L=<40.-,% V?  hhhh왺ED<:520.-+*)$ f?  hh * <hhL'&$"<?  hhhhHH * <İ ȑjȑ*ȑLedbROLJI |?  hh왺 ȑL54)&#!  L?  hhhh * <Ű 깷LCB1.-,*)&# ^?  hhL  ?  hhhh * <hhʰ 쭷ȑL{@H?hhhhhhjWȑ jȑ(!Hh0?H&h*0HH`?  hh *h < L+*(" B?  hh * <` hhL&ȑ`W CL& hʈL&fi` hhHj*H*HHL&SOS-PARAM-TABLE)PS)ǠS)SPROɡOR * ˡ  RSS)PSǠS)S*S)SP )OPENתPm )/Open a file, prompting with title and pathname.תP )צTRANSLITPm )צ.Transliterate characters in a string variable.P )צUPPERCHRPm )צ%Change a CHAR variable to upper case.P )UPPERSTRתPm )'Change a striצ Testing HEX44   &4Care to try one yourself? < Y or N - Default> --> yéYÍ0Enter the integer to convert to hexadecimal --> PYÍW%Enter the string to be deblanked --> P ná&d< HEX4 ( , wk_string); wk_string = ''v 'v צTesting BLANK1# John Q. Public תP &4Care to try one yourself? < Y or N - Default> --> yrself? < Y or N - Default> --> yéYÍ^צ,Enter the hexadecimal string to convert --> Pná&kZ BLANK1 ('') = 'צ BASE_TEN ('צ') =  ^צTesting BASE_TEN1234תPצFFFFP7FFFתPצXYZPצ12345P&צ4Care to try one you 䩀á" کQ)&Qé Í⩀QáP š۫P&Vz|~5ghZ'Another one? < Y or N - Default> --> &yéYÍnd)ꩀ ۩Oššɡ  کQ) کQ))Q PɡPPOšOP PQP)PתP&  橀á詀 צP کQ) á۩OšɡO ۩Q_Q..ȡU٩Q٩Oȡ<))m)4O..ȡ_(Select a menu item by number or up/down $arrow. ESCAPE corrects. "Q" quits.׈)'Change the length of a string variable.תP )צNIBBLEXPm ),Expand a CHAR variable into its hex nibbles.תPO}}ȡ%) m)2 .N RO..)צINTSTRPm)צInteger from a numeric string.P)צIOERRORPm)0Name of an input/output error from error number.תP)LNAMEתPm)צ+Last name and sort name from a name string.P)NEWLENתPmadecimal string.P)BLANK1תPm)-Strip double/lead/trail blanks from a string.תP)צHEX4Pm)צ0Hexadecimal string representation of an integer.P)צINCPm)Increment an integer counter.תP Yth power.P>QOPO}}ȡ)P  ɡ-)~~צ ~)Q~P)~~[~)Q~צ]R~P)צBASE_TENPm)צ/Integer representation of a hexng variable to upper case.תP)צUPPER1Pm)צ'Change a string variable to mixed case.P)VARIANTתPm)צ0Eight different ways to view a sixteen bit word.P)צX_TO_YPm)צ&Raise long integer X to theå0צNaughty. I said an integerצEntry 'צ' is not a valid integer ná&  INC ( צ) =  Rצ Testing INC44&4Care to try one yourself? < Y or N - Default> --> yéYÍ#Enter the integer to increment --> ZƂ'Ƃ'ƄM Testing OPENצOUTFILEP-צ Printer FilePVREWRITEתP.printerתP&צ4Care to try one yourself? < Y or N - Default> -->PEN (OUTFILE, '-', 'Vצ', '');INPUTׯ'-V -V&Press any key to continueצINPUT  '  one yourself? < Y or N - Default> --> yéYÍeצ"Enter the character to expand --> &  ná&s ,צINPUTOPEN (INFILE, צO ɡ(צchr( ) צ ', nibbles); צ = ''צTesting NIBBLEXA0&צ4Care to tryength --> -P-å-0Naughty. I said an integerEntry '-' is not a valid integerná& ,  NIBBLEX ('LEN John Q. Public תP תP &4Care to try one yourself? < Y or N - Default> --> yéYÍEnter the string --> PEnter its new lPná&R NEWLEN ('',  צ); צ String = ''צTesting NEW PצGladys P. Snodgrass PhDPצJohn Dos PassosPצMr. TPצMr. T,PJohn Mac DonaldתP&4Care to try one yourself? < Y or N - Default> --> yéYÍEEnter the name --> ast_name) -Vצ Sort Name = '-'צ Last Name = 'V'צ Testing LNAMEצ# John Q. Public å0צNaughty. I said an integerצEntry 'צ' is not a valid integerná& LNAME ('צ', sort_name, lצTesting IOERROR I&צ4Care to try one yourself? < Y or N - Default> --> yéYÍצ1Enter the integer I/0 error code (0 thru 127 --> PyéYÍZ(Enter the integer string to convert --> Pná&h \ IOERROR ( צ, io_err_name) = fצ') =  \צTesting INTSTR1234תPצ65535Pצ7FFFP -123 תPצ123456P&4Care to try one yourself? < Y or N - Default> --> På0Naughty. I said an integerEntry '' is not a valid integerná&   צ INTSTR (' yéYÍצ-Is this an "INPUT" or and "OUTPUT" file? --> &P צ-Enter the file's display name --> &-P-Open the file "RESET" or "REWRITE"? --> &VPV -Enter the file's default pathname --> &Pná&Ƃ'} TRANSLIT ('צ', '-', 'x$צTesting VARIANTצ4660PINTEGERתP$-4660תPINTEGERתP$ACHARתP$צFALSEPצBOOLEANP$צABPTwo CharactersתP$&צ4Care to try one yours7*+P  ++ Bits: ++ȡ:*+1 0 ++&Press any key to continue.  Bytes: ++ȡ4*+P  ++ Nibbles: ++ȡ7*+P  ++צ Octals: ++ȡ Boolean: *צTRUEצFALSE Characters: ++ȡh*+ ɡ3chr(*+ צ) *+ ++ *vצCHAR*`צBOOLEANצTRUE**6 ++ȡ"*++++צ Integer: * צ Word: *צ efault> --> yéYÍSEnter the string --> &P"ná&`d! VARIANTs of  treated as a INTEGERׯ't"צTesting UPPER1 JOHN Q. PUBLIC תP"gladys p. snodgrass phdתP"John Dos PASSOSתP"&4Care to try one yourself? < Y or N - D try one yourself? < Y or N - Default> --> yéYÍSEnter the string --> &P ná&`f UPPER1 ('צ');צ = 'צ'); צ = ''v צTesting UPPERSTR John Q. Public תP Gladys P. Snodgrass PhDתP John Dos PassosתP &4Care to4Care to try one yourself? < Y or N - Default> --> yéYÍdEnter the character --> &  ná&rR , UPPERSTR (' ) '); צ = ' ɡ(צchr( ) 'צTesting UPPERCHRa0&צ*Enter the string of source characters --> &-Pצ*Enter the string of X-late characters --> &VPná& \ UPPERCHR (' ɡ(chr(fredתPVצdferPfredתP-fPVA-ZתPfredתP-צffddPVABCDתP&צ4Care to try one yourself? < Y or N - Default> --> yéYÍצ*Enter the string to be transliterated --> &PVצ');-V צ Xstring = ''צTesting TRANSLITfredתP-צa-zPVצA-ZPצfredP-a-zתPVAPצfredP-elf? < Y or N - Default> --> yéYÍצ.Enter the variable's base type צ/oolean, har, nteger, or ther --> P  BáBOOLEANתPצ/Enter the boolean (TRUE - Default | FALSE) --> P  צTRUEPF צFALSEPCáiCHARתP/Enter the character (No RETURN afterward) -->   Iá^I &  * عteVG8  )   uh[NA4'á NTEGER[36]) /END; ' " "PROCEDURE FREADDEC(VAR F: FIB; VAR D: STUNT; L: INTEGER); "PROCEDURE FWRITEDEC(VAR F: FIB; D: DECMAX; RLENG: INTEGER); "  IMPLEMENTATION L E ^JECommand: E(dit, R(un, F(ile, C(omp, L(ink, X(ecute, A(ssem, $ "TYPE DECMAX = INTEGER[36]; STUNT = RECORD CASE INTEGER OF 12:(W2:INTEGER[4]); 13:(W3:INTEGER[8]); 14:(W4:INTEGER[12]); 15:(W5:INTEGER[16]); 16:(W6:INTEGER[20]); 17:(W7:INTEGER[24]); 18:(W8:INTEGER[28]); 19:(W9:INTEGER[32]); 110:(W10:Ig AMB 04/14/86 LONGINTIPLUTIL integerEntry '' is not a valid integer &ná&%PP@c _ [ WSOKGC?;73!/#+%' GECA?=;97531/-+)Pá 4d 8:v" D$"h&$(&L*)(,*,,v460L&xponent integer "Y" --> På0Naughty. I said an integerEntry '' is not a valid integer &ná&%PP@c _ [ WSOKGC?;73!/#+%' GECA?=;9753said an integerEntry '' is not a valid integer%Enter the exponent integer "Y" --> På0Naughty. I said an  & &&4Care to try one yourself? < Y or N - Default> --> yéYÍ%Enter the base integer "X" --> På0Naughty. I  צ,  צ , result); צ =  &צTesting X_TO_Y & &NTEGERתPצ/Enter the integer --> PqTwo CharactersתP/Enter the two-character string --> P $ná&bV# X_TO_Y (+-Í-۲0ݡߑ ع      z Z   :    ( tV8$@hvhwhhxylxh:vwlv8<<teger; 3{Integer from a numeric string }  procedure IOERROR (IO_ERR_NUM: integer; var IO_ERR_NAME: string); 3{Return the name of an I/O Error from its number } procedure LNAME (in_name: string; {FirsX4 (value : integer; var str : string); 3{Return hex representation of fullword } procedure INC (var counter: integer); 3{Increment a counter }  function INTSTR (strg: string): in3{End Include VARIANT} 3 function BASE_TEN (strg: string): integer; 3{Base-10 representation of a hexadecimal string }  procedure BLANK1 (var strg: string); 3{Strip double/lead/trail blanks from string }  procedure HEPUT 8$maKEYBOARDN$ FALSE 2TRUE H&NIL bMAXINT * BYTESTRELWORDSTREd@\ 3{  ival }  :'')PBBINTEGER xppREAL : CHAR  BOOLEAN v{ STRING 0 TEXT :$ INTERACT* INPUT &$inOUT] of 0..255); <3: (nybl: packed array [0..3] of 0..15); <4: (bit: packed array [0..15] of boolean); <5: (bool: boolean); <6: (octl: packed array [0..4] of 0..7); <7: (word: char); <8: (ch: packed array [0..1] of char); ʈƅ ~擥  抦|ɥ8包~ƅLII懩&&u`hh HHHHHL,}ʈƅFyʈƅ}ʈƍƎƋƊЌإL2d|e~28ʈƅyʈƅƉ` _LWŁ|}ƅLwE||怦}ʚH恺8倅偪ƅ  ILL, _LwLL,E0LL _Lw ILL,ELL _LwEe8刅刪ʈʈݒ&~ƀLV~HHL,~HH~HHHHHHL,~ʈƅFHHHH恥HL,0~}ʈƅ0I愊iʈؚH恥LŁ|} ƅLw ~~8ʭ==` 5l 5 l 5lhzh{hƁhhhƁ}eʆƀƀ|ʊe~8偅z{lzhhhhhh8冐 0 h HHHL,LGIL,h hBCʈ _.ł( Ł|} ŀ}|t MI Last, Suffix format. } 4var out_name: string; {Last, First MI, Suffix format. } 4var out_last: string); {Last name. } 3{"First I Last, Suff" name to "LFIS" & "Last Name" } * procedure NEWLEN (var STR: string; {I/O string whose lgth is to be changed} 4LGTH: integer);{New string length. } 3{Change length of a string, pad with bldPצInvalid byte countPtצInvalid block noP\צ Disk switchedPG .!gO9/@Ʉצ Device errorP PL v@ڹצInvalid pathname syntaxPئToo many char files openתPئToo many block fi+ t^G P1  ?ڹצInvalid request codePצInvalid status or control codePצInvalid control parm listPئDevice not openתPצDevice not availablePצResource not availablePצDevice write protecteal pathnameתPئNo room on disketteתPצUnit not onlinePئ No such fileתPئDuplicate pathnameתPئFile already openתPצ File closedP~ئBad input formatתPfئWrong disk formatתPMצDiskette write-protectedP-"ybF /qs  ڹצNo errorPצNo filename storage spacePئBad unit numberתPצIllegal operationPئIllegal directory specתPئUnit no longer onlineתPצFile no longer in directoryPئIlleg/-7-7ȡ38-8צ 12345678903 3  3//3-$--.///   /  š áK `צ0123456789ABCDEFPئ0000תP..ȡڕ(X ZڪP.á-á.77P+á77PšڪP/-0š-Ʉ11צ0123456789ABCDEF..á(11צ0123456789abcdef..á/-.--/ צ šצ š á for the file. } 4DISPLAY_NAME: string; {English title of for display } 4IO_METHOD: string; {Either RESET or REWRITE. } 4var PATHNAME: string); {In: Default PATHNAME or null} N{Out: Actual PATHNAME if OK. } N{ Null String if QUIT from proc } 3{Open a supplied filename } & IMPLEMENTATION L E cedure OPEN (var FILENAME: FILETYPE; {FILENAME: Internal name of file} N{FILETYPE:User-defined data TYPE} N{ for the file. } 4DISPLAY_NAME: string; {English title of for display } 4IO_METHOD: string; {Either RESET or REWRITE. } 4var PATHNAME: string); {In: Default PATHNAME or null} N{Out: Actual PATHNAME if OK. }  procedure X_TO_Y (x: long_12; y: integer; var result: long_12); 3{Returns X to the Yth Power }  procedure OPEN (var FILENAME: FILETYPE; {FILENAME: Internal name of file} N{FILETYPE:User-defined data TYPE} N{ } procedure UPPERSTR (var str: string); 3{Change string variable to upper case }  procedure UPPER1 (var str: string); 3{Change string to mixed case } rs, or range of chars } 4 dest: string); {Dest chars, or range of chars } * {Transliterate chars in string } procedure UPPERCHR (var ch1: char); 3{Change char variable to upper case anks if lengthened } procedure NIBBLEX (inchar: char; var outhex: string); 3{Returns 2-nibble representation of char field } ( procedure TRANSLIT (var xstring: string; {String to be transliterated } 8source: string; {Source chales openתPצInvalid file reference noPئPath not foundתPئVolume not foundתPئFile not foundתPئDuplicate file nameתPצOverrun on volumePئDirectory fullתPئIncompatible file formatתPئUnsupported storage typeתPئRead after endfileתPئFile position out of rangeתPئIllegal accessתPئUser buffer too smallתPצ File busyPئVolume not SOS or Apple-2תPצInvalid length in parm listPئOut of memory for sys bufferתPئBuffer table fullתPצ=ܛܛ|?06á7á =#/ܛܛ|>0;á-/<š = <<0:á5ɡ =<<>V0809Í>/<</' !0 ڦתP< 05˄0/0<á = P<<ܛ0M<š<<AAPA QAPܛ0ɡ? =07áP<š =;/'<š3 P</ NšNɡš ɡقPšPٕ1113335678Lj:Ǖ; @> ?=9ڪP0ڡ ٛٛ hš ġؼ# T11 []<Mš @3  & ȡ,ٛ ٛٛ 4 D   ȡaٛړ ٛٛ ,ٛƀ/WW...ƀƀ., -٪PتP-VƀVƀš5ƀ́XƁXƀƁXƀƁƀƁƁX́ẂXʁWʁXȡ7ƁYʁWƁYV́VʁVšʁWƀʁVʁẂWB9ABCDEFPئ00תPTR ٪P-*..W.W.ȡW-WWɄOW,W/,/ȡ*-,000-0,,)///ƀW0/ 0/š0////.ƀ/.ƀP/.צ š̀ƀPƀ, RƀǢƀP[צ)̀ƀPƀ, Rƀ[ǢƀPrPō ؿɡ ڕ 0 צ012345678P/.צ á&g/JڪPƀ " " ÍPō٦תPئתP[צP š  11צ.š. 00/1ˡ1/0ˡ/á-.-ȡ!2---2IIIׯ2צII2esqׯ2Esqׯ2ESQׯ2INCׯ2Incׯ2ATCׯ2DEDׯ2DEdׯ2EDDׯ2EdDׯ6[2P Q[ǡ//š4[//P/Pצ á  ////.2/.P.ײ2--2á;[[Pצ Q2ǡP/.Von2Vanׯ2Macׯ2Mcׯ2צDe2Diׯ2צLa2Losׯ2deׯ2צdi2laׯ2צlos2צdella;2P QǡP/.צ á>Fצ,PōצInvalid error codePT ɡI@ɡ#--(SOS)-U-P!--צ(SOS)-U-Pצ(SOS) צError not in tableP  ////.2/.P2צInvalid sys buffer parmPئDuplicate volume errorתPئNot a block deviceתPئ Invalid levelתPצInvalid bit map addressPf@Z6jV@,t`E6&n[zǀɄצSystem call errorP Pj V š =/|P<< =0 /<<m 72468":.ڪP٪P צREWRITEצRESETצ,Procedure OPEN error: Invalid IO_METHOD parmצI/O method passed = "צ".צ Fix the calling program, please.צEXIT triggered by subroutine.̀ƀƀƀƀ ?̀ƀƀצ** ̀ʀƀʀ ƀIOERROR The name of an input/output error, given its error code. 7. LNAME Extract a "last name" from a name ordered by first-name, middle-name or initial, last-name, and suffix. 8. NEWLEg blanks from a string. 3. HEX4 Hexadecimal representation of an integer. 4. INC Increment an integer counter variable. 5. INTSTR Integer representation of a numeric string. 6. ends PASCAL even more usefully. The library unit, PLUTIL, consists of the following members: 1. BASE_TEN Integer representation of a hex string. 2. BLANK1 Strip multiple, leading, and trailinproduct may agree that it is at once a bit more and a bit less than is needed for good software engineering in the Apple /// PASCAL environment. This article presents an additional PASCAL utility library, one that ext have library units that extend the language is an example of that power. Apple Computer, Inc. offers one such set of extensions under the name "Apple /// Pascal Utility Library," product C3S0001. Those having that program _I_n_t_r_o_d_u_c_t_i_o_n PASCAL is a powerful microcomputer programming language. Its ability to Office: (703) 961-7921 Home: (703) 951-2025   ALLAN M. BLOOM, PhD CDP 2303 San Marcos Street, Blacksburg, Virginia 24060 PASCAL UTILITIES FOR APPLICATIONS DEVELOPMENT WPW ʀƀʀ ƀ̀ʀ̀ʀ̀ʀʀġʀʀ̀WצQUITצP̀WצABORT ʀá j:Pr . F` ( 8Th.2"̀ʀáWPʀˡʀ  invalid̀ʀƀERROR: ƀצPress RETURN to retryצEnter "QUIT" for no file' or "ABORT" to terminate this programWתP̀ʀXצEnter pathname of the .: N.. צ#̀צNo file}צREWRITE"̀_"̀ʀŦ.TEXTÄ;ẀƀPƀ.TEXTUƀPW"̀ʀN Change the length of a string variable, padding with blanks if the new length is longer than the old. 9. NIBBLEX Two-character hexadecimal representation of a CHAR field. 10. OPEN Open a file given an English title and default pathname. Give the user a chance to correct any I/O errors. 11. TRANSLIT Transliterate specified characters in a string. 12. UPPERCHR Change a if (strg = "N") or (strg = "n") then exit (program); Example "B" is an example of "user friendly" programming. The program will correctly interpret " no ", "N", and "Not on your life!" } B: writeln ('Continue? ("Y" - default or "N"'); readln (strg); blank1 (strg); strg := copy (strg, 1, 1); ing has no leading or trailing blanks, and it has no consecutive blanks within it. Examples: A: blank1 (' John Q. Public '); {Returns "strg" as 'John Q. Public' reserved for negative numbers. They go from $8000 (-32768) to $FFFF (-1). BLANK1 is a procedure that removes redundant blanks from a string variable. The returned strase_ten('XYZ') = 0 {Not hexadecimal } E: base_ten ('12345')= 0 {Longer than four characters} Note that half the available values of an integer variable are 0 B: base_ten ('FFFF') = 65535 = -1 {Integer over 32767 negative} C: base_ten ('7FFF') = 32767 {Maximum positive integer } D: bcal and SOS, a lot of values are more easily expressed in hex. You might wish to tell a program the number in hex and let the computer do the conversion. Examples: A: base_ten ('1234') = 466ugh "F"). It returns its decimal equivalent as an integer. The routine returns zero (0) if a non-hex character is found in the string or if the string is longer than four characters. At the nuts and bolts level of Pas Pascal Utilities BASE_TEN is a function taking a single argument, a string of characters representing up to four (4) hexadecimal digits ("0" throogram TESTUTIL displays these examples and offers you a chance to exercise the modules with your own. PLUTIL October 31, 1984 Page 1 Bloom is discussed, in its turn, in the following paragraphs. We'll be looking at not only _h_o_w to use them, but why. Some are self-evident. Some are less so. Examples of use are also given. The accompanying Pascal prOne other (TRANSLIT) is derived from from Kernighan and Plauger ( _S_o_f_t_w_a_r_e___T_o_o_l_s___i_n___P_a_s_c_a_l_, Addison-Wesley: Reading MA, 1981, 51-57). Each of the above modules to look at a sixteen-bit word. 16. X_TO_Y Take a long integer X to its Yth (integer) power. Two modules (HEX4 and BASE_TEN) owe much to Jeppson ( _S_o_f_t_a_l_k_, September 1982, 73-86). CHAR variable's alphabetic value to upper case. 13. UPPERSTR Change a string's alphabetic characters to upper case. 14. UPPER1 Translate a string variable to mixed case. 15. VARIANT Eight different ways HEX4 is the inverse of BASE_10. Feed it an integer, or any fullword equivalent to an integer, and it returns a string of four hexadecimal digits ("0" through "F"). Examples: A: hex4 (4660, strg); {Returns "strg" = 1234 } B: hex4 (-1, strg) {Returns "strg" = FFFF } C: hex4 (32767, str This procedure contains all 128 Pascal and SOS I/O errors (from 0 through 127) as listed in Apple Tech Notes Number 6150.014, issued September 8, 1982. PLUTIL October 31, 1984 _name); {Returns "io_err_name" as "(SOS) Directory full"} C: ioerror (246, io_err_name); {Returns "io_err_name" as "Invalid error code"} , rather than letting a program crash. Examples: A: ioerror (10, io_err_name); {Returns "io_err_name" as "No such file"} B: ioerror (73, io_erre to an integer variable. IOERROR is a procedure that returns the English meaning of an input or output error. This is useful when you are trapping the errors yourselfwhen the user klutzes, the program can read a string, analyze it, and ask the user for correct input if the string is non-integer. Note that while -32768 is supposed to be legal, I have been unable to assign that valutr ('7FFF') = 0 {Non decimal characters } D: intstr(' -123 ')= -123 {Forgives lead/trail blanks } This routine is useful for keyboard entry. Instead of getting a crash if the string fails any test. Examples: A: intstr ('1234') = 1234 B: intstr ('65535') = 0 {Integer over 32767 } C: ints "+"). The remainder of the string may not be longer than five characters, it may contain no non-numeric character, and its numeric value must be in the integer range of -32767 through 32767. The routine returns zero ent, a string of characters representing an integer value. It returns the string's decimal equivalent as an integer. The string may have leading or trailing blanks, and it may have a leading sign ("-" or It is good programming practice to have meaningful (long, Englishlike) data names, and INC just takes some of the bother out of using them. INTSTR is a function taking a single argum inc (array_pointer); {Returns "array_pointer" as 4661 } B: array_pointer := -4660; inc (array_pointer); {Returns "array_pointer" as -4559 } an integer variable. It allows you to write "inc (integer_variable);" instead of the wordier "integer_variable := integer_variable + 1;" Example: A: array_pointer := 4660; L October 31, 1984 Page 2 Bloom Pascal Utilities INC is a procedure that increments g) {Returns "strg" = 7FFF } Note that in both BASE_10 and HEX4 the hexadecimal representations are displayed in the "normal" way, with the least significant byte last. PLUTI Page 3 Bloom Pascal Utilities LNAME is a procedure that takes a normal "first-name first" name and returns both the person's "last-name" and the name resequenced as a "last-name first" string. Examples: A: lname (' John Q. Public ', out_name, last_name); es the length of a string variable. If the new length is shorter than its original length, the string is truncated to the right. If the new length is longer that the original one, spaces are added to th PLUTIL October 31, 1984 Page 4 Bloom Pascal Utilities NEWLEN is a procedure that chang them. For example, the last name "Dos Passos" is returned as "Passos." This problem can be avoided by either entering the name as "DosPassos" or by replacing the blank with a non_printing character. problem. Another problem is "two-word" last names. The program recognizes a very few last-name prefixes (e.g. Von, Van, de, la, Di, Mac) from a specified list. It doesn't handle all ofleft terminates with a period, so it is taken as an abbreviation (the routine can handle any number of suffixes). The result could annoy a gentleman with whom it is not nice to mess. Placing a comma after the name fixes the s suffix. A judiciously placed comma can handle awkward cases. In the case of "Mr. T," the routine's rules of thumb get in the way. The last substring contains no vowels, so it is classed as a suffix. The next to the for perfection. The routine recognizes many suffixes, by either rule-of-thumb or from a specified list. Also, the routine takes anything after the first occurrence of a comma as the name'In common with most such routines, it could have trouble recognizing a name's suffix (Jr, III, PhD, MD, etc), a two-word last name (Dos Passos), or a non-standard last name (T). The variety of human names is a smidge too great out_name" as "T, Mr." <--- RIGHT} {Returns "last_name" as "T" <--- RIGHT} This procedure does a pretty good job of finding a last name, but it is not perfect. ns "out_name" as ", Mr. T" <--- WRONG} {Returns "last_name" as "" <--- WRONG} F: lname ('Mr. T,', out_name, last_name); {Returns " "out_name" as "Mac Donald, John" <--- RIGHT} {Returns "last_name" as "Mac Donald" <--- RIGHT} E: lname ('Mr. T', out_name, last_name); {Retur_name" as "Passos, John Dos" <--- WRONG} {Returns "last_name" as "Passos" <--- WRONG} D: lname ('John Mac Donald', out_name, last_name); {Returnsout_name" as "Snodgrass, Gladys P., PhD"} {Returns "last_name" as "Snodgrass" } C: lname ('John Dos Passos', out_name, last_name); {Returns "out {Returns "out_name" as "Public, John Q."} {Returns "last_name" as "Public" } B: lname ('Gladys P. Snodgrass Phd', out_name, last_name); {Returns "e right. As examples: A: var strg: string; strg := ' John Q. Public '; newlen (strg, 13); {Returns "strg" as ' John Q.' } B: strg := ''; newlen (strg, 4); {Returns "strg" as ' ' } NEWLEN will not accept a string longer than 80 characters. Its usefulne display_name: string; io_method: string; {Either RESET or REWRITE } pathname: string; {Null string gets no prompt} ns a null string as the pathname. A default pathname prefixed with "**" (double asterisk) indicates the "no display" mode. As an example: var prtfile: text; without the ".TEXT" suffix. When a valid pathname is entered, or if the default is selected, the file is opened and the pathname is returned to the calling program. If there is no file to be opened, the routine returtober 31, 1984 Page 5 Bloom Pascal Utilities If an existing textfile is to be opened, the routine permits an entry user to supply a valid pathname for the file. You may also use PLUTIL's error-trapping features in "no display" mode, not bothering the user unless an I/O error occurs. PLUTIL Oc of file. It also specifies an English language DISPLAY_NAME for the file and the way the file is to be opened, either RESET or REWRITE. It may optionally also specify a default PATHNAME for the file. OPEN prompts the opening of a specified file in a standard way with extensive error trapping. The program supplies the internal filename and its associated FILETYPE. The default FILETYPE is TEXT, which works for almost all typesrepresentation of its constituent nibbles. For an unpacked character, it looks only to the two low-order nibbles. OPEN is a general-purpose file opener. It leads a user through the B: wk_char := '0'; nibblex (wk_char, outhex); {Returns "outhex" as '30'} NIBBLEX will take either a packed or an unpacked character and return the same hexadecimal har: char; outhex: string; wk_char := 'A'; nibblex (wk_char, outhex); {Returns "outhex" as '41'} l" order, high nibble first. Do you get the feeling that this procedure is a crutch for byte-oriented programmers who can't handle low-nibble-first representations? Examples: A: var wk_convenient to think in terms of bytes than in words. If we say that a block of data takes up 512 bytes, why shouldn't we look at that block as a PACKED ARRAY [1..512] OF CHAR? NIBBLEX also returns the nibbles in "normate) into its two component hexadecimal nibbles. The author has found this of most use in "dumping" files in character and hexadecimal, to look at their innards. HEX4 could be used, but it can be more css here lies in saving a few lines of text and -- more important -- in having the courtesy to pad lengthened strings with spaces. NIBBLEX is a procedure that expands a character (by A: display_name := 'printer you are using'; pathname := '.printer'; open (prtfile, display_name, 'rewrite', pathname); if pathname = '' then {Processing for no file }; During the procedure call, the user would see the following prompt on the console screen: Enter the pathname of the printer you are using: o the same length as the source string -- by lopping "excess" characters or padding with the repeated occurrences of the last destination-string character. A repeated source-string character is ignored. Examples: ordinality. For example, "a-z" is equivalent to writing all 26 characters from "a" through "z." TRANSLIT expands any "ranges" in the source and destination strings before processing. It then forces the destination string t same position of the "destination" string. In TRANSLIT a dash (-) may be used in either the source or the destination strings as shorthand for a range of character values of increasing multiple translations. A string transliterated from "aeiou" to "AEIOU" will have all its vowels capitalized. All characters in a string that match a character in the "source" string are changed to the character in the TRANSLIT is a procedure that transliterates specified characters in a string to other specified characters. For example, you may ask TRANSLIT to change every occurrence of "a" in a string to "1." TRANSLIT can also perform after the call. PLUTIL October 31, 1984 Page 6 Bloom Pascal Utilities OPEN re-displays the prompt at its original screen position. Note that OPEN can return a null pathname, indicating that there is no such file. The calling program must test for that conditionry cycle will not cause the screen to scroll. When an invalid entry is detected, the routine uses six lines to display the problem and the user options. Afterwards, OPEN blanks all messages. If "retry" was requested, m or her another chance. The "QUIT" option returns a null pathname to calling program. "ABORT" stops everything and exits the program. If you leave nine screen lines for OPEN, the error message and re-entr. The error-description comes from the IOERROR procedure. If the user mis-typed the file's pathname, or accepted an invalid default pathname, or didn't have the right disk in the right drive, pressing RETURN gives hi or "QUIT" for no file or "ABORT" to terminate this program In "no display" mode, the messages are preceded by a line containing the pathname that caused the errowed by RETURN) indicates that there is no file. An I/O error yields the following messages: ERROR: error-description Enter RETURN to retry appear, and the .PRINTER would be opened without user intervention. The user may press RETURN to accept the default or key in another printer's name, such as SILENTYPE or QUME. A blank entry (one or more blanks follo Default = .PRINTER Response --> [] If the default pathname had been a null string (''), the second line would not appear. If the default pathname had been '**.printer,' the message would not A: wk_string := 'Every good boy does fine'; translit (wk_string, 'aeiou', '12345'); {Returns "wk_string" as 'Ev2ry g44d b4y d42s f3n2' } B: translit (wk_string, 'a-z', 'A-Z'); {Returns "wk_string" as 'EVERY GOOD BOY DOES FINE' } C: translit (wk_string, 'a-z', 'A'); ight different ways. Once you have declared a particular word of memory as type VARIANT, you may reference it as an integer, a character, a pair of packed characters, a boolean, a packed array of 16 booleans, a pair oy alphabetic character that is preceded by a letter. VARIANT is neither a procedure nor a function. It, is rather, a data type that defines a single word of memory e Note in example "B" that UPPER1 is not a panacea. The "phd" should be written "PhD" as the proper abbreviation. UPPER1 capitalizes the first alphabetic character in a sequence of alphabetic characters and lowercases anadys P. Snodgrass, Phd'} C: wk_string := 'John Dos PASSOS'; upperstr (wk_string); {Returns "wk_string" as 'John Dos Passos' } {Returns "wk_string" as ' John Q. Public ' } B: wk_string := 'gladys p. snodgrass, phd'; upperstr (wk_string); {Returns "wk_string" as 'GlLAN M. BLOOM," UPPER1 will change the string to "Allan M. Bloom." Examples: A: wk_string := ' JOHN Q. PUBLIC '; upperstr (wk_string); se," with the first letter of a group capitalized and the rest in lower case. This is most useful in displaying data. No matter whether a record field is in your data base as "allan m. bloom" or as "AL October 31, 1984 Page 7 Bloom Pascal Utilities UPPER1 takes a string and turns it into "mixed camming bother, but UPPERSTR can save a lot. Imagine how many different ways that someone can enter the device name ".PRINTER." That is how many different tests you save by capitalizing. PLUTIL e --> '); readln (input, wk_string); upperstr (wk_string); if wk_string = '.PRINTER' then {whatever} UPPERCHR saves a little progra readln (input, wk_char); upperchr (wk_char); if wk_char = 'N' then exit (program); B: write ('Enter the pathname of the output filriables, and UPPERSTR operates on strings. Each changes any lower-case alphabetic character to its upper-case equivalent. Examples: A: write ('Continue? (Y - Default | N) --> '); hed much more efficiently by other means (see UPPERSTR). It may come in handy sometime. UPPER-CHR/STR are a pair of procedures that uppercase. UPPERCHR operates on CHAR va {Returns "wk_string" as 'AAAAA AAAA AAA AAAA AAAA' } TRANSLIT is one of those routines that seems like a good idea, but may not actually be too useful. Uppercasing a string can be accomplisf 0..255 bytes, four 0..15 nibbles, or five 0..7 octals. This is a bit more than another toy for the bit-fiddling types among us. It can be educational actually seeing how many different ways Pascal can view the same bits. Examples: var v: variant; A: v.int := 4660; {Put 4660 into "v" as an integer variable} bits = 0010 1100 ither "0" or "1," so the author didn't mess with it. The procedure will handle either positive or negative bases. ENDIT is not a PLUTIL procedure, function, or data type. ENDIT is 125 } A "designed flaw" of X_TO_Y causes the procedure to return a value of "1" if the exponent is less than "1," as is shown in "B" above. The integer result of such an exponentiation will always be e B: x := 4; y := -2; x_to_y (x, y, result); {Returns "result" as 1 } C: x := -5; y := 3; x_to_y (x, y, result); {Returns "result" as - integer; result: integer [12]; A: x := 4; y := 2; x_to_y (x, y, result); {Returns "result" as 16 } that particular arithmetic operation can come in handy. Pascal 1.1 provides this capability in its SANE library unit. Examples: var x: integer [12]; y: aises a long integer "X" to its integer Yth power, returning a long integer result. The long integers must be of "length" 12 (INTEGER [12]) each. Pascal does not provide for integer exponentiation, and three-bit numbers comfortably. The high bit is left over and is ignored. The set of octals would be the same whether the rightmost bit were "0" or "1." X_TO_Y is a procedure that r The boolean equivalent of integer 4660 is FALSE. Since the leftmost (lowest order) bit is "0," the whole word is evaluated as FALSE. The "octal" representation shouldn't work. A sixteen-bit word does not hold a set of tention to the high-order byte of a CHAR variable. When you define the word as a pair of packed CHAR variables, however, it _d_o_e_s look to the word's high byte, the "18" in this case. tilities Noting that you must read right-to-left, the above entries for bits, nibbles, and bytes should make sense to the mathematicians among you. The "char" value of "4" proves that Pascal pays no atal word, however, things read right-to-left. PLUTIL October 31, 1984 Page 8 Bloom Pascal Uple's P-code interpreter excepted) think that the "high order anything" belongs on the left. You, I, and almost everyone else outside the Orient read things left-to-right. When you get _w_i_t_h_i_n an Apple Pasc boolean = FALSE octals = 4 6 0 1 1 The first thing that you had best notice is that everything is "backwards." You, I, and almost everyone else (Ap0100 1000 char = 4 pkd chrs= 4 DC2 bytes = 52 18 nibbles = 4 3 2 1 what I am doing with this documentation. The next move is yours. I recommend listing all 15 pages of the PLUTIL unit's text file and studying the modules of interest. Some of _m_y text may have been fuzzy, but