> MDRCat 1.15  (C) J.G.Harston  List files in MDR files ( v1.11 2L v1.15 Added -dec option, cleaned filename, finds length of Print files <: F! :Close_All::exit(): PNseclen%=543: ctrl% 31,secbuf% seclen%-1,type$(4):in%=0:X%=ctrl%:Y%=X%256 Z%A$=OS_GetEnv:os%>31:Win_TextIO d.ro$="":A$="":"Input microdrive file: "A$ n2A%=A$+" "," "):A%:in$=A$,A%-1):A$=A$,A%+1) x2A%=A$+" "," "):A%:ro$=A$,A%-1):A$=A$,A%+1) Ain$="-?":"Syntax: MDRCat (-hex|-dec)":exit(0): @in%=f_openin(in$): in%=0:"'"in$"' not found":exit(214): Xtype$(0)="Print":type$(1)="Basic":type$(2)="Numb ":type$(3)="Char ":type$(4)="Bytes" : ro%=ro$,2)="-r" hx%=ro$,2)<>"-d" Wro%=0:"Filename Type "(2+hx%)"Len"(2+hx%)"Start"(2+hx%)"Extr"(2+hx%)"Line"; 1ro%: "Filename Start Len Extr Line"; ptr%=0::Header V secbuf%?16=0 ((secbuf%?18 secbuf%?15) 2)=2 (secbuf%!17 &FFFF)<>0:Disp # #in% #in%+seclen%>#in%: #in%:in%=0:exit(0): :  Header Bgbpb(4,in%,secbuf%,40,0):#in%=#in%+seclen%-40:secbuf%?29=13  ": , Info 6f$=$(secbuf%+19) @type% =secbuf%?30 Jnum% =secbuf%!31 &FFFF Tstart%=secbuf%!33 &FFFF ^exec% =secbuf%!35 &FFFF hline% =secbuf%!37 &FFFF r (secbuf%?15 4): |/type%=-1:start%=-1:exec%=-1:line%=-1:num%=0  ptr%=#in%:#in%=0::Header T $(secbuf%+19)=f$: (secbuf%?15 2)=2:num%=secbuf%?16*512+(secbuf%!17 &FFFF) ! #in% #in%+seclen%>#in% #in%=ptr%  :  Disp Info:'fn_clean(f$);" "; [ ro%:hi(type%)h0(start%,4)"+"h0(num%,4)" "hi(type%)h0(exec%,4)" "h0(line%,4);: 6 type%<4:type$(type%+1); " &"h0(type%,2)" "; J hx% :" "h0(num%,4)" "h0(start%,4)" "h0(exec%,4)" "h0(line%,4); F hx%=0:" "d(num%,5)" "d(start%,5)" "d(exec%,5)" "d(line%,5);  : ݤfn_clean(A$): A$="":="" L A%=1 A$: A$,A%,1)<" " A$,A%,1)>"~":A$=A$,A%-1)+"_"+A$,A%+1) & :=A$ 0: :+ݤhi(A%): A%<3:=h0(A%,2) =h0(-1,2) D#ݤh0(A%,N%)="0000000"+~A%,N%) N!ݤd(A%,N%)=" "+A%,N%) X: bClose_All:*EXEC l"in%=in%:in%:A%=in%:in%=0:#A% v : !ݤf_openin(A$)=(f_name(A$)) Vݤf_name(A$):os%>31:A%,B%:B%=A%:A%=A$,"\",A%+1):A%=0:A$,".",B%)=0:A$=A$+"." =A$ : #gbpb(A%,chn%,addr%,num%,ptr%) ??X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:<&FFFFF: &FFD1: A%=1A%=3:#?X%=X%!9 5:A%=1A%=2:#?X%,?X%!1 A%=3A%=4:?X%!1=#?X% 5X%!1=X%!1+1:X%!5=X%!5-1:(#?X% A%>2) X%!5<1: : BݤOS_GetEnv:A%,X%,Y%,P%,A$:X%=1:os%=((&FFF4)&FF00)256:X% d!=&D7C1C7C5:run$=ARGV$(0):ARGC:A%=1ARGC:A$=A$+ARGV$(A%)+" "::=A$,A$-1)!=&D7C1C7C5:="" _>&FFFFF:X%256:A$=@cmd$:ș"GetModuleFileName",0,X%,255:run$=$$X%:Y%=@lib$,@tmp$)=0:P%=  P%=0:>&FFFF:run$=$&8100:ș"OS_GetEnv"A$,,A%:ș"OS_WriteEnv","",A%:A$=A$,1+A$+" "," ",1+A$," "))):P%=:Y%=:A$," ")=0:A$=run$+" " P%=0:P%=X%:[OPT 0:NOP:]:P%=?X%:Y%=:P%=&EAP%=18:A$=$&600 P%=0:A$=$(-&300)P%=&A0:A$=$(^@%-256):Y%=?(-2)64P%=&90:A$=$&100:Y%=!&200  KA$=" "+A$:A$=A$,2):A$<>32:A$=34:A%=A$,"""",2)+1A%=A$+" "," ") *(Y%:run$=A$,A%-1):A$=A$,A%+1):Y%=0 4A$<>32:=A$ >: H&os(A$):A$=42:A$ A$<>"":A$ R \: fFexit(A%):"FX1,"+(A%255):quit$=quit$:A$=quit$:quit$="":os(A$) p>&FFFFF:Ș A% z : Win_TextIO 0ș "GetStdHandle",-10 @hfile%(1):*INPUT 13 1ș "GetStdHandle",-11 @hfile%(2):*OUTPUT 14 &ș "SetConsoleMode",@hfile%(1),0: :