8L2C)pJJJJ IH(ȱH:=IH[H`@HcH  $ +   I/H`JLNGȄBȄF aK  haaFF  mJm# KKJ UJ )J ۈ) ;J3ȱJFȱJGJKaȄM  aaNNJFLGJL L? &PRODOS `DaElH$?EGvѶK+`L HHLy XP LM ŠϠĠӠS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8RNEW.DISK|,' ,BASIC.SYSTEM(*+*BASICS.ASM-o+ ϲ'CHECKIT4 6/ ϲ ,ERROR.LISTER<6mF )FILE.READ? ro+ n -FILE.READ.ASMI$Do/ :.FR.OPTIONS.ASMmAA~o+ F;GMPBms,LINE.MANAGERm'NIBMENU p4p4PRO.CALCm&PRODOS }<n% 'RAINBOW mX.SCREEN.DUMP.80m= /SHADES.TEXTURESmF SLOGANmD4'STARTUP ®3p.STARTUP.SCREENC 9`4STRING.INPUTGmE .STRING.INPUT.Sm E STRING.TEST1mF *WORD.COUNTmF  LG ASTARTUP$#   / XXύX?klmnÍoL) "6L'?"(0`6708" = ***)<JJH !h穖tp% ;"Z/݀>">"' 1" 7"5).莀/ ;" " 6" >" 1"6"$ "g"" !"""""IzLYL 8!9 詍` "  4"/pŠϠŠà͠ӠàԠŠH06172839h` v97L75v^a ?/( va?LLLɍ$?`?a ɍɥAH93827160hH46576879h`,C bL ɍ b w,S0 @ lLޭBDEF޾ p ޾ p($ذ v (0 ( L?ԦʚLeةީa s  lL b,FLg,DL,C0$3 >@ Ɉ 3ɾꩈL(3ɾ;Ƀ B94 l% bʽ  ՚,S` H E$݅3`(l8L3LX>(Ƀ,`3,G0]ɾ g` H`پ_پ p _پ׾`>( p۾m׾) W)ʩ@`ɾ>(O puȾ ɾ-O ]c־Jjjj `O>0O l POپھ p H־Ǿh۰8L־Jjjjɾ)Ⱦ8 ѱ OLӜ ĤLLX>(F`־ؾپھ׾` bɄ KDEF vLl v lL bKɍKL?` w  vLl@3 @LtJ)s@J b  l`a?sa?,E30ɍФ3 E3HD F3 Ʉ%h3 bM E  lLthɍLL3`3,A0s0% Ipn DpnI:L ؅303L8933LΞAAJL ةޘг uv $ 8LƞaЌ>?@`>?@`B8` K  춼LK ҟ ҟ ( KK`HJJJJ8`HK)` #hhLJپھ pHJh` D!hgt}~p `~t}p8n~ni}tpi~~tso8pinii>j?k̈́>~|p|Ii||̈́ l - `>i>?Ek?!>Q>>>̀ `` \> ̀ `e>>?́?>?Emn(>e>ȱ>e?>Q>ؠ> ie>>?`|;}=:<~:<=;`||m};>:8o>oȑ>ppȑ>> :op`G DKpnG @p;G=po:i>?Ek?>Q>> L> \/ e>>?́?ޱ>ȥj>>m>` _m8injkiljo풼S 鸍긍$I2 U)VJ зT)`l8`a HbIJhjǾȾɾ p٭b=aIe f`8` P־ǾҾ,G0C f=W)_``\"׾پӾؾھ pD`־ǾY׾ؾOW)ݩȾɾʾ pD`8`W)CB) 5W) =)W)@! pZ}ȾȾ󰹩 p` ־ǾҾ,G 8`׾ؾ f p vۥs׾tؾE`  ( 8о(־Ǿ,G 8`_`W)H־Jjjjh p̭ fLᶢǾ ת..8 ۭ (8mȾȾmɾɾʾiʾ` Lpl8l:/,s̝sƬƀ#(ZZV4G_0=( A P FjL\5p-e9ABSAVERIFYBLOADELETEBYECATALOGOPENWRITEXECREATEFRESTORENAMEBRUNLOCKCHAIN#FLUSHREADPOSITIONOMONPR#PREFIXCLOSEAPPEND6D(!쫂8ֵ#ح#׮2}q :IC@@ -!S    !C- !ABELSDFRV@@ !$(19@EüϠž(+@ABCDEFGHIKLMNPSV     T[fouu~ՠٯ* PWN*]ĿNTz @n6VC/+A>@I5gN Oz @n[Dz @nd0,~z @`$仫@v$⩔,C[B?I>孓`仫6VtCicQĿUKqtVt Nʮq$6,⨁ K6, VtI=v!gNVt Vt  lg~TLLwLLL) `8` ԠŬLL !"#$%&'()*+,-./0123***************************************************************** * * BASICS.ASM Source Code * by Sandy Mossberg * Copyright(c) 1989 * MindCraft Publ. Corp. * Concord, MA 01742 **************************************************************** * StartUp start * * Startup tool sets: * * Exit: CC = no error, CS = abort program * ***************************************************************** using GlobalData ; ; DPHndl and DPPtr equated in main program. ; ; Calculate direct page space for tool sets: ; QDDPage equ $0000 ;DP offests: QuickDraw II.....3 pages EMDPage equ QDDPage+$300 ; Event Manager....1 page CtlDPage equ EMDPage+$100 ; Control Manager..1 page MenuDPage equ CtlDPage+$100 ; Menu Manager.....1 page LEDPage equ MenuDPage+$100 ; LineEdit.........1 page SFDPage equ LEDPage+$100 ; Standard File....1 page FontDPage equ SFDPage+$100 ; Font Manager.....1 page PrintDPage equ FontDPage+$100 ; Print Manager....2 pages SANEDPage equ PrintDPage+$200 ; SANE.............1 page DPageSize equ SANEDPage+$100 ;size of direct page space required ; Startup first 3 tool sets: _TLStartUp ;----start Tool Locator pha ;space for result _MMStartUp ;----start Memory Manager jsr HandlErr PullWord MasterID ;save master ID _MTStartUp ;----start Miscellaneous Tools ; Allocate direct page memory for tool sets: PushLong #0 ;space for result PushLong #DPageSize ;size of direct page space PushWord MasterID ;master ID PushWord #$C005 ;locked, fixed, aligned, fixed bank PushLong #0 ;bank $00 is the fixed bank _NewHandle ;allocate space jsr HandlErr PullLong DPHndl ;save handle to DP space lda [DPHndl] ;dereference DP handle to obtain sta DPPtr ; ptr (lo) to DP space ; Startup other tool sets: PushWord DPPtr ;ptr to direct page for Quickdraw II PushWord #ScreenMode ;640x200 super hi-res PushWord #0 ;default pixel map is screen width PushWord MasterID ;master ID _QDStartUp ;----start QuickDraw II jsr HandlErr lda DPPtr clc adc #EMDPage pha ;direct page for Event Manager PushWord #0 ;default size of event queue is 20 PushWord #0 ;minimum X clamp value for mouse PushWord #ScreenWidth ;max X clamp is screen width PushWord #0 ;minimum Y clamp value for mouse PushWord #200 ;max Y clamp is screen height PushWord MasterID ;master ID _EMStartUp ;----start Event Manager jsr HandlErr ; Print "One moment please..." message: PushWord #10 ;start in upper left corner of screen PushWord #10 _MoveTo PushWord #0 ;black background _SetBackColor PushWord #$0F ;white text _SetForeColor PushLong #StrMoment _DrawString _ShowCursor ;show cursor in case of boot volume mount ; Load RAM-based tools: FindBootVol _GetFileInfoGS GFIParm ;look for boot tools directory bcc LoadTools ;boot volume online jsr MountBoot ;no boot volume so mount it bcc FindBootVol ;user mounted boot volume--check it jsr ShutDown1 ;shutdown tools we started up sec ;CS = signal program abortion rts LoadTools PushLong #ToolTable ;ptr to tool table _LoadTools ;load all tools in table jsr HandlErr ; Continue to start tool sets: PushWord MasterID ;master ID _WindStartUp ;----start Window Manager PushWord MasterID ;master ID lda DPPtr clc adc #CtlDPage pha ;direct page for Control Manager _CtlStartUp ;----start Control Manager PushWord MasterID ;master ID lda DPPtr clc adc #MenuDPage pha ;direct page for Menu Manager _MenuStartUp ;----start Menu Manager PushWord MasterID ;master ID lda DPPtr clc adc #LEDPage pha ;direct page for LineEdit _LEStartUp ;----start LineEdit jsr HandlErr PushWord MasterID ;master ID _DialogStartUp ;----start Dialog Manager PushWord MasterID ;master ID lda DPPtr clc adc #SFDPage pha ;direct page for Standard File _SFStartUp ;----start Standard Files _ScrapStartUp ;----start Scrap Manager _DeskStartUp ;----start Desk Manager _ListStartUp ;----start List Manager PushWord MasterID ;master ID lda DPPtr clc adc #FontDPage pha ;direct page for Font Manager _FMStartUp ;----start Font Manager jsr HandlErr PushWord MasterID ;master ID lda DPPtr clc adc #PrintDPage pha ;direct pages for Print Manager _PMStartUp ;----start Print Manager jsr HandlErr lda DPPtr clc adc #SANEDPage pha ;direct page for SANE _SANEStartUp ;----start SANE _SchStartUp ;----start Scheduler _ADBStartUp ;----start Apple Desktop Bus _QDAuxStartUp ;----start QuickDraw II Auxiliary _IMStartUp ;----start Integer Math _TextStartUp ;----start Text rts ;CC = signal program continuation ;................................................................ ; ; StartUp data: ; GFIParm anop ;GetFileInfo parmlist (GS/OS class 1) dc i2'2' ;pCount = 2 dc i4'ToolsPath' ;ptr to tools boot directory (input) ds 2 ;access (result) ToolsPath anop ;GFI input string (GS/OS class 1) dc i2'TPEnd-ToolsPath-2' ;length word dc c'*/SYSTEM/TOOLS/' ;pathname chars TPEnd anop StrMoment str ' One moment please...' ToolTable anop ;RAM tools to load (System Disk 4.0+) dc i2'TTSize/4' ;number of tool sets dc i2'$0E,$0203' ;Window Manager dc i2'$0F,$0202' ;Menu Manager dc i2'$10,$0206' ;Control Manager dc i2'$12,$0205' ;QuickDraw Auxiliary dc i2'$13,$0202' ;Print Manager dc i2'$14,$0202' ;LineEdit dc i2'$15,$0203' ;Dialog Manager dc i2'$16,$0104' ;Scrap Manager dc i2'$17,$0202' ;Standard File Operations dc i2'$1B,$0204' ;Font Manager dc i2'$1C,$0203' ;List Manager TTSize equ *-ToolTable-2 ;number of table bytes (-2 number bytes) end ***************************************************************** * ShutDown start * * Shutdown tools sets: * * Entry: ShutDown1 - shutdown tool sets if program aborted * ***************************************************************** using GlobalData _TextShutDown ;shutdown tools in reverse _IMShutDown ; order of their startup _QDAuxShutDown _ADBShutDown _SchShutDown _SANEShutDown _PMShutDown _FMShutDown _ListShutDown _DeskShutDown _ScrapShutDown _SFShutDown _DialogShutDown _LEShutDown _MenuShutDown _CtlShutDown _WindShutDown ShutDown1 entry ;shutdown tool sets if program aborted _EMShutDown _QDShutDown PushLong DPHndl ;handle to direct page space _DisposeHandle ;deallocate direct page space _MTShutDown PushWord MasterID ;master ID _MMShutDown _TLShutDown rts end ***************************************************************** * HandlErr start * * Check for error and handle fatal error: * ***************************************************************** bcs FatalErr ;error detected rts ;no error on carry clear FatalErr pha ;error code in A reg PushLong #0 ;use default failure message _SysFailMgr ;die a horrible death end ***************************************************************** * MountBoot start * * Mount boot volume: * * Exit: CC = continue, CS = abort program * ***************************************************************** _GetBootVolGS GBVParm jsr HandlErr lda BVStr ;convert from GS/OS class 1 input xba ; string to standard P-string sta BVStr pha ;space fpr result PushWord #185 ;upper left X coordinate PushWord #50 ;upper left Y coordinate PushLong #StrBootVol ;ptr to prompt string PushLong #BVStr+1 ;ptr to boot volume name string PushLong #StrOk ;ptr to button 1 string PushLong #StrAbort ;ptr to button 2 string _TLMountVolume pla ;button ID number cmp #2 beq Done ;CS = abort button hit clc ;CC = OK button hit Done rts ;................................................................ ; ; MountBoot data: ; GBVParm anop ;GetBootVol parmlist (GS/OS class 1) dc i2'1' ;pCount = 1 dc i4'BVBuf' ;ptr to volume name buffer (output) BVBuf anop ;boot volume path buffer (GS/OS class 1) dc i2'BVEnd-BVStr' ;buffer length BVStr ds 19 ;input string BVEnd anop StrOk str 'OK' StrAbort str 'Abort' StrBootVol str 'Insert the boot volume:' end 56789:;. ********** NIBBLE PRD DISK **********[ * CHECKIT * * COPYRIGHT 1988 BY MINDCRAFT PUBL.CORP. *( * CONCORD, MA 01742 *2 *************************************' <:::"CHECKIT":"COPYRIGHT 1988 BY MINDCRAFT PUBL. CORP."0 F90\ PI0377:ML:CSCSML:::CS48127100 Z:"ERROR IN DATA STATEMENTS!":"PROBABLY LOCATED ON OR BEFORE LINE ";(123)(124)256: d216,0:768,0:H(3):H(0)1:H(1)16:H(2)256:H(3)40969 n6:"ARE YOU ENTERING A HEXADECIMAL":"FILE?";:A$:16368,0:A$d xA$"N"A$(110)İ370:34218,128:210 A$"Y"A$(121)110 768,1:10:958:"WHAT IS THE STARTING ADDRESS OF THE":"FILE (IN HEX)";:H$:290:AH2 A736A39424ĺ:"INVALID ADDRESS. PLEASE DOUBLE-CHECK":"AND RE-ENTER":350:140| 13:958:"WHAT IS THE LENGTH OF THE FILE":"(IN HEX)";:H$:290:BH B1B32000ĺ"INVALID LENGTH. PLEASE DOUBLE-CHECK":"AND RE-ENTER":350:160 :::34,1:2:"INSTALLING CHECKIT..."x A6144İ320:5799,(A256):5798,A256(5799):5801,(B256):5800,B256(5801):5802,0:230: ABOVE $1800 SOMEWHERE A6144İ370:34215,(A256):34214,A256(34215):34217,(B256):34216,B256(34217):34218,0:210: BELOW $1800 SOMEWHERE' (48896)76Ĺ56,0:57,133:1002:250B (4);"IN#A$8500":250l (48896)76Ĺ56,0:57,22:1002:250 (4)"IN#A$1600":250 :::34,1:2:"CHECKIT INSTALLED" (768)1ĺ:"ENTER THE MONITOR BY TYPING":" CALL -151"  Y"H0:L(H$):L1L4300:I1L:D((H$,I,1)):HHH(LI)(D48(D58D47)55(D64D71)):_,t6 $1600 VERSION@I0377:ML:5632I,ML:I:C5632JI018:ML:CML,(CML)111:T^21:"PRESS RETURN TO CONTINUE ";:CH$:CH$:16368,0:h $8500 VERSION5rI0377:ML:34048I,ML:I;| 216,32,27,253,201,154,240,31,201,141,208,26,134,224,32,178,133,32,251,218,32,128,254,56,165,8 229,9,32,218,253,32,132,254,166,224,169,141,96,32,106,134,44,170,133,16,43,169,1,133,6,169_ 8,133,7,160,0,177,6,133,251,200,177,6,133,252,240,63,200,177,6,32,79,134,200,177,6,32 79,134,165,251,133,6,165,252,133,7,208,221,173,167,133,133,7,173,166,133,133,6,160,0,177,6& 32,79,134,230,6,208,2,230,7,230,251,208,2,230,252,165,251,205,168,133,165,252,237,169,133,144 227,162,0,189,171,133,32,237,253,232,224,7,144,245,44,16,192,32,128,254,164,8,166,9,32,64 249,32,251,218,32,132,254,169,152,96,0,0,0,0,0,20,15,20,1,12,58,32,32,106,134,133> 6,169,2,133,7,160,0,177,6,201,176,144,73,201,186,176,69,177,6,44,170,133,16,53,201,210 208,4,166,251,240,61,201,162,208,8,72,169,1,69,251,133,251,104,201,160,208,6,166,251,208,25 240,26,201,191,208,19,132,226,160,0,185,117,134,32,79,134,200,192,5,144,245,164,226,176,3,32o 79,134,200,196,224,144,188,96,166,224,104,104,169,141,96,132,226,136,177,6,201,160,240,249,201,186 240,8,201,176,144,36,201,186,176,32,164,226,200,177,6,201,197,208,23,200,177,6,201,205,208,166 169,210,32,79,134,169,197,32,79,134,169,205,32,79,134,96,164,226,177,6,24,144,135,162,8,10 38,8,38,9,144,14,72,165,8,73,33,133,8,165,9,73,16,133,9,104,202,208,232,96,169,0 133,8,133,9,133,251,133,252,96,208,210,201,206,212 16,41,44,73,79,92,97,106,123,128,135,180,203,246,249,261,316,321,326 =>% ****************************I * ERROR.LISTER *m * By Darren DeVigili * * Copyright (C) 1990 * * By MindCraft Publ. Corp. * * Concord, MA 01742 * **************************** :63998/ : Line 30 will cause an error. L$K8: If you're going to be editing with the ESC routines, it's handy to have Applesoft set you up with a POKE 33,33 and then list the offending line.K ( This way, you don't have to worry about the extra spaces when you trace over to the next line with the right arrow key.w - Type TEXT after correcting the error.} 2 00000: PK(121)(122)2567:EL(218)(219)256:EL$(EL):(EL$)5āAL(EL$)4:AD$AD$"0"::EL$AD$EL$4 PL04:PKPL,((EL$,PL1,1))::::33,33:216,0:63997 @ABCDEFGHr ,@  K Z "   M k") 9"vHtH-" ""H"h*"`R>>@\N1X--About File Reader...\N256---\N300D.>> File \N2--Open File...\N257*Oo--Close\N255*WwD---\N300D--Choose Printer...\N258D--Page Setup...\N259D--Print File...\N260*PpD---\N300D--Quit\N261*Qq.>> Edit \N3--Undo\N250*ZzD--Cut\N251*XxD--Copy\N252*CcD--Paste\N253*VvD--Clear\N254D..dd{,`H:"h .`nffffffffffffffffffffWfffffffff8J 5LH,"`fffffW  g W0 2HH"``.`"h0h20 2qH2H0H+"h@1"1"1"0"0"0"0"0"0"`0"0"0"0"1"1"1"1"1"1"1"1"1"`"h0h20 2:2H0H") HH" 0"2H0H "`HY"h`02}0/JS Ascii File Reader Sby Sandy Mossberg (c)1989 by MindCraft Publ. Corp./^#0"H" h*" *H " hhH*H" iH*H"  :"""%"""  ( 8`=" *H"*HiH"*HiH"*HiH" *H"*HiH""""*HiH" *Hi H" i H "" "" " "`*/SYSTEM/TOOLS/ One moment please...  " "" "" """"""""""""""HH""*H""``H""( j rrH2s"h`pOKAbortInsert the boot volume:x(   " 1"  `0 w x i  `)ߙy  0"  T " R V X XHVH*H " hh   " " L ) )  i  V?!H> Y"h:%?  " h h ` HH"`Select an Ascii file to read:N 4  P Z0<s4/J Entire file cannot be displayed. /^#6/#1w  K,["  " * * " VO ) * i * Z8H* H:"z , Z4)"zV & i 4+k ) VZ  m iHڭ H"4)"8H4i H:"z`H"h` HHH "h`HHH " h`*H " hhHH " ` HHH "h` "V) T HH"h h l } H H" l \  8H :"} , } 4)"} V$4͇ ܌} H H" l } H H"ᭅ H H"H"hZ *""h h ( +HH"ᭁ   "``H"h8`)"hh0)A8`)M \k[j0U*H " hh " T5  "HH"ᭌ8` ; :8+H8  0:Ϙ0+k tx|R:% +=.jDJsPVlp    4R  >    4   w  "  4f 4 4UWYdfh :>% $*579;=?ACEGIKNQTk} fjmpuyjn!&.8;FXj|؁36:GMSY  #&),9>@\N1X',h'00' dc c'--About File Reader...\N256',h'00' dc c'---\N300D',h'00' dc c'.' FileMenu dc c'>> File \N2',h'00' dc c'--Open File...\N257*Oo',h'00' dc c'--Close\N255*WwD',h'00' dc c'---\N300D',h'00' dc c'--Choose Printer...\N258D',h'00' dc c'--Page Setup...\N259D',h'00' dc c'--Print File...\N260*PpD',h'00' dc c'---\N300D',h'00' dc c'--Quit\N261*Qq',h'00' dc c'.' EditMenu dc c'>> Edit \N3',h'00' dc c'--Undo\N250*ZzD',h'00' dc c'--Cut\N251*XxD',h'00' dc c'--Copy\N252*CcD',h'00' dc c'--Paste\N253*VvD',h'00' dc c'--Clear\N254D',h'00' dc c'.' end ***************************************************************** * InitApplic start * * Initialize application specific data: * ***************************************************************** using GlobalData stz QuitFlag ;clear quit flag stz PrtRecHndl ;zero print record handle stz PrtRecHndl+2 tdc ;save application's direct page sta MyDP ; for window update handler rts end ***************************************************************** * EventLoop start * * Handle events: * ***************************************************************** using GlobalData ; Scan for events with TaskMaster: pha ;space for result PushWord #$FFFF ;handle all events PushLong #TaskRecord ;ptr to extended task record _TaskMaster ;get the event pla ;get result ; Handle event: asl a ;create index into 2-byte tax ; entries of task table jsr (TaskTable,x) ;call event handler ; Check for quit signal: lda QuitFlag bpl EventLoop ;Quit not chosen so keep scanning rts ;................................................................ ; ; EventLoop data: ; TaskTable anop ;GetNextEvent event handlers: dc i2'DoNull' ; 0 = nullEvt dc i2'DoRTS' ; 1 = mouseDownEvt dc i2'DoRTS' ; 2 = mouseUpEvt dc i2'DoRTS' ; 3 = keyDownEvt dc i2'DoRTS' ; 4 = undefined dc i2'DoRTS' ; 5 = autoKeyEvt dc i2'DoRTS' ; 6 = updateEvt dc i2'DoRTS' ; 7 = undefined dc i2'DoRTS' ; 8 = activateEvt dc i2'DoRTS' ; 9 = switchEvt dc i2'DoRTS' ;10 = deskAccEvt dc i2'DoRTS' ;11 = driverEvt dc i2'DoRTS' ;12 = app1Evt dc i2'DoRTS' ;13 = app2Evt dc i2'DoRTS' ;14 = app3Evt dc i2'DoRTS' ;15 = app4Evt anop ;TaskMaster event handlers: dc i2'DoRTS' ;16 = wInDesktop dc i2'DoMenu' ;17 = wInMenuBar dc i2'DoRTS' ;18 = wClickCalled dc i2'DoRTS' ;19 = wInContent dc i2'DoRTS' ;20 = wInDrag dc i2'DoRTS' ;21 = wInGrow dc i2'DoClose' ;22 = wInGoAway dc i2'DoRTS' ;23 = wInZoom dc i2'DoRTS' ;24 = wInInfo dc i2'DoMenu' ;25 = wInSpecial dc i2'DoRTS' ;26 = wInDeskItem dc i2'DoRTS' ;27 = wInFrame dc i2'DoRTS' ;28 = wInactMenu dc i2'DoRTS' ;29 = wClosedNDA dc i2'DoRTS' ;30 = wCalledSysEdit dc i2'DoRTS' ;31 = wTrackZoom dc i2'DoRTS' ;32 = wHitFrame end ***************************************************************** * DoMenu start * * Handle menu events (menu items must be numbered sequentially): * ***************************************************************** using GlobalData sec lda TaskData ;get menu item ID sbc #250 ;convert N250 into 1st (0th) item asl a ;create index into 2-byte entries tax ; of menu item table jsr (ItemTable,x) ;call menu item handler PushWord #0 ;TRUE=highlight, FALSE=unhighlight PushWord TaskData+2 ;menu ID _HiliteMenu ;unhighlight menu rts ;................................................................ ; ; DoMenu data: ; ItemTable anop ;menu item handlers dc i2'DoRTS' ;250 = Undo dc i2'DoRTS' ;251 = Cut dc i2'DoRTS' ;252 = Copy dc i2'DoRTS' ;253 = Paste dc i2'DoRTS' ;254 = Clear dc i2'DoClose' ;255 = Close dc i2'DoAbout' ;256 = About... dc i2'DoOpen' ;257 = Open File dc i2'DoChooser' ;258 = Choose Printer... dc i2'DoSetup' ;259 = Page Setup... dc i2'DoPrint' ;260 = Print File... dc i2'DoQuit' ;261 = Quit end ***************************************************************** * ShutApplic start * * Deallocate memory before shutting down tool sets: * ***************************************************************** using GlobalData jsr DoClose ;close front window, if open lda FrontWinPtr ;check for open window ora FrontWinPtr+2 bne ShutApplic ;another window open PushLong PrtRecHndl ;handle to print record _DisposeHandle ;deallocate print record space rts end ***************************************************************** * DoRTS start * * Ignore an event: * ***************************************************************** rts end ***************************************************************** * DoQuit start * * Turn on quit flag to terminate this application: * ***************************************************************** using GlobalData lda #$8000 sta QuitFlag ;set quit flag rts end ***************************************************************** * DoNull start * * Enable or disable menu items during null events: * ***************************************************************** using GlobalData PushLong #0 ;space for result _FrontWindow ;get ptr to front window PullLong FrontWinPtr ;save ptr anop ;stack menu items: PushWord #250 ;Undo PushWord #251 ;Cut PushWord #252 ;Copy PushWord #253 ;Paste PushWord #254 ;Clear PushWord #255 ;Close PushWord #258 ;Choose Printer... PushWord #259 ;Page Setup... PushWord #260 ;Print File... lda FrontWinPtr ;check for open window ora FrontWinPtr+2 beq NoWind ;no window open pha ;space for result PushLong FrontWinPtr ;ptr to front window _GetWKind ;get window type pla ;PL = application, MI = system bpl ApplicWind anop ;NDA window in front _DisableMItem ;dim print items _DisableMItem _DisableMItem _EnableMItem ;hilite special items _EnableMItem _EnableMItem _EnableMItem _EnableMItem _EnableMItem rts ApplicWind anop ;application window in front _EnableMItem ;hilite print items _EnableMItem _EnableMItem _EnableMItem ;hilite Close item bra DimEdit ;dim Edit menu items NoWind anop ;no window open _DisableMItem ;dim print items and special items _DisableMItem _DisableMItem _DisableMItem DimEdit _DisableMItem _DisableMItem _DisableMItem _DisableMItem _DisableMItem rts end ***************************************************************** * DoClose start * * Close front window: * ***************************************************************** using GlobalData PushLong #0 ;space for result _FrontWindow ;get ptr to front window PullLong FrontWinPtr ;save ptr lda FrontWinPtr ;check for open window ora FrontWinPtr+2 beq Done ;no window open PushLong FrontWinPtr ;ptr to front window _CloseNDAbyWinPtr ;close NDA window bcc Done ;NDA window closed PushLong DataBufHndl ;handle to file data buffer _DisposeHandle ;deallocate handle and free memory jsr HandlErr PushWord #257 ;enable Open File item _EnableMItem PushLong FrontWinPtr ;ptr to front window _CloseWindow ;close application window Done rts end ***************************************************************** * DoAbout start * * Handle About item in Apple menu (display title and credits): * ***************************************************************** pha ;space for result PushWord #0 ;C-string PushLong #0 ;no substitution array PushLong #AlertStr ;ptr to alert string _AlertWindow ;display alert window pla ;discard button ID (always OK button) rts ;................................................................ ; ; DoAbout data: AlertStr anop ;alert string dc c'0',i'50,160,125,480' ;coordinates dc c'0/' ;no icon, separator dc h'01',c'J',i'1' ;center text dc h'01',c'S',i'1' ;bold text dc h'0D',c'Ascii File Reader',2h'0D' ;title dc h'01',c'S',i'0' ;standard text dc c'by Sandy Mossberg',h'0D' ;credits dc c'(c)1989 by MindCraft Publ. Corp.' dc c'/^#0' ;separator, OK default dc h'00' ;zero terminator end ***************************************************************** * GlobalData data * * Global program data: * ***************************************************************** MasterID ds 2 ;master memory ID of application MyDP ds 2 ;direct page of application QuitFlag ds 2 ;quit flag FrontWinPtr ds 4 ;ptr to front window PenLoc ds 4 ;coordinates of pen position LeftEdge ds 2 ;left margin of page TaskRecord anop ;extended event record for TaskMaster What ds 2 ;event code Message ds 4 ;event message When ds 4 ;ticks since startup Where ds 4 ;global position of mouse Modifiers ds 2 ;state of modifier keys TaskData ds 4 ;extended event data TaskMask dc i4'$FFFF' ;bit flag (ignore no functions) EOFParm anop ;GetEOF parmlist (GS/OS class 1) dc i2'2' ;pCount = 2 (input) EOFRefNum ds 2 ;reference number (input) EOF ds 4 ;size of file in bytes (result) end copy basics.asm copy fr.options.asm nopqrstuvwxyz{|}~**************************************** * * * FR.OPTIONS.ASM Source Code * * by Sandy Mossberg * * * * APW Assembler * * * * Copyright (C) 1989 * * by MindCraft Publ. Corp. * * Concord, MA 01742 * * * **************************************** ***************************************************************** * DoOpen start * * Open window containing file contents: * ***************************************************************** using GlobalData PushWord #120 ;X coord of upper left corner PushWord #40 ;Y coord of upper left corner PushLong #SFPrompt ;ptr to prompt string PushLong #0 ;ptr to filter (none) PushLong #SFTypeList ;ptr to file type list PushLong #SFReplyRec ;ptr to reply record _SFGetFile lda SFGood ;which button closed box? beq Done ;Cancel button hit PushWord #257 ;Okay button hit _DisableMItem ;dim Open File item jsr GetFile ;read selected file into memory jsr ShowWindow ;display window Done rts ;................................................................ ; GetFile anop ; ; Read selected Ascii file into memory: ; ; Convert file name P-string in standard files reply record to ; class 1 GS/OS input str at MyFile (i.e. change leading length ; byte to leading length word). Also convert same P-string ; to title of text window (i.e. flank file name with spaces ; because window will contain racing stripes in title bar): short lda SFFilename ;get length byte of P-string sta MyFile ;put leading length word stz MyFile+1 ; in input string clc ;bump length byte by 2 in wind adc #2 ; title string to accommodate sta TextWindStr ; leading and trailing spaces lda #$20 ;put leading space sta TextWindStr+1 ; in window title ldy #0 ;copy file name to GF01 lda SFFilename+1,y ; both locations cmp #$60 bcc GF02 and #$DF ;ensure upper case GF02 sta MyFile+2,y sta TextWindStr+2,y iny cpy SFFilename bcc GF01 lda #$20 ;put trailing space sta TextWindStr+2,y ; in window title long ;set 16-bit regs ; Read file into memory: _OpenGS OpenParm ;open selected file jsr HandlErr lda OpenRefNum ;stuff reference number sta EOFRefNum ; into other parmlists sta ReadRefNum sta CloseRefNum _GetEOFGS EOFParm ;get size of file in bytes jsr HandlErr lda EOF ;stuff file size into sta RequestCnt ; Read parmlist lda EOF+2 sta RequestCnt+2 anop ;reserve memory for data buffer PushLong #0 ;space for result PushLong EOF ;size of space PushWord MasterID ;master ID PushWord #$C010 ;locked, fixed, one bank PushLong #0 ;not used _NewHandle ;allocate space jsr HandlErr PullLong DataBufHndl ;save handle to data buffer lda [DataBufHndl] ;dereference handle and sta DataBufPtr ; store ptr to data buffer sta DataBuf ; in Read parmlist ldy #2 lda [DataBufHndl],y sta DataBufPtr+2 sta DataBuf+2 _ReadGS ReadParm ;read file into data buffer jsr HandlErr _CloseGS CloseParm ;close file jmp HandlErr ;................................................................ ; ShowWindow anop ; ; Display window on SHR screen: ; ; Calculate data height of file in pixels, ; and ensure positive Ascii file bytes: lda #9*2 ;allow top and bottom margins sta DataSize ; (row = 9 pixels) ldy #0 ;zero char index SW01 lda [DataBufPtr],y ;get 2 bytes from file buffer and #$FF7F ;ensure pos Ascii lo byte sta [DataBufPtr],y ;write char back to file buffer and #$FF ;ignore hi byte cmp #$0D bne SW02 ;CR not found clc lda DataSize ;CR found so add 9 pixels adc #9 ; for another line sta DataSize SW02 iny ;bump char index cpy EOF bcc SW01 ;not yet at end of file cmp #$3FFF ;max window height = 16383 bcc SW03 ;max height not exceeded ; Entire file cannot be displayed because of QuickDraw II limits, ; so check whether user wishes to display partial file: pha ;space for result PushWord #0 ;C-string PushLong #0 ;no substitution array PushLong #AlertStr ;ptr to alert string _AlertWindow ;display alert window pla ;get button ID dec a beq SW04 ;Cancel button hit lda #$3FFF ;user wants partial file shown; sta DataSize ; clip window to max height ; Display window: SW03 PushLong #0 ;space for result PushLong #TextWind ;ptr to window parmlist _NewWindow ;display window jsr HandlErr PullLong TextWindPtr ;save ptr to window's GrafPort rts ; Cancel window: SW04 PushLong DataBufHndl ;handle to file data buffer _DisposeHandle ;release handle and free memory rts ;................................................................ ; ; DoOpen data: ; SFReplyRec anop ;standard files reply record SFGood ds 2 ;true = open, false = cancel SFFileType ds 2 ;file type code SFAuxtype ds 2 ;auxiliary type code SFFilename ds 16 ;file name string (prefix 0) SFPathname ds 129 ;full path string (prefix 0) SFPrompt anop ;standard files prompt string str 'Select an Ascii file to read:' SFTypeList anop ;list of file types to display dc i1'SFTypeCnt' ;number of file types dc i1'$04' ;TXT dc i1'$B0' ;SRC SFTypeCnt equ *-SFTypeList-1 ;calculate number of file types TextWindPtr ds 4 ;ptr to text window TextWindStr ds 18 ;name string for text window TextWind anop ;window parmlist dc i2'TWEnd-TextWind' ;size of table in bytes dc i2'%1101110110100101' ;description of frame dc i4'TextWindStr' ;ptr to title string dc i4'0' ;refcon dc i2'0,0,0,0' ;zoom size (full screen) dc i4'ColorTable' ;ptr to color table dc i2'0,0' ;content/data offset DataSize dc i2'0,1020' ;data area height/width dc i2'0,0' ;grow height/width dc i2'9,12' ;arrow scroll vert/horiz dc i2'144,592' ;page scroll vert/horiz dc i4'0' ;info bar refcon dc i2'0' ;info bar height dc i4'0' ;ptr to frame defproc dc i4'0' ;ptr to info bar defproc dc i4'WindUpdate' ;ptr to update defproc dc i2'30,90,180,420' ;coords of content region dc i4'-1' ;plane (front) dc i4'0' ;ptr to memory TWEnd anop ColorTable anop ;color table for text window dc i2'$0000' ;frame dc i2'$0F00' ;title string and inactive title bar dc i2'$020F' ;active title bar (racing stripes) dc i2'$00F0' ;grow box and alert's middle outline dc i2'$00F0' ;info bar and alert's inside outline AlertStr anop ;alert string dc c'0',i'60,160,115,480' ;coordinates dc c'4/' ;caution icon, separator dc h'01',c'J',i'1' ;center text dc h'0D',c'Entire file cannot' ;message text dc c' be displayed.',h'0D' dc c'/^#6' ;separator, Continue default dc c'/#1' ;separator, Cancel dc h'00' ;zero terminator MyFile ds 17 ;input filename (GS/OS class 1) OpenParm anop ;Open parmlist (GS/OS class 1) dc i2'2' ;pCount = 2 (input) OpenRefNum ds 2 ;reference number (result) dc i4'MyFile' ;ptr to filename (input) ReadParm anop ;Read parmlist (GS/OS class 1) dc i2'4' ;pCount = 4 (input) ReadRefNum ds 2 ;reference number (input) DataBuf ds 4 ;ptr to data buffer (input) RequestCnt ds 4 ;bytes requested (input) TransCnt ds 4 ;bytes transferred (result) CloseParm anop ;Close parmlist (GS/OS class 1) dc i2'1' ;pCount = 1 (input) CloseRefNum ds 2 ;reference number (input) end ***************************************************************** * WindUpdate start * * TaskMaster uses this code to update contents of window: * ***************************************************************** using GlobalData ; Since TaskMaster calls this subroutine, switch ; to application's data bank and direct page: phb ;save entry data bank phd ;save entry direct page phk ;equate program bank plb ; with data bank lda MyDP ;use application's tcd ; direct page ; Locate first visible line line in file: PushLong #WindPort ;ptr to port rectangle's coords _GetPortRect ;get window's port rectangle lda #9 ;row zero begins 9 pixels down sta RowLoc ldy #-1 ;prepare to zero file char indx CheckTop lda RowLoc ;compare row position with cmp WindPort+top ; top of port rectangle bcs DrawWind ;first visible line located CheckEOF iny ;compare file char index with cpy EOF ; end-of-file position bcs Done ;end of file found lda [DataBufPtr],y ;get file char and #$FF ;isolate lo byte cmp #$0D bne CheckEOF ;CR not found clc lda RowLoc ;add 9 pixels for next row adc #9 sta RowLoc bra CheckTop ; Draw contents of window: DrawWind iny ;goto start of 1st visible line phy ;protect file char index lda #4 ;set left margin for sta LeftEdge ; drawing in window pha ;horizontal coord (L edge) PushWord RowLoc ;vertical coord (row position) _MoveTo ;put pen at specified point ply ;restore file char index NextLine jsr DrawLine ;draw line in window phy ;protect file char index PushLong #PenLoc ;ptr to pen coordinates _GetPen ;get pen position ply ;restore file char index iny ;compare file char index with cpy EOF ; end-of-file position bcs Done ;end of file found lda WindPort+bottom ;compare bottom of port clc ; rectangle with current adc #9 ; vertical pen position cmp PenLoc+v bcs NextLine ;not yet at bottom of window Done pld ;restore entry direct page plb ;restore entry data bank rtl ;RTL required by TaskMaster ;................................................................ ; ; WindUpdate data: ; WindPort ds 8 ;coords of port rectangle RowLoc ds 2 ;row position in file end ***************************************************************** * DrawLine start * * Draw one line to window or printer: * ***************************************************************** using GlobalData stz CharCnt ;zero char count sty RowStart ;save starting position GetLine lda [DataBufPtr],y ;get char and #$FF ;isolate low byte cmp #$0D beq ShowLine ;CR indicates end of line inc CharCnt ;bump char count iny ; and char index cpy EOF bne GetLine ;end of file not found dey ;end of file found ShowLine phy ;protect file char index lda CharCnt ;if char count is zero beq MoveDown ; then bare CR found clc ;calc ptr to start of line lda DataBufPtr adc RowStart tax lda DataBufPtr+2 adc #0 pha ;hi byte of ptr to line phx ;lo byte of ptr to line PushWord CharCnt ;number of bytes to draw _DrawText ;draw entire line MoveDown PushLong #PenLoc ;get current pen location _GetPen ; (at end of line) PushWord LeftEdge ;horiz coord (left edge) clc ;calculate vertical position lda PenLoc+v ; by adding 9 to current adc #9 ; pen location pha ;vert coord (line position) _MoveTo ;put pen at specified location ply ;restore file char index rts ;................................................................ ; ; DrawLine data: ; CharCnt ds 2 ;number of chars in row RowStart ds 2 ;starting position of row end ***************************************************************** * DoChooser start * * Select printer and port driver via chooser dialog: * ***************************************************************** pha ;space for result _PrChoosePrinter ;conduct chooser dialog pla ;trash Boolean: true = new rts ; driver, false = same driver end ***************************************************************** * DoSetup start * * Select page setup via style dialog: * ***************************************************************** jsr SetPrintRec ;set print record pha ;space for result PushLong PrtRecHndl ;handle to print record _PrStlDialog ;conduct setup dialog pla ;trash Boolean: true = Okay rts ; hit, false = Cancel hit end ***************************************************************** * SetPrintRec start * * Establish default print record: * ***************************************************************** using GlobalData lda PrtRecHndl ora PrtRecHndl+2 beq SPR01 ;print record not allocated anop ;validate current print record pha ;space for result PushLong PrtRecHndl ;handle to print record _PrValidate jsr HandlErr pla ;trash Boolean: true = change, rts ; false = no change SPR01 anop ;allocate mem for print record PushLong #0 ;space for result PushLong #140 ;size of print record PushWord MasterID ;master ID PushWord #$C010 ;locked, fixed, one bank PushLong #0 ;not used _NewHandle ;allocate space jsr HandlErr PullLong PrtRecHndl ;save handle to data buffer lda [PrtRecHndl] ;dereference handle sta PrtRecPtr ; to print record ldy #2 lda [PrtRecHndl],y sta PrtRecPtr+2 anop ;set default print record PushLong PrtRecHndl ;handle to print record _PrDefault jsr HandlErr rts end ***************************************************************** * DoPrint start * * Print contents of window: * ***************************************************************** using GlobalData ; Set default print record or validate current print record: jsr SetPrintRec ; Conduct job dialog: pha ;space for result PushLong PrtRecHndl ;handle to print record _PrJobDialog pla ;get Boolean bne Printit ;true = Okay hit so continue rts ;false = Cancel hit so exit Printit _WaitCursor ;display clock cursor ldy #$50+6 ;get printing method byte lda [PrtRecPtr],y ; in job subrecord of and #$FF ; print record sta PrtMethod bne DocStart ;spooling; don't reset copies ldy #$50+4 ;draft printing; get number lda [PrtRecPtr],y ; of copies in job subrecord sta NumCopies ; of print record lda #1 ;ensure one copy in job sub- sta [PrtRecPtr],y ; record of print record ; Initialize document GrafPort and make it current: DocStart PushLong #0 ;space for result PushLong PrtRecHndl ;handle to print record PushLong #0 ;allocate new GrafPort _PrOpenDoc PullLong PrtDocPtr ;get ptr to doc's GrafPort jsr CheckPrtErr ;check error bcc PrintLoop ;no error brl DocDone ;error, so abort printing ; Execute printing loop: PrintLoop ldy #0 PageStart sty YSave ;protect file char index PushLong PrtDocPtr ;ptr to document's GrafPort PushLong #0 ;no scaling _PrOpenPage ;begin new page jsr CheckPrtErr ;check error bcs PageDone ;error, so abort printing PrintPage ldy #$02+6+bottom ;get bottom of page in info lda [PrtRecPtr],y ; subrecord of print record sta PageEnd lda #0 ;set left margin for printing sta LeftEdge pha ;horizontal coordinate (L edge) PushWord #9 ;vertical coordinate (1st row) _MoveTo ;move pen to specified point ldy YSave ;restore file char index PrintLine jsr DrawLine ;draw line to window or printer sty YSave ;protect file char index PushLong #PenLoc ;ptr to pen coordinates _GetPen ;get pen position ldy YSave ;restore file char index iny ;compare file char index with cpy EOF ; end-of-file position bcs PageDone ;end of file found lda PenLoc+v cmp PageEnd bcc PrintLine ;not at end of page sty YSave ;protect file char index PushLong PrtDocPtr ;ptr to document's GrafPort _PrClosePage ;end printing of page jsr CheckPrtErr ;check error bcs DocDone ;error, so abort printing ldy YSave ;restore file char index bra PageStart ;loop back for another page ; Terminate printing loop: PageDone PushLong PrtDocPtr ;ptr to document's GrafPort _PrClosePage ;end printing of page DocDone PushLong PrtDocPtr ;ptr to document's GrafPort _PrCloseDoc ;close document's GrafPort pha ;space for result _PrError pla ;get last printer error code bne Done ;error found; skip spooling lda PrtMethod beq Spoolit ;draft printing; skip mem check _CompactMem ;compact memory PushLong #0 ;space for result _MaxBlock PullLong MaxBlkSize ;size of largest free mem block lda MaxBlkSize cmp #$2800 lda MaxBlkSize+2 sbc #0 bcc Done ;mem block < 10K; skip spooling Spoolit PushLong PrtRecHndl ;handle to print record PushLong #0 ;allocate new GrafPort PushLong #0 ;allocate printer status record _PrPicFile ;print spooled document lda PrtMethod bne Done ;spool printing; don't recycle dec NumCopies ;draft printing, check copies beq Done ;done jsr CheckPMBuf ;ensure empty print buffer bcs Done ;extended interface call error brl DocStart ;draft-print another copy Done _InitCursor ;show arrow cursor rts ;................................................................ ; ; Check for Print Manager error: ; CheckPrtErr bcc CPE1 ;also check error location rts CPE1 pha ;space for result _PrError ;check last error pla ;get last PM error code sec ;assume error bne CPE2 ;error code found clc ;signal no error CPE2 rts ;................................................................ ; ; DoPrint data: ; YSave ds 2 ;contents of Y-reg NumCopies ds 2 ;number of copies to be printed PrtMethod ds 2 ;printing method (0=draft, non0=spool) PrtDocPtr ds 4 ;ptr to document's GrafPort PageEnd ds 2 ;bottom of page rectangle MaxBlkSize ds 4 ;size of largest free memory block end ***************************************************************** * CheckPMBuf start * * Ensure empty buffer using extended serial port firmware calls: * ***************************************************************** using GlobalData PortNamePtr gequ $18 ;ptr to name of active device EIHndl gequ $1C ;handle to bank zero space EIPtr gequ $20 ;ptr to bank zero space Emulstack gequ $010100 ;emulation mode stack ptr ; Find slot number of printer: CheckPMBuf anop PushLong #0 ;space for result ldx #$2913 ;PrGetPortDvrName jsl $E10000 PullLong PortNamePtr ;ptr to name of driver short ;set 8-bit regs ldy #2 lda [PortNamePtr],y ;get 1st char in device name and #$DF ;ensure upper case cmp #'A' bne GetSlot ;parallel card not found sec ;parallel card found so abort rts GetSlot ldx #1 txy lda [PortNamePtr],y ;get 1st char in device name and #$DF ;ensure upper case cmp #'M' bne GotSlot ;starts with "P" = printer inx ;starts with "M" = modem GotSlot txa ;A-reg holds printer's slot ; Modify code to reflect printer's slot ROM: ora #$C0 ;get printer's slot ROM address sta GetOffset+2 ;modify calls sta DoOutBuf+2 sta DoQStat+2 ; Modify code to reflect extended interface dispatch address: GetOffset lda >$C012 ;get offset to dispatch address sta DoOutBuf+1 ;modify calls sta DoQStat+1 ; Allocate bank zero space for extended interface command calls: long ;set 16-bit regs PushLong #0 ;space for result PushLong #BZEnd-BZStart ;size of direct page space PushWord MasterID ;master ID PushWord #$C005 ;lock, fix, align, fixed bank PushLong #0 ;bank zero is the fixed bank _NewHandle ;allocate space jsr HandlErr PullLong EIHndl ;save handle to bank zero space lda [EIHndl] ;dereference handle to get sta EIPtr ; ptr to bank zero space sta GoBZ+1 ;modify bank zero call addr ldy #2 lda [EIHndl],y sta EIPtr+2 ; Copy image of bank zero code to bank zero: shortm ;set 8-bit A and memory ldy #BZEnd-BZStart-1 CopyLoop lda BZStart,y sta [EIPtr],y dey bpl CopyLoop longm ;set 16-bit A and memory ; Invoke extended interface calls which now reside in bank zero: GoBZ jsl $001000 ;modified above ; Dispose of handle to bank zero: PushLong EIHndl _DisposeHandle ; Check for extended interface call error and return to caller: lda GOBReturn bne ExtCmdErr ;call error lda OQSReturn beq CPMBRTS ;no call error ExtCmdErr sec ;flag error CPMBRTS rts ;................................................................ ; ; IMAGE OF BANK ZERO CODE (this code copied to bank zero): ; ; Save entry environment: BZStart phd ;save entry direct page phb ;save entry data bank tsc ;get stack ptr into tax ; A and X regs shortm ;set 8-bit A and memory xba dec a beq SaveSP ;stack ptr already in page 1 lda #1 ;set stack to page one xba lda Emulstack ;set emulation mode stack ptr tcs ; (don't worry about hi byte) SaveSP phx ;save entry stack ptr ; Enter emulation mode and set new environment: emulation ;enter emulation mode pea 0 ;put direct page into page zero pld lda #0 ;zero program bank pha plb ; Ensure empty printer buffer via extended interface calls: TestBuf emulation ;enter emulation mode lda #GOBCmdList ;point to command list ldx #>GOBCmdList ldy #^GOBCmdList DoOutBuf jsr $C000 ;modified to call GetOutBuffer lda >GOBReturn bne RestEnviron lda #OQSCmdList ;point to command list ldx #>OQSCmdList ldy #^OQSCmdList DoQStat jsr $C000 ;modified to call OutQStatus lda >OQSReturn bne RestEnviron native long ;set native mode, 16-bit regs lda >GOBBufLen ;ensure empty print buffer dec a cmp >OQSBufLen bne TestBuf ; Reenter native mode and restore environment: RestEnviron native long ;set native mode, 16-bit regs plx ;restore entry stack ptr txs plb ;restore entry data bank pld ;restore entry direct page rtl BZEnd anop ;................................................................ ; ; CheckPMBuf data (this code not copied to bank zero): ; GOBCmdList anop ;GetOutBuffer command list dc h'04' ;pCount = 4 dc h'11' ;command code GOBReturn ds 2 ;return code (output) ds 4 ;buffer address (output) GOBBufLen ds 2 ;buffer length (output) OQSCmdList anop ;OutQStatus dc h'04' ;pCount = 4 dc h'17' ;command code OQSReturn ds 2 ;return code (output) OQSBufLen ds 2 ;space remaining in buffer (output) ds 2 ;reserved (output) end XŰLƯggggHH%hh z腰jlnikm A`HhLyhhHHL\0 )00 8 LԩLk<=5>?BC ,6<=>?BC8 L ڥP}yQ~z ڥPQLޅQ8 g노h VT 8H-hL Lq8 48HhLåikjlLH hLԥg?gBhC8 `hLÍ`HLHbLHhLHLȱ L:  ȥȱuyȱvz 5   Ʌ"ɫɰɼɬ  t  ʠ Ȑ    P{Q| F !QPP ,LL ȩ   L'gh}~wȱxȱȱ ` wxLVhhZL`ȱ`8`yeyzez`ee`|{8```6`ȱ4`JAN 1990 DISK (VOL 11 /NO 1) 5 LINE MANAGER OVER THE RAINBOW ASCII FILE READER II TEN TOP TIPS CHECKIT 2 OVER THE RAINBOW RUN RAINBOW CHECKIT RUN CHECKIT @ This disk is a double-sided disk. All of the programs that will run under ProDOS are on the ProDOS formatted front side of the disk, and all that will run under DOS 3.3 are on the back side of the disk. Some programs will run under both operating systems and are included on both sides of this disk. You're currently using the ProDOS side of the disk. @ Before using the programs on this disk, you should make a work disk for each program. This can be done by first making a complete copy of the disk with one of the following programs: * COPYA (DOS 3.3 System Master) * FILER (ProDOS Utilities Disk) * The Apple IIc or Apple IIGS Utilities Disk * Any Disk Copy Program Then boot the copied disk and delete all of the files that are not related to the program by using the DELETE command. The System Utilities program also has an option to DELETE files. @ You will not be able to delete the titles that we've placed in the catalog to separate files. However, these will not interfere with the operation of the programs. The screen displays that follow show the files needed to create working copies of each program. @ To create a work disk for LINE MANAGER, remove all but the following file from a copy of this disk: LINE.MANAGER This program is included on both the DOS 3.3 and ProDOS sides of this disk. This program is not included as an option in the program menu because it requires special instructions. See the documentation for details. @ To create a work disk for OVER THE RAINBOW, remove all but the following file from a copy of this disk: RAINBOW This program is included on both the DOS 3.3 and ProDOS sides of this disk. @ To create a work disk for ASCII FILE READER II, remove all but the following file from a copy of this disk: FILE.READ This program is included only on the ProDOS side of this disk. This program is not included as an option in the program menu because it requires special instructions. See the documentation for details. @ To create a work disk for TEN TOP TIPS, remove all but the following files from a copy of this disk: STRING.INPUT WORD.COUNT STRING.TEST SCREEN.DUMP.80 ERROR.LISTER GMPB SHADES.TEXTURES These programs are included on both the DOS 3.3 and ProDOS sides of this disk. These programs are not included as an option in the program menu because they require special instructions. See the documentation for details. @ In addition, we've placed a copy of the CHECKIT program on this disk. CHECKIT is a utility published in every issue of Nibble that aids in typing in programs from the magazine. See the Typing Tips in the latest issue of Nibble for details on using CHECKIT. We have also included the One- and Two-Liners on this disk. @ The source code files for the major assembly language programs have been included on this side of the disk. These files are included expressly for experienced programmers. These files cannot be used unless you own the appropriate assembler. WARNING: Do NOT attempt to run the following source code files: FR.OPTIONS.ASM (APW) BASICS.ASM (APW) FILE.READ.ASM (APW) STRING.INPUT.S (The Assembler) @ # pD$(4):C$(34):D$"PREFIX/RAM/":D$"OPENQ":D$"CLOSE":D$"DELETEQ":::M$"N=":O$":?"C$" "C$":CONT"1:1:"Calculation? ";N$:2:868:N$""ĺD$"OPENQ":D$"WRITEQ":M$N$O$:D$"CLOSE":D$"EXECQ"::X$:D$"DELETEQ":2:1:N:" ":LN:2L !C_" %k"l" (#M8( % ) L*"m"n" (_7, )7(P0 ( @X p 8  u"!_"f"0 ~&f"0 %o"p" (,) &q"r" ( %L*")0I0hx H( + %Щ ߩu"L! )L! 8'  )ɀ)4,- U JNT) u"Ls"t" ( !` ^"M)Fi/ b"3 h"i"j" e" iL X>"L;"ίΠ`v""""""*$ Fk%YeQP!/RB}QBiBB}\ }FEL,#> ȏ6 . ) ɘ"    L:#:#ŠϠĠԠ  m# m# J Qڨ)̰}] нȱ ̀𩠙 i V N c ɘ\   VG+ #X ɛL ' 0% '8 Jm ʈ0  0ŠϠĠ͢Š͠͠ϠŠŠϠĠخ͠ ͍B B(8`=YYZLYLYLY뿭` 8!@8` %MNЩUMߩ  L 5   8 0 8  `0 / X& & +&&7&P^&0`ŠӠֱǭԠŠҬî̠ӠĮʎ1|&… (n}&Dž (\%Tz&Lc()8= (J 8'z&'{& 3((ʎ1|&|&|&3223 ')L&18|&"m11 2H22h2舌|&|&12H)M0 h10200I20h2 (`LE%12 `_'"L  <8# ȱ)ɀ  )( ` (Xp< @( )m((.(( M(i  ``) |'(j21 z& {&!` ({&z&(i({&(( CBDFGE (r&$ 3(,}&r& … 3(ŅL&JJJJ`Ϡ'8`r&h)hrȱȱȱȱ0]cȱeem*ȱ*ȱ**ȱ**ȱ* )* * )L(`L?* *Ll) ) L( )Ll)8e` ,$`ee` `* G** c*` v* G* c*`hh8`8`***`}*`e`H)hJJ*0JJ)` (< ( < *? ( < (? ( < (? ( <*? * **? *? *? ( < *? ( <.<ʆ>,=?BC8 é&'112`HB-9F 3"aɿ LLB Nϰ H  @h( L Lj  @`eLJCAB@=?<>=?<>CAB@?A` 1 L  <>`ڢF]PL8i m L   6< L  BLRAM' hLDLآ <B*IBGF08Lé'+8H <,``h(`@ڍL3hh@ihAiH(ؠȱ@JJJJq@)@qvȱ@Hȱ@Ah@@cqe J) LL LJiB LJ) BxNhHHHHL(  ްƠx@BEOD  ް(`( C)CJJJl`B g-`J,~@~@}J@` ߩ%S @ ~`E hhhߺ0 h ߐ( ߐ ߐ  0 HϭߍLпllllhh8` Q)T'P#) ɺiL? )?      `l@Hȱ@IױHXATȱH ɯȩ׍̎5H)/@a)_ .0 :A[8@`,뎎׮Б` L ` @>O)I38 I`aם`K8`@Nȱ@O@ IiNȽבN)/ȩ/N`@[ WHJjjjhA D'KI؍0JHi 뎁`C8` @ 3N@) K莭 ⭪i`0 ]; 뮁ٝ٘ 0 W,0 .H hȑNWȮّNW8`ٍّNΨ0NN` G8`F@ 0 H LK8`6 7I8`FHGH hGhF܌ բFܽܕF芝ܝ 밶67 8܅I m9IHHyHȘI Lܝ` @_@ g@Ю׍O)mיOʈ@mȱ@_ȱ@iklbJtKuO)5OI0ܢܽ eL'A* 7`aFG (CD Lz܅IN mAIH` pm mI0LM AOHJFKG 밳JK 밨C%܈@" T)Ii)܍N*܍A'ܮ( 4 䭐 $H %HFFHGHG 됬`R8`)` AHO` 'Q'܅IHHOOЍO@`8 ` ͉% ΉQ8`܅I `L܍MN h8D`F` alH)HFȍJHGK $%܍&܍!ܢ8* J8` L ܝ:)I 'ܝ6`B8iNFLGM`B܅IH3H ( )ȱHΨ`Ί8AeHI SB60I ٙGٙEFJCʈ h猪`8m0`,0H hi PȽΨhٍ0GF8yאFG  $0 K01 E8`1ݺ00 ] 0ʩ 谼 谷`12)1`0`Ȏi 0U`)8`Ψ` W |G 4A)H ܝʈh٭0٭)ܝ٭*ܝ٥F٥G٭'ܝ٭(ܝ`)َ 8ʈ` 0ٝ)i `8`R ꍌvw zNمFمG < Ό0 FGL鮁0 ٭w٭vٽ8`H8`  ,v w 8` vw `ٽJJJJ`H͌hn)NjNjNjN. GH͌ z;٭ *Nۙ۰ڙک `Z8` G# ,`w .w .w .w8۰*Jv۩ ٰvw`JJJJ;i z묁͖ zٍ0  `H8` `ٍyٍiB0H0FG h0`FG `ϩBxED0C ް(`(8`ؑ@`M8`8@ؐʈI묂)v8vv L} LةC8`؍)@ i)v8vyJ ^ ؅F Ls) +%J(a .FإGؐ.` .JHIH IL3FHGI ҭJjHIHB>IؙJJ [: IL}HIHI`JKJK`FHIG ( Ȣ؝}؈JL)eKM`)` J vJ͛ $0 ΊJFJL8`JGBJ T FإG`BH TFإG`,H hHB؅F  ؅GxDE؍00C ް(`(8` zL+J  :"L zH  : 9ؙ` @ P8`K8`B8` H؈OJJJJحm) ) )Ю ЪG `F $ ᭔ع+ؠ 6H  Rh8` 䮁ٽ ٬ؠ@` ( H )8`)i п` H h)N$% LL L L 6 &pJ덟 )@።NJOK 6iKKΞΞ IJΟ JФ̭JjHFIH HIGxKE ް((H hH h8`8@ȭ@L6쬂8NNO 8 ؍JL`RΞʱLN1MOMEKP/MEKΞL;L-M O,p莝eNNO(`JNKOL 6/ &P L8 } [ؑJ`L@ȱ@ `@Nȱ@O`؝}}vIvؐ` jzؽ}؝v j ) j؝zv؈` ` H Th)N@ ;; L  6$ )bJ ] ) H 8hL )  )حJjIwHIvH؊ PLKΞʱNLMO MЈMEKݸP%MEKΞL( O, PeNNO J(` C  7 2JvHIwHI؊ LI  .` A Hv ع Hw ؙ؊ؠIhHIhH  iع `  عiعi` )؍0CGHFHBFGx ް(8hFhG`@4͔ L @Ai ׭2` . R#ع؍0 ]讁)`.@+ i 8` L )߹0 )p )@ ) ȩ ؝H0JK 방 LMJKFG 嬂؍b؍c؝d ؝_ vO) vO )حI͖ z`H@h`h``N8`  ) ;⬂Ȣ؝z@zݚ@ʈLJ KIJHȢݚ h魚)Jn 8 δ ؍ ؍ \H8 ع)ꭱJJJJ Ȣ؝I؈ 6h(8H = h(8Hh(`ؑ@`@ȱ@ ` B@8ZO h鮁ٍٍٍoHٍn8bhcOJJJJO)O@` %I -m) 0@O)N8` @LL =@ /ȹP8` i` =ם0 /B =)( ȹ`8m8m@8` G8`F Pm)@N8`O)@J /טyרםOO)׍O`a 밑 LȹL@ȅH@IL,0` G קּ= ]H.m)N 0 H`aO)@LP8` \᮰ ֩OCDC z L䬁yٙ٭yٙ٩`K GE`FaG 6%&N    ܮ `J HH hh` 0 @ LGL r`̴Yܝ ݝ0̴ȩFG   0` ܅F݅G ` { rͬ 밽܅F݅G ` {* r% L`L뮰HH hFhG܍ݍ 8 `FHGH  hGhF`ݹܙ݊`@Bɼ>K@J5 {9X(K {XXK تKo`V8`no` D on {I9XX`)HJJJh`OeNeO࿰ {9XАO`@ȭ@` ON aNJKO`HхhꭋILhH),fx8 (8` ԍ`@Ae J m00[roIIJK,-NOPQRSu' @   !"#$Ԡ͠(C)1983-87APPLELKL`BLL ެެެެެެެެެެެެެެެ(C)APPLE'83xLLM Mh@8nЍLޭ 0J @,,LRP׽8H  ): e: y8鰕:Jjjj<)yאi8i;i(*=>hPם8`;Zx3QZYXXWV[HEVhEhH)IWHPHHHAHHHLaVEWLӿ`` ֽ ְ& .Vӈ  JJJJH 8h Ei 8EX`'8`jӍWӥC)p> pӥCYӍY 轊( ( ӈBV ( ӭp0 \BkJ ՠ@iӦ> Ӑi'j:ZH i@ioZZH h ѐȭnWǥBJ Ӱ8XӦ>` Ր+>*L o % ԽYӍZӭoӝY 3Ѡ шNZ`rZLkӭZӍq8r7IZӐiZkӐk 8 ѹs ӭq ѹ| kн Z)*>>` @ $(,048<@DHLPTX\`dh 0ުlptx| 0($ p,&"op8`kkV꽌ɪɖxlӽ*kӽ-kәmMlӈ 꽌ɪ`8` ZԍsԍԍԍԥDEԌ8TԌ8WpԌqԠ 7I꽌ɪ꽌ɭ蠪:љVE:8`]ѾV]H)]ѾV]ҙ)]ѾT]ҙ)] >8hUD` ԝY`> Hh݌(`HCJJJJ)*h`8LխӅ:HhHh Ո թ թ ՘VYҪҦ>:Y)Ң`;R?AJ;<ȰY)Ң`Y?)Ң`ȐҰ ;HhHh=Ң`Hh `Hh`DEiȍ0֌18V%֌&8V֌֠)HV)hH)hHIhդD?DRIDQD)҅; ?JDQD]ՎՎՎ`MY pӭY)p  ӭp`C)`BFGV 8``  / XʩXύX X %   % ɍRH hɛɘɉɈ $ Ld :Ldې)ɮ۰ɺ' Ld  : X ( % ɛ$ɘɉ ɈL :Lɍ)ې)ɮ۰ɺH h 'L  ġLL ̹L)'L ȳL O'F ʻ ̹(((L $ʩ $$ $L `ީ % K@D EFby LҠؠӠ΢ϠԩҠŠƠԠԠŠӢɯϠҠůȠԠĠ  0h)ύh0HHHH " ׍hhhhhhh .hh8`JIMJAYKERRY&MIKE' *******************************M * RAINBOW *s * BY WHITNEY HARRIS *( * COPYRIGHT(C) 1990 *2 * MINDCRAFT PUBL. CORP. *< * CONCORD, MA 01742 * F *******************************# P::49168,0:(17)x Z4:"RAINBOW BY WHITNEY HARRIS":2:"COPYRIGHT(C) 1990 MINDCRAFT PUBL. CORP.":6 d"TYPE 1 THEN (RETURN) FOR FIRST PLOT. " n"TYPE 2 THEN (RETURN) FOR SECOND PLOT. ": x"TYPE ESCAPE TO QUIT. ": 22:10:"ENTER NUMBER";! Q$:Q(Q$). Q1210; Q2990M Q$(27)ė:W 1140} ******************************* PLOT #1, "WHITE LIGHT" 270 440 ******************************* SUBROUTINE TO PLOT A CIRCLE IN POLAR COORDINATES. N IS<  NUMBER OF POINTS. R IS RADIUS.G ::3^ PI3.14159:F1.15p "X0190:Y070 ,N500:R70 6S2PIN @ LOOP TO INCREASE ANGLE, J THEN CHANGE TO CARTESIAN T COORDINATES AND PLOT. ^A02PIS h(49152)15580$ rXR(A):YR(A)5 |X0FX,Y0Y< AB g *******************************  SNELL'S LAW  SIN(I)/SIN(R) = REFRACTION INDEX = U U1.333 *******************************  LOOP BASED ON POINTS OF INCIDENCE SYY0514- (49152)155806 570? 660G SY\ 154,186260,186q Q$:Q$(27)80z 530 &******************************* 0 SUBROUTINE TO PLOT INCOMING RAY :3 DYAY0SY NXA(R2YA2)XSXX0FXAb PLOT INCOMING RAY(l0,SYSX,SY.vT*******************************  SUBROUTINE TO TRACE RAY THROUGH RAINDROP.SIYAR:SRSIUASN(X)(X(XX1))IANGLEASN(SI)RANGLEASN(SR)BANGLE2RANGLEIANGLEXBR(BANGLE)$YBR(BANGLE)F PLOT SEGMENT FROM POINT OFm INCIDENCE TO POINT OF REFLECTIONX0FXA,Y0YAX0FXB,Y0YB FIND POINT OF EMERGENCECANGLE4RANGLEIANGLEPI XCR(CANGLE)YCR(CANGLE)   PLOT SEGMENT FROM POINT OF REFLECTION>* TO POINT OF EMERGENCE._4X0FXB,Y0YBX0FXC,Y0YC|> SLOPE OF OUTGOING RAY.HM(CANGLEIANGLE)R LOOP TO CALCULATE EQUATION\ OF RAY, THEN PLOT IT.fXXCpYM(XXC)YCz CONDITION TO TERMINATE RAY.'X2Y212029508X0FX,Y0YM(49152)15580XXX1a880g******************************* PLOT #2, REFRACTION OF COLORS******************************* 270SY5570N14(49152)15580%H,INDEX4$H:UINDEX=.660D8NYBQ$:Q$(27)80cL1090V*******COLOR CODES*******` ORANGE=5,GREEN=1,BLUE=6,VIOLET=2j 5,1.29,1,1.31,6,1.33,2,1.35 t  ***********************? * SCREEN.DUMP.80 *^ * By Robert Heath *}( * Copyright (C) 1989 *2 * BY MindCraft Publ. *< * Concord, MA 01742 *F ***********************P140Z(4)"PR#3"d- n768: DUMP 80 COL. SCREEN TO PRINTER IN SLOT 13 xV : [ SCREEN DUMP M/L ROUTINE ]q I768911:K:I,K::U 165, 54, 72, 165, 55, 72, 165, 56, 72, 165, 57, 72, 165, 36, 72, 165, 37, 72, 162, 0, 138, 72, 169, 193, 133, 55, 169, 0, 133, 54, 170, 189, 134, 3, 240, 6, 32, 237, 253, 232, 208, 245, 169, 255, 133, 60, 230, 60, 165, 60? 133, 37, 32, 36, 252, 160, 0, 173, 0, 192, 201, 155, 240, 44, 104, 72, 208, 14, 8, 120, 141, 85, 192, 177, 40, 141, 84, 192, 40, 32, 237, 253, 177, 40, 32, 237, 253, 200, 192, 40, 208, 221, 169, 141, 32, 237, 253, 234, 234, 234 234, 234, 165, 60, 201, 23, 208, 194, 104, 104, 133, 37, 32, 36, 252, 104, 133, 36, 104, 133, 57, 104, 133, 56, 104, 133, 55, 104, 133, 54, 141, 16, 192, 96, 141, 141, 137, 56, 50, 78, 141, 141, 0, 238  ************************? * SHADES.TEXTURES *^ * TED HUNTINGTON *}( * COPYRIGHT 1984 by *2 * MindCraft Publ. Corp.*< * CONCORD, MA. 01742 *F ************************P120} Z:5:12::" SHADES AND TEXTURES ":::13:"BY TED HUNTINGTON":::8:"":22:" COPYRIGHT 1984 BY MINDCRAFT PUBL. CORP." d15:20:AA$ n x:21:"AUTO OR MANUAL OR QUIT (A/M/Q):";:AA$:AA$"A"AA$"M"AA$"Q"120 :AA$"A"240 AA$"Q"ĉ:: NY0 190H X11403:C:0,XX,0:D:3,XX,0:T NY1ı :21:958:"FIRST COLOR:";:C$:C(C$):C:C0C7190 C$(27)120 22:958:"SECOND COLOR:";:D$:D(D$):D:D0D7210 D$(27)120 170 NY1:E07:F075 :22:"COLORS-";C;" AND ";D;""> 170H CC1Q AA$d "AA$(27)120k ,Fy 6C0:DD1 @E J20 󩀅A& HZh&i&ߘeiiAi^DЩ(A i`@PwUwqwwuQS75Qqur ******* 8/08/86 *******;* ProDOS STARTUP *X* BY OWL *u(* COPYRIGHT (C) 1987 *2* BY MINDCRAFT PUBL. *<* CONCORD, MA 01742 *F***********************P16384Z::D$(4):(21)d9703 n ********** GET HI-RES SCREEN AND SET DISPLAY SWITCHESd x11:3:"MINDCRAFT PRESENTS NIBBLE SOFTWARE" 15:13:"PLEASE WAIT..." D$"BRUN STARTUP.SCREEN" G(16297)(16300)(16301)(16304) ********** READ INFO FROM NIBMENU TEXTFILE 11201 P$(20): P$ = PROGRAM NAME _ S$(300):S$ = LINES OF TEXT INSTRUCTIONS RC$(20): RC$ = COMMAND USED TO RUN PROGRAM MP$(20): MP$ = PROGRAM NAME TO APPEAR IN MENU D$;"OPEN NIBMENU" D$;"READ NIBMENU" A$: A$ = DISK NAME= NA$"NIBBLE "A$:22:20((NA$)2):NA$:1h NP: NP = NUMBER OF PROGRAMS ON DISK~ I1NP:P$(I):I MM: MM = NUMBER OF VALID MENU ENTRIES "I1MM:MP$(I):RC$(I):I ,S$ 6I0 @II1:768,S$(I) J(S$(I),1,1)"#"350 T320! ^D$;"CLOSE"^ h(1101)6İ1080: ********** UPPER/LOWER CASE ROUTINE r ********** FIRST TEXT SCREEN |::3 "Thank you for ordering the Nibble":A$;"!": "The programs on this disk are:": Z1NP:5:P$(Z):Z 1030:FLAG$"ESC"ī600M  ********** CYCLE THRU NIBMENU TEXT SCREENSU A1^ :3 S$(A)"@"İ1030::3:((FLAG$"ESC"))490:600 S$(A)"#"510 S$(A) AA1:460  ********** LAST TEXT SCREEN BEFORE MENU :36:"Thanks again for your order !")12:R6:"ALL PROGRAMS ON THIS DISK ARE"{&6:"COPYRIGHT (C) 1990 BY NIBBLE"06:"MINDCRAFT PUBLISHING CORP."56:"52 DOMINO DR, CONCORD MA 01742"::17:5:"UNAUTHORIZED COPYING IS ILLEGAL"D1030$N ********** SET UP MENUJXMEMM2:X$(0)" ":X$(1)"-->":b1:1:"Selection: : Instructions"l3:"----------------------------------------";v5:20((A$)2):A$I1ME2:61I:8:I". "MP$(I):61(ME1):8:ME1". Catalog Disk"861ME:8:ME". Quit"l21:"----------------------------------------"23:1:"Type number or use arrows, then ";:PX10:SX4:SL1 ********** SELECT CHOICENSL:OSSL:780:Z0:24:868Y1:12:SL:49168,0:16384,128::Z$((16384)128):Z$"1"Z$(ME)SL(Z$):NOS:780:700Z(Z$(21)Z$(10))(Z$(8)Z$(11))10(Z$(13))20(Z$(27)):Z950Z20ī380SLSLZ(Z10):SLSLME(SLME)ME(SL1)NOS:780:Z107008002 ********** PRINT POINTER SUBROUTINEO 61N:SX:X$(SLOS);:r ********** SELECTION ROUTINE SL(ME1)İ860:600*SLMEİ900:SL1:780:68042:1:" "::2:1:RC$(SL): > ********** EXECUTE A VALID MENU CHOICE,H49168,0::1100:D$;RC$(SL)PR ********** CATALOG SELECTED m\:49168,0::D$;"CAT":f24:7:"Press to continue";p49168,0:49152,128:z ********** QUIT SELECTED22::958:"Do you really want to quit? (Y/N)";:49168,0(49168,0:49152,128Z(49152)249(49152)217Ĺ49168,0::1100:` ********** SOUND BUZZER FOR WRONG KEYSTROKE EQ110:EY(16336)(16336):EQ: ********** ERROR HANDLING ROUTINE:(1101)6ė:D$"PR#A$300"_(222)6(222)8Ģ19:(7);"Disk Error. Please insert Nibble disk":101019:(7);"An error #"(222)" has occurred. "23:"Press to continue ";:958:49168,0:49152,128:600  ********** WAIT FOR KEYSTROKEFLAG$""`23:" for next page or for menu";:49168,0:49152,128~(49152)155FLAG$"ESC"$. *********** ATTACH UPPER/LOWER CASE ROUTINE8I013:ML:768I,ML:I:D$"PR#A$300":B ********** DETACH UPPER/LOWER CASE HANDLER *L(4);"PR#0":ZV ********** INSTALL INPUT-ANYTHING ROUTINEu`X768839:A:X,A::j ********** INPUT-ANYTHING ROUTINE DATAt 32,190,222,32,227,223,36,17,208,5,162,163,76,18,212,133,133,132,134,165:~ 184,164,185,133,135,132,136,32,44,213,173,0,2,201,3,208,3,76,99,216 169,0,133,13,133,14,169,0,160,2,32,237,227,32,61,231,32,123,218,165 135,164,136,133,184,132,185,32,183,0,96,0 ********** UPPER/LOWER CASE ROUTINE DATA 216,201,225,144,6,201,251,176,2,233,31,76,240,253,0  c` ` v`` ` v` `ݥ``8 ``+p|~p|*U*U*U*U*U*S( @?p~px|xժժժժժRT* @?p~px|ЪժժժՊ dOE U @?`p~?pxԊԪ `|yg~0 cFc& U*U*U*@@ @%P*U*U*U*U*U }<_/" p@Pgp{?"dydw!<MժժժժժժdpO|`*U*U*U*U*U*p|~p|(U*U*U*U*U*S* @?p~px|ժժժժժ `AFT* @?p~px|xժժժՂ n_?E U @?`p~ppp}{c0 cFc&(U*UA*U*uԪժժժժՊ @ [ժժժժժժdpO|`*U*U*U*U*U*p|~p|(U*U*U*U*U*S* @?p~px|ժժժժժ `AFT* @?p~Ap||xժժժՂ N?p1 U4pysc'C&0.cFc&(U*U P*U* > @p{?" NԪժժժժժ@ [ժժժժժժdpO|`*U*U*U*U*U*p|~p|(U*U*U*U*U*R@* @?p~px|ժժժժժ pcFU* @?p~p|ժժժ _?@>|. U5x{w cY#8X03X0FC30%*U*U*U*U*U L @@ " NԪժժժժժtժժժժժժdpO|`*U*U*U*U*U*pp~p|(U*U*U*U*U*R@* @?p~px|Ԫժժժժ pcFU* @?`p~p|ժժժ ?~ GC@F- U5xsg`c00@` 80 FOR CATALOG) ";A$: 4 SPACES A$""ĺD$;("CATALOG",7((48896)76)4):120 :D$"VERIFY"A$ D$"OPEN"A$ D$"READ"A$ C$B$:B$ 6,(B$)128:7683 B$" "C$" "COUNTCOUNT1: ONE SPACE BETWEEN QUOTES< 170R 216,0:D$"CLOSE" :10::"NUMBER OF WORDS IN '";A$;"'":"IS: ";:COUNT 22:" TO CONTINUE, TO QUIT";:Q$:Q$:Q$(13)Ĺ16368,0:100 Q$(27)ĺ(7):230 :