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`!!!: ---