LBSOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUNDINVALID KERNEL FILExةw,@  4  J  ȱ⩤i8#) ) 8Le BUSINESS BASIC RANDOM TEXT FILES IN PASCAL *SOS.KERNEL >,V!a)UNDERLINE4 B!BREAD.ME.FIRSTs*/ !@D"!D"*HELLO.TEXTd,O*MENU.MAKER |/ &PUFFIN)]9B/!B(*SOS.DRIVER 403Z%SEG.T j04Ÿ/ *SOS.INTERP j4ked+TIII.BLM.020698Au' &BBTEXT$DB/!B")BGRAF.INV(d.!L+DISKNAME.DATd.!BFLASHNAME.DATBd.!D&%HELLO d0!B+)HELLO.PICm#im#iЛ#Lȱ  6L憦  Lsmm l y` @8(Je稽 ʈ ALLAN M. BLOOM, PhD CDP Institutional Research, Virginia Tech, Blacksburg, VA 24061 2303 San Marcos Street, Blacksburg, Virginia 24060   !"#$%&' 00000000000000000000000000000000000000 This is line 1 0000000566726726666230000000000000000000000000000000000000000000 000000048930930C9E501D000000000000000000000000000000000000000000 This is ....|....0....|....0....|....0...4 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000 October 19, 1986 Page 2 1 2 3 4 5 6 6 1...|....0....|....0....|....0aracter) representation (if any). The second and third lines are the byte's hexadecimal contents. The high nibble of the byte is on line two, and the low nibble is beneath it on the third line of the group. ers. The block's innards as shown here represent a display from the public domain program BLOCREAD by my favorite programmer. The data block is shown as eight "line groups" of 64 bytes each. The first line of a group is the byte's text (chf data in a file created by the PrintRandom program on page 152 of the Apple Business BASIC Reference Manual. For this example, the PrintRandom program was modified. Instead of a 16-character record size, this example has a record size of 71 charactn the information it contains. It may have any length, even beyond the 255-character maximum length for Business BASIC strings. Let's take a look at the innards of a Business BASIC random text file. The following is a look at the first 512K "block" oetermined by the BASIC program upon file creation and before writing any records. Each record must be at least as long as the longest text string it contains, plus one character for a carriage return. The record may be much larger thaee how Pascal can get around the problem -- with a little help from its friends. THE RANDOM TEXT FILE STRUCTURE A Business BASIC random access text file consists of a sequence of equal size records. The record size must be pre-dess BASIC random text file. We begin with looking at the structure of a Business BASIC random text file. We then see how that structure is incompatible with most of the Pascal Input/Output commands. Given that basic incompatibility, we then se" is an alien entity as far as Pascal is concerned. Normal input/output statements either cannot be used or must be used in strange ways. This article presents the -- somewhat strange -- ways that a Pascal program can read and write a Busin INTRODUCTION Pascal and Business BASIC can generally share ASCII text files with ease. There is an exception to that general rule. The Business BASIC "random text fil Office: (703) 231-7921 Home: (703) 951-2025 CIS #76566,1514 BitNet: IRBLOOM @ VTVM1 line 2 0000000000000056672672666623000000000000000000000000000000000000 0000000000000048930930C9E502D00000000000000000000000000000000000 This is line 3 0000000000000000000005667267266662300000000000000000000000000000 00000000000000000000048930930C9E503D0000000000000000000000000000 This is line 4 0000000000000000000000000000566726726666230000000000000000000000 00000000000000 | writeln ('Length is ', sizeof (data rec); | | end. | | | You will get "Length is 72" on your console screen. It doesn't matte | | var data rec: record | | datum: packed array [1..71] of char; | | end; | | begin | the pudding: | | | program TESTODD; | | iented" language. Each Apple /// word is made up of two bytes. Pascal will never give you an odd number of bytes in any data structure. You don't believe me? Oh, ye of little faith. Let's prove my contention. Try the following program as proof of either. Every Pascal data structure has an even number of bytes. You can specify an odd number of bytes in a data structure -- to your heart's content. It will do you no good. Pascal will always give you one more byte. Pascal is a "word orope it's not necessary to say that a READ to -- or WRITE from -- a string variable won't work. If nothing else, the hexadecimal zeroes will utterly confuse those old stand-bys for text I/O. GET's and PUT's aren't going to be very effective file that is otherwise identical to an ASCII text file. THE PASCAL PROBLEM What is Pascal's problem with Business BASIC's random text file? October 19, 1986 Page 3 I hsiness BASIC uses the "auxiliary file type" byte in the directory entry to store its record length. For Business BASIC to read it, the file must be flagged as an ASCII text file in its directory entry. BB will not even try to read "Pascal Data"ecord length. If a file doesn't fill the last 512K block on a disk, its EOF is the block position just before the last carriage return. If, however, a file does fill the last block, EOF is set at the end of the block. As if that weren't enough, Bunder of each record's 71 characters is filled with hexadecimal zeroes. A Business BASIC random text file also has interesting information in its SOS directory entry. In general, its EOF (end of file) value is not exactly a multiple of its rhexadecimal zeroes. There is no "first record" per se. The rest of the block contains six full 71-byte records and part of the seventh. Each record consists of several characters of text, terminated by a carriage return (Hex '0D'). The remai0000000000000000000000000000000000000000000566726726666230 000000000000000000000000000000000000000000000000048930930C9E5070 As you can see, the first 71 bytes of the block contain This is line 6 0000000000000000000000000000000000000000005667267266662300000000 00000000000000000000000000000000000000000048930930C9E506D0000000 This is line 7 0000000000000000000048930930C9E504D000000000000000000000 This is line 5 0000000000000000000000000000000000056672672666623000000000000000 0000000000000000000000000000000000048930930C9E505D00000000000000 r what you do, no Pascal data structure will have an odd number of bytes. The Business BASIC random text file can have any number of bytes. GET's and PUT's work with Pascal data structures. They will only work if the text file has an even number of bytes. If you try to GET an odd-sized Business BASIC random text record into a data structure that is described with an odd number of bytes, you will get out of sync very quickly. The extra byte is read by the program, even thoughfile. The method uses the READ BAS procedure and a block of information (basblock) needed to manipulate the file. This method is an adaptation of the one presented by Richan and Rosenvall in their article "High-Speed Pascal Text File I/O" i Page 5 READING A RANDOM TEXT FILE The accompanying BASIO (for BASIC Input/Output) program both reads and writes a Business BASIC random text file. Let's concentrate now on the procedures for reading a program can both read and write a Business BASIC random text file. We'll keep the functions separate, even though the accompanying example BASIO program both reads and writes a random text file. October 19, 1986 PC. That would allow at least reading a random text file in those different environments. We've looked at the problems, and we seem to have the tools available to solve them. Let's see how those tools can be applied so that a Pascal ver, there is no real advantage over a straightforward BLOCKREAD. Given my druthers, I prefer staying with built-in language features whenever possible. A BLOCKREAD-based procedure can be transported to Apple II Pascal or even Turbo Pascal on an IBMal (Apple Part Number 030-0378-A). SOSIO has easy-to-use subroutine calls that let a Pascal program write a random text file with little effort and with a lot of safety. SOSIO could also be used to read a Business BASIC random text file. Howeeasoning terror of mucking about in disk directories. I'd rather have system software do such things. Fortunately, such system software is available -- in the form of the SOSIO library unit that accompanies the Pascal Technical Reference Manufile must be flagged as an ASCII text file. EOF must be reset from a multiple of 512 to its real value. As you can see, there are problems. They aren't insoluble. I don't much like the BLOCKWRITE solution. In the first place, I have an unress" file and doesn't use the "auxiliary file type" in the file's directory entry. After you write the file, you'd have to fiddle the bits in the file's directory entry. The "auxiliary file type" bytes must hold the file's record length. The t a particular application to see a bunch of spurious records containing nothing but hexadecimal zeroes. I, for one, would not like to take the chance. The person you blow out of the water might return the favor. BLOCKWRITE also creates a "typellocks of 512 bytes each. That messes with Business BASIC's head, making it think that there are more records in a file than there actually are. It may or may not October 19, 1986 Page 4 hurbe easy to reverse the process and use BLOCKWRITE to output a random text file. There are two problems. With BLOCKWRITE, a file's SOS directory EOF entry is always a multiple of 512. The true EOF is masked because BLOCKWRITE always writes bAD, WRITE, GET, or PUT. The only Pascal file I/O commands left are BLOCKREAD and BLOCKWRITE. BLOCKREAD can be used to read a random text file, reading in a block at a time and "manually" parsing out each text string. You'd think it would it is not available to the program. With the second GET, you'll start with the second byte of the text file's second record. With the third GET, you'll start with the third byte of the third record. That is part of the problem. You can't use REn the January 1983 "Byte" magazine (Vol 8, No 3, pages 454-460). The method is a bit strange, and it takes a bit of extra coding, but it is accurate and it is fast. Once you have the procedure and its "type" statements coded, it really takes little effort to use the method. Just add them to your favorite library or "include" the text into your program. There are three keys to reading the file. First is the TYPE section. This should be included in every program that must read or write0F" and you will swear a lot. Once the file has been opened, BASIO calls WRITE BAS almost as if it were a WRITELN. The procedure handles the dirty work. When first invoked, it writes LRECL hex zeroes to take care of the first "dummy" record. Thand to close it. There is no explicit "file" declaration for the output file. Note also that SOS OPEN must have its very own buffer (SYS) and that you may not use that buffer as long as the file remains open. Otherwise, you will get a "System Error he same name that may already exist, (2) create an ASCII text file with LRECL in the "auxiliary file type" field, and (3) open the file for output. Note that opening the file assigns it a "reference number." It's needed by SOS to write to the file output file also uses the "basblock" structure. You need to preset the file block's FIRST (to "true") and its LRECL (to the appropriate record length). You also need to set up the file. The three preliminary SOS calls (1) wipe any file of tcall, a "while" loop, and a second READ BAS call at the end of the loop. WRITING A RANDOM TEXT FILE Creating a Business BASIC random text file in BASIO is done with the WRITE BAS procedure and SOS calls. For consistency, the Page 6 The third key is how you use READ BAS. It is a bit different from the usual Pascal input routine in that EF is "true" only after the last record has been read. Note how BASIO uses the procedure, with an initial carriage return and trailing hex zeroes from REC and returns only the record's text contents. EF can be turned on either by running out of input blocks or by finding a "record" that is all hex zeroes. October 19, 1986 termines what READ BAS does. When first called, it reads up to two blocks of the file and sets PTR to bypass the first "dummy" record. Then it transfers LRECL bytes from BUF to REC and advances the pointer to the next record. Then it strips thethe modified PrintRandom program described above, so LRECL is 71. The second key is the READ BAS procedure. It is perfectly general. It will work any time you need to read one or more Business BASIC random text files. The PTR variable de | Before reading the file, you must initialize three of its "basblock" variables. Set FIRST to "true," EF to "false," and LRECL to the file's record length as assigned by the program that created it. BASIO uses the record created by | LRECL: The length of the Business BASIC record. | | REC: The text contents of the Business BASIC record. | | SYS: A two-block buffer reserved for system use. Output. | | FNO: The SOS "file reference number" of an output file. | | LEN: The number of bytes in use by BUF. For input. | | PTR: The pointer to the current BUF location. For input. | | EF: A boolean variable indicating end-of-file. For input.| | | BUF: A general-purpose two-block buffer. | | FIRST: A boolean variable to indicate whether a file has | | been read from, or written to, yet. | | RE a Business BASIC random text file. The "basblock" type is a multi-purpose structure, with items needed either to read or to write a random text file. Those items are as follows: | en it loads the REC string into a zero-filled array, inserts a carriage return, and writes LRECL characters from the array. Nothing to it. Rather simpler to understand than the procedures for reading, yes? After you are through with the f CONVERTING APPLE II PASCAL PROGRAMS ALLAN M. BLOOM, PhD CDP Institutional at a program compiles does not mean it will execute properly or that it can't be improved upon. PUFFIN, for example, has some quirks that the non-fussy may be able to overlook. And it has a bug or two. It is a good example for converting to Apple /// Pascaefore getting it. The "up arrow" file selection command will only work with SOS disks. Once you read the text file into the editor, save it as SYSTEM.WRK.TEXT and compile it. Many Apple II Pascal programs compile without a hitch. PUFFIN is one of them. Th can read an Apple II Pascal disk. The SETUP utility on Pascal3 can make "Apple II disk routines resident" in the Apple /// system. The Filer will L)ist the disk directory, and the Editor will get a text file directly. Note the name of the Pascal II file bed in converting the Apple II program to native mode. I'll be talking specifically about Puffin as a concrete example. But these procedures are applicable to converting any Apple II Pascal program. Starting Up Pascal ///About Pascal." The book and program diskette are available to A.P.P.L.E. members. The program is available to anyone from Washington Apple Pi as public domain software. A PUFFIN /// could be useful in itself. Of more general value are the processes involv means, but the core of the program worked perfectly. PUFFIN III needed only minor alterations to become PUFFIN ///. If you'd like to follow the examples here, you should get a copy of PUFFIN. It is written up in "Call-A.P.P.L.E. In Depth Number Two: All dapt its input and catalog display routines as the core of a DOS/SOS conversion program. I looked forward to a major programming effort. I was wrong. I was pleasantly surprised when I loaded the program and compiled it. It worked. It wasn't perfect by anys to convert her DOS files to SOS format to use the family letter quality printer. AW Utilities won't catalog a DOS disk, and she has no memory for file names. PUFFIN copies DOS 3.3 files to Pascal formats and allows cataloging the DOS disk. I'd hoped to a. The example program we'll be converting is called PUFFIN, a public domain Pascal II program by Tom Woteki of Washington Apple Pi. I got interested in it because my wife hates Apple Writer Utilities (even the second version, which actually works). She ha, Apple Pascal. A wealth of Apple II Pascal programs is available in the public domain. Very little stands in the way of turning those programs into native Apple /// Pascal programs. This article shows you how, using a real program conversion as an example Introduction It is an often overlooked truth that Apple Pascal is, for the most part(*+,-./0123456789:;< Research, Virginia Tech, Blacksburg, VA 24061 2303 San Marcos Street, Blacksburg, Virginia 24060 Office: (703) 231-7921 Home: (703) 951-2025 CIS: 76656,1514 BitNet: IRBLOOM @ VTVM1 l. Correcting the Screen Control Commands The Apple II screen control commands are quite different from those of the Apple ///. Some of them can lead to interesting results. These Apple II PUFFIN July 23, 1986 Page 1 Bloom PUFFIN /// screen commands differ from their Apple /// counterparts: | e program. Those procedures might look like these: PUFFIN July 23, 1986 Page 2 Bloom e frustrating to answer a "Continue?" question with "y" and be blown out of the program because your response wasn't capitalized. The easy way of handling this problem is by patching in an UPPERCHR and an UPPERSTR procedure after the VAR declarations in thtion. We are used to our arrows, so you might want to replace the original keyboard input characters with chr(11) for the "up" arrow and chr(10) for the "down" arrow. Also recall that many Apple II's don't know about upper and lower case letters. It can b Other "Apple II" Things to Look For Many programs are written for the Apple II and II+. Those precursors of the //e didn't have vertical arrow keys. If the program has cursor control from the keyboard, look for how the program handles up and down mo simply use the Pascal editor's "C)opy F)ile" command to insert the TRANSFER.TEXT module into PUFFIN at the same place. The Apple /// can certainly handle the resulting 44-block TEXT file, and it's handier to keep everything in one place. ER.TEXT. Near the end of PUFFIN.TEXT is the following "include" command (A.P.P.L.E. version): (*$I DPTH2.1:TRANSFER.TEXT*) This logically copies the TRANSFER file into PUFFIN during compilation. You might wish to delete that line andthe time. Combining the Parts of the Program Apple II Pascal must run in a 64K machine. It can't edit a file as big as Pascal /// can. PUFFIN is an example. The diskette contains the program in two TEXT files, PUFFIN.TEXT and TRANSFreen displays that you get. Note that the Apple II CLEOLN command will clear an Apple /// screen. The Apple II CLEOS just moves the Apple /// cursor up a line. You might be able to live without the changes, but they are so easy that you might as well take ction ---------------------- -------- ---------- -------------------- Clear to end-of-line CLEOLN PRINTMENU Change from 29 to 31. Clear to end-of-screen CLEOS DISPLAYDIR Change from 11 to 29. These affect the scrted Apple II Pascal program's screen going haywire, check the control codes. PUFFIN uses screen control commands. They are at the beginning of the program as CONST values, as follows: Screen Command Variable Procedure Required Corre SUB 26|| | | || | Note that some Apple II codes don't have Apple /// counterparts. Fortunately, they are rarely used. If you find a conve | |22 SYN Scroll Down ||23 ETB Scroll Up | |25 EM Cursor Home FF 12||26 SUB Clear Line RS 30| |28 FS Cursor Right HT 09||29 GS Clear to End of Line US 31| |30 RS Goto XY9||12 FF Clear Screen FS 28| |14 SO Normal Text DC1 17||15 SI Inverse DC2 18| |17 DC1 40-Column DLE 16||18 DC2 80-Column DLE 16| |19 DC3 Suspend Screen Output ||21 NAK Quit || | | Ap2 Screen Command Ap3 || Ap2 Screen Command Ap3 | |------------------------------------||-----------------------------------| |11 VT Clear To End of Scrn GS 2 PUFFIN /// | | | procedure UPPERCHR (var ch1: char); | | begin | | if ord(ch1) in [97..122] | | then ch1 := chr (ord (ch1) - 32); | | {endif} | | end; {UPPERCHR} | | "$% "$ #%%& '   ` {" & ɠ% %)  !( (" %(r(z(q( %y(a(0: %   "$%&e$'e% R % <=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh%e,ȥ,*,- y,,,-,,,ȱ,,- yL+,ȑ,` 2"p-,-L(Ġ %>,i-i8, ȱ,%,W,pp ڠ %p`l  " ) i SOS KRNLb.D1/SOS.INTERPŠ̠Š.D1/SOS.DRIVERР頞 0 ) (lH'&3&'&#e'#%e'%'&"$"$#%'#%h`$e five lines of text: gotoxy (0, 23); write ('Press any key to return to the PUFFIN menu'); read (keyboard, ch); gotoxy (0, 0); write (chr (cleos)); This puts the "Press any key" met, so we only have to handle the last screen. Find "PROCEDURE displaydir," then go to the line that reads "write(dosdir[0].dnumentries,'files on disk,', cumsectors,'sectors in use');" Right after this line, insert the followingog listing, it returns you to the main menu. In a flash. It takes eyes younger than mine to read that last (or first and only) directory listing as it flies past. The fix is simple. The program does pause after each but the last page of the directory lisprofit from enhancement. If you want to use the "DOS Catalog" feature of PUFFIN, there is a set of changes that you really should make. As written, PUFFIN presents you with a problem. Just as soon as it finishes displaying the last screen of the DOS catalhed in a reputable magazine. It doesn't mean you can't find some trash to pick up. Even commercial programs can have bugs, right? As long as you're in the program, you might as well look for ways to improve it. PUFFIN is an example of a program that might Enhancing the Program I'm one of those people who tries to leave a picnic ground a little cleaner than I found it. That attitude spills over into programming. A program might have been written by a reputable person and might have been publis | It's easy to find where the program reads from the keyboard. Just upper-case each response character or string after it has been read. The program will never know you didn't have "alpha lock" depressed. o length (strg) do begin | | upperchr (strg [i]); | | end; {for i} | | end; {UPPERSTR} | | | | procedure UPPERSTR (var strg:string); | | var i: integer; | | begin | | for i := 1 t<!((g %(r(z(q( %y(i(0z %"#$ %&' $"#$%&'   `%$%ɠ%* " ~#C #p $ %*0"#)#)i $"% * %*  L! {" j% %ƌ(X#%#%"$w"$#%"`荚ٍ荺 荚`荺``` D ( )  * ) 4* * h* ))` L% q ȥ q Hi hi  i" i# #% $ȱ %ȱ &ȱ '`ü 7)?۽۩ W٠Յ<ōōř ռV7 uM78 V榠=ü#)@5 ɐ /ݐE ) .) @L `lqhٯ޿=ϓTXIֲ̛̐~ؠIJK,-NOPQ0vt `` LLɠ8`ΛLL渠`0 `8`HiHiH ihhȱh`86)IH)heuQɸ` ` W` ] %饚0` W` ߰4`)|E8LLLRLLLLL*LLLLLhh`LLL`SOS 1.3 01-NOV-82(C) 1980, 1982 BY APPLE COMPUTER INC. ) `G`î** }*`o^`on 8 JJAj@` *?($`ΠņɠŠ堠РѠ͠஠әƆH v?c,,,,h߈ߢ~))`3PLLP*%(i&`Ѕ񩏍E H pph`XǠĠӠ!((ͽϠРРSOS NTRPSOS DRVR(.D1(YYYYMMDDWHHMMSSMMM̱忠ΠͽŠ堠Р͠Ю̠Ɔx߭J ʈc(()o/ e/''ʈ((''()(1i / e/''ʈ((''((''((''' ('`ŠDAY, DD-MON-YY HH:MMSUNMONTUEWEDTHUFRISATJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECԠŠР@L&I/O ERRORINTERPRETER FILE NOT FOUNDINVALID INTERPRETER FILEINCOMPATIBLE INTERPRETERDRIVER FILE NOT FOUNDINVALID DRIVER FILEDRIVER FILE TOO LARGEROM ERROR: PLEASE NOTIFY YOUR DEALERTOO MANY DEVICESTOO MANY BLOCK DEVICESEMPTY DRIVER FILE '(i%%%h}%%`8 ȥ!8 !)"qȥ#q#e$ȱe%L)%`@(((( % %`((((࠰$(ɠH(@(h((((@(`%z %% %~(A{(L%`.8(.Je.&ʈ.s(1 6$P8"ȥ#L1$8"ȥ#(ϸ`"##L]$"qȥ#q0,$p)@"q"ȩq"8`*$% $% 8% $L$* $8%8 $`8 &'$% 8&$'% 8$%%`H   q ȥ q Hi hi 1  % H H ȱ h h % $$ 0 e e H i hi âz %` 1 8`    # &ȱ ' # i" i# # #`8 ȥ H h `8 6$P`8"#/y.i/ ȑ  © $ E7<3W`ȽLֽȄ @8`R ) [)_[AͰ")[)_[A:0/.ЩȑΘ8e * ȩ`Lo` ռ``ߤeI`IiţO`Ȯʆ/ )󘑡`()0zq 滅ѺY Ueۅ5Ѻ Ѻ  Qܐ'`i ҩ *C80`#$"0#`!qȱi 5H5Ƶ ǽ jh5`L2̩ƍv̥Ǎw̩ÎL%ϠƄǥLj̩۬L~̠HHh` ̐`*ѺG0?M`)J"u-- M8`۬` # ː`  = O̰)= I`JJJJѶQi Lˢ  0 ̐ `"L˦ `H8`8$$"$= O̰=`$0`#$"0`$` H hQ)fʅ F jF jF jF &!  eװ*  ̰F湥 ƹ`Z8`@  ʰ泭ۑƳ ʐ` ʐ` ˰ ƹ Wː`ۘ . . .۪8*JۦȱѶ"` ɰ Ȑ`E`Ɔ X̐8`>>5Ѷ Qܩ<`>`\ʊJJJJ ۍ۩  ˰Fȱ X̰6 0 Lɠ 0ۑۑ8ȱ`H8` ɹ $  8JJJJ8 ` ۠ǽi `< Ȱ+<#5 ې'` ɐ /ݐE`W8`R` 5&i ` Ȱ 0i `<8> ȐT eİF cȰB)Hh5 ˭)*ȑƑȥǑ'(ȑ`L)ɭ)Ѷ*e`M) `ۅH)Ѱ%}ʈh Qܐ'``hi ` p6۽ʹZ5 HȐ/i i `гW8`0( ɐ Ȱ ʮ6E`5 խ ɐ ޢ ȰLȍ۱Ǎ X̰% & !J8` *LĢ `8 iۥƍۥǍ`ۅ %  6 )Ѱ Ѱ` 𝭧e ǐ bǰL*ۈ5ȱ۠ƍȱǍ X̐ H h1  /ݐE`ۈۅ ۅ 8ƭ X̐`LLŠǠ  ݭv̅w̅ ðzv̍ŭw̍ŭƭ ­ōō T̰]ŅƮņ X̠8iȱiiȱi ṰŅǭŅ XLōۭ۩ۅ ȱ8D`F`8eYƍťǍŠ)͠ Wٍۭۅ5ۅƭۅ X̰ ìۈۑ T̰ۅƭۅ X̰ۙ%ۍ" T`K8`)` İ ۱ۈ` ưW/ۈęۈЍ۩@` 8 MƐ  5 Q8`LŅ ۅ ۩ۍۅ Lɰ ʰۅۄÍÍۙ'Ù ۍ*ۨ  Ѝ۹ۙ8v- ðJ ¥ ð, ðLO ʰƥLT`'  mې浰``8 8 nʰ0 ̰+泱Ƴ m° x̰ ̐8` m° x̰8 ۢ8 ˰y ` ¥ nʰ泱Ƴ T̰#泪 Ѳ *Ƴ ` L:Ϡ`泑Ƴ` LaĥH8`JȘ I8`  S`ۈۥۥ۩Íۭۍۭۍ հL¢H8`Jj Ȅ ۍۆeۅiۅ Lɰ ʰWۅۄ ¦J> ɩE` eĐL Ȑ 15WL QL5WW{5 ې'`,55 ې'` ݠ B1 ȩȑ Lɦ8`5  @ R㥶i ` İG8`F`X8``éۅĩ >` T֩xxMH]@ Kۅ5H ɐE$ eİ Ȱ h`h`8`W h8`hR`hLҿ i x +ۅ5ۅ6 ǰ `E8<W`­ `0XLۅ5*`)ȥ+8ۍې  ,ѺLTΠ"LΠ5 խ ɐ /ݐE`C8`)@ ϰa)ۥ,8ېu+J,\ ȱLJΠ) ϰ'#,J(] { ΰ ƑȥǑ.8` { ΰ,JѲ ƳL΅ƱƳ ΰҥ,J+jѲ84ƳJJ 2ΐ3泑ƳLTΩ潑ƽ`ƱƳ ΰ( {Π۵*+)e`8`)` J J + ΰ" 0 ΰ 🱼ѼL8`ǩ Ϡ` ϰ ƑȥǑ` ѺDC5 L3ܵ ɐ /ݐ 8`5 ˥JJJJ8 H h ` ܠ825H h5 ɐ /ݐ 8`Hh ܥ5 `ɥܥܥܥܥ5`܅܅܅܅܅5`( ݰ)Ѻ ݰL ݰ泱Ƴ ʰȭۮ ʰͩΪΩۦ eװqȭqLJ  ˰Aۅƭۅ X̰2%&N  ʰƭ X̐`Ӏ堁ӠҠՈ՘̠ƠŠӠ̠ɤӮȪŅ͠Ϊ ܆5 HȰۈ)ۅƭۅ X̰ 3ڰLÍLT̥L㼠  ʰ` İK ХP8` LɐH80)N  հ)@LO ˰)0 ̐` M ­۠泭ۑƳѲƱƳ X̰ RڰäJۑĥ` İo!)N8`WپX0 ĥLä X0 ĥLà !"#$ Đ2@H AڰCŰrP` 3ڰ(` AڰѶ? İG8`Fە1 ռ İ ЩP߭)@N8`1@8` Aڰ񈱴 ˦,+* ʈJj =ؠ yiȩ`y4泱ƳHhz ʠiȱizLA`L;ؠ"  `1` Đ7@8V۩ Lɠ۪8ۊ۠X)JJJƄ X Ġȱ۠ ȍ۱۠ ۭ) ۍ ð*)#  O̰``)(`N8` ) xհۈ ̰آ*գ  Ͱ ݢգ LvL{ؠ;i ڥ(8` ְ( ȱ5 HȦ)`Lxץ: ש ְ⥺i ꥻ(8`Lx Lxש u )۠0)p խ.8`)@ ϰ) ϰۈۅƭۅǭۅ5 X̰ *ƭ۬͵̶L  ΐ` Wհ> H۪ȱHۑhƳh sϰq ` ʰiȱi `)5©éՅĩ5 }JJ+`.`8`ɂ )`@ ש ְO ֤FHۑۑh8`P) հ Wհҥ,J+j泭۪ƳۑȊ ) ~ fPL ͊.>.ʱ+,EP!.E.Lw+,,ӄ*- P*e (` հB հ5 Wհ0,J۪泭ۑƳ sϰ(` L Ͱ2 ~ P kҐ#L8 T 2ΠHHȑhhȑ`Ld )N8` xհ*eȱ+eȱ,i۠Ѻ۹ۑ񥤅- ť.Lcԥ.La Ͱ$)rJ Lɰ )# Ԑ) ͰU..++,,IJ/ ӥ-.?Цե,J+jѲ4Ƴǥ4聠 H hH kh8`8-ȥ.L 8*Ʊ )8 0*-`.G.ʱ*+,EP'.E.LұE0+,,ӄ*p-e  )LBѠٳ )8`i (` )N8`*eȱ+eȱ,i۠Ѻ*ȱ+L - ť.Lkҥ. ՅL ͐Ld ~ pа.J/)@߅4N8`) ))УJ8` ۑȭۑǠۑۑȭۑ($S8`O8` "` / 򑺠+* ͐H h8` ΰi `()  *ǵ յý5Ņ4gȩυɩč5 iψ }.8` iϙLIѠ ˢ L΢ ΰ LϠ ˢ ΰ1` Đ@ АP8`B8`ۑJJJJ -ѥ ݰL`5`i 祻(8`2ޝ51©ޅéąŅƍ >ϩ 1ޠ== f ɰ`ޭ`5=(5= i Х(`=H h=`Insert volume: Τ in device: 蠠ɠ then press the ALPHA LOCK key twicex)_ @,P,R,T,V) )) `)8( ߠ',@ ߠ0  'ȈL` 8`څ  Lk%  Lk8Lu텚8嚅 L L Ld V ``  h` ک V `ۅץ  VLFx) ( :` H ) L  .P'pб0 &L:L5'8+8`0Fܢ` ř,Ř 0 8f)J ӭƅХDžѥL1LUȑ  i ߩLL )  札)  ҩLL` **éL0;` H ) 4 )ߍ) hjjjjۥ0CF = -$(L !LLL&L L-LJ٥eƦ ,L  # ` (L.L…ҥÅ,] Xx,f (I0јIFjFjFji```x@gŽPy+wLwԠ͠ŠԹ.D1 .D2 .D3 .D`HJJJJh)y` (2`]PU]]UPPX0 0 PPXPP  į󠠩ҙ̙ɠΠɊՐӠӢ̢ՠҠŠԠҚРĠ鱃ԠȠࠠLQ  * WHHH>%H H @`)h8`  HШБˆeЅАb >_-%^%p_^^_ab"08^c_L8^c_L8^c_L8^c_ȑcc\] ab^_ ``aV R0M bba dda0h8蘠fȊf` ab 1abo)abaݰb L9c`` a N0Ioa0H ha`pLopna n`  3ɠ/8 L %iLɠ8逨J Hh $` LPL(\)&P ěj9ȑ9ȑ99i=:i: >i>`Ɂ7XWWXjnXWi` ]?@@bgchch )^ ]b ]b^b^L\b8g+H__^8_ABB 9::)ѭ [ I[ aυ婶ZeLLL^$%Lae LGidFddddddd.ddddddddd ɕdˏd`Ls  Apple Business BASIC v1.23 - Copyright Apple Computer, 1980-83 CTERESOURCE UNAVAILABLDIRECTORY FULDUPLICATE VOLUM ERROR Please Press SPACE BAR IN PROGRAM INTERRUPTED%&'(%+.@C$DE FG!H"I'MN#PQRTW(X潭`: 808`:dd@՚H Z#IJJCSTRING TOO LONFORMULA TOO COMPLECAN'T CONTINUUNDEF'D FUNCTIOVARIABLSOS CALFILES BUSNOT SOI/FILE TOO LARGWRITE PROTECDISK SWITCHEBAD PATFILE NOT FOUNPATH NOT FOUNVOLUME NOT FOUNDUPLICATE FILDISK FULFILE LOCKEFILE NOT OPEDEVICE DISCONNECONV&CONV$CONV%LEFT$RIGHT$MID$INSTR>=<^/*-+NEXT WITHOUT FOSYNTARETURN WITHOUT GOSUOUT OF DATILLEGAL QUANTITOVERFLOOUT OF MEMORUNDEF'D STATEMENBAD SUBSCRIPRANGINVOKSTACK OVERFLOREDIM'D ARRADIVISION BY ZERILLEGAL DIRECTYPE MISMATNDEELSCONLISCLEAGENETABTSPCUSINTHEAMOSTEANOEXTENSIODIAFNOAAAAAAAAAAAAAASGNINTABSATYPRECAAAAAAAAAAPDLBUTTONSQRRNDLOGEXPCOSSINTANATNAAAAAAAAAAAASTR$HEX$CHR$LENVALASCTENAACONVOERRLIERKBEOTIMEDATEPREFIXEXFNEXFN%OUTREINDENAAAAAAAPOHOMA SUB$OFTRACNOTRACNORMAINVERSSCALERESUMALEGOTIRESTORSWAGOSURETURRESTOOALOASAVDELETRURENAMLOCUNLOCCREATEXECHAIAAACATALOAADATIMAGCADEAPRIssssssssss\3!z~IssssssssssssIG%ӓ,ssևwn7}|tttUUZ{fzxxˆU膅[L<^ENFONEXINPUOUTPUDIREAWRITOPECLOSATEXABYAAAAAWINDOINVOKPERFORAAFRHPOVP̠Ώ h:gpOn[n٧s]ds3issssssss0b>&dsjs|T}|s[iklmnopqrstuvwxyz{|}~ŭ᭭򭭪𭭠򠭠頭퀠Šӳ頠𠠀𠠠堠젭ӠΠSOS NTRPRHeLZĠР쁭堠堠ՠP򠭠έ魭  )* i LiHh`PQPQ>P Q,PQ"PɀQ@PAQ`8`nɀ<)nopoLpp` ^_ ꂅ__hg^`8 悕`gHhHhH5?6@6@*5g5666gҦhhhhhhhhg:e:;e; ;m;`@c@c?be^@e@ _m__^ \Lx] i6g55``BY BSAMHH H]fHhH_HcH uhch_hhhfhi0hhhB B A` ֥'( )&񦕤LNKM$Lb ě $m wl "m6X6+5 56ɀ56H $mhɀ(Z)& mL k~ wlL ͝dL Nsd# wl^`=8WW>X> 悅XXXL:^ g`L<^ l Jj bx bp,_;Ll  ~q$0P oՅ5R66R l ~ L%l $m0 =k $m#`$L#i)8#Ll  s s( L7bʊ# L-l m hxd5d$0H h`L^bLb$%/%5$ &5 &5e$$5e%%$&%$e$% Lk ׫ sHH ~qLPkHHh$0'ph | ZlWȥmW`L$|hXWXL-hm lmmLkl VYZZ{|| w ᐥlmmYZZ LxWXX ox ExYW# kXX 4=^W^0A, 9:: Ga.ghh 悅` A` \\ɾ,L<^hhZkKhLhhhe9e:: mLg jei `Ls j:,"hhhhLgɜEɝDɞLb Hɾɺдmhɾ Qp aj pi `p j` jLi j,d wlOZL^L^-L(dPL<^OPMNKLhhLg` Ls ҥ?ieCiLa,  aFL s a iLg ]hhh5h689H: H:HLHKHH6H5HHH` ui` pi` Qp j pi `p i` j jK$L%8eȢЅ iLOPP$pX0S&ȱhȱKȱLe潥ɂ逅$L# $mKL x~ m khLgLsLc h5逢)&a TH THLgL6k8:9: STT`)ɀLK$Lb8gLOPPKLMNhhm Vf0 mLf) mWA 0 -a mL8fW;8<< 悕` 6kLU*i kXX 4XLy \\'_ch_chbi^g \ihh ] Qp aj ih `p b iq bqn %jjg56Ly { b bq | XHWHHHֺh$PLh wlȱȱ%$LWH mh x~  m#W", mȱ28eLeji`Lwl mȱ"Ɂɂ ȱ :, iTjj ȱiVjj8逪XW0 Vf0WHW$ 0X: h ,@dd )e dʙdH &eh(dL ddک,ddLd:e``eLeHELLO ue 5eLse6e:7ee8ee:e`EAd j @a(% -, bLs j {ghhL<^gHhHhH , - b j$% @ag5h6h6hhhhh8g5h6h 悅`6 "]La ud `L  d.CONSOLE[[ TdSdddddd0 ddddd`dd A 6 s e 9c()' 9cKHLI jLdj89弅:彬: 悅`H hɝɞɜ)`dd  6芅 e ()'` e'()HKIL 9cL>hL<^) i!Ls j @aLK$L% :: 悅 lc!)` +b` +b` sL :b#`L,H s h ऊL(,L8f` A KL jLdjOPPKLL h AKL` Ѽ   (`H shLs Aji!S)Lt`SSS`L` z :0.`9::hhgg.%g& $gegަhH逪hhʰ` ҥ [ aLT ҥIJJABB=>>;<<?@@T ě hhhHH  `89$ 0~!L`!sm?iٰcL`S )!a{)Qi ڐ߽S) -ai) -aɢ ɣɍж$HS -ahʥ0SSȩ5%"/װ&hԐɈf0ɔĐ 8,f 8f L_ʅSS=ȄL`ȱi8eiidHddhd) _ ƢLh _L>h jhP _S @a-Qggeg5hih 6i6 "]S" ]$%SSSg a aL^ S S`La8 SiUjjS):,$f 0$ p = d hkddhe##5ddˏdd?Ll ,?#$04dHHd = d hkddˡddhhd`LsL#&F  ; s b 0` L+l$ Nsd#Lzm566ȱ5Ll H# wl m#͉LchL$m QRKLLsh$0LU$ LL<^~p l nhhLgOPP` Add# 6d s S SS@Ln A " r ,; s lLn#f  ;П ⭩,SLn "mʆ,S _S% nLh "mL_T ST#L(, U VV ׫$ 0  QpU65m5l5k5n j5i`d,]WXX566 |m5 ^|l5k5n %j5i5` |m l)m |m`znth` |ht`i  y my`i n*` |jkjI*mlinLyFn`nEz0ʢiH xv5ui`uei0,iiL0y{n`nI0hhL,yLy |i{ xi` |={{ {LZ{ zL{ |8ii zivjwk xlym* 蕁24(y&x&w&v0⨥ymyxlxwkwvjvL{@jjj)(L{L<^~jklmL y56y^Vy dv88; 54541r |LiHi z xz U{y xy рz xh '~z zLz z~ zm zl zk zj zL{LyJ eyexew~ev~f~ffffJ`5665y5x5w5zEn{z lkj |yjJkjlkmlmi in`emeymlexlkewkjevjLkyi&m&l&k&j8iIiii9fjfkflfmf`nIngjIjgIm lkj`L<^}i0vvvvvj`L656 wh H5Gh`lmm566 Lx5Hȱ5ȱ5 F665 w56h(` x("LH)&h`( '&'`lmm566LxĠLx znInEz{iLx y? zL||uu`8i$iznIii0ĨV y${Wiuu8Iem_B_B`)&N> ȱI8gJJ hhge ghh f feLH>H= x\L|F )XHABB8 __^hHI8e^ @1 @+?%GHHHIJJih BABGHh`$  ě u Дs IJJ^__Lveȱeȱe `LćHƽ Ƽh`$ lȱlLL{ɝɍLɎСL s HI s shmHmHlHHɦ# shmHmHlHH , hHLt  ,, shTTLui ui,L3$0 |Lu xijk6kxyy xxy6i L[ s r$PLsi,L3-hLs L*tɘcɭ_ TTLdd`jk8L|L3L3TL3,L3i LL r$PLLBLsș Ȅ ( qƚƚ` s s),;,=,#,(,,ѼLL<^L<^ llmm$P$?TUJ)TU  ' Lsi imLqLsh E0`H ty ))ELyq  8 $0!PizEn{dUeUi hLqLs `wLr !L2 {}$ 0`QɀX zLs.+"2mXm tL qXXW zzEn{i x }H$ ]kh8 )KLe9e:: }Lgi , p s$8$0p`PL<^Յ H s r ɀ ȱX Hih0 & ?<I?iE W Lq s )L<^ȱQȱȅR dj sLHoUVV$ LhU Lp$ LL<^opL^```?EXTRA IGNORED?REENTER $0pL,`LgXW ׫ k*iXX 4X \\L<^Xii7 { n k$ |WlXVVE$ P% eT{||Hd ̐h p IkLo00$0 L>o "m nV dj$D$ P 膼Lo$0",i [ kLoHSHhp< {}$ p0H 07h ]k ,LmUVV `p F sLn 2 ukLoF вLm jȪnihoi8傐IL|`7 z!L|iD8$n yiLyn)FjjjLyiɠ %}nnI*imLyjklm` s e-o+ smo..IE)2s S -+fh r$h8fL}fg s$gPf8ef B{f &{f o0`LB ` H$ge &{h 80 '~L}H |h |zEn{iLxf d$h0Ly ef q80fL}COt#t$JZ mLKjk8 | ~Lm ^|-$nșRnȩ0iL f~ azea~ } \~ } &{e B{e yx %}ei0h656H |mHlHkHjHiHl5 8eeghh^__` HHH H bqh hhhn0iɐ1 }L yxL%}\i FHHHHH 6hhhHHlm ,҄ shh)>=>hgh<<;[a{p ;<<ccb? @c@ube.a{bb,\(eb cc`ebcA[8饰 a{8`8\e@@He? ]@@?hbbb0 ea ȑbc8L@ @@h5H ?5^6_6_hhXhXhWLk ? % ?Џ`5566` xe5566ɂ66` s p `  zLseff z.!'$ iߪ$ 0 H8eAi\h$ P8 (Lt$ 0}5}} ,kk} , kklm Lٓ[ 80@ 6 2`  dkH) ojhJJJJ ojL 0:i`L<^ jHHHHHH s jhLyqhhh6h6h555_ȱ5VHHHH %L/5H6H6Ht $mlmkljkij8ihn`L,$0DpA q enHi80 @Lyu \ % @u ćh `&m&l&k&j`2L0 և yxLT}$0pLI oբRLi `u LLi u Lui0 ܆ چ,,% п 擩lm0u 1eL5665`iɀ*iH i  @8 ei $ tutt tj ȡhn` t` 0RN0R 0R$n-RRR`i` p`5665i`$0BP?iH i hLbe55f5f6e}Lme6u5u }`6ʈ`v`jip` ? #  ue }~ %u $ چ 0 u}` L uu  ) }Li <i@L{i$i0 p $ 1`ui` LL Lbb `}i~ei^~0] e e^`}`566i5`_cf_cfi^eub` ?^qbep`L<^ ?8b^e` rp`I` ? ㄩp^|be #^b ebbu|beiee^^iL56^f" ऩ थ (! ( ऩ थ (" ( द!LGb8Lऩ@iu +-ELj) e | ^ .' "5 1 p) iIii i)Lm` ?i $0 ׄ $0 $0 ^`Hhth`^Qb ^^ 8` `H Jh(L悈`H逨h` Hh8 Hɀjhji` HihJi(`  ~q$L ɺ b$P i pi$ȱLdjɻƟ dj 柰ީ Lihh sLg  s ! b   s "!!!+|] {n LU{HLʁIڢIڢ-(h#5ᆥ](IڢʥnH BiHɁy U{y рhɁ xhLB` vy{| g|S}dpL}Qz}c0~~D:~L̑56gh6hegehh `iɇoȘ戅 aziȅ xdo`Abi$nFn) i  j g g ^ ܇.Laz͠Lć ^ ׄ& ć ׄ ć ͠L- x |z K{ | T}{ x xnH yxn0 I B xh B Lр |  ZuL.y +|z% T}uH }h{ ~|H !z az ~hJ inIn`L~8;)q4X>Vt~w/z*|cYX ~uƀ1rP aziP | |iɈ { T}i8Huiiu x BU 瀩{h z` |] az 뀩]Laz | i8fe.șR0șRmymlylkykjyj00ڊIi i/ȄȪ)Re.șRI)ЪR0.ȩ+f.8f-RER/8 i:RRRRRR`y`'d |Ģ {gggegȱgehh Ľ ,L<^  8` ^LQ ŠhhL6 $P 訽5 ͎56ۥ 8ee L:^?be^@ce@c __^_ \__^;<<6  $Phihi^Ȋ^6gȑgʆ5a g5ȑgȥg <^^^__ɂ逅____<;إy6 hlhm^Ȋ^LL:^ȥ5^H^h ͎el5emȆ6п  ͎e^e__ iLZe *& eecJcm J_mm嚍J_AgBhBh \^A_B_B` ^"( zM jF566 x}z{6{LҜ #z{{"} GLsL<^ jHHH i dj ٥z{{ j}hhh ;в| |膆  RRRRH uhA?B@7B@87F8f7877878L:^7 8*JA5gB6B68 悅h圍h?H@H@HI?J@J@ "]h@h@h?gAhBhBJJ8 悅J圍J7ߚ8BܚLs`䚌B L:^`Ib^J sL͙ɚʚ `pAƚЙϚŚњ˚ ̚8 悅DDF͚ Κ8 DiFEC CD)ӚDmӚDԚCBКLěŚAݚ⚠IȌ 8 ꂍ  8 ꂅJJ` !7Ri88 pi UŦLUUU HHHHL 2hh LW iL 2hlhkhn jhimhHɗ8 Ls`LIŚ1CUDVDVU Lŧ 0 7U L`L:^֩ ŚEĚ L| Qp QeeRee8 1 V` 痠U` hh R LsL  z (L[ Rީ  @Y%(&:$LU s և ^|iHn %jHkHlHK s n ZlHmH5 s iH jHH楩e ) ,LsLR eՅ7V8U #   785U6VLΔU7e778ҥU^V_bcF_hcCgDhebbc \^__`U8傅UV` |UȱU` L<^ |UUƜ0ƛ ӗWqeWȱWqei W` |8UUWȥVUX`UeUUVUO / +'L U)łiV VL LI 8U 7ȱ7 UU ЯUVULU7V8 p L LZ U qUU qUH85h688V77U U 5qUWȥ6qUX7qWWȥ8qWW ٥IiV) V LVU?e8V je?e>e8U>e5V?e665e=e@eee8 hx57 xLCx8I77JJ8 88` H dhjL YYHH dYZZ oxhhe5566ɂ逅66 wZZY L YIL=m ) s  ʊHYImm shhhhYhZhZHHE` 3YZZ xLCxl5Ym6Z78ߠȘH yxy hL3 j kqHHHH s H , ,H s s ~qhh 1 lhhXhXhWWȱW7ȱW8 eLNLXZWX ` GGH HlHmHmH khmhmhlh hk8j7k8Lޒ e7788IjJkJk )lmm'&`UR{R||L̐: / cRRȹRRȥ Rл s `Lsh sh5lh6mh6mhxhyhy x x Qȱx7ȱx88 Ƃ 7e7888ł75 楽HHȱȱ6H6H5H s =к bqhhh Lshhhh` ~R/mZlmYZ PujHkki^^`H"h{||kjkȱ{ "ie{||  V{|56|6 w&5L<^i8e` ě u8A?pB@B@ )onL܇jkL| Nsdȩ8 NsdL2Lа,L<^ A s ׫ g iq s= sXHXHWHHHH ajL? b rLiq HHH s iqhhh5ȱ6ȱLI65 g5H6 2|H,;' L Pu  pLLwl`|H}HzH{HHH ɶ# xhH s  ~q s,; Ls  ~q$ hxrL iLpnH ~hɀ8(*iR.-:/ RRhhh{hzh}h| Pu p 0|8pJ LUL-LG -$p0`pog $mkڥrok8o,koLdjAaCcoJ mko 5 $mkk mLw L L HG56H6LExh  (`|||}z,A[ :808Ш`,ޞ@`y Gy`LHq ,`HȘe`{ai|a|h kLF  a h ; ` s 欦op б G je б ɩ ̬ 穰t d sd 7L=LVdʆ `! `Ȣ`  婐 ɩ`$ L2u u`I Il8)id`  z Q> "] a a$% iLg֢   sLj$%`8f  a e ; ` s ɩ` YLILcopL7 z0xH ׫$0_ ;h8fH`aai shH2 h zJJJJf Ik ɩ` ̬ t os YLA ևLLק jWXX` ׫$`pd8isŠt`dyoopd8ip`J uv`&&&8孪孪宐橈`! @ uA?B@B 悅@=g>h>h ]=i>j>k a=g8i>hj>h 悅ki=5j>6k6k;el)@7Me0u(> ƬƫHH ,hohp` ɩCe0R`ȹR`ee?e@e ue 5e T L=e;e`Lso`n}pm aa`dyo ɃɄ b`" lJJJJYe s ˰L8Ls LԫN l@u=ekPe tMe )llNesOet NeOetMeCOeNeȌ=e>e;ee?eJeKeLje֩ u>e?eՍed?eehi?e ueL5e qrL,op ɩ`et?ek;e`hZ L<^hZL<^L=ee>e ?e`opqrst !e5ehe?eLje LjeR=89R>:>:iR:RiRRiRL`8(RR(`EeFe  s bq Vml0L dMeL` bՍe :RRRiRȐȰRe9Re: J 2IHJh*=>> 95:6:6R L1 1Lԫ`L:^  aFL^R, ue 5eLڭR7>e?e588  >!SHOLES 1!1!2@23#3#4$4$5%5%6^67&7&8*8*9(9(0)0)-_-=+=+\|QWERTYUI OP[{]}`~`~ASDFGHJ K L ;:;:'"'"ZXCVBNM ,<,<.>.>/?/?d0hp00000>0# #0~$ <"<"""<< <"""<"><$""< """"  "" 6***""""""""""<""< :< $"""2,"""""**6"""""< >>>>> ""*:<"">""""""""""""">>><2"<""">""" ""  ">"6**"""""&*2""""""""""""*,"" "" ">""""""""""""""**6"""""""> >>>xrGA7  3  5  >>< (&20 *, **>> "2*&" " >>  ">> "8""> """"""< SOS DRVR"CUSTOM.3 )((8*,;((*,((+)((9/(p((>3  =9 :9 .(~|L|LNqooGoDDDcc0ccpc]]c"QM"|@@pAATT**|NY KEY TO CONTINUE.":G$U-Z#2,".D1/FLASHNAME.DAT":#2;FLASH$:#2%dFLASH=110: FLASHER SUBROUTINEnSLOW=110xFLASH/2=FLASH/2):۴ =11:=07 FLASH$ SLOW FLASH:".d1/Menu.Maker"U", adjusted for PPT/Bas b) )ab)a a,h0& &+%a0 +hcefd(c,@cfabdf`cnx  (,4h`dd,9P"<:J H) +̰ H) +ʭcP h̰ʩd8,h)ec efeede`,5 H  h 4  `5!    4(P 4 4  `,g0L,10kH0 ԥ f0)ĭ9)9҅xh(ĥŐL i,1HȊ©L,52,9-P" a{)KORY\aelpu !$(+.147<?BFILORUX]`finsw| !%*/369<+;CNU\eh "*-036<BLORX_fj &+38;?DGLTot <?BGLQgjox',/25:BG̑ʈ0 Ցʭr̈A萠L: ֦ڱΑ0Б֤ h L  p,:0 JfiΥiώJe΅Хiю@ B $p̑бʑΈ0 Б̱ΑʈeمΐeمАA萿 :  `ʝ"`t  !#%')L: 8p,:Jf׮@$PA B $P@/A'ʤ˅΄ϥ̤ͅЄ B $̑бʑΈ0Ƞ h L: $)טɀIim>ٮ@8pذ `$0"8,:Jک@ׅפ؈۩MjL,:08*Ȅ B ,:J}΅н(I I $0;P̑бʑΈ,:JՐrx 0, )ߍ:) J)*PR,T,V( : `,k<,: JI`I`<,:J̰`=m@>,:J}ʅ̽(I I `<Mj,:0pJՐ̑ʈ`pJհ0`ՑʭrpȐ`=m@< B h A$g " x) (,`% (gL,}0, `gé ĩ `:) j:;jN;~j;O,:0'???>>8?>p<<AAA@@8A@q==C)CB)B C}0 x) `(`hh% ( ΍ ύ逅Ñ}`` " ( ĩ~Íĩϭ & &υΠÑΈ~ F ~ҰةeÅÐн},,P,`,g$ ( efh) `xÙ+(`xÙ&(`)4`)5`)6`)7`)8`)9`,i0!M:0p ȱq L `" (~)y ~JJ* I `x|x|,,}P-X~ F }~L } `,,i0L È`,g HH`LL! l      5  Hdcefh&+si  M0   h) `(" (  (È& 8  `)2ȱÍ3`)1`Ɂ" (cefd`Hc <Le Le ,g0L HH`! ( 9EKQWbmz`(" ((è%È`2ȭ3`1`d`c`+È`&È` & IMk`4`5`6`7`8`9`<ȭ=` & @jI`:ȭpȭqéL ==L: ,lCL <=L: <,n)LL8 L8 u:L8 ;)ߍ;j`; ;j`uBL8 uCL8 u)u;) u;L8    x) `(,  LuL-upp<`uqq=L: vuL L L #1:CY` 9C<m><=m@=>@?AL8 >m<>@m=@<=L8 <m>?=m@AL8 C9L8 ; ;k`;);k`,@`<,m p<L<`<p<`,ms<L=q=L: ,lXґȥӑ,10 h0  `,g0L  ҅ӥĥŰ+,0p 4 Ls  Ls i )"|tȌs|st HH` MjH,: <J h̰ <rh,oL`%CYgu9 Ln90$0%,7 ҥ L$0T,8OK50P;ҥ,8 L%\   8҅¥Ӆé҅L,5,6  & @jIH,5 p  He҅Ґhe…å逅h,23Lh?BEJMRUX]`h  2;AGMS[fot|              . 3 6 9 < ? B E H N S V \ _ b w      ! ( 0 7 I N S _  . G R Y f {    ! $ 4 9 F I P S V \ a h m p s x |     ' + < ? D G N U f k p x epɀjff&ݥeepɀjffݠ %)  %)`%  0.)      0  ` ` @ ``8٨JJJ ) u˘ vͽʅ̆`8Hi #i,$0F y բӅLx  mӥmԐL] h `  )`%)8`)    H   ʥ)Ģ    H Ģ L E% %) L 8`ۅ&ۥe륅eٍeڍ808٥8٥ 8مڅ H , V Εm٭mڭ))njnjnjfjfjfj+mӥmԐ8L( Ӣ й` m j`Hآ Hӭԭ h h`8٭028ٍڍ0Z$eٍeڍm٥m8٥08ٍڍ`8٥058ٍڍ0ԭ V 8fxL@ ] I)!) g 80 J8}L y L 0yʽz0 y L7  Lh `*f*&*)` ϭPh0 йPL)`)L` L``  `L` H , 8 V ТΕLϦI ] +)J* g I`LL) @L) L8``Lթ`~L8L)  =H 'HH N M))Mhh0 }LO}~~Șݻ~`}}~L< L }ީ~` ɠɀ)ӮԮmwӥmxԐ mi` HHGH`  &xix 0ޤՐڢ,P<0 )ߍL- J,P,QJ,R,SJ,T,U,W`,t0L40 ( dȅɥŐ ĐL `ʝ`))ժuvЭ H ʊJyjhz|ֆ׆ح)JfJf$PIJfש ʈ8 @ש wx LVخ ʊJJJ莟mww HH`! (`ɖ" (èÈ``,t0L4 HH`L  d!  `ɖ" ( dÈ  ``,t0L4 d0Cս30. , V  @„ȄL5/((((PPPP @``` @@@@`xp<@ @ :H9H` (# ( -l..PcJt`,t$ ( t`tL4`,t0L4www """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwwwwww(C) 1980 Apple Computer (+@EIR[ty} NQ9Copyright (C) 1983 Apple Computer, Inc. Graphics Driver..GRAFIX b """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwwwϤҐ мφi`Jf`<,&ʰ,i8i#Hiihifʦʆi) v`i,ʐi,iPIIʥ)ifʦʆ̐pLj/Fϐ&Ȅ`'@τ`Fϐ@ E҅F8ئȢΆѽϽ`/(L%τ`ϩE҅0Ȅ(fL% ('Άѽн`8Hٰ hIiHمh8Iif٤Φݰ>Jj8ۅe݅eޅ $  m`!J8݅ eۅ$  m` , V $צ!37666&&&f|L"pY|?|sp666&&&f|s p~A&?|p@ 1B 0@1@a|sz`@`O``3pf|x|@|sD"Y`L`06pf|??|CN`|VOLUME NAME (/DISKNAME) OR DEVICE NAME (.Dx)"P12);::"80C";a$;:Zb$="CHANGING DISKS"$d=23:=0::"80C";b$;::12).n=12:=20:"MAKE A NEW MENU FOR DISK: ";N$xN$)<2110=N$ :210 I=1L(A$(I),A$))200B$0 WAP /// SIG MENU.MAKER PROGRAM (v. 6.2) =".D1"210: Coldstart (320: Warmstart &*X=11000: TEXT SLOW-DOWN LOOP ,X.1 CHANGE DISK SUBROUTINE23œ202:2200<RFa$=" YOU MAY SELECT YOUR DISK BY    ) . 6 = J P S X [    $ 3 : = F d  > B H M s `e|&+.QVYcjuy~':{%(-47=FMUX\_jmz  .169DWfy   % * > A H K Z v z }      % , 1 5 : = B K R Z _ b g n s x ~ /47=G\x{~'+.149?CGIKMOQSUWY[]_acegikmoqsuwy{}J) ܭL FܪJJJJ)`'+9;=?ACEGINR\aejns~  #&).369<ADGJMP^g $*-06=HLORWcfloruzp Q%Q̑`pPIE1pΦ#$01ʐ1`JJJJ)`%υߥ`1(ȦJJJ`&&*`JJ` **&*&ߥ`J` ***`` ` Jjjߊ` ߊ`JfJfFߪ߆` `JfJfJfF`ߩ`$011̰JJJ LP \LD$7߭$PH8 nߩ nh ߍϭ - k, ϥ- kϱϮEϑʩ`P z  HH` k(h`$0#$E$0p Q%Qʑ`pPIE1p$E$0L|ppIIIYYYy|LpAY?|?~|p@?x~p@|s@`8\qp666&&&f|LOY?|0 1B 0@1p1 |spp??``G`06pw@yY9f|?@<`||L `OG`g3pY|@|sp``p666&&&f||||sap666&&&f|yg|s<p666&&&f|sx9&?|@0@ 1B 0@x!F|Lp~``8_pIIIYYYY|333322222222266666666&&&f?|p@??~xpp??|L~IIIYYYy|s"pf|@|s@p666&&&f|L pAY?||pC?~|1G?~vX!G|Lx?p@@`o@`pwpG@&Y|yg||s"`OG`g3pf|@|L``pIIIYYYY|||L `pIIIYYYY|yg|LaxpIIIYYYy|LpY?|@3OrL1C?~vxH!G|s`~`8_|p666&&&f|LLLLMMMMMMMMMIIIIIIIIYYYY?|p?|s666&&&f|L#pY|@|LpIIIYYYy|s@pA&?||@|s|p@`o@`pwp@f|yg||L"Y`oL`w7p@Y|@ @|L`pIIIYYYY|||s@p666&&&f|yg|s~pp666&&&f|sp&?|C?~|qC?~v~H!G|L@`8_|pIIIYYYY|333322222222266666666&&&&?|@|p@?~xp@xpA|LIIIYYYy|s"pf||LpIIIYYYy|L@pYY?|p?~|p@?~xp@?~x``|L~p@`O``3pY|yg|||s"Y`oL`w7pf|? `|s`p666&&&f|||@p|L@pIIIYYYY|yg?|sx666&&&f|L"pgY|px|L0?pIIIYYYy|s@pA&?||pB ?>}rL1G?~~vX!G|L``pIIIYYYy|Lx9Y?|?~|p@?xxp@|sx|\`p666&&&f|?||pCMyvHqA?|@?G_gg'cw>|`@?@!DFl `,6w>|Lpq<|s`~p666&&&f|`?|?|LaxpY|x|L `|\pIIIYYYY|3?&?|p?~|qC3O~}vH1vp1?|Lp`pIIIYYYY||p@C?~xp@??|LpIIIYYYy|Lp 0pY?|pO?~|1B ?|yvH1yfXa|sx?p@p666&&&f|LpAY?|~||L`D"Y`L`06pGY|? L=?`|LLLLMMMMMMMMMIIIIIIIIYYYy|spf||Lp~`pIIIYYYY|?||s<p~f|yg|sa|\p666&&&f|L@Y?|@|p@?~xp@xx@|sxp666&&&f|?| 0CL@AG@?|sp666&&&f|s(p&?|p?O~|qC?|yvH1yfXa|Lpp??pIIIYYYy|sp~A&?||@?~|p@?~x`@||s`H(PY`Gl`06pwAyYYf|? Ls?`|333322222222266666666&&&f|L"pY|@|sxp666&&&f|?|?|L``pIIIYYYY|yg|sp666&&&f|s~&?|x|Lx|\`pIIIYYYY|?||pCMOyvHAG?|LxIIIYYYy|L$ap'Y?|p??~|p@?~xp@?~x``|s|p666&&&f|LpAY?||0B 0@ 1F0@~!F||L`8?0``G`06pw@IYY|??|CN`||spf|@|LxpIIIYYYY||?|LpIIIYYYY|yg|?s666&&&&@ODa`D`I @^p?766&&&&p3@ w @>~ 0C 0@ 1F0@AG @?IIIYYYYpOI @^?|p@?~xp@?~~@?Cpx`766&&&&pO|I__@?0@ 1B0@0`@?GGFl@,6w?wyyX>N|@O@ Fg@gcI ^@?@766&&&&|@?@|766&&&&|@?~766&&&&p3w x>~@ 1B 0@1?@x@O#p8?@|IIIYYYYp?33332222222266666666&&&&p??~pp?~x@IIIYYYY@?D!D"w >??p766&&&&pOIp? @^3~|qC?~yvH1G?~@Ox_oo /wI ^@?D Fg@gcw >@OIIIYYYY|@O0pIIIYYYY|@?pIIIYYYYpOI ^O|qC3O~}vH1?~y~@??Bpx?`766&&&&pOLLLLMMMMMMMMIIIIIIIIYYYYp?`?p766&&&&@OD!D"I ^IIIYYYYp3wp? @>~@@?_oo /ww>|@O!DFo`owI _0@OIIIYYYY|@?`C766&&&&|?766&&&&p3w @>~O|qC?vH1~y~@Opx?`IIIYYYYp333332222222266666666&&&&~@??~|p@?x`IIIYYYY@?Da`Dbw @>IIIYYYYpO@ I@ @^p@?~|p@?@??@O_gg'cI0^|@?!DFo`oww?p0|@?`766&&&&|?x`@O`IIIYYYYp?766&&&&@OD!D"I `^x?@~IIIYYYYp3wp? @>~3?~|1B ?~yvH1?~(J)=A$(I),1,31)!J/2<>J/2)=4:=+1:ۙ=44B$(J);:J=J+1I:1,180,22:2,280,21:2,2380,23:8A$(1000),B$(1000),C%(511),C$(20),name$(20):=10:=0UCA=128:LCA=UCA+32CT=15 IF PREFIX$= PREFIX$+MID$(B$(I),a$,1)="/"5060:s=s-1 5030=a$240 MENU.MAKER 6.2 * Thanks to C.M.Davidson for his help!l; G$:::320H: Error Routine 202:U=11:"79C";"BAD PATH ERROR (NO DISK IN DISK DRIVE OR DESIRED FILE NOT FOUND.)"X=11000:X:::210Z a$="{,|,~,}; selects; back 1 leve 1600 &:WW=1:0 :SEG=1;".D1/SEG.F" SEG=1".D1/SEG.G"diskname$=3802  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T READ PASCAL TEXT FILES."04=10:"7M$="NOVEMBER":1750M$="DECEMBER":1750826);"-";M$;" ";Ѡ,2));", ";"19";Р,2);" ";/П,2))=>13П,2))-12;џ,6);:1780$П,2))=0"12";џ,6);:ٟ;$П,2))=>12" PM-":" AM-" 1830WW=1530 =26:=211660,1670,1680,1690,1700,1710,1720,1730,1740^M$="JANUARY":1750hM$="FEBRUARY":1750rM$="MARCH":1750|M$="APRIL":1750M$="MAY":1750M$="JUNE":1750M$="JULY":1750M$="AUGUST":1750M$="SEPTEMBER":1750M$="OCTOBER":1750T 0")2070H540R\A$="RUNNING "+B$(I),16,B)f"79C";A$;:=0pB$(I),16,B) z::SEG=1".D1/SEG.T"t=+B$(I),16,B) yCT=CT+1~240:=24:=0:"@ ..... "DATE.TIME.LINE" ....JM=Ҡ,4,2))BTM1630,1640,1650,0=+IBOTM/2-.5):I=IBOTM:I/2=I/2)I=I-1 œ2120B=B$(I),16)," ")-1 B$(I),"BASIC 0")850B$(I),"TEXT 0")890 B$(I),"CAT 0")1140*B$(I),"FONT 0")18504B$(I),"FOTO 0")1930>B$(I),"PASTXB$(I);v:520: 500THPOS=4:I/2=I/2)I=I-1I=IBOTM THPOS=44:I/2<>I/2)I=I+1I2=-1:I=I-2:IBOTM<30THPOS=44I=IBOTM/2)*2:=+IBOTM/2)-1:CA)"PRINT.ALL": OA+P 3HA=(81+UCA)A=(81+LCA):::: OA+Q Quits 3IA=(83+LCA)A=(83+UCA)"PRINT.SHOW": OA+S 2JA=(68+LCA)A=(68+UCA)/Screen.Savers/HELLON=THPOS:B$(I);XA<8A>11540bA-7640,660,690,720l:=THPOS:ٺ1600 =Q:WW=0A=:A=21A=9&oldprefix$=40A=31410: Control C "aborts" program to Basic(:A=13770: Return Selects a file *DA=27:50: Escape to change disks/FA=324000: back out one directory level 3GA=(80+UCA)A=(80+L"BASIC 0":150A$="TEXT 0":150A$="CAT 0":150A$="FONT 0":150A$="FOTO 0":150A$(L),"BLOCKS")510*=27:=19:"FREE MEMORY AVAILABLE: ";=7:=20:"80C";A$(L);$:=5:THPOS=4:I=1:IBOTM=J-1:620Q=:=26:=21:sic; +Q Quits."r12);::"80C";a$;:+w#9,"DISKNAME.DAT":#9;DISKNAME$:#9|d$=DISKNAME$$=23:=0::"80C";d$;::12)201M=3:=14:"This /// SIG Disk is \^ 19";Р,2)", Washington Apple `, Ltd."=4:B$(1)="":B$(2)=""A$=16,B) THEN 240 #1, d$="":=10:"80C";d$ ž#1300I=0"I=I+1:#1;A$(I):290,#1 6L=I-1@j=1:same=0 J:SEG=0 Tœ2030^CT<1CT=1cCT>13000Zha$="{,|,~,}; selects; to new disk; =23:=0::")``.`5`=`C`E` `BGRAF (C) APPLE 1980j @@@@ @``` kLK``9(89:9g:h:h L89:mm95:6:6hg gh h 99 O S   L `ee m`iɂ`0`hIhJh\h] wh]h^ w\\ ]] ]L ]L\A \A JHIH`i8\i]i\`\]`K`M %b&*L+ 16>:)    kLGA3/1.01/LINr GRAFIXMO @O @IIIYYYY@p@O`>prIIIYYYY|@x@aIIIYYYYpOI X^?|p@?~xp@??~x@? o~;c~766&&&&pp?O?}yG?yfASUPPORT YOUR /// SIG: BUY DISKS, SEND ARTICLES AND JOIN THE TCS!! EAR. THE BEST OF BLOOM: DISK 2 K 79C";"PRESS ANY KEY TO HALT LISTING"::202 1020#2,B$(I),16,B)ž#242:::1160Z=1#2;A$:"78A";A$Z=Z+1:Z>1842:::Z=1980*:=23:=0::"79C";"CONTINUE...?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"10.GRAFIX jj# \\JHFD=;9210-,+*)!   v Q     `OLIHEDCB?<;8541.+*x  `"hhhhhhhh    HH`XVTRPN#ITCHK WBUFLEN DUFLEN SOSWRITEGSWRITERWBUF ?:72-(SYSFONT SYSFONT RETADDR njDRAWIMAG DRAWIMAGINITCHK ITCHK WBUFLEN RETADDR INITCHK ITCHK RANGECHKECHKWBUFLEN UFLEN SOSWRITESWRITERWBUF  NEWFONT NEWFONT INITCHK =+SOSWRITE@.!RWBUF  83& INITCHK uITCHK GRAFIXON GRAFIXONWBUFLEN UFLEN SOSWRITESWRITERWBUF zBUF GPGSREQDLGRAFIXMO GRAFIXMORBUFLEN 9RANGECHKwWBUFLEN ASOSWRITERWBUF \SOSREAD GBASADR TSOSSMARK$INITCHK ITCHK INITGRAF INITGRAFWBUFLEN RETADDR ISOSDSTATGSCB kSOSOPEN INITCHK READPARM5CREFNUM DWBUFADR ?BMOVCHK RBUFADR 7WRITEPAR=SREFNUM FRREFNUM 6WREFNUM >INITFLG KSOSCLOSEhhhhhh HHHH`&$<D^Z FpHx  )) y xHHHJJiH 詏 鮀 `}wqnkjba_\[ZYXWVURQ$hhhhhh HH H)HHH`20+*)Hhhhhhh HHHH`&$< 詏 )x `a^]NMJGF>=<10/.+* )) y xHHHJJiH 詏 鮀hhhh  HH`420.,*)&#"! Rhhhhhh    HH`DB@><:983.+('&$h J)` `!0 nljhfdcbQNMLJFEDCBA<;6hhhhhh  HH`420.,*)&#"! Rhhhhhh    HH`DB@><:983.+('&$hhh-&#  P  `"hhhhhh  HH`420.,*)&#"! Rhhhhhh  B B HH`yyP`GB HH`)r` @A>~|zxvtslgbWTSRPMED=hhhh   HH`420.-&#  Phhhh   HH`420.h   HH`420.-&#  Phhhhhhhhhh  HH`DB@><:86421.+*)'jhhhhhhhh    X XLJFE>987410/-   `+(%" Bhhh h h h hh hhhhhh  HH`ZXVTRPNLJHFDB@<;85431hhhUFLEN SOSWRITESWRITERWBUF ~zvrRETADDR $ INITCHK ITCHK XFROPTIO XFROPTIORANGECHKNGECHKWBUFLEN UFLEN SOSWRITESWRITERWBUF  RETADDR PLINITCHK sITCHK VIEWPORT VIEWPORTWBUFLEN }UFLEN SOSWRITESWRITERWBUF  xplhd`\X ASADR SOSSMARK SSMARKRETADDR  z v INITCHK  ITCHK XYCOLOR XYCOLOR RWBUF  F SOSREAD  SREAD RETADDR  SOSDSTATGPGSREQD GSREQDSOSCLOSE SCLOSEGRAFIXMO AFIXMOGLOAD GLOAD RBUFLEN  N RWBUF    SOSREAD  EAD GBASADR GBASADR ( ASADR SOSDSTAT~ SDSTATGSCB  INITCHK { ITCHK CREFNUM  EFNUM RBUFADR  ADR SREFNUM  EFNUM RREFNUM  M WBUFADR   ADR GSAVE GSAVE WREFNUM F  M GPGSREQD5 GSREQDSOSCLOSE> SCLOSEWBUFLEN 8  LEN SOSWRITE; SWRITERWBUF C F INITCHK  ITCHK BMOVCHK  OVCHK INITFLG  ITFLG RWBUF  F SOSDSTAT" SDSTATGSCB % CB INITCHK  ITCHK CREFNUM  EFNUM  T P SOSDSTATj SDSTATGSCB LINEREL LINEREL INITCHK g ITCHK WBUFLEN  UFLEN SOSWRITE SWRITERWBUF } d ` \ X RELEASE RELEASE  RETADDR % ! INITCHK  ITCHK LINETO LINETO WBUFLEN  UFLEN SOSWRITE SWRITERWBUF     CALCABS x q ABS RETADDR CALCABS  ABS RETADDR  SOSDSTAT SDSTATGSCB INITCHK  ITCHK DOTREL DOTREL WBUFLEN  UFLEN SOSWRITE SWRITERWBUF SWRITERWBUF  RETADDR c _ < 8 INITCHK O ITCHK WBUFLEN Y UFLEN SOSWRITE\ SWRITERWBUF T L H D @ DOTAT DOTAT RWBUF ZRNJFCALCABS BRETADDR SOSDSTATSDSTATGSCB  MOVEREL MOVEREL INITCHK ITCHK WBUFLEN UFLEN SOSWRITEWBUFLEN !UFLEN SOSWRITE$SWRITERWBUF BUF RETADDR ieB>INITCHK UITCHK MOVETO MOVETO  WBUFLEN _UFLEN SOSWRITEbSWRITERETADDR INITCHK ITCHK RANGECHKNGECHKWBUFLEN UFLEN SOSWRITESWRITERWBUF  INITCHK ITCHK FILLPORT FILLPORT RETADDR tpINITCHK ITCHK PENCOLOR PENCOLOR RANGECHKNGECHKWBUFLEN UFLEN SOSWRITESWRITERWBUF |x FILLCOLO FILLCOLO TRETADDR  SETCTAB SETCTAB  INITCHK ITCHK RANGECHKHKWBUFLEN UFLEN SOSWRITESWRITERWBUF  ' SDSTATGSCB  INITCHK  ITCHK XLOC XLOC RETADDR     SOSDSTAT SDSTATGSCB   INITCHK  ITCHK YLOC YLOC  d,ch); page(output); write (chr(cleos)); The above is mostly self explanatory, being only a succession of formatted text lines. It also gives the user the opportunity to review "Puffin" functions. Pressing any key clears the screen and present@??B`766&&&&p@@O?pI_|`@O0po~;`~IIIYYYYp3v?~@?3OrL1C?~?~f`@O`@IIIYYYY@p?qx?~x@IIIYYYYpO@ @I @^|pC ?>}rL1G?~AG???x766&&&&pOI @^~@OD!DFl `,6I?^|C3Mp|@LLLLMMMMMMMMIIIIIIIIYYYY@?D` w @>@O#`IIIYYYYp@@?~7'|@?@|o~;@|766&&&&pOpI _@?~|p@??xx@?`@766&&&&pp@ yG0@A?766&&&&p3LDw >~|pC?~|1G?~qA??IIIYYYYp3w @>~|~|p@?~xp@?~@?D?xDFg`'6wIYY>|C3 @=|@?33332222222266666666&&&&@O @I ^@? 766&&&&pp@Ox@aIIIYYYY|@?`>pr766&&&&p3w x>~@?x@O `@o~;c~IIIYYYYppO?MyG?yfAIIIYYYYpOtD I `^p@?~|p@?p???766&&&&pOI@ @^0 1B 0@1 @@OD@~DFl@,6I?IYY&^p|pqs|@?!Dw >s you with the option menu. You should find find something similar to this greeting routine a useful and attractive program enhancement. PUFFIN July 23, 1986 Page 4 Bloom ssage in the lower left hand corner of the screen and awaits a keypress. You may view the last screen of the catalog to your heart's content. Then press any key to clear the screen and return to the menu. While you're in "displaydir," you might as well fi ; write(' "F" PASCAL foto file. '); gotoxy(6,19); write(' "D" PASCAL data (binary) file. '); gotoxy (55,23); write('Press any key to begin.'); read(keyboarays the most recently requested catalog.'); gotoxy(6,16); write('3. TRANSFER Converts a DOS 3.3 file to a file of type: '); gotoxy(6,17); write(' "T" PASCAL text file. '); gotoxy(6,18). '); gotoxy(6,10); write('The program performs three functions: '); gotoxy(6,12); write('1. CATALOG Presents a catalog of a DOS 3.3 diskette. '); gotoxy(6,14); write('2. DISPLAY Displ gotoxy(6,2); write(' Welcome to PUFFIN!'); gotoxy(6,5); write(' Written by "Dr. Wo" of Washington Apple Pi. '); gotoxy(6,7); write(' Modified by Al Bloom for the Apple /// writeln('Welcome to PUFFIN!'); The message certainly adds nothing to your knowledge or feelings of well being. Replace the offending two lines with the following lines of text, right after the "page(output)" line: write (chr(cleos)); " I replaced the "Welcome!" with a full-screen greeting which gives the user an idea of the program's features before presenting the option menu. Go to the main program body. The following two lines are to be replaced: gotoxy (0, 5); nal Greeting A lot of programs could stand improvement in the crucial "first impression" screen. PUFFIN again provides an example. It flashes "Welcome to PUFFIN!," then throws the menu at you on the top of the screen. My overall first impression was "Huh? line insert a "gotoxy (0, 2);" command. This gives you a blank line separating the column titles from the actual catalog listing and conforms with what the program does when a catalog display fills up the screen. A Professioreen and to erase any garbage left over on the rest of the screen. This also leaves the column titles on the screen if your catalog listing goes to more than one page. Then go down four program lines to the "displayheader" procedure call. Right after that PUFFIN July 23, 1986 Page 3 Bloom PUFFIN /// Replace that "gotoxy (0,1)" with "write (chr(cleos))" to leave the cursor at the top of the scx up the display a bit. One problem is that the option menu is still staring at you during the display of the catalog. Go back to the beginning of the "displaydir" procedure and find the line that reads "gotoxy (0,1)" right after the "page (output)" line.  PUFFIN /// Conclusion As I said in the beginning, there are lot of Apple II Pascal programs out there. If you find one that performs a function you'd like, it is easier to convert that prograrch, Virginia Tech, Blacksburg, VA 24061 2303 San Marcos Street, Blacksburg, Virginia 24060 Office: (703) 231-7921 Home: (703) 951-2025 CIS: 76656,1514 BitNet: IRBLOOM @ VTVM1 UNDERLINING IN APPLE WRITER ALLAN M. BLOOM, PhD CDP Institutional Rese".D1/MENU.MAKER",220 d$="" A$="PRINTING "+B$(I),16,B)=01:=0::"80C";A$;:#3,B$(I),16,B)Z=1#3;b$:"78A";b$Z=Z+1:Z=18:1290 1260 #4,B$(I),16,B)#5,".PRINTER"+ž#4#5;12):::".D1/MENU.MAKE30C$="N"C$="n"1160;:=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING": $1020.202 8::Z=1B::=23:=0::"79C";"WOULD YOU LIKE A PRINTED COPY?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"1170*C$="N"C$="n"e tools presented here -- allowing the Pascal programmer to read and write Business BASIC random text files, are themselves a significant contribution to inter-application compatibility on the Apple ///. ful language, especially when augmented by SOSIO's ability to access the operating system. The techniques presented here aren't limited to the immediate problem. They can be applied to a number of situations. However, thwing the Pascal programmer to read and write Business BASIC random text files, are themselves a significant contribution to inter-application compatibility on the Apple ///. October 19, 1986 e, especially when augmented by SOSIO's ability to access the operating system. The techniques presented here aren't limited to the immediate problem. They can be applied to a number of situations. However, the tools presented here -- allo WRAP-UP As I said in the beginning, Business BASIC random text files are alien to Pascal. Just because they are alien does not mean that a Pascal program can't read or write them. Pascal is a flexible and powerful languagile, you must use SOS CLOSE to close it. Once you start with input/output via SOS calls, you have to stay with them. SOS CLOSE doesn't have the options that the Pascal "close" has. It behaves like the Pascal "close" using the "with lock" option. URCE FILE REFERENCED ABOVE. ALL ARE PASCAL TEXT FILES AND REQUIRE PASCAL TO READ AND USE. get started. I suggest you get a copy of PUFFIN and try the changes I've listed in this article. It could be the start of something great. NOTE: SEE THE "PUFFIN3" SUBDIRECTORY ON SIDE TWO FOR THE TWO APPLE II PASCAL SOURCE FILES AND THE ONE APPLE /// SOam than to write an equivalent program from scratch. I hope I've shown that there is nothing hard, much less terrifying, about converting it to run on the Apple ///. Have I covered all bases? Certainly not. But I think I've given you enough information to  If you have worked with Apple Writer for any length of time, you have probably noticed that the program handles underlining strangely. The "underline token" (default [ ]) toggles underlining on and offM$="NOVEMBER":1750M$="DECEMBER":1750826);"-";M$;" ";Ѡ,2));", ";"19";Р,2);" ";/П,2))=>13П,2))-12;џ,6);:1780$П,2))=0"12";џ,6);:ٟ;$П,2))=>12" PM-":" AM-" 1830WW=1530 =26:=21EAD PASCAL TEXT FILES."04=10:"78C";"ANY KEY RETURNS TO THE MENU."!>G$:::".D1/MENU.MAKER",320R",220(204::"79A";""; 2D=1:F=1 <#4;a$ FD=D+1 P#5;a$ZD=60#5;12)dD=60D=1nF=F+1::d$;::Y=1100:Y x13402  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T R____| Conclusion | | for i := 1 to length (strg) do begin | | upperchr (strg [i]); | | end; {for i} | | end; {UPPERSTR} | |___________________________________________ | | end; {UPPERCHR} | | | | procedure UPPERSTR (var strg:string); | | var i: integer; | | begin ____________________ _ | procedure UPPERCHR (var ch1: char); | | begin | | if ord(ch1) in [97..122] | | then ch1 := chr (ord (ch1) - 32); | | {endif} -------------------- Clear to end-of-line CLEOLN PRINTMENU Change from 29 to 31. Clear to end-of-screen CLEOS DISPLAYDIR Change from 11 to 29. ___________________________ning before the [,] leaves a space between "great" and the [,]. That looks dumb. Underlining is done in the most general way Screen Command Variable Procedure Required Correction ---------------------- -------- ---------- | | | | If you toggle off underlining after the [,], the [,] is underlined. That grinds my molars. Something about having a mother who is Phi Beta Kappa in English. Turning off underli | | | | | | I'm /great ,/and you're not. | I'm great , and you're not. | | | ----- | | | | | I'm /great,/ and you're not. | I'm great, and you're not. | | | ------ | | | | | | Apple Writer file | Prints like this | | | in an Apple Writer document. When you put a [ ] in an Apple Writer file, everything is underlined until the program sees another [ ] character. The concept is simple, but the implementation is strange. Consider this example: 1600 &:WW=1:0 :SEG=1;".D1/SEG.F" SEG=1".D1/SEG.G"diskname$=3802  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T READ PASCAL TEXT FILES."04=10:"7