UtilitieVList $TxSave $TreeCop$Stamp $SrSave $SrLoad $SetType$SetLoad$SetExec$ScrSave$ScrLoad$Roms $Repair $PrList $Mouse $MDump $MCode $MakeLP $lpS $FileInf$Explode$ETree $CSave $CLoad $Break $Assem/t$Assem $!ReadMe$s2 &  a{]{g  A̬ 9 5̪ C ̨  _̦  ̥  ̤'̡5̞ ̜ry= ̐= I ̎ . ̌r_zG%];Z  X bWk{'F iD h rB  AB[L>;O,f8  Utility commands ================ J.G.Harston 70 Camm Street, Walkley, Sheffield S6 3TR jgh@arcade.demon.co.uk Most of these utilities have an embedded version number or date in them at the end of them. If you *DUMP them, you can check the version to see if it's newer than a version you already have. *Assem When writing very long machine code programs (eg roms, etc.) using the in-built BASIC assembler, there comes a point where you cannot fit both the source code and the generated object code into the machine memory at the same time. To solve this, you could buy a 6502 machine code development package that allows you to write machine code and assemble it from disk. However, I always prefer to use the facilities provided on the machine already, and you can easily persuade the BASIC assembler to assemble from a file instead of from memory. This is what the *ASSEM command does. v1.16 *Break (^) Puts a message on the Break key, using the BIV. If the '^' parameter is given, the string appears at the top of the screen. If there if no '^' parameter, the message appears just before the filing system message. You can use any string that can be put on a function key, ie you can use '|' to specify control characters. v1.02 *CLoad (/X) Loads in a set of character definitions, starting at the character specified in hexadecimal, or character &80 (128) if not. If the 'X' parameter is given, or the file has a load address of &FFFFF7xx (ie is file-typed to &FF7), then the file is loaded as an Archimedes-type BBC font file. v1.03 *CSave (X) Saves a set of character definitions, as specified by the given parameters in hexadecimal. If the 'X' parameter is given, then the font is saved as groups of ten bytes containing the whole VDU23 sequence and the file has the load address set to &FFFFF700 and the execution address to &FFFFFFFF. This saves it as an Archimedes-type BBC font file. v1.03 *ETree -files -info -count -print path Displays directory tree. v1.14 *Explode (ON|OFF) Explodes the character set and allows all the characters to be defined. *Explode on its own just does the same as *FX20,6, ie explodes the characters. *Explode ON explodes the character set and sets up a Break Intercept to re-explode the set on Break. *Explode OFF disconnects this Break intercept. The command exits by re-entering the current language to take account of the change in PAGE. On a Tube system or a Master series, the command is ignored, as the character set is already fully exploded. Code resides at &131 to &13C. *FileInfo (-|=) Reads the file information with Osfile 5 and displays it all, including any parts not used by the filing system being used. The information is displayed in the format: name loadaddr execaddr length attrs date xx tt type eg: Hello FFFF1900 FFFF8023 00125F WR/WR 12/10/87 00 01 File If TT is 00, 01 or 02, the type is Not Found, File or Directory. xx is the fourth byte of the attributes (blk+17) that is unused in most filing systems. If the fourth byte of the length (blk+13) is not zero, ie the length if larger than &FFFFFF, then that byte is displayed as well. The attributes are read from blk+14, and the date from blk+15 and blk+16. You will notice on DFS that only the 'L' bit gets set, and so files appear to have no 'R' and 'W' setting. If the filename is preceded by '-', the control block is not blanked before use, so you can see if any parts are not actually changed. Doing *FileInfo -file where file does not exist shows an example of out-of-range values. v1.03 *lp (-) A machine code version of the 'Printer' program, and so easier to use. The command is created using 'MakeLp' and can be configured for different printers. If the filename is preceeded with a '-', the file is shown to screen only. If there is no '-', the file is set to the printer. The supplied LP command is configured for the Star LC-10/LC-1001. *lpS This command is similar to *lp, but displays only to the screen. The bold, italic, superscript, subscript, double width and underline effects are displayed. v1.08 MakeLP Creates the *lp command. v1.13 *MCode (|PAGE) Adds a machine code tail to a BASIC program so it can be called with *RUN. If an address is given, it is used as the file's load address. If PAGE is specified, then the file relocates down to the value of PAGE to run. If no address is given, the file's existing load address is used. On running, the program has Q% set to the original PAGE, and the full command line, including the command used to start the program, is placed in the general string accumulator, at $&600 in 6502 BBC BASIC where it can be retrieved with the standard FNOS_GetEnv function. To exit to the previous environment if no -quit processing is carried out, the program should use PAGE=Q%:END *MCODE and the MCODEd program will only work correctly in a 6502 language environment (ie, the I/O processor or the 6502 Tube) and will give an appropriate error in other CPU environments. v1.31 *MDump (-80) |+ Dumps an area of memory in a similar way to *Dump. If the -80 parameter is given, the dump lists in 80 columns, otherwise 40 columns are used. The address can specify various sections of memory in a similar way to *Save: FFFFmmmm i/o memory at &0000-&FFFF FFFEmmmm screen memory at &3000-&7FFF FFFrmmmm Sideways ROMs at &8000-&BFFF for ROM r FFExmmmm Workspace RAM at &C000-&DF00 FFExmmmm Workspace RAM at &8000-&9F00 <>FFmmmmmm Language memory *Mouse (ON/OFF) Provides an AMX-style mouse driver. *MOUSE ON enables the driver and *MOUSE OFF disables the driver. The driver provides ADVAL(7) and ADVAL(8) to return the mouse X and Y coordinates, ADVAL(9) to read the Left, Middle and Right mouse buttons in b0,b1,b2 and INKEY-10, INKEY-11 and INKEY-12 to return the Left, Middle and Right mouse buttons. The driver also provides OSWORD 64 to read the The returned information from Osword 64 is: XY+0,1 Mouse X coord XY+2,3 Mouse Y coord XY+4 Text X coord (POS) XY+5 Text Y coord (VPOS) XY+6 button state, %rml00000, 0 - button pressed Code resides in page &A. v1.17 *PrList (+)(-) Lists the specified saved BASIC file. If the '-' option is used then lines numbers are omitted. If the '+' option is given, then tokens are printed in COLOUR 1, the rest of the listing is printed in COLOUR 7. Obviously, colours will only be visible in screen modes with more than two colours. *PrList ensures that LFs are not sent to any SPOOL file, so it can be used to create a text version of a BASIC file with, for example: OSCLI"Spool PROG/BAS":OSCLI "PrList PROG":*Spool. v1.12 *REPAIR Attempts to repair a bad program, prompting you through the actual repair. Only works on BBC BASIC(65). Vv1.03 *ROMS (C) (V) Lists the roms in the machine. If the 'C' parameter is given, the copyright message is displayed. If the 'V' parameter is given, the version message is display. Any RAM banks will be listed as 'RAM'. To run on a machine with a built-in *ROMS command, use */ROMS. v1.10 *ScrLoad Loads in a compressed screen picture saved with *ScrSave with its palette information. Works with shadow screen on: Master, Aries-B32 and Watford 32k Ram Card. If a shadow screen mode is selected, then any mode change will be a shadow mode. On a B+ non-shadow modes are forced. Shadow screen cannot be supported on the B+ as the hardware only allows the VDU driver code between &C000 and &DFFF to access the shadow screen memory. 16/12/91 *ScrSave Saves a screen picture, and attempts to compress it. If compressing it would make a longer file (as a very detailed picture would), then the picture is saved without compressing it. The palette information and mode is saved in the load and execution addresses of the file, and if the file is compressed, the execution address is set to &0000xxxx with the load address set to &FFFFxxxx. With a sixteen colour screen mode, the first four bytes of the file are replaced with palette colours 8 to 15. On loading with *ScrLoad, these four bytes are set to the same as the following four bytes. Works with shadow screen on: Master, Aries-B32 and Watford 32k Ram Card. The palette and other information is stored as follows: Load address: &FFFFabbbb a: currently unused and ignored bbb: colours 4 to 7 held as %777666555444 in sixteen colour mode Execution address: &iiiimcccc iiii: 0000 for compressed, FFFF for uncompressed m: screen mode ccc: colours 0 to 3 held as %333222111000 In sixteen colour mode, the first four bytes of the file hold colours 8 to 15, 8/10/12/14 in the low nybbles and 9/11/13/15 in the high nybbles. v1.06 *SetAddr Sets the specified file's load and execution addresses. v1.00 *SetExec Sets the specified file's execution address. v1.00 *SetLoad Sets the specified file's load address. v1.00 *SetType Sets the specified file's filetype by setting the load address to &FFFttt00. *SrLoad () () (I) (R) (P) (Q) Loads a ROM image into sideways RAM. Any given address is ignored and 8000 is always used. If the ROM number is not given, the highest available unused RAM bank is used. If all banks are used, the highest bank is used. If no ram can be found, the error 'No RAM found' is returned. The following parameters can also be used: I: Insert. If the ROM has a valid header the ROM's type byte is placed into the MOS's ROM type table. R: Run. The ROM is entered as a language after loading. The ROM has to have been inserted for the option to have an effect. P: Pause. The user is prompted to press a key before loading. This option can allow you to change disks before loading. Q: Quick. The ROM is loaded quickly by loading the whole image to main memory at &FFFF3000 to &FFFF6FFF before being copied into sideways ram. The 'I' and 'Q' options are always selected in current versions. v1.03 *SrSave ((+)) (P) (Q) Saves a sideways ROM image. Any given addresses are ignored, and the whole rom is saved, from 8000 to BFFF. The following parameters can also be used: P: Pause. The user is prompted to press a key before saving. This option can allow you to change disks before saving. Q: Quick. The ROM is saved quickly by being copied to main memory at &FFFF3000 to &FFFF6FFF before being saved. The 'Q' option is always selected in current versions. If the ROM being saved has a second processor relocation address, then the load and execution address of the saved file is set to this, otherwise, they are set to &FFFF8000. v1.03 *Stamp Sets the specified file's modification date to 'today'. v1.03 *TreeCopy (:) (:) CPRE (-dest) (-quit (*)) TreeCopy will copy files between filing systems, preserving the directory structure, file attributes and creation/modification dates as much as possible. The program is quite easy and self-explanatary to use. It has been completely rewritten to be fully error-trapped, allow disk swapping, and it reads as many files as possible before writing, thereby reducing disk swaps. When asked for filing systems or directory names, you can enter a *command by starting it with a *. Some notes to bear in mind are: * The attributes have the 'W' and 'R' options added when copying from DFS. * Filenames are shortened to seven characters when copying to DFS. * If a file has no read access, TreeCopy will set the access to 'R', copy it, and then reset the access to what it was. Obviously, the source disk will need to be not write protected if this happens. * When copying from Econet, the Execute bit is masked out as it is usually just a copy of the Read bit. * Answering 'Yes' to the 'Recurse?' question will copy subdirectories. * The 'Pause to change disks?' option allows you to use the same drive for different disks. * When copying from DFS the 'Copy all DFS directories?' question allows you to copy the whole disk, creating an approximation of the DFS directory structure by putting all the non-$ directories into subdirectories, or adding a prefix to the filename. If you answer 'Y' to the subsequent 'Put into subdirs?' question, any directory other than the DFS $ directory is put into a subdirectory of the destination directory. Answering 'N' will put them in the destination directory, prefixed with x/, when x is the directory. Eg, DFS B.Prog becomes B/Prog. * When copying to DFS there is the 'Expand into DFS dirs?' question. This allows you to copy files with a x/ prefix saved by answering 'N' to the 'Put into subdirs?' question into the DFS x directory. Eg, B/Prog becomes DFS B.Prog. TreeCopy can take command line parameters when run as a *command. The parameters are as follows and must be in this order: (:) (:) CPRE (-dest) (-quit (*)) The and directories can be prefixed by a filing system name terminated with a :, eg HADFS::0.$ The single character options control the level of copying: C - Confirm P - Pause to change disk R - Recurse E - Expand DFS directories They can be prefixed with '~' to turn off the option, eg ~C means no confirm. If the -dest option is given, then TreeCopy will terminate with the destination filing system selected. Otherwise, the source filing system remains selected. The -quit option can give a file to run on exit. If the name starts with a *, then it is called as a *Command, otherwise it is CHAINed. An example command line would be: *TreeCopy HADFS::0.$ NET::USER.$.Disk1 ~C~PR~E -quit %.MenuProg If any parameters are not given, they are asked for. The -dest and -quit options must be given in lower case, and only the first letter is significant. v1.57 *TxSave Saves the current screen as a *PRINTable text file. The resultant file starts with a mode selection and contains all the characters on the screen. Any top-bit-set characters have a VDU23 definition sequence saved with them. Any character that is unrecognised is defined as the pixels on screen and the resulting VDU23 definition is saved. *VList Lists out the variables currently defined in BASIC. The current version does not work if the Tube is enabled, and generates an appropriate error if tried. v1.11 the 'W' and 'R' options added when copying from DFS. * Filenames are shortened to seven characters when copying to DFS. * If a file has no read access, Input file not found @ Ԅ _  B ) 0 Ll ȱ8 VHhHVh )H hN hh L LQ hhhVB 5 A @  $0 a R [B$H> :h]Ȅ  $0 >O`8`0ЭB 5_7B  F  Lt ˩L F ii@ оćGL F L x      (`  / HJJJJ h) ii0L 8 _  '  d 0 : l 8傅僅ee 0 0`Ignore? (Y/N)[OPT4:Pass Error at line 1.16Input file not found @ Ԅ _  B ) 0 Ll ȱ*ASSEM When writing very long machine code programs (eg roms, etc.) using the in-built Basic assembler, there comes a point where you cannot fit both the source code and the generated object code into the machine memory at the same time. To solve this, you could buy a 6502 machine code development package that allows you to write machine code and assemble it from disk. However, I always prefer to use the facilities provided on the machine already, and you can easily persuade the Basic assembler to assemble from a file instead of from memory. This is what the *ASSEM command does. *ASSEM When writing very long machine code programs (eg roms, etc.) using the in-built Basic assembler, there comes a point where you cannot fit both theV1.02 `^~ ȥ򥩅8 j 0z   0L` LL (`L (` `V1.02 `^~ ȥ򥩅8 j 0z   0L` ȱ `ȱ! ` Syntax: CLoad (/X)  N N `0: )GA)`     )X < Hr s r  hH| } }  hHw -v u hHr s @ Ar h+ 6 J  j r Lr L Not foundx y z u v `Hjs w t r h w `Vers1.03ȱ `ȱ! ` Syntax: CLoad (/X)  N N `0: )GA)`     )X <ȱ `ȱ! ` (Syntax: CSave (X)`  U U `0: )GA)`Can't open_ ` a \ ] `H [ Y hL  C h C  )XʆHX f Y | h iZ ^ hHg gZ ^ h ůh ˩Y h,f Y Z [ X  ^ _ ` a L`Vers1.03ȱ `ȱ! ` (Syntax: CSave (X)`  U U `0: )GA)`Can't open_ ` a \ ] `H [ >ETree 1.14 12-Aug-1998 F::B: PU%40,V%30,B%100:C%=0:A$=B:E$="":X%=V%:Y%=X%256:D$="":Z$="":P$="":F$="":I$="":C$="":W%=:F%=:L%=:R%=:M%=:Z%=&FF:L$=A$:d%=F:A$="":"Path to show: "A$ x@A$,1)<>"-"A$," "):A$=A$,A$," ")+1)+" "+A$,A$," ")-1) 8I%=A$,"-q"):I%:E$=A$,A$," ",I%)+1):A$=A$,I%-1) TA$,2)="-?":"Syntax: ETree [-apps] [-files] [-info] [-count] [-print] path":B :A$,1)="-"A$,2,1)<"a":A$="-"+(A$,2,1)+32)+A$,3) .A$,2)="-a":Z$="Y":A$=A$,1+A$+" "," ")) .A$,2)="-f":F$="Y":A$=A$,1+A$+" "," ")) .A$,2)="-i":I$="Y":A$=A$,1+A$+" "," ")) .A$,2)="-c":C$="Y":A$=A$,1+A$+" "," ")) .A$,2)="-p":P$="Y":A$=A$,1+A$+" "," ")) 1A$,1)<>"-":B$=Z$+F$+I$+C$+P$:L$<>"":B$="*" 5G$="":I%=A$,":"):I%>1:G$=A$,I%-1):A$=A$,I%+1) 1D$=A$:G$:e%=(A("^",5)&FE)=2:F<>16:Z%=&3B Fe%D$,"$")=0:"Needs a reference to root ($)":D$="":A$="":L$="" JD$<>"":(A(D$,5)&FE)<>2:D$;" is not a directory":D$="":A$="":L$="" D$<>"":L$=""A$="":B [B$="":"Show files? "F$:F$=F$,1):"Show info? "I$:I$=I$,1):"Printout? "P$:P$=P$,1) "eW%=Z$="Y"Z$="y":F%=F$="Y"F$="y":R%=I$="Y"I$="y":L%=P$="Y"P$="y":M%=C$="Y"C$="y":G(L%):L%2 6!A("$",5)=2:X%!2<>0:*INFO $ @"DIR "+D$:A(5,0):?(B%+1+?B%)=13:"Disk: ";$(B%+1):A(6,0):?(B%+?B%+?(B%+1+?B%)+2)=13:"Dir: "$(B%+2+?B%):?U%=32:C%=C(0,0,0):'"Total disk space used: ";C%" bytes";:M%:" - "k(C%); h:L%F%: r L%:3 |B: 3B:"FX143,18,"+d%:E$<>"":A$=E$:E$="":H(A$) : .A(A%,G%):X%!1=B%:X%!5=1:X%!9=G%:&FFD1: bݤC(O%,P%,S%):T%,C%,G%,K%:G%=P%:C%=0:`%=0:K%=:A(8,G%):G%=X%!9:T%=X%?5:T%=0P%<>0F%::= T%=0:D(P%) T%<>0`%:P%<>0:=`% =C% 0^D(P%):f$,J%:`%=:?B%<32:?(B%+?B%+1)=13:f$=D($(B%+1))B%?20=13:f$=D($B%,$B%,0)-1)) DHJ%=A(f$,5):d%=5:$(B%+8)=f$:E(&14,&12002000,&40000000):X%!15=B%!10 N@b%=X%!2:c%=X%!6:H%=X%!10:_%=X%!14:C%=C%+((H%+255)&FFFFFF00) bP%<>0(J%=2F%):`%=: lS%(F%J%=2):I(f$):K%= v>J%=2(f$,1)<>"!"W%=0):C(f$):C%=C%+C(O%+1,0,S%):F(f$)  7I(f$):Q%:a%=C(O%,G%,0):a%:U%?O%=c%(3)U%?O%=32 0O%>1z%=0O%-2:U%?z%,32::U%?z%O%=1?U% K%O%>0c%(4)O%>032 Ƌc%((a%1)((K%(O%=0))4)):f$;:R%(34-+10*M%);h(b%,8);" ";h(c%,8);" ";h(H%,6);" ";G((_%Z%)(256(J%=2)));" ";E(_%&FFFF00); ]M%:((30-)R%-R%);:J%=2:Q%=F%:F%=:C(f$):k(C(O%,0,));:F%=Q%:F(f$)M%:k(H%); : %C(f$):D$=D$+"."+f$:"DIR "+f$: ,F(f$):D$=D$,D$-f$-1):e%:"DIR ^":  "DIR "+D$: 4 ݤG(A%):a$:(A%128):a$="P" H(A%8):a$=a$+"L" R,(A%&100):a$="D"+a$+"/":=a$+7-a$," ") \(A%6)=2:a$=a$+"W" f(A%4):a$=a$+"E" p(A%5)=1:a$=a$+"R" z#a$=a$+"/":(A%96)=32:a$=a$+"W" (A%64):a$=a$+"E" (A%80)=16:a$=a$+"R" =a$+7-a$," ") )ݤE(A%):A%=A%256:A%=0:="00/00/0000" S=n(A%31,2)+"/"+n((A%&F00)256,2)+"/"+n(1981+(A%&F000)&1000+(A%&E0)2,4) 6ݤA(A$,A%):$B%=A$:?X%=B%:X%?1=B%256:=(&FFDD)&FF .ݤD(f$):f$,1)=" "f$=f$,2):f$,1)<>" " f$=f$,f$+" "," ")-1):=f$ "ݤh(A%,N%)="0000000"+~A%,N%) !ݤn(A%,N%)="0000000"+A%,N%) Hݤk(A%):A%>4100:=" "+(A%1024),5)+"k"=" "+A%,5)+" bytes" iG(f%):c%(5):z%=05:c%(z%)=z%+166::f%c%(0)=&C4:c%(1)=&C2:c%(2)=&FE:c%(3)=&B3:c%(4)=&C0:c%(5)=&C3 823,c%(0),0,0,0,255,0,0,0,0:23,c%(1),0,0,0,255,24,24,24,24:23,c%(3),24,24,24,24,24,24,24,24:23,c%(4),24,24,24,24+7,0,0,0,0:23,c%(5),24,24,24,24+7,24,24,24,24: ~@E(A%,D%,E%):X%,Y%:X%=B%:Y%=X%256:!X%=D%:X%!4=E%:&FFF1: ݤF:A%,Y%,E%:=(&FFDA)&FF hݤB:A$,A%,X%,Y%:A%=0:X%=1:g%=((&FFF4)&FF00)256:g%=6>&8000:ș"OS_GetEnv"A$:A$=A$,1+A$," ")) g%=32:A$=$&100 -A$=0:?(P-3):A$=$&600A$=0:A$=$&3800 3A%=A$+" "," "):H$=A$,A%-1):H$<>"":=A$,A%+1) ZX%=V%:Y%=X%256:A%=9:?X%=0:X%!1=B%:!B%=0:&FFD1:!B%?B%+B%?2<>8:B%?(1+B%)=13:=$(B%+1) ="" #H(A$):A$=""A$=42:A$:A$ B(C) {H {h H {h * pqrksrpqs {۠{L `{{`{{H Ϋ{ {h`p{{{p`Q%=PAGE OLD RUN BASIC ( >ETree 1.14 12-Aug-1998 F::B: PU%40,V%30,B%100:C%=0:A$=B:E$="":X%=V%:Y%=X%256:D$="":Z$="":P$="":F$="":I$="":C$="":W%=:F%=:L%=:R%=:M%=:Z%=&FF:L$=A$:d%=F:A$="":"Path to show: "A$ x@A$,1)<>"`L,z0  #ȱ)F% 11L  L  LO `L,z0  #ȱ)F% 11L  L  LO ="":Z$="":P$="":F$="":I$="":C$="":W%=:F%=:L%=:R%=:M%=:ZSyntax: FileInfo (-|=) =-  H z H  !.Ȣ !   L   ****(*H h(*H h(  )  )  JJJJ )JiQH dhdH h  hH hi   h=0     :  L  LH h L/LH hŨ iHihHJJJJ h) ii0LRWEPRWELRunNFndFileDir.1.03SyntaSyntax -ȱ00 eeeei@ Not found$0 % 4 L# 檦LL Q | LhhL   @HK`H $0步ŬM= h В 4 )`I` H)BDIQSWXYh`@ h) 娅%I%E` ) Mf LE )) NNNNNNN$P $)2 >(> J~(~  L1.09Syntax -ȱ00 eeeei@ Not found$0 % 4 L# 檦LL Q | LhhL   @HK`H $0步ŬM  > MakeLP A&87:G(&D00):&84:G$="1.13":M:H%&300:J" at line ";: *FX4 ( G:*FX4 2 ""A$(l%)=A$(l%)A$(l%)="" F Pn CHR$27+"@",,CHR$27+"E",,CHR$27+"G",,,,,CHR$27+"4",,,,,,,,,,CHR$27+"S0",,,,CHR$27+"W1",,CHR$27+"S1",,,,,, Z CHR$27+"R"+CHR$3+"#"+CHR$27+"R"+CHR$0,,CHR$27+"F",,CHR$27+"H",,,,,CHR$27+"5",,,,,,,,,,CHR$27+"T",,,,CHR$27+"W0",,CHR$27+"T",,,,,, d+ CHR$27+"-0",CHR$27+"-1",,,,,,,,,,,,,, n x.ݤB(A$):l%,B$:B$="":A$="++":="Set bit 7" A$="--":="Clear bit 7" A$=""="" +l%=1A$:m$=A$,l%,1):l%<>1 B$=B$+"," Qm$<32m$>126 B$=B$+×m$(m$>="0"m$<="9")m$=","B$=B$+34+m$+34B$=B$+m$ :=B$ ݤG::4"Printer Driver Generator ";G$'4;29,"="):'9"(C)1992 J.G.Harston":''5"1 : General settings":'5"2 : Letter extensions":'5"3 : Save settings":'5"4 : Load settings":'5"5 : (Create View Driver)":'5"6 : Create lp Program" T''5"0 : Exit"'':5"Press a key: ";:A$=:"0123456*"+13+0,A$):A$<>"*"A$ "A$="*""*"A$:A$:A$="":":"; ^A$=0"Saving...";:"SAVE "+$(+4),$(+4),">")+1)+" "+~+" "+~P+" FFFF0000 FFFFFB00" A$="1"C A$="2"H A$="3"N A$="4"O  A$="5"I  A$="6"J A$<>"":=A$="0" "ݤJ:=17-1=0=0 ,A$::A$=:=-1 6C::10"General Parameters"':"Auto linefeed? "D(b%)''"Paper length: ";Q%''"Text page length: ";R%:'"FF at end of page? "D(_%)''"LF at end of page? "D(T%):'"FF after last page? "D(N%):'"Convert CHR$96 (`) to pound? "D(J%) @"Convert CHR$163 ("163") to pound? "D(L%):c$"pound: "B(A$(64)):'"Highlight 1:":c$"underline on: ";B(A$(97)):c$"underline off: ";B(A$(96)):'"Use extended highlights? ";D(I%)':I%' JKI%"Highlight 2:"'c$"bold on: ";B(A$(98))'c$"bold off: ";B(A$(99)) T'':40,"=")"Printer reset with code '@' (see page 2)Pound also defined with code '`'";:13,2);:b%=C(b%):18,4);x%:x(18,4):x%>10 Q%=x%:14,4);x%;" " ^422,6);x%:x(22,6):x%>10 R%=x%:18,6);x%;" " h-17,8);:_%=C(_%):_%T%=:19,10);"No " r_%17,10);:T%=C(T%) |.18,12);:_%+T%=0 N%=0:"? No "N%=C(N%) 27,14);:J%=C(J%):28,15);:L%=C(L%):0,17)"Code: ";:""x$:x(0,17):x$<>""A$(64)=A(x$):16,16)B(A$(64));:x(,):x$=" "A$(64)="" f0,21)c$"on: ";:""x$:x(0,21):x$<>""A$(97)=A(x$):24,19)B(A$(97));:x(,):x$=" "A$(97)="" g0,21)c$"off: ";:""x$:x(0,21):x$<>""A$(96)=A(x$):24,20)B(A$(96));:x(,):x$=" "A$(96)="" |23,22);:I%=C(I%)::I%x(,):x(0,+1):x(0,+1)"Highlight 2:"'c$"bold on: ";B(A$(98))'c$"bold off: ";B(A$(99)) jI%0,27)c$"on: ";:""x$:x(0,27):x$<>""A$(98)=A(x$):19,25)B(A$(98));:x(,):x$=" "A$(98)="" kI%0,27)c$"off: ";:""x$:x(0,27):x$<>""A$(99)=A(x$):19,26)B(A$(99));:x(,):x$=" "A$(99)="" (0,28)"Ok";:i%=C():x(0,28):i%: "x(X%,Y%):X%,Y%);(39-);: ݤD(F%):F%:="Yes"="No " ݤH(l%):l%=D%:="Set bit 7" &l%<>E%:=B(A$(l%))="Clear bit 7" bD(A%)::l%=031:0,l%);(l%+A%+32);" ";H(l%+A%);20,l%);(l%+A%+64);" ";H(l%+A%+32);:: H:t%=32:D(t%):*FX4,1 l%=0:1+20*((l%32)1),l%32);":";20,31);(l%+t%+32);" ";B(A$(l%+t%)),16);(38-);20,31);:K%=:m%=l%:K%=136 m%=l%-32 K%=137 m%=l%+32 K%=138 m%=l%+1 &K%=139 m%=l%-1 0K%=135 t%=t%32:D(t%) :m%<0m%>62 m%=l% D/m%<>l%1+20*((l%32)1),l%32);" ";:l%=m% NK%<127K%>31:T:0: X@T:22,31);16;22,31);:C$=A(E(K%,17)):C$,1)=" "C$="" bC$=""D%=l%D%= lC$=""E%=l%E%= vBC$="++"D%>((D%-t%)&FFC0)=02+20*((D%-t%)32),D%31);18; BC$="--"E%>((E%-t%)&FFC0)=02+20*((E%-t%)32),E%31);18; 'C$="++"C$="":D%=(l%+t%)(l%+t%<32) 'C$="--"C$="":E%=(l%+t%)(l%+t%<32) EA$(l%+t%)=C$:2+20*((l%32)1),l%32);H(l%+t%);(20-(20));:0 OݤA(A$):l%,B$:l%=1:m$=A$,l%,1):(m$<"0"m$>"9")m$<>34 B$=B$+m$:l%=l%+1 5m$=34A$,l%+2,1)=34 B$=B$+A$,l%+1,1):l%=l%+3 ?(m$>="0"m$<="9")B$=B$+A$,l%):l%=l%+A$,l%)+",",",")-1 A$,l%,1)=","l%=l%+1 l%>A$:=B$ HݤE(A$,`%):B%,l%:$H%=A$:l%=A$:A$;:B%=:B%=127l%<>0127:l%=l%-1 +B%>31B%<127l%<`%B%:H%?l%=B%:l%=l%+1 B%=13:H%?l%=13:=$H% 1I:"Filename to save by: "F$:F$=""F$="drv" '"Assembling View Printer Driver";:P=01:C%=P*3+4:P%=&400:O%=H%:O%=H%:[OPTC%:JMPv:JMPQA:JMPIA:RTS:.RA:BRK:.`A:BRK:RTS:]:B(C%):[OPTC%:.QA:LDA#2:JMP&FFEE:.IA:LDA#3:JMP&FFEE:.v:]:I%[OPTC%:BITRA:BMIw:]  J[OPTC%:CMP#&81:BEQx:CMP#&80:BEQy:CMP#13:BEQj:]:J%[OPTC%:CMP#96:BEQq:] L%[OPTC%:CMP#163:BEQr:]  `[OPTC%:JMP&FFEE:.w:.q:.r:.y:.x:.j:RTS:]:"*SAVE "+F$+" "+~H%+" "+~O%+" 400 400":"...": * 4MݤF:G%=0:M%=:l%=0:A$(l%)<>""m%=1A$(l%):G%=G%(A$(l%),m%,1)>127): >l%=l%+1:l%=102G%:G%:=I H*l%=0:A$(l%)<>""A$(l%),1)<>27 M%=0 Rl%=l%+1:l%=102M%=0:=0 \EݤI:M%=0:f%=0:l%=0:A$(l%)<>""m%=1A$(l%):Q(A$(l%),m%,1)): fVl%=l%+1:l%=102(M%f%):M%f%"Can't build table with both 0 and 255";:f%=:==0 pQ(A%):A%=0 M%=: zA%=&FF f%=  B(C%):U%=(M%128)+(b%64)+(_%32)+(T%16)+(I%8)+(J%4)+(L%2)+(N%1):W%=(G%128)+(e%64):[OPTC%:EQUBU%:EQUB(Q%31)+(((E%-32)*4)&E0):EQUB(R%31)+(((E%-32)*32)&E0):EQUBW%+((D%-32)(D%>0E%>0)):.F:]:l%=0101:A$(l%)<>""U :[OPTC%:EQUB255:]: =U:[OPTC%:EQUBl%+1:]:G%[OPTC%:EQUSA$(l%):EQUBM%&FF:]: >M%[OPTC%:EQUSA$(l%),2,A$(l%)-2):EQUB128+A$(l%),1):]: 9[OPTC%:EQUSA$(l%),A$(l%)-1):EQUB128+A$(l%),1):]: #J:"Create 'lp' program":F ,"Filename to save by: "F$:F$=""F$="lp" 2D$=F$:D$,".")D$=D$,D$,".")+1):D$,".")=0 R"Assembling ";F$:Z%=&FFFF0900:B=0:O%=H%:P%=Z%:z=B:A(4):B>&B00 Z%=&FFFF08C0 B=z:O%=H%:P%=Z%:A(6):"Saving ";F$'"Start: &";~Z%&FFFF;" End: &";~B:"SAVE "+F$+" "+~H%+" "+~O%+" "+~(d%&FFFF0000)+" "+~Z%: 7A(C%):B(C%):K(C%):E(C%):L(C%):F(C%):P(C%): uK(C%):[OPTC%:.O:LDA#1:STAQ:RTS:.AA:TYA:PHA:JSRO:LDA#124:JSR&FFF4:LDA#15:JSR&FFF4:PLA:TAY:.OA:]:N%[OPTC%:JSRn:] [OPTC%:DECQ:BEQBA:LDA#0:STA&A8:STA&A9:STA&AA:STA&AB:LDX#&A8:LDA#1:JSR&FFDA:._:JSR`:STAo:JMPD:.BA:LDA#3:JSRM:LDA#0:]:B<&B00 [OPTC%:JMPN:] RB>&AFF [OPTC%:JSRN:LDA#0:LDX#1:JSR&FFF4:CPX#3:BCSSA:LDA#18:JMP&FFF4:.SA:RTS:]  $>E(C%):[OPTC%:.R:JSRJA:LDAL:CMP#R%:BCCD:JSRn:.D:LDX#1:]: .1L(C%):[OPTC%:.E:BIT&FF:BMIAA:JSRb:BCSOA:]: 80 [OPTC%:Abit7:] BJ%[OPTC%:CMP#96:BEQS:] LL%[OPTC%:CMP#163:BEQS:] V[OPTC%:.PA:INX:JSRC:JMPE:.TA:CMP#13:BEQR:CMP#10:BEQR:CMP#9:BEQZA:CMP#12:BEQCA:CMP#28:BEQc:CMP#29:]:I%[OPTC%:BEQf:][OPTC%:BEQUA:] `/[OPTC%:BNEE:]:J%L%[OPTC%:.S:LDA#64:BNEI:] jV[OPTC%:.CA:JSRn:JMPD:]:I%[OPTC%:.VA:JMPOA:.f:JSRb:BCSVA:SBC#31:BMIE:CMP#95:BCSE:] tW(E%D%)>0:[OPTC%:CMP#D%:BEQWA:CMP#E%:BNEI:LDA#0:.KA:STAXA:JMPE:.WA:LDA#128:BMIKA:] ~v[OPTC%:.I:JSRG:JMPE:.c:LDAH:#1:STAH:#1:A#96:.DA:JSRG:JMPE:]:I%[OPTC%:.UA:LDAH:#2:STAH:LSRA:#1:A#98:BNEDA:] [OPTC%:.ZA:TXA:#7:TAX:.EA:LDA#32:JSRC:INX:TXA:CMP#8:BNEEA:JMPE:.LA:LDA#27:BNEU:.C:.U:PHA:LDA#1:JSRk:PLA:.k:JMPM:]:_%[OPTC%:.n:LDA#12:JSRU:] -T%[OPTC%:.FA:JSRa:.n:LDAL:CMP#Q%:BCCFA:] Q[OPTC%:INCo:.`:LDA#0:STAL:RTS:.JA:BITH:BVCa:JSRa:.a:]:b%[OPTC%:LDA#10:JSRC:] p[OPTC%:INCL:LDA#13:JMPC:.G:STXJ:CLC:ADC#1:LDX#0:.GA:CMPF,X:BEQl:BCCK:PHA:.T:INX:LDAF,X:]:G%=0 [OPTC%:BPLT:] G%M%[OPTC%:CMP#&FF:] G%[OPTC%:BNET:] 4[OPTC%:PLA:INX:BNEGA:.l:]:G%=0M%[OPTC%:JSRLA:] 1[OPTC%:.V:INX:LDAF,X:]:G%M%[OPTC%:CMP#&FF:] G%[OPTC%:BEQK:] G%=0 [OPTC%:#127:] :[OPTC%:JSRC:]:G%=0 [OPTC%:LDAF,X:BPLV:][OPTC%:JMPV:] [OPTC%:.K:LDXJ:RTS:]: bP(C%):o%=O%:p%=P%:[OPTC%:.Q:BRK:.W:BRK:.L:BRK:.o:BRK:.H:BRK:.J:]:(E%D%)>0:[OPTC%:.XA:BRK:]  O%=o%:P%=p%:[OPTC%:.d%:LDX#&A8:LDY#0:JSRO:STYW:JSR&FFDA:LDA(&A8),Y:CMP#13:BEQp:LDX#0:CMP#"+":BNEs:LDX#&40:JSRZ:BEQp:.s:STXH:TYA:PHA:.MA:INY:LDA(&A8),Y:CMP#"!":BCSMA:JSRg:BEQh:JSRi:STAQ:JSRg:BEQh:JSRi:STAW:.h:PLA:CLC:ADC&A8:TAX LDA#0:ADC&A9:TAY:LDA#&40:JSRN:TAY:BEQm:LDA#2:JSRM:LDA#32:JSRG:JMP_:.p:._A:BRK:EQUB220:EQUS"Syntax: "+D$+" (+) ()":.m:BRK:EQUB214:EQUS"Not found":BRK:.i:LDA#0:.NA:STA&AA:LDA(&A8),Y:CMP#"0":BCCHA:#15:PHA LDA&AA:ASLA:ASLA:ADC&AA:ASLA:STA&AA:PLA:ADC&AA:INY:BNENA:.HA:LDA&AA:RTS:.Z:INY:.g:LDA(&A8),Y:CMP#" ":BEQZ:CMP#13:RTS:EQUS"V"+G$:BRK:.B:]: ( N:F 2X'"Save settings":"Filename: "F$:P%=H%:B(0):"SAVE "+F$+" "+~H%+" "+~P%+" 0 0": 0:b%=(U%64)<>0:_%=(U%32)<>0:T%=(U%16)<>0:I%=(U%8)<>0:J%=(U%4)<>0:L%=(U%2)<>0:N%=(U%1)<>0:G%=(W%128)<>0:e%=(W%64)<>0:M%E$=27E$="" Z a%=0R: d#a%>80"Unknown format";:a%=: nx%=1:a%=1 x%=-31 xm%=V%+4:G%S: fl%=0101:A$(l%)="":?m%=l%+x%:m%=m%+1:A$(l%)=A$(l%)+(?m%127):?m%>127:m%=m%+1:A$(l%)=E$+A$(l%) : qS:l%=0101:A$(l%)="":?m%=l%+1:m%=m%+1:A$(l%)=A$(l%)+?m%:?m%=(M%&FF):m%=m%+1:A$(l%)=A$(l%),A%(l%)-1) : |R:m%=V%+84:l%=473:`%=?(V%+l%+1)-V%?l%:`%>0 A$(l%+28)=E$:n%=1`%:A$(l%+28)=A$(l%+28)+K(?m%):m%=m%+1:A$(l%+28)="" :E%=:D%=: *ݤK(c%):G%c%>127:=27+(c%127)=c% >ݤC(F%):K%:"? (";(78-F%*11);")";:K%=:K%>95 K%=K%&DF ,K%=13K%=89K%=78:K%=13 K%=F%K%=K%=89 3,127);:K%"Yes""No " =K% S% =B%=(+(A%-P-S%))&FF00:"Relocating to &";~B%:*K.0 RUN|M  *FX225,1 *FX138,0,128 &A%=0P-+44:B%!A%=A%!::=B%:  ) >S/MCODE 1.31 7200 0780 07-Dec-1999 @ 07-12-99 V1.31 JGH: Claims RD/WR vectors, defaults to 0600 : (V%=&8000:W%=0:6: D^A 2($&780="":"MCode file: "L$:$&780=L$ <#X%=&700:Y%=X%256:C%=0:L$=$&780 FUL$="" L$,2)="-?":"Syntax: MCODE (|PAGE ())":DTA PQI%=L$+" "," "):F$=L$,I%-1):L$=L$,I%+1):L$,1)=" ":L$=L$,2):L$,1)<>" " Z&780):L$>"`":L$=(L$-32) nF%=L$,1)="P":F%:L$="" xP$&780=F$:!X%=&780:A%=5:A%=(&FFDD)&FF:A%<>1:"File '"F$"' not found":DTA Y(X%!2&FFFF0000)=0 (X%!6&FFFF0000)=0 X%!2&780:[OPTZ%:STY&A9:LDA#&F2:STA&A8:JSRH%:LDA&AC:PHA:] 5B%<>&780:[OPTZ%:JSRH%:LDA&AC:STA&A9:PLA:STA&A8:] /B%<>&780:[OPTZ%:BNE_%:LDA&A9:CMP#6:BNE_%:] JB%<>&780:[OPTZ%:LDY#&FF:.Lp:LDA&5FF,Y:STA&600,Y:DEY:BNELp:BEQK%:._%:] ?[OPTZ%:LDY#0:.J%:TYA:PHA:JSRH%:PLA:TAY:LDA&AC:STAB%,Y:INY:] -B%<>&780:[OPTZ%:BEQK%:] [OPTZ%:BMIK%:] A[OPTZ%:CMP#13:BNEJ%:.K%:]:B%<>&780:[OPTZ%:LDA#"*":STAB%-1:] F%:[OPTZ%:LDA#131:JSR&FFF4:STX&70:STY&71:LDA#(L%255):STA&72:LDA#(L%256):STA&73:LDY#0:LDX#(255+#C%)256:.M%:LDA(&72),Y:STA(&70),Y:INY:BNEM%:INC&71:INC&73:DEX:BNEM%:] n[OPTZ%:JSRR%:LDX#W%255:LDY#W%256:JMP&FFF7:.H%:LDX#&A8:LDY#0:LDA#5:JSR&FFF1:INC&A8:BNEN%:INC&A9:.N%:RTS:] [OPTZ%:.R%:LDX#3:.Lp:LDA&20E,X:TAY:LDAVec,X:STA&20E,X:TYA:STAVec,X:DEX:BPLLp:RTS:.Vec:EQUWWr:EQUWRd:.Cnt:EQUB5:.Idx:EQUB0:] C[OPTZ%:.Wr:PHA:CMP#13:BNEWr0:DECCnt:BNEWr0:JSRR%:.Wr0:PLA:RTS:] "<[OPTZ%:.Rd:STX&70:LDXIdx:LDAV%,X:INCIdx:LDX&70:CLC:RTS:] ,?[OPTZ%:.V%:EQUS"Q%=PAGE":]:F%:[OPTZ%:EQUS":PAGE=&"+~L%:] 6L[OPTZ%:EQUB13:EQUS"OLD":EQUB13:EQUS"RUN":EQUB13:.W%:EQUS"BASIC":EQUB13:] @$:Z%=X%O%:#C%,?Z%::#C%:C%=0 J:$&780=F$:!X%=&780:A%=1:X%!2=L%:X%!6=E%:X%!14=T%:&FFDD TF$=13:Q%?1=0:=Q%: ^:C%:D%=C%:C%=0:#D% h :DTA B(C) H zh0 zzL `zz`zzH ηz zh`pzzzp`Q%=PAGE:PAGE=&7200 OLD RUN BASIC ) >Syntax: MDump (-80) /+ - 𷢫 + ( eeE)E 4)  ) . m iEE $| `,z0R+H, 4H  4 L ) L , h4h0`ﰮ   祖L HJJJJ h) ii0L L   666 `0:@)`8`ȱ!ȱ `v1.03Ver1.17 x ȱ)F [   (` =   bn)  E ꩀ % @ (` (`)`m0l )HHHxm`)mHJJ8 > h > hhh@) i i (i8  0(`HH hh `jjjj)@`@l HɀɁhl  h` ʊ)Iijjjj-`ih`Ver1.17 x ȱ)F [   (No BASICNot foundKH0 - n橱+ n橦@  & Not a BASIC filemqqV/W 0  A B  a Z ,0 ~  D$0= 8,ɀ;" M" ֢ H  h Ln h0`ɍ # L 六 ޅ H)Eh E ~ L ȱŪȘeeL/ ,0,   0 ,   `'  d 0L8宅寅ee 0 0`LL1.13No BASICNot foundKH0 - n橱+ n橦@  & Not a BASIC filemqqV/W 0  A B  a Z ,0 ~  D$0= >REPAIR 1.02 H7:" "8,"*")" Bad program recovery "8,"*")':28;22,39,2:=P:*K.0 :" at line ";:TXA ( A%=Q%:L%=0:A$=8," "):?Q%=13 2A%?1>127:dH@ <A%?3<5 A%?3>180:d\@ F?(A%+A%?3)<>13:t`@ P3A%?1*256+A%?2>L%+100 A%?1*256+A%?2<=L%:tt@ ZL%=A%?1*256+A%?2 d+;L%;" ";:B%=4:F%=0::A%?B%=34:F%=1-F% nA%?B%<32:A%?B%="|" x~A%?B%=141:B%=B%+1:;(?(A%+B%+2)63)*256+(?(A%+B%+1)63)+(((?(A%+B%)16)1) 3)*64+(((?(A%+B%)15)4)*4096);:B%=B%+2:tL@ 127 F%=0::A1%=127 A%?B%:A$:A1%:A$; A%?B% B%=B%+1:B%=A%?3:A%?B%=13 " ok":A%=A%+A%?3:Tr@ 3"No CR on line ";A%?1*256+A%?2;". Fix?";:TDA &Z%="Y"?(A%+A%?3)=13:DP@d\@ -"Line ";A%?1*256+A%?2;"? Change?";:TDA :Z%<>"Y" DZ@ A%?1=(L%+1)256:A%?2=(L%+1)256:DZ@ 1"Line ";A%?1*256+A%?2;". Ignore end?";:TDA CZ%<>"Y":A%?1=255:TbA A%?1=(L%+1)256:A%?2=(L%+1)256:Tr@ :"Length wrong on line ";A%?1*256+A%?2;". Fix?";:TDA 4Z%<>"Y":A%?1=255:"Can't go any further":TlA CB%=$(A%+4):B%=0B%>254:A%?1=255:"Can't go any further":TlA A%?3=B%+4:DF@ ;" (Y/N)";:Z%=( &DF):5,127);:Z%="Y""Yes""No"  &=17?(A%+1)=255:;L%:TlA;: ""Program repaired." ,*KEY0 LOMEM=TOP:*K.0|F|M 6/"FX138,0,128":Y%=:26,31,0,Y%+2,21:=Q%: @ *,AND,DIV,EOR,MOD,OR,ERROR,LINE,OFF,STEP,SPC,TAB(,ELSE,THEN,o,OPENIN,PTR,PAGE,TIME,LOMEM,HIMEM,ABS,ACS,ADVAL,ASC,ASN,ATN,BGET,COS,COUNT,DEG,ERL,ERR,EVAL,EXP,EXT,FALSE,FN,GET,INKEY,INSTR(,INT J LEN,LN,LOG,NOT,OPENUP,OPENOUT,PI,POINT(,POS,RAD,RND,SGN,SIN,SQR,TAN,TO,TRUE,USR,VAL,VPOS,CHR$,GET$,INKEY$,LEFT$(,MID$(,RIGHT$(,STR$,STRING$(,EOF,AUTO,DELETE,LOAD,LIST,NEW,OLD,RENUMBER T SAVE,,PTR,PAGE,TIME,LOMEM,HIMEM,SOUND,BPUT,CALL,CHAIN,CLEAR,CLOSE,CLG,CLS,DATA,DEF,DIM,DRAW,END,ENDPROC,ENVELOPE,FOR,GOSUB,GOTO,GCOL,IF,INPUT,LET,LOCAL,MODE,MOVE,NEXT,ON,VDU,PLOT,PRINT,PROC ^S READ,REM,REPEAT,REPORT,RESTORE,RETURN,RUN,STOP,COLOUR,TRACE,UNTIL,WIDTH,OSCLI B(C) H yh0 ݢ z  6zL `KEY0 Q%=PAGE:PAGE=&7200|MOLD|MV.6:RUN|M BASIC 0 >REPAIR 1.02 H7:" "8,"*")" Bad program recovery "8,"*")':28;22,39,2:=P:*K.0 :" at line ";:TXA ( A%=Q%:L%=0:A$=8," "):?Q%=13 2A%?1>127:dH@ <A%?3<5 A%?3>180:d\@ )CV       H R O A M V(OCH)A(    )  ) ()  LC h0` L LHJJJJ h) ii0LV1.10 )CV       H R O A M V(OCH)A(    )  ) ()  LC hSyntax: ScrLoad (-) զ-  File not found H JJJJh, 0Ī  ) " o ) l  H ʎ L- L Bad file@ ( 步HH$04 /H (h8ei hhH檥Hhhh h` )  0:07ʠ ) JJJJ `ޘe o "(l(ffffff` L LL000@XX`|Ver1.06Syntax: ScrLoad (-) զ-  File not found H JJJJh, 0Ī  ) " o ) l  H Syntax: ScrSave  ٥ #" o ) l   ? ` ? u  L H h  H h  o "L`lLL LH 0Ѫ h  HL h  ` i i ` `  >  >  > H 2 h) )` 2  2 檭` l    `00000@XX`| Vers1.06Syntax: ScrSave  ٥ #" o ) l   ? ` ? u  L H h  H Syntax: SetExec  Υ ! 𴢪 Ъ Р LFile not found   6666 `0:)G)`ȱ 8`v1.00Syntax: SetExec  Syntax: SetLoad  Υ ! 𴢪 Ъ Р LFile not found   6666 `0:)G)`ȱ 8`v1.00Syntax: SetLoad  Syntax: SetType  Υ ! 0 𬢪 Т  F        $0  LFile not found   666 `0:)G)`ȱ 8`TEXTCOMMANDDATAUTILITYBASICMODULEBBC FONTTELETEXT|BBC ROMSyntax: SetType  Υ ! 0 𬢪 Т  F        $0Press SPACE to loadSyntax: SRLoad () (I) (R) (P) (Q) 򥩅 A0:,A)G RQPIЇi) x x )w H,x 0 B w x J  y z y w 8 0櫥x )&> w x )Lh0`(C) 8 `No RAM found01.03Press SPACE to loadSyntax: SRLoad () (I) (R) (P) (Q) 򥩅 A0:Press SPACE to saveSyntax: SRSave (P) (Q) 򥩅 9+0:"A)GQPЕ)   ) H J     0櫥 J )``0! %  h0`0p1.03Press SPACE to saveSyntax: SRSave (P) (Q) 򥩅 9+0:"A)GQPЕ)   ) H J     0Syntax: Stamp  = > α! 6 6  L~ )?8 )7  i`i@6 6  6 8 H)8 h)Jm6 Ɍi_i6 =  6 )p 8 L 6 7 M LFile not found0): )GF&&&&)eѥ`H)JJJ: m: : h)m: `YMDdHMS1.04Syntax: Stamp  = > α! 6 6  L~ )?8 )7  i`i@6 6  6 8 H)8 h)Jm6 Ɍi_i6 =  6 )p 8 ! > TreeCopy 1.57 15-Jan-2007 F}&87:23;2,53;0;0;0:A$=C+" ":11"TreeCopy 1.57"'1114,"=")':A=&FFD1:B=&FFDD:C=&FFF1:D=&FFDA:X%31,C%127:Y%=X%256:*FX1 dG%=(-P-2500)&FFFF00:B%G%:G%=G%-256:Q%=B%+G%:Q$="":S$="":D$="":f%=1:h%=1:i%=1:a%=1:M%=1:R%=1:n%=:I%=0:A$,6)="-quit ":Q$=A$,7,A$-7):A$="" (A$,2)="-d":n%=:A$=A$,A$," ")+1) CA$<>""S$=""A$,1)<>"-":I%=A$," "):S$=A$,I%-1):A$=A$,I%+1) CA$<>""D$=""A$,1)<>"-":I%=A$," "):D$=A$,I%-1):A$=A$,I%+1) .S$<>""D$<>"":I%=A$,1)="~":I%:A$=A$,2) %S$<>""D$<>"":A$,1)="C":h%=I% %S$<>""D$<>"":A$,1)="P":f%=I% %S$<>""D$<>"":A$,1)="R":i%=I% %S$<>""D$<>"":A$,1)="E":a%=I% %S$<>""D$<>"":A$,1)="A":M%=I% %S$<>""D$<>"":A$,1)="S":R%=I% $" ACDEFPRSU",A$,1)):A$=A$,2) [A$="-? "::"Syntax: TreeCopy (fs:)src (fs:)dest CPREAS (-dest) (-quit (*)name)":q: A$="":"Caution - This program does not check"'"for circular pathnames - Eg Copying"'"$.FRED into $.FRED.JIM will repeatedly"'"create $.FRED.JIM.JIM.JIM.JIM...etc."''"Buffer length: &";~G% ,7S$<>"":I%=S$,":"):I%>1:K$=S$,I%-1):G$=S$,I%+1) 6#:-1:Q$=13:"FX1,"+ß:q @S$<>"":I%<2:K$="":G$=S$ JFS$=""::K$=E("Source filing system: "):K$:G$=E("Source dir: ") T8j%=(A("^")=2):F=4:e%=(A(G$+".$")):e%=2e%=A(G$) ^"e%=0:G$" does not exist.":q h'e%<>2:G$" is not a directory.":q r*f%>0:'"Pause to change disks";:f%=D |7D$<>"":I%=D$,":"):I%>1:L$=D$,I%-1):d$=D$,I%+1) D$<>"":I%<2:L$="":d$=D$ AD$="":':L$=E("Dest. filing system: "):d$=E("Dest. dir: ") L$="":L$=K$ M$="":J$="":E$="":K%=F:B:N%=F:E$=d$:N%>4E$,"$")+E$,"%")+E$,"&")+E$,":")+E$,"@")=0:"Dest. dir must be an absolute pathname, ie it must contain one of $,%,&,@ or :":q K%=N%:K$="":L$="" K%<>N%K%=8:M$="Mount" K%<>N%N%=8:J$="Mount" WK%=N%f%(K%=8K%=16):M$="Mount "+H:J$=M$:J$:G$,1)<>"$"G$,1)<>":":G$="$."+G$ N%>4:L(E$)*DIR$ h%>0:I:"Confirm";:h%=D (i%>0:i%=:K%>4'"Recurse";:i%=D: K%=5:_%=&FFFFFF3B_%= 2a%>0:a%=:N%=4"Expand into DFS dirs";:a%=D !a%E$,2)=".$":E$=E$,E$-2) Go%=:R$=E$+".":H$="":I$="":K%<>N%:A("^")=2:H$="DIR ":R$="":O$=B 0AK%=N%K%>4j%f%:A("%")=2:H$="LIB ":I$="%.":R$="%.":O$=G :H$<>"":H$+E$ DC::N$="":j%:N$=B NMM%=:R%=:F=4:"Do all DFS dirs";:M%=D:M%:'"Put in subdirs";:R%=D: XR%:T$="."T$="/" b_F:" Dir. ";G$:"DIR "+G$:E$=E$+".":Z%=0:H%=B%:k%=:?H%=0:F$="":O%=0:S%=0:L%=33:M%:*DIR ! I:"FX1,"+ß:q U:k%Z%=0:S::q q:n%:B Q$="":Q$=13: Q$,1)="*":Q$:Q$=13: Q$ S:H$<>"":B:H$+O$ F<>K%:C N$<>"":"DIR "+N$   (ݤE(A$):A$;:""B$:B$,1)="*":B$ B$,1)<>"*":=B$ * ݤI:I:11::;:<128::= 4_=195(Z%&C)=4:". Overwrite";:q%=D:q%:H%=P%+F%:==195(Z%&C)=4:"ACCESS "+d$::= >". Skip";:m%=D:m%Z%=0: HZ%=0m%:F$=C$:T%=A%:= R (Z%&C)=4::m%:H%=P%+F%:= \)(Z%&C)=12m%::H%=B%:?H%=0:F$="":J zF$="":=<128-1 7J:J$="":(Z%&100)=0:Z%=0:#`%:B:#U%:C:F:: #J$="":Z%=0:#U%:C:#`%:F:: (Z%&100)=0:Z%=0:#`%: Z%=0:#U%:C:F:: U:Z%=0:O: (Z%&C)=0?B%=0:Z%=Z%+12 &(Z%&C)=0::B:Z%=Z%+4:H%=B%:P: (Z%&C)=4:M:Z%<8: )(Z%&C)=8:C:Z%=Z%+4:H%=B%:F:f%: (Z%3)<>1:Z%=0:?H%=0: )(Z%&C)=12:Q:Z%=0:F$="":H%=B%:?H%=0  *O:F$<>"":C$=F$:A%=A(C$):F$="":A: $0Z%<>0:l%=0: BM%:A%=3:C$="":A: L7O%=0:L%=L%+1:L%=34L%=":"L%="*"L%="|":L%=L%+1 VL%="a":L%="{" `&L%<127:"DIR "+L%A%=3:A:*DIR $ j ~IK:?(C%+?C%+1)=13:C$=$(C%+1):C$,1)=" ":C$=C$,C$-1):C$,1)<>" " 3A%=A(C$):A%=2i%:(S%*2);:A%=2:"Dir. "; #A%<1A%>2:" not recognised": M%L%<>"$":L%,46 C$;:h%:笤J:: A: DA:V%=X%!2:W%=X%!6:F%=X%!10(A%=1):F%>G%-32:F$=C$:T%=A%:Z%=1: DK%=5:$(C%+8)=C$:G(&14,&12002000,&40000000):C%?2=0:X%!15=C%!10 LJ%=X%!14:$(H%+1)=K(C$):P%=H%+2+$(H%+1):P%+F%+32>Q%:F$=C$:T%=A%:Z%=2: "A%=3Q%=B%+G%:k%=:Z%=2:11:  #A%=3:N:O%=!Q%:Q%=Q%+4:S%=S%-1 6!P%=V%:P%!4=W%:P%!8=F%:P%!12=J%:P%=P%+16:A%<>3:I (XA%=1:"LOAD "+C$+" "+~P%A%=2:"DIR "+C$:Q%=Q%-4:!Q%=O%:O%=0:G$=G$+"."+C$:S%=S%+1 <?H%=A%:H%=P%+F%:?H%=0: PݤK(F$):K%>4:=F$ ZM%L%<>"$":=L%+T$+F$=F$ nHN:G$=G$,G$-1):G$,1)=".":G$=G$,G$-1):j%:"DIR ^""DIR "+G$  7B:f%I:"Insert dest. and press SPACE";:<65: L$<>"":L$ *J$<>"":J$:E$<>"":"DIR "+E$,E$-1) 6(J$<>""E$<>"")(K$+L$=""j%):"DIR "+E$,E$-1)  6C:f%:"Insert source and press SPACE";:<65: K$<>"":K$ M$<>"":M$:"DIR "+G$ %M$<>""(K$+L$=""j%):"DIR "+G$  M:?H%=0:Z%=Z%+4: [A%=?H%:C$=$(H%+1):P%=H%+2+C$:V%=!P%:W%=P%!4:F%=P%!8:J%=P%!12:P%=P%+16:A%=3:T:H%=P%: ,A%=2:R:H%=P%: 6'H:E$;C$;:I$="":d$=E$+C$d$=I$+C$ @C"SAVE "+d$+" "+~P%+"+"+~F%+" "+~W%+" "+~V%:D:H%=P%+F%:: TD:N%<4: UK%=4:J%=(J%1)((J%8)4) VN%=4:J%=J%8 ^ N%=8:J$ hH$="":$C%=E$+C$$C%=I$+C$ r7!X%=C%:X%!2=V%:X%!6=W%:X%!14=J%_%:A%=1:B:N%<>5: K%<>16K%<>5: $(C%+11)=$(C%+1):C%!7=J%_%:C%?10=?C%:G(&14,&13002000,&05000000):$(C%+18)=$(C%+10):C%!7=J%_%:C%!10=0:C%!12=J%_%:C%?12=0:C%?16=0:C%?17=0:G(&14,&13002000,&40000000): -H:a%C$,2,1)="/":C$=C$,1)+"."+C$,3) .N%=4:C$=C$,7-2*(C$,2,1)=".")):J%=J%&33 4M%R%o%<>C$C$,2,1)=".":L(E$+C$,1)):o%=C$ K%=4:J%=J%&33  5T:E$=E$,E$-1):E$,1)=".":H$<>"":H$+I$+"^"  "R:I$="":L(E$+C$)L(I$+C$) &!D:E$=E$+C$:H$<>"":H$+I$+C$ 0E$=E$+".": DnQ:C$=K(F$):U$=F$:A%=A(U$):V%=X%!2:W%=X%!6:F%=X%!10:J%=X%!14:U%=0:`%=U$:`%=0:"No input available.": bQg%=(Q%-B%-32)&FFFF00:E(4,`%,g%):#`%:B:P:Z%=Z%&100:H:I$="":d$=E$d$=I$ l'E$;C$;:d$=d$+C$:$C%=d$:!X%=C%:X%!2=V%:X%!6=W%:X%!10=0:X%!14=F%:A%=7:A%=(B)&FF:U%=d$:U%=0:U%=d$:U%=0:'"No output available.":C: UE(2,U%,g%):d%=g%:b%=g%::#U%:C:F:Z%=Z%&FF:`%=U$:#`%=d%:d%+g%>F%:b%=F%-d% pE(4,`%,b%):#`%::B:Z%=Z%&100:U%=d$:#U%=d%:P:E(2,U%,b%)::d%=#U%:#U%:d%>=F%:D:C:Z%=Z%&FF:F:: -E(A%,c%,b%):?X%=c%:X%!1=B%:X%!5=b%:A: (L(F$):F>4:A(F$)<>2:"CDIR "+F$  (ݤA(F$):!X%=C%:$C%=F$:A%=5:=(B)&FF F:I:"Reading...";:  P:I:"Writing...";: *I:>0: 4 HXݤD:A%:"? (Y/N)";:A%=&DF:A%=89A%=78:5,8);:A%=89:"Yes ";:="No ";:= p{ݤJ:A%:"? (Y/N/A)";:A%=&DF:A%=89A%=78A%=65:7,127);:A%=89:"Yes ";:=A%=78:"No ";:="All ";:h%=:= ݤF:A%,E%,Y%:=(&FFDA)&FF ݤB:A%,n$,p$:A%=6:X%!1=B%:A:?(B%+2+?B%+?(B%+?B%+1))=13:n$=$(B%+2+?B%):"DIR ^":n$=n$,n$+" "," ")-1):p$=n$+"."+p$:n$="$"n$="&":p$=p$,p$-1):"DIR "+p$:X%!1=B%:A:?(B%+1+?B%)=13:n$=$(B%+1):n$<>"":=":"+n$+"."+p$ $SX%!1=B%:A%=5:A:?(B%+1+?B%)=13:n$=$(B%+1):n$=n$,n$+" "," ")-1):=":"+n$+"."+p$ 82ݤG:a$,b$:a$=B:"DIR %":b$=B:"DIR "+a$:=b$ `/ݤH:A%=6:X%!1=B%:A:?(B%+1+?B%)=13:=$(B%+1) ~@G(A%,D%,E%):X%,Y%:X%=C%:Y%=X%256:!X%=D%:X%!4=E%:&FFF1: rݤC:A$,A%:X%=1:p%=((&FFF4)&FF00)256:X%-1:p%=32:>&FFFF:ș"GetModuleFileName",0,X%,255:A$=$$X%:P$=A$:=V$ p%=32:A$=$&100 wA$=0:>&7FFF:P$=$&8100:ș"OS_GetEnv"A$,,A%:ș"OS_WriteEnv","",A%:A$=A$,1+A$+" "," ",1+A$," "))):A$=0:A$=P$ 0A$=0:?(P-3):A$=$&600A$=0:A$=$(-&300) 3A%=A$+" "," "):P$=A$,A%-1):P$<>"":=A$,A%+1) bY%=X%256:A%=9:?X%=0:X%!1=X%+16:X%!16=0:&FFD1:A%=X%+16:!A%?A%+A%?2<>8:A%?(A%+1)=13:=$(A%+1) ="" B(C) {H {h H {h * pq{r]srpqs {۠{L `{{`{{H Ϋ{ {h`p{{{p`Q%=PAGE OLD RUN BASIC " ! > TreeCopy 1.57 15-Jan-2007 F}&87:23;2,53;0;0;0:A$=C+" ":11"TreeCopy 1.57"'1114,"=")':A=&FFD1:B=&FFDD:C=&FFF1:D=&FFDA:X%31,C%127:Y%=X%256Syntax: TxSave  O P ϩ HHO  O P  / 0    ޤ  h hLʽ? H hJʊH hH ( h`HO JJJ)h)' =? ,' ? ? O  O P O ` @1Syntax: TxSave  O P ϩ HHO  O P  / 0    ޤ tL`, 8 ȱꅪ L 轀Х0̠ȱe<   Ji@ ȱ L0 H"0%V$L (L* 8L 9 ɠffff>( 0L   ie(+<P 檥 $ 0<HhHhL ȱȱ$ " H ` h  L )HH  hh  H hLCHR$(& '=#&")+HJJJJ h) ii0Lv1.11 tL`, 8 ȱꅪ L 轀Х0̠ȱe<   Ji@ ȱ L0 H"0%V$L (L* 8L 9 ɠffff>(