dplatt@coherent.com (Dave Platt) (10/25/88)
[CODE Unlocker desk accessory] This posting contains CODE Unlocker, a desk accessory that can set or reset the "locked" bit on CODE resources in an application. It was written for developers coding in LightSpeed C, but can be used with other development systems or even without a development system (i.e., on completed commercial applications) if necessary. The original version of the Segment Loader (in the 128k and 512k Macs) required that all CODE resources be locked in the application file, thus ensuring that the program's code would not move around in memory during execution (and hence invalidating jump-table addresses and stack-return addresses). This scheme tended to cause some severe heap-fragmentation problems, because code (once loaded) could never be relocated when the Memory Manager tried to compact the heap. In the 128k and 256k ROMs (and in 64k-ROM systems equipped with a patch to the Segment Loader), most CODE resources can and should be marked as "unlocked" in the application resource file. The new Segment Loader will read the CODE resources into memory, move them to the top of the heap, and lock them there... thus keeping them out of the middle of the heap and reducing the chances of heap fragmentation. Some development systems permit the programmer to specify whether CODE resources should be placed in the application file in "locked" or "unlocked" form. Unfortunately, LightSpeed C does not: all CODE resources are marked "lock", thus ensuring maximum compatibility with all Macs but leaving the application vulnerable to heap fragmentation. The CODE Unlocker desk accessory can be used to set (lock) or reset (unlock) the lock bits on the CODE resources in an application. It follows the rules in Inside Mac: the main CODE resource is not unlocked. If you're developing an application that you _know_ will never need to run on a 128k or 512k Mac that might not have the Segment Loader patch, then you can use CODE Unlocker to turn off the "lock" bits in the application file... it's much quicker and more convenient than doing so with ResEdit. Note: if you've been a cautious person and installed Vaccine on your Mac, CODE Unlocker will trigger Vaccine alerts each time it attempts to lock or unlock a CODE resource... just as LightSpeed C does when it writes new CODE resources into an application you're linking. CODE Unlocker does _not_ add new CODE resources or modify the ones in the file... it simply twiddles the lock bit. CODE Unlocker is "freeware": feel free to use it, pass it around, etc. It's based on the "Generic DA" shell written by David HM Spector. Dave Platt VOICE: (415) 493-8805 USNAIL: Coherent Thought Inc. 3350 West Bayshore #205 Palo Alto CA 94303 UUCP: ...!{ames,sun,uunet}!coherent!dplatt DOMAIN: dplatt@coherent.com INTERNET: coherent!dplatt@ames.arpa, ...@sun.com, ...@uunet.uu.net --- (This file must be converted with BinHex 4.0) :#&9ZE'pMDf9b!%4'58a%68p@!3!!!!!!!!!225J@!!!!!!%!!!!1V!!!$D`!!!# 4$5!U)'4PCQPZCA-JG'KP)(0dFR9MG(9bC5"eFf9N)'))9@jXEf0VCA*X!J!!!%4 '58a%68p@!3!!3!#!!!!!!!!!4%C*6%406eB"!!"!!)!!!!!!!!!!!!!!!!!!!!! !!!#Hh+mk!!!!!!!!$cefB@aeCA-JB@jN)'eKBh*[Fbi0)#S0)#SJ+%-T)%0[F(P bD@GSG#!a16Je,#!a16Jf,L"85%P15b"8C@0SEQpXEfGTCA-J5@jM,L""E'`JFQP RD(4c)(*PFf9bGQ9N,JdJ+Lm0$50TCQjNC@BJAh0dC'P[D&m0)f4PCQPZC5"IFh4 N!!!*kJ3!!!!"DJ!!!&B!F!##!*3!TJi!3dp%45"9EQa[BfYPFJ!!!!!!!!!!!!! !!!!!!!!!B!!)pNlk!8T1qJ&D6[S"DNlk!B*1qJ'd6[S"d%lk!Hj1qJ)+6VS!FNk k!041ZJ%!F!"1ZJ"bD`!""%lk!,a1ZJ"B6VS!kR!"6VS!A%lk!'a1ZJ"'6VS!f(! #6VS!5Nlk!&T1ZJ!d6VS!aR!$6VS!1%lk!%K1ZJ!L6VS!Y(!%6VS!*Ja!rqKR!!! b$%!!!@B!!+a`!%lk!')J(dMR!$JN5#C*)%"1d$m!,`X[#Nkkre*2l`!+08!!%%j e$%!!!@F@##S!!3!'CK!J5L*,60mF!#mi#2a1GA!!##X!"J!%CKJ[!!JV!!B!"@F ')'X!!+!U)%ZP++!U)"p-ha`!6R9+U`!8CLJ`+`!B4N$V5!"!`!"3q!TH@Bm[2%4 "9%%r!+QJ)"mR3!!8C`3[!+Q56R8J+`!8C`BJ3#K3S#P1G6m!)#X!&'F)3UX!&#" !S#-`(f#S)&mb'$3BX&KAbIrk5N*RrNl`)2`JAc)B0"L`Q&I*rrT+3QIq6[!JqL" I-KJd',"#EJU3!%&Y"Y"!3I!!!M!3Crj1m!!!)#m!"#p"!!3L,`!),em!"%MR2!! N!#B"5%,%`bJ!+J&)4FM&e%4)3N*#`-(3JNcI!$`L(dje)#m!"#p"!!3L,`!),em !"%MR-3"1ZJ#F60m!M#)I6R8J,`!%,d%!"#)[!!J[A`!%51Fa!%kk!(`J!8cI!)` L(dje)#m!"#p"!!3L,`!),em!"%MR-3"1ZJ!X60m!M#)I6R8J,`!%,d%!"#)[!!J [A`!%51Fa!%kk!!`J!8cI!)`L(dje5S"U(%U"DJa%J%5"6VS!)%5"6R9%J%kk!"C %J%5"6R9+J@S+4)&1ZJ!'4)"1G5im!!$rrl+!B`BL!(!!6R@`Kf)-J-&)3$)!3N" )3%jeXSGL'Li!3N")3)$"5%")4ci!5%H1`6!(5%Fb"dje*!!Q!H+)iSQbKf,iJ-( !Kc)$`X!Z!dK(cX")4p+(C3L5JQ)%4)&1G90!B13!8!!")"p"qJ!3N!")iNJLAcm !,`QYkQ(XBHTKk'(QBH3`,`!%R[`!(Mp!!"JJ6k!"h[`!(Mp!!!BJAe426Y"19J! !-#i!#1Y)!%$!!0"Z!!T1ANje8N966da@48P19[rm5Ui!#'FU3UHT*#"I,8Mrr'! B)#i!#,#ZrraQ"(!"B")JE[rm,@J!N!$rr%UZrraQiR!!6Pj1G9C"6%P%9dP16PE qMR"N28$rrR!b28$rr#em39"362rX,blrr%+R3UFr2!!"5'lrl%+R5'lrSNkkrda +,[qLC`!!iN*R5'lrV$mZrkJI2!!$UF3`(ce!rji-E[rrrjjQ#Mmm!!1Tb'!!!,T #CdKj3dp%4DJ0-"mp32qFF!%p32qDB!!!MN+R5(P$6d4&2blrQUJ1)&mY52q85Ul rP'F!!'i[,[q85'lqMNKZrT!!5'lqP+QS$'i!!Ik1Ce*#CbmZrj5TTM!I28$rQ%T Z!!KR)!JZ!!6rQ@Bf"Qi!%2qB,blrP$mZrjLTTbmZrj5TUQ!H##i!"2qCCaB'E[r `rjJ[,[q82blrQ+QR,blrP+QU8QlrQM!ZrjU`E[qFE`$rDMmZrjkTQNjH6R9%6da 23dY96Nj@rrSr2!!"2b`!fNkkrQaBMd+R2`"#TdKirrqTI#"I,8Mrr#mZrrbSFf! )3UG)E[rkUC%-EJ!"rrTQm#mZrrbTJLmZ!!LSFdjH6R9%6de983L"X!-T)D!! 3U+-r2!!+U)Sr2!!+2c`!#UL65'`!h+L%2c`!#Mmm!"DSNdKX!2bSK$mm!!Sr2!! LU*0)E!%@U)3r2!!+2c`!,UL65'`"0UL%2c`!#Mmm!$USNdKX!95SK$mm!!Sr2!" 'U*0)E!&bU)3r2!!+2c`!@UL65'`"MUL%2c`!#Mmm!'kSNdKX!D5SK$mm!!Sr2!" kU*0)E!(%U)41G8j@rrJJEJ!-1@J!'!$D5Q`!fQ`+-#`!fN4!18!!fM!X!0T63$P !!0SJEJ!-)#J!(Le!rra+J'B!!)j)E[riU(4#Td+R5'`!cNKX!GT#Ccmm!"")H2r r(c`!!8+RU4-JAbe)rr`[,[rmU(-JEJ!-)Qlrr$0S!"J!E#"Z!!`KE[rm!"ir2!! "2b`!fNkkr2KBMd+R2`#T[b"I+8J!eNUX!0CR(Mmm!!%r,!$D6VVmf&L2)'i!$$& !!#B[,!$@3QHT05mZrrLSFh!!6Pj1G8p348iJ)#!J6PB!!(!!6Pj1G9"558e&)#! J6PErpL"Z!!`J+!!H,8$rq#m!6VVmU&L25J"R!!$-5'lrr+Kd,blrq+Kc)'i!#$! S!"T1Z[P5!%!!53#S!"3!T!#L!#3!H!#F!(`!JJ#)!)iJEJ!),blrq#mS!"a1ZJ# B8)pJ!!"q)'i!#$eS!"lrpM!ZrrC1Z[N3!!%!"!!d!!J!%J!B!#![,[ri6VVpQ&L 2B#3r2!!$UFKJ(%*R6VVmB&52B")r2!!"6VVm9&52B!Br2!!$UFK#CkNiB#Br2!! #UFKJ(Mmm!!+Tb'!@2c`!!UR)B!ir2!!#UFKJ"Mmm!!+Tb#mZrrbSFh!!6Pj1G80 26P456d`J6PB!!#mZ!!bSFb"Z!!J`%%kkq(i!!3!)!2)!P!$Z!!`!kJ!)!*B!j!# U)'i!#!JS!!!!$QF!!03JEJ!)%#J!"8L!6VVi4!!+!#S!HJ!Q!&S!,!"i!#J!@!! Z!'-!+J"$!$!!GJ!X!&B!-J"L!#i!3J!d2c`!!UR)B!!!N!!r2!!#UFKJ!!#'2c` !!UR)B!!!I$mm!!+Tb'!!!()r2!!#UFKJ!!"S2c`!!UR)B!!!AL"Z!!K)D!!+U(& J8#mZ!!bSFbmZ!!bT)Nkkr,S[,J!-U50J1#"Z!!J)+!!!!!pR%NUX!0CR$#mX!0C #CkNeU6GJ'NUX!0CR&$mm!!%r,!$D6VVkU&L22`#T0UNh6Pj1G84249C&6P3J6PB !!(!!6Pj1G90839498b!J6PErr#"Z!!`J+!!H,8$rr#m!6VVkLPL25J"R+Mmm!!% r,!$D6VVk@PL22`#T0UNh)'i!$%*S!#B[,[rmU43JEJ!-3UJ!(R!!6Pj1G80-6e0 &)#!J6PB!!#"Z!!a+U!!8CL*+EJ!3CKBr2!!$UFK#Cb"Z!!`r+!!B6VVjk$!IF!" J!!#')'i!$!"SB!!!"#"Z!!a`2$&!!#)JEJ!-!'J!"`!N-#i!%%kkpX!!!!!%!&S !#J!B!#B!0!"#,bi!$#mZ!!K1Z[`i8)pJ2LmZ!!`[,J!)6VVmrB#i[,J!-,bi !#%kkr2j3Mf!H,bi!$#mZ!!K1Z[lk8)pJ$LmZ!!`[,J!)6VVqrPj1G8e"58i J)#!J!!!"k!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$)!&!$)!0`!!!!!!!!I35"XDA4dE'8JGA4 TE'PdH5"dEb"eEQa[BfXJ3dp%44KbCA0[GA*MCA-X)(*PC(9MD@jR)'KPBA!!(QC bB@GYC@jdBA4TEfiJEfiJ-6)iDb"KEQ3J-M8fD`!G8Np0)(0jFh4PEA-Z)#"%6di R9#"98d8J593JD@BFH@peFL"`FQpRFQ&Y)(*eER-JEfiJ0M4V,9*263!DE@&MD'P ZCA-J+(0VD@jZH5`J4Q&d)%eKBbN!&9GbDA4dC@iJBRNJ4'&fC5"3E'&dG"p0B@j j)(4SB@jVFb"dEb"%BACTC#")65"6F'9MG'pb&@C[FL"SDA-Je%GPEQ9bD@-J4%( 9)3e$6d4&)&9ZE'pMDf9b!!!!,J"B!&3"3!'8!!%"!!!!!!!!!-'"'5!J3dp%45" 9EQa[BfYPFL""BQpeG#"#EhJ!!!%U!!)!!!!!!,%!H3$*!-3%!Np,!!!!!!!+!"X !BJ%XL,K8D'Pc)'4PFfXJB@0MCA0cEh*j)(GTE'`JG(9bEL"[CQBJG'KP)#*XEf0 VC@3L)'*TG#"TEL"KE'`J3dp%45"bCA0[GA*MCA-JD@iJB@iJBA"`E'PMBA4TEfi Z)#"9Ff9QG@`JD@iJFQ9NG@0TEQFJD'9KF#"QFQ&RE@9ZG'&dD@pZ)'PZ)("bEfG bB@ec)(4SBA3JGfPXE#"ZEh3JBQ8JFR9Z)'pZ)$BdDbe56ddJE@&MD'PZCA-Z!!! !!!"h!#8!R!%NL%4AFQPdG'9Z)'*j)%4KGQ8J8'aKG(3l)#"LBA0PC#"[EL"dD'8 J4f9ZCA*TBb"%35"LH5"%BACTC#")65"6F'9MG'pb,J!!!'l"J3!!!!!!!!!!rrr rq`e$6d4&)&9ZE'pMDf9b%d&LEh9d)%024%8JG@jXEf0VCA)!!!!!!5d!!!!!&99 ZE'pMDb"$6d4&)(*PFfpeFQ0PF`!!!!!66'pMDb"$6d4&)(*PFfpeFQ0PF`!!!!! !!!!!!3!!!!kX!!!0V!!!!*%!1Z$`"5B!!!!F!))!"%459P)!!!!U4%&833!!!$C %6%p(!!!!3N4*9%`!!!"1689193!!!&S!$!!!)!!!!!!kiLM"J2rr%!!*lJ!ki0c "JIrr!!!,fJ!ki0M"JIrr!!!-$!!ki,M"JIrr!!!01J!ki+31!%024%8J9@jXEf0 VCA,L``: ---