HADFS D!Boot ? )@  DZL00 L L  ii3籨)_ @  00@X M5 N ,z0l  `ISK   G0S襨8 i m  8  H h )؍m8Ш0` X  LHADFSROM  Press BREAKNo SRAM Not a system diskNExtras G$DemoAgs NYfDemoGPb N x]jExamie M3mM qFredDsk/sD|JimDik/sHSHNFSFrnt FpbДNFSTeterKpu|pYPrInf NPUhRSImgile FึRSLin/s H`JZ RSRAMisk FึSideDsk/sF` %.`Stats  pSuppot/sM*4Updats NC[sk) (C)JGH ! ıƽ 00 ђ 6 y8` 豾)!  (芨H Uh1.00 u H h)i0   C   C L u  : . ' `ߎ Ҡ L `  `"LTitle: Option: Dir. Lib. Owner Public Support/s STX ptr:STY ptr+1 LL4$HADFS5.40 (12 Sep 2005)#(C)J.G.Harston AH 09h L %#*HHH hhhHh`HZ7 0"@H h  )h`д 36: L~ fLH 󀅰􀅱hlPX5/Jcfii`x&)!H()Ѝ()(Lp`LH  )ϝ H)0 &hH 2hJJJJ) hı) H h `x( 8 H 7)M 5 7( @ hȦ` )@`@ =  `H hH h`)@-`H Qh 77`-77`Hz 0IT@-y @)!  3Press CTRL-BREAKLh`xԠ hH $ U 3 No date h ۅ򩂅 싩`BOOT LZLi`    ` Ѱ Ѱ`L? %`HADFS  TH ]h W&`L'`(` .)H `LكH 3Channels i N4  4) ރ譏)@ ރ 3 Date b 3Unset h)` 3 Drive  0 ( 3ExL 3In 3ternal` $ 3 5.40 ` 3Harston ADFS`H gh ` ch.H(`  |#`#` L|) څ0 ) LH.4#@I # h#`Ƚ"`Ա)[ A Ƚ#$h `#``H h)H `h `HADFsFUTILs(STATUsQCONFIGUReMSHUtICLOSe]HADFsSETDATe)TIMebACCESsϔACCOUNtaBYeCDIrzDELETenDIrhENABLeEx^FREeGINFobINSTALlκI AmLIbxMApJMOUNtRENAMefTITLeκ(dd/mm/yy (( ($)) () (( ) w sCan't extend˩@ʹ# "@ʊH heʝe˝e̝ 4hhhhhh h`)ɂ(H {h ˱(L ` ۱ͅLV}ƽ}ǽ}Ƚ` sEOF8 ̊HHHIH* в) ɯ 8= H 4h,H H 4h hH 4 hhhhh`) ˱`=` 5) sIs a directory )@) sNot open for reading )Ъ sNot open for update0 sOutside file8HH {Ƚǽ ¡ (iȽ ȱ)  hh` H ih   喍1 sDisk changed` Ą@L_w   m 58 O 3 H} ƽ} ǽ} hI ʽ ˽ ̊H 7L©h  VVWW`  ן ɢ)H h+$P)LĤ`Ʌ˩@ʊH Sh g $0)L㥊HJ ) Q ѥh*&È*&È*&å)IHh Hh JJJJ=) L H ʈih$P ȱ ȱ) ȱ iȱ)ii)Lˠ$@눭8 8 k sToo many openJJJJJIi` JJJJ)`II` %HiI iKhii ͩ̽` sChannel sChannel not openHk1hH=*Ŵ#ŵŶŷ sFile openi h`` ĄŅ ę L8 P  вj X}ȱ}ȱ}ȱ}ð ʐę"8   ½ 8ąɈę Z q̹rͥ( pĈĤ`l ׹HHHH8ɥɰ R: ۱Ḁ̊…˥ʤi Μ}}} Phhhh8( (*(&ę P   (`ɥHHHHH?HV,zQiH 7 Ph8  j   j Khh8hɅhhh` P 8  j   j L 3 H th %' %K1 )@ 3'(+ ( r7( )ʊ % ܖɘH heL `` əHȽ! %h8ɝ`ȹ %0 LU` P 5)Lڌ#  ! ıƽ 00 ђ 6 y8` 豾)!  (芨H Uhɠ yLɥ)Š`,P`HH 3Go? (Y/N)  hh )Y L sNot Enabled`' ?Lͺȱ! Ԡ  $ (L8 )ȱ!L t(L(*(L) )D S(8ȭ0 (8& ()K   և  èn.NH]h}M  D"J$8J&'("1 ,p"P )  喪%% (;l,0J.򩾅 P)H@A<ȱ 喨汱Ʊ辰H hi(\ 喪  $G ( ン@+. L R`HADFS D!Boot ? )@  DZL00 L L  ii3籨)_ @  00@X M5 N ,z0l  `ISK   G0S襨8 i m  8  H h )؍m8Ш0` X  LHADFSROM  Press BREAKNo SRAM Not a system diskN`_NullKeyboard0.12 (01 Aug 1998)*`4SoftRTC0.10 (23 Nov 1992)(Untitled_Disk) (C)JGH ! ıƽ 00 ђ 6 y8` 豾)!  (芨H UhSystemDisk (C)JGH$@ 6$ G$HADFSom @x!Boot NPQJУJtr Уbry xnu vil УWs BREAKNo SRAM Not a system diskN`_NullKeyboard0.12 (01 Aug 1998)*`4SoftRTC0.10 (23 Nov 1992)(Untitled_Disk) (C)JGH ! ıƽ 00 ђ 6 y8` 豾)!  (芨H Uh *Basic CHAIN"!Boot"  *Exec ( *** 2* First three lines MUST NOT be edited < 8BS Menu, S.Flintham. F> Modified by J.Ripley, C.J.Richardson, J.G.Harston, v2.20 P+&87:23;8202;0;0;0;23;2,53;0;0;0:*FX15 Z[3:7::" at line ";:"FX21":"KEY0"+" LIST "+()+"|M",>127):"FX138,0,128":d: d b:a:e$=f:e$<>27:g(e$) n*e$=27:7:d:Dir$="$": "$.!Boot" x : a:*FX4,1 *FX225,128 *FX229,1 *FX12  d:*FX4 *FX225,1 *FX229  : ݤS:P->&2000:"Too long?" ="!Boot220" 5b:run$=$&600:A%=run$+" "," "):run$=run$,A%-1) >:run$=run$,run$-1):".:",run$,1)):run$=run$,run$-1) -h%256,data%31,l%(14):X%=h%:Y%=X%256:fs "cv$="MODE3TEXT MODE7TTXT ARCHIARCHICHAINBASICLOAD LOAD LIST LIST CALL CALL LDPICLDPICSCRLOSCRLO" ,Jd%=2:i%=2:p%=4:q%=5:r%=6:s%=6:t%=2:u%=3:v%=3:w%=4:x%=3:y%=5:z%=7:aa%=7 6.: h$,n$,m$:26,12:5,2)""h$'5)""h$ @o(V%),5)="985"+n$:f%=((V%),6,2)):e%=((V%),8,2)) f%=1:e%=1:"Exec "+l$+".pc8s":"FX138,0,13":""A$ J28,2,22,37,5 T ^: h+fs:n%:fs%=fs:run$<>"":"Dir "+run$ rBfs%=4:Dir$=":"+gbpbN(5)+"."+Dir$=gbpbN(6) Dir$=Path_Name |$l$=Dir$+".Library":fs%=4:l$="%" =Dir$,1)="$":"Lib "+l$:fs%>4:A%=("%"):A%:#A%:l$="%" bt3$=l$+".7to3":t7$=l$+".3to7":sc$=l$+".Scroll":ar$=l$+".Archive":bo$=" -quit "+Dir$+".!Boot":  ݤfs:A%,Y%,E%:=(&FFDA)&FF LݤgbpbN(A%):X%!1=data%:&FFD1:A%=data%+((1+?data%)(A%>5)):A%?(1+?A%)=13 "=$(A%+1),$(A%+1)+" "," ")-1) ݤPath_Name:A%=6 ݤPath_Full:A%=&106 c n$,p$::X%!1=data%: &FFD1:?(data%+2+?data%+?(data%+?data%+1))=13:n$=$(data%+2+?data%):*DIR ^ On$=n$,n$+" "," ")-1):p$=n$+"."+p$:n$="$"n$="&":p$=p$,p$-1):"DIR "+p$ VA%=6:X%!1=data%: &FFD1:?(data%+1+?data%)=13:n$=$(data%+1):n$<>"":=":"+n$+"."+p$ >X%!1=data%:A%=5: &FFD1:?(data%+1+?data%)=13:n$=$(data%+1) )n$=n$,n$+" "," ")-1):=":"+n$+"."+p$ )os(c$):c$=42 c$="":c$: c$: : ;ݤf:t$,n%,m$,s$,g%,m%::la(f%):t$,n0%:n0%>14:n0%=14 .0,0);(128+s%);1+(17.5-((t$)/2)),0);t$ &n%=0:m%=n0%:m$,s$,s$,s$ 09s$>99:s$100=fs%:s$=s$,2) s$>99:s$="0":m$="" :-o%=s$:o%=0s$<>42:o%=-1-v$,s$,5))10 Des$<>"0":n%=n%+1:l%(n%)=o%:0,1+n%)" "(128+t%)(64+n%)(128+u%)m$,32);: TAB(35,1+m%)CHR$156; N+m%=m%-1:m%<1:0,1+e%);(128+w%);157; XL0,15);(v%+128)"RETURN to select"(128+d%);2,17);(v%+128)time,15); b :*FX21 l20,15);:l%(e%)>0:"Another menu "; "Runs Code 80 Column Text40 Column TextArchive Basic Program Loads Basic Lists Basic Calls Basic LDPIC Picture ScrLoad Pictr ",-14*l%(e%)+1,14); v*g%=get(20,17):(g%&E0)=&60:g%=g%-32 F128+138+139+13+"48OPRSX",g%)(g%>64 g%<=64+n%)(g%=27-1) 0,1+e%);" "; g%=138:e%=e%n%+1 g%=139:e%=e%-1:e%=0:e%=n% g%>64g%<=64+n%:e%=g%-64 0,1+e%);(128+w%);157; $V%=985000000+n$*10000+f%*100+e% 0"48OPRSX"+128+27+13,g%):4,1+e%);">"; =(g%)+(e%) : g(e$):e$=128: "n%,x$,d$,f$,s$:la(f%):d$,n% n%=1(e$,2)) Hx$,d$,f$,s$:s$>99:s$100=fs%:s$=s$,2) s$>99:s$="0":n%=n%-1  :o%=s$:o%>0:f%=o%:e%=1: o%=0 s$="0":  26,31,0,21:e$=e$:d *d$,1)="%":d$=l$+d$,2) 4f$,1)="%":f$=l$+f$,2) >d$<>"":"Dir "+d$ Ho%=-1:u: Ro%=-2:v: \%o%=-3:os(ar$+bo$+"|M -e "+f$): f9 IFo%>-7 ANDo%<-2 ANDe$<>CHR$13:o%=INSTR("XSR",e$)-7 po%=-4:os(f$+bo$): z#o%=-5:Key("*Load "+f$+"|F|M") 0o%=-6:Key("LOAD """+f$+"""|MLIST|F|N|M|O") o%=-7:os(f$+bo$): $o%=-8:Key("*LdPic "+f$+"|F|M") &o%=-9:Key("*ScrLoad "+f$+"|F|M") *:I%=s$+"//","//"):s$,I%-1)="RUN": &os(s$,I%-1)):s$=s$,I%+2):s$=""  : #u:e$="4":os(t7$+" "+f$+bo$) / PROCos(sc$+" -lp *lp -4 "+t7$+" "+f$+bo$) os(sc$+" -lp *lp "+f$+bo$)  (v:e$="8":Z%=0:os(t3$+" "+f$+bo$) $e$="P":Z%=1:os(t3$+" "+f$+bo$) e$<>"O":d:"Run "+f$:  $;Key(A$):"KEY0 "+A$:"FX21":"FX138,0,192":22,7::: .ݤya:A%,B%:A%=&7A 87:B%=255-((&FFF4)&FF00)256:B% B%<>182B%<>?&80 B=B% L'la(f%):m$,n%::m$,m$,m$:f%<2: V m$,n%: `.m$,m$,m$,m$:n%=n%-1:n%<1:f%=f%-1:f%<2: j: t' Disk name,Issue number,Issue Date ~, Harston ADFS System Disk,06,01/09/2006 :  HADFS System Main Menu ,7 1 Read Latest Updates file,,Extras.Updates,-1 ! Read HADFS Manual files,,,2  Library Programs,,,4  Utility Programs,,,3  Disk Initialisation,,,5 0 Alter Time & Date,,Utils.SetDate -force,-7 * -- Exit To Basic --,,,*Mount//*Basic :  HADFS Manual Files,10 & Introduction,,Manual.Chapter1,-1 + The Filing System,,Manual.Chapter2,-1  0 Filing System Commands,,Manual.Chapter3,-1 5 Low Level File Entry Points,,Manual.Chapter4,-1 5 The Filing System Utilities,,Manual.Chapter5,-1 (( Error Messages,,Manual.Chapter6,-1 25 HADFS Technical Information,,Manual.Chapter7,-1 <5 HADFS As Econet Environment,,Manual.Chapter8,-1 F4 HADFS Programming Examples,,Manual.Chapter9,-1 P' Bibliography;;Manual.Chapter10;-1 Z# -- Return To Main Menu --,,,1 d: n Utility Programs,9 x2 DMap - Display Disk Map,,Utils.DMap,-7 9 HDInit - Initialise Hard Drive,,Utils.HDInit,-7 5 HEdit - Disk Sector Editor,,Utils.HEdit,-7 5 HUtils - Utilities Program,,Utils.HUtils,-7 5 MCat - Multiple Cataloguer,,Utils.MCat,-7 / Rescue - File Rescue,,Utils.RESCUE,-7 8 Intern/s - Make Internal Disk,,Utils.Intern/s,-4 9 VisCompact - Visual Compaction,,Utils.VisCompact,-7 ) ----- Return To Main Menu -----,,,1 :  Library Programs,9  BACKUP a Disk,,%.BACKUP,-4 " COMPACT a Disk,,%.COMPACT,-4 % ETree Disk Examiner,,%.ETree,-4 + MakeLP Printer Generator,,%.MakeLP,-4 ( Scroll Text File Reader,,"""""",-1 ) TreeCopy File Copier,,%.TreeCopy,-7 "$ Filer File Manager,,%.Filer,-7 ,, Read Library Info,,Extras.Library/t,-1 6# -- Return To Main Menu --,,,1 @: J Disk Initialisation,7 T3 Format Drive 0 as 400K disk,,,*FORM160 0//RUN ^3 Format Drive 1 as 400K disk,,,*FORM160 1//RUN h, Initialise Hard Drive,,Utils.HDInit,-7 r% [ ],,,1 |1 Install System on Drive 0,,,*INSTALL 0//RUN 1 Install System on Drive 1,,,*INSTALL 1//RUN % --- Return To Main Menu ---,,,1 : (ݤtime:?X%=0:A%=14:&FFF1:?X%=0:="" X%?25=13:X%?15=13:A%=$X%,5,2)>31:$(X%+11)=($(X%+11)-16*A%-100*($(X%+11)<1981)):A%:X%?6=13:$(X%+4)="0"+($(X%+4)-32),2):X%?6=32 X%?15=46:=$X% Xݤget(x%,y%):p%,v%,A$:p%=:v%=:x%,y%);time,17);p%,v%);:A$=(100):A$<>"":=A$  getdate $"Enter the date (DD/MM/YY): "d$ -d$," ")=0 d$<>"":d$=d$+" 0"+äday(d$) "SETDATE "+d$ ""Enter the time (HH:MM): "t$ &t$<>"":=(60*t$+t$,2))*60*100  Lݤday(d$):dy%=d$:m%=d$,d$,"/")+1):y%=1900+d$,2):y%<1980:y%=y%+100 y%=y%400:=(y%*365.25+m%*30+dy%+"120112234455",m%,1)+((y%4)=0)-((y%-1)100)-(m%>2 ((y%4)=0 (y%100)<>0 y%=0))+3)7+1 Extras :DemoArgs NYW5  > DemoArgs 1.03 ) Demo of calling OsArgs, HADFS 5.32+ : (:"OsArgs &FD Demo"' 2 Y%=0 15: A$ <""Y%=";hex(Y%,2  > DemoArgs 1.03 ) Demo of calling OsArgs, HADFS 5.32+ : (:"OsArgs &FD Demo"' 2 Y%=0 15: A$ <""Y%=";hex(Y%,2);", ";A$;":"; FL IFY%=0 OR Y%>3:data%=FNargs(&FD,Y%,0):PRINTSPC(31-POS);FNhex(data%,8); P1data%=args(&FD,Y%,0):(31-);hex(data%,8); Z :: d: n' OSARGS call ignoring X, returns A x:ݤargs0(A%,Y%): E%,X%,!&70:E%=Y%:X%=&70:=(&FFDA)&FF : 7 OSARGS call with data. Returns any returned data 4ݤargs(A%,Y%,!&70): X%,E%:?(P-3)=0:E%=Y%:Y%=0 X%=&70: &FFDA:=!X% : # Hexadecimal padded with zeros $ݤhex(A%,N%)="0000000"+~A%,N%) :  Decimal padded with zeros $ݤdec(A%,N%)="00000000"+A%,N%) : Decimal padded with spaces %ݤDec(A%,N%)=" "+A%,N%) : + Version and flags,(TAPE),(TAPE),(ROM)  **/**/**/** " ENABLE/IAM/PRIV/USER , CURR,**/**/**/** 6! CSD,LIB,URD,**/**/OPTFLG/** @0 **/**/DRVEXT/DRVINT,,(TELESOFT),(TELESOFT) DemoGbPb N x]W<  > DemoGbPb 1.02 ! Check can read various info  wit  > DemoGbPb 1.02 ! Check can read various info  with OSGBPB (: 2*OSGBPB=&FFD1::chn%=0: :Close:: < ctrl% 20,data% 80 F go: P: Z%Close:chn%:A%=chn%:chn%=0:#A% d n: xݤgbpb(A%) X%,Y% X%=ctrl%:Y%=X%256 X%!1=data% =( OSGBPB) &FF : pr(ad%)  l% "Len=";?ad%;" """; , ?ad%>0 l%=ad%+1 ad%+?ad%:v(?l%): """";: : 4v(A%): A%<31 A%>126 """(";~A%;")"""; A% "ݤh(A%,N%)="0000000"+~A%,N%)  :  ݤdrv(A%) " A%<10:=A% =(A%+55) ,: 6 dir @"Drive: ";:pr(data%) J&'6"Dir: ";:pr(data%+1+?data%) T^o%=?(data%+2+?data%+?(data%+1+?data%)):'6"Owner: ";~o%;" ";:o%=00 "Owner" "Public" ^ h: rgo |"A%=5, Read disk title:" A%=gbpb(5) "A%=";A%;" ";:pr(data%) F'6)"Opt: ";?(data%+1+?data%);" Drive: ";drv(?(data%+2+?data%)) : "'"A%=6, Read directory name:" A%=gbpb(6) "A%=";A%;" ";:dir :  '"A%=7, Read library name:" A%=gbpb(7) "A%=";A%;" ";:dir : %'"A%=8, Read directory entries:" 11"Num: 3 Index: 0"  ctrl%!5=3:ctrl%!9=0:!data%=0 BA%=gbpb(8):"A%=";A%;11);"Num: ";ctrl%!5;" Index: ";ctrl%!9 &9d%=data%:z%=ctrl%!5 2:6;:pr(d%)::d%=d%+1+?d%: 0: :"'"Checking OSGBPB extensions" D(chn%="%":chn%=0:"Can't open '%'." N@ B%=9*2 255*2:ctrl%!5=3:ctrl%!9=0:?ctrl%=chn%((B%1)<>0) X%!data%=0:data%!8=0:A%=gbpb(B%2) b!data% data%!8:"A%=";B%2;"/";chn%((B%1)<>0);11)"Num: 3 Index: 0"'"A%=";A%;11)"Num: ";ctrl%!5;" Index: ";ctrl%!9:dump l v #chn%  : #dump:d%=data% data%+40 4 h(!d%,8);" ";::'""""; d%=data% data%+40 v(?d%)::'  Examine M3mM W6  >Examine 2.13  Examine files in directory  (C) J.G.Harston (<  >Examine 2.13  Examine files in directory  (C) J.G.Harston (< 25-May-98 V2.05 JGH: Access displayed as --WR--wr etc. 24 23-Jun-98 V2.10 JGH: Update date read from net 0  : file: f$,type% .?(data%+?data%+1)=13:f$=strip($(data%+1)) ;X%!2=0:X%!6=0:X%!10=0:X%!14=0:X%!18=0:type%=file(f$,5) R fs%=5:$(data%+8)=f$:osw(&14,&12002000,&40000000): data%?3=0:X%!15=data%!10 Atotal%=total%+X%!10: X%?10<>0:total%=(total% &FFFF00)+&100 E f$;(11- f$);h0(X%!2,8);" ";h0(X%!6,8);" ";h0(X%!10,8);" "; .raw%: h0(X%!14,8);" ";h0(X%!18,8);" "; "Eraw%: acc(X%?14,type%);" ";date(X%!15);" ";h0(X%?17,2);" "; ,M type%=1:"File" type%=2:"Dir." type%=&FF:"Run " "&";~type% 6LongDateToShort @t 9;d0(day%,2)"/"d0(month%,2)"/"d0(year%,4)" "d0(hour%,2)":"d0(minute%,2)":"d0(second%,2)"."d0(centi%,2) J T: ^ݤacc(a%,b%): a$ h b%=2 a$="D" a$="-" r$(a%128) a$=a$+"P" a$=a$+"-" |$(a%8) a$=a$+"L" a$=a$+"-" $(a%2) a$=a$+"W" a$=a$+"-" $(a%1) a$=a$+"R" a$=a$+"-" $(a%5) a$=a$+"E" a$=a$+"-"  a$=a$+"/" $(a%32) a$=a$+"W" a$=a$+"-" $(a%16) a$=a$+"R" a$=a$+"-" $(a%80) a$=a$+"E" a$=a$+"-" =a$+" ",10) : 5ݤdate(a%):a%=a%&FFFF: IF(a%AND&FF)=0:="Unset " J=d0(a%31,2)+"/"+d0((a%256)15,2)+"/"+(1981+(a%&1000)+(a%&E0)/2) #ݤh0(A%,N%)="0000000"+~A%,N%) #ݤd0(A%,N%)="0000000"+ A%,N%) !ݤfs: A%,Y%,E%:=(&FFDA)&FF Bݤfile(f$,A%):$data%=f$:?X%=data%:X%?1=data%256:=(&FFDD)&FF 6ݤstrip(f$): f$,1)=" "::f$=f$,2): f$,1)<>" " &f$=f$,f$+" "," ")-1):=f$ 0Fosw(A%,D%,E%): X%,Y%:X%=data%:Y%=X%256:!X%=D%:X%!4=E%:&FFF1: :: DLongDateToShort N8ld%=X%!2:ex%=X%!6:!X%=ex%:X%!4=ld%:Date_ToOrd(X%): X: b$Date_ToOrd(mem%): A%,B%,C%,D% l@year%=0:month%=0:day%=0:hour%=0:minute%=0:second%=0:centi%=0 v-mem%!1<0:: Problems with negatives ATM FD%=mem%!1&83D6+2447065:C%=mem%?0+256*(mem%!1&83D6):centi%=C%100 >C%=C%100:second%=C%60:C%=C%60:minute%=C%60:hour%=C%60 8B%=((D%*4+3)146097-4)+3:C%=B%14614*5+2:D%=D%*4+3 .A%=C%153+2:day%=C%1535+1:month%=A%12+1 *year%=D%146097*100+B%1461+A%12-4800  FredDisk/s 2:exec%=X%!6:length%=X%!10:attr%=X%!14 X5c2%=0:c1%=(in$): c1%=0:"No input available.": bqmax%=(end%-data%-32)&FFFF00:gbpb(4,c1%,max%):#c1%:Dest:wr:Z%=Z%&10  > FredDisk/s 1.02  Provides cut-down ramdisk " in byte-wide ramcard in FRED (: 2WORDV=&20C <mcode%=&FFFF0A40 F addr=&A8:sect=addr+4:ptr=&AE P P=0 1 Z P%=mcode% d [OPT P*3 n.Intercept xCMP #90:BEQ NewWord .OldWord JMP 0 .NewWord STX ptr:STY ptr+1 \ Check &0600 id marker: LDY #0:LDA (ptr),Y:BNE NotMe $INY:LDA (ptr),Y:CMP #6:BNE NotMe \ Bit7 commands go to HADFS: !LDY #11:LDA (ptr),Y:BMI NotMe \ Only RD & WR supported: BEQ NotMe:CMP #3:BCS NotMe \ Get number of sectors: PHA:DEY:LDA (ptr),Y:TAX "\ Check drive number (27='R'): %DEY:LDA (ptr),Y:CMP #27:BEQ ForMe  .NotMe1 "PLA:.NotMe ,LDX ptr:LDY ptr+1:LDA #90 6BNE OldWord @: J .ForMe T\ 2..5=addr ^\ 6..8=sec h\ 9=drv checked r\10=num in X |$\11=type 1=write, 2=read, pushed \ Ignore top byte of sector DEY  \ Get copy of sector & addr:  .AddrLp  DEY:LDA (ptr),Y:STA addr-2,Y CPY #2:BNE AddrLp \ No Tube support: BIT &27A:BPL IOMem LDA addr+2: addr+3 CMP #&FF:BNE NotMe1  .IOMem  LDY #0  .Loop "LDA sect+1:STA &FC02:\ hi byte "LDA sect+0:STA &FC01:\ lo byte ,LDA #0:STA &FC00:\ offset into 256 bytes &PLA:PHA:LSR A:BCC Read 0 .Write :$STY &FC00:LDA (addr),Y:STA &FC03 DINY:BNE Write:BEQ Next N .Read X$STY &FC00:LDA &FC03:STA (addr),Y bINY:BNE Read l .Next v\ Point to next sector:  LDA sect:CLC:ADC #1:STA sect  LDA sect+1:ADC #0:STA sect+1 \ Point to next addr: INC addr+1  \ Loop back for each sector: DEX:BNE Loop PLA:LDA #0 LDY #11:STA (ptr),Y RTS :  .start% LDA WORDV:STA OldWord+1 LDA WORDV+1:STA OldWord+2 "LDA #Intercept 255:STA WORDV  )LDA #Intercept 256 &FF:STA WORDV+1 RTS  ] *<"*SAVE FredDisk ";~mcode%;" ";~P%;" ";~start%&FFFF0000 JimDisk/s HSHW2  > JimDisk/s 1.02  Provides cut-down ramdisk & in page-wide ramcard in FRED+JIM (: 2WORDV=&20C <mcode%=&FFFF0A40 F addr=&A8:sect=addr+4:ptr=&AE P P=0 1 Z P%=mcode% d [OPT P*3 n.Intercept xCMP #9  > JimDisk/s 1.02  Provides cut-down ramdisk & in page-wide ramcard in FRED+JIM (: 2WORDV=&20C <mcode%=&FFFF0A40 F addr=&A8:sect=addr+4:ptr=&AE P P=0 1 Z P%=mcode% d [OPT P*3 n.Intercept xCMP #90:BEQ NewWord .OldWord JMP 0 .NewWord STX ptr:STY ptr+1 \ Check &0600 id marker: LDY #0:LDA (ptr),Y:BNE NotMe $INY:LDA (ptr),Y:CMP #6:BNE NotMe \ Bit7 commands go to HADFS: !LDY #11:LDA (ptr),Y:BMI NotMe \ Only RD & WR supported: BEQ NotMe:CMP #3:BCS NotMe \ Get number of sectors: PHA:DEY:LDA (ptr),Y:TAX "\ Check drive number (27='R'): %DEY:LDA (ptr),Y:CMP #27:BEQ ForMe  .NotMe1 "PLA:.NotMe ,LDX ptr:LDY ptr+1:LDA #90 6BNE OldWord @: J .ForMe T\ 2..5=addr ^\ 6..8=sec h\ 9=drv checked r\10=num in X |$\11=type 1=write, 2=read, pushed \ Ignore top byte of sector DEY  \ Get copy of sector & addr:  .AddrLp  DEY:LDA (ptr),Y:STA addr-2,Y CPY #2:BNE AddrLp \ No Tube support: BIT &27A:BPL IOMem LDA addr+2: addr+3 CMP #&FF:BNE NotMe1  .IOMem  LDY #0  .Loop "LDA sect+1:STA &FCFE:\ hi byte "LDA sect+0:STA &FCFF:\ lo byte PLA:PHA:LSR A:BCC Read & .Write 0 LDA (addr),Y:STA &FD00,Y:INY :BNE Write:BEQ Next D .Read N LDA &FD00,Y:STA (addr),Y:INY X BNE Read b .Next l\ Point to next sector: v LDA sect:CLC:ADC #1:STA sect  LDA sect+1:ADC #0:STA sect+1 \ Point to next addr: INC addr+1  \ Loop back for each sector: DEX:BNE Loop PLA:LDA #0 LDY #11:STA (ptr),Y RTS :  .start% LDA WORDV:STA OldWord+1 LDA WORDV+1:STA OldWord+2 "LDA #Intercept 255:STA WORDV )LDA #Intercept 256 &FF:STA WORDV+1  RTS ]  ;"*SAVE JimDisk ";~mcode%;" ";~P%;" ";~start%&FFFF0000 NFSFront FpbДWL:LI%NFS Front End for L:LI%NFS Front End for HADFS0.03(C)1992 J.G.Harston LH 0 hH dh`LHZ1 L ) @h` 0з +16: ΀L]Z h`hLz` +NFS Front for HADFS `. )N h` L ΀h ` ΀`HJJJJ h) ii0LhhHH歱 L9hhlhhȱL`% HHHHÁJ hhhhȑ`l bnnnnoppqt`hhh` HHH ii0:  бhhhHHH hHHHHG ނii hhh ނhhhi `L* ȱ$ 1 $ ƨ`ThisUser Supervisor xSTAFF.FRANK *-System-*  ````L (򈈩 ` ``NFSTester Kpu|W.Y  > NFSTester ! Tests various Osw14/0 calls : () ctrl% 100: dname$(3  > NFSTester ! Tests various Osw14/0 calls : () ctrl% 100: dname$(31):OSWORD=&FFF1 2X%=ctrl%:Y%=X%256:A%=&14 <: F P do14 Z do15 d do16 n do21 x do24 do25 do26  : osw14(f%) %!X%=&4000:X%!3=f%:A%=&14: OSWORD  : #ݤd(A%,N%):=" "+A%,N%) ݤd0(A%):="0"+A%,2) ݤn(A%):="00"+A%,3) #ݤh(A%,N%):="0000000"+~A%,N%) ݤs(A%,N%): A$ 6?A%<32 ?A%>126 A$=A$+"("+?A%+")" A$=A$+?A% A%=A%+1:N%=N%-1:N%=0:=A$ : " do14 ,$"Function 14 - Read disk names" 6 u%=0 31 @X%?7=u%:X%?8=1:osw14(14) J& X%?4<>0 pr14:dname$(u%)=$(X%+6) T u% ^: h pr14 r#":";(48+X%?5-7*(X%?5>9));" "; |X%?22=13:$(X%+6)  :  do15 )"Function 15 - Read logged on users" #"Station User name"11"Status"  u%=0: X%?7=u%:X%?8=1:osw14(15)  X%?4<>0 pr15 u%=u%+1: X%?4=0 :  pr15 n(X%?6);".";n(X%?5);" "; $(X%+7);(20-$(X%+7)); * ?(X%+8+$(X%+7)) "Syst" "Normal"  : & do16 0'"Function 16 - Read date and time" :osw14(16) DW"Date: ";d0(X%?4 31);"/";d0(X%?5 15);"/";1981+X%?5 16+(X%?4 &E0) 2;5; N3"Time: ";d0(X%?6);":";d0(X%?7);":";d0(X%?8) X: b: l do21 v*"Function 21 - Read user environment" $X%=50," ") osw14(21) 0"Disk name: """;s(X%+5,16);""" Len: ";X%?4 &"Directory: """;s(X%+21,10);"""" &"Library: """;s(X%+31,10);"""" : :  do24 #"Function 24 - Read user info" : : :  do25 ("Function 25 - Read server version"  osw14(25)  $(X%+4)  : *: 4 do26 >$"Function 26 - Read free space" H u%=0 31:rd26: R \ rd26 fdname$(u%)="": p d0(u%);" ";dname$(u%);" "; z:$(X%+7)=dname$(u%),dname$(u%)+" "," ")-1):osw14(26) =X%?3=0:"&"h(X%!3,8);" (";d(X%!3 1024,7);"K) free "; ?X%?6=0:"&"h(X%!6,8);" (";d(X%!6 1024,7);"K) disk size"  PrInfo NPUW-  > PrInfo 1.02 " Prints info on current HADFS X%=&70:Y%=0:A%=0:A%=&FD (!&70=0:ver%=(&FFDA)&FF  > PrInfo 1.02 " Prints info on current HADFS X%=&70:Y%=0:A%=0:A%=&FD (!&70=0:ver%=(&FFDA)&FF 2"HADFS Information"  > RS_Disk2 ' RS232-Link disk to partition file : (: buffer% 256:init 2 15:*FX15 < *FX7,7 F *FX8,7 P err end: Z:listen:0 d: nݤerr:*fx3 x:" at line ";:*FX2,2 =-1 : listen *FX2,1 A%=:A%=1 A%=2 num%=:drv%= sect%=*65536+*256+ # A%=1 write:: Sending to me A%=2 read:: Me send out  : read  num%=number of sectors  sect%=start sector "Reading";:disp  l%=0 num%-1 "0rd(sect%+l%): Get 256 bytes from somewhere , *FX3,7 60: All ok @* m%=0 255:buffer%?m%:: send data J*FX3 T l%: Do next sector ^: h: r write |"Writing";:disp  l%=0 num%-1 + m%=0 255:buffer%?m%=:: read data wr(sect%+l%)  *FX3,7 0: All ok *FX3  :  disp ": &";~sect%;" + ";~num%;  sect%=&46 " - FSM";  sect%=&47 " - root";  :  Specific routines: : & init 0ch%=("") :*"Using HADFS partition " D N: X end b ch%<>0 A%=ch%:ch%=0:#A% l v:  rd(s%)  l%,d%:#ch%=256*s% )ș "OS_GBPB",3,ch%,buffer%,256,256*s%  :  wr(s%)  l%,d%:#ch%=256*s% )ș "OS_GBPB",1,ch%,buffer%,256,256*s%  RSLink/s H`JZ W7  > RSLink/s  > RSLink/s 1.04 $ Provide 'drive' via RS232 link : (3 No Tube support, pure datastream, no checking 2C 05-Nov-98 v1.01 JGH: Sets baud, enables serial, Tube check ok <1 07-Nov-98 v1.02 JGH: Allows multiple drives F- 07-Nov-98 v1.03 JGH: Runnable transient P. 23-Nov-98 v1.04 JGH: Test direct writing Z: d *RSLink n' eg: *RSLink L4 - links L M N O x baud%=8 : (WORDV=&20C:OSBYTE=&FFF4:OSARGS=&FFDA mcode%=&FFFF0BAC addr=&A8:sect=addr+4:ptr=&AE P=0 1 P%=mcode% [OPT P*3 \ Syntax- *RSLink .start% %LDA #1:LDX #ptr:LDY #0:JSR OSARGS )LDA (ptr),Y:CMP #"0":BCC LinkDefault -CMP #"A":BCC LinkDigit:SBC #6:.LinkDigit  #31:STA DriveLo+1:INY *LDA (ptr),Y:CMP #"1":BCC LinkOneDrive  #7:TAY:.LinkOneDrive 'TYA:CLC:ADC DriveLo+1:STA DriveHi+1 ".LinkDefault ,: 6LDA WORDV:STA OldWord+1 @LDA WORDV+1:STA OldWord+2 J"LDA #Intercept 255:STA WORDV T)LDA #Intercept 256 &FF:STA WORDV+1 ^LDA #2:TAX:JSR OSBYTE hLDA #7:JSR SetBaud:LDA #8 r .SetBaud |LDX #baud%:JMP OSBYTE : :\ Resident code in page &C : .Intercept CMP #90:BEQ NewWord  .OldWord  JMP 0  .NewWord STX ptr:STY ptr+1 \ Check &0600 id marker:  LDY #0:LDA (ptr),Y:BNE NotMe $INY:LDA (ptr),Y:CMP #6:BNE NotMe  \ Bit7 commands go to HADFS: !LDY #11:LDA (ptr),Y:BMI NotMe \ Only RD & WR supported: BEQ NotMe:CMP #3:BCS NotMe &\ Get number of sectors: 0PHA:DEY:LDA (ptr),Y:TAX :\ Check drive number DDEY:LDA (ptr),Y N .DriveLo X'CMP #21:BCC NotMe1:\ Default 21="L" b .DriveHi l/CMP #22:BCC ForMe:\ Default only one drive v .NotMe1 PLA:.NotMe LDX ptr:LDY ptr+1:LDA #90 BNE OldWord :  .ForMe \ 2..5=addr \ 6..8=sec \ 9=drv checked \10=num in X $\11=type 1=write, 2=read, pushed BIT &27A:BPL NoTube $LDY #5:LDA (ptr),Y:DEY: (ptr),Y CMP #&FF:BNE NotMe1 \ Send parameter block:  .NoTube  LDY #11  .SendBlockLp *LDA (ptr),Y:JSR WriteByte 4DEY:CPY #5:BNE SendBlockLp >\ Get addr: H"DEY:DEY:LDA (ptr),Y:STA addr+1 RDEY:LDA (ptr),Y:STA addr \LDY #0:PLA:LSR A:BCS Write f.ReadSectors pJSR ReadByte:BNE Error z .Read *JSR ReadByte:STA (addr),Y:INY:BNE Read "INC addr+1:DEX:BNE ReadSectors BEQ FinishSectors :  .Write ,LDA (addr),Y:JSR WriteByte:INY:BNE Write JSR ReadByte:BNE Error INC addr+1:DEX:BNE Write : .FinishSectors LDA #0:\ ok  .Error .ExitRoutine %LDY #11:STA (ptr),Y:\ result byte LDX ptr:LDY ptr:LDA #90:RTS : $ .ReadByte .TXA:PHA:TYA:PHA 8.ReadAgain B!LDY #&FE:BIT &FF:BMI ReadQuit LLDA #145:LDX #1:JSR OSBYTE VBCS ReadAgain ` .ReadQuit jSTY addr+2:PLA:TAY:PLA:TAX tLDA addr+2:RTS ~: .WriteByte PHA:LDA #2 .WriteByteLp BIT &FF:BMI WriteByteQuit BIT &FE08:BEQ WriteByte PLA:STA &FE09:PHA .WriteByteQuit  PLA:RTS : \.WriteByte (\STA addr+2:\PHA:\TXA:\PHA:\TYA:\PHA \.WriteAgain \BIT &FF:\BMI WriteQuit  -\LDA #138:\LDX #2:\LDY addr+2:\JSR OSBYTE \BCS WriteAgain \.WriteQuit (!\PLA:\TAY:\PLA:\TAX:\PLA:\RTS 2: <] F:"*SAVE RSLink ";~mcode%;" ";~P%;" ";~start%&FFFF0000 RSRAMDisk FึW  > RS_Disk1  RS232-Link disk to memory : (: buffer% 256:init 2 15:*FX15 < *FX7,8 F *FX8,8 P err Z:listen  > RS_Disk1  RS232-Link disk to memory : (: buffer% 256:init 2 15:*FX15 < *FX7,8 F *FX8,8 P err Z:listen:0 d: nݤerr:*fx3 x:" at line ";:*FX2,2 =-1 : listen *FX2,1 A%=:A%=1 A%=2 num%=:drv%= sect%=*65536+*256+ # A%=1 write:: Sending to me A%=2 read:: Me send out  : read  num%=number of sectors  sect%=start sector "Reading";:disp  l%=0 num%-1 "0rd(sect%+l%): Get 256 bytes from somewhere , *FX3,7 60: All ok @* m%=0 255:buffer%?m%:: send data J*FX3 T l%: Do next sector ^: h: r write |"Writing";:disp  l%=0 num%-1 + m%=0 255:buffer%?m%=:: read data wr(sect%+l%)  *FX3,7 0: All ok *FX3  :  disp ": &";~sect%;" + ";~num%;  sect%=&46 " - FSM";  sect%=&47 " - root";  :  Specific routines: :  init max%=((-P-5000)&FFFC00)  mem% max% 6"Using ram-disk size: &";~max%;", ";max%1024;"K" o$buffer%=0+"(C)JGH"+0: mem%!&4610<>!buffer% mem%!&4614<>buffer%!4 "Installing fresh disk":new_disk & 0: :new_disk D$$(mem%+&4600)="LinkDisk " N,mem%!&4610=!buffer%:mem%!&4614=buffer%!4 X$mem%!&4618=0:mem%!&461C=max%256 bmem%?&461E=1: Data disk cX%=buffer%:Y%=X%256:A%=14 d!!X%=1: &FFF1: Get time/date emem%?&461A=8*(~buffer%?2) f6mem%?&461B=(~buffer%?1)+16*((~buffer%?0)-1981) lmem%!&4620=&00440002 v,mem%!&4624=&4A:mem%!&4626=(max%256)-&4A mem%!&4628=0 $(mem%+&4700)="$ G" , a%=mem%+&470B mem%+&4720 4:!a%=0:  :  rd(s%)  l%,d% d%=mem%+256*s% & l%=0 255 4:buffer%!l%=d%!l%:  :  wr(s%)  l%,d% d%=mem%+256*s%  & l%=0 255 4:d%!l%=buffer%!l%:  SideDisk/s 127);: A%=89:"Yes ";:= A%=78:"No = "All ";:cf%=:= : ݤfs=args(0) #ݤargs(A%): E%,Y%:=&FFDA &FF :  Corrupt data area: ݤpath: A%,n$,p$ A%=6::X%!1=data%: OSGBPB *?(data%+2+?data%+?(data%+?dat  > SideDisk/s 1.00 $ Provide drives in sideways ram : (WORDV=&20C 2mcode%=&FFFF0A38 < addr=&A8:sect=addr+4:ptr=&AE F P=0 1 P P%=mcode% Z [OPT P*3 d.Intercept nCMP #90:BEQ NewWord x .OldWord JMP 0 .NewWord STX ptr:STY ptr+1 \ Check &0600 id marker: LDY #0:LDA (ptr),Y:BNE NotMe $INY:LDA (ptr),Y:CMP #6:BNE NotMe \ Bit7 commands go to HADFS: !LDY #11:LDA (ptr),Y:BMI NotMe \ Only RD & WR supported: BEQ NotMe:CMP #3:BCS NotMe \ Get number of sectors: PHA:DEY:LDA (ptr),Y:TAX \ Check drive number: %DEY:LDA (ptr),Y:CMP #8:BCC NotMe1 CMP #24:BCS NotMe1  #15:CMP &DC2:BEQ ForMe " .NotMe1 ,PLA:.NotMe 6LDX ptr:LDY ptr+1:LDA #90 @BNE OldWord J: T .ForMe ^\ 2..5=addr h\ 6..8=sec r\ 9=drv in A |\10=num in X $\11=type 1=write, 2=read, pushed  \ Ignore top byte of sector:  DEY:PHA  \ Get copy of sector & addr:  .AddrLp  DEY:LDA (ptr),Y:STA addr-2,Y CPY #2:BNE AddrLp \ Get drive back:  PLA:TAY \ No Tube support: BIT &27A:BPL IOMem LDA addr+2: addr+3 CMP #&FF:BNE NotMe1  .IOMem PLA:LSR A:BCC Read  \ Swap src & dest for write: &/LDA addr:PHA:LDA sect:STA addr:PLA:STA sect 07LDA addr+1:PHA:LDA sect+1:STA addr+1:PLA:STA sect+1 : .Read D \ X=num, Y=bank (drive 15) N\ Select rom/ram bank: XLDA &FE30:PHA bSTY &FE30:LDY #0 l .Loop v!LDA (sect),Y:STA (addr),Y:INY  BNE Loop  LDA sect:CLC:ADC #1:STA sect  LDA sect+1:ADC #0:STA sect+1 $LDA addr+1:CLC:ADC #1:STA addr+1  LDA addr+2:ADC #0:STA addr+2 DEX:BNE Loop PLA:STA &FE30 LDA #0:LDY #11:STA (ptr),Y RTS :  .start% LDA WORDV:STA OldWord+1 LDA WORDV+1:STA OldWord+2 "LDA #Intercept 255:STA WORDV  )LDA #Intercept 256 &FF:STA WORDV+1 RTS  ] *<"*SAVE SideDisk ";~mcode%;" ";~P%;" ";~start%&FFFF0000 Stats  W.1.00 u H h)i0   C   C L u  : . ' `ߎ Ҡ L `  `"LTitle: Option: Dir.  > Support/s v1.14 # Extra drive support for HADFS , 18-Jul-91 v1.00: 'L' serial link drive (" 12-Jan-92 v1.10: 'R' ramdisk 2, 22-Jan-04 v1.11: Add partition support ICMP #&A0:BCS Osb90Claim :\ Should use b6/b5 as bitmap H4LDA &FC00:CLC:ADC #4:BNE Osb90Loop:BEQ ServQuitY R.Osb90Claim \B #31:STA &F0 :\ Default to this drive f: p.ServClaimY z PLA:TAY .ServClaim PLA:LDA #0:RTS : : 5.Serv08 :\ OSWORD PHA:TYA:PHA CMP #"4"-&30:BNE P%+5:JMP HardDisk :\ '4' -> Hard drive <>CMP #"5"-&30:BNE P%+5:JMP HardDisk :\ '5' -> Hard drive F;CMP #"M"-&37:BNE P%+5:JMP MMCDisk :\ '7' -> MMCDisk P8CMP #"L"-&37:BNE P%+5:JMP SerialDrive:\ 'L' -> Link Z;CMP #"R"-&37:BNE P%+5:JMP RAMDisk :\ 'R' -> RAMDisk d .DiskNull nDTYA:LDX #&FF:RTS :\ No drive, don't claim x.RAMDiskPartFound JLDA &FC00:CLC:ADC #1:STA &FC00:LDA &FC03:CLC:ADC sect+0:STA sect+0:PHP JLDA &FC00:CLC:ADC #1:STA &FC00:LDA &FC03:PLP:ADC sect+1:STA sect+1:PHP FLDA &FC00:CLC:ADC #1:STA &FC00:LDA &FC03:PLP:ADC sect+2:STA sect+2 \ Fall through into RAMDisk : \ ------------------------ \ RAM CARD ACCESS ROUTINES \ ------------------------ )\ Y=&00, &01, &02 - null, write, read \ X=sector count :  .RAMDisk .RAMDiskLoop ?LDA sect+0:STA &FC01:LDA sect+1:STA &FC02:\ RAMCard address BIT &27A:BPL RAMDiskIO .LDA addr+2: addr+3:CMP #&FF:BNE RAMDiskIO ">TXA:PHA:TYA:PHA :\ Save registers ,CCLC:ADC #5: #1:JSR TubeClaim :\ 1->7 write, 2->6 read 6APLA:TAX:PLA:TAX :\ Restore registers @DEY:BEQ RAMWriteTube:DEY J.RAMReadTube T!STY &FC00:LDA &FC03:STA &FEE5 ^'NOP:NOP:NOP:NOP:INY:BNE RAMReadTube hLDY #2:BNE RAMTubeAddress r.RAMWriteTube |!STY &FC00:LDA &FEE5:STA &FC03 (NOP:NOP:NOP:NOP:INY:BNE RAMWriteTube INY .RAMTubeAddress >TXA:PHA:TYA:PHA :\ Save registers ETYA:RTS :\ Return A=Y, no device H: R .HardDisk \\ ------------------ f\ IDE DRIVE ROUTINES p\ ------------------ z)\ Y=&00, &01, &02 - null, write, read \ X=sector count : DLDA IDEstatus:CMP #&FF:BEQ IDEAbsent :\ Quit if no interface DLDA #64:STA IDEcount:STA IDEsector :\ 64 sectors per track >LDA #3:STA IDEhead:LDA #&91:STA IDEcommand :\ Set geometry  .IDELoop "LDA &FF:BPL P%+5:JMP IDEEscape BLDA IDEstatus:BMI IDELoop :\ Wait for IDE ready DCLC:LDA #1:STA IDEcount :\ One sector at a time GLDA sect+0: #63:ADC #1:STA IDEsector :\ Pass 3-byte sector to IDE CLDA sect+1:ADC #0:STA IDEcylinder+0 :\ Start at cylinder 0 JLDA sect+2:ADC #0:STA IDEcylinder+1 :\ HADFS can't access b24-b27 FLDA drive:ROR A:PHP :\ Pass drive 4/5 into Cy BLDA sect+0:ROR A:ROR A:PLP:ROR A: :\ Join drive to head AROR A:ROR A:ROR A: #&13:STA IDEhead :\ Set device and head >DEY:BEQ IDEWrite:DEY :\ Jump for write $: .8LDA #&20 :STA IDEcommand :\ &20=Read 8 .IDERdLp1 B>LDA &FF:BMI IDEEscape :\ Escape pressed LLLDA IDEstatus:BMI IDERdLp1 :\ Wait for command to complete V;LDA IDEstatus: #1:BNE IDEError :\ Error occured `@.IDERdLp2 :\ Fetch one sector j-LDA IDEdata:STA (addr),Y:INY:BNE IDERdLp2 tLLDY #2:BNE IDEAddress :\ Y=2 - read, update addresses ~: .IDEWrite 9LDA #&30 :STA IDEcommand :\ &30=Write .IDEWrLp1 >LDA &FF:BMI IDEEscape :\ Escape pressed LLDA IDEstatus:BMI IDEWrLp1 :\ Wait for command to complete ;LDA IDEstatus: #1:BNE IDEError :\ Error occured ?.IDEWrLp2 :\ Send one sector -LDA (addr),Y:STA IDEdata:INY:BNE IDEWrLp2 ;INY :\ Y=1 - write : I.IDEAddress :\ Update addresses and loop ;LDA IDEstatus: #&21:BNE IDEError :\ Error occured JSR AddressUpdate GDEX:BEQ P%+5:JMP IDELoop:TXA:RTS :\ A=&00, X=&00, ok, claim : .IDEEscape (BLDA #&24 :\ Fake 'Abort' error 2 .IDEError <A IDEerror:PHA F8 #1:BNE IDENotPresent :\ 'No media' PEQUS "HADFS:SerialLink":EQUB &00:EQUS "1.01 (18 Jul 1991)" .SerialLinkCopyright 4EQUB &00:EQUS "(C)J.G.Harston":EQUB &00:EQUB &00 .ModuleChainEnd : : !\ --------------------------- &!\ SERIAL LINK ACCESS ROUTINES 0!\ --------------------------- :)\ Y=&00, &01, &02 - null, write, read D\ X=sector count N: X .WSInit bJSR SerialInit lRTS v: .SerialDrive DTYA:LDX #&FF:RTS :\ No drive, don't claim :PHP:CLI :\ Disable s :LDY #&0A:LDA (&A8),Y:PHA :\ Get command .SerCtrl ALDA (&A8),Y:JSR SerWrite :\ Send control block DEY:CPY #&05:BNE SerCtrl 6LDY #&09:LDA (&A8),Y:TAX :\ X=count &00 .SerReadLoop ;JSR SerRead:BNE ResultError :\ Get ACK byte LDY #&00 <.SerReadBytes :\ Read a sector 0JSR SerRead:STA (&AA),Y:INY:BNE SerReadBytes :INC &AB :\ Inc addr hi CDEX:BNE SerReadLoop :\ Loop for each sector *BEQ SerDone 4: >.SerWriteLoop H LDY #&00 R=.SerWriteBytes :\ Write a sector \2LDA (&AA),Y:JSR SerWrite:INY:BNE SerWriteBytes fAJSR SerRead:BNE ResultError :\ Get ACK byte p:INC &AB :\ Inc addr hi zDEX:BNE SerWriteLoop .SerDone 5LDA #&00 :\ &00=ok .SerResult ;LDY #&0A:STA (&A8),Y :\ Store result :PLP :\ Restore s 9LDA #&00 :\ Claim call RTS : .ResultError BNE SerResult : .SerRead 7TXA:PHA:TYA:PHA :\ Save all  .SerRdLp  LDY #&FE BIT &FF:BMI SerReadEsc $ALDA #&91:LDX #&01:JSR OSBYTE :\ Check SERIN buffer .BCS SerRdLp 8.SerReadEsc B STY &AC L:PLA:TAY:PLA:TAX :\ Restore all V LDA &AC `RTS j: t .SerWrite ~ STA &AC 7PHA:TXA:PHA:TYA:PHA :\ Save all  .SerWrLp BIT &FF:BMI SerWrEsc >LDA #&8A:LDX #&02:LDY &AC:JSR OSBYTE :\ Write to SEROUT BCS SerWrLp  .SerWrEsc PLA:TAY:PLA:TAX:PLA RTS : .SerialInit 6LDA #&08:LDX #&07:JSR OSBYTE :\ Rx 9600 6LDA #&07:TAX:JSR OSBYTE :\ Tx 9600 BLDA #&02:TAX:JMP OSBYTE :\ Enable serial input  :  EQUB &FF  EQUB &0A (EQUS "Baud: 9600 (BAUD=7)" 2 EQUB &0A < EQUB &00 F: P: Z: d]: n="*Save SupportROM ";~mcode%;" ";~O%;" FFFF0000 FFFBBC00" Updates ";:= A%=78:"No = "All ";:cf%=:=  HADFS Version 5.30 ================== There are some errors in the second edition printed manual. Refer to the text files in $.Manual for correct information. Page 27: *SETUSER is *ACCOUNT, and can also take a file as a parameter. When used with a file, the command is ignored for future compatability. The user number is now called the account number. Any additional parameters after the account are ignored, so the command *ACCOUNT FRED 002 (004) will be accepted, ignoring the auxillary account in parentheses. In general, 'account' is used interchangably with 'user number'. Page 29: Osfile &FD: returns account infomation in load address field. XY+2 and XY+3 contain the main account number, XY+4 and XY+5 contain the auxillary account number, currently set identically to the main account number. Do not depend on the exec address field containing any specific information at this stage. The only other infomation currently returned is the length and sector address. Osfile &FF: If the low byte of the execution address is Inoti zero, the file's own load address is used. Page 32: Function &FD, Y<>0; to read and write the CSD, LIB and URD use Y=&08/&88, &09/&89, &0A/&8A. Page 38: A year value of <&81 implies a century number of &20. A year value of >&80 implies a century number of &19. Page 80: In the definition of DEFFNgbpb8 is incorrect. It should be as follows: DEFFNgbpb8(ptr%):X%!1=data%:X%!5=1:X%!9=ptr%:A%=8:CALL&FFD1 IFX%!5=1:="" data%?(1+?data%)=13:=$(data%+1) Page 82: DEFPROCConvDate is incorrect. It should be as follows: DEFPROCDate_FromOrd(mem%,d%,m%,y%,hr%,mn%,sc%,cs%):y%=y%MOD400 d%=y%*365.25+m%*30+d%+VALMID$("120112234455",m%,1) d%=d%+((y%MOD4)=0)-((y%-1)DIV100) d%=d%-(m%>2AND((y%MOD4)=0AND(y%MOD100)<>0ORy%=0))+36493 IFd%>146066:d%=d%-146097 d%=d%*&41EB:mem%!1=d%+d%:d%=((hr%*60+mn%)*60+sc%)*100+cs% ?mem%=d%:mem%!1=mem%!1+d%DIV256:ENDPROC Page 87: When preserving directory context, the following should be used: csd%=FNargs(&FD,8,0) /// csd%=FNargs(&FD,&88,csd%) Page 88: INY:CPY #10:BNE AddrLoop Ishould readi \ RAM-based code \ ROM-based code: INY:CPY #8:BNE AddrLoop:INY:INY INY:CPY #10:BNE AddrLoop  @W:*.Osb90Loop 4ASTA &FC00:LDA &FC03:BPL ServQuitY :\ No more partitions >ICMP #&A0:BCS OsLibrary G?l$BACKU ?i{Iib УBreak  [CLoad h r\COMPAT Jo{ ^COPY ?ИkCrunc  (nCSave ioDisks * qqdisp  40$sETree j{@vExploe bFileIfo  p,Filer rI{`2Files Form10 `<`?x qlpS ;XxMakeL D5%MCode r_zgMDump 0 (Mouse = I 5*pc8s LTv@q,PrLis 8w.Repai ry=p1Repea jq{x q:ROMS EScrLod @GScrol ^{6JScrSae 'hSetExc  k  >BACKUP v1.20 01-Dec-1998  Backup program 4 v1.15 28-12-1997: More display, tidier program (7 v1.16 11-01-1998: Countdown counts down (not up!) 2/ v1.18 20-03-1998: Command line parameters <- v1.19 10-08-1998: Missed OR&20 replaced F+ v1.20 01-12-1998: Can use disk images P4&87:A$=OS_GetEnv:quit$=cl(" -q",1):::end ZRcl("-?",0):"Syntax: "run$" ( ( ) (-t )":end d:init:"BACKUP PROGRAM 1.20. Buffer size: &";~maxlen%' n:Close:end x fs%=fs:params:backup:end  : ?init:OSWORD=&FFF1:OSGBPB=&FFD1:maxlen%=(--3000)&FFFF00 - ctrl%30,data%maxlen%:X%=ctrl%:Y%=X%256  : 'Close:fs%<>fs:"FX143,18,"+fs% "ch%=ch%:ch%:A%=ch%:ch%=0:#A%  #ݤh0(A%,N%)="0000000"+~A%,N%) #ݤfs:A%,X%,Y%,E%:=(&FFDA)&FF : ,Drd(Ad%,Dv%,Sc%,Nm%):dsk(&53,sdrv$): ,Dwr(Ad%,Dv%,Sc%,Nm%):dsk(&4B,ddrv$): *dsk(Cmd%,fn$):Derr%=0:Dv%=-1:gpb: #"FX143,18,4":Nm0%=Nm%:A%=&7F: "3Num%=Nm%256:Num%+(Sc%10)>10:Num%=10-(Sc%10) ,try%=tries%: 6=?X%=Dv%:X%!1=Ad%:X%?5=3:X%?6=Cmd%:X%?7=Sc%10:X%?8=Sc%10 @;X%!9=Num%32:X%?7>79:X%?7=X%?7-80:?X%=?X% 2: Side 2 J'13:Cmd%=&53:"Read "; "Write"; TI" "h0(Dv%,1)":"h0(Sc%,6)"+"h0(Nm%256,2)" "h0(tries%-try%,1)" "; ^6 OSWORD:Derr%=X%?10:try%=try%-1:Derr%=0 try%=0 h,Derr%:err(Derr%);(39-);:Nm%=&100: rlCmd%=&53 Derr%=0:;read%+Nm0%-Nm%;" bytes read"; Cmd%=&4B Derr%=0 ;write%-Nm0%+Nm%;" bytes left"; |<(39-);:Ad%=Ad%+Num%*256:Sc%=Sc%+Num%:Nm%=Nm%-Num%*256 &Nm%<1 Derr%:"FX143,18,"+fs%: : 1ݤerr(A%):A%<&08 A%>&18:="Error "+h0(A%,2) ="Clock errorID CRC errorData CRC errorNot readyWrite protectedTrack 0 not foundSector not found","010012243847620079",A%-7,2),"110012140915170016",A%-7,2)) : Dseek:?X%=Dv%:X%?5=1:X%?6=&69:X%?7=(Sc%10)(Sc%>10): OSWORD: : Agpb:Sc%=Sc%*256:A%=fn$,":"):A%:fn$,A%-1):fn$=fn$,A%+1) CCmd%=&53:A%=3:ch%=(fn$) A%=1:Sc%=0:ch%=(fn$) ch%=(fn$) W?X%=ch%:X%!1=Ad%:X%!5=Nm%:X%!9=Sc%: OSGBPB:#ch%:ch%=0:fs<>fs%:"FX143,18,"+fs%  :  params 9spt%=cl("-s",1):tries%=cl("-t",1):sdrv$=cl("",1) 5ddrv$=cl("",1):trk%=cl("",1):sides%=cl("",1) Bsdrv$="":trk%=-1:"Source drive: "sdrv$:"Dest. drive: "ddrv$ &#sdrv%=-1:sdrv$=1:sdrv%=sdrv$ 0#ddrv%=-1:ddrv$=1:ddrv%=ddrv$ :-1:same%:"Using same drive." Dtrk%=-1:"Number of tracks (80) "trk%:"Number of sides (2) "sides%:"Number of tries (10) "tries%:"Press a key to backup from "sdrv$" to "ddrv$;:祄1 ' Nspt%=0:spt%=10 Xtrk%=0:trk%=80 bsides%=0:sides%=2 ltries%=0:tries%=10 v :  backup 9read%=0:write%=2560*trk%*sides%:s%=0(sides%-1)*2 2 Gsect%=0:length%=trk%*2560::num%=maxlen%:num%>length%:num%=length% : Isame%:13"Insert source disk and press a key";:祄1:13;(39);13; MDrd(data%,(sdrv%+s%)(sdrv%<0),sect%-(spt%*trk%)*(s%=2 sdrv%<0),num%)  Derr%:num%=(num%&FFFE00)2 ,Derr%=0 num%<&100:num%<&100:num%=&100 (Derr%=0 num%=&100:read%=read%+num% : Hsame%:13"Insert dest. disk and press a key";:祄1:13;(39);13; MDwr(data%,(ddrv%+s%)(ddrv%<0),sect%-(spt%*trk%)*(s%=2 ddrv%<0),num%)  Derr%:num%=(num%&FFFE00)2  7Derr%=0 Derr%=&12 num%<&100:num%<&100:num%=&100 *Derr%=0 num%=&100:write%=write%-num%  CDerr%=&12:'"Destination disk write protected":length%=0:s%=99 *-sect%=sect%+num%256:length%=length%-num% 4(length%<1 Derr%=&12:s%:13;(39) >ddrv%>-1: H :Close:end R7A%=ddrv$,":"):A%:ddrv$,A%-1):ddrv$=ddrv$,A%+1) \4X%!2=&FFFB2200:A%=file(ddrv$,2):"Stamp "+ddrv$ f Close: p: zBݤfile(A$,A%):$data%=A$:?X%=data%:X%?1=data%256:=(&FFDD)&FF 6ݤOS_GetEnv:A$:A%=0:X%=1:os%=((&FFF4)&FF00)256 Aos%=6>&8000:ș"OS_GetEnv"A$:A$=A$,1+A$," ",1+A$," "))) os%=32:A$=$&100 /A$=0:?(P-3):A$=$&600 A$=0:A$=$&3800 -A%=A$+" "," "):run$=A$,A%-1):=A$,A%+1) : Hݤcl(l$,n%):l$="":I%=A$+" "," "):l$=A$,I%-1):A$=s(A$,I%+1)):=l$ l$=32 A$<>"":A$=" "+A$ bI%=A$,l$):l$="":I%>0n%>0:l$=A$,A$+" "," ",I%+1)+1):A$,I%,1)<>" ":l$=l$,l$+" "," ")-1) qI%:A$,I%,1)=" ":A$=A$,2+(A$<>32),I%-2-(I%=1)) I%:A$=A$,I%-1)+A$,A$+" "," ",A$+" "," ",I%)+l$)+1) "A$=s(A$):n%:=s(l$) =I%<>0 /ݤs(A$):A$,1)=" ":A$=A$,2):A$,1)<>" " +A$,1)=" ":A$=A$,A$-1):A$,1)<>" " =A$ : (os(A$):A$=""A$=42:A$: A$: $: .0end:quit$<>"":A$=quit$:quit$="":os(A$): 8: B(C) {H {h H {h * pq?risrpqs {۠{L `{{`{{H Ϋ{ {h`p{{{p`Q%=PAGE OLD RUN BASIC MBLib :BFont MW" # > BLib.BFont 1.00 23-Feb-1991 :  BiBLib $BFont MClose M`CmdLie H sHDate Nǯ6hFileI N Z+MOS I.vh11Mouse N"N3Numbe Lf'#h6Pathnme Nf-Zv9ProgEv Ny5@Strin NlyqEStrinIO M@ҢHV@GTime N)Z JTokense N@=A>aW3 Nov 1992)(Untitled_Disk) (C)JGH ! ıƽ 00 ђ 6 y8` 豾)!  (芨H Uh # > BLib.BFont 1.00 23-Feb-1991 :  Bitmap font routines ( ==================== 2( This version uses serial BGET/BPUT <: F: P# BFont_Load - Load bitmap font Z# ----------------------------- d: n-BFont_Load(A$): in%:in%=(A$):in%=0: x#in%:#in%:#in%: : : # BFont_Save - Save bitmap font # -----------------------------  A$ - filename to save to " S% - start character to save E% - end character to save : BBFont_Save(A$,S%,E%): out%,L%,X%,Y%,A%:out%=(A$):out%=0: @ X% -1:Y%=X%256:A%=10::?X%=S%: &FFF1:#out%,23:#out%,S% 5 L%=1 8:#out%,X%?L%::S%=S%+1:S%>E%:#out%: Close M`W< ! > BLib.Close 1.00 09Aug1998 :  Close Handling ( ~~~~~~~~~~~~~~ 2: <Cl ! > BLib.Close 1.00 09Aug1998 :  Close Handling ( ~~~~~~~~~~~~~~ 2: <Close_All:*EXEC F"in%=in%:in%:A%=in%:in%=0:#A% P'out%=out%:out%:A%=out%:out%=0:#A% Z CmdLine H sW) # > BLib.CmdLine 1.00 09Aug1998 :  C # > BLib.CmdLine 1.00 09Aug1998 :  Command Line Parsing ( ~~~~~~~~~~~~~~~~~~~~ 2: "":A$=" "+A$ PbI%=A$,l$):l$="":I%>0n%>0:l$=A$,A$+" "," ",I%+1)+1):A$,I%,1)<>" ":l$=l$,l$+" "," ")-1) ZqI%:A$,I%,1)=" ":A$=A$,2+(A$<>32),I%-2-(I%=1)) I%:A$=A$,I%-1)+A$,A$+" "," ",A$+" "," ",I%)+l$)+1) d"A$=s(A$):n%:=s(l$) =I%<>0 n/ݤs(A$):A$,1)=" ":A$=A$,2):A$,1)<>" " x+A$,1)=" ":A$=A$,A$-1):A$,1)<>" " =A$ Date Nǯ6W- " > BLib.Date 1.03 13-Mar-2007 % Time and date support functions : (C)J.G.Harston, may be freely used and redistributed (K v1.00 12-Sep-1992 JGH: FromOrd(), DayOfWeek(), Day(), Mon() function " > BLib.Date 1.03 13-Mar-2007 % Time and date support functions : (C)J.G.Harston, may be freely used and redistributed (K v1.00 12-Sep-1992 JGH: FromOrd(), DayOfWeek(), Day(), Mon() functions 26 v1.01 18-Feb-1994 JGH: ToOrd() and Since() added <- v1.02 17-Sep-2005 JGH: ToOrd() debugged FC v1.03 13-Mar-2007 JGH: Added [To|From][Day|Month]() functions P: Z, REQUIRE FNDate_FromDay() FNuc() String d. REQUIRE FNDate_FromMonth() FNuc() String n: x: H ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 6 FNDay(day%) - return 3-char day of week string 0 FNMon(month%) - return 3-char month string : 4ݤDay(A%):="000SunMonTueWedThuFriSat",A%*3+1,3) LݤMon(A%):="000JanFebMarAprMayJunJulAugSepOctNovDecDDDEEEFFF",A%*3+1,3) : H ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ B FNDate_FromDay(A$) - return day number for supplied string D FNDate_FromMonth(A$) - return month number for supplied string : !ݤDate_FromDay(A$):A$=uc(A$) 'A%="SUNMONTUEWEDTHUFRISAT",A$,3)) (A%-1)3=0:=A%3+1 =0 : #ݤDate_FromMonth(A$):A$=uc(A$) "6A%="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC",A$,3)) ,(A%-1)3=0:=A%3+1 =0 6: @H ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ JD FNDate_ToDay(day%) - return full-length day of week string T> FNDate_ToMonth(month%) - return full-length month string ^: hݤDate_ToDay(A%) rZ="SunMonTueWednesThursFriSatur","01040710162124",A%*2-1,2),"3336535",A%,1))+"day" |: ݤDate_ToMonth(A%) ="JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember","010816212629333743525967",A%*2-1,2),"785534469788",A%,1)) : H ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ) FNDate_DayOfWeek(day%,month%,year%) : - return day of week for supplied date * 1=Sunday, 7=Saturday : (ݤDate_DayOfWeek(d%,m%,y%):y%=y%400 q=(y%*365.25+m%*30+d%+"120112234455",m%,1)+((y%4)=0)-((y%-1)100)-(m%>2((y%4)=0(y%100)<>0y%=0))+3)7+1 : H ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ K PROCDate_FromOrd - convert time and date to 5-byte centi-second count * On entry: mem%->five bytes of memory , day, month, year of the date A hours, minutes, seconds, centiseconds of the time &I On exit: mem% to mem%+4 containes five-byte centisecond time since 0' 00:00:00 on 1-Jan-1900. :: D;Date_FromOrd(mem%,d%,m%,y%,hr%,mn%,sc%,cs%):y%=y%400 Nqd%=y%*365.25+m%*30+d%+"120112234455",m%,1)+((y%4)=0)-((y%-1)100)-(m%>2((y%4)=0(y%100)<>0y%=0))+36493 Xd%>146066:d%=d%-146097 b=d%=d%*&41EB:mem%!1=d%+d%:d%=((hr%*60+mn%)*60+sc%)*100+cs% l#?mem%=d%:mem%!1=mem%!1+d%256: v: H ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ I PROCDate_ToOrd - convert 5-byte centi-second count to time and date K On entry: mem%->five bytes of memory containing five-byte centisecond 2 time since 00:00:00 on 1-Jan-1900. , On exit: day, month, year of the date A hours, minutes, seconds, centiseconds of the time : $Date_ToOrd(mem%): A%,B%,C%,D% @year%=0:month%=0:day%=0:hour%=0:minute%=0:second%=0:centi%=0 -mem%!1<0:: Problems with negatives ATM FD%=mem%!1&83D6+2447065:C%=mem%?0+256*(mem%!1&83D6):centi%=C%100 >C%=C%100:second%=C%60:C%=C%60:minute%=C%60:hour%=C%60 8B%=((D%*4+3)146097-4)+3:C%=B%14614*5+2:D%=D%*4+3 .A%=C%153+2:day%=C%1535+1:month%=A%12+1  *year%=D%146097*100+B%1461+A%12-4800   : *H ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4> FNDate_Since - return number of days since a past date >I On entry: td%, tm% and ty% should be set to today's date, month and HI year and pd%, pm% and py% should be set to the past date, R month and year. \( Requires X%->5-byte control block f: p1ݤDate_Since(td%,tm%,ty%,pd%,pm%,py%): past% z4Date_FromOrd(X%,pd%,pm%,py%,0,0,0,0):past%=X%!1 =Date_FromOrd(X%,td%,tm%,ty%,0,0,0,0):=(X%!1-past%)&83D6 : FileIO N ZW6 " > BLib.FileIO 1.00 09Aug1998 : % General File Interface Routines (% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2: <, Returns file type, file info in X%!... FBݤfile(A$,A% " > BLib.FileIO 1.00 09Aug1998 : % General File Interface Routines (% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2: <, Returns file type, file info in X%!... FBݤfile(A$,A%):$name%=A$:?X%=name%:X%?1=name%256:=(&FFDD)&FF P: Z General OSGBPB call d#gbpb(A%,chn%,addr%,num%,ptr%) n5!X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%: &FFD1: x:  Return current disk name Bݤgbpb5:A%=5:X%!1=data%:&FFD1:A%=data%:A%?(1+?A%)=13:=$(A%+1) : 6 Return current directory (6) or library (7) name Kݤgbpb67(A%):X%!1=data%:&FFD1:A%=data%+1+?data%:A%?(1+?A%)=13:=$(A%+1) : @ Return current disk (5), directory (6) or library (7) name >ݤgbpbN(A%):X%!1=data%:&FFD1:A%=data%+((1+?data%)(A%>5)) A%?(1+?A%)=13:=$(A%+1) : B Returns entry in current directory, or null string if at end Eݤgbpb8(ptr%):X%!1=data%:X%!5=1:X%!9=ptr%:A%=8:&FFD1:X%!5=1:="" #A%=data%:A%?(1+?A%)=13:=$(A%+1) : ' OSARGS call ignoring X, returns A :ݤargsA(A%,Y%): X%,E%,!&70:X%=&70:E%=Y%:=(&FFDA)&FF ": ,7 OSARGS call with data. Returns any returned data 6;ݤargs(A%,Y%,!&70): X%,E%:X%=&70:?(P-3)=0:E%=Y%:Y%=0 @&FFDA:=!X% J: T$ Example usages of OSARGS calls ^1 used%=FNargs(4,0,0):REM Get disk space used h1 free%=FNargs(5,0,0):REM Get disk free space r* size%=free%+used%:REM Find disk size |? dummy%=FNargs(1,chn%,num%):REM identical to PTR#chn%=num% : & Get current filing system number !ݤfs: A%,Y%,E%:=(&FFDA)&FF MOS I.vW-1  > BLib.MOS 1.00 09Aug1998 : $ Ge  > BLib.MOS 1.00 09Aug1998 : $ General MOS Interface Routines ($ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2: < Osbyte Calls F ~~~~~~~~~~~~ P: ZJ FNbyte returns the single byte in the X register for the named call. d1 FNfx returns the two-byte value held in XY. n)ݤbyte(A%,X%,Y%)=((&FFF4)&FF00)256 x6ݤfx(A%,X%): Y%:Y%=X%256:=((&FFF4)&FFFF00)256 Mouse N"NW>  > Mouse 1.00 12-Sep-1992 :  Mouse & Pointer Routines (: 2Pointer_Init < F: PPointer_Dra  > Mouse 1.00 12-Sep-1992 :  Mouse & Pointer Routines (: 2Pointer_Init < F: PPointer_Draw Z!0,7:0,0,-12:2,0,12:2,12,0 d 0,-12,0:2,32,-32:0,-32,32 n x: Pointer_UntilAction   mx%,my%:Pointer_Draw Mouse_UntilAction Pointer_Draw: mx%,my% 0(obl%<>bl%)(obm%<>bm%)(obr%<>br%)((-1))  : Mouse_Init !mx%=0:my%=0:bl%=0:bm%=0:br%=0  : Mouse_UntilAction 0omx%=mx%:omy%=my%:obl%=bl%:obm%=bm%:obr%=br%  Mouse_Read "H(omx%<>mx%)(omy%<>my%)(obl%<>bl%)(obm%<>bm%)(obr%<>br%)((-1)) , 6: @Mouse_Read J0mx%=(7):my%=(8):bl%=-11:bm%=-12:br%=-13 T ^: Number )Ъ sNot open for update0 sOutside file8HH {Ƚǽ ¡ ( " > BLib.Number 1.00 09Aug1988 :  Number Output Routines ( ~~~~~~~~~~~~~~~~~~~~~~ 2: <# Hexadecimal padded with zeros F#ݤh0(A%,N%)="0000000"+~A%,N%) P: Z$ Hexadecimal padded with spaces d"ݤh(A%,N%)=" "+~A%,N%) n: x Decimal padded with zeros #ݤd0(A%,N%)="00000000"+A%,N%) : Decimal padded with spaces #ݤd(A%,N%)=" "+A%,N%) : ) Drive character for supplied number ݤdrv(A%)=(48+A%-7*(A%>9)) : ) Drive number for supplied character "ݤDrv(A$)=A$-48+7*(A$>"9")31 Pathname Nf-ZvW6 $ > BLib.Pathname 1.01 19Sep1992 * v1.00 19Sep1992 JGH: Initial version 1 v1.01 15Mar1995 JGH: Functions named Path_* (: 2" Directory Pathname Functions <" ======================= $ > BLib.Pathname 1.01 19Sep1992 * v1.00 19Sep1992 JGH: Initial version 1 v1.01 15Mar1995 JGH: Functions named Path_* (: 2" Directory Pathname Functions <" ============================ F: PJ FNPath_Name - Return pathname with drive number or name if no number Z7 FNPath_Full - Returns full pathname with diskname dI The returned pathname can be used to select the directory with *DIR nJ -------------------------------------------------------------------- x: ݤPath_Name:A%=6 ݤPath_Full:A%=&106 n$,p$::X%!1=data%: &FFD1 *?(data%+2+?data%+?(data%+?data%+1))=13 n$=$(data%+2+?data%):*DIR ^ n$=n$,n$+" "," ")-1) p$=n$+"."+p$:n$="$"n$="&" p$=p$,p$-1):"DIR "+p$ VA%=6:X%!1=data%: &FFD1:?(data%+1+?data%)=13:n$=$(data%+1):n$<>"":=":"+n$+"."+p$ X%!1=data%:A%=5: &FFD1 &?(data%+1+?data%)=13:n$=$(data%+1) )n$=n$,n$+" "," ")-1):=":"+n$+"."+p$ : : * FNPath_Lib - Return library pathname * ------------------------------------ ": ,ݤPath_Lib 6 a$,b$:a$=Path_Name:*DIR % @ b$=Path_Name:"DIR "+a$:=b$ J: T: ^3 FNPath_LibFull - Return full library pathname h3 --------------------------------------------- r: |ݤPath_LibFull  a$,b$:a$=Path_Name:*DIR %  b$=Path_Full:"DIR "+a$:=b$ : : & FNPath_URD - Return URD pathname & -------------------------------- : ݤPath_URD  a$,b$:a$=Path_Name:*DIR &  b$=Path_Name:"DIR "+a$:=b$ : : / FNPath_URDFull - Return full URD pathname / ----------------------------------------- : ݤPath_URDFull & a$,b$:a$=Path_Name:*DIR & 0 b$=Path_Full:"DIR "+a$:=b$ :: ProgEnv Ny5W< # > BLib.ProgEnv 1.04 09Jan2007 : # Program Environment Functions (# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 # > BLib.ProgEnv 1.04 09Jan2007 : # Program Environment Functions (# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2: &FFFF:ș"GetModuleFileName",0,X%,255:A$=$$X%:run$=A$:=@cmd$ nos%=32:A$=$&100 x{A$=0:>&7FFF:run$=$&8100:ș"OS_GetEnv"A$,,A%:ș"OS_WriteEnv","",A%:A$=A$,1+A$+" "," ",1+A$," "))):A$=0:A$=run$ 2A$=0:?(P-3):A$=$&600 A$=0:A$=$(-&300) 7A%=A$+" "," "):run$=A$,A%-1):run$<>"":=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) ="" : . Run a program, passing it a command line = If program is *Command, called with OSCLI, else CHAINed &os(A$):A$=42:A$ A$<>"":A$  : ( Exit program, setting return value @exit(A%):"FX1,"+A%:quit$=quit$:A$=quit$:quit$="":os(A$) os%<6: *Quit  : String NlyqW< " > BLib.String 1.00 09Aug1998 : # String Manipulation Functions (# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2: " " F+A$,1)=" ":A " > BLib.String 1.00 09Aug1998 : # String Manipulation Functions (# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2: " " F+A$,1)=" ":A$=A$,A$-1):A$,1)<>" " P=A$ Zݤuc(A$): B$:A$="":="" d5B$=B$+(A$((A$<"@")&DF)):A$=A$,2):A$="":=B$ nݤlc(A$): B$:A$="":="" x*B$=B$+(A$&20):A$=A$,2):A$="":=B$ : StringIO M@ҢHVW( $ > BLib.StringIO 1.00 15Feb2004 :  String I/O routines ( =================== 2* v1.00 - uses slow se $ > BLib.StringIO 1.00 15Feb2004 :  String I/O routines ( =================== 2* v1.00 - uses slow serial file access <: F: PE rd(in%) - Read a , or terminated string from in% ZE --------------------------------------------------------------- d: nݤrd(in%):A$: x'A%=#in%:A%<>10 A%<>13:A$=A$+A% A%=10 A%=13 #in%:=A$ : : I wr(out%,A$) - Write A$ to out%. A$ must include required terminator I ------------------------------------------------------------------- : wr(out%,A$):A$="": #A%=1A$:#out%,A$,A%,1):: Time N)Z W6 " > BLib.Time 1.03 12-Aug-2006 ! RTC Time and date functions : (C)J.G.Harston, may be freely used and redistributed (: ----------------- " > BLib.Time 1.03 12-Aug-2006 ! RTC Time and date functions : (C)J.G.Harston, may be freely used and redistributed (: ---------------------------------------------------- 2/ All functions assume global control block <0 pointed to by X%,Y% and set up as follows: F( DIM ctrl% 31:X%=ctrl%:Y%=X%DIV256 P: Z: d' Real-Time-Clock reading functions n' ================================= x: H ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ I FNtime - return RTC time&date or null string if none present L returned date is correct for years after 1996 and 1999 : (ݤtime:?X%=0:A%=14:&FFF1:?X%=0:="" X%?25=13:A%=$(X%+4):$(X%+4)="0"+(A%31),2):$(X%+11)=($(X%+11)+(A%&E0)2-100*($(X%+11)<1981)):X%?6=32:X%?15=46:=$X% : H ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C FNTime - Return time&date or null string if none found A On-board RTC and fileserver RTC are checked 0 and day of week calculated : 6ݤTime:!X%=1:A%=14:&FFF1:A%=07:X%?A%=~X%?A%: time:year%=0:month%=0:day%=0:hour%=0:minute%=0:second%=0 A%=14:!X%=1:&FFF1:!X%=1: A%=07:X%?A%=~X%?A%: 2((y%4)=0(y%100)<>0y%=0))+3)7+1 : #ݤd0(A%,N%)="00000000"+A%,N%) Tokenise N@=A>aW< & > BLib.Tokenise 1.00 11-Jun-2006 :  Tokenise BASIC lines ( ==================== 2( Generalised cross-platform library <: F Authors: P$ Richard Russell for BBFW code Z# J.G.Harst & > BLib.Tokenise 1.00 11-Jun-2006 :  Tokenise BASIC lines ( ==================== 2( Generalised cross-platform library <: F Authors: P$ Richard Russell for BBFW code Z# J.G.Harston for RISC OS code d J.G.Harston for 6502 code n: x FNTokenise_()  -------------  Tokenise a line of text  Returns: tokenised string  ------------------------- : &ݤTokenise_(A$):=Tokenise_ARM(A$) %ݤTokenise_(A$):=Tokenise_65(A$) &ݤTokenise_(A$):=Tokenise_Z80(A$) &ݤTokenise_(A$):=Tokenise_Win(A$) + Should select appropriate subfunction : : ݤTokenise_ARM(A$): A%,B% ,ș "XOS_GenerateError",0,255,"*") ,A% B%=("0:"+A$):=$(A%-14) : "ݤTokenise_Win(A$): A%,B% ,ȕA$,1)=" ":A$=A$,2): 6B%=("0:"+A$):=$(!332+2) @: JݤTokenise_65(A$): A% T(A%=("0:"+A$):=$((!4 &FFFF)-A$-1)  @W:Break  W3V1.02 `^~ ȥ򥩅8 j 0z   0L` LL V1.02 `^~ ȥ򥩅8 j 0z   0L` LL (`L (` `CLoad h rW3ȱ `ȱ! ` Syntax: CLoad (/X)  N N `0:ȱ `ȱ! ` 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.03COMPACT Jo{ W2  > COMPACT 2.30 V&87:A$=OS_GetEnv:OSGBPB=&FFD1:OSFILE=&FFDD:"Disk Compacter Version 2.30":*HADFS $quit$=  > COMPACT 2.30 V&87:A$=OS_GetEnv:OSGBPB=&FFD1:OSFILE=&FFDD:"Disk Compacter Version 2.30":*HADFS $quit$=cl(" -q",1):::end() (Ecl("-?",0):'"Syntax: "run$" () (-quit )":end(0) 2'A$,1)=" ":A$=A$,2):A$,1)<>" " <+maxlength%=-P-2000: data% maxlength% F$"Buffer length: &";~maxlength%' P,drv$=A$:drv$="":"Drive: "drv$ A$="C" Zdrv$=drv$,1):"DIR :"+drv$ d(dv%=8-(ver>&4D):nm%=dv%+1:ct%=dv%+2 n> ctrl% 19,ctrl2% 19,FSM% 255,name% 19:total%=&200:flen%=0 xwrite%=:esc%=0:*FX229,1 *DIR$ <:saves%=0:C_DoDir("$",1):C_DoDir("$",2):A%=look(0,0) "A%<&28 saves%=0 esc%:*FX229 + A%<&27 "Maximum compaction achieved" end(0) : C_DoDir(path$,match%) ! A%,X%,Y%,index%,ret%,saved% index%=0:saved%=: X%=ctrl%:Y%=X%256:A%=8 *X%!1=name%:X%!5=1:X%!9=index%: OSGBPB *ret%=X%!5:index%=X%!9:(-1):esc%==27  ret%=0 C_DoFile(path$) #ret%<>0 esc%:saved% esc%: : C_DoFile(path$) "4 A%,X%,Y%,start%,exec%,length%,attr%,sec%,file$ ,)?(name%+?name%+1)=13:file$=$(name%+1) 6f!ctrl2%=name%+1:X%=ctrl2%:Y%=X%256:A%=&FD:A%=( OSFILE)&FF:sec%=(X%!14)&FFFFFF:drive%=ctrl2%?17 @J!ctrl%=name%+1:X%=ctrl%:Y%=X%256:A%=5:A%=( OSFILE)&FF:A%<>match%: J4start%=X%!2:exec%=X%!6:length%=X%!10:attr%=X%!14 T[ A%=2 "DIR "+file$:C_DoDir(path$+"."+file$,1):C_DoDir(path$+"."+file$,2):"DIR ^": ^/A%<>1:path$;".";file$;" is not a file.": hln2%=(length%+255)256 r+look(sec%,ln2%):path$;".";file$; |4length%>maxlength%:" - too long for buffer.": =" ";hex(start%,8);"+";hex(length%,4);" ";hex(exec%,8) > (attr% 8) (attr% 1)=0 A%=&FF "ACCESS "+file$+" R" 7"LOAD "+file$+" "+~data%:write%=:saves%=saves%+1 N"SAVE "+file$+" "+~data%+"+"+~length%+" "+~exec%+" "+~start%:saved%= (X%=ctrl%:Y%=X%256:A%=4: OSFILE:: #ݤlook(sec%,length%): X%,Y%,A% write%:loadFSM:write%= QDptr%=&1C::Dptr%=Dptr%+4:sect%=(FSM%!Dptr%)&FFFF:len%=!(FSM%+Dptr%+2)&FFFF ?sect%=0 (sect%=length%)) =sect%:"Found: start &";hex(sect%,4);", length=&";~len% sec%=0:=Dptr% =sect%<>0 *ݤhex(A%,N%):=N%-~A%,"0")+~A%,N%)  loadFSM cX%=ctrl2%:Y%=X%256:!X%=&600:X%!2=FSM%:X%!6=70:X%?dv%=drive%:X%?nm%=1:X%?ct%=&80:A%=90:&FFF1: :ݤver:A%,X%,E%,Y%:X%=&70:A%=&FD:&FFDA:=?&73+256*?&72 : &6ݤOS_GetEnv:A$:A%=0:X%=1:os%=((&FFF4)&FF00)256 0Aos%=6>&8000:ș"OS_GetEnv"A$:A$=A$,1+A$," ",1+A$," "))) :os%=32:A$=$&100 D2A$=0:?(P-3):A$=$&600 A$=0:A$=$(-&300) N-A%=A$+" "," "):run$=A$,A%-1):=A$,A%+1) X: b*ݤcl(l$,n%):l$=32 A$<>"":A$=" "+A$ lZI%=A$,l$):l$="":I%>0n%>0:l$=A$,A$," ",I%+1)+1):A$,I%,1)<>" ":l$=l$,l$," ")-1) vkI%:A$,I%,1)=" ":A$=A$,2+(A$<>32),I%-1+(A$=32)) I%:A$=A$,I%-1)+A$,A$," ",A$," ",I%)+l$)+1) n%:=l$ =I%<>0 : (os(A$):A$=""A$=42:A$: A$: : end(A%): 5quit$<>"":A$=quit$:quit$="":"FX1"+A%:os(A$): : B(C) {H {h H {h * pqJros rpqs {۠{L `{{`{{H Ϋ{ {h`p{{{p`Q%=PAGE OLD RUN BASIC COPY ?W:Not HADFSSyntax: COPY Not found ©Z  Not HADFSSyntax: COPY Not found ©Z   ȱ! ei У@     Ӡ   0  j v L L    ` L)9)0X)&) E))0I00K)K$   I8e(`)9)0쭫)&) ٭))0I0ĭK)K 8 Ư(``L0.13Crunch  W3(Not in BasicK͌pqprqs   8   ȱpr p: ȩ rr м rs`pr`eppeqq`erress`1.01CSaveNot in BasicK͌pqprqs   8   ȱpr p: ȩ rr м rs`pr`eppeqq`erress`1.01CSave iW! ȱ `ȱ! ` (Syntax: CSave (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.03Disks  EQUB &0A (EQUS "Baud: 9600 (BAUD=7)" 2 EQUB &0A < EQUB &00 F: P: Z: d]: n="*Save SupportROM ";~mcode%;" ";~O%;" FFFF0000 FFFBBCV1.04Drv TitleFree Used `         i:      0 H FffFff K h8 W:LH A LH  L ` 8 B@ 8  8 ' 8  8 d 8 8  N 0 0`L8嬅孅宅eee` DIR :0 disp  4W&$J J/J `     `  `(L, J J/J `     `  `(L,  HH $ hh (` p\ 檮 L L  1 !&L   L )`M ` ) @ ` H)ߢ@B> I8S2W,Q(X$Y h     L h) 娅%I- E ` ) P f L( ) ) N N N N N N N , P  ,  )2  > (>  J~ (~      L Lv1.06ETree j{W(  >ETree 1.16 12-Sep-2005 Z::B: dV%39,W%31,B%99:C%=0:A$=B:E$="":X%=W%:Y%=X%256:D$="":Z$="":P$="":F$="":I$="":C$="":T$="":Z%=&FF:L$=A$:e%=E:A$="":"Path to show:  >ETree 1.16 12-Sep-2005 Z::B: dV%39,W%31,B%99:C%=0:A$=B:E$="":X%=W%:Y%=X%256:D$="":Z$="":P$="":F$="":I$="":C$="":T$="":Z%=&FF:L$=A$:e%=E:A$="":"Path to show: "A$ @A$,1)<>"-"A$," "):A$=A$,A$," ")+1)+" "+A$,A$," ")-1) 8I%=A$,"-q"):I%:E$=A$,A$," ",I%)+1):A$=A$,I%-1) \A$,2)="-?":"Syntax: ETree [-apps] [-files] [-info] [-count] [-list] [-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$+" "," ")) .A$,2)="-l":T$="Y":A$=A$,1+A$+" "," ")) 4A$,1)<>"-":B$=Z$+F$+I$+C$+P$+T$:L$<>"":B$="*" 5G$="":I%=A$,":"):I%>1:G$=A$,I%-1):A$=A$,I%+1) 1D$=A$:G$:f%=(A("^",5)&FE)=2:E<>16:Z%=&3B Ff%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 6[B$="":"Show files? "F$:F$=F$,1):"Show info? "I$:I$=I$,1):"Printout? "P$:P$=P$,1) @vb%=Z$="Y"Z$="y":G%=F$="Y"F$="y":M%=I$="Y"I$="y":T%=P$="Y"P$="y":O%=C$="Y"C$="y":H%=T$="Y"T$="y":H(T%):T%2 T&H%:A("$",5)=2:X%!2<>0:*INFO $ ^<"DIR "+D$:H%:A(5,0):?(B%+1+?B%)=13:"Disk: ";$(B%+1) h?H%:A(6,0):?(B%+?B%+?(B%+1+?B%)+2)=13:"Dir: "$(B%+2+?B%) rQ?V%=32:C%=C(0,0,0):'"Total disk space used: ";C%" bytes";:O%:" - "k(C%); :T%G%:  T%:3 B: 3B:"FX143,18,"+e%:E$<>"":A$=E$:E$="":I(A$) : .A(A%,F%):X%!1=B%:X%!5=1:X%!9=F%:&FFD1: ݤC(P%,R%,U%):Q%,C%,F%,L%:F%=R%:C%=0:`%=0:L%=:E=142:ș"OS_GBPB",9,"@",B%,1,F%,32,0,,,Q%,F%:Q%=1-Q%A(8,F%):F%=X%!9:Q%=X%?5 &Q%=0R%<>0G%::= 0Q%=0:D(R%) :Q%<>0`%:R%<>0:=`% D=C% X^D(R%):f$,K%:`%=:?B%<32:?(B%+?B%+1)=13:f$=D($(B%+1))B%?20=13:f$=D($B%,$B%,0)-1)) lHK%=A(f$,5):e%=5:$(B%+8)=f$:E(&14,&12002000,&40000000):X%!15=B%!10 vIc%=X%!2:d%=X%!6:J%=X%!10:_%=X%!14:C%=C%+J%:A%=J%255:A%:C%=C%+256-A% R%<>0(K%=2G%):`%=: !U%(G%H%K%=2):J(f$):L%= >K%=2(f$,1)<>"!"b%=0):C(f$):C%=C%+C(P%+1,0,U%):G(f$)   J(f$):S%:H%:FD$;"."; af$;:M%(H%(H%G%)):(34-+10*O%);h(c%,8);" ";h(d%,8);" ";h(J%,6);M%:(56-+10*O%); HM%:" ";G((_%Z%)(256(K%=2)));" ";:H%(H%G%):F(_%&FFFF00); p]O%:((30-)M%-M%);:K%=2:S%=G%:G%=:C(f$):k(C(P%,0,));:G%=S%:G(f$)O%:k(J%); z: /F:a%=C(P%,F%,0):a%:V%?P%=c%(3)V%?P%=32 0P%>1z%=0P%-2:V%?z%,32::V%?z%P%=1?V% L%P%>0c%(4)P%>032 "c%((a%1)((L%(P%=0))4)): %C(f$):D$=D$+"."+f$:"DIR "+f$: ,G(f$):D$=D$,D$-f$-1):f%:"DIR ^": "DIR "+D$:  ݤG(A%):a$:(A%128):a$="P" .(A%8):a$=a$+"L" 8,(A%&100):a$="D"+a$+"/":=a$+7-a$," ") B(A%6)=2:a$=a$+"W" L(A%4):a$=a$+"E" V(A%5)=1:a$=a$+"R" `#a$=a$+"/":(A%96)=32:a$=a$+"W" t(A%64):a$=a$+"E" ~(A%80)=16:a$=a$+"R" =a$+7-a$," ") )ݤF(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" iH(g%):c%(5):z%=05:c%(z%)=z%+166::g%c%(0)=&C4:c%(1)=&C2:c%(2)=&FE:c%(3)=&B3:c%(4)=&C0:c%(5)=&C3 23,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: d@E(A%,D%,E%):X%,Y%:X%=B%:Y%=X%256:!X%=D%:X%!4=E%:&FFF1: nݤE:A%,Y%,E%:=(&FFDA)&FF sݤB:A$,A%,X%,Y%:A%=0:X%=1:h%=((&FFF4)&FF00)256:h%=6>&8000:ș"OS_GetEnv"A$:A$=A$,1+A$," ",1+A$," "))) h%=32:A$=$&100 -A$=0:?(P-3):A$=$&600A$=0:A$=$&3800 3A%=A$+" "," "):H$=A$,A%-1):H$<>"":=A$,A%+1) ZX%=W%:Y%=X%256:A%=9:?X%=0:X%!1=B%:!B%=0:&FFD1:!B%?B%+B%?2<>8:B%?(1+B%)=13:=$(B%+1) ="" #I(A$):A$=""A$=42:A$:A$ B(C) {H {h H {h * pqąrjsrpqs {۠{L `{{`{{H Ϋ{ {h`p{{{p`Q%=PAGE OLD RUN BASIC Explode bW3`L,z0  #ȱ)F% 11L  L  LO FileInfo  W.,Syntax: FileInfo (-|=) =-  H z`L,z0  #ȱ)F% 11L  L  LO FileInfo  W.,Syntax: FileInfo (-|=) =-  H z H  !.Ȣ ! Syntax: 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.03Filer > Filer  Text-based desktop system  Start with 36 entries (3 Need to: Sort entries, check date, load types 2? 22-Mar-98 v0.40 JGH: New GetEnv, fast scan, multi display <1 18-May-98 v0.41 JGH: DirScan bugfix removed FD 22-Jun-98 v0.42 JGH: Copy to file; Wait after 'O'; better FNcl P: ZA=&8000:A%=fx(135,0)256:&80+A%+(A%=7):sz:wd%<40:&86:sz d[ctrl%30,data%80:X%=ctrl%:Y%=X%256:A$=OS_GetEnv:quit$=cl(" -q",1):in%=0:err:end ns0,0)c(1)(wd%2-19)"Textual Filer 0.42 (C)1998 J.G.Harston"(wd%-)c(0);:md$=cl("-m",1):debug%=cl("-d",0) x?cl("-?",0):"Syntax: "run$" () (-quit )":end -Init:md$<>"":A$=md$:md$="":A$&80:sz nexit$="":run$<>"":exit$=" -quit "+run$+" -mode "+(fx(135,0)256):quit$<>"":exit$=exit$+" -quit "+quit$ ChkDate:err:end ,:X%=ctrl%:Y%=X%256:RdDir:Disp:menu :end: : ;Init:y%=3:err%=:X%=ctrl%:Y%=X%256:max%=max%:max%: Hmax%=35:n$(max%),l%(max%),e%(max%),n%(max%),a%(max%),t%(max%):w$="" Kt$(19):t$(0)="Data":t$(1)="File":t$(2)="Directory":t$(3)="Application" It$(4)="Text":t$(5)="Exec":t$(6)="MCode":t$(7)="Utility":t$(8)="Basic" Gt$(9)="ROM":t$(10)="Teletext":t$(11)="Archive":t$(12)="Font":ptr%=0 Dt$(13)="Screen":dw%=1:fs%=fs:Drv:Path$=p:Sc$="":Ar$="":Tr$="" :z%=02:a$="$.%.",5-2*z%,2):d$=a$:d$="":d$=Path$+"." 3Sc$="":file(d$+"Scroll",5)=1:Sc$=d$+"Scroll" 5Ar$="":file(d$+"Archive",5)=1:Ar$=d$+"Archive" UTr$="":file(d$+"TreeCopy",10+3*(fs=4)),5)=1:Tr$=d$+"TreeCopy",10+3*(fs=4)) ")A%=(Sc$<>""Ar$<>""Tr$<>""):A%:z%=3 ,#A%z%=0:file("%",5)<>2:z%=1 6: @: Jon:23,1;0;0;0;0:*FX4,2 T*FX225,128 ^ hoff:23,1,1;0;0;0;:*FX4 r *FX225,1 | =end:off:c(0);:quit$<>"":A$=quit$:quit$="":os(A$):  ݤS=$(+8) 1ݤerr:c(1);0,y%);(80);0,y%-1);::c(0); !CloseIn:A%=(50):=debug%-1 : $CloseIn:in%:A%=in%:in%=0:#A%  FoswD(A%,D%,E%):X%,Y%:X%=data%:Y%=X%256:!X%=D%:X%!4=E%:&FFF1: )ݤbyte(A%,X%,Y%)=((&FFF4)&FF00)256 5ݤfx(A%,X%):Y%:Y%=X%256:=((&FFF4)&FFFF00)256 Bݤfile(A$,A%):$data%=A$:?X%=data%:X%?1=data%256:=(&FFDD)&FF Uݤgbpb(A%):X%!1=data%:&FFD1:A%=data%+((A%<>5)(1+?data%)):A%?(1+?A%)=13:=$(A%+1)  ݤfs:A%,Y%,E%:=(&FFDA)&FF 6ݤtime:A%=14:?X%=0:&FFF1:?X%:X%?24=13:=$X% ="" ݤDofW(d$):=0 &"ݤh(A%,N%)="0000000"+~A%,N%) 0!ݤd(A%,N%)="0000000"+A%,N%) :Oݤu(A$):A%,B$:A%=1A$:B$=B$+(A$,A%,1)+32*(A$,A%,1)>"`"))::=B$,A$) Dݤp:fs=4:"DIR$":="$" Nn$,p$:A%=6: XXX%!1=data%:&FFD1:?(data%+2+?data%+?(data%+?data%+1))=13:n$=$(data%+2+?data%):*DIR ^ b/n$=n$,n$+" "," ")-1):p$=n$+"."+p$:n$="$" l p$=p$,p$-1):"DIR "+p$:=p$ v6ݤOS_GetEnv:A$:A%=0:X%=1:os%=((&FFF4)&FF00)256 6os%=6>&8000:ș"OS_GetEnv"A$:A$=A$,1+A$," ")) os%=32:A$=$&100 /A$=0:?(P-3):A$=$&600 A$=0:A$=$&3800 AA%=0:A%=A%+1:A%=A$A$,A%)<32A$,A%)>126:A%<>A$:A$="" 7A%=A$+" "," "):run$=A$,A%-1):run$<>"":=A$,A%+1) uX%=ctrl%:Y%=X%256:A%=9:?X%=0:X%!1=data%:!data%=0:&FFD1:!data%?data%+data%?2<>8:data%?(1+data%)=13:=$(data%+1) ="" *ݤcl(l$,n%):l$=32 A$<>"":A$=" "+A$ bI%=A$,l$):l$="":I%>0n%>0:l$=A$,A$+" "," ",I%+1)+1):A$,I%,1)<>" ":l$=l$,l$+" "," ")-1) qI%:A$,I%,1)=" ":A$=A$,2+(A$<>32),I%-2-(I%=1)) I%:A$=A$,I%-1)+A$,A$+" "," ",A$+" "," ",I%)+l$)+1) "A$=s(A$):n%:=s(l$) =I%<>0 (os(A$):A$=""A$=42:A$: A$: : )Key(A$):"Key0"+A$:"FX138,0,192":  /ݤs(A$):A$,1)=" ":A$=A$,2):A$,1)<>" " +A$,1)=" ":A$=A$,A$-1):A$,1)<>" "  =A$ *Xݤget(P%,V%):p%,v%,A$:p%=:v%=:P%,V%);time,17);p%,v%);:A$=(100):A$<>"":=A$ 4Tsz:wd%=byte(160,10,0)-byte(160,8,0)+1:ht%=byte(160,9,0)-byte(160,11,0)+1: >*ݤc(A%):7(A%=0):128+(7(A%<>0)):="" H: RQChkDate:A$=time:A$<>"" A$,5,2)<>"00" A$<>"Fri,31 Dec 1999.23:59:59": \O" Enter the date (DD/MM/YY): "d$:d$," ")=0 d$<>"":d$=d$+" 0"+äday(d$) ffs=16:"HSETDATE "+d$ pF" Enter the time (HH:MM): "t$:t$<>"":=(60*t$+t$,2))*60*100 z Kݤday(d$):d%=d$:m%=d$,d$,"/")+1):y%=1900+d$,2):y%<1980:y%=y%+100 ~y%=y%400:=(y%*365.25+m%*30+d%+"120112234455",m%,1)+((y%4)=0)-((y%-1)100)-(m%>2 ((y%4)=0 (y%100)<>0 y%=0))+3)7+1 : Drv:Dir$=s(gbpb(6)):data%?(1+?data%)=13:Drive$=s($(data%+1)):Disk$=s(gbpb(5)):A%=fs:I%=1+"00405060816",A%)2:FS$="DISKNETHADFS"+A%,"110105110908",I%*2-1,2),"543545",I%,1)): RdDir:err%: 'Hdr:err%=:fs<>fs%:Drv:Path$=p %a%=8:a%=10:in%=("@"):in%=0:a%=8 p%=0:n%=0:sel%=0:fs%=fs: ;?X%=in%:X%!1=data%:X%!5=1:X%!9=p%:!data%=0:A%=a%:&FFD1 1r%=X%!5:A%=10:r%=1-r%:X%!9=0r%=0:a%=8:r%=2  IFp%=X%!9:r%=1:REM Bugfix !p%=X%!9:r%=0:RdName:n%=n%+1 !r%=1n%>max%:err%=:CloseIn  : bRdName:A%=8:data%?(1+?data%)=13:f$=$(data%+1) data%?40=13:f$=$(data%+20):f$=f$,f$,0)-1) $f$=s(f$):f$=46:n%=n%-1: .n$(n%)=f$:A%<>8:t%(n%)=data%!16:A%=data% X%!14=0:t%(n%)=file(f$,5):A%=X%+2:fs%=5:$(data%+8)=f$:oswD(&14,&12002000,&40000000):X%!15=data%!10 8Cl%(n%)=!A%:e%(n%)=A%!4:n%(n%)=A%!8:a%(n%)=A%!12(-129(fs%<>8)) B1t%(n%)=2:f$,1)="!":t%(n%)=3: t%(n%)=2: L3(!A%A%!4)=0(A%!1&FFFFFF)=&FFFFFD:t%(n%)=0: V9(!A%&FFFF)=&8000 (A%!1&FFFFFF)=&FFFBBC:t%(n%)=9: `'(A%!1&FFFFFF)=&FFFF7C:t%(n%)=10: j'(A%!1&FFFFFF)=&FFFFF7:t%(n%)=12: tA%!4=:t%(n%)=5: ~&(A%!1&FFFFFF)=&FFFFFF:t%(n%)=4: (A%!1&FFF)=&FFB((A%!2&FFFF)=(A%!6&FFFF)((?A%=0(A%?5&C0)=&80)(!A%&80 A%?1>&1F))):t%(n%)=8: "A%?1>&0F A%?1<&7C:t%(n%)=6: A(A%!2&FFFF)=(A%!6&FFFF)((A%?1&F8)=8A%?1=&DD):t%(n%)=7:  IF...:t%(n%)=13:REM Screen  : /ݤa(A%,T%):A%=A%&FF:A$:fs%<>16:A%=A%&3B A%4:A%=A%&FC A%&40:A%=A%&CF A%&80:A$="P" 5A%=256*(A%15)A%:T%=2T%=3:A$=A$+"D":A%=A%&880 -T%=19:(A%&800):A$=A$+"LEWRewr",T%,1) T%=4:A$=A$+"/":A%=A%*2  A%=A%*2::=A$+" ",7) 4ݤdt(A%):A%=(A%&FFFF00)256:A%=0:="00/00/0000" U=d(A%31,2)+"/"+d((A%&F00)256,2)+"/"+d(1981+((A%&F000)&1000)+(A%&E0)2,4) (6ݤat(p%):(wd%x%)*(p%x%),1-(wd%<80)+p%x%);:="" 2;ݤat2(p%):sz%+(wd%x%)*(p%x%),1-(wd%<80)+p%x%);:="" <;pr(z%):" "c(t%(z%)&10000);n$(z%)+" ",10); F<(dw%4):" "h(l%(z%),8)" "h(e%(z%),8)" "h(n%(z%),6); P'(dw%1):" "a(a%(z%),t%(z%)&FF); Z(dw%4):" "dt(a%(z%)); d0(dw%2):" "t$(t%(z%)&FF)+" ",9); nAc(0);((dw%2)+2+((dw%3)=1)-(dw%=2));:>(wd%-14)(dw%4) x : Hdr:c(0);::c(1)" Drive "+Drive$,-80*(Drive$<>""))((78--wd%/2)-(FS$+Disk$+Path$,57+22*(wd%<80)))2)FS$+"::"+Disk$+"."+Path$,60+22*(wd%<80))(wd%-)c(0);: 3)wd%<80:dw%=dw%3:dw%=2:dw%=3 1wd%=80 dw%=3:dw%=5: Needs fixing elsewhere XHdr:err%:11:::n%=0n%=0:"Empty" z%=0:pr(z%):z%=z%+1:z%=n% =ht%-3:: y%=:ptr%>=n%:ptr%=n%-1 c(1)" Access, Copy, Delete, Full info, Goto,"((wd%<80)1)" cHange drive, Load, Move, New dir""ectory",-6*(wd%>40))","(1+((wd%<80)5))"OS Command, Quit, Rename, setType, Up,"(1-(wd%<80)); Ȏ"^A=All, ^C=Clear, RETURN=Run, *"(wd%-)c(0);:sz%=11+8*(dw%1)+5*(dw%2)+9*(dw%4):x%=wd%(sz%+1):w$<>"" err%=0:err%=:"."+w$:err%=  : Tݤmenu:err%=:on:B$="!!"::at(ptr%);:ptr%=ptr%+(>ht%-4):"at2(ptr%)"<"; :c(1);:A$=get(wd%-9,0):A$>"`" A$<"{":A$=(A$-32) A$="^":A$="U" 6n%=0 "ACDLMOPRST"+1+3+13,A$)<>0:A$="!" P"*ACDFGHLMNOPQRSTUWZ"+1+3+13,A$):B$=A$+B$,1):c(0);:n%=0:ptr%=0 """,A$):at(ptr%)" "at2(ptr%)" ";:ptr%=ptr%+(A$="")-(A$="")+x%*(A$="")-x%*(A$=""):ptr%=ptr%(ptr%>0):ptr%>=n%:ptr%=n%-1 ,("ACDMORTS",A$)sel%<1)(A$=13 ((t%(ptr%)&10000)=0)):t%(ptr%)=t%(ptr%)&10000:at(ptr%);:pr(ptr%):sel%=sel%+1:A$=13:A$="!":optr%=ptr% 6`秽1+3,A$):z%=0n%-1:t%(z%)=(t%(z%)&FFFF)((A$=1)&10000)::sel%=n%(A$=1):Disp:A$="!" @ A$=13 B$<>13+13:A$="!" JXA$="" (t%(ptr%)&10000):t%(ptr%)=t%(ptr%)&FFFF:at(ptr%);:pr(ptr%):sel%=sel%-1 T"LR",A$)sel%>1:A$="!" ^2A$="Z":dw%="1235.7.0",dw%+1,1):Disp:A$="!" h4A$="W":w:"Output window: "w$:A$="!":Disp:on r4A$="F":dw%=(1(dw%>2))+(7(dw%<3)):Disp:A$="!" |P"!",A$)=0:f$=n$(ptr%):sel%=1:f$=n$(optr%) sel%>1:f$="" &w:B$=13+13 sel%=1:Run(""):=0 A$=13:=0 A$="O":"*"A$:0,y%)" "A$" "f$;" ";:""a$:11(sel%>1):c(sel%>1);:do(A$):ChkEx:A%=((sel%<2 >y%+1)&7FFF):"**** Press SPACE ****",A%);:A%=(A%):=0 0A$="*":"*"A$:c(0);:A$:A$="":fs%=0:=0 I%="ACDGHLMNQRSTU",A$):"Set Access ofCopyDeleteGoto directoryChange to driveLoadMoveNew directoryQuitRenameStampSetType ofGo Up","*01141824385357617478848999",I%*2,2),"*13040614150404130406051005",I%*2,2));" "; 1"ACDLMRST",A$):f$;:"ACLMRT",A$):" to "; !a$="!":"QU",A$)=0:""a$:11  on:A$="A":do("Access"):=0 "CM",A$):Copy(A$="M"):=0 A$="D":do("Delete"):=0 A$="G":Goto(a$):=0 -A$="H":Goto(":"+a$,1-(a$,1)=":"))):=0 A$="L":Load:=0  a$="":=0 A$="N":"CDir "+a$:=0 #A$="R":"Rename "+f$+" "+a$:=0 &A$="S":do("!Stamp"):=0 0+A$="T":a$=type(a$):do("!SetType"):=0 :A$="U":Up:=0 D =A$="Q" NCw:0,y%);c(1);(wd%)c(0)(80+(wd%80))1,y%);c(1);:off: X: bfCall(N$,A$,B$):A$<>"":os(A$+" "+B$+exit$) 13;" '"N$"' not available"(wd%-);13;:A%=(50) l v: #ChkEx:byte(198,0,255): FRun(a$):0,y%)c(1)" Select "f$" "a$c(0);:T%=t%(ptr%)&FF:off T%=2T%=3:Dir(f$): $:T%=4:Call("Scroll",Sc$,f$): T%=5:"Exec "+f$: #(T%&FE)=6:"Run "+f$+" "+a$: 5T%=8 (l%(ptr%)&FFF00)=&FFB00:Call("",f$,a$): -T%=8 e%(ptr%)=&7B00:"Run "+f$+" "+a$: T%=8:f$: 7T%=9:Key("/SrLoad "+f$+" I|MCH."""+run$+"""|M"): T%=10: Teletext $T%=11:Call("Archive",Ar$,f$): T%=12:"Exec "+f$:""f$:   : OLoad:0,y%)c(1)" Load "f$" to "a$;c(0);:T%=t%(ptr%)&FF:off:a$=u(a$)  a$="VIEW"a$="WORD":T%=4 *a$="BASIC":T%=8 42(T%&FE)=4 a$="":Key("LOAD "+f$+"|M"):*WORD >+(T%&FE)=4:Key("READ "+f$+"|M"):*WORD H)T%=1(T%&FE)=6:"Load "+f$+" "+a$: R*T%=8:Key("LOAD"""+f$+"""|F|M"):21: \ f: p4Dir(f$):"DIR "+f$:f$=1 "$%&",f$):Path$="" z1:0,y%)c(1);" "A$,1-(A$,1)="!"))" "n$(z%)" "a$;(wd%--1)13; Ado%:A$,1)="!":A%=("FN"+A$,2))do%:A$+" "+n$(z%)+" "+a$ :sel%>1:(wd%--1)13;  : *ݤStamp:"Stamp +n$(z%):PROCSetDate:=0 $*ݤtype(a$):a$=u(a$):a$="TEXT":="FFF" .a$="EXEC":="FFE" 8a$="DATA":="FFD" Ba$="BASIC":="FFB" La$="FONT":="FF7" Va$="TELETEXT":="F7C" `a$="ROM":="BBC" j=a$ t>ݤSetType:X%!2=&FFF00000+&100*("&"+a$):A%=file(n$(z%),2) ~JX%!6=e%(z%):X%!14=a%(z%):a$="FFE"a$="FF7":X%!6=-1:A%=file(n$(z%),3) SetDate:=0 -SetDate:(t%(z%)&FF)=2:X%!2=-1:X%!6=-1 1X%?5<>&FF (X%?4 &F0)<>&F0:: No filetype =(X%!2 &FFFFFF)>&FF0000 (X%!2 &FFFFFF)<&FF8000:: I/O /(X%!2 &FFFF00)=&FFDD00:: Master utility !(X%!15 &FF1F)=0:: No date Cdy%=X%?15 31:mn%=X%?16 15:yr%=1981+(X%?16 16)+(X%?15 &E0)/2 (ConvDate(data%,dy%,mn%,yr%,0,0,0,0) 1X%!6=!data%:X%?2=data%?4:A%=file(n$(z%),1): @ConvDate(mem%,d%,m%,y%,hr%,mn%,sc%,cs%):y%<100:y%=y%+1900 y%=y%400 qd%=y%*365.25+m%*30+d%+"120112234455",m%,1)+((y%4)=0)-((y%-1)100)-(m%>2((y%4)=0(y%100)<>0y%=0))+36493 d%>146096:d%=d%-146097 =d%=d%*&41EB:mem%!1=d%+d%:d%=((hr%*60+mn%)*60+sc%)*100+cs% #?mem%=d%:mem%!1=mem%!1+d%256: : (3ݤRename:"Rename "+n$(z%)+" "+a$+"."+n$(z%):=0 2: "": n$Mv%a$,":")=0:do("!Rename"): x,sel%>1(t%(ptr%)&FF)<>2:do("!Copy"): JCall("TreeCopy",Tr$,f$+" "+a$+"."+f$+" A~C"+"~",1+Mv%)+"DEF~PR~S"):  A do All dfs directories  ~C No Confirm  ?D Delete after copying $ E Expand into dfs directories  F Force overwriting  ~P No Pause  R Recurse 4 ~S Not put dfs directories into Subdirectories & ?U copy User account information : B(C) {H {h H {h *ݢ {  pqrrIs2rpqsˠ{L `KEY0 Q%=PAGE|MOLD|MV.6:RUN|M BASIC Files W5 --INOTUPEDWROI*CLOSED*PTR=EXT=Dir:ID:Alloc=Start=  `i HJJJJ V h) ii0L M  M  M  M ` M --INOTUPEDWROI*CLOSED*PTR=EXT=Dir:ID:Alloc=Start=  `i HJJJJ V h) ii0L M  M  M  M ` M  M  M ` M  M ` LNeeds HADFS 5.32 or later ک 륪 2H J  8 -** **)  ..    M : 9 c  9 c  9  9  9 h85kKL `Form160 _ ` a L`Vers1.03Disks  EQUB &0A (EQUS "Baud: 9600 (BAUD=7)" 2 EQUB &0A < EQUB &00 F: PFormat drive Formatting ` `HJJJJ /`h) ii0LH 04 Bad drive) h e) Β  ` /`? H h)Y`,  J  a$La ͕ ,  )  H  H Cah   h  .  . m  m   . 1b)b H )bH)b h)b h3b,Write errorDisk write protected` H  `h /`: &` $0ܽ4b      (֭ i  La? L` K! c*lp 6q60 [ UW_b!#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-[ `H  |  h [   ^ L}  lp $60 [ U60A4 [ W60A4nq ^ ]60nlq ^ [66 [ U66A4 [ W66A4nq ^ ]66nlq ^ [70A4 [ W70A4nq ^ ]Scrol/t H༦UhExploe bFileIfo  p,Filer rI{`2Files Form10 `<`?xlp أ00 ђ 6 y8` 豾)!  (芨H Uh_b!#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-[ `H  |  h [   ^ L}   L`  ] < $0 `%ɣ! L @ &ʩ@ L} L3 0_ / L _ I_ ) ` / L ) L H  hL " ] B^ ] `,_ P " ] L ` i Hh) ` `  \ N+@  A_ Hȱ!   [   \ hee@ + / LL Syntax: 60 (+) ()Not found0)H e he楪`ȱ `V1.1360A4 [ WW_f!#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-[ `H  |  h [   ^ L} _f!#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-[ `H  |  h [   ^ L}   L`  ] < $0 `%ɣ! L @ &ʩ@ L} L3 0_ / L _ I_ ) ` / L ) L H  hL " ] F^ ] `,_ P " ] L ` i Hh) ` `  \ N+@  A_ Hȱ!   [   \ hee@ - / LL Syntax: 60A4 (+) ()Not found0)H e he楪`ȱ `V1.1360A4nlq ^ ]W_f!@x#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-^ `H  |  h ^  _f!@x#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-^ `H  |  h ^   a L   L`  ` < $0 `%ɣ! L @ &ʩ@ L L6 0_ 2 L b Ib ) ` 2 L ) L H  hL % ` Fa ` `,b P % ` L c i Hh) c `  _ N+@ Ab Hȱ!   ^   _ hee@ 0 2 LO Syntax: 60A4nlq (+) ()Not found0)H e he楪`ȱ `V1.1360nlq ^ [W_b!@x#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-^ `H  |  h ^ _b!@x#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-^ `H  |  h ^   a L   L`  ` < $0 `%ɣ! L @ &ʩ@ L L6 0_ 2 L b Ib ) ` 2 L ) L H  hL % ` Ba ` `,b P % ` L c i Hh) c `  _ N+@ Ab Hȱ!  ^  _ hee@ . 2 LO Syntax: 60nlq (+) ()Not found0)H e he楪`ȱ `V1.1366 [ UW_b!#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-[ `H  |  h [   ^_b!#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-[ `H  |  h [   ^ L}   L`  ] B $0 `%ɣ! L @ &ʩ@ L} L3 0_ / L _ I_ ) ` / L ) L H  hL " ] B^ ] `,_ P " ] L ` i Hh) ` `  \ N+@  A_ Hȱ!   [   \ hee@ + / LL Syntax: 66 (+) ()Not found0)H e he楪`ȱ `V1.1366A4 [ WW_f!#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-[ `H  |  h [   ^ L} _f!#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-[ `H  |  h [   ^ L}   L`  ] B $0 `%ɣ! L @ &ʩ@ L} L3 0_ / L _ I_ ) ` / L ) L H  hL " ] F^ ] `,_ P " ] L ` i Hh) ` `  \ N+@  A_ Hȱ!   [   \ hee@ - / LL Syntax: 66A4 (+) ()Not found0)H e he楪`ȱ `V1.1366A4nlq ^ ]W_f!@x#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-^ `H  |  h ^  _f!@x#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-^ `H  |  h ^   a L   L`  ` B $0 `%ɣ! L @ &ʩ@ L L6 0_ 2 L b Ib ) ` 2 L ) L H  hL % ` Fa ` `,b P % ` L c i Hh) c `  _ N+@ Ab Hȱ!   ^   _ hee@ 0 2 LO Syntax: 66A4nlq (+) ()Not found0)H e he楪`ȱ `V1.1366nlq ^ [W_b!@x#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-^ `H  |  h ^ _b!@x#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-^ `H  |  h ^   a L   L`  ` B $0 `%ɣ! L @ &ʩ@ L L6 0_ 2 L b Ib ) ` 2 L ) L H  hL % ` Ba ` `,b P % ` L c i Hh) c `  _ N+@ Ab Hȱ!  ^  _ hee@ . 2 LO Syntax: 66nlq (+) ()Not found0)H e he楪`ȱ `V1.1370A4 [ WW_f!#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-[ `H  |  h [   _f!#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-[ `H  |  h [   ^ L}   L`  ] F $0 `%ɣ! L @ &ʩ@ L} L3 0_ / L _ I_ ) ` / L ) L H  hL " ] F^ ] `,_ P " ] L ` i Hh) ` `  \ N+@  A_ Hȱ!   [   \ hee@ - / LL Syntax: 70A4 (+) ()Not found0)H e he楪`ȱ `V1.1370A4nlq ^ ]W_f!@x#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-^ `H  |  h ^  _f!@x#$%)w*2h4S8W9h:SAR#RCDEIwJRhTXWYhZa-b-^ `H  |  h ^   a L   L`  ` F $0 `%ɣ! L @ &ʩ@ L L6 0_ 2 L b Ib ) ` 2 L ) L H  hL % ` Fa ` `,b P % ` L c i Hh) c `  _ N+@ Ab Hȱ!   ^   _ hee@ 0 2 LO Syntax: 70A4nlq (+) ()Not found0)H e he楪`ȱ `V1.13Scroll/t H༦UW- Scroll 1.11 =========== J.G.Harston 70 Camm Street, Walkley, Sheffield, S6 3TR jgh@arcade.demon.co.uk BScrollb is Scroll 1.11 =========== J.G.Harston 70 Camm Street, Walkley, Sheffield, S6 3TR jgh@arcade.demon.co.uk BScrollb is a scrolling textfile reader. You can scroll upwards and downwards through text files of any length. Extended View highlight codes as used by B*lpb and B*lpSb are acted on to give Bboldb, Iitalicsi, Ssuperscripts, Wwidew, Ysubscripty and underline effects. These can be turned off to give plain View extensions of *bold* and underline. BScrollb will also run on the Archimedes. If there is enough memory, BScrollb uses shadow mode 0, otherwise mode 3 is used. Unless a command line file is given, BScrollb shows the current directory and asks for a filename. At this prompt you can also give B*bcommands to change directory, etc. Once a file is given, it is loaded and displayed. The keys are simple. Cursors move up and down. Pressing BShiftb will jump one screen at a time. Pressing BCtrlb will jump to the ends of the file. Pressing BCOPYb will flip between extended highlights and plain highlights. Pressing BEscapeb will leave. Pressing BPb and BRETURNb will let you print out the file. Before you press BRETURNb a prompt appears telling you the name of the printout command. You can change this here by deleting it and typing in another command, but BScrollb will usually have found a suitable one. The recommended command B*lpb is created with the BMakeLPb program. An example alternative printout command is to press '+' before pressing BRETURNb to double-space the printout, this is useful if your printer does not advance by itself with auto-linefeed. Pressing B4b will display the file in 40 column teletext mode, if BScrollb has been told what program to use. The bottom line of the screen shows the filename of the file being scrolled, a percentage figure showing how far through the file you are, and a reminder of the keys used. BScrollb will take the following command line arguments, which are displayed if B-?b is given as a parameter: B*Scroll (-lp ) (-4 ) |-chan + (-quit )b Bb is the file to display. Alternatively, B-chanb can be used to tell BScrollb to read from an open channel. The Bb is the channel number in decimal and the B+b gives the length of the section of file to use in decimal or hexadecimal preceeded with B&b. There must be no spaces in the B+b part, and the PTR of the open file should be set to the start of the section to read. This can be used to read through a file within an archive. The B-lpb option gives a command to use to print out the file. If this option is not given, then a default printout command is looked for as detailed below. The B-4b option gives a command to use to display the file in 40 column teletext mode. The B-quitb option gives a command to run on exit. If the Bb starts with a B*b, then it is called as a B*bCommand, otherwise it is BCHAINbed. The options must be in lower case, and only the first character is significant. So, for instance, to call BScrollb from another program, you could use the following: B CHAIN "Scroll -4 $.4to7 "+name$+" -quit Menu"b This would run BScrollb and display the file Bname$b, and CHAIN the program I$.3to7i to display in teletext mode. On exit, it would return to the program BMenub. On starting, if no B-lpb option is given, BScrollb looks for an B*lpb printout program. The order it looks for one is: Ilpi, I%.lpi, I%.lp.#i, I%.lp.*i, I$.lpi, I:0.$.lpi. The recommended place to put the B*lpb command is in the library in a subdirectory I%.lpi, with a file I1i being a default general purpose printer. With DFS, the best place would be in the I$i directory. BScrollb consists of the following files: IScrolli - The program Idispi - Controls screen output giving display effects IT/Scrolli - This text file. Version Notes: V1.11 15-Mar-98 Memory-based command line passing, key repeats set. V1.10 01-Feb-97 Long filenames displayed correctly, LFs converted to CR for display. When bottom of the screen is blank, moving back and then forward displays last few lines correctly. Status line stays longer. V1.09 30-Mar-96 Better use of memory V1.08 28-Mar-96 Relocates in very small memory systems V1.06 01-Mar-96 Added -chan option, tweeked command line parsing V1.03 16-Jun-95 Added -4 and -lp option V1.01 10-Jan-95 Added Archimedes capabilities V1.00 01-Jul-94 Initial version  @ W6qlpS Syntax -ȱ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.09MakeLP +a$+"."+n$(z%):=0 2: 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: ";