8L2C)pJJJJ IH(ȱH:=IH[H`@H^H  $ +   I/H`JLNGȄBȄF aK  haaFF  mJm# KKJ UJ )J ۈ) ;J3ȱJFȱJGJKaȄM  aaNNJFLGJL LSOS KRNLb.D1/SOS.INTERPŠ̠Š.D1/SOS.DRIVERР頞 0 ) (lH'&3&'&#e'#%e'%'&"$"$#%'#%h`$e&INVOKE2gg&B3PRU1 <gg*HELLO.TEXTa!gg-READ.ME.FIRSTgؾ"'CATALOGOo!g1LENFIX.TEXTag2g2ɦ-ɦ/ *MENU.MAKER |g g5DISKNAME.DAT,ggFLASHNAME.DATGgw %SEG.T jgŸ/ 'B3INVOK Igg'B3MAINC1ggIII.BSB.19ɦ ' *SOS.KERNEL ,Vg/!a*SOS.DRIVER 44g/Z*SOS.INTERP e5]gɦ'Oɦ'HELLO g/ LENFIX ɦ-g7*LENFIX.INV >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@LLnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!)? *PRO.KERNEL `DaElH$?EGvѶK+`L HHLy XP LM ŠϠĠӠS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8RI%e,ȥ,*,- y,,,-,,,ȱ,,- yL+,ȑ,` 2"p-,-L(Ġ %>,i-i8, ȱ,%,W,pp ڠ %p`l  " ) i   !"#$%&'()*+,-./0120 `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ǠĠӠ!((ͽϠРРSOS NTRPSOS DRVR(.D1(YYYYMMDDWHHMMSSMMM̱忠ΠͽŠ堠Р͠Ю̠Ɔx߭J ʈc(()o/ e/''ʈ((''()(1i / e/''ʈ((''((''((''' ('`ŠDAY, DD-MON-YY HH:MMSUNMONTUEWEDTHUFRISATJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECԠŠР@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 % <`` LLɠ8`ΛLL渠`ǽ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ƍťǍŠ)͠ Wٍۭۅ5ۅƭۅ X̰ ìۈۑ T̰ۅƭۅ X̰ۙ%ۍ" T`K8`)` İ ۱ۈ` ưW/ۈęۈЍ۩@` 8 MƐ  5 Q8`LŅ ۅ ۩ۍۅ Lɰ ʰۅۄÍÍۙ'Ù ۍ*ۨ  Ѝ۹ۙ8v- ðJ ¥ ð, ðLO ʰƥLT`'  mې浰``8 8 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 Ѷ"` ɰ Ȑ`E`Ɔ X̐8`>>5Ѷ Qܩ<`>`\ʊJJJJ ۍ۩  ˰Fȱ X̰6 0 Lɠ 0ۑۑ8ȱ`H8` ɹ $  8JJJJ8 ` ۪` H hQ)fʅ F jF jF jF &!  eװ*  ̰F湥 ƹ`Z8`@  ʰ泭ۑƳ ʐ` ʐ` ˰ ƹ Wː`ۘ . . .۪8*Jۦȱ ˦,+* ʈ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 ֤FHۑۑh8`P) հ Wհҥ,J+j泭۪ƳۑȊ ) ~ fPL ͊.>.ʱ+,EP!.E.Lw+,,ӄ*- P*e (` հB հ5 Wհ0,J۪泭ۑƳ sϰ(` L Ͱ2 ~ P kҐ#L8 T 2ΠHHȑhhȑ`Ld )N8` xհ*eȱ+eȱ,i۠Ѻ۹ۑ񥤅- ť.Lcԥ.La Ͱ$)rJ 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`$Jۑĥ` İo!)N8`WپX0 ĥLä X0 ĥLà !"#$ Đ2@H AڰCŰrP` 3ڰ(` AڰѶ? İG8`Fە1 ռ İ ЩP߭)@N8`1@8` Aڰ񈱴ۈ)ۅƭۅ X̰ 3ڰLÍLT̥L㼠  ʰ` İK ХP8` LɐH80)N  հ)@LO ˰)0 ̐` M ­۠泭ۑƳѲƱƳ X̰ Rڰä,] Xx,f (I0јIFjFjFji```x@gŽPy+wLwԠ͠ŠԹ.D1 .D2 .D3 .D`HJJJJh)y` (2ϩ 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Ȱ4 )ߍ) hjjjjۥ0CF = -$(L !LLL&L L-LJ٥eƦ ,L  # ` (L.L…ҥÅӭƅХDžѥL1LUȑ  i ߩLL )  札)  ҩLL` **éL0;` H ) abRcdTefVghXijSdfhj 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ȥɭ }`` ? }``  }`X0i 8~XX0H }h襯` ©Wéĭ }0W`F X0A */5BL. zF`LLz Lz`Y `Ơ堧 B k L( LO  %   }` ` ?!©UéĩU󥣍V }`` ?)) $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žŠƠŚ̮ÎȠ Ӡ̠Ӡ` LL#L/LL'Lgab `abBcd cdBrcadbho:ab.cݰdDcݰd8abҊ v+abcde0f`   cCȱcD C Ea  UV 1 ELUFVG FUUCVDեYCWZDXWXCUDV[ v`b0WXYZiUcȥVcWX eeYZ ggE` @SATR HH` (# (KXT .")"#)  #`,.$ ()-'( / .`% (.L,/0x ('( `,.0L& (,.0L7 Đ`ʥ逅8n13DL8H\0`(d  $,($  ,BSerial Printer Driver -- Copyright (C) 1983 by Apple Computer Inc..PRINTER A")Copyright (C) 1983 by Apple Computer Inc.>88  >!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>0# #0~$ <"<"""<< <"""<"><$""< """"  "" 6***""""""""""<""< :< $"""2,"""""**6"""""< >>>>> ""*:<"">""""""""""""">>><2"<""">""" ""  ">"6**"""""&*2""""""""""""*,"" "" ">""""""""""""""**6"""""""> >>>xr356789:;<=>?@ABCDEFGHIJKLMGA7  3  5  >>< (&20 *, **>> "2*&" " >>  ">> "8""> """"""< SOS DRVR"CUSTOM.3 )((8*,;((*,((+)((9/(p((>3  =9 :9 .(~|L|LNqooGoDDDcc0ccpc]]c"QM"|@@pAATT**|  )* i LiHh`PQPQ>P 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ʆSTL8HSITQQST4nʐ3x1eʍ1,/p/H h(eʅ8ʅİLa )`Y)D00L:1?24n21  % &$0) `/0) `,.0L tHsH`! (xy```,.0L HH`Ln,/023x #) "# (```'+"'*CFMRZ_ '058FV[fjsuw;Console rx 0, )ߍ:) J)*PR,T,V( : `,k<,: JI`I`<,:J̰`=m@>,:J}ʅ̽(I I `<Mj,:0pJՐ̑ʈ`pJհ0`ՑʭrpȐ`=m@< B h A$g " x) (,`% (gL,}0, `gé ĩ `:) j:;jN;~j;O,:0'???>>8?>p<<AAA@@8A@q==C)CB)B C}0 x) `(`hh% ( ΍ ύ逅Ñ}`` " ( ĩ~Íĩϭ & &υΠÑΈ~ F ~ҰةeÅÐн},,P,`,g$ ( efh) `xÙ+(`xÙ&(`)4`)5`)6`)7`)8`)9`,i0!M:0p ȱq L `" (~)y ~JJ* I `x|x|,,}P-X~ F }~L } `,,i0L È`,g HH`LL! l      5  Hdcefh&+si  M0   h) `(" (  (È& 8  `)2ȱÍ3`)1`Ɂ" (cefd`Hc <Le Le ,g0L HH`! ( 9EKQWbmz`(" ((è%È`2ȭ3`1`d`c`+È`&È` & IMk`4`5`6`7`8`9`<ȭ=` & @jI`:ȭpȭqéL ==L: ,lCL <=L: <,n)LL8 L8 u:L8 ;)ߍ;j`; ;j`uBL8 uCL8 u)u;) u;L8    x) `(,  LuL-upp<`uqq=L: vuL L L #1:CY` 9C<m><=m@=>@?AL8 >m<>@m=@<=L8 <m>?=m@AL8 C9L8 ; ;k`;);k`,@`<,m p<L<`<p<`,ms<L=q=L: ,lXґȥӑ,10 h0  `,g0L  ҅ӥĥŰ+,0p 4 Ls  Ls i )"|tȌs|st HH` MjH,: <J h̰ <rh,oL`%CYgu9 Ln90$0%,7 ҥ L$0T,8OK50P;ҥ,8 L%\   8҅¥Ӆé҅L,5,6  & @jIH,5 p  He҅Ґhe…å逅h,23Lhʩd8,h)ec efeede`,5 H  h 4  `5!    4(P 4 4  `,g0L,10kH0 ԥ f0)ĭ9)9҅xh(ĥŐL i,1HȊ©L,52,9-P" a{) b) )ab)a a,h0& &+%a0 +hcefd(c,@cfabdf`cnx  (,4h`dd,9P"<:J H) +̰ H) +ʭcP h̰BTVSPLH   5"ʘ HH` (# (=  0`)aIٮ@8pذ `$0"8,:Jک@ׅפ؈۩MjL,:08*Ȅ B ,:J}΅н(I I $0;P̑бʑΈ,:JՐ̑ʈ0 Ցʭr̈A萠L: ֦ڱΑ0Б֤ h L  p,:0 JfiΥiώJe΅Хiю@ B $p̑бʑΈ0 Б̱ΑʈeمΐeمАA萿 :  `ʝ"`t  !#%') V 8fxL@ ] I)!) g 80 J8}L y L 0yʽz0 y L7  Lh `*f*&*)` ϭPh0 йPL)`)L` L``  `L` H , 8 V ТΕLϦI ] +)J* g I`LL) @L) L8``Lթ`~L8L)  =H 'HH N M))Mhh0 }LO}~~Șݻ~`}}~L< L }ީ~` ɠɀ)ӮԮmwӥmxԐ mi` HHGH`  &xix 0ޤՐڢ,P<0 )ߍL- J,P,QJ,R,SJ,T,U,W`,t0L40 ( dȅɥŐ ĐL `ʝ`))ժuvЭ H ʊJyjhz|ֆ׆ح)JfJf$PIJfש ʈ8 @ש wx LVخ ʊJJJ莟mww HH`! (`ɖ" (èÈ``,t0L4 HH`L  d!  `ɖ" ( dÈ  ``,t0L4 d0Cս30. , V  @„ȄL5/((((PPPP @``` @@@@`xp<@ @ :H9H` (# ( -l..PcJt`,t$ ( t`tL4`,t0L4www """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwwwwww(C) 1980 Apple Computer (+@EIR[ty} NQ9Copyright (C) 1983 Apple Computer, Inc. Graphics Driver..GRAFIX b """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwww     ! ( 0 7 I N S _  . G R Y f {    ! $ 4 9 F I P S V \ a h m p s x |     ' + < ? D G N U f k p x ?BEJMRUX]`h  2;AGMS[fot|              . 3 6 9 < ? B E H N S V \ _ b w  KORY\aelpu !$(+.147<?BFILORUX]`finsw| !%*/369<+;CNU\eh "*-036<BLORX_fj &+38;?DGLTot <?BGLQgjox',/25:BG` m j`Hآ Hӭԭ h h`8٭028ٍڍ0Z$eٍeڍm٥m8٥08ٍڍ`8٥058ٍڍ0ԭeٍeڍ808٥8٥ 8مڅ H , V Εm٭mڭ))njnjnjfjfjfj+mӥmԐ8L( Ӣ NPQRSTUVWXYZ[\]^_1 ;ASK FOR READ MODE ONLY JSR OPNPRTB ;OPEN EITHER SPECIFIED DIRECTORY CG0 LDY #FCBLEN ;WILL CLEAR CAT FCB OUT. LDA FSTYP ;CHECK STORAGE TYPE FOR DIRS CMP #$0D ;PLAIN NAVILLA BEQ CG1 CMP #$0F ;ROOT DIRECTORY? (WHAT DOES TOM HAVE TO DO WITH IT?) BNE C SBTL "CATALOG CTPL EQU NAMBUF CATALOG: EQU * BNE ISANAM BRK DFB GETPREF ;SOS CALL: GET_PREFIX DW PREFTB3 LDX NAMBUF LDA #1 STA INREQ ;SO JSR OPNP2 WILL WORK. LDY #0 TXA ;NAME LEN JSR GOTN22 JSR OPNP2 JMP CG0 ;SKIP AROUND OPNPRTB ISANAM: LDA #    ) . 6 = J P S X [    $ 3 : = F d  > B H M s `e|&+.QVYcjuy~':{%(-47=FMUX\_jmz  .169DWfy   % * > A H K Z v z }      % , 1 5 : = B K R Z _ b g n s x ~ /47=G\x{~'+.149?CGIKMOQSUWY[]_acegikmoqsuwy{}J) ܭL FܪJJJJ)`'+9;=?ACEGINR\aejns~  #&).369<ADGJMP^g $*-06=HLORWcfloruzp Q%Q̑`pPIE1pΦ#$01ʐ1`JJJJ)`%υߥ`1(ȦJJJ`&&*`JJ` **&*&ߥ`J` ***`` ` Jjjߊ` ߊ`JfJfFߪ߆` `JfJfJfF`ߩ`$011̰JJJ LP \LD$7߭$PH8 nߩ nh ߍϭ - k, ϥ- kϱϮEϑʩ`P z  HH` k(h`$0#$E$0p Q%Qʑ`pPIE1p$E$0(L%τ`ϩE҅0Ȅ(fL% ('Άѽн`8Hٰ hIiHمh8Iif٤Φݰ>Jj8ۅe݅eޅ $  m`!J8݅ eۅ$  m` , V $צ!ϤҐ мφi`Jf`<,&ʰ,i8i#Hiihifʦʆi) v`i,ʐi,iPIIʥ)ifʦʆ̐pLj/Fϐ&Ȅ`'@τ`Fϐ@ E҅F8ئȢΆѽϽ`/epɀjff&ݥeepɀjffݠ %)  %)`%  0.)      0  ` ` @ ``8٨JJJ ) u˘ vͽʅ̆`8Hi #i,$0F y բӅLx  mӥmԐL] h `  )`%)8`)    H   ʥ)Ģ    H Ģ L E% %) L 8`ۅ&ۥeATERR CG1 LDA #0 STA CATFCB-1,Y DEY BNE CG1 LDY #FCBLEN*10 ;GET FCBNDX CHEAPLY STY FCBNDX JSR SETCAT ;INITIALIZE LDA RWRFNM ;PUT REF NUM INTO FCB STA FCB,Y CG2 JSR CRDO LDY #FCBLEN*10 STY FCBNDX LDA FCB,Y ;GET REF.NUM INTO READ BYTE STA RWRFNM #0 ;ZERO OUT FAC STA FAC,Y INY CPY #6 BCC FRNFL NOWEOF LDA CTPL+$15 ;MOVE EOF INTO FAC STA FAC+7 LDA CTPL+$16 STA FAC+6 LDA CTPL+$17 STA FAC+5 JSR LOUT ;OUTPUT IT. LDY #0 ;TRANSFER NUM INTO CATBUF+50 OEOF LDA NUMSTR,Y STA CATBUF+62,Y BEQ NMREboth asses STA PROTYP+3,X DEX BEQ FRNFL LDA CTPL+$10 LSR A ;DO HIGH NIBBLE NOW LSR A LSR A LSR A JMP FRNLP2 FRNFL LDA CTPL+$10 ;GET THE FILE TYPE CMP #$E0 ;IS IT A PRODOS FILE? LDA PROTYP,Y BCS ISPRO LDA FRNTYP,Y ISPRO STA CATBUF+2,Y LDA CS NOWEOF * * DO UNEXPECTED OR OUT-OF-RANGE FILE TYPE * FORNFILE LDX #$2 LDA CTPL+$10 ;GET FILE TYPE AND #$0F ;STRIP HI NIBBLE FRNLP2 ORA #$30 CMP #$3A ;MAKE SURE IT'S A DIGIT BCC FRNLP1 ADC #$06 ;NOW IT'S A HEX CHAR A-F FRNLP1 STA FRNTYP+3,X ;Cover PE CMP #22 ;22 ALLOWABLE TYPES (0-21) SO FAR BCS FORNFILE ;IT'S A FOREIGN FILE ASL A ;*2 ASL A ;*4 ADC CTPL+$10 ;*5 ADC CTPL+$10 ;*6 TAX ;USE AS INDEX CMP2: LDA TYPTB,X STA CATBUF+2,Y LDA #0 ;ZERO OUT FAC STA FAC,Y INX INY CPY #6 BCC CMP2 BFACS NTLKD CMP #$C3 ;Unlocked? BEQ ALLOK LDA #'+' ;Restricted access but not LOCKED STUFACS STA CATBUF+1 ALLOK LDA CTPL ;GET NAME LEN AND #$0F TAY CMP1: LDA CTPL,Y STA CATBUF+14,Y DEY BNE CMP1 ;TRANSFER FILE NAME TO CATBUF LDA CTPL+$10 ;GET FILE TYE LDA CTPL ;IS NAME LEN=00? AND #$0F ; (Strip off 4 high bits) BEQ CMP ;IF SO, GO DO NEXT FILE. LDA CTPL+$1E ;Get Access indicator AND #$C3 ;Mask out all but access bits CMP #1 ;Is it Locked? BNE NTLKD LDA #'*' ;Load LOCKED indicator BNE STULEN CHD2 LDA HDMSG-1,Y STA CATBUF,Y DEY BNE CHD2 BEQ CBL ;ALWAYS HDMSG: ASC " TYPE BLKS NAME MODIFIED" ASC " TIME CREATED TIME EOF" DFB $0A ;Leave a Blank Line HDGLEN EQU *-HDMSG * CMP: JSR RDCAT ;READ THE CATALOG BCS CBL ;ALL DON SNGFLT JSR FOUT ;MAKE TO ASCII LDY #$FF TPL: INY LDA FBUFFR,Y BEQ TPRTS STA CATBUF+29,Y BNE TPL CBL: LDX FCBNDX INC FCB+XFLGS,X ;NEXT STAGE OF CATALOG TPRTS: LDY FCBNDX LDA FCB+XFLGS,Y CMP #6 ;DONE YET? RTS * * DO THE HEADINGS LINE CHDG LDY #HDG DIR INTO CATBUF DEY BNE CL12 LDA #'(' ;PUT DATE OF CREATION IN PARENS STA CATBUF+17 LDA #')' STA CATBUF+26 LDA CTPL+$1D ;GET DATE DIR WAS CREATED LDX CTPL+$1C LDY #18 JSR GENDATE LDA #'V' ;VERSION NUM STA CATBUF+28 LDY CTPL+$20 ;FROM DIR JSR1 ;ENDING. DW CBL-1 ;AN EXTRA BLANK LINE * * ROUTINE GENERATES THE FIRST LINE OF A CATALOG * CATL1: INC FCB+XFLGS,X LDA #$2B ;LEN OF FIRST READ JSR RDCAT2 ;READ IT IN. LDA CTPL+4 ;GET NAME LEN AND #$0F TAY CL12 LDA CTPL+4,Y STA CATBUF,Y ;PUT NAME OFXRNUM,X BNE NCL2 INC FCB+XRNUM+1,X NCL2 LDA FCB+XFLGS,X ASL A ;GO TO APPROP ROUTIN TAY LDA CTDP+1,Y PHA LDA CTDP,Y PHA RTS CTDP: DW CATL1-1 ;CAT LINE 1 DW CBL-1 ;BLANK LINE DW CHDG-1 ;HEADING INFO DW CMP-1 ;MAIN PART (FILES DISPLAYED) DW CEND-LDA FAUX STA FCB+XRECL,Y LDA FAUX+1 STA FCB+XRECL+1,Y LDA FBLKS STA FCB+XBLKS,Y LDA FBLKS+1 STA FCB+XBLKS+1,Y NTROOT: RTS NCLN: LDY #70 ;FILL CATBUF WITH SPACES FIRST LDA #$20 NCL1 STA CATBUF-1,Y DEY BNE NCL1 STY CATBUF+69 LDX FCBNDX INC FCB+ITIALIZE FCB FOR A CATALOG * SETCAT LDY FCBNDX LDA #TXTTYP+$10 ;TYPE: TEXT, READ ONLY STA FCB+XUID,Y LDA #0 STA FCB+XFLGS,Y STA FCB+XSEGNM,Y LDX FSTYP ;A ROOT DIR? CPX #$0F BNE NTROOT ;NO * FOR A ROOT DIR, FAUX CONTAINS TOTAL BLOCK, FBLKS=# USED. JSR NCLN ;NEXT CATALOG LINE BCS CATDON ;CARRY SET IF DONE LDA #>CATBUF LDY #CTPL STA SBFPTR LDA #LA]ENFONEXINPUOUTPUDIREAWRITOPECLOSATEXABYAAAAAWINDOINVOKPERFORAAFRHPOVPOERRLIERKBEOTIMEDATEPREFIXEXFNEXFN%OUTREINDENPROGPREFIXAAAAAAPOHOMA s;aBaMssssssicsrbtavalaoasasjiCh8nii:jhhjssh)WT1vsss ssi:j smb:jhae`m`s6s,s2sڐ3 s&s;v|}|sSssssssssssTyy:MTssssssssssssȓ!ssۇ3*サス hfQp nsnѧs|cshsssss|sssOa[assssss'sdfghijklmnopqrstuvwxyz{|}~PソスススSOS NTRPPOgLcYe /// disks, including the contents of this one - the long-lost (and previously unknown) version 1.3 of Business Basic. There was NO documention EXCEPT that the stranger left the source code to version 1.3! We've included a few of those files on this disk WASHINGTON APPLE PI PUBLIC DOMAIN LIBRARY PDS DISK : Business Basic 1.3 DISK # : 3BSB-19 BOOTABLE? Yes One evening in early 1995, ///er Tom Linders received a visitor. A mysterious visitor in a blue car. Left with Tom were a number of Appl. We hope you enjoy the disk! nown) final version of Business Basic for the /// - version 1.3! The last "official" version we knew of was 1.23 along with a 1.23ax version from On Three. No documentation, but some special files have been included that might supply some info`b WELCOME! WAP /// SIG Public Domain Library Disk Category/Number : Business Basic/3BSB-19 Disk Format: Self-booting (Side One only) This disk contains the long-lost (and long-unkSUB$OFTRACNOTRACNORMAINVERSSCALERESUMALEGOTIRESTORSWAGOSURETURRESTOOALOASAVDELETRURENAMLOCUNLOCCREATEXECHAIAAACATALOAADATIMAGCADEAPRINDEELSCONLISCLEAGENETABTSPCUSINTHEAMOSTEANOEXTENSIODIAFNOAAAAAAAAAAAAAASGNINTABSATYPRECAAAAAAAAAAPDLBUTTONSQRRNDLOGEXPCOSSINTANATNAAAAAAAAAAAASTR$HEX$CHR$LENVALASCTENAACONVCONV&CONV$CONV%LEFT$RIGHT$MID$INSTR>=<^/*-+NEXT WITHOUT FOSYNTARET0 ccccc`,@cc Hd dʸcH Edh(cL ccک,ccLdYd`dkdHELLO d TdLzdUdYVddWddYd`EAdP ȈP/P`U_eP`eLd e!Ls j _`LK$L% LA]gHhHhH , - a j$% _`g5h6h6hhhhh8g5h6h `6 '\L` c ؤ`Lؤ  c.CONSOLEZZ RcQcccdcd  (`H shLs cc . s e Xb()' XbKHLI CjL j89弅:彬: `H hɝɞɜ)`cc  .芅 e ()'` e'()HKIL XbLgLA]) kihHH  `89::  b!)` Ja` Ja` }sL Ya#`LՌ,H }s h ؤL䃩,Lؤ8f`  KL CjL jOPPKLLg KL` Ѽ =ȄL_ȱi8eiiji!Q)L_QQQ`L5_ 6 :0.`9::hhgg.%g& $gegަhH逪hhʰ` ʥ Z aLT ʥIJJABB=>>;<<?@@R DhhjQ):,$f 0$ p $ 0~!L_!sm?iٰcL`Q )!a{)Qi ڐ߽Q) L`i) L`ɢ ɣɍж$HQ L`hʥ0QQȩ5%"/װ&hԐɈf0ɔĐ 8,f 8f L^ʅ轫QQ dͼcL d sc# 3lcHcchc) ^ âLh ^Lg jhP ^Q _`-Qggeg5hih 6i6 '\Q" \$%QQQg a `L] Q Q`L2`8髪 Q8iTjH]fHhH_HcH uhch_hhhfhi0hhhB B A` H d P Vmh֥'( Փ)&񦕤LNKM$La  l 3l l6V6م5 56ɀ56H lhɀ֠X)& VmL '~ 3lL 8_^_ __hg^`8 `gHhHhH5?6@6@*5g5666gҦhhhhhhhhg:e:;e; ;m;`@c@c?be^@e@ _m__^ [L}\ i6g55``BY BSAMHH LPL(\)&P j9ȑ9ȑ99i=:i: >i>`Ɂ7XWWXjnXWi` \?@@bgchch ^ \b \b^b^L[b8g+H__^P3P.zdP{dydLLz$%LP Li 6eydLLL]$%Ld LiȞcFccccccc.ccccccccc ɴcˮc`Lz  Apple Business BASIC v1.3 - Copyright Apple Computer, 1980-83 E BAR IN PROGRAM INTERRUPTED%&'(%+.@C$DE FG!H"I'MN#PQRTW(X潭`: 808`:cc@͚HPP { BY#IJJABB 9::)ѭ Z OZ ` eօ婶FILES BUSNOT SOI/FILE TOO LARGWRITE PROTECDISK SWITCHEBAD PATFILE NOT FOUNPATH NOT FOUNVOLUME NOT FOUNDUPLICATE FILDISK FULFILE LOCKEFILE NOT OPEDEVICE DISCONNECTERESOURCE UNAVAILABLDIRECTORY FULDUPLICATE VOLUM ERROR Please Press SPACURN WITHOUT GOSUOUT OF DATILLEGAL QUANTITOVERFLOOUT OF MEMORUNDEF'D STATEMENBAD SUBSCRIPRANGINVOKSTACK OVERFLOREDIM'D ARRADIVISION BY ZERILLEGAL DIRECTYPE MISMATCSTRING TOO LONFORMULA TOO COMPLECAN'T CONTINUUNDEF'D FUNCTIOVARIABLSOS CAL_eP`e^eLz(Q(QUP`P./PPP d`UPUPP`_eP`e^e^e^e^e`P j _`(% -, aLs j {ghhh$PL\h 3lȱȱ%$LWH mmh 4~  l#W", omȱ28eLeji`L3l omȱ"Ɂɂ ȱ :, 8iSjj ȱiTjj8逪XW0 f0WHW$ 0X: h mm f0 omLf) omWA 0 L` mmLeW;8<< ` СLr HI Zs shmHmHlHHɦ# ZshmHmHlHH , hHL_t  ,, tshRSSSLui ui,L$0 |Lt wijk6kxyy wxy6yH8iinn0 xj*% $\hcɭ_ >S?SLcd`jk8L|LLRL,Li LnLx vr$PLZLLsș Ȅ ( Kqƚƚ` s Zs),;,=,#,(,,ѼLLA]LA] (lmm$P$`LHƽ قƼh`$ lȱlLێL{ɝɍLaɖsh E0`H ty ))EL5q  8 $0!PizEn{ T Ti hLqLs wLar !L 7}$ 0`QɀX 6Ls.+"2i ALP s vr$PL;si,L-hLqs Lsɘ9e:: }Lgi , \p Zs$8$0p`PLA]Յ H s vr ɀ ȱV Hih0 & ?<I?iE W Lq s )?SJ)S  ' Lsi imLQqL LLA]+pL]```?EXTRA IGNORED?REENTER $0pL!`L#XW ҫ k*iXX X a[LA]Xii7 { n k$ H|WlXmXm sLpXXW zzEn{i Zx |H$ kh8 )KLen l nnV j$D$ P 膼Lo$0",i I P X> XXXL?] f`LA] l Jj axhZkKhLhhhe9e:: mLg @jei `Ls Cj:,"hhhhLgɜEɝDɞLb Hɾɺдmhɾ p j ,i p j` jLi j,h`L}aLb$%/%5$ &5 &5e$$5e%%$&%$e$% LjLs ʥhehL`,  ` CeFL s ` ~iLg \hhh5h689H: H:HLHKHH6H5HHH` 1i` ,i` p j ,i p i` j CjK$L%8eȢ 9:: f`.ghh ` ` a[ɾ,LA]h逅$L# lKL 4~ l $hLgLsLb \h5逢)&a RHRHLgLj8:9: قSTT`)ɀLK$La8gLOPPKLMNhhc 3lXL]L]-L(cPLA]OPMNKLhhLg` jL3T*i kXX XLfy a['_ch_chbi^g [ihh \ p j gih p b %q qn %jjwg56Ly { a q h| XHWHHH d iLOPP$pX0S&ȱhȱKȱLe潥ɂxy56y6( w( w\Ly|F )XHABB8 Ђ__^hHI8e^ Ђ@1 @+?%GHHHIJJih BABGHh`$  u Дs IJJ^__Lpveȱeȱe XE )s LvɁ >H>H= ȱI8gJJ hhge giu +-EL&) x ! |  .' "5 1 e p) eiIii i)L)` i 0 0 0 `Hhth`^Qb ^^ Dbb D`}i~ei^~0] e De^`}`566 Hɀjhji` HihJi(`  :q$LW ɺ b$P i pi$ȱL jɻƟ j 柰ީ Lihh sLg  s ! b   s "!!!" ؤ ؤ 䃥! 䃩 ؤ ؤ 䃥" 䃩 ؤ!Lfa8Lؤ@](IڢʥnH iHɁy {5 hɁ͠ Vt~w/z*|cYX ~uƀ1r ziP _| K|iɈ z }i8Huiiu Ax  {h z` {] z ]Lz {oȘ戅 ziȅ Uxdo`Abijyj00ڊIi i/ȄȪ)Qe.șQI)ЪQ0.ȩ+f.8f-QEQ/8 i:QQQQQQ`y`'d H| {ZuLx {z% }uH |h{ :|H yiLZxf d$h0Lfy ef q80fL}COt#t$X VmLKjk8 | D~LVm |-$nșQnȩ0iLq "~ ze~ | ~ | ze ze 5x |ei0 i8fe.șQ0șQmymlylkyk >yiLyn)FjjjLyiɠ |nnI*imLxjklm` s e-o+ smo..IE)2s S -+fh r$h8fL}fg s$gPf8ef zf zf o0`L ` H$ge zh 80 }LU}H H|h y|zEn{ W|m5 |l5k5n %j5i5` W|m l)m _|m`znth` W|ht`i  Wy )y`i n*` h|jkjI*mlinLxFn`nEz0ʢiH Axnihoi8傐ILn|`7 z!L|iD8$n gxi` H|z{ {L{ zL{ W|8ii zivjwk xlym* 蕁24(y&x&w&v0⨥ymyxlxwkwvjvLV{@jjj)(L{LA]~jklmLx5665m5l5k5n j5i`d,]WXX566Рy UxΠy {y =>hgh<<;[a{gggegȱgehh L ,LA]  8` ҋ^b,\(eb cc`ebcA[8饰 a{8`8\e@@He? \@@?hbbb0 ea ȑbc8L @@h5h656H W|mHlHkHjHiHl5 8eeghh^__`6` we5566ɂ66` s , `  6Lseff 6.!'$ iߪ$ 0 H8eAi\h$ P8 (L0$ 0p ;<<ccb? @c@ube.a{b륐@ 6 2`  kH) +jhJJJJ +jL 0:i`LA] &HHHHHH s &hL5qhhh6h6h555_ȱ5VHHHH L/5H6H6HH 5^6_6_hhXhXhWLk Џ`556 @Lfyu  @u h Z`&m&l&k&j`L% 5xL}$0pL +xQLAi `u LxLni u Lxui0 ,,% п ۓlm0}5}} kk} kklm ێLΓ[ 80@8 !i tutt tj hn` t` ц0xQN0xQ 0xQ$n-xQwQxQ`i` np`5665i`$0BP?iH Zi hLzt h mlmkljkij8ihn`L!$0DpA - !nHi80 d^d]d8U]d5V^d665[d\d d d[d\d\dJi ]d\d_d[d d85壍]d[d6复^d\d d ) qUUHVH ȗU7WUV8XVV8 ȗWb7ȥXɂ逅c7 5ef fbe  7U8VLh88h7UVUO / +'L U)łiV VLܗ L> 8U 7ȱ7 UU ЯUVULU7V8 e L LO U qUU qUH85h688V77U U ꗠ5qUWȥ6qUX7qWWȥ8qWW ܗ٥IiV) V ܗLKU7V8)GGwL e00`zQ 0r)`rqqL $uyG-++ $n-G` kiekiiIif`ri8r` e0#zQ 0zQi)zQ`zQ` ؤA dc\# dc\ʐ ؤ 3lL ؤ ؤ ccc(c`ccG(sȢ8傅䂐$u 0 GL$uAG)EGȩ+$i-Gȥf8 i y L]H 0Gh 0GG5H6H6yLle w LGȥ GƁ8 LLii0$iti8ti Y8偅w恤wvwuJ-$n0+G0xQ`yiɀjjn*8miɝ d LՌ &q$uL$)JJ8偅8傪 m Lf$i0Ł!y0GLiL~䁰< 0$H ,GhGթ $u$n 0GЫ-Gv)' $G uJ-$n0+G $G0)G 瞥vphh` Ljk ,hh`Sj9-k LՌ9j ekekk|z)ekk |j[ ٚ  L`j 9kkj"j"kеAX"+-&$.ECR/#Z*! DBA0 k$JJJJ) ݙxQ՟j ؞Lݠ Ÿ,-uukv kv@vvyL-Lj ؞ ݠ ŸA80멀uukeqqtt$uA)*w{t L3 $uЫkЦuuj ؞ysLi,kl$uhuuj ؞ XkkNuuj ؞k 4%v. #  `u tAvʘtDթ ؞q(~th`pvquts~y fp$pp8j/;XAx=|8ez{{ قghh "o `L x  wwghhoؠKkqvj ݠL`$uZuukvN kGv@  vvyLL3TL%LxG %$p0`pog lkڥrok8o,koL\jAaCcoJ lko 5 lkk lLo L L{ HG56H6Lxh  (`|||}z,A[ :808Ш`,֞@`y Gy`LHq1$u;' L u pL󝥆L3l`|H}HzH{HHH ɶ# mhH s  :q ws,; Ls  :q$ $xrL цiLpnH D~hɀ8(*iQ.-:/ xQxQhhh{hzh}h| u p 0|8pJ ܚ J_mݚmݚJ_AgBhBh [^A_B_B` ^"( 6M &F566 w}z{6{Lʜ #z{{"} GLsLA] jHHH i j ٥z{{ Cj}hhh ;в| |膆  ,PH uhA?B@7B@87F8f7877878L?]7 8*JA5gB6B68 h圍h?H@H@HI?J@J@ '\h@h@h?gAhBhBJJ8 J圍J7ך8ؚBԚLz`ܚݚBٚܚ ݚL?]`Ib^JcJcmš pAЖǚɚÚ Ě8 DDFŚ ƚ8 DiFEC CD)˚Dm˚D̚CBȚLAޚ皍՚ښIȌ 8   8 JJ` !(Q)QP8 ei UŦL3TUU HHHHL 'hh ێLL iL 'hlhkhn jhimhHS8 Ls`L1CUDVDVU Lŧ 0 7U L|`L?] d E Lt p pdeqde8 )  sLřU` hh P LsL  6 (Lߘ[ Pީ  @Y%(&:$L3T Zs |iHn %jHkHlHK Zs * lHmH5 Zs ۇiH &HH楩e ) ,LsLG eՅ7Pi8U #   785U6VLÔU7e778ҥU^V_bcF_hcCgDhebbc [^__`U8傅UV` qUȱU` LA] qUUƜ0ƛ ȗWqeWȱWqei W` q8UUWȥVUX`UeUV` ܗcc ZdH )hLLz`  4^8fl)I)I Y ĩ`op >L2 uqL  4l)v }rHqhLێCLzkZd dZd od @qr` . 㥢 Lz` H 5 h8L  kLxvZd d vkZdk Ld s ʊ0  ekZd`LՌ HIJh*Zd) H dh[dL ъ) Zd)LjLW= ɀ6"2豼P : ,H jhWPiZdiP[dL :q $xWH hW 5PƝ洝 PJJJJL곭P鴰㴙)Qi死PpPoPn +xQeQPP ێ D~ȹQQ/Qʈ000QPP PP. PP( PP7 `st?9@'Qst5 (wx! (s8wtx (uuL4TYP= PRO= UNK P)P'Q(8Q)AQPP VCQP D~ȹQ DQuu`AM'Q TYPE BLKS NAME MODIFIED TIME CREATED TIME EOF sP)P)*+(QP)P5QP mPmPﴙ)Qi<P) 0:i% cqr  dqrqLױ ĩ`Lb򚮦Pxd gL@ \od 3 Zdk 3lkZd 'Q lLb@Lխ 3lLluvodmdsndttdwudx`F &QlQqru HH`3@3u+LՌeddd` `LzupHoHp  ױ N(hi]dhi^d dLTd qrL$op ĩ`[d\ds]dt^dkZd`Y LA]YLA]k\dd]d ^d`opqrst [d[d` d TdXMLz$0{Q{Q^dzQ]d5[d\d `pdzQpd8zQ` ZdH[dH s Zd\d[d]dh[dhZdLd,kd k\dd]d^dLd LdxQ=89zQ>:>:i{Q:{Qi{Q|Qi|QL`8(zQzQ(`dded  s q ml0` \ldL` 'ax[dQ\d^d]d :|Q|Q{Qi{QȐȰzQe9{Qe: J 2IHJh*=>> 95:6:6xQ L) )Lϫ`L?] d  `F dL]xQ, d TdLխ|Q7]d^d5[d\d 5m56m6 66 Lcccc LLzLbcQ L^H h'QQO s ɋ 0 fdcd ҰfdddgdedhdLLsfdgdhdc\dd]d^didjdLd d |]d^dx[dQ\d 95:6:6 \d[d d ) d <,8 p  :qi$ $x656$0 p W|n %jjF$0k0 liʽe`Lϧ, l)% `eLϧk` s  LՌʊ0 5 \`Zd ) \ld )ldL5qZdcɴcH )hLz 5v1 \ `kʈ,`HȘe`{ai|a|h j L8LQdʆ `! `Ȣ`  ੐ ĩ`$ L-u u`I Il8)id`  6 p &$ a `$% iLg֢   sLj$%`8f Y ` ; ` s ĩ` TLDLbopL> u0xH ҫ$0_ 6h8fH`aai shH2 ۇh uJJJJf k ĩ` Ǭ t os TL< LLϧ &WXX` ҫ$` 8isŠt`dyoopd8ip`J uv`&&&8孪孪宐橈`! @  uA?B@B @=g>h>h \=i>j>k `=g8i>hj>h ki=5j>6k6> '\)@7ld0u(> ƬƫHH $hohp` ĩbd0P`ȹP`[d[d dL.xdN d d Td#X ldodF=xd7Ncd vLgx]dd^d_d d Td T L\dZd`Lzo`n}pm aa`dyopdɄ a`" lJJJJxd s ҰL0Ls LϫN g@u\dkod tld )llmdsndt mdndtldCndmdȌ\d]dZd[d d Td"ndmdȘ LLLz ɭbd^d m_d8 n bdvkZdlWW W` .Lx , s q  mqlr ױl)# Nu 0 d TdLLz ĩ``Lx ,Nku X ul)F ĩZdH`Zd[d dld cNld dNhHZd ɭhZdl)Nl $lEN)`L5q . 㥦 5 a ɃNWNBAD PASCODPASTXTTEXT PASDTABINARYFONT FOTO BASIC DATA WPTEXTSYSTEMRESERVRESERVCAT RPSDATRPSIDXAFDISCASMOD AFRPT SCNLIBkZdo $']dd^d[dP\d d TdL8`LLխPPP) 국PJnP 국PJJJJ 굩/)Q,Q`H D~hmPQ'Q(QQ(Q`0'Q`PP 굩:)QPL굆 ێ D~ Q'Q`BLOCKS FREE: BLOCKS USED: TOTAL BLOCKS: Zs&\'\[jif`_`OZ84wA]zwwxTdʥێ7}g9fk@j<3210/.-*'%$`H 78 h LAb| Enter the BASIC program name: FILE NOT FOUND ERROR NOT BASIC PROGRAM UNABLE TO OPEN FILE PROGRAM TOO LARGE FILE NOT UPDATED  Done .CONSOLE56!STLUL\ L jLbL`8amQ   `mr r m`qA3/1.1N LENFIX  BASIC program and must be less than":"64K bytes in length."2 <lenfixFP"MENU.MAKER"1Z ADJUSTED A TAD BY DAVE OTTALINI, MARCH 1995 "LENFIX.INV":"76C";"LENFIX"::" This program and its Invokable Module is designed to allow BASIC programs":"created with Apple Business BASIC v1.3 (or later) to be usable with earlier"l("versions of BASIC. The program must be aHER SUBROUTINEnSLOW=110xFLASH/2=FLASH/2):۴ =11:=07 FLASH$ SLOW FLASH:".d1/Menu.Maker"5 WAP /// SIG HELLO PROGRAM. UPDATED 4/12/89 DGO :#1,".D1/hello.text" ž#170 (#1;ERIN$ 2ERIN$<40F#1/P=23:=25:"PRESS ANY KEY TO CONTINUE.":G$U-Z#2,".D1/FLASHNAME.DAT":#2;FLASH$:#2%dFLASH=110: FLASh Hh`LՌ)i   HH `TH..TH..TH..THATS ALL, FOLKS!BUSINESS BASIC 1.3 - THE LONG-LOST VERSION B$(I);v:520: 500THPOS=4:I/2=I/2)I=I-1I=IBOTM THPOS=44:I/2<>I/2)I=I+1I2=-1:I=I-2:IBOTM<30THPOS=44I=IBOTM/2)*2:=+IBOTM/2)-1:CA)"PRINT.ALL": OA+P 3HA=(81+UCA)A=(81+LCA):::: OA+Q Quits 3IA=(83+LCA)A=(83+UCA)"PRINT.SHOW": OA+S 2JA=(68+LCA)A=(68+UCA)/Screen.Savers/HELLON=THPOS:B$(I);XA<8A>11540bA-7640,660,690,720l:=THPOS:ٺ1600 =Q:WW=0A=:A=21A=9&oldprefix$=40A=31410: Control C "aborts" program to Basic(:A=13770: Return Selects a file *DA=27:50: Escape to change disks/FA=324000: back out one directory level 3GA=(80+UCA)A=(80+L"BASIC 0":150A$="TEXT 0":150A$="CAT 0":150A$="FONT 0":150A$="FOTO 0":150A$(L),"BLOCKS")510*=27:=19:"FREE MEMORY AVAILABLE: ";=7:=20:"80C";A$(L);$:=5:THPOS=4:I=1:IBOTM=J-1:620Q=:=26:=21:sic; +Q Quits."r12);::"80C";a$;:+w#9,"DISKNAME.DAT":#9;DISKNAME$:#9|d$=DISKNAME$$=23:=0::"80C";d$;::12)201M=3:=14:"This /// SIG Disk is \^ 19";Р,2)", Washington Apple `, Ltd."=4:B$(1)="":B$(2)=""A$=16,B) THEN 240 #1, d$="":=10:"80C";d$ ž#1300I=0"I=I+1:#1;A$(I):290,#1 6L=I-1@j=1:same=0 J:SEG=0 Tœ2030^CT<1CT=1cCT>13000Zha$="{,|,~,}; selects; to new disk; J/2)=4:=+1:ۙ=44B$(J);:J=J+1I:1,180,22:2,280,21:2,2380,23:8A$(1000),B$(1000),C%(511),C$(20),name$(20):=10:=0UCA=128:LCA=UCA+32CT=15 IF PREFIX$= PREFIX$+MID$(B$(I),VOLUME NAME (/DISKNAME) OR DEVICE NAME (.Dx)"P12);::"80C";a$;:Zb$="CHANGING DISKS"$d=23:=0::"80C";b$;::12).n=12:=20:"MAKE A NEW MENU FOR DISK: ";N$xN$)<2110=N$ :210 I=1L(A$(I),A$))200B$z0 WAP /// SIG MENU.MAKER PROGRAM (v. 6.2) =".D1"210: Coldstart (320: Warmstart &*X=11000: TEXT SLOW-DOWN LOOP ,X.1 CHANGE DISK SUBROUTINE23œ202:2200<RFa$=" YOU MAY SELECT YOUR DISK BY THE WAP OFFICE LIBRARY HAS A NUMBER OF APPLE /// BOOKS AND MAGAZINES. 0=+IBOTM/2-.5):I=IBOTM:I/2=I/2)I=I-1 œ2120B=B$(I),16)," ")-1 B$(I),"BASIC 0")850B$(I),"TEXT 0")890 B$(I),"CAT 0")1140*B$(I),"FONT 0")18504B$(I),"FOTO 0")1930>B$(I),"PASTXT 0")2070H540R\A$="RUNNING "+B$(I),16,B)f"79C";A$;:=0pB$(I),16,B) z::SEG=1".D1/SEG.T"t=+B$(I),16,B) yCT=CT+1~240:=24:=0:"@ ..... "DATE.TIME.LINE" ....JM=Ҡ,4,2))BTM1630,1640,1650,R",220(204::"79A";""; 2D=1:F=1 <#4;a$ FD=D+1 P#5;a$ZD=60#5;12)dD=60D=1nF=F+1::d$;::Y=1100:Y x13402  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T R".D1/MENU.MAKER",220 d$="" A$="PRINTING "+B$(I),16,B)=01:=0::"80C";A$;:#3,B$(I),16,B)Z=1#3;b$:"78A";b$Z=Z+1:Z=18:1290 1260 #4,B$(I),16,B)#5,".PRINTER"+ž#4#5;12):::".D1/MENU.MAKE30C$="N"C$="n"1160;:=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING": $1020.202 8::Z=1B::=23:=0::"79C";"WOULD YOU LIKE A PRINTED COPY?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"1170*C$="N"C$="n"79C";"PRESS ANY KEY TO HALT LISTING"::202 1020#2,B$(I),16,B)ž#242:::1160Z=1#2;A$:"78A";A$Z=Z+1:Z>1842:::Z=1980*:=23:=0::"79C";"CONTINUE...?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"10 MENU.MAKER TEXT MODULESEG=0"MENU.MAKER"890&*X=11000: TEXT SLOW-DOWN LOOP ,X.1,180,22:2,280,21:2,2380,23:z:A$="LISTING "+B$(I),16,B)$=01:=0::"80C";A$;::12)>=23:=0::"a$,1)="/"5060:s=s-1 5030=a$240 MENU.MAKER 6.2 * Thanks to C.M.Davidson for his help!l; G$:::320H: Error Routine 202:U=11:"79C";"BAD PATH ERROR (NO DISK IN DISK DRIVE OR DESIRED FILE NOT FOUND.)"X=11000:X:::210Z a$="{,|,~,}; selects; back 1 leve 1600 &:WW=1:0 :SEG=1;".D1/SEG.F" SEG=1".D1/SEG.G"diskname$=3802  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T READ PASCAL TEXT FILES."04=10:"7M$="NOVEMBER":1750M$="DECEMBER":1750826);"-";M$;" ";Ѡ,2));", ";"19";Р,2);" ";/П,2))=>13П,2))-12;џ,6);:1780$П,2))=0"12";џ,6);:ٟ;$П,2))=>12" PM-":" AM-" 1830WW=1530 =26:=211660,1670,1680,1690,1700,1710,1720,1730,1740^M$="JANUARY":1750hM$="FEBRUARY":1750rM$="MARCH":1750|M$="APRIL":1750M$="MAY":1750M$="JUNE":1750M$="JULY":1750M$="AUGUST":1750M$="SEPTEMBER":1750M$="OCTOBER":1750EAD PASCAL TEXT FILES."04=10:"78C";"ANY KEY RETURNS TO THE MENU."!>G$:::".D1/MENU.MAKER",320 SBTL "SYSTEM EQUATES" * MAP OF USER AREA, MAIN MEMORY * * ------------- TXTTAB ($39) * | PROGRAM | * |-------------| ARYTAB ($3D) * | ARRAYS | * |-------------| VARTAB (& SMICE NUM MREQ EQU $40 ;REQUEST.SEG MCHG EQU $42 ;CHANGE.SEG MFND EQU $41 ;FIND.SEG MRLS EQU $45 ;RELEASE.SEG GETCLOK EQU $63 ;GET.CLOCK CLDSTRT EQU $65 ;COLD.START * * ERROR NUMBERS FROM SOS: * SEMEM EQU $54 ;OUT OF FREE MEMORY. SEBDP EQU $40 ;BAD PATH OSE SFLS EQU $CD ;FLUSH SSTM EQU $CE ;SET.MARK SGTM EQU $CF ;GET.MARK SSTE EQU $D0 ;SET.EOF SGTE EQU $D1 ;GET.EOF SSLVL EQU $D2 ;SET LEVEL SGLVL EQU $D3 ;GET.LEVEL SDSTAT EQU $82 ;DEVICE STATUS. SDCNT EQU $83 ;SOS DEVICE CONTROL SDGDN EQU $84 ;SOS GET DEVTROY SRNM EQU $C2 ;RENAME SSFI EQU $C3 ;SET.FILE.INFO SGFI EQU $C4 ;GET.FILE.INFO SVLM EQU $C5 ;VOLUME SETPREF EQU $C6 ;SET PREFIX GETPREF EQU $C7 ;GET PREFIX SOPN EQU $C8 ;OPEN SNWL EQU $C9 ;NEW.LINE SRED EQU $CA ;READ SWRT EQU $CB ;WRITE SCLS EQU $CC ;CL ------------------------------ The Pointer points to descriptor's * n 1 2 Bytes byte for type checking. PAGE MSB OFF * * HERE ARE SOS CALLS INTERFACE STUFF- EQUATES, ETC. * SCRT EQU $C0 ;CREATE SDST EQU $C1 ;DES------------ * 1 n 1 1 2 Bytes * * String Entries: * ------------------------------ The Svar Type Byte indicates if the * | String | Svar Type | Pointer | string is a simple or array variable. * 1 n 1 1 2 per Dim n n ... * * String Variable Entries: * ------------------------------------------------ * | Length | Name | Type | String length | Pointer | * ------------------------------------ Bytes * * Array Variable Entries: * ----------------------------------------------------------------> * | Length | Name | Type |Dim Count| Dim Size | Value 0 | Value 1| * ----------------------------------------------------------------> * Real values take 4 Bytes * ------------------------------ Integer values take 2 Bytes * | Length | Name | Type | Value | Long Integer values take 8 Bytes * ------------------------------ * 1 n 1 n the areas are RELATIVE to the beginning of the area. * * SOS STACK RESIDES AT $FF ON PAGE $17 * BASIC STACK RESIDES AT $FF ON PAGE $1B * * Format of Variable Entries (Pointers are all Relative) * * Simple Variable Entries: INVTAB ($43) * | INVOKABLES | * |-------------| PROCTAB ($45) * | BUFFERS | * ------------- MEMSIZ ($49) * * All areas are RELATIVE to the beginning (or end) of memory, and * pointers to within ^ | FRESPC ($47) (Floating Pointer to end of variables) * | | | * | | * | STRINGS | * |-------------| FRETOP ($41) * | BUFFERS | * |-------------| VARS) ($3B) * | SIMPLE VARS | * | | * | | | * | V | * | | STREND ($3F) (Floating Pointer to end of strings) * ~ ~ * | NAME SEFNF EQU $46 ;FILE NOT FOUND SEEOF EQU $4C ;END OF FILE ERR SEFNO EQU $43 ;FILE NOT OPEN SENBK EQU $58 ;NOT A BLOCK DEVICE SEDFU EQU $48 ;DISK FULL ERROR PAGE * * TYPE EQUATES: * PRGTY EQU $09 ;BASIC PROGRAM TYPE TXTTYP EQU $04 ;TEXT FILE TYPE BINTIP EQU 10 ;BINARY DATA TYPE UNKNTY EQU $0 ;UNKNOWN TYPE PCODTYP EQU 2 ;PASCAL CODE * * 0=UNKNOWN 1=BAD FILE 2=CODE FILE 3=UCSD TEXT 4=ASCII * 5=PASCAL DATA 6=BINARY 7=FONT 8=FOTO 9=BASIC PROGRAM * 10=BASIC DATA 11=WPTEXT JSR OUTDO JSR CRDO ;OUTPUT CRLF. JSR OUTQST ;PRINT A QUESTION MARK LDX REMSTK ;KEEP STACK CLEAN TXS LDX ERRNUM LDA #ERRTABB STA INDEXB LDA #ERRTAB STA INDEX LDY #0 FINDHERR DEX BEQ GOTHER CHECKHER LDA (INDEX),Y INPPING IN IMM MODE INY BEQ DNTTRAP DEY STY ERRLIN+1 STY OLDLIN+1 LDY CURLIN STY ERRLIN STY OLDLIN BIT ERRFLG BPL DNTTRAP JMP HNDLERR DNTTRAP LDA #255 STA FILNO STA FILNO+1 LDA #0 JSR EXPAND ;GIVE USER BACK ALL HIS MEMORY. LDA #15 ;SCREEN ON.IN CASE ERROR WAS DURING A PRINT# OP. STX ERRNUM FREALL LDA LASTPT ;FREE UP A LOOSE STRING MAYBE? LDY LASTPT+1 LDX #0 JSR FRETNOW ;FREE UP EACH TEMPORARY, AND IT'S STRING. LDA #>TEMPST CMP TEMPPT BCC FREALL LDX ERRNUM LDY CURLIN+1 ;NO "ON ERR" TRAE LDY #PROGPATH+1 ;Get pointer to PROG NAM $18 DDSTR EQU $21 DDMXSTR EQU $20 DDEOR EQU $00 ;MUST BE 0 TO MATCH SOS THE STAGE OF CATALOG. * XSEGNM EQU 11 ;HOLDS SEGNUM RETURNED BY THE BUFFER MANAGER XBLKS EQU 12 ;FOR A ROOT DIRECTORY FILE HOLDS TOTAL BLOCKS. FCBLEN EQU 14 ;LEN OF EACH ENTRY IN FCB. * * HERE ARE THE DATA DESCRIPTORS * DDINT EQU $12 DDFP EQU $14 DDLNT EQUS BEEN MODIFIED AND SHOULD BE WRITTEN OUT * BIT 6 => OPEN OPERATION IS NOT YET COMPLETE (BINARY/TEXT UNDETERMINED) * * IF A FILE IS A DIRECTORY TYPE (READING A CATALOG) THEN THE FILE * WILL APPEAR TO BE A TEXT FILE, AND BITS 0-2 OF XFLGS WILL REPRESENT * XBUFOFS ALWAYS STARTS AT 0000 BECAUSE * SOS DOES ALL THE MESSY WORK. * XRNUM EQU 6 ;RECORD NUMBER XRECL EQU 8 ;RECORD LENGTH (DEFAULT = 512) * * Position in File (for SOS) = RECNUM * RECLEN * XFLGS EQU 10 ;HOLDS FLAGS AS FOLLOWS: * * BIT 7 => DATA HA XRFNM EQU 0 ;REFERENCE NUM FOR SOS FOR FILE#N XUID EQU 1 ;BITS 0-3 => TYPE OF FILE * * BIT 4 =>($10 MASK) READ ALLOWED * BIT 5 =>($20 MASK) WRITE ALLOWED * XBUFPT EQU 2 ;POINTER TO BUFFER AREA XBUFOFS EQU 4 ;OFFSET INTO FILE BUFFER * * -NOTICE THAT 12=SYSTEM 13=RESERVED 14=RESERVED * 15=DIRECTORY 16=RPS DATA 17=RPS INDEX 18=AFDISCARD 19=AFMODEL * 20=AF RPT FMT 21=SCREEN LIB * 224 ($E0) to 255 ($FF) Reserved for PRODOS. PAGE * * Here is the File Control Block definition (FCB): *Y BNE *+4 INC INDEX+1 ;NEVER CROSSES BANK BOUNDERY. CMP #$80 BCC CHECKHER BCS FINDHERR GOTHER LDA (INDEX),Y INY BNE *+4 INC INDEX+1 PHA JSR OUTDO PLA CMP #$80 BCC GOTHER LDA #>ERR ;Get pointer to ERROR. LDY #RESLST STA FAC ;(FAC) POINING RTS ;OF THE TEXT POINTER TO GET TO BUF GCRNCHED: JMP CRNCHED CRUNCH: LDA TXTPTR ;NEED A PLACE TO START SEC SBC #>BUF TAX LDA #3 ;INITIALLY NOWHERE IN THE LINE STA BUFPTR ;AND NOT IN A DATA STATEMENT STA DORES ; BIT 7 OF DORES INDICATES WHETHER AND SET TXTPTR TO TXTTAB-1. JMP MAIN ;YES, CHEAD HAS FINISHED. INLIN: LDX #0 ;NO PROMPT CHARACTER INLINB JSR INPUTLIN GDBUFS: LDA #0 ;PUT A ZERO AT THE END STA BUF,X LDA #0 STA YSAVE ;BANK # SAVED HERE. LDX #>BUF-1 LDY #RTMSG ;Get pointer to RUN TIME continue msg LDY #BUF-1 STA TXTPTR INY RTS GNPR2 JMP NPR2 CKSEP: JSR ISLETC ;IS IT A LETTER IN BETWEEN BCS CKRTS CMP #'9'+1 ;IF NOT A DIGIT OR A SPECIAL, ITS A SEPERATOR. BCS CKRT1 CMP #'0' ;A DIGIT? BCS CKREND OF THE LIST? BNE GNPR2 ;NO, KEEP GOING LDX TEMP ;MAKE SURE TO GET THE RIGHT CHAR LDA BUF,X ;YES, STUFF THIS CHARACTER AND #$7F JMP STUFIT * LINE IS FINISHED CRUNCHING CRNCHED LDY BUFPTR STA BUF-3,Y STA BUF-2,Y ;I DON'T KNOW WHY, BUT IT NEEDS TH) ADC FAC STA FAC BCC *+4 INC FAC+1 ;NEVER CROSSES BANK BOUNDARY. LDY #0 LDX COUNT INX ;ADVANCE TOKEN COUNT CPX #SCRATK+1 ;PAST THE STATEMENTS? BNE FND2 LDX #$FF ;SET ESCAPE MODE STX COUNT+1 LDX #$80 FND2 STX COUNT LDA (FAC),Y ;ARE WE AT THE STY BUFPTR ;SAVE BACK INX JMP GCLOOP * THIS WORD DIDN'T MATCH. TRY THE NEXT ONE NOMTCH DEY BEQ FNDNXT DEY FNDNXT INY ;FIND THE NEXT RESERVED WORD LDA (FAC),Y BPL FNDNXT ;WORD ENDS ON A NEGATIVE CHARACTER SEC TYA ;ADD LENGTH OF THIS WORD TO (FACUT LINE STA ENDCHR ;THIS IS WHAT THE UN-CRUNCHED AREA MAY END ON LDY BUFPTR ;GET WHERE TO STUFF CHARS DEY DOQ2 INY INX LDA BUF,X STA BUF-3,Y ;MOVE CHAR STY BUFPTR BEQ CRNCHED ;END OF THE LINE CMP ENDCHR ;END CHAR REACHED? BNE DOQ2 ;NO, LOOP INY 7 ON- DONT CRUNCH UNTIL A : ROR DORES ;SET BIT 7 OF DORES SEC ROR DORES ;DORES: BIT 6 OFF-- DON'T CRUNCH UNTIL A COMMA, ELSE UNTIL ':' GCLOOP JMP CLOOP REMIT LDA #0 ;A 'REM' ENDS AT THE END OF THE LINE ONLY DOQUOT DEX ;START WITH CORRECT CHAR FROM INP ITDIR CMP #OPENTK ;OPEN DOES IT BACKWARDS. BNE ITDIR1 ROR INTFLG ;SET HIGH BIT BMI GCLOOP ;ALWAYS ITDIR1 CMP #INVOKTK BEQ ITDIR15 CMP #LDTKN BCC GCLOOP CMP #RENMTK ;IS IT RENAME? BNE ITDIR2 ;NO ITDIR15 SEC DFB 44 ITDIR2 CMP #DSKCOMS+1 ;DORES: BITREMTK? BEQ REMIT ;IF SO, REM-ARKABLE CMP #DATATK BEQ ITDIR15 CMP #$22 BEQ DOQUOT CMP #IMAGETK+2 BCS GCLOOP LDY LOWTR+1 ;ARE WE IN IMMEDIATE MODE? INY BEQ ITDIR ;YES, DON'T CRUNCH CMP #DSKCOMS+1 ;IF IN DEFERRED MODE... BCC GCLOOP ;CRUNCH NORMAL;ESCAPE TOKEN? BNE NESC ; THERE IS NO ESCAPE!!!!!! LDA COUNT ;IF SO, STUFF BOTH BYTES STA BUF-3,Y INY LDA #0 ;DON'T WANT TO MATCH REMTK OR STUFF NESC STY BUFPTR ;SAVE BACK THE POINTER NXCHR INX ;GET NEXT CHAR IN THE LINE CMP #REMTK ;DID WE STUFF A DEX ;DON'T GO BEYOND RESERVED WORD IN PROGRAM LDA COUNT+1 ;IS IT AN ESCAPE TOKEN? BMI STUFIT ;YES, STUFF THE $FF LDA COUNT ;NO, JUST STUFF A NORMAL TOKEN STUFIT LDY BUFPTR ;GET INDEX WHERE TO PUT THIS BYTE STA BUF-3,Y INY ;ADVANCE POINTER CMP #$FF EXFNSTK BEQ YMTCH CMP #FNTK BNE GNMTCH ;NO. BIT COUNT+1 ;MUST BE AN ESCAPE TOKEN BPL GNMTCH YMTCH TXA ;SAVE X-REG. PHA ;ON THE STACK LDX TEMP ;WAS THE CHARACTER BEFORE IT A SEPERATOR? LDA BUF-1,X JSR CKSEP PLA ;RESTORE X-REG TAX BCS GNMTCH BCC YMTCH ;YUP, IT MATCHED DEY ;DID THE WORD END ON A SEPARATOR? I.E., LOMEM: OR DEC(? LDA (FAC),Y ;CHECK LAST CHAR IN WORD AND #$7F ;WIPE HIGH BIT JSR CKSEP BCC YMTCH ;YES IT MATCHED LDA COUNT ;WAS IT A FN TOKEN? CMP #EXFNSTK-1 BEQ YMTCH CMP #T MATCH BNE GNMTCH ;NAW, DAMN HIM! BCC NPR3 ;SURE DOES SO FAR (NOT END OF RESERVED WORD) * WE FOUND A RESERVED WORD!(I THINK- SEE IF IMBEDDED IN NON-ALPHA, * NON-DIGIT DELIMS) LDA BUF,X ;CHECK CHAR AFTER THE WORD AND #$7F JSR CKSEP ;IS IT A SEPERATOR? ; 2) Carry Clear. ; Line not found. LOWTR points to the first line in the program with ; a line number greater than the one sought after. FNDLIN: LDA TXTTAB LDX TXTTAB+1 ;LOAD X,A WITH TXTTAB LDY TXTTABB ;Y WITH BANK #. FNDLNC0 STY LOWTRB FNDLNC1 STX LOWTR+1 FNDLNC STA LOWTR LDY #0 ;POINT TO LINK. LDA (LOWTR),Y ;SEE IF LINK IS 0 BEQ FLINRT LDY #2 TAX LDA LINNUM+1 ;COMP HIGH ORDERS OF LINE NUMBERS. CMP (LOWTR),Y BCC FLNRTS ;NO SUCH LINE NUMBER. BNE AFFRTS ;CHECK NEXT LINE. LDA LINNUMe pointers INVTAB and PROCTAB. * OFFSST EQU FORPNT PROCPNT EQU INPPTR SWPPNT EQU LOWDS TEMPTR EQU HEADER POINT1 EQU INDEX1 POINT1B EQU POINT1+SYSPAG POINT2 EQU INDEX2 POINT2B EQU POINT2+SYSPAG PROCPNTB EQU PROCPNT+SYSPAG OFFSSTB EQU OFFSST+SYSPAG SWPPNTB SBTL "INVOKE * * INVOKE, PERFORM, EXFN * * INVOKE is responsible for LOADing, Relocating, and Linking the * Pascal Assembler created Object files. Upon calling DOINVO, * it is assumed that there exists free memory (all in one bank), * between th ERRORS SO FAR. RTS C STA TXTPTR+1 ;SETUP TEXT POINTER. TYA SBC #0 STA TXTPTRB LDY #0 TYA STA (TXTPTR),Y ;STUFF A ZERO AT BEGINNING OF PROGRAM. CLEARONS JSR OFFKBD LDY #EOFSIZ LDA #0 STA KEYSTROK CLEOFS: STA EOFPTRS-1,Y DEY BNE CLEOFS STY ERRFLG STY ERRPOSB ;NONT PAST EOL ENTRY. LDA #0 STA VRBSTK+1 ;PUT EOL PRECIDENCE ON THE STACK; STA NOUNPT ;FORMULA EVALUATOR STACK NOW RESET. STA SUBFLG ;ALLOW SUBSCRIPTS. STKRTS: RTS STXTPT: SEC LDA TXTTAB SBC #1 STA TXTPTR LDA TXTTAB+1 SBC #0 LDY TXTTABB JSR FIXSB the bottom of the stack so there ; be a non-FOR entry at the bottom STKINI PLA ;SETUP RETURN ADDRESS. TAY PLA LDX #STKEND ;HAVE STACK POINT TO RETURN ADDRESS. STX REMSTK TXS PHA TYA PHA LDA #2 STA VRBPT ;INITIALIZE VERB POINTER TO POITORE DATA. ; ; Procedure: STKINI ; Function: Resets the stack pointer ; On Exit: GOSUB and FOR entries eliminated ; String temporaries are freed up ; SUBFLG is reset ; CONTinuing is Prohibited ; A dummy entry is left atTREND STY STREND+1 ;ARRAYS. STX STRENDB LDA #0 STA KEYSAVE ;ZERO OUT KBD VARIABLE. STA ERRNUM ;ZERO OUT ERR VARIABLE. STA ERRLIN ;ZERO OUT ERRLIN VARIABLE. STA ERRLIN+1 STA EOFSV FLOAD: LDA #0 ;GET ALL AVAIL MEM BACK JSR EXPAND JSR RESTOR ;RESS THE STACK. CLEARC: JSR CLSALL CLEARL LDA MEMSIZ LDX MEMSIZB LDY MEMSIZ+1 ;FREE UP STRING SPACE. STA FRETOP STY FRETOP+1 STX FRETOPB LDA ARYTAB LDY ARYTAB+1 ;LIBERATE THE LDX ARYTABB STA VARTAB STY VARTAB+1 ;VARIABLES AND STX VARTABB STA SE CLEAR COMMAND. CLEAR: BNE STKRTS ;SYNTAX ERROR IF NO TERMINATOR. ; CLEARC IS SUBROUTINE WHICH INITIALIZES THE VARIABLE AND ; ARRAY SPACE BY RESETING ARYTAB (END OF SIMPLE VARIABLE) ; AND STREND (END OF ARRAY STORAGE). IT FALLS INTO ; 'STKINI' WHICH RESETFLNRTS ;MAKE SURE THERE IS A TERMINATOR. SCRTCH: JSR CLSALL ;CLOSE FILES BEFORE CLEARING FCB (P1INIT). JSR P1INIT ;AND CLEAN UP EVERYTHING RUNC: JSR STXTPT LDA #0 ;SET ZERO FLAG STA CURLIN+1 ;SO DOESN'T THINK IN IMMEDIATE MODE ; THIS CODE IS FOR THNC1 PHA TXA SBC #MAXPG-MINPG TAX PLA INC LOWTRB BNE FNDLNC1 ;ALWAYS BCS FNDLNC ;ALWAYS BRANCHES. FLINRT: CLC ;C MAY BE HIGH. FLNRTS: RTS ;RETURN TO CALLER. ; ; The NEW command clears the program text as well as variable space. SCRATH: BNE DEY CMP (LOWTR),Y ;COMPARE LOW ORDERS. BCC FLNRTS ;NO SUCH NUMBER. BEQ FLNRTS ;RETURN WITH CARRY SET. AFFRTS: TXA CLC ADC LOWTR ;COMPUTE NEXT RELATIVE LINE POSITION BCC FNDLNC ;BRANCH IF DONE LDX LOWTR+1 ;INC LOWTR+1 INX CPX #MAXPG BCC FNDLEQU SWPPNT+SYSPAG * Equates are done this way so that conflicts can be resolved * by just changing an Equate. INERROM JMP OMERR DOINVO EQU * ;FREE MEMORY NOW FROM LDA #0 ;INVTAB TO PROCTAB. STA HEADERB STA SWPPNTB LDA INVTAB ;INVPNT INITIALLY SET TO #$6 ;EXTERNAL DEFINITION? BEQ DOPA11 CMP #$2 ;EXTERNAL REFERENCES? BEQ DOPA12 JMP INVERROR ;ONLY THOSE THINGS LEAGAL. DOPA13 LDY #12 LDA (PROCPNT),Y ;FIND # OF REFERENCES. STA TEMP AND #$F8 ;COMPUTE # OF 8 WORD BLOCKS USED. CMP TEMP BEQ *+8 ;REALEAR 256. PLA STA POINT2 LDA INVPNT STA PROCPNT ;POINTER TO LINKER INFO. LDA INVPNT+1 STA PROCPNT+1 LDY #8 LDA (PROCPNT),Y ;GET THE TYPE OF ENTRY. DOPAS1 BEQ DOPAS2 ;END OF TABLE. CMP #$B ;PROCEDURE? BEQ DOPA11 CMP #$C ;FUNCTION? BEQ DOPA11 CMPNT2 STA PROCPNT LDA POINT2+1 STA PROCPNT+1 ;MOVE ON TO NEXT PROCEDURE. JMP DOAPROC DOLIB EQU * ;LINKER INFO NOW STARTS AT INVPNT. PLA ;GET BACK OLD PROCPNT. STA POINT2+1 ;POINTER TO TABLE OF ADDRESSES. DEC POINT2+1 ;SO (POINT2),Y WILL WORK WITH Y NMAKES LINE AT DOARE2 SAME AS "ADC HIGHTR" STA SWPPNT+1 ;FOR PROCEDURE RELATIVE RELOCATION! LDA #>HIGHTR STA SWPPNT JSR DOAREL JSR MAKESUR0 ;NO INTERPRETER RELATIVE. DEC KIMY ;DONE WITH ONE PROCEDURE. BEQ DOLIB ;DONE WITH REGULAR RELOCATION. LDA POI SBC #$80 STA HIGHTR+1 STA (POINT2),Y JSR MAKESUR0 ;NEXT WORD MUST BE ZERO. LDA #>POINT1 ;SEGMENT POINTER STA SWPPNT ;THIS MAKES LINE AT DOARE2 SAME AS "ADC POINT1". LDA #INVPNT STA SBFPTR LDA POINT1+1 SBC INVPNT+1 STA INBYTES+1 LDA #POINT1 STA SBFPTR LDA #INVPNT ;READ IN JUST ONE BLOCK. STA SBFPTR ;STARTING LOCATION FOR READ. LDA #EVALRET BNE PERFERR LDA NAMPNT SEC SBC #8 STA NAMPNT JSR CHRGOT ;END OF EXPRESSION? BEQ *+5 ;IF NOT, THEN BACK UP TXTPTR ONE. JMP DECTPT ;BACK UP THE TXTPTR, TO CONTINUE EXPRESSION. RTS PERFERR PLA JSR GIVAYF ;SLAP VALUE INTO FAC. JMP RESTNAM PERFEX1 EQU * LDA #$C STA PROCFLG LDA NAMPNT CLC ADC #8 JMP PERFEXF EXFN EQU * JSR PERFEX1 PLA ;PULL OF RESULT. STA FACMO PLA STA FACMOH PLA STA FACSGN ORA #$80 STA FACHO PLA STA FACEXP BNE *+6 ;NO, SKIP TO DO IT PHA ;OTHERWISE PUSH 4 DUMMY PHA ;BYTES TO ALLOW ROOM FOR PHA ;THE RETURNED VALUE PHA JMP JUMPDO ;Go call the Mach. lang. routine EXFNS EQU * ;EXFN%. code starts here JSR PERFEX1 PLA TAY ;GET RETURNED VALUE. CMP NPARAMS BEQ PTMOK ;Parameter types OK JMP TMERR ;Otherwise, TYPE MISMATCH ERROR PTMOK DEY LDA (PROCPNT),Y STA JMPER+2 ;ADDRESS OF ENTRY. DEY LDA (PROCPNT),Y STA JMPER+1 LDA PROCFLG ;GET TYPE OF ROUTINE CMP #$C ;IS IT AN EXFN. (OR EXFN%.)? JMP PERFE4 PERFE6 JSR CHRGET PERFE5 LDA #>NAMBUF ;POINTER TO PROCEDURE NAME. CLC ADC NAMPNT STA POINT2 LDA # STRING LENGTH SEC SBC SAVLEN ; ??? BEQ UEXACT ;JUST FITS SEND IT BCS USFITS ;YES LDX REP ;GET ;RETURN SPEC OR NONE! ULITOUT BVS UDOXIT ;STRING SPEC ; LOWTR POINTS TO LITERAL ; REP IS NUMBER OF TIMES TO SEND * UREPEAT LDY #0 LDX SAVLEN ;GET LIT LENGTH UOUTLP LDA (LOWTR),Y JSR OUTDO INY DEX BNE UOUTLP ;DO NEXT ONE DEC REP ;ANOTHER TIME? BNE EDITING STY NMASK ; NO DIGITS DEY ;Y=FF STY DPTNDX ;NO DPT STY TENZNDX ; NO 10**0 DIGIT STY MSKNDX ;INIT AT FF JSR UGETDL ; GET NEXT REP & DELIM BPL UNUMTYP ;GO DO NUM TYPES STA SPECTYP ;SET TYPE BIT SPECTYP ;LIT/STR ? BVS UCHEKCM ;ALL DONE IF STRING! LDA DELIM CMP #'/' ; CR OUT? BEQ UCRLIT CMP #'X' ; SPACE OUT? BEQ USPLIT CMP #'X'+$20 BEQ USPLIT LDA SPCNDX SEC ;PLUS 1 ADC SPCPTR LDY SPCPTR+1 LDX SPCPTRB BCC *+6 INY JSR FIXYX STA LOWTR STY LOWTR+1 STX LOWTRB LDX #0-1 UQSCAN R ;ALL OTHER BAD LDA #$B0 ;ALLOW FLOAT SIGNS UENOFLT AND FLTMSK BNE USTERR ;BAD COMBO!! JSR UCHEKCM ;ENDED NOW? JSR UDIGEND ;YES, ANY DIGITS? ; DIGEND DOESN'T RETURN UENDERR JSR IGOTCH ;GET LAST CHR BEQ USTERR BNE UNXTGET ;DO NEXT ONE UCKDEND JSR IGO BEQ UEEE INY CPY REP BNE USTERR ;OTHERS ARE SYNTAX UEEE ORA EMASK STA EMASK LDA DELIM UEEELP JSR UATOMSK DEC REP ;COUNT DOWN BNE UEEELP ;DO IT Y TIMES LDA #$F0 ;NO FLOATS LDX DIGB4DPT BEQ UENOFLT DEX BEQ UENOFLT CPX #2 ;SIZE =3? BNE USTER BEQ UCKEXP ;NOT SIGN DEY ;Y=1 CPY REP BNE USTERR ;SYNTAX BIT EMASK ;SIGN BEFORE? BNE USTERR ;TWO IS NO NO ORA EMASK STA EMASK LDA DELIM ;GET SIGN JSR UATOMSK JSR UCKDEND UCKEXP CMP #$08 ;EEEE ? BNE USTERR ;NAUGHTY NAUGHTY! INY ;Y=3 CPY REP TAIL SIGN? BIT EMASK ;DPT BEFORE? BNE UNSERR ;YES, TWO IS NO NO DEY ;Y=1! CPY REP BNE UNSERR ;N. IS ALSO ORA EMASK STA EMASK ;SET DPT FOUND LDA DELIM JSR UATOMSK LDA MSKNDX STA DPTNDX JMP UXMORE ;YES IF RETURNED USGNCK BIT UDOLLR ;SIGN AGAIN?LDA FILLTABL-ZTYP,X USETCMA ORA CMATBL-ZTYP,X ; ADD FILLER STA CMAFILL ;SET THEM ALL UXNMASK STX NMASK ;SET DIGIT CLASS UXMORE JSR UCKDEND ;ANY MORE ? JMP UTRYDIG ;YES IF HERE UBLDMK JSR UDOMASK ;PUT DIGITS IN MASK CMP #$04 ;THE DPT? (.) BNE USGNCK ;NO;NO, EQ OR GT LDX NMASK ;GET HIGHER CLASS LDA #$04 ;TEST BIT FOR DPT BIT EMASK ;DPT BEFORE? BEQ UB4DPT ;NO SET FILL LDX #ZTYP ;Z ONLY AFTER DPT BNE UXNMASK ; AND SET CLASS UB4DPT LDA CMAFILL ;FILLING WITH ASTERISKS? AND #$7F CMP #'*' BEQ USETCMA ;NOT DIGIT ! TAX ;TYPE TO X BMI UNSERR ;NO MIX ADEE APPLS N' ORANGES LDA #$80 ORA EMASK ;REMEMBER THEM STA EMASK ;FOR SYNTAX CK LDA REP ;GET REP CLC ADC DIGCTR ;ADD IN DIGITS FROM STA DIGCTR ;DIGIT LISTS CPX NMASK ;LOWER CLASS DIGIT? BCS *+4 FLTMSK INC MSKNDX ;RESERVE SPC JMP UXSIN ;ALL DONE UNSERR JMP USNERR ;SYNTAX IT USETSIN LDA DELIM ; GET SIGN JSR UATOMSK ; PUT +/- INTO MASK UXSIN JSR UENDERR ; ERR IF ENDED! UTRYDL2 JSR UDOLAR ;TRY $ AGAIN UTRYDIG CMP #ZTYP ;DIG R 41,42 44 BCC UBLDMKN? BEQ UTRYDL2 ;NO ORA EMASK STA EMASK ; SET SIGN BITS CPY REP ;TWO SIGNS BNE UCK1SIN ;NO LDA FLTMSK BNE UNSERR ;MA BUDDY AGAIN BEQ UFLTSIN UCK1SIN DEY ;Y=1 CPY REP ;1 SIGN ? BNE UNSERR LDA FLTMSK BEQ USETSIN UFLTSIN LDA #$40 ORA FLTMSK STA+/-- ? LDA #$20 BCC *+4 ;NOT $ AFTER SIGN ASL A ASL A ; CREATE $80 ORA FLTMSK STA FLTMSK INC MSKNDX ;RESERVE SPC JMP UXDLR USTDLR LDA DELIM ; $ TO MASK,MASKNDX JSR UATOMSK UXDLR JMP UENDERR ;NEXT DELIM UDOLLR JSR UDOLAR ;$ BIT UDOLLR ;EITHER SIG+3 RTS BIT EMASK BNE UNSERR ORA EMASK STA EMASK ;SET $ BIT ON CPY REP ;REP =2 BNE UCK1DL LDA FLTMSK BNE UNSERR ;MA SN BUDDY BEQ UDLFLT ;FLOAT NOW UCK1DL DEY CPY REP BNE UNSERR ;ERROR LDA FLTMSK ;** PREV? BEQ USTDLR ;NO UDLFLT CMP #$40 ;PREV + CMP #$02 ; IS IT * ? BNE UDOLLR CPY REP ;** OR 2*? BNE UNSERR ;BAD STUFF LDA #$10 ; ** BIT ON STA FLTMSK ;SAY FLOATING LDA DELIM ; GET AN * STA CMAFILL ;* FILLER JSR UENDERR ;EXIT IF END ELSE GETDL JMP UDOLLR UDOLAR CMP #$10 ;$ OR $$ ? BEQ *UCRLIT LDA #$0A ;A LF. STA LITRLCH+1 LDY #2 LDA #$0D ;A CR!! BNE *+6 USPLIT LDA #' ' ;A SPACE LDY #1 STA LITRLCH LDX #