> Archive 1.16 A FS-Archiver Version 1.16LH. Copyright Acorn Computers 1985 9initialize: Date fetch problem fixed JGH 12/03/2002 c fs(net%):X%=&70:Y%=0:A%=0:R%=osargs% &FF: R%<>net% "Net filing system not present"'': ( spaces%=5 2J title$="File server directory archiver":12'''title$'ĩtitle$,"*")'' < :" at ";: FD "Archives currently selected directory"'"and sub-directories"' Z preservecontext dq '"Select filing System for archive"40)"(A=Adfs, D=Disc)"'" :";:dfile$=:"AaDd",dfile$):f%="Aa",dfile$) n7 f% dfile%=adfs%:"Adfs" dfile%=disc%:"Disc" x\ :" at ": :fs(dfile%):restore_disc:#0:fs(net%):#0:X%=homecontext(csd%):   '"Pathname of"; 1 command("directory to archive.",) 0  $top%=$var%+"." 4 unpriv($var%) '"Insufficient access":0  , $path%=$var%:length%=$path%:sortdates C $path%<>"":new%=open(path%,&40):csd%=newcontext(new%,csd%)  off%=offset @ $string%="DFS drive": dfile%=adfs% $string%="A"+$string%  " command($string%,) 0 ( dfile%=disc% "0123",$var%) 0 dfile%=adfs% "0145AaBbEeFf",$var%) ; "AaBbEeFf",$var%) T%=($var% &5F)-&11:$var%=T%  d_drive%=($var%) "P fs(dfile%): dfile%=adfs% oscli("DIR :"+$var%) oscli("Dr. :"+$var%) ,Y X%=&70:Y%=0:A%=0:R%=osargs% &FF: R%<>dfile% "Filing sytem not present": Dd@ 6> compact '"Please use a compacted ADFS disc.": d\@ @@ command("Name of archive file ",) D@A $init%=$var% T* h%=graber(init%): h% :sin%=0:d\@ Y =0 ^5 fs(net%):'"Beginning archive ..."':q%=archive h& '"Directory "$path%" archived."' r= fs(dfile%):X%=w_buffer(wbuff%):restore_disc:fs(net%) | X%=homecontext(csd%)  q% "Errors detected"'  A%=229:X%=0:Y%=0:osbyte%  :  archive " nodata%,complete%,index%,c%  complete%=:index%=0 ' readname(index%) error(0):= # nodata%=cb%!5: nodata% TpB I off%= $name%=lcase($name%): $name%>=$offname% off%= TfB  type%=examine(name%,cb1%) S days%=cb1%?1531:months%=cb1%?1615:years%=1981+(cb1%?1616)+((cb%?15&E0)2)  name C type%<>directory header(path%,name%) nodata%=0: TfB + type%=file copydata(name%): TfB # down_a_dir(name%):c%=archive  up_a_dir  c% complete%= & index%=index%+1 0 nodata% dLA :=complete% D: Ndown_a_dir(name%) X new% b spaces%=spaces%+3 l6 $path% path%?length%=".":length%=length%+1 v i%=0   path%?length%=name%?i%  i%=i%+1:length%=length%+1 ' name%?(i%-1)=&D:length%=length%-1 6 new%=open(name%,&40):csd%=newcontext(new%,csd%)  : up_a_dir  spaces%=spaces%-3  oldlength%=$path% : :length%=length%-1:(length%?path%=".") length%=0  path%?length%=&0D = newlength%=0: length% blength%=length%+1 blength%=0   & name%?newlength%=path%?blength% 2 newlength%=newlength%+1:blength%=blength%+1   blength%=oldlength% * name%?newlength%=&0D 4\ csd%=homecontext(csd%): $path%="" new%=open(path%,&40):csd%=newcontext(new%,csd%) > H: Rݤreadname(index%) \ i%,q% f cb%!1=name% p" cb%!5=1: read one file only z cb%!9=index%  X%=cb%:Y%=X% &100  A%=8 ( q%=call(osgbpb%): read filenames  cb%!5 d^C  i%=1  0 (i%?name%=" ") (i%=11) i%?name%=&D  i%=i%+1  i%=12:$name%=$(name%+1) =q% : preservecontext r ?buffer%=6:X%=buffer%:Y%=X% &100:A%=&13: osword%:urd%=buffer%?1:csd%=buffer%?2:lib%=buffer%?3:source%=csd%  .: 8ݤnewcontext(new%,csd%) B< ?buffer%=7:buffer%?1=urd%:buffer%?2=new%:buffer%?3=lib% L- X%=buffer%:Y%=X% &100:A%=&13: osword% V4 csd%<>source% csd%<>lib% csd%<>urd% #csd% ` csd%=new% j =csd% t: ~ݤhomecontext(csd%) ? ?buffer%=7:buffer%?1=urd%:buffer%?2=source%:buffer%?3=lib% - X%=buffer%:Y%=X% &100:A%=&13: osword% ( csd%<>source%:#csd%:csd%=source%  =csd% : ݤexamine(n%,block%)  !block%=n% 4 X%=block%:Y%=X% &100:A%=5:r%=(osfile%) &FF =r% :  ݤopen(n%,a%)  X%=n%:Y%=X% &100  A%=a% ($ call(osfind%) error(0):= 2 =?tempa <: Fclose(h%) P, Y%=h%:A%=0: call(osfind%) error(0) Z d: n name x spaces%); S r%=directory spaces%-5)"Dir. "$name%:days%=std%:months%=stm%:years%=sty% : r%<>file range_dates spaces%)$name%;:size  :  size  A%=5:X%=cb%:Y%=X% &100  !cb%=name%  q%=call(osfile%)  @%=&A0A A <25 30)h0(cb%!&A,6); (+6)-(+6)5)h0(cb%!&A,6) C " "+d0(days%,2)+"/"+d0(months%,2)+"/"+d0(years%,4)  #ݤd0(A%,N%)="00000000"+A%,N%) #ݤh0(A%,N%)="0000000"+~A%,N%) : ݤunpriv($string%) - !buffer%=&04003000:$(buffer%+7)=$string% - X%=buffer%:Y%=X% &100:A%=&14: osword% "=(buffer%?&F="P") ,: 6ݤdfs_size(d_drive%) J dfile%<>adfs% X%=buffer%:Y%=X% &100:A%=&71: osword%:size_left%=!buffer%: size_left%>&10000 size_left%=size_left%-&10000:=size_left% "Not enough room on ADFS disc.":=0 T# r_sector(d_drive%,1,1):=0 ^ dfs_start%=?(buffer%+&F):dfs_start%=(?(buffer%+&E) &3)*&100+dfs_start%:dfs_start%=dfs_start%*&100: dfs_start%=0 dfs_start%=&200 h} dfs_length%=?(buffer%+&C):dfs_length%=?(buffer%+&D)*&100+dfs_length%:dfs_length%=(?(buffer%+&E) &30)*&1000+dfs_length% r/ d_sz%=buffer%?7:d_sz%=buffer%?6*&100+d_sz% | size_left%=d_sz%*&100-(dfs_length%+dfs_start%):size_left%=(size_left% &100*&100): size_left%<&480 "Not enough room on DFS disc.":=0 size_left%=size_left%-&480 ) sin%=(dfs_length%+dfs_start%) &100  ?(buffer%+&C)sin%=sin%+1 =size_left% : sortdates  error%=  2 '"Start date (dd/mm/yyyy)"'" :";:""start$ < start$=-1 std$="01":stm$="01":sty$="1981": THG 5 std$=start$,start$,"/")-1): std$>2 T\G / start$=start$,start$,"/")+1,(start$)) 5 stm$=start$,start$,"/")-1): stm$>2 T\G ? sty$=start$,start$,"/")+1,(start$)): sty$>4 T\G - std%=(std$):stm%=(stm$):sty%=(sty$)  > sty%<100 sty%=1900+sty%: sty%<1980 sty%=sty%+100 C std%<1 std%>31 stm%<1 stm%>12 sty%<1981 error%=  error%= & : 0 error%= : D. '"End date (dd/mm/yyyy)"'" :";:""end$ N: end$=-1 edd$="31":edm$="12":edy$="2108": t@G X1 edd$=end$,end$,"/")-1): edd$>2 tTG b' end$=end$,end$,"/")+1,(end$)) l1 edm$=end$,end$,"/")-1): edm$>2 tTG v9 edy$=end$,end$,"/")+1,(end$)): edy$>4 tTG - edd%=(edd$):edm%=(edm$):edy%=(edy$) > edy%<100 edy%=1900+edy%: edy%<1980 edy%=edy%+100 C edd%<1 edd%>31 edm%<1 edm%>12 edy%<1981 error%=  error%=  :  edy% sta tempa:\ return A H= .restore lda copy:sta brkvec:lda copy+1:sta brkvec+1:rts R \ \. .brkcode ldy#0:lda (&FD),Y:sta error_flag f ldx sp:txs:iny p9 .loop lda (&FD),Y:beq exit:sta errmsg,Y:iny:bne loop z+ .exit lda #13:sta errmsg,Y:jmp restore  .indirect jmp (go)  ]   : initialize e osfind%=&FFCE:osgbpb%=&FFD1:osargs%=&FFDA:osfile%=&FFDD:osword%=&FFF1:osbyte%=&FFF4:oscli%=&FFF7  file=1:directory=2  sin%=0  @%=3:15  brkvec=&202:oldbrk=!brkvec  sp=&70:go=&71:copy=&73 @ tempa=copy+2:tempx=tempa+1:tempy=tempx+1:error_flag=tempy+1 D net%=5:adfs%=8:disc%=4:seq%=1:size_left%=0:to_write%=0:fsize%=0 $ size%=&1000 . cb% 30,cb1% 30,name%50,errmsg 30,path% &100,space% &100,var% &100,top% &30,string% &100,n% &100,init% 50,offname% &80,buffer% 256 8/ Z%-1:size%=-Z%-&B00:size%=size% &FF00 B wbuff% size% G C%=cb% L2 days%=0:months%=0:years%=0:split%=:source%=0 V initmc j t: ~oscli($string%)  X%=string%:Y%=X% &100 call(oscli%) error(0)  : ݤcall(addr) ( ?go=addr:go?1=(addr &FF00) &100 trap =?error_flag<>0 error(trap%) ' ?error_flag=trap% $(errmsg+1)  : ݤerror  ?error_flag=0 = # ?error_flag>&A8 =?error_flag 8 ?cb%=10:X%=cb%:Y%=X% &100:A%=&13: osword%:=cb%?1 (: 2ݤcommand(string$,atype%) < fflag%,A$:fflag%= F$ $var%="":'string$'" :";:""A$ P( A$,1)=" " A$=A$,A$-1): DPJ Z" A$=" " A$=A$,2): DZJ d $var%=A$ n< $var%,1)="*" oscli($var%):preservecontext: DFJ x/ $var% fflag%= atype% fflag%= } fs(currentfs%) =fflag% : ݤheader(path%,name%) lb%  range_dates = i% F $path%+$name%>=200 "String too long - Unable to copy.":= , lb%=$name%: $path%:lb%=lb%+1+$path% ) size_left%<(lb%+19) split_it() @ $path%:i%=0 $path%-1:bput(path%?i%)::bput(".") ' i%=0 $name%:bput(name%?i%):  bput(type%):bput(seq%) i%=2 18:bput(cb1%?i%): # size_left%=size_left%-(lb%+19) = :  fs(f%) " f%=4 $string%="Disc" , f%=5 $string%="Net" 6 f%=8 $string%="Adfs" ; currentfs%=f% @' X%=string%:Y%=string%&100:oscli% J T: : copydata(name%) % range_dates "dates exit":  from%=open(name%,&40) ( from% "Unble to copy "$name%:  fsize%=cb1%!10 $ header(path%,name%) TRL  M size_left%-2=tamount%:getput(tamount%,from%):1: X tamount%=tamount%-(size%-bp%):getput(size%-bp%,from%): w_buffer(wbuff%):: "Unable to ensure buffer, archive aborted": HERE ]& tamount%<0:"overflow error ": b tamount%=0 g l v getput(amount%,nethandle%) < cb%?0=nethandle%:cb%!1=wbuff%+bp%:cb%!5=amount%:cb%!9=0 % bp%+amount%>size%:"aborting": ! bp%+amount%<0:"aborting": ' X%=cb%:Y%=X% &100:A%=4: osgbpb%  bp%=bp%+amount%  PUT TO DISC " size_left%=size_left%-amount%  fsize%=fsize%-amount%  : split_it(split1%) 2 split1% bput(type%):bput(seq%):split%= < w_buffer(wbuff%):"Unable to ensure buffer": HERE  fs(dfile%)  restore_disc  seq%=seq%+1 4 $string%="DFS": dfile%=adfs% $string%="ADFS"  2 command("New "+$string%+" drive",) 0 ( dfile%=disc% "0123",$var%) 0 dfile%=adfs% "0145AaBbEeFf",$var%) *; "AaBbEeFf",$var%) T%=($var% &5F)-&11:$var%=T% 4Y dfile%=disc% ''"Please insert disc and press RETURN";::resp$=:resp$=&0D:'' > d_drive%=($var%) HB dfile%=adfs% oscli("DIR :"+$var%) oscli("Dr. "+$var%) R" r%=graber(init%): r% TBM W fs(net%) p z: ݤrange_dates ( (years%edy%) = F years%=sty% (months%edm% (months%=edm% days%>edd%)) =  = : $: . ݤoffset 8 off% Boscli(".") LD command("First object to archive",) DLN $offname%=$var% V4 $offname%="" $offname%="." off%= off%= `( off% $offname%=lcase($offname%) j =off% t: ~ݤlcase($string%)  chr%,X% X%=0 ($string%)-1 chr%=string%?X% [ (chr%<"A") (chr%>"z") ((chr%>"Z")(chr%<"a")) string%?X%=(chr% &5F):  =$string% :  ݤcompact  compact%:compact%=  dfile%=disc% =compact% fs(adfs%) 8?cb%=0:cb%!1=buffer%:cb%!5=&1000008:cb%?9=1:cb%?&A=0 (X%=cb%:Y%=X% &100:A%=&72: osword%  buffer%?&FE=3 compact%=  =compact%  r_sector(D%,S%,N%)  =sector(&53) ( w_sector(D%,S%,N%) 2 =sector(&4B) < sector(W%) FC ?C%=D%:C%!1=buffer%:C%?5=3:C%?7=S%10:C%?8=S% 10:C%?9=&20+N% P C%?6=W% Z^ A%=&7F:X%=C%:Y%=X% &100:osword%: C%?10 "Disc error ";~C%?10" Writing "N%" at "S%:=0 d = n x graber(n%) }< examine(init%,cb1%) '$init%+" already exists.":=0 * grab%=(dfs_size(d_drive%)) &FFFF00  grab%=0:=0 h%=open(n%,&80) ( dfile%=adfs%:adfshandle%=h%:dpO  h%<>0:#h%:=0 # r_sector(d_drive%,1,1):=0 . new_sin%=buffer%?&F+(buffer%?&E 3)*&100 E sin%<>new_sin%: "Please use a blank or compacted DFS disc":=0 : E%=buffer%?&E:E%=(E% &CF) ((grab% &1000) &30)  buffer%?&E=E%  buffer%?&D=(grab% &100)  buffer%?&C=(grab% &FF) # w_sector(d_drive%,1,1):=0  saved_size%=0  bp%=0:fsin%=sin%  =size_left%   restore_disc  fs(dfile%) # dfile%=adfs%:#adfshandle%: " sin%=0: ," r_sector(d_drive%,1,1): 6. new_sin%=buffer%?&F+(buffer%?&E 3)*&100 @ new_sin%<>sin%: J@ E%=buffer%?&E:E%=(E% &CF) ((saved_size% &1000) &30) T buffer%?&E=E% ^$ buffer%?&D=(saved_size% &100) h# buffer%?&C=(saved_size% &FF) r# w_sector(d_drive%,1,1):=0 |   bput(TA%) H size%-bp%<>0 : w_buffer(wbuff%) "Unable to ensure buffer": wbuff%?bp%=TA%:bp%=bp%+1:   w_buffer(buffer%) ; fs(dfile%): dfile%=adfs%:adwrite(buffer%,bp%):dCP " Q%=((bp%-1) 256)+1:F%=fsin%   T%=10-(F% 10) c T%>Q% 1: w_sector(d_drive%,F%,T%):Q%=Q%-T%:F%=F%+T%:buffer%=buffer%+&100*T%:0::1:=0 . Q%=0: w_sector(d_drive%,F%,Q%):=0  fsin%=F%+Q%  saved_size%=saved_size%+bp%  fs(net%)  bp%=0  =   adwrite(from%,amount%) 7 ?cb%=adfshandle%:cb%!1=from%:cb%!5=amount%:cb%!9=0  X%=cb%:Y%=X%256:A%=2  osgbpb%