[net.sources.mac] MDS Edit Bug

info-mac@uw-beaver (08/31/85)

From: shebanow%ucbernie@Berkeley (Mike Shebanow)


I discovered an interesting bug in MDS Edit, while developing a
midsized application. I noticed that my source files seemed awfully large
considering the size of the documents they contained. After some examination,
I found that MDS Edit (Version 1.0, as distributed with MDS), has a bug which
causes it to write duplicate resources (of types EFNT and ETAB) EACH time a
'Save' operation is done. Although the resources themselves are small, the
cumulative affect is quite large. My source files, which previously amassed an
amazing 200K, are now only 70K long! Since I have a floppy system, that 130K
makes a big difference. What's strange is that all of these resources have the
same ID. I didn't even know you could do that. Anyway, I fixed my files by
copying each file's contents to a New file, saving with the same name using
'Save As', which was a real pain in the neck.

So I wrote a small program to purge all duplicate resources from a file.
Here is the source and a '.hqx' version of the application, called
'munge'.

Have fun...

Andrew Shebanow
shebanow@ucbernie


----------------------- CUT HERE ---------------------------------
(This file must be converted with BinHex 4.0)

:"@eeEQGP!%&38%a098j(!*!)+J#mrJ#3"!%!N!-S!*!$*`#3"%S!N2-B!*!$+!!
!!Ni!N!-)!*!$)!0L2c`!!DR`!!!P4!#3!`%J3#m3,`%[!Mm$,`3["5m'2c`!!UR
U6R8m2!!63HhqX%+B8Flrr%T"C`Bl3Il'B!3V32l#3HhqX+!96R91G8j@rqSY6[r
m)$`!!2rrS$+S8%KZrr3r2!"N2c`!C+L!3IS#*b!)6VS*dN(k!P%J#%kk#FK"qJ'
T)!K1ZJQq3IS#Kb!)6VS*Y%(k!F`J#%kk#DT1ZJFm5'lrp#!I3S&#JLBm!*!$!8K
YrP3S(d+&5'hqCL`I6VVr6"iYrQCQ!!!%UI3b,IjX5-&#J%kkrdj#CdKYrR#TPc!
I28$rmJa!rrpQ!!!13IS##5!)6VS*6Q#Q3QF[2%9'6P5TR$!I28$rm$)Zrr")`8(
k!@BJ#%kk#5`pE[r`rqi-EJ!"rqj[!!"53UF[2%9'6P3r,[rZUCdJAbe)rqSZ#'B
!!"Bb,[rZ5-&"qJ(D)!K1ZJMb6[S!(M)Zrqj)`8(k!HdJ#%kk#0i[,[rUUDdJE[r
US#06E[rZB+C#Cbmm494"3UQF-"mp32r`-Llrm%M"3IS!I#!)6VS)V$eZrr$rlJa
Z!!(rlQm!!&*#Tbmm494"3MmZrqkTR5"I,8MrkLi)CJ!!&M)Zrqj)`8(k!9SJ#%k
k#(*1qJ!H-LlrlNM"3IS"E5!)6VS)ALmZrqUTV5"ZrqUJ)e0ZrqjJTMmZrr+TQ6m
Zrr+TQQ!!rTK1ANje*@3JFQ9cEh9bBf9c)'pQ)(4jF'8J494"3Jd!G'KP)%e%8b"
&C'Pd)("bEfGbB@dZ)%0SEfpcC5"MB@jMC@`JCR*[E5"dD'8J8h4KEQ4KFQ30!%K
TG#"bCA4eFQiJG'mJBfpZG'PZG@8k!#9N)(*PFfpeFQ0PFb"[CL"dHA"P)%9'6P3
0!%eeEQGP)'Pc)'%JF(*[Ch*KE5"hD'PMD#"TFb"NCA0TCfjPC#"dEb"dD(*[Gb"
KGf&j$3"eEQjPBf9cFf&bH5"bCA0[GA*MCA-JCR*[E5"849K8)'CTE'9c)'0bC@&
dC@3JBRN0!%0[G@aNER3JEh"PEL"bFh*M)'CTE'80!%CTE'8J4'PKE'pR)(4[)(&
eDA30!%0[G@aNELGd)%GPG%PZC&*cFQ-k)(4jF#"&4Nj8,#"TC(JJ*@30!&*PE@p
fC@3JFQ9cEh9bBf8JGfPdD#"TEQ4PH#!PC!d!!%(k%+j19[rF,8lrr#m)B6)J$9Q
!,`!%J!#3!mSV32j3U'kSrUN56VS!p%U!CJSJ(dkk')a1Z[bQUI54b'$'!*!%3UF
[2%024%8r2!$rUD!J(fF!!-B[!%+R,ca$6d4&2c`!!DQJ3IVreL*I)"%#J!$rN!0
BJ##!)&mS5+!P+!"GK+!T)&!b'!*"!(md'$BB5-*)`bC0Pm+A`b402J%#33!1C`!
!%#!$S4jQA#C)*%M9`YA$-!2L5&0!D`4#@f$i)&4F5&'%Dd!J'#)B1J")31")2!$
N#'F!!!j6!'FN)RVrAY2")JN#4J!$Ca"64QF'*B&3!'$10B&3!'$)&B&3!'$#3r)
3!'$F,`SJ6+!U,`bTSb4I)NSQ5LK+6R8LAbe2rrJY5Irm3S!J3%l46PiSE[rmZFj
RpLjZrrJJ3%l85S"V#%U"D`!!%'!+5S&X!!!34)"%J@!-4)&K#%5"6R9%J'$f,J&
)4ml!2`FZ!%K(cX(#`0jI5%G#4p+(6R9+J'X)5S&V!!!3B!T+J@`!!"*%J%5"B!j
%J@%+4)"%J8je4)"Jp%U!CcC#4l+!C3a54dU!D`!!$11)B2"+4fFUiSJ[!L3"3S(
MLE5!C358J&*"8dG["1+)B1iJ!L3I6R8L2(rrN!0#J%je)!&#J8je)%"+''Em)NK
65*!!L'`+4%!b!"-J8d&ZqK#!6R8J3#*!3S%5''F+8d%5f&(*rra#%5"!6R9+!@F
%!%)%!%(k!!B`JL"!!!"1GE#i!3KL"+%H6R@4b%jeNFK1Z[mF)!&[&P+!#)!!!#m
!BGiL(bi)C`BJ#%kk!!41G5*!3KP6J@lk6R8J3+!INFK1G3`!!$"Y"J`!!$P[!N*
!5N"1G3`!!%&Yp!`!!&T[m!`!!'&Yk!`!!(T[j'$J$!!!3@hD$!!!@Qr@B0)-!!"
KE3S-!!"kEJ3%3!!J6R8-!!""E3S-!!"DEJ3'3!!J6R8-!!!JCa`-!!!*CaB-!!!
+Ca!-!!!0C`S-!!!-C`4#3%je-$`!!8je5S"R$#"!5KKQr-')N!#)8i"1G63mIrp
+J'FH5S&R'L"!5KKQr&1))N%#3Rrr8d*V"K$CC[KJ!N)3)%"1G5*!)%%5f'EmB2)
L3#""!N*rre0#EHB5d'Ii8NKJp$3mIrmJ3#*"!N*rre0#D`S3',!CCJK+!'Eb3S"
1G@X))$`!N!-"6R8J22q3"%je5S"R$L"!3N"53,)3C`K+''Ef3S!J3&0!5-"1G5m
!3UFd!@(F5S"V#Lk)8NJJ#$)#B2!JAb!)C`53!*p1G9K2)$crN!41GF0#3S4)jqJ
!2`&1ZJ&)-Kp1ZJ'B5-"V+LB!60m!&bS%5%A+`8K&3NA)`GL&f)063NMRk!!r!Mm
"6VS!dM)I5PpQcNcI!"FJ"%je5S"R!!!5)%"+%'F!!!T#38kk!!K1GC()6R8[!$m
"B3$qaY"I8N"K!2hf)!JL(f%!r[*1G5)YrN`I!-&"6VSBpN+!%"p1G5)YrN`[!-&
"6VSC,#"I6R8J,Ij%2`"+3'F)6VSCK%S!CJS`(dkk',*)`%je-"mJ22q3"%je3qh
p[0,"dX%-8IrrCJ)bJ%je0J"1ZKL-i8M"3dkk')5!3dje1!"KkX&%BHC)3$!%5%"
1G5"!)N%J%##4)S"1G8kk'Z+Tp#"!)"!-J!#3!c*Z#Lm)BBJJ(dlk!!C5N!!J##"
!)"!-J!#3!c*Z$%kk'!"+3'`#3N"1G5*!%"&1G5m!BGib!#!I2`&K[$!I6R8[!'(
1&!!-!!!0C`!!#%kkrD4R"L!ABD"JkK!#@)p1G5m!2`&KV$)IXJ"Q#L!IBBJ`2!!
"6R9BMd*!6R8J35)3$)%!N!-bBJ4J!2lN)N%5`%)4))P1G33!!$"Y)!`!!!P[%J`
!!$&Y"!3!!#!-!!!4E3TI!,)!E`4)J%je-$crrdje5S"X)NT"Eai-3J!3CKJ-33!
)E",P553!iQ*'JQB)4S,MDND#`)*1G8je6PErp%MZB!(rp#!Zrr4#J53m!*!$#Nk
krHK1ANje6PErp%MZB!(rp%KZrr3J(dkkrp"1ANje6PErl%MZB!Irl#iZrr"P&M!
ZrrB#J!!!rrq`V[r`B`B32!!"B!*#!%S!C`!!1!bZ!*!$#[r`C!`J,[r`"S!!N!-
`B"!J,[r`")!!N!-+"S!!N!0")'lrl"#!)'lrl&+)6Pj1G6)ZrrB#J3!!rrmJ,[r
``8&1Z[XU)!%[!#!Zrq`L(c3ZrrC1Z[pi,8Mrl$)ZrrB#J3!!rrmJ,[r``8&1Z[X
!,`!J,[rX)Kmd,[rf6VVr8'#X6PErp%MZB!(rp#!YrN3L,[rd*$`!N!2q6VSC-%j
H6R919[rF51jJIrrF5'lrh#!I)Lhq6%KZrq!N(dKZrr3Q(dkk!941ANje6PErh%M
ZB(rrh%KZrq!J(b)Zrpa)E[rN*"p)E[rd*Kp1ZJ%X6Pj1G8j@rpa)lQ"rrpa)E[r
J)"mL,[rF5'lrj#3I5'lrp#BI6VS""%jH6R919[lB51jJIrrF5'lqh#!I6VVr9L!
)6VVlPLe!rYK"l[lFdF!3[!!0)#lqf&+!3Hlqh0(!3K")E[lF)"p)E[rF)Kp)E[r
J*"p)E[rd*Kp1ZJ-q6Pj1G8j@rpa)lQ"rrp`J,[rF5'lri#)I5'lrj#3I5'lrp#B
I6VS$&NjH6R919[rF51jJIrrF)#lrh%KZrq!L(dKZrq3N(dKZrr3Q(dkk!Zj1ANj
e)%!L8#!CXT!!CJ65r!!3))P1G8j@rqK)lQ!(rq`J,[rX)M`!N!-U6VVp*%S!C`!
!&L!Zrr!L,[rd6VVraLe!rqK1qJ!1)#lrl%kkrBiY32rS)#lrk%jH6R919[l#51j
J$rrS5'lrl#!I,8$q`L!ZrqK1Z[bU(8$riNS!C`!#D!`Z!#AriQB!!Nj"l[lL,8M
qhMem!!Eqe%)ZrYSGI!!JrYK#,[lF)#lrk#)m!*!$,8kkr*a+!'F!!!JGI!!"rYS
J,[rS)M`!N!-`6VVmJNS!C`!!#"em!$$qf#!ZrqK)E[r`)KmN,[rd6VVr+Me!rYB
J,[rS)M`!N!-Z6VVm8NS!C`!!(L!ZrqK)E[r`)KmN,[rd6VVr!$e!rY3GI!!"rYa
#E[l5)'lrm#e3rXBJ,[rS6VVll%kkqBK1qJ&NB1iZ,[l'E!!!'P+ZrYiJE[lH%A`
!,Irr)#lqaN5!,8$qaMemrrVqdP"ZrY*3E[l5)#lqaM)ZrYBd,[l56VVm0L)!)#l
qhM3ZrY*1Z[b),8MqhNlk!'"5V[lH)'lqhK&ZrXRrrdlk!%iJ,[l'6VVjB#e!rXi
H,[lFC`Bb,[l8B!3b2!$r5-%Y3Il+XS"X!!!),@lqb[l1,LlqcQm!!"JJE[l')Ql
qhL!ZrXkJ,L!ZrXl4V[lH)'lqhN)3)#lqhN(ZrZ+3!)L4E[l@3HlqiLe)rYiH,[l
DCJ!!)&0ZrYB`,[l@8N"+3'm!!"!3,[lB)Llq`NkkqcaJiP+ZrYiJE[lH(@MrN!2
L(LMrrfF!!"!3,[rL)Llq`NkkqaKJh"iZrYTR!!!J8flqeM!ZrYC53%T!E`!!%"!
ZrYJL,[l#6VVkmQ$L5'lrm#!I)Llrp%kkrAT1qJ"#%#lriL)ZrX*1Z[V56[S!-J3
!!%0VkQF!rZa6!'F!rT*4!'F!rSTA!'F!rV"C!'F!rZC9!'F!rTTA!'F!rTTJ`%l
k!!*1qJ!1%#lriL)ZrX*1Z[U+B!$pLNjH6R919[r)51jJ$rrS5'lrk#!I,8$rb%*
Zrm`J,[rX6VVk*Ke!rq4+!'B!!!``,[r-5-"1ANje)#lrb%kkqGa+!'B!!!SJ22q
3"'$Q$#i!*IrNCJ!#)L!Zrqa1Z[QL)#lrb%kkqH*#V[rF3QlrdN)ZrqBpI!!"rp!
J,[rX)M`!N!-U6VVjiNS!C`!!#"em!!(rjL!Zrqa1Z[TD28$reL!Zrqa1Z[Q56VV
h,Nlk!BJq,[r3C`!!#%*Zrp"JiMiZrp"Q!!!--#lrc%M!B!$rCMem!!,rd#!ZrmJ
L2!#3!be1Z[Q'5J"R!!!+,A`!N!-"rp`pI2rkrp*3E[r58'lrdL!ZrmJb,[r@0#l
rdNkkpqBY32rB,Llrh'F!!!`J,[rB4)!Y32rB(LlrjQB!!$)-EJ!#rp"Q!!!3)'l
rm#"3-+lrfNlk!!`JE[r`)&!JV[rB5'lrm#!I)Llrp%kkqm"1qJ%%2A`!!Ir82Ll
rd'B!!!``,[r-5-"J!2km)'lrm#"38iJY52rJ)#lrb%kkq)iG32rN5J"Q!!!-)$c
rN!4J!2k82Llre'F!!"33,[rN6VVf6%S!C`!!"Nlk!#iH,[rQCJ!!&#!ZrmK1Z[K
Z8Ulri#"Zrq!3J&0ZrpBq,[r@CJ!!"Nlk!!4JRKiZrqCQ!!!L2Llre'F!!!a5V[r
J)'lri%)35'lrm#!I)Llrp%kkq`j1qJ"53Qlre$iZrpCQ!!!'8QlreQ!!rd)`,[r
-5-"J!2i%6[S!-!3!!%0Vl'I@8`"R!2k8@3"R!2jf@3"R!2jL9`"R!2kS@3"R!2m
)@`"R!2kBB-3H,[rQCJ!!"P*Zrma1qJ!#6[S!,#!ZrmK1Z[I+X#lrj'F!!!``,[r
-5-"J!2fN)#lrl%kkpfJJ,[r)6VVhB'!!rAKJ!2f-6PErl%MZB!2rm#3Zrr45JL!
m!*!$!L)Zrr"1ZK#%,8$rl%U!C`!!#L!Zrqa1ANje)$crN!4Jp%j@rqa)lQ!$rr!
J2!#3!`)L,[r`*$`!N!-#6VS36#e!rqa+J'F!!'JJ,[rX6VS2ZNkk$q`J,[rd6[S
!0#!Zrr"#J8kkri41ANje)#lrm#)m!*!$!8kkrh*Jl#!Zrr!L2!#3!`*1Z[pLB0a
1qJ!L$)!!N!-(Cq3-J!#3!h"Rh!b!!!!#!'I%$)!!!!3!CkiJ22q3"'#`6PErjNM
ZB!2rm#"Zrr33%%kkp%iG32rQ$!!!8QB'%$`!!@!%%$`!!NL!5-!Y32rS)$`!N!-
#)Llrm#3ZrqK1ZJq5,8$rl!bZ!*!$![rSCJ!!*J`Z!%(rjQB!!"3J,[rX6VS5r#)
!)#lrl%kk%V!J,[rX6VS1hL"Zrqa1ANje6PErk%MZB!Irl#eZrr6rk#iZrr4[!!!
Z)#lrl%kk$a"+!'F!!!C1qJ!F)#lrl%kkpA*5V[r`)'lrm"&!rrp6V[rdB-`J,[r
SN!#Zrr41ANje6PErk%MZB!rrk$3Zrql&l[rb)#lrp#)ZrqK1Z[q8-LlrlNM"`8&
1Z[)f)!&1ANje6PEri%MZB!Irl#eZrqcrj#!Zrr41Z[8-,8$rk!b!rj!%CJ!!#N(
i!!"1ANje)#lrk#)Zrr41Z[8-8flrmMiZrr*Z!!!'6[S!2#!Zrr41Z[65,8$rk!b
!rj!%CJ!!"Nlk!#*5V[rN)'lrj"&Zrq[rr`bZ!*!$$IrSCJ!!"Nlk!!4JYL"Zrq4
#%#"ZrqaJQNj@rqa)lQ!(rq`J,[rX)Llrm#3Zrr41ZK%m)#lrp%jH6R919[rS51j
J$rrS0#lrlXAZrr)J,[rd)Llrk%kkrm)`,[rb5-"1ANje6PErl%MZB!Irl$iZrrC
R!!!J$'i!!IrfCJSJ,[rX6VS43'!))#lrl%kk%9c4V[r`,Llrm'`!!!`J22q3"%j
H6R8J,[rX)Llrm%kk%2JJ,[r`B1T19[r`51jJ!rr`%M`!%#!Zrr$LU#m!)#lrp#)
I6VS-k#!Zrr3L,[r`6VS-h#!Zrr"1ANje6@&M3b"89&NJ9fPZC'ph!%(k!!B`J#"
"!!"+3'B!!!41G5Y!rIC1G8j@rl`Y6[rm3Hlr[#!))M`!N!-m6VS-"Mem!!(rdL!
m!!#J%d(Zrl`L#%kkrl`pI!!#rp)J2!!!S"0"l[qm)JK1Z[qQ6Pj1G8j@rr4)lQ!
"rr3J2!!!S%8L,[rd6VVrLNjH6R919[rd51jJ!Ird)$`!!+!")Llrp%kkrfj1ANj
e6PErjNMZB!rrk#"ZrqJKE[rX!")J,[rX6VV`HM!Zrr)#3!!$)'lrk"&!!"Y+,[r
hC`B`2+!+B!3`2+!!)Llrk%kkrbC+3'B'%$`!!@!#3J")J$e!rqBJ,[rX6VV`9"!
ZrqG1ANje6PErl%MZB!2rm*(),8Mrl#!Zrr3L2!#3!e"1ZJXD)'lrp#&Zrr!!%L!
Zrr"1Z[!!)#lrp%kk!&*+3'B!!"!JE[rddI`!N!-J,8Mrl#!Zrr"1ZZri)'lrl%j
H6R919[qN51jJ!Ird)#lrp%(Zrk3L#%kkriiZ#'F!!!S32!!"6Pj1G8)!6Pj1G8j
@rr4)lQ!"rr3J2!!!S!`L,[rd6VVqC%jH6R919[r#51jJ!Ird3Hlr`L!))M`!N!-
b6VS+HLeZrr6re#!Zrr41ZZpN)$`!!+!*3Hlr`L))6VVq+#!Zrr41ZZpS6Pj1G8j
@rm")lQ!"rr4"l[r!)!JL2!#3!c*1ZJSf,@lrp2r5)#lrp%kklb!J2!!!S!K"l[r
!)JK1Z[hN5N"Q"K!m!!&J!N)!(8$rmL!Zrr41ZZm8%#lrmNjH6R919[rN51jJ(rr
N)'lrk#&Zrq`!)#"ZrqJ`,[rf5-!K3!!N)'lrk$&m!!%!,#"ZrqJKE[r`!#i`,[r
Q)Llrk%kkrB)JE[rS-#J!+NjH6R919[rS51jJ$rrS)'lrk#!m!!#J!b)S!"JN,[r
X*Llrm$JZrrC1Z[q-6Pj1G8j@rqK)lQ!2rqJJE[rS)$`!!+!#)LJ!'#3Zrq`Q,[r
`1#lrpNkkrf"1ANje6PErp%MZB!(rp#!m!!#J%5)Zrr41Z[d'5N"Q#L"Zrr3J+!!
FB!*#J%jH6R919[r`51jJ!rr`)'lrm#&Zrr3!(#!m!!#J%L)Zrr"1Z[c36Pj1G8j
@rrJY6[rm3Hhq+#!))M`!N!-F6VS)k%jH6R@`J@d#6R8J!8je6R@`J@i#6R8J!8j
e6R9"lIiX3N"53%UBC`J-3!!'EI4#J%je)%!J+!!%X+J!!',`8-"1G8kkrFK1G8k
krJT1G5"!)#J!!%je)%!J+!!%6R8J3!`S!!%!(QF')@J!N!-%6R8J3$!m!2m-+!!
#!"jR4#)S!!5bU!!!BcT++!!FCJi[##!))LJ!!%kk!')JAb*S!"!3%9+S!!"5L5&
*!"!L#E+S!"4Y$Km!)!JL+!!!6VS!2"!I6R8J3$!m!2m-+!!"!"jRm"!"5LJ!('B
5,`JI!#!))LJ!!%kk!"33(b"I81J!(5*S!"!5J%lkrkT)jciq,`![!8kk!&iJ(b"
I)J!K3!!!!S$rrri!)8!!#*+!dUJ!$#&"!""3k!!F*!!J+!!%N!##BK)-D!!"!"j
Q"&(S!"a-hham6R8-J!!!!J"M"L!m!!!#!#B!)!JL+!!-6VVq$NlkrpiJ3%SS!"a
R1NSS!"eR0#BS!!3L+!!!YS&Z!!!%*J'@U!!)$)-!!!)!B`BQ2!!!!J"4k!!G)!J
L+!!-*#J!#%kkrCa1G8je6PErm%MZB!(rp#"Zrr3-+!!"!"jR!!!q)'lrp#eS!"M
rm#"Zrr3LE[rd)#N!"#)36VVq+L"Zrr3K3!!%)#lrp%kkrhJJE[rd)#lrm#)S!!4
1Z[h)6Pj1G8j@rqa)lQ!"rr4+V[rdC`!!NN*Zrr"5E[r`$'i!"[r`EJ!!)%(YrLJ
`,[r`j8M3`#*3Xqlrp'B!!!C1qJ!'6[VreJaZ!!Erm'm!!!K#!%jH6R8J,[rd6VV
r8#"Zrr3J+!!B6VVkbKe!rr)JE[rd)#J!$%kk"QJJE[rd)#J!'%kk"P`J,[rd6VS
'9%(YrLJ`,[r`j8M3`*2*))N3,[rb6Pj1G8)!6Pj1G8j@rq")lQ!$rr"+,[rhE!!
!%Kem!!(rlJ)Z!!rrpdlk!!C#,[rZ6VVp6$e!rqT+3'F!!44#,[rX)$`!N!-b6VS
&i#e)rq3J,[r`6VVp6NS!CJ!!2!`Z!!(rpfB!!"!J,[rN6VS&d*()6Pj1G5!Zrr"
1Z[Yq5J"Q!!!3)#lrj%kk"E54b%jH6R8GI!!"rq`@,[rZ5)-8,[rh5))J,[rN)Ll
rm%kkqIj+!'F!!(`J2!#3!b"1ZJ9X,8Mri#"Zrq!KE[rN!"JJ2!!!!J*1ZJ98)Ql
ri#0)!"!NE[rJ*8J!$#"Zrq!LD!!-)'lri02m!!!#!#&*!"3JE[rJ%@lrp`!H)#l
rj%kkqqSJE[rJ)8!!"%(YrLJ`,[rUj8M3`##Zrq!JE[rJ6Pj1G5"Zrq4+U!!FC`!
!$L"Zrq3J+!!F6VS%q#!Zrq41ZJ6`NFK1ANje6PErl%MZB!2rm%UZrr"R!!#S)'l
rm!`S!!%!(QB!!"SJE[r`)#lrp#)S!!41Z[[Z,8$rp%lk!"`JE[r`)Qlrm#!T!!3
L%%kkqmJJE[r`)8!!"#"Zrr"++!!FC`!!4#"Zrr!J,[rdN!#S!!JY32rX5S"[!!!
Z$+i!!!)!rqaX!!!L)'lrm#*S!!c6l[rX)'lrm#&*!"!JE[r`)+lrp%jH6R8J,[r
`)Llrp%kkr&`JE[r`)#J!'%kkq'K1ANje6PErp%MZB!(rp%KYrG!J(b)m!*!$)%k
k""iZ,[rdC`!!0L!Zrr41ZZN'+!JJ2!#3!aNL2!#3!c)N2!!!!F)Q2!#3!rT#K8k
k!$3V52h-)#lrp%kkk2BVI2q3"2h3'h`!!Ifc1hcrrrfm6VVkc#!mrj!%6VS#`%j
H6R94Mb"2-8%!!$&!!!,33Y*$-8%!"$&!!!C#Td+R,`J["&$R3QF[22q3""m&3UH
T%b"I)!J[#%kk!#K#CdKk#&P)E`!%U3#SKcmm!!QSLNkk!A!r2!!)2`#SNb"I8)p
1G8(k!ABK3!!!,`#SFdkk!9*1ZJ#L6R8JHJ&J3rS"E$0S!$)!!M0S!$)!"MiS!$#
HHJ&3-dF!!$iS!$$HHJ&'-dF!"%je3QFr!+L0-Kp1Z[r)-#J!-T!!363S!"*33V"
#E!!!"%je-8!!-M0!!!,3360!!!B[#DLM6VS!2%je5Lhpp@FQ)#hpm,#i!@TL(0#
i![3V32h`6VVrJ&*T!!B[#DLN5Lhpp&IYrI41G9(YrI9J"&$YrI9)jr$`6VVrA&*
T!!B[#DLM)$J"DY#i![3V32h`8Hhpp%cI$`p1G@(B$!!!$@FQ$!!!#QFJ2`"#Ccm
!U)dJHJ#'-#J!-Y"IX'J!&Q-%6VS!"UL$6R91ZJ"@-J"KT#"k!'B`+!!`d%'`D!!
8E!Sr2!!)2`#SNdjeBBJJHJ"+5'J!%%*R6VS!+%4!2`"#TkMB3IS!1##AU1mJHJ!
X2c`!#$mS!$#SNbmk!#+Sf8je5(S!(UL,3IS!'$!S!!$3D!!#d'J!"Nje!*!B3IS
"D$&!!"JaI!!)!"SaI-`+!"bJ"%(k!9)aI!!+!"T#U!!F%A`!F!!JS!41G3a!rrp
R,N(k!63a3!!B-A`!!J!DS!9+U!!F9X"1G8(k!4`a3!!B-A`!#!!DS!8`+!!F6R8
`2!!S3LFr!%Kk!2kTF8+!%"p1G8kkrUK"qJ$Z)JJ`2!!S6VS!%NkkrT!!3N""qJ$
D%#J!"8je2`![!8kkrNj#*cm[!!B[,`!%UA"+(fIXA%p1G8)R2`![!DP`3S!3(dj
e-$`!++!b6R@J-Nje$%$rrfHL-J!`!8kkre3-3!!!Cr3`!82k!)*"qJ#!-8!!'#&
*!#!KI!#3!`%!*%*S!#a#U!!ZS!)3%3*!!2p1G82k!&J5J8(k!&3a3!!B)8N!)#&
m!*!$!3!N3QJ!,%+S!#kJ!dje)N%d22rr&KPAb[rm4%*63L*"3IS!)M&!!"JK33!
J5-)K3J!N3QJ!,%+S!#kJ!dje!*!m5%"#3%K!6VVPBNje5%"#3%K!)J!J2!#3!`&
1ZZ9F6R9+J'F%6VVPINje5%&#38K"6VVPD%je3qhp[0,!dX"+8@SN,`P&q[GZG!*
1ZJ#DC`a)jaiHB3$qf%cIH(JLA`*!!2mbJ%je-"&1G82YrEc5`0,!5P&U!Q'q-"%
b[2rr6R9+3'FN4IVhJR3#6VS!@QF@5S"Q!!!'%!&1G8MR(KjK!2l160piH%je51F
H(K!"2`"K!2ci-"pJkMJ!0J(J5@(!-!3b!f'k6R8f!#C"%KYR"M!$BDaJpNje2`"
&q[E'G!*K"$!I6R9"lIfcd-"$lIh3j8M5`#!4Ca#d%'B-,`P1NL*I!$`!"%je!M`
!qdje4IVi0(3#BG"#N8+!6R9&q[I1G!*K`QB!!!C#J%je-$`!!8je3Hhp[0$!d-"
+8'S84IVf0R3#BD"R$'%!r84+!&I!6R9#J%je6R919[rU51jJ"rrX3QlrkP*ZrqS
-EJ!(rqTZ!!!D3Hhpd$!ZrqVP50$!,K"Q!!!'6[S!"'$D$'i!"rrUE`!!#%+!6Pj
1G6!Zrqj1qJ%@h[crcM!Zrr*1qJ#N5'lrZ#!I3IS$9L))*$`!N!-"3S01Z[,))$c
rN!2j6VVmN!"1qJ#B5'lrZ#!I3IS$(5))*$`!N!-#3S01Z[+L)$crN!2j6VVmDNl
k!(*)E[qi)"p"qJ,b)JJN2!#3!`&#JdkkmR`J22q3!rG1Z[a%6[S!6%KZrlJJ(d(
k!YFL##3m!*!$!N+$6VVb9L!mrj!$pdkkr"j1qJ!Q3S"J!2p-6[S!(!4!rrGVm'I
)8d"RRP0!C`$rG&0!C`$r5'$F3Hhpd$!ZrqVP50$!)+lrm0lm!$*1qJ"%)#lrm#)
Zrr41Z[GH3qhpd$!ZrqVP50,!)SJZ#'B!!!K#J'!!r["1qJ!D3S"J!2lQ6[S!%&0
!Dr*R!2lQ8d"R`'$S3HhpXp$ZrqS3V[r[3Hhp[$!ZrqVM50$!-,crrc!ZrqT)`'!
!rUj19[rf,8lrr%*ZrrC5E[rf$'i!"rrfEJ!!,N(YrG!`,[rfj8M3`#i3C`!!'N(
YrE23l[rf$"!!!QB!!!S`,[rf6VVpi'$'6Pj1G8j@rqC)lQ!(rqa#,Ifb%#hpXNL
!28$rk%*ZrqB`,[rZ6VVp%Ke!rqS-!!!0C`!!JMiZrqjQ!!"-%#lrkNlk!$Sq,[r
QE`!!&P0ZrqBJE[r`d1lrjK!35)"1Z[Q%3LlrkNlk!#!5,[rU5)&#J%kk!&T1qJ!
36[S!$!`!!!KR`Q$NB1)H,[rUC`!!*"!ZrrG)J,"ZrqCR!!!@8QlrjM!ZrqC63#"
Zrr$3`"#ZrqTJ!2pZ)'lrm0$ZrqC#%"YZrqRpXL"Zrr"1ANje6PErm%MZB!2rm!`
Z!!hrpfB!!"3`,[rb)M`!N!-06VVmBNlk!$i-,J!JrrGY!!!8%LlrpdL"-#lrmNk
kr%C1qJ!L-#lrmL)m!*!$ANkkr$35,[rh"J%!3%L"-#lrmNkkr#)3,[rh6Pj1G8I
kmjj*q[`53qhpd#B!j8JS-3!!Cb*$lIfc$$%!!M!!C`3i!bC-+%%Q!P1$E3S5&#!
%6T-B`'$b6R9"lIfmd%$3`$#mrrp"lIh3d-$3`#!36VVfINje3S*"lIfmd%$3`%T
3D`!!"(3"3Hhpd0$!d-!J%#m#6VVbY0#I6R9"lIh3j8M3`#!36VVbUNje6R8%,N*
TEJ8Z3@peG!8Z3QpeG!C06dj"3dm%,N&TEJ#3"!lrJ3%!!8i$rrj89%9B9!&1!rr
q9&4&@&6rr%*ZrrC5E[rf$'i!"rrfEJ!!,N(YrFi`,[rfj8M3`#i3C`!!'N(YrE(
3l[rf$"!!!QB!!!S`,[rf6VVpi'$'6Pj1G8j@rqC)lQ!(rqa#,If`%#hpX%L!28$
rk%*ZrqB`,[rZ6VVp%Ke!rqS-!!!0C`!!JMiZrqjQ!!"-%#lrkNlk!$Sq,[rQE`!
!&P0ZrqBJE[r`d1lrjK!35)"1Z[Q%3LlrkNlk!#!5,[rU5)&#J%kk!&T1qJ!36[S
!$!`!!!KR`Q$NB1)H,[rUC`!!*"!ZrrG)J,"ZrqCR!!!@8QlrjM!ZrqC63#"Zrr$
3`"#ZrqTJ!2pZ)'lrm0$ZrqC#%"YZrqRpX#"Zrr"1ANje6PErm%MZB!2rm!`Z!!h
rpfB!!"3`,[rb)M`!N!-06VVmBNlk!$i-,J!JrrGY!!!8%LlrpdL"-#lrmNkkr%C
1qJ!L-#lrmL)m!*!$ANkkr$35,[rh"J%!3%L"-#lrmNkkr#)3,[rh6Pj1G8Ikmjj
*q[`53qd!!!%!N!-S!*!$*`#3"%S!N!NF!%S!!%024%8!!J!+!!$rrb!!N!J"rrm
N!!!F!*!&rj!$)!!PC!#3"#!mrj!%6RA$3N+%51IS!$m"6VS"5$)I6VS"Q%M!DbS
Q!%cI!"FU"%K&bX&)48*&b-(BKGL$8d*)jqJ!2`)r!8kk!0)b(dTICXj-h`!A)!4
1G8U!C`!!%L"!5K"R!!!+3N&1ZJ!)6R@4b%je,`!r!@%!rXE3Ae*!B3$ppL!))Kp
K!2lb6R8L,Ij-(`$"38kk'2C#J"!I6R8L,Ij-,`$"38kk'5`JAdje)#hq4$m!5N"
R#%kk'B4+!'B+-"p1ZKLb5-"1G6!I)$crN!41G82YrEc5`G,"$&(rrfB#-S"1G6B
!6VSBM1&)`801ZKL%J%01G6J!BHV"4'(Q5%!`"%K!6R8J3#*")"!JN5+!6R91ZKV
LUI3J3#!3$)!!N!-bEJS[#''))"p1qJ!'8T!!)!JJ3#!3$)!!N!-bEJa1ZKJ!5N"
X!N*!6R8L3"!46R8[!'(H-J!J(cm"BE``(dje,`"KcK3!$!!!$@F!!!K1Z[fNC`B
J&f'JB1S3!PL26R8[!$m"BD`b(l)!CJSJ(f')-$`!!8je@)p#3%je)%%L%!b"!*!
$-Q)%B!$qj#*"%X"#%5#*6R8%!!!`)JB:

-------------------------- CUT HERE ---------------------------
/*
 * munge.c		8/26/85		Andrew G. Shebanow
 *
 *	Edit file compaction routine. Wipes out unwanted copies of
 * resources stored in EDIT files. This is a horrid bug in EDIT which
 * causes expansion of text files by 1/2K per Save operation!!!!.
 *
 *	May have a slight problem compiling this, since it depends
 * on my own slightly tweeked MacC environment. Ther shouldn't be too
 * many problems though.
 *
 *	Code written using Consulair's MacC. Portions of this code
 * Copyright Consulair Corp.
 *
 * Mods:
 *	8/28/85 Removed duplicate label & cleanup in SetVol
 *	8/29/85	Changed loop to start high and end low on RmveResource calls
 *
 * link file:
 *
 *	!START
 *	/Type 'APPL' 'MUNG'
 *	Munge
 *	stdlib
 *	stdfileio
 *	stdioprim
 *	$
 */

#include "stdio.h"
#include "memory.h"
#include "resource.h"
#include "osio.h"
/*
 * IMPORTANT NOTE:
 *
 *	Assumes that "packages.h" has been fixed to have a correct struct
 * definition for SFReply type, as defined in Inside Mac.
 */
#include "packages.h"

/* the StdFile type list */
SFTypeList typeList = {
	{ 'TEXT', 0, 0, 0 },
	0
};
/* the reply to the last StdFile command */
SFReply reply;

/* SFGetFile from MacC Library example */
SFGetFile(where, prompt, fileFilter, numTypes, typeList, dlgHook, reply)
long *where;		/* really address of a point */
Str255 *prompt;
int (*fileFilter)();
short numTypes;
SFTypeList *typeList;
int (*dlgHook)();
SFReply *reply;
{
#asm
	MOVE.L	D0,A0
	MOVE.L	(A0),-(SP)	; WHERE
	MOVE.L	D1,-(SP)	; PROMPT
	MOVE.L	D2,-(SP)	; FILTER PROC
	MOVE.W	D3,-(SP)	; numTypes
	MOVE.L	D4,-(SP)	; typeList
	MOVE.L	D5,-(SP)	; dlgHook
	MOVE.L	D6,-(SP)	; reply
	MOVE	#2,-(SP)	; PARM
	DC.W	$A9EA		; PACK3
#endasm
}

SetVol(fileName,vRefNum)
Str255 *fileName;
short vRefNum;
{
#asm
; Adapted from:
;	FileManager.ASM
;	Russ Wetmore for Star Systems Software, Inc.
;	Version 2.1		24 June 1985

	Include	SysEqu.D		; I need system equates
	Include	MacTraps.D		; I need (want) trap macros

;	Global variables

	XDEF	paramBlock
	.ALIGN	2
paramBlock:	ds.L	20,0

;	OSErr SetVol(volName, vRefNum)
;	char *volName;		(D0.L)
;	short vRefNum;		(D1.W)

	; Clear parameter block to zeroes
	move	#20-1,D6
	lea	paramBlock(A5),A0
@3:	clr.L	(A0)+
	dbra	D6,@3

	; handle different argument types
	tst	D1		;vRefNum supplied?
	beq.S	@1		;Nope, go on
	; if vRefNum is non-zero, use it to determine volume
	move	D1,paramBlock+ioVRefNum(A5)
	bra.S	@2
@1:	; else, use volName to determine volume
	move.L	D0,paramBlock+ioFileName(A5)
@2:	lea	paramBlock(A5),A0
	_SetVol
	rts
#endasm
}
      
main()
{
	Point where;
	short refnum;
	short numRes;
	short cntr;
	Handle theRes;

	FlushEvents(0x0ffffl);
	InitCursor();
	SetPt(&where,100,100);
	printf("Munge is a program which is designed to throw away\n");
	printf("unnecessary resources from TEXT files created by\n");
	printf("the MDS Edit program. Choose cancel from the Standard\n");
	printf("File Dialog to quit\n");
	printf("Hit return to continue:");
	getchar();
	while (1)
	  {
	    SFGetFile(&where,NULL,NULL,1,&typeList,NULL,&reply);
	    if (reply.good == 0)
	      ExitToShell();
	    /* munge the file */
	    SetVol(0,reply.vRefNum);
	    if ((refnum = (short) OpenResFile(reply.fName)) == -1)
	      {
		printf("Couldnt open rsrc file\n");
		continue;
	      }
	    numRes = CountResources('EFNT');
	    printf("%d resources of type EFNT\n",numRes);
	    for (cntr = numRes; cntr > 1; cntr--)
	      {
	        if ((theRes = GetIndResource('EFNT',cntr)) == 0)
		  {
		    printf("Couldn't GetIndRsrc: typ EFNT, idx %d\n",cntr);
		  }
		else
		  {
		    printf("Removed resource with index %d\n",cntr);
		    RmveResource(theRes);
		    DisposHandle(theRes);
		  }
	      }
	    numRes = CountResources('ETAB');
	    printf("%d resources of type ETAB\n",numRes);
	    for (cntr = numRes; cntr > 1; cntr--)
	      {
	        if ((theRes = GetIndResource('ETAB',cntr)) == 0)
		  {
		    printf("Couldn't GetIndRsrc: typ EFNT, idx %d\n",cntr);
		  }
		else
		  {
		    printf("Removed resource with index %d\n",cntr);
		    RmveResource(theRes);
		    DisposHandle(theRes);
		  }
	      }
	    UpdateResFile(refnum);
	    CloseResFile(refnum);
	  }
}