[comp.binaries.mac] Adventures in Programming -- FrameIt

johnr@runx.ips.oz.au (John Rotenstein) (02/09/89)

[Adventures in Programming -- FrameIt]

What do you get when you cross a journalist with a programmer?

The "Adventures in Programming" series describes the development of a
number of public domain programs.  Share the joy, anger and amazement
of writing a program as you learn new techniques which may save an
insurmountable time in the future.  A new form of public domain
journalism.

This adventure describes the development of FrameIt, a utility which
frames screen dumps.  But it isn't as simple as it seems...

Copyright 1988 by John Rotenstein
Printed reproduction requires written permission from the Author

johnr@runx.ips.oz.au (John Rotenstein)

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

:&8CbB@eP5A3J3@4fC@jdGA*P,R0TG!"6593K8dP8)3#3""M"!*!%(ZK6593K!!%
!!"M"FNaKG3%!N!J#%N&NGQ9ZG(9bCG&'FQ&YCD9*G+J!(!*i!!#`VJ!F-J$rr`%
!N!T!pYJ!(!+@!!,p9J#3"ajA4%*1690A4!%!RmU*TCr+LDX!N!BZ!*!('$X!!0-
8!*!'d92qD!!B5,"J349m$#SNf'+JLB%0!6`%d')L4)X8(cU!+*!!B8H1"9YmT#K
3!83I!#a!T"+5*3L)G%,'*"L!B)U%#h2Uh+NcL$%AJJSN-P"++0'"!SS*!3#STP1
H8+0+h4Q%M*dbEZM8N90Q$SJdEN"!NI2QM*``EGU!2D-$K*'cEFU85N+R331k)1k
%m8S(64N3Dp,-mIV'$!JbCF,dG3(L5GJ`)1#%N8-RcCJkE#D$Q+*i+jN`H8#dH52
(c9S358#FH8-(4&r&NFQD4D[@c4N3CXU8BA-kM"Xb)068QG-D64MJG0iF9Tk'$Q-
UIVmLKUbA-"Xb,%#)UG1kleqXIBHRfGXQlelFA1HJFG%!qYmaEpb-+31RGA83Fp+
dJF1Q6,6NSS@aaPq3!-%K'eajS@%C'RQpJ4Pb!K+)haKFBA9B(IZ"J!+&LG&4"R"
h0-FJI'Rj4NB,kU9K"KdYc*!!!JJQ(RE@(6"U4aTLFX")9KfrI89(GYja*8CSFi4
K4fpXX1&DG*A&"@12G1`S4RmJ$&G('%N5#3GibjhQR@YlVI&9@%CJaJB8BB$P(!K
1X!C#I'b%GYqAm-P(Af[jlGGIGR-S0bH6B6)@a)TPj&MR(*K9CKX)GNb@KS0Hc8&
K'[9Ye49kEj5AK"[j)3C#%f'-SHBEkQ9hD++R05V(Sm1"%!3Fr2e&44PM-0LQKl'
p!BGIG(J9)iQRe3&(AL,@H!C@K@)*3Thce3FNS(1)H9qS*2)RQ&mJLJL@DhFSKiD
$FX`KD)r005M(J'5`*`4h5rlP4KPiY'EJ'e1@8GkII`eAk*JHbQ&'U'8)kUXESB%
UDPDN-MM[E'RYfqf$q0f4Q"c2jM[([QS@qZpmbrUQh9mj`&$#QiCpfHfjM1(elP8
jKJ(Va(`Tk*9HS@hl*@,jR4%@XhG'CYc&f@hA@VPN[((Tb@)kf*h-jZA"@"&cE#N
UPR(#Q'5lh#B@f+*h+&JVQ!0ka4r!Bi)J49G&N!$4((Y6[*&GeiUG%20lm69,a`q
ZJK"((CDYN9dHCE4@KKQjM9(C98!f4q9XZeTQRPI([RZ@KpRfKI@Z@'@+PE*3N!$
D,kJ$jJJ&'kh'5#GALU9aeC)1RS&'VaqIi6'!CV$aaKf-)A%lM')SA@2YHbQiD0'
Ya3H#'fD#8-C9@Ff"YqidKY%lZj!!L5V(CCRPZ("kN!#(8FHa#5liH'56&9mbNiV
raEMAH$q4ilI46lrdAe0S46KHCT!!9PjKZ+9"jFAp-GbMh)#h,"4K#L&SJ"&)`lU
,9FN0re),Ec36)X[9V`lhqp'EFM3DVT!!Mc+@`FaNUYBFVm6&0i3a$(J+GCSfS#T
@rHX2Aj3MKVm3"i1j!3i+8Q1leEfQ1i@Uc4YXGiBmK#!&fEPJ"Q26&I$i#J5Skj-
ET&FeiTKS-X#KaK1fj)CU('Bm4,34(Ti%(+VGEQj9ZPL1!!4!@VA'$2lV5REbGje
#$3`iUQ)9BHSc3('jkQTp%FaA[-+c5P'052U"BBaqpM%,AFa#ff+0Ah,8TaATaB-
'@TiHim3Hphc32PjMd-rFF),@e0#4ZJP,$I2(PHc!EhQ&bSiJ63DDXR90I&)!c@K
ka!6["@L+ad+1FUM9-cM+N!#-Z"NLMQBQ)YrG$)aP%H-ALr3b4bfUKR53!"JU!eL
Cq2Ja#BE*Ji1@3mV@9)XVI[P0GPD$c#M9V$ALh!S!c6!Zi+J)"2%NCbP"B*c9+G%
-G+PB@2*CY()#aJflJaXmacQC[kKP-'[TC(6D%)Bc1%jY@)TQlmDiVArLj6KNm)S
a,`8Jb2#'1'@M$PL+4U-D#JmjdF&S'$GDciq0`AX1I'C'El24j9`+SHD-Mk+ZP+8
hF4'CBl!Gd,!Q+E*F$3kNDXi!"fNeQRQ&+h4)dl[5"3,S#2+V$H28EN+M,c0J*TQ
8h)dE@rK#+Se8T'3T6jlmTaQSjUHER(S1dfBCRF%9VM@TkG2hASG@dB4QHfKKca1
@`*JT*(*28%b$kqi'!L8-ajbS`a9NC"V0Ele"6!#5c'"FSj`['@a8kYQ-%Bi31#2
%%BT+!mYIE[Qe%&fYD*FMbh`JbV9QXZY,lrS3DCHPe,rSP)JT#iYIhIJX36lX1J%
D8'l,JL$KS$3qIa'$C$X'b'(L4fTJ&)a`Tl$DeVkfJU*m`fGK4)HXeZT$+F[9I$i
NA!$KYNr)"!Ymj!$9bG8AIA4Bh&ND0`C6C5T@Z%)[EM+6SZ'jbA64JDU(XJ,'A*Q
P+phlAKPNL6#QC[8h@!5"&VRS4Flbp!eM4%&k`-8a)M$K#8F!`3K%!S-DTi!pH,(
GCi@lQMH8X8H`P%-H!QQEq-)(BSMaN!$K%Q5K,qR,8,`C!lVH&*B[M4JVAK4DFX+
#!YSbk$jFQ@*FK#RLYk#P$09i8BaJ'CDZ@3LN8Sd2PMM-5SVL99PDpQCH#Q9$Y4S
1[Pf0$T`15jCkhHXmfeS$3N2%Y9$'d,M4HI,ifLM!)VG(16aDjSGK+XKj'6SlrD'
$h-!Q)H,34cZK@S0Hk9GH1VL@5MHp@TeK)mMcd0&fGjL$$KT!AYDkqV9GRQ3CfY)
j0HdJ9rZK3e[U*`FCe+!'aalTUrY&E0e#)8V(4PiEU*!!KbhT'M9C+F1aj("X1R5
l$%`3M,*9bqdYTCXiabB$'mkJZmp@q`eMZ$Dj3@#&)%J"L[5*dl+0F$Eqj#%&1fJ
2dfDY`A+Tad(3VH(a@21KYjf(APQ9,A$-%0FP`DCE[p(B@A%Q*Q)1KM4jb-kQ1[@
Adb+X90S*64"+3lpDT8%1&(e[MMLH+IaScXdHh"CVFHkEd+$J5f"Kq&4l@ZZV#6f
)[MNLHk,!0bPAE69H3X11A(HjbCbjAc2%@UcCm,Drp"25Ii'UQTMX`H0'mq%3FpQ
@0'1m,c8ePGNT8&cV%lk[#A,3BdTU(4#cF3EfU39M&bieC*DF9F8k-PZaDeHUNII
)[#&MDr6Z5'2BVlkMJF0,%Z40PhSIX""($RAi-jN[0TQ[XC*mDhmVb9acEV%iJ3T
(U,bfDpLb(Th8I,6hGQ'pPa`l1ileea2H'5U'Qc-$am6m9#pSQ42Zkr@-cE#c@8b
KH4X8k*GdDPX8mUk'IC%bN!$)Cr!+Ek3,[!EIKRKc8$18SX-9JrG[0b"b0+*JaCY
,*9erU@-mG4FGQdGTP--H4+!FqI4)df9SH10*rdGdH%9P@&1!INBj9)99@l&9`d8
R9(-DL08'H8FZAJ&8-0)SG&8[(EKp1a9pkl8MLK)`'J*1q13J*q""a1%r5J)(GD!
(HY!If)%ed1GCBJ+$XQ98bH)K-k-J91*fYb&)DK-eQ3%i`'%mGiF9fE%j8p)EC+!
fGkBNk"Gfa[%bEHCSAh)'GC!!"ll5'Um#3mB"(#Zc,hh41S3P28Vc0i($6mF4)*j
L9rP4,bl`)TlNDIeaD&i"2m0e,%[c94!%J"-))%lSJN8B@qp#,(2),[!L9BX5L65
PF(p4Ib68L"+iG(YK'BHd,%+P9@JNCRr"2hChJF+eH6%#'AB`4"MbLB2$ChCb2"M
#Hm1e8UD)+mEMCG-%@J6i@MHP5Rq42jR''&G3,&pb(-`$I%KJ"&23A#ABL`jc(VA
L'm%dA&L#AfB82HDb0HphFfk%FX-PF4T)Fd%B*'8`*'1L0MH&JFm8,DlL"%53!%a
eP#2E3SaIXRRhB6[e#&qApLBX3b*Spd@%%d*XB'kc*eVjXBPl*BV'9hHPaB*K4)5
`a4fba5HD)aU*`5Qc&i%A'4B5H4Vhm5kl954#jSa-Z*!!B`H#"i)@9S0IGC*a("L
*('Q%le)a(V55bQ&&)#B(`(&#*-Nr+ENS*KQ!bTK0UB3efI3'-2Paja&FK$GT)8N
0Cf!lBS!PAS58+83q[(8EX0%IHc%r-0+&h$0l3,H3!%djJ8F@FF[S),q"Bke"8D&
KJK+h*IlL4PA6(l+M*!b%*FQKL*1%(jZ'48(c@a-910m#(,9#+Ndf6'03,5I&))(
%&f%b2J$#)BT")'%"&NIbKe6#D#a&JAE()@r@)m4"'J[*&AZ$M[CNN8jC0LDc8VF
cDPb4'f('-BIbBDf44e4N3j)a(bNc0'*$+UCCPle(D04PNf`d-9r6&eZRQG(4MC&
N'+Kj4USC(9I)C@c@3,2PD!de*U@C"[9bBi%Q5&&$+aA@R63b,@b!AfQ!'"3'4m)
PMj!!`50TX$HcTCXdNJ6lZ(Yb1%beH*r+d`CI+3GR8CEid4aAJPG,b'G[%L6%mK[
H+6%H&)l+-B!fa*TZJ*IP#'LH0)65ej%a1$l&19`BTe9B!e*Yb6p[L6@J@$1f1B(
hmCTF8CYLpi',%S)eC4Vc86@C-eK*e'U[4L"XB&99!JHISB39'%HXH(r3j@Caf$,
(8`BdXRRZ#BYF0BJeH5qN-@88T6-UBKRJ`8Q"4QYcN!!G2&)C5J)CQmGcjH%ENV3
[8CJd1kG-faJTB#T4Z,JAa[0kQdP92r3f-6QPr9'PqRQPh#K8B%&895-X89Ta@&1
,T1-N[DQ,('1J1A)IJ$F[4j+9@#U%h#G0SPGFC"!0rj*jbT%CZ+*pSVFA-ZK*I8)
kH)8h5D!cX1NMb-41pk8jk+Fmp4N`#LG)F6'(9@JBK'J[*hKjRl',@1+N&!9-*+8
Fmd)'U5FKkC%SM8@XqZ&rJX-mZF+YZe8MZHU4mE&U2UHV8d@VK'5VLQN[BiC@GmT
%4`)T&JBAYA%Em1+ADB!9($-G[0&EPQ0P@i4PAp5#2B8#$#J096'0PZ)9Qb)@BrU
[a+BBD1"D)5F(dh"Mb5SfA,'[V4+`,%5`fA@GpP%XjA+2m-%bSF%rN!$4PI5L,-5
TJ[S#(2*S@U'#@ZX"!NIJP6MV+-AT+akNAE$$2h(43855KkAS+6dE(@L)HQ[S+[c
RR$lR*$c)Aj6C,U&aLC-e2SP%'X,*AP)jVZjUXeqT*$P,*GX#S$PS2-Ri-FQ8D43
S'H#6"&E3)M#3!!1cYh,hfA)rqh)-%L1#a)TC0!4E333h9cq`@3hZLM16`NI'%l#
CBASq)P)m)N$'Fal5i,KFB6MU5+#cTcDMfhLK`@$&`dA#K3+fBaXT-!ekp9@(Z$X
qHc$*N9V9#KSQj"X9PDe)@'8DU9%SYS)fG'CIP,VUH"i$QCCT"'KM%CeY%#QTGlK
HiEM43J@kFT2+39(5T5qcGkKX@l5V8T`i4Vc[3DrmBfCa-4FD4$8HCapA55XB0KP
bFKi!JP@V!NZKja@03MUL#4cLql+PY4YJ'"h@Z,!lNbRAQRm@5MXVaDM'481Yk,T
F&35Z35YSB"S!kRQNY9k(-VKRSB*08X(6&,2lJJ,FZLS8q4H)F4@f!`GaN4@cKbC
piE%imL,ZLBM#YQ[QYL80!!*%$!*-%"pRX#PdS'mki!9(E"Y+,'k&NR#U-X4&,,T
-r-4*R"AkPR!0J-94!J)kd!0'M-4+V'mS3!)cN!!$1)"`RKJ@iJ['FZ!&`p@T[lQ
3!++EMN+''N635CMQ3$9,Y'jVY295H@TAIFLV'S*-9D"jJ)'Q2S[mYRmKVahM3,8
'!V(lK1%fEL"j1CH(b2H"'($%JHGab)Tb'b@&b8M-,e)X"qj+N!#hb6q-+`HL#lP
"ja9Uc-D-iE'(T+J@BXF%Qh9rNFQX2'k-JL9eX''HM(P8K4JY!-afNLi+*&XK),5
C9Fe'i"YCPB0M8-fTX@Kkb,154-&9'J6kL+V-ZmHQkiV(f"q-i4K9JefjBQMr)@c
MJe$c')a6aFjr334*-!9,!-)jU9Ar"F2S5,S[#3,DZ`C)Zlk5SB,mddr#M"r+LlT
k("S%QKh@e4VVKhDK8EGRae6+1e+Xk%IZdCZ`#53IHP4I)TYmdk129RQDHSX!jjX
UbiX-qUH+UB0E5Pr5l&@%8BR6-Xq&k+iccDQjH-FilB[Yb)(bf'[Q"9QPA,+EY*F
8&i4#'931kNE*eAb')dZYXG'SQ"8%$4aRSD(P)6Ybm*AJBkF*%TSXSkp9r5DA+5`
$#e1`SE5cel3S9e-cqF)UHS5qCJ9$T+MLdp4SG"PEEF1Ll$d2b5Lfk#5JDR&MLFr
L@`BLXLmeG&-&6,mPk#BeG"VGD"X'k8NSa+%D%JD%NL-m8X0hTS)FGeQ6-d![FP0
1iYCiLU(P1mMR@mJL4PkFF48,l8A%10#DqbA5i!6LPMUV`cp(MBXf[BZ6(Edm'aV
eFd9'k4D[K5C5&V`DFM*N-,[Z@L41SQ3Gr*r*h$(+##2mGpFV+%Ll$51qdMZ)Sca
iB$I!1NX@l"UC*9cRi6%CBm`SB))QYFS"ALMb*jQTU,Q3!2%ZXR-iIa(!bF`B3Q"
$PM*ahD%F$KkDQBV-DII*rD,4Pb@%CI$-5DfbH16Kl)%%4M,4ceh6RZSZfYKl-'A
3kBc4qkL&ad3GCASD&Sh3BE[IM@bLdF'5pl[(2RNTG5Yac0JMaU1hIm'h,4!$0B!
$JFXTJrXTKEZlRiHfAb+cbZ2Njr1*P$M-kVB@iZ+*BL%%$(`&qjMNa()e69dM,`l
0RcVM)&aVKN1TSF(Mjq,M"kfk-+l8dbdd!4)D%KFP(H,I6e6R*blGH,iYmMZ($T6
NK,%U&M9&46AN2$Xi[eU08c!q@&'D`FY93h"JUD0G[!'4bUT91SQTKJiE([-',1-
AH`JIa#'SDplQEelQhJY`XjNH04+#dJ%HDHS`kE3XQ6A45!2S0eklAL&)Qie6XpA
M`a2ST$'`NI)Y%#0a85KjPF-J8#!%3e"FEXjNBB(2QE`[,NfE)fK2KP&d&jUBa$k
'',b1&T0e(fIYjhMM&5-R%!FFLULZ3@CfLI%Clk8KB&kfP+(0k*j'Tp%%U+,$#2i
F##UYrd[8pT+&SD)`BdU@&r0%r[R"TJXJ`&L3!#"-l(V42&M6l0Gqim4&Q@(U&l"
C'@1AFKdZ`#![A("(PiI"3PHaF4hh*F6Hb!bdXlLT`#X95hNq0c9[LN8emZPYRA6
S60&a-YG"iHa5,P$S)'*!"fE&"XPPDXHKFX%aiNK[GmSVi3&U13!C(D3T'1T**9`
Tb-3YS'5,Rj@KRp)m+*fA4ra+P*q4h@V6N!$B8aQAJLKIFai2TEM(h0XlhL1XY"V
YC5%E6U(-"qHMI)T)3q5iL#L22G6*N99&C9EbJ9H!lV$(5ic298DAf6-&iZUR-9*
c""F,#3H@S48G1Rqr($JEQ-L5KPkqJc04mJCj-0(3eiPAJ'LY)EmRBcR0J6G$8#J
k@69!9FfHG-,Ia58Kq+rMmkUBM'%HefB"Vcaa,A([DF-FKaBJQ2X9'h0kH*FJX#l
cmaLb!aE2%MG,#"[')@@RdA4c5Rk`KfK3@Gj!"c-E&)G6H!L`B"H5J0j,8r9SJ1b
D"M#a`-2lZeM6Lf&i[a%3!pU#qj),G1',KDDf-!2B"+fc&liS"V!a(0!!6KdFb!1
BMV#S3"aJjH54%M#!B8%+*%"6``#$J*b6,+rMUM3414$d'N#EL!dC`kc4"l+!VLE
31")Z`SpGq+@(NKm%d*Kc&GcK@mJ"Zh!$$k!1R$!md!dd!#M`"1EImBS"0U!'I$'
[4b@%3#ea!P2J#S!!'3!$C!!,$!*9B!T3!5N3"*K!%JJ#l+%J-!!H)!$#33mJ#N5
J%"D"3MJ9'U%MI)53!$!53S@D-"!#!!NB#!`J&3b%"R!$0Q%Lf)5CB#"NJ$NJ#N(
"31!!eH!8IS06q!j1i6`B#"dJ!X"##J!,mm"!%!&fi"EUJB&`%`D##YJ$[K!RU)"
'd!F!`"d!!(8!'5V$fh%lPQ%I5!-!S!#3!b!!!!3!"LJ!J!!"$!3*%!#!J$68KJ#
!'`)#@JJ!+'%j[)6PX!483Q-`%!E!*4J)"!!9$)3#S!i'`J(J!3-"!Bb"JC!!!$V
"3&J!8J!6-J&-U!N"!#IFK2*J)$b!Hc!3)S!`f)ErB#"3J&fB%YV!3,J!Xf!JB)"
0N!!(kJ#2F!-J-55+a*%)%J'!!5!)&3!!`)-"3"#Ni6`-!#N4!'a%85J+"X)'D)8
!J!2J4!j!$f#K,!3!(5!QGJ!@!!XM3JG)!V9`)(J!66!32N!p'!JK`!RF`RS)!%D
!,aJ)*%!E$)36m!N'!JV!"E`3'J+!&,!(m)"CM"IY*5fHaE9S&YF!33#(d9!!T-5
95""1iN#BLq53!#cb3Tb3!!)B!5pX",b3!"E`3QA!#pQ",b3)+L!)q-+P!!"83%"
XM&h!&mD"B+L'e)YP[)cU44*+3TBi$`R#!JJ!,M%Z0S#@#!$q3848!!3!!%!!!$!
!rN%!!!3'N6-'J(p3!!6!5f50!-!E))@&d!XjS`U!MH83-3*'+e!*#F*-()[!X$%
QK#X!!,!!!-J#"-%fXX68D"*'idCi!+Sa(!)!@TJ59F)&!!!K!!#)!-e)(XZMH6b
2N4#Sl`!!!:
---