LnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!)8 .d1/hello........."MENU.MAKER" (Version 4.55.1)=".d1":100: Coldstart 200: Warmstart (GOTO 30) (I=1L2(A$(I),A$))90<B$(J)=A$(I),1,31)!FJ/2<>J/2)=4:=+1:ۙ=44PB$(J);:J=J+1ZI:8dA$(1000),B$(1000),C +UPSHIFT.INV5!DISK.INFO DISKNAME.DAT;;|!++REQUEST.INV |!+-READ.ME.FIRST OUTILS.5|;|;UTILS.6|;|;UTILS.7|;!-UTILS.8|;|;III.BSB.110602Bu' )BGRAF.INVg(|!L+,DOWNLOAD.INV|!+,FILETYPE.INV| !x*MENU.MAKER  G4 QUICK.NOTE|,RENUMBER.INV >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@L%(511),C$(20),name$(20):=10:=0n: GOSUB 1120 x=+B$(I),16,B)140 PREFIX$=.D1 #1, ž#1180I=0I=I+1:#1;A$(I):170#1 L=I-1j=1:same=0:/#9,".D1/DISKNAME.DAT":#9;DISKNAME$:#9Ta$="{,|,~,}; 13П,2))-12;џ,6);:1580$"П,2))=0"12";џ,6);:ٟ;$,П,2))=>12" PM-":" AM-" 61630@WW=1390J=26:=21:1400 T1400 ^:WW=1:h |: CHANGE THE FONT".D1/downloa="FEBRUARY":1550M$="MARCH":1550M$="APRIL":1550M$="MAY":1550M$="JUNE":1550M$="JULY":1550M$="AUGUST":1550M$="SEPTEMBER":1550M$="OCTOBER":1550M$="NOVEMBER":1550M$="DECEMBER":1550826);"-";M$;" ";Ѡ,2)8=11010<9F=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING":P2,280,2 Z1310dn"x ..... "DATE.TIME.LINE" ....M=Ҡ,4,2))BM1430,1440,1450,1460,1470,1480,1490,1500,1510,1520,1530,1540M$="JANUARY":1550M$SH$ SLOW FLASH :120#w=w+.5*(w=0):I=1(w*1000):: Halt Subroutine::=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING.": 1300(=23:=0::"79C";"CONTINUE...?":'(<>89<>121<>78<>11013202=70#4,B$(I),16,B)#5,".PRINTER" $ž#4120 .#4;a$ 8#5;a$ B1070LV:=24:=0::-`#8,".D1/FLASHNAME.DAT":#9;FLASH$:#8%jFLASH=110: FLASHER SUBROUTINEtSLOW=110~FLASH/2=FLASH/2):۴ =11:=07 FLA:=".d1":=12:=0:120=+B$(I),16,B)1408A$(1000),B$(1000),C%(511),C$(20),name$(20):=10:=0 :120;::=23:=0::"79C";"WOULD YOU LIKE A HARD COPY?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"1010C$="N"C$="n"12C$<>"y"C$<>"N"C$<>"n"850\C$="N"C$="n"1000;f:=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING": p840z2,280,21K:=23:=0::"79C";"TO PRINT OR RETURN TO MENU, HIT THE SPACE BAR":C$:C$<>" "930:ۺ1000 $(I),16,B)$=01:=0::"80C";A$;::12)E=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING"::2,280,21 840#2,B$(I),16,B) ž#2910*#2;A$:A$:12304810 >:120*H:=23:=0::"79C";"CONTINUE...?":0RC$:C$<>"Y"B$(I),"BASIC 0")700B$(I),"TEXT 0")740B$(I),"CAT 0")960B$(I),"FONT 0")1660B$(I),"FOTO 0")1730400A$="RUNNING "+B$(I),16,B)"79C";A$;:=0B$(I),16,B):A$="LISTING "+BOS=44:I/2<>I/2)I=I+1&I2=-1:I=I-2:NIBOTM<30XTHPOS=44I=IBOTM/2)*2:=+IBOTM/2)-1:0b=+IBOTM/2-.5):I=IBOTM:I/2=I/2)I=I-1lvB=B$(I),16)," ")-10 =Q:WW=0A=:A=21A=9oldprefix$=A=31110A=27:=".D1":980A=13630=THPOS:B$(I);A<8A>11400A-7500,520,550,580:=THPOS:B$(I);:380: 500THPOS=4:I/2=I/2)I=I-1I=IBOTM THP="BASIC 0":40,A$="TEXT 0":406A$="CAT 0":40@A$="FONT 0":40JA$="FOTO 0":40TA$(L),"BLOCKS")370*^=27:=19:"FREE MEMORY AVAILABLE: ";h=7:=20:"80C";A$(L);$r:=5:THPOS=4:I=1:IBOTM=J-1:480|Q=:=26:=21:140> selects; sets Prefix to .D1; aborts."12);::"80C";a$;:d$=DISKNAME$$=23:=0::"80C";d$;::12)1,180,22F=3:=14:"This /// SIG Disk is \^ 1991, Washington Apple `, Ltd."=4:B$(1)="":B$(2)="""A$d.inv"C$=B$(I),16,B)array$="C%"name$=34)+C$+34)getfont(@name$,@array$)loadfont(@array$)30#5,".GRAFIX"".D1/BGRAF.INV"D$=B$(I),16,B)name$=34)+D$+34) GLOAD.D$16);1) GRAFIXONX=120BASIC UTILITIES  !"#:num.drives=3:29):60040e3:"Save "+pgm.name$+" w/o utilities to drive #:";:con$;:z$:cof$;z$:z$=13):z$=".D"+z$+"/":60010-60999:z$+pgm.name$fz$+pgm.name$:60000h"/BASIC/UTIL.EX":?j---------------------------------------------10:pgm.name$="UTIL":: 60000 60008< "This is where your program will start when you RUN.":`"a [ [ Utilities - short ] ]bXccon$=5):cof$=6):œ=860005:ۻ=3060006:"ERROR # ";;:" has occurred.": d}2{ TIME.PROGRAM |{ UTILS.8v|;'  'BORDER.PROGRAM }2{.CALCULATE.AREA %}/!)GRAPH.PAC |{)*GRAPH.PLOT n}2{-LOAN.PAY.CALC '(|!PDL.TEST  | ! /VC.FILE.PRINTER | {-UTILS.7v|;'  'CIPHER.DOCUMENT}!!.CIPHER.UTILITY }}!!-FIND.REPLACE | !-LINE.PRINTER | !a3 NEWDOWNLOAD | {(S.T.E.P.  |{+REM.REMOVER kP |!-RENAME.DIRECT r |!0,RENUMBER.DOC } |!4HEX.ASCII.DUMP g||UTILS.6v|;'  '.BASIC.RENUMBER Q |!#COMPRESS.FILE e|{'*DEMO.THREE |{-DISKDRV.CLEAN WH|!5,FIND.REPLACE [ |!a3 %MODEM UTILS.5v|;'  '$UTIL |!~(UTIL.DOC%,T|!}A3/1.1B CAPS -------------"t [ [ Utilities ] ]?~----------------------------------------------------------"-----------------------------" [ [ Main menu ] ]"-----------------------------X걜:3:=80:"(p)rint (d)isplay (f)-------" [ [ Init drive ] ]"-----------------------------/"Init drive #:";:60610:=z$:60620:60000060100:z$=13):60000:z$=".D"+z$+"/":"-----------------------------" [ [ Catalog check ] ]"-------------$r#8,"/BASIC/HELP":ž#8#8:60000w#8;zz$:zz$:60535?----------------------------------------------------------" [ [ Filer ] ]?----------------------------------------------------------"------------------------------------------------":" --8 REM [ [ [ ] ] ] ] ] ] ]":" --9 REM-----------------------------|----------------------------":=-4:n"o-----------------------------"p [ [ Help ] ]"q----------------------------------------T"File name? ";fi$:#8,fi$:ž#8#8:60000^#8;zz$:zz$:60510d"e-----------------------------"f [ [ Title lines ] ]"g-----------------------------h" --6 REM":" --7 REM-----------------------------|--0000F?G----------------------------------------------------------"H [ [ Display ] ]?I----------------------------------------------------------"Q-----------------------------"R [ [ Text file ] ]"S--------------" [ [ Text file ] ]"------------------------------"File name? ";fi$:#8,fi$:ž#8#8:60450#8;zz$:#9;zz$:60410"-----------------------------" [ [ Close printing ] ]"!-----------------------------"#9:6references sent to printer (y?):";:60100:z$<>"y"60450B#9;pgm.name$,Ҡ,4)+"/"+Р,2),;2)+27)+"N"+6):=2:=80%i$=".D2/"+pgm.name$:o$=".printer"œ"/BASIC/RENUMBER.INV"xref(@i$,@o$)::60450"-----------------------------int remarks ] ]"-----------------------------+"TEXT:";z$:#9;z$:z$=""60450:60300"-----------------------------" [ [ Print go- refs ] ]"-----------------------------n"Latest version will be read from drive #2 and +27)+"N"+8):" OUTPUT#9:LIST :?#9;pr$:GOTO 60450":=-1:V"W-----------------------------"X [ [ Print catalog ] ]"Y-----------------------------Z#9::#0:60450"-----------------------------" [ [ Pr[ Print outputs ] ]?----------------------------------------------------------"%-----------------------------"& [ [ Print list ] ]"'-----------------------------(pr$=2)+27)+79)v<#9;pgm.name$,Ҡ,4)+"/"+Р,2),;2)60900:60000"-----------------------------" [ [ Input subroutine ] ]"-----------------------------"@"z$=z$)+32)::ۿ?----------------------------------------------------------" [ ello":60000"-----------------------------" [ [ File menu ] ]"-----------------------------"(d)rive (e)xec (s)ave (-)save w/o util (r)enumber (i)nvoke:";:60100:"des-ri",z$)60600,60780,60700,60005,60800,";:60100:"lcrgt",z$)60200,60250,60300,60350,60400:60000"-----------------------------" [ [ Display menu ] ]"-----------------------------d"(t)ext file (l)abel lines (h)elp file:";:60100:"tlh",z$)60500,60520,60530:"Hile:";:60100:"pdf",z$)60050,60060,60070z$=13):ۺ60000"-----------------------------" [ [ Print menu ] ]"-----------------------------#9,".printer":"(l)ist (c)at (r)emarks (g)o refs (t)ext file:---------------------Osum=7:#8,z$:ž#8#8:ct$,34,3))<>sum"CAT BAD!"+7)::"CAT OK.":Zi=13:#8;ct$::i=150:#8;ct$:sum=sum+ct$,10,5)):ct$,3,3)="CAT"ct$::ۂ"-----------------------------" [ [ Save program ] ]"------------------------------"Save "+pgm.name$+" to drive #:";:60610 0œ60750:z$+pgm.name$"Dz$+pgm.name$::60620:60700\N:=30:7);" NEW to this DISK ";:::60740:7);"Error #";;" has occurred.":h"i----- this article (on Utils.5 of WAP /// SIG disk 1002B). It is about 6k bytes long and is provided in its BASIC form. That is, a normal BASIC program as opposed to the alternative of saving it as an "EXEC" file. It is handy to have it in EXEC fod. I wrote a short program which helps do a number of the routine chores in program development. I wrote it so that it could be easily added to an existing BASIC program and easily deleted when you are through with it. The program accompaniesaracters when one should do. I will defend my laziness with proper zeal by proposing that it leaves my mind free for all sorts of much more valuable stuff such as the latest data on llama importation into the U.S., but I stray from the subject at han$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOight "lazy" lazy, mind you, but just lazy enough to not want to clutter up my mind with a lot of routine words that I must remember in order to get certain things accomplished on my Apple ///, and just lazy enough to not want to type ten or fifteen ch  B U S I N E S S B A S I C :   A U T I L I T Y F R O M T H E L A Z Y H  Bob Huelsdonk (Edited for WAP /// SIG Use) I'm lazy. Not ordinary downrV":600006 "/BASIC/READCRT.INV","/BASIC/RENUMBER.INV":600003"/BASIC/READCRT.INV","/BASIC/BGRAF.INV":60000G The END ] ]"-----------------------------~"(r)eadcrt (n)renumber (g)raphics (c)comb r&n (b)oth r&g:";:60100:"rngcb",z$)60910,60920,60930,60940,60950:60000 "/BASIC/READCRT.INV":60000!"/BASIC/RENUMBER.INV":60000"/BASIC/BGRAF.INt:",newinc%i$=".d"+num.drives-1)+"/"+pgm.name$:o$=".d"+num.drives)+"/"+pgm.name$:o$:œ"/BASIC/RENUMBER.INV":reseqnce(@i$,@o$,%oldstart%,%oldend%,%newstart%,%newinc%)::60840o$"-----------------------------" [ [ Invoke starting line number:",oldstart:oldstart%=oldstart-((oldstart>32767)*65536)M" Old ending line number:",oldend:oldend%=oldend-((oldend>32767)*65536)U"New starting line number:",newstart:newstart%=newstart-((newstart>32767)*65536)"New incremennumber ] ]"-----------------------------"/BASIC/ must be in a drive or RENUMBER.INV must be invoked.":"Read from .d";num.drives-1;" & renumber to .d";num.drives;", then load from .d";num.drives;" (y)es?";:60100:z$<>"y"60000U"Old------------------------"j [ [ Make exec ] ]"k-----------------------------ol"File name? ";fi$:#8,fi$:#8:fi$:=0:#8,fi$:" OUTPUT#8:LIST :CLOSE#8:GOTO 60000":=-1:|"}-----------------------------"~ [ [ Rerm, though. So, I'll show you how to use the utility program to make an EXEC of itself. First, some introduction: For the uninitiated, an "EXEC" file in this case is a BASIC program listing saved as a TEXT file (in this form it uses about 8k bytes on the disk). When this is done, the program segment (just a piece of a total program) can be added to an existing BASIC program by the command: )exec /basic/util.ex This command would cause SOS to look for a diskette named BASIC in one of However you must change diskettes to make duplicate back-ups, a habit I would encourage. The line number one shown is to allow normal operation of your program with a "run" command. It would "GOTO" whatever line is the normal first line of your progra the full utility available, I type "goto 6" and the utility is automatically restored to the end of the program if my /BASIC/ diskette is in one of the drives. I use three drives, a luxury we don't all have but it can be done nicely with two. otch to use that much space redundantly. Also I wrote very tight and uncommented code to save space. I recently modified the utility so that I can easily delete most of the code and still have a program "save" routine available. Then when I wantess total disk space. When I first developed this utility, I added it to each program I wrote because I really missed it if it wasn't there. After awhile I must have had it stored at least a hundred times on various diskettes and I am too Sc your previous program would be overwritten. Of course you had a back-up, right? Line 5 is my laziness showing again. I am too lazy to type "goto 60000" and so I only need to type "goto 5." Line 6 is another quick feature with a goal of using lm uses lines above 60000; again to avoid usually used line number ranges so when you EXEC the segment on a program you will not be likely to get duplicate line numbers. If you did, the new lines would replace the preexisting lines and part ofbstitute the actual name of the program you are working on instead of "UTIL." I chose line numbers less than 10 since program listings which might preexist and to which you might want to add this utility usually start with 10. The bulk of the prograing. 2 : 3 pgm.name$="UTIL":RETURN 4 : 5 GOTO 60000 6 GOTO 60008 Lines two and four are not necessary and are just for show to set off the program name. Line 3 is to identify the name of the program. You would su has six lines which are added at the beginning of your existing program. Four are handy and two are necessary to it's proper operation unless you choose to change this feature. These lines are: 1 GOTO 10:REM Pointer to user program beginncase commands. I mentioned that this disk has a copy of the utility as a BASIC program. That is because the utility has within it a routine to make itself into a TEXT or EXEC file. We shall discuss this a little later. The copy on the disk alsoBASIC programming work in lower case. The system does not care and in the case of program lines, all valid commands are converted to upper case when the program is listed and so you have a convenient check by scanning for lower case variables and upper typist and thinks that you are entering the lines from the keyboard. Voila! You have added the program segment to your existing program in memory. Note that I purposely show the command line in lower case. The reason for this is that I do all nd would then write the text file to the console. The file does not display the lines to the screen but does show a ")" prompt for each line read. In doing so, the BASIC interpreter does not know that you have not suddenly become an extremely fast the configured disk drives and would then look for a TEXT file on that diskette named UTIL.EX (this is the name that I use for this utility program: UTIL because it is my utility program, "." for a separator, and EX to denote an EXEC file) am. There is one more change to the program you should make to allow it to work properly and that is to identify the number of disk drives on you system. Line 60004 has a variable "num.drives=3" in it. If you only have two drives on your system, edit this line by the usual cursor trace over method to change the number to two. An Overview of Utility Operation After you have added the utility to your program (or started out with it alone, including line 3), you use it by typing "goto 5" at of the utility and into the BASIC operating system. The second printing command "c" will print the catalog listing from the diskette with the presently selected prefix to your printer. The third command "r" will result in a prompt: TEXT: This wit commands require only one character and no carriage return is required. If you enter a menu by mistake or accident you only have to input a carriage return to return to the main menu. If you are at the main menu, a carriage return will drop you ouu can change the line for your printer or set pr$="" in line 60200 for now to get you going. If all went well, you now have a printout to follow. Since we have started by using the print commands, lets look at the rest of them. You may have noticed thaprinter driver named ".PRINTER" and sends control characters for an EPSON in conjunction with a PKASO card to give listings with perforation skip over. This is done with the pr$=CHR$(2)+CHR$(27)+CHR$(79) in line 60200. If this gives you trouble, yohing. The remainder of the command is than traced over and at the end (just past the 0 in 60450) press carriage return. Congratulations!! You have just used UTIL for the first time. Or did something go wrong. The program does assume a ng "ESCAPE") to trace to one space past the "T" in LIST. Then line number ranges can be entered in the form "LIST xxxxx-yyyyy." In this case, you want the whole listing, so you can ignore inputting the line numbers and just trace over the whole tOUTPUT at the beginning of the last command line. This lets you to input data into the command. Namely the line range desired. Otherwise you would always print out the entire listing. You perform this entry by using the right arrow (without pressidded a real time clock yet, shame on you. Now you see why the program name is required and the date and time stamps do wonders for tracing through program development. When you reach this point, the cursor will be positioned over the "O" in ve noticed that just before the last command line is displayed, something was printed to your printer. (The program does assume the printer is on and paper loaded.) The line printed was the program name, the date, and the time of day. If you haven't aYou do this by the following commands: )load /cheers.1.1/util )goto 5 (p)rint (d)isplay (f)ile:p (l)ist (c)at (r)emarks (g)o refs (t)ext file:l OUTPUT#9:LIST :?#9;PR$:GOTO 60450 You will ha. Some special cases of these will be discussed. The Print Functions In order to follow the rest of this article, it would be handy if you had a printed listing of the utility. And you may just as well get that listing by using the utility itself. of activity. Printing information to the printer, displaying information to the screen, or filing information to diskettes. The second layer gives choice menus for these three activities, and the third layer prompts for information as neededeen from the command line down. The menus are hierarchical. This is a highfalutin word that means one menu leads to others. There are just three layers in this utility structure. This first command line points to three different kindsnd you will get the following prompt: (p)rint (d)isplay (f)ile: It does not matter if you had moved the cursor up to the middle of the screen and had program text all around you because the PRINT CHR$(29) in line 60004 clears the scrll allow you to print remarks to the printer if you wish to add comments to a listing, to a catalog listing, or just to make a few notes to remember. This is used by typing a message line just after the TEXT: prompt. The message will show on the screen and can be edited by using the cursor. When you press the carriage return, the message line will be printed to the printer. One thing to watch out for; word wrap-around is not automatic except as your printer will control it so make your linesssue. The program assumes that the help file is on the /BASIC/ diskette in one of the drives and that the file is called "HELP." The Filer Functions There are six functions accessible from the filer menu: (d)rive (e)xec (s)ave (-)ng reference. The help file is just a TEXT file with the desired information in it. It can be created using any word processor or editor which will produce an ASCII TEXT file. If there is enough interest, I will submit a help file sample for a future iver the vertical bar in the middle of the long lines. If you are doing a sub-routine label, press carriage return at the vertical bar. The final function on the display menu is (h) to display to the CRT, a help file of information as a handy programmirom the utility program you will get a display of partial line numbers and untitled label lines. You fill in the uncompleted information by tracing over symbols you want and filling in what is needed. If you are doing a main routine, type a hyphen o and sub-routines. You can see the results of this labeling by looking at the listing of this utility program. Lines 60187 to 60189 illustrate a main heading and lines 60197 to 60199 illustrate a sub-routine label. When you use this function f7 to halt the file scrolling at any time to read sections of it. The next function "l" is to help be a little neater in labeling sections of the program. I like to have good looking listings with easily discerned title blocks for both main routines the name of a text file. The same rules apply as in the above paragraph referring to the printing of text files. In this case the file will be displayed to the screen. If the file is longer than twenty lines, you may use CONTROL number-pad such as: File name? /BASIC/NOTES The file will then be printed to your printer. The Display Function A "d" entered from the main menu will show the display menu: (t)ext file (l)abel lines (h)elp file: The first function "t" will prompt for any text file that is in one of your drives to the printer. If the file is on a diskette that does not have the selected prefix, then you either need to change the prefix selection (see how later) or enter the full name of the catalog and file name utility program will automatically invoke this module if it is not already. If you wish to configure this function differently, then you can change the diskette name in line number 60380. The last print function is (t)ext file and allows you to printof the program from drive two and will list the line references to the printer. You are prompted to proceed by pressing "y." Any other input will abort the function. This function requires that the "RENUMBER.INV" invokable module be invoked. The ing program. This function assumes that you have at least two floppy drives on your system and that the /BASIC/ diskette with the RENUMBER.INV invokable module is in drive one. This function warns the user that it will read the latest version t print function is the "(g)o-refs" which simplifies the use of the renumber program furnished by Apple to print a list of line references for your program. This is very useful when you are developing a program or to analyze the operation of an exist 80 characters or less. You can keep entering as many lines as you wish with a carriage return at the end of each. When you are through, a single carriage return at the beginning of the input request will bring you back to the main menu. The nexsave w/o util (r)enumber (i)nvoke The first command "d", results in the following prompt: Init drive #: The result of inputting a number is to select the prefix of the diskette in that drive. This is handy if you are going to be working with one drive primarily for awhile or to eliminate having to type in the prefix each time you want to change it. The second command "e" allows you to easily make an EXEC file from any part of your program. You will first see the prompt: File ram supplied from Apple Inc. operates by reading a disk file, performing the renumbering and then saving back to another disk file. This can be done by using two different file names on the same diskette but I chose to use the same file name on t. Remember that you can re-add the full utility program whenever you wish with the "goto 6" command and you can save the program with the remaining short portion. The fifth command "r" for renumber is one of the more complex commands. The renumber progou back to the main menu. The fourth command "-" will save just as the previous one did, however before it saves the program it will delete the utility program except for lines 60000-60008. This is to save diskette space as mentioned beforeAT BAD!" will be displayed. After the program has been saved and the directory checked, you will be prompted to save it again (to another diskette). If you chose not to, or if this is your second save anyway, a carriage return will bring ywith sub-directories which are labeled "CAT" on the catalog listing. If the directory is correct, you will see "CAT OK."; if there has been directory damage as determined by the blocks not tallying, then you will hear the bell and the message "Ca lost disk because if I get a "BAD CAT" I do not save to the second diskette until I have solved the problem. The check is done whenever you select a different drive or when you save a program. It works on all floppy diskettes except those sions of SOS had bugs which allowed occasional overwriting of files on other files. I believe there are still occasions where this will happen. If you feel confident, you can eliminate this step but it does not take long and I have had it save sly exist on that diskette, then the bell will ring and the following message will appear in inverse: NEW to this DISK After the program has been saved to the disk, the directory is given a rudimentary check. I added this because earlier veru want the program saved. The program will first delete any copy of the program which is presently on the diskette to reduce fragmentation and to eliminate any possible errors from having reduced the program size. If the program did not previou program to disk. After you press "s" you will see the following prompt: Save UTIL to drive #: The program name "UTIL" will be replaced with whatever you have named your program in line three. You then input the number of the drive to which yot and would enter "LIST 60000-60999" in the command line. Note that you do not save the lines from 1 to 6 as this would write these erroneously to another program that you added this utility to. The third function is selected by "s" for saving your e as LIST xxxxx-yyyyy. Then finish tracing over the line and your EXEC file will be saved to the diskette. This is the function which allows you to save this utility as an EXEC file. You would enter the name "/basic/util.ex" to the file name prompline: OUTPUT#8:LIST :CLOSE#8:GOTO 60000 Again the cursor will appear over the "O" in OUTPUT. You trace over the command line just as you did for program listings, adding the line number range you wish included in your EXEC filname? You must type in the file name you wish to use for the EXEC file. You must include the pathname of the diskette if you wish the file to go to other than the diskette with the presently selected prefix. You will then see the following command wo different diskettes. If you do not like this approach an examination of lines 60800 to 60840 should help you to rewrite the way you choose. The renumber program is an invokable module and must either have been invoked or must be on a disk named "/BASIC/" in one of the drives. If you have only two drives, you can use a disk named "/BASIC/" that has the "RENUMBER.INV" module on it as one of your development diskettes or you can invoke the module from your basic diskette before you enter the rr Biography: Bob Huelsdonk really DOES raise llamas -- on a Washington coast ranch where he hides out on weekends. The rest of the time he is an engineer in Seattle, and the Vice-President of A.P.P.L.E. can be of some real use to you. If you find additional functions or clever changes, you might submit them to our editorial department for inclusion in a future edition of "/// CHEERS." /// /// /// Authonumbers used: 1,3,60000-69999 File numbers used: 8,9 Memory required: 6k bytes Hardware: Clock, two disk drives, printer Printer driver name: .PRINTER That's it! I hope the program then changing the prompt and command letters "rngcb" in line 60900. If you are not familiar with this technique, it simply uses the command letters in an "ON INSTR"ing function to GOTO the selected line numbers. Program Summary BASIC line ics (c)omb r&n (b)oth r&g: Inputting the proper letter will invoke the modules as shown presuming that they are on a diskette called "/BASIC/" in a drive. You may change the modules or combinations of them by editing lines 60910 to 60950 and e drive and use ON ERR to automatically invoke the modules but if you have fewer drives, you may find it convenient to pre-invoke the modules that you might need. After pressing "i" you will see the following prompt: (r)eadcrt (n)renumber (g)raphin the new copy, then you can save the console copy back to drive 2 and you will have two fresh copies to work from. The last function in the filer section is the "i" for invoke command. This is not greatly needed if you keep the /BASIC/ diskette in onumbered program in drive three. The program then loads the newly numbered program to the console so that you can inspect it. If some problem has occurred, you can start again from the original in drive two. If all is O.K. and you wish to reta a collision of new line numbers with existing line numbers the renumbering will stop and an error message will be given. After the lines have been renumbered, you have a copy of the old numbering on the diskette in drive two and a copy of the newly nne of the existing program that you wish to have renumbered. Newstart is the beginning line number that you wish your first new renumbered line to have. Newincrement is the increment which will be used for the renumbered lines. If you have and control just how the renumbering will operate. You do this by entering per the prompts printed just above the variables in the command line. Oldstart is the first line in the existing program that you want to renumber. Oldend is the last lit to our needs. If you trace it over just as it stands, you will renumber all lines from 0 to 59999 by increments of 10 and the new first line will be 10. Usually, however, you will not want to renumber the entire program. Thus you can enter, then load from .d3 (y)es? Oldstart Oldend Newstart Newincrement PERFORM resequence(@i$,o$,%0 ,%59999,%10 ,%10 ):GOTO 60840 As before we use our old trick of tracing over a command with the cursor to adapt ienumber function (you can use the next described function to assist in the invoking). I will show how the prompts would look if you use three drives: /BASIC/ must be in a drive or RENUMBER.INV must be invoked. Read from drive .d2 & renumber to .d3 "Renumber.INV"#"76c";"-- RENUMBER 1.01 --"!2:8);"Your options are:": <26);"1 Line References"&F26);"2 Append/Merge Programs"#P26);"3 Renumber a Program"Z26);"4 Quit"d*n8);:"Which option? ";a$:VXY"G<"you will be cleaning (up to four) and insert the cleaner disk in"-F"the appropriate drive at the prompt.":EP"Keeping your drive heads clean is VERY important. Clean once a"EZ"month on a lightly used machine, once a week on a heavily used" **** CLEANER PROGRAM **** œ500 =13:=6:)::=1:=30:"DISK CLEANING PROGRAM"=6:=6:2);G("This program allows you to use one of the commercially available"H2"head cleaner disks with your Apple ///. Input how many drives you20670?a$)-80=>74=6:a$,s,e):s=s+74:l=l+1:l=20670:640a$)-s>0=6:a$,s)3=23:"76c";"-- press RETURN to continue --";a$a$)<>13690$:"76c";"-- XREF --"::l=0:art=start))M"Should I allow lines to be moved? ";a$:a$)="Y")a$)="y")530+renum(@i$,@o$,%low,%high,%start,%bump)20.reseqnce(@i$,@o$,%low,%high,%start,%bump)20la$)<80a$:l=l+1:+va$,1,80):s=80:e=74:l=l+1:l=tart$)V"What increment between each line? (Default=10) ";bump$:bump$)=0bump=10:4808bump$)<48bump$)>57=-1:460:bump=bump$)H Map numbers larger than 32767 into standard two's complement form.3low=low)):high=high)):stefault=63999) ";high$:high$)=0high=63999:4408high$)<48high$)>57=-1:420:high=high$)`"Starting value for the renumbered lines? (Default=10) ";start$:start$)=0start=10:460<start$)<48start$)>57=-1:440:start=sSave with what file name? ";o$:o$)=0=-2:29);:380_"What line number should I start renumbering at? (Default=0) ";low$:low$)=0low=0:4204low$)<48low$)>57=-1:400:low=low$)d"What line number should I renumber up to? (Dallow interleaving of program lines? ";a$$6a$)="Y")a$)="y")340@append(@i$,@i2$,@o$)J20Tmerge(@i$,@i2$,@o$)^20h --- RENUMBER#r::"76c";"-- RENUMBER --":9|"Name of Program to be Renumbered? ";i$:i$)=020A"(@i$,@o$)211 --- MERGE'::"76c";"-- APPEND/MERGE --":2"Name of the first Program? ";i$:i$)=020Q"Which Program should be merged with it? ";i2$:i2$)=0=-2:29);:270_""Output file name? ";o$:o$)=0300"Should I 0o$="temp.xref"R"Should unreferenced lines be displayed?";r$:r$)="y")r$)="Y")230xref(@i$,@o$)o$<>"temp.xref"20 œ218#1,"temp.xref" #1;a$620l=20670214:#1:"temp.xref":67020xlistPRSTUx=a$)-48xx150,250,360,14018);"Please enter 1, 2, 3, or 4":=-2:110 :: --- XREF::"76c";"-- XREF --":,"Name of Source File: ";i$:i$)=020B"Output file name? (Press RETURN for output to .CONSOLE) ";o$o$)=d"Apple ///."::$iœ=254=57);:110:ۺ500n=15:=6:31);=o=15:=6:"Total number of drives to be cleaned: ";total%$ptotal%>4total%<17);:110 qœ500s6,2280,24xcount1%=1total%:5"Insert the cleaning d-find.length%)):left$="":440left$=find$,(located%-1));line.length%=(located%+find.length%-1)right$="":440>right$=find$,((line.length%-(located%+find.length%-1))))&find$=left$+replace.string$+right$)W **** CRITERIA DATA SUBROUT/N)":810%Tg$:caps(@g$):g$="Y"830:150^g$<>"N"7);:340 h:::* **** REPLACE TEXT IN STRING SUB ****line.length%=find$)located%>14207line.length%=find.length%left$="":right$="":440=right$=find$,(line.length%+line%); #1;find$string$=find$case%caps(@string$)$"located%=string$,find.string$)'located%400:275 ,#2;find$6@245I **** END OF PROGRAM ****$J:vp%=22:hp%=1:800:vp%=22:hp%=10Oline$="RUN COMPLETED. RUN AGAIN? (Yto Abort Search...":820vp%=23:hp%=1Hline$="Seaching File: "+find.file$+" for text string: "+find.string$820.vp%=24:hp%=1:line$="SCANNING LINE #:":810line=line+line% case%caps(@find.string$)line%=130000=24:=18:(lineECK FOR LEGIT FILES ****œ7);:600:#1,find.file$œ7);:640:#2,replace.file$ œ1000 ž#1330 900$ **** BEGIN SEARCH ROUTINE ****/line=0:line%=0:find.length%=find.string$)9vp%=22:hp%=1:line$="'ESCAPE' **** GOSUB DATA ****600:640:670:680:690 **** EDIT DATA ****Cvp%=21:hp%=6:line$="Enter # of Line to edit (1-5), or 'RETURN'" 810:g%g%>57);:160vp%=21:hp%=6:800g%180 g%600,640,670,680,690:160% **** CHor without regard as to"$P"upper or lower letter case.":d=11:=6:2);&n"1) Input File to be Searched:":x"2) Input Storage File:":&"3) Input Text to be Replaced:":#"4) Input Replacement Text:":"5) Ignore Case? (Y/N):":Z\]^_`abcd will find occurances of text strings within an ascii"A("text file, and replace those strings with new text strings"D2"designated by you, then save the corrected text file to a new"<"ascii text file.":DF"You may elect to search for text with ) **** FIND/REPLACE TEXT PROGRAM ****# **** NOTES BEGIN AT 1100 ****" **** BY FRANK W. MOORE **** œ1000% **** MUST HAVE UPSHIFT.INV **** "upshift.inv"+:=28:"FIND/REPLACE TEXT PROGRAM"::=3:=6:2);H"This program:"Error #";;" in Line #";;:X=27:300 b600lD"+count1%))1:::"NOT A CLEANING DISK. PRESS 'RETURN'.":g$:130 "."; œ500 ,::6=18:=6:2);0@:"'RETURN' to repeat, 'ESCAPE' to exit";:Jg$:g$=13)10Tg$<>27)7);:330 ^::-:=23:=1:isk in drive .D";count1%:1"Press 'RETURN' to begin, 'ESCAPE' to end.";g$:g$=27)300g$<>13)7);:160: 600D"Cleaning drive .D";count1%;", 'ESCAPE' to abort. Please wait";count2%=110œ=32230:ۺ500(".INES **** X=11:=35b" ";find.file$lfind.file$="":330v =13:=28" ";replace.file$replace.file$="":330 =15:=35" ";find.string$ =17:=32" ";replace.string$ =19:=28" ";case$:caps(@case$)!"YN",case$)7);:690 case$="Y"case%=1:case%=0# **** CLEAR, PRINT LINES ****  =vp%:=hp%:31);:*=vp%:=hp%::line$;::4=vp%:=hp%:line$;:>=21:=1:29);:) **** CHECK KBD TO ABORT SEARCH ****fhiGA3/1.01/LINr GRAFIXMO  De-Compressor Routined#1;"input.file" nž#1:x200-char$>127)" ";char$)-128);:120 char$;120#1;char$: Data Compressor For Ascii filesH REMEMBER to change "input.file" and "output.file" to proper names.#1,"input.file"##2,"output.file" (ž#1:2200,<char$=32)200:char$=char$)+128)F#2;char$;P50Z , you will get some }I< {MY COMPANY's and some MY COMPANY, INC. INC.'s in your output }IF {file! Plan your replacements carefully. --- FWM } }I {Remember a computer is very literal. If you have occurances, }I( {for example, of MY COMPANY and MY COMPANY, INC. within a file }I2 {that you are subing with MY COMPANY, INC. }I {This program is also useful for correcting long BASIC or PASCAL }I {programs converted to ascii files. You can quickly change all }I  {occurances of a variable from one name to another. }I { lect to replace text without regard for the case }I {of the letters. If you choose to ignore case, MY COMPANY, INC. }I {would replace, for example, MY COMPANY, My Company, My COMPANY, }  {etc.I { all of the }I {MY COMPANY references in the original text file, and substitute }I {MY COMPANY, INC. in their place. }I { }I {You may also e }I {For example, you could have a long manual stored in a file, and }I {you need to change all of the text references to MY COMPANY to }I {MY COMPANY, INC. The FIND/PLACE program will find ring defined by }I` {the operator, substitutes that text string with another text }Ij {string also defined by the operator, and then stores the }It {corrected text to another ascii file. }I~ { =27:vp%=22:hp%=1:330 900 **** ERROR ROUTINES ****-:=23:=1::"Error #";;" in Line #";; ::IL {This program is designed to read text strings from one ascii text}IV {file, search the strings for occurances a text sthIhJh\h] wh]h^ w\\ ]] ]L ]L\A \A JHIH`i8\i]i\`\]`K`M %b&*L+ 16>:)    kL? (Y/N): ";)ANSWER$:ANSWER$:#h)ANSWER$="Y"ANSWER$="y":ۀ*::B+=16"That is NOT a text file - I can NOT convert it."::/+=27"The file is write protected."::B+=29"You entered an invalid pathname - please retry."::,ocess another line.(#::9'::FILE.OUT$;" now contains your REM-less program.")t':"You now need to EXEC ";FILE.OUT$"8'" in order to RUN it as a Business BASIC program."&<(: close your input/output files.2(:"Want to convert another programf no REM, write it out as is.T ONE.LINE$,REM.POSITION-1)=CARRIAGE.RETURN$: Substitute a C/R for the colon in front of the REM to truncate the line when wri= #3;ONE.LINE$: Write the line out to your REM-less file.7 2600: Loop back to read and pr,FILE.OUT$: Establish your output file.? ž#110000: Set your exit when end of input data is found.7( #1;ONE.LINE$: Read one line from your input file.@ REM.POSITION=ONE.LINE$,"REM",3): Test the line for a REM.< (REM.POSITION)3000: I encountered.?SCREEN.OFF$: Turn off screen display for faster disk I/O.?4#1,FILE.IN$: Open the input text file to be processed.9FILE.OUT$,: Create your REM-less file to write to.5` : Turn off error trapping to open output file.2 #3===>> ";FILE.IN$: Accept input file name from keyboard.Nl:"Now enter the pathname of the output file for your REM-less program: "E" =====>> ";FILE.OUT$: Accept output file name from keyboard.Bœ11210: Establish where to go when an error ishIs program."DL"Convert a Business BASIC program with the following commands:",:"OPEN #1 AS OUTPUT,.D1/PROGNAME.TEXT"0"OUTREC=255:OUTPUT #1:LIST:CLOSE:OUTREC=80"H::"Please enter the pathname of your input text file to convert."C" ==jlmnop program will read a Business BASIC text file,"!X"remove all REM statements,"6"and write out a new text file that you can Exec"5 "which will use less memory and execute faster."R:"You must convert your program into a text file before using t5d:: Set text mode to 80 by 24 and clear screen.BCARRIAGE.RETURN$=13): Define the carriage return character.CSCREEN.OFF$=14): Define the screen display off control code./,"80C";"Business BASIC Program Compactor":9"This.GRAFIX jj# \\JHFD=;9210-,+*)!   v Q )``.`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`+=30"I can NOT find that file."::0+=31"I can NOT find that pathname."::.+=32"I can NOT find that volume."::T+=33FILE.OUT$;" already exists.":"Shall I write over it? (Y/N): ";:ANSWER$N+=33ANSWER$:ANSWER$="Y"ANSWER$="y"FILE.OUT$:SCREEN.OFF$::۱:W+=34:FILE.OUT$:"Disk is full - Please save your file to another volume."::E,=35"The file is locked - Please use another file name."::. ,=37"I can NOT find that device."::R,"Error into table.;^LOOP.CONTROL=120-1: Start at bottom, work upward.EcTURN.SCREEN.OFF$;: Turn screen display off for faster disk I/O.:hPATHNAMES$(LOOP.CONTROL,1),PATHNAMES$(LOOP.CONTROL,0)rPATHNAMES$(LOOP.CONTROL,0)G|PATHNAMES$(LOOP.CONTROLto read 13 long names into table.<6Y=01: Set up loop to read corresponding short names.6@PATHNAMES$(X,Y): Read directory name into table.@JY: Go back to read 2nd entry in DATA statement into table.8TX: Go back to read next DATA statement restores the directory names back to theirH original names. It reads the DATA statements into a 2 dimensionalG table in order to process the renames in reverse order (bottom to& top in the directory hierarchy).::<,X=012: Set up loop E$;" =======> ";SHORT.NAME$: Display rename;LOOP.CONTROL: Go back and do it again until 13 times.A::"Directory names are now shortened for backup purposes."1=P$: Restore original prefix before ending.::F The following routine play off for faster disk I/O.InLONG.NAME$,SHORT.NAME$: Read in long/short name from DATA statementFxLONG.NAME$: Unlock existing directory using original, long name.GLONG.NAME$,SHORT.NAME$: Rename the directory with the short name.9LONG.NAMry. It will thenI_ unlock the directories and rename them to the short names. It also:` prints an audit trail on the screen as it processes.a::?dLOOP.CONTROL=113: Set up program loop to read all DATA.EiTURN.SCREEN.OFF$;: Turn screen dision: ";FSELECTION:SELECTION)PSELECTION<1SELECTION>2BEEP$:652ZSELECTION=2300: Lengthen Function chosen?\::I] The following routine reads the DATA statements to get the originalF^ (long) name and new, short name for each directo Set prefix where directories are to be found. 2E7=5:=10:"1. Shorten Pathnames Prior to Backing Up Your Files."I<=6:=10:"2. Lengthen Pathanmes To Original Size After Backing Up."DA=8:=10:CLEAR.END.LINE$;:"Enter 1 or 2 to Select Funct% A/B/I/J/DOCUMENTATION,A/B/I/J/K& A/B/I/J/SAMPLE.PROGS.1,A/B/I/J/L& A/B/I/J/SAMPLE.PROGS.2,A/B/I/J/M::BEEP$=7)TURN.SCREEN.OFF$=14)CLEAR.END.LINE$=31)<P$=: Save current prefix to be restored at end-of-job.=#=".d1/":qstuvwxyz{WARE,A/B/C A/B/C/REVIEWS.1,A/B/C/D& A/B/C/D/DA.DATASYSTEMS,A/B/C/D/E* A/B/C/D/E/PRODUCT.INFO.1,A/B/C/D/E/F* A/B/C/D/E/PRODUCT.INFO.2,A/B/C/D/E/G& A/B/C/D/E/TECH.NOTES,A/B/C/D/E/H A/B/PROGRAMMING,A/B/I A/B/I/BUS.BASIC,A/B/I/J<PATHNAMES$(13,2): Define 2 dimensional pathname table.J The first number in parentheses (13) must correspond with the numberA of DATA statements. The second number (2) does NOT change. NOCTERMINAL,A A/CRUISE.MENU,A/B A/B/SOFT#";;" occurred - Consult pg. 234-235 of BASIC Reference manual."::.::,1);" =======> ";PATHNAMES$(LOOP.CONTROL,0)BLOOP.CONTROL: Back to rename/lock next table entry until 13.9::"Directory names have been restored and locked."1=P$: Restore original prefix before ending.::  PROGRAMMER'S NOTES:L I purposely used descriptive data names and lots of comments for thoseE of you who are trying to teach yourselves Business BASIC. ThisJ program will run faster if you shorten the data names and remove theI REM statements. I have writt Quit"48);:"Which option? ";a$:x=a$)-48:x<0x=0x210,340,560,19018);"Please enter 1, 2, 3, or 4":=-2:160:5=24:"76c";"Press any key to Continue.";:a$: --- XREF(::"76c";"-- LINE REFERENCES --"U:"f this or another Invokable Module."::2006n:"76c";"---- RENUMBER INVOKABLE MODULE ----")x:8);"Select documentation on: ":G20);"1 Line References":20);"2 Append/Merge Two Programs"520);"3 Renumber a Program":20);"4 ********6P:"76c";"---- RENUMBER INVOKABLE MODULE ----"|Z:" Before any Invokable Module can be used, it must be loaded into the":"system by the following Command Format:"qd:")INVOKE RENUMBER.INV"::"where RENUMBER.INV can be the name o|~ *J2 * (C) Copyright Apple Computer 1981 *K< * * JF ************************************************************J ********************************************************************J * *J * Renumber Invokable Module Documentation *J( * :::E If you have questions, or suggestions for improvement, leave me= some email on MAUG 70077,2327, or call ///'s Company atD (804) 747-8752 300/1200 baud, 7 bits, odd parity, full duplex.5 I would enjoy hearing from you.......Ed Gooding before runningJ this program against your production files. Also note that you mustI change the DIM statement as well as the FOR NEXT loops to match theF number of DATA statements that you construct for your individual applications.: inconvenient since you will have to use the System Utilities toGb rename your directories correctly. I would suggest that you testBl this program after changing it by setting up a "test" set ofFv directories/sub-directories and operating on theme these statements for your individualEI applications. I suggest that you start by printing an extendedKJ directory listing and manually marking the directories to be renamed.EN Failure to do this properly will NOT be disastrous, but will beEXeIE 1st DATA statement must contain the highest level in the hierarchy,MF each subsequent DATA statement must proceed downward thru the hierarchyMG in order of sub-directory occurrence for this program to work properly.BH You will have to changen another Basic program to remove REMI& statements from a Basic program stored in text file format prior toG0 EXEC'ing it. If there is enough interest, I'll upload it to DL7.:::ED It is critical to construct the DATA statements correctly! Th There are two similiar Procedures for locating Program lines referenced"O"by other lines in a program. These Procedures are XLIST and XREF. Both"P"require a specified Basic Program to be analyzed and a designated file to"&"output the Reference List to.":P" XLIST outputs a list of ALL Line numbers and any references to them."O" XREF outputs a list of ONLY those Line numbers that have references"""to them."c,:" The Command Formats are:"::")PERFORM XLIST(@IN$,@' Must have STANDARD font in memory Dan Kunesh :=22, 24);" ______________________________"-24);"| _______________________ |"-24);"| | | |"-(24);"| | * * *** * * ** | |"-224);red line, and %INC is the numbering increment.":Z::" In both Procedures, every line number that references another line number,"X"i.e. GOTO 1000, has the reference changed to the corresponding new line number.":200::110 AUMbered"T"or RESEQNCEd, OUT$ is a string containg the name of the file where the output"S"is to be directed, %BEGIN and %END are the beginning and ending line numbers"D"within the original program, %START is the value of the first">"RENUMbe- RENUMBER/RESEQNCE --"::" The Command Formats are:"::")PERFORM RENUM(@IN$,@OUT$,%BEGIN,%END,%START,%INC)":")PERFORM RESEQNCE(@IN$,@OUT$,%BEGIN,%END,%START,%INC)":V"where IN$ is a string containing the name of the Basic Program to be REN"-- RESEQNCE --":" The RESEQNCE Procedure is identical to the RENUMBER Procedure except":"that RESEQNCE will allow the renumbering of a line, or group of lines, to move"3"those lines to another place in the program."200*:"76c";"-ne Number"Jb21);"New Starting Line Number":21);"New Line Number Increment":l" If RENUMBERing a line, or group of lines, will move those lines to":"another place in the Program, the Procedure will return a RANGE ERROR."v:"76c";:" The RENUMBER procedure allows you to renumber all or part of any Basic"PN"Program and output the RENUMBERed version to a designated file name. The"iX"Procedure requires values for:"::21);"Old Starting Line Number":21);"Old Ending Lid. Once combined, the file is sent to the filename":"designated by the string OUT$."U::" If both programs have a line with the same line number, a RANGE ERROR""will occur."&200::1100 --- RENUMBER::"76c";"-- RENUMBER --"TDss care is taken, this can result is a very""unusual program.)":" The Command Format is:"::")PERFORM MERGE(@FIRST$,@SECOND$,@OUT$)"::"where FIRST$ and SECOND$ are strings containing the names of the two Basic"r"Programs to be combineocedure also combines two Basic Programs together and puts"N"them into a single output file. If the programs have line numbers that"O"overlap in range, the programs will be MERGEd together, putting the line"T"numbers in numerical order. (Unle:"where FIRST$ and SECOND$ are strings containing the names of the two Basic"r"Programs to be combined. Once combined, the file is sent to the filename":"designated by the string OUT$."200"76c";"-- MERGE --"T:" The MERGE Pran the other, and the effect will be as if one was Appended"S"to the other. (This can be arranged by first RENUMBERing both programs with" "suitable line numbers.)":" The Command Format is:"::")PERFORM APPEND(@FIRST$,@SECOND$,@OUT$)":J200::110T --- MERGE^::"76c";"-- APPEND --"Uh:" The APPEND Procedure combines two Basic Programs together and puts them"Ur"into a single output file. One of the Programs MUST have ALL its line numbers"V|"higher (or lower) thOUT$)":")PERFORM XREF(@IN$,@OUT$)"6:"where IN$ is a string containing the name of the Basic Program to be analyzed,":"and OUT$ is a string containing the name of the file where the output is to be"3@"sent (i.e. a filename, or Character Device).""| | * * * * * * * | _ |"-<24);"| | **** ** * * * * || | |"-F24);"| | * * *** *** *** ** ||| |"-P24);"| |_______________________||_| |"-Z24);"|______________________________|"-d24);"| __ tocol ";:x=13:x;") ";Protocol$(x);" ";:::::"Current Values":#"A. ";Baud$(BaudValue);" Baud""B. ";Form$(FormValue)"C. ";CRdelay"D. ";LFdelay"E. ";FFdelay#"F. ";Protocol$(ProtocolValue)::80):0,238) ";Baud$(x);" ";:@:8J"B. Data Format ";:x=14:x;") ";Form$(x);" ";:+T20);:x=58:x;") ";Form$(x);" ";:^20);"9) ";Form$(9)h6r"C. Carriage Return Delay D. Line Feed Delay";|" E. Form Feed Delay":"F. Pro)+2CRdelay=A$,4,1))LFdelay=A$,5,1))FFdelay=A$,6,1))protocol=A$,7,1))0ProtocolValue=prototemp$,protocol$)/3)+23" *** Print Options Menu ***,:::"Options":86"A. Baud rate ";:x=15:x;"ŝ); 140/ *** The Setup Menu *** 3 *** Get .RS232 driver configuration block ***STATUS(%1,@A$)".RS232"6Baud$=A$,2,1):BaudValue=Baudtemp$,Baud$)))=Form$=A$,3,1):FormValue=Formtemp$,Form$)))/2$)".RS232"dsize=A$,7,1))5n *** If so then print it out to the screen *** s=2207:=243=2112101xsize>=1Z=1size:#1;indata$:indata$;:Z903=243=211210: *** Go to Setup Menu *** =241=209:: #1;pe to enter setup menu"JA"80c";"OPEN APPLE <\> gives time -- 20x<61200: |"-n24);"| _[__]_ |"-x24);"| apple /// |__| |"-24);"|______________________________|"-24);"/ \"/23);"/ [][][][][][][][[][][] [][][] \"122);"/ [][][][][][]0,24/ *** Menu Input Section ***::"Change which option (A-F, exits)? " change$y=change$)y=243y=211::810&y>96y=y-320(y<65y>70):510 :"to what new value? ";value3Dy=65value>0value<10BaudValue=value:5103Ny=66value>0value<10FormValue=value:5102Xy=67value>0value<256CRdelay=value:5102by=68value>0value<256LFdelay=value:5102ly=69value>0value<256FFdelay=value:5106vy=70value>0vGA3/1.0V APPEND  numbers, this program will permit a screen text printout whenever a keyboard input is allowed. Use the KEYPAD NUMBERS for this command. You will see a letter at the upper right screen position indicating your selection. Except for programs which have redefined the use of the keypad You will be able to run any of these programs from within Menu.Maker. But they HAVE NOT been set up to return you to Menu.Maker after being run. The quickest way to get back is simply type at the prompt )Run .D1/Menu.Maker and you'll be set.7,1)):d2%=Ҡ,8,1))#Protocol$=prototemp$,(ProtocolValue*3)-2,3)fA$,7,1)=protocol$>pProtocolValue=3A$,8,2)=5)+6):۰A$,8,2)=19)+17)zcontrol(%1,@A$)".RS232"50 70#y1%=Ҡ,1,1)):y2%=Ҡ,2,1))#m1%=Ҡ,4,1)):m2%=Ҡ,5,1))#d1%=Ҡ,="000128064"?  *** Save .RS232 values and reenter Terminal Mode *** *Baud$=Baudtemp$,BaudValue)(4Form$=Formtemp$,(FormValue*2)-1,2)!>A$,2,1)=Baud$:A$,3,1)=Form$+HA$,4,1)=CRdelay):A$,5,1)=LFdelay)RA$,6,1)=FFdelay)1\pF,ENQ/ACK0 *** Program Initialization ***#Baud$(5),Form$(9),Protocol$(3)x=15:Baud$(x):x=19:Form$(x):x=13:Protocol$(x):".D1/REQUEST.INV"Baudtemp$="34678""Formtemp$="343842460066707478" prototemp$alue<4ProtocolValue=value:5103000 *** Data for Setup Menu ***  110,134.5,300,600,1200 5 7 bits ODD,7 bits EVEN,7 bits MARK,7 bits SPACEA 6 bits ODD,6 bits EVEN,6 bits MARK,6 bits SPACE,8 bits NONE None,XON/XOFL %1/05665/ w123L7\ \ [ V P L C - ( # !         ~}SRQPMKBA840,* u /ć X . Lh-)͎ L / w-/%`/- ե9::,,`!L 2u 2 2 ,&hhhhhhhhHH /0   L ` `*,. L _ ` A\ _ 8_ ` L Lh a *b 8 f c d 8 f `!iɂ8`*e E LhL ,,-566 2LJ 53r *F-) y TLh L ,  z  5 66 = , ;h ^3$4% c$ c% cg^_  1e__gL Ȅh _1  L3 LC^^g2 c_h`5H6H6H$% 5$ȱ5%h6h6h5`L   0:,)$&%$%H$&%$&%e$%m$he%%ɩ`ȩ(L 5 `5%5$8` e  1` c., Lc`` u ,5ȥ5ȭ5 b3!4"!#$m m 5Ȋ5ȭ35ȭ45  g3$4%  , p 1 &ʭ1 L л5$ȱ5%5  p 1'â V L , = -? c1  p 1' V = LV 2`ɺ1-)%ɾ!-,,(0cȹ2ɄɁɃSȹ20L:Hh%$(203͉4(L h#1 ULh21 e ǩ421 L@ p L L p LHM(& ))L`h(`8' , u 4g354ȑ5g g$5ȥ%5Ș5 L L 5 66 1 V h`Lm 1b$&%mmmؘHJJJJ ]h) ]`b 00b1`1 !u1 1i1`` 0Ls` /Ls() F 68hH wh R173K91yy`5ȱ5ȱ5L/eIfd`H z h Γ`bccbHɂ逕h 1܌1`򩀍%1L5m56666 65 ` 5 66`+ ,5ȱ5 ( ,+L h +`h,&L`5b6c6c5 5^6_6_ ,5ȱ5 5g6h6h 5 LK/L4H52 ,5 ȱ5` `pmlkjfdaXWRQNED?<;:7210/-,$" }zut^]\[ZUTSRKJA@?>=8721 }{xunmlZWVUSPNKIHGED51.&%$ wvtmifcba`_\ZVUTSOKJI)&%# zvutrrhh_PMLK:L `L5GA3/1.01:7SY CONTROL XREF XREF GOMESH 7MESH MERGE MERGE  FINDTAB NDTAB CLSALL SALL XLISTER OPENLEV ENLEV OPENTO ENTO RENUMER SETBUF TBUF OPENBI ENBI XLISTER %ISTER BUMP c_ OPENBO ENBO CLSOUT SOUT RENUMEN FILNUM2 RELTAB LTAB MERGEOK RGEOK XREFER EFER XLIST XLIST RENUM RENUM LOWRNGE {wNGE FINDTAB NDTAB CLSALL SALL OPENLEV ENLEV RENUMER NUMER SETBUF TBUF OPENBI ENBI OPENBI  BUMP OPENBO  CLSOUT RESEQNCE RESEQNCERENUMEN CNUMEN RELTAB LTAB MERGEOK WRGEOK START kgT HIGHRNGEsoRNGEFILNUM2 0RELTAB z GOMESH  APPEND APPEND MERGEOK &START XREFER HIGHRNGE#LOWRNGE !FINDTAB  CLSALL  OPENLEV  OPENTO  RENUMER  SETBUF 7653210.+'&%$#"   <LhhhhhhhhhhhhhhHH LQKIGECA?=41.-,+*)(|hhhhhhHH  L1$ JLL,|wvtmifcba`_\ZVUTSOKJI)&%# zvutrrhh_PMLK:7653210.+'&%$#"   <LhhhhhhhhhhhhhhHH LQKIGECA?=41.-,+*)(|hhhhhhHH  ##6 >?Bi{Ci|) |=! "LL{@?>8(O\ F9 >{i 5|i6) 6|8 L5{ hhhh0 hWhXXhhHHHH l5m6m6  ЙW5X6X6 ` 5`MD32KA;6hWhXhhhQlhRm e Nb YMH YhLSꈭTXHWH`ghzh{ Qghhh5h66 HHH566 qyhhhpx{HzH`~GA3/1.01:7SY GETFONT 00:X::RELEASE:#530%& Menu.Maker v. 4.55.1 (side two)FILWRITE FILWRITEGETRFNM RTRFNM ERROR ^ROR DOARRAY OARRAY  ERROR ?BUFPNT NT DEVINFO DEVINFO MOVESTR FILREAD FILREAD BUF :4 GETRFNM BUFPNT OJNT ERROR ROR DOARRAY e=TPARMSERROR uROR BUFPNT BMOVESTR REQNUM UUM BLDSTRN DSTRN BUF pia RETURN RETADR  GETPARMSFREQNUM BUF "CONTROL CONTROL RETURN RETADR GETPARMS TPARMSERROR ROR STATUS STATUS BLDSTRN ,BUF |F GETPARMSca` hhh5h66HH :5HHH) @  hhh g5ȱg6ȱg@ ɀL g eegghI8e556l6m `  hUhVh8 ㅊ eh֭VHUHk`HFB>;:9853/&" NL64Ch5h6h3lh4m 0/L6H5H`g8640'%76,V^dKA;6hWhXhhhQlhRm e Nb YMH YhLSꈭTXHWH`gca` hhh5h66HH :5HHH) @  hhh g5ȱg6ȱg@ ɀL g eegghI8e556l6m `  hUhVh8 ㅊ eh֭VHUHk`HFBhhh5h66HH :~5~HHH|})   |}) @  hhh g5ȱg6ȱg@ ɀLDg eegghI8e556l6m`  lmL}\ZYc&h:h; (+65;H:H`,.CONSOLEg<:/.-+*(% CX` TYPE  NAMEBUF RETURN GETTYPE GETTYPE PARAM TYPE PE NAMEBUF F RETURN SETTYPE SETTYPE PARAM M   hhhhhhh5h66 5ș Hh H HHH`]ZZUS;540! |Lhhhhh5h66 5ș Hh HH`WL#ZX?9840." xL [A3/1.2]ing GETTYPE GETFONT GETFONT DOARRAY2QLOADFONT LOADFONTDOARRAY2ARRAY2 Yhhh5h6HH6 5{a 5(`: Util.6 -Basic Renumber renumbers any Basic program easily and quickly. -Diskdrv.Clean turns on the desired disk drive for use with cleaning kits. -Find.Replace finds specific strings of text and lets you replace them. -Compress.File s.5 -Includes Util and Util.Doc. Util is a program that you can add to other Basic programs, so you can do a number of disk utility functions, including copying files, reading files, etc. Util.Doc explains how to use this program. ecific lines of copy. Search.Document tells you how to use it. Utils.4 -Mailbase is a data base you can use for keeping mailing lists. -SOSbuffer.Demo uses a printer to demonstrate the ///'s typeahead feature. Side Two Utilom one disk to another. -Textfile.Dump is a similar program you can use to print a text file to a printer or to the screen. -Textfilemanker allows you to create a textfile and save it to disk. -Search.Utility will search a text file for sp ASCII files) and will show you the differences. Compare.Documnt tells you how to use it. Utils.3 -Scroller will load an ASCII file and allows scrolling up and down, left and right. -Textfile.Copy allows you to copy text files frage will compute your mortgage payments over any time and cost. Utils.2 -Contains a number of Basic menu programs including: Automenu, Basic.Bootprogram, and Manualmenu. -Compare.Utility compares two versions of a Basic program (saved as ll let you set up your Epson printer before printing. Epson.Document tells you how. -File.Reader can read a text file from various sources and even print it. -Hex.Dec.Convert will convert Hex and Decimal numbers back and forth. -MortgSB-11 This disk contains a number of useful BASIC programs that will, among other things, allow you to send control codes to an Epson printer, scroll your documents, work with various menu programs and more. Side One Utils.1 -Epson.Select wi /// SIG, Washington Apple Pi 12022 Parklawn Drive Rockville, MD. 20852 (301)-984-0300 WAP /// SIG PUBLIC DOMAIN LIBRARY BASIC UTILITIES NUMBER: 3BCAPS CAPS  is a short program that compresses a text file to save space. -REM.Remover removes REM statements (they slow down programs). -Renumber.Doc documents and works with the Renumber.Inv invokable module. -Demo.Three is a fun little program that you'll enjoy. -Modem is a telecommunications program written in Basic. Easy to use. -Rename.Direct allows you to shorten file names prior to backing up and will restore the names as well. Util.7 -Line.Printer will print the firFI$:FI$=""90 0#1,FI$:L=0 Dž#1600N610!X:"File loaded":L=L-1::90bL=L+1:#1;B$(L):580lC$<>"S"C$<>"s"740 v"Save":#L=0"No lines in memory":90"Filename: ";FI$:œ680FI$,::#1,FI$+X=1L:#1;B$(X)::memory":90!"Start line";S:S<1S>L470"End line";E:EL480/X=E+1L:B$(X-E+S-1)=B$(X)::L=L-E+S-1:90C$<>"N"C$<>"n"530 "New":L=0:"Memory now empty":90C$<>"L"C$<>"l"620 "Load": !œ680 &"Filename: ";";I$(I))I$(I)<>"."I<100380:ۻI<100I=I-1 I=090?L+I>1000I=1000-L:"Memory full (some lines now missing)"!X=LN+1-1:B$(X+I)=B$(X):%X=1I:B$(N+X)=I$(X)::L=L+I:90C$<>"D"C$<>"d"500"Delete":#L=0"No lines in ;": ";B$(N):FAL$;:": ";B$(N):90,C$<>"I"C$<>"i"4406"Insert":#@L=0"No lines in memory":90JL=1000"Memory full":90"T"Insert after which line";N: ^N<0340hN>=L"Use option A":90rI=0(|I=I+1:N1=N+I:720:FAL$;:": L=1000"Memory full":90&L=L+1:N1=L:720:FAL$;:": ";B$(L)+B$(L)<>"."L<1000210:ۻL<1000L=L-190C$<>"R"C$<>"r"300"Replace":#L=0"No lines in memory":90"Replace which line";NN<1N>L2707":N1=N:720:FAL$rinter":"Line length: ";line:=line:150xC$<>"P"C$<>"p"180"Print":#2,".console"#L=0"No lines in memory":90 176(X=1L:N1=X:720:#2;FAL$;":";B$(X):=80:#2:90X=L+1::C$<>"A"C$<>"a"240 "Add": :B$(1000),I$(100)(:"80c";"** S.T.E.P. **"12"80c";"Sequential Text Editor and Printer"<"80c";"By: Dan Kunesh"FL=0P.Z::"Command (H,P,A,R,I,D,N,L,S,Q,?): ";dC$:C$=""100SnC$="H"C$="h""Hardcopy"::#2,".pINV"xVERTICAL=123=VERTICALHORIZONTAL=180=HORIZONTALREADC(@VALUE%)#1;VALUE%);HORIZONTAL#1 VERTICAL =23:=1.D1/MENU.MAKERP7Z THIS IS A PROGRAM BY TAYLOR POHLMAN FROM SOFTALK.%\ TO HAVE "READCRT.INV" AVAILABLEE^ THIS PROGRAM WILL PRINT OUT AN EXACT COPY OF THE FIRST 23 LINES9` OF THE SCREEN ON WHATEVER DEVICE YOU CHOOSE IN 100.d#1,".PRINTER"n"READCRT. loan payments over any given time. -Border.Program creates a nice border ala the Apple /// demo disk. -Calculate.Area will do just that. -Graph.Plot will plot graphs. -PDL.TEST is used with an Apple /// joystick for allignment purposes. her.Utility encrypts text files and restores them. Cipher.Document explains how to use it. Util.8 -Graph.Pac is a Graphics Drawing program. -Time.Program will display the time if you have a clock chip. -Loan.Pay.Calc will compute yourst 23 lines of the screen to a printer. -S.T.E.P. is a word processing program written in Basic. -VC.File.Printer will print Visicalc (DIF Format) files to a printer. -Newdownload allows you to change fonts in Basic easily and quickly. -Cip:"File saved":90A=33"File already exists.":"Shall I write over it?";:r$.=33r$:r$="Y"r$="y"FI$::۱:90%=34:FI$:"Disk full"::90*=29"Bad path error . . . "::90#"Error #";;" occured."::90?LNT=N1))-1:LNT<1FAL$="0"+N1):730:FAL$=N1),2)LC$<>"Q"C$<>"q"760:::"Do you really want to exit S.T.E.P. ?";a$Bb$=a$,1):b$="Y"b$="y"::"You are now in BASIC"::ۺ90C$<>"?"100"Help"::C "80c";"The S.T.E.P. TRETADDR 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@<;85431hhh    `OLIHEDCB?<;8541.+*x  `"hhhhhhhh    HH`XVTRPNle )";6f"80c";"S ---) Save (Saves a file )"7p"80c";"Q ---) Quit (Exits to BASIC )";6z"80c";"? ---) Help (Shows this screen )"90 )";7>"80c";"I ---) Insert (Insert a line(s) )";.C"80c";"TYPE A (.) ON BLANK LINE TO END"6H"80c";"D ---) Delete (Delete a line(s) )"7R"80c";"N ---) New (Clears the workspace)";7\"80c";"L ---) Load (Loads a fiext File Editor":"80c";"Version 1.0"9:"80c";"H ---> Hardcopy (print to the printer)";6 "80c";"P ---) Print (print to the screen )"7*"80c";"A ---) Add (Add lines to memory )";74"80c";"R ---) Replace (Replace a line GPGSREQDLGRAFIXMO GRAFIXMORBUFLEN 9RANGECHKwWBUFLEN ASOSWRITERWBUF \SOSREAD GBASADR TSOSSMARK$INITCHK ITCHK INITGRAF INITGRAFWBUFLEN =+SOSWRITE@.!RWBUF  83& INITCHK uITCHK GRAFIXON GRAFIXONWBUFLEN UFLEN SOSWRITESWRITERWBUF zBUF IR SOFTWARE" G$: C(27):KIS=0':=2:=34:"CIPHER MENU":HP=1:LT=1=6:=30:"I INSTRUCTIONS"'=8:=30:"L LOAD TRANSLATOR CODE"$=10:=30:"E ENCODE TEXT FILE"*#=12:=30:"R READ ENCODED TEXT FILE"$(=14:=30:"C CREATE CODE F :œ700 16)%=10:=11:"____________________"'=11:=10:"| |"'=12:=10:"| C I P H E R |"'=13:=10:"|____________________|",=19:=7:"Press any key to continue..."/=23:=5:"COPYRIGHT 1983 BY PA Keywords: BUSINESS BASIC CIPHER ENCODE TEXT FILE This is a simple Business Basic program that will encode/decode a text file as to make the file unreadable to a third party lacking the translation code(s). 170d150 nœ170 x#1,A$&FILREAD(%1,@ARRAY$,%1024,@COUNT%)#1loadfont(@array$)40#=255:"Error...Error":502 --- font downloading utility -- John Jeppson)".d1/download.inv",".d1/REQUEST.INV"a%(512):array$="a%")("Which FONT do you want to use? ";a$2a$)=0<a$="?":40 Fœ1101Pexpr$=34)+a$+34):getfont(@expr$,@array$) ZœRINTER"R=I-20-1 #2;B$(R)$L=L+1:L=50L=0:P=116:#2:PR#2:=10:100080;"Completed"80;N$:80;"File"R=I-20-1 b$(r)"L=L+1:L=50L=0:P=116::PR$. There are...":: ,=39:I:680;"lines to print."::2@80;"Do you want a HARD COPY ...Printer On?"J=37:"(Y/N)?";O$TO$="Y"O$="y"360^O$="N"O$="n"450h:=10:80;"Printing":r80;N$:|80;"File"#2,".Px:"Input File Name ",N$N$ ::=1080;"Reading File":: 80;N$ #1,N$ ž#1:240 #1;A$ I=I+1B$(I)=B$(I)+A$190 *** END OF FILE ***#1=10:80;N$::1"80;"File has been read. VISICALC /// FILE PRINTER$ ORIGINAL PROGRAM BY DON NORRIS# MODIFIED BY CHUCK GRAHAM 6/83 :& ***VISICALC /// FILE PRINTER***(2I=1 <B$(1000)F=10 P 79C-Z80;"* * * VisiCalc File Printer * * *" d=".D1"nRETADDR INITCHK ITCHK RANGECHKECHKWBUFLEN UFLEN SOSWRITESWRITERWBUF  NEWFONT NEWFONT INITCHK ILE" -=16:=30:"X EXIT PROGRAM".2=22:=27:"Enter Letter of Choice...":G$7G$="I"G$="i"15009G$="L"G$="l"650:20<G$="E"G$="e"79AG$="R"G$="r"200CG$="C"G$="c"500FG$="X"G$="x"900 K7):50N PRINT CODEDC"::ۻC$=C(3)+32)NC$="c":5YC$=C(4))NC$="D"::ۻC$=C(4)+32)NC$="d":5ZC$=C(5))NC$="E"::ۻC$=C(5)+32)NC$="e":5[C$=C(6))NC$="F"::ۻC$=C(6)+32)NC$="f":5\C$=C(7))NC$="G"::ۻC$=C(7)+32)NC$="g":5]C$=C(8C(25))::ۻC$="y"NC$=C(25)+32):7 C$="Z"NC$=C(26))::ۻC$="z"NC$=C(26)+32): NC$=C$:L READ CODE TO LETTER5VC$=C(1))NC$="A"::ۻC$=C(1)+32)NC$="a":5WC$=C(2))NC$="B"::ۻC$=C(2)+32)NC$="b":5XC$=C(3))NC$="NC$=C(20)+32):7C$="U"NC$=C(21))::ۻC$="u"NC$=C(21)+32):7C$="V"NC$=C(22))::ۻC$="v"NC$=C(22)+32):7 C$="W"NC$=C(23))::ۻC$="w"NC$=C(23)+32):7 C$="X"NC$=C(24))::ۻC$="x"NC$=C(24)+32):7 C$="Y"NC$=C$="P"NC$=C(16))::ۻC$="p"NC$=C(16)+32):7C$="Q"NC$=C(17))::ۻC$="q"NC$=C(17)+32):7C$="R"NC$=C(18))::ۻC$="r"NC$=C(18)+32):7C$="S"NC$=C(19))::ۻC$="s"NC$=C(19)+32):7C$="T"NC$=C(20))::ۻC$="t"11))::ۻC$="k"NC$=C(11)+32):7C$="L"NC$=C(12))::ۻC$="l"NC$=C(12)+32):7C$="M"NC$=C(13))::ۻC$="m"NC$=C(13)+32):7C$="N"NC$=C(14))::ۻC$="n"NC$=C(14)+32):7C$="O"NC$=C(15))::ۻC$="o"NC$=C(15)+32):7"f"NC$=C(6)+32):5C$="G"NC$=C(7))::ۻC$="g"NC$=C(7)+32):5C$="H"NC$=C(8))::ۻC$="h"NC$=C(8)+32):5C$="I"NC$=C(9))::ۻC$="i"NC$=C(9)+32):7C$="J"NC$=C(10))::ۻC$="j"NC$=C(10)+32):7C$="K"NC$=C(C(1)+32):5C$="B"NC$=C(2))::ۻC$="b"NC$=C(2)+32):5C$="C"NC$=C(3))::ۻC$="c"NC$=C(3)+32):5C$="D"NC$=C(4))::ۻC$="d"NC$=C(4)+32):5C$="E"NC$=C(5))::ۻC$="e"NC$=C(5)+32):5C$="F"NC$=C(6))::ۻC$=2:=3::FILR$;" DOES NOT EXIST. PRESSS ANY KEY TO CONTINUE..."::G$:20=85FILP$,:=590FILC$,,7:)=22::"ERR # ";;" IN LINE# ";:: END OF PROGRAM ::: READ LETTER TO CODE5C$="A"NC$=C(1))::ۻC$="a"NC$=NPUT CODE FILE NAME } ";FILC$FFILC$=""20N#3,FILC$ XV=126 b#3;C(V)l v#3:200:=12:=20:"ENTER CODE FILE NAME } ";FILC$FILC$="":20#3,FILC$ V=126 #3;C(V) KIS=1: ERROR CODESW=81=2LC$ ž#3:10 V=126 #3;C(V) CREATE CODED FILE':=12:=30:"CREATING LETTER CODE" V=126R=1)*26)+65R<65R>90510 K=1VC(K)=R510&K 0C(V)=R5=22:=HP:".":HP=HP+1:V0D:=12:=20:"IODED FILE NAME } ";FILP$EFILP$=""20J80^/h=10:=20:"ENTER FILE TO BE READ } ";FILR$mFILR$=""20+r=14:=20:"ENTER OUTPUT NAME } ";FILP$wFILP$=""20|210 READ IN CODE+:=12:=30:"READING CODE FILE ";FILC$#3,FIsole":#2,FILP$:225#2,FILP$ ž#1:20 #1;L$L$)=0260L=1(L$))C$=L$,L,1) 1100NL$=NL$+NC$#2;NL$:NL$="":230,06=10:=20:"ENTER FILE TO BE CODED } ";FILR$;FILR$=""20/@=14:=20:"ENTER CNL$=NL$+NC$3=22:=HP:".":HP=HP+1:HP>80=22:30):HP=1#2;NL$:NL$="":HP=1:LT=LT+1=22:29):100 READ CODED FILE350KIS=0650(:=1:=1:"TRANSLATING FILE ";FILR$#1,FILR$9FILP$=".CONSOLE"FILP$=".con FILEO300PKIS=0650Q#1,FILR$U#2,FILP$+V:=1:=1:"CREATING CODED FILE ";FILP$ Zž#1:20Od#1;L$:=23:=1:"CODING LINE # ";LT;", WHICH IS ";L$);" CHARACTERS LONG"nL$)=0170xL=1(L$))}C$=L$,L,1) 1000))NC$="H"::ۻC$=C(8)+32)NC$="h":5^C$=C(9))NC$="I"::ۻC$=C(9)+32)NC$="i":7`C$=C(10))NC$="J"::ۻC$=C(10)+32)NC$="j":7aC$=C(11))NC$="K"::ۻC$=C(11)+32)NC$="k":7bC$=C(12))NC$="L"::ۻC$=C(12)+32)NC$="l":7cC$=C(13))NC$="M"::ۻC$=C(13)+32)NC$="m":7dC$=C(14))NC$="N"::ۻC$=C(14)+32)NC$="n":7eC$=C(15))NC$="O"::ۻC$=C(15)+32)NC$="o":7fC$=C(16))NC$="P"::ۻC$=C(16)+32)NC$="p":7gC$=C(17))NC$="Q"::ۻC$=GT RAREA\X=11000:Xf0:X #3. AREA OF A CIRCLE%"RADIUS OF THE CIRCLE = ";RDSAREA=3.14*RDS^2 AREAX=11000:X  #4. AREA OR A TRIANGLE *$4" LENGTH OF THE BASE = ";BASE'>" HEIGHT OF THE TRIANGLE = ";HGTHAREA=.5*BASE*HREA OF A SQUARE$" LENGTH OF ONE SIDE = ";LGTHAREA=LGTH^2 &AREA0X=11000:X:X #2. AREA OF A RECTANGLEb'l" LENGTH OF THE RECTANGLE ";LTH)v" WIDTH OF THE RECTANGLE ";WIDTHAREA=LTH*WIDTH AREAX=1100;A$A$="1"500:300A$="2"600:300A$="3"700:300A$="4"800:300%"INVALID ENTRY, PLEASE REENTER!"X=11000:X, TEST FOR REPLAY6)@"CALCULATE ANOTHER AREA Y/N ? ";B$TB$="Y"B$="y"100^h #1. A AREA PROGRAM=10((18)" GEOMETRIC AREA CALCULATION "2X=12000<Xdn" TYPE OF AREA 1 - 4 "x3)"1. SQUARE "3)"2. RECTANGLE "3)"3. CIRCLE "3)"4. TRIANGLE ")"INDICATE YOUR CHOICE 1 TO 4. "IX { SOME WORK MUST BE DONE TO 'CONNECT' BROKEN PROGRAM LINES BEFORE }1b { EXECuting THE TEXT FILE INTO A PROGRAM. }ONEY. I HOPE SOMEONE MIGHT WANT USE}I: { THIS PROGRAM, UPGRADE IT AND RETURN IT TO THE COMPUSERVE PROGRAM}ID { FILE. IF YOU HAVE ANY QUESTIONS CONTACT FRANK W. MOORE, }IN { 74666,3660. NOTE: THIS PROGRAM IS NOT IN 80 COLUMN FORMAT, SO }I { TRANSMISSIONS BETWEEN MY COMPANY'S OFFICES. THE IDEA WAS TO HAVE}I { POLICY MAKING DECISION TEXT UNREADABLE BY EMPLOYEES. THE SIMPLE }I& { ROUTINES HERE WOULD NOT STOP A DETERMINED CRYPTOLOGIST, BUT WILL}I0 { GIVE ANYONE A RUN FOR THEIR Manslation code to the scrambled file."U=8:"'CIPHER' translation codes are created randomly by your computer. There is"."no pattern to the creation of the code."g$20I { THIS PROGRAM WAS A SIMPLE ONE I STARTED FOR ENCRYPTING TEXT FILE}z": tNC$=C$: INSTRUCTIONS:HOME'=1:=28:"INSTRUCTIONS FOR CIPHER"S=4:"'CIPHER' is a program designed to scamble an ASCII text file in a random"N"fashion so that the resulting file cannot be easily read unless one has"2"the tr)NC$="V"::ۻC$=C(22)+32)NC$="v":7mC$=C(23))NC$="W"::ۻC$=C(23)+32)NC$="w":7nC$=C(24))NC$="X"::ۻC$=C(24)+32)NC$="x":7oC$=C(25))NC$="Y"::ۻC$=C(25)+32)NC$="y":7pC$=C(26))NC$="Z"::ۻC$=C(26)+32)NC$="C(17)+32)NC$="q":7hC$=C(18))NC$="R"::ۻC$=C(18)+32)NC$="r":7iC$=C(19))NC$="S"::ۻC$=C(19)+32)NC$="s":7jC$=C(20))NC$="T"::ۻC$=C(20)+32)NC$="t":7kC$=C(21))NC$="U"::ۻC$=C(21)+32)NC$="u":7lC$=C(22)8 *** Written for public domain by Dan A. Kunesh *** œ20100d"Please insert a disk containing BGRAF.INV in drive one. Press RETURN.";a$::".d1/BGRAF.INV"dinitgrafix:x#1,".GRAFIX"Grafixmode(%2,%1)Fillcolor(%15)PSOSWRITESWRITERWBUF  RETADDR PLINITCHK sITCHK VIEWPORT VIEWPORTWBUFLEN }UFLEN SOSWRITESWRITERWBUF  xplhd`\XUFLEN SOSWRITESWRITERWBUF ~zvrRETADDR $ INITCHK ITCHK XFROPTIO XFROPTIORANGECHKNGECHKWBUFLEN UFLEN #ITCHK WBUFLEN DUFLEN SOSWRITEGSWRITERWBUF ?:72-(SYSFONT SYSFONT RETADDR njDRAWIMAG DRAWIMAGINITCHK ITCHK WBUFLEN X=393-1:200:LEFT);:FY=233-1:200:UP);:,I21);13);: STANDARD TEXT OPTIONS ONKCOLORS$;:4,438,22)P:"THIS IS A GREAT APPLE /// BORDER"U220&COLOR=COLOR+1:20);COLOR);" "; LEFT=8:RIGHT=9:DOWN=10:UP=11"COLORS$=19)+15)+20)+1).16);"1";: SET 40-COLUMN, 16 COLOR MODE#1);: SET VIEWPORT (COLORS$ -:=2:=2221);0);:COLOR=57X=238:200:RIGHT);:<Y=222:200:DOWN);:!A =6:"PDL (0)";=10:"PDL (1)"=8:" "(0)>127 2=8:0)<F=8:=10:" "P1)>127Z=8:=10:1)dn30veto(%0,%191)%#1;"( HIT ANY KEY TO CONTINUE )"a$ ::330 X=10: =5480"ERR#";:u would like to change the magnification of graph type RUN . . .":T(A)=x) * Graph it ! * GRAFIXON 1000 œ2000x=-99.1%y=T(x):z=280+32*x*G:q=96+16*y*G+f=0f=1:Dotat(%z,%q):ەLineto(%z,%q)x :Mo77+32*xMoveto(%z,%y)X/G)<>(X/G)270#1;X/G)x y=-55"y=0310:z=284:q=99+16*y,Moveto(%z,%q)-Y/G)<>(Y/G)3101#1;Y/G)6yJ420::"Edit the above equation or":"Type GOTO 420 to plot graph or":"If yoencolor(%0)- * Draw the x and y axis for the graph *:FillportMoveto(%280,%0)Lineto(%280,%192)Moveto(%0,%96)Lineto(%560,%96)1 * Put the x and y coordinates on the axis *"ENTER MAGNIFY NUMBER:";G x=-88y=94:z=2TRETADDR  SETCTAB SETCTAB  INITCHK ITCHK RANGECHKHKWBUFLEN UFLEN SOSWRITESWRITERWBUF  'RETADDR tpINITCHK ITCHK PENCOLOR PENCOLOR RANGECHKNGECHKWBUFLEN UFLEN SOSWRITESWRITERWBUF |x FILLCOLO FILLCOLO YLOC  SDSTATGSCB  INITCHK  ITCHK XLOC XLOC RETADDR     SOSDSTAT SDSTATGSCB   INITCHK  ITCHK YLOC  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 % GRAFPAK2 GRAPHICS PROGRAM 1000:"Grafpak2"T"COMMANDS: ome ircle->radius ox->width,hieght aw rase"H"ip ormal clear rade colors change parameters"G"emember point ine to rem *9 ************************************************** 2fix=0d:s VARIABLE NAMES(x LoanAmount is original loan amount(} AnnualRate is annual interest rate' TermInYears is loan term in years) TermInMonths is loan term in mo 1.2 by SOURCEWARE *9 * Littleton, Colorado *9 * *9 * 24 February 1984 *9 * 9 **************************************************9 * *9 * Loan Payment Calculation Program *9 * *9 * Version olor(%cres):w=w*scalefac#linerel(%w,%0):linerel(%0,%h)+linerel(%(-w),%0):linerel(%0,%(-h)):Xcharcnt=0:line$=""]a$ba$)<32640gline$=line$+a$ l#1;a$;qcharcnt=charcnt+1v605 chr=a$)chr=13$chr<>8(chron:.:"Load file : ";a$:gload.a$:grafixon:450:600:460:> IF key$="F" THEN GOSUB 450:GOSUB 1300:GOSUB 460:RETURN": Fill routine doesn't work.xcen=xloc:ycen=yloc#cres=xycolor:pencolor(%pen):+moveto(%xcen,%ycen):penctmoveto(%0,%0):vr:450:900:460:xw,h:450:500:460:1|pen,fill:fillcolor(%fill):pencolor(%pen):~xrem=xloc:yrem=yloc:$450:lineto(%xrem,%yrem):460:!fillcolor(%fill):fillport:0:"Save as file: ";a$:gsave.a$:grafixr%=xycolor:xfroption(%4) Y300^"h>95key$=ŝ-32):key$=ŝ)jcmd=command$,key$)1lcmd366,367,368,370,372,374,376,380,382,384,m$npencolor(%pen):dotrel(%0,%0):%opencolor(%fill):dotrel(%0,%0):pzip%=zip%*2: rzip%=1:ddotrel(%0,%0):92 :35release:release:,:xfroption(%0))1pencolor(%savecolor%):dotrel(%0,%0)6>31360:340@=27:1708Exinc%=zip%*((=21)-(=8)):yinc%=zip%*((=11)-(=10))Jmoverel(%xinc%,%yinc%)&Tsavecolocolor(%pen)Ffillcolor(%fill)K"clear screen? ";a$+Pa$=a$,1,1):a$="y"a$="Y"fillportRhoriz=xdot(mode)/192Uscalefac=(1/aratio)*horiz Wgrafixon Y300Zxfroption(%4)[savecolor%=xycolor&\color%=xycolor:pencolor(%color%)embered point rite->textave ""

Load"A:"If program freezes type Control-C, RETURN, then GOTO 20."#"Graphics mode: ";mode$$mode$=""180%mode=mode$)(grafixmode(%mode,%1)$2"pencolor,fillcolor: ";pen,fill<pennths- MonthlyPayment is total monthly payment* MonthlyRate is monthly interest rate/ MonthlyInterest is total monthly interest3 PrincipalPayment is monthly principal payment% TotalInterest is total interest! LoanBalance is loan balance $8#.2# -7#.2#9=5:"Loan Payments/Amortization Program Version 1.2"N"______________________________________________________ ________________"D"by J.C. Anderson. SOURCEWARE. Littleton, Colorado. (2/84)""".d1/request.in----------------";8:"PREPARED FOR: ";name$;51);"DATE: ";reportdate$-"DESCRIPTION OF PURCHASE: ";description$:file#2;".";.!"AMOUNT OF LOAN:";7);:180;LoanAmountB&"ANNUAL INTEREST RATE:";6);:"3#.2#";AnnualRate*100;:"%"6' key to terminate)" 722*LoanBalance=LoanAmount:TotalInterest=0 count%=15 page%=1! Print amortization schedule#1,device$#1)"76c";"LOAN AMORTIZATION SCHEDULE"S "------------------------------------------------------ ----Writing to ";device$;" ";:480 :=10 1000 ::=24 1000=-2:=25)"READY PRINTER AND PRESS RETURN":R$R$=27)730R$<>13)7):440:=10:1000-:"80c";"SCHEDULE NOW PRINTING";:1000-:"79C";"(Press anywer$="S"answer$="s"screen=1:device$=".console":416Manswer$="F"answer$="f"file=1:temp.printer$=printer$:printer$="":415.answer$="P"answer$="p"415:7):410 4500screen::length=21:480Dfile::length=10000:=10:#2;":400K=1:=22:"Correct ? (Enter [y] or line number to be changed):";answer$answer$=""7);:400)answer$="Y"answer$="y"410:ۺ6000:=10:31);Q"Print to [S]creen, [P]rinter or [F]ile ? ";:answer$:answer$=27):197?ans:400;=13:=1:X1=30:X2=1:"3> Enter purchase description: ";14000:description$=Y$:fix=17):=23:400F=16:=1:X1=5:X2=5:"4> Enter beginning month/year (ie. 07/83): ";34000:start$=Y$:start$,3,1)<>"/"7):395fix=17):=224r"80c";"Data Entry for Amortization Schedule"; t2000 wfix=04|=7:=1:X1=18:X2=1:"1> Enter date of report: ";0}4000:reportdate$=Y$:fix=17):=23:4002=10:=1:X1=25:X2=1:"2> Enter client name: ";*4000:name$=Y$:fix=17):=23340O7):=-1:320 T::=10!Y"Returning to Main Menu ..."G^buffer$=128):hardware$=".console":control(%15,@buffer$)hardware$c".d1/menu.maker"*h Initialize for amortization schedule-jscreen=0:YearsInterest=0:yearprefix$="19"m::B,"Do you wish to print an amortization schedule (y/n) ? ";:S$1S$="Y"S$="y"3606S$="N"S$="n"320;7):=-1:300H@30):=-1:"Do you wish to run another calculation (y/n) ? ";:C$EC$="Y"C$="y"::208JC$="N"C$="n"hlyPayment=(MonthlyRate*LoanAmount)/((1-(MonthlyRate+1)^-TermInMonths))# "The monthly payment is: ";175;MonthlyPayment:TotalInterest=(MonthlyPayment*TermInMonths)-LoanAmount#"Total interest on loan is: ";"175;TotalInterest'7):240K=1:=12:"Correct ? (Enter [y] or line number to be changed):";answer$answer$=""7);:240)answer$="y"answer$="Y"250:ۺ5000=-1:30)AnnualRate=AnnualRate/100:MonthlyRate=AnnualRate/12:TermInMonths=TermInYears*12:Montnual interest rate (%) : ";P4000:AnnualRate$=Y$:AnnualRate=AnnualRate$):AnnualRate=03000:=4:220fix=17):2407X1=4:X2=1:=7:=1:"3> Enter the term in years : ";:4000:TermInYears=Y$):TermInYears=03000:=7:230fix=1r$=".printer": Set device names5X1=12:X2=1:"1> Enter the amount of the loan: $";34000:LoanAmount$=Y$:LoanAmount$,",")8000;LoanAmount=LoanAmount$):LoanAmount=03000:=1:210fix=17):240BX1=5:X2=1:=4:=1:"2> Enter the anv":1,780,24Ehardware$=".console":buffer$=0):control(%15,@buffer$)hardware$F:wait=11000::=16:"80c";"Press any key to continue.":key$.::"80c";"Loan Payments/Amortization"; 20000,680,24:?hardware$=".console":printeYearsAndMonths$=TermInYears)+"/"+TermInMonths)9("LOAN TERM (Years/Months):";:"8r";YearsAndMonths$3+"MONTHLY PAYMENT:";6);:180;MonthlyPayment0screen::.5"PAYMENT";51);"PRINCIPAL";71);"TOTAL"Q:"NUMBER";20);"INTEREST";35);"PRINCIPAL";53);"BALANCE";68);"INTEREST"?K=175:"=";DKI:file#2;".";:Jmonth$=start$,2):year=start$,2)):month=month$)NJ=1TermInMonthsFSMonthlyInterest=LoanBalance*MonthlyRate: Compute interest payment/VYearsInte (press RETURN to accept) : ";printer$;::=-printer$):"";answer$&file=1answer$=""7);:45002answer$=""device$=printer$:device$=answer$device$=""7);:4500$device$,1)<>"."7);:4500 œ46007file:#2,".conso:"_";:=H2:4020:::=10:"Returning to Program Selection Menu ...":buffer$=128):hardware$=".console":control(%15,@buffer$)hardware$:".d1/hello":=10:31);Efile=1"Enter SOS file name (include prefix) : ";answer$:4503R"Print to4050:ۻX$=8)4060.X$)<324020:ۻX3=X17):=-1:4020,Y$=Y$+X$:X$;:H2=H2+1:X3=X3+1:=H2:4020X31:7000:۾7000:formfeed$;page%=page%+169)"Page ";page%screen."PAYMENT";51);"PRINCIPAL";71);"TOTAL"Q"NUMBER";20);"INTEREST";35);"PRINCIPAL";0"0";year;:ۻyear=>10year;J=TermInMonthsmonth<>1" Interest : ";:180;YearsInterest;:9);"Principal : ";:180;YearsPrincipal;::YearsInterest=0:YearsPrincipal=0:count%=count%+3count%=count%+1file#2;".";count%10:yearprefix$;year-1;" Interest: ";:180;YearsInterest;:9);"Principal : ";:180;YearsPrincipal::YearsInterest=0:YearsPrincipal=0:count%=count%+3lJ=TermInMonthsmonth<>1:yearprefix$;:year=0"0";year;:ۻyear<1:180;YearsPrincipal::YearsInterest=0:YearsPrincipal=0:count%=count%+3:643month=1year<10:yearprefix$;"0";year-1;" Interest : ";:180;YearsInterest;:9);"Principal : ";:180;YearsPrincipal::YearsInterest=0:YearsPrincipal=0:count%=count):month$)<2month$="0"+month$%q180;MonthlyInterest;:" ";&v180;PrincipalPayment;:" ";!{180;LoanBalance;:" ";180;TotalInterestmonth=1year=0:"1999";" Interest : ";:180;YearsInterest;:9);"Principal : ";nBalance-PrincipalPayment/gTotalInterest=TotalInterest+MonthlyInterestLlJ;6);"(";month$;"/";:year<10"0";year;")";17);:year;")";17);mmonth=month+1"nmonth>12month=1:year=year+1'oyear=100year=00:yearprefix$="20"3pmonth$=monthrest=YearsInterest+MonthlyInterestOXPrincipalPayment=MonthlyPayment-MonthlyInterest: Compute principal payment2ZYearsPrincipal=YearsPrincipal+PrincipalPaymentJ]J=TermInMonthsPrincipalPayment=LoanBalance: Force out last payment,bLoanBalance=Loale":=10:#2;"Opening ";device$#1,device$#1file45259:=10:=1:X1=2:X2=1:"Enter page length in lines: ";-4000:length=Y$):length=07):4521length=length-6=19:7);? =32"80c";"ERROR. Volume not found. Press any key."K(=30=37)"80c";"ERROR. Device not configured. Press any key."H (=29=31)"80c";"ERROR. Pathname not found. Press any key." *key$ 4:4500 Correction routine8=12:=1:31);"Press RETURN whe ::: =12:=2hour=П,2))*hour=>13hour=hour-12:id$="pm":5060<hour=12id$="pm":ۻhour=00hour=12:id$="am":id$="am"!regtime$=hour)+ҟ,3,6)+id$=hour))<235);regtime$;" ";:34);regtime$;" "; 5000tx%-lxprev%),%0)~xycolor=target1402i=1startx%5moverel(%-1,%0):xycolor=targetlxprev%=xoc:ilxprev%=0:i=startx%xdot(mode)1moverel(%1,%0):xycolor=targetrxprev%=i:irxprev%=xdot(mode):ch%(ival,3):lxprev%=srch%(ival,1)-Zfilled=0:moveto(%startx%,%starty%):1305 _ivaldxxycolor<>target1410.yflag=0THENinc=inc+1:srch%(inc,1)=startx%:#zstartx%-lxprev%<=2filled=1:H|startx%=(startx%-lxprev%)/2+lxprev%:moverel(%-(starrxprev%-lxprev%),%0)<7startx%=(rxprev%-lxprev%)/2+lxprev%+.5:starty%=starty%-1<moveto(%startx%,%starty) A1305Finc=0flag=1 Gflag=1Hincval=incKival=1incval":a$".d1/bgraf.inv",xcos(126),ysin(126),xdot(3),srch%(20,3)val=6.2832/1202i=0119:xcos(i)=val*i):ysin(i)=val*i):i3xdot(0)=280:xdo(mode=2)+2*(mode<2)+3*(mode=3)firstx=xcos(0)*xscale+xvalmoveto(%firstx,%yval)'stepamt=20*(5-density)/r)+densitystepamt>6stepamt=6i=stepamt119stepamt5lineto(%(xcos(i)*xscale+xval),%(ysin(i)*r+yval))ilineto(%firstx=8charcnt=0)605 pen,fillpencolor(%pen)moverel(%-7,%0)#1;line$,1);moverel(%-7,%0)charcnt=charcnt-1line$=line$,charcnt)pen,fill:pencolor(%pen)605xscale=r*scalefacxval=xcen+.5:yval=ycen+.5*density=Y^LoanAmount$=TempAmount$conedone=0::lkey$=13)::9vkey$=27)done:J=TermInMonths:screen=0::7207);:=-1:7010@TempAmount$=""Ei=1LoanAmount$)!JLoanAmount$,i,1)=","8025Odigit$=LoanAmount$,i,1)"TTempAmount$=TempAmount$+digit$nswer$)answer=1380answer=2385answer=3390answer=4395)answer<1answer>47):=-2:4001Xdone"Press RETURN to continue ...";:7010<]"Press RETURN to continue, ESCAPE to cancel ...";:7010 bkey$!gkey$=13)dn line is correct."fix=1:answer=answer$)answer=1=1:210answer=2=4:220answer=3=7:230)answer<1answer>37):=-2:240p Correction routine8u=22:=1:31);"Press RETURN when line is correct."zfix=1:answer=a