> UnImg v1.12 @ctrl%127,name%79,zp%9:A$=OS_GetEnv+" ":os%=32:Win_TextIO :quit$=cl(" -qu",1):debug%=cl("-de",0):::exit() (Tcl("-help",0):"UnImg v1.12 (C)J.G.Harston 2017";:A$="-?":" Single disk only" 2fcl("-?",0):"Syntax: UnImg infile -d outdir -fs type -dsd -s -e -i -X -q -quit command":exit(0) 17):Close_All:exit() n:X%=ctrl%:Y%=X%256:fln%=11:fmx%=-1:(os%-24):fln%=256 x>A%-1:max%=-A%-2048+4096*(>&FFFF):mem% max%:wr%=2:rd%=4 cin$="":"File to extract from: "in$:"Image type:"11type$:dst$="":"Destination path:"5dst$ Bin%=f_openin(in$):in%=0:"File '"in$"' not found":exit(214) ;type$="":fstype%=chkdiskfstype%="HADFS",uc(type$)) @fstype%=0:#in%:in%=0:"Unrecognised disk image":exit(225) *fstype%<2:tsz%=10:dsz%=&300:root%=&47 *fstype%=2:tsz%=16:dsz%=&500:root%=&02 *fstype%>2:tsz%=10:dsz%=&200:root%=&00 dir% dsz%-1 /savedir(root%,dst$):#in%:in%=0:exit(0): ݤchkdisk 6f_gbpb(rd%-1,in%,mem%,4,&201):!mem%=&6F677548:=2 7f_gbpb(rd%-1,in%,mem%,8,&4610):!mem%=&29432800:=1 =3 0mkdir:dst$<>"":f_cdir(dst$):dst$=dst$+d$  savedir(csd%,dst$) "&num%,r0%,f%:mkdir::RdDir(csd%) ,@num%:f%=fn0%::num%=num%-saveobject(f%):f%=f%+fsz%:num%<1 6Lcsd%=0:fstype%<2:csd%=dir%!14&FFFF:(dir%?12)>127:csd%=dir%!23&FFFFFF @ csd%=0: Jݤsaveobject(fptr%) Tfn$,lf$,ld%,ex%,nm% ^4N%=0::A%=dir%?(fptr%+N%)127:A%>32:lf$=lf$+A% hN%=N%+1:N%=10A%<33 rlf$="":fstype%<2:=0 |lf$="":=num% Nfstype%>2:lf$=(dir%?(fptr%+7)127)+"/"+lf$,7):(lf$-5)=32:lf$=lf$,3) "A%=(fstype%>2)(lf$,2,1)="/") %A%:sub%:lf$=lf$,1)+"."+lf$,3) %A%:ext%:lf$=lf$,3)+"/"+lf$,1) )getattrs:fn$=f_name(fn_unbbc(lf$)) ;vb%:lf$(11-lf$)h0(ld%,8)" "h0(ex%,8)" "h0(nm%,6) =attr%256:savedir(sec%,dst$+fn$):RdDir(csd%)savefile setattrs:=1 savefile ,A%=fn$,d$):A%:f_cdir(dst$+fn$,A%-1)) EX%!2=ld%:X%!6=ex%:X%!10=0:X%!14=nm%:A%=file(dst$+fn$,7):len%=nm% :out%=(dst$+fn$)::cnt%=len%:len%>max%:cnt%=max%-256 CRdData(mem%,sec%,(cnt%+255)256):f_gbpb(wr%,out%,mem%,cnt%,0) Asec%=sec%+(cnt%+255)256:len%=len%-cnt%:len%<1:#out%:out%=0  getattrs &2:dfsattrs: 0?ld%=dir%!(fptr%+10):ex%=dir%!(fptr%+14):nm%=dir%!(fptr%+18) :3sec%=dir%!(fptr%+22)&FFFFFF:attr%=attr(fptr%) DHfstype%=2:attr%=(attr%3)+(attr%4)*2+(attr%8)*32+(attr%&1E0)2: NAattr%=attr%&33:usr%=dir%?19(dir%?1816)(dir%!20&FFFF0000) XHmdate%=dir%!(fptr%+26):mtime%=dir%!(fptr%+28):cdate%=dir%!(fptr%+30) bdir%?12>127: lnm%=nm%&7FFFF vsec%=sec%&FFFF  mdate%=dir%!(fptr%+20)&FFF8 ,mdate%=mdate%((dir%?(fptr%+9)&80)128) ,mdate%=mdate%((dir%?(fptr%+13)&C0)32) Hcdate%=mdate%:ld%=(ld%&3FFFFFFF):(ld%&20000000):ld%=ld%&C0000000  dfsattrs 9ld%=dir%!(fptr%+256)&FFFF:ex%=dir%!(fptr%+258)&FFFF 4nm%=dir%!(fptr%+260)&FFFF:sec%=dir%?(fptr%+263) A%=dir%!(fptr%+261)&FF00 9ld%=ld%((A%&0C00)*64):ld%>&2FFFF:ld%=ld%&FFFF0000 8ex%=ex%((A%&C000)*4):ex%>&2FFFF:ex%=ex%&FFFF0000 0nm%=nm%((A%&3000)*16):sec%=sec%(A%&0300) +attr%=&33:dir%?(fptr%+7)>127:attr%=&19   setattrs GX%!2=ld%:X%!6=ex%:X%!14=attr%&7F:X%!15=mdate%:A%=file(dst$+fn$,1)  inf%=0:(os%-24)=0: *Hinf$=fn_unbbc(lf$)+s$+"inf":(os%-24)=0:inf$=lf$,8)+s$+"inf",10) 48inf$=dst$+inf$:(os%-24)=0:inf$=45:inf$="@."+inf$ >5fstype%>2:lf$,2,1)=47:lf$=lf$,1)+"."+lf$,3) H*A$=lf$+" ":A$<11:A$=A$+10-lf$," ") RCA$=A$+h0(ld%,8)+" "+h0(ex%,8)+" "+h0(nm%,6)+" "+h0(attr%,2) \full%:fstype%<2:A$=A$+" "+h0(mdate%,4):dir%?12>127:A$=A$+" "+h0(mtime%,6)+" "+h0(cdate%,4)+" "+h0(cdate%,6)+" "+h0(acc%,4)+" "+h0(aux%,4) fSA$=A$+13+10:out%=f_openout(inf$):A%=1A$:#out%,A$,A%,1)::#out%:out%=0 p7A%=file(inf$,5):X%!3=X%!3&FFFFFF:A%=file(inf$,2) z Uݤattr(f%):a%,n%:n%=07:a%=a%2+(dir%?(f%+n%)&80)::=a%((dir%?(f%+8)*2)&100) RdDir(sect%)  RdData(dir%,sect%,dsz%256) 1fstype%>2:fn0%=8:fsz%=8:num%=(dir%?&105)8: 'fstype%=2:fn0%=5:fsz%=26:num%=47: Mfstype%<2:fn0%=24:fsz%=24:num%=(dir%?12)31:dir%?12>127:fn0%=32:fsz%=32  RdData(ad%,sc%,nm%):n% *n%=0nm%-1:rd(ad%+256*n%,sc%+n%):: rd(ad%,sc%):t%,s%,h% Ldsd%:t%=sc%tsz%:s%=sc%tsz%:h%=t%80:t%=t%80:sc%=s%+h%*tsz%+t%*tsz%*2 &f_gbpb(rd%-1,in%,ad%,256,sc%*256)  #ݤfn_unbbc(B$):(os%-24)=0:=B$ B%:A$="#?./$<^>&+@=%; " !A%=1B$:B%=A$,B$,A%,1))-1 $4B%>:B$=B$,A%-1)+A$+"_",(B%1)+1,1)+B$,A%+1) . :=B$ 8$ݤh0(A%,N%):="0000000"+~A%,N%) BClose_All:*EXEC L"in%=in%:in%:A%=in%:in%=0:#A% V'out%=out%:out%:A%=out%:out%=0:#A% ` j:ݤOS_GetEnv:A$,A%,X%,Y%:X%=1:os%=((&FFF4)&FF00)256 tMos%>31:>&FFFFF:X%256:ș"GetModuleFileName",0,X%,255:run$=$$X%:=@cmd$ ~\A%=(>&FFFF)&900:?(P-3):A%=((>&9FFF)A%)((&1400-)(A%=0))A%=((A%-&500)&200)&FFF iA$=$(-&E00+A%):A%=0:run$=A$:ș16A$,,A%:ș72,"",A%:A$=A$,1+A$+" "," ",1+A$," "))):A$=0:A$=run$ *Y%=-10:A$=" "+A$:A$=A$,2):A$<>32 4Y%:A$=34:A%=A$,"""",2)+1Y%:A%=A$+" "," ") CY%:run$=A$,1-(A$=34),A%-1+2*(A$=34)):run$<>"":A$=A$,A%+1)  :=A$ $os(A$):A$=42:A$A$<>"":A$  Fexit(A%):"FX1,"+(A%255):quit$=quit$:A$=quit$:quit$="":os(A$) >&FFFFF:ȘA% os%<6:*Quit  cݤcl(l$,n%):l$="":A$=s(A$):A$=34:A%=A$+" "" ",""" ",2):l$=A$,2,A%-2):A$=s(A$,A%+1)):=l$ "":A%=A$,l$):A%:A$=s(A$,A%-1)+A$,A$," ",A%)+1))+" ":= n%=0:l$<>"":= %A%=" ",l$=32)+A$,l$):A%=0:="" ('A$=A$,A%-1)+s(A$,A$," ",A%)+1)) 2Cl$=32:l$=A$,A%):A$=A$,A%-1):=l$,1-(l$=34),l$+2*(l$=34)) 34:l$=A$,A%,A$+" "," ",A%)-A%):A$=A$,A%-1)+A$,A%+l$+1):=l$ FJl$=A$,A%+1,A$+""" ",""" ",A%+1)-A%-1):A$=A$,A%-1)+A$,A%+l$+3):=l$ P/ݤs(A$):A$,1)=" ":A$=A$,2):A$,1)<>" " Z+A$,1)=" ":A$=A$,A$-1):A$,1)<>" " d=A$ nݤuc(A$):B$:A$="":="" x5B$=B$+(A$((A$<"@")&DF)):A$=A$,2):A$="":=B$ Vf_gbpb(A%,chn%,addr%,num%,ptr%):?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:&FFD1: ݤf_openin(A$)=(A$) ݤf_openout(A$)=(A$) ݤf_name(A$)=A$ f_cdir(A$):"cdir "+A$: Bݤfile(A$,A%):$name%=A$:?X%=name%:X%?1=name%256:=(&FFDD)&FF   A{   "  g{N{LQ%=PA.:CH."* BASIC f{Z{{{檤`T{T{`` g{,z0ȱ,a{` ee  { {,a{쩏 `O