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(*+'CHECKIT 6/ ;+CLOCK.CMD.S$ (CLOCK.GS'u .CLOCK.MACS.APW,[,CLOCK.MACS.S02 EXPLORER4Z' GMPB5s-MAGIC.SQUARES6 'MENUPRO:;#MICRO.TVY u 'NIBMENUZ   -OVERLAY.BIN.Sdn2,OVERLAY.DEMOh$ / OVERLAY.ELM1l$  OVERLAY.ELM2m$  OVERLAY.ELM3n$  OVERLAY.ELM4o$ OVRLYp?$ n2-PRINTING.DEMOq&PRODOSt }<n% RAM.FIXx'STARTUP ®3* .STARTUP.SCREENC 9`4,SUPERCLOCK.S(|M 'SYS.DEV +' +SYS.DEV.ASM3Pb(+SYS.DEV.MAC 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 !"#. ********** NIBBLE PRD DISK **********[ * CHECKIT * * COPYRIGHT 1988 BY MICROSPARC, INC.*( * CONCORD, MA 01742 *2 ************************************* <:::"CHECKIT":"COPYRIGHT 1988 BY MICROSPARC, INC."& F90R 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)4096/ n6:"ARE YOU ENTERING A HEXADECIMAL":"FILE?";:A$:16368,0:A$Z xA$"N"A$(110)İ370:34218,128:210v A$"Y"A$(121)110 768,1:10:958:"WHAT IS THE STARTING ADDRESS OF THE":"FILE (IN HEX)";:H$:290:AH( A736A39424ĺ:"INVALID ADDRESS. PLEASE DOUBLE-CHECK":"AND RE-ENTER":350:140r 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..."n 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:2508 (4);"IN#A$8500":250b (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"  O"H0:L(H$):L1L4300:I1L:D((H$,I,1)):HHH(LI)(D48(D58D47)55(D64D71)):U,j6 $1600 VERSION@I0377:ML:5632I,ML:I:C5632JI018:ML:CML,(CML)111:T^21:"PRESS RETURN TO CONTINUE ";:CH$:CH$:16368,0: h $8500 VERSION+rI0377:ML:34048I,ML:I1| 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,169U 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,1334 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,32e 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,16, 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 %& ˮ ͠ˠ 占Ҡ Ġ Р¶ 占ˠˮ̠ ӠIJ ŠˮӠ ()*+u ,@ K"hh ""hh "᫋K" AA0 k0"i0\޵% ڋK0"i08k8\޵Z0K " +: (h)H) &"(: :0(hH )  8  ,H% &"h)H# &"hH)H &"- h) !h: 24 ))202H"h."d0% L0)2L]crͭ0I04 5L LLL 50 I >I>0C0"0:I:$ 5248I8 5246I602LHH"..="M QUYW[.H"h=|>O S="4 MU"0H  @68   % %"h;S8;OH H:"6%8"""h0k00`56 8 :4 :$߭68 :0L$68 6 8(`$68 6 8(` -- -- - -  ------        |  "(3NT_pv29Rl'%*-036=@CHNQTZfv{ #+5CLRWahpw&08;JU\gn%|%m^(M==ciO#6%)iis\0-./*-----------------------------------------* * MACRO FILE FOR USE WITH GS SUPERCLOCK * *-----------------------------------------* * APW OR ORCA/M ASSEMBLER * *-----------------------------------------* MACRO &LAB _MOVETO &LAB Tool $3A04 MEND MACRO &LAB _DRAWSTRING &LAB Tool $A504 MEND MACRO &LAB _STRINGWIDTH &LAB Tool $A904 MEND MACRO &LAB _ERASERECT &LAB Tool $5504 MEND MACRO &LAB _GETMASTERSCB &LAB Tool $1704 MEND MACRO &LAB _SETHEARTBEAT &LAB Tool $1203 MEND MACRO &LAB _DELHEARTBEAT &LAB Tool $1303 MEND MACRO &LAB _QDSTATUS &LAB Tool $0604 MEND MACRO &LAB _SETVECTOR &LAB Tool $1003 MEND MACRO &LAB _GETVECTOR &LAB Tool $1103 MEND MACRO &LAB _READTIMEHEX &LAB Tool $0D03 MEND MACRO &LAB _INT2DEC &LAB Tool $260B MEND MACRO &LAB _INITPORT &LAB Tool $1904 MEND MACRO &LAB _SETPORT &LAB Tool $1B04 MEND MACRO &LAB _GETPORT &LAB Tool $1C04 MEND MACRO &LAB PUSHWORD &VALUE LCLC &CHAR &CHAR AMID &VALUE,1,1 AIF "&CHAR"="#",.IMMEDIATE &LAB LDA &VALUE PHA MEXIT .IMMEDIATE &CHAR AMID &VALUE,2,100 &LAB PEA &CHAR MEND MACRO &LAB PUSHPTR &LABEL &LAB DC I1'$F4' DC I2'(&LABEL)|-16' DC I1'$F4' DC I2'&LABEL' MEND MACRO &LAB SHORTA &LAB LONGA OFF SEP #$20 MEND MACRO &LAB FULLA &LAB LONGA ON REP #$20 MEND MACRO &LAB SHORTAXY &LAB LONGA OFF LONGI OFF SEP #$30 MEND MACRO &LAB FULLAXY &LAB LONGA ON LONGI ON REP #$30 MEND MACRO &LAB TOOL &LABEL &LAB LDX #&LABEL JSL $E10000 MEND 123 ˮ Í젤à젤Í젤à젤 Í젤Í젤à젤Í젤Í젤à젤Í젤İÍ젤Í젤Í젤°Í젤ðÍƠݱݱōݱΠÍ䠣ݱ䠣ݱÍР٠ÍРÍР٠ÍРÍؠݱ̠ű A014:B:768A,B:::W50162::3:X027.9.3:Y9110(X):X10,Y:X10,YW::I1W20:(1)2709,100(1)(W20)::1,0,4,0,53,45,62,63,63,44,37,0,39,4,0Y 232,0:233,3:0:1:Y86W2:X22762:J(1):YY(J160)(J100):1X,Y:S(16336):LL10:22:"LENGTH:"L:1X,Y:(234)ĂX,W:"YOU GOT IT!":X050:1276,Y:856: XŰLƯggggHH%hh z腰jlnikm A`HhLyhhHHL\789  ************************? * MAGIC.SQUARES *^ * BY MARK COHEN *}( * COPYRIGHT(C) 1989 *2 * MINDCRAFT PUBL. CORP.*< * CONCORD, MA 01742 *F ************************PZ INITIALIZATION d MD=MAX # DIGITS INPUT* n:MAX9:MD((MAX))0 xM DEFINE 'MOD' FUNCTIONg MOD(W)W(WL)L: PROCESS MAGIC SQUARES **** MAINLINE **** READ SIZE, GENERATE SQUARE TIL HIT 300 L0İ220:320:180 :::"ENDING MAGIC SQUARES"::I1500::B GENERATE SQUARE SIZE L **** SUBR ****W R=ROW C=COLUMN| ::"MAGIC SQUARE: SIZE ";L:: I(L2)1:S0 R1L:C1L:NLMOD(RCI)MOD(R2C2)1:(" ",4((N)))(N);:SS(RC)N:C::R: 4 SPACES :"SUM = ";S 16368,0@ ::"PRESS ANY KEY TO CONTINUE"[ K(16384):K127280m "16368,0:: , INPUT SIZE ( TO SIGNAL END) **** SUBR **** 6 RETURN VALUE OF L=0 FOR END @:22:"(RETURN TO QUIT)"T J6:1:"MAGIC SQUARES BY MARK COHEN":1:"COPYRIGHT(C) 1989 MINDCRAFT PUBL. CORP."::1:" LENGTH (ODD#):";L$a TLL(L$) ^LL0L0:: ?@ABCDEFGHIJKLMNOPQRSTUVWX# ***************************E * MenuPro *g * By Juan S. Lach *( * Copyright(c) 1989 *2 * MindCraft Publ. Corp. *< * Concord, Ma 01742 *F *************************** P4530 Z d All flags: nQ xTXT0:BAS1:BIN1:SYS1:VAR0:DIR1:0=RUN,1=DON'T PIC1: 0= DON'T DISPLAY PIC, 1=DISPLAY PIC, 2= DISPLAY ASKING TF0: 0 = Normal clock, 1=24 hour clock CRE0: 0= Show modification date, 1= Show creation date  Main program:! A D$(4)::D$;"PR#3":(18)[ :1403,33:"MenuPro"{ 1403,30:"By Juan S. Lach" 1403,29:"Copyright(c) 1989" 1403,28:"MindCraft Publ. Corp." 1403,29:"Concord, MA 01742" 12:1403,30:"Reading catalog "; 2805 D$;"DELETE PRGM.EXEC":290@ 216,0K "4530v ,2240: Configure Printer & Interface 634,2:SE1SE0::CP0:PG0:INF0:B10:3620:330 @M$(80),TY$(80),L$(80),SB$(80),TM$(80),T1$(18):3620 JCP1:V6:OA49249:Z(64448):Z224Z0F T1403,30:22:"Press Return to continue";:A$:\ ^2570: Get Timek hSE1390v r4530 |420 Z0410 5:1403,0:(27);(15);:J180:"S";::(14);(24);:420 5:1403,0:J180:"=";:\ 4:1403,1:"Name of file";:1403,19:"Type of file";:1403,41:"Time";:1403,56:"SIZE: (Bytes) (Blocks)"p SE1SE0:460 3820: Get types & convert them 34,0:1:1403,0:868 6:958 34,5::B15510T114:4110:: Print first 14 filenames+PGB14:PG(PG)PG(PG):PGPG14520gT1B:4110:: Print all filenames (if < 15)4280:"Prefix: ";PF$Z0ĺ(27);(15);"A";(14);"-? for Help.";&Z0ĺ(24);#01403,18:"Total files: ";B;" Total blocks: ";TB$;:1403,56:"Blocks remaining: ";BR$D:2680: PRINT DATE AND TIMESDUT13010N23:"Commands: L)oad N)ormal P)refix U)tilities Q)uit [ = R)un]"XPG0PG1:SE2: PG = 1 for printing page numbers.b34,0:1:1403,67:"Page ";CP;" of ";PG;".":34,5KlSE2SE0:PG0: Restore original PG valuevINF1650: Device info is already on the screen2340: Get device information.:VM$((V5)B1): Print cursor barP(16384):P128670: Get keystroke&16368,0::V: Delete cursor barFM$((V5)B1):P225PP32yP141P255: Parse as a code = 255P155P254: Parse as code = 254P192820: Codes greater than 192 parse in line 840<CPPGĭP138VV1:V(B35)V6:990: Down arrow pressed; last page is being usedKCPPG760PG1ĭP138VV1:V19V6:990: Down arrow, move down or advance 1 page; page > 1 is being viewedP139VV1:V5V6:1120: Up arrowPG1790 P138VV1:VB5V6: Down arrowC(P191P175)(OA)1274320: Apple-?q (P176P186)(OA)1274160: Apple-num*650: Loop back to display cursor4P196(OA)1272800: Apple-D (Dump)>P194(OA)127V6:650: Apple-BHP197(OA)127ĭCPPGVB35:650: Apple-ERRP197(OA)127ĭPG0VB5:650: Also Apple-Eq\P197(OA)127V19:650fP2544430pUT13040: If utilities, parse other commandszP255P2101420: RunP2081270: PrefixP2041630: Load"P2062000: Normal catalog9P2092110: QuitbP213ī3000: Set up Utilities menuk650q Display next pagePG2ī65035,20::6:1403,0CPCP1:CPPGCP1CP2B1B114CP2B114CP1B10$V6:B2B114:B2BB2B:B3BB18$B2B114B314O.TB11B2:4110:_835,24:600eBL Display previous pageV`PG2VB5:650j35,20::6:1403,0tCPCP1:CP1CPPG~CP1B114(CP1)PG1V19:1180VB5CP1B101B2B114:B2BB2B:B3BB1EB2B114B314WCPPGVB35nTB11B2:4110:~35,24:600 Set new prefix4280:"Current prefix: ";PF$"Enter new prefix [ to quit]: "; 4210: GET INPUT!SE1X$""ĺ(21)::0X$""520;(1350c2D$;"PREFIX ";X$:216,0:SE1:4530l<190F(222)6İ4280:"Incorrect prefix":4250:216,0:1270P(222)3İ4280:"The requested device is not found":4250:216,0:1270-Z(222)7İ4280:"Volume mismatch":4250:216,0:1270bd4280:"Error number ";(222):4250:216,0:1270hnrx Runx4130R1$T1$(15)R1$T1$(16)520D$;"VERIFY ";R$R1$T1$(3)1500: Basic FilePIC01470'R1$T1$(5)R1$T1$(8)R1$T1$(2)1520: SYS,BIN or TXTHR1$T1$(1)1590: Directoryt4280:"Not a runable file.":4250:520BAS01680(21):::103,1:104,8:D$;"RUN";R$R1$T1$(5)BIN01680R1$T1$(8)SYS01680R1$T1$(2)TXT01680.D$;"OPEN PRGM.EXEC":D$;"WRITE PRGM.EXEC"k"POKE 103,1:POKE104,8:NEW":"-";R$:D$;"CLOSE PRGM.EXECz"(21)::,D$;"EXEC PRGM.EXEC":6DIR01680@D$;"PREFIX";PF$;R$JSE1:190: READ CATALOG AGAINT Load^41302hR1$T1$(1)İ4280:"Directories can't be loaded.":4250mrR1$T1$(2)İ4280:"Text files can't be loaded.":4250|R1$T1$(1)R1$T1$(2)R1$T1$(16)R1$T1$(15)520D$;"VERIFY ";R$R1$T1$(3)1720: BAS fileR1$T1$(4)1750: VAR file.R1$T1$(5)R1$T1$(8)1800: BIN OR SYS FILEb4280:"Not able to load this file.":4250:520rBAS01680(21):::103,1:104,8:D$;"LOAD "R$VAR01680D$;"OPEN PRGM.EXEC":D$;"WRITE PRGM.EXEC""NEW":"RESTORE";R$D$;"CLOSE PRGM.EXEC":(21)5::D$;"-PRGM.EXEC"|4280:"Load address [0=Default address, RETURN to quit]: ";:4210X$""520X(X$):X0R1$T1$(8)X8192:1870&X018700(X2048X36864)(X768X975)1800 :X2047X(L$)368641940&DX767X(L$)9751940FNR1$T1$(5)HT$"BIN":1890TXHT$"SYS"b4280:X767X2048ĺD$;"BLOAD";R$;",A";X:lD$;"OPEN PRGM.EXEC":D$;"WRITE PRGM.EXEC"v"NEW":X0ĺ"BLOAD";R$:1930"BLOAD";R$;",A";X D$;"CLOSE PRGM.EXEC":::4600R 2048(L$)36864İ4280:"File too large to be loaded.":1960 4280:"File too large, try loading it at another location." 4250:520   Normal catalog  34,2:!Z0ĺ(27);(15);:5:1403,0:T180:"S";::(14);(24);:20305!5:1403,0:T180:"=";:y!34,5:22:868:"Press Control-S to pause, Control-C to stop."!35,21:6:1403,0:2060!D$;"CATALOG"! 216,0:4530!SE1:35,24:23:1403,0:4250:CP1:350! !* Quit!48">4280:"Are you sure (Y/N)?";:A$:A$"Y"A$"y"520w"H4280:"Return to BASIC (Y/N)?";:A$:A$"Y"A$"y"2140"R(21):::"\D$;"PREFIX/""f(49149)0ĺD$;"BYE""pT768778:A:T,A::768"z# Configure printer port (Change it to your own configuration)!#`# This program contains the configuration for an Apple IIc# printer port 1: 7 Data bits, 1 stop bit, 4800 baud, no parity# no echo, LF after CR & 80 columns.##49153,0 $1144,60: 7 D. bits, 1 stop; 4800 baud)$1145,107: even parityM$1146,64: no echo, LF after CRt$1147,80: 80 characters before CRz$$$ $ Get what type of drive & computer we're using$ $$ 34,1:2:1403,0:D1$. 2380%%8 "Device used: ";DS$;" at slot ";SL;", drive ";D;" in an ";A$7%B 34,5:INF1:Y%L I(48944):I127D2:II128e%V SLI16%` 768,165:769,6:770,41:771,240:772,133:773,6:774,165:775,7:776,41:777,15:778,133:779,7:780,96h&j 789,169:790,00:791,141:792,39:793,3:794,56:795,32:796,31:797,254:798,144:799,1:800,96:801,169:802,1:803,141:804,39:805,3:806,96&t C(48945):T1(C1)2&~ DX(48945T):6,DX:7,DX:768& DX(6):DXITC2& & DX(7):DX0DS$"Disk ][":2530 ' DX4DS$"Profile":2530(' DX15DS$"Ramdisk":2530H' DX11DS$"3.5 Disk":2530h' DX13DS$"3.5 Disk":2530' DX5DS$"Hard Drive":2530' DS$"Unknown"' 789:(807)1A$"APPLE IIGS":H( (807)0QZ(64435)(64448):A$"APPLE II"("C E-ENHE-OLDPLUS ",15((QZ229)(QZ239)(QZ240)),5): 4 SPACES AFTER C:RETURNN( ( This routine reads the time into MM$,YY,DD,HH & MI:( MN$"---JanFebMarAprMayJunJulAugSepOctNovDec"( DD(49040)((49040)32)32) YY((49041)2):MM((49041)YY2)8((49040)32)-)( MM$(MN$,MM31,3)I)2 MI(49042):HH(49043)U)< TF1ıe)F HH11PM1y)P HH12HHHH12)Z HH0HH12)d )n This routine prints the date and time on the screen)x 34,0:1:1403,0:"Date: ";* DD0ĺ"":34,5:** DD;"/";MM$;"/";:YY10ĺ"0";E* YY;" ";:HH10ĺ"0";_* HH;":";:MI10ĺ"0";s* MI;:TF12760* PM1ĺ" PM":2760* " AM"* 34,5:* * Dump the catalog to a printer* + 4280:"Press space bar to print; Escape to exit.";:A$:A$(27)520/+ A$(32)2800a+ D$;"PR#1": Change it to your printer's slot+ (9)"80N": CHANGE TO YOUR PRINTER'S 80 COLUMN COMMAND+ "Prefix: ";PF$+" SE1:2690+, (16384)155Ĺ16368,0:2910C,6 :" Name of file";:20:"Type of file";:36,41:"Time";:36,56:"SIZE: (Bytes) (Blocks)"Y,@ T180:"_";::c,J 2930,T :::B" files listed Blocks remaining: ";BR$;" Total blocks: ";TB$,^ D$;"PR#0":D$;"PR#A$C307",h 520%-r T1B:M$(T);2);TY$(T);:36,40:TM$(T);:36,62:L$(T);:36,74:SB$(T)J-| (16384)155Ĺ16368,0::2910R- :X- i- Utilities:o- - This is the utilities entry routine- UT1: Set utility flag . 23:868:"Utilities: D)elete L)ock U)nlock R)ename [ = Q)uit]". 600:. This is the utilities parser:Y. P255P209UT0:23:580}. P204P2133100: Lock/Unlock. P2103210: Rename. P1963370: Delete. 650. Lock/Unlock. 4130.& R1$T1$(16)R1$T1$(15)3530/0 P2043160/: D$;"UNLOCK";R$%/D A$" "//N 3180@/X D$"LOCK";R$K/b A$"*"k/l X$A$(R$,(R$)):X$X$" "/v M$((V5)B1)X$:SE1:3530/ Rename/ V::M$((V5)B1)::4280:4130:C$M$((V5)B1)/ R1$T1$(15)R1$T1$(16)35300 "Current name of this file: ";R$V0 "Enter a new name for this file [ to exit]: ";:4210e0 X$""520p0 33000 D$;"RENAME";R$;",";X$0 216,0:45300 33500 216,0:45300 (222)16İ4280:"Illegal filename.":4250:3530C1 (222)19İ4280:"Another file already exists with the same name.":4250:35301 (222)10İ4280:"The file is locked. It can't be renamed.":4250:35301 4280:"Error number ";(222):4250:35301 C$" "X$:T117(C$):C$C$" "::M$((V5)B1)C$:3530 2 Delete+2* R1$T1$(15)R1$T1$(16)353024 :V:M$((V5)B1)::4280:"This file is to be permanently destroyed.":"Do you want to destroy it (Y/N)?";:A$2> A$"Y"5202H 34902R 4130:D$;"DELETE ";R$=3\ TEPG:T(V5)B1B:M$(T)M$(T1):TY$(T)TY$(T1):L$(T)L$(T1):SB$(T)SB$(T1):TM$(T)TM$(T1):b3f BB1:B3B31(CPPG):CP134503p PGB14:PG(PG)PG(PG):PGPG13z PGTECPPGV6:B2B21:B1B113 (V5)(B2B1)VV13 216,0:45303 35303 216,0:4530C4 (222)10İ4280:"The file is locked, it can't be deleted.":4250:35304 (222)4İ4280:"The disk is write protected, the file cannot be deleted.":4250:35304 This routine restores the screen after Del,Rem,Lock & Unlock4 35,20:6:958:1403,0"5 CP1PG0āT1B:4110::3570B5 CP1āT114:4110::3570Y5 TB11B2:4110:t5 35,24:SE1SE0:650}5 52055 Get the catalog into the array M$ (The heart of the program)55$22:D$"PREFIX":PF$5.B1:12:1403,4668D$;"OPEN";PF$;",TDIR")6BD$;"READ ";PF$36LVOL$E6VA$:A$:A$""e6`M$(B):TY$(B)(M$(B),18,3)6jL$(B)(M$(B),64,8):SB$(B)(M$(B),26,3)6tCRE0TM$(B)(M$(B),31,15):37206~TM$(B)(M$(B),48,15)6M$(B)(M$(B),1,17):M$(B)""3740!7BB1:".";::" ";::(8);:3680J7BR$:TB$(BR$,58,5):BR$(BR$,14,5)^7D$;"CLOSE";PF$7BB1:M$(1)""ĉ::"DIRECTORY EMPTY, try another prefix";(7):42507M$(1)""ė:SE1:1270778 Convert the BASIC.SYSTEM type mnemonics to a friendlier format808T118:T1$(T):8 Directory,Text,Applesoft Program,Applesoft Variables,Binary,Relocatable Code,ProDOS added command,System,Word Processor,Database,Spreadsheet9 Int BASIC program,Int BASIC Variables,Pascal,Bad Block,Typeless,User defined,Other'9 T1BM9TY$(T)"DIR"TY$(T)T1$(1):4040s9TY$(T)"TXT"TY$(T)T1$(2):40409(TY$(T)"BAS"TY$(T)T1$(3):404092TY$(T)"BIN"TY$(T)T1$(5):40409<TY$(T)"SYS"TY$(T)T1$(8):4040 :FTY$(T)"AWP"TY$(T)T1$(9):40402:PTY$(T)"ADB"TY$(T)T1$(10):4040Y:ZTY$(T)"ASP"TY$(T)T1$(11):4040:dTY$(T)"VAR"TY$(T)T1$(4):4040:nTY$(T)"CMD"TY$(T)T1$(7):4040:xTY$(T)"REL"TY$(T)T1$(6):4040:TY$(T)"INT"TY$(T)T1$(12):4040;TY$(T)"IVR"TY$(T)T1$(13):4040@;TY$(T)"PAS"TY$(T)T1$(14):4040g;TY$(T)"$01"TY$(T)T1$(15):4040;TY$(T)"$00"TY$(T)T1$(16):4040;(TY$(T),2)"$F"TY$(T)T1$(17):4040;Q1$" ( ":Q2$" ) ":TY$(T)T1$(18)Q1$TY$(T)Q2$;&<D$;"FRE": Clean up all garbage accumulated,<2<S< Miscellaneous subroutines:Y<}< Print one line of the catalog<M$(T);2);TY$(T);:1403,40:TM$(T);:1403,62:L$(T);:1403,74:SB$(T):= Isolate the name and type of the file into R$ & R1$$="R$((M$((V5)B1),16),15)<=,R1$TY$((V5)B1):n=6 Apple-1 thru Apple-9 (Go to pages 1 thru 9)=@PP176:PPGĺ(7);:650=JPCP650=T35,20::6:1403,0=^CPP:B114(CP1):1050>h Input anything: (CALL -657 and scan input buffer)>rX$"":657D>|T512767:(T)141X$X$((T)128):J>v> Ask user to press any key to continue>"Press any key to continue.";:A$>> Clean screen from line 21 to line 24>21:1403,0:958: ? Data for the ProDOS quit command.? 32,0,191,101,6,3,4,0,0,0,09? HelpC?4280p?Z0ĺ"Arrows move cursor bar, ";:4360|?(27);?(15);"K";(14);" and ";(15);"J";(14);" move cursor bar, ";@(15);"A";(14);"-1 thru ";(15);"A";(14);"-9 move cursor to pages 1 thru 9."@(15);"A";(14);"-B moves cursor to beginning of page,";(15);"A";(14);"-E moves cursor to end of page.";:(15);"A";(14);"-D dumps":"catalog to a printer.";@" Esc backs up 1 directory level."@&1403,20:4250:520@00A: Escape pressed, back up 1 directory level.6AD\AN(PF$,1)"/"PF$(PF$,(PF$)1)qAXDL1:T2(PF$)Ab(PF$,T,1)"/"DL0:DPTAlAvDL0PF$PF$"/":650ANP$(PF$,DP1):D$;"PREFIX";NP$ASE1:190AA Error trapper:BB(222)255Ħ*B(222)64580B4280:"Path not on this disk. Be sure"VOL$" is inserted.":"Press space bar to continue, Escape to quit.";:A$:A$(32)ĦBA$(27)SE1:1270B4550'C(222)4İ4280:"The disk is write-protected, the operation is canceled.":4240:520|C4280:"Error number ";(222)" in line "(218)256(219):4250:216,0:SE1:350CD$"-PRGM.EXEC" ::3:A12:230,A32:4,556,556,424,424,5:9,5914,4446,4451,59::B09E9:FF0:Y8(1)32:P(49152)177:228,(P)256(P8):Q(49249)128:49237FQ,Y:7,Y53,Y:[\]^_`abcJULY 1989 DISK (VOL 10 /NO 7) 8 NIBBLE MENUPRO MAGIC SQUARES SUPERCLOCK NEW DESK ACCESORIES GETTING STARTED WITH PRINT APPLESOFT OVERLAYS GET MY PROGRAM BACK CHECKIT 4 MAGIC SQUARES RUN MAGIC.SQUARES GETTING STARTED WITH PRINTING RUN PRINTING.DEMO APPLESOFT OVERLAYS RUN OVERLAY.DEMO 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 MENUPRO, remove all but the following files from a copy of this disk: MENUPRO RAM.FIX 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 MAGIC SQUARES, remove all but the following file from a copy of this disk: MAGIC.SQUARES This program is included on both the DOS 3.3 and ProDOS sides of this disk. @ To create a work disk for SUPERCLOCK, copy the following file to the SYSTEM.SETUP subdirectory of your ProDOS boot disk: CLOCK.GS 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 NEW DESK ACCESSORIES, copy the following file to the DESK.ACCS subdirectory of your GS/OS system disk: SYS.DEV 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 GETTING STARTED WITH PRINT, remove all but the following file from a copy of this disk: PRINTING.DEMO This program is included on both the DOS 3.3 and ProDOS sides of this disk. @ To create a work disk for APPLESOFT OVERLAYS, remove all but the following files from a copy of this disk: OVERLAY.DEMO OVRLY OVERLAY.ELM1 OVERLAY.ELM2 OVERLAY.ELM3 OVERLAY.ELM4 These programs are included only on the ProDOS side of this disk. @ To create a work disk for GET MY PROGRAM BACK, remove all but the following file from a copy of this disk: GMPB 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. @ 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: SUPERCLOCK.S (MERLIN) CLOCK.MACS.S (MERLIN) CLOCK.CMD.S (MERLIN) CLOCK.MACS.APW (APW) SYS.DEV.ASM (APW) SYS.DEV.MAC (APW) OVERLY.S (MERLIN) @ # efg Ů ̮ Ĭ Ү Ԯ Ǭ ԠǠԍԠ±͠ōΠĶҠԠÍ РōŠ̠̠ 򮍠ƶ̍ƷӍ̠ ҠԠ Ү РōѠԍР̍ѠԍӠ䮍Ԡ  퍠Р 򮍠«ЫҠ͠ ፠ҠԠ 썠ҠΠ 占٠ ҩ٠ 占  ٍҩ٠ «򮍠ӍԠР   Ы«Ӎijk! *************************A * OVERLAY.DEMO *a * BY E.L. CRANFORD, JR. *( * COPYRIGHT(C) 1989 *2 * MINDCRAFT PUBL. CORP. *< * CONCORD, MA 01742 *F *************************P130 Z ADDITION,SUBTRACTION,MULTIPLICATION,DIVISIONH d 100, 23,675,195,893,1,107,202,377,9i n 3,6,12,92,999,5,19,20,18,4r x250 ER(222) ER12ė:"NO BUFFERS AVAILABLE": ER14ė:"PROGRAM TOO LARGE": ER77ė:"OUT OF MEMORY":" ER6ė:"THE FILE 'OVRLY' MUST BE ON THIS DISK":T :"ERROR #"ER" IN LINE #"(218)256(219): V%1:"SELECT ONE (ESC=EXIT) :";:Z$::Z(Z$):EXZ27:M(Z48)(Z48): Y$(Y$Y$,L2):(Y$)L2200: ::L0:T1LT:X(T$(T)):XLLXd :L2L4:H(41L2)2:Y$"*":200:H:Y$:T1LT:H:"*";::L22);::"*";::(41(T$(T)))2:T$(T):::H:Y$: V%:LN$:M1LM%:V(M):(48M)"-"X$(M)::V(M):LN$: N14:X$(N)::I110:A(I)::I110:B(I)::LM%4:S%2:V%9:+ D$(4):Y$"=":L239:200:LN$Y$:X$(4),T$(2),A(10),B(10):240? D$"BRUN OVRLY"] T$(1)"OVERLAY DEMO":LT2u V(M)V%MS%:340 "T$(2)"MAIN MENU":210:LM%4:S%2:V%9:230 ,190:EX320:M1MLM%300 6,320:D$"CHAIN OVERLAY.ELM"(M48) @:: T290 J:280'TT$(2)"ADDITION":210R^6:"A","B","A+B":I139:"-";::"-"h958:8:1:I110:A(I),B(I),A(I)B(I)::22:"PRESS RETURN TO CONTINUE";:R$r290 J:280*TT$(2)"SUBTRACTION":210U^6:"A","B","A-B":I139:"-";::"-"h958:8:1:I110:A(I),B(I),A(I)B(I)::22:"PRESS RETURN TO CONTINUE";:R$r290 J:280-TT$(2)"MULTIPLICATION":210X^6:"A","B","A*B":I139:"-";::"-"h958:8:1:I110:A(I),B(I),A(I)B(I)::22:"PRESS RETURN TO CONTINUE";:R$r290 J:280'TT$(2)"DIVISION":210R^6:"A","B","A/B":I139:"-";::"-"h958:8:1:I110:A(I),B(I),(A(I)B(I))::22:"PRESS RETURN TO CONTINUE";:R$r290 `H hɨɧ`gh ֠gȱh`gh`rs PRINTING.DEMO::="PRINTING DEMONSTRATION"(8:"THIS PROGRAM DEMONSTRATES THE PRINTING":"TECHNIQUES EXPLAINED IN GETTING STARTED WITH PRINT"222:"PRESS RETURN TO CONTINUE";A$<:"TYPE MODES"F8:"THIS IS NORMAL TYPE" P:"THIS IS INVERSE TYPE"< Z::"THIS IS FLASHING TYPE"e d:22:"PRESS RETURN TO CONTINUE";A$ n:"SPEED = 100":100 x7:"USING THE SPEED= COMMAND SLOWS":"THINGS DOWN A LOT." 255:22:"PRESS RETURN TO CONTINUE";A$ :"AUTOMATIC TABS AND SPC()" 7:5,7,90 9:5;6);7;3);9W 22:"PRESS RETURN TO CONTINUE";A$n :"HTAB AND VTAB" X515:Y1405 X:Y:"HI"; : :22:"THAT'S ALL" uvwxyz{|}~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&MIKEX F;4ZX FZZZZZX M` T` T`'     ******* 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 ?? Pb VU  /D`}0 JWdt#'+/373;P?aCsGKOk7 Ik   - ; C _ W a [ %-25AMPX\jv{#!$,/2IMSZ]hw TWZ]`chp :>MP\`or**************************************** * * * System Devices NDA * * APW Assembler Source Listing * * by Sandy Mossberg * * * * Copyright (C) 1989 * * by MicroSPARC, Inc. * * Concord, MA 01742 * * * **************************************** mcopy sys.dev.mac ;macro file keep sys.dev ;convert to NDA with FILETYPE command ***************************************************************** * NDA_Header start * * NDA header: * ***************************************************************** dc i4'NDA_Open' ;ptr to open routine dc i4'NDA_Close' ;ptr to close routine dc i4'NDA_Action' ;ptr to action routine dc i4'NDA_Init' ;ptr to initialization routine dc i2'60' ;period: run every 1 second dc i2'%1111111111010111' ;event mask: ignore key-down events dc c'--' ;place-holders (length) dc c'System Devices\' ;text of name + name terminator dc c'H--' ;place-holders (menu ID) dc i1'0' ;end of name byte end ***************************************************************** * NDA_Open start * * Open NDA if it is closed: * * Entry: 1-3,s = return address; 4,s = B-reg; 5-8,s = space for window pointer. * * Exit: 1-4,s = window pointer. * ***************************************************************** using Globals phb ;save entry data bank phk ;equate data bank to program bank plb lda OpenFlag bne Done ;NDA already open so exit jsr GetDevices ;create tables of devices/descriptions jsr SetWindSize ;customize window size PushLong #0 ;create NDA window PushLong #WindowRec _NewWindow plx ;save ptr to NDA window's GrafPort pla stx WindowPtr sta WindowPtr+2 sta 7,s ;put window ptr on stack for Desk txa ; Manager after PLB and RTL sta 5,s ; instructions executed PushLong WindowPtr ;mark NDA window as system window _SetSysWindow lda #-1 ;signal that NDA is open sta OpenFlag Done plb ;restore entry data bank rtl end ***************************************************************** * NDA_Init start * * Initialize NDA startup and shutdown: * * Entry: A = zero = DeskShutDown; A = nonzero = DeskStartUp. * ***************************************************************** tax ;test A-reg beq NDA_Close ;close NDA rtl ;opening NDA requires no action end ***************************************************************** * NDA_Close start * * Close NDA if it is open: * ***************************************************************** using Globals phb ;save entry data bank phk ;equate data bank to program bank plb lda OpenFlag beq Done ;NDA already closed PushLong WindowPtr ;close NDA window _CloseWindow stz OpenFlag ;signal that NDA is closed Done plb ;restore entry data bank rtl end ***************************************************************** * NDA_Action start * * Handle the designated action: * * Entry: A = action code; X,Y = pointer to event record or menu IDs. * ***************************************************************** phb ;save entry data bank phy ;save ptr to event record or menu IDs phx phk ;equate data bank to program bank plb asl a ;index table of 2-byte entries tax jsr (ActionTable,x) ;perform action plx ;restore ptr to event record or menu IDs ply plb ;restore entry data bank rtl ;................................................................ ; ; NDA_Action data: ; ActionTable anop ;action table dc i2'DoNothing' ;0 = no action dc i2'DoEvent' ;1 = event action dc i2'DoRun' ;2 = run action dc i2'DoNothing' ;3 = cursor action dc i2'DoNothing' ;4 = menu action dc i2'DoNoEdit' ;5 = undo action dc i2'DoNoEdit' ;6 = cut action dc i2'DoNoEdit' ;7 = copy action dc i2'DoNoEdit' ;8 = paste action dc i2'DoNoEdit' ;9 = clear action end ***************************************************************** * DoNoEdit start * * Take no edit action but pretend you did: * ***************************************************************** lda #-1 ;signal that action handled DoNothing entry ;just do nothing rts end ***************************************************************** * DoRun start * * Perform display action when time period has expired: * ***************************************************************** using Globals PushLong #0 ;save entry GrafPort on stack _GetPort PushLong WindowPtr ;activate NDA GrafPort _SetPort jsr ShowDevices ;display device names and descriptions _SetPort ;restore entry GrafPort rts end ***************************************************************** * DoEvent start * * Handle event action: * * Entry: 5,s = pointer to event record. * ***************************************************************** using Globals What equ $05 ;location of ptr to event record phd ;save entry direct page tsc ;align direct page with stack tcd lda [What] ;get "what" code of event record cmp #9 bcs Done ;unsupported code found asl a ;index table of 2-byte entries tax jsr (EventTable,x) ;handle event Done pld ;restore entry direct page rts ;................................................................ ; ; DoEvent data: ; EventTable anop ;event table dc i2'DoNothing' ;0 = null event dc i2'DoNothing' ;1 = mouse-down event dc i2'DoNothing' ;2 = mouse-up event dc i2'DoNothing' ;3 = key-down event dc i2'DoNothing' ;4 = reserved event dc i2'DoNothing' ;5 = auto-key event dc i2'DoUpdate' ;6 = window update event dc i2'DoNothing' ;7 = reserved event dc i2'DoNothing' ;8 = window activate event end ***************************************************************** * DoUpdate start * * Update NDA window: * ***************************************************************** using Globals PushLong WindowPtr _BeginUpdate jsr ShowDevices PushLong WindowPtr _EndUpdate rts end ***************************************************************** * GetDevices start * * Create table of device names and table of pathnames/descriptions: * ***************************************************************** using Globals Ptr equ $00 ;temporary ptr stz devNum ;prepare for sequential device numbers GD01 lda devNum ;create index to device name table asl a ; and device info table asl a asl a asl a asl a sta TableIndex inc devNum ;bump device number lda devNum ;allow no more than 16 devices cmp #17 bcs GD02 _DInfoGS DInfoParm ;get device info bcc GD03 ;no error GD02 brl Done ;finished with device list GD03 lda devNameStr ;convert GS/OS string at devNameStr xba ; to P-string at devNameStr+1 sta devNameStr PushLong #devNameStr+1 ;copy name string to device name table ldx #^DevNameTbl clc lda #DevNameTbl adc TableIndex bcc GD04 inx GD04 phx pha PushWord #0 lda devNameStr+1 and #$FF inc a pha _BlockMove lda charistics ;get device characteristics and #$0080 ;isolate block device bit beq GD08 ;device not a block device lda devNameStr ;convert P-string at devNameStr+1 xba ; to GS/OS string at devNameStr sta devNameStr ; for class 1 GS/OS call _VolumeGS VolumeParm ;get volume info bcc GD05 ;no error PushLong #NoVolStr ;copy [volume not found] to lda NoVolStr ; device info table bra GD06 GD05 lda volNameStr ;convert GS/OS string at volNameStr xba ; to P-string at volNameStr+1 sta volNameStr shortm ;change semicolon separator lda #'/' ; to slash separator sta volNameStr+2 longm PushLong #volNameStr+1 ;copy volume name string to lda VolNameStr+1 ; device info table GD06 and #$FF inc a sta StrLen ldx #^DevInfoTbl clc lda #DevInfoTbl adc TableIndex bcc GD07 inx GD07 phx pha PushLong StrLen _BlockMove brl GD01 ;loop back for another device GD08 lda Ptr ;copy device ID string to sta DPSave ; device info table lda Ptr+2 sta DPSave+2 lda devID asl a asl a tax lda DevIDPtrTbl+2,x pha sta Ptr+2 lda DevIDPtrTbl,x pha sta Ptr lda [Ptr] tax lda DPSave sta Ptr lda DPSave+2 sta Ptr+2 txa bra GD06 Done ldx TableIndex ;zero length bytes signals stz DevNameTbl,x ; end of table entries rts ;................................................................ ; ; GetDevices data: ; DPSave ds 4 ;save area for direct page data TableIndex ds 2 ;index to device name/info tables StrLen ds 4 ;number of bytes in target string NoVolStr str '[ Volume not found ]' DevIDTxtTbl anop ;table of device ID number definitions ID00 str '[ Apple 5.25 drive ]' ID01 str '[ Profile 5 MB hard drive ]' ID02 str '[ Profile 10 MB hard drive ]' ID03 str '[ Apple 3.5 drive ]' ID04 str '[ SCSI ]' ID05 str '[ SCSI hard disk ]' ID06 str '[ SCSI tape drive ]' ID07 str '[ SCSI CD ROM ]' ID08 str '[ SCSI printer ]' ID09 str '[ Serial modem ]' ID10 str '[ Console driver ]' ID11 str '[ Serial printer ]' ID12 str '[ Serial LaserWriter ]' ID13 str '[ AppleTalk LaserWriter ]' ID14 str '[ RAM disk ]' ID15 str '[ ROM disk ]' ID16 str '[ File server ]' ID17 str '[ Reserved ]' ID18 str '[ AppleDesktop bus ]' ID19 str '[ Generic hard disk ]' ID20 str '[ Generic floppy disk ]' ID21 str '[ Generic tape drive ]' ID22 str '[ Generic char device driver ]' ID23 str '[ MFM-encoded disk drive ]' ID24 str '[ Generic AppleTalk network ]' ID25 str '[ Sequential access device ]' ID26 str '[ SCSI scanner ]' ID27 str '[ Other scanner ]' ID28 str '[ LaserWriter SC ]' ID29 str '[ AppleTalk main driver ]' ID30 str '[ AppleTalk file server ]' ID31 str '[ AppleTalk RPM driver ]' DevIDPtrTbl anop ;table of ptrs to device ID number definitions dc a4'ID00,ID01,ID02,ID03,ID04,ID05,ID06,ID07' dc a4'ID08,ID09,ID10,ID11,ID12,ID13,ID14,ID15' dc a4'ID16,ID17,ID18,ID19,ID20,ID21,ID22,ID23' dc a4'ID24,ID25,ID26,ID27,ID28,ID29,ID30,ID31' end ***************************************************************** * SetWindSize start * * Calculate window size: * ***************************************************************** using Globals stz EntryWidT1 ;zero variables stz EntryWidT2 stz XSave stz EntryNum SW01 ldx XSave ;get index to table entries lda DevNameTbl,x ;get length byte in device name table beq SW06 ;no more table entries inc EntryNum ;bump entry counter ldy #^DevNameTbl ;get width of device name table entry clc txa adc #DevNameTbl tax bcc SW02 iny SW02 pha phy phx _StringWidth pla cmp EntryWidT1 ;save widest string in device name table bcc SW03 sta EntryWidT1 SW03 ldy #^DevInfoTbl ;get width of device info table entry clc lda XSave adc #DevInfoTbl tax bcc SW04 iny SW04 pha phy phx _StringWidth pla cmp EntryWidT2 ;save widest string in device info table bcc SW05 sta EntryWidT2 SW05 clc ;bump index to next table entries lda XSave adc #32 sta XSave bra SW01 SW06 lda #30+5+5 ;set bottom window coordinate clc ; (30=top, 5=top and bottom margins) SW07 adc #9 ; (9=pixels per row) dec EntryNum bne SW07 sta wSize+4 clc ;set right window coordinate lda EntryWidT1 ; and start of 2nd column adc #30*2 ; (30=margins and space between columns) sta Col2Left adc EntryWidT2 adc #30 sta wSize+6 rts ;................................................................ ; ; SetWindSize data: ; EntryWidT1 ds 2 ;widest entry in device name table EntryWidT2 ds 2 ;widest entry in device info table EntryNum ds 2 ;number of table entries end ***************************************************************** * ShowDevices start * * Display device information: * ***************************************************************** using Globals _GetPrefixGS PfxParm ;get current prefix zero bcc SD01 ;no error dc h'00' ;crash (should never come here) SD01 lda #5 ;leave 5-pixel space on top of window sta v stz XSave ;zero table index save location SD02 ldx XSave ;get index to table entry lda DevNameTbl,x ;get length byte of P-string in table and #$FF bne SD03 ;more table entries rts ;no more table entries so exit SD03 clc ;bump vertical coordinate to next line lda v ; (9=pixels per line) adc #9 sta v PushWord CheckPosn ;move pen to check mark position PushWord v _MoveTo jsl CheckCurDev ;check for currently active device bcc SD04 ;present entry is active device PushWord #$20 ;place space in front of entry if bra SD05 ; it represents inactive device SD04 PushWord #$12 ;check active device SD05 _DrawChar PushWord #$20 ;it takes 2 spaces to wipe _DrawChar ; out 1 check mark PushWord Col1Left ;move pen to 1st column coordinates PushWord v _MoveTo ldy #^DevNameTbl ;display name of device clc lda XSave adc #DevNameTbl phy pha _DrawString PushWord Col2Left ;move pen to 2nd column coordinates PushWord v _MoveTo ldy #^DevInfoTbl ;display pathname or device description clc lda XSave adc #DevInfoTbl phy pha _DrawString clc ;set index to next table entry lda XSave adc #32 sta XSave brl SD02 ;loop back for another entry ;................................................................ ; ; Check for currently active device: ; ; Exit: carry clear = active device, carry set = inactive device. ; CheckCurDev ldx XSave lda DevInfoTbl,x ;match volume name of block device with and #$FF ; volume name of current prefix tay ; -index GetPrefix buffer clc adc XSave tax ; -index device info table shortm lda pfxNameStr+2,y cmp #':' bne NotCurDev CCD01 dex dey beq GotCurDev lda pfxNameStr+2,y cmp #$60 ; -ensure upper case comparisons bcc CCD02 and #$DF CCD02 cmp DevInfoTbl+1,x beq CCD01 NotCurDev longm ;no match means that present table entry sec ; is not the currently active device rtl GotCurDev longm ;match means that present table entry clc ; is the currently active device rtl ;................................................................ ; ; ShowDevices data: ; v ds 2 ;vertical drawing position end ***************************************************************** * Globals data * * Global data: * ***************************************************************** OpenFlag ds 2 ;open flag: NE=open, EQ=closed WindowPtr ds 4 ;ptr to NDA window's GrafPort XSave ds 2 ;value of table entry index CheckPosn dc i2'15' ;position of check mark (active device) Col1Left dc i2'30' ;left margin of column 1 Col2Left ds 2 ;left margin of column 2 DevNameTbl anop ;device name table ds 32*16+2 ;max name size=32 bytes, max entries=16 DevInfoTbl anop ;device pathname/description table ds 32*16 ;max entry size=32 bytes, max entries=16 WindowRec anop ;parameter list for NDA window dc i2'wRecEnd-WindowRec' ;byte size of table dc i2'%1100000010100000' ;description of window frame dc i4'wTitle' ;ptr to title string dc i4'0' ;reference constant dc i2'0,0,0,0' ;zoom size dc i4'wColorTable' ;ptr to color table dc i2'0,0' ;offset of content area from data area dc i2'0,0' ;height and width of data area dc i2'0,0' ;grow height and width dc i2'0,0' ;arrow scroll vert and horiz dc i2'0,0' ;page scroll vert and horiz dc i4'0' ;info bar reference constant dc i2'0' ;info bar height dc i4'0' ;ptr to frame definition procedure dc i4'0' ;ptr to info bar defProc dc i4'0' ;ptr to content update defProc wSize dc i2'30,20,170,600' ;coordinates of window (T,L,B,R) dc i4'-1' ;plane (front) dc i4'0' ;ptr to memory (handled by Memory Mgr) wRecEnd anop wTitle str ' System Devices ' wColorTable anop ;color table for NDA window dc i2'$0000' ;frame dc i2'$0F0F' ;title string and inactive title bar dc i2'$0144' ;active title bar dc i2'$0000' ;grow box and alert's middle outline dc i2'$0000' ;info bar and alert's inside outline PfxParm anop ;GetPrefix parameter list (GS/OS class 1) dc i2'2' ;pCount = 2 dc i2'0' ;prefix number zero dc i4'pfxBuf' ;ptr to prefix result buffer DInfoParm anop ;DInfo parameter list (GS/OS class 1) dc i2'8' ;pCount = 8 devNum dc i2'0' ;device number dc i4'devNameBuf' ;ptr to device name result buffer charistics dc i2'0' ;characteristics of device dc i4'0' ;total blocks on block device dc i2'0' ;slot number dc i2'0' ;unit number dc i2'0' ;version of device driver devID dc i2'0' ;device ID VolumeParm anop ;Volume parameter list (GS/OS class 1) dc i2'2' ;pCount = 2 dc i4'devNameStr' ;device name input string dc i4'volNameBuf' ;ptr to volume name result buffer devNameBuf anop ;device name result buffer dc i2'35' ;buffer size word devNameStr ds 2+31 ;string length word + name chars volNameBuf anop ;volume name result buffer dc i2'21' ;buffer size word volNameStr ds 2+17 ;string length word + name chars pfxBuf anop ;prefix zero result buffer dc i2'70' ;buffer size word pfxNameStr ds 2+66 ;string length word + name chars end   MACRO &lab _BlockMove &lab ldx #$2B02 jsl $E10000 MEND MACRO &lab _DrawChar &lab ldx #$A404 jsl $E10000 MEND MACRO &lab _DrawString &lab ldx #$A504 jsl $E10000 MEND MACRO &lab _GetPort &lab ldx #$1C04 jsl $E10000 MEND MACRO &lab _MoveTo &lab ldx #$3A04 jsl $E10000 MEND MACRO &lab _SetPort &lab ldx #$1B04 jsl $E10000 MEND MACRO &lab _StringWidth &lab ldx #$A904 jsl $E10000 MEND MACRO &lab _BeginUpdate &lab ldx #$1E0E jsl $E10000 MEND MACRO &lab _CloseWindow &lab ldx #$0B0E jsl $E10000 MEND MACRO &lab _EndUpdate &lab ldx #$1F0E jsl $E10000 MEND MACRO &lab _NewWindow &lab ldx #$090E jsl $E10000 MEND MACRO &lab _SetSysWindow &lab ldx #$4B0E jsl $E10000 MEND MACRO &lab pushlong &addr,&offset &lab ANOP LCLC &C LCLC &REST &C AMID &addr,1,1 AIF "&C"="#",.immediate AIF "&C"="[",.zeropage AIF C:&offset=0,.nooffset AIF "&offset"="s",.stack pushword &addr+2,&offset pushword &addr,&offset MEXIT .nooffset pushword &addr+2 pushword &addr MEXIT .immediate &REST AMID &addr,2,L:&addr-1 dc I1'$F4',I2'(&REST)|-16' dc I1'$F4',I2'&REST' MEXIT .stack pushword &addr+2,s pushword &addr+2,s MEXIT .zeropage ldy #&offset+2 pushword &addr,y ldy #&offset pushword &addr,y MEND MACRO &lab pushword &SYSOPR &lab ANOP AIF C:&SYSOPR=0,.b LCLC &C &C AMID "&SYSOPR",1,1 AIF ("&C"="#").AND.(S:LONGA),.immediate lda &SYSOPR pha MEXIT .b pha MEXIT .immediate LCLC &REST LCLA &BL &BL ASEARCH "&SYSOPR"," ",1 AIF &BL>0,.a &BL SETA L:&SYSOPR+1 .a &REST AMID "&SYSOPR",2,&BL-2 dc I1'$F4',I2'&REST' MEND MACRO &lab str &string &lab dc i1'L:&string',C'&string' MEND MACRO &lab longm &lab ANOP rep #%00100000 longa on MEND MACRO &lab shortm &lab ANOP sep #%00100000 longa off MEND MACRO &lab _DInfoGS ¶ms &lab jsl $E100A8 dc i2"$202C" dc i4"¶ms" MEND MACRO &lab _GetPrefixGS ¶ms &lab jsl $E100A8 dc i2"$200A" dc i4"¶ms" MEND MACRO &lab _VolumeGS ¶ms &lab jsl $E100A8 dc i2"$2008" dc i4"¶ms" MEND