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/ ;/GRAPHICS.SWITCH$0 % %+GS.LOADER.S6K % LINE.MAGICIAN=- - /LINE.MAGICIAN.S> - - MAKE.A.MAPD% o#MSGE% 4'MSG.ASMH@(% ('NIBMENU^ --PROCOMh% i&PRODOSi }<RESTORE- - ,RESTORE.DEMO- - )RESTORE.So- - %SETUP4- - +SPREADSHEET\,'~./SPREADSHEET.OBJ o,'0$'STARTUP ®3s,.STARTUP.SCREEN®09`®4SUPER.CURSOR- - .SUPER.CURSOR.S - - +VISIT.MON.S )% ٰ)WORKS.OBJ'% +WORKS.OBJ.S % / /WORKS.PROCESSOR%  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 %&'()*+,-./012345 *********************; * GRAPHICS.SWITCH *X * BY THOMAS DORRIS *u( * COPYRIGHT(C) 1989 *2 * MICROSPARC, INC. *< * CONCORD, MA 01742 *F *********************P ZD$(4):MN$(50),CL(16),DR$(14),SL(14),DR(14) d(21) n4 x10:"ONE MOMENT...":1770 :6:"THE GRAPHICS SWITCHER"::"BY TOM DORRIS":10:"COPYRIGHT(C) 1989":"MICROSPARC, INC." 24:"PRESS RETURN TO CONTINUE";:A$ FIND VALID SLOT AND DRIVE NUMBERS I17:(48912I2)172(48913I2)222180X DRDR1:DR$(DR)"SLOT "(I)", DRIVE 1":SL(DR)I:DR(DR)1c I3Ă (48928I2)172(48929I2)222210 DRDR1:DR$(DR)"SLOT "(I)", DRIVE 2":SL(DR)I:DR(DR)2 RT1:1500 240G ML$(1)"SELECT NEW DISK/PREFIX":ML$(2)"VIEW HI-RES SCREEN":ML$(3)"LOAD HI-RES SCREEN" ML$(4)"SAVE HI-RES SCREEN":ML$(5)"DEFINE COLOR PALETTE":ML$(6)"MOVE DISPLAY WINDOW" ML$(7)"SELECT SUPER HI-RES PICTURE":ML$(8)"CONVERT SUPER HI-RES PICTURE":ML$(9)"CATALOG DISK":ML9' I916:CL(I)1::XF00 LM1 ":5:1:"THE GRAPHICS SWITCHER":5:"COPYRIGHT(C) 1989 MICROSPARC, INC.":5:4:"USE ARROW KEYS TO MOVE MARKER":5:"PRESS RETURN TO MAKE SELECTION" ,5:6:"------------------------------":11:19:"PRESS ESCAPE TO EXIT": 30 -'s( 6EF1| @5:21:"PREFIX: "PR$:5:"SUPER HI-RES PICTURE: "PC$:(PC$)Ė26::22:"NONE" JQ$"EXIT TO BASIC":CPLM TI1ML:MN$(I)ML$(I)::MNML:1320 ^ES380h:5:10:"DO YOU WANT TO QUIT ?";:A$:A$"Y"A$"y"ė:23:r290"|RT2,LMCPZCP1500,420,440,500,620,730,940,810,1740o DISPLAY SCREEN49237,0:49232,0:49239,0:A$::290 LOAD STANDARD HI-RESBL17:1180: STANDARD HI-RES PIC LENGTH IS 17 BLOCKSES290:2060.D$"BLOAD "PR$;A$;",A$4000":216,0=A$::290_ SAVE STANDARD HI-RES SCREENe:12:2:"SAVE HI-RES SCREEN":EF12060D$"PREFIX "PR$:216,07:19:"PRESS RETURN ALONE TO EXIT" &5:5:"TYPE NAME TO SAVE HI-RES SCREEN AS:"!05:7:"-->";A$1:(A$)290<D2060ZN:5:5:"SAVING FILE..."XD$"BSAVE "PR$;A$;",A$4000,L$1FFF":216,0:290b COLOR PALETTE DEFINITIONl:14:2:"COLOR PALETTE"v3:9:"COLOR STATE COLOR STATE" X116:700:57:23:"PRESS RETURN ALONE TO EXIT"q7:21:"ENTER COLOR TO CHANGE --";:">";A$:(A$)290(A$)660(A$)16(A$)1660X((A$)):CL(X)(CL(X))::700::700:660 420(X8)(X10):10X8(X8):X" --- ";:CL(X)ĺ"ON ":"OFF":5 OFFSET DISPLAY WINDOWT:13:2:"DISPLAY WINDOW"5:5:"CURRENT WINDOW OFFSET IS:"::8:XF" PIXELS"7:20:"PRESS RETURN ALONE TO EXIT" 5:10:"ENTER NEW PIXEL OFFSET UP TO 40":5:"(OFFSET MUST BE AN EVEN NUMBER)"65:13:"-->";:868:"";A$:(A$)290a X((A$)):X40X0(X2(X2))770oXFX:290  CONVERT SELECTED PICTURE*(PC$)ė:5:5:"NO PICTURE HAS BEEN SELECTED"::5:"PRESS RETURN TO CONTINUE";:A$:2904P$PR$:A$PC$:8400>D$"PREFIX,S3,D2":P$"/RAM/":A$"PIC";H2060XRD$"VERIFY "P$;A$:216,0u\252,XF: WINDOW OFFSETf POKE FILENAME FOR MLIp24576,(A$):I1(A$):24576I,((A$,I,1)):zD$"PREFIX "P$: SET PREFIX FOR MLI CALLS'I116:24671I,CL(I):: DEFINE COLOR PALETTED25856: CONVERT PICTURESA$::290u SELECT SUPER HI-RES PICTUREBL65:1180: SUPER HI-RES PICTURE IS 65 BLOCKS LONGES290PC$A$(PC$,1)" "PC$(PC$,(PC$)1):97010002D$"PREFIX,S3,D2":216,0:1010: CHECK FOR RAMDISKB216,0:290m MOVE SUPER HI-RES PICTURE TO RAMDISK:5:5:"ONE MOMENT...":::5:"MOVING PICTURE TO RAM"A$"PIC":1050D$"DELETE PIC"T$"BIN":1130$I14: LOAD SUPER HI-RES FILE IN FOUR SECTIONS,.X(I1)8192\8D$"BLOAD "PR$;PC$;",A$4000,B"X",L8191,T"T$BD$"BSAVE "A$",A$4000,B"X",L8191": SAVE EACH SECTION AS IT'S LOADEDLV216,0`290jT$"$C1":2060t1060~ *********** SUBROUTINES ***********W:14:2:"FILE SELECTOR":11:19:"PRESS ESCAPE TO EXIT"b2060}D$"PREFIX "PR$:216,01260D$"OPEN "PR$",TDIR":D$"READ "PR$:MN0A$:(A$,5)"BLOCK"1260((A$,25,5))BLMNMN1:MN$(MN)(A$,2,15) 1230#216,0:D$"CLOSE"MNė:5:5:"SORRY, UNABLE TO FIND ANY FILES":5:"IN CURRENT DIRECTORY.":5:10:"PRESS RETURN";:A$:ES1:290Q$"EXIT TO MAIN MENU":1310 A$MN$(CP):CP1(RNMN1:MN$(RN)Q$2PS1:ST10:ES0:STRNSTRNK<SBPS1:IPSST:5:7ISB:MN$(I);30(MN$(I))):hF:5:7CPSB:MN$(CP):P(16384)1281360ZA(16384)128:16368,A:A13A8A21A10A11A271360d5:7CPSB:MN$(CP)nA27ES1:xA21A101440,CPCP1:CPSTĭCPRNCP1:1330MCPSTPSPS1:STST1:1340W1350fA131480CPCP1:CPPSĭPS1CPRN:STRN:PSST9:PSPS((PS1)1(PS1)1PS):1340CPPSPSPS1:STST1:13401350CPRNES1#:10:2:"SELECT DRIVE LOCATION":EF2>Q$"EXIT TO MAIN MENU"b11:19:"PRESS ESCAPE TO EXIT"I1DR:MN$(I)DR$(I)::MNDR:1310ES290A$MN$(CP):S((A$,6,1)):D((A$,1))2060"D$"PREFIX,S"S",D"D:D$"PREFIX":PR$,216,0D6:5:5:"ONE MOMENT..":D$"OPEN "PR$",TDIR":D$"READ "PR$:MN0O@1640mJA$:(A$,5)"BLOCK"1640T(A$,18,3)"DIR"MNMN1:MN$(MN)(A$,2,15)^1610h216,0:D$"CLOSE"rMN01720|:6:2:"SELECT DESIRED SUB-DIRECTORY":11:19:"PRESS ESCAPE TO EXIT"<5:17:"CURRENT PREFIX: "PR$_Q$">>ACCEPT<<":1310:ES1720nA$MN$(CP)(A$,1)" "A$(A$,(A$)1):1700PR$PR$A$"/":1590RT1240290:2060D$"CAT"PR$::"PRESS RETURN";:A$:216,0:290 :I0261:A:25856I,A:CCA::C30529ıd:5:5:"ERROR IN DATA STATEMENTS!!" 32,216,243,169,1,133,250,169,0,133 7,133,251,32,17,244,169,3,141,85 96,169,0,141,86,96,141,88,96,169  96,141,87,96,169,97,141,89,96,169( & 1,141,90,96,32,0,191,200,85,96N 0 240,3,133,6,96,162,7,32,240,246t : 169,4,141,85,96,169,1,141,86,96 D 169,0,141,87,96,141,89,96,141,91 N 96,141,92,96,169,32,141,90,96,169 X 112,141,88,96,32,223,101,165,252,240!b 9,32,238,101,198,252,198,252,208,247D!l 32,238,101,133,253,41,240,24,106,106n!v 106,106,32,155,101,176,9,165,253,41! 15,32,155,101,144,230,169,1,141,85! 96,141,86,96,32,0,191,204,85,96! 169,0,133,6,96,170,189,96,96,240 " 8,164,251,177,38,5,250,145,38,63" 250,16,6,169,1,133,250,230,251,165[" 251,201,40,208,36,169,20,133,6,32" 238,101,198,6,208,249,169,0,133,6" 133,251,169,1,133,250,230,7,165,7" 32,17,244,165,7,201,192,208,2,56" 96,24,96,32,0,191,202,85,96,169# 0,133,8,169,112,133,9,96,165,8D# 208,9,165,9,201,144,208,3,32,223j# 101,160,0,177,8,230,8,208,2,230u# 9,96# :ER(222):216,0#5:5:"ERROR #"ER" HAS OCCURED."# ER9ER17ER12ER6ER8ER3ER42110H$*5:8:"THIS ERROR IS NOT DEFINED. THIS":5:"INDICATES A ERROR WITHIN THE":5:"PROGRAM ITSELF."R$42240a$>ER32130$H5:8:"THIS INDICATES THAT NO DEVICE IS":5:"CONNECTED.":2240$RER42150V%\5:8:"THIS INDICATES THAT AN ATTEMPT":5:"TO WRITE TO A WRITE-PROTECTED DISK":5:"HAS OCCURED. REMOVE WRITE":5:"PROTECTION AND TRY AGAIN.":EF3:2240e%fER62170%p5:8:"THIS MEAN THAT A SPECIFIED DISK":5:"CANNOT BE FOUND. REINSERT OLD DISK":5:"OR SELECT A NEW ONE.":2240%zER82190|&5:8:"THIS IS AN I/O ERROR. THIS":5:"USUALLY MEANS THERE IS A BAD BLOCK":5:"ON THIS DISK OR THE DISK DRIVE DOOR":5:"IS OPEN.":2240&ER92210'5:8:"THIS MEANS THAT THIS DISK IS FULL.":5:"INSERT ANOTHER DISK, RESELECT THE":5:"SLOT AND DRIVE, AND TRY AGAIN.":2240'ER122230a'5:8:"THIS MEANS THAT NO BUFFERS ARE":5:"AVAILABLE.":2240'5:8:"THIS MEANS THAT THIS DIRECTORY IS":5:"FULL. EITHER SELECT ANOTHER DISK":5:"OR SELECT ANOTHER DIRECTORY."(5:15:"PRESS RETURN TO CONTINUE:";:A$:EF1290!(EF21500/(EF3510789:;< Ӯ é ì î Ĭ ҍǠԠՠҠՠ̠ՠȠՠӠՠˠՠԠՠƠՠÍРՠč ӍԠՠԠՠɠՠưҲՠƳĸΠՠƴҠՠƶưҠҲ堲ˍҍԍҠΠӠ卍 䍍ԍԫԫԫԫϠ򠨱˩ԫҠɠ䍠ؠø΍ؠԠѠˍԍӍˠؠҠҍ 䍍ԍԫԫԫύԫԫԫɍԫ򍍠ҠĠƠ㍠ѠԠ嬠˵ҠōàƠà썠àƠҠӠ占Š˵ԠҠŠ占ЍĠưÍҍҍҍҍҠԠӠōЍĠƠҠԍàԍŠōԍԫҠɍؠàōؠԠԍӍԠ؍ԬؠѠΠﬠ٠Ԡө٠占ˠө٠Π̠ˠ썠̠ϠˍàԠϠԍРŠčԍҠҠŠàԠ占ŠҍԍԍˍàҍҍҠΠ占ҍР忍ŠĠﬠ獠ÍӍĠÍӍĠҠɠĠ䍠ؠčؠԠ̍ȍӍŠ̍ŠčȍРŠčҠčĠ٠ٍ̩à̍ŠҍàȍҠӍgh8ȱ`ȱ.*iȱɲee `gh8ȱ`ȱ*8ȱɲee `?@ABC* * LINE.MAGICIAN Source Code * BY DAVID HARRIS * COPYRIGHT (C) 1989 * MICROSPARC, INC. * CONCORD, MA 01742 * ORG $8000 PROGRAM EQU $67 ; PROGRAM START POINTER LINE EQU $FB ; POINTER TO PRESENT LINE NEXT EQU $FD ; POINTER TO NEXT LINE REM EQU #$B2 ; TOKEN FOR REM * Main Entry Point MAIN LDA PROGRAM ; GET START LSB STA LINE LDA PROGRAM+1 ; GET START MSB STA LINE+1 LOOP LDY #$00 ; INDIRECT INDEXING CLC LDA (LINE),Y ; LOW POINTER TO NEXT LINE STA NEXT BNE :1 ; NOT A NULL POINTER SEC ; POSSIBLE NULL POINTER :1 INY LDA (LINE),Y ; HIGH POINTER TO NEXT LINE STA NEXT+1 BNE GOOD ; NOT A NULL POINTER BCC GOOD ; NOT A NULL POINTER RTS ; END OF PROGRAM GOOD INY INY ; SKIP LSB OF LINENUM LDA (LINE),Y ; MSB OF LINENUM CMP #$F7 ; GREATER THAN 63232 BLT NOSHIFT ; NO--NEXT LINE CMP #$FA ; GREATER THAN 63999 BGE NOSHIFT CLC ADC #$04 ; MOVE ABOVE 63999 STA (LINE),Y ; AND REPLACE INY LDA (LINE),Y ; GET NEXT BYTE CMP #REM ; IS IT A REM BNE NOSHIFT ; NO, SKIP TO NEXT LINE TYA CLC ADC LINE ; SET LINE PTR TO POSITION STA LINE LDA #$00 ADC LINE+1 STA LINE+1 LDY #$00 CHANGE LDA (LINE),Y ; CHANGE ` FOR BACKSPACE BEQ NOSHIFT ; DONE WITH LINE CMP #$60 ; IS IT A ` BNE :1 ; NO LDA #$08 ; BACKSPACE STA (LINE),Y ; REPLACE ` :1 INY ; NEXT BYTE CLC BCC CHANGE ; ALWAYS NOSHIFT LDA NEXT ; NEXT LINE STA LINE LDA NEXT+1 STA LINE+1 CLC BCC LOOP ; ALWAYS * Undo Entry Point UNDO LDA PROGRAM ; GET START LSB STA LINE LDA PROGRAM+1 ; GET START MSB STA LINE+1 LOOP2 LDY #$00 ; INDIRECT INDEXING CLC LDA (LINE),Y ; LOW POINTER TO NEXT LINE STA NEXT BNE :1 ; NOT A NULL POINTER SEC ; POSSIBLE NULL POINTER :1 INY LDA (LINE),Y ; HIGH POINTER TO NEXT LINE STA NEXT+1 BNE GOOD2 ; NOT A NULL POINTER BCC GOOD2 ; NOT A NULL POINTER RTS ; END OF PROGRAM GOOD2 INY INY ; SKIP LSB OF LINENUM LDA (LINE),Y ; MSB OF LINENUM CMP #$FA ; LESS THAN 63999 BLT NOSHIFT2 SEC SBC #$04 ; MOVE BELOW 63999 STA (LINE),Y ; AND REPLACE INY LDA (LINE),Y ; GET NEXT BYTE CMP #REM ; IS IS A REM BNE NOSHIFT2 ; NO, SKIP TO NEXT LINE TYA CLC ADC LINE ; SET LINE POINTER TO AFTER REM STA LINE LDA #$00 ADC LINE+1 STA LINE+1 LDY #$00 CHANGE2 LDA (LINE),Y ; CHANGE BACKSPACE FOR ` BEQ NOSHIFT2 ; DONE WITH LINE CMP #$08 ; IS IT A BACKSPACE BNE :1 LDA #$60 ; ` STA (LINE),Y :1 INY ; NEXT BYTE CLC BCC CHANGE2 ; ALWAYS NOSHIFT2 LDA NEXT ; NEXT LINE STA LINE LDA NEXT+1 STA LINE+1 CLC BCC LOOP2 ; ALWAYS LST OFF  L0:L$" ------- ":V$"| |":(4)"PR#1"::LL1:P14:S16:I16:L$;:5(I6));:::LL1:I16:LL1:J16:V$;5(J6));::::I16:L$;:5(I6));::I13:LL1:::(12(L57)):LL(L56):S:P:(4)"PR#0" FGU ,@ UKH "HH "H "HH " " " " " " " d R  p & p0   V Zp z0 " " " " " "kZ0)@`HO "hH "R "0z(`0H "m ")HF ""F " " "H ""h)ɛ`H " Message Number: " HJ &"J "ᩎH " ) "B "`V/O2OERHRdmgmwFzFFFJJJJ,)/)9B<BIJKLMNOPQRSTUVWXYZ[\]*************************** * MSG Source Code * * by Sandy Mossberg * * Copyright (C) 1989 * * by MicroSPARC, Inc. * * Concord, MA 01742 * * * * APW Environment * * Run under APW Shell * *************************** SETCOM 36 ;comment line at column 38 MCOPY MSG.MAC ;macro definitions file KEEP MSG ;load file MATPtr GEQU $00 ;ptr to Message Address Table (MAT) MTTPtr GEQU $04 ;ptr to char in Message Text Table (MTT) MTTPtrSave GEQU $08 ;ptr to start of msg in MTT MsgCount GEQU $0C ;entry offset in MAT MSGPOINTER GEQU $E100C0 ;vector of Message Address Table Msg_Code START ***| MAIN CODE |************************************************* ;................................................................ ; ; Equate data bank with program bank: ; PHK PLB ;................................................................ ; ; Save current I/O configuration on stack: ; PHA ;space for input device code PushLong #0 ;space for input slot/vector _GetInputDevice PHA ;space for input AND mask PHA ;space for input OR mask _GetInGlobals PHA ;space for output device code PushLong #0 ;space for output slot/vector _GetOutputDevice PHA ;space for output AND mask PHA ;space for output OR mask _GetOutGlobals ; Set slot 3 BASIC-type text I/O: PushWord #0 ;BASIC device type PushLong #3 ;Input from slot 3 _SetInputDevice PushWord #$FF ;AND mask (no change) PushWord #$80 ;OR mask (set hi bit) _SetInGlobals PushWord #0 ;BASIC device type PushLong #3 ;Output to slot 3 _SetOutputDevice PushWord #$FF ;AND mask (no change) PushWord #$80 ;OR mask (set hi bit) _SetOutGlobals PushWord #0 ;init input device _InitTextDev PushWord #1 ;init output device _InitTextDev ;................................................................ ; ; Point at Message Address Table: ; LDA MSGPOINTER ;set lo order bytes STA MATPtr ; of MAT LDA MSGPOINTER+2 ;set hi order STA MATPtr+2 ; of MAT STA MTTPtr+2 ; and MTT STA MTTPtrSave+2 STZ MsgCount ;zero entry offset for MAT ;................................................................ ; ; Point at Message Text Table: ; SetMTTPtr LDA MsgCount CMP #$00FE ;254 messages in MTT BCS Exit ;all messages printed so exit ASL A ;double index to 2-byte entries TAY ; in MAT and transfer to Y-reg LDA [MATPtr],Y ;get address of 1st message in MTT STA MTTPtr ; and save in both STA MTTPtrSave ; ptrs to MTT ;................................................................ ; ; Print message on screen (lifted from Visit Monitor): ; ; Print individual characters: JSR PrintCount ;print message number SEP #$70 ;set m,x,v flags LONGA OFF ; 8-bit accum and memory LONGI OFF ; 8-bit index LDA [MTTPtr] ;get 1st char in message BEQ BumpPtr ;zero keeps v-set for MouseText CMP #$20 BCC Repeat ;repeat signal encountered CLV ;v-clear signals no MouseText NextChar LDA [MTTPtr] ;get next char in message BEQ EndMsg ;end of message CMP #$20 BCC Repeat ;repeat signal encountered BVS CharOut ;allow MouseText BMI CharOutEnd ;print last char in message ORA #$80 ;disallow MouseText CharOut JSR PrintChar ;output char BumpPtr INC MTTPtr ;point to next char BNE NextChar INC MTTPtr+1 BRA NextChar ; End message: CharOutEnd JSR PrintChar ;output final char in message EndMsg JSR PrintCode ;show raw message code BCS Exit ;abort signal given INC MsgCount ;point to next MAT entry BRA SetMTTPtr ;back for another message ; Print repeat characters: Repeat TAY ;Y-reg counts repetitions of next char INC MTTPtr ;point to next char BNE RepeatChar INC MTTPtr+1 RepeatChar LDA [MTTPtr] ;get char to repeat PHY ;save counter BVS RepeatOut ;allow MouseText ORA #$80 ;disallow MouseText RepeatOut JSR PrintChar ;output repeat char PLY ;retrieve counter DEY ;reduce count BNE RepeatChar ;keep keep repeating BRA BumpPtr ;exit repeat loop ;................................................................ ; ; Restore entry I/O configuration and exit program: ; Exit LONG ;clear m,x flags _SetOutGlobals ;input parameters on stack _SetOutputDevice _SetInGlobals _SetInputDevice PushWord #0 ;init input device _InitTextDev PushWord #1 ;init output device _InitTextDev RTL ***| SUBROUTINES |*********************************************** ;................................................................ ; ; Print character: ; PrintChar PHP ;save entry status PHY ;save Y-counter LONG ;clear m,x flags AND #$00FF ;zero hi byte CMP #$0040 BCC PCh1 ;not a MouseText char CMP #$0060 BCS PCh1 ;not a MouseText char PHA ;codes $40-$5F signify WRITESTR MTextOn ; MouseText chars so PLA ; turn on MouseText mode PCh1 WRITECH ;output char WRITESTR MTextOff ;disable MouseText mode SHORT ;set m,x flags PLY ;restore Y-counter PLP ;restore status RTS ;................................................................ ; ; Print raw message code: ; ; Print hex characters: PrintCode LONG ;clear m,x flags WRITECH #$9D ;clear to end of line WRITELN ;print CR PCo1 LDA [MTTPtrSave] ;get message char AND #$00FF ;zero hi byte PHA ;hex number PushLong #HexNum ;ptr to ASCII result PushWord #2 ;length of ASCII string _Int2Hex ;get ASCII of hex number PushLong #HexNum ;ptr to ASCII number _WriteCString ;print error code INC MTTPtrSave ;bump ptr to message char LDA MTTPtrSave CMP MTTPtr ;have we reached end of message? BCC PCo1 ;no, back for BEQ PCo1 ; another char ; Check for ESC abortion: WRITELN ;print CR WRITELN ;print CR PHA ;space for result PushWord #0 ;no echo _ReadChar ;get keypress PLA ;retrieve char AND #$00FF ;zero hi byte CMP #$009B ;ESC char BEQ PCo2 ;CS = abort program CLC ;CC = continue to next message PCo2 RTS ;................................................................ ; ; Print message number: ; PrintCount WRITECH #$8F ;set inverse text mode WRITESTR #' Message Number:' LDA MsgCount ;get MAT offset INC A ;bump to get message number PHA ;line number PushLong #DecMsgNum ;ptr to ASCII result PushWord #3 ;length of ASCII string PushWord #0 ;unsigned number _Int2Dec ;get ASCII of decimal number PushLong #DecMsgNum ;ptr to ASCII number _WriteCString ;print line number (right justified) WRITECH #$8E ;set normal text mode WRITELN #' ' ;kill inverse mode WRITELN ;print CR RTS ***| STORAGE |*************************************************** HexNum DS 2 ;ASCII C-string of hex number DC H'A0 00' ;1 space + zero terminator DecMsgNum DS 3 ;ASCII C-string of decimal number DC H'A0 00' ;1 space + zero terminator MTextOn DC H'02 8F 9B' ;length byte + enable MouseText MTextOff DC H'02 8E 98' ;length byte + disable MouseText END _`abcdefgMAR. 1989 DISK (VOL 10/NO 3) 8 NIBBLECALC THE GRAPHICS SWITCHER VISIT MONITOR DESK ACCESSORY WORKS PROCESSOR LINE MAGICIAN SUPER CURSOR RESTORE YOUR DATA CHECKIT 5 NIBBLECALC RUN SPREADSHEET THE GRAPHICS SWITCHER RUN GRAPHICS.SWITCH WORKS PROCESSOR RUN WORKS.PROCESSOR RESTORE YOUR DATA RUN RESTORE.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 NIBBLECALC, remove all but the following files from a copy of this disk: SPREADSHEET SPREADSHEET.OBJ These programs are included on both the DOS 3.3 and ProDOS sides of this disk. The source code for these programs is on the DOS 3.3 side of this disk only. @ To create a work disk for THE GRAPHICS SWITCHER, remove all but the following file from a copy of this disk: GRAPHICS.SWITCH This program is included only on the ProDOS side of this disk. @ To create a work disk for WORKS PROCESSOR, remove all but the following files from a copy of this disk: WORKS.PROCESSOR WORKS.OBJ These programs are included only on the ProDOS side of this disk. @ To create a work disk for VISIT MONITOR DESK ACCESSORY, remove all but the following file from a copy of this disk: MSG 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 LINE MAGICIAN, remove all but the following file from a copy of this disk: LINE.MAGICIAN This program is found on both the DOS 3.3 and ProDOS sides of this disk. This program is not included as an option in the program menu because it requires special instructions. See the documentation for details. @ To create a work disk for SUPER CURSOR, remove all but the following files from a copy of this disk: SETUP SUPER.CURSOR This program is found on both the DOS 3.3 and ProDOS sides of this disk. This program is not included as an option in the program menu because it requires special instructions. See the documentation for details. @ To create a work disk for RESTORE YOUR DATA, remove all but the following files from a copy of this disk: RESTORE.DEMO RESTORE This program is found on both the DOS 3.3 and ProDOS sides of this disk. @ 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 March One- and Two-Liners. @ The source code files for the major assembly language programs have been included on this 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: SPREADSHEET1.S (MSI) SPREADSHEET2.S (MSI) MACLIB.S (MSI) GS.LOADER.S (MERLIN) WORKS.OBJ.S (MERLIN) VISIT.MON.S (APW) MSG.ASM (APW) LINE.MAGICIAN.S (MERLIN) SUPER.CURSOR.S (MERLIN) RESTORE.S (MERLIN) @ #  L$(99):D$(4):D$"CLOSE":D$"PREFIX":P$::"COMMAND:";C$:C$" ALL FILES? (Y/N):";:"";A$::A$"Y"ĺD$"OPEN"P$",TDIR":D$"READ"P$:I13:L$::I099:L$(I):(L$(I))0Ă A$"Y"ĺD$"CLOSE":34,2:J0I1:L$(L$(J),2,15):D$;C$;L$:L$:::"COMPLETED.":34,0:23 jklmnopqrstuvwxyz{|}~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`BYYZLYLYLY뿭` 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@)@vvȱ@Hȱ@Ah@@cve J) LL LJiB LJ) JxNhHHHHL(  ްƠx@BEOD  ް(`( C)CJJJl`B l-`J,~@~@}J@` ߩ%S @ ~`E hhhߺ0 h ߐ(     0 HϭߍLпllllhh8` Qu")T'P() ɺiLG )?      `l@Hȱ@IױHXATȱH ɯȩ׍̕5H)/@a)_ .0 :A[8@`,뎕׮Б` L` @>V)I38Pghם`K8`@Nȱ@O@ IiNȽבN)/ȩ/N`@[ WHJjjjhA I'KI؍0JHi 뎈`C8` @ 3N@) S莴 ⭱i`0 e; 뮈ٝ٘ 0 W,0 .H hȑNWȮّNW8`ٍّNί0NN` G8`F@ 0 P LK8`= >I8`FHGH hGhF܌ բFܽܕF芝ܝ 밶=> ?܅I m@IHHyHȘI Lܝ` @f@ n@Ю׍V)mיVʈ@tȱ@fȱ@prsiQ{R|V)5VI0ܢܽ lS'H* 7ghFG (JK L܅IU mHIH` wt tP0ST HVHQFRG 밳QR 밨J%܈G" T)Ii)܍U*܍H'ܮ( 4 䭐 $H %HFFHGHG 됬`R8`)` HHV` /Q'܅IHHVVЍV@`8 ` ͐% ΐQ8`܅I `S܍TU p8D`F` ilH)HFȍQHGR $%܍&܍!ܢ8* J8` L ܝA)I 'ܝ=`I8iUFSGT`I܅IH3H ( )ȱHί`Α8HeHI SB=0P ٙNٙLFQJʈ p猱`8m0`,0H hi PȽίhٍ0GF8yאFG  $0 S01 E8`100 e 0ʩ 谼 谷`12)1`0`Ȏi 0U`)8`ί` W G IؙJJ c: QLHIHI`JKJK`FHIG ( Ȣ؝؈JL)eKM`)` J }J͢ $0 ΑJFJL8`JGBJ \ FإG`BH \FإG`,H hHB؅F  ؅GxDE؍00C ް(`(8` L3J  B"L H  B 9ؙ` @ P8`K8`B8` O؈VJJJJحt) ) )Ю ЪGgF $ ᭔ع+ؠ >H  Wh8` 䮈ٽ ٬ؠ@` ( O )8`)i п`  H h)N$% LL L L >  .pJ덦 )@፩NJOK >iKKΥΥ IJΦ JФ̭JjHFIH HIGxKE ް((H hH h8`8@ȭ@L>쬉8NNO 8 ؍JL`RΥʱLN1MOMEKP/MEKΥLCL-M O,p莤eNNO(`JNKOL >/  .P L8 cؑJ`L@ȱ@ `@Nȱ@O`؝}}I}ؐ` rؽ؝} r 1 r؝}؈` ` H  \h)N@ C; L  >$ )bJ e ) H @hL ) # )حJjI~HI}H؊  PLKΥʱNLMO MЈMEKݸP%MEKΥL0 O, PeNNO O(` C  7 #2J}HI~HI؊ LQ  6` #A H} ع H~ ؙ؊ؠIhHIhH  iع `  عiعi` )؍0CGHFHBFGx ް(8hFhG`@4͔ L @Ai ׭2` . W#ع؍0 e讈)`.@+ i 8` L )߹0 )p )@ ) ȩ ؝O0QR 방 STQRFG 嬉؍i؍j؝k ؝f }V) }V )حP͝ `H@h`h``N8`  ) C⬉Ȣ؝@ݡ@ʈLO KIJHȢݡ)Jn 8 λ ؍ ؍ aH8 ع)ꭸJJJJ Ȣ؝I؈ >h(8H E h(8Hh(`ؑ@`@ȱ@ ` B@8ZV p鮈ٍٍٍvHٍu8ihjVJJJJV)V@` %I -t) 0@V)N8` @LL =@ 4ȹP8` %i` Bם0 4B B)( ȹ`8m8m@8` G8`F Pt)@N8`V)@J 4טyרםVV)׍Vgh 밑 %LȹL@ȅH@IL,0` G פֿ= eH.t)N 0 PghV)@LP8` a᮷ &֩VJKJ L䬈yٙ٭yٙ٩`K OEgFhG 6%&N   & ܮ `J HH hh` 0 @ LLL w`̻Yܝ ݝ0̻ȩFG   0` ܅F݅G ` wͬ 밽܅F݅G ` * w% L`L뮷HH &hFhG܍ݍ 8 `FHGH & hGhF`ݹܙ݊`@Bɼ>K@J5 9X(K XXK تKo`V8`no` I on I9XX`) HJJJh`OeNeO࿰ 9XАO`@ȭ@` ON fNJKO`HхhꭋILhH),kx8 (8` ԍ`@Ae Or88`zw! NIJK,-NOPQRSu' @   !"#$Ԡ͠ˠ(C)1983-87APPLELKL`BL Lެެެެެެެެެެެެެެެ(C)APPLE'83xLLM Mh@8nЍLޭ 0J @,,LZP׽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 { R ֐ }~`ZL **********************; * RESTORE.DEMO *X * BY VERN L. MASTEL *u( * COPYRIGHT(C) 1989 *2 * MICROSPARC, INC. *< * CONCORD, MA 01742 *F **********************PZ110 d(4)"BLOAD RESTORE,A$300":1013,76:1014,0:1015,3:120= n23:"RESTORE FILE NOT FOUND":b x:"RESTORE DEMO BY VERN MASTEL" "COPYRIGHT(C) 1989 MICROSPARC, INC." :"1) BANANAS":"2) ORANGES":"3) LETTUCE":"4) QUIT" 9::"ENTER YOUR CHOICE (1-4): ";:A$:A(A$):A1A4150 A4ė:23:' 210A108 F$,PRICE,P$e ::"YOU CHOSE ";F$:"AT ";PRICE;" ";P$ 23:"PRESS RETURN TO CONTINUE ";:16368,0:A$:120 "BANANAS",99,"CENTS PER BUNCH" "ORANGES",79,"CENTS PER POUND" "LETTUCE",89,"CENTS PER HEAD"******************************** * RESTORE Source Code * * By Vern L. Mastel * * Copyright(c) 1989 * * MicroSPARC, Inc. * * Concord, MA 01742 * * * * Merlin Assembler * ******************************** org $0300 jsr $dd7b ; Evaluate argument jsr $e752 ; Convert to integer ; and store it in $50,51 jsr $d61a ; Check for that line bcc error ; If not found, branch ; to Applesoft err restore lda $9b sbc #$01 sta $7d ; Put Address-1 of line lda $9c ; into $7d,&e sbc #0 sta $7e rts error ldx #$5a jmp $d412  ************************? * SETUP *^ * BY PAUL MEYERS *}( * COPYRIGHT (C) 1989 *2 * MICROSPARC, INC. *< * CONCORD, MA 01742 *F ************************P580 Z(718)169ĺ(4)"BRUN SUPER.CURSOR":216,0 d718$ n5 xCL(16353)L CL127CW40:150V CW80j I1CW:"*";: "*";:36,1CW:"*"; "*"; A$"SUPER.CURSOR":550 36,1CW:"*"; "*";:A$"By Paul Meyers":550 36,1CW:"*";+ "*";:A$"COPYRIGHT (C) 1989":550:36,1CW:"*";` "*";:A$"MICROSPARC, INC.":550:36,1CW:"*";z "*";:36,1CW:"*"; I1CW:"*";: : 36,0 C(963):36,0:10:"The current character is ";:C127CC128 "(C) ,L(964):11:868:"The speed is "L` 6F(965):12:36,0:868:"The flash option is ";:F128ĺ"on":330k @"off" JT(966):13:36,0:868:"The twirl option is ";:T127ĺ"on":350 T"off" ^:36,3:"1-Change character" h36,3:"2-Change speed" r36,3:"3-Change flash option"B |36,3:"4-Change twirl option"V 36,3:"5-Quit" 21:36,0:868:"Please enter choice:";:A$:A$:A(A$):A1A5ĺ(7):400 A420,440,460,490,530 570:"New character value:";N:N0N255420 963,N:270; 570:"New speed for the cursor:";S:S0S255440K 964,S:270 570:"Flash on? (Y/N):";:F$:F$"Y"F$"y"F$"N"F$"n"460 F$"Y"F$"y"Ĺ965,1:270 965,255:270 570:"Twirl on? (Y/N):";T$:T$:T$"Y"T$"y"T$"N"T$"n"4903T$"Y"T$"y"Ĺ966,255:270C966,1:270u570:"Are you sure?";:A$:A$"Y"ė:216,0:36,0:868:400&S((CW(A$))2)036,1S:A$;::36,0:21:868:3D:(7):"Disk error":"Please check disk or replace with disk that contains the file Super.Cursor"  ************************? * *^ * SPREADSHEET *}( * BY ROBERT T. YUILLE *2 * COPYRIGHT (C) 1989 *< * MICROSPARC, INC. *F * CONCORD, MA 01742 *P * * Z ************************. d INITIALIZATION> nG(16298)[ x8,0:9,0: NEWF & PRNTF D$(4):B$(7):E$(27):R$(13) Q$(17):ST6:DR1:PR$"":FL$"SPREADSHEET.OBJ" FADDR12299: FILENAME ($300B) BF17220: SSIDCODE($4344) ::E$Q$:2043,255:5:; :" NIBBLE SPREADSHEET"b :" BY ROBERT T. YUILLE" :" COPYRIGHT (C) 1989 " :" BY MICROSPARC, INC." 2240 : SET HIMEM : PD(48896)76:PD280 11264:D$R$D$:3402 768,32:769,248:770,190:771,169Y "772,106:773,32:774,245:775,190j ,776,96:768p 6: @ LOAD SS OBJECT FILE J: T2700 ^LK1:D$"BLOAD SPREADSHEET.OBJ" h216,0: RESET ERROR FLAG r: | INITIALIZE & READ MENU DATA :2 MITEMS:J0MITEMS:MENU$(J):U X$(1):X$(0)" ":X$(1)"-->"[ :l  MAIN MENUr : ::2400:2480 PX38:SX4:SESE(SE0):MXMITEMS:2320:Z20ĺB$:450 SE510,660,840,1060,1110,1160,1520,1690 :  START NEW DOCUMENT :3 (8)1İ2180:ESCF1450I 1780:ESCF1450j 8,0: SET NEWF FOR NEW FILEp v & 0(4)"PR#3": :2630 D12288: ENTRY ($3000) NPRF(9):PRF3560 XPRF0620 b35,23:570 lE$Q$:2043,255:450v: LOAD NEW DOCUMENT$:B(8)1İ2180:ESCF1450X1780:ESCF1450t8,0:N04:(BFN),0:1:21:"LOADING "FL$LK2:2480D$"BLOAD "FL$",A$4344"SSIDF0:N042(BFN)255Ă:750SSIDF1:N4:N132(BFN)0Ă:780.SSIDF1:N3: 216,0:SSIDF1MSG$"FILE ("FL$") IS NOT"R$"A SPREADSHEET FILE"::2130:6708,1: SET NEWF FOR LOADED FILE 540*:4 SAVE CURRENT DOCUMENT>:H:(8)0MSG$"THERE IS NO CURRENT DOCUMENT":2130:450<REF256(251)(250): MP ($FA)K\LNEFBF1Uf960ipD$"VERIFY "FL$z:5:"FILE: ("FL$") ALREADY EXISTS"13:"PRESS 'Y' TO REPLACE EXISTING FILE"::"PRESS 'N' TO RENAME FILE":10:"DO YOU WANT TO REPLACE":"THE EXISTING FILE: (Y/N)? ";#A$CA$"N"A$"n"Ĺ216,0:1000]A$"Y"A$"y"ī910mLK2:2480D$"DELETE "FL$1:21:"SAVING "FL$LK2:2480D$"BSAVE "FL$",A$4344,L"LN216,0:4501780:ESCF1450870: RENAME CURRENT DOCUMENT$:4(8)0840J$1780:ESCF1450S.540Y8:~B CONTINUE WITH CURRENT DOCUMENTL:V(8)0840`540j:t CHANGE PREFIX/SLOT/DRIVE~::"THE CURRENT SETTINGS ARE:" :PD1ĺ"PREFIX= "PR$:1190*"SLOT= "ST" DRIVE= "DRY:"PRESS THE NUMBER OF THE ITEM YOU WANT""TO CHANGE OR TO RETURN TO":"MAIN MENU"::10:"1. DRIVE":10:"2. SLOT"PD01250:10:"3. PREFIX"::10:"YOUR CHOICE? "; A$A$E$450-(A$)1310,1410C A$"3"PD11460M1260Ss(14:"WHICH DRIVE? (1/2) ";{2A$<A$"1"A$"2"ĺA$:DR(A$):1360F1330PLK3:2480ZPD1390dD$"VERIFY CHGSD,S"ST",D"DR:450nD$"PREFIX ,S"ST",D"DR:216,0)xD$"PREFIX":PR$:450J:10:"WHICH SLOT? (2-7) ";tPD1430::10:"WHICH SLOT? (3-6) ";|A$A$(51PD)A$(54PD)ĺA$:ST(A$):13201430 :8:"BE SURE YOUR PREFIX":"BEGINS AND ENDS WITH A /":11:"ENTER PREFIX ";PR$LK3:2480=D$"PREFIX "PR$:216,0:450C:V HELP SCREEN\:jD$"PR#3"p:34:"HELP SCREEN":6:" - As Indicated on Top":"Line of Screen":"ARROW KEYS - Move Spreadsheet Cursor Among Cells"G":3:"-A - Switches Between Automatic & Manual Calculation"|,:3:"-B - Blanks (Deletes) Current Cell"6:3:"-C - Calculates Spreadsheet"@:3:"-D - Deletes Current Row or Column"0J:3:"-F - Switches Between Decimal & Whole Number Format for Values"pT:3:"-I - Inserts Row or Column BEFORE Current One"^:3:"-P - Sends Current Spreadsheet Lines on Screen to Printer"h:3:"-W - Enters Change Column Width Mode"r2240:620|: QUIT:N:10:"ARE YOU SURE YOU WANT TO QUIT (Y/N)? ";VA$nA$"Y"A$"y"1740A$"N"A$"n"4501700:: FILENAME INPUT ROUTINE::N$"":ESCF01:2:"ENTER FILENAME FOR DOCUMENT"::$"PRESS '?' TO CATALOG DISK":Z" ON 1ST CHAR RETURNS TO":"MAIN MENU":" ON ANY OTHER CHARACTER":" CANCELS INPUT AND STARTS OVER":&"LEFT ARROW MOVES BACK ONE POSITION":0" ACCEPTS INPUT":17:"FILENAME: ";DC$:C$(8)1860+NC$E$450=XC$"?"1910MbLK4:2480tlD$("CATALOG",74PD):2240:1780vAN(49152)AN96AN123ANAN32AN65AN90MSG$"FIRST POSITION MUST BE A LETTER":2130:1780(AN):N$(AN)K11517:(11K):C$/C$E$K15::1780MC$(8)K1K15::1790~C$(8)KK1:(11K):" ":N$(N$,K):1960C$R$K15:2050AN(49152)AN96AN123ANAN32(AN65AN90)(AN48AN57)AN46MSG$"CHARACTER CANNOT BE USED IN FILENAME":2130:19606(AN):N$N$(AN)< C$R$MSG$"FILENAME TOO LONG, LIMIT - 15 CHARACTERS":2130:1780FL$N$ I015:FADDRI,0:*K1(N$):FADDR1K,((N$,K,1))128::4:> PRINT ERROR MESSAGESH:RB$:1:19:MSG$::R\"PRESS AND TRY AGAIN: ";:A$:1:19:958:Xf:wp ERASE CURRENT DOCUMENT?}z::ESCF0:8:"YOU ARE ABOUT TO ERASE":"THE CURRENT DOCUMENT."12:"ARE YOU SURE YOU":"WANT TO DO THIS? (Y/N) ";A$A$"N"A$"n"ESCF1:1A$"Y"A$"y"ı;2200m1:24:"PRESS TO CONTINUE: ";:A$:s: DATA FOR MAIN MENU:=  8,MAIN MENU,START NEW DOCUMENT,LOAD DOCUMENT,SAVE CURRENT DOCUMENT,RENAME CURRENT DOCUMENT,CONTINUE WITH CURRENT DOCUMENT,CHANGE PREFIX/SLOT/DRIVE,HELP SCREEN,QUITC :W  MENU HANDLER]  :g  SLSE  NSL:OSSL:2360:Z0:24:PX:868:16368,0 $ 24:PX:SL;:16384,128:Z(16384)128:Z49ZMX48SLZ48:NOS:2360:2330z!. Z(Z21Z10)(Z8Z11)10(Z13)20(Z27):Z2340:SLSLZ(Z10):SLSLMX(SLMX)MX(SL1):NOS:2360:Z102330:SESL:16368,0:!8 32N:SX:X$(SLOS);:!B :!L PRINT A MENU!V :!` :TL$MENU$(0)!j 2:((40(TL$))2):TL$"t I1MITEMS:32I:8:I". "MENU$(I):D"~ 24:1:"USE ARROWS/NUMBERS & PRESS RETURN";J" P" :c" DISK ERRORSi" :" :10:216,0:EN(222):EL(218)256(219)" EN6EL1400Č3288:450" (EN6EN7)LK3MSG$"PREFIX NOT FOUND":PR$"":2590# (EN6EN7)LK4MSG$"I/O ERROR":2590M# EN3MSG$"NO DEVICE IN SLOT":ST6:2590# EN6EN7MSG$"FILE ("FL$")"R$"IS NOT ON THIS DISK.":2590# EN8MSG$"I/O ERROR":2590# EN13MSG$"FILE ("FL$")"R$"IS NOT A BINARY FILE.":2590-$ EN9EN17MSG$"DISK OR DIRECTORY IS FULL.":2590h$ EN10MSG$"EXISTING FILE ("FL$") IS LOCKED.":2590$ "A SYSTEM ERROR #"EN" HAS OCCURRED":"AT LINE #"EL:MSG$"":LK2$ 2130:3288:LK340,450,1160,1780$( :$2 FORMULA EVALUATION ERRORS%< :%F 216,0:1403,0:24:868H%P (222)16ĺ"SYNTAX ERROR IN CELL: ";v%Z (222)53ĺ"ILLEGAL QUANTITY IN CELL: ";%d (222)69ĺ"NUMBER TOO LARGE IN CELL: ";%n (222)133ĺ"DIVISION BY ZERO IN CELL: ";&x ((238));(239)" - PRESS AND CORRECT THE CELL FORMULA ";/& A$:3288:540[& :"CANNOT FIND SPREADSHEET.OBJ.":23:L0庠庠ӠϠإ4C5C  v@ `  8 +9 w9 9 9 c;{ [ $ ACCC @ V8 ; ? ;r L07C $7CL0Т@ V8 ;@ V8_A V8RC bB V8L0PB V8 { 7ɛ4C5C <`ɈL3ɕL3ɊLP4ɋL4Ɂ RCIRCLT0ɂ < KɮGɨCɫ?ɭ;7 ?ɢL3L3 ;ޢA V8ۢ@ V8:Cɢ ? , BC9 ; 8) ;{, 8) >)Hi he ;{Ы;C ;`@: ? ;rL> > u > ; Ϥ` C >-=C ;LK>CLK> u u.0șȩ1L> `< ; < < 4 > ;0`+-*/^`):808 `A[8`) ? ` 8L?:CL? >$ 8 > 8 ?L?H 8 ?L?9:C ? 8 >q ?l :Cɮ 8 8 ?U 8 ?H:Cɮ{ 8 >ɮ-:Cɩ@C@Cɨ@Cɬɨ ɺ ?`8`:C ? > >ɮ ? 8ɮL?ɮ 8 > ? 8ɮЫL? > 8 ? > > 8 ?L?L?,6H7H76LC [ 8 O ,ɛNC h7h6`쩠캠婠庠3庠3庠3庠3庠 ԠƠ٠׺ξþ젭Š̭Ġ堭Š̭Ġ=庠=庠ξүéүéϠǠξϠǠ ******* 8/08/86 *******;* ProDOS STARTUP *X* BY OWL *u(* COPYRIGHT (C) 1987 *2* BY MICROSPARC, INC. *<* CONCORD, MA 01742 *F***********************P16384Z::D$(4):(21)d9704 n ********** GET HI-RES SCREEN AND SET DISPLAY SWITCHESf x11:3:"MICROSPARC PRESENTS NIBBLE SOFTWARE" 15:13:"PLEASE WAIT..." D$"BRUN STARTUP.SCREEN" G(16297)(16300)(16301)(16304) ********** READ INFO FROM NIBMENU TEXTFILE 11203 P$(20): P$ = PROGRAM NAME a 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$:1j 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"ī600O  ********** CYCLE THRU NIBMENU TEXT SCREENSW A1` :3 S$(A)"@"İ1030::3:((FLAG$"ESC"))490:600 S$(A)"#"510 S$(A) AA1:460  ********** LAST TEXT SCREEN BEFORE MENU :3!6:"Thanks again for your order !"+12:S6:"ALL PROGRAMS ON THIS DISK ARE"{&6:"COPYRIGHT (C) 1988 BY NIBBLE"06:"MICROSPARC, INC. CONCORD, MA"::17:5:"UNAUTHORIZED COPYING IS ILLEGAL"D1030N ********** SET UP MENU XMEMM2:X$(0)" ":X$(1)"-->":Vb1:1:"Selection: : Instructions"l3:"----------------------------------------";v5:20((A$)2):A$I1ME2:61I:8:I". "MP$(I):61(ME1):8:ME1". Catalog Disk"61ME:8:ME". Quit"B21:"----------------------------------------"23:1:"Type number or use arrows, then ";:PX10:SX4:SL1 ********** SELECT CHOICENSL:OSSL:780:Z0:24:868/1: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:Z10700800 ********** PRINT POINTER SUBROUTINE% 61N:SX:X$(SLOS);:H ********** SELECTION ROUTINEa SL(ME1)İ860:600*SLMEİ900:SL1:780:68042:1:" "::2:1:RC$(SL):> ********** EXECUTE A VALID MENU CHOICEH49168,0::1100:D$;RC$(SL)&R ********** CATALOG SELECTED C\:49168,0::D$;"CAT":mf24:7:"Press to continue";p49168,0:49152,128:z ********** QUIT SELECTED22::958:"Do you really want to quit? (Y/N)";:49168,049168,0:49152,1280(49152)249(49152)217Ĺ49168,0::1100:6j ********** SOUND BUZZER FOR WRONG KEYSTROKE EQ110:EY(16336)(16336):EQ: ********** ERROR HANDLING ROUTINE:(1101)6ė:D$"PR#A$300"5(222)6(222)8Ģ19:(7);"Disk Error. Please insert Nibble disk":1010g19:(7);"An error #"(222)" has occurred. "23:"Press to continue ";:958:49168,0:49152,128:600 ********** WAIT FOR KEYSTROKEFLAG$""623:" for next page or for menu";:49168,0:49152,128T(49152)155FLAG$"ESC"Z$. *********** ATTACH UPPER/LOWER CASE ROUTINE8I013:ML:768I,ML:I:D$"PR#A$300":B ********** DETACH UPPER/LOWER CASE HANDLER L(4);"PR#0":0V ********** INSTALL INPUT-ANYTHING ROUTINEK`X768839:A:X,A::xj ********** 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,216Z 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ժժժժժ pgBT* @?p~px|ЪժժժՊ @?~|>xaFaFF?p- U @?`p~?pxԊԪ"- U*U*U*uP*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|ժժժժժ toBT* @?p~px|xժժժՂ `~}?~|C~axGFx- U @?`p~pp[(U*UA*U*uԪժժժժՊ @ [ժժժժժժdpO|`*U*U*U*U*U*p|~p|(U*U*U*U*U*S* @?p~px|ժժժժժ dOBT* @?p~Ap||xժժժՂ `|y #L ~`xCc- Uy(U*U P*U* > @p{?" NԪժժժժժ@ [ժժժժժժdpO|`*U*U*U*U*U*p|~p|(U*U*U*U*U* `AB@* @?p~px|ժժժժժ n_?BU* @?p~p|ժժժp}{  3 00C1c. Uz*U*U*U*U*U L @@ " NԪժժժժժtժժժժժժdpO|`*U*U*U*U*U*pp~p|(U*U*U*U*U* `AB@* @?p~px|ԪժժժժN?8` |1U* @?`p~p|ժժժpys # 3 00F1c- Uz*U*U*U*U*U 49N/ p<@Pg@ OorEc{yMԪժժժժժLժժժժժժf~p*U*U*U*U*U*@?@p~p||(U*U*U*U*U* pcBP* @?p~px|Ԫժժժժ_?<< p|G?1U* @?`p~p|ժժժx{w<|sxο+* Tw@*U*U*U*U*U QA"$"p E@_(@ "  Mժժժժժժtժժժժժժf~p*U*U*U*U*U*@?p~Ap||x U*U*U*U*U* pcBP* @?p~px|ԪժժժՊ?~x 0 FA F11U @?`p~p|ժժxsgMAINLOOP STA VECTIN+1 RTS NOTPRO LDA #$4C ;Set up for DOS 3.3 STA DOSKSW LDA #MAINLOOP STA DOSKSW+1 LDA #>MAINLOOP STA DOSKSW+2 RTS * * The Mainloop's main job is to clean up the screen, * check for the different types of cursor flashing. It also * gets the screen character and replaces it with the cursor and * vice versa. * MAINLOOP STA OLDCHAR JSR CLEAN PHA ;Store it for awhile BIT FLASH? ;Check for flash BMI NOFLASH ;Branch to right subroutine BIT CHANGE? ;Are we changing the cursor? BMI NOFLSH ;Yes MAINLOOP1 LDA CHAR ;Get the cursor JSR BLINK ;Blink it BMI MAINLOOP2 ;A key was pressed PLA ;Get the previous char PHA ;Put it back JSR BLINK ;Blink it BPL MAINLOOP1 ;Still no key MAINLOOP2 BMI CHECKS ;Get the char NOFLSH LDY #3 NOFLSH1 LDA CHNGE,Y STY YTEMP JSR BLINK BMI CHECKS LDY YTEMP DEY BPL NOFLSH1 BMI NOFLSH NOFLASH LDA CHAR JSR BLINK BPL NOFLASH CHECKS LDA KEY ;Get the key CMP #$FF ;Check for delete BNE DONONE PLA JSR STORE STA STROBE LDA #$88 ;Backspace JSR COUT LDA #$A0 JSR COUT LDA #$88 RTS DONONE PLA JSR STORE ;Put it on the screen LDA KEY ;Get the character STA STROBE ;Reset strobe RTS * * Blink simply stores the accumulator's value onto the * screen, checks for a key press, and increments * the random number seed. * BLINK JSR STORE ;Store it on the screen LDA SPEED ;Prepare to save the speed STA WSPEED ;Into the Work SPEED BLINK1 BIT KEY ;Check for key BMI BLRET ;There was a key INC RNDL ;Generate random seed BNE BLINK1 ;Look for another key INC RNDH DEC WSPEED ;Decrement counter BNE BLINK1 BLRET RTS * * Clean will clean up the incorrect screen * and get a character from the screen, either * page 1 or page 2 (80 columns). * CLEAN BIT COL80 BPL RETURN LDY CH ;Clean up the monitor's LDA OLDCHAR ;titanic attempt to STA (BASL),Y ;flash the cursor GET LDA OURCH ;Get the 80 col. CH LSR ;Divide it by two TAY PHP ;Lock interupts while SEI ;screen holes are wrong BIT TEXT2 ;Assume page 2, BCC GETCHAR ;evens BIT TEXT1 ;Woops! page 1, odds GETCHAR LDA (BASL),Y BIT TEXT1 ;Set back to page1 PLP RETURN RTS * * Store will store a character on either text * screen. * STORE BIT COL80 BMI STORE80 LDY CH STA (BASL),Y RTS STORE80 PHA LDA OURCH LSR TAY PLA PHP SEI BIT TEXT2 BCC STOREIT BIT TEXT1 STOREIT STA (BASL),Y BIT TEXT1 PLP RTS CHAR HEX 00 SPEED HEX 00 FLASH? HEX 00 CHANGE? HEX 00 WSPEED HEX 50 OLDCHAR HEX 00 YTEMP HEX 00 CHNGE ASC "\-/|" ;Twirl characters LST OFF é ì  Ҡ΍̠ 󺍍Ҡ 婍Ƞ ֠ ҠƸ ̭ Գó ͍̲ƹ Ԡ²Ơ  ò Šõ ԠĠ Աư ͠Ÿ ĠŸ ĠŹ ڠƶ ڲƶà Ҡűð 젽Ʊ 󺍍͠ð ͍͠ð ͍Ǡð Ǡð 򍍪 空ΠƷ   亍ǠР ©  Ǡ 䍠 ͠ ͍Ӎ 庍Ǡ ٺ Ƹ⩍ ź 婍 򩍪 婍 Ƹ  ح獠Р ؠ 򭱍ˠ 덠孱 덠ؠ 덠Р ؠ ح獠 Ⱡ Ҡ䠻 䍠   孱 덠͠ ͍̠ 卪 󺍪 Ժ 庍ˠؠ̲̲Ƹ⍍ԠčԠԭƸ⍍ԱԱƸ⍍ڲڲⱍ֠ؠȍ٠֍ ­Ƹ⍍ԳԳƸ⍍ŠŭƸ⍍ϠϴƸ⍪ ɯϺ ҠԳ ̠ű Ӎ 庍 占̠ű ƩР ؠ 占٠ 占Ơ 占ΠŰ Ű̍ 庍̠űĠ 獠̍ɠ 䍠Р 堻 占ؠư 썠̠ű 򩍠̠젻 Р ð 䍠̠űĠ 獠Ӎ 庍̠ 򍍪 򺍪Ҡ 򢠠 獠̠𠠠 占̠ 卍 庍 Һ ﺍР ɠ 덠    􍍪 ̭ 喙ؠ ٠Ҭؠ 占 덠؍̠٠ 卍 ̭ 喙à ҍҫڠҫ ƷƩؠ Рάؠ 占 덠؍̠Р 卍 庍  ˠ 덠  덠ؠ Рؠ 䍠άؠ 占؍̠Р 占  ˠ 퍠 򍍪 Ǡ 덠ҠŠ Ġ 占Ҡ砻  Ǡ 򍍪 򺍍à Š 占̠Π 卪 Һ 占 덠 덠    à 占Š 占ɠ 󍍪 ƷƩؠР 占άؠ ؍ؠ àР 占ҭؠ ̭ ؠ  ­ ̭ à堻 占Р ̠ źΠ 󺍍ɠ ƷРڠ Ƹɠ ©̠Π íƩ 庍 󩍪 󩍪 ٺ ԍǠð 庍Р ĠƠ ٠Ҡ ٍ٠ҫٍ̠ ٠ ٭獠̠Ҡ ԍҍ̠ҫҫݬ٠ ԍҍ 󺍍Р ݠ 占Ѡ Рà 䍠֠ ݠ 占Ѡ砻 占Рà 䍠Ӡ ɠ䠻 占 Р ҠԠ Р àҠ Šàҫ򍍪 庍ҠԠ Р ҫҍР Ӡ 򍍪 󺍍٠٭ àҠ Šàҫݠ ٠ Ӡ Р ҠԠ Р ٠ ٠ Š Ƹ 󩺍 庍ǠƸµР à Š 占Р Ӎ 庍ǠƸĴР à 占Š 占Р ̍ ɯϺǠŴϴҠ͠ 占ҠԠ ҠĠ ҠĠ 􍪭 亍ǠĶǠ 獠ĠƠ ̠ű Ǡ 獠ӍԠƍL X J" m" J" m"% " JƠ" m" Jޠ" m"% " J# m" J# m" J9# m" JX# m" Jp# m" z# m" )ɟ  "L  `$$ $$L _" %L!% " $ m"LM" $L!$$ %FL! %L! $L!$$$,$ f"$$$ f"L!4 _"L %% 4L!ѐL?!$ f"4)ɀ$4)$% f"4  4 44%%%ح$$%% 4$ %% 4 $L!L?!H _" " # m"# m"h$ # m"$$$ $m$$ʽ$ m"$ m" L %` $`v"w" Lu"`Pʩ 0`éì㮍àРԍҠҠ̠үƠѠ堭ӠɯϠӠ㮠Ѝ'+@DEFHINPRZ#####$$$A$.$U$h$x$'%,h%044h%h% '% Ӯ é ì î Ĭ ҍǠɠưƠð ŲƠ Ơ ፍ֠ Ơ Šð 卍̲ƹ ح òŠõԠ٠İà αĶƠ ԠĸŠ ҍŠ ԠčԠà 占ؠݱ٠ݱҠԍРՍӲӠӠ 퍍 ՠҠōؠҠ̲ԠŠ 占ؠҠ̲ԠŠ 占֍ҠؠҠ̲ԠŠ 占ؠҠ̲Ԡō֍ҠؠҠ̲ԠŠ 墍ؠҠ̲ԠӠ 墍ؠҠ̲ԠƠү 墍ؠҠ̲ԠҠ 碍ؠҠ̲ԠǠҠԍԠŠ ԠōҠ٠ Ġ 占Рâ ѠčРҢѠčР̢ѠčРƠ 뿍ѠӍРѢѠӍҠŠ РԠ ӠӲӍӍĠؠ ؠŠ 獠ؠĠ 獍Рâ 獠Ѡ΍àŠ 占РŢѠΠ Ţ àĠ 獍ΠРӍҠŠ 󍍠Ҡɍؠôύ͠ 卍à˰Рҍ˰ōР 忍Ѡ˰ҠŠ ҠԍҠԍԠЍРҍ˰Ҡɠ 占ؠø͍à˱ Рҍ˱͠ ͳ 卍Ҡɠ ؠñ͍à˲ Р Ѡ˲ ˍРҍ˲Ҡɠ 占ؠð占͍à˳Рҍ˳Ҡɠ 占ؠø͍à˴Рҍ˴͠ Ͳ 卍 Ϋ΍ҠĠ ԠΫǠ Ǎ΍ҠĠ à˶Рҍ˶ƫРƠ 忍ŠԍҠŠ Ƭ Рՠ ԠРİ 忍ŠԲ 占Ϋ΍ ƍРƠ 卍ԲРı ԠӍРԠ Ӡ΍ҠĠ 󍍠ƫĠ РԠҍǍҠƫĠ ΍΍ҠĠ 󍍠ؠˠƬ؍Р  占Šԍ 占Ƭ؍ԠРŠҠ 占ٍŠƫ٠ 獠Ƭ٠ ٍ٠΍Šōؠ ؍à΍Ҡ؍ؠ΍ŠˍōŠҠ 􍍠ǍѠŠ Ҡؠ΍ ΍Ƭ؍ƠčѠŠ ؠ΍à΍ ƍƬ؍ŠҠɠ 占ؠ 占͍à˷Рҍ˷РԠ 卍 Ҡ 占ҠŠ ҠŠ ҠԍԠǠ 占ԠŠ 占 ōҠōԠȠ 􍍠Š 򍍪 卍ؠРŬؠ 占РōѠԠ 荠؍ؠŠР Ԡ ح獠Š 占Íàō؍؍Ҭؠ 占ٍ؍Ҭ؍؍ҠԠ 卍ҠԠ٠ 墍Š 占Ҡ٠ РՍ ŠҠɍؠà占͍ӍĠҠɠ 占ؠč͍Ӎ 卪 ٭ ح獍Ԡؠҫ٠ҫؠҠƬ؍РѠˍҠԍ؍РҍˠӍ Šؠв؍čҠԍðؠŠвӍŠà İŠà İŠà İŠàé ì 㮢İŠà ԢİӠà 墸İƠà ү 墸İҠà İǠà İŠà Ǡà 򮢸İŠà Ƞà Ҡàɯ İԠà 䢸İŠà İȠà 墸İԠà 䢸İĠà 䢸İ̠à 좸İ̠à 좸İΠà İˠà 䢸İĠà 뢸İԠà İҠà İРà Тİ٠à Š ¬Ŭ Ҡҍԍōȍԍč̍̍ˍ΍čԍҍŠӠŠӠĠӠǠӠ 󍪍͠ؠ 占ȍƍ͠Ӡ͠ؠ 占ȍŲƍ͠Ӡ͠ؠ ͳӠƍΠӠӠ͠ؠ ͲӠƍΠӠ 占Ӡ 䍍͠ؠ ؠ ͠ؠ 占ȍؠó ؠ ԍӠ廠䍠ؠ 占Ӡ Ӡ ͠ؠ 占ȍ͠ؠ 占ȍӠŠӠӠ ȠӠ ȠӠ **********************; * WORKS.PROCESSOR *X * BY MIKE JETZER *u( * COPYRIGHT 1989 *2 * MICROSPARC, INC. *< * CONCORD, MA 01742 *F **********************P(21)ZD$(4) dD$"PREFIX":PR$:D$"PREFIX"PR$ n500* xD$"BLOAD WORKS.OBJ"; 216,0:8192D 160N 8398a (8195)1510 ((8195)128)"Q"490: Quit :"Current prefix: "PR$ :"Get directory listing by:": 9)"P - Prefix" 9)"S - Slot and drive" :"Choose - ";, 16368,0:A$:A$(27)130U A$"p"A$"P"A$"s"A$"S"230] A$t A$"p"A$"P"360 :"Catalog slot - "; 16368,0:A$:A$(27)180 "A$"1"A$"7"280 ,A$:DIR$",s"A$ 6" drive - "; @16368,0:A$:A$(27)180) JA$"1"A$"2"320C TA$:DIR$DIR$",d"A$L ^390 h:"Catalog prefix (CR = current): ":ES0:HT32:VT10:560:ES1180 rC0IN$PR$ |DIR$IN$  470 D$"cat"DIR$ "Set prefix to this directory? (y/n) ";. A$:A$"Y"A$"y"A$"N"A$"n"430b A$"Y"A$"y"ĺD$"prefix"DIR$:D$"prefix":PR$x Repeat this loop 216,0:130 "Unable to catalog/set prefix to desired disk." :"Press Return to continue ";:A$:130 :( :"Cannot find WORKS.OBJ on current disk.":23:h ::"Input Pathname:";:ES0:HT16:VT12:560:ES1C0130 9511,C:T1C:(9511T),((IN$,T,1)): ::"Output Pathname:";:ES0:VT14:HT17:560:ES1C01309576,C:T1C:(9576T),((IN$,T,1)): &1500C1:IN$""I:HT:VT:" ":HT:VT:A$:A$(27)ES1:_DA$(13)CC1:{NA$(8)C1İ710:570XC64570bA$"."A$"/"660lA$"A"A$"Z"660vA$"a"A$"z"A$((A$)32):660A$"0"A$"9"660570CC1:690:5702HT1HT40:VTVT1:@HTHT1:qHT:VT:A$:IN$IN$A$:HT40HT1:VTVT1:HTHT1:CC1:C1IN$(IN$,(C1))670: