-not a Macintosh disk-cIc@ccBH>Ӡ@%m+^NF,  8!"@$|Gn"`I N.@A,H<( F<B<H111Bx<kNNF`, 8! "NH@"|J(g g`LNu"_ |a||a0@||9݁g|w|a||NH瀀 |(_@"g2<@gBA?N`Fa`||aPLNu  fBR$N"NBH@&|݁ |B$<0HN~NL@dBgg>N&|)`RNuBBBA*2h/ BBB N _"_$_"H&|݁ |B$<0NNd 0<`L$|J HA H  2I<FFI<<FFfHHFFfHHH?B@L"_2N _0H 2<@I6@o Az:<2`6@oJA~:<26" @n2BDBB(`EB@nAJEkz`z2<HAIL0.NL0.N  / p? O@ 0  0  XO _,_2_!.NBBB/ BBBN08 @ gNu@ f"_E!NH\O/ ?`@&x|N _!@"|xEx En"`CE"|xN"Ҹ< A  33"|@E E4n"`C&E"|@.N _LHNFLN*8&E@CJJKK f`  f `><$CS*<F|4>BRIBC Gff&<CBSC`D GnKG45BQf` f `Ns |0< BXHQ!4 _$_"_!XOHH/8/ $ f0<? QN ! N.x $_$ g ! N.x !C !!LLyp!N\OFN  l0P߀ Aǀ`  6lo6@ 0_an*>]> j 56, l602  ۰Poo A` &ll6p@ 0?۷a?^ ꭕ 5o6, l602 8!ED91kE"0369? CoNGNOS BOOT FAILED TRY A NEWER MACHINE AND BOOT PROM _"_NN o0<BAN o0 _PON _"_$|0<J"PJQN _"_$|0<"PJQNHL$ orD?|?@?e\SFk!!QSWk:CL<HL|hH>L|4H>L|H>SWjTO>SGk\!Q`TSFk QSWk8L|H|L|H|4L|H|hL|H|LSGkQLx _O NNVH8=| f=|G* G, &N(N n"n$n 0.  S@ZeJ S@BBDBG S@gg.BC CJDg720faL`fa:` 320f8<S@`JDg  fa$` fa`  U@o$SBjt`(N&N><`JGg (Ev#$#$QNukJDg`g 3$f(N`BnLN^ _NUNPACK NV;n N^.NuEVINIT NVH,. ^J]g n0`4B?N. f n0`/.//. /.N(n)FLN^ _NEAD_BLONV/ (n Jno./.?././ /.Nj nJPg`RSn`(_N^ _NEAD_SEQHNT"|E.|r |BBByBygRBf~NuLHPPNqNqpS_n.0<QLHPPNqNqpS_n|~By&JM*Np|azJGfb|a|,Mpa`JGfH|a<<AaJGf0Avtp BQvr BQH@02N\LhL"4NtB@6Kd a"JDf`02IP g a JDf`Nub SBg pxNuBDNu><Nu4< vB@bp2IPSCfSBfNuppB@(4<dBC(4< CBC(C"H4<BACSBf(CAg><NuJoNV?-Nh.H|)?NpN^ _TONRAP NV.HgVS@g`J.f& -XмS//<N(/<N+_X-mX . ѭX -Xo<Np`B . TJ.f/-T/<N/<N+_T-mT -Tl<N,N^ _PONGETSPACNV .мS//<N/<NJ-_ .=@ N^.NuINDSPARNVH.. Bg/N0Hހ m0.@I/./<N( 8//<N @n ?.Bg?<BgN(LN^ _ NETMMU NV0. S@g S@gS@g`=|`=|` =|`BnN^ _\ONONV_DEVNVH nCJp"S@n2BgHnNE g BgNN=_   nV@g8B. Bmh|` @BvRF Fo mXf=|;|@`Bm@`|BgN;_hBgN> Ggd G] G^g$ GdfBgN;_@BgN>`<ND`.BgN8JD] D^g<N$ @=BgN>`|`.H@ABpR. .oBg?./N;_"Bg?./Nz;_,Bg?./Nj;_.Bg?./NZ;_0-| nBPLN^.NuEAD_CONNVH nCJp"S@n~`LH6p@J@^H6pA A_gH6p@H"AA1`H @ABpR o;nh0.H@;@@A r<Ё(@&|H@6LN^.NuROCESS_NVLH nCJp"S@n2BgHnNAx/NAx/HndNJndV nxVgB-e`|e  gHnxNA&HA(AL,*<Hnf?-Z E0-NPH///NJnfg<N(A(H/ HndN.JndV TVg B-fmeg`l-eg*0.zlW"-BWD@f-f @g` B-g -Bf|f/ N`B-f  -e -fg/ NLN^.NuNIT_CONNVH+| \+|l+|(|+|t+|+|l+|(|;TN(|;TZ(|;TX&| n!SLN^.NuETVARS NVH/Nt;| ./+@ .м/м+@+|X*<(< E"D +@T&|?-Z0-NS?NHnHmBNJngp+@BAC6 0HnNBBg/-BgN+_ -Э+@PBB<0<H/BgNZN<+_H+mHBG` m @I G~V GTVgd Gl|p@ @8`$ Gf|p@BT`| p@BT H< @"@=A?.??<BgNJRG Gox mI|p@BT mIP|p@/-H/<N 8LN^NuOOTINIT system.configNVH(nB BgN@BgN8HH,BgNp0HѬ f,/, NBgNBgNHH,BgN>0HѬ f,/, NZBgNBgNHH,BgN 0HѬ f:J`f< N/, NBgNBgNHH,BgN0HѬ g<NHBN,BN+_ n/BN  _r Ё0p//-XN /-/-XN&mX:=E E0o<N0<H+@d+| -dЭ\ n2HҀ -Ё"-Ҁ(Bg Э/N0Hѭ -Є+@B</-BgN+_+m` -\Э`+@h -dЭh, n0HІ+@ -Э+@ -Э+@?<f/-/-?<N^-m/ /./-N n LN^ _ NUILD_SYNVH(nBGBF. gB `P-n n0. PoB."` n0. A-H&n/+/<N&  n0>+<+/, N$BgNBgNHH-@BgN0H(٬ JVJ_gB."`4JGW WJGV WgJFf n `H n n/B."n/BgN.  _ BN-_JGf n Q/ n P/N` Q@H/ n P/N|B. n=h-nA-H n-P/./.p/NJGgR-m`Bg n/( n r Ё/ n P/ nP/ | ? Q@?N9_Jlg< N( nQ f|"LN^ _NOADSEG NV/ BBg/-lBgN+_p -p"-Ҁ+Al(|`p}//<N -Пp((|p}//<N -Пp(?<}/-p/-l?<N(_N^.NuLLOC_SCNVHAC 0BgHnN __m_^+m-^gBBg/-BgNX+_`+m-_gBBg/<BgN4 м,BgBgBHnBgHnHnBg/.N g<NACD 0BgHnN p g B-n`.BgBgBHnBgHnHnBg/.N g<Nn .@+@n -Эn+@j` B -@+@n -м@+@j?</-n/-j?<NH <逐n.JfB` .ЇP-@JfB` .ЇP-@-_g -Ї/ -Ї//./.N\`/-/-BBNJ(|p((|t(LN^.NuOAD_DEB SYSTEM.DEBUG2 SYSTEM.DEBUGNVH nCJp"S@n2&n (nBBgHnN gZB /, N BgN FBgN >HH(BgN v0H* f&.B</BgN&B /, N ~//N LN^ _ NOAD_UNPNVBgBgBHn</. /.Bg/.N g<NN^ _ NOAD_LLDNVH(n 0-F|>Jg,, .* Ю(H//<N ( Д-@`,.(.H//<N p-_?//?<N6 .P/N LN^ _NNSTALL_NVH(n=n ~`/, N dBgN _BgN HH(BgN 0H-@Jg .Ѭ `<N .fBN 4(BN ,( GfAqB0pB5pB`ACZ 0z`BgN f_ .ARE EoHn?<?<HnN AC 0HnHzNdg(AqB0pp @A^B @AB`2HnHzN,gAqB0pB5pB`Aqpp| 5pgnBg?/.Hn @AHp @A^Hp</.Nd g<NN?. @A^/0 @A"0Ҽ/?<NPRGinoLLN^ _ NOADCODEkrni NVBBg/-BgN +_?<e/-/-?<NN^.NuAKESUPSNVH(m . R A T&@-kLN^ _ NINDMAINNVBg/-|NN0Hѭ|B</-|BgN+_?<g/-/-|?<NdBg/-tN0HѭtB</-tBgNF+_x?<{/-x/-t?<N*N^.NuREATEOPNV/Jmho@ mFhomFh0-hH.//<N .0<AHЭX"-ToT.N^.NuONFIG_DNV A0C ArC 0AC 0/NHnHm`/NBgHn0N g< N0HnHn/NfBgHnrN g<N/NBg/.Hn$/N;_F/./.Hm`/Nh-MgN/.$?-F/N/N n /B/.$0-FH//N  _ /N&/NN^ _PONOADSYS $ SYSTEM.UNPACK SYSTEM.OS SYSTEM.LLDN NV,_NUTN z+|T mT PVD@MN0HmHmNHm?- -tЭx//-NNިNRN]N (NuN^NuOADER NVHAT(HA<&HHn?-0-H".Ҁ// / N Jng<NLN^.NuEAD_PAGNV0.H H"-"Ҁ-A0.H H@J@=@/.NvAT0.HЈ-@ N^ _TONIND_SENNVH n-h .S/0-H/N ;@8-n p+@4;m:BF` ATIBBlRF Fo=mA-HA<-HBE n0-HА(BnJf<NHn?-0-HЄ//./.NJng<NxBGA0.HЈ&@Bn=knnZ Eo<NJ ATI ( 9s Jlf<N0,n0.ްm8o`RERG`(-L`HLN^.NuPEN_FILNVH(n| @=@~`84p@k|nAP2IDA0 <f 4pAFRGinoLN^.NuHIFTNAMNVH(n @:JEnBn`pp4A4P@R@H. Eo U@<`BFJFo$ R@4A T@4BRBHށSF`Jl D./0.H/N =@LN^ _\ONDHASH NV~H n CJp"S@n2BA&/Nb 8<-HnNBgHn?-N>H/p6/NNBp6/A/NdACp S@n0HnN^J.gHHnHnN .Wgz n/B?.N~  _ `SFRGmfBGBNJFfELN^ _PONOOKUP_ENVH;n ;m?.?-N;nBNAT(HJg<N;l~+l";l ;l;l;lB?,N&_+S&+k*+k.LN^.NuNITMEDINVBg/.HnNr_n .gB/.N-_N^.NuPENINPUNVH(.BGBF Go<N AT:0JEf<N EHl@ ATH"Ұ n n Jf<NHH " n ``RGE`LN^ _ NIND_POSNV-m4/.0-H/N+_4J4]2-8H4]g<N&0-H/-4/Nl .;@: -4g/-4HnHnN/.NN^.NuILLBUF NV0-:mf -4R2-H//NNT0-:ATpRm:N^NuETBYTE NVHBgNHH<BgNH>JGl H м> G=@LN^NuETWORD NVHBgN0H//<N~,BgN0H.Jl޼ Ї-@LN^NuETLONG NVH,. 0-m:>HǼl>JGo0-:ATA//.H/N$H߮Hǜm:0-HnJ4]2-8H4]g<N -4R/HnHnNn-nA<(H/0-H/N*l-EJoZHn?-0-H".Ҁ/?././ NJng<N0-H/./NV(ٮ .Ѯ .ѭ4`:Jo -4R2-H//N"NhJfLN^ _PONOVEMULT//0/2/ AH@B@2/Ё/@" /WXNu// /"/ N2/A" /WXNu// /"/ N/@" /WXNuH>*jD,jD$&BBx㉰mRSDlJjDjDL|NuH0/ oC"4JBAR`$aJBBB`QQ oC"0/H#//IL._NuH oJB@BA"o JBBBlBA`$HR` fQ`RS@`?A"/oL\NuH o0/2/SA"o JBBA@m`Q/o L NuB`$_02 _ @o0 Ao*BBAm"6@SCBoSA`@"H`RCoN$_0"_ _J/ S@m*BABB@m6B$I”@`!Q`QNuHr`HBA oJ"oJB@f`fQ AA/oL\NuH"o J oJv`:H"o J oJBC`&H o J"oJv`H o J"oJBCB@BA@m4`4`fQ@n C`cC"/oL\NuNuNuJoNu@C [MacSupplement 116j@f/Nt0. @ g0@#g2S@g6U@g:_@ [ux*`$ kT" k [ &$DzLT\X$D $b gi6 *!N"#n$:%"&( '-(0)1B*RB+s ,x- .x12<= rootcatalogːp8@u֟ࣝ3 [  Intrfc/Graf3D.Texth.TexthOBJ/MEMTYPES.OBJhOBJhObj/MacPasLib.Objh.Objhintrfc/QUICKDRAW.TEXTRAW.TEXT Obj/Graf3D.Obj"hj"hIntrfc/MacPrint.Textnt.TextIntrfc/Elems.TexthText́Obj/QuickDraw.Objh.ObjObj/OSTraps.ObjhbjHObj/MacPrint.ObjhObjhIntrfc/Sane.Texthexth Obj/Elems.Obj"h"hFragment/StringList.Textist.T!Intrfc/QuickDraw2.Textaw2.Tex Obj/ElemsAsm.ObjhObjh Obj/Sane.Obj"h"hObj/PrLink.Obj"hj"hOBJ/PACKTRAPS.OBJh.OBJobj/tooltraps.objh.objObj/PrScreen.objhobjhFragment/ZoomRect.Textect.Tex"intrfc/OSINTF.TEXTh.TEXT intrfc/TOOLINTF.TEXTTF.TEXTObj/OSIntf.Obj"hjH RMAKER.OBJ"hH INTRFC/PACKINTF.TEXTTF.TEXT Obj/ToolIntf.ObjhObjHINTRFC/MEMTYPES.TEXTES.TEXTObj/SaneAsm.ObjhbjhOBJ/PACKINTF.OBJhOBJHIntrfc/Elems.TexthText́Ν@D [&%Dc'ʙ%Df LIntrfc/Graf3D.Texth.TexthΝ@E [&m1'Мm3 TIntrfc/MacPrint.Textnt.TextΝ@F [&'ڜ, \,INTRFC/MEMTYPES.TEXTES.TEXTΝ@G [&PY'ޜP\ intrfc/OSINTF.TEXTh.TEXTΝ! [&Ɋ'ɑB BINTRFC/PACKINTF.TEXTTF.TEXTΝ" [&Ν' intrfc/QUICKDRAW.TEXTRAW.TEXTΝ# [& 6' 6" "Intrfc/QuickDraw2.Textaw2.TexΝ@K [&YN'YQ Intrfc/Sane.TexthexthΝ@L [&`'`  intrfc/TOOLINTF.TEXTTF.TEXTΝ$ [&{'F F Obj/Elems.Obj"h"hΝ@N [&%LZ'%L[ bObj/ElemsAsm.ObjhObjhΝ@O [&`1'`5 gObj/Graf3D.Obj"hj"hΝ@P [&mx'$m iObj/MacPasLib.Objh.ObjhΝ@Q [&s(؝',s)O Obj/MacPrint.ObjhObjhΝ@R [&›'5¤' 'OBJ/MEMTYPES.OBJhOBJhΝ@S [&C'9C Obj/OSIntf.Obj"hjHΝ% [&ϟ'Fϫ7 7Obj/OSTraps.ObjhbjHΝ& [&|'O OBJ/PACKINTF.OBJhOBJHΝ@V [&D='VDA OBJ/PACKTRAPS.OBJh.OBJΝ@W [&E'\E (Obj/PrLink.Obj"hj"hΝ@X [&<'a=( -Obj/PrScreen.objhobjhΝ@Y [&Cϝ'eC 0Obj/QuickDraw.Objh.ObjΝ@Z [&HR'mHY! 1! Obj/Sane.Obj"h"hΝ@[ [&`o'v`v! R!Obj/SaneAsm.ObjhbjhΝ@\ [&`|'|`ۀ sObj/ToolIntf.ObjhObjHΝ' [&2'=E xEobj/tooltraps.objh.objΝ( [&F'F  RMAKER.OBJ"hHΝ  [& !' !< ://-  /- HzBg/-  /- HzBg/-  /-  /- HzlBg/-Hm~?</-/-  -~@J@fA~C( 0HzHm~",J_f$Hm~HzHm>?<"A~C>p@ S@nA>C 0A>C 0BmHA~?<"z/NB|]/-  /-  /- HzvBg/- Hm~Bg/- <.?</-  /-  NB+mf/-  /- HzBg/- -nj/?</- HzBg/-  /- HzBg/- -fn/?</- HzBg/-  BB-]/-  /- HzPBg/-  /-  NNN.m:,m6 -2/""N]"NuN^NuMAKER starting pass 2... bytes long. The map is  bytes of resource data. There are The output file is BIUOS^/!<(.TEXT sysResDef!Input file [sysResDef] [.TEXT] - $Copyright 1983, Apple Computer, Inc.6MacIntosh Resource Compiler Version 6.0 May 1984?o.Nu?o.Nup/ _TO>Np/ _TO>N"_ _020N"_ _020NсvjFragment/StringList.Textist.TΝ & [&u,u 2 3. "6F^5D!$ǐ^DZHZHe;***********=============*************==============***************============== ; >>>>>>>>>>>BBBBBRRRRRRRUUUUUUUCCCCCCCCEEEEEEEE<<<<<<<<<<<<< ; I sparcely commented and generalized your GetStrList call as ; shown below. ('GetStr' is already used, yes?) Did I do OK? ; Can I distribute to developers? Your code has been oh so slightly ; modified. ; ; I also copied your ICON definitions for Sony, Folder, etc. for Lotus ; and whoever else asks. Is that OK? ; ; ----- CARY ;***********=============*************==============***************============== ; This assembly code allows you to combine the strings required by your application ; into one or more string lists. The lists are accessed by both an ID number, and ; an index into the string list, counting from 1. The finder, as an example, contains ; all of its strings in two lists. ;=================================================================================== ; ; PROCEDURE GetStrList(VAR theStr: Str255; 8(SP) ; index: INTEGER; 6(SP) ; ID: INTEGER); 4(SP) ; ; Copy the string in the string list with the corresponding ID ; and index to the destination string. ; by Bruce Horn ; ;=================================================================================== GSID .EQU 4 ; ID of string list STR# GSIndex .EQU GSID+2 ; index of requested string GSStr .EQU GSIndex+2 ; VAR of string returned StrLType .EQU 'STR#' ; String list ,.PROC GetStrList,0 ,SUBQ #4, SP ; Save space for handle ,MOVE.L #StrLType, -(SP) ; Push STR# ,MOVE.W GSID+8(SP), -(SP) ; Push ID ,_GetResource ; Get the string list ,MOVE.L (SP)+, A0 ; and copy to A0 ,MOVE.L GSStr(SP), A1 ; Get string in A1 ,CLR.B (A1) ; assume empty ,MOVE.L (A0), A0 ; Dereference stringlist. ,MOVE.W (A0)+, D0 ; Get count ,MOVEQ #0, D0 ; zero high order ,MOVE.W GSIndex(SP), D1 ; Get the index GSLoop ,SUBQ #1, D1 ; Decrement index ,BEQ.S GSCopy ; if zero, have right string ,MOVE.B (A0)+, D0 ; Get string length ,ADD D0, A0 ; Skip over ,BRA.S GSLoop ; and loop back GSCopy ,MOVE.B (A0), D0 ; Get string length ,ADDQ #1, D0 ; include length byte ,_BlockMove ; Copy the string GSExit ,MOVE.L (SP)+, A0 ; Get return address ,ADDQ #8, SP ; Pop parameters ,JMP (A0) ; and return. .END ;A sample RMOVER string list definition follows: Comments ; ------------------------------ ; Type STR# ; ,128 (36) 36 = purgable, preloaded ; *** Initial object names *** comments are allowed in the list ; Untitled this is string 1 ; A serious error has occurred. this is string 2 ; Sorry, out of memory! this is string 3 ; Are you sure you want to quit? ...and so on ; ; put two blank lines at the end ; ,129 0 = nonpurgable ; Even more string items ID 129, index 1,...and so on Fragment/ZoomRect.Textect.TexΝ ' [&uŧ, uũ =3. "6F^5D!$ǐ^DDSA PROCEDURE ZoomRect(VAR smallRect,bigRect: Rect; zoomUp: BOOLEAN); { Given two rectangles in global coords, interpolate one into the other, } { making a zooming rectangle image on the screen. The rectangles and the } { screen image are not altered } CONST zoomSteps = 16; VAR rect1,rect2,rect3,rect4: Rect; $i,j: INTEGER; $savePort: GrafPtr; $fract,factor,one: Fixed; { reals are too slow } #FUNCTION Blend(smallCoord,bigCoord: INTEGER): INTEGER; #VAR smallFix,bigFix,tempFix: Fixed; #BEGIN %smallFix:=one * smallCoord; { scale up to fixed point } %bigFix :=one * bigCoord; %tempFix :=FixMul(fract,bigFix) + FixMul(one-fract,smallFix); %Blend :=FixRound(tempFix); #END; BEGIN "GetPort(savePort); "SetPort(deskPort); "PenPat(gray); "PenMode(notPatXor); "one:=65536; { fixed point 'const' } "IF zoomUp "THEN $BEGIN &rect1:=smallRect; &factor:=FixRatio(6,5); { make bigger each time } &fract:=FixRatio(541,10000); { 5/6 ^16 = 0.540877 } $END "ELSE $BEGIN &rect1:=bigRect; &factor:=FixRatio(5,6); { make smaller each time } &fract:=one; { start full size } $END; "rect2:=rect1; "rect3:=rect1; "FrameRect(rect1); { draw initial image } "FOR i:=1 TO zoomSteps DO $BEGIN &rect4.left :=Blend(smallRect.left,bigRect.left); &rect4.right :=Blend(smallRect.right,bigRect.right); &rect4.top :=Blend(smallRect.top,bigRect.top); &rect4.bottom :=Blend(smallRect.bottom,bigRect.bottom); &FrameRect(rect4); { draw newest } &FrameRect(rect1); { erase oldest } &rect1:=rect2; &rect2:=rect3; &rect3:=rect4; &fract:=FixMul(fract,factor); { bump interpolation fraction } $END; "FrameRect(rect1); { erase final image } "FrameRect(rect2); "FrameRect(rect3); "PenNormal; "SetPort(savePort); END; O^է75PH r^  %Dc{$C Copyright Apple Computer Inc., 1983 } UNIT Elems; ${ Macintosh version. } ${------------------------------------------------------------------------} $INTERFACE (USES ,{$U OBJ/SANE.OBJ } -{ ^^^^ changed 'Obj:' filename reference to 'Obj/' for Workshop-2/24/84 MB} 0SANE { Standard Apple Numeric Environment } ; (procedure Log2X (var x : Extended); ,{ x := log2 (x) } (procedure LnX (var x : Extended); ,{ x := ln (x) } (procedure Ln1X (var x : Extended); ,{ x := ln (1 + x) } (procedure Exp2X (var x : Extended); ,{ x := 2^x } (procedure ExpX (var x : Extended); ,{ x := e^x } (procedure Exp1X (var x : Extended); ,{ x := e^x - 1 } (procedure XpwrI (i : integer; var x : Extended); ,{ x := x^i } (procedure XpwrY (y : Extended; var x : Extended); ,{ x := x^y } (procedure Compound (r, n : Extended; var x : Extended); ,{ x := (1 + r)^n } (procedure Annuity (r, n : Extended; var x : Extended); ,{ x := (1 - (1 + r)^-n) / r } (procedure SinX (var x : Extended); ,{ x := sin(x) } (procedure CosX (var x : Extended); ,{ x := cos(x) } (procedure TanX (var x : Extended); ,{ x := tan(x) } (procedure AtanX (var x : Extended); ,{ x := atan(x) } (procedure NextRandom (var x : Extended); ,{ x := next random (x) } ${$p----------------------------------------------------------------------} $IMPLEMENTATION (procedure Log2X { (var x : Extended) } ; EXTERNAL; (procedure LnX { (var x : Extended) } ; EXTERNAL; (procedure Ln1X { (var x : Extended) } ; EXTERNAL; (procedure Exp2X { (var x : Extended) } ; EXTERNAL; (procedure ExpX { (var x : Extended) } ; EXTERNAL; (procedure Exp1X { (var x : Extended) } ; EXTERNAL; ({ ,Since Elems implementation expects pointer to integer argument, ,use this extra level of interface. (} (procedure XpwrIxxx(var i : integer; var x : Extended); EXTERNAL; (procedure XpwrI { (i : integer; var x : Extended) } ; (begin 0XpwrIxxx(i, x); (end; (procedure XpwrY { (y : Extended; var x : Extended) } ; EXTERNAL; (procedure Compound { (r, n : Extended; var x : Extended) } ; EXTERNAL; (procedure Annuity { (r, n : Extended; var x : Extended) } ; EXTERNAL; (procedure SinX { (var x : Extended) } ; EXTERNAL; (procedure CosX { (var x : Extended) } ; EXTERNAL; (procedure TanX { (var x : Extended) } ; EXTERNAL; (procedure AtanX { (var x : Extended) } ; EXTERNAL; (procedure NextRandom { (var x : Extended) } ; EXTERNAL; $END ${========================================================================} ${========================================================================} ${=======================================================================}. W^56P:H r ^m2{$X-} {$S Graf } UNIT Graf3D; { three-dimensional graphics routines layered on top of QuickDraw } INTERFACE USES {$U-} %{$U obj/QuickDraw } QuickDraw, %{$U obj/Sane } Sane, %{$U obj/Elems } Elems; CONST radConst='57.29578'; TYPE Point3D=RECORD /x: extended; /y: extended; /z: extended; -END; %Point2D=RECORD /x: extended; /y: extended; -END; %XfMatrix = ARRAY[0..3,0..3] OF extended; %Port3DPtr = ^Port3D; %Port3D = RECORD 3GPort: GrafPtr; 3viewRect: Rect; 3xLeft,yTop,xRight,yBottom: extended; 3pen,penPrime,eye: Point3D; 3hSize,vSize: extended; 3hCenter,vCenter: extended; 3xCotan,yCotan: extended; 3ident: BOOLEAN; 3xForm: XfMatrix; 1END; VAR thePort3D: Port3DPtr; "PROCEDURE Open3DPort (port: Port3DPtr); "PROCEDURE SetPort3D (port: Port3DPtr); "PROCEDURE GetPort3D (VAR port: Port3DPtr); "PROCEDURE MoveTo2D(x,y: extended); PROCEDURE MoveTo3D(x,y,z: extended); "PROCEDURE LineTo2D(x,y: extended); PROCEDURE LineTo3D(x,y,z: extended); "PROCEDURE Move2D(dx,dy: extended); PROCEDURE Move3D(dx,dy,dz: extended); "PROCEDURE Line2D(dx,dy: extended); PROCEDURE Line3D(dx,dy,dz: extended); "PROCEDURE ViewPort (r: Rect); "PROCEDURE LookAt (left,top,right,bottom: extended); "PROCEDURE ViewAngle (angle: extended); "PROCEDURE Identity; "PROCEDURE Scale (xFactor,yFactor,zFactor: extended); "PROCEDURE Translate (dx,dy,dz: extended); "PROCEDURE Pitch (xAngle: extended); "PROCEDURE Yaw (yAngle: extended); "PROCEDURE Roll (zAngle: extended); "PROCEDURE Skew (zAngle: extended); "PROCEDURE TransForm (src: Point3D; VAR dst: Point3D); "FUNCTION Clip3D (src1,src2: Point3D; VAR dst1,dst2: POINT): BOOLEAN; "PROCEDURE SetPt3D (VAR pt3D: Point3D; x,y,z: extended); "PROCEDURE SetPt2D (VAR pt2D: Point2D; x,y: extended); IMPLEMENTATION {$I intrfc/GRAF3DIMPL} 3. "6F^5D!$ǐ^{ ---------------------------------------------------------------------- } UNIT MacPrint; {$U-} {Turn on/off the Lisa Libraries.} {$X-} {Turn on/off stack expansion.} {$R-} {Turn on/off range checking.} {$D-} {Turn on/off debug symbols.} INTERFACE { ---------------------------------------------------------------------- } USES {$U Obj/MemTypes } MemTypes, &{$U Obj/QuickDraw } QuickDraw, &{$U Obj/OSIntf } OSIntf; {Interface compile flags, also check CONST's} {$SETC fWordBkOK = TRUE } {Turn on/off word breaking in spool file.[PfWrite]} {$SETC fULFixOK = TRUE } {Turn on/off fixing UL.[PfWrite, PrBand]} { ---------------------------------------------------------------------- } CONST #iPrPgFract = 120; {Page scale factor. ptPgSize (below) is in units of 1/iPrPgFract } #iPrPgFst = 1; {Page range constants} #iPrPgMax = 9999; #iIOBufBytes= 522; {Size of file sys buf.} #iIOBlkBytes= 512; {Size of disk block} #iPrRelease = 2; {Current version number of the code.} #iPrintX = 19; {Spare integers in print rec} {The TPrint Resource type & ID's} #lPStrType = $53545220; {"STR ": Res type for the Pr Rsrc file name} #iPStrRFil = $E000; {-8192} {Str $E000 [in SysRes] is the current printer's rsrc file} #iPStrPFil = $E001; {-8191} {Str $E001 is the default print file name} #lPrintType = $50524543; {"PREC": Res type for the hPrint records} #iPrintDef = 0; {Default hPrint } #iPrintLst = 1; {Last used hPrint} #iPrintDrvr= 2; {.Print's parameter record; not a Print rec} #iMyPrDrvr = $E000; {-8192} {My copy of the above.} {PicFile constants} #iPfMaxPgs = 128; #lPfType = $5046494C; {"PFIL"} #lPfSig = $50535953; {"PSYS"} #iPfIcon = 140; #lPrType = $4150504C; {"APPL"} #lPrSig = $50535953; {"PSYS"} #iPrIcon = 138; {Driver & Resource constants} #sPrDrvr = '.Print'; #iPrDrvrID = 2; {Driver's ResID} #iPrDrvrRef = $FFFD; {Driver's RefNum = NOT ResID} #iPrDrvrDev = $FD00; {Driver's QD Dev num = RefNum in Hi Byte, variant in lo} #iPrBitsCtl = 4; {The Bitmap Print Proc's ctl number} #lScreenBits= $00000000; {The Bitmap Print Proc's Screen Bitmap param} #lPaintBits = $00000001; {The Bitmap Print Proc's Paint [sq pix] param} #lHiScreenBits= $00000010; {The Bitmap Print Proc's Screen Bitmap param} #lHiPaintBits = $00000011; {The Bitmap Print Proc's Paint [sq pix] param} #iPrIOCtl = 5; {The Raw Byte IO Proc's ctl number} #iPrEvtCtl = 6; {The PrEvent Proc's ctl number} #lPrEvtAll = $0002FFFD; {The PrEvent Proc's CParam for the entire screen} #lPrEvtTop = $0001FFFD; {The PrEvent Proc's CParam for the top folder} #iPrDevCtl = 7; {The PrDevCtl Proc's ctl number} #lPrReset = $00010000; {The PrDevCtl Proc's CParam for reset} #lPrPageEnd = $00020000; {The PrDevCtl Proc's CParam for end page} #lPrLineFeed= $00030000; {The PrDevCtl Proc's CParam for paper advance} #lPrLFSixth = $0003FFFF; {The PrDevCtl Proc's CParam for 1/6 th inch paper advance} #lPrLFEighth= $0003FFFE; {The PrDevCtl Proc's CParam for 1/8 th inch paper advance} #iFMgrCtl = 8; {The FMgr's Tail-hook Proc's ctl number} ;{ [The Pre-Hook is the status call] } {General Dlg/Alert[=Ax] Constants:} $iOK = 1; iCancel = 2; #iPrStlDlg= $E000; {-8192} #iPrJobDlg= $E001; {-8191} #iPrCfgDlg= $E002; {-8190} #iPgFeedAx= $E00A; {-8182} #iPicSizAx= $E00B; {-8181} #iIOAbrtAx= $E00C; {-8180} {Sys Error & Deap Shit Constants:} #iMemFullErr = -108; #iPrAbort = 128; #iPicLim = 129; #iPicMax = 130; #iIOAbort = -27; #iPrDeapShit = 29; {The PrVars lo mem area:} #pPrGlobals = $00000944; #bDraftLoop = 0; #bSpoolLoop = 1; #bUser1Loop = 2; #bUser2Loop = 3; { ---------------------------------------------------------------------- } TYPE #TN = 0..15; {A Nibble} #TStr80 = String[80]; {A medium size string} #TPStr80 = ^TStr80; {..its pointer} #TPRect = ^Rect; {A Rect Ptr} #TPBitMap = ^BitMap; {A BitMap Ptr} #TWord = PACKED RECORD {General purpose "alias" record for a word & long.} &CASE Integer OF )0: ( c1, c0: Char ); )1: ( b1, b0: SignedByte ); )2: ( usb1, usb0: Byte ); )3: ( n3, n2, n1, n0: TN ); )4: ( f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0: Boolean ); )5: ( i0: Integer ); #END; #TLong = RECORD &CASE Integer OF )0: ( w1, w0: TWord ); )1: ( l0: LongInt ); )2: ( p0: Ptr ); )3: ( h0: Handle ); )4: ( pt: Point ); #END; 5{NOTE: Changes will also affect: PrEqu, TCiVars & TPfVars} #TPrVars = RECORD {4 longs for printing, see SysEqu for location.} &iPrErr: Integer; {Current print error. Set to iPrAbort to abort printing.} &bDocLoop: SignedByte; {The Doc style: Draft, Spool, .., and ..} D{Currently use low 2 bits; the upper 6 are for flags.} &bUser1: SignedByte; {Spares used by the print code} &lUser1: TLong; &lUser2: TLong; &lUser3: TLong; #END; #TPPrVars = ^TPrVars; #TPrInfo = RECORD {Print Info Record: The parameters needed for page composition.} &iDev: Integer; {Font mgr/QuickDraw device code} &iVRes: Integer; {Resolution of device, in device coordinates} &iHRes: Integer; { ..note: V before H => compatable with Point.} &rPage: Rect; {The page (printable) rectangle in device coordinates.} #END; #TPPrInfo = ^TPrInfo; {These are types of paper feeders.} #TFeed = ( feedCut, feedFanfold, feedMechCut, feedOther ); #TPrStl = RECORD {Printer Style: The printer configuration and usage information.} &wDev: TWord; {The device (driver) number. Hi byte=RefNum, Lo byte=variant.} &iPageV: Integer; {paper size in units of 1/iPrPgFract} &iPageH: Integer; { ..note: V before H => compatable with Point.} &bPort: SignedByte; {The IO port number. Refnum?} &feed: TFeed; {paper feeder type.} #END; #TPPrStl = ^TPrStl; {Banding data structures. Not of general interest to Apps.} #TScan = {Band Scan direction Top-Bottom, Left-Right, etc.} &( scanTB, scanBT, scanLR, scanRL ); #TPrXInfo = RECORD {The print time eXtra information.} &iRowBytes: Integer; {The Band's rowBytes.} &iBandV: Integer; {Size of band, in device coordinates} &iBandH: Integer; { ..note: V before H => compatable with Point.} &iDevBytes: Integer; {Size for allocation. May be more than rBounds size!} &iBands: Integer; {Number of bands per page.} &bPatScale: SignedByte; {Pattern scaling} &bULThick: SignedByte; {3 Underscoring parameters} &bULOffset: SignedByte; &bULShadow: SignedByte; &scan: TScan; {Band scan direction} &bXInfoX: SignedByte; {An eXtra byte.} #END; #TPPrXInfo = ^TPrXInfo; #TPrJob = RECORD {Print Job: Print "form" for a single print request.} &iFstPage: Integer; {Page Range.} &iLstPage: Integer; &iCopies: Integer; {No. copies.} &bJDocLoop: SignedByte; {The Doc style: Draft, Spool, .., and ..} &fFromUsr: Boolean; {Printing from an User's App (not PrApp) flag} &pIdleProc: ProcPtr; {The Proc called while waiting on IO etc.} &pFileName: TPStr80; {Spool File Name: NIL for default.} &iFileVol: Integer; {Spool File vol, set to 0 initially} &bFileVers: SignedByte; {Spool File version, set to 0 initially} &bJobX: SignedByte; {An eXtra byte.} #END; #TPPrJob = ^TPrJob; #TPrint = RECORD {The universal 120 byte printing record} &iPrVersion: Integer; {Printing software version} &PrInfo: TPrInfo; {the PrInfo data associated with the current style.} &rPaper: Rect; {The paper rectangle [offset from rPage].} &PrStl: TPrStl; {This print request's style.} &PrInfoPT: TPrInfo; {Print Time Imaging metrics} &PrXInfo: TPrXInfo; {Print-time (expanded) Print info record.} &PrJob: TPrJob; {The Print Job request} &PrintX: Array[1..iPrintX]of integer; {Spare to fill to 120 bytes!} #END; #TPPrint = ^TPrint; #THPrint = ^TPPrint; {Printing Graf Port. All printer imaging, whether spooling, banding, etc, happens "thru" a GrafPort.} #TPrPort = RECORD {This is the "PrPeek" record.} &GPort: GrafPort; {The Printer's graf port.} &GProcs: QDProcs; {..and its procs} &lGParam1: TLong; {Some params: Our relocatable stuff etc.} &lGParam2: TLong; &lGParam3: TLong; &lGParam4: TLong; &fOurPtr: Boolean; {Whether the PrPort allocation was done by us.} &fOurBits: Boolean; {Whether the BitMap allocation was done by us.} #END; #TPPrPort = ^TPrPort; #TPPort = RECORD {Pascal Yuk: Alias to merge a grafport & prport} &CASE Integer OF )0: (pGPort: GrafPtr); )1: (pPrPort: TPPrPort); #END; #TPrStatus = RECORD {Print Status: Print information during printing.} &iTotPages: Integer; {Total pages in Print File.} &iCurPage: Integer; {Current page number} &iTotCopies: Integer; {Total copies requested} &iCurCopy: Integer; {Current copy number} &iTotBands: Integer; {Total bands per page.} &iCurBand: Integer; {Current band number} &fPgDirty: Boolean; {True if current page has been written to.} &fImaging: Boolean; {Set while in band's DrawPic call.} &hPrint: THPrint; {Handle to the active Printer record} &pPrPort: TPPrPort; {Ptr to the active PrPort} &hPic: PicHandle; {Handle to the active Picture} #END; #TPPrStatus = ^TPrStatus; {PicFile = a TPfHeader followed by n QuickDraw Pics (whose PicSize is invalid!)} #TPfPgDir = RECORD &iPages: Integer; &lPgPos: ARRAY [0..iPfMaxPgs] OF LongInt; #END; #TPPfPgDir = ^TPfPgDir; #THPfPgDir = ^TPPfPgDir; #TPfHeader = RECORD {Print File header.} &Print: TPrint; &PfPgDir: TPfPgDir; #END; #TPPfHeader = ^TPfHeader; #THPfHeader = ^TPPfHeader; {Note: Type compatable with an hPrint.} (* This is not included here due to requiring $Use-ing the entire world! #It's only used by those desiring to customize the print dialogs. #TPrDlg = RECORD {Print Dialog: The Dialog Stream object.} &Dlg: DialogRecord; {The Dialog window} &pFltrProc: ProcPtr; {The Filter Proc.} &pItemProc: ProcPtr; {The Item evaluating proc.} &hPrintUsr: THPrint; {The user's print record.} &fDoIt: Boolean; &fDone: Boolean; &lUser1: TLong; {Four longs for user's to hang global data.} &lUser2: TLong; &lUser3: TLong; &lUser4: TLong; #{ ...Plus more stuff needed by the particular printing dialog.} #END; #TPPrDlg = ^TPrDlg; {== a dialog ptr} *) { ---------------------------------------------------------------------- } { --Init-- } PROCEDURE PrOpen; #{ Open the .Print driver, get the Current Printer's Rsrc file %name from SysRes, open the resource file, and open the .Print driver %living in SysRes. %PrOpen MUST be called during init time. } PROCEDURE PrClose; #{Closes JUST the print rsrc file. Leaves the .Print driver in SysRes open.} { --Print Dialogs & Default-- } PROCEDURE PrintDefault ( hPrint: THPrint ); #{ Defaults a handle to a Default Print record. %Note: You allocate (or fetch from file's resources..) the handle, +I fill it. Also, I may invoke this at odd times whenever +I think you have an invalid Print record! } FUNCTION PrValidate ( hPrint: THPrint ): Boolean; #{ Checks the hPrint. Fixes it if there has been a change in SW %version or in the current printer. Returns fChanged. %Note: Also updates the various parameters within the Print +record to match the current values of the PrStl & PrJob. +It does NOT set the fChanged result if these +parameters changed as a result of this update. } FUNCTION PrStlDialog ( hPrint: THPrint ): Boolean; FUNCTION PrJobDialog ( hPrint: THPrint ): Boolean; #{ The Dialog returns the fDoIt flag: )IF PrJobDialog(..) THEN BEGIN ,PrintMyDoc (..); ,SaveMyStl (..) )END -OR )IF PrStlDialog(..) THEN SaveMyStl (..) &NOTE: These may change the hPrint^^ if the version number ,is old or the printer is not the current one. } PROCEDURE PrJobMerge (hPrintSrc, hPrintDst: THPrint); #{ Merges hPrintSrc's PrJob into hPrintDst [Source/Destination]. %Allows one job dialog being applied to several docs [Finder printing] } { --The Document printing procs: These spool a print file.-- } FUNCTION PrOpenDoc ( hPrint: THPrint; 5pPrPort: TPPrPort; 5pIOBuf: Ptr ): TPPrPort; #{ Set up a graf port for Pic streaming and make it the current port. %Init the print file page directory. %Create and open the print file. %hPrint: The print info. %pPrPort: the storage to use for the TPrPort. If NIL we allocate. %pIOBuf: an IO buf; if NIL, file sys uses volume buf. %returns TPPrPort: The TPPrPort (graf port) used to spool thru. } PROCEDURE PrCloseDoc ( pPrPort: TPPrPort ); #{ Write the print file page directory. %Close the print file. } PROCEDURE PrOpenPage ( pPrPort: TPPrPort; pPageFrame: TPRect ); #{ If current page is in the range of printed pages: 'Open a picture for the page 'Otherwise set a null port for absorbing an image. %pPageFrame := PrInfo.rPage, unless you're scaling. %Set pPageFrame to NIL unless you want to perform PicScaling on the printer. %[The printing procs will call OpenPicture (pPageFrame^) and DrawPicture (hPic, rPage);] %Note: Use of QuickDraw may now cause File IO errors due to our Pic spooling! } PROCEDURE PrClosePage( pPrPort: TPPrPort ); #{ Close & kill the page picture. %Update the file page directory. %If we allocated the TPrPort then de-allocate it. } { --The "Printing Application" proc: Read and band the spooled PicFile.-- } PROCEDURE PrPicFile( hPrint: THPrint; 5pPrPort: TPPrPort; 5pIOBuf: Ptr; 5pDevBuf: Ptr; 5VAR PrStatus: TPrStatus ); #{ Read and print the spooled print file. %The idle proc is run during Imaging and Printing. } (* Removed: fources assumption of use of Pic spool files! PROCEDURE PrPic ( hPic: PicHandle; 2hPrint: THPrint; 2pPrPort: TPPrPort; 2pDevBuf: Ptr; 2VAR PrStatus: TPrStatus ); #{ Print a memory resident picture (one page). } *) { --Get/Set the current Print Error-- } FUNCTION PrError: Integer; PROCEDURE PrSetError ( iErr: Integer ); { --The .Print driver calls.-- } PROCEDURE PrDrvrOpen; PROCEDURE PrDrvrClose; #{ Open/Close the .Print driver in SysRes. Make it purgable or not. %ONLY used by folks doing low level stuff, not full document printing. } PROCEDURE PrCtlCall (iWhichCtl: Integer; lParam1, lParam2, lParam3: LongInt); #{ A generalized Control proc for the Printer driver. %The main use is for bitmap printing: )PrCtlCall (iPrBitsCtl, pBitMap, pPortRect, lControl); )== )PROCEDURE PrBits ( pBitMap: Ptr; --QuickDraw bitmap >pPortRect: TPRect; --a portrect. use bounds for whole bitmap >lControl: LongInt ); --0=>Screen resolution/Portrait %This dumps a bitmap/portrect to the printer. %lControl is a device dep param; use 0 for screen res/portrait/etc. %Each different printer will use lControl parameter differently. %Thus PrCtlCall (iPrBitsCtl, @MyPort^.ScreenBits, @MyPort^.PortRect.Bounds,0) %performs a screen dump of just my port's data. %Two special control calls are included in the driver for Screen printing from the %key board: ,PrCtlCall (iPrEvtCtl, lPrEvtAll, 0, 0); Prints the screen ,PrCtlCall (iPrEvtCtl, lPrEvtTop, 0, 0); Prints the top folder %These are handled by the system for key board access but can be called by anyone %at any time. They can be very cheap printing for ornaments, for example! %Another useful call is used for sending raw data to the printer: )PrCtlCall (iPrIOCtl, pBuf, lBufCount, pIdleProc); } {These .Print driver calls are only available in the PrScreen module.-- } PROCEDURE PrPurge; PROCEDURE PrNoPurge; FUNCTION PrDrvrDCE: Handle; FUNCTION PrDrvrVers: Integer; { --Semi private stuff-- } (* The dialog customizing stuff: FUNCTION PrStlInit ( hPrint: THPrint ): TPPrDlg; FUNCTION PrJobInit ( hPrint: THPrint ): TPPrDlg; FUNCTION PrDlgMain ( hPrint: THPrint; pDlgInit: ProcPtr ): Boolean; *) PROCEDURE PrCfgDialog; PROCEDURE PrHack ( lParam1, lParam2, lParam3: TLong ); { ---------------------------------------------------------------------- } {Misc Utilities} {File Utilities: IO68K} {FUNCTION PrStr80Ptr (sName:TStr80): TPStr80;} FUNCTION PrCreateFile(sName:TStr80; iVol: Integer; bVersion: SignedByte): Integer; FUNCTION PrDeleteFile(sName:TStr80; iVol: Integer; bVersion: SignedByte): Integer; FUNCTION PrOpenFile (sName:TStr80; iVol: Integer; bVersion: SignedByte; 4fTrunc: Boolean; pBuf: Ptr; VAR iRefNum: Integer): Integer; FUNCTION PrWriteBlk (iRefNum, iMode:Integer; lPos:LongInt; p:Ptr; lBytes:LongInt ):Integer; FUNCTION PrReadBlk (iRefNum, iMode:Integer; lPos:LongInt; p:Ptr; lBytes:LongInt ):Integer; FUNCTION PrCloseFile(iRefNum: Integer): Integer; {Scc utilitys: Scc68k} FUNCTION PrSCCInit (iBaudEtc: Integer; lHndShk: LongInt): Integer; FUNCTION PrBlockOut (pIdleProc: ProcPtr; pData: Ptr; lBytes: LongInt): Integer; (*FUNCTION PrIOCheck (lTimeOut: LongInt; pData: Ptr; lBytes: LongInt): Integer;*) PROCEDURE XPrIdle (pIdleProc: ProcPtr); PROCEDURE PrAbortCheck; {Other Utilities: PrMacMisc} FUNCTION lPrMul (i1, i0: Integer): LongInt; FUNCTION lPrDiv (lTop: LongInt; iBot: Integer): LongInt; {Performance tool} Procedure SpyInit; Procedure SpyClose; Procedure Spy (iBucket: Integer); { ---------------------------------------------------------------------- } IMPLEMENTATION PROCEDURE PrOpen; EXTERNAL; PROCEDURE PrClose; EXTERNAL; PROCEDURE PrintDefault; EXTERNAL; FUNCTION PrValidate; EXTERNAL; FUNCTION PrStlDialog; EXTERNAL; FUNCTION PrJobDialog; EXTERNAL; PROCEDURE PrJobMerge; EXTERNAL; FUNCTION PrOpenDoc; EXTERNAL; PROCEDURE PrCloseDoc; EXTERNAL; PROCEDURE PrOpenPage; EXTERNAL; PROCEDURE PrClosePage; EXTERNAL; PROCEDURE PrPicFile; EXTERNAL; PROCEDURE PrCfgDialog; EXTERNAL; PROCEDURE PrHack; EXTERNAL; FUNCTION PrError; EXTERNAL; PROCEDURE PrSetError; EXTERNAL; PROCEDURE PrDrvrOpen; EXTERNAL; PROCEDURE PrDrvrClose; EXTERNAL; PROCEDURE PrPurge; EXTERNAL; PROCEDURE PrNoPurge; EXTERNAL; PROCEDURE PrCtlCall; EXTERNAL; FUNCTION PrDrvrDCE; EXTERNAL; FUNCTION PrDrvrVers; EXTERNAL; {FUNCTION PrStr80Ptr; EXTERNAL;} FUNCTION PrCreateFile; EXTERNAL; FUNCTION PrDeleteFile; EXTERNAL; FUNCTION PrOpenFile; EXTERNAL; FUNCTION PrWriteBlk; EXTERNAL; FUNCTION PrReadBlk; EXTERNAL; FUNCTION PrCloseFile; EXTERNAL; FUNCTION lPrMul; EXTERNAL; FUNCTION lPrDiv; EXTERNAL; FUNCTION PrSCCInit; EXTERNAL; FUNCTION PrBlockOut; EXTERNAL; (*FUNCTION PrIOCheck; EXTERNAL;*) PROCEDURE XPrIdle; EXTERNAL; PROCEDURE PrAbortCheck; EXTERNAL; Procedure SpyInit; EXTERNAL; Procedure SpyClose; EXTERNAL; Procedure Spy; EXTERNAL; { ---------------------------------------------------------------------- } END. {Change Log $2/ 9/84: Removed PrPic Procedure: Assumes Pic based print file. } 3. "6F^5D!$ǐ^PY UNIT MemTypes; { Copyright 1983 Apple Computer Inc. } {types which are basic to all Macintosh applications} {RS Apr 30 84 created by taking types from quickdraw and toolintf} INTERFACE TYPE "SignedByte = -128..127; { any byte in memory } "Byte = 0..255; { Unsigned byte for fontmgr } "Ptr = ^SignedByte; { blind pointer } "Handle = ^Ptr; { pointer to a master pointer } "ProcPtr = Ptr; { pointer to a procedure } "Fixed = LongInt; "Str255 = String[255]; "StringPtr = ^Str255; "StringHandle = ^StringPtr; IMPLEMENTATION END. { of UNIT } W^g5PH r^$%1010Ɋ Unit OSINTF; { Copyright 1983 by Apple Computer, Inc. All Rights Reserved. } { Created 23 Nov 83 by Rony Sebok from heapZone.text and osMisc.text.} { Modification history: } { 12 Apr 84 JTC Cleaned up a la Hacker. } Interface USES {$U-} %{$U obj/MemTypes } MemTypes, %{$U obj/QuickDraw } QuickDraw; CONST "{for Event Manager} "everyEvent = -1; "NullEvent = 0; "mouseDown = 1; "mouseUp = 2; "keyDown = 3; "keyUp = 4; "autoKey = 5; "updateEvt = 6; "diskEvt = 7; "activateEvt = 8; "driverEvt = 11; "app1Evt = 12; "app2Evt = 13; "app3Evt = 14; "app4Evt = 15; "{ event mask equates } "mDownMask = 2; "mUpMask = 4; "keyDownMask = 8; "keyUpMask = 16; "autoKeyMask = 32; "updateMask = 64; "diskMask = 128; "activMask = 256; "driverMask = 2048; "app1Mask = 4096; "app2Mask = 8192; "app3Mask = 16384; "app4Mask = -32768; "{to decipher event message for keyDown events} "charCodeMask = $000000FF; "keyCodeMask = $0000FF00; "{ modifiers } "optionKey= 2048; { Bit 3 of high byte } "alphaLock= 1024; { Bit 2 } "ShiftKey= 512; { Bit 1 } "CmdKey= 256; { Bit 0 } "BtnState= 128; { Bit 7 of low byte is mouse button state } "activeFlag = 1; { bit 0 of modifiers for activate event } "changeFlag = 2; { bit 1 of modifiers for activate event } {for Memory Manager} "MemFullErr = -108; { Not enough room in heap zone } "NilHandleErr = -109; { Master Pointer was NIL in HandleZone or other } "MemWZErr = -111; { WhichZone failed (applied to free block) } "MemPurErr = -112; { trying to purge a locked or non-purgeable block } "NoErr = 0; { All is well } "{file system error codes} "DirFulErr = -33; { Directory full} "DskFulErr = -34; { disk full} "NSVErr = -35; { no such volume} "IOErr = -36; { I/O error (bummers)} "BdNamErr = -37; { there may be no bad names in the final system!} "FNOpnErr = -38; { File not open} "EOFErr = -39; { End of file} "PosErr = -40; { tried to position to before start of file (r/w)} "MFulErr = -41; { memory full(open) or file won't fit (load)} "TMFOErr = -42; { too many files open} "FNFErr = -43; { File not found} "WPrErr = -44; { diskette is write protected} "FLckdErr = -45; { file is locked} "VLckdErr = -46; { volume is locked} "FBsyErr = -47; { File is busy (delete)} "DupFNErr = -48; { duplicate filename (rename)} "OpWrErr = -49; { file already open with with write permission} "ParamErr = -50; { error in user parameter list} "RFNumErr = -51; { refnum error} "GFPErr = -52; { get file position error} "VolOffLinErr = -53; { volume not on line error (was Ejected)} "PermErr = -54; { permissions error (on file open)} "VolOnLinErr = -55; { drive volume already on-line at MountVol} "NSDrvErr = -56; { no such drive (tried to mount a bad drive num)} "NoMacDskErr = -57; { not a mac diskette (sig bytes are wrong)} "ExtFSErr = -58; { volume in question belongs to an external fs} "FSRnErr = -59; { file system rename error:} >{ during rename the old entry was deleted } >{ but could not be restored . . .} "BadMDBErr = -60; { bad master directory block} "WrPermErr = -61; { write permissions error} "firstDskErr = -84; {first of the range of low-level disk errors} "lastDskErr = -64; {last of the range of low-level disk errors} "MaxSize = $800000; { Max data block size is 512K bytes } "{finder constants} "fHasBundle = 32; "fInvisible = 64; "fTrash = -3; "fDesktop = -2; "fDisk = 0; "{io constants} "{ioPosMode values} "fsAtMark = 0; "fsFromStart = 1; "fsFromLEOF = 2; "fsFromMark = 3; "{ioPermission values} "fsCurPerm = 0; "fsRdPerm = 1; "fsWrPerm = 2; "fsRdWrPerm = 3; "{refNums fro the serial ports} "AinRefNum = -6; {serial port A input} "AoutRefNum = -7; {serial port A output} "BinRefNum = -8; {serial port B input} "BoutRefNum = -9; {serial port B output} "{baud rate constants} "baud300 = 380; "baud600 = 189; "baud1200 = 94; "baud1800 = 62; "baud2400 = 46; "baud3600 = 30; "baud4800 = 22; "baud7200 = 14; "baud9600 = 10; "baud19200 = 4; "baud57600 = 0; "{SCC channel configuration word} "{driver reset information masks} "stop10 = 16384; "stop15 = -32768; "stop20 = -16384; "noParity = 8192; "oddParity = 4096; "evenParity = 12288; "data5 = 0; "data6 = 2048; "data7 = 1024; "data8 = 3072; "{serial driver error masks} "swOverrunErr = 0; "parityErr = 16; "hwOverrunErr = 32; "framingErr = 64; "{serial driver message constant} "xOffWasSent = $80; "{for application parameter} "{constants for message returned by the finder on launch} "appLoad = 0; "appPrint = 1; #{masks used for writing and reading from sytem parameter RAM} #everyParam = 1048575; #validMask = 1; #portAMask = 48; #portBMask = 192; #alarmMask = 3840; #fontMask = 12288; #kbdMask = 16384; #printMask = 32768; #volCtlmask = 65536; #clikCaretMask = 131072; #miscMask = 524288; ${for sound driver} $SWmode = -1; $FTmode = 1; $FFmode = 0; TYPE "{for Event Manager} "EventRecord = RECORD 2what: INTEGER; 2message: LongInt; 2when: LongInt; 2where: Point; 2modifiers: INTEGER; 1END; "Zone = Record 2BkLim: Ptr; 2PurgePtr: Ptr; 2HFstFree: Ptr; 2ZCBFree: LongInt; 2GZProc: ProcPtr; 2MoreMast: Integer; 2Flags: Integer; 2CntRel: Integer; 2MaxRel: Integer; 2CntNRel: Integer; 2MaxNRel: Integer; 2CntEmpty: Integer; 2CntHandles: Integer; 2MinCBFree: LongInt; 2PurgeProc: ProcPtr; 2SparePtr: Ptr; { reserved for future } 2AllocPtr: Ptr; 2HeapData: Integer; /End; "THz = ^Zone; { pointer to the start of a heap zone } "Size = LongInt; { size of a block in bytes } "OsErr = Integer; { error code } "QElemPtr = ^QElem; {ptr to generic queue element} {Vertical Blanking Control Block Queue Element} VBLTask = RECORD $qLink: QElemPtr; {link to next element} $qType: INTEGER; {unique ID for validity check} $vblAddr: ProcPtr; {address of service routine} $vblCount: INTEGER; {count field for timeout} $vblPhase: INTEGER; {phase to allow synchronization} "END; {VBLCntrlBlk} {VBLQElPtr = ^VBLTask;} evQEl = RECORD $qLink: QElemPtr; $qType: INTEGER; $evtQwhat: INTEGER; {this part is identical to the EventRecord as...} $evtQmessage:LongInt; {defined in ToolIntf} $evtQwhen: LongInt; $evtQwhere: Point; $evtQmodifiers: INTEGER; "END; "{drive queue elements} DrvQEl = RECORD $qLink: QElemPtr; $qType: INTEGER; $dQDrive: INTEGER; $dQRefNum: INTEGER; {ref num of the drvr which handles this drive} $dQFSID: INTEGER; {id of file system which handles this drive} $dQDrvSize: INTEGER; {size of drive in 512-byte blocks -- not for drvs 1&2} "END; DrvQElPtr = ^DrvQEl; "ParamBlkType = (IOParam,FileParam,VolumeParam,CntrlParam); "OsType = PACKED ARRAY[1..4] OF CHAR; {same as rsrc mgr's Restype} "FInfo = RECORD {record of finder info} ,fdType: OsType; {the type of the file} ,fdCreator: OsType; {file's creator} ,fdFlags: INTEGER; {flags ex. hasbundle,invisible,locked, etc.} ,fdLocation: Point; {file's location in folder} ,fdFldr: INTEGER; {folder containing file} *END; {FInfo} "ParamBlockRec = RECORD ({12 byte header used by the file and IO system} (qLink: QElemPtr; {queue link in header} (qType: INTEGER; {type byte for safety check} (ioTrap: INTEGER; {FS: the Trap} (ioCmdAddr: Ptr; {FS: address to dispatch to} ({common header to all variants} (ioCompletion: ProcPtr; {completion routine addr (0 for synch calls)} (ioResult: OsErr; {result code} (ioNamePtr: StringPtr; {ptr to Vol:FileName string} (ioVRefNum: INTEGER; {volume refnum (DrvNum for Eject and MountVol)} ({different components for the different type of parameter blocks} (CASE ParamBlkType OF (ioParam: *(ioRefNum: INTEGER; {refNum for I/O operation} +ioVersNum: SignedByte; {version number} +ioPermssn: SignedByte; {Open: permissions (byte)} +ioMisc: Ptr; {Rename: new name} D{GetEOF,SetEOF: logical end of file} D{Open: optional ptr to buffer} D{SetFileType: new type} +ioBuffer: Ptr; {data buffer Ptr} +ioReqCount: LongInt; {requested byte count} +ioActCount: LongInt; {actual byte count completed} +ioPosMode: INTEGER; {initial file positioning} +ioPosOffset: LongInt); {file position offset} (FileParam: *(ioFRefNum: INTEGER; {reference number} +ioFVersNum: SignedByte; {version number} +filler1: SignedByte; +ioFDirIndex: INTEGER; {GetFileInfo directory index} +ioFlAttrib: SignedByte; {GetFileInfo: in-use bit=7, lock bit=0} +ioFlVersNum: SignedByte; {file version number} +ioFlFndrInfo: FInfo; {user info} +ioFlNum: LongInt; {GetFileInfo: file number} +ioFlStBlk: INTEGER; {start file block (0 if none)} +ioFlLgLen: LongInt; {logical length (EOF)} +ioFlPyLen: LongInt; {physical lenght} +ioFlRStBlk: INTEGER; {start block rsrc fork} +ioFlRLgLen: LongInt; {file logical length rsrc fork} +ioFlRPyLen: LongInt; {file physical length rsrc fork} +ioFlCrDat: LongInt; {file creation date & time (32 bits in secs)} +ioFlMdDat: LongInt); {last modified date and time} )VolumeParam: +(filler2: LongInt; ,ioVolIndex: INTEGER; {volume index number} ,ioVCrDate: LongInt; {creation date and time} ,ioVLsBkUp: LongInt; {last backup date and time} ,ioVAtrb: INTEGER; {volume attrib} ,ioVNmFls: INTEGER; {number of files in directory} ,ioVDirSt: INTEGER; {start block of file directory} ,ioVBlLn: INTEGER; {GetVolInfo: length of dir in blocks} ,ioVNmAlBlks: INTEGER; {GetVolInfo: num blks (of alloc size)} ,ioVAlBlkSiz: LongInt; {GetVolInfo: alloc blk byte size} ,ioVClpSiz: LongInt; {GetVolInfo: bytes to allocate at a time} ,ioAlBlSt: INTEGER; {starting disk(512-byte) block in block map} ,ioVNxtFNum: LongInt; {GetVolInfo: next free file number} ,ioVFrBlk: INTEGER); {GetVolInfo: # free alloc blks for this vol} *CntrlParam: ,(filler3: INTEGER; {refNum for I/O operation} -CSCode: INTEGER; {word for control status code} -CSParam: Ptr); {operation-defined parameters} &END; {ParamBlockRec} "ParmBlkPtr = ^ParamBlockRec; {20 bytes of system parameter area} "SysParmType = RECORD *Valid: LongInt; {high byte = validation field ($A7)} @{low 3 bytes = odometer} *PortA: INTEGER; {port A configuration} *PortB: INTEGER; {port B configuration} *Alarm: LongInt; {alarm time} *Font: INTEGER; {default font id} *KbdPrint: INTEGER; {high byte = kbd repeat} D{high nibble = thresh in 4/60ths} D{low nibble = rates in 2/60ths} @{low byte = print stuff} *VolClik: INTEGER; {low 3 bits of high byte = volume control} @{high nibble of low byte = double time in 4/60ths} @{low nibble of low byte = caret blink time in 4/60ths} *Misc: INTEGER; {EEEC EEEE PSKB FFHH} D{E = extra} D{P = paranoia level} D{S = mouse scaling} D{K = key click} D{B = boot disk} D{F = menu flash} D{H = help level} %END; {SysParmType} "SysPPtr = ^SysParmType; {volume control block data structure} VCB = RECORD $qLink: QElemPtr; {link to next element} $qType: INTEGER; {not used} $vcbFlags: INTEGER; $vcbSigWord: INTEGER; $vcbCrDate: LongInt; $vcbLsBkUp: LongInt; $vcbAtrb: INTEGER; $vcbNmFls: INTEGER; $vcbDirSt: INTEGER; $vcbBlLn: INTEGER; $vcbNmBlks: INTEGER; $vcbAlBlkSiz: LongInt; $vcbClpSIz: LongInt; $vcbAlBlSt: INTEGER; $vcbNxtFNum: LongInt; $vcbFreeBks: INTEGER; $vcbVN: STRING[27]; $vcbDrvNum: INTEGER; $vcbDRefNum: INTEGER; $vcbFSId: INTEGER; $vcbVRefNum: INTEGER; $vcbMAdr: Ptr; $vcbBufAdr: Ptr; $vcbMLen: INTEGER; $vcbDirIndex: INTEGER; $vcbDirBlk: INTEGER; END; {general queue data structure} QHdr = RECORD $QFlags: INTEGER; {misc flags} $QHead: QElemPtr; {first elem} $QTail: QElemPtr; {last elem} "END; {QHdr} QHdrPtr = ^QHdr; {there are currently 4 types of queues: } { VType - queue of Vertical Blanking Control Blocks } { IOQType - queue of I/0 queue elements } { DrvType - queue of drivers } { EvType - queue of Event Records } { FSQType - queue of VCB elements } { TimerType no longer is used. DrvType replaces it here in enum type} QTypes = (dummyType,vType,ioQType,drvQType,evType,fsQType); QElem = RECORD (CASE QTypes OF (vType: *(vblQelem: VBLTask); {vertical blanking} (ioQType: *(ioQElem: ParamBlockRec); {I/O parameter block} (drvQType: *(drvQElem: DrvQEl); {drive} (evType: *(evQElem: EvQEl); {event} (fsQType: *(vcbQElem: VCB); {volume control block} "END; {QElem} {device control entry} DCtlEntry = RECORD /DCtlDriver: Ptr; {ptr to ROM or handle to RAM driver} /DCtlFlags: INTEGER; {flags} /DCtlQHdr: QHdr; {driver's i/o queue} /DCtlPosition: LongInt; {byte pos used by read and write calls} /DCtlStorage: Handle; {hndl to RAM drivers private storage} /DCtlRefNum: INTEGER; {driver's reference number} /DCtlCurTicks: LongInt; {long counter for timing system task calls} /DCtlWindow: Ptr; {ptr to driver's window if any} /DCtlDelay: INTEGER; {number of ticks btwn sysTask calls} /DCtlEMask: INTEGER; {desk acessory event mask} /DCtlMenu: INTEGER; {menu ID of menu associated with driver} -END; {DCtlEntry} DCtlPtr = ^DCtlEntry; DCtlHandle = ^DCtlPtr; "{for Serial Driver} SerShk = PACKED RECORD {handshake control fields} 2fXOn: Byte; {XON flow control enabled flag} 2fCTS: Byte; {CTS flow control enabled flag} 2xon: Char; {XOn character} 2xoff: Char; {XOff character} 2errs: Byte; {errors mask bits} 2evts: Byte; {event enable mask bits} 2fInX: Byte; {Input flow control enabled flag} 2null: Byte; {unused} 0END; "{parameter block structure for file and IO routines} SerStaRec = PACKED RECORD 5cumErrs: Byte; {cumulative errors report} 5XOFFSent: Byte; {XOff Sent flag} 5rdPend: Byte; {read pending flag} 5wrPend: Byte; {write pending flag} 5ctsHold: Byte; {CTS flow control hold flag} 5XOFFHold: Byte; {XOff flow control hold flag} 3End; "{for Sound Driver} "{for 4-tone sound generation} "Wave = PACKED ARRAY[0..255] OF Byte; "WavePtr = ^Wave; "FTSoundRec = RECORD 2duration: INTEGER; 2sound1Rate: LongInt; 2sound1Phase: LongInt; 2sound2Rate: LongInt; 2sound2Phase: LongInt; 2sound3Rate: LongInt; 2sound3Phase: LongInt; 2sound4Rate: LongInt; 2sound4Phase: LongInt; 2sound1Wave: WavePtr; 2sound2Wave: WavePtr; 2sound3Wave: WavePtr; 2sound4Wave: WavePtr; 0END; "FTSndRecPtr = ^FTSoundRec; "FTSynthRec = RECORD 1mode: INTEGER; 1sndRec: FTSndRecPtr; /END; "FTSynthPtr = ^FTSynthRec; "Tone = RECORD +count: INTEGER; +amplitude: INTEGER; +duration: INTEGER; )END; "Tones = ARRAY[0..5000] OF Tone; "SWSynthRec = RECORD 1mode: INTEGER; 1triplets: Tones; /END; "SWSynthPtr = ^SWSynthRec; "freeWave = PACKED ARRAY[0..30000] OF Byte; "FFSynthRec = RECORD 1mode: INTEGER; 1count: Fixed; 1waveBytes: freeWave; /END; "FFSynthPtr = ^FFSynthRec; {for date and time} DateTimeRec = RECORD 0Year, {1904,1905,...} 0Month, {1,...,12 corresponding to Jan,...,Dec} 0Day, {1,...31} 0Hour, {0,...,23} 0Minute, {0,...,59} 0Second, {0,...,59} 0DayOfWeek: INTEGER; {1,...,7 corresponding to Sun,...,Sat} .END; {DateTimeRec} {for application parameter} appFile = RECORD 1vRefNum: INTEGER; 1ftype: OsType; 1versNum: INTEGER; {versNum in high byte} 1fName: str255; /END; {appFile} {for RAM serial driver} SPortSel = (SPortA,SPortB); {for Event Manager} FUNCTION PostEvent(eventNum: INTEGER; eventMsg: LongInt): OsErr; PROCEDURE FlushEvents(whichMask,stopMask: INTEGER); PROCEDURE SetEventMask(theMask: INTEGER); FUNCTION OSEventAvail(mask: INTEGER; VAR theEvent: EventRecord): BOOLEAN; FUNCTION GetOSEvent(mask: INTEGER; VAR theEvent: EventRecord): BOOLEAN; {OS utilities} FUNCTION HandToHand(VAR theHndl: Handle): OsErr; FUNCTION PtrToXHand(srcPtr: Ptr; dstHndl: Handle; size: LongInt): OsErr; FUNCTION PtrToHand(srcPtr: Ptr; VAR dstHndl: Handle; size: LongInt): OsErr; FUNCTION HandAndHand(hand1,hand2: Handle): OsErr; FUNCTION PtrAndHand(ptr1: Ptr; hand2: Handle; size: LongInt): OsErr; {from HEAPZONE.TEXT} PROCEDURE SetApplBase(startPtr: Ptr); PROCEDURE InitApplZone; PROCEDURE InitZone(growProc: ProcPtr; 3moreMasters: Integer; 3limitPtr,startPtr : Ptr); FUNCTION GetZone: THz; PROCEDURE SetZone(hz: THz); FUNCTION ApplicZone: THz; FUNCTION SystemZone: THz; FUNCTION CompactMem(cbNeeded: Size): Size; PROCEDURE PurgeMem(cbNeeded: Size); FUNCTION FreeMem: LongInt; PROCEDURE ResrvMem(cbNeeded: Size); FUNCTION MaxMem(Var grow: Size): Size; FUNCTION TopMem: Ptr; PROCEDURE SetGrowZone(growZone: ProcPtr); PROCEDURE SetApplLimit(zoneLimit: Ptr); FUNCTION NewPtr(byteCount: Size): Ptr; PROCEDURE DisposPtr(p: Ptr); FUNCTION GetPtrSize(p: Ptr): Size; PROCEDURE SetPtrSize(p: Ptr; newSize: Size); FUNCTION PtrZone(p: Ptr): THz; FUNCTION NewHandle(byteCount: Size): Handle; PROCEDURE DisposHandle(h: Handle); FUNCTION GetHandleSize(h: Handle): Size; PROCEDURE SetHandleSize(h: Handle; newSize: Size); FUNCTION HandleZone(h: Handle): THz; FUNCTION RecoverHandle(p: Ptr): Handle; PROCEDURE EmptyHandle(h: Handle); PROCEDURE ReAllocHandle(h: Handle; byteCount: Size); PROCEDURE HLock(h: Handle); PROCEDURE HUnLock(h: Handle); PROCEDURE HPurge(h: Handle); PROCEDURE HNoPurge(h: Handle); PROCEDURE MoreMasters; PROCEDURE BlockMove(srcPtr, destPtr: Ptr; byteCount: Size); FUNCTION MemError: OsErr; FUNCTION GZCritical: Boolean; FUNCTION GZSaveHnd: Handle; {interface for core routines pertaining to the vertical retrace mgr} {routines defined in VBLCORE.TEXT} FUNCTION VInstall(VBLTaskPtr: QElemPtr): OsErr; FUNCTION VRemove(VBLTaskPtr: QElemPtr): OsErr; {interface for Operating System Dispatcher} {routines defined in DISPATCH.TEXT} FUNCTION GetTrapAddress(trapNum: INTEGER): LongInt; PROCEDURE SetTrapAddress(trapAddr: LongInt; trapNum: INTEGER); {interface for utility core routines (defined in sysutil)} FUNCTION ReadParam(SysParams: SysPPtr; paramMask:LongInt):OsErr; FUNCTION WriteParam(SysParams: SysPPtr; paramMask: LongInt):OsErr; FUNCTION SetDateTime(time: LongInt):OsErr; FUNCTION ReadDateTime(VAR time: LongInt):OsErr; PROCEDURE SetTime(d: DateTimeRec); PROCEDURE GetTime(VAR d: DateTimeRec); PROCEDURE Date2Secs(d: DateTimeRec; VAR s: LongInt); PROCEDUR Secs2Date(s: LongInt; VAR d: DateTimeRec); PROCEDURE Delay(numTicks: LongInt; VAR finalTicks: LongInt); FUNCTION EqualString(str1,str2: Str255; caseSens,diacSens: BOOLEAN):BOOLEAN; PROCEDURE UprString(VAR theString: Str255; diacSens: BOOLEAN); FUNCTION InitUtil: OsErr; PROCEDURE UnLoadSeg(routineAddr: Ptr); INLINE $A9F1; PROCEDURE ExitToShell; INLINE $A9F4; PROCEDURE GetAppParms(VAR apName: str255; VAR apRefNum: INTEGER; 6VAR apParam: Handle); INLINE $A9F5; PROCEDURE CountAppFiles(VAR message: INTEGER; VAR count: INTEGER); PROCEDURE GetAppFiles(index: INTEGER; VAR theFile: AppFile); PROCEDURE ClrAppFiles(index: INTEGER); {queue routines - part of Macintosh core Utility routines} PROCEDURE InitQueue; PROCEDURE Enqueue(qElement: QElemPtr; qHeader: QHdrPtr); FUNCTION Dequeue(qElement: QElemPtr; qHeader: QHdrPtr): OsErr; FUNCTION GetFSQHdr: QHdrPtr; FUNCTION GetDrvQHdr: QHdrPtr; FUNCTION GetVCBQHdr: QHdrPtr; FUNCTION GetVBLQHdr: QHdrPtr; FUNCTION GetEvQHdr: QHdrPtr; FUNCTION GetDCtlEntry(refNum: INTEGER): DCtlHandle; {from MACIO.TEXT} FUNCTION PBOpen(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBClose(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBRead(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBWrite(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBControl(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBStatus(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBKillIO(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBGetVInfo(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBGetVol(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetVol(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBEject(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBOffLine(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBFlushVol(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBCreate(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBDelete(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBOpenRF(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBRename(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBGetFInfo(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetFInfo(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetFLock(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBRstFLock(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetFType(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBAllocate(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBGetEOF(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetEOF(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBGetFPos(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetFPos(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBFlushFile(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBMountVol(paramBlock: ParmBlkPtr): OsErr; FUNCTION PBUnMountVol(paramBlock: ParmBlkPtr): OsErr; PROCEDURE AddDrive(drvrRefNum: INTEGER; drvNum: INTEGER; QEl: drvQElPtr); FUNCTION FSOpen(fileName: Str255; vRefNum: INTEGER; VAR refNum: INTEGER): OsErr; FUNCTION FSClose(refNum: INTEGER): OsErr; FUNCTION FSRead(refNum: INTEGER; VAR count: LongInt; buffPtr: Ptr): OsErr; FUNCTION FSWrite(refNum: INTEGER; VAR count: LongInt; buffPtr: Ptr): OsErr; FUNCTION Control(refNum: INTEGER; csCode: INTEGER; 4csParam: Ptr): OsErr; FUNCTION Status(refNum: INTEGER; csCode: INTEGER; 3csParam: Ptr): OsErr; FUNCTION KillIO(refNum: INTEGER): OsErr; {-volume level calls-} FUNCTION GetVInfo(drvNum: INTEGER; volName: StringPtr; VAR vRefNum: INTEGER; 1VAR FreeBytes: LongInt): OsErr; FUNCTION GetFInfo(fileName: Str255; vRefNum: INTEGER; 2VAR FndrInfo: FInfo):OsErr; FUNCTION GetVol(volName: StringPtr; VAR vRefNum: INTEGER):OsErr; FUNCTION SetVol(volName: StringPtr; vRefNum: INTEGER): OsErr; FUNCTION UnMountVol(volName: StringPtr; vRefNum: INTEGER):OsErr; FUNCTION Eject(volName: StringPtr; vRefNum: INTEGER): OsErr; FUNCTION FlushVol(volName: StringPtr; vRefNum: INTEGER):OsErr; {-file level calls for unopened files-} FUNCTION Create(fileName: Str255; vRefNum: INTEGER; creator: OSType; 0fileType: OSType):OsErr; FUNCTION FSDelete(fileName: Str255; vRefNum: INTEGER):OsErr; FUNCTION OpenRF(fileName: Str255; vRefNum: INTEGER; 0VAR refNum: INTEGER): OsErr; FUNCTION Rename(oldName: Str255; vRefNum: INTEGER; 0newName: Str255):OsErr; FUNCTION SetFInfo(fileName: Str255; vRefNum: INTEGER; 2FndrInfo: FInfo):OsErr; FUNCTION SetFLock(fileName: Str255; vRefNum: INTEGER):OsErr; FUNCTION RstFLock(fileName: Str255; vRefNum: INTEGER):OsErr; FUNCTION SetFType(fileName: Str255; oldVers: SignedByte; vRefNum: INTEGER; 4newVers: SignedByte):OsErr; {-file level calls for opened files-} FUNCTION Allocate(refNum: INTEGER; VAR count: LongInt):OsErr; FUNCTION GetEOF(refNum: INTEGER; VAR LogEOF: LongInt):OsErr; FUNCTION SetEOF(refNum: INTEGER; LogEOF: LongInt):OsErr; FUNCTION GetFPos(refNum: INTEGER; VAR filePos: LongInt):OsErr; FUNCTION SetFPos(refNum: INTEGER; posMode: INTEGER; posOff: LongInt):OsErr; FUNCTION FlushFile(refNum: INTEGER):OsErr; {Serial Driver Interface} FUNCTION DrvrInstall(name: Str255; drvrRefNum: INTEGER): OsErr; FUNCTION DrvrRemove(drvrRefNum: INTEGER): OsErr; FUNCTION OpenDriver(name: Str255): INTEGER; PROCEDURE CloseDriver(refNum: Integer); FUNCTION SerReset(refNum: INTEGER; serConfig: INTEGER): OSErr; FUNCTION SerSetBuf(refNum: INTEGER; serBPtr: Ptr; serBLen: INTEGER): OSErr; FUNCTION SerHShake(refNum: INTEGER; flags: SerShk): OSErr; FUNCTION SerSetBrk(refNum: INTEGER): OSErr; FUNCTION SerClrBrk(refNum: INTEGER): OSErr; FUNCTION SerGetBuf(refNum: INTEGER; VAR count: LongInt): OSErr; FUNCTION SerStatus(refNum: INTEGER; VAR serSta: SerStaRec): OSErr; FUNCTION RamSDOpen(whichPort: SPortSel; rsrcType: OsType; rsrcID: INTEGER): OSErr; PROCEDURE RamSDClose(whichPort: SPortSel); {for Sound Driver} PROCEDURE SysBeep(duration: INTEGER); PROCEDURE SetSoundVol(level: INTEGER); PROCEDURE GetSoundVol(VAR level: INTEGER); PROCEDURE StartSound(synthRec: Ptr; numBytes: LongInt; CompletionRtn: ProcPtr); PROCEDURE StopSound; FUNCTION SoundDone: BOOLEAN; {because of a bug with the way immediate control calls are handled SWSetLevel} {should not be used. Use SetSoundVol instead} {PROCEDURE SWSetLevel(ampl: INTEGER);} {for the system error handler} PROCEDURE SysError(errorCode: INTEGER); IMPLEMENTATION {for Event Manager} FUNCTION PostEvent; EXTERNAL; PROCEDURE FlushEvents; EXTERNAL; PROCEDURE SetEventMask; EXTERNAL; FUNCTION OSEventAvail; EXTERNAL; FUNCTION GetOSEvent ; EXTERNAL; {OS utilities} FUNCTION HandToHand; EXTERNAL; FUNCTION PtrToXHand; EXTERNAL; FUNCTION PtrToHand; EXTERNAL; FUNCTION HandAndHand; EXTERNAL; FUNCTION PtrAndHand; EXTERNAL; {from HEAPZONE.TEXT} PROCEDURE SetApplBase; EXTERNAL; PROCEDURE InitApplZone; EXTERNAL; PROCEDURE InitZone; EXTERNAL; FUNCTION GetZone; EXTERNAL; PROCEDURE SetZone; EXTERNAL; FUNCTION ApplicZone; EXTERNAL; FUNCTION SystemZone; EXTERNAL; FUNCTION CompactMem; EXTERNAL; PROCEDURE PurgeMem; EXTERNAL; FUNCTION FreeMem; EXTERNAL; PROCEDURE ResrvMem; EXTERNAL; FUNCTION MaxMem; EXTERNAL; FUNCTION TopMem; EXTERNAL; PROCEDURE SetGrowZone; EXTERNAL; PROCEDURE SetApplLimit; EXTERNAL; FUNCTION NewPtr; EXTERNAL; PROCEDURE DisposPtr; EXTERNAL; FUNCTION GetPtrSize; EXTERNAL; PROCEDURE SetPtrSize; EXTERNAL; FUNCTION PtrZone; EXTERNAL; FUNCTION NewHandle; EXTERNAL; PROCEDURE DisposHandle; EXTERNAL; FUNCTION GetHandleSize; EXTERNAL; PROCEDURE SetHandleSize; EXTERNAL; FUNCTION HandleZone; EXTERNAL; FUNCTION RecoverHandle; EXTERNAL; PROCEDURE EmptyHandle; EXTERNAL; PROCEDURE ReAllocHandle; EXTERNAL; PROCEDURE HLock; EXTERNAL; PROCEDURE HUnLock; EXTERNAL; PROCEDURE HPurge; EXTERNAL; PROCEDURE HNoPurge; EXTERNAL; PROCEDURE MoreMasters;EXTERNAL; PROCEDURE BlockMove; EXTERNAL; FUNCTION MemError; EXTERNAL; FUNCTION GZCritical; EXTERNAL; FUNCTION GZSaveHnd; EXTERNAL; {from OSMISC.TEXT} FUNCTION DrvrInstall;EXTERNAL; FUNCTION DrvrRemove;EXTERNAL; FUNCTION OpenDriver;EXTERNAL; PROCEDURE CloseDriver;EXTERNAL; FUNCTION VInstall;EXTERNAL; FUNCTION VRemove;EXTERNAL; FUNCTION GetTrapAddress;EXTERNAL; PROCEDURE SetTrapAddress;EXTERNAL; FUNCTION ReadParam;EXTERNAL; FUNCTION WriteParam;EXTERNAL; FUNCTION SetDateTime;EXTERNAL; FUNCTION ReadDateTime;EXTERNAL; PROCEDURE SetTime;EXTERNAL; PROCEDURE GetTime;EXTERNAL; PROCEDURE Date2Secs;EXTERNAL; PROCEDURE Secs2Date;EXTERNAL; PROCEDURE Delay;EXTERNAL; FUNCTION EqualString;EXTERNAL; PROCEDURE UprString;EXTERNAL; FUNCTION InitUtil;EXTERNAL; {queue routines} PROCEDURE InitQueue;EXTERNAL; PROCEDURE Enqueue;EXTERNAL; FUNCTION Dequeue;EXTERNAL; FUNCTION GetFSQHdr; EXTERNAL; FUNCTION GetDrvQHdr; EXTERNAL; FUNCTION GetVCBQHdr; EXTERNAL; FUNCTION GetVBLQHdr; EXTERNAL; FUNCTION GetEvQHdr; EXTERNAL; FUNCTION GetDCtlEntry; EXTERNAL; {FUNCTION GetDCtlQHdr; EXTERNAL;} {from MACIO.TEXT} FUNCTION PBOpen;EXTERNAL; FUNCTION PBClose;EXTERNAL; FUNCTION PBRead;EXTERNAL; FUNCTION PBWrite;EXTERNAL; FUNCTION PBControl;EXTERNAL; FUNCTION PBStatus;EXTERNAL; FUNCTION PBKillIO;EXTERNAL; FUNCTION PBGetVInfo;EXTERNAL; FUNCTION PBGetVol;EXTERNAL; FUNCTION PBSetVol;EXTERNAL; FUNCTION PBEject;EXTERNAL; FUNCTION PBOffLine;EXTERNAL; FUNCTION PBFlushVol;EXTERNAL; FUNCTION PBCreate;EXTERNAL; FUNCTION PBDelete;EXTERNAL; FUNCTION PBOpenRF;EXTERNAL; FUNCTION PBRename;EXTERNAL; FUNCTION PBGetFInfo;EXTERNAL; FUNCTION PBSetFInfo;EXTERNAL; FUNCTION PBSetFLock;EXTERNAL; FUNCTION PBRstFLock;EXTERNAL; FUNCTION PBSetFType;EXTERNAL; FUNCTION PBAllocate;EXTERNAL; FUNCTION PBGetEOF;EXTERNAL; FUNCTION PBSetEOF;EXTERNAL; FUNCTION PBGetFPos;EXTERNAL; FUNCTION PBSetFPos;EXTERNAL; FUNCTION PBFlushFile;EXTERNAL; FUNCTION PBMountVol;EXTERNAL; FUNCTION PBUnMountVol;EXTERNAL; PROCEDURE AddDrive;EXTERNAL; FUNCTION FSOpen;EXTERNAL; FUNCTION FSClose;EXTERNAL; FUNCTION FSRead;EXTERNAL; FUNCTION FSWrite;EXTERNAL; FUNCTION Control;EXTERNAL; FUNCTION Status;EXTERNAL; FUNCTION KillIO;EXTERNAL; FUNCTION GetVInfo;EXTERNAL; FUNCTION GetFInfo;EXTERNAL; FUNCTION GetVol;EXTERNAL; FUNCTION SetVol;EXTERNAL; FUNCTION UnMountVol;EXTERNAL; FUNCTION Eject;EXTERNAL; FUNCTION FlushVol;EXTERNAL; FUNCTION Create;EXTERNAL; FUNCTION FSDelete;EXTERNAL; FUNCTION OpenRF;EXTERNAL; FUNCTION Rename;EXTERNAL; FUNCTION SetFInfo;EXTERNAL; FUNCTION SetFLock;EXTERNAL; FUNCTION RstFLock;EXTERNAL; FUNCTION SetFType;EXTERNAL; FUNCTION Allocate;EXTERNAL; FUNCTION GetEOF;EXTERNAL; FUNCTION SetEOF;EXTERNAL; FUNCTION GetFPos;EXTERNAL; FUNCTION SetFPos;EXTERNAL; FUNCTION FlushFile;EXTERNAL; FUNCTION SerReset;EXTERNAL; FUNCTION SerSetBuf;EXTERNAL; FUNCTION SerHShake;EXTERNAL; FUNCTION SerSetBrk;EXTERNAL; FUNCTION SerClrBrk;EXTERNAL; FUNCTION SerGetBuf;EXTERNAL; FUNCTION SerStatus;EXTERNAL; FUNCTION RamSDOpen;EXTERNAL; PROCEDURE RamSDClose;EXTERNAL; PROCEDURE SysBeep;EXTERNAL; PROCEDURE SetSoundVol;EXTERNAL; PROCEDURE GetSoundVol;EXTERNAL; PROCEDURE StartSound;EXTERNAL; PROCEDURE StopSound;EXTERNAL; FUNCTION SoundDone;EXTERNAL; PROCEDURE SWSetLevel;EXTERNAL; PROCEDURE ClrAppFiles;EXTERNAL; PROCEDURE CountAppFiles;EXTERNAL; PROCEDURE GetAppFiles;EXTERNAL; {for the system error handler} PROCEDURE SysError; EXTERNAL; END. 3. "6F^5D!$ǐ^6UNIT PackIntf; { Jan 28, 1984. Rony Sebok Interface for Macintosh packages } { Modification history: } { 11 Apr 84 JTC Modified a la Rose. } { Copyright 1982 by Apple Computer, Inc. All Rights Reserved. } INTERFACE USES {$U-} ({$U obj/MemTypes } MemTypes, ({$U obj/QuickDraw } QuickDraw, ({$U Obj/OsIntf } OsIntf, ({$U obj/toolIntf } ToolIntf; CONST {constants for Standard File package} "putDlgID = -3999; {SFPutFile dialog template ID} "putSave = 1; {save button} "putCancel = 2; {cancel button} "putEject = 5; {eject button} "putDrive = 6; {drive button} "putName = 7; {editTExt item for file name} "getDlgID = -4000; {SFGetFile dialog template ID} "getOpen = 1; {open button} "getCancel = 3; {cancel button} "getEject = 5; {eject button} "getDrive = 6; {drive button} "getNmList = 7; {userItem for file name list} "getScroll = 8; {userItem for scroll bar} {constants for manipulation of international resources} "{masks used for setting and testing currency format flags} "currLeadingZ = 128; {set if leading zero} "currTrailingZ = 64; {set if trailing zero} "currNegSym = 32; {set if minus sign for negative num, reset if parentheses} "currSymLead = 16; {set if currency symbol leads, reset if trails} "{constants specifying absolute value of short date form} "MDY = 0; {month,day,year} "DMY = 1; {day,month,year} "YMD = 2; {year,month,day} "{masks used for date element format flags} "century = 128; {set if century, reset if no century} "mntLdingZ = 64; {set if leading 0 for month} "dayLdingZ = 32; {set if leading zero for day} "{masks used for time element format flags} "hrLeadingZ = 128; {set if leading zero for hours} "minLeadingZ = 64; {set if leading zero for minutes} "secLeadingZ = 32; {set if leading zero for seconds} "{country codes for version numbers} "verUS = 0; "verFrance = 1; "verBritain = 2; "verGermany = 3; "verItaly = 4; TYPE {Standard File} SFReply = RECORD ,good: BOOLEAN; {ignore command if FALSE} ,copy: BOOLEAN; {not used} ,fType: OsType; {file type or not used} ,vRefNum: INTEGER; {volume reference number} ,version: INTEGER; {file's version number} ,fName: String[63]; {file name} *END; {SFReply} SFTypeList = ARRAY[0..3] OF OSType; {interface for international resources} intl0Hndl = ^intl0Ptr; intl0Ptr = ^intl0REc; intl0Rec = PACKED RECORD $decimalPt: char; {ASCII character for decimal point} $thousSep: char; {ASCII character for thousand separator} $listSep: char; {ASCII character for list separator} $currSym1: char; {ASCII for currency symbol (3 bytes long)} $currSym2: char; $currSym3: char; $currFmt: Byte; {currency format flags} $dateOrder: Byte; {short date form - DMY,YMD, or MDY} $shrtDateFmt: Byte; {date elements format flag} $dateSep: char; {ASCII for date separator} $timeCycle: Byte; {indicates 12 or 24 hr cycle} $timeFmt: Byte; {time elements format flags} $mornStr: PACKED ARRAY[1..4] OF char; {ASCII for trailing string from 0:00 to 11:59} $eveStr: PACKED ARRAY[1..4] OF char; {ASCII for trailing string from 12:00 to 23:59} $timeSep: char; {ASCII for the time separator} $time1Suff: char; {suffix string used in 24 hr mode} $time2Suff: char; {8 characters long} $time3Suff: char; $time4Suff: char; $time5Suff: char; $time6Suff: char; $time7Suff: char; $time8Suff: char; $metricSys: Byte; {indicates metric or English system} $intl0Vers: INTEGER; {version: high byte = country, low byte = vers} "END; {intl0Rec} DateForm = (shortDate, longDate, abbrevDate); intl1Hndl = ^intl1Ptr; intl1Ptr = ^intl1REc; intl1Rec = PACKED RECORD $days: ARRAY[1..7] OF String[15]; {length and word for Sunday through Monday} $months: ARRAY[1..12] OF String[15]; {length and word for January to December} $suppressDay: Byte; {0 for day of week, 255 for no day of week} $lngDateFmt: Byte; {expanded date format 0 or 255} $dayLeading0: Byte; {255 for leading 0, 0 for no leading 0} $abbrLen: Byte; {length of abbreviated names in long form} $st0: PACKED ARRAY[1..4] OF char; {the string st0} $st1: PACKED ARRAY[1..4] OF char; {the string st1} $st2: PACKED ARRAY[1..4] OF char; {the string st2} $st3: PACKED ARRAY[1..4] OF char; {the string st3} $st4: PACKED ARRAY[1..4] OF char; {the string st4} $intl1Vers: INTEGER; {version word} $localRtn: INTEGER; {routine for localizing mag comp; } H{minimal case is $4E75 for RTS, but } H{routine may be longer than one integer.} "END; {intl1Rec} {Standard File} PROCEDURE SFPutFile(where: Point; prompt: Str255; origName: Str255; 4dlgHook: ProcPtr; VAR reply: SFReply); PROCEDURE SFPPutFile(where: Point; prompt: Str255; origName: Str255; 5dlgHook: ProcPtr; VAR reply: SFReply; dlgID: INTEGER; 5filterProc: ProcPtr); PROCEDURE SFGetFile(where: Point; prompt: Str255; fileFilter: ProcPtr; 4numTypes: INTEGER; typeList: SFTypeList; dlgHook: ProcPtr; 4VAR reply: SFReply); PROCEDURE SFPGetFile(where: Point; prompt: Str255; fileFilter: ProcPtr; 5numTypes: INTEGER; typeList: SFTypeList; dlgHook: ProcPtr; 5VAR reply: SFReply; dlgID: INTEGER; filterProc: ProcPtr); {interface to Disk Initialization Package} PROCEDURE DILoad; PROCEDURE DIUnLoad; FUNCTION DIBadMount(where: Point; evtMessage: LongInt): INTEGER; FUNCTION DIFormat(drvNum: INTEGER): OsErr; FUNCTION DIVerify(drvNum: INTEGER): OsErr; FUNCTION DIZero(drvNum: INTEGER; volName: Str255): OsErr; {interface to International Utilities} FUNCTION IUGetIntl(theID: INTEGER): Handle; PROCEDURE IUSetIntl(refNum: INTEGER; theID: INTEGER; intlParam: Handle); PROCEDURE IUDateString(dateTime: LongInt; longFlag: DateForm; VAR result: Str255); PROCEDURE IUDatePString(dateTime: LongInt; longFlag: DateForm; VAR result: Str255; 5intlParam: Handle); PROCEDURE IUTimeString(dateTime: LongInt; wantSeconds: BOOLEAN; VAR result: Str255); PROCEDURE IUTimePString(dateTime: LongInt; wantSeconds: BOOLEAN; VAR result: Str255; 5intlParam: Handle); FUNCTION IUMetric: BOOLEAN; FUNCTION IUCompString(aStr,bStr: Str255): INTEGER; FUNCTION IUEqualString(aStr,bStr: Str255): INTEGER; FUNCTION IUMagString(aPtr,bPtr: Ptr; aLen,bLen: INTEGER): INTEGER; FUNCTION IUMagIDString(aPtr,bPtr: Ptr; aLen,bLen: INTEGER):INTEGER; {interface to Binary-Decimal Conversion} PROCEDURE StringToNum(theString: Str255; VAR theNum: LongInt); PROCEDURE NumToString(theNum: LongInt; VAR theString: Str255); IMPLEMENTATION {Binary-Decimal Conversion} PROCEDURE StringToNum;EXTERNAL; PROCEDURE NumToString;EXTERNAL; {Standard File} PROCEDURE SFPutFile;EXTERNAL; PROCEDURE SFPPutFile;EXTERNAL; PROCEDURE SFGetFile;EXTERNAL; PROCEDURE SFPGetFile;EXTERNAL; {Disk Initialization} PROCEDURE DILoad;EXTERNAL; PROCEDURE DIUnLoad;EXTERNAL; FUNCTION DIBadMount;EXTERNAL; FUNCTION DIFormat;EXTERNAL; FUNCTION DIVerify;EXTERNAL; FUNCTION DIZero;EXTERNAL; {interface to International Utilities} FUNCTION IUGetIntl;EXTERNAL; PROCEDURE IUSetIntl;EXTERNAL; PROCEDURE IUDateString;EXTERNAL; PROCEDURE IUDatePString;EXTERNAL; PROCEDURE IUTimeString;EXTERNAL; PROCEDURE IUTimePString;EXTERNAL; FUNCTION IUMetric;EXTERNAL; FUNCTION IUCompString;EXTERNAL; FUNCTION IUEqualString;EXTERNAL; FUNCTION IUMagString;EXTERNAL; FUNCTION IUMagIDString;EXTERNAL; END. { of unit } W^5D!r^MM 6 UNIT QuickDraw; { Copyright 1983 Apple Computer Inc. } { Written by Bill Atkinson } { Quickdraw2 modified 2/13/84 by R T Martin for inline traps } INTERFACE USES {$U-} ({$U obj/MemTypes } MemTypes; CONST srcCopy = 0; { the 16 transfer modes } &srcOr = 1; &srcXor = 2; &srcBic = 3; ¬SrcCopy = 4; ¬SrcOr = 5; ¬SrcXor = 6; ¬SrcBic = 7; &patCopy = 8; &patOr = 9; &patXor = 10; &patBic = 11; ¬PatCopy = 12; ¬PatOr = 13; ¬PatXor = 14; ¬PatBic = 15; { QuickDraw color separation constants } &normalBit = 0; { normal screen mapping } &inverseBit = 1; { inverse screen mapping } &redBit = 4; { RGB additive mapping } &greenBit = 3; &blueBit = 2; &cyanBit = 8; { CMYBk subtractive mapping } &magentaBit = 7; &yellowBit = 6; &blackBit = 5; &blackColor = 33; { colors expressed in these mappings } &whiteColor = 30; &redColor = 205; &greenColor = 341; &blueColor = 409; &cyanColor = 273; &magentaColor = 137; &yellowColor = 69; &picLParen = 0; { standard picture comments } &picRParen = 1; TYPE QDByte = SignedByte; %QDPtr = Ptr; { blind pointer } %QDHandle = Handle; { blind handle } %Pattern = PACKED ARRAY[0..7] OF 0..255; %Bits16 = ARRAY[0..15] OF INTEGER; %VHSelect = (v,h); %GrafVerb = (frame,paint,erase,invert,fill); %StyleItem = (bold,italic,underline,outline,shadow,condense,extend); %Style = SET OF StyleItem; %FontInfo = RECORD 4ascent: INTEGER; 4descent: INTEGER; 4widMax: INTEGER; 4leading: INTEGER; 2END; %Point = RECORD CASE INTEGER OF /0: (v: INTEGER; 3h: INTEGER); /1: (vh: ARRAY[VHSelect] OF INTEGER); -END; %Rect = RECORD CASE INTEGER OF .0: (top: INTEGER; 2left: INTEGER; 2bottom: INTEGER; 2right: INTEGER); .1: (topLeft: Point; 2botRight: Point); ,END; %BitMap = RECORD 0baseAddr: Ptr; 0rowBytes: INTEGER; 0bounds: Rect; .END; %Cursor = RECORD 0data: Bits16; 0mask: Bits16; 0hotSpot: Point; .END; %PenState = RECORD 2pnLoc: Point; 2pnSize: Point; 2pnMode: INTEGER; 2pnPat: Pattern; 0END; %PolyHandle = ^PolyPtr; %PolyPtr = ^Polygon; %Polygon = RECORD 4polySize: INTEGER; 4polyBBox: Rect; 4polyPoints: ARRAY[0..0] OF Point; 2END; %RgnHandle = ^RgnPtr; %RgnPtr = ^Region; %Region = RECORD 4rgnSize: INTEGER; { rgnSize = 10 for rectangular } 4rgnBBox: Rect; 4{ plus more data if not rectangular } 2END; %PicHandle = ^PicPtr; %PicPtr = ^Picture; %Picture = RECORD 4picSize: INTEGER; 4picFrame: Rect; 4{ plus byte codes for picture content } 2END; %QDProcsPtr = ^QDProcs; %QDProcs = RECORD 1textProc: Ptr; 1lineProc: Ptr; 1rectProc: Ptr; 1rRectProc: Ptr; 1ovalProc: Ptr; 1arcProc: Ptr; 1polyProc: Ptr; 1rgnProc: Ptr; 1bitsProc: Ptr; 1commentProc: Ptr; 1txMeasProc: Ptr; 1getPicProc: Ptr; 1putPicProc: Ptr; /END; %GrafPtr = ^GrafPort; %GrafPort = RECORD 2device: INTEGER; 2portBits: BitMap; 2portRect: Rect; 2visRgn: RgnHandle; 2clipRgn: RgnHandle; 2bkPat: Pattern; 2fillPat: Pattern; 2pnLoc: Point; 2pnSize: Point; 2pnMode: INTEGER; 2pnPat: Pattern; 2pnVis: INTEGER; 2txFont: INTEGER; 2txFace: Style; 2txMode: INTEGER; 2txSize: INTEGER; 2spExtra: LongInt; 2fgColor: LongInt; 2bkColor: LongInt; 2colrBit: INTEGER; 2patStretch: INTEGER; 2picSave: Handle; 2rgnSave: Handle; 2polySave: Handle; 2grafProcs: QDProcsPtr; 0END; VAR thePort: GrafPtr; $white: Pattern; $black: Pattern; $gray: Pattern; $ltGray: Pattern; $dkGray: Pattern; $arrow: Cursor; $screenBits: BitMap; $randSeed: LongInt; { GrafPort Routines } PROCEDURE InitGraf (globalPtr: Ptr); { INLINE $A86E;} PROCEDURE OpenPort (port: GrafPtr); INLINE $A86F; PROCEDURE InitPort (port: GrafPtr); INLINE $A86D; PROCEDURE ClosePort (port: GrafPtr); INLINE $A87D; PROCEDURE SetPort (port: GrafPtr); INLINE $A873; PROCEDURE GetPort (VAR port: GrafPtr); INLINE $A874; PROCEDURE GrafDevice (device: INTEGER); INLINE $A872; PROCEDURE SetPortBits(bm: BitMap); INLINE $A875; PROCEDURE PortSize (width,height: INTEGER); INLINE $A876; PROCEDURE MovePortTo (leftGlobal,topGlobal: INTEGER); INLINE $A877; PROCEDURE SetOrigin (h,v: INTEGER); INLINE $A878; PROCEDURE SetClip (rgn: RgnHandle); INLINE $A879; PROCEDURE GetClip (rgn: RgnHandle); INLINE $A87A; PROCEDURE ClipRect (r: Rect); INLINE $A87B; PROCEDURE BackPat (pat: Pattern); INLINE $A87C; { Cursor Routines } PROCEDURE InitCursor; INLINE $A850; PROCEDURE SetCursor(crsr: Cursor); INLINE $A851; PROCEDURE HideCursor; INLINE $A852; PROCEDURE ShowCursor; INLINE $A853; PROCEDURE ObscureCursor; INLINE $A856; { Line Routines } PROCEDURE HidePen; INLINE $A896; PROCEDURE ShowPen; INLINE $A897; PROCEDURE GetPen (VAR pt: Point); INLINE $A89A; PROCEDURE GetPenState(VAR pnState: PenState); INLINE $A898; PROCEDURE SetPenState(pnState: PenState); INLINE $A899; PROCEDURE PenSize (width,height: INTEGER); INLINE $A89B; PROCEDURE PenMode (mode: INTEGER); INLINE $A89C; PROCEDURE PenPat (pat: Pattern); INLINE $A89D; PROCEDURE PenNormal; INLINE $A89E; PROCEDURE MoveTo (h,v: INTEGER); INLINE $A893; PROCEDURE Move (dh,dv: INTEGER); INLINE $A894; PROCEDURE LineTo (h,v: INTEGER); INLINE $A891; PROCEDURE Line (dh,dv: INTEGER); INLINE $A892; { Text Routines } PROCEDURE TextFont (font: INTEGER); INLINE $A887; PROCEDURE TextFace (face: Style); INLINE $A888; PROCEDURE TextMode (mode: INTEGER); INLINE $A889; PROCEDURE TextSize (size: INTEGER); INLINE $A88A; PROCEDURE SpaceExtra (extra: LongInt); INLINE $A88E; PROCEDURE DrawChar (ch: char); INLINE $A883; PROCEDURE DrawString (s: Str255); INLINE $A884; PROCEDURE DrawText (textBuf: Ptr; firstByte,byteCount: INTEGER); INLINE $A885; FUNCTION CharWidth (ch: CHAR): INTEGER; INLINE $A88D; FUNCTION StringWidth (s: Str255): INTEGER; INLINE $A88C; FUNCTION TextWidth (textBuf: Ptr; firstByte,byteCount: INTEGER): INTEGER; XINLINE $A886; PROCEDURE GetFontInfo (VAR info: FontInfo); INLINE $A88B; { Point Calculations } PROCEDURE AddPt (src: Point; VAR dst: Point); INLINE $A87E; PROCEDURE SubPt (src: Point; VAR dst: Point); INLINE $A87F; PROCEDURE SetPt (VAR pt: Point; h,v: INTEGER); INLINE $A880; FUNCTION EqualPt (pt1,pt2: Point): BOOLEAN; INLINE $A881; PROCEDURE ScalePt (VAR pt: Point; fromRect,toRect: Rect); INLINE $A8F8; PROCEDURE MapPt (VAR pt: Point; fromRect,toRect: Rect); INLINE $A8F9; PROCEDURE LocalToGlobal (VAR pt: Point); INLINE $A870; PROCEDURE GlobalToLocal (VAR pt: Point); INLINE $A871; { Rectangle Calculations } PROCEDURE SetRect (VAR r: Rect; left,top,right,bottom: INTEGER); INLINE $A8A7; FUNCTION EqualRect (rect1,rect2: Rect): BOOLEAN; INLINE $A8A6; FUNCTION EmptyRect (r: Rect): BOOLEAN; INLINE $A8AE; PROCEDURE OffsetRect (VAR r: Rect; dh,dv: INTEGER); INLINE $A8A8; PROCEDURE MapRect (VAR r: Rect; fromRect,toRect: Rect); INLINE $A8FA; PROCEDURE InsetRect (VAR r: Rect; dh,dv: INTEGER); INLINE $A8A9; FUNCTION SectRect (src1,src2: Rect; VAR dstRect: Rect): BOOLEAN; INLINE $A8AA; PROCEDURE UnionRect (src1,src2: Rect; VAR dstRect: Rect); INLINE $A8AB; FUNCTION PtInRect (pt: Point; r: Rect): BOOLEAN; INLINE $A8AD; PROCEDURE Pt2Rect (pt1,pt2: Point; VAR dstRect: Rect); INLINE $A8AC; { Graphical Operations on Rectangles } PROCEDURE FrameRect (r: Rect); INLINE $A8A1; PROCEDURE PaintRect (r: Rect); INLINE $A8A2; PROCEDURE EraseRect (r: Rect); INLINE $A8A3; PROCEDURE InvertRect (r: Rect); INLINE $A8A4; PROCEDURE FillRect (r: Rect; pat: Pattern); INLINE $A8A5; { RoundRect Routines } PROCEDURE FrameRoundRect (r: Rect; ovWd,ovHt: INTEGER); INLINE $A8B0; PROCEDURE PaintRoundRect (r: Rect; ovWd,ovHt: INTEGER); INLINE $A8B1; PROCEDURE EraseRoundRect (r: Rect; ovWd,ovHt: INTEGER); INLINE $A8B2; PROCEDURE InvertRoundRect (r: Rect; ovWd,ovHt: INTEGER); INLINE $A8B3; PROCEDURE FillRoundRect (r: Rect; ovWd,ovHt: INTEGER; pat: Pattern); `INLINE $A8B4; { Oval Routines } PROCEDURE FrameOval (r: Rect); INLINE $A8B7; PROCEDURE PaintOval (r: Rect); INLINE $A8B8; PROCEDURE EraseOval (r: Rect); INLINE $A8B9; PROCEDURE InvertOval (r: Rect); INLINE $A8BA; PROCEDURE FillOval (r: Rect; pat: Pattern); INLINE $A8BB; { Arc Routines } PROCEDURE FrameArc (r: Rect; startAngle,arcAngle: INTEGER); INLINE $A8BE; PROCEDURE PaintArc (r: Rect; startAngle,arcAngle: INTEGER); INLINE $A8BF; PROCEDURE EraseArc (r: Rect; startAngle,arcAngle: INTEGER); INLINE $A8C0; PROCEDURE InvertArc (r: Rect; startAngle,arcAngle: INTEGER); INLINE $A8C1; PROCEDURE FillArc (r: Rect; startAngle,arcAngle: INTEGER; pat: Pattern); INLINE $A8C2; PROCEDURE PtToAngle (r: Rect; pt: Point; VAR angle: INTEGER); INLINE $A8C3; { Polygon Routines } FUNCTION OpenPoly: PolyHandle; INLINE $A8CB; PROCEDURE ClosePoly; INLINE $A8CC; PROCEDURE KillPoly (poly: PolyHandle); INLINE $A8CD; PROCEDURE OffsetPoly (poly: PolyHandle; dh,dv: INTEGER); INLINE $A8CE; PROCEDURE MapPoly (poly: PolyHandle; fromRect,toRect: Rect);INLINE $A8FC; PROCEDURE FramePoly (poly: PolyHandle); INLINE $A8C6; PROCEDURE PaintPoly (poly: PolyHandle); INLINE $A8C7; PROCEDURE ErasePoly (poly: PolyHandle); INLINE $A8C8; PROCEDURE InvertPoly (poly: PolyHandle); INLINE $A8C9; PROCEDURE FillPoly (poly: PolyHandle; pat: Pattern); INLINE $A8CA; { Region Calculations } FUNCTION NewRgn: RgnHandle; INLINE $A8D8; PROCEDURE DisposeRgn(rgn: RgnHandle); INLINE $A8D9; PROCEDURE CopyRgn (srcRgn,dstRgn: RgnHandle); INLINE $A8DC; PROCEDURE SetEmptyRgn(rgn: RgnHandle); INLINE $A8DD; PROCEDURE SetRectRgn(rgn: RgnHandle; left,top,right,bottom: INTEGER); INLINE $A8DE; PROCEDURE RectRgn (rgn: RgnHandle; r: Rect); INLINE $A8DF; PROCEDURE OpenRgn; INLINE $A8DA; PROCEDURE CloseRgn (dstRgn: RgnHandle); INLINE $A8DB; PROCEDURE OffsetRgn (rgn: RgnHandle; dh,dv: INTEGER); INLINE $A8E0; PROCEDURE MapRgn (rgn: RgnHandle; fromRect,toRect: Rect); INLINE $A8FB; PROCEDURE InsetRgn (rgn: RgnHandle; dh,dv: INTEGER); INLINE $A8E1; PROCEDURE SectRgn (srcRgnA,srcRgnB,dstRgn: RgnHandle); INLINE $A8E4; PROCEDURE UnionRgn (srcRgnA,srcRgnB,dstRgn: RgnHandle); INLINE $A8E5; PROCEDURE DiffRgn (srcRgnA,srcRgnB,dstRgn: RgnHandle); INLINE $A8E6; PROCEDURE XorRgn (srcRgnA,srcRgnB,dstRgn: RgnHandle); INLINE $A8E7; FUNCTION EqualRgn (rgnA,rgnB: RgnHandle): BOOLEAN; INLINE $A8E3; FUNCTION EmptyRgn (rgn: RgnHandle): BOOLEAN; INLINE $A8E2; FUNCTION PtInRgn (pt: Point; rgn: RgnHandle): BOOLEAN; INLINE $A8E8; FUNCTION RectInRgn (r: Rect; rgn: RgnHandle): BOOLEAN; INLINE $A8E9; { Graphical Operations on Regions } PROCEDURE FrameRgn (rgn: RgnHandle); INLINE $A8D2; PROCEDURE PaintRgn (rgn: RgnHandle); INLINE $A8D3; PROCEDURE EraseRgn (rgn: RgnHandle); INLINE $A8D4; PROCEDURE InvertRgn (rgn: RgnHandle); INLINE $A8D5; PROCEDURE FillRgn (rgn: RgnHandle; pat: Pattern); INLINE $A8D6; { Graphical Operations on BitMaps } PROCEDURE ScrollRect(dstRect: Rect; dh,dv: INTEGER; updateRgn: rgnHandle); INLINE $A8EF; PROCEDURE CopyBits (srcBits,dstBits: BitMap; 5srcRect,dstRect: Rect; 5mode: INTEGER; 5maskRgn: RgnHandle); INLINE $A8EC; { Picture Routines } FUNCTION OpenPicture(picFrame: Rect): PicHandle; INLINE $A8F3; PROCEDURE ClosePicture; INLINE $A8F4; PROCEDURE DrawPicture(myPicture: PicHandle; dstRect: Rect); INLINE $A8F6; PROCEDURE PicComment(kind,dataSize: INTEGER; dataHandle: Handle); INLINE $A8F2; PROCEDURE KillPicture(myPicture: PicHandle); INLINE $A8F5; { The Bottleneck Interface: } PROCEDURE SetStdProcs(VAR procs: QDProcs); INLINE $A8EA; PROCEDURE StdText (count: INTEGER; textAddr: Ptr; numer,denom: Point); INLINE $A882; PROCEDURE StdLine (newPt: Point); INLINE $A890; PROCEDURE StdRect (verb: GrafVerb; r: Rect); INLINE $A8A0; PROCEDURE StdRRect (verb: GrafVerb; r: Rect; ovWd,ovHt: INTEGER); INLINE $A8AF; PROCEDURE StdOval (verb: GrafVerb; r: Rect); INLINE $A8B6; PROCEDURE StdArc (verb: GrafVerb; r: Rect; startAngle,arcAngle: INTEGER); INLINE $A8BD; PROCEDURE StdPoly (verb: GrafVerb; poly: PolyHandle); INLINE $A8C5; PROCEDURE StdRgn (verb: GrafVerb; rgn: RgnHandle); INLINE $A8D1; PROCEDURE StdBits (VAR srcBits: BitMap; VAR srcRect,dstRect: Rect; 6mode: INTEGER; maskRgn: RgnHandle); INLINE $A8EB; PROCEDURE StdComment (kind,dataSize: INTEGER; dataHandle: Handle); INLINE $A8F1; FUNCTION StdTxMeas (count: INTEGER; textAddr: Ptr; 6VAR numer,denom: Point; VAR info: FontInfo): INTEGER; INLINE $A8ED; PROCEDURE StdGetPic (dataPtr: Ptr; byteCount: INTEGER); INLINE $A8EE; PROCEDURE StdPutPic (dataPtr: Ptr; byteCount: INTEGER); INLINE $A8F0; { Misc Utility Routines } FUNCTION GetPixel (h,v: INTEGER): BOOLEAN; INLINE $A865; FUNCTION Random: INTEGER; INLINE $A861; PROCEDURE StuffHex (thingptr: Ptr; s:Str255); INLINE $A866; PROCEDURE ForeColor (color: LongInt); INLINE $A862; PROCEDURE BackColor (color: LongInt); INLINE $A863; PROCEDURE ColorBit (whichBit: INTEGER); INLINE $A864; IMPLEMENTATION {$I intrfc/QuickDraw2.text } W^56PH r^..YO { QuickDraw2.text: Implementation part of QuickDraw } {$S Graf } TYPE FMOutPtr = ^FMOutRec; %FMOutrec = PACKED RECORD 2errNum: INTEGER; { used only for GrafError } 2fontHandle: QDHandle; { handle to font } 2bold: 0..255; { how much to smear horiz } 2italic: 0..255; { how much to shear } 2ulOffset: 0..255; { pixels below baseline } 2ulShadow: 0..255; { how big is the halo } 2ulThick: 0..255; { how thick is the underline } 2shadow: 0..255; { 0,1,2,or 3 only } 2extra: -128..127; { extra white dots each char } 2ascent: 0..255; { ascent measure for font } 2descent: 0..255; { descent measure for font } 2widMax: 0..255; { width of widest char } 2leading: -128..127; { leading between lines } 2unused: 0..255; 2numer: Point; { use this modified scale to } 2denom: Point; { draw or measure text with } 0END; VAR wideOpen: RgnHandle; { a dummy rectangular region, read-only } $wideMaster: RgnPtr; $wideData: Region; $rgnBuf: QDHandle; { point saving buffer for OpenRgn } $rgnIndex: INTEGER; { current bytes used in rgnBuf } $rgnMax: INTEGER; { max bytes allocated so far to rgnBuf } $playPic: PicHandle; { used by StdGetPic } $playIndex: INTEGER; { used by StdGetPic } $thePoly: PolyHandle; { the current polygon being defined } $polyMax: INTEGER; { max bytes allocated so far to thePoly } $patAlign: Point; { to align pattern during DrawPicture } $fontAdj: LongInt; { Fixed Point to adjust for font subst. } $fontPtr: FMOutPtr; { the last font used, used by DrawText } $fontData: FMOutRec; { grafPort routines } { It seems you have to have at least one procedure or function defined in the "implementation section...} Procedure InitGraf; EXTERNAL; END. { of UNIT }  A O9!5P:H r^{$C Copyright Apple Computer, 1982 } {MacIntosh version.} UNIT Sane; $INTERFACE (CONST ,SIGDIGLEN = 20; { Maximum length of SigDig. } ,DECSTRLEN = 80; { Maximum length of DecStr. } (TYPE ,{----------------------------------------------------------------- ,** Numeric types. ,-----------------------------------------------------------------} 0Single = array [0..1] of integer; 0Double = array [0..3] of integer; 0Comp = array [0..3] of integer; 0Extended = array [0..4] of integer; ,{----------------------------------------------------------------- ,** Decimal string type and intermediate decimal type, ,** representing the value: ,** (-1)^sgn * 10^exp * dig ,-----------------------------------------------------------------} 0SigDig = string [SIGDIGLEN]; 0DecStr = string [DECSTRLEN]; 0Decimal = record ?sgn : 0..1; { Sign (0 for pos, 1 for neg). } ?exp : integer; { Exponent. } ?sig : SigDig { String of significant digits. } ;end; ,{----------------------------------------------------------------- ,** Modes, flags, and selections. ,** NOTE: the values of the style element of the DecForm record ,** have different names from the PCS version to avoid name ,** conflicts. ,-----------------------------------------------------------------} 0Environ = integer; 0RoundDir = (TONEAREST, UPWARD, DOWNWARD, TOWARDZERO); 0RelOp = (GT, LT, GL, EQ, GE, LE, GEL, UNORD); <{ > < <> = >= <= <=> } 0Exception = (INVALID, UNDERFLOW, OVERFLOW, DIVBYZERO, eINEXACT); 0NumClass = (SNAN, QNAN, INFINITE, ZERO, NORMAL, DENORMAL); 0DecForm = record @style : (FloatDecimal, FixedDecimal); @digits : integer 0 if active} ,workBreak: LONGINT; {Word break routine} ,clikLoop: LONGINT; {Click loop routine} ,clickTime: LONGINT; {Time of first click} ,clickLoc: INTEGER; {Char. location of click} ,caretTime: LONGINT; {Time for next caret blink} ,caretState: INTEGER; {On/active booleans} ,just: INTEGER; {fill style} ,TELength: INTEGER; {Length of text below} ,hText: Handle; {Handle to actual text} ,recalBack: INTEGER; {<>0 if recal in background} ,recalLines: INTEGER; {Line being recal'ed} ,clikStuff: INTEGER; {click stuff (internal)} ,crOnly: INTEGER; {Set to -1 if CR line breaks only} ,txFont: INTEGER; {Text Font} ,txFace: Style; {Text Face} ,txMode: INTEGER; {Text Mode} ,txSize: INTEGER; {Text Size} ,inPort: GrafPtr; {Grafport} ,highHook: PTR; {Highlighting hook} ,caretHook: PTR; {Highlighting hook} ,nLines: INTEGER; {Number of lines} ,lineStarts: ARRAY [0..16000] OF INTEGER; {Actual line starts themselves} *END; {RECORD} "TEPtr = ^TERec; "TEHandle = ^TEPtr; "CharsHandle = ^CharsPtr; "CharsPtr = ^Chars; "Chars = PACKED ARRAY[0..32000] OF CHAR; "{for Resource Manager} "ResType=PACKED ARRAY[1..4] OF CHAR; "{for Control Manager} "ControlPtr = ^ControlRecord; "ControlHandle = ^ControlPtr; "ControlRecord = %RECORD 'nextControl: ControlHandle; 'contrlOwner: WindowPtr; 'contrlRect: Rect; 'contrlVis: BOOLEAN; 'contrlHilite: BOOLEAN; 'contrlValue: INTEGER; 'contrlMin: INTEGER; 'contrlMax: INTEGER; 'contrlDefProc: Handle; 'contrlData: Handle; 'contrlAction: ProcPtr; 'contrlrfCon: LONGINT; 'contrlTitle: Str255; %END; {ControlRecord} "{for Dialog Manager} "DialogPtr= WindowPtr; "DialogPeek= ^DialogRecord; "DialogRecord= Record 2window: WindowRecord; 2Items: Handle; 2textH: TEHandle; 2EditField: Integer; 2EditOpen: INTEGER; 2ADefItem: INTEGER; 0End; "DialogTHndl= ^DialogTPtr; "DialogTPtr= ^DialogTemplate; "DialogTemplate=RECORD 3boundsRect: Rect; 3procID: INTEGER; 3visible: BOOLEAN; 3filler1: BOOLEAN; 3goAwayFlag: BOOLEAN; 3filler2: BOOLEAN; 3refCon: LongInt; 3ItemsID: INTEGER; 3title: Str255; 1END; "StageList= PACKED ARRAY [1..4] OF RECORD IboldItem: 0..1; IboxDrawn: BOOLEAN; Isound: 0..3; GEND; "AlertTHndl= ^AlertTPtr; "AlertTPtr= ^AlertTemplate; "AlertTemplate=RECORD 2boundsRect: Rect; 2itemsID: INTEGER; 2stages: StageList; 0END; "{for Menu Manager} "MenuPtr = ^MenuInfo; "MenuHandle = ^MenuPtr; "MenuInfo = RECORD /menuId: INTEGER; /menuWidth: INTEGER; /menuHeight: INTEGER; /menuProc: Handle; /enableFlags: PACKED ARRAY[0..maxItem] OF BOOLEAN; /menuData: Str255; -END; "{for Scrap Manager} "ScrapStuff = RECORD &scrapSize: LONGINT; &scrapHandle: Handle; &scrapCount: INTEGER; &scrapState: INTEGER; &scrapName: StringPtr; "END; "pScrapStuff = ^ScrapStuff; {General Utilities} FUNCTION BitAnd (long1,long2: LongInt): LongInt; INLINE $A858; FUNCTION BitOr (long1,long2: LongInt): LongInt; INLINE $A85B; FUNCTION BitXor (long1,long2: LongInt): LongInt; INLINE $A859; FUNCTION BitNot (long: LongInt): LongInt; INLINE $A85A; FUNCTION BitShift (long: LongInt; count: INTEGER): LongInt; INLINE $A85C; FUNCTION BitTst (bytePtr: Ptr; bitNum: LongInt): BOOLEAN; INLINE $A85D; PROCEDURE BitSet (bytePtr: Ptr; bitNum: LongInt); INLINE $A85E; PROCEDURE BitClr (bytePtr: Ptr; bitNum: LongInt); INLINE $A85F; PROCEDURE LongMul (a,b: LongInt; VAR dst: Int64Bit); INLINE $A867; FUNCTION FixMul (a,b: Fixed): Fixed; INLINE $A868; FUNCTION FixRatio (numer,denom: INTEGER): Fixed; INLINE $A869; FUNCTION HiWord (x: LongInt): INTEGER; INLINE $A86A; FUNCTION LoWord (x: LongInt): INTEGER; INLINE $A86B; FUNCTION FixRound (x: Fixed): INTEGER; INLINE $A86C; PROCEDURE PackBits (VAR srcPtr,dstPtr: Ptr; srcBytes: INTEGER); INLINE $A8CF; PROCEDURE UnPackBits(VAR srcPtr,dstPtr: Ptr; dstBytes: INTEGER);INLINE $A8D0; FUNCTION SlopeFromAngle(angle: INTEGER): Fixed; INLINE $A8BC; FUNCTION AngleFromSlope(slope: Fixed): INTEGER; INLINE $A8C4; FUNCTION DeltaPoint(ptA,ptB: Point): LongInt; INLINE $A84F; FUNCTION NewString(theString:Str255): StringHandle; INLINE $A906; PROCEDURE SetString(theString:StringHandle; strNew: Str255); INLINE $A907; FUNCTION GetString(stringID: INTEGER): StringHandle; INLINE $A9BA; PROCEDURE GetIndString(VAR theString: str255; strListID: INTEGER; 7index: INTEGER); FUNCTION Munger(h: Handle; offset: LongInt; ptr1: Ptr; len1: LongInt; 0ptr2: Ptr; len2: LongInt): LongInt; INLINE $A9E0; FUNCTION GetIcon(iconID: INTEGER): Handle; INLINE $A9BB; PROCEDURE PlotIcon(theRect: Rect; theIcon: Handle); INLINE $A94B; FUNCTION GetCursor (cursorID: INTEGER): CursHandle; INLINE $A9B9; FUNCTION GetPattern(patID: INTEGER): PatHandle; INLINE $A9B8; FUNCTION GetPicture(picID: INTEGER): PicHandle; INLINE $A9BC; PROCEDURE ShieldCursor(shieldRect: Rect; offsetPt: Point); INLINE $A855; {for Font Manager} PROCEDURE InitFonts; INLINE $A8FE; PROCEDURE GetFontName(familyID: INTEGER; VAR theName: Str255); INLINE $A8FF; PROCEDURE GetFNum(theName: Str255; VAR familyID: INTEGER); INLINE $A900; PROCEDURE SetFontLock(lockFlag: BOOLEAN); INLINE $A903; FUNCTION FMSwapFont(inRec: FMInput): FMOutPtr; INLINE $A901; FUNCTION RealFont(famID: INTEGER; size: INTEGER): BOOLEAN; INLINE $A902; {for Event Manager} FUNCTION EventAvail(mask:INTEGER; VAR theEvent: EventRecord): BOOLEAN; `INLINE $A971; FUNCTION GetNextEvent(mask:INTEGER; VAR theEvent: EventRecord): BOOLEAN; `INLINE $A970; FUNCTION StillDown:BOOLEAN; INLINE $A973; FUNCTION WaitMouseUp:BOOLEAN; INLINE $A977; PROCEDURE GetMouse (VAR pt: Point); INLINE $A972; FUNCTION TickCount:LongInt; INLINE $A975; FUNCTION Button: BOOLEAN; INLINE $A974; PROCEDURE GetKeys(VAR k: keyMap); INLINE $A976; FUNCTION DoubleTime: LongInt; FUNCTION CaretTime: LongInt; {for Window Manager} PROCEDURE ClipAbove(window: WindowPeek); INLINE $A90B; PROCEDURE PaintOne(window: WindowPeek; clobbered: RgnHandle); INLINE $A90C; PROCEDURE PaintBehind(startWindow: WindowPeek; clobbered: RgnHandle); `INLINE $A90D; PROCEDURE SaveOld(window: WindowPeek); INLINE $A90E; PROCEDURE DrawNew(window: WindowPeek; fUpdate: BOOLEAN); INLINE $A90F; PROCEDURE CalcVis(window: WindowPeek); INLINE $A909; PROCEDURE CalcVisBehind(startWindow: WindowPeek; clobbered: RgnHandle); `INLINE $A90A; PROCEDURE ShowHide(window: WindowPtr; showFlag: BOOLEAN); INLINE $A908; FUNCTION CheckUpdate(VAR theEvent: EventRecord): BOOLEAN; INLINE $A911; PROCEDURE GetWMgrPort(VAR wPort: GrafPtr); INLINE $A910; PROCEDURE InitWindows; INLINE $A912; FUNCTION NewWindow(wStorage: Ptr; 4boundsRect: Rect; 4title: Str255; 4visible: BOOLEAN; 4theProc: INTEGER; 4behind: WindowPtr; 4goAwayFlag: BOOLEAN; 4refCon: LongInt): WindowPtr; INLINE $A913; PROCEDURE DisposeWindow (theWindow: WindowPtr); INLINE $A914; PROCEDURE CloseWindow (theWindow: WindowPtr); INLINE $A92D; PROCEDURE MoveWindow (theWindow: WindowPtr; h,v: INTEGER; BringToFront:BOOLEAN); `INLINE $A91B; PROCEDURE SizeWindow (theWindow: WindowPtr; width,height: INTEGER; fUpdate: BOOLEAN); `INLINE $A91D; FUNCTION GrowWindow (theWindow: windowPtr; startPt: Point; bBox: Rect): LongInt; `INLINE $A92B; PROCEDURE DragWindow (theWindow: WindowPtr; startPt: Point; boundsRect: Rect); `INLINE $A925; PROCEDURE ShowWindow (theWindow: WindowPtr); INLINE $A915; PROCEDURE HideWindow (theWindow: WindowPtr); INLINE $A916; PROCEDURE SetWTitle (theWindow: WindowPtr; title: Str255); INLINE $A91A; PROCEDURE GetWTitle (theWindow: WindowPtr; VAR title: Str255); INLINE $A919; PROCEDURE HiliteWindow (theWindow: WindowPtr; fHiLite: BOOLEAN); INLINE $A91C; PROCEDURE BeginUpdate (theWindow: WindowPtr); INLINE $A922; PROCEDURE EndUpdate (theWindow: WindowPtr); INLINE $A923; PROCEDURE SetWRefCon (theWindow: WindowPtr; data: LongInt); INLINE $A918; FUNCTION GetWRefCon (theWindow: WindowPtr): LongInt; INLINE $A917; PROCEDURE SetWindowPic (theWindow: WindowPtr; thePic: PicHandle); INLINE $A92E; FUNCTION GetWindowPic (theWindow: WindowPtr): PicHandle; INLINE $A92F; PROCEDURE BringToFront (theWindow: WindowPtr); INLINE $A920; PROCEDURE SendBehind (theWindow,behind: WindowPtr); INLINE $A921; FUNCTION FrontWindow: WindowPtr; INLINE $A924; PROCEDURE SelectWindow (theWindow: WindowPtr); INLINE $A91F; FUNCTION TrackGoAway (theWindow: WindowPtr; thePt: Point): BOOLEAN; `INLINE $A91E; PROCEDURE DrawGrowIcon (theWindow: WindowPtr); INLINE $A904; PROCEDURE ValidRect (goodRect: Rect); INLINE $A92A; PROCEDURE ValidRgn (goodRgn: RgnHandle); INLINE $A929; PROCEDURE InvalRect (badRect: Rect); INLINE $A928; PROCEDURE InvalRgn (badRgn: RgnHandle); INLINE $A927; FUNCTION FindWindow (thePoint: Point; :VAR theWindow: WindowPtr): INTEGER; INLINE $A92C; FUNCTION GetNewWindow (windowID: INTEGER; wStorage: Ptr; >behind: WindowPtr): WindowPtr; INLINE $A9BD; FUNCTION PinRect(theRect: Rect; thePt: Point): LongInt; INLINE $A94E; FUNCTION DragGrayRgn(theRgn: RgnHandle; startPt: Point; boundsRect, 6slopRect: Rect;axis: INTEGER; 6actionProc: ProcPtr): LongInt; INLINE $A926; {For TextEdit} PROCEDURE TEActivate( h: TEHandle ); INLINE $A9D8; PROCEDURE TECalText( h: TEHandle ); INLINE $A9D0; PROCEDURE TEClick( pt: Point; extend: BOOLEAN; h: TEHandle ); INLINE $A9D4; PROCEDURE TECopy( h: TEHandle ); INLINE $A9D5; PROCEDURE TECut( h: TEHandle ); INLINE $A9D6; PROCEDURE TEDeActivate( h: TEHandle ); INLINE $A9D9; PROCEDURE TEDelete( h: TEHandle ); INLINE $A9D7; PROCEDURE TEDispose( h: TEHandle ); INLINE $A9CD; PROCEDURE TEIdle( h: TEHandle ); INLINE $A9DA; PROCEDURE TEInit; INLINE $A9CC; PROCEDURE TEKey( key: CHAR; h: TEHandle ); INLINE $A9DC; FUNCTION TENew( dest, view: Rect ): TEHandle; INLINE $A9D2; PROCEDURE TEPaste( h: TEHandle ); INLINE $A9DB; PROCEDURE TEScroll( dh, dv: INTEGER; h: TEHandle ); INLINE $A9DD; PROCEDURE TESetSelect( selStart, selEnd: LONGINT; h: TEHandle ); INLINE $A9D1; PROCEDURE TESetText( inText: Ptr; textLength: LONGINT; h: TEHandle ); INLINE $A9CF; PROCEDURE TEInsert( inText: Ptr; textLength: LONGINT; h: TEHandle ); INLINE $A9DE; PROCEDURE TEUpdate( rUpdate: Rect; h: TEHandle ); INLINE $A9D3; PROCEDURE TESetJust( just: INTEGER; h: TEHandle ); INLINE $A9DF; FUNCTION TEGetText( h: TEHandle ): CharsHandle; INLINE $A9CB; FUNCTION TEScrapHandle: Handle; FUNCTION TEGetScrapLen: LongInt; PROCEDURE TESetScrapLen(length: LongInt); {Box drawing utility} PROCEDURE TextBox( inText: Ptr; textLength: LONGINT; r: Rect; style: INTEGER ); `INLINE $A9CE; {for Resource Manager} FUNCTION InitResources: INTEGER; INLINE $A995; PROCEDURE RsrcZoneInit; INLINE $A996; PROCEDURE CreateResFile(fileName: Str255); INLINE $A9B1; FUNCTION OpenResFile(fileName: Str255): INTEGER; INLINE $A997; PROCEDURE UseResFile(refNum: INTEGER); INLINE $A998; FUNCTION GetResFileAttrs(refNum: INTEGER): INTEGER; INLINE $A9F6; PROCEDURE SetResFileAttrs(refNum: INTEGER; attrs: INTEGER); INLINE $A9F7; PROCEDURE UpdateResFile(refNum: INTEGER); INLINE $A999; PROCEDURE CloseResFile(refNum: INTEGER); INLINE $A99A; PROCEDURE SetResPurge(install: Boolean); INLINE $A993; PROCEDURE SetResLoad(AutoLoad: Boolean); INLINE $A99B; FUNCTION CountResources(theType: ResType): INTEGER; INLINE $A99C; FUNCTION GetIndResource(theType: ResType; index: INTEGER): Handle; `INLINE $A99D; FUNCTION CountTypes: INTEGER; INLINE $A99E; PROCEDURE GetIndType(VAR theType: ResType; index: INTEGER); INLINE $A99F; FUNCTION UniqueID(theType: ResType): INTEGER; INLINE $A9C1; FUNCTION GetResource(theType: ResType; ID: INTEGER): Handle; INLINE $A9A0; FUNCTION GetNamedResource(theType: ResType; name: Str255): Handle; `INLINE $A9A1; PROCEDURE LoadResource(theResource: Handle); INLINE $A9A2; PROCEDURE ReleaseResource(theResource: Handle); INLINE $A9A3; PROCEDURE DetachResource(theResource: Handle); INLINE $A992; PROCEDURE ChangedResource(theResource: Handle); INLINE $A9AA; PROCEDURE WriteResource(theResource: Handle); INLINE $A9B0; FUNCTION HomeResFile(theResource: Handle): INTEGER; INLINE $A9A4; FUNCTION CurResFile: INTEGER; INLINE $A994; FUNCTION GetResAttrs(theResource: Handle): INTEGER; INLINE $A9A6; PROCEDURE SetResAttrs(theResource: Handle; attrs: INTEGER); INLINE $A9A7; PROCEDURE GetResInfo(theResource: Handle; 5VAR theID: INTEGER; 5VAR theType: ResType; 5VAR name: Str255); INLINE $A9A8; PROCEDURE SetResInfo(theResource: Handle; 5theID: INTEGER; 5name: Str255); INLINE $A9A9; PROCEDURE AddResource(theResource: Handle; 6theType: ResType; 6theID: INTEGER; 6name: Str255); INLINE $A9AB; PROCEDURE AddReference(theResource: Handle; 7theID: INTEGER; 7name: Str255); INLINE $A9AC; PROCEDURE RmveResource(theResource: Handle); INLINE $A9AD; PROCEDURE RmveReference(theResource: Handle); INLINE $A9AE; FUNCTION SizeResource(theResource: Handle): LongInt; INLINE $A9A5; FUNCTION ResError: INTEGER; INLINE $A9AF; {for Control Manager} FUNCTION NewControl(curWindow: windowPtr; 4boundsRect: Rect; 4title: Str255; 4visible: BOOLEAN; 4value: INTEGER; 4min: INTEGER; 4max: INTEGER; 4contrlProc: INTEGER; 4refCon: LongInt): ControlHandle; INLINE $A954; PROCEDURE DisposeControl (theControl: ControlHandle); INLINE $A955; PROCEDURE KillControls (theWindow: WindowPtr); INLINE $A956; PROCEDURE MoveControl (theControl: ControlHandle; h,v: INTEGER); INLINE $A959; PROCEDURE SizeControl (theControl: ControlHandle; w,h: INTEGER); INLINE $A95C; PROCEDURE DragControl (theControl: ControlHandle; startPt: Point; :bounds: Rect; slopRect: Rect; axis:INTEGER); INLINE $A967; PROCEDURE ShowControl (theControl: ControlHandle); INLINE $A957; PROCEDURE HideControl (theControl: ControlHandle); INLINE $A958; PROCEDURE SetCTitle (theControl: ControlHandle; title: Str255); INLINE $A95F; PROCEDURE GetCTitle (theControl: ControlHandle; VAR title: Str255); INLINE $A95E; PROCEDURE HiliteControl (theControl: ControlHandle; hiliteState: INTEGER); `INLINE $A95D; PROCEDURE SetCRefCon (theControl: ControlHandle; data: LongInt); INLINE $A95B; FUNCTION GetCRefCon (theControl: ControlHandle): LongInt; INLINE $A95A; PROCEDURE SetCtlValue (theControl: ControlHandle; theValue: INTEGER); INLINE $A963; FUNCTION GetCtlValue (theControl: ControlHandle): INTEGER; INLINE $A960; FUNCTION GetCtlMin (theControl: ControlHandle): INTEGER; INLINE $A961; FUNCTION GetCtlMax (theControl: ControlHandle): INTEGER; INLINE $A962; PROCEDURE SetCtlMin (theControl: ControlHandle; theValue: INTEGER); INLINE $A964; PROCEDURE SetCtlMax (theControl: ControlHandle; theValue: INTEGER); INLINE $A965; FUNCTION GetCtlAction (theControl: ControlHandle): ProcPtr; INLINE $A96A; PROCEDURE SetCtlAction (theControl: ControlHandle; newProc: ProcPtr); INLINE $A96B; FUNCTION TestControl (theControl: ControlHandle; thePt: Point): INTEGER; `INLINE $A966; FUNCTION TrackControl (theControl:ControlHandle; thePt: Point; C 0AHC 0Hl4HlRNBgHnHlRHnHnNg ?.?.ި(_N^ _ NOVETO3DLINETO3DGraf LINETO3DLINETO3DCLIP3D CLIP3D TRANSFORTRANSFORGRAF3D 8NV/ nCJ""2 n CJ""2 nCJ""2(mACRp S@n0A4C 0A>C 0AHC 0Hl4HlRNBgHnHlRHnHnNg?.?.?.?.(_N^ _ NINETO3DƀMOVE3D Graf MOVE3D MOVE3D MOVETO3DMOVETO3DlADDX ADDX \PDGRAF3D 8NV/ nCJ""2 n CJ""2 nCJ""2(mHl4HnNHl>HnNHlHHnNHnHnHnN(_N^ _ NOVE3D LINE3D Graf LINE3D LINE3D LINETO3DLINETO3DlADDX ADDX \PDGRAF3D 8NV/ nCJ""2 n CJ""2 nCJ""2(mHl4HnNHl>HnNHlHHnNHnHnHnN(_N^ _ NINE3D MOVETO2DGraf MOVETO2DMOVETO2DMOVETO3DMOVETO3D6GRAF3D .RNV n CJ""2 nCJ""2HnHn mHhHNN^ _PONOVETO2DJMOVE2D Graf MOVE2D MOVE2D MOVE3D MOVE3D <I2X I2X ,XNV n CJ""2 nCJ""2BgHnNHnHnHnNN^ _PONOVE2D PLINETO2DGraf LINETO2DLINETO2DLINETO3DLINETO3D6GRAF3D .RNV n CJ""2 nCJ""2HnHn mHhHNN^ _PONINETO2DJLINE2D Graf LINE2D LINE2D LINE3D LINE3D <I2X I2X ,XNV n CJ""2 nCJ""2BgHnNHnHnHnNN^ _PONINE2D PVIEWLOOKGraf $1000000VIEWLOOKADDX ADDX DIVX DIVX JSUBX SUBX l2$I2X I2X x`V>&GRAF3D NVH(mG?+HlN?+HnNHnHlN?<HnNHnHlN?+HlN?HnNHnHlN?0 A!IBhBhBf1h> Bf!|.1|,DA0Nuj%_CLOSE %_CLOSE %_CLOSE SIOERR SIOERR  2 _/1h>A0Nu%_EOF %_EOF %_EOF SIOERR SIOERR >hH o1h>B.Bh(1|,B Bh!|$E@!J 2((A0JAgB/`|/oLTNu`%_EOLN %_EOLN %_EOLN SIOERR SIOERR >jH o1h>B.Bh(1|,B Bh!|$E@!J $h A0  gB/`|/oLTNub%_BLKRD %_BLKRD %_BLKRD %_BLKWR %_BLKWR SIOERR SIOERR Tj|`| BB24"_ _/@JAlBA1h>!A.1|,!B$!I @g`2((A0 _?NЁb%_UREAD %_UWRIT %_UWRIT %_UREAD %_UREAD SIOERR SIOERR b|0<`BBB$_246"_.$@0<0B. @g!|@.1|ը.1|,!C$!I g`4((A0$_Bg>Nҁt%_IORES %_IORES %_IORES SIOERR SIOERR  ?8/Nu %_UCLR %_UCLR %_UCLR  _0NЁ%_UBUSY %_UBUSY %_UBUSY Nu%_GET %_GET %_GET %_PUT %_PUT  _"NЁ%_UPARR %_UPARR %_UPARR / o/P _Nu%_SEEK %_SEEK %_SEEK  _0"NЁ%I_MUL4 %I_MUL4 %I_MUL4 <//0/2/ AH@B@2/Ё/@" /WXNu4%I_DIV4 %I_DIV4 %I_DIV4 IDIVMOD IDIVMOD (// /"/ N/A" /WXNu %I_MOD4 %I_MOD4 %I_MOD4 IDIVMOD IDIVMOD (// /"/ N/@" /WXNu IDIVMOD IDIVMOD IDIVMOD FH>*jD,jD$&BBx㉰mRSDlJjDjDL|Nu>%_NEW %_NEW %_NEW "B _0Ѐ"_/H>"L|Nu%_MARK %_MARK %_MARK "_ _/ Nu%_RELSE %_RELSE %_RELSE "_ _/ Nu%_MEMAV %_MEMAV %_MEMAV /Nu%_HALT %_HALT %_HALT Nu%_IOERR %_IOERR %_IOERR Nu%_GOTOXY %_GOTOXY%_GOTOXYV _42/H2 O1|C0!I 1|$Bh,B.A B AB2LNu= N%_LSTSG %_LSTSG %_LSTSG Nu%_GOTO %_GOTO %_GOTO .Nu%_MOVEL %_MOVEL %_MOVEL "0 _"_S@kQ/Nu%_MOVER %_MOVER %_MOVER ""0 _"_S@k!Q/Nu%_FILLC %_FILLC %_FILLC "_02 _SAkQNс%_SCANE %_SCANE %_SCANE HHBB o0/2/gk gRBSAn` R gSBRAk?B/oL\Nu@%_SCANN %_SCANN %_SCANN HHBB o0/2/gk fRBSAn` R fSBRAk?B/oL\Nu@%_RCHCK %_RCHCK %_RCHCK "_024Nс %_SRCHK %_SRCHK %_SRCHK .Nu%S_NE %S_EQ %S_EQ %S_NE %S_NE FHr`HBA o"oB@f`fS@j AA/oL\Nu>%S_GT %S_GT %S_GT STRCOMP STRCOMP H"o ovN%S_LE %S_LE %S_LE STRCOMP STRCOMP H"o oBCN%S_LT %S_LT %S_LT STRCOMP STRCOMP H o "ovN%S_GE %S_GE %S_GE STRCOMP STRCOMP PH o "oBCB@BA@m4`4`fSBj@n C`cC"/oL\NuH%_INTER %_INTER %_INTER DBHA0"H2@l02H`4 aS@j3 o#/IL._Nu<%_SING %_SING %_SING JHA$0BP2I4RB6K"O$O8<4SDf JBZSBf0BB@0LNuB%_UNION %_UNION %_UNION XBHA 0"H26@l6K`4 aSCjAgm @H3 S@n`3 o#/IL._NuP%_DIFF %_DIFF %_DIFF LBHA 0"H26@l6K`4 FBaSCjAn3 o#/IL._NuD%_RDIFF %_RDIFF %_RDIFF TBHA 0"H26@l6K`Fa4 QSCjAo @H3 S@n3 o#/IL._NuL%_RANGE %_RANGE %_RANGE ~H2/$0/&B$A(J@jB@@mH4J6Kg"O$O8<4SDfBZSBfTC?C$46JJDBCBDĉp R@@lLNu o /H"LJ_Nuv%_ADJ %_ADJ %_ADJ <H0/2/A"o@lB`TAk`! /HL._Nu4%_SETNE %_SETEQ %_SETEQ %_SETNE %_SETNE ~BHv`BHBCA$0"H2$I4@l4’J`Hf*SBj@gkIJafSAn`AJ`fRAk CB" o %/JL._Nuv%_SETGE %_SETGE %_SETGE %_SETLE %_SETLE |BHC$2 I0$H`BHA$0"H2$I4@l4J`6 FCafSBj@gk IJaf SAjNqv`BCB" o %/JL._Nut%_TERM %_TERM %_TERM  _NUNЁ%W_LN %W_LN %W_LN OUTCH OUTCH SIOERR SIOERR "_ _H< aLNH"fdNV&HnHn0.nn=@AFg Yf& U P-hBn0.nn=@Hn쨣` Tf. U P=h=n0.n=@n=@Hn쨣` *f U P-h-hHn쨣` fA` f`  f Bg?.`  f> U P0.nhe"B"W U PHhBg0.D@?/ `FBg?.ꨔ`: f?<`,  f`$ fB`  fBg?.FWRW`?N^`aLNu1h>!|$B.1|,G!K A0Nu%W_C %W_C %W_C OUTCH OUTCH &"_4 _/ `p NSBnNNu%W_PAOC %W_PAOC %W_PAOC OUTCH OUTCH . 24"_ _/Bo p NSAfNSBnNu&%W_I %W_I %W_I OUTCH OUTCH \Rp"_2  _/ HBB,lD&(BDHD *: HD&6HEE0?RBJfJlRB?<-6Bo p NSCn0NSBnLxNuh%W_B %W_B %W_B %W_STR %W_STR OUTCH OUTCH :.` _4gHzH`Hz!|$B.Bh,C@!I A0LNux%R_LN %R_LN %R_LN SIOERR SIOERR TINCH INCH f"_ _H g N f`!|$B.0< H<1@,E@!J BBh%%%REAL %%%REAL %%%REAL GETARG GETARG CLEARSTACLEARSTA.A JBBPNuN _NVHnC/ ?<NЁ&%_ROUND RETURNINRETURNIN%_ROUND %_ROUND GETARG GETARG N/ Hn?<(N^Nu%_TRUNC %_TRUNC %_TRUNC RETURNINRETURNINGETARG GETARG &NA J0`/ ?<A JBPN%I_FLT RETURNRERETURNRE%I_FLT %I_FLT CLEARSTACLEARSTA0NNVHnC/ ?<(/ Hn?<N^Nu(%F_NEG %F_NEG %F_NEG oNu%F_ABS %F_ABS %F_ABS Nu%F_ADD %F_ADD %F_ADD FPBINARYFPBINARYCLEARSTACLEARSTAH2</ NNVHn C/ ?<Hn/ ?@/ Hn ?<N^."_DNu@%F_SUB %F_SUB %F_SUB FPBINARYFPBINARY2<N%F_MUL %F_MUL %F_MUL FPBINARYFPBINARY2<N%F_DIV %F_DIV %F_DIV FPBINARYFPBINARY2<NCMPARE %F_LE %F_LE &%F_GT %F_GT ,%F_EQ %F_EQ 8%F_NE %F_NE >%F_LT %F_LT %F_GE %F_GE 2ISFALSE ISFALSE CMPARE CMPARE ISTRUE ISTRUE FPBINARYFPBINARYLL"AH砀2< NXO?<NXOBgNae`ac`an`al`ag`af`ցDMACPRINTL {$U-} {Turn on/off the Lisa Libraries.} {$X-} {Turn on/off stack expansion.} {$R-} {Turn on/off range checking.} {$D-} {Turn on/off debug symbols.} INTERFACE { ---------------------------------------------------------------------- } USES {$U Obj/MemTypes } MemTypes, &{$U Obj/QuickDraw } QuickDraw, &{$U Obj/OSIntf } OSIntf; {Interface compile flags, also check CONST's} {$SETC fWordBkOK = TRUE } {Turn on/off word breaking in spool file.[PfWrite]} {$SETC fULFixOK = TRUE } {Turn on/off fixing UL.[PfWrite, PrBand]} { ---------------------------------------------------------------------- } CONST #iPrPgFract = 120; {Page scale factor. ptPgSize (below) is in units of 1/iPrPgFract } #iPrPgFst = 1; {Page range constants} #iPrPgMax = 9999; #iIOBufBytes= 522; {Size of file sys buf.} #iIOBlkBytes= 512; {Size of disk block} #iPrRelease = 2; {Current version number of the code.} #iPrintX = 19; {Spare integers in print rec} {The TPrint Resource type & ID's} #lPStrType = $53545220; {"STR ": Res type for the Pr Rsrc file name} #iPStrRFil = $E000; {-8192} {Str $E000 [in SysRes] is the current printer's rsrc file} #iPStrPFil = $E001; {-8191} {Str $E001 is the default print file name} #lPrintType = $50524543; {"PREC": Res type for the hPrint records} #iPrintDef = 0; {Default hPrint } #iPrintLst = 1; {Last used hPrint} #iPrintDrvr= 2; {.Print's parameter record; not a Print rec} #iMyPrDrvr = $E000; {-8192} {My copy of the above.} {PicFile constants} #iPfMaxPgs = 128; #lPfType = $5046494C; {"PFIL"} #lPfSig = $50535953; {"PSYS"} #iPfIcon = 140; #lPrType = $4150504C; {"APPL"} #lPrSig = $50535953; {"PSYS"} #iPrIcon = 138; {Driver & Resource constants} #sPrDrvr = '.Print'; #iPrDrvrID = 2; {Driver's ResID} #iPrDrvrRef = $FFFD; {Driver's RefNum = NOT ResID} #iPrDrvrDev = $FD00; {Driver's QD Dev num = RefNum in Hi Byte, variant in lo} #iPrBitsCtl = 4; {The Bitmap Print Proc's ctl number} #lScreenBits= $00000000; {The Bitmap Print Proc's Screen Bitmap param} #lPaintBits = $00000001; {The Bitmap Print Proc's Paint [sq pix] param} #lHiScreenBits= $00000010; {The Bitmap Print Proc's Screen Bitmap param} #lHiPaintBits = $00000011; {The Bitmap Print Proc's Paint [sq pix] param} #iPrIOCtl = 5; {The Raw Byte IO Proc's ctl number} #iPrEvtCtl = 6; {The PrEvent Proc's ctl number} #lPrEvtAll = $0002FFFD; {The PrEvent Proc's CParam for the entire screen} #lPrEvtTop = $0001FFFD; {The PrEvent Proc's CParam for the top folder} #iPrDevCtl = 7; {The PrDevCtl Proc's ctl number} #lPrReset = $00010000; {The PrDevCtl Proc's CParam for reset} #lPrPageEnd = $00020000; {The PrDevCtl Proc's CParam for end page} #lPrLineFeed= $00030000; {The PrDevCtl Proc's CParam for paper advance} #lPrLFSixth = $0003FFFF; {The PrDevCtl Proc's CParam for 1/6 th inch paper advance} #lPrLFEighth= $0003FFFE; {The PrDevCtl Proc's CParam for 1/8 th inch paper advance} #iFMgrCtl = 8; {The FMgr's Tail-hook Proc's ctl number} ;{ [The Pre-Hook is the status call] } {General Dlg/Alert[=Ax] Constants:} $iOK = 1; iCancel = 2; #iPrStlDlg= $E000; {-8192} #iPrJobDlg= $E001; {-8191} #iPrCfgDlg= $E002; {-8190} #iPgFeedAx= $E00A; {-8182} #iPicSizAx= $E00B; {-8181} #iIOAbrtAx= $E00C; {-8180} {Sys Error & Deap Shit Constants:} #iMemFullErr = -108; #iPrAbort = 128; #iPicLim = 129; #iPicMax = 130; #iIOAbort = -27; #iPrDeapShit = 29; {The PrVars lo mem area:} #pPrGlobals = $00000944; #bDraftLoop = 0; #bSpoolLoop = 1; #bUser1Loop = 2; #bUser2Loop = 3; { ---------------------------------------------------------------------- } TYPE #TN = 0..15; {A Nibble} #TStr80 = String[80]; {A medium size string} #TPStr80 = ^TStr80; {..its pointer} #TPRect = ^Rect; {A Rect Ptr} #TPBitMap = ^BitMap; {A BitMap Ptr} #TWord = PACKED RECORD {General purpose "alias" record for a word & long.} &CASE Integer OF )0: ( c1, c0: Char ); )1: ( b1, b0: SignedByte ); )2: ( usb1, usb0: Byte ); )3: ( n3, n2, n1, n0: TN ); )4: ( f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0: Boolean ); )5: ( i0: Integer ); #END; #TLong = RECORD &CASE Integer OF )0: ( w1, w0: TWord ); )1: ( l0: LongInt ); )2: ( p0: Ptr ); )3: ( h0: Handle ); )4: ( pt: Point ); #END; 5{NOTE: Changes will also affect: PrEqu, TCiVars & TPfVars} #TPrVars = RECORD {4 longs for printing, see SysEqu for location.} &iPrErr: Integer; {Current print error. Set to iPrAbort to abort printing.} &bDocLoop: SignedByte; {The Doc style: Draft, Spool, .., and ..} D{Currently use low 2 bits; the upper 6 are for flags.} &bUser1: SignedByte; {Spares used by the print code} &lUser1: TLong; &lUser2: TLong; &lUser3: TLong; #END; #TPPrVars = ^TPrVars; #TPrInfo = RECORD {Print Info Record: The parameters needed for page composition.} &iDev: Integer; {Font mgr/QuickDraw device code} &iVRes: Integer; {Resolution of device, in device coordinates} &iHRes: Integer; { ..note: V before H => compatable with Point.} &rPage: Rect; {The page (printable) rectangle in device coordinates.} #END; #TPPrInfo = ^TPrInfo; {These are types of paper feeders.} #TFeed = ( feedCut, feedFanfold, feedMechCut, feedOther ); #TPrStl = RECORD {Printer Style: The printer configuration and usage information.} &wDev: TWord; {The device (driver) number. Hi byte=RefNum, Lo byte=variant.} &iPageV: Integer; {paper size in units of 1/iPrPgFract} &iPageH: Integer; { ..note: V before H => compatable with Point.} &bPort: SignedByte; {The IO port number. Refnum?} &feed: TFeed; {paper feeder type.} #END; #TPPrStl = ^TPrStl; {Banding data structures. Not of general interest to Apps.} #TScan = {Band Scan direction Top-Bottom, Left-Right, etc.} &( scanTB, scanBT, scanLR, scanRL ); #TPrXInfo = RECORD {The print time eXtra information.} &iRowBytes: Integer; {The Band's rowBytes.} &iBandV: Integer; {Size of band, in device coordinates} &iBandH: Integer; { ..note: V before H => compatable with Point.} &iDevBytes: Integer; {Size for allocation. May be more than rBounds size!} &iBands: Integer; {Number of bands per page.} &bPatScale: SignedByte; {Pattern scaling} &bULThick: SignedByte; {3 Underscoring parameters} &bULOffset: SignedByte; &bULShadow: SignedByte; &scan: TScan; {Band scan direction} &bXInfoX: SignedByte; {An eXtra byte.} #END; #TPPrXInfo = ^TPrXInfo; #TPrJob = RECORD {Print Job: Print "form" for a single print request.} &iFstPage: Integer; {Page Range.} &iLstPage: Integer; &iCopies: Integer; {No. copies.} &bJDocLoop: SignedByte; {The Doc style: Draft, Spool, .., and ..} &fFromUsr: Boolean; {Printing from an User's App (not PrApp) flag} &pIdleProc: ProcPtr; {The Proc called while waiting on IO etc.} &pFileName: TPStr80; {Spool File Name: NIL for default.} &iFileVol: Integer; {Spool File vol, set to 0 initially} &bFileVers: SignedByte; {Spool File version, set to 0 initially} &bJobX: SignedByte; {An eXtra byte.} #END; #TPPrJob = ^TPrJob; #TPrint = RECORD {The universal 120 byte printing record} &iPrVersion: Integer; {Printing software version} &PrInfo: TPrInfo; {the PrInfo data associated with the current style.} &rPaper: Rect; {The paper rectangle [offset from rPage].} &PrStl: TPrStl; {This print request's style.} &PrInfoPT: TPrInfo; {Print Time Imaging metrics} &PrXInfo: TPrXInfo; {Print-time (expanded) Print info record.} &PrJob: TPrJob; {The Print Job request} &PrintX: Array[1..iPrintX]of integer; {Spare to fill to 120 bytes!} #END; #TPPrint = ^TPrint; #THPrint = ^TPPrint; {Printing Graf Port. All printer imaging, whether spooling, banding, etc, happens "thru" a GrafPort.} #TPrPort = RECORD {This is the "PrPeek" record.} &GPort: GrafPort; {The Printer's graf port.} &GProcs: QDProcs; {..and its procs} &lGParam1: TLong; {Some params: Our relocatable stuff etc.} &lGParam2: TLong; &lGParam3: TLong; &lGParam4: TLong; &fOurPtr: Boolean; {Whether the PrPort allocation was done by us.} &fOurBits: Boolean; {Whether the BitMap allocation was done by us.} #END; #TPPrPort = ^TPrPort; #TPPort = RECORD {Pascal Yuk: Alias to merge a grafport & prport} &CASE Integer OF )0: (pGPort: GrafPtr); )1: (pPrPort: TPPrPort); #END; #TPrStatus = RECORD {Print Status: Print information during printing.} &iTotPages: Integer; {Total pages in Print File.} &iCurPage: Integer; {Current page number} &iTotCopies: Integer; {Total copies requested} &iCurCopy: Integer; {Current copy number} &iTotBands: Integer; {Total bands per page.} &iCurBand: Integer; {Current band number} &fPgDirty: Boolean; {True if current page has been written to.} &fImaging: Boolean; {Set while in band's DrawPic call.} &hPrint: THPrint; {Handle to the active Printer record} &pPrPort: TPPrPort; {Ptr to the active PrPort} &hPic: PicHandle; {Handle to the active Picture} #END; #TPPrStatus = ^TPrStatus; {PicFile = a TPfHeader followed by n QuickDraw Pics (whose PicSize is invalid!)} #TPfPgDir = RECORD &iPages: Integer; &lPgPos: ARRAY [0..iPfMaxPgs] OF LongInt; #END; #TPPfPgDir = ^TPfPgDir; #THPfPgDir = ^TPPfPgDir; #TPfHeader = RECORD {Print File header.} &Print: TPrint; &PfPgDir: TPfPgDir; #END; #TPPfHeader = ^TPfHeader; #THPfHeader = ^TPPfHeader; {Note: Type compatable with an hPrint.} (* This is not included here due to requiring $Use-ing the entire world! #It's only used by those desiring to customize the print dialogs. #TPrDlg = RECORD {Print Dialog: The Dialog Stream object.} &Dlg: DialogRecord; {The Dialog window} &pFltrProc: ProcPtr; {The Filter Proc.} &pItemProc: ProcPtr; {The Item evaluating proc.} &hPrintUsr: THPrint; {The user's print record.} &fDoIt: Boolean; &fDone: Boolean; &lUser1: TLong; {Four longs for user's to hang global data.} &lUser2: TLong; &lUser3: TLong; &lUser4: TLong; #{ ...Plus more stuff needed by the particular printing dialog.} #END; #TPPrDlg = ^TPrDlg; {== a dialog ptr} *) { ---------------------------------------------------------------------- } { --Init-- } PROCEDURE PrOpen; #{ Open the .Print driver, get the Current Printer's Rsrc file %name from SysRes, open the resource file, and open the .Print driver %living in SysRes. %PrOpen MUST be called during init time. } PROCEDURE PrClose; #{Closes JUST the print rsrc file. Leaves the .Print driver in SysRes open.} { --Print Dialogs & Default-- } PROCEDURE PrintDefault ( hPrint: THPrint ); #{ Defaults a handle to a Default Print record. %Note: You allocate (or fetch from file's resources..) the handle, +I fill it. Also, I may invoke this at odd times whenever +I think you have an invalid Print record! } FUNCTION PrValidate ( hPrint: THPrint ): Boolean; #{ Checks the hPrint. Fixes it if there has been a change in SW %version or in the current printer. Returns fChanged. %Note: Also updates the various parameters within the Print +record to match the current values of the PrStl & PrJob. +It does NOT set the fChanged result if these +parameters changed as a result of this update. } FUNCTION PrStlDialog ( hPrint: THPrint ): Boolean; FUNCTION PrJobDialog ( hPrint: THPrint ): Boolean; #{ The Dialog returns the fDoIt flag: )IF PrJobDialog(..) THEN BEGIN ,PrintMyDoc (..); ,SaveMyStl (..) )END -OR )IF PrStlDialog(..) THEN SaveMyStl (..) &NOTE: These may change the hPrint^^ if the version number ,is old or the printer is not the current one. } PROCEDURE PrJobMerge (hPrintSrc, hPrintDst: THPrint); #{ Merges hPrintSrc's PrJob into hPrintDst [Source/Destination]. %Allows one job dialog being applied to several docs [Finder printing] } { --The Document printing procs: These spool a print file.-- } FUNCTION PrOpenDoc ( hPrint: THPrint; 5pPrPort: TPPrPort; 5pIOBuf: Ptr ): TPPrPort; #{ Set up a graf port for Pic streaming and make it the current port. %Init the print file page directory. %Create and open the print file. %hPrint: The print info. %pPrPort: the storage to use for the TPrPort. If NIL we allocate. %pIOBuf: an IO buf; if NIL, file sys uses volume buf. %returns TPPrPort: The TPPrPort (graf port) used to spool thru. } PROCEDURE PrCloseDoc ( pPrPort: TPPrPort ); #{ Write the print file page directory. %Close the print file. } PROCEDURE PrOpenPage ( pPrPort: TPPrPort; pPageFrame: TPRect ); #{ If current page is in the range of printed pages: 'Open a picture for the page 'Otherwise set a null port for absorbing an image. %pPageFrame := PrInfo.rPage, unless you're scaling. %Set pPageFrame to NIL unless you want to perform PicScaling on the printer. %[The printing procs will call OpenPicture (pPageFrame^) and DrawPicture (hPic, rPage);] %Note: Use of QuickDraw may now cause File IO errors due to our Pic spooling! } PROCEDURE PrClosePage( pPrPort: TPPrPort ); #{ Close & kill the page picture. %Update the file page directory. %If we allocated the TPrPort then de-allocate it. } { --The "Printing Application" proc: Read and band the spooled PicFile.-- } PROCEDURE PrPicFile( hPrint: THPrint; 5pPrPort: TPPrPort; 5pIOBuf: Ptr; 5pDevBuf: Ptr; 5VAR PrStatus: TPrStatus ); #{ Read and print the spooled print file. %The idle proc is run during Imaging and Printing. } (* Removed: fources assumption of use of Pic spool files! PROCEDURE PrPic ( hPic: PicHandle; 2hPrint: THPrint; 2pPrPort: TPPrPort; 2pDevBuf: Ptr; 2VAR PrStatus: TPrStatus ); #{ Print a memory resident picture (one page). } *) { --Get/Set the current Print Error-- } FUNCTION PrError: Integer; PROCEDURE PrSetError ( iErr: Integer ); { --The .Print driver calls.-- } PROCEDURE PrDrvrOpen; PROCEDURE PrDrvrClose; #{ Open/Close the .Print driver in SysRes. Make it purgable or not. %ONLY used by folks doing low level stuff, not full document printing. } PROCEDURE PrCtlCall (iWhichCtl: Integer; lParam1, lParam2, lParam3: LongInt); #{ A generalized Control proc for the Printer driver. %The main use is for bitmap printing: )PrCtlCall (iPrBitsCtl, pBitMap, pPortRect, lControl); )== )PROCEDURE PrBits ( pBitMap: Ptr; --QuickDraw bitmap >pPortRect: TPRect; --a portrect. use bounds for whole bitmap >lControl: LongInt ); --0=>Screen resolution/Portrait %This dumps a bitmap/portrect to the printer. %lControl is a device dep param; use 0 for screen res/portrait/etc. %Each different printer will use lControl parameter differently. %Thus PrCtlCall (iPrBitsCtl, @MyPort^.ScreenBits, @MyPort^.PortRect.Bounds,0) %performs a screen dump of just my port's data. %Two special control calls are included in the driver for Screen printing from the %key board: ,PrCtlCall (iPrEvtCtl, lPrEvtAll, 0, 0); Prints the screen ,PrCtlCall (iPrEvtCtl, lPrEvtTop, 0, 0); Prints the top folder %These are handled by the system for key board access but can be called by anyone %at any time. They can be very cheap printing for ornaments, for example! %Another useful call is used for sending raw data to the printer: )PrCtlCall (iPrIOCtl, pBuf, lBufCount, pIdleProc); } {These .Print driver calls are only available in the PrScreen module.-- } PROCEDURE PrPurge; PROCEDURE PrNoPurge; FUNCTION PrDrvrDCE: Handle; FUNCTION PrDrvrVers: Integer; { --Semi private stuff-- } (* The dialog customizing stuff: FUNCTION PrStlInit ( hPrint: THPrint ): TPPrDlg; FUNCTION PrJobInit ( hPrint: THPrint ): TPPrDlg; FUNCTION PrDlgMain ( hPrint: THPrint; pDlgInit: ProcPtr ): Boolean; *) PROCEDURE PrCfgDialog; PROCEDURE PrHack ( lParam1, lParam2, lParam3: TLong ); { ---------------------------------------------------------------------- } {Misc Utilities} {File Utilities: IO68K} {FUNCTION PrStr80Ptr (sName:TStr80): TPStr80;} FUNCTION PrCreateFile(sName:TStr80; iVol: Integer; bVersion: SignedByte): Integer; FUNCTION PrDeleteFile(sName:TStr80; iVol: Integer; bVersion: SignedByte): Integer; FUNCTION PrOpenFile (sName:TStr80; iVol: Integer; bVersion: SignedByte; 4fTrunc: Boolean; pBuf: Ptr; VAR iRefNum: Integer): Integer; FUNCTION PrWriteBlk (iRefNum, iMode:Integer; lPos:LongInt; p:Ptr; lBytes:LongInt ):Integer; FUNCTION PrReadBlk (iRefNum, iMode:Integer; lPos:LongInt; p:Ptr; lBytes:LongInt ):Integer; FUNCTION PrCloseFile(iRefNum: Integer): Integer; {Scc utilitys: Scc68k} FUNCTION PrSCCInit (iBaudEtc: Integer; lHndShk: LongInt): Integer; FUNCTION PrBlockOut (pIdleProc: ProcPtr; pData: Ptr; lBytes: LongInt): Integer; (*FUNCTION PrIOCheck (lTimeOut: LongInt; pData: Ptr; lBytes: LongInt): Integer;*) PROCEDURE XPrIdle (pIdleProc: ProcPtr); PROCEDURE PrAbortCheck; {Other Utilities: PrMacMisc} FUNCTION lPrMul (i1, i0: Integer): LongInt; FUNCTION lPrDiv (lTop: LongInt; iBot: Integer): LongInt; {Performance tool} Procedure SpyInit; Procedure SpyClose; Procedure Spy (iBucket: Integer); { ---------------------------------------------------------------------- } IMPLEMENTATION MEMTYPES { Copyright 1983 Apple Computer Inc. } {types which are basic to all Macintosh applications} {RS Apr 30 84 created by taking types from quickdraw and toolintf} INTERFACE TYPE "SignedByte = -128..127; { any byte in memory } "Byte = 0..255; { Unsigned byte for fontmgr } "Ptr = ^SignedByte; { blind pointer } "Handle = ^Ptr; { pointer to a master pointer } "ProcPtr = Ptr; { pointer to a procedure } "Fixed = LongInt; "Str255 = String[255]; "StringPtr = ^Str255; "StringHandle = ^StringPtr; IMPLEMENTATION END. { of UNIT } OSINTF l { Copyright 1983 by Apple Computer, Inc. All Rights Reserved. } { Created 23 Nov 83 by Rony Sebok from heapZone.text and osMisc.text.} { Modification history: } { 12 Apr 84 JTC Cleaned up a la Hacker. } Interface USES {$U-} %{$U obj/MemTypes } MemTypes, %{$U obj/QuickDraw } QuickDraw; CONST "{for Event Manager} "everyEvent = -1; "NullEvent = 0; "mouseDown = 1; "mouseUp = 2; "keyDown = 3; "keyUp = 4; "autoKey = 5; "updateEvt = 6; "diskEvt = 7; "activateEvt = 8; "driverEvt = 11; "app1Evt = 12; "app2Evt = 13; "app3Evt = 14; "app4Evt = 15; "{ event mask equates } "mDownMask = 2; "mUpMask = 4; "keyDownMask = 8; "keyUpMask = 16; "autoKeyMask = 32; "updateMask = 64; "diskMask = 128; "activMask = 256; "driverMask = 2048; "app1Mask = 4096; "app2Mask = 8192; "app3Mask = 16384; "app4Mask = -32768; "{to decipher event message for keyDown events} "charCodeMask = $000000FF; "keyCodeMask = $0000FF00; "{ modifiers } "optionKey= 2048; { Bit 3 of high byte } "alphaLock= 1024; { Bit 2 } "ShiftKey= 512; { Bit 1 } "CmdKey= 256; { Bit 0 } "BtnState= 128; { Bit 7 of low byte is mouse button state } "activeFlag = 1; { bit 0 of modifiers for activate event } "changeFlag = 2; { bit 1 of modifiers for activate event } {for Memory Manager} "MemFullErr = -108; { Not enough room in heap zone } "NilHandleErr = -109; { Master Pointer was NIL in HandleZone or other } "MemWZErr = -111; { WhichZone failed (applied to free block) } "MemPurErr = -112; { trying to purge a locked or non-purgeable block } "NoErr = 0; { All is well } "{file system error codes} "DirFulErr = -33; { Directory full} "DskFulErr = -34; { disk full} "NSVErr = -35; { no such volume} "IOErr = -36; { I/O error (bummers)} "BdNamErr = -37; { there may be no bad names in the final system!} "FNOpnErr = -38; { File not open} "EOFErr = -39; { End of file} "PosErr = -40; { tried to position to before start of file (r/w)} "MFulErr = -41; { memory full(open) or file won't fit (load)} "TMFOErr = -42; { too many files open} "FNFErr = -43; { File not found} "WPrErr = -44; { diskette is write protected} "FLckdErr = -45; { file is locked} "VLckdErr = -46; { volume is locked} "FBsyErr = -47; { File is busy (delete)} "DupFNErr = -48; { duplicate filename (rename)} "OpWrErr = -49; { file already open with with write permission} "ParamErr = -50; { error in user parameter list} "RFNumErr = -51; { refnum error} "GFPErr = -52; { get file position error} "VolOffLinErr = -53; { volume not on line error (was Ejected)} "PermErr = -54; { permissions error (on file open)} "VolOnLinErr = -55; { drive volume already on-line at MountVol} "NSDrvErr = -56; { no such drive (tried to mount a bad drive num)} "NoMacDskErr = -57; { not a mac diskette (sig bytes are wrong)} "ExtFSErr = -58; { volume in question belongs to an external fs} "FSRnErr = -59; { file system rename error:} >{ during rename the old entry was deleted } >{ but could not be restored . . .} "BadMDBErr = -60; { bad master directory block} "WrPermErr = -61; { write permissions error} "firstDskErr = -84; {first of the range of low-level disk errors} "lastDskErr = -64; {last of the range of low-level disk errors} "MaxSize = $800000; { Max data block size is 512K bytes } "{finder constants} "fHasBundle = 32; "fInvisible = 64; "fTrash = -3; "fDesktop = -2; "fDisk = 0; "{io constants} "{ioPosMode values} "fsAtMark = 0; "fsFromStart = 1; "fsFromLEOF = 2; "fsFromMark = 3; "{ioPermission values} "fsCurPerm = 0; "fsRdPerm = 1; "fsWrPerm = 2; "fsRdWrPerm = 3; "{refNums fro the serial ports} "AinRefNum = -6; {serial port A input} "AoutRefNum = -7; {serial port A output} "BinRefNum = -8; {serial port B input} "BoutRefNum = -9; {serial port B output} "{baud rate constants} "baud300 = 380; "baud600 = 189; "baud1200 = 94; "baud1800 = 62; "baud2400 = 46; "baud3600 = 30; "baud4800 = 22; "baud7200 = 14; "baud9600 = 10; "baud19200 = 4; "baud57600 = 0; "{SCC channel configuration word} "{driver reset information masks} "stop10 = 16384; "stop15 = -32768; "stop20 = -16384; "noParity = 8192; "oddParity = 4096; "evenParity = 12288; "data5 = 0; "data6 = 2048; "data7 = 1024; "data8 = 3072; "{serial driver error masks} "swOverrunErr = 0; "parityErr = 16; "hwOverrunErr = 32; "framingErr = 64; "{serial driver message constant} "xOffWasSent = $80; "{for application parameter} "{constants for message returned by the finder on launch} "appLoad = 0; "appPrint = 1; #{masks used for writing and reading from sytem parameter RAM} #everyParam = 1048575; #validMask = 1; #portAMask = 48; #portBMask = 192; #alarmMask = 3840; #fontMask = 12288; #kbdMask = 16384; #printMask = 32768; #volCtlmask = 65536; #clikCaretMask = 131072; #miscMask = 524288; ${for sound driver} $SWmode = -1; $FTmode = 1; $FFmode = 0; TYPE "{for Event Manager} "EventRecord = RECORD 2what: INTEGER; 2message: LongInt; 2when: LongInt; 2where: Point; 2modifiers: INTEGER; 1END; "Zone = Record 2BkLim: Ptr; 2PurgePtr: Ptr; 2HFstFree: Ptr; 2ZCBFree: LongInt; 2GZProc: ProcPtr; 2MoreMast: Integer; 2Flags: Integer; 2CntRel: Integer; 2MaxRel: Integer; 2CntNRel: Integer; 2MaxNRel: Integer; 2CntEmpty: Integer; 2CntHandles: Integer; 2MinCBFree: LongInt; 2PurgeProc: ProcPtr; 2SparePtr: Ptr; { reserved for future } 2AllocPtr: Ptr; 2HeapData: Integer; /End; "THz = ^Zone; { pointer to the start of a heap zone } "Size = LongInt; { size of a block in bytes } "OsErr = Integer; { error code } "QElemPtr = ^QElem; {ptr to generic queue element} {Vertical Blanking Control Block Queue Element} VBLTask = RECORD $qLink: QElemPtr; {link to next element} $qType: INTEGER; {unique ID for validity check} $vblAddr: ProcPtr; {address of service routine} $vblCount: INTEGER; {count field for timeout} $vblPhase: INTEGER; {phase to allow synchronization} "END; {VBLCntrlBlk} {VBLQElPtr = ^VBLTask;} evQEl = RECORD $qLink: QElemPtr; $qType: INTEGER; $evtQwhat: INTEGER; {this part is identical to the EventRecord as...} $evtQmessage:LongInt; {defined in ToolIntf} $evtQwhen: LongInt; $evtQwhere: Point; $evtQmodifiers: INTEGER; "END; "{drive queue elements} DrvQEl = RECORD $qLink: QElemPtr; $qType: INTEGER; $dQDrive: INTEGER; $dQRefNum: INTEGER; {ref num of the drvr which handles this drive} $dQFSID: INTEGER; {id of file system which handles this drive} $dQDrvSize: INTEGER; {size of drive in 512-byte blocks -- not for drvs 1&2} "END; DrvQElPtr = ^DrvQEl; "ParamBlkType = (IOParam,FileParam,VolumeParam,CntrlParam); "OsType = PACKED ARRAY[1..4] OF CHAR; {same as rsrc mgr's Restype} "FInfo = RECORD {record of finder info} ,fdType: OsType; {the type of the file} ,fdCreator: OsType; {file's creator} ,fdFlags: INTEGER; {flags ex. hasbundle,invisible,locked, etc.} ,fdLocation: Point; {file's location in folder} ,fdFldr: INTEGER; {folder containing file} *END; {FInfo} "ParamBlockRec = RECORD ({12 byte header used by the file and IO system} (qLink: QElemPtr; {queue link in header} (qType: INTEGER; {type byte for safety check} (ioTrap: INTEGER; {FS: the Trap} (ioCmdAddr: Ptr; {FS: address to dispatch to} ({common header to all variants} (ioCompletion: ProcPtr; {completion routine addr (0 for synch calls)} (ioResult: OsErr; {result code} (ioNamePtr: StringPtr; {ptr to Vol:FileName string} (ioVRefNum: INTEGER; {volume refnum (DrvNum for Eject and MountVol)} ({different components for the different type of parameter blocks} (CASE ParamBlkType OF (ioParam: *(ioRefNum: INTEGER; {refNum for I/O operation} +ioVersNum: SignedByte; {version number} +ioPermssn: SignedByte; {Open: permissions (byte)} +ioMisc: Ptr; {Rename: new name} D{GetEOF,SetEOF: logical end of file} D{Open: optional ptr to buffer} D{SetFileType: new type} +ioBuffer: Ptr; {data buffer Ptr} +ioReqCount: LongInt; {requested byte count} +ioActCount: LongInt; {actual byte count completed} +ioPosMode: INTEGER; {initial file positioning} +ioPosOffset: LongInt); {file position offset} (FileParam: *(ioFRefNum: INTEGER; {reference number} +ioFVersNum: SignedByte; {version number} +filler1: SignedByte; +ioFDirIndex: INTEGER; {GetFileInfo directory index} +ioFlAttrib: SignedByte; {GetFileInfo: in-use bit=7, lock bit=0} +ioFlVersNum: SignedByte; {file version number} +ioFlFndrInfo: FInfo; {user info} +ioFlNum: LongInt; {GetFileInfo: file number} +ioFlStBlk: INTEGER; {start file block (0 if none)} +ioFlLgLen: LongInt; {logical length (EOF)} +ioFlPyLen: LongInt; {physical lenght} +ioFlRStBlk: INTEGER; {start block rsrc fork} +ioFlRLgLen: LongInt; {file logical length rsrc fork} +ioFlRPyLen: LongInt; {file physical length rsrc fork} +ioFlCrDat: LongInt; {file creation date & time (32 bits in secs)} +ioFlMdDat: LongInt); {last modified date and time} )VolumeParam: +(filler2: LongInt; ,ioVolIndex: INTEGER; {volume index number} ,ioVCrDate: LongInt; {creation date and time} ,ioVLsBkUp: LongInt; {last backup date and time} ,ioVAtrb: INTEGER; {volume attrib} ,ioVNmFls: INTEGER; {number of files in directory} ,ioVDirSt: INTEGER; {start block of file directory} ,ioVBlLn: INTEGER; {GetVolInfo: length of dir in blocks} ,ioVNmAlBlks: INTEGER; {GetVolInfo: num blks (of alloc size)} ,ioVAlBlkSiz: LongInt; {GetVolInfo: alloc blk byte size} ,ioVClpSiz: LongInt; {GetVolInfo: bytes to allocate at a time} ,ioAlBlSt: INTEGER; {starting disk(512-byte) block in block map} ,ioVNxtFNum: LongInt; {GetVolInfo: next free file number} ,ioVFrBlk: INTEGER); {GetVolInfo: # free alloc blks for this vol} *CntrlParam: ,(filler3: INTEGER; {refNum for I/O operation} -CSCode: INTEGER; {word for control status code} -CSParam: Ptr); {operation-defined parameters} &END; {ParamBlockRec} "ParmBlkPtr = ^ParamBlockRec; {20 bytes of system parameter area} "SysParmType = RECORD *Valid: LongInt; {high byte = validation field ($A7)} @{low 3 bytes = odometer} *PortA: INTEGER; {port A configuration} *PortB: INTEGER; {port B configuration} *Alarm: LongInt; {alarm time} *Font: INTEGER; {default font id} *KbdPrint: INTEGER; {high byte = kbd repeat} D{high nibble = thresh in 4/60ths} D{low nibble = rates in 2/60ths} @{low byte = print stuff} *VolClik: INTEGER; {low 3 bits of high byte = volume control} @{high nibble of low byte = double time in 4/60ths} @{low nibble of low byte = caret blink time in 4/60ths} *Misc: INTEGER; {EEEC EEEE PSKB FFHH} D{E = extra} D{P = paranoia level} D{S = mouse scaling} D{K = key click} D{B = boot disk} D{F = menu flash} D{H = help level} %END; {SysParmType} "SysPPtr = ^SysParmType; {volume control block data structure} VCB = RECORD $qLink: QElemPtr; {link to next element} $qType: INTEGER; {not used} $vcbFlags: INTEGER; $vcbSigWord: INTEGER; $vcbCrDate: LongInt; $vcbLsBkUp: LongInt; $vcbAtrb: INTEGER; $vcbNmFls: INTEGER; $vcbDirSt: INTEGER; $vcbBlLn: INTEGER; $vcbNmBlks: INTEGER; $vcbAlBlkSiz: LongInt; $vcbClpSIz: LongInt; $vcbAlBlSt: INTEGER; $vcbNxtFNum: LongInt; $vcbFreeBks: INTEGER; $vcbVN: STRING[27]; $vcbDrvNum: INTEGER; $vcbDRefNum: INTEGER; $vcbFSId: INTEGER; $vcbVRefNum: INTEGER; $vcbMAdr: Ptr; $vcbBufAdr: Ptr; $vcbMLen: INTEGER; $vcbDirIndex: INTEGER; $vcbDirBlk: INTEGER; END; {general queue data structure} QHdr = RECORD $QFlags: INTEGER; {misc flags} $QHead: QElemPtr; {first elem} $QTail: QElemPtr; {last elem} "END; {QHdr} QHdrPtr = ^QHdr; {there are currently 4 types of queues: } { VType - queue of Vertical Blanking Control Blocks } { IOQType - queue of I/0 queue elements } { DrvType - queue of drivers } { EvType - queue of Event Records } { FSQType - queue of VCB elements } { TimerType no longer is used. DrvType replaces it here in enum type} QTypes = (dummyType,vType,ioQType,drvQType,evType,fsQType); QElem = RECORD (CASE QTypes OF (vType: *(vblQelem: VBLTask); {vertical blanking} (ioQType: *(ioQElem: ParamBlockRec); {I/O parameter block} (drvQType: *(drvQElem: DrvQEl); {drive} (evType: *(evQElem: EvQEl); {event} (fsQType: *(vcbQElem: VCB); {volume control block} "END; {QElem} {device control entry} DCtlEntry = RECORD /DCtlDriver: Ptr; {ptr to ROM or handle to RAM driver} /DCtlFlags: INTEGER; {flags} /DCtlQHdr: QHdr; {driver's i/o queue} /DCtlPosition: LongInt; {byte pos used by read and write calls} /DCtlStorage: Handle; {hndl to RAM drivers private storage} /DCtlRefNum: INTEGER; {driver's reference number} /DCtlCurTicks: LongInt; {long counter for timing system task calls} /DCtlWindow: Ptr; {ptr to driver's window if any} /DCtlDelay: INTEGER; {number of ticks btwn sysTask calls} /DCtlEMask: INTEGER; {desk acessory event mask} /DCtlMenu: INTEGER; {menu ID of menu associated with driver} -END; {DCtlEntry} DCtlPtr = ^DCtlEntry; DCtlHandle = ^DCtlPtr; "{for Serial Driver} SerShk = PACKED RECORD {handshake control fields} 2fXOn: Byte; {XON flow control enabled flag} 2fCTS: Byte; {CTS flow control enabled flag} 2xon: Char; {XOn character} 2xoff: Char; {XOff character} 2errs: Byte; {errors mask bits} 2evts: Byte; {event enable mask bits} 2fInX: Byte; {Input flow control enabled flag} 2null: Byte; {unused} 0END; "{parameter block structure for file and IO routines} SerStaRec = PACKED RECORD 5cumErrs: Byte; {cumulative errors report} 5XOFFSent: Byte; {XOff Sent flag} 5rdPend: Byte; {read pending flag} 5wrPend: Byte; {write pending flag} 5ctsHold: Byte; {CTS flow control hold flag} 5XOFFHold: Byte; {XOff flow control hold flag} 3End; "{for Sound Driver} "{for 4-tone sound generation} "Wave = PACKED ARRAY[0..255] OF Byte; "WavePtr = ^Wave; "FTSoundRec = RECORD 2duration: INTEGER; 2sound1Rate: LongInt; 2sound1Phase: LongInt; 2sound2Rate: LongInt; 2sound2Phase: LongInt; 2sound3Rate: LongInt; 2sound3Phase: LongInt; 2sound4Rate: LongInt; 2sound4Phase: LongInt; 2sound1Wave: WavePtr; 2sound2Wave: WavePtr; 2sound3Wave: WavePtr; 2sound4Wave: WavePtr; 0END; "FTSndRecPtr = ^FTSoundRec; "FTSynthRec = RECORD 1mode: INTEGER; 1sndRec: FTSndRecPtr; /END; "FTSynthPtr = ^FTSynthRec; "Tone = RECORD +count: INTEGER; +amplitude: INTEGER; +duration: INTEGER; )END; "Tones = ARRAY[0..5000] OF Tone; "SWSynthRec = RECORD 1mode: INTEGER; 1triplets: Tones; /END; "SWSynthPtr = ^SWSynthRec; "freeWave = PACKED ARRAY[0..30000] OF Byte; "FFSynthRec = RECORD 1mode: INTEGER; 1count: Fixed; 1waveBytes: freeWave; /END; "FFSynthPtr = ^FFSynthRec; {for date and time} DateTimeRec = RECORD 0Year, {1904,1905,...} 0Month, {1,...,12 corresponding to Jan,...,Dec} 0Day, {1,...31} 0Hour, {0,...,23} 0Minute, {0,...,59} 0Second, {0,...,59} 0DayOfWeek: INTEGER; {1,...,7 corresponding to Sun,...,Sat} .END; {DateTimeRec} {for application parameter} appFile = RECORD 1vRefNum: INTEGER; 1ftype: OsType; 1versNum: INTEGER; {versNum in high byte} 1fName: str255; /END; {appFile} {for RAM serial driver} SPortSel = (SPortA,SPortB); {for Event Manager} FUNCTION PostEvent(eventNum: INTEGER; eventMsg: LongInt): OsErr; PROCEDURE FlushEvents(whichMask,stopMask: INTEGER); PROCEDURE SetEventMask(theMask: INTEGER); FUNCTION OSEventAvail(mask: INTEGER; VAR theEvent: EventRecord): BOOLEAN; FUNCTION GetOSEvent(mask: INTEGER; VAR theEvent: EventRecord): BOOLEAN; {OS utilities} FUNCTION HandToHand(VAR theHndl: Handle): OsErr; FUNCTION PtrToXHand(srcPtr: Ptr; dstHndl: Handle; size: LongInt): OsErr; FUNCTION PtrToHand(srcPtr: Ptr; VAR dstHndl: Handle; size: LongInt): OsErr; FUNCTION HandAndHand(hand1,hand2: Handle): OsErr; FUNCTION PtrAndHand(ptr1: Ptr; hand2: Handle; size: LongInt): OsErr; {from HEAPZONE.TEXT} PROCEDURE SetApplBase(startPtr: Ptr); PROCEDURE InitApplZone; PROCEDURE InitZone(growProc: ProcPtr; 3moreMasters: Integer; 3limitPtr,startPtr : Ptr); FUNCTION GetZone: THz; PROCEDURE SetZone(hz: THz); FUNCTION ApplicZone: THz; FUNCTION SystemZone: THz; FUNCTION CompactMem(cbNeeded: Size): Size; PROCEDURE PurgeMem(cbNeeded: Size); FUNCTION FreeMem: LongInt; PROCEDURE ResrvMem(cbNeeded: Size); FUNCTION MaxMem(Var grow: Size): Size; FUNCTION TopMem: Ptr; PROCEDURE SetGrowZone(growZone: ProcPtr); PROCEDURE SetApplLimit(zoneLimit: Ptr); FUNCTION NewPtr(byteCount: Size): Ptr; PROCEDURE DisposPtr(p: Ptr); FUNCTION GetPtrSize(p: Ptr): Size; PROCEDURE SetPtrSize(p: Ptr; newSize: Size); FUNCTION PtrZone(p: Ptr): THz; FUNCTION NewHandle(byteCount: Size): Handle; PROCEDURE DisposHandle(h: Handle); FUNCTION GetHandleSize(h: Handle): Size; PROCEDURE SetHandleSize(h: Handle; newSize: Size); FUNCTION HandleZone(h: Handle): THz; FUNCTION RecoverHandle(p: Ptr): Handle; PROCEDURE EmptyHandle(h: Handle); PROCEDURE ReAllocHandle(h: Handle; byteCount: Size); PROCEDURE HLock(h: Handle); PROCEDURE HUnLock(h: Handle); PROCEDURE HPurge(h: Handle); PROCEDURE HNoPurge(h: Handle); PROCEDURE MoreMasters; PROCEDURE BlockMove(srcPtr, destPtr: Ptr; byteCount: Size); FUNCTION MemError: OsErr; FUNCTION GZCritical: Boolean; FUNCTION GZSaveHnd: Handle; {interface for core routines pertaining to the vertical retrace mgr} {routines defined in VBLCORE.TEXT} FUNCTION VInstall(VBLTaskPtr: QElemPtr): OsErr; FUNCTION VRemove(VBLTaskPtr: QElemPtr): OsErr; {interface for Operating System Dispatcher} {routines defined in DISPATCH.TEXT} FUNCTION GetTrapAddress(trapNum: INTEGER): LongInt; PROCEDURE SetTrapAddress(trapAddr: LongInt; trapNum: INTEGER); {interface for utility core routines (defined in sysutil)} FUNCTION ReadParam(SysParams: SysPPtr; paramMask:LongInt):OsErr; FUNCTION WriteParam(SysParams: SysPPtr; paramMask: LongInt):OsErr; FUNCTION SetDateTime(time: LongInt):OsErr; FUNCTION ReadDateTime(VAR time: LongInt):OsErr; PROCEDURE SetTime(d: DateTimeRec); PROCEDURE GetTime(VAR d: DateTimeRec); PROCEDURE Date2Secs(d: DateTimeRec; VAR s: LongInt); PROCEDUR Secs2Date(s: LongInt; VAR d: DateTimeRec); PROCEDURE Delay(numTicks: LongInt; VAR finalTicks: LongInt); FUNCTION EqualString(str1,str2: Str255; caseSens,diacSens: BOOLEAN):BOOLEAN; PROCEDURE UprString(VAR theString: Str255; diacSens: BOOLEAN); FUNCTION InitUtil: OsErr; PROCEDURE UnLoadSeg(routineAddr: Ptr); INLINE $A9F1; PROCEDURE ExitToShell; INLINE $A9F4; PROCEDURE GetAppParms(VAR apName: str255; VAR apRefNum: INTEGER; 6VAR apParam: Handle); INLINE $A9F5; PROCEDURE CountAppFiles(VAR message: INTEGER; VAR count: INTEGER); PROCEDURE GetAppFiles(index: INTEGER; VAR theFile: AppFile); PROCEDURE ClrAppFiles(index: INTEGER); {queue routines - part of Macintosh core Utility routines} PROCEDURE InitQueue; PROCEDURE Enqueue(qElement: QElemPtr; qHeader: QHdrPtr); FUNCTION Dequeue(qElement: QElemPtr; qHeader: QHdrPtr): OsErr; FUNCTION GetFSQHdr: QHdrPtr; FUNCTION GetDrvQHdr: QHdrPtr; FUNCTION GetVCBQHdr: QHdrPtr; FUNCTION GetVBLQHdr: QHdrPtr; FUNCTION GetEvQHdr: QHdrPtr; FUNCTION GetDCtlEntry(refNum: INTEGER): DCtlHandle; {from MACIO.TEXT} FUNCTION PBOpen(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBClose(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBRead(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBWrite(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBControl(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBStatus(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBKillIO(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBGetVInfo(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBGetVol(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetVol(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBEject(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBOffLine(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBFlushVol(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBCreate(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBDelete(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBOpenRF(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBRename(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBGetFInfo(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetFInfo(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetFLock(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBRstFLock(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetFType(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBAllocate(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBGetEOF(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetEOF(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBGetFPos(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBSetFPos(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBFlushFile(paramBlock: ParmBlkPtr; aSync: BOOLEAN): OsErr; FUNCTION PBMountVol(paramBlock: ParmBlkPtr): OsErr; FUNCTION PBUnMountVol(paramBlock: ParmBlkPtr): OsErr; PROCEDURE AddDrive(drvrRefNum: INTEGER; drvNum: INTEGER; QEl: drvQElPtr); FUNCTION FSOpen(fileName: Str255; vRefNum: INTEGER; VAR refNum: INTEGER): OsErr; FUNCTION FSClose(refNum: INTEGER): OsErr; FUNCTION FSRead(refNum: INTEGER; VAR count: LongInt; buffPtr: Ptr): OsErr; FUNCTION FSWrite(refNum: INTEGER; VAR count: LongInt; buffPtr: Ptr): OsErr; FUNCTION Control(refNum: INTEGER; csCode: INTEGER; 4csParam: Ptr): OsErr; FUNCTION Status(refNum: INTEGER; csCode: INTEGER; 3csParam: Ptr): OsErr; FUNCTION KillIO(refNum: INTEGER): OsErr; {-volume level calls-} FUNCTION GetVInfo(drvNum: INTEGER; volName: StringPtr; VAR vRefNum: INTEGER; 1VAR FreeBytes: LongInt): OsErr; FUNCTION GetFInfo(fileName: Str255; vRefNum: INTEGER; 2VAR FndrInfo: FInfo):OsErr; FUNCTION GetVol(volName: StringPtr; VAR vRefNum: INTEGER):OsErr; FUNCTION SetVol(volName: StringPtr; vRefNum: INTEGER): OsErr; FUNCTION UnMountVol(volName: StringPtr; vRefNum: INTEGER):OsErr; FUNCTION Eject(volName: StringPtr; vRefNum: INTEGER): OsErr; FUNCTION FlushVol(volName: StringPtr; vRefNum: INTEGER):OsErr; {-file level calls for unopened files-} FUNCTION Create(fileName: Str255; vRefNum: INTEGER; creator: OSType; 0fileType: OSType):OsErr; FUNCTION FSDelete(fileName: Str255; vRefNum: INTEGER):OsErr; FUNCTION OpenRF(fileName: Str255; vRefNum: INTEGER; 0VAR refNum: INTEGER): OsErr; FUNCTION Rename(oldName: Str255; vRefNum: INTEGER; 0newName: Str255):OsErr; FUNCTION SetFInfo(fileName: Str255; vRefNum: INTEGER; 2FndrInfo: FInfo):OsErr; FUNCTION SetFLock(fileName: Str255; vRefNum: INTEGER):OsErr; FUNCTION RstFLock(fileName: Str255; vRefNum: INTEGER):OsErr; FUNCTION SetFType(fileName: Str255; oldVers: SignedByte; vRefNum: INTEGER; 4newVers: SignedByte):OsErr; {-file level calls for opened files-} FUNCTION Allocate(refNum: INTEGER; VAR count: LongInt):OsErr; FUNCTION GetEOF(refNum: INTEGER; VAR LogEOF: LongInt):OsErr; FUNCTION SetEOF(refNum: INTEGER; LogEOF: LongInt):OsErr; FUNCTION GetFPos(refNum: INTEGER; VAR filePos: LongInt):OsErr; FUNCTION SetFPos(refNum: INTEGER; posMode: INTEGER; posOff: LongInt):OsErr; FUNCTION FlushFile(refNum: INTEGER):OsErr; {Serial Driver Interface} FUNCTION DrvrInstall(name: Str255; drvrRefNum: INTEGER): OsErr; FUNCTION DrvrRemove(drvrRefNum: INTEGER): OsErr; FUNCTION OpenDriver(name: Str255): INTEGER; PROCEDURE CloseDriver(refNum: Integer); FUNCTION SerReset(refNum: INTEGER; serConfig: INTEGER): OSErr; FUNCTION SerSetBuf(refNum: INTEGER; serBPtr: Ptr; serBLen: INTEGER): OSErr; FUNCTION SerHShake(refNum: INTEGER; flags: SerShk): OSErr; FUNCTION SerSetBrk(refNum: INTEGER): OSErr; FUNCTION SerClrBrk(refNum: INTEGER): OSErr; FUNCTION SerGetBuf(refNum: INTEGER; VAR count: LongInt): OSErr; FUNCTION SerStatus(refNum: INTEGER; VAR serSta: SerStaRec): OSErr; FUNCTION RamSDOpen(whichPort: SPortSel; rsrcType: OsType; rsrcID: INTEGER): OSErr; PROCEDURE RamSDClose(whichPort: SPortSel); {for Sound Driver} PROCEDURE SysBeep(duration: INTEGER); PROCEDURE SetSoundVol(level: INTEGER); PROCEDURE GetSoundVol(VAR level: INTEGER); PROCEDURE StartSound(synthRec: Ptr; numBytes: LongInt; CompletionRtn: ProcPtr); PROCEDURE StopSound; FUNCTION SoundDone: BOOLEAN; {because of a bug with the way immediate control calls are handled SWSetLevel} {should not be used. Use SetSoundVol instead} {PROCEDURE SWSetLevel(ampl: INTEGER);} {for the system error handler} PROCEDURE SysError(errorCode: INTEGER); IMPLEMENTATION {for Event Manager} SETAPPLB SETAPPLBSETAPPLBSAVERETASAVERETA"_ _-N INITAPPL INITAPPLINITAPPLSAVE SAVE ,NINITZONE INITZONEINITZONESAVERETASAVERETA "_ ONGETZONE GETZONE GETZONE SAVE SAVE /HN SETZONE SETZONE SETZONE SAVERETASAVERETA"_ _N APPLICZO APPLICZOAPPLICZOSAVE0 SAVE0 /xN SYSTEMZO SYSTEMZOSYSTEMZOSAVE0 SAVE0 /xN COMPACTM ERRORCODERRORCOD SAVE SAVE SAVE0RETSAVE0RET COMPACTMCOMPACTMSAVERETASAVERETASAVE0 SAVE0 $"_ L.`p/ C2Nup`PURGEMEM PURGEMEMPURGEMEMSAVERETASAVERETA"_ MN FREEMEM FREEMEM FREEMEM SAVE0 SAVE0 /@N RESRVMEM RESRVMEMRESRVMEMSAVERETASAVERETA"_ @N MAXMEM MAXMEM MAXMEM SAVE0RETSAVE0RET"_" _ .NTOPMEM TOPMEM TOPMEM SAVE0 SAVE0 /xN SETGROWZ SETGROWZSETGROWZSAVERETASAVERETA"_ _KN SETAPPLL SETAPPLLSETAPPLLSAVERETASAVERETA"_ _-N NEWPTR NEWPTR NEWPTR SAVERETASAVERETA "_ .N DISPOSPT DISPOSPTDISPOSPTSAVERETASAVERETA"_ _N GETPTRSI GETPTRSIGETPTRSISAVE0RETSAVE0RETSAVERETASAVERETA"_ _!.jBNNSETPTRSI SETPTRSISETPTRSISAVERETASAVERETA "_  _ N PTRZONE PTRZONE PTRZONE SAVERETASAVERETA "_ _H.N NEWHANDL NEWHANDLNEWHANDLSAVERETASAVERETA "_ ".N DISPOSHA DISPOSHADISPOSHASAVERETASAVERETA"_ _#N GETHANDL GETHANDLGETHANDLSAVE0RETSAVE0RETSAVERETASAVERETA"_ _%.jBNNSETHANDL SETHANDLSETHANDLSAVERETASAVERETA "_  _$N HANDLEZO HANDLEZOHANDLEZOSAVERETASAVERETA "_ _&.N RECOVERH RECOVERHRECOVERHSAVE0RETSAVE0RET "_ _(.N EMPTYHAN EMPTYHANEMPTYHANSAVERETASAVERETA"_ _+N REALLOCH REALLOCHREALLOCHSAVERETASAVERETA "_  _'N HLOCK HLOCK HLOCK SAVERETASAVERETA"_ _)N HUNLOCK HUNLOCK HUNLOCK SAVERETASAVERETA"_ _*N HPURGE HPURGE HPURGE SAVERETASAVERETA"_ _IN HNOPURGE HNOPURGEHNOPURGESAVERETASAVERETA"_ _JN MOREMAST MOREMASTMOREMASTSAVE SAVE 6NBLOCKMOV BLOCKMOVBLOCKMOVSAVERETASAVERETA" "_ _."ANMEMERROR MEMERRORMEMERRORERRORCODERRORCOD?xNuGZSAVEHN GZSAVEHNGZSAVEHN/x(NuGZCRITIC GZCRITICGZCRITIC"_BW 80g(f>NсVINSTALL VINSTALLVINSTALL"_ _/ 3?@NuVREMOVE VREMOVE VREMOVE "_ _/ 4?@NuDRVRINST DRVRINSTDRVRINST0/ o= _\O>NЁDRVRREMO DRVRREMODRVRREMO0/> _TO>NЁOPENDRIV OPENDRIVOPENDRIV6 opBgQ/HB/ Of0/2?@.Nup`.CLOSEDRI CLOSEDRICLOSEDRI"0/?@ O _TONЁSERRESET SERRESETSERRESET0NVA1n 1|1n=@ N^"_XONс(SERSETBU SERSETBUSERSETBU6NVA1n1| !n 1n =@N^"_PONс.SERHSHAK SERHSHAKSERHSHAK6NVA1n 1| "n!Y!Q =@N^"_\ONс.SERSETBR SERSETBRSERSETBRSETCLR SETCLR ,0< NVA1n1@=@ N^"_TONс$SERCLRBR SERCLRBRSERCLRBRSETCLR SETCLR 0< NSERGETBU SERGETBUSERGETBU2NVA1n 1|=@"n"N^"_\ONс*SERSTATU SERSTATUSERSTATU6NVA1n 1|=@"n"2 N^"_\ONс.RAMSDOPE RAMSDOPERAMSDOPERAMSDCLORAMSDCLOڅNVH?8Bn(:f YO/. ?.&g&CA &z&SA.a a8fL"p.Jg E0:tr0` E0:dBR@D@@ xv"p"Q$$ ԁ"X@QtAJ.gC`C !IBhB(fBAQLN^ _PON=|`NVH?8A.avJg:g^A0:`: gNA0:"xvR@D@@$q$R$X@QaR$Ip.ACJgIBJf z#ABLN^ _TONJgCf`C\1Y1QNu/ B@EAJg ICR`ItC4PJ@(_Nu.AIn.AOut.BIn.BOutREADPARA READPARAREADPARA"_  _/ 7?@NuGETTRAPA GETTRAPAGETTRAPA"_0/ F/HNuSETTRAPA SETTRAPASETTRAPA"_0 _/ GNu WRITEPAR WRITEPARWRITEPAR"_  _/ 8?@NuREADDATE READDATEREADDATE"_ _/ 9?@NuSETDATET SETDATETSETDATET _ /:?@NuSETTIME SETTIME SETTIME  oǠ:LNЁGETTIME GETTIME GETTIME p o9 .NuDATE2SEC DATE2SECDATE2SEC oL ANЁSECS2DAT SECS2DATSECS2DATL/ Nu DELAY DELAY DELAY  "_ _/;"NuEQUALSTR EQUALSTREQUALSTRPNV n"n pH@J.gJ. g<`<` J. g<`< @N^ _ NЁHUPRSTRIN UPRSTRINUPRSTRIN "_ _p/ JgT`TNuINITUTIL INITUTILINITUTIL??@NuINITQUEU INITQUEUINITQUEU _"_NЁENQUEUE ENQUEUE ENQUEUE "o oo _PONЁDEQUEUE DEQUEUE DEQUEUE "o on?@ _PONЁGETFSQHD GETFSQHDGETFSQHD/|`Nu GETDRVQH GETDRVQHGETDRVQH/|Nu GETVCBQH GETVCBQHGETVCBQH/|VNu GETVBLQH GETVBLQHGETVBLQH/|`Nu GETEVQHD GETEVQHDGETEVQHD/|JNu GETDCTLE GETDCTLEGETDCTLE,NVA1n1|-h N^ _TONЁ$PBOPEN PBOPEN PBOPEN "_0 _f`>NсPBCLOSE PBCLOSE PBCLOSE "_0 _f`>NсPBREAD PBREAD PBREAD "_0 _f`>NсPBWRITE PBWRITE PBWRITE "_0 _f`>NсPBCONTRO PBCONTROPBCONTRO"_0 _f`>NсPBSTATUS PBSTATUSPBSTATUS"_0 _f`>NсPBKILLIO PBKILLIOPBKILLIO"_0 _f`>NсPBGETVIN PBGETVINPBGETVIN"_0 _f`>NсPBGETVOL PBGETVOLPBGETVOL"_0 _f`>NсPBSETVOL PBSETVOLPBSETVOL"_0 _f`>NсPBEJECT PBEJECT PBEJECT "_0 _f`>NсPBOFFLIN PBOFFLINPBOFFLIN"_0 _f5`5>NсPBFLUSHV PBFLUSHVPBFLUSHV"_0 _f`>NсPBCREATE PBCREATEPBCREATE"_0 _f`>NсPBDELETE PBDELETEPBDELETE"_0 _f ` >NсPBOPENRF PBOPENRFPBOPENRF"_0 _f ` >NсPBRENAME PBRENAMEPBRENAME"_0 _f ` >NсPBGETFIN PBGETFINPBGETFIN"_0 _f ` >NсPBSETFIN PBSETFINPBSETFIN"_0 _f ` >NсPBSETFLO PBSETFLOPBSETFLO"_0 _fA`A>NсPBRSTFLO PBRSTFLOPBRSTFLO"_0 _fB`B>NсPBSETFTY PBSETFTYPBSETFTY"_0 _fC`C>NсPBALLOCA PBALLOCAPBALLOCA"_0 _f`>NсPBGETEOF PBGETEOFPBGETEOF"_0 _f`>NсPBSETEOF PBSETEOFPBSETEOF"_0 _f`>NсPBGETFPO PBGETFPOPBGETFPO"_0 _f`>NсPBSETFPO PBSETFPOPBSETFPO"_0 _fD`D>NсPBFLUSHF PBFLUSHFPBFLUSHF"_0 _fE`E>NсPBMOUNTV PBMOUNTVPBMOUNTV"_ _>Nс PBUNMOUN PBUNMOUNPBUNMOUN"_ _>Nс ADDDRIVE ADDDRIVEADDDRIVE"_ _0H@0NNсFSOPEN FSOPEN FSOPEN BNVA!n1n B(B(B"n2=@N^ _ NЁ:FSCLOSE FSCLOSE FSCLOSE $NVA1n=@ N^ _TNЁFSREAD FSREAD FSREAD FSWRITE FSWRITE TQ`PNVA!n 1n"n !Q$Bh,B.Jf`=@"n "(N^"_ NсLCONTROL CONTROL CONTROL @NVA1n1n JgC np.AΠ=@N^"_PNс8STATUS STATUS STATUS 6NVA1n1n =@A"np.N^"_PNс.KILLIO KILLIO KILLIO $NVA1n=@ N^"_TNсGETVINFO GETVINFOGETVINFOPNVA!n1nBh=@"n 2 (0>"n"N^"_NсHGETFINFO GETFINFOGETFINFODNVA!n1n B(Bh =@A "n0<.N^"_ Nс<GETVOL GETVOL GETVOL ,NVA!n =@"n2N^"_PNс$SETVOL SETVOL SETVOL *NVA!n 1n=@N^"_\Nс"UNMOUNTV UNMOUNTVUNMOUNTV*NVA1n!n =@N^"_\Nс"EJECT EJECT EJECT *NVA1n!n =@N^"_\Nс"FLUSHVOL FLUSHVOLFLUSHVOL*NVA1n!n =@N^"_\Nс"CREATE CREATE CREATE LNVA!n1nB(J@fBh C "" =@N^"_NсDFSDELETE FSDELETEFSDELETE.NVA!n 1nB( =@N^"_\Nс&OPENRF OPENRF OPENRF :NVA!n1n B( =@"n2N^"_ Nс2RENAME RENAME RENAME 8NVA!n1n B(!n =@N^"_ Nс0SETFINFO SETFINFOSETFINFOJNVA!n1n B(Bh C n0<.A =@N^"_ NсBSETFLOCK SETFLOCKSETFLOCK.NVA!n 1nB(A=@N^"_\Nс&RSTFLOCK RSTFLOCKRSTFLOCK.NVA!n 1nB(B=@N^"_\Nс&SETFTYPE SETFTYPESETFTYPE:NVA!n1n n nC=@N^"_ Nс2ALLOCATE ALLOCATEALLOCATE0NVA"n!Q$1n =@"(N^"_\Nс(GETEOF GETEOF GETEOF ,NVA1n =@"n"N^"_\Nс$SETEOF SETEOF SETEOF *NVA1n !n=@N^"_\Nс"GETFPOS GETFPOS GETFPOS ,NVA1n =@"n".N^"_\Nс$SETFPOS SETFPOS SETFPOS 0NVA1n1n ,!n.D=@N^"_PNс(FLUSHFIL FLUSHFILFLUSHFIL$NVA1nE=@ N^"_TNсPOSTEVEN POSTEVENPOSTEVEN"_ 0_/ /?@NuFLUSHEVE FLUSHEVEFLUSHEVE"_ / 2Nu SETEVENT SETEVENTSETEVENT"_1DNсOSEVENTA OSEVENTAOSEVENTA$"_ _0/ 0J@gB/`|NuGETOSEVE GETOSEVEGETOSEVE$"_ _0/ 1J@gB/`|NuSETSOUND SETSOUNDSETSOUNDX _0/ 9@ g"@|9A@`@Ns@`H9݁݁NuPGETSOUND GETSOUNDGETSOUND _"_B`NЁ STARTSOU SNDQUEUESNDQUEUE$MYCOMPLEMYCOMPLESTARTSOUSTARTSOUMYPBLOCKMYPBLOCK0AJhg@"/f0 :f "C"gX z%"@ $J@fF"PAp .`80(n!o$!o 1|B "/g`!AC!I "_ NHAh"(g"ANCJgNER z% P"H%X%X$%X 5|@ g". zZ $` zP#AJBAC!I LNu(SOUNDDON SOUNDDONSOUNDDONMYPBLOCKMYPBLOCKABoJhfR/NuSTOPSOUN STOPSOUNSTOPSOUNSNDQUEUESNDQUEUE$MYPBLOCKMYPBLOCK4NVA1|ABh 8g @#ABN^Nu,SYSBEEP SYSBEEP SYSBEEP ?/ _TONЁ COUNTAPP COUNTAPPCOUNTAPP*"oBQ x %o P"o2"o2 _PONЁ"GETAPPFI GETAPPFIGETAPPFILH0"o B x %o&$PTJ2/ZnSAm Jp(@P@.SA`L _\ONЁDCLRAPPFI CLRAPPFICLRAPPFI> x %o( PTH2/XnSAmgp(@P@SA`B _TONЁ6SYSERROR SYSERRORSYSERROR _0ɩPACKINTF  { Jan 28, 1984. Rony Sebok Interface for Macintosh packages } { Modification history: } { 11 Apr 84 JTC Modified a la Rose. } { Copyright 1982 by Apple Computer, Inc. All Rights Reserved. } INTERFACE USES {$U-} ({$U obj/MemTypes } MemTypes, ({$U obj/QuickDraw } QuickDraw, ({$U Obj/OsIntf } OsIntf, ({$U obj/toolIntf } ToolIntf; CONST {constants for Standard File package} "putDlgID = -3999; {SFPutFile dialog template ID} "putSave = 1; {save button} "putCancel = 2; {cancel button} "putEject = 5; {eject button} "putDrive = 6; {drive button} "putName = 7; {editTExt item for file name} "getDlgID = -4000; {SFGetFile dialog template ID} "getOpen = 1; {open button} "getCancel = 3; {cancel button} "getEject = 5; {eject button} "getDrive = 6; {drive button} "getNmList = 7; {userItem for file name list} "getScroll = 8; {userItem for scroll bar} {constants for manipulation of international resources} "{masks used for setting and testing currency format flags} "currLeadingZ = 128; {set if leading zero} "currTrailingZ = 64; {set if trailing zero} "currNegSym = 32; {set if minus sign for negative num, reset if parentheses} "currSymLead = 16; {set if currency symbol leads, reset if trails} "{constants specifying absolute value of short date form} "MDY = 0; {month,day,year} "DMY = 1; {day,month,year} "YMD = 2; {year,month,day} "{masks used for date element format flags} "century = 128; {set if century, reset if no century} "mntLdingZ = 64; {set if leading 0 for month} "dayLdingZ = 32; {set if leading zero for day} "{masks used for time element format flags} "hrLeadingZ = 128; {set if leading zero for hours} "minLeadingZ = 64; {set if leading zero for minutes} "secLeadingZ = 32; {set if leading zero for seconds} "{country codes for version numbers} "verUS = 0; "verFrance = 1; "verBritain = 2; "verGermany = 3; "verItaly = 4; TYPE {Standard File} SFReply = RECORD ,good: BOOLEAN; {ignore command if FALSE} ,copy: BOOLEAN; {not used} ,fType: OsType; {file type or not used} ,vRefNum: INTEGER; {volume reference number} ,version: INTEGER; {file's version number} ,fName: String[63]; {file name} *END; {SFReply} SFTypeList = ARRAY[0..3] OF OSType; {interface for international resources} intl0Hndl = ^intl0Ptr; intl0Ptr = ^intl0REc; intl0Rec = PACKED RECORD $decimalPt: char; {ASCII character for decimal point} $thousSep: char; {ASCII character for thousand separator} $listSep: char; {ASCII character for list separator} $currSym1: char; {ASCII for currency symbol (3 bytes long)} $currSym2: char; $currSym3: char; $currFmt: Byte; {currency format flags} $dateOrder: Byte; {short date form - DMY,YMD, or MDY} $shrtDateFmt: Byte; {date elements format flag} $dateSep: char; {ASCII for date separator} $timeCycle: Byte; {indicates 12 or 24 hr cycle} $timeFmt: Byte; {time elements format flags} $mornStr: PACKED ARRAY[1..4] OF char; {ASCII for trailing string from 0:00 to 11:59} $eveStr: PACKED ARRAY[1..4] OF char; {ASCII for trailing string from 12:00 to 23:59} $timeSep: char; {ASCII for the time separator} $time1Suff: char; {suffix string used in 24 hr mode} $time2Suff: char; {8 characters long} $time3Suff: char; $time4Suff: char; $time5Suff: char; $time6Suff: char; $time7Suff: char; $time8Suff: char; $metricSys: Byte; {indicates metric or English system} $intl0Vers: INTEGER; {version: high byte = country, low byte = vers} "END; {intl0Rec} DateForm = (shortDate, longDate, abbrevDate); intl1Hndl = ^intl1Ptr; intl1Ptr = ^intl1REc; intl1Rec = PACKED RECORD $days: ARRAY[1..7] OF String[15]; {length and word for Sunday through Monday} $months: ARRAY[1..12] OF String[15]; {length and word for January to December} $suppressDay: Byte; {0 for day of week, 255 for no day of week} $lngDateFmt: Byte; {expanded date format 0 or 255} $dayLeading0: Byte; {255 for leading 0, 0 for no leading 0} $abbrLen: Byte; {length of abbreviated names in long form} $st0: PACKED ARRAY[1..4] OF char; {the string st0} $st1: PACKED ARRAY[1..4] OF char; {the string st1} $st2: PACKED ARRAY[1..4] OF char; {the string st2} $st3: PACKED ARRAY[1..4] OF char; {the string st3} $st4: PACKED ARRAY[1..4] OF char; {the string st4} $intl1Vers: INTEGER; {version word} $localRtn: INTEGER; {routine for localizing mag comp; } H{minimal case is $4E75 for RTS, but } H{routine may be longer than one integer.} "END; {intl1Rec} {Standard File} PROCEDURE SFPutFile(where: Point; prompt: Str255; origName: Str255; 4dlgHook: ProcPtr; VAR reply: SFReply); PROCEDURE SFPPutFile(where: Point; prompt: Str255; origName: Str255; 5dlgHook: ProcPtr; VAR reply: SFReply; dlgID: INTEGER; 5filterProc: ProcPtr); PROCEDURE SFGetFile(where: Point; prompt: Str255; fileFilter: ProcPtr; 4numTypes: INTEGER; typeList: SFTypeList; dlgHook: ProcPtr; 4VAR reply: SFReply); PROCEDURE SFPGetFile(where: Point; prompt: Str255; fileFilter: ProcPtr; 5numTypes: INTEGER; typeList: SFTypeList; dlgHook: ProcPtr; 5VAR reply: SFReply; dlgID: INTEGER; filterProc: ProcPtr); {interface to Disk Initialization Package} PROCEDURE DILoad; PROCEDURE DIUnLoad; FUNCTION DIBadMount(where: Point; evtMessage: LongInt): INTEGER; FUNCTION DIFormat(drvNum: INTEGER): OsErr; FUNCTION DIVerify(drvNum: INTEGER): OsErr; FUNCTION DIZero(drvNum: INTEGER; volName: Str255): OsErr; {interface to International Utilities} FUNCTION IUGetIntl(theID: INTEGER): Handle; PROCEDURE IUSetIntl(refNum: INTEGER; theID: INTEGER; intlParam: Handle); PROCEDURE IUDateString(dateTime: LongInt; longFlag: DateForm; VAR result: Str255); PROCEDURE IUDatePString(dateTime: LongInt; longFlag: DateForm; VAR result: Str255; 5intlParam: Handle); PROCEDURE IUTimeString(dateTime: LongInt; wantSeconds: BOOLEAN; VAR result: Str255); PROCEDURE IUTimePString(dateTime: LongInt; wantSeconds: BOOLEAN; VAR result: Str255; 5intlParam: Handle); FUNCTION IUMetric: BOOLEAN; FUNCTION IUCompString(aStr,bStr: Str255): INTEGER; FUNCTION IUEqualString(aStr,bStr: Str255): INTEGER; FUNCTION IUMagString(aPtr,bPtr: Ptr; aLen,bLen: INTEGER): INTEGER; FUNCTION IUMagIDString(aPtr,bPtr: Ptr; aLen,bLen: INTEGER):INTEGER; {interface to Binary-Decimal Conversion} PROCEDURE StringToNum(theString: Str255; VAR theNum: LongInt); PROCEDURE NumToString(theNum: LongInt; VAR theString: Str255); IMPLEMENTATION SFPUTFIL GOPACK GOPACK SFPUTFILSFPUTFILt _?/ SFPPUTFI SFPPUTFISFPPUTFIGOPACK GOPACK tNSFGETFIL SFGETFILSFGETFILGOPACK GOPACK tNSFPGETFI SFPGETFISFPGETFIGOPACK GOPACK tNDILOAD GODI GODI DILOAD DILOAD t _?/ DIUNLOAD DIUNLOADDIUNLOADGODI GODI tNDIBADMOU DIBADMOUDIBADMOUGODI GODI tNDIFORMAT DIFORMATDIFORMATGODI GODI tNDIVERIFY DIVERIFYDIVERIFYGODI GODI 4<NDIZERO DIZERO DIZERO GODI GODI 4< NIUGETINT GOINTL GOINTL IUGETINTIUGETINTt _?/ IUSETINT IUSETINTIUSETINTGOINTL GOINTL tNIUDATEST IUDATESTIUDATESTGOINTL GOINTL tNIUDATEPS IUDATEPSIUDATEPSGOINTL GOINTL tNIUTIMEST IUTIMESTIUTIMESTGOINTL GOINTL tNIUTIMEPS IUTIMEPSIUTIMEPSGOINTL GOINTL tNIUMETRIC IUMETRICIUMETRICGOINTL GOINTL tNIUMAGSTR IUMAGSTRIUMAGSTRGOMAG GOMAG 4< NIUMAGIDS IUMAGIDSIUMAGIDSGOMAG GOMAG 4< _?/ IUCOMPST IUCOMPSTIUCOMPSTGOPMAG GOPMAG 4< NIUEQUALS GOPMAG GOPMAG IUEQUALSIUEQUALS04< "o oB@BA/H/I _???/(STRINGTO STRINGTOSTRINGTOEXIT8 EXIT8  o?< o NNUMTOSTR EXIT8 EXIT8 NUMTOSTRNUMTOSTR o /Bg _PONЁUPRLINK PRPICFILPRPICFILPRJOBMERPRJOBMERPRCLOSEPPRCLOSEP.PRHACK PRHACK FUPRLINK UPRLINK PRVALIDAPRVALIDAPRCLOSEDPRCLOSEDPRJOBINIPRJOBINIpPRJOBDIAPRJOBDIA`PRSETERRPRSETERRPROPENPAPROPENPA&PRCLOSE PRCLOSE bPROPENDOPROPENDOPRCFGDIAPRCFGDIA<PRDLGMAIPRDLGMAIxPRSTLDIAPRSTLDIAXPRCTLCALPRCTLCAL.PRDRVROPPRDRVROPPROPEN PROPEN ZPRDRVRCLPRDRVRCLPRERROR PRERROR PRINTDEFPRINTDEFPPRSTLINIPRSTLINIh o Pp(Dr8 F8 F"< `"<`"<`"< p8 F`^"<p`T"< p`J"<`6"<`."<`&"< `"<`"<`"<`"<p`"<pAPH(&_Y/N.Print $"OXIpBgQA/H?| O/Nuaܠr`a1|$("<`YOa _ P(H?@Nua!Y$!Y !Y1Yr`pYO/JoNV n CJ""2Hn/.NN^ _PONDDX 6SUBS SUBS SUBS SUBSXXX SUBSXXX .JoNVHn /.NN^ _PONUBS &SUBX SUBX SUBX SUBXXXX SUBXXXX ">JoNV n CJ""2Hn/.NN^ _PONUBX 6MULS MULS MULS MULSXXX MULSXXX .JoNVHn /.NN^ _PONULS &DIVS DIVS DIVS DIVSXXX DIVSXXX .JoNVHn /.NN^ _PONIVS &I2X I2X I2X I2XXXX I2XXXX .JoNVHn /.NN^ _\ON2X &S2X S2X S2X S2XXXX S2XXXX .JoNVHn /.NN^ _PON2X &L2X L2X L2X L2XXXX L2XXXX .JoNVHn /.NN^ _PON2X &S2DEC S2DEC S2DEC S2DECXXXS2DECXXX4JoNVHnHn /.NN^ _ N2DEC ,D2DEC D2DEC D2DEC D2DECXXXD2DECXXX$BJoNV n CJ""HnHn/.NN^ _ N2DEC :C2DEC C2DEC C2DEC C2DECXXXC2DECXXX$BJoNV n CJ""HnHn/.NN^ _ N2DEC :X2DEC X2DEC X2DEC X2DECXXXX2DECXXX&DJoNV n CJ""2HnHn/.NN^ _ N2DEC <INT2STR $4100000INT2STR %_CAT %_CAT %_INS %_INS %_SRCHK %_SRCHK DJoNV/>.JGl D@>=|1p"H HAJA|0 n C?<PNp S@n0 H >JGg2p"H HAJA|0Hn/. ?<N H >`Jnl4 n /HzB/. Hn?<N _C?<PNp S@n0.N^ _ NNT2STR -DEC2STR $3100000DEC2STR %_INS %_INS d,l%_DEL %_DEL L%_COPY %_COPY ҉,%_SRCHK %_SRCHK P&jv*%_CAT %_CAT @~Zf$4100000INT2STR 8JoNVH(n &nJg n0-` n0 pBA4A0gAgfA g@[Ag^` n//.HzHHn?<N _C?<PNp S@n0`Jg nC 0` nC 0` n//.Hz/Hl?<,@S@?HnN _HnHzHn?<N _C?<PNp S@n0 n@S@> nB@0p @0W G ^gSG`/. R@? n@GS@?N n@ @ oHz,/.?< N~ nB@0p @0W G ]gRG`/.?< ]@?N` n//.HzHn.?<N _C.?<PNp S@n0`JfHl?<?+HnNA?<PNCZp"S@n20+lS@>HzbHnZ?<N?Hn/N n//.HnZHz6HnHn&?<N _C&?<PNp S@n0`Jlm n//.HlHn?<N _C?<PNp S@n0=l~`8 n//.HzHnn?<N _Cn?<PNp S@n0RGino n//.HzrHn?<N _C?<PNp S@n0`(0,D@,A@oVHz0Hl,@2,@RA?N n//.HlHn?<N _C?<PNp S@n0` n//.HzHnb?<N _Cb?<PNp S@n0,@2,@DA=A~`8 n//.Hz~Hn?<N _C?<PNp S@n0RGino n//.HlHn?<N _C?<PNp S@n0LN^ _ NEC2STR 200...0E.???.???:'NAN'++++----0.0NEXTC $6100000NEXTC NJoNV/ (n,@lm0,BA4=A Rl`Bn (_N^.NuEXTC FSTR2DEC $5100000STR2DEC %_INS %_INS %_DEL %_DEL n%_POS %_POS Z%_SRCHK %_SRCHK H@%_CAT %_CAT :2%_COPY %_COPY "2$6100000NEXTC R,pL:~lRJoNVH n CJp"S@n2(nBBlB,BBn=|BnBD=|0=|Bg/N> G W G Wg Bg/N>` G+f Bg/N>` G-fBg/N> G+WJW G-W Wg 9|I` GNW GnWg.@Y@nl LXC 0`.@nW@: EozHzHn0.V@??HnJNHnJHn?<NA?<N"LXp"S@n2HzzHlN:JEo(Hl??<N ElHzRHl?<NRE``( G0fBg/N>9|0` G1\ G9_gx9|0pBg/N> G0\ G9_g` Dl:RDpHlHnHn?<NA?<N"LXp"S@n2`Rn G0V"ABg/N>` G.fzBg/N> G0\ G9_g` Dl>RDSnpHlHnHn?<NA?<N"LXp"S@n2` G0V"ABg/N>`` G.fBg/N> G0fSn9|0Bg/N>` G1\ G9_gB, G0\ G9_g` Dl>SnRDpHlHnHn?<NA?<N"LXp"S@n2` G0V"ABg/N>`,@J@f)|N12g:p1HlHnHn?<NA?<N"LXp"S@n2`B,@ @^,ABB4 B0WgRnHl,@??<N` GEW GeWg=|BnBg/N> G+W G-Wg G-f=|Bg/N>B G0\ G9_g0 n\"Ap "|0@=ABg/N>`g=|0.2.@9ALN^ _PONTR2DEC 0:NN0000րS2STR S2STR S2STR $3100000DEC2STR &S2DEC S2DEC DJoNV/./. HnNHnHn/.NN^ _ N2STR <D2STR D2STR D2STR $3100000DEC2STR 4D2DEC D2DEC $RJoNV n CJ""/.HnHnNHnHn/.NN^ _ N2STR JC2STR C2STR C2STR $3100000DEC2STR 4C2DEC C2DEC $RJoNV n CJ""/.HnHnNHnHn/.NN^ _ N2STR JX2STR X2STR X2STR $3100000DEC2STR 6X2DEC X2DEC &TJoNV n CJ""2/.HnHnNHnHn/.NN^ _ N2STR LSTR2S STR2S STR2S %_SRCHK %_SRCHK (DEC2S DEC2S >$5100000STR2DEC 2ZJoNV n CJp"S@n2A?<PN/HnNHn/.NN^ _PONTR2S RSTR2D STR2D STR2D %_SRCHK %_SRCHK (DEC2D DEC2D >$5100000STR2DEC 2ZJoNV n CJp"S@n2A?<PN/HnNHn/.NN^ _PONTR2D RSTR2C STR2C STR2C %_SRCHK %_SRCHK (DEC2C DEC2C >$5100000STR2DEC 2ZJoNV n CJp"S@n2A?<PN/HnNHn/.NN^ _PONTR2C RSTR2X STR2X STR2X %_SRCHK %_SRCHK (DEC2X DEC2X >$5100000STR2DEC 2ZJoNV n CJp"S@n2A?<PN/HnNHn/.NN^ _PONTR2X RNEGX NEGX NEGX NEGXXXX NEGXXXX (JoNV/.NN^.NuEGX  NEXTS NEXTS NEXTS NEXTSXXXNEXTSXXX.JoNV/. HnNN^ _PONEXTS &CLASSS CLASSS CLASSS CLASSSXXCLASSSXX4JoNVBgHn /.N_N^ _PONLASSS ,SCALBX SCALBX SCALBX SCALBXXXSCALBXXX.JoNVHn /.NN^ _\ONCALBX &SETENV SETENV SETENV SETENVXXSETENVXX*JoNVHnNN^ _TONETENV "PROCEXIT PROCEXITPROCEXITPROCEXITPROCEXIT*JoNV?.NN^ _TONROCEXIT" $INTERFACE (CONST ,SIGDIGLEN = 20; { Maximum length of SigDig. } ,DECSTRLEN = 80; { Maximum length of DecStr. } (TYPE ,{----------------------------------------------------------------- ,** Numeric types. ,-----------------------------------------------------------------} 0Single = array [0..1] of integer; 0Double = array [0..3] of integer; 0Comp = array [0..3] of integer; 0Extended = array [0..4] of integer; ,{----------------------------------------------------------------- ,** Decimal string type and intermediate decimal type, ,** representing the value: ,** (-1)^sgn * 10^exp * dig ,-----------------------------------------------------------------} 0SigDig = string [SIGDIGLEN]; 0DecStr = string [DECSTRLEN]; 0Decimal = record ?sgn : 0..1; { Sign (0 for pos, 1 for neg). } ?exp : integer; { Exponent. } ?sig : SigDig { String of significant digits. } ;end; {^ne 16 } ,{----------------------------------------------------------------- ,** Modes, flags, and selections. ,** NOTE: the values of the style element of the DecForm record ,** have different names from the PCS version to avoid name ,** conflicts. ,-----------------------------------------------------------------} 0Environ = integer; 0RoundDir = (TONEAREST, UPWARD, DOWNWARD, TOWARDZERO); 0RelOp = (GT, LT, GL, EQ, GE, LE, GEL, UNORD); <{ > < <> = >= <= <=> } 0Exception = (INVALID, UNDERFLOW, OVERFLOW, DIVBYZERO, eINEXACT); 0NumClass = (SNAN, QNAN, INFINITE, ZERO, NORMAL, DENORMAL); 0DecForm = record @style : (FloatDecimal, FixedDecimal); @digits : integer HW?<TNBA`r"WHWax/HJ/f`HWaHPNсRTOOLINTF { Created 23 Nov 1983 by Rony Sebok, merged from numerous files } { Modification history: } { 10 Feb 84 RTM First pass at inline traps } { 11 Apr 84 JTC noControl, resUser out; scrapCount, axes added } { Copyright 1982, 1983, 1984 by Apple Computer, Inc. All Rights Reserved. } INTERFACE USES {$U-} ({$U obj/MemTypes } MemTypes, ({$U obj/QuickDraw } QuickDraw, ({$U Obj/OsIntf } OsIntf; CONST "{ for Font Manager } "systemFont = 0; "applFont = 1; "NewYork = 2; "Geneva = 3; "Monaco = 4; "Venice = 5; "London = 6; "Athens = 7; "SanFran = 8; "Toronto = 9; "propFont = $9000; "fixedFont = $B000; "fontWid = $ACB0; "{for Window Manager} "{window messages} "wDraw = 0; "wHit = 1; "wCalcRgns = 2; "wNew = 3; "wDispose = 4; "wGrow = 5; "WDrawGIcon = 6; "{types of windows} "dialogKind = 2; "userKind = 8; "{window definition procedure IDs} "DocumentProc = 0; "DBoxProc = 1; "plainDBox = 2; "altDBoxProc = 3; "noGrowDocProc = 4; "RDocProc = 16; "{FindWindow Result Codes} "inDesk = 0; "inMenuBar = 1; "inSysWindow = 2; "inContent = 3; "inDrag = 4; "inGrow = 5; "inGoAway = 6; "{defProc hit test codes} "wNoHit = 0; "wInContent = 1; "wInDrag = 2; "wInGrow = 3; "wInGoAway = 4; "{axis constraints for DragGrayRgn call} "bothAxes = 0; "hAxisOnly = 1; "vAxisOnly = 2; "{for TextEdit} "teJustLeft = 0; "teJustRight = -1; "teJustCenter = 1; "{for Resource Manager} "{Resource attribute byte} "ResSysRef= 128; { Reference to system resource? } "ResSysHeap= 64; { System or application heap? } "ResPurgeable= 32; { Purgeable resource? } "ResLocked= 16; { Load it in locked? } "ResProtected= 8; { Protected? } "ResPreload= 4; { Load in on OpenResFile? } "ResChanged= 2; { Resource changed? } "MapReadOnly= 128; { Resource file read-only } "MapCompact= 64; { Compact resource file } "MapChanged= 32; { Write map out at update } "ResNotFound= -192; { Resource not found } "ResFNotFound= -193; { Resource file not found } "AddResFailed= -194; { AddResource failed } "AddRefFailed= -195; { AddReference failed } "RmvResFailed= -196; { RmveResource failed } "RmvRefFailed= -197; { RmveReference failed } "{ID's for resources provided in sysResDef} {standard cursor definitions} IBeamCursor = 1; {text selection cursor} CrossCursor = 2; {for structured selection} PlusCursor = 3; {for drawing graphics} WatchCursor = 4; {for indicating a long delay} {icons} stopIcon = 0; noteIcon = 1; cautionIcon = 2; {patterns} patternList = 38; {ID of PAT# which contains 38 patterns} "{for Control Manager} "{control messages} "drawCntl = 0; "testCntl = 1; "calcCRgns = 2; "initCntl = 3; "dispCntl = 4; "posCntl = 5; "thumbCntl = 6; "dragCntl = 7; "autoTrack = 8; "{FindControl Result Codes} "inButton = 10; "inCheckbox = 11; "inUpButton = 20; "inDownButton = 21; "inPageUp = 22; "inPageDown = 23; "inThumb = 129; "{control definition proc ID's} "PushButProc = 0; "CheckBoxProc = 1; "RadioButProc = 2; "ScrollBarProc = 16; "UseWFont = 8; "{for Dialog Manager} "UserItem= 0; "CtrlItem= 4; $BtnCtrl= 0; { Low two bits specify what kind of control } $ChkCtrl= 1; $RadCtrl= 2; $ResCtrl= 3; "StatText= 8; { Static text } "EditText= 16; { Editable text } "IconItem= 32; { Icon item } "PicItem= 64; { Picture item } "ItemDisable= 128; { Disable item if set } "OK= 1; { OK button is first by convention } "Cancel= 2; { Cancel button is second by convention } "{for Desk Manager} "undoCmd = 0; "cutCmd = 2; "copyCmd = 3; "pasteCmd = 4; "clearCmd = 5; "{for Menu Manager} "maxItem = 31; { max number of items in a text menu } "noMark = 0; { mark symbols for MarkItem } "commandMark = $11; "checkMark = $12; "diamondMark = $13; "appleMark = $14; "appleSymbol = $14; "TextMenuProc = 0; "{ menu defProc messages } "mDrawMsg = 0; "mChooseMsg = 1; "mSizeMsg = 2; "{for Scrap Manager} "noTypeErr = -102; "{package manager} "dskInit = 2; {Disk Initializaton} "stdFile = 3; {Standard File} "flPoint = 4; {Floating-Point Arithmetic} "trFunc = 5; {Transcendental Functions} "intUtil = 6; {International Utilities} "bdConv = 7; {Binary/Decimal Conversion} TYPE "{General Utilities} "Int64Bit = RECORD /hiLong: LongInt; /loLong: LongInt; -END; "CursPtr = ^Cursor; "CursHandle = ^CursPtr; "PatPtr = ^Pattern; "PatHandle = ^PatPtr; "{for Font Manager} "FMInput = PACKED RECORD .family: INTEGER; .size: INTEGER; .face: Style; .needBits: BOOLEAN; .device: INTEGER; .numer: Point; .denom: Point; ,END; "FMOutPtr = ^FMOutPut; "FMOutPut = PACKED RECORD /errNum: INTEGER; /fontHandle: Handle; /bold: Byte; /italic: Byte; /ulOffset: Byte; /ulShadow: Byte; /ulThick: Byte; /shadow: Byte; /extra: SignedByte; /ascent: Byte; /descent: Byte; /widMax: Byte; /leading: SignedByte; /unused: Byte; /numer: Point; /denom: Point; -END; "FontRec = RECORD .fontType: INTEGER; .firstChar: INTEGER; .lastChar: INTEGER; .widMax: INTEGER; .kernMax: INTEGER; .nDescent: INTEGER; .fRectMax: INTEGER; .chHeight: INTEGER; .owTLoc: INTEGER; .ascent: INTEGER; .descent: INTEGER; .leading: INTEGER; .rowWords: INTEGER; -{bitImage: ARRAY[1..rowWords,1..chHeight] OF INTEGER; .locTable: ARRAY[firstChar..lastChar+2] OF INTEGER; .owTable: ARRAY[firstChar..lastChar+2] OF INTEGER;} ,END; "{for Event Manager} "{the Event Record is defined in OsIntf} #KeyMap = ARRAY[0..3] OF LONGINT; "{for Window Manager} "WindowPtr = GrafPtr; "WindowPeek = ^WindowRecord; "WindowRecord = RECORD 3port: GrafPort; 3windowKind: INTEGER; 3visible: BOOLEAN; 3hilited: BOOLEAN; 3goAwayFlag: BOOLEAN; 3spareFlag: BOOLEAN; 3strucRgn: RgnHandle; 3contRgn: RgnHandle; 3updateRgn: RgnHandle; 3windowDefProc: Handle; 3dataHandle: Handle; 3titleHandle: StringHandle; 3titleWidth: INTEGER; 3ControlList: Handle; 3nextWindow: WindowPeek; 3windowPic: PicHandle; 3refCon: LongInt; 1END; "{for TextEdit} "TERec = RECORD ,destRect: Rect; {Destination rectangle} ,viewRect: Rect; {view rectangle} ,selRect: Rect; {Select rectangle} ,lineHeight: INTEGER; {Current font lineheight} ,fontAscent: INTEGER; {Current font ascent} ,selPoint: Point; {Selection point(mouseLoc)} ,selStart: INTEGER; {Selection start} ,selEnd: INTEGER; {Selection end} ,active: INTEGER; {<>0 if active} ,workBreak: LONGINT; {Word break routine} ,clikLoop: LONGINT; {Click loop routine} ,clickTime: LONGINT; {Time of first click} ,clickLoc: INTEGER; {Char. location of click} ,caretTime: LONGINT; {Time for next caret blink} ,caretState: INTEGER; {On/active booleans} ,just: INTEGER; {fill style} ,TELength: INTEGER; {Length of text below} ,hText: Handle; {Handle to actual text} ,recalBack: INTEGER; {<>0 if recal in background} ,recalLines: INTEGER; {Line being recal'ed} ,clikStuff: INTEGER; {click stuff (internal)} ,crOnly: INTEGER; {Set to -1 if CR line breaks only} ,txFont: INTEGER; {Text Font} ,txFace: Style; {Text Face} ,txMode: INTEGER; {Text Mode} ,txSize: INTEGER; {Text Size} ,inPort: GrafPtr; {Grafport} ,highHook: PTR; {Highlighting hook} ,caretHook: PTR; {Highlighting hook} ,nLines: INTEGER; {Number of lines} ,lineStarts: ARRAY [0..16000] OF INTEGER; {Actual line starts themselves} *END; {RECORD} "TEPtr = ^TERec; "TEHandle = ^TEPtr; "CharsHandle = ^CharsPtr; "CharsPtr = ^Chars; "Chars = PACKED ARRAY[0..32000] OF CHAR; "{for Resource Manager} "ResType=PACKED ARRAY[1..4] OF CHAR; "{for Control Manager} "ControlPtr = ^ControlRecord; "ControlHandle = ^ControlPtr; "ControlRecord = %RECORD 'nextControl: ControlHandle; 'contrlOwner: WindowPtr; 'contrlRect: Rect; 'contrlVis: BOOLEAN; 'contrlHilite: BOOLEAN; 'contrlValue: INTEGER; 'contrlMin: INTEGER; 'contrlMax: INTEGER; 'contrlDefProc: Handle; 'contrlData: Handle; 'contrlAction: ProcPtr; 'contrlrfCon: LONGINT; 'contrlTitle: Str255; %END; {ControlRecord} "{for Dialog Manager} "DialogPtr= WindowPtr; "DialogPeek= ^DialogRecord; "DialogRecord= Record 2window: WindowRecord; 2Items: Handle; 2textH: TEHandle; 2EditField: Integer; 2EditOpen: INTEGER; 2ADefItem: INTEGER; 0End; "DialogTHndl= ^DialogTPtr; "DialogTPtr= ^DialogTemplate; "DialogTemplate=RECORD 3boundsRect: Rect; 3procID: INTEGER; 3visible: BOOLEAN; 3filler1: BOOLEAN; 3goAwayFlag: BOOLEAN; 3filler2: BOOLEAN; 3refCon: LongInt; 3ItemsID: INTEGER; 3title: Str255; 1END; "StageList= PACKED ARRAY [1..4] OF RECORD IboldItem: 0..1; IboxDrawn: BOOLEAN; Isound: 0..3; GEND; "AlertTHndl= ^AlertTPtr; "AlertTPtr= ^AlertTemplate; "AlertTemplate=RECORD 2boundsRect: Rect; 2itemsID: INTEGER; 2stages: StageList; 0END; "{for Menu Manager} "MenuPtr = ^MenuInfo; "MenuHandle = ^MenuPtr; "MenuInfo = RECORD /menuId: INTEGER; /menuWidth: INTEGER; /menuHeight: INTEGER; /menuProc: Handle; /enableFlags: PACKED ARRAY[0..maxItem] OF BOOLEAN; /menuData: Str255; -END; "{for Scrap Manager} "ScrapStuff = RECORD &scrapSize: LONGINT; &scrapHandle: Handle; &scrapCount: INTEGER; &scrapState: INTEGER; &scrapName: StringPtr; "END; "pScrapStuff = ^ScrapStuff; {General Utilities} FUNCTION BitAnd (long1,long2: LongInt): LongInt; INLINE $A858; FUNCTION BitOr (long1,long2: LongInt): LongInt; INLINE $A85B; FUNCTION BitXor (long1,long2: LongInt): LongInt; INLINE $A859; FUNCTION BitNot (long: LongInt): LongInt; INLINE $A85A; FUNCTION BitShift (long: LongInt; count: INTEGER): LongInt; INLINE $A85C; FUNCTION BitTst (bytePtr: Ptr; bitNum: LongInt): BOOLEAN; INLINE $A85D; PROCEDURE BitSet (bytePtr: Ptr; bitNum: LongInt); INLINE $A85E; PROCEDURE BitClr (bytePtr: Ptr; bitNum: LongInt); INLINE $A85F; PROCEDURE LongMul (a,b: LongInt; VAR dst: Int64Bit); INLINE $A867; FUNCTION FixMul (a,b: Fixed): Fixed; INLINE $A868; FUNCTION FixRatio (numer,denom: INTEGER): Fixed; INLINE $A869; FUNCTION HiWord (x: LongInt): INTEGER; INLINE $A86A; FUNCTION LoWord (x: LongInt): INTEGER; INLINE $A86B; FUNCTION FixRound (x: Fixed): INTEGER; INLINE $A86C; PROCEDURE PackBits (VAR srcPtr,dstPtr: Ptr; srcBytes: INTEGER); INLINE $A8CF; PROCEDURE UnPackBits(VAR srcPtr,dstPtr: Ptr; dstBytes: INTEGER);INLINE $A8D0; FUNCTION SlopeFromAngle(angle: INTEGER): Fixed; INLINE $A8BC; FUNCTION AngleFromSlope(slope: Fixed): INTEGER; INLINE $A8C4; FUNCTION DeltaPoint(ptA,ptB: Point): LongInt; INLINE $A84F; FUNCTION NewString(theString:Str255): StringHandle; INLINE $A906; PROCEDURE SetString(theString:StringHandle; strNew: Str255); INLINE $A907; FUNCTION GetString(stringID: INTEGER): StringHandle; INLINE $A9BA; PROCEDURE GetIndString(VAR theString: str255; strListID: INTEGER; 7index: INTEGER); FUNCTION Munger(h: Handle; offset: LongInt; ptr1: Ptr; len1: LongInt; 0ptr2: Ptr; len2: LongInt): LongInt; INLINE $A9E0; FUNCTION GetIcon(iconID: INTEGER): Handle; INLINE $A9BB; PROCEDURE PlotIcon(theRect: Rect; theIcon: Handle); INLINE $A94B; FUNCTION GetCursor (cursorID: INTEGER): CursHandle; INLINE $A9B9; FUNCTION GetPattern(patID: INTEGER): PatHandle; INLINE $A9B8; FUNCTION GetPicture(picID: INTEGER): PicHandle; INLINE $A9BC; PROCEDURE ShieldCursor(shieldRect: Rect; offsetPt: Point); INLINE $A855; {for Font Manager} PROCEDURE InitFonts; INLINE $A8FE; PROCEDURE GetFontName(familyID: INTEGER; VAR theName: Str255); INLINE $A8FF; PROCEDURE GetFNum(theName: Str255; VAR familyID: INTEGER); INLINE $A900; PROCEDURE SetFontLock(lockFlag: BOOLEAN); INLINE $A903; FUNCTION FMSwapFont(inRec: FMInput): FMOutPtr; INLINE $A901; FUNCTION RealFont(famID: INTEGER; size: INTEGER): BOOLEAN; INLINE $A902; {for Event Manager} FUNCTION EventAvail(mask:INTEGER; VAR theEvent: EventRecord): BOOLEAN; `INLINE $A971; FUNCTION GetNextEvent(mask:INTEGER; VAR theEvent: EventRecord): BOOLEAN; `INLINE $A970; FUNCTION StillDown:BOOLEAN; INLINE $A973; FUNCTION WaitMouseUp:BOOLEAN; INLINE $A977; PROCEDURE GetMouse (VAR pt: Point); INLINE $A972; FUNCTION TickCount:LongInt; INLINE $A975; FUNCTION Button: BOOLEAN; INLINE $A974; PROCEDURE GetKeys(VAR k: keyMap); INLINE $A976; FUNCTION DoubleTime: LongInt; FUNCTION CaretTime: LongInt; {for Window Manager} PROCEDURE ClipAbove(window: WindowPeek); INLINE $A90B; PROCEDURE PaintOne(window: WindowPeek; clobbered: RgnHandle); INLINE $A90C; PROCEDURE PaintBehind(startWindow: WindowPeek; clobbered: RgnHandle); `INLINE $A90D; PROCEDURE SaveOld(window: WindowPeek); INLINE $A90E; PROCEDURE DrawNew(window: WindowPeek; fUpdate: BOOLEAN); INLINE $A90F; PROCEDURE CalcVis(window: WindowPeek); INLINE $A909; PROCEDURE CalcVisBehind(startWindow: WindowPeek; clobbered: RgnHandle); `INLINE $A90A; PROCEDURE ShowHide(window: WindowPtr; showFlag: BOOLEAN); INLINE $A908; FUNCTION CheckUpdate(VAR theEvent: EventRecord): BOOLEAN; INLINE $A911; PROCEDURE GetWMgrPort(VAR wPort: GrafPtr); INLINE $A910; PROCEDURE InitWindows; INLINE $A912; FUNCTION NewWindow(wStorage: Ptr; 4boundsRect: Rect; 4title: Str255; 4visible: BOOLEAN; 4theProc: INTEGER; 4behind: WindowPtr; 4goAwayFlag: BOOLEAN; 4refCon: LongInt): WindowPtr; INLINE $A913; PROCEDURE DisposeWindow (theWindow: WindowPtr); INLINE $A914; PROCEDURE CloseWindow (theWindow: WindowPtr); INLINE $A92D; PROCEDURE MoveWindow (theWindow: WindowPtr; h,v: INTEGER; BringToFront:BOOLEAN); `INLINE $A91B; PROCEDURE SizeWindow (theWindow: WindowPtr; width,height: INTEGER; fUpdate: BOOLEAN); `INLINE $A91D; FUNCTION GrowWindow (theWindow: windowPtr; startPt: Point; bBox: Rect): LongInt; `INLINE $A92B; PROCEDURE DragWindow (theWindow: WindowPtr; startPt: Point; boundsRect: Rect); `INLINE $A925; PROCEDURE ShowWindow (theWindow: WindowPtr); INLINE $A915; PROCEDURE HideWindow (theWindow: WindowPtr); INLINE $A916; PROCEDURE SetWTitle (theWindow: WindowPtr; title: Str255); INLINE $A91A; PROCEDURE GetWTitle (theWindow: WindowPtr; VAR title: Str255); INLINE $A919; PROCEDURE HiliteWindow (theWindow: WindowPtr; fHiLite: BOOLEAN); INLINE $A91C; PROCEDURE BeginUpdate (theWindow: WindowPtr); INLINE $A922; PROCEDURE EndUpdate (theWindow: WindowPtr); INLINE $A923; PROCEDURE SetWRefCon (theWindow: WindowPtr; data: LongInt); INLINE $A918; FUNCTION GetWRefCon (theWindow: WindowPtr): LongInt; INLINE $A917; PROCEDURE SetWindowPic (theWindow: WindowPtr; thePic: PicHandle); INLINE $A92E; FUNCTION GetWindowPic (theWindow: WindowPtr): PicHandle; INLINE $A92F; PROCEDURE BringToFront (theWindow: WindowPtr); INLINE $A920; PROCEDURE SendBehind (theWindow,behind: WindowPtr); INLINE $A921; FUNCTION FrontWindow: WindowPtr; INLINE $A924; PROCEDURE SelectWindow (theWindow: WindowPtr); INLINE $A91F; FUNCTION TrackGoAway (theWindow: WindowPtr; thePt: Point): BOOLEAN; `INLINE $A91E; PROCEDURE DrawGrowIcon (theWindow: WindowPtr); INLINE $A904; PROCEDURE ValidRect (goodRect: Rect); INLINE $A92A; PROCEDURE ValidRgn (goodRgn: RgnHandle); INLINE $A929; PROCEDURE InvalRect (badRect: Rect); INLINE $A928; PROCEDURE InvalRgn (badRgn: RgnHandle); INLINE $A927; FUNCTION FindWindow (thePoint: Point; :VAR theWindow: WindowPtr): INTEGER; INLINE $A92C; FUNCTION GetNewWindow (windowID: INTEGER; wStorage: Ptr; >behind: WindowPtr): WindowPtr; INLINE $A9BD; FUNCTION PinRect(theRect: Rect; thePt: Point): LongInt; INLINE $A94E; FUNCTION DragGrayRgn(theRgn: RgnHandle; startPt: Point; boundsRect, 6slopRect: Rect;axis: INTEGER; 6actionProc: ProcPtr): LongInt; INLINE $A926; {For TextEdit} PROCEDURE TEActivate( h: TEHandle ); INLINE $A9D8; PROCEDURE TECalText( h: TEHandle ); INLINE $A9D0; PROCEDURE TEClick( pt: Point; extend: BOOLEAN; h: TEHandle ); INLINE $A9D4; PROCEDURE TECopy( h: TEHandle ); INLINE $A9D5; PROCEDURE TECut( h: TEHandle ); INLINE $A9D6; PROCEDURE TEDeActivate( h: TEHandle ); INLINE $A9D9; PROCEDURE TEDelete( h: TEHandle ); INLINE $A9D7; PROCEDURE TEDispose( h: TEHandle ); INLINE $A9CD; PROCEDURE TEIdle( h: TEHandle ); INLINE $A9DA; PROCEDURE TEInit; INLINE $A9CC; PROCEDURE TEKey( key: CHAR; h: TEHandle ); INLINE $A9DC; FUNCTION TENew( dest, view: Rect ): TEHandle; INLINE $A9D2; PROCEDURE TEPaste( h: TEHandle ); INLINE $A9DB; PROCEDURE TEScroll( dh, dv: INTEGER; h: TEHandle ); INLINE $A9DD; PROCEDURE TESetSelect( selStart, selEnd: LONGINT; h: TEHandle ); INLINE $A9D1; PROCEDURE TESetText( inText: Ptr; textLength: LONGINT; h: TEHandle ); INLINE $A9CF; PROCEDURE TEInsert( inText: Ptr; textLength: LONGINT; h: TEHandle ); INLINE $A9DE; PROCEDURE TEUpdate( rUpdate: Rect; h: TEHandle ); INLINE $A9D3; PROCEDURE TESetJust( just: INTEGER; h: TEHandle ); INLINE $A9DF; FUNCTION TEGetText( h: TEHandle ): CharsHandle; INLINE $A9CB; FUNCTION TEScrapHandle: Handle; FUNCTION TEGetScrapLen: LongInt; PROCEDURE TESetScrapLen(length: LongInt); {Box drawing utility} PROCEDURE TextBox( inText: Ptr; textLength: LONGINT; r: Rect; style: INTEGER ); `INLINE $A9CE; {for Resource Manager} FUNCTION InitResources: INTEGER; INLINE $A995; PROCEDURE RsrcZoneInit; INLINE $A996; PROCEDURE CreateResFile(fileName: Str255); INLINE $A9B1; FUNCTION OpenResFile(fileName: Str255): INTEGER; INLINE $A997; PROCEDURE UseResFile(refNum: INTEGER); INLINE $A998; FUNCTION GetResFileAttrs(refNum: INTEGER): INTEGER; INLINE $A9F6; PROCEDURE SetResFileAttrs(refNum: INTEGER; attrs: INTEGER); INLINE $A9F7; PROCEDURE UpdateResFile(refNum: INTEGER); INLINE $A999; PROCEDURE CloseResFile(refNum: INTEGER); INLINE $A99A; PROCEDURE SetResPurge(install: Boolean); INLINE $A993; PROCEDURE SetResLoad(AutoLoad: Boolean); INLINE $A99B; FUNCTION CountResources(theType: ResType): INTEGER; INLINE $A99C; FUNCTION GetIndResource(theType: ResType; index: INTEGER): Handle; `INLINE $A99D; FUNCTION CountTypes: INTEGER; INLINE $A99E; PROCEDURE GetIndType(VAR theType: ResType; index: INTEGER); INLINE $A99F; FUNCTION UniqueID(theType: ResType): INTEGER; INLINE $A9C1; FUNCTION GetResource(theType: ResType; ID: INTEGER): Handle; INLINE $A9A0; FUNCTION GetNamedResource(theType: ResType; name: Str255): Handle; `INLINE $A9A1; PROCEDURE LoadResource(theResource: Handle); INLINE $A9A2; PROCEDURE ReleaseResource(theResource: Handle); INLINE $A9A3; PROCEDURE DetachResource(theResource: Handle); INLINE $A992; PROCEDURE ChangedResource(theResource: Handle); INLINE $A9AA; PROCEDURE WriteResource(theResource: Handle); INLINE $A9B0; FUNCTION HomeResFile(theResource: Handle): INTEGER; INLINE $A9A4; FUNCTION CurResFile: INTEGER; INLINE $A994; FUNCTION GetResAttrs(theResource: Handle): INTEGER; INLINE $A9A6; PROCEDURE SetResAttrs(theResource: Handle; attrs: INTEGER); INLINE $A9A7; PROCEDURE GetResInfo(theResource: Handle; 5VAR theID: INTEGER; 5VAR theType: ResType; 5VAR name: Str255); INLINE $A9A8; PROCEDURE SetResInfo(theResource: Handle; 5theID: INTEGER; 5name: Str255); INLINE $A9A9; PROCEDURE AddResource(theResource: Handle; 6theType: ResType; 6theID: INTEGER; 6name: Str255); INLINE $A9AB; PROCEDURE AddReference(theResource: Handle; 7theID: INTEGER; 7name: Str255); INLINE $A9AC; PROCEDURE RmveResource(theResource: Handle); INLINE $A9AD; PROCEDURE RmveReference(theResource: Handle); INLINE $A9AE; FUNCTION SizeResource(theResource: Handle): LongInt; INLINE $A9A5; FUNCTION ResError: INTEGER; INLINE $A9AF; {for Control Manager} FUNCTION NewControl(curWindow: windowPtr; 4boundsRect: Rect; 4title: Str255; 4visible: BOOLEAN; 4value: INTEGER; 4min: INTEGER; 4max: INTEGER; 4contrlProc: INTEGER; 4refCon: LongInt): ControlHandle; INLINE $A954; PROCEDURE DisposeControl (theControl: ControlHandle); INLINE $A955; PROCEDURE KillControls (theWindow: WindowPtr); INLINE $A956; PROCEDURE MoveControl (theControl: ControlHandle; h,v: INTEGER); INLINE $A959; PROCEDURE SizeControl (theControl: ControlHandle; w,h: INTEGER); INLINE $A95C; PROCEDURE DragControl (theControl: ControlHandle; startPt: Point; :bounds: Rect; slopRect: Rect; axis:INTEGER); INLINE $A967; PROCEDURE ShowControl (theControl: ControlHandle); INLINE $A957; PROCEDURE HideControl (theControl: ControlHandle); INLINE $A958; PROCEDURE SetCTitle (theControl: ControlHandle; title: Str255); INLINE $A95F; PROCEDURE GetCTitle (theControl: ControlHandle; VAR title: Str255); INLINE $A95E; PROCEDURE HiliteControl (theControl: ControlHandle; hiliteState: INTEGER); `INLINE $A95D; PROCEDURE SetCRefCon (theControl: ControlHandle; data: LongInt); INLINE $A95B; FUNCTION GetCRefCon (theControl: ControlHandle): LongInt; INLINE $A95A; PROCEDURE SetCtlValue (theControl: ControlHandle; theValue: INTEGER); INLINE $A963; FUNCTION GetCtlValue (theControl: ControlHandle): INTEGER; INLINE $A960; FUNCTION GetCtlMin (theControl: ControlHandle): INTEGER; INLINE $A961; FUNCTION GetCtlMax (theControl: ControlHandle): INTEGER; INLINE $A962; PROCEDURE SetCtlMin (theControl: ControlHandle; theValue: INTEGER); INLINE $A964; PROCEDURE SetCtlMax (theControl: ControlHandle; theValue: INTEGER); INLINE $A965; FUNCTION GetCtlAction (theControl: ControlHandle): ProcPtr; INLINE $A96A; PROCEDURE SetCtlAction (theControl: ControlHandle; newProc: ProcPtr); INLINE $A96B; FUNCTION TestControl (theControl: ControlHandle; thePt: Point): INTEGER; `INLINE $A966; FUNCTION TrackControl (theControl:ControlHandle; thePt: Point; JGg*/- Hz4Bg/- H/?</-  N.N^NuMINITFIREWRITE Error in InitFileJoNVHJg -м//<" <Hm/-??-";_R>JGVmVg>/- HzBg/- H/?</- 0-H/?</-  N*Hm?<(R>JGg*/- Hz6Bg/- H/?</-  NLN^NuMCLOSEF8CLOSE Error in CloseFileBLOCKWRITE Error in CloseFileJoNV n l/- 0. |0A?<`/- 0. |7A?<N^ _\ONRITEDIGJoNV0.H?/N0.HH@J@?/NzN^ _TONRITEBYTJoNV/R-]g` m0-A2.CR-g>?.N~-@ g/- < ?</-p /"Jf/-  fvHm/-?<@?-";_R>JGV m@Vg>/- HzVBg/- H/?</- 0-H/?</-  Nm@B.N^ _TONUTPUTBY BlockWrite Error in OutputByteJoNVBg?.NnNBg?.NnNN^ _TONUTPUTWOJoNVBg/.NnzNBg/.NnbNN^.NuUTPUTLOJoNVH nCJp@"S@n.@<JFf`(=F~`OA0p@?N RGinoLN^.NuUTPUTSTJoNVH n CJp@"S@nJf`HnHn?<R8JDg*/- HzBg/- H/?</-  N,.BE oBHnHn?<?=_REBG`OA0p@?NVRG Go✼`JoHnHn?<?=_BGJoOA0p@?NRGS`HnBg(LN^ _PONUTPUTFIRESET Error in OutputFileJoNV/ n CJp@"S@nJg*-n~`OA0p@?NRio.N^ _PONUTPUTDAJoNV/Jgn-n~`^ @g*Bg n R/p/" A@?0Nl.N&`(Bg n R/p/" A@?0NkNRio.N^ _PONUTPUTDBJoNV mf HmHm0?<?-~;_Rm~Bm0-AA00A=ARmN^NuEADBYTEJoNVBgN0@/BgN2 @=AN^NuEADWORDJoNVBgNh0H//<"BgN0HП-@N^NuEAD3BYTJoNVBgN0H/</"BgNp0HП-@N^NuEADLONGJoNVH0-H".Ҁ. o@//<" S<m~HmHm0?<?-~;_Rm~//<".;GLN^.NuKIPOVERJoNV/ nCJp@"S@n;|Bm~HmHn?<R>JGg8/- HzDBg/- HnBg/- H/?</-  N.N^.NuPENREADRESET Error in OpenRead on JoNVH(n > @ g:,<0.H//", HR@A@/Bg/NiN2 9`" HR@A@2.HHAJAtRTLN^ _\ONAPPENDBJoNV/. Bg?.NiNV/. Bg?.NhNDN^ _\ONAPPENDWJoNV/. Bg/.NhN/. Bg/.NhNN^ _PONAPPENDLJoNVH n CJp@"S@n(n.@>.g/ ?NJGo*=G|`/ MA0`@?NRFino n W"A g/ BgNn n W"Ag/ BgNTLN^ _ NAPPENDSJoNV/~`/. 0S@A6p@?NRG Go.N^ _PONAPPENDTJoNV nal=n `0.| A=@ N^ _TONOLDCHARJoNVH(nB.B=|1@=@~`VpO4pAAO4p@ @ g|g$HnHnHn?<"ACp@ S@nRGinoA"Lp@"S@nLN^.NuRIMBLANJoNV/ n CJp@"S@n(n.@J@fB.`4JTf8.@T\2CA0B B WgRT`.@T\D@(_N^ _PONCANTOSTJoNVH nCJp@"S@n(nBT|BgA?<"z//. N6 n .@P^gH n 0AA0A A-f | n RP`" n 0AA0A A+f n RP n .@P\ n 2CA0B B Vgp n 0AA0A A0\ n 2CA0B B9_g(~0 n 2CA0B@|08`B n RP`` 8GLN^ _ NETINT JoNVH nCJp@"S@n(nB|BgA?<"z//. N n .@P^gH n 0AA0A A-f | n RP`" n 0AA0A A+f n RP n .@P\ n 2CA0B B Vgv n 0AA0A A0\ n 2CA0B B9_g.~p //" n 0AA0AHҟp0(`B n RP`ZH//"(GLN^ _ NETLINT JoNV nCJp@"S@n=| nBBgA?<"z//. Nf_ n .@P\ n 2CA0B B VgPp n 2CA0BA n//.HnHn?<" _Cp@ S@n n RP`N^ _ NETSTR JoNVH nCJp@"S@nB.|~`>Bg n 0S@A0p@?NBgOA0p@?N0_gBRG Go  gH~`>Bg n 0S@A0p@?NXBgOA0p@?N@0_g`RG Go|LN^ _PONATCHTYPJoNV/ (nBg/ HzNg | `Bg/ HzNg| `|Bg/ HzNg| `dBg/ HzNg| `LBg/ HzdNg| `4Bg/ HzFNg| `Bg/ Hz(N~g| `B. (_N^.NuATCHOBJ*PACKDSATKEYCCDEFMDEFWDEFDRVRJoNVB. N^.NuATCHDEBJoNVH n CJp@"S@nHnHz"gHnHn?<R>JGg8/- HzBg/- HnBg/- H/?</-  N0RJ_fHnHn?<Bg:HnBg(. g0.| 2.@nA<`<.=FLN^ _\ONIZEFONT$!RESET Error in SizeFont. fname = JoNVH n CJp@"S@nA?<"z/NHmHn?<?<<0.|n@=@0.[@:0.n8HmBg(=n. g`A?<"z/N~` BgNxN"RG GoBgNf<?<N ~` BgNRNRG GoBgN@<BgN @H/N=D~`BgNNRGinoHmBg(LN^ _\ONROCESSWJoNVH(nBg?. N>, @,gH0,@G9@p2,CA l//,HlHn?<" _Cp@ S@n`9GLN^ _\ONTUFFDIGJoNV/ nCJp@"S@n nCJp@"S@n|=| nB.@=@~`BgOA0p@?N&gOA0p@?/N`OA0p@ @ f`r/- Hz*Bg/-  /- HzBg/- HnBg/-  /- HzBg/- OA0p@?</-  NRGino4 n@n V n Vg6/- HnBg/- Hz8Bg/- HnBg/-  Nt.N^ _NROCESSHf: wrong # of hex digits in- offending digit is: offending string is: non hex digits in HEXA typeJoNV/ nCJp@"S@n~|gnHm04gB/- HzBg/-  N`BHm0Hn?<Hm0.@J@fBB.`pA0A A*gB`.@J@g,A?<"z//.?. A?<"z/NF.N^ _ NETHEXLIPremature end of fileJoNV nCJp@"S@nBg/.?. A?<"z/NgN^ _ NEGETHEXJoNVH n CJp"S@n2 nCJp"S@n2.@.A@fT~.@=@|`:g2BgM6`@?NBgM6`@?Nv0_WDRFino`BGLN^ _PONATCHTOKJoNV n //. Hz\Hn?<" _Cp@ S@n n "n @AH瀀Bg?.NY2LCN^ _\ONPPENDBY JoNV/. Bg?.NYnNv/. Bg?.NYNNdN^ _\ONPPENDINJoNV/. Bg/.NYN/. Bg/.NXNN^ _PONPPENDLOJoNV/ nCJp@"S@n.@R@>/. S@?N n //. HnHn?<" _Cp@ S@n.@@g* n //. Hz6Hn?<" _Cp@ S@nRG=G.N^ _PONPPENDST JoNV/.?<HzNDN^.NuEADPAT patternJoNV/ (n/ ?< HzxNHn?< HzhN/ HnHn?<"A"Lp@"S@nHn?<Hz8N/ HnHn?<"A"Lp@"S@n(_N^.NuEADCURScursorJoNVH(nB~`2Hn?<HzBNp/ HnHn?<"A"Lp@"S@nRG G oLN^.NuEADICONiconJoNVH nCJp@"S@n(nz.@>JGgT^2CA0B B WgRT`0AA0A A gL| n 0S@A H瀀Bg2CC1B?N2LRTRFT] FWgBg(/- Hz:Bg/- HnBg/-  NBLN^ _ NETTYPEN(&missing resource type name in string: JoNV/BGBgHn?HnN2=|A?<"z/HnHnNX/ /.NBgA?<"z/HnHnNg/ 0.S@?N=n|`HnN=|BgA?<"z/HnHnNg / ?.N`/- HzBg/-  NBgA?<"z/HnHnNg / ?.N`/- HzBg/-  NܚRFinoX`/- Hz`/- HzpBg/-  Nn`0@Bg4]@gS@gTW@gY@gW@g`^A?<"z/Hn?/ A?<"z/BgBgNZ` BgA?<"z/HnHnNg / ?.N`/- HzBg/-  Nؼ`BgA?<"z/HnHnNg / /.N`/- Hz2Bg/-  Np`/ A?<"z/Bg<N`h/ A?<"z/BgBgN`JA?<"z/HnHnN.@J@f/- HzBg/-  NBgA?<"z/HnHnN g/- Hz*Bg/-  N׬BgA?<"z/HnHnNJ g/- HzBg/-  Nl/- HzBg/- HnBg/- HzBg/- 0.H/?</- HzZBg/- 0.H/?</-  A?<"z/?.?./ NL`LN^.NuEADGNRL for  @ Raw binary from: offset missing in GNRL type$number of bytes missing in GNRL typemissing filename in GNRL typelong expected in GNRL typeinteger expected in GNRL typeGNRL"code expected after . in GNRL typeJoNV/B.->@=@~` OA>0p@n f|RGino.N^ _\ONETACHARJoNVH(n0,R@AA0A>0. @!gd_@g_@gR@ g`@"g6` m>l?-> l HhNKB`0->|? l Hh NK*`d |09@Rl`T9GRl`J9GRl`@->@=@|`&MA>0`@Gf S@?HlNJRFinoRlLN^ _\ONPDATEMEJoNVH nCJp@"S@n|BnBnBnBnBnRn0.AA0A A V.AnWgB.=| 0.AA0A>pABg?/Ng ?/Nh`$HnHnHn?<"ACp@ S@nRn.@nl/. A?<"z/Bg<N/. ?.N/. ?.N/. ?.N/. ?.NߺLN^ _PONAPPENDMJoNVHn?<p n0 nBh n| BgHnNTg(/.A?<"z/Bg<NX nRh` n0H n!@ n!nN^.NuEADSTRLJoNVHn?<p n0 nBh n| BgHnNg/.A?<"z/BgBgN` n0Y@ n1@ n0H n!@ n!nN^.NuEADLSTRJoNV/ (nHn?<p nBP| /.?,N/.BNHnNՊ=|BgA?<"z/HnHnNg /.?.Nޜ/.BgNޒHnND` /.BN޼/.p/NްHnN/.A?<"z/Bg<N;|>B.BgHnNԎg&HnN/.A?<"z/NRm>`/.BgNr n0H)@)n(_N^.NuEADMENUJoNV/. NԊ nBPN^ _PONEXTLN JoNV nCJp@"S@n/- pA?</-  /- HzBg/- HnBg/- Hz|Bg/- mT hHh?<Bg/- HzLBg/- mT0(H/?</- <.?</-  NN^.NuRITEERR, ID = in TYPE Bad JoNVB.HnHnNBgA?<"z/Hn/.N߄ g HzN`fBgA?<"z/Hn/. NT g HzbN`6BgA?<"z/Hn/.N$ g Hz"Nx`|N^ _ NEADVALU.control maximumcontrol minimum control valueJoNVH~B. (nHnHnNHnNlA"Lp@"S@nHnHnNBFBgA?<"z/HnM @AHpNZRF   FW@g  g HzN`THnHnN^||A?<"z/HnHnNBgA?<"z/HzLNxg|BgA?<"z/HzNTgB,BgA?<"z/HzN2g|BgA?<"z/HzNgB,.@nnJHnHnNBgA?<"z/HnHlN4  g HzhN`DHnHnNPBgA?<"z/HnHl NX  g Hz"NH`| LN^.NuEADTEMPBrefCon defProcIDNOGOAWAYGOAWAY INVISIBLEVISIBLE boundsRectJoNVH(n nBBgHnNgxBF`/ M @?6NRF Fo/ ?.N.g><`BG/ ?N.g><`BG/ ?N/ /.NBg/ A?<"z/N*<.@|H n LN^ _PONEADWINDJoNVH(n BgHnNgBgHnHnHnNgBG`/ O @?6N4RG Go/ ?.N".g<<`BF/ ?N / ?.N/ ?.N/ ?.N/ /.N"Bg/ A?<"z/NH>.@|H n LN^ _PONEADCONTJoNVH(n /- HzBgHnHnNBgA?<"z/HnHnNږ g4/- HzBg/- HnBg/- <"?</-  BgA?<"z/HnHnN< g4/- HzBg/- HnBg/- <"?</-  BgA?<"z/HnHnN g4/- Hz~Bg/- HnBg/- <"?</-  BgA?<"z/HnHnNو g4/- HzBg/- HnBg/- <"?</-  B/ ?.N/ ?.N/ ?.N/ ?.NHnHnNRA?<"z/HnHnNACp S@n0BgA?<"z/HnHnN g4/- HzBg/- HnBg/- <"?</-  / ?.NFBgA?<"z/HzNg / ?<N`/ BgNA?<"z/HnHnNACp S@n0BgA?<"z/Hz^Ng / ?<N`/ BgNBgA?<"z/HnHnN6 g4/- HzBg/- HnBg/- <"?</-  / BgNR/ ?.NHHnHnNBgA?<"z/HnHnN\ g4/- HzfBg/- HnBg/- <"?</-  / ?.NBgHnN|/- <"?</- HnBg/- HzBg/- 0.H/?</- <,?</- 0.H/?</- <,?</- 0.H/?</- <,?</- 0.H/?</- HzdBg/- 0.H/?</-  n/Bg/ C?<"z/ NT0 _|H LN^ _PONEADDIAL&--list ": Can't find item list ID in "Can't find refCon in "goAwayVisibleCan't find window proc ID in "*Can't find right coordinate of Dialog in "+Can't find bottom coordinate of Dialog in ")Can't find left coordinate of Dialog in "(Can't find top coordinate of Dialog in "Dialog JoNV/ (n/- Hz BgHnHnNBgA?<"z/HnHnNԈ g4/- HzBg/- HnBg/- <"?</-  BgA?<"z/HnHnN. g4/- Hz Bg/- HnBg/- <"?</-  BgA?<"z/HnHnN g4/- HzBg/- HnBg/- <"?</-  BgA?<"z/HnHnNz g4/- HzBg/- HnBg/- <"?</-  B/ ?.N/ ?.N/ ?.N/ ?.NHnHnNDBgA?<"z/HnHnN g4/- HzhBg/- HnBg/- <"?</-  / ?.NfHn?<Hz N/ HnHn?<"A"Lp@"S@n/- 0.H/?</- <,?</- 0.H/?</- <,?</- 0.H/?</- <,?</- 0.H/?</- HzlBg/- 0.H/?</-  /- Hz0Bg/- HnBg/-  (_N^.NuEADALERAlert stages are --list alertCan't find item list ID in ")Can't find right coordinate of Alert in "*Can't find bottom coordinate of Alert in "(Can't find left coordinate of Alert in "'Can't find top coordinate of Alert in "Alert: JoNVBg"nA?<"z/Hz2Ngn n/(?. NN^ _\ONPPENDTY DisabledJoNVH(n?. /.N n fTHlHlNVBgA?<"z/HlHlN gHzbNP/,?<Nh/,?,N`,BgHlN8/,A?<"z/?<<N gHz0N/,?<Nʪ/,?,N0(_N^.NuEADPICICan't find picture ID in:JoNVBg/.N4 n/(BgNRN^.NuEADUFIEJoNV/ (nHlHlNA?<"z/HlHlNTA?<"z/HlHlN8/,BgNx/,BgNnHlHlNBgA?<"z/HlHlN* gHzN~BgA?<"z/HlHlN gHzXNPBgA?<"z/HlHlN gHzN"BgA?<"z/HlHlN̠ gHzN/,?,Nɞ/,?,Nɒ/,?,NɆ/,?,NzBgA?<"z/Hz^Ng?</.N`BgA?<"z/Hz&Nװg?</.N`BgA?<"z/HzNׂg?</.N`dBgA?<"z/HzNTg?</.Nd`6BgA?<"z/HzN&g?</.N6`BgA?<"z/HzJNg?</.N`BgA?<"z/HzNg?</.N`BgA?<"z/HzN֜g /.N`BgA?<"z/HzNrg /.NN`XBgA?<"z/HzvNJg /.N`0BgA?<"z/HzDN"g /.N`HzN(_N^.NuEADITEMNo such itemlist kindUserItem UserFieldPicItemIconItemEditTextStatText RadioItemChkItemBtnItemResCItemCtrlItem#Can't find right coordinate of item$Can't find bottom coordinate of item"Can't find left coordinate of item!Can't find top coordinate of itemJoNVH(nHn?<p nBP| HnHnN\BgA?<"z/HnHnN gHzNV/- HzBg/- 0.H/?</- HzBgSn/.?.N=nBG` /NRGino n0H)@/- /,?</- Hz*Bg/-  )nLN^.NuEADITEM0 bytes. items, Item list: Can't find nItemsJoNVH(nHn?<p nBP| HnHnN$BgA?<"z/HnHnN gHzN/.?.N=n|`:Hn?<Hz\N~`/.OA0p@?NRG GoRFino n0H)@)nLN^.NuEADPATL, pattern listCan't find number of patternsJoNV/ (nHn?<p nBP| HnHnNBgA?<"z/HnHnN gHzNBgA?<"z/HnHnNƔ gHzN lCp@"S@n/- HzBg/- HnBg/- HzBg/- 0.H/?</- HzhBg/- 0.H/?</-  A?<"z/?.?./.Nۖ n0H)@)n(_N^.NuEADRAW @ for  @ Raw binary from: Can't find offsetCan't find nBytesJoNVH mv0( R@ mv1@ Hn?<$p(nHl?<pB)mvB, | B9|p)@9nBBl"Hn?<"p&nBSBgN>BgN</ ?N/ ?N |H@8=Dz`/ BgN.NNREino0H)@/- HzBg/- 0.H/?</- Hz\Bg/- /,?</-  )KJXf+nX+mXP` mP +nPLN^ _TONAKEABMA is Bitmap length forJoNV/ n CJp@"S@nA?<"z/N~` nS@?NPRG GoHmBg(.N^ _\ONEADALI1JoNVH n CJp@"S@nBnHnHzvHn?<"A?<"z/NHBgN0H+@BNB,~`BNr ;@RG Go ^/Hm4 fBgNzp@2@;ABN,0-k|nA2IDA0 <g6/- HzBg/- 0-H/?</-  HmBg(`p mg=F~`BgN;_RGino`6BN ;@ Q*. g=E`JoBgNNS`` mfHmBg(LN^ _\ONROCESSOBad blocktype = .OBJJoNV nCJp@"S@nBgA?<"z/BgN,=_=n N^.NuIZEDRVRJoNV n CJp@"S@nBgA?<"z/<N=_N^ _PONUTPUTOBJoNVHBn 0.2SAC@A@:00-H|<0-FS@=@BG`&0S@A @ABpf @=@ ` VFRGinoLN^ _TONETJTOFFJoNVHBG0-H|<0.2SAC@A@800-FS@=@BE`0S@A @ABpfRGVFREino=G LN^ _TONETJTENTJoNVH nCJp@"S@nHnHzHn?<"A?<"z/NB ^/Hm4 f(BgNnp@2@;ABN, mfHB-z/p/" =@~`$0S@A @/BgN~2 AB1RGino` mfH|z/p/" =@~`$0S@A @/BgN,2 AB1RGino`Z mfH|z/p/" =@~`$0S@A @/BgN2 AB1RGino` Y/Nd mW@g  g\/-  /- HzBg/- HnBg/- HzPBg/-  /- pA?</-  N#zHmBg(LN^.NuEADJTAB4 is not executable!Fatal Error -- the file .OBJJoNVH-HgJS@g S@g`,;mlH=mH|`0S@A @A:I8 S@|> T@2SAC@AB;pr V@2SAC@AB;pt)mr0S@A @AB;pr R@2SAC@AB;pt)mr X@2SAC@AB9pRFinoP`d;m\H;m^F:-F/- HznBg/- 0-HH/?</- Hz Z@2SAC@AB20H)A T@2SAC@AB;pr V@2SAC@AB;pt)mr R@2SAC@2-FA|4SBEAAB40ABp9B mHf9E`8 |2SAC@"RA4SBEAAB40ABpH…9BlRFino`;m\H=mH|`0S@A @A:I8 S@@|> Z@2SAC@AB20H)A T@2SAC@AB;pr V@2SAC@AB;pt)mr R@2SAC@AB20m`H A9A |2SAC@"RA4SBEAAB40ABpH… 9BRFino$LN^NuAKESEGL #JTEntries = #Segs = JoNV/ nCJp@"S@n mv0( R@ mv1@ Hn?<$p(nHl?<pB)mvB| lCp@ S@nB9|p)@BlB9|0"JXf+nX+mXP` mP +nP-n (_N^.NuEFINECOJoNVH nCJp@"S@n=mHBG`BA?<"z/N(_9GJlf9| " lf 0,"X@9@"JGg0S@A @A<"0X)A`-HgNS@gS@g4`v0-H|2SAC@AB;pF0-F@|H+@B`D0-F@|H+@B`20-H@|2SAC@AB20m`H A|H+AB)mBRGino LN^.NuEFINESEJoNV nCJp@"S@nA?<"z/N"N^A?<"z/NN^.NuAKECODEJoNVH-]gJ/-  /- HzBg/- -Br/?</- HzTBg/-  /-  BgNv -Br Ёr?Nd;mLr;mNt-mr;mPr;mRt-mr .Ю( l(</NX -Br/NJp /NB-Hg6S@g S@g`0-H|<=mH~`\Bg?Nx=_z`B T@2SAC@AB20QA?NVF? R@2SAC@AB?0NZF?. GNW GHmW GNW GAW GCW GEW GGW GIW GKW GMW GOWg|`B..N^ _\ONHOULDPAJoNVH>. (n, gBg?/.NRg|`B,`bB,loX-Hg:S@gS@g`F lH@| T@>`./- HzBBg/-  ` lH @| T@>=GLN^ _\ONODEFILT Logic error!JoNVH n CJp@"S@n8.JDfN`0S@A @A:IB.-Hg8S@gS@g0`V0-ZmFr H@=ABg?NzNVBg?NNJ`(0-ZmV2-HA@| =A?, N(?,N HnHzHn?<"A?<"z/Nn/, NBBgNp@2@;ABNZ : mg Y@H/N`rBNv-_ -g4/,p/" =@~`BgBgN/NNRGino`*/,p/" =@~`BgNNVRGino|Hm4 E^gHHmBg(  gl/-  /- HzzBg/- H/?</- HzVBg/- HnBg/-  /- pA?</-  N>LN^ _\ONUTPUTCO. of !Fatal Error -- cant find segment .OBJJoNVH(n/- lHh?<Bg/- < ?</- /,Bg l@r@=A~`/- < ?<RGino/- HzPBg/- /,?</- Hz$Bg/-  LN^.NuRINTOBJ bytes long. is JoNVH(n+LTBg/,HzNgB0,H@H@J@J@fB`&Bg l?<"z/BgNt0H)@/ N`Bg/,HzNhg*Bg l?<"z/BgND0H)@/ N`Bg/,NgBg l?<"z/Nb0H)@/ NZBg/,Hz>NgpJgj lp0A A.V lr0B B&Vg>=|AprCA l/Hn/,Hn?<" _Cp@ S@n`(Bg/,HzNrgp)@B, /,N`Bg/,HzNJgB, / Nz`Bg/,Hz^N*gpD)@B, /,N`Bg/,Hz0Ng)|B, /,N`Bg/,HzNg8| Hm@?<p m@BPBg/-@NN0H)@)m@B, `DBg/,HzNg2Bg l?<"z/<N\0H)@| / N`Bg/,HzfNJBg/,HzRN<gnBg/,NHz6/,Hn?<"ACp@ S@n l@R@H)@p",SCA lCp@ S@nB, `pBg/,HzNgp )@B, /,N0`HBg/,HzNgB, /,HlN`"Bg/,HznNlgB, / Nʜ`Bg/,HzHNLgB, / N `Bg/,Hz"N,gB, / N$`Bg/,HzN gB, / N^`Bg/,HzNgB, /,HlNЬ`|Bg/,HzNgB, /,HlNL`VBg/,Hz~NBg/,HzjNgB, / N`&Bg/,HzBNpg8| Hm@?<p m@BPBg/-@NL0H)@)m@B, `Bg/,HzN&g8| Hm@?<p m@BPBg/-@N0H)@)m@B, `Bg/,HzNg6| Hm@?<p m@BPBg/-@N0H)@)m@B, `HBg/,HzTNg6| Hm@?<p m@BP/-@N m@0H)@)m@B, LN^.NuASEOBJEGNRLICN#BNDLFREFANYBRAWBCNTLWINDMENUDITLLSTRSTR#DLOGALRT STRGSTR PICTHEXAICONCURSPAT#PAT DRVRFWIDFONTJoNV/ (nB.(zJg" TXC p Vf |`` T(`(_N^ _PONINDTYPEJoNVH nCJp@"S@nB. =|.@>JGf`-| n\2.CA0B B WgRn`־nl`HACX 0|`NBg0.AA0A?NMA0`@_g`0S@A A RnRF Fo| A?<"z/HnHnN־n^2.CA0B B=VgRn`0.AA0A A=f RnA?<"z/HnHnNrACjp Vf-|STR Bg/.HmvN*g`.Hmv?<pRmL(mv(z)n)nBl +mvzLN^.NuYPEDEFI STRGTYPEJoNVH nCJp@"S@n n CJp@"S@n&n0+ R@7@ Hn?<$p(nHl?<pB, B)KB| lCp@ S@nHnHz"gB`Hl?<p lCp@ S@n9|p)@9n B9n".@J@o n1mNRmN` n1|/.NJXf+nX+mXP` mP +nPLN^ _NAKEOBJEJoNVH&n >.(nB.BSBn|BBn_"gOA0p@ @@f z=SBS`rOA0p@ @0\OA0pA A9_g&0 OA0pA@|06|`OA0p@ @-fx`BRG`\g0.@Sg0D@6LN^ _ NETNUM JoNVH nCJp@"S@nB. nB nB nBP n BP.@<.@J@f`~G\OA0pA A WgRG`޼Gl`8G\OA0pA A,VgRG`޼Gl(/- HzBg/- HnBg/-  `r=GzE\KA0PA A(VgRE`=|n\2.CA0B B)VgRn`ּEl:nl=FBg R@??/./N g`Bg R@??./. /N g n BP| nf`>n]OA0pA A!VgRG`ܾnm0 n/Hn? D?Hn" _Cp@ S@n nB`X n/Hn? D?Hn" _Cp@ S@n n/Hn R@?0.GS@?Hn" _Cp@ S@nLN^ _NARSESTRmissing comma in: JoNV/ nCJp@"S@n/- Hz"Bg/- HnBg/-  /-  Hm0Hn?<R>JGg*/- HzBg/- H/?</-  NHnN~A~Cp@ S@nHm04 g(BgHnNgBgA?<"z/N gBgA?<"z/HnHnHnHmJ/NgHnHz"gACp@ S@n mvXCp VfA?<"z/N"`^ mvXCp VfA?<"z/?.Nޞ`0/-vA?<"z/A?<"z/?.?-JN`/- Hz4Bg/-  N`Hm0Bg(.N^.NuCANFILEp)Syntax error in resource definition file.ALI1CODE*RESET Error in ScanFile"Scanning resource definition file JoNVBXBzBmNBmLN^NuNITOBJLJoNV/-/<"JgBgN`N^NuADTOBLOJoNV//-jN/-nN -nj/N -fn/N~`BgNRG Go.N^NuRITEHEAJoNVH(mXB+mj g)G/,NBg/,Ntg l?<"z//,N`Bg/,HzNng l?<"z/?,NJ`Bg/,HzN@gBg l?<"z/<N<`l, g l?<"z//,N`L, g6Bg l/(Ng| l?<"z//,NB-` /,/,N ,ЇX.(T`LN^NuRITEODA FWIDCODEJoNV/+mn~`BgNRG Go -bn?N -^n?N .N^NuRITEMHEJoNVH&mz gb(mX'm gPfF?,NBg/,NvN?,"NBgBg/,NhNnNtBg/,NLNBN(T`&S`LN^NuRITEOPTJoNVH+mb0-LS@?NT(mz g-]gX/- HzBg/- Hl?<Bg/- HzBg/- 0, H/?</- HzdBg/-  ~`0S@A4p@?NRG Go0, S@?N ,b?N(T`\LN^NuRITETYP objects. has Type JoNVH+m^(mXB(mX gVJgL l/HzZ"g:)G l@?N l?<"z/N l@HЇR.(T`LN^NuRITENAMJoNVNNVNNNlNNTN^NuRITEEVE"NV,_NU2"+O:+N6B"+_2B-NV/- p A?</-                 ' :0 ;/!3!42!53!64!75!86!97!:8!;9! :">"?="@>"A?"B@"AMNLOMPNQORPSQRUVTWUXVYWZX[YZ]^\_]`^a_b`cadbec fd ge hf ig jhkiljmknlompnqorpsqtrusvtwuxvywzx{y|z }{!~|"}#~$%&'()*+                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A                                                    !                              !" #!$"%# &$ '% (& )' *(+),*-+.,/-0.1/2031425364758697:8;9<: =;!><"?=#@>$A?%B@&CA'DB(EC)FD*GE+HF,IG-JH.KI/LJ0MK1NL2OM3PN4QO5RP6SQ7TR8US9VT:WU;XV[Y?\Z@][A^\B_]C`^Da_E`cdbecfdehgjkiljmknlompnqorp sq tr us vt wuxvywzx{y|z}{~|}~           !"#$%&      !"#$%&'()*+,-./0123456                 ! "  #! $" %#&$'%&)*(+),*+./-.231425364758697:8 ;9 <: =; >< ?=@>A?B@CADBECFDGEHFIGJHKILJMKNLOMPNQO PSTRUSVTWUXVYWZX[Y \Z ][ ^\ _] `^a_b`cadbecfdgehfigjhkiljmknlompnqorp qtusvtwuvyzx{y|z}{~|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCD                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9