> MMCEdit 0.12  GoMMC Manipulation : (,&87:ver$="0.12":init: err:end: 2 menu:end: <: F/init: ctrl%31,mem%511:X%=ctrl%:Y%=X%256 P23;2,53;0;0;0: Z: dݤerr:=17:CloseAll:=-1 n30,23);::CloseAll:" - press SPACE";:A%=:= x-CloseAll:in%=in%:in%:A%=in%:in%=0:#A% 'out%=out%:out%:A%=out%:out%=0:#A%  end:: : ) menu:title("GoMMC Editor"):_LINE MMC(&0201,0,0,0):size%=X%!6 AMMC_Cat:12;h0(4,6)" "h0(free%,8),6)" Free space":_LINE @" (A)dd (D)elete (M)odify (R)ename"'" (L)oad (S)ave (Q)uit" '_LINE::A$=:A$>"`":A$=(A$-32) <"ADMRLSQ*"+13,A$):13:A$="*":"*"A$:A$:A$="":":"; A$="A":Add A$="D":Del A$="M":Mod A$="R":Ren A$="L":Load A$="S":Save "$A$="Q":" Quit? ";:笤yn:A$="*" ,A$<>"":=A$="Q" 6: @ =================== J MMC access routines T =================== ^MMC(act%,addr%,mmc%,num%) hQ!X%=&1212:X%!2=act%:X%?4=&01:X%!6=addr%:X%!10=mmc%:X%!14=num%:A%=&B0:&FFF1: r: |LݤMMC_type(A%):A%<4:="NONEFSIMTOOLDISK",A%*4+1,4) =" "+h0(A%,2)+" " :  ========================  List the GoMMC catalogue  ========================  MMC_Cat %" No Type Start Length Name" #mem%!0=0:MMC(&4003,mem%,0,512) Lstr(mem%,8)<>"GoMMCCat":free%=-1:csz%=-1:" **No global catalogue**": (csz%=mem%!16:free%=mem%!20:csz%=0: Bn%=0csz%-1:MMC(&4003,mem%,&200+64*n%,64):" "d(n%+1,2)" "; MMC_type(mem%?0); Q" "h0(mem%?1,2)" "h0(mem%!5,6)" "h0(mem%!8,8),6)" "str0(mem%+16),14)8 : :   &MMC_List 0!ctrl%=ctrl%:ctrl%=0:ctrl%31 :mem%=mem%:mem%=0:mem%511 DX%=ctrl%:Y%=X%256 N/MMC(&40,mem%,0,512):csz%=mem%!16:csz%=0: X/n%=0csz%-1:MMC(&4003,mem%,&200+n%*64,64) bth0(mem%?0,2)" "h0(mem%?1,2)" "h0(mem%!2,4)" "h0(mem%!4,8)"+"h0(mem%!8,8)" "h0(mem%!12,8)" "str0(mem%+16) l: v:  =======================  Add an entry to the MMC  ======================= =ݤMMC_Add(name$,size%,type%,subt%):size%=(size%+511)-512 #mem%!0=0:MMC(&4003,mem%,0,512) "GoMMCCat":" **No global catalogue**":=0 /csz%=mem%!16:free%=mem%!20:add%=free%-size% 1add%-&200<&240+csz%*64:" **GoMMC full**":=0 ?!mem%=type%:mem%?1=subt%:mem%!4=add%:mem%!8=size%:mem%!12=0 '$(mem%+16)=name$:mem%?(16+name$)=0 :MMC(&4103,mem%,&200+64*csz%,64): Add catalogue entry ;MMC(&4103,mem%,add%-512+16,64): Add object entry copy '$mem%="GoMMCEnt":mem%!8=0:mem%!12=0 4MMC(&4103,mem%,add%-512,16): Add object header  ,MMC(&4003,mem%,0,512):mem%!20=add%-&200 @mem%!16=csz%+1:MMC(&4103,mem%,0,512): Update global header  =add% *: 4 ================= > Program functions H ================= R: \TAdd:" Add an GoMMC entry:"'" Type:"'" Subt:"'" Length:"'" Name:":11,11,11,11 f p<9,9);:""type%:9,-1);type%;" "MMC_type(type%)" " z)9,9);:""subt%:9,-1);subt%;" " <9,9);:"&"len$:len%=("&"+len$):10,-1);h0(len%,8) 19,9);:""name$:9,-1);name$;(20-name$) 9" Correct? ";:A%=yn:A%:11;(20):11,11,11,11,11 1A%:A%=MMC_Add(name$,len%*256,type%,subt%): : #Del:" Delete an entry";yn: #Mod:" Modify an entry";yn: #Ren:" Rename an entry";yn: : "Load:" Load data into MMC:" $" Filename:"'" Start:":11,11: =11,9);:""name$:A%=-1:11,A%)name$(20-name$)0,A%) @11,9);:"&"add$:add%=("&"+add$):12,-1)h0(add%,6)" " 3" Correct? ";:A%=yn:A%:11;(20):11,11,11 NA%:" Loading data ......";:in%=(name$):in%=0:"Can't open '"name$"'": len%=(#in%+255)256: $46,8);h0(add%,6);:gbpb(4,in%,mem%,256,#in%) .AMMC(&4103,mem%,add%*256,256):add%=add%+1:len%=len%-1:len%<1 8 #in%: B: L"Save:" Save data from MMC:" V2" Filename:"'" Start:"'" Length:":11,11,11: `111,9);:""name$:11,-1)name$(20-name$) j@11,9);:"&"add$:add%=("&"+add$):12,-1)h0(add%,6)" " t@11,9);:"&"len$:len%=("&"+len$):12,-1)h0(len%,6)" " ~6" Correct? ";:A%=yn:A%:11;(20):11,11,11,11 /A%:" Saving data ......";:out%=(name$): 66,8);h0(add%,6);:MMC(&4003,mem%,add%*256,256) Agbpb(2,out%,mem%,256,#out%):add%=add%+1:len%=len%-1:len%<1  #out%: : : : : : : :  String functions  ================  &ݤstr(A%,N%): A%?N%:A%?N%=13:=$A% 5ݤstr0(A%):A$:A$=str(A%,254):=A$,A$+0,0)-1) : ( ================ 2 Useful functions < ================ Ftitle(T$)::132;157;135;141;(16-T$/2);T$'132;157;135;141;(16-T$/2);T$'135;157;132;" (C)2004 J.G.Harston. Version ";ver$: P! _LINE: 148;39,",");8: Z: d[ yn:"(Y/N)";::A%= &DF: A%=89 A%=78: 5,8);: A%=89 "Yes ":= "No ":=0 n: x$ Drv(A$)= A$-48+7*(A$>"9")31  drv(A%)=(48+A%-7*(A%>9)) $ h0(A%,N%)="0000000"+~A%,N%) # h(A%,N%)=" "+~A%,N%) & d0(A%,N%)="000000000"+ A%,N%) % d(A%,N%)=" "+ A%,N%) : * byte(A%,X%,Y%)=((&FFF4)&FF00)256 7 fx(A%,X%): Y%:Y%=X%256:=((&FFF4)&FFFF00)256 : : : : : " > BLib.FileIO 1.00 09Aug1998 : % General File Interface Routines "% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ,: 6, Returns file type, file info in X%!... @Bݤfile(A$,A%):$name%=A$:?X%=name%:X%?1=name%256:=(&FFDD)&FF J: T General OSGBPB call ^#gbpb(A%,chn%,addr%,num%,ptr%) h5!X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%: &FFD1: r: | 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 :ݤargs0(A%,Y%): X%,E%,!&70:X%=&70:E%=Y%:=(&FFDA)&FF : &7 OSARGS call with data. Returns any returned data 0;ݤargs(A%,Y%,!&70): X%,E%:X%=&70:?(P-3)=0:E%=Y%:Y%=0 :&FFDA:=!X% D: N$ Example usages of OSARGS calls X1 used%=FNargs(4,0,0):REM Get disk space used b1 free%=FNargs(5,0,0):REM Get disk free space l* size%=free%+used%:REM Find disk size v? dummy%=FNargs(1,chn%,num%):REM identical to PTR#chn%=num% : & Get current filing system number !ݤfs: A%,Y%,E%:=(&FFDA)&FF