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}' +APPLE.ORGAN - +% AUTO +- 7 ,BASIC.SYSTEM (*+*BASICS.ASM -+3 ϲCHANNELS8+' +'CHECKIT9 6/ ϲ )FILE.READA+3 -FILE.READ.ASMG$D+3 :.FR.OPTIONS.ASMkv+3 INERTIAnu+- + MAKE.CARDSo+- 6 *NIBBLE.ASMpI& -NIBBLE.ASM.MLJ@+ +NIBBLE.ASM2'(- 'NIBMENU >- - &PRODOS }<n% READ.CARDSZ+- 6 ROBOT.CATCHj+-  .SEARCH.SAMPLER + ,- 'STARTUP ®3* .STARTUP.SCREENC 9`4,TM.ADDRESSES+) ڲ'TM.EDIT +( +-TM.LABEL.LISTD +-  &TRINUM&#+- @9 TRISHAPES+%  (VISISORT ,+- - ORG $300 ;PAGE 3 USER SPACE PITCH EQU $7 ;TONE PITCH KEYBD EQU $C000 ;KEYBOARD LOCATION STROBE EQU $C010 ;KEYBOARD CLEAR STROBE SPEAKER EQU $C030 :APPLE SPEAKER ADDRESS WAIT EQU $FCA8 ;MON WAIT ROUTINE LDA #$10 ;INITIALIZE THE PITCH STA PITCH KEYPRESS LDA KEYBD ;GET CURRENT KEY PRESS BPL TONE ;NONE PRESSED YET CMP #$9B ;ESC TO QUIT? BEQ QUIT ; YES, GO QUIT CMP #$C1 ;KEY VALUE TO LOW? BCC TONE ;YES, SO GO GET ANOTHER CMP #$DB ;KEY ASCII > "["? BCS TONE ;YES, GO GET ANOTHER KEY SEC ;PREPARE FOR SUBTRACTION LDA #$DB ; MAKE "Z"=1, "Y"=2, ETC SBC KEYBD ;SUBTRACT KEYBOARD VALUE STA PITCH ;SAVE AS NEW PITCH TONE LDA SPEAKER ;CLICK THE SPEAKER LDA PITCH ;GET THE PITCH VALUE JSR WAIT ;PAUSE A BIT JMP KEYPRESS ;GO GET NEXT KEY QUIT LDA STROBE ;CLEAR KEYBOARD RTS  D$(4): CONTROL-D1D$;"OPEN AUTOFILE"JD$;"WRITE AUTOFILE"]("RUN STARTUP"l2"CATALOG"x<"LIST"F"HOME"PD$;"CLOSE AUTOFILE" 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!"#$%&'()*+,-./01234567***************************************************************** * * 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  ::X3:Y9:A6333:1:0,39A:0:A,38(1)::T99911:8:A(49152):CY(A201):CC(A205):BX(A203):TTB,C):B,C:0:X,Y:XB:YC:21:T" ":TT(X39): :;<=>?@. ********** 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 BCDEF ,@ 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,"`fffffWg 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:```` tx|R:% +=.jDJsPVlpz :>% $*579;=?ACEGIKNQTk} fjmpuyjn!&.8;FXj|؁36:GMSYHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij**************************************** * * * FILE.READ.ASM Source Listing * * by Sandy Mossberg * * * * APW Assembler * * * * Copyright (C) 1989 * * by MindCraft Publ. Corp. * * Concord, MA 01742 * * * **************************************** mcopy file.read.mac keep file.read DPHndl gequ $00 ;handle to direct page space DPPtr gequ $04 ;ptr to direct page space DataBufHndl gequ $08 ;handle to data buffer for file contents DataBufPtr gequ $0C ;ptr to data buffer for file contents PrtRecHndl gequ $10 ;handle to print record PrtRecPtr gequ $14 ;ptr to print record ScreenMode gequ $80 ;640x200 super hi-res ($00 = 320x200) ScreenWidth gequ 640 ;640 pixel screen width top gequ 0 ;offsets in coordinate fields left gequ 2 bottom gequ 4 right gequ 6 v gequ 0 ;offsets in pen position fields h gequ 2 ***************************************************************** * MainLoop start * * Main program loop: * ***************************************************************** using GlobalData phk ;equate program bank plb ; with data bank jsr StartUp ;startup tool sets bcs Quit ;boot disk not online jsr InitDesktop ;initialize desktop jsr InitApplic ;initialize application jsr EventLoop ;scan for events jsr ShutApplic ;free program memory jsr ShutDown ;shutdown tool sets Quit _QuitGS QuitParm ;quit to calling application ;................................................................ ; ; MainLoop data: ; QuitParm anop ;Quit parmlist (GS/OS class 1) dc i2'0' ;pCount = 0 (input) end ***************************************************************** * InitDesktop start * * Initialize desktop: * ***************************************************************** PushLong #0 ;refresh entire desktop _RefreshDesktop ldx #MTIndex ;get index to last entry in menu table MenuLoop phx ;save index to menu table PushLong #0 ;space for result lda MenuTable+2,x ;ptr hi to menu template pha ; (menu lines and item lines) lda MenuTable,x ;ptr lo to menu template pha ; (menu lines and item lines) _NewMenu ;create new menu in system menu bar PushWord #0 ;insert menu in front of other menus _InsertMenu ;insert specified menu in menu list plx ;retrieve index to menu table dex ;get next entry in menu table dex dex dex bpl MenuLoop ;loop back for another menu PushWord #1 ;ID of NDA menu _FixAppleMenu ;setup NDA menu pha ;space for result _FixMenuBar ;set standard size of menu bar pla ;discard menu height _DrawMenuBar ;display system menu bar rts ;................................................................ ; ; InitDesktop data: ; MenuTable anop ;table of ptrs to menu templates below dc i4'AppleMenu' dc i4'FileMenu' dc i4'EditMenu' MTIndex equ *-MenuTable-4 ;index to last entry in table AppleMenu dc c'>>@\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 lm**************************************** * * * FR.OPTIONS.ASM Source Listing * * by Sandy Mossberg * * * * APW Assembler * * * * Copyright (C) 1989 * * by MindCraft Publ. Corp. * * Concord, MA 01742 * * * **************************************** ; Modules to be given in 2nd installment: DoOpen start rts ;Open File... end DoChooser start rts ;Choose Printer... end DoSetup start rts ;Page Setup... end DoPrint start rts ;Print File... end  L199::8:17:"INERTIA":13:17:"LEVEL:"L:X140:Y80:N175:D1((1)25)::P(49200)::::3:0,0279,0279,1590,1590,0:X,Y:W49152:W,128:Q01E3:K(W)t (224)(225)256,(226)X,Y:AA((K149)L)((K136)L):SS1(K149K136K218K193):ZZ((K218)L)((K193)L):XXA:YYZ:X279X0Y159Y0Ģ23:"SCORE:";S,"LEVEL:";L:Q:SS(L1):L MAKE.CARDS*D$(4): CONTROL-DM:7:"CREATING CARDS FILE..."f(D$;"OPEN CARDS,L17"r2N113<D$;"WRITE CARDS,R"NF"RED":"HEART":NPZN1426dD$;"WRITE CARDS,R"Nn"BLACK":"SPADE":N13xN2739 D$;"WRITE CARDS,R"N2 "RED":"DIAMOND":N268 E N4052^ D$;"WRITE CARDS,R"Ny "BLACK":"CLUB":N39 D$;"CLOSE CARDS" :7:"CARDS FILE COMPLETED"qrstuvwxyz{|}~! *************************A * NIBBLE.ASM *a * BY KENNETH A. PLUM *( * COPYRIGHT(C) 1989 *2 * MINDCRAFT PUBL. CORP. *< * CONCORD, MA 01742 *F *************************P1720:670J Z(4)"VERIFY NIBBLE.ASM.ML":(4)"VERIFY NIBBLE.ASM2":(4)"BRUN NIBBLE.ASM.ML":740d d(4)"PREFIX":"";PF$ n:"NIBBLE ASSEMBLER By Kenneth A. Plum":"Copyright(c) 1989 MindCraft Publ. Corp." x INPUT SOURCE FILE NAME/ EF1:34,2::630:4:"Sourcefile: ";:T$SF$:L64:260::(T$,1)"*"İ560:130 SF$T$:SF$""SF$" "(ES)ĺ"Do you wish to quit (Y/N) ";:T$:T$"N"T$"n"130:240 1710 (4)"VERIFY"T$ 34,4::630:"Objectfile: ";:T$BF$:L64:260::(T$,1)"*"İ560:170# ES130:BF$T$:F$SF$:BF$""BF$" "170* P 34,7::"Loading NIBBLE.ASM2..."u EF2:D$"CHAIN "PF$"NIBBLE.ASM2" 48888: INPUT SUBROUTINE E$T$:T$""E$" " P1:ES0:(CL$,L)(BB$,L)E$(BB$,(E$)); (E$)LE$(E$,L):B$;+ "E1$" ":L11:(P(E$))300:E1$(E$,P,1)H ,L1IMĞ:E1$B$;::330] 6L1ĺ"_"B$;:330i @E1$B$; JA120:L2(16384):L2127A20 T:L1L1:L2128300 ^E2$(L2128):16368,0:E1$B$;:(L2159L2255)380 hE0:A1(EC$):E2$(EC$,A,1)EA:A(EC$)D r:E430,430,450,500,470,470,500,510,530:280u |P1P(E$)E$(E$,P1)E2$(E$,P(IM)) P1E$E2$(E$,P(IM)):(E$,1)" "E$(E$,(E$)1) P(E$)E$E$E2$ (E$,P);:P(E$)ĺ(BB$,(E$)P);PP(PL):280"E1P1ĺE2$;:PP1:280EE2P(E$)ĺE1$;:PP1:280UIMIM:280k(BB$,P1);:260P1280:E2$"":P2E2$(E$,P2)E$E2$(E$,P):PP1:B$(E$,P)" ";B$;:P(E$)ĺ(BB$,(E$)P1);280 (BB$,P1(P1));:P1260:ES1:%T$E$:P1ĺ(BB$,P1);0T$;:rP(E$)280:A(E$)P1:(CL$,A);(BB$,A);:P1E$" ":280E$(E$,P1):280& EXECUTE DOS COMMAND0T$(T$,2):(T$,1)" "T$(T$,2):610D34,(34)2::D$T$:T$"PREFIX"Ą"";T$:T$EN"Press Return to continue. ";:T$:34,(34)2:216,0:670KXzb(7);PM$((222)):D$C$:216,0:3288:590l DISPLAY INPUT EXAMPLESv11:"Example entries:"::"MYFILE":"/MYDISK/MYFILE":"MYFILE,S6,D2":z"*CATALOG (See current directory)":"*CAT,D2 (See directory for drive 2)":"*PREFIX (See current prefix)":"*PREFIX,D2 (Set prefix to drive 2)"(25): ERROR HANDLER(4)"CLOSE":(222)21(222)16ĺ"ERROR # "(222)" IN LINE "(218)256(219):240ER(222):216,0:3288:670EF0ė:"Unable to load program files."::"The following files must all":"be in the same directory:":"NIBBLE.ASM":"NIBBLE.ASM2":"NIBBLE.ASM.ML";(7)::PM$(ER):KEF2ĺ"Place disk with "PF$"NIBBLE.ASM2 in drive and press ":"or press to abort program";:T$:(T$(13))220[216,0:240~ SIMPLE VARIABLE DEFINITIONSZ0:L0:A0:L10:L20:H0:GM0:A10:P0:T$"":E$"":CM0PN0:LM0:LR0:PC0:ER0:AM0:LC0:BL0:CC0:CV0:MB0:GS0:BA0:SN0:TL0:PP0:EF0:E0WBF$"":IM0:ES0:SF$"":F$"":E1$"":E2$"":CD0:ET0:HC0~BS((1014)256(1015))512:BPBS EC$(8)(21)(9)(12)(4)(127)(27)(13)(25)B$(8):L180:BB$BB$B$:CL$CL$(32):  DEFINE STRING CONSTANTS FOR PRODOSH*D$(4):Q$"OPEN":R$"READ":W$"WRITE":C$"CLOSE"n4H$"/RAM/ASM.TEMP":PF$"":LX1500>PL$(3),AG$(2),AG(2),GL$(LX),GA(LX)HMN$(92),SC%(31),BC%(13),MC%(25,11): OPCODES & MNEMONICS RNL(3):NL(0)8:NL(1)3:NL(2)10:NL(3)0#\CI%(92):L092:CI%(L):Sf 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1p 1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2z 2,2,2,3,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7 8,8,9,9,10,11,11,12,13 EM$(8)&EM$(1)"Bad operand "MEM$(2)"Value over / under range "rEM$(3)"Duplicate Global label "EM$(4)"Local label overrange "EM$(5)"Bad opcode "EM$(6)"Branch overrange "EM$(7)"Bad address mode " EM$(8)"Undefined label ", Time to set up data tablesBL192:MN$(L):~ "INA","INX","INY","DEA","DEX","DEY","RTS","RTI","CLC" "CLD","CLI","CLV","SEC","SED","SEI","TAX","TAY","TSX" "TXA","TXS","TYA","PHA","PHP","PHX","PHY","PLA","PLP"2$ "PLX","PLY","BRK","NOP","BCC","BCS","BEQ","BNE","BMI"n. "BPL","BRA","BVC","BVS","BLT","BGE","BFL","BTR","JSR"8 "JMP","ASL","LSR","ROL","ROR","LDA","LDX","LDY","STA"B "STX","STY","STZ","ADC","AND","BIT","CMP","CPX","CPY""L "DEC","EOR","XOR","INC","ORA","SBC","TRB","TSB","STR"^V "ASC","DCI","INV","FLS","REV","BYT","HBY","DDB","DBY"` "DW","ADR","DFB","HEX","DS","DFS","MSB","EQU","="j "ORG","CHN"tL131:SC%(L):: SINGLE OPCODES~ 26,232,200,58,202,136,96,64,24,216& 88,184,56,248,120,170,168,186,138,154 Q 152,72,8,218,90,104,40,250,122,0,234xL113:BC%(L):: BRANCH OPCODES 144,176,240,208,48,16,128,80,112 144,176,240,208L125:L1111:MC%(L,L1):: 10,0,0,0,0,6,22,0,14,30,0 74,0,0,0,0,70,86,0,78,94,0; 42,0,0,0,0,38,54,0,46,62,0a 106,0,0,0,0,102,118,0,110,126,0 0,169,178,161,177,165,181,0,173,189,185 0,162,0,0,0,166,0,182,174,0,190 0,160,0,0,0,164,180,0,172,188,0  0,0,146,129,145,133,149,0,141,157,153) 0,0,0,0,0,134,0,150,142,0,0K 0,0,0,0,0,132,148,0,140,0,0o( 0,0,0,0,0,100,116,0,156,158,02 0,105,114,97,113,101,117,0,109,125,121< 0,41,50,33,49,37,53,0,45,61,57F 0,137,210,0,0,36,52,0,44,60,0P 0,201,0,193,209,197,213,0,205,221,2174Z 0,224,0,0,0,228,0,0,236,0,0Wd 0,192,0,0,0,196,0,0,204,0,0{n 0,0,0,0,0,198,214,0,206,222,0x 0,73,82,65,81,69,85,0,77,93,89 0,73,82,65,81,69,85,0,77,93,89 0,0,0,0,0,230,246,0,238,254,0  0,9,18,1,17,5,21,0,13,29,259 0,233,242,225,241,229,245,0,237,253,249W 0,0,0,0,0,20,0,0,28,0,0t 0,0,0,0,0,4,0,0,12,0,0PM$(21)PM$(0)"UNDEFINED ERROR"PM$(1)PM$(0)PM$(2)"RANGE ERROR"PM$(3)"NO DEVICE CONNECTED" PM$(4)"WRITE PROTECTED" PM$(5)"END OF DATA"< PM$(6)"PATH NOT FOUND"N PM$(7)PM$(6)e PM$(8)"I/O ERROR"| "PM$(9)"DISK FULL" ,PM$(10)"FILE LOCKED" 6PM$(11)"INVALID OPTION" @PM$(12)"NO BUFFERS AVAILABLE" JPM$(13)"FILE TYPE MISMATCH"!TPM$(14)"PROGRAM TOO LARGE"8!^PM$(15)"NOT DIRECT COMMAND"S!hPM$(16)"SYNTAX ERROR"p!rPM$(17)"DIRECTORY FULL"!|PM$(18)"FILE NOT OPEN"!PM$(19)"DUPLICATE FILE NAME"!PM$(20)"FILE BUSY"!PM$(21)"FILE(S) STILL OPEN"!;":"THE FILE "T$" IS INVALID. PRESS RETURN AND TRY AGAIN";:XX$:XX$:130"768,169:769,0:770,141:771,0:772,3:773,56:774,32:775,31:776,254:777,144:778,1:779,96:780,169:781,1:782,141:783,0:784,3:785,96"768:(768)1ĺ(4)"PR#3":#(768)0QZ(64435)(64448)'#QZ240ĺ(21):B#QZ229ĺ(4)"PR#3":H# L C8A@ʽ@eLCA<=ʩB>?BL,AABAvAyAABBBBBBH hI7PgSLBHLBL ߠ` ߥ` 1A ) ʊH R΄ϠȥΑȥϑhL A 1A E  Ȅ A[RȄ \";8eȑiȑ` A 1A g Rȱȱ0(i8PPQQPп ߥ L+ g RP&Q* 0:iBB ߠB`B" **************************C * NIBBLE.ASM2 *d * BY KENNETH A. PLUM *( * COPYRIGHT(C) 1989 *2 * MINDCRAFT PUBL. CORP. *< * CONCORD, MA 01742 *F **************************PZEF0:1690 d1110- n EVALUATE ARGUMENT SUBROUTINEs xAG(0)1:AG(1)0:AG(2)0:AG$(1)"":AG$(2)"":L1:L11:L2(AG$(0)) T$(AG$(0),L,1):(T$"+"T$"-")LL2LL1:130 LL2AG$(1)(AG$(0),L1):AG$(2)(AG$(0),L1):AG(0)2:L21((AG$(0),L,1)"-"):160 L20:AG$(1)AG$(0)U T$(AG$(L1),1):T$"*"AG(L1)PC2(CI%(CC)2):280 T$(34)AG(L1)((AG$(L1),2,1)):280 T$"A"T$":"ī240: NOT LABEL, TRY NUMBER (T$":")190:S,AG$(L1),GL$(1),GM,H:220 H0:LLR1GM:(GL$(L),1)T$LGM& GL$(L)AG$(L1)HL:LGM, W GL$(H)AG$(L1)ER8:AG(0)65535:310m AG(L1)GA(H):280 T$"$"āL(AG$(L1))21:AG(L1)AG(L1)(((AG$(L1),L,1))487((AG$(L1),L,1)"@"))(16((AG$(L1))L))::280C T$"%"āL(AG$(L1))21:AG(L1)AG(L1)((((AG$(L1),L,1))48)(2((AG$(L1))L)))::280m T$"/"T$":"AG(L1)(AG$(L1)):280v ER1 AG(0)2L11ER0L12:160 "AG(0)1AG(0)AG(1):310 ,AG(0)AG(1)AG(2)(L21)AG(2)(L22) 6AG(0)0AG(0)65535ER2:AG(0)65535 @2 J GET ADDRESS MODE SUBROUTINEh TAM0:(CC46CC51)(PL$(2)""PL$(2)"A")AM1: ^(PL$(2),1)"#"AM2: h(PL$(2),1)"("AM3((PL$(2),3)",X)")2((PL$(2),3)"),Y"):(rAG$(0)PL$(2):A(AG$(0),2)",X":A1(AG$(0),2)",Y":(AA1)AG$(0)(AG$(0),(AG$(0))2)I|120: EVAL THAT OPERAND gAM9:AG(0)256ER0AM6AMAM(A1)2(A11)3(A11AM6CC52CC55): ASSEMBLE LINE SUBROUTINELC0:ER0:CD0:CV0:PL$(0)""490IPNGMLXĺD$"CLOSE":(7):"More than "LX" labels defined...":"Assembler terminating.":1640`LMLM1:PNGMLMPNGL$(GM)PL$(0):GA(GM)PCT$(PL$(0),1):T$":"LRLM(PN)T$":"GM1490:S,PL$(0),GL$(1),GM1,HH0ER3S,PL$(1),MN$(1),92,CCCC0ER5:PCI%(CC)530,550,600,630,680,760,820,890,970,1010,1030,1060b SINGLE OPSCDSC%(CC):LC1:PN1080: BRANCH OPS&LC2:PNı0CDBC%(CC31):AG$(0)PL$(2):120:A1PC2:CVAG(0)A1:CV127CV128ER6DCVCV256(CV0):1080N JSR+XLC3:PNıWbCD32:AG$(0)PL$(2):120:CVAG(0):1080bl JMPrvLC3:PNıAG$(0)PL$(2):CD76:(AG$(0),1)"("CD108:AG$(0)(AG$(0),2,(AG$(0))2)(AG$(0),2)",X"CD124:AG$(0)(AG$(0),(AG$(0))2)120:CVAG(0):1080# MULTIOPSI340:AM0MC%(CC46,AM)0ER7:gLC1(AM1)(AM8):PNıAM5AM1740: DON'T NEED TO RE-EVALUATE AG$(0)PL$(2):(PL$(2),1)"("AG$(0)(AG$(0),2,(AG$(0))2):(AG$(0),2)",X"(AG$(0),2)"),"AG$(0)(AG$(0),(AG$(0))2)g(AG$(0),1)"#"AG$(0)(AG$(0),2):(AG$(0),1)"<"AG$(0)(AG$(0),2)120:(PL$(2),2)"#<"AG(0)(AG(0)256)CDMC%(CC46,AM):CVAG(0):1080 STRING OPSLC(PL$(2))2(CC72):PNı/AG$(0)(PL$(2),2,(PL$(2))2):L10:CC72L11:BP,(AG$(0)) L(CC77)(AG$(0))(CC77)(CC77)(AG$(0))(CC77)(CC77)(CC77):A1((AG$(0),L,1))BPL1,A164(CC76A164)64(CC75A163)128(MB((CC74CC77)(CC74L(AG$(0)))))128(MB0CC74L(AG$(0))) L1L11::6* BYT,HBY,DDB,DBY,DW,ADRN4LC1(CC79):PNı>AG$(0)PL$(2):120:CC78AG(0)AG(0)(AG(0)256)256HCC79AG(0)(AG(0)255)RCC80CC81AG(0)(AG(0)(AG(0)256)256)256(AG(0)256) \CVAG(0):BP,CV(CV256)256:LC1ĹBP1,(CV256)&f5p DFB,HEXzzLC0:L11(PL$(2)):LCLC((PL$(2),L1,1)",")::LCLC1:PNıA1:P1:A10(PL$(2),P,1)","PP1:P(PL$(2))910P(PL$(2))PP1AG$(0)(PL$(2),A,PA):CC85AG$(0)"$"AG$(0)M120:BPA1,(AG(0)(AG(0)256)):P(PL$(2))PP1:AP:A1A11:910Sa DS,DFSPL$(2)"!"LPC(PC256)256:LC256L(L0):990AG$(0)PL$(2):120:LCAG(0)PNıL0LC:BPL,0::MB(PL$(2)"ON"):: MSB EQU,=PNı7AG$(0)PL$(2):120:GA(GM)AG(0):B ORGr$AG$(0)PL$(2):120:PCAG(0):GSBAPC:GS1.: MAIN ROUTINE DOES CHN8BP,CD:BP1,CV(CV256)256:LC3ĹBP2,(CV256)BL PROGRAM ENTRY POINTV34,7::TL0:LM0:LR0:GM0:EF2:D$Q$H$/` READ SOURCE FILEj:"Insert disk with "F$:"and press to continue or to abort ";:T$::T$(13)1630tEF3:D$"VERIFY"F$:D$Q$F$::"Reading "F$;~1660:D$"FRE"EF4:(112)(110)4ĺD$"FRE"D$R$F$:I,E$:E$""E$"*"ST$(E$,1):CM(T$"*"T$";"):(CM)įP,E$,PL$(0){TLTL1:".";:D$W$H$:CMĺE$:1160L03:PL$(L)::D$PL$(1)"CHN"ĺD$C$F$:F$(PL$(2),2,(PL$(2))2):1140EF6:420:PCPCLC:ETET(ER1ER6)DER1ER6ĺ(7):EM$(ER)" in line "TL:TL" ";:L03:PL$(L)" ";::o1160: Trap End-of-file to end loop.ET0ĺ(7);ET" Errors detected":"Assemble anyway ? (Y/N) ";:T$::T$"N"T$"n"1630 SECOND PASS:"Put OBJECT disk in drive and press to continue"K "or to abort";:T$::T$" "1640:"Do you want hard copy? (Y/N) ";:T$:HC(T$"Y"T$"y")::HCĺ:"Prepare printer and press ";:T$::(21)::D$"PR#1":(27)"N";("Source file is "SF$:"Object file is "BF$:!2EF7:PC1U<D$"FRE":D$Q$H$:D$"BSAVE "BF$",A"BA",L1":EF8FPC0:ET0:LR0:LM0:PN1:SN1TL:LC0P(112)(110)4ĺD$"FRE"ZD$R$H$:I,PL$(0):T$(PL$(0),1):CM(T$"*"T$";"):(CM)āL13:I,PL$(L):d((CM1)PL$(1)"CHN")1400:420^nERĺEM$(ER)" in line "SN:ETET1:PPPP1:PP60HCPP0:L16::xH,PC,T$:T$;" ";:LCĺ" ";:1440: 9 SPACES L102:L1LCA(BPL1):H,A,T$:(T$,2);" ";L1LCĺ" ";("000"(SN),4);" ";:CMĺPL$(0):PPPP1:1510uE$"":L103:E$E$PL$(L1)" ":(PL$(L1))NL(L1)E$E$(CL$,NL(L1)(PL$(L1))):(E$)60E$(E$,60)E$:PPPP1:L13:LC41510" ";:A107:A1L1LCįH,(BPL1A1),T$:(T$,2);" ";: 5 SPACES * ::PPPP1:PP60HCPP0:L16::D L1L18:LCL111480Z PCPCLC:BPBPLC BPBS250ĺD$"BSAVE "BF$",A"BS",L"BPBS",B"BL:BLBL(BPBS):BPBS HCĭPP60āL16:::PP0 SN !BPBSĺD$"BSAVE "BF$",A"BS",L"BPBS",B"BL:BLBL(BPBS):BPBS&!D$C$H$:D$"DELETE"H$?!" ASSEMBLY COMPLETE!,:"Assembly complete":"Errors ";ET:"Length ";:H,BL,T$:"$"T$:::HCĺ(12):::!6"Labels defined: ";GM::A11:L10GM$"@GL$(L1)""1620:(GL$(L1)" ",9);:GA(L1)65535GA(L1)0GA(L1)65535: 8 SPACES i"JH,GA(L1),T$:T$" ";:A1A11:A16A11:HCĺ: 3 SPACES s"T::"^HCĉ:"hD$"CLOSE":48888:"r STRIP PARAMETERS FROM FILENAME"|P1(F$):(F$,P,1)","F$(F$,P1)":# ERROR HANDLERh#(4)"CLOSE":(7):(222)221720:(222)77ĺ:"Out of memory. Assembler terminating.":1630#(222)255ĺ"CTRL-C pressed to terminate program.":1630#:"ERROR # "(222)" IN LINE "(218)256(219):1630$ER(222):216,0:3288:1690$EF4ER5ī1260)$:PM$(ER):V$EF2ĺ"While opening temp file in /RAM"$EF4ĺ"While reading your file / writing temp file"$EF7ĺ"While opening object code file"$EF3EF7ĺ"Press to retry or to abort";:T$:%EF3Ĵ(T$(13))1130:16308%EF7ĭT$(13)ī1340I%216,0:1630$(L1,L2)"")1880:(LL$(L1,L2)" ",9);:LA(L1,L2)0LA(L1,L2)65535LA(L1,L2)65535%NM4%,LA(L1,L2),T$:T$" ";:A1A11:A16A11:HCĺ &X:::&bHCĺD$"PR#3"!&l8&v INPUT SUBROUTINEP&E$T$:T$""E$" "~&P1:ES0:(CL$,L)(BB$,L)E$(BB$,(E$));&(E$)LE$(E$,L):B$;&E1$" ":L11:(P(E$))1960:E1$(E$,P,1)&L1IMĞ:E1$B$;::1964&L1ĺ"_"B$;:1964 'E1$B$;0'A120:L2(16384):L2127A20J':L1L1:L21281960'E2$(L2128):16368,0:E1$B$;:(L2159L2255)1980'E0:A1(EC$):E2$(EC$,A,1)EA:A(EC$)':E2030,2030,2060,2110,2080,2080,2110,2120,2135:1940"(P1P(E$)E$(E$,P1)E2$(E$,P(IM))^(P1E$E2$(E$,P(IM)):(E$,1)" "E$(E$,(E$)1)u(P(E$)E$E$E2$((E$,P);:P(E$)ĺ(BB$,(E$)P);(PP(PL):1940(E1P1ĺE2$;:PP1:1940(E2P(E$)ĺE1$;:PP1:1940) IMIM:1940)(BB$,P1);:1920E) P11940:E2$"":P2E2$(E$,P2))*E$E2$(E$,P):PP1:B$(E$,P)" ";B$;:P(E$)ĺ(BB$,(E$)P1);)41940)>(BB$,P1(P1));:P11920:ES1:)HT$E$:P1ĺ(BB$,P1);)RT$;:)*WP(E$)1940:A(E$)P1:(CL$,A);(BB$,A);:P1E$" ":1940@*YE$(E$,P1):1940[*f EXECUTE DOS COMMAND*pT$(T$,2):(T$,1)" "T$(T$,2)*z2210*34,(34)2::D$T$:T$"PREFIX"Ą"";T$:T$*"Press any key to continue. ";:T$:34,(34)2:216,0:2270+5+(7);PM$((222)):D$C$:216,0:3288:2190S+ DISPLAY INPUT EXAMPLES+11:25:"Example entries:"::25:"MYFILE":25:"/MYDISK/MYFILE":25:"MYFILE,S6,D2":T,25:"*CATALOG (See current directory)":25:"*CAT,D2 (See directory for drive 2)":25:"*PREFIX (See current prefix)":25:"*PREFIX,D2 (Set prefix to drive 2)"a,(25):, STRIP PARAMETERS FROM FILENAME,P1(F$):(F$,P,1)","F$(F$,P1),:, ERROR HANDLER%-(4)"CLOSE":(222)21(222)16ĺ"ERROR # "(222)" IN LINE "(218)256(219):H-ER(222):216,0:3288:2270]-EF4ER5ī1400-EF0ĺ(4)"PR#3":"Unable to load program files."::"The following files must all":"be in the same directory:":"PRODOS.ASM":"ASM.VARS":"ASM.ML";(7):. :PM$(ER):<. EF2ĺ"While opening temp file in /RAM"u. EF4ĺ"While reading your file / writing temp file".$ EF7ĺ"While opening object code file".. EF3EF7ĺ"Press to retry or to abort";:T$:/8 EF3Ĵ(T$(13))1290:1200/B EF7ĭT$(13)ī1560+/L 216,0:NOV 1989 DISK (VOL 10 /NO 11) 8 NIBBLE ASSEMBLER TRINUM SEARCH SAMPLER ASCII FILE READER BEYOND THE BASICS OF STORAGE VISISORT REVISITED THE TINY MAILER, PART III CHECKIT 4 TRINUM RUN TRINUM SEARCH SAMPLER RUN SEARCH.SAMPLER VISISORT REVISITED RUN VISISORT 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 NIBBLE ASSEMBLER, remove all but the following files from a copy of this disk: NIBBLE.ASM NIBBLE.ASM2 NIBBLE.ASM.ML APPLE.ORGAN These programs are included only on the ProDOS side 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. @ To create a work disk for TRINUM, remove all but the following files from a copy of this disk: TRINUM TRISHAPES These programs are included on both the DOS 3.3 and ProDOS sides of this disk. @ To create a work disk for SEARCH SAMPLER, remove all but the following file from a copy of this disk: SEARCH.SAMPLER 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, 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 BEYOND THE BASICS OF STORAGE, remove all but the following files from a copy of this disk: MAKE.CARDS READ.CARDS AUTO 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. @ To create a work disk for VISISORT REVISITED, remove all but the following file from a copy of this disk: VISISORT This program is included on both the DOS 3.3 and ProDOS sides of this disk. @ To create a work disk for THE TINY MAILER, PART III, remove all but the following files from a copy of this disk: TM.LABEL.LIST TM.ADDRESSES TM.EDIT 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: FILE.READ.ASM (APW) FR.OPTIONS.ASM (APW) BASIC.ASM (APW) @ # L !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 READ.CARDSD$(4)+:::3X("ENTER CARD # (1-52 OR Q TO QUIT): ";A$h2A$"Q"ė:t<A(A$)FA1A52ī30PD$;"OPEN CARDS,L17"ZD$;"READ CARDS,R"AdC$:S$:VnD$;"CLOSE CARDS"x10:"THE COLOR IS: ";C$ "THE SUIT IS : ";S$* "THE VALUE IS: ";VQ 22:"PRESS RETURN TO CONTINUE";A$Y 30 49246,0::6:I028:0,79I::12:I2939:0,79I::5:I19:B,E,L:B,EL:B,E79L::B7:E72:S1:19,21,1,23,25,1,19,28,2,19,21,3,23,25,3,23,23,4,22,22,5,21,21,6,28,28,3i Y21:F(9):P(F.65)2S:TBESF4S(F.5):15:T,Y:6:::T,Y:YY(T38)P(T41)P::TES:Y21:T,Y:5:TS,Y:D19(F2)P::6:TS,Y:5:T,Y:AB:BE:EA:SS:20 ***********************= * SEARCH.SAMPLER *[ * BY ANTONIO *y( * DE PASQUALE *2 * COPYRIGHT(C) 1989 *< * MINDCRAFT PUBL CORP *F * CONCORD, MA 01742 *P *********************** Z(21)::: d INITIALIZE ARRAY- n AND FILL IT> xARRAY(1000) "FILLING ARRAY, PLEASE WAIT";:34,1:X11000:ARRAY(X)ARRAY(X1)(10(1)1):".";:X:XX1:: PRINT MENU6 13)"SEARCH SAMPLER":19)"BY":10)"ANTONIO DE PASQUALE":2)"COPYRIGHT(C) 1989 MINDCRAFT PUBL CORP":Y140:(95);:Y: "THIS PROGRAM CURRENTLY CONTAINS AN ARRAY";:"WITH ";::X;::" VALUES RANGING FROM ";::ARRAY(1);::" TO ";::ARRAY(X)::M 9:1:"PLEASE CHOOSE ONE OF THE FOLLOWING:"::" 1. CONDUCT A LINEAR SEARCH":" 2. CONDUCT A BINARY SEARCH":" 3. EXIT THIS PROGRAM": 15:1:958:"ENTER CHOICE: ";:16368,0:K$:(K$"1"K$"2"K$"3"K$(27))180:K$(27)K$"3"- K$:K$"3"ĺ:"QUIT, REALLY? (";::"Y/N";::"> ";:K$:(K$"Y"K$(121))180::::HANDLE END OF PROGRAMG 34,16:(K$)230,290P 180d LINEAR SEARCH N$"":LL0:17:1:958::" LINEAR SEARCH ";::17:18:"ENTER NUMBER: ";1 K$:(K$(27)LL0)180:(K$(32)K$(21))240:(K$(8)LL0)240:K$(8)LLLL1:N$(N$,1,LL):(8);" ";(8);:240 (K$(27)LL0)180:(K$(27)LL0)230:(K$(13)LL0)240:(K$(13)LL0)260:K$;:N$N$K$:LLLL1:240:(N$((N$)))230:N(N$):NT1:INDEX1X:(ARRAY(INDEX)N)410:(ARRAY(INDEX)N)420:NTNT1:INDEX'420: NO MATCH; BINARY SEARCH"N$"":LL0:17:1:958::" BINARY SEARCH ";::17:18:"ENTER NUMBER: ";,K$:(K$(27)LL0)180:(K$(32)K$(21))300:(K$(8)LL0)300:K$(8)LLLL1:N$(N$,1,LL):(8);" ";(8);:300}6(K$(27)LL0)180:(K$(27)LL0)290:(K$(13)LL0)300:(K$(13)LL0)320:K$;:N$N$K$:LLLL1:300@:(N$((N$)))290:N(N$)JNT1:LN1:HIX:INDEX1TNARRAY(INDEX)LNHI390^INDEX((LNHI)2)hNARRAY(INDEX)HIINDEX1-rNARRAY(INDEX)LNINDEX1>|NTNT1:340XNARRAY(INDEX)ī420t PRINT RESULT & RETURN:"IT HAS BEEN DETERMINED ON ";::NT;::" TRIES":"THAT THE NUMBER ";::N;::" OCCUPIES POSITION "::INDEX;::" IN THE ARRAY"::430s:"IT HAS BEEN DETERMINED ON ";::NT;::" TRIES":"THAT THE NUMBER ";::N;::" IS NOT IN THE ARRAY":"PRESS <";::"RETURN";::"> TO CONTINUE: ";:16368,0:K$: ******* 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) 1989 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 TO RE-DO:";XX$:20:958:140t 20:868:" = ACCEPT... R = RE-ENTER:";XX$:XX$""XX$"R"XX$"r"190 XX$"R"Ģ20:868:"PRESS RETURN TO ACCEPT EXISTING DATA":140 : : : SAVE ADDRESS TO DISK D$;"OPEN ADDRESSES,L87" D$;"READ ADDRESSES,R0", R:RR1J D$;"WRITE ADDRESSES,R";R^ "F15:A$(F):{ ,D$;"WRITE ADDRESSES,R0" 6R @D$;"CLOSE" J T: ^: h: SETUP r:5 |10:"NIBBLE TINY MAILER"/ :"THIS PROGRAM LETS YOU ENTER NAMES AND":"ADDRESSES INTO A RANDOM DISK FILE." :"YOU'LL ENTER:"::" NAME:":" STREET:":" CITY:":" STATE:":" ZIP:" :"THEN YOU'LL HAVE THE CHANCE TO RE-ENTER":"AND CORRECT ANY MISTAKES BEFORE SAVING"."THE NAME AND ADDRESS TO THE DISK FILE."::" (CHECKING THE DISK FILE)"P: CHECK WHETHER FILE EXISTS D$(4):D1$".........................":D2$"..":D3$".....":D1$=25 DOTS D2$=2 DOTS D3$=5 DOTS560D$;"VERIFY ADDRESSES":"PRESS RETURN TO BEGIN:";XX$110: ENTER ADDRESS0250: SAVE ADDRESS:10:" = ENTER ANOTHER... E = END:";XX$:XX$""XX$"E"XX$"e"500XX$"E"ĺ"END OF ADDRESS ENTRY":480: ENTER ANOTHER::&: CREATE NEW FILE 0216,0: RESET ERROR POINTER>::"PRESS TO CREATE ADDRESSES FILE";XX$[DD$;"OPEN ADDRESSES,L87"xND$;"WRITE ADDRESSES,R0"X0bD$;"CLOSE"l470( *********************************O* TM.EDIT *v* BY ALEXANDER LAIRD *(* COPYRIGHT (C) 1989 BY *2* MINDCRAFT PUBL. CORP. *7* CONCORD, MA. 01742 * <*********************************" F(17):510( P:G d: [ EDIT NAME & ADDRESS ] n:3:"RECORD #:";N::"NAME :":"STREET :":"CITY :":"STATE :":"ZIP :" x5:F15:10:A$(F): 5:CT0: GO BACK TO THE FIRST LINE F15 10:"";F$ F$""A$(F)F$8 F4:10:868:A$(F):CTCT(A$(F)) :CT(825)Ģ20:958:"ADDRESS TOTALS MORE THAN 82 CHARACTERS.":"RE-DO THE ENTRIES TO SHORTEN THEM.":" TO RE-DO:";XX$:20:958:130$ 20:868:" = ACCEPT... R = RE-ENTER:";XX$:XX$""XX$"R"XX$"r"190h XX$"R"Ģ20:868:"PRESS RETURN TO ACCEPT EXISTING DATA":130n t :z : :[ SAVE ADDRESS TO DISK ] D$;"OPEN ADDRESSES,L87" D$;"WRITE ADDRESSES,R";N F15:A$(F): D$;"CLOSE" " ,: 6:) @: [ READ SINGLE ADDRESS ]F JD$;"OPEN ADDRESSES,L87"c TD$;"READ ADDRESSES,R";Nw ^F15:A$(F): hD$;"CLOSE" r |: : :[ SCAN/SEARCH ADDRESSES ] D$;"OPEN ADDRESSES,L87" I1R D$;"READ ADDRESSES,R";I A$(1):(A$(1),L)N$NI:IR' I7 D$;"CLOSE"= C :I :Z : [ SETUP ]c :5 10:"NIBBLE TINY MAILER EDIT" :"THIS PROGRAM LETS YOU EDIT NAMES AND":"ADDRESSES IN YOUR RANDOM DISK FILE."]:"YOU'LL RETRIEVE AN ADDRESS RECORD BY":"ITS RECORD NUMBER OR BY THE NAME OF THE":"PERSON. THEN YOU CAN CHANGE ANY ITEM"&"IN THE ADDRESS AND WRITE THE CORRECTED":"ADDRESS BACK INTO ITS PROPER POSITION":"IN THE FILE."0:"YOU'LL ALSO HAVE THE CHANCE TO RE-ENTER":"AND CORRECT ANY MISTAKES BEFORE SAVING"r:"THE NAME AND ADDRESS TO THE DISK FILE."::" (CHECKING THE DISK FILE)"xD:~N:X:[ CHECK WHETHER FILE EXISTS ]bD$(4)l880vD$;"VERIFY ADDRESSES"D$;"OPEN ADDRESSES,L87"D$;"READ ADDRESSES,R0":R)D$;"CLOSE ADDRESSES"R0ė:10:"THERE ARE NO RECORDS CURRENTLY IN YOUR":"ADDRESSES FILE. PLEASE ENTER AT LEAST":"ONE ADDRESS BEFORE USING THIS PROGRAM.":::"PRESS RETURN FOR NEXT PAGE:";XX$:9:"THERE ARE ";R;" RECORDS IN THE FILE."::"YOU CAN RETRIEVE A RECORD BY ENTERING:"::" * A RECORD NUMBER (OR)"::" * A FULL OR PARTIAL PERSON'S NAME":" FOR EXAMPLE: SAM JONES":" SAM JON":" SAM J":"PRESS RETURN TO BEGIN:";XX$::4: MAIN CONTROL LOOP:8:"ENTER: RECORD #(1-";R;") OR ":" NAME (FULL OR PARTIAL) OR":" Q TO QUIT"::"ENTER: ";N$:N(N$):(N$)0750N$(113)N$(81)830: TEST ENDBN0NRĺ"THAT RECORD NUMBER IS LARGER THAN THE":"FILE CONTENTS. PRESS :";XX$:750e N0İ330:800:RETRIEVE REC #N0L(N$):410:N0İ330:800:SEARCH ON NAME N0ĺ:"A NAME MATCH WAS NOT FOUND.":"PRESS TO TRY AGAIN:";XX$:750*110: EDIT ADDRESS4250: SAVE ADDRESSr>:10:" = ENTER ANOTHER... E = END:";XX$:XX$""XX$"E"XX$"e"830HXX$"E"ĺ"END OF ADDRESS EDIT"::R750: ENTER ANOTHER\:f: ERROR MESSAGEp216,0: RESET ERROR POINTERNz:10:"YOU HAVE ENCOUNTERED A FILE ERROR WITH":"THE ATTEMPT TO READ THE ADDRESSES FILE.":"CHECK TO MAKE SURE THAT THE ADDRESSES":"FILE IS ON THIS DISK, OR SAVE A COPY":"OF THIS PROGRAM ON THE SAME DISK THAT""CONTAINS THE ADDRESSES FILE."::"PROGRAM ENDED."' ********************************M* TM.LABEL.LIST *s* BY ALEXANDER LAIRD *(* COPYRIGHT (C) 1989 BY *2* MINDCRAFT PUBLISHING CORP. *<* CONCORD, MA 01742 * F******************************** P440 Z:8 d:[ READ NAME & ADDRESS ]U nD$;"OPEN ADDRESSES,L87"` xI1R} D$;"READ ADDRESSES,R";I F15:A$(F): LL$"1"İ230 LL$"2"İ340 I D$;"CLOSE" : : : PRINT A LABEL D$: SUSPENDS DISK OPERATION% D$;"PR# 1"N (9);"100N";PT$;: PRINTER CONTROLS| A$(1):A$(2):A$(3);", ";A$(4);" ";A$(5) :: SPACE TO NEXT LABEL (9);"40N" "D$;"PR#0" , 6: @: J: PRINT A LINE TD$: SUSPEND DISK OPERATION ^D$;"PR#1"7 h(9);"100N";PT$;:PRINTER CONTROLS r(A$(1),25);:36,26:(A$(2),25);:36,52:(A$(3),25);:36,76:(A$(4),2);:36,82:(A$(5),5); |(9);"40N" D$;"PR#0"  : : : [ SETUP ]  5:"NIBBLE TINY MAILER LIST/LABELS" :"THIS PROGRAM READS YOUR TINY MAILER":"ADDRESSES FILE AND PRINTS LABELS OR A":"FORMATTED LISTING OF THE ADDRESSES." :"FOR PRINTING LABELS, YOU'LL NEED TO USE" "ONE-UP PRESSURE SENSITIVE LABELS."C 1:13:"ENTER: 1= LABELS":" 2= LIST"::"ENTER 1 OR 2:";:LL$:LL$: 3,9 SPACES^ LL$"1"LL$"2"490 1:18:"PRINTER: 1= IMAGEWRITER":" 2= EPSON":" 3= OTHER"::"ENTER 1,2, OR 3:";:PT$:PT$:PT$"1"PT$"2"PT$"3"510: 9AND 9 SPACESIPT$"1"PT$(27)(69): IMAGEWRITER PRINTER CTRLS FOR 12 CHAR/INCHPT$"2"PT$(27)(77): EPSON PRINTER CTRLS FOR 12 CHAR/INCHPT$"3"PT$"": SUBSTITUTE YOUR OWN PRINTER CTRL CODES FOR 12 CHAR/INCH&:[ CHECK WHETHER FILE EXISTS ] 0D$(4):7100DD$;"VERIFY ADDRESSES"MND$;"OPEN ADDRESSES,L87"iXD$;"READ ADDRESSES,R0"pbRlD$;"CLOSE ADDRESSES"v:"THERE ARE ";R;" RECORDS IN THE FILE":-R0ĺ"WITH NO RECORDS IN THE FILE, YOU SHOULD":"CREATE SOME ADDRESS RECORDS BEFORE YOU":"RUN THIS PROGRAM.":X:"PRESS RETURN TO BEGIN:";:XX$:XX$u110: READ DISK & PRINT:10:"= ANOTHER LIST... E= END:";:XX$:XX$:XX$""ė:490:"END OF JOB":::NO FILE EXISTS216,0: RESET ERROR POINTERk:"THE FILE 'ADDRESSES' DOES NOT APPEAR TO":"BE ON THIS DISK. SAVE A COPY OF THIS"""PROGRAM ON THE DISK THAT CONTAINS THE":"ADDRESSES FILE, OR CREATE AN ADDRESSES":"FILE ON THIS DISK USING THE ADDRESS"C"PROGRAM FROM THE AUG., SEPT., OR OCT.":"1989 ISSUE OF NIBBLE."::"PROGRAM ENDED."!@ *************************A@ * TRINUM *a@ * BY GARY KNOX *@( * COPYRIGHT(C) 1989 *@2 * MINDCRAFT PUBL. CORP. *@< * CONCORD, MA 01742 *@F *************************@P:10:16:"TRINUM":AZ20:11:"ONE MOMENT PLEASE"7Ad *** MAIN PROGRAM ***JAn(104)64140fAx103,1:104,64:16384,0}A(4);"RUN TRINUM"AX(6,11),Y(6,11),N$(7,12),P$(7,12),P(3),M(3)A0AL07:K012:N$(L,K)"-":P$(L,K)"0":K:LB(2048)31(2050)64200B2380GB(4);"BLOAD TRISHAPES,A$800":232,0:233,8:2390B:10:"INSTRUCTIONS? Y/N ";:A$:A$"Y"A$"N"A$""200BA$"Y"İ2010B *** SET UP THE GAME BOARD ***B::1350: C22:"2 OR 3 PLAYERS?";:A$:P(A$):P2P3A$""ė:240CECK1P:K125,(K1)1136:173,(K1)1136:K`CR3:BE3:EN5:TC0:W0C *** ENTER THE GAME COUNTERS ***C"CBEEN:YTY(R,C)3:1320C,22:"ENTER THE NUMBER OF CHIPS IN THIS SPOT"(D6868:"CHOOSE AN AMOUNT FROM 0 TO 9";:A$:(A$)0(A$)9(A$)13Ė1:310rD@A$"0"Ē0:YTY(R,C)3:1320:N$"0":3:XNX(R,C):YNY(R,C):1190:340DJP$(R,C)A$:XNX(R,C):YNY(R,C):N$A$:0:1190:3:TCTC(A$)DT:C:R3R2:BE4:EN6:290D^ *** PLAYER'S TURNS ***EhPL1P::21:15::"PLAYER # "PL:/ErEE0::XX1:YY1rE|23:958:"PRESS TO POSITION CURSOR ";:A$:23:1:958E(A$)27380E2953,142:29X(1,1)1,Y(1,1)4E23:958:"MOVE CURSOR TO TRIANGLE YOU WANT" F"PRESS WHEN IN CORRECT TRIANGLE";F23:34:A$6F(A$)27RXX:CYY:550MFA$"T"CX1:CY2cFA$"Y"CX1:CY0zFA$"G"CX0:CY1FA$"H"CX0:CY1FA$"B"CX1:CY0FA$"N"CX1:CY2FYYCY0YYCY12430FN$(XXCX,YYCY)"-"430%G29X(XX,YY)1,Y(XX,YY)4:XXXXCX:YYYYCYHG29X(XX,YY)1,Y(XX,YY)4:430dG&(P$(R,C))0EE1:840G023:1:958:"PRESS DIRECTION YOU INTEND TO MOVE ";:A$G:A$"Y"MM1:A1:640GDA$"H"MM1:A2:640GNA$"B"MM1:A1:640 HXA$"N"MM1:A3:640&HbA$"G"MM1:A2:640@HlA$"T"MM1:A3:640IHv560eH(P$(R,C))0EE1:840H22:958::"ENTER NUMBER OF COUNTERS TO BE MOVED ";A$:B(A$):B1B(P$(R,C))650H(B)B640H *** MOVE THE COUNTERS ***$I22:958:1:"PRESS TO MOVE COUNTERS">I12:" TO QUIT";EI1iIAA$:(AA$)13(AA$)27710I(AA$)27ĕ2953,142:29X(R,C)1,Y(R,C)4:1040IA1C2(C2)MM1CR0:CCMMIA1C2(C2)MM1CRMM:CC1JA1C2(C2)MM1CRMM:CCMM6JA1C2(C2)MM1CR0:CCMM\JA3C2(C2)MM1CRMM:CC1J A3C2(C2)MM1CR0:CCMMJA3C2(C2)MM1CR0:CCMMJ A3C2(C2)MM1CR1:CCMMJ*A2CCMM:CR0J4N$(RCR,CCC)"-"840K>N$(RCR,CCC)N$(R,C)910:KHAA140:BB(16336):AAKR21::958:"WRONG MOVE..LOSS OF 5 POINTS!":P(PL)P(PL)5::"PRESS KEY...";:A$:1:22:958:K\0:K06:65,(PL1)1136K90,(PL1)1136K:K:3 LfN$(P(PL)):XN73:YN(PL1)1136:1190LpEE0680)LzEE0:410IL *** MOVE THE COUNTERS ***kLTE(P$(R,C))B:P$(R,C)(TE)LYTY(R,C)3:0:1320L29X(R,C)1,Y(R,C)4LTE9XNX(R,C)2LTE10XNX(R,C)LTE0N$N$(R,C):3MTE0N$P$(R,C):3:YTY(R,C)3:1320:0#MYNY(R,C):1190MTE(P$(RCR,CCC))B:3:YTY(RCR,CCC)3:CCCC:RRCR:1320:CCCC:RRCR:0:P$(RCR,CCC)(TE)MTE9XNX(RCR,CCC)2MTE10XNX(RCR,CCC)MYNY(RCR,CCC):N$P$(RCR,CCC):1190:3NCCCC:RRCR:29X(R,C)1,Y(R,C)4:7002NR1C1M(1)PLHNR1C11M(2)PL]N$R6C1M(3)PLgN.1680N8N$(P(PL)):XN73:YN(PL1)1136:1190NBGO1İ1720NL(P$(1,1))(P$(1,11))(P$(6,1))TC1140NVPLN`360Nj*** END OF GAME ***Ot:22:14::"GAME IS OVER":;O~K1200:BB(16336):KxO10:24:"ANOTHER GAME? Y/N ";:A$:A$"Y"A$"N"1160OA$"Y"Ľ::140O::O *HIRES PRINTING ROUTINE*OSOCN1(N$)O ** GET 1 STRING CHARACTER **PQ$(N$,CN)$P ** CONVERT TO SHAPE NUMBER **BP(Q$)45Ĕ31XN,YN:1280tP(Q$)4710Ĕ(Q$)47XN6S(CN1),YN:1280P(Q$)47XN7S(CN1),YNPCNP  ** GO BACK TO MAIN PROGRAM **PPP( *** ERASE TRIANGLE NUMBER ***"Q2K18:X(R,C)3,YT3X(R,C)8,YT3:YTYT1:K(Q<DQF *** FILL IN BOARD ***KQP3mQZ59,150140,10221,15059,150Qd73,127208,127:86,103194,103:100,80181,80:113,57167,57:127,33154,33Rn127,33194,150:113,57167,150:100,80140,150:86,103113,150:73,12786,150fRx208,127194,150:194,103167,150:140,150181,80:113,150167,57:86,150154,33nRS1RM10:L15:Y1,Y2:K1M2:YNY1:XN,N$:1190:X(L,K)XN:Y(L,K)YN:N$(L,K)N$RYNY2:XN,N$:1190:X(L,K1)XN:Y(L,K1)YN:N$(L,K1)N$:K>SXN,N$:N$(L,K)N$:YNY1:1190:MM2:X(L,K)XN:Y(L,K)YN:LqSXN,YN,N$:1190:X(6,1)XN:Y(6,1)YN:N$(6,1)N$SXN110:YN10:N$"HF@":1190SXN150:YN10:N$"CIB":1190S100,0100,15130,15140,0150,15180,15180,0T98,098,17132,17140,4148,17182,17182,06T0,0279,0279,1570,1570,0WTXN5:YN25:N$"EA:K=F":1190xTXN53:YN25:N$"G";::A$:::Y *** BOARD DATA ***3Z 144,136,71,"6",84,"5",97,"4",111,"3",124,"2",138,"1",151,"2",165,"3",178,"4",192,"5",206,"6" Z 122,111,83,"4",97,"3",111,"2",124,"0",138,"0",151,"0",165,"2",178,"3",192,"4" Z 98,88,97,"2",111,"1",124,"0",137,"0",152,"0",165,"1",180,"2" [ 74,66,110,"2",125,"3",138,"2",152,"3",165,"2" 1[ 52,41,124,"4",138,"5",152,"4" G[ 138,27,"6" g[ *** GAME INSTRUCTIONS ***[:16::"TRI-NUM"::34,2:8\" THE GAME IS PLAYED BY 2 OR 3 PLAYERS WHO MOVE 'COUNTERS' FROM THE CENTER OR ZERO SPACES TO ONE OF THE THREE CORNERS ON THE TRI-NUM BOARD."(\23504\:1350\21:"HERE IS THE TRI-NUM BOARD. NOTICE, THE TRIANGLES IN THE CENTER WITH ZEROS ARE WHERE THE COUNTERS ARE PLACED FIRST."\ 2350>]:21:"RULE 1: COUNTERS MUST BE MOVED UPWARD NUMERICALLY IN ONE OR MORE STEPS BETWEEN JOINING TRIANGLES."H] 2350]*:21:"RULE 2: COUNTERS MUST BE MOVED PARALLEL TO (SAME DIRECTION AS) ONE OF THE THREE LONG SIDES OF THE BOARD."]42350]>49233,0w^H"YOU MAY MOVE ONE OR ALL OF THE COUNTERS AS FAR AS POSSIBLE ON THE BOARD. YOU MAY MOVE TO ANY TRIANGLE, WHETHER IT HAS COUNTERS ON IT OR NOT."}^R^\" REMEMBER THAT IT IS ILLEGAL TO MOVE TO A LOWER NUMBERED TRIANGLE AND THE MOVES MUST BE PARALLEL TO THE SIDES."^fz_p" WHEN A PLAYER MOVES A COUNTER TO ONE OF THE CORNERS,THE PLAYER OWNS IT UNTIL SOMEONE ELSE MOVES A COUNTER THERE."_z_" THE PLAYER WHO MOVES THE LAST COUNTERONTO A CORNER TRIANGLE WILL WIN THAT CORNER AND RECIEVE POINTS FOR IT."_ `2350#`3::16:"SCORING":)``"1ST CORNER WON: POINTS EQUAL TWICE THE NUMBER OF COUNTERS IN THAT CORNER."`a"2ND CORNER WON: POINTS EQUAL THREE TIMES THE NUMBER OF COUNTERS IN THAT CORNER." aa"3RD CORNER WON: POINTS EQUAL FOUR TIMES THE NUMBER OF COUNTERS IN THAT CORNER."a2350a3::15:"PENALTIES":a8:b " ANY ILLEGAL MOVE WILL COST A PLAYER FIVE POINTS. THE PLAYER WILL BE REQUIREDTO COMPLETE THE TURN PROPERLY."Fb 2350:Lb ob$ *** KEYPRESS TO CONTINUE ***b. 24:1:"PRESS RETURN";:A$b8 (A$)132350bB :bL :"THE FILE TRISHAPES IS NOT ON THIS DISK.":%cV :"ERROR NUMBER "(222)" HAS OCURRED IN LINE "(218)256(219):@LS_ju !-9DR^kw)- $?66)-'$$--??$)- ?-- ??$$,--$666)-=#$$-??--=$$$$$,** 166$$,****"$$)- $??26$$,--2??$$,--::?-**:(-- ?? )- !$$?6 -6-)- $<66,.**( $2 !$## 63--? $$<:* !#(=* ' ******************************M * VISISORT *s * BY Bill Fortenberry * * COPYRIGHT(C) 1989 * * MINDCRAFT PUBL. CORP. * * CONCORD, MA. 01742 *  ****************************** 16384:(21)9 * N = NUMBER TO SORT *B N75K (TV1s 23:A%(150),B%(150),L%(100),F%(100)| <500 FMENU P::P$"VISISORT BY BILL FORTENBERRY":650::"COPYRIGHT(C) 1989 MINDCRAFT PUBL. CORP."t Z1:5:"PLEASE SELECT BY NUMBER:"::"1. BUBBLE SORT":"2. BI-BUBBLE SORT":"3. INTERCHANGE SORT":"4. SHELL - METZNER SORT":"5. QUICK SORT" d"6. GENERATE NEW ARRAY TO SORT":"7. RESET ARRAY SIZE" n"8. TRACK VARIABLES ";:TVĞ:" ON ": xTVĺ"OFF " "9. QUIT"F 1:20:"YOUR CHOICE (1-9) =-> ";(8);:IP$:IP(IP$):IP1IP9140L \ IP9ĉ::o IP7İ330:80 IP6İ380:80 IP8TV1TV0:90 IP8TV0TV1:90 SORT ARRAY 550:C0:X0:(7):IP670,760,1030,1150,1310:1:(7)::33,40:1720 SORT DATA PAGEV :::P$"-VISISORT-":650:P$"SORT DATA":650: 8:"TYPE OF SORT : ";:IP1ĺ"BUBBLE SORT" IP2ĺ"BI-BUBBLE SORT" IP3ĺ"INTERCHANGE SORT" IP4ĺ"SHELL - METZNER SORT" "IP5ĺ"QUICK SORT"J ,:"SIZE OF ARRAY = ";N::"# OF COMPARISONS = ";C::"# OF EXCHANGES = ";XX 61720:80o @CHANGE ARRAY SIZE J:"OLD ARRAY SIZE =";N::"NEW SIZE (5-150) >";IP$ TIP$""330 ^N1(IP$):N15N1150330 hNN1:500 rSTIR UP ARRAYJ|:"HOW MUCH SHOULD THE ARRAY BE SCRAMBLED":"USE A NUMBER BETWEEN 0 AND 280."}:"OR INPUT A W FOR A 'WORST CASE' SORT."::"(0=NONE, 280=A LOT, W=W.C.) =->";IP$IP$""380IP$"W"1630IP(IP$):IP0IP280380SET UP NEW ARRAY5:21:P$"GENERATING ARRAY":650:I1N:B%(I)I:Z:1540:I1N:I65,N1B%(I):fIP0ıI1IP:T2((1)N)1:T1((1)N)1:TB%(T1):B%(T1)B%(T2):B%(T2)T:0:T165,0T165,N:3:T165,N1B%(T1)0:T265,0T265,N:3:T265,N1B%(T2)::I13000::L:21:P$"GENERATING ARRAY":650:I1N:B%(I)I:q:1540:I1N:I65,N1B%(I):I1N:T1B%(I):T2((1)N)1:B%(I)B%(T2):B%(T2)T1:0:I65,0I65,N:3:I65,N1B%(I)%0:T265,0T265,N:3:T265,N1B%(T2):::"PRESS RETURN TO CONTINUE";:XX$:8GET OLD ARRAYw&:21:P$"GETTING ARRAY TO SORT":650:I1N:A%(I)B%(I):0:1540:I1N:I65,N1A%(I):::22::IP590,600,610,620,630:650:33,10:DNP$" BUBBLE SORT ": XP$" BI-BUBBLE SORT ":'bP$" INTERCHANGE SORT ":?lP$" SHELL SORT ":WvP$" QUICK SORT ":rCENTER TEXT ON SCREEN(40(P$))2:P$:BUBBLE SORTS%N1:I1S%LNI:TVİ1590J1L:(16384)128İ1660CC1:A%(J)A%(J1)740)TA%(J):A%(J)A%(J1):A%(J1)T:XX1R0:J65,0J65,N:3:J65,N1A%(J)}0:J66,0J66,N:3:J66,N1A%(J1)::BI BUBBLE SORTTPN:BT1:TVİ1600:1610TPTP1:TVİ1600 FG0BTTPTPTP1 TVİ1600*IBTTP:(16384)128İ166094CC1:A%(I)A%(I1)870c>TA%(I):A%(I)A%(I1):A%(I1)T:XX1lHFG1R0:I66,0I66,N:3:I66,N1A%(I1)\0:I65,0I65,N:3:I65,N1A%(I)fpFG0ızBTBT1:TVİ1610FG0:BTTPBTBT1TVİ1610ITPBT18(16384)128İ1660UCC1:A%(I)A%(I1)990XX1:TA%(I):A%(I)A%(I1):A%(I1)TFG10:I64,0I64,N:3:I64,N1A%(I1)0:I65,0I65,N:3:I65,N1A%(I)FG0ı770 INTERCHANGE SORT*N1N1:J1N1:TVİ15808KJ:LK1MILN:TVİ1570f$(16384)128İ1660.CC1:A%(K)A%(I)10908KIBILTA%(J):A%(J)A%(K):A%(K)T:XX1V0:J65,0J65,N:3:J65,N1A%(J) `0:K65,0K65,N:3:K65,N1A%(K)jJ:,tSHELL - METZNER SORT4~MNHM(M2):M0ıSS%NM\F%1eJF%oIJMTVİ1570:1580(16384)128İ1660CC1:A%(J)A%(I)1280TA%(J):A%(J)A%(I):A%(I)T:XX10:J65,0J65,N:3:J65,N1A%(J)10:I65,0I65,N:3:I65,N1A%(I)FJJM:J11200^F%F%1:F%S%1160h 1190xQUICK SORTS%0:F%1:L%N(MA%(((L%F%)2)):IF%:JL%:TVİ1560:1570:15802(16384)128İ1660<CC1:A%(I)M1370FII1:TVİ1570P1340+ZCC1:A%(J)M1400?dJJ1:TVİ1580In1370]xCC1:IJ1480qCC1:IJ1460TA%(I):A%(I)A%(J):A%(J)T:XX10:I65,0I65,N:3:I65,N1A%(I)0:J65,0J65,N:3:J65,N1A%(J)(16384)128İ1660"II1:JJ1:TVİ1570:15801IJ1340AIL%1500oF%(S%)I:L%(S%)L%:S%S%1:LS%S%LS%S%L%J:F%L%1320S%0ıS%S%1:F%F%(S%):L%L%(S%):1320PLOT GRAPH AXIS3:60,060,N5N65,N5:PLOT SORT VARIABLESN21:"M="M" ":0:OM65,N7OM65,N14:3:M65,N7M65,N14:OMM:"22:"I="I" ":0:OI65,N7OI65,N10:3:I65,N7I65,N10:OII:,23:"J="J" ":0:OJ65,N7OJ65,N10:3:J65,N7J65,N10:OJJ:/622:"L="L" ":0:OL65,N7OL65,N10:3:L65,N7L65,N10:OLL:@22:"TP="TP" ":0:OT65,N7OT65,N10:3:TP65,N7TP65,N10:OTTP:J23:"BT="BT" ":0:OB65,N7OB65,N10:3:BT65,N7BT65,N10:OBBT:T MAKE WORST CASE ARRAY%^:21:P$"GENERATING ARRAY":650:I1N:B%(I)N1I:Lh:1540:I1N:I65,N1B%(I)::`rKEYPRESS PAUSE|1710:16368,0:Q1250:(16384)128Q251(16384)1281660(16384)209Ĺ16368,0::8016368,0:QQ15:S(16336)::+22:" PRESS RETURN TO CONTINUE";:A$: