-not a Macintosh disk-ChJ@ICBH@%a'_xٰNP"N,L 8!"@$|Gn"`I N.@A,H<( F<B<H111.Bx<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 _!@"|xEz En"`CE"|xN"Ҹ< A  33"|@E E4n"`C&E"|@.N _LHNFLN*8&E@<<'CJJKK f`  f `><$CS*<FF4>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/A lNNu _.NHL$ 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 H>8$O&j.(j4,*8:*,BB6*2SCCn`8CL0@D@04"F K0HEY@2< Vb,g`aJaBVgbHE6SCCo`p`HE4RBCo8B@ j(0 j$L| _pN am znNu _"_$_$0H2< @`Q`BQBNNV;n *N^.NuEVINIT NVH,. ^J]g n0`4B?N. f n0`/.//. /.N6(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?-,N.H|)?NN^ _TONRAP NV.HgVS@g`J.f& -`мS//<N/<NB+_`-m` . ѭ` -`o<Np`B . \J.f/-\/<N4/<N+_\-m\ -\l<N,N^ _PONGETSPACNV .мS//<N/<N-_ .=@ N^.NuINDSPARNVH.. Bg/N0Hހ m0.@I/./<N 8//<Np @n ?.Bg?<BgNLN^ _ NETMMU NVH+| d+|l+|(+||+|+|t+|(|;TV(|;T|(|.;Tz&| n!SLN^.NuETVARS NVH/Nt;| .䐼/+@ .м/м+@+|`*<(< E"D +@\&|?-|0-VS?NHnHmJNJngp+@JBBg/-BgNz+_ -Э+@XBB<0<H/BgNPN+_P+mPBG` m @I G~V GTVgd Gl|p@ @8`$ Gf|p@BT`| p@BT H< @"@=A?.??<BgNRG Gox mI|p@BT mIP|p@/-P/<N* 8LN^NuOOTINITNVH(nB BgNBgNHH,BgN0HѬ f,/, N"BgNBgNHH,BgN0HѬ f,/, NBgNrBgNjHH,BgN0HѬ f:Jf< N/, NBgN2BgN*HH,BgNb0HѬ g<NLBN,BN+_ n/BN|  _r Ё0p//-`N/-/-`N&m`:=E E0o<N0<H+@l+| -lЭd n2HҀ -Ё"-Ҁ(Bg Э/N0Hѭ -Є+@B</-BgN+_+mh -dЭh+@p -lЭp, n0HІ+@ -Э+@ -Э+@?<f/-/-?<Nb-m/ /./-N n LN^ _ NUILD_SYNVH(nBGBF. gB `P-n n0. PoB."` n0. A-H&n/+/<N  n0>+<+/, NBgN<BgN4HH-@BgNj0H(٬ JVJ_gB."`4JGW WJGV WgJFf n `H n n/B."n/BgN2  _ BNB-_JGf n Q/ n P/Nr` Q@H/ n P/NZ|B. n=h-nA-H n-P/./.p/N JGgR-mBg n/( n r Ё/ n P/ nP/ | ? Q@?N9_Jlg< N, nQ f|"LN^ _NOADSEG NVHBBg/-tBgN+_x -x"-Ҁ+At(|`p}//<Nn -Пx((|p}//<NN -Пx(?<}/-x/-t?<N&|BSLN^.NuLLOC_SCNVHAC 0BgHnNz_m+m-gBBg/-BgNP+_`+m-gBBg/<BgN, м,BgBgBHnBgHnHnBg/.N g<NACD 0BgHnN  g B-n`.BgBgBHnBgHnHnBg/.Nx g<Nf .@+@ -Э+@` B -@+@ -м@+@?</-/-?<N@ <逐.JfB` .ЇP-@JfB` .ЇP-@-g -Ї/ -Ї//./.N`/-/-BBN(|p((|t(LN^.NuOAD_DEB SYSTEM.DEBUG2 SYSTEM.DEBUGNVH nCJp"S@n2&n (nBBgHnN dgZB /, N NBgN BgN HH(BgN0H* f&.B</BgN&B /, N //NlLN^ _ NOAD_UNPNVBgBgBHn</. /.Bg/.N g<NN^ _ NOAD_LLDNVH(n 0-N|>Jg,, .* Ю(H//<N( Д-@`,.(.H//<N-_?//?<N. .P/NdLN^ _NNSTALL_NVH(n=n ~`/, N BgN p_BgN fHH(BgN 0H-@Jg .Ѭ `<N~ .fBN (BN ( GfAB0pB5pB`ACZ 0z`BgN _ .ARE EoHn?<?<HnNAC 0HnHzNg(AB0pp @AB @AB`2HnHzNPgAB0pB5pB`App| 5pgnBg?/.Hn @AHp @AHp</.NX g<NF?. @A/0 @A"0Ҽ/?<NHRGinoLLN^ _ NOADCODEkrni NVBBg/-BgN+_?<e/-/-?<NN^.NuAKESUPSNVH(m . R A T&@-kLN^ _ NINDMAINNVBg/-NF0HѭB</-BgNx+_?<g/-/-?<N\Bg/-|N 0Hѭ|B</-|BgN>+_?<{/-/-|?<N"N^.NuLLOC_OPNV A0C ArC 0AC 0/NLHnHm/NFBgHn0N g< NHnHn/NBgHnrN g<N^/NZBg/.Hn$/N;_N/./.Hm/N-UgNj/.$?-N/N@/N2 n /B/.$0-NH//NR  _ /NBNj+_N^ _PONOADSYS $ SYSTEM.UNPACK SYSTEM.OS SYSTEM.LLDN :NV,_NUvN ,+|v mv PVD@UNHmHmNHm?- -|Э//-NzNZN N]N NuN^NuOADER NVHAv(HA^&HHn?-.0-0H".Ҁ// / NrJng<NLN^.NuEAD_PAGNV0.HBH"-DҀ-A0.HBH@J@=@/.NvAv0.HЈ-@ N^ _TONIND_SENNVBH nCJp"S@n2 n BBgA/A/Nz-m2Av(H&L U.=m6B|`A^-HHAv(BE`:HnN?-.0-0H".ҀH҅///.HNhؼJnNg<NRE Eom6l^Bn So4 X/ U/0S@?A/?<$Hn/. N n gRn G0.D@@20HҌ-A n-P`/ /?A/?<$Hn/. NRFinBo$ n g< G0.D@@20HҌ-A/.HnP?<NN n/B?.vN4  _ LN^ _ ND_SEARCNVH n-h .S/0-:H/N ;@Z-n p+@V;m:\BF` AvIBBlRF Fo=mHnNBgHn?->N>H/p6/NNZBp6/A/NACp S@n0HnN^J.gHHnHnN .Wgz n/B?.N  _ `SFRGm>fBGBNJFfELN^ _PONOOKUP_ENVH.<A"G";n .;m.,?.?-.N;n0BN&Av(HJg<NH;l~:+lD;lB;l>;l@;l<;T8;l26+l.2 2f<N m8lB?,N&_+SH+kL+kPLN^.NuNITMEDINV m8lBg/.HnN2_`/.HnHnNn .gB/.N-_N^.NuPENINPUNVH(.BGBF Go<NR Av:0JEf<N8 EHl@ AvH"Ұ n n Jf<NHH " n ``RGE`LN^ _ NIND_POSNV-mV/.0-:H/N+_VJV]2-ZHV]g<N0-:H/-V/N2 .;@\ -Vg/-VHnHnN/.N"N^.NuILLBUF NV0-\m:f -VR2-:H//NNT0-\AvpRm\N^NuETBYTE NVHBgNHH<BgNH>JGl H м> G=@LN^NuETWORD NVHBgN0H//<ND,BgN0H.Jl޼ Ї-@LN^NuETLONG NVH,. 0-:m\>HǼl>JGo0-\AvA//.H/NH߮Hǜm\0-:HnJV]2-ZHV]g<N -VR/HnHnNn-nA^(H/0-:H/N*l-EJoZHn?-.0-0H".Ҁ/?././ NjJng<N~0-:H/./N(ٮ .Ѯ .ѭV`:Jo -VR2-:H//NNhJfLN^ _PONOVEMULTNVH(n0,k @nH0;N *6BN\BgHlN_`n/,N`dBgN_`XBgN9_`LBN)_`@/,/,N:`2&l.,/ ?-.0-0H", Ҁ/?,/ /NP`<NhLN^.NuRIVER_C//0/2/ AH@B@2/Ё/@" /WXNuNV// /"/N:/A" N^/WXNuNV// /"/N/@" N^/WXNuH>*jD,jD$HBJBf6B@H@g4HB04"B@H@`$&BBxԂрҁmRQJjDjDL|NuNuNuJoNu$_0 _"_J @o4$ Tg,2ABAgSBgS@2@ISA QS@kQN$_0 _"_J`!QN$_02 _`QNHBB oJ0/2/gk gRBSAn` R gSBRAk?B/oL\NuHBB oJ0/2/gk fRBSAn` R fSBRAk?B/oL\NuHr`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\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`QNu !n  ^Workshop Pascal 9 3.00)? JoNV TRANS|̃ ^ $ :a$0kT/ k ^!n$4#"##"#! Lr,.o M  RR {` *80 6*KR\xkx{~ !H",#4$8%D&H 'N0R1` 2p3x844546 78 9: ;<<$F.1 .1m$ALERT|HH$LIBTK/PABC.TEXT뜭,,$MAC/Mac.Boot $MAC/MacCom.Obj''RR$MAC/RMaker.Obj''``$QD/boxes.Obj&&$QD/boxes.text wϴ$QD/graf3d.Obj o~**$QD/graftypes.text p{p88$QD/Hardware.Obj &&$QD/m/boxes.text q<ϳ$QD/m/sample.textq$QD/sample.textm ϴ{00$QD/support.Obj&˝& $QP/BOXES.LLIST.TEXT  $qp/boxes.textk)0t $QP/Graf3D.Objo~**$QP/Hardware.Obj @ C$qp/mainbaud.text kJ0$QP/Make.Text&b$qp/MBAUD.CONFIG.TEXT!\J0+ $QP/PHRASEwOyx$QP/UQPortCall.Obj?F$QP/UQPortGraph.Obj"$QP/UQPortSoroc.ObjIL$QP/UQPortVT100.Obj$QP/UQuickPort.Obj$QPlib.ObjҝNNNNNNNN( MAC/Mac.Bootc.Boot. . ̜ڝ'~ ^v TT NV n  MMAC/MacCom.Objom.Obj . ̜ڝ'~ ^'v' TT NV n ) R)MAC/RMaker.Objer.Obj . ̜ڝ'~ ^'v' TT NV n 0 {0 QD/boxes.Objes.Obj. . ̜ڝ'~ ^&pmr& TT NV n   QD/boxes.texts.text. . ̜ڝ'~ ^wpmvϴ TT NV n   QD/graf3d.Obj3d.Obj. . ̜ڝ'~ ^opmz~ TT NV n  QD/graftypes.texts.text. ̜ڝ'~ ^p{pmp TT NV n  ns the source and object files of eight QuickDraw demo programs written by Bill Atkinson and updated by me and Dana Tom to run uQD/Hardware.Objre.Obj. ̜ڝ'~ ^&pm& TT NV n   QD/m/boxes.texts.text. ̜ڝ'~ ^q TT NV n  QD/sample.texte.text . ̜ڝ'~ ^m pmϴ{ TT NV n  QD/support.Objrt.Obj . ̜ڝ'~ ^&˝pm& TT NV n   QP/Graf3D.ObjT.TEXT'~ ^opm~ TT NV n  6QP/Hardware.ObjTEXT'~ ^ @pm C TT NV n  K QP/Make.TexttextEXT'~ ^pm&b TT NV n  R QP/PHRASEnput2.TEXTT'~ ^wOpmʜy TT NV n  \QP/UQPortCall.ObjIC.TEXT'~ ^?pmF TT NV n  k QP/UQPortGraph.ObjC.TEXT'~ ^pm" TT NV n  xQP/UQPortSoroc.ObjC.TEXT'~ ^IpmL TT NV n  {QP/UQPortVT100.ObjC.TEXT'~ ^pn TT NV n  ~QP/UQuickPort.ObjTC.TEXT'~ ^pn  TT NV n   QPlib.Objib.Obj. . ̜ڝ'~ ^ҝpn  TT NV n v vALERT-ALERT<xSn`N^ _PONД~|pm\NV n $ $LIBTK/PABC.TEXTC.TEXT`N^ _PONД~pm`NV n  QP/BOXES.LLIST.TEXT~pm NV n  4 QP/boxes.textT.TEXT~k)pm0tNV n  8 QP/mainbaud.textEXT~kpmJ0NV n  DQP/MBAUD.CONFIG.TEXT~\pmJ0+NV n  HQP/MBAUD.VT100.TEXTT~bCpmJ0ZNV n  N$QD/support.Obj&˝& $QP/BOXES.LLIST.TEXT $QP/boxes.textk)0t$QP/Graf3D.Objo~**$QP/Hardware.Obj @ C$QP/mainbaud.text kJ0$QP/Make.Text&b$QP/MBAUD.CONFIG.TEXT!\J0+ $QP/MBAUD.VT100.TEXT"bCJ0Z$QP/mouseinput.text#钜l$QP/mouseinput2.TEXT$+ $QP/PHRASEwOyx$QP/phuser.text%JJ$$QP/QDSAMPLE.CONFIG.TEXT&v ƝJ488$QP/qdsample.pic.TEXT'%4z44$QP/QDSAMPLE.SAVEPIC.TEXT/n隝o&<<$QP/qdsample.text(k) /,44$QP/ubaudrate.text) $QP/UQPortCall.Obj?F$QP/UQPortGraph.Obj"$QP/UQPortSoroc.ObjIL$QP/uqportuser.TEXT*KkKk$QP/UQPortVT100.Obj$QP/uqpsupport.TEXT+JLS $QP/UQuickPort.Obj$QP/usertab.TEXT,KG K$QP/uuserterm.text-JL $QPlib.Objҝ$qpsample.note.text.K>ߝo&7$qqp/uuserterm.text-JL @@@@@@@@$($QD/support.Obj$Intrfc/QuickDraw2.Text$MTWOTEXT.TEXT$Pascal.Obj$pzl_ctrl.TEXT$QPlib.Obj]$Serial/PipeImpl.Text$SYSTEM.BADPAGEMSG.LOTUS$system.PR_Imagewriter / || DMPH$test.TEXT$TlAsm/SysErr.Text$UREADER2.TEXT$XTWOTEXT.TEXT${F38}}${T3}funchintsX0h@xP(QP/mouseinput.textTT~钝pmlNV n  RQP/mouseinput2.TEXTT~+pmƜNV n  `QP/phuser.text.TEXTT~JpmНJ$NV n  pQP/QDSAMPLE.CONFIG.TEXT~v Ɲpm֝J4NV n  xQP/qdsample.pic.TEXTEXT ~%pmۜ4zNV n  QP/qdsample.textPIC.TEXT!~k) pm/,NV n  QP/ubaudrate.textIC.TEXT"~pm뜒NV n  QP/uqportuser.TEXTC.TEXT#~KkpmKkNV n  QP/uqpsupport.TEXTC.TEXT$~JpnLSNV n  QP/usertab.TEXTbjTC.TEXT%~KG pnKNV n  QP/uuserterm.textTC.TEXT&~JpnLNV n  qpsample.note.texte.textXTEXTONД'~K>ߝpn%o&7NV n  QP/QDSAMPLE.SAVEPIC.TEXT_< }n隝pmo&NV n  ="QDInit(@heapBuf, @heapBuf[10000], @HeapFull); { Must do this once at beginning } "OpenPort(@myPort); *) "WITH config DO $BEGIN &tosaveBuffer := TRUE; {save lines in buffer} &passApplePeriod := FALSE; {pass apple '.' to main program} &showInputPanel := FALSE; {display input panel} &twoPanels := TRUE; &vhs := v; {vertical or horizontal split} &grPanelSize := -150; {initial width or height, if < 0, text Ipanel is below or right of the graph panel} $END; "QPConfig (config); {main program should call this before any screen i/o} "Writeln ('This is a QuickDraw sample program running in the QuickPort, with both'); "Writeln ('text and graphic panel showing up and down here. You can close down the'); "Writeln ('text panel to show most of the graphic panel.'); "PaintRect(thePort^.portRect); { Paint grey background } "InitIcons; "DrawStuff; "Beep (2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for 6500 milliseconds } H(* Program has to use Beep instead of Tone. Same parameters. HTone(2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for `500 milliseconds } H*) "myPicture := @myPicPtr; {set up picture handle} "SavePicture (myPicPtr); {save the current QuickPort's picture into some other place} "DrawSomethingElse; "writeln ('Type return to restore the previous display'); "readln; "EraseRect (thePort^.PortRect); {you must do this before DrawPicture to get rid of the current picture Isaved in QuickPort} "DrawPicture (myPicture, thePort^.PortRect); {restore the display before DrawSomethingElse} "ReadLn; { Wait until RETURN entered before terminating program } END. RAMBOOT RAMBOOT RAMBOOT LK`System Finder Macsbug Disassembler StartUpScreen Finder Clipboard File B"8HA An,rPBJgpH@ѸѸ$ѸfѸ r x Aor/pA BQ4:p"CTSB2BBBa#FXUAf3 _W!YO/ _W!YO/abf BgB/ Op)ɩXO`a y@NО2 O1|1|1x2Nu~`JGgNu `apd`pBQ/K O PJ@Nuv2 OtE$BB$f,f&(|FJCk.f""x $$XJ4$ft02Nu2|`؆|` "H O`/<VB/<`@BgKEr/HRHoHjBgBNut hPASLIB UCLASCAL/IOPRIMIT8SHELLCOM9PROGCOMM:STDUNIT XBLKIOINTfBLOCKIO gPASHEAP hZ.(VI:YLNXNNNšNPASLIB1 PASIOLIB`SgPASinibSULib cMainProg I:Y9(Bo>mVPi/~`GonXimg]Zf S i`XRo B@^cg B@o `iG:ooGPiodx(dPޣCQUIREAJUnable to acquire a disk./Please insert a diskette (type CLEAR to abort) 9@Gp!Kilp!Kxpڼ!xtxmg4xcAx0F A-fxxcTdxvxx\vnfl-LlxTt>JGf8EHdUHl-L;l"Lp!K^B/ٷldTLxLpڕ!vٯxxtvnjxJxcY@Td*x*fUxmg mFreeAocks Deleted data fork for file Deleted resource fork for file 9@riJH= o@ O=+g8GoGH-oGoo-_|+HUW0)AcN2IIFJlg jdx-oJlg idx-ȬBB[+BB3BW0-̼;@H+h$H/naޒROCESSNG? !Delete 94;i |-L?o |dxw-mVi,H{8Fv|xTJ_o$tc.v|xTA] |=F`ޒILDCRDS?9sQxHi|摼!|0F Afnٮ|ddxٿ|d<<پm5g2ٺ|dpپh|jdx-f`7o`>o|dx-xm|`GoGO x,n2ޒELE#MA No )such filesT9[F0-X@iUAc@=AISKADD F9aCxU^Z&)=Zfr)=Zl)=o-FkZfg>P6ڇCdٸxl^ZfJ)=o-ޣJECTSONP#Calling fs_utilities fromjectSonylowerCalling UnMount from EjectSonyLOWER9(` E`B@m .si`o!J_=G`4HnoZ?i ~`o!J_=G` SHnoҹREEBLOCF90-ώЮiS 0- x |xgToL>GlBP? BE`oET!lJ_REHnܮo=GG`<.B`ody=_GnޒRvEERUN F9XGp!KP `o§pڼ!BٞxlJ] ^ߴip^ `i07P ETDEVICF9X'ip!KٳnxmL^٭xT>JGflÂpڼ!`({ٳdTlxllp:ڼ!H?nG< JG%f<4c.lA]TlcTJxJpڼ!`*4cF]T(x(p*ڼ!lxTJ_o&L` >+lH'l(lj/dn]T?G]Tٳ]Tijc.lATx]dx-nETRESҚ=F9[F4i,HoFޒEAV=E &F9[F4;i CvvvvUxJl_ l CvvvWx pڕ!vvx/XFZlPa`=mCxlonZfor>F`PZUOg0لxP6C-xlB``HPo =FkC&|A*-x@oo=FEZd<@BB-B-BmQ.+_0B-}Cڈ;|;|}Cpڼ!ޣNITMA.N{#3.0} MacCom: Delete,ject, Help, Init, Lisa->Mac, Mac->Lisa, Names, Quit, ? -LOWER -KEYBOARD'Calling Declare_excep_hdl from InitMain MacComFinish"Calling fs_utilities from InitMainLOWER6Youayave the wrong version of the OS to run MacCom0Couldot get a valid device number for the Disk-9[FBHEL8SޣNITNAMEF9<JGl J|>GOdxRF Fio̅GH+h.HRE ρH@QJ@J@f.GٸנT .f/odx(dP/GuGoGH/d|GGzoG0- d|GoGo{ d|GnޒROCESSN byte allocation blocks = Number of free Number of files =  &A-@------- &&&&&&&&&&&& ---- &----& -H----& ---------AFileName,&&&&&&&&&&&& Data,&RSRC, ylags, User InfoDirectory of Mac disk 9ՠWiA|-L7oWiA|dx-mVi,HzFޒILDCRDSF9հsQxH^i|摼!o|wdx-Bm`GoGwOܝ x,n2ޒISTMACNNo files on this disk.9[FQ\iޣACDATE F9[F} ?r@Ё ?U@Ti7ޒARK;MAP F9[F?ninGiGޒIN ?&&F9BF0-] ~p`o J_fRFHno=FinޣUMFREEAF9|G|摼! |dx-oiB(ii,HFEAVE &F9qsQxHݽPiG~Gq0-7 q/Lq<-do0-nT= 0BCurrent MacCom restriction, tooany Entries in this Mac Directory reading Mac directory9@4G|摼!;i |dvWdx dx-o8Jl;>VvB>xSִiB(i,HlFEAVE &$ on 9[F4;i9_BJlBoB@3o̴i,HoFޒH}ECK &Writing '.MFEN' file9ZVsQxHzV|!Ƃ摼!GpL!KPq>BoxBoBZzB%f,odx-Pm5Vo4r`BbBZ>?:xEBoB:Z ٽB8-?-o 6Bo+BٵB>8-0-* :QxBoBTR0-ϰ:#<{o =_ /dB>xSBoB|B>?:*xBoBJTB>ZxBo*B0м\Pм\B>ZxBo:BʋٽB>xSBo:BЅG|oG߾|cr@??xGoGoGDٮ~Zdx Zd2@DXpLڼ!D|,DdO>V x,n2ƹFERFILE.MFEN copied to Lisa file: calling CLOSE_OBJECTcalling_Set_File_Info calling Info calling OPENact ual <> allocSize calling WRI#_DATA calling UReadcalling MAKE_FILETransfer Aborted9ՠUriJH o@ =+g6G2oGH-oGooHCڼ!Jkxzg(4?+zx<ckz2Tdx`^Jkx Jkv)=gNY"Lpڼ!|dvTxw?+xxJGgVv|]T|cGTox ռ!v|dTx |ڼ!`GZov - ~---(v~&xmg&v~dx ~pڼ!Wdx Wڼ!o ?dx-o |dx-mVi,HuFv|xTJ_o$tctv|xTA] |=F`TvxT9_zx^vJlzf vxT9_xv|xT9_vnޒILDCRDS3=$?-FCop!y to what Lisa file? ,9vrPsQxHri|摼!|0F Awfn|ddx|d<<m5ըg2|dph~U|dx-f`oi`>To|vdx-m`GoGwOZr x,n2ޒEADMACF No such filesT9[Fo} r@Ё ?iU@T)0=_ҹEADMAP F9հ<}-0<.zTdt<_ m=@pi;m;m0-ρ;@;mޣEADMASTF94GpL!K; (ĢBAyC@ctY9ni$)niGETTAG&F9<(Bomo=5gGoGG;iޣTARTCON*No valid Macintosh directory on this disk.9[F벌'"FޣTARVEF9[FiҹONYADD F9յ?|nρ< D=F/oi:oG0-nm di|GwnޣRITEDIR CSerious!!..inconsistent directory, nextFreeEntry - master.nFiles = TSerious problem..file Directory too small. Init disk with a larger directory size!!6writing directory. Your diskayow be inconsistent!9Ԃ|摼!GGoG? d|GxoG|oGwg(F-܅GroG;Xi޺RITEERR: OCsErrs.Err, Errorumber 9DUri}Cڼ!|-L0- aBG/OcN2IFArڼ!Ar-OLHkrxm|w7Gt+ GgPJlg6o dx-nmg dx-n~9k)k)k$3`LJlg4o dx-xnmg dx-o 9k>)k)k+ino nޒHECKFORF9..UritHk|z.Ydx .d2W<J_^@Es+s5gtXXC~pL!KI~+sC`JmB| AC+sgBG` OB4@pho)mƎ+GgRo{ Ӏz9_7lz)k 0-Ы S 0-T x0-ώ x)_3BsB+`Po{ .9_7lz)k 0-Ы S 0- x0- x)_+BB3 C:ڼ!B+w+s5*toonޒETUPF$.MFEN9գUƂ|摼!;i&li-gFG|oiv|dpih|cJ@O,| AgY| |-Lv|xmV |Czn>. `>?GGA |0F0uA.tAcN2OGHnonETINFO i?C??TF9|ִG|!ri(ki(li |dx-o k^NV?+dvoiB(ֶi,HJFnaEAVE &F9 sQxH|摼!P`^ii|d^<}=_o.:|dx dx-iݎiCsii(wWi"ii0)tAcN2BAF|xoiڎiCsP7!@*XD!@.+h.ƲG`/~=m q`?ADB0FRni ?n" oii|0-ρTd^=_G=_o.|dx dxr-iiii_Wi"ii0)tAc N2HpFiiCGBAC?Tپ-?-oʸiiiio6 iԎidx dx-no?]T=_?Rn;i ?noz dሴiݎioG|oG߾|cr@??xGLoGiioGO x,hn2 RITEFILP copied to writing to reading from calling LookUp to set the datesopening 9P4;i0-lρ9@|8|m!m8ov٬dx .dx-owi,H'Fw{5gl0-A cN2AF~pL2ڼ!9mtRm mco$o`o`Smiii,HF0-W];@ -R+@w5,s-g`oddZddfd-7g0G$ooomg8tAcN2"o |dx-A z|mg40-l|;@Jmn"?-oziڎii,HFob0-_gBGNoG0- di||Go. di|GwޒRITETHE$master.nAks@Free <> mFreeAocks No space left on diskSet the Bundle Bit? Creator? [????] Type? [????] BCurrent MacCom restriction, tooany Entries in this Mac Directory!Not enough space on disk to copy 9pՠlsQxHl^ւ|摼!!-gDz٣xT=_pp .np)=̱dpxYqppftmOTl x,n2ONF?ILE /9T;iJH o@ =`vH-dx ڼ!vvvxJln g6GroGvoG8oo_t¨ Uڼ!Jl=g0H-vZx.cY@GOJGM)=gvcY@Tdxt dx- dx-A ,мF /JGgVv|]T|cGTx ڼ!v|dTx |ݼ!`GXov:U@v|xTJ_o$t*v|xTA |=:F` |- ---(-vxmg$Uvdx ռ!Wdx |wڼ!o ?dx-o |dx-mVi,HutFTvxT9_^hJlf vxT9_v|xT9_nޒILDCRDS=$-F?Copy to what Mac file? ,9sQxHzi|!|0F Afn|ddxٯ|d<<m5g2ٮ|dphҨ|dx-f`Mo`NXodx-|dx-:m,`=GoGO x,n2ޒR}ITEMAC No such filesT9XC<}-0<zTd writing master directory. Your diskay@ow be inconsistent!9[FGoGޒEBUGSTU%6This version of MacCom doesot include debugging code9[F4;iGfovVo dxs-Vm5g&o`mg dx-[ޒELM=ACFIMac files to Delete? 9@GoGޒUMPBLOC%6This version of MacCom doesot include debugging code9[FGGonGGwoGGVoGGoGGoGvGoGGDoGGoGGonGG`woGG oGGoGGGGMac, remove parts of file names preceding '/'.?'Confirm'&&& apsk for confirmation before deleting old files.0'FinderInfo' & e@nter your own finder info data.9'Bootocks' & write just the boot blocks on a Mac disk.5'?'&&&&&& display the rest of the commandine. 1'Names'&&&&ist the filenames on a Mac disk..'Mac->Lisa'&& copy file(s) from Mac to Lisa..'Lisa->Mac'&& copy file(s) from Lisa to Mac.&'Init' &&&& initialize a Mac disk.)'Help' &&&& display this information.'Eject'&&&& eject the disk.-'Delete' &&& delete files from a Mac disk.9[Fo~mV.^WޒNITTHEDF9[F4;iGfov[o dx-"m5g&o,mg Vdx-nޒISAMA!Lisa files to write to Mac disk? 9[F}TCB-S}TC+ɄޒOCALINI MacComDisk MAC/Mac.Boot9[F4;iG^oovo 5dx-.m5go8mg[ dx-ޒACT=OLIS#Mac files to write to Lisa volume? 9[F4;ioox(܅GEoi`B@m9@NMac, Mac->Lisa, Names, Quit, ? 9[FGoGpoGrvoETXETZxm}TC`|o}Tdxs-m_Y{ޒRTBOOTB MAC/Mac.BootF] 'Name of file to get boot blocks from? [9@*`H?Mac, Mac->Lisa, Names, Quit, ? .BootBlocks,yinderInfo, Confirm, RemoveSlashes8In Lisa->Mac, remove parts of file names preceding '/'? 3Always double check before overwriting a Mac file? =7Always set the finder info when writing to a Mac file? xF,_NU x8+O+NQxH+_.m#,m - x,`.m,m - x,xxN]+x ޣACCOM&F06/G$<^[F2<hNEЍXO o(><j5NEXOm(><lNEй(><8NEУ(><NEЎ(><NEУ(><$NE_й(><NE/@Gn2(><}GNEй0/ 2/4/G oi"o 0j$|F&|@SB46Q |F"|$@n (>< NE_У/6/i4/2/SG0/(><nNEУ(><pNEУ(><NEЊ(><NEй(><NEn2"_2(><NE@m(><NEй(><+NE?@(><:NEй(><NE?@(><NEй(><NE/@(><3NEУ(><*:NE?@(><.NEй(><%NE]?@(><NE?@(><}NEйB@m(><NE""*""&n2m(><NE`Un2m(><:NEЋ`nm(><NE222"nx(>NEn""_" "(><@NEйB@m(><B7NEй(><rNEЎ@B@m(><NE@B@m(><NEй2B@8m(><NE>(><NE/@(><FNEXO"_2(><JNEй"ȸ(><LNEй(><NNEйnqa(><PNE2G2222nֹna02468(><RNEnֹ"oia02468(><TNEnn"XO(><X1NE/@(><ZNEйna(><\NE2G2222nֹHWTL& hPASLIB UCLASCAL/IOPRIMIT8SHELLCOM9PROGCOMM:STDUNIT XIUMAN ZOBJIO [FILEIO \GRAPHS ^TREES _REFS `PARTS aLISTS bMEMMAN cPASDEFS dBLKIOINTfBLOCKIO gPASHEAP hBZ([tNqJ`PASLIB1 PASIOLIB`SgPASinibSULib cObjIOLibdMainProg [t9<<,=ޣILLEXECF9|摼!ƅGGpAMdxGwoG|oGigXi-܅GoG?i d|GoGoGG\o\VexABp? !d$xdxdT䌍rFATA>LERRLFFTyp8e CLEAR orPACE to abort.: Error # OsErrs.ErrFatal error. 9i|摼!bGGpA7dxGPoG|oGwT .qBFB-JGg. LE~Sudx dx-BлޣMITFI"K (in InitFile)REWRI#rror try ing to open "9JgN -мF /JG m)*VEd>.JG*nޣMCLOSEFCLOSError (in CloseFile)BLOCKWRITE Error (in CloseFile)9[FZGlG?G|Adx`G?G|7AdxRITEDIGF9[F?iρ T?iρ H@J@TzҹRIT=EBYTF9<(R-]/0-AiC`FR-g>i~-c5gGdxp xJ>G JG m@)*3m@BҹUTPUTBY BCLOCKWRITE Error (in OutputByte)9[FoiloikzҹUTP=UTWOF9[FoikoikޒUTPUTLOF9հi|摼!|c<JFf`(=F`@O|0cTRHnonޒUTPUTSTF9VG|摼!Jif/U|d^<_8JDg.|dx dx-?\\,.iBE FIoBd?j=_REBG`O0cTho✼F`JoPd?=_BG JoO0cT>S`/onޭUTPUTFI" (in OutputFile)RESETrror trying to open "9Ս(G|摼!Jig*i`O|0cTRHoUTPUTkF9ՙ(Jign]i`^cg*oGR p^ xAz?0KFiT>`(oGR p xkAz?0FiiRHoЩUTPUTDBF9[F mf EE0d?-j~;_Rm~Bm0-A}00 F=AiRmޗEADBY#F9[Fo@ o2@=AiޣEADWORDF9[Foh /JGg. N|}dx dx-лޒPENREAD." (in OpenRead)RESETrror trying to open "9i|摼!|-d|dx-ޒPENOBJR$.OBJ9;>c5g:,i4~JGo*=G|`4M@|0/cTRFHnoZO" =4onZߢO"=4oTnGAPPENDSF9<(`G0A6pcThoлAPPENDTF9[FiZaim?i|A ҹPCHAR&F9ո|4G|!;i|cJ@ `4JTf8|cT\>2C|0B B=RT`=|cT\@O CAN?STF9 |!;iBT|o|dx-G6G|cP^gHG0A|0F A-f |GRPa`"G0A|0F A+GRPG|cP\G2C|0B B)=gpG0A|0F A\G2C|0B B9_=g(0NG2zC|0B@|8BGRP/`8GnGE}TINT&F9\ |!;iB|o|dx-GG|cP^gHG0A|0F A-f |GRP`"G0A|0F A+GRPG|cP\G2C|0B B)=gvG0A3|0F Aw\G2C|0B B9_=g.p /xUG0A|0sFHҟp0(BGRP/ZH-/x(GnGETL>T F9 |摼!` iBo|dx-Gf_G|cP\G2gC|0B B)=gPG2C|0BFi-idx ڼ!GRP`GETSTR&F9i|摼! `poG0A]0pcTTyO|0c_g>|`4oG0pA0`cT M|0/c__`RF FohoP nATC=HTYPF9(PGCڟ`0]A$ oi2SAC0Gp?2hoٙnxTJ__`P̥`0]A$ oi2SAC0p?L2%hoٙxTJ__YGޒATCHOBJ.$.DRVR.WDEF.MDEF.CDEF.KEYC.DSAT.PACK..1234.9[FGޒATCHDEBF9հ|摼!|xm٭|d^<>/JGg.|tdx ]dx-NJ_f٢do:ٞoi5g?|@2nA<Y<.=FnI{ZEFONT" (inizeFont)RESETrror trying to open "F9X|!|dx-xE٭dd^<>?|nz ɍ?[@:?n#8Eoi5/|dxv- Io{nhioo<dVIoHhoo<o2f z <=D`oHnoEonRzOCESSWF9X;ioG>5@4gH8@G9@ 2,C bF-Avdx ڼ!Y9G}nTzUFFDIGF9X(Ƃ|!iߑ!P` _B|c /oO|0cTmgO|0rcT``?O|0c @f`H|Ҁdxٯ|ٺdx .dx-owino`cnG Z^G)=g2|:dx dx-oROCESSHV"!: wrongumbe r ofex digits in "" is invalid in "Non-hex digits in HEXA type: "9(i|摼!Pg^E0mBZo `BE0SdpE0hWcJ@>B`0F A*_B`IcJ@g,dx-G|dx-ETHEXLIPremature end of file9|i|摼!oG|dx-mgEGETHEXF9w(Gp!Kip!K Ğc.@_`PĞc w`4oO_6pcTyoO6pcTȰ__`HվnwoP ATCHTOKF9GTG-G|dx ڼ!|ccg*G-Gdx ڼ!=G} PPE?NDST 9|ԐidiޒEADPAT ipattern9P4;i4dxNdhu>4dx "L˼!d%4dx "L˼!ޒEAD?CURSicursor9;iBz`2dBu4dx "L˼!hon_ޒEADICON$icon9 |!;iz|c>JGT^2 C|0B B=RT`0A|0F AgL|G0Ao2C.|1B?G02nRTIRFT] FgpBg.F|dx dx-onGETTYPEN"M!issing resource typeame in "9(BGojd^H` oـh/60uB]@)ggTW@Y@˒W@/Tdx-|d^>4|dx-oo"/okdx-nmV4v` No/odx-[mV4x` oآ/X4dx-o/84dx-ool/^dx-UcJ@f do.odx-Vm5*oodx-Vm5*o΅GonGoGoG? d|}GZoG? d|G.dx-4/:nVޒEADGNRL for  @ Raw binary from: offset missing inNRL type$Number of bytesissing in GNRL typeMissing filename inNRL typeLong expected in GNRL typeInteger expected inNR@L typeGNRL"Code expected after in GNRL type9;iP8]A |0F>?Gu!g^_@g_@gLu gZug6/Y m >l?->GJp`0->| TGGJX`d9GRl`Z9GRl`P9GRl`F->c |`&0/cGfTvJRFHnoRlYnPk#MEF9mi|!Pq_qqqqURn?A|0F A .n|ngg?A|0F=Aozm5gv-dRn|cnlGqdx-oゐGhG\GPGDAzPPENDMF9XdUpBhi| oZmg(dx-oRh`ʴ0ϴi!@ii!nޒEAD>STRLF9٬dUpBhi|w oTmgdx-ooZ`=0Y@1@0ϴi!@ii!nޒEADLSTRF9հ4;idUDt +pQ`odx-ٍvmg *o ^` QJyp >[-@9dx-oT;|>omg(U-@9dx-Rm7>`ʐo0)@i)nޒEADMENUF9[FGiDEXTLN&F9ո(i|!Cڟ`(OTs2SAC0p#FhoTe+u- Z|Hٍ%پd$x .dx-vзޒRITEERR:, ID = in~YP@E Bad 12349ٺz<><BG4(^><;BG44Fo4;dx-l<7c|ϴi nEADWINDF9հ;Go~mommBG`4Oz?6vhot4d<<<BF4Nt4D4k:404do4wdx-n>c|Ϛi nEADCONTF9a;GGoodx-j|m5ݨg,|Udx ]dx-nodxs-ٵ*m5g,8dx dx-̒odx-vm5g,Wdx udx-@odx-ۆm5g,ٮdx dxr-B4j\4R4H4>{xUdx-nЇupڼ!o~dx-nm5g,w.Udx dx-84odx-[mV4d4ovdx-[pڝ!odx-vB[mV4d 4oo7dx-ٷDm5g,dx dx-J4o4M^o5dx-ٷo dxs-m*i<{ޒEADITEMNo 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 item9;idUuDt Wodx-Fm5躾dGoG?v d|GoSnȲ*BG` Hnlo0)@iGAid|G*oG)nncޒEADITEM bytes. items, Item list: Can't find nItems9;idUDt Wodx-m5zǮ|`:di\Ԫ`O0cThioRF;Hno0ϱ)@i)nn޺EADPATL pCatternistCan't find number of patterns9ՠ4;id~UDt xodx-m5&rokdx-nm5Du摼!GoGoGoG? d|GhoG? d|}Gdx-[ܼ0Ϸ)@i)nޒEADRAW @ for  @ Raw binary from: Can't find offsetCan't find nBytes9@՞svG]v1@GdU;vdUB)mvGt B^p)@9ni+Bi:d"UrBSo@>7o8<s|ׁ z8=DzF`o,RE.Hno0)@iGwoG?i di|G\oGAidi|Gw)KJXf+nXB+mXP`P +nPn2AKEABMA is! Bitmap length for9(Ԣ|摼!|dx->`niTHhfoEoEADALI1F9a|摼!q|dx-~BoJ;_Q mlN?-އ- T@SAUCz}B;pFrLV@SACz}ŦB;pFt)mr0DAz}B;p9Fr]SACz}B;pFt)mrGX@SACz}B9pF$RFinoP/;m\H ;m^F:-Fo`GoG0-H d|GonGG`woG0-Fϛ d|G(oGv=mH|/0A@}:IF80-F|"SA(A@>Z@SAC(z}B20FH)A&T@SACz}B;pFrV@SACz}B;pFt)mrG]SAxCz2-FA| 4SBEA}B40 F}Bp9BmCH9Ei`8|*SACz"RA4SBEA}B40F}BpH…i9BAiliRFinoE/;m\H=mH|/0A@}:IF8@|>Z@SACz}B20FH)AT@SAC,z}B;pFrV@SACz}Bb;pFt)mrG]SACz}B201Fm`HA9A!|SACz"RA4SBEA}B40F}BpH…9BiRFino$nޣAiKESEGL. jump table entries. There are segments.94i|摼!vG]v{1@GdU;vdUB)mvBitG|ڼ!B^p)@=֬+B:ضJXf+nX+mXP`P +nPGޒEFINECOF9հi|摼!=mHBGO/Q|dx-9G+Jl+ l+f 8X@9@JGMg0A@}<"0FX)Ai/d-^BgNg4v`v0-HN$|SACz}B;pFF0-F@| +@`B`D0-F@| +@B`20-H@|SACz}B201Fm`HA|! H+AB)mBiino nޤEFINESEF9|i|摼!|dx-8 [|dx-ޒAKECODEF90v-]g:G~oG -Br d|GLoGvo -Br ЁrT;mLr;mNt-mr;mPr;mRt-mrЮ( Fl(<F/ -Br p f-^B6*/0-HN$|<=mH`\`o=_z`B'T@SACz}ŦB20FQA?$VF$dddd RE*HnoHno/&|=mH/0A@i}B=pFz`l0Az}B?09F]SAC;z}B?0FfT@SACz}ŦB?0FxV@SACz}B?0F^XFREHnoQinoj`|0- H]@<=mHL`b0A@}B=pF0z`>]SACz}B?01FZFddsddREHn0oRHnLonޫUTPUTJU by!tes long.The jump table is 9[F(>.GhOhEhNh}hChEhGhIhKhMhOPYHOULDPAF9[F>.G;i5goiRmtY`V7loL-^Bg.g`:lNρ$@|T@J>`":o2`4lρ@|)T@>=GnޱODEFILTInternal logic error!9|!8.iJD>k/0A @)}:IF-^Bg8g0`V0-ZmFr H@=Ao?o? `(0-Z mV2-HA@|=Ai|dx-AGvBop@2@;AQ: m, Y@ f`rQ" -,^g4Ap x `oo Hno`*Apa x `[oXHnko|E E(^HEPo5gB?;- R٥|:پdx .dx-ownUTP=UTCO:" of "Cannot find segment 9ՆGiŚdoGdxGiXoGwdicr@?نxqنoGPoGiXid|GoGޒRBJn. bytes long. is  &&&&&&&&&&& 9;i+LToA>mgB8+ρ@:H@J@J@Bi`&odx-o)@i4/oAmg*odx-o)@i4vv/oAjmodx-)@mi4>oA>zmgpJgjJ0F Aw. r0B B3)=g>`A]rC2F-Adx ڼ!/(oAmgWp)@iGAx/oAzm߉G4/oA^zmgpD)@iGA`/oA0mgW)|FiGA/oAZmg8t jE@dU@uDo@$)@i)m@G/DoA^mg2odx-Ƚ)@itG4/oAfzoARmgnoA 6Atdx |wڼ!c])@i",iSC|F|ڼ!G/poA{)@i)m@G`HoAܚTmg6t E@dU@D@d@0)@i)m@锉GnޒAwSEOBJEGNRLICN#BNDLFREFANYBRAWBCNTLWMENUD ITLLSTRSTR#DLOGALRT STRGSTR PICTHEXAICONCURSPAT#PAT DRVRFWIFONT9[F4;i (zJg"~XGp Vf P Y~(`INDTYPEF9i|摼!G`|c>JGf/-|&&n\C|0B B=Rn`־nl/HCXڊ|`No?A|0F?M0/c_/0AMFRngRF FoPG|dx-n^C|0rB B=)=Rn`?A|0F A=f Rn|dx-HVCjp V>-|STR oaEv*m_`.EvdURmLv(z)n)n iG+mvznGޒYPEDEFISTTYPE9բִ |摼!G摼!rG]7@GdU;vdwU B)KBGitGڼ!|xmB`vdUƂ|ڼ!^p)@9n+B:9ni|cJ@~o1mNRmN"` 1|^rJXf+nX+mXP`P +nPna AKEOBJEF9srG>.;iBSq|BBn _"!O |0rc @@f z=SBS`rO |0qc @\O |0 A9;_=g&0NO |0@|;6P`O |0c @-;fxB/\4?@S0GJ6n2GETNUM&F9q+|摼!BB DGD|c<JFf/̼G\O|0 Aw=`޼Gl/8G\O|0 A)=`޼Gl,G|dx wdx-/r=GzE\K|0P A)=RE`=`n\CC|0B B))=Rn`El:nl=Fo]T? m5/}o ]TG݋m5GDPnf/>n]O|0 A!;)=`ܾnm0-|?D_Txkڼ!B`X?-|?D_Txkڼ!-|]T?GTxkڼ!nֹARSESTRMissing comma in: 9(i|摼!E0|d<<}>JGg..١|dx dxr-GwGoG|oGoG}~ڼ!E0m5Uomodx-m5odx-EJzmxmgڼ!vX>Cp Vfdx-^`^vXCp Vfdx-[`0vdx-dx-?-J` o"/E0oڒCANFILE(Syntax error in resource definition fileALI1CODE*".#Scanning resource definition file "" (incanFile)RESETrror trying to open "9[FBXBzBmNBmLޣNITOBJLF9[F/oA:$*QZ(T5`&S`naޣRxITEOPTF9ՙ|+mb0-LTz ˗-]gf*GBGoGvdoGoG8G d|GdwoG̻`0A4pcT`how8GTF ,韐bT8(T/NLnޣRITETYP objects. has Type 9+m^XB#X gVJgL-Zxmg:W)G֘cTĘdx-cЇR.(T`nޣRITENAMF9[FF\T-]5ޣRITEEVE FxF,_NU. x8+O6+N2QxH+_.B-|}>CBmH}~dx- B|]+mf GGwoG -nj d$|GdoGGBonG -fn d|GoGBB-]H`TG-/>"_250N"_20Nt)hPASLIB UNITSTD GRAFUTILUNITHZ STORAGE QUICKDRAHWINT FEDEC FONTMGR EVENTS WINDOWS FOLDERS MENUS FLDUT WMLSTD WMLCRS WMLGROW WMLSB INTERNATFPLIB ALERTMGRMATHLIB UNITFF UNITCS UNITFILEUNITFMT UUNIVERS FMGRUTIL*PMM +PMDECL ,UNITFIGA-SYS1LOCK.UCLASCAL/DBENV ?FIELDEDIGSCRAP IFILERCOMKPRSTDINFMBLKIOINTfBLOCKIO gPASHEAP h^B(v n NN NNbNNN N 8NNN*&PASLIB1 LWWORK OTHRWORKACTIVATEOPENSEG1INcold NEVER alert WMcold SMcold SUcold "SCROLL &UT 3SYSINIT APMMSeg CWORKSET DGRAFSEG EFEcutCopFFEcold GSBcold HOPENSEG2IMOVERS KALRTDIALNOPEN1LW Ofpsane Sfpelems Tfpreal UfprealioVfpdecstrWcorrbd Ymathlib Zfinance [matrix \double ]mathsort^solve _PASIOLIB`SgPASinibMainProg BԅJoNV/- Hz&Bg/- "0N^ _\ONEAPERRO43The heap is full. The program must now terminate! JoNVH n CJ""" nCJ"""/./.4././.4,/./.4*B//(//( //( \-_LN^ _PONISTANCEJoNVHBg0HFH@J@|H/8-_Bg0HFH@J@| H/8-_B/.p /8 Bg0jD@HH@J@H/8 -_/.p /8 Bg0jD@H-H@J@H/8 -_/.p /8 Bg0jD@H#H@J@H/8 -_Hn/.ĠT ?/.ȠT ?/.РT ?/.ԠT ?(0-.S@=@BG`fO A0IHn/T ?/,T ?/, T ?/,T ?(BgHnHnHng`:RGinoAC AC /./.Р /<@-_/./.Ԡ /<@-_/./.ؠ /<@-_HnHnNBHn mHh4N<-_BG0-.AAH!/.O AH/0gRG` R@=@<-.`2M "SACC0AE0Cp S@nSFinlO C0ACp S@nRm.LN^NuAKEBOX JoNVH n CJ""" nCJ"""(mB&_/././.N/././.N/././.N/././.N/././.N/ / Hl/././.N/././.N/././.N/././.N/././.N/ / Hl䠊/././.N/././.N/././.N/././.N/././.N/ / Hl젊Hl0/././.N/././.N/././.NȠ,/ $LN^ _PONRAWBOX "NV,_NU,"8A/A/A:/NA+H/-A+H/-N mHhNp/8pK/8pd/8p/8Np/8NNp/8NpF/8N mHh0 mHh젊4 mHh;|,`Dp ,H/8p/8B8Np ,H/8pd/8B8NRm, m ,o;|,`Dp/8p ,H/8B8Npd/8p ,H/8B8NRm, m ,oBm.N m.f0-.S@;@,`00-,AA0Hp0-,AABgHnHl(HnHnNg?.?.젊?.?.(_N^ _ NINETO3DJoNVH(m(G0+kH/8/<@)_@0+SH/8/<)_D0+H/8/,@ )_H0H/8/,D4)_LLN^NuIEWLOOKJoNV nCJ"" m(XC NLN^.NuIEWPORTJoNV/ (m()n )n )n)n/./. /<@)_4/./. /<@)_8N(_N^ _NOOKAT JoNVH..(m(//<=͠$g.<=//<@/ boxArray[i].dist DO i:=i+1; { insert in order of dist } "FOR j:=nBoxes DOWNTO i+1 DO boxArray[j]:=boxArray[j-1]; "boxArray[i]:=myBox; "nBoxes:=nBoxes+1; END; PROCEDURE DrawBox(pt1,pt2: Point3D); { draws a 3D box with shaded faces. } { only shades correctly in one direction } VAR tempRgn: RgnHandle; BEGIN "tempRgn:=NewRgn; "OpenRgn; $MoveTo3D(pt1.x,pt1.y,pt1.z); { front face, y=y1 } $LineTo3D(pt1.x,pt1.y,pt2.z); $LineTo3D(pt2.x,pt1.y,pt2.z); $LineTo3D(pt2.x,pt1.y,pt1.z); $LineTo3D(pt1.x,pt1.y,pt1.z); "CloseRgn(tempRgn); "FillRgn(tempRgn,white); "OpenRgn; $MoveTo3D(pt1.x,pt1.y,pt2.z); { top face, z=z2 } $LineTo3D(pt1.x,pt2.y,pt2.z); $LineTo3D(pt2.x,pt2.y,pt2.z); $LineTo3D(pt2.x,pt1.y,pt2.z); $LineTo3D(pt1.x,pt1.y,pt2.z); "CloseRgn(tempRgn); "FillRgn(tempRgn,gray); "OpenRgn; "MoveTo3D(pt2.x,pt1.y,pt1.z); { right face, x=x2 } $LineTo3D(pt2.x,pt1.y,pt2.z); $LineTo3D(pt2.x,pt2.y,pt2.z); $LineTo3D(pt2.x,pt2.y,pt1.z); $LineTo3D(pt2.x,pt1.y,pt1.z); "CloseRgn(tempRgn); "FillRgn(tempRgn,black); "PenPat(white); "MoveTo3D(pt2.x,pt2.y,pt2.z); { outline right } "LineTo3D(pt2.x,pt2.y,pt1.z); "LineTo3D(pt2.x,pt1.y,pt1.z); "PenNormal; "DisposeRgn(tempRgn); END; BEGIN { main program } "{----- Initialization - Generic to all applications using QuickDraw -----} "QDInit(@heapBuf, @heapBuf[8192], @heapError); { Must do this once at beginning } "myPort := @GPort1; "OpenPort(myPort); "myPort3D := @GPort2; "Open3DPort(myPort3D); "ViewPort(myPort^.portRect); { put the image in this rect } "LookAt(-100,75,100,-75); { aim the camera into 3D sapce } "ViewAngle(30); { choose lens focal length } "Identity; Roll(20); Pitch(70); { roll and pitch the plane } "PenPat(white); "BackPat(black); "EraseRect(myPort^.portRect); "FOR i:=-10 TO 10 DO $BEGIN &MoveTo3D(i*10,-100,0); &LineTo3D(i*10,+100,0); $END; "FOR i:=-10 TO 10 DO $BEGIN &MoveTo3D(-100,i*10,0); &LineTo3D(+100,i*10,0); $END; "nBoxes:=0; "REPEAT MakeBox; UNTIL nBoxes=boxCount; "FOR i:=nBoxes-1 DOWNTO 0 DO $DrawBox(boxArray[i].pt1,boxArray[i].pt2); "Tone(2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for 6500 milliseconds } "ReadLn; { Wait until RETURN entered before terminating program } END. GRAF3D "OPEN3DPOGraf OPEN3DPOOPEN3DPO$%I_FLT %I_FLT |vh^RF<MOVETO3DMOVETO3DIDENTITYIDENTITYpVIEWANGLVIEWANGLlLOOKAT LOOKAT bVIEWPORTVIEWPORT(GRAF3D QUICKDRAJoNVH&m+n n kHhN kI0,H/N0H/N0,H/N0,H/NNBNNNBNBNBNNLN^.NuPEN3DPOSETPORT3Graf SETPORT3SETPORT3SETPORT SETPORT GRAF3D 0JoNV+n n/NN^.NuETPORT3(GETPORT3Graf GETPORT3GETPORT3GRAF3D (JoNV n N^.NuETPORT3 MOVETO3DGraf MOVETO3DMOVETO3DMOVETO MOVETO ^CLIP3D CLIP3D NTRANSFORTRANSFOR8GRAF3D ~JoNV/ (mAC( )n)n )n$HlHl(NBgHnHl(HnHnNg ?.?.N(_N^ _ NOVETO3DvLINETO3DGraf LINETO3DLINETO3DLINETO LINETO jMOVETO MOVETO ^CLIP3D CLIP3D NTRANSFORTRANSFOR8GRAF3D JoNV/ (mAC( )n)n )n$HlHl(NBgHnHl(HnHnNg?.?.N?.?.N(_N^ _ NINETO3DMOVE3D Graf MOVE3D MOVE3D %F_ADD %F_ADD 0$MOVETO3DMOVETO3D4GRAF3D TJoNV/ (m/,/.N/, /. N/,$/.NN(_N^ _ NOVE3D LLINE3D Graf LINE3D LINE3D %F_ADD %F_ADD 0$LINETO3DLINETO3D4GRAF3D TJoNV/ (m/,/.N/, /. N/,$/.NN(_N^ _ NINE3D LMOVETO2DGraf MOVETO2DMOVETO2DMOVETO3DMOVETO3DGRAF3D 6JoNV/. /. m/($NN^ _PONOVETO2D.MOVE2D Graf MOVE2D MOVE2D MOVE3D MOVE3D 0JoNV/. /.BNN^ _PONOVE2D (LINETO2DGraf LINETO2DLINETO2DLINETO3DLINETO3DGRAF3D 6JoNV/. /. m/($NN^ _PONINETO2D.LINE2D Graf LINE2D LINE2D LINE3D LINE3D 0JoNV/. /.BNN^ _PONINE2D (VIEWLOOKGraf $1000000VIEWLOOK%F_SUB %F_SUB v%F_ADD %F_ADD `%F_DIV %F_DIV H,%I_FLT %I_FLT nX>"GRAF3D JoNVH(mG0+kH/N/<@N)_@0+SH/N/<N)_D0+H/N/,@N)_H0H/N/,DN)_LLN^NuIEWLOOKVIEWPORTGraf VIEWPORTVIEWPORT$1000000VIEWLOOK&GRAF3D @JoNV nCJ"" mXC NN^.NuIEWPORT8LOOKAT Graf LOOKAT LOOKAT %F_DIV %F_DIV T:%F_ADD %F_ADD J0$1000000VIEWLOOK\GRAF3D |JoNV/ (m)n )n )n)n/./. N/<@N)_4/./.N/<@N)_8N(_N^ _NOOKAT tVIEWANGLGraf VIEWANGLVIEWANGL%I_FLT %I_FLT %F_SUB %F_SUB xh%_SIN %_SIN P%_COS %_COS H%F_DIV %F_DIV |T>%F_MUL %F_MUL l:%F_LT %F_LT GRAF3D JoNVH..(m//<=Ng.<=//<@/  tpd^JF:~nV>$2000000CODE |GRAF3D 2tJoNVH nCJ""" nCJ"""B.(m/./,4N/,PN-_/./,8N/,TN-_/,JoNVH(.//JoNVH(.//JoNVH(.// GRAFTYPES.TEXT ; ; QUICKDRAW TYPE DECLARATIONS, USED BY ALL GRAPHICS ROUTINES ; SYMBOLS .EQU 1 FORMAC .EQU 0 NIL .EQU 0 ;IMPLEMENTATION VALUE OF NIL ;----------------------------------------------- ; ; QuickDraw VERBS: ; FRAME .EQU 0 PAINT .EQU 1 ERASE .EQU 2 INVERT .EQU 3 FILL .EQU 4 ;----------------------------------------------- ; ; QuickDraw transfer MODES: ; srcCopy .EQU 0 srcOr .EQU 1 srcXor .EQU 2 srcBic .EQU 3 notSrcCopy .EQU 4 notSrcOr .EQU 5 notSrcXor .EQU 6 notSrcBic .EQU 7 patCopy .EQU 8 patOr .EQU 9 patXor .EQU 10 patBic .EQU 11 notPatCopy .EQU 12 notPatOr .EQU 13 notPatXor .EQU 14 notPatBic .EQU 15 ;----------------------------------------------- ; ; QuickDraw Color Separation: ; normalBit .EQU 0 ;normal screen mapping inverseBit .EQU 1 ;inverse screen mapping redBit .EQU 4 ;RGB additive mapping greenBit .EQU 3 ;for photos from screen blueBit .EQU 2 cyanBit .EQU 8 ;CMYBk subtractive mapping magentaBit .EQU 7 ;for ink jet printer yellowBit .EQU 6 blackBit .EQU 5 blackColor .EQU 33 whiteColor .EQU 30 redColor .EQU 205 greenColor .EQU 341 blueColor .EQU 409 cyanColor .EQU 273 magentaColor .EQU 137 yellowColor .EQU 69 ;----------------------------------------------- ; ; OFFSETS WITHIN A POINT: ; V .EQU 0 ;WORD H .EQU 2 ;WORD ;----------------------------------------------- ; ; OFFSETS WITHIN A RECT: ; TOPLEFT .EQU 0 ;POINT BOTRIGHT .EQU 4 ;POINT TOP .EQU 0 ;INTEGER LEFT .EQU 2 ;INTEGER BOTTOM .EQU 4 ;INTEGER RIGHT .EQU 6 ;INTEGER ;----------------------------------------------- ; ; OFFSETS WITHIN A BITMAP: ; BASEADDR .EQU 0 ;LONG ROWBYTES .EQU 4 ;WORD BOUNDS .EQU 6 ;RECT ;----------------------------------------------- ; ; OFFSETS WITHIN A CURSOR: ; DATA .EQU 0 ;16 WORDS MASK .EQU 32 ;16 WORDS HOTSPOT .EQU 64 ;POINT ;----------------------------------------------- ; ; OFFSETS WITHIN A POLYGON: ; POLYSIZE .EQU 0 ;WORD, TOTAL BYTES POLYBBOX .EQU 2 ;RECT POLYPOINTS .EQU 10 ;ARRAY[0..0] OF Point ;----------------------------------------------- ; ; OFFSETS WITHIN A REGION: ; RGNSIZE .EQU 0 ;WORD, TOTAL BYTES RGNBBOX .EQU 2 ;RECT RGNDATA .EQU 10 ;START OF RGN DATA ;----------------------------------------------- ; ; OFFSETS WITHIN A PICTURE: ; PICSIZE .EQU 0 ;WORD, TOTAL BYTES PICFRAME .EQU 2 ;RECT PICDATA .EQU 10 ;START OF BYTE CODES ;----------------------------------------------- ; ; OFFSETS WITHIN QDProcs RECORD: ; textProc .EQU 0 ;PROCPTR lineProc .EQU textProc+4 ;PROCPTR rectProc .EQU lineProc+4 ;PROCPTR rRectProc .EQU rectProc+4 ;PROCPTR ovalProc .EQU rRectProc+4 ;PROCPTR arcProc .EQU ovalProc+4 ;PROCPTR polyProc .EQU arcProc+4 ;PROCPTR rgnProc .EQU polyProc+4 ;PROCPTR bitsProc .EQU rgnProc+4 ;PROCPTR commentProc .EQU bitsProc+4 ;PROCPTR txMeasProc .EQU commentProc+4 ;PROCPTR getPicProc .EQU txMeasProc+4 ;PROCPTR putPicProc .EQU getPicProc+4 ;PROCPTR ;----------------------------------------------- ; ; OFFSETS WITHIN A GRAFPORT: ; device .EQU 0 ;WORD portBits .EQU device+2 ;BITMAP portRect .EQU portBits+14 ;RECT visRgn .EQU portRect+8 ;RGNPTR clipRgn .EQU visRgn+4 ;RGNPTR bkPat .EQU clipRgn+4 ;PATTERN fillPat .EQU bkPat+8 ;PATTERN pnLoc .EQU fillPat+8 ;POINT pnSize .EQU pnLoc+4 ;POINT pnMode .EQU pnSize+4 ;WORD pnPat .EQU pnMode+2 ;PATTERN pnVis .EQU pnPat+8 ;WORD txFont .EQU pnVis+2 ;WORD txFace .EQU txFont+2 ;WORD txMode .EQU txFace+2 ;WORD txSize .EQU txMode+2 ;WORD spExtra .EQU txSize+2 ;Fixed Point fgColor .EQU spExtra+4 ;LONG bkColor .EQU fgColor+4 ;LONG colrBit .EQU bkColor+4 ;WORD patStretch .EQU colrBit+2 ;WORD picSave .EQU patStretch+2 ;handle rgnSave .EQU picSave+4 ;handle polySave .EQU rgnSave+4 ;handle grafProcs .EQU polySave+4 ;Pointer PORTREC .EQU grafProcs+4 ;SIZE OF A GRAFPORT PORTBOUNDS .EQU PORTBITS+BOUNDS ;----------------------------------------------------- ; ; OFFSETS IN A REGION STATE RECORD: ; RGNPTR .EQU 0 ;LONG DATAPTR .EQU RGNPTR+4 ;LONG SCANBUF .EQU DATAPTR+4 ;LONG SCANSIZE .EQU SCANBUF+4 ;WORD THISV .EQU SCANSIZE+2 ;WORD NEXTV .EQU THISV+2 ;WORD MINH .EQU NEXTV+2 ;WORD MAXH .EQU MINH+2 ;WORD LEFTH .EQU MAXH+2 ;WORD RGNREC .EQU LEFTH+2 ;SIZE OF A REGION RECORD ;----------------------------------------------------- ; ; Offsets in a PicSave record: ; thePic .EQU 0 ;PICHANDLE picMax .EQU thePic+4 ;INTEGER picClipRgn .EQU picMax+2 ;RgnHandle picBkPat .EQU picClipRgn+4 ;Pattern picTxFont .EQU picBkPat+8 ;WORD picTxFace .EQU picTxFont+2 ;Style picTxMode .EQU picTxFace+2 ;WORD picTxSize .EQU picTxMode+2 ;WORD picSpExtra .EQU picTxSize+2 ;Fixed Point picTxNumer .EQU picSpExtra+4 ;Point picTxDenom .EQU picTxNumer+4 ;Point picTxLoc .EQU picTxDenom+4 ;Point picPnLoc .EQU picTxLoc+4 ;Point picPnSize .EQU picPnLoc+4 ;Point picPnMode .EQU picPnSize+4 ;WORD picPnPat .EQU picPnMode+2 ;Pattern picFillPat .EQU picPnPat+8 ;Pattern picTheRect .EQU picFillPat+8 ;Rect picOvSize .EQU picTheRect+8 ;Point picOrigin .EQU picOvSize+4 ;Point picFgColor .EQU picOrigin+4 ;Long picBkColor .EQU picFgColor+4 ;Long picSaveRec .EQU picBkColor+4 ;total size in bytes ;----------------------------------------------------- ; ; QuickDraw GLOBAL VARIABLES: ; ; 52(A5) CONTAINS A POINTER TO THEPORT. ; ALL OTHER GLOBAL VARIABLES ARE EXPRESSED RELATIVE TO THEPORT. ; (.IF FORMAC GRAFGLOBALS .EQU 0 ;A5 OFFSET TO GLOBALPTR (.ELSE GRAFGLOBALS .EQU 52 ;A5 OFFSET TO GLOBALPTR (.ENDC ;----------------------------------------------------------- ; ; QuickDraw PUBLIC GLOBAL VARIABLES: ; thePort .EQU 0 ;GrafPtr white .EQU thePort-8 ;Pattern black .EQU white-8 ;Pattern gray .EQU black-8 ;Pattern ltGray .EQU gray-8 ;Pattern dkGray .EQU ltGray-8 ;Pattern arrow .EQU dkGray-68 ;Cursor screenBits .EQU arrow-14 ;BitMap randSeed .EQU screenBits-4 ;LONGINT ;------------------------------------------------------------ ; ; QuickDraw private global variables: ; wideOpen .EQU randSeed-4 ;RgnHandle wideMaster .EQU wideOpen-4 ;RgnPtr wideData .EQU wideMaster-10 ;Fake Region rgnBuf .EQU wideData-4 ;PointsHandle rgnIndex .EQU rgnBuf-2 ;INTEGER rgnMax .EQU rgnIndex-2 ;INTEGER playPic .EQU rgnMax-4 ;Long playIndex .EQU playPic-2 ;INTEGER; thePoly .EQU playIndex-4 ;POLYHANDLE polyMax .EQU thePoly-2 ;INTEGER patAlign .EQU polyMax-4 ;Point fontAdj .EQU patAlign-4 ;Fixed Point fontPtr .EQU fontAdj-4 ;long, ^FMOutput record fontData .EQU fontPtr-26 ;FMOutput record lastGrafGlob .EQU fontData grafSize .EQU 4-lastGrafGlob ;total size in bytes (.MACRO UNLINK ;-------------------------------------------------------------- ; ; UNLINK A6, STRIP PARAMETERS, AND RETURN. ; IF SYMBOLS=TRUE, THEN ALSO PUT ASCII FOR PROCEDURE IDENTIFIER. ; ; FIRST PARAM IS NUMBER OF BYTES OF STACK BIAS. ; SECOND PARAM IS PROCEDURE IDENTIFIER. ; (UNLK A6 ;RELEASE LOCAL VARIABLES (.IF %1=0 ;NO PARAMETERS ? (RTS ;THEN JUST RTS (.ELSE (.IF %1=4 ;4 BYTES OF PARAMS ? (MOVE.L (SP)+,(SP) ;YES, STRIP AND ADJUST RET ADDR (RTS (.ELSE ;NOT 0 OR 4 BYTES OF PARAMS (MOVE.L (SP)+,A0 ;POP RETURN ADDR INTO A0 (ADD #%1,SP ;STRIP PARAMETERS (JMP (A0) ;JUMP THRU A0 TO RETURN (.ENDC (.ENDC (.IF SYMBOLS ;DO WE WANT SYMBOLS ? (.ASCII %2 ;YES, PUT PROCEDURE IDENTIFIER (.ENDC (.ENDM (.MACRO FAKEHEAD ;-------------------------------------------------------------- ; ; FAKEHEAD, (no params) ; ; Puts in a LINKA6 NOP to fake out the debugger's symbol mechanism. ; (.IF SYMBOLS (LINK A6,#0 ;DO THE LINK (MOVE.L (SP)+,A6 ;UNDO THE LINK (.ENDC (.ENDM (.MACRO FAKETAIL ;-------------------------------------------------------------- ; ; FAKETAIL, 'ProcName' ; ; Fake out the debugger's symbol mechanism. ; Put FAKETAIL,'ProcName' after executable code. ; (.IF SYMBOLS (UNLK A6 ;RELEASE LOCAL VARIABLES (RTS ;THEN JUST RTS (.ASCII %1 ;YES, PUT PROCEDURE IDENTIFIER (.ENDC (.ENDM (.MACRO CHECKSTACK ;-------------------------------------------------------------- ; ; CHECKSTACK byteCount ; ; Does a TST.W to expand the stack if not enough room. ; Does nothing on the Mac version. ; NOTE: %1 param should be an even negative number. ; SLOP .EQU 256 (.IF FORMAC=0 (TST.W %1-SLOP(SP) ;EXPAND STACK (.ENDC (.ENDM HARDWARE Interface type #Pixels = Integer; #ManyPixels = LongInt; #CursorHeight = Integer; #CursorPtr = ^Integer; #DateArray = Record 7year: Integer; 7day: Integer; 7hour: Integer; 7minute: Integer; 7second: Integer; 7end; #Frames = LongInt; #Seconds = LongInt; #MilliSeconds = LongInt; #MicroSeconds = LongInt; #SpeakerVolume = Integer; #ScreenContrast = Integer; #KeybdQIndex = 1..1000; #KeybdId = Integer; #KeyCap = 0..127; #KeyCapSet = Set of KeyCap; #KeyEvent = Packed Record 7key: KeyCap; 7ascii: Char; 7state: Integer; 7mouseX: Pixels; 7mouseY: Pixels; 7time: MilliSeconds; 7end; { Mouse } #Procedure MouseLocation (var x: Pixels; var y: Pixels); #Procedure MouseUpdates (delay: MilliSeconds); #Procedure MouseScaling (scale: Boolean); #Procedure MouseThresh (threshold: Pixels); #Function MouseOdometer: ManyPixels; { Cursor } #Procedure CursorLocation (x: Pixels; y: Pixels); #Procedure CursorTracking (track: Boolean); #Procedure CursorImage (hotX: Pixels; hotY: Pixels; height: CursorHeight; &data: CursorPtr; mask: CursorPtr); #Procedure BusyImage (hotX: Pixels; hotY: Pixels; height: CursorHeight; &data: CursorPtr; mask: CursorPtr); #Procedure BusyDelay (delay: MilliSeconds); { Screen } #Function FrameCounter: Frames; #Procedure ScreenSize (var x: Pixels; var y: Pixels); #Function Contrast: ScreenContrast; #Procedure SetContrast (contrast: ScreenContrast); #Procedure RampContrast (contrast: ScreenContrast); #Function DimContrast: ScreenContrast; #Procedure SetDimContrast (contrast: ScreenContrast); #Function FadeDelay: MilliSeconds; #Procedure SetFadeDelay (delay: MilliSeconds); { Speaker } #Function Volume: SpeakerVolume; #Procedure SetVolume (volume: SpeakerVolume); #Procedure Noise (waveLength: MicroSeconds); #Procedure Silence; #Procedure Beep (waveLength: MicroSeconds; duration: MilliSeconds); { Keyboard } #Function Keyboard: KeybdId; #Function Legends: KeybdId; #Procedure SetLegends (id: KeybdId); #Function KeyIsDown (key: KeyCap): Boolean; #Procedure KeyMap (var keys: KeyCapSet); #Function KeybdPeek (repeats: Boolean; index: KeybdQIndex; var event: KeyEvent): &Boolean; #Function KeybdEvent (repeats: Boolean; wait: Boolean; var event: KeyEvent): &Boolean; #Procedure RepeatRate (var initial: MilliSeconds; var subsequent: MilliSeconds); #Procedure SetRepeatRate (initial: MilliSeconds; subsequent: MilliSeconds); { Timers } #Function MicroTimer: MicroSeconds; #Function Timer: MilliSeconds; { Date and Time } #Procedure DateTime (var date: DateArray); #Procedure SetDateTime (date: DateArray); #Procedure DateToTime (date: DateArray; var time: Seconds); { Time Stamp } #Function TimeStamp: Seconds; #Procedure SetTimeStamp (time: Seconds); #Procedure TimeToDate (time: Seconds; var date: DateArray); Implementation 3. "6F^7XED!$ǐ^lϳns}Q{quit} g } <$EXEC P{pascal}QD/BOXES L{link}QD/BOXES QD/SUPPORT QD/GRAF3D SYS1LIB IOSFPLIB IOSPASLIB QD/XBOXES S{sys-mgr}V{validate}Y{validate file xfers}N{don't validate selections}Q{quit} F{file-mgr}D{delete}QD/BOXES.I D{delete}QD/BOXES.OBJ R{rename}QD/XBOXES.OBJ,QD/BOXES.OBJ Q{quit} R{run}QD/BOXES $ENDEXEC 3. "6F^7XED!$ǐ^  aϴFdsample} } g } <$EXEC P{pascal}QD/SAMPLE L{link}QD/SAMPLE QD/SUPPORT {regular unit} SYS1LIB {intrinsic units} IOSPASLIB QD/XSAMPLE S{sys-mgr}V{validate}Y{validate file xfers}N{don't validate selections}Q{quit} F{file-mgr}D{delete}QD/SAMPLE.OBJ {delete the raw object qdsample} R{rename}QD/XSAMPLE.OBJ,QD/SAMPLE.OBJ {rename the executable qdsample} Q{quit} R{run}QD/SAMPLE $ENDEXEC QDSUPPORQDINIT QDINIT QDINIT FMOPEN FMOPEN 2HIDECURSHIDECURS*INITCURSINITCURS&INITGRAFINITGRAF"INITHEAPINITHEAPQUICKDRAFJoNV/./. /.N mY/NNNHnNN^ _ NЁ>GETMOUSE GETMOUSEGETMOUSEGLOBALTOGLOBALTO MOUSELOCMOUSELOC0JoNV nHh n/N/.NN^.Nu(MOUSEBUT MOUSEBUTMOUSEBUTKEYISDOWKEYISDOW"JoNVBg<N_N^NuTONE TONE TONE BEEP BEEP $JoNV/. /.NN^ _PONЁ INTERFACE USES $UnitStd, $UnitHz, $Hwint, $QuickDraw, $Fontmgr; CONST "{---------- Font Numbers ----------} "FTile12 = 4; {proportional} "FTile18 = 5; {proportional} "FTile24 = 6; {proportional} "FP15Tile = 7; {Monospaced - 8 lines/inch & 15 chars/inch} "FP12Tile = 8; {Monospaced - 6 lines/inch & 12 chars/inch} "FP10Tile = 9; {Monospaced - 6 lines/inch & 10 chars/inch} "FCent12 = 10; {proportional} "FCent18 = 11; {proportional} "FCent24 = 12; {proportional} "FP12Cent = 13; {Monospaced - 6 lines/inch & 12 chars/inch} "FP10Cent = 14; {Monospaced - 6 lines/inch & 10 chars/inch} "FP20Tile = 19; {Monospaced} PROCEDURE QDInit(startPtr, limitPtr: QDPtr; ErrorProc: QDPtr); { QDInit: Initializes QuickDraw unit by setting up its heap zone, 0global vars, cursor, and the Font Manager it calls on. } PROCEDURE GetMouse(VAR pt: Point); { GetMouse: Returns the current mouse location in the local coordinates 0of the current grafPort. } FUNCTION MouseButton: BOOLEAN; { MouseButton: Returns TRUE if the mouse button is currently held down, 0otherwise FALSE. } PROCEDURE Tone(waveLength, duration: LongInt); { Tone: Produces a square wave tone of the specified wavelength 0(microseconds) for the specified duration (milliseconds). } IMPLEMENTATION  !n  ^x̃{t TRANS|̃ ^ $ :a$kTk ^!n$4#"##"#! Lr.'hPASLIB UNITSTD GRAFUTILUNITHZ STORAGE QUICKDRAHWINT FEDEC FONTMGR EVENTS WINDOWS FOLDERS MENUS FLDUT WMLSTD WMLCRS WMLGROW WMLSB INTERNATALERTMGRUNITFF UNITCS UNITFILEUNITFMT UUNIVERS FMGRUTIL*PMM +PMDECL ,UNITFIGA-SYS1LOCK.UCLASCAL/DBENV ?FIELDEDIGSCRAP IFILERCOMKPRSTDINFMBLKIOINTfBLOCKIO gPASHEAP hBS(>NPASLIB1 LWWORK OTHRWORKACTIVATEOPENSEG1INcold NEVER alert WMcold SMcold SUcold "SCROLL &UT 3SYSINIT APMMSeg CWORKSET DGRAFSEG EFEcutCopFFEcold GSBcold HOPENSEG2IMOVERS KALRTDIALNOPEN1LW OPASIOLIB`SgPASinibMainProg SJoNV/- Hz&Bg/- "0N^ _\ONEAPFULL43The heap is full. The program must now terminate! JoNVA/Hz ڠA /Hz A"/Hz ZA:/Hz AR/Hz ڠAj/Hz A/Hz ZA/Hz A/Hz0A/Hz̠A/HzA/HzLA/Hz A*/Hz̠AB/HzAZ/HzLAr/Hz A/Hz̠A/HzA/HzLA/Hz A/Hz̠A/HzA/HzLA2/HzPAJ/HzAb/HzAz/Hz~A/Hz>A/HzA/HzA/Hz~A/Hz>A /HzA"/HzZA:/HzAR/HzpAj/Hz0A/HzA/HzA/HzpA/HzbA/HzTA/HzA/HzԠA*/HzAB/HzTAZ/HzN^NuNITICONf000203FF01600002000001C00002000001800003FFFFFF000000201FE01560002000001AC0002000001580002020101B0000020000013500020000016B000201FE01D50002010201AB000000380000300000680000700000D80000D0003FFFFFF1B0000000000000000000000000000000000000000001FFFFFF00000000000000000000000000000000000000000000000000000A00002B00000BFFFFEE00000800000C00000FFFFFF8000000A00002AC0000A08082D40000A0FF82AC0000A00002D800000A00002AC0000A07F02D40000A04102AC0000A07F02D400000A00002AC0000BFFFFED40000800000AC0000BFFFFED400000A00002AC0000A08082D40000A0FF82AC0000A00002D4000004000006C0000FFFFFFD40000800000AC0000BFFFFED40000007FFFFFC00000800000C00001000001C000020000034000040000000B80040000000F00040000000E0007FFFFFFFC00006B000000AB807FC000FFD70040600180AE00403FFF00DC00040000000AB807FFFFFFFD5806AC00000AB8055800000D580040600180AB80403FFF00D58040000000AB8040000000D58000D7FFFFFFB801AC000003580358000006B807FC000FFD580000E00000018001A00000038003600000078006A000000D800000000000000000000000000000000000000007FFFFFFF000784249258E70003049233100000E000E40800001FFFC3F00932524924C82A44524924D01C88524924CF10C4524924C090000524024C00000524924C00600524924C0090E524924C7C0000500004C000005259A4C000005250A4C00000525FA4C0000033E3801C0000180E002C00000FF801CC0000047FFE0C0000010064FE0000031199830000020E6301800002418E00800000013849800000026C4980000004C09300000008612600000000001FC000000000E0600000000300300000000C091800008000000001C0C000000003807FFFFFFFFF0007800001E00008000000001AC87F000000158841000CCC1B087F000CCC160018000000006B3000000000D77FFFFFFFFFABC0000000035600184000013870327FFFFF10F06400000021B0CFFFFFFFC3700004000010000004A54510000004000017FE00F4A515100300002000008400004454510400004000017C00004A5151000000000000000000007FFFFF000000800002800001115144400800000000980FFFFFFFFF300800000001600FFFFFFFFFC00018000000013832AAAAA8A9F0655555515380C2AAAA82A580008000000004307FFFFFFFFA30100000000260FFFFFFFFE2C01200000BF923120000080F2312000008002311FFFFF000230120000080F23120000080023120000080023120000080F23018000000004311FFFFF00023120000080F231200000BF923000600000000601800000000B0600000000130FFFFFFFFFA30000000000000000000000000000000000000001FFFFFFFFCJoNV0. ACA-H=|HnBgBg?<0?< (AC AC Hn?. ?.Hn m hHhHnHn?<BN^ _\ONRAWICONJoNVH(mA/Hz lCA""HnHn?<?<Hn?<?<Bg?<?<?<Bg?<?<?<Bg?<?<?<Bg?<?<?<?<?<?<?<k?<?<?<?<kBg?<?<HzP?<P?<"HzP?:?<F?<7HzfP?:\?<F?<FHz@P?:6?<F?<UHzP?:?<F?<dHzP?:蠊?<F?<sHz̠P?: ?<J?<"HzP?<?<?<?<(?<?<4?<?<#?<?<(?<?<4?<?<.?<?<(?< ?<4Hl䠊0?<?<=?<?<(?<?< 4Hn栊0?<?<P?<?<(,?<0?<"Hz̠PHn?<?<(?<:?<F(HnHn?<?<?<?<4HnHnHn?<?<HnHn?<?<젊,HnHl䠊HnHn?<?<HnHn栊Hn?<F?<HzPHn?<?<?<Z?<(Hn?<?<Hn?<?<?<?<4Hn?<?<Hn?<?<Hn?<?<Hn?<?< Hn?<?<젊,Hn?<?<Hl䠊Hn?<?<Hn?<?<Hn?<?<Hn栊Hn?<?<?<@?<Hz젊PBg?< ?<N?<?<P?<N?<?<?<N?<?< ?<N?<?<P?<N?<?<?<N?<:?<HzrPHn?<?<?<?<(Hn?<?<AHlԠHn?<?<Hn栊Hn?<J?<KHl䠊Hn?<?<Hn?<BgHn?<-?<Z ?<P?<HzҠPB&_?<?<"?<?<?<2?< ?<Z?< ?<P?<?<_?<"?<?<"/ / ?<?<?<?<4/ |/ / ?<?</ / ?<?<蠊,/ Hl䠊/ / ?<?</ Hn栊/ / t?<@?<HzРPB.PHn?<?<?<?<^(Hn?<?<?<?<O?<E?<?<w?<O?<?<OHn?<m?<?<?<E(Hn //BF`?<  |?HzPRF Fo lHh/$?<D?<HzȠPHn?<?<?<:?<&(HnHn?<?<?<?<4HnxHnHn?<?<HnHn?<?<젊,HnHl䠊HnHn?<?<HnHn栊HnLN^NuRAWSTUFOvalsArbitrary Clipping RegionsRegionsPolygonsWedges Bit Images RoundRects RectanglesLinesShadowOutline UnderlineItalicBoldText%Look what you can draw with QuickDraw8040200002040800"NV,_NU"8A/A/A/NVAr/ m hHhN8N/</<Nb/-h"N]" NuN^NuDSAMPLEJoNV/./. /.*$ mY/ Hn*N^ _ NJoNV/. /.8N^ _PONЁO^E67dLPH r^arϴxor beginning } <"OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseRoundRect(tempRect,30,20); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PaintRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PenNormal; "FillRoundRePROGRAM QDSample; { Sample program illustrating the use of QuickDraw. } USES 7QuickDraw, { Intrinsic Unit } %{$U QD/Support } QDSupport; { Regular Unit } TYPE IconData = ARRAY[0..95] OF INTEGER; VAR heapBuf: ARRAY[0..10000] OF INTEGER;{must keep array under 32K byte limit} $myPort: GrafPort; $icons: ARRAY[0..5] OF IconData; FUNCTION HeapFull(hz: QDPtr; bytesNeeded: INTEGER): INTEGER; { This function will be called if the heapZone runs out of space } BEGIN "WRITELN('The heap is full. The program must now terminate! '); "Halt; END; PROCEDURE InitIcons; { Manually stuff some icons. Normally we would read them from a file } BEGIN "{ Lisa } "StuffHex(@icons[0, 0],'000000000000000000000000000000000000001FFFFFFFFC'); "StuffHex(@icons[0,12],'00600000000601800000000B0600000000130FFFFFFFFFA3'); "StuffHex(@icons[0,24],'18000000004311FFFFF00023120000080F231200000BF923'); "StuffHex(@icons[0,36],'120000080F23120000080023120000080023120000080F23'); "StuffHex(@icons[0,48],'1200000BF923120000080F2312000008002311FFFFF00023'); "StuffHex(@icons[0,60],'08000000004307FFFFFFFFA30100000000260FFFFFFFFE2C'); "StuffHex(@icons[0,72],'18000000013832AAAAA8A9F0655555515380C2AAAA82A580'); "StuffHex(@icons[0,84],'800000000980FFFFFFFFF300800000001600FFFFFFFFFC00'); "{ Printer } "StuffHex(@icons[1, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[1,12],'00000000000000007FFFFF00000080000280000111514440'); "StuffHex(@icons[1,24],'0002000008400004454510400004000017C00004A5151000'); "StuffHex(@icons[1,36],'0004000010000004A54510000004000017FE00F4A5151003'); "StuffHex(@icons[1,48],'0184000013870327FFFFF10F06400000021B0CFFFFFFFC37'); "StuffHex(@icons[1,60],'18000000006B3000000000D77FFFFFFFFFABC00000000356'); "StuffHex(@icons[1,72],'8000000001AC87F000000158841000CCC1B087F000CCC160'); "StuffHex(@icons[1,84],'8000000001C0C000000003807FFFFFFFFF0007800001E000'); "{ Trash Can } "StuffHex(@icons[2, 0],'000001FC000000000E0600000000300300000000C0918000'); "StuffHex(@icons[2,12],'00013849800000026C4980000004C0930000000861260000'); "StuffHex(@icons[2,24],'0010064FE0000031199830000020E6301800002418E00800'); "StuffHex(@icons[2,36],'0033E3801C0000180E002C00000FF801CC0000047FFE0C00'); "StuffHex(@icons[2,48],'000500004C000005259A4C000005250A4C00000525FA4C00'); "StuffHex(@icons[2,60],'000524024C00000524924C00600524924C0090E524924C7C'); "StuffHex(@icons[2,72],'932524924C82A44524924D01C88524924CF10C4524924C09'); "StuffHex(@icons[2,84],'0784249258E70003049233100000E000E40800001FFFC3F0'); "{ tray } "StuffHex(@icons[3, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[3,12],'0000000000000000000000000000000000000007FFFFFFF0'); "StuffHex(@icons[3,24],'000E00000018001A00000038003600000078006A000000D8'); "StuffHex(@icons[3,36],'00D7FFFFFFB801AC000003580358000006B807FC000FFD58'); "StuffHex(@icons[3,48],'040600180AB80403FFF00D58040000000AB8040000000D58'); "StuffHex(@icons[3,60],'040000000AB807FFFFFFFD5806AC00000AB8055800000D58'); "StuffHex(@icons[3,72],'06B000000AB807FC000FFD70040600180AE00403FFF00DC0'); "StuffHex(@icons[3,84],'040000000B80040000000F00040000000E0007FFFFFFFC00'); "{ File Cabinet } "StuffHex(@icons[4, 0],'0007FFFFFC00000800000C00001000001C00002000003400'); "StuffHex(@icons[4,12],'004000006C0000FFFFFFD40000800000AC0000BFFFFED400'); "StuffHex(@icons[4,24],'00A00002AC0000A07F02D40000A04102AC0000A07F02D400'); "StuffHex(@icons[4,36],'00A00002AC0000A08082D40000A0FF82AC0000A00002D400'); "StuffHex(@icons[4,48],'00A00002AC0000BFFFFED40000800000AC0000BFFFFED400'); "StuffHex(@icons[4,60],'00A00002AC0000A07F02D40000A04102AC0000A07F02D400'); "StuffHex(@icons[4,72],'00A00002AC0000A08082D40000A0FF82AC0000A00002D800'); "StuffHex(@icons[4,84],'00A00002B00000BFFFFEE00000800000C00000FFFFFF8000'); "{ drawer } "StuffHex(@icons[5, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,12],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,24],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,36],'00000000000000000000000000000000000000001FFFFFF0'); "StuffHex(@icons[5,48],'0000380000300000680000700000D80000D0003FFFFFF1B0'); "StuffHex(@icons[5,60],'0020000013500020000016B000201FE01D50002010201AB0'); "StuffHex(@icons[5,72],'00201FE01560002000001AC0002000001580002020101B00'); "StuffHex(@icons[5,84],'00203FF01600002000001C00002000001800003FFFFFF000'); END; PROCEDURE DrawIcon(whichIcon,h,v: INTEGER); VAR srcBits: BitMap; $srcRect,dstRect: Rect; BEGIN "srcBits.baseAddr:=@icons[whichIcon]; "srcBits.rowBytes:=6; "SetRect(srcBits.bounds,0,0,48,32); "srcRect:=srcBits.bounds; "dstRect:=srcRect; "OffsetRect(dstRect,h,v); "CopyBits(srcBits,thePort^.portBits,srcRect,dstRect,srcOr,Nil); END; PROCEDURE DrawStuff; VAR i: INTEGER; $tempRect: Rect; $myPoly: PolyHandle; $myRgn: RgnHandle; $myPattern: Pattern; BEGIN "StuffHex(@myPattern,'8040200002040800'); "tempRect := thePort^.portRect; "ClipRect(tempRect); "EraseRoundRect(tempRect,30,20); "FrameRoundRect(tempRect,30,20); "{ draw two horizontal lines across the top } "MoveTo(0,18); "LineTo(719,18); "MoveTo(0,20); "LineTo(719,20); "{ draw divider lines } "MoveTo(0,134); "LineTo(719,134); "MoveTo(0,248); "LineTo(719,248); "MoveTo(240,21); "LineTo(240,363); "MoveTo(480,21); "LineTo(480,363); "{ draw title } "TextFont(0); "MoveTo(210,14); "DrawString('Look what you can draw with QuickDraw'); "{--------- draw text samples --------- } "MoveTo(80,34); Drawstring('Text'); "TextFace([bold]); "MoveTo(70,55); Drawstring('Bold'); "TextFace([italic]); "MoveTo(70,70); Drawstring('Italic'); "TextFace([underline]); "MoveTo(70,85); Drawstring('Underline'); "TextFace([outline]); "MoveTo(70,100); Drawstring('Outline'); "TextFace([shadow]); "MoveTo(70,115); Drawstring('Shadow'); "TextFace([]); { restore to normal } "{ --------- draw line samples --------- } "MoveTo(330,34); Drawstring('Lines'); "MoveTo(280,25); Line(160,40); "PenSize(3,2); "MoveTo(280,35); Line(160,40); "PenSize(6,4); "MoveTo(280,46); Line(160,40); "PenSize(12,8); "PenPat(gray); "MoveTo(280,61); Line(160,40); "PenSize(15,10); "PenPat(myPattern); "MoveTo(280,80); Line(160,40); "PenNormal; "{ --------- draw rectangle samples --------- } "MoveTo(560,34); Drawstring('Rectangles'); "SetRect(tempRect,510,40,570,70); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseRect(tempRect); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "PaintRect(tempRect); "OffsetRect(tempRect,25,15); "PenNormal; "FillRect(tempRect,gray); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "FillRect(tempRect,myPattern); "FrameRect(tempRect); "{ --------- draw roundRect samples --------- } "MoveTo(70,148); Drawstring('RoundRects'); "SetRect(tempRect,30,150,90,180); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseRoundRect(tempRect,30,20); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PaintRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PenNormal; "FillRoundRect(tempRect,30,20,gray); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "FillRoundRect(tempRect,30,20,myPattern); "FrameRoundRect(tempRect,30,20); "{ --------- draw bit image samples --------- } "MoveTo(320,148); Drawstring('Bit Images'); "DrawIcon(0,266,156); "DrawIcon(1,336,156); "DrawIcon(2,406,156); "DrawIcon(3,266,196); "DrawIcon(4,336,196); "DrawIcon(5,406,196); "{ --------- draw Wedge samples --------- } "MoveTo(570,148); Drawstring('Wedges'); "SetRect(tempRect,520,153,655,243); "FillArc(tempRect,135,65,dkGray); "FillArc(tempRect,200,130,myPattern); "FillArc(tempRect,330,75,gray); "FrameArc(tempRect,135,270); "OffsetRect(tempRect,20,0); "PaintArc(tempRect,45,90); "{ --------- draw polygon samples --------- } "MoveTo(80,262); Drawstring('Polygons'); "myPoly:=OpenPoly; $MoveTo(30,290); $LineTo(30,280); $LineTo(50,265); $LineTo(90,265); $LineTo(80,280); $LineTo(95,290); $LineTo(30,290); "ClosePoly; { end of definition } "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "PenSize(3,2); "ErasePoly(myPoly); "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "PaintPoly(myPoly); "OffsetPoly(myPoly,25,15); "PenNormal; "FillPoly(myPoly,gray); "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "FillPoly(myPoly,myPattern); "FramePoly(myPoly); "KillPoly(myPoly); "{ --------- demonstrate region clipping --------- } "MoveTo(320,262); Drawstring('Regions'); "myRgn:=NewRgn; "OpenRgn; $ShowPen; $SetRect(tempRect,260,270,460,350); $FrameRoundRect(tempRect,24,16); $MoveTo(275,335); { define triangular hole } $LineTo(325,285); $LineTo(375,335); $LineTo(275,335); $SetRect(tempRect,365,277,445,325); { oval hole } $FrameOval(tempRect); $HidePen; "CloseRgn(myRgn); { end of definition } "SetClip(myRgn); "FOR i:=0 TO 6 DO { draw stuff inside the clip region } $BEGIN &MoveTo(260,280+12*i); &Drawstring('Arbitrary Clipping Regions'); $END; "ClipRect(thePort^.portRect); "DisposeRgn(myRgn); "{ --------- draw oval samples --------- } "MoveTo(580,262); Drawstring('Ovals'); "SetRect(tempRect,510,264,570,294); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseOval(tempRect); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "PaintOval(tempRect); "OffsetRect(tempRect,25,15); "PenNormal; "FillOval(tempRect,gray); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "FillOval(tempRect,myPattern); "FrameOval(tempRect); END; { DrawStuff } BEGIN { main program } "{----- Initialization - Generic to all applications using QuickDraw -----} "QDInit(@heapBuf, @heapBuf[10000], @HeapFull); { Must do this once at beginning } "OpenPort(@myPort); "PaintRect(thePort^.portRect); { Paint grey background } "InitIcons; "DrawStuff; "Tone(2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for 6500 milliseconds } "ReadLn; { Wait until RETURN entered before terminating program } END. GRAF3D "OPEN3DPOGraf OPEN3DPOOPEN3DPO$%I_FLT %I_FLT |vh^RF<MOVETO3DMOVETO3DIDENTITYIDENTITYpVIEWANGLVIEWANGLlLOOKAT LOOKAT bVIEWPORTVIEWPORT(GRAF3D QUICKDRAJoNVH&m+n n kHhN kI0,H/N0H/N0,H/N0,H/NNBNNNBNBNBNNLN^.NuPEN3DPOSETPORT3Graf SETPORT3SETPORT3SETPORT SETPORT GRAF3D 0JoNV+n n/NN^.NuETPORT3(GETPORT3Graf GETPORT3GETPORT3GRAF3D (JoNV n N^.NuETPORT3 MOVETO3DGraf MOVETO3DMOVETO3DMOVETO MOVETO ^CLIP3D CLIP3D NTRANSFORTRANSFOR8GRAF3D ~JoNV/ (mAC( )n)n )n$HlHl(NBgHnHl(HnHnNg ?.?.N(_N^ _ NOVETO3DvLINETO3DGraf LINETO3DLINETO3DLINETO LINETO jMOVETO MOVETO ^CLIP3D CLIP3D NTRANSFORTRANSFOR8GRAF3D JoNV/ (mAC( )n)n )n$HlHl(NBgHnHl(HnHnNg?.?.N?.?.N(_N^ _ NINETO3DMOVE3D Graf MOVE3D MOVE3D %F_ADD %F_ADD 0$MOVETO3DMOVETO3D4GRAF3D TJoNV/ (m/,/.N/, /. N/,$/.NN(_N^ _ NOVE3D LLINE3D Graf LINE3D LINE3D %F_ADD %F_ADD 0$LINETO3DLINETO3D4GRAF3D TJoNV/ (m/,/.N/, /. N/,$/.NN(_N^ _ NINE3D LMOVETO2DGraf MOVETO2DMOVETO2DMOVETO3DMOVETO3DGRAF3D 6JoNV/. /. m/($NN^ _PONOVETO2D.MOVE2D Graf MOVE2D MOVE2D MOVE3D MOVE3D 0JoNV/. /.BNN^ _PONOVE2D (LINETO2DGraf LINETO2DLINETO2DLINETO3DLINETO3DGRAF3D 6JoNV/. /. m/($NN^ _PONINETO2D.LINE2D Graf LINE2D LINE2D LINE3D LINE3D 0JoNV/. /.BNN^ _PONINE2D (VIEWLOOKGraf $1000000VIEWLOOK%F_SUB %F_SUB v%F_ADD %F_ADD `%F_DIV %F_DIV H,%I_FLT %I_FLT nX>"GRAF3D JoNVH(mG0+kH/N/<@N)_@0+SH/N/<N)_D0+H/N/,@N)_H0H/N/,DN)_LLN^NuIEWLOOKVIEWPORTGraf VIEWPORTVIEWPORT$1000000VIEWLOOK&GRAF3D @JoNV nCJ"" mXC NN^.NuIEWPORT8LOOKAT Graf LOOKAT LOOKAT %F_DIV %F_DIV T:%F_ADD %F_ADD J0$1000000VIEWLOOK\GRAF3D |JoNV/ (m)n )n )n)n/./. N/<@N)_4/./.N/<@N)_8N(_N^ _NOOKAT tVIEWANGLGraf VIEWANGLVIEWANGL%I_FLT %I_FLT %F_SUB %F_SUB xh%_SIN %_SIN P%_COS %_COS H%F_DIV %F_DIV |T>%F_MUL %F_MUL l:%F_LT %F_LT GRAF3D JoNVH..(m//<=Ng.<=//<@/  tpd^JF:~nV>$2000000CODE |GRAF3D 2tJoNVH nCJ""" nCJ"""B.(m/./,4N/,PN-_/./,8N/,TN-_/,JoNVH(.//JoNVH(.//JoNVH(.// 'EOF') AND (Name <> '') DO ($[Name] (READLN (OtherObjList) Name &ENDWHILE &CLOSE OtherObjList $ENDIF $$<[Unit2] "ELSE $IF Unit1 <> '' THEN &$[Unit1] $ENDIF $IF Unit2 <> '' THEN &$[Unit2] $ENDIF $IF Unit3 <> '' THEN &$[Unit3] $ENDIF $IF Unit4 <> '' THEN &$[Unit4EXEC { QPMAKE } (MainProg, ToolNumber, OfficeDiskName, { main input parms } 1Unit1, Unit2, Unit3, Unit4, { secondary input parms } 1Name) { local variable } #{ QPMAKE can be invoked in two ways, depending on how many units your %your program has. If you have 4 units or fewer, QPMAKE should be %invoked as follows: 'R '' THEN $IF COPY(OfficeDiskName, 1, 1) <> '-' THEN &SET OfficeDiskName TO CONCAT ('-', OfficeDiskName) $ENDIF $SET OfficeDiskName TO CONCAT (OfficeDiskName, '-') "ENDIF "IF EXISTS("QP/PHRASE") THEN $$F{fil-mgr}B{backup}QP/PHRASE,[OfficeDiskName]~{T[ToolNumber]~}PHRASE $$Q{quit} "ELSE $WRITELN CHR(7), 'The QuickPort PHRASE file (QP/PHRASE) is missing' "ENDIF "IF NOT (EXISTS('QPLIB.OBJ')) THEN $WRITELN CHR(7) $ABORT 'QPLIB.OBJ does not exist; cannot perform link' "ENDIF "{---- COMPILE PROGRAM AND UNITS ----} "IF Unit1 = '<' THEN { the units are in a UnitList } $RESET UnitList, Unit2 $IF IORESULT <> '' THEN &WRITELN CHR(7) &ABORT "Cannot open link list file ([Unit2])" $ENDIF $READLN (UnitList) Name $WHILE (Name <> 'EOF') AND (Name <> '') DO &SUBMIT comp([Name]) &READLN (UnitList) Name $ENDWHILE $CLOSE UnitList "ELSE $IF Unit1 <> '' THEN &SUBMIT comp([Unit1]) $ENDIF $IF Unit2 <> '' THEN &SUBMIT comp([Unit2]) $ENDIF $IF Unit3 <> '' THEN &SUBMIT comp([Unit3]) $ENDIF $IF Unit4 <> '' THEN &SUBMIT comp([Unit4]) $ENDIF "ENDIF "SUBMIT comp([MainProg]) "{---- LINK ----} "$L{link}? "$+w "$intrinsic.lib { use intrinsic.lib on prefix volume } "${ end of options } "$TKLIB "$TK2LIB "$QPLIB "$QP/UQuickPort "$QP/UQPortGraph "$QP/UQPortVT100 "$QP/UQPortSoroc "$SYS1LIB "$IOSPASLIB "$[MainProg] "IF Unit1 = '<' THEN $IF Unit3 <> '' THEN &RESET OtherObjList, Unit3 &IF IORESULT <> '' THEN (WRITELN CHR(7) (ABORT "Cannot open file with list of other OBJ files to link ([Unit3])" &ENDIF &READLN (OtherObjList) Name &WHILE (Name <> 'EOF') AND (Name <> '') DO ($[Name] (READLN (OtherObjList) Name &ENDWHILE &CLOSE OtherObjList $ENDIF $$<[Unit2] "ELSE $IF Unit1 <> '' THEN &$[Unit1] $ENDIF $IF Unit2 <> '' THEN &$[Unit2] $ENDIF $IF Unit3 <> '' THEN &$[Unit3] $ENDIF $IF Unit4 <> '' THEN &$[Unit4] $ENDIF $${ no more files } "ENDIF "${ no list file } "$[OfficeDiskName]~{T[ToolNumber]~} "{----RENAME OBJ FILE AFTER LINK----} "$F{fil-mgr}R{rename}[OfficeDiskName]~{T[ToolNumber]~}.OBJ "$~{T[ToolNumber]~}OBJ "$Y{yes}Q{quit fil-mgr} ENDEXEC w File/PrintSet Aside Everything Set Aside - Save & Put Away Save & Continue Revert to Previous Version - Print As Is Format for Printer ... Print ... Monitor the Printer ... wxEditCopy Read Input From Clipboard - Erase Save Buffer Don't Save Buffer - Select All Text .EditCopy Read Input From Clipboard wEditCopy Read Input From Clipboard - Erase Save Buffer Don't Save Buffer - Select All Text Select All Graph wEditCopy Read Input From Clipboard - Erase Save Buffer Don't Save Buffer - Flush Input - Select All Text BEditCopy Read Input From Clipboard - Flush Input wEditCopy Read Input From Clipboard - Erase Save Buffer Don't Save Buffer - Flush Input - Select All Text Select All Graph FTerminal SpecificsSet up Show Tab Ruler Hide Tab Ruler $ ExecutionRestart Resume  Page LayoutPreview Page Margins Preview Page Breaks Don't Preview Pages - Headings and Margins... - Set Horizontal Page Break Set Vertical Page Break Clear All Manual Breaks clDebugReport Every Event - "Check & Count Heaps after Commands Check List Indices - Dump Process Globals Dump Active Document Prelude - Enable Experimental Features - Report Garbage in Document Heap Free Garbage in Document Heap - Scramble Main Heap Scramble Document Heap - Edit Dialog Stop Editing Dialog d BuzzwordsSet Aside ^Document^ Undo ^Last Change^ Redo ^Last Change^ Typing Move Box Create New Heading Set Margins Some Command  File/PrintSet Aside Everything Set Aside Clipboard - Format for Printer ... Print... Print As Is Monitor the Printer ... Pee fgh h i i j j klm n o o                              5 6 ? ,B B,uNB,WAIT BNANC t t s   STOP ,B Wu:uNWN-: -NOTE ,BfDfDCAUTION DBACOyPyQxQ P O Cancel OK R_YO] 0 O/ OO9O8OB84OO7_@?OCO( O4!O1"OQ#O$ON%)&'?Y(?Q)*+O,O-eCP/fPgPhPiP jPkPlPmPnPoP pP qPrPsP tPuPvPwPxPyP zP{P |P}P ~PPPPPCPAPP PPPPP P P P PPP PP PPPOO{OAlert  has no matching entry in the phrase file.The last command was .  is experiencing technical difficulties in accessing the disk that has the  tool.It would probably be a good idea for you to Put Back your documents one at a time or to push the on-off button to save them all.If the problem recurs, refer to Appendix 1, Error Messages, in the  manual. /xAx x9x x$x x%x x.9 x.% 9,9 A'A A-A AA AA A.A is experiencing technical difficulties.  has an unknown error. You cannot do that because no text is selected. You cannot do that because nothing is selected. You cannot do that because there is no insertion point. Do you want to revert to the version saved ? Do you want to revert to a blank document?  cannot do "" You cannot do that to this kind of selection. The document has not changed since you last saved it.  is saving the new version of your document.To terminate the operation, hold down the Apple key while you type a period.  terminated the operation because you typed Apple-period. You cannot edit on the Clipboard. There is nothing on the Clipboard to Paste.  cannot Paste what is on the Clipboard. You must dismiss the Dialog Box before you can change the selection.  cannot undo "^K"  cannot undo the last change because there have been no changes. The document you are opening was last worked on using a release of  that lacked some features of the present release.If you click OK,  will update the document to work with the present release.If you click Cancel,  will not open the document. The document you are opening was last worked on using a release of  that had some features the present release does not have.If you click OK,  will remove from the document anything that required the extra capabilities; if you open the document later using that other release of , some information will probably be missing.If you click Cancel,  will not open the document; if you open it later using that other release of , nothing will be missing.  is converting the document to work with the present release of the tool.  is terminating the current operation because you typed Apple-period. PAGETITLE is having technical difficulties saving the document.Try creating more space on the disk containing the document.  is having technical difficulties reading the previous version of your document.The document may be damaged or there might not be enough disk space to open the document. 1Only  characters can be accepted here. Odd/Even@56,6Odd Pages Only@56,6Even Pages Only Odd or EvenMin Page:@70,32Max Page:@270,32Page Alignment@56,57Alignment:@56,100Top Left@56,68 Top Center Top RightBottom Left@56,85 Bottom Center Bottom RightLaunch New Heading@240,40Page Margins@6,116 Units@200,122inches@200,110centimeters@0,0 left@20,156leftCluster@ 100,146 top@20,174topCluster@ 100,166 right@20,194rightCluster@100,186 bottom@20,214bottomCluster@100,206Install Margins@560,176B0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 2.25 2.50@96, 140@0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0@96,140---New Heading--- OK@640,26 Cancel@640,80/second/secondsminute/minutes hour/hoursday/days week/weeks year/yearsago some time ago QuickPortCharacters Per Line WraparoundYesNoTab QuickPort's picture is running out of space. The subsequent graphic output will be displayed, but not saved for scrolling, until your tool erase the whole screen. Your QuickPort tool has called another OpenPicture in the QuickPort's grafport. This tool will be aborted. QuickPort's buffer is running out of space. The top lines will be deleted. You can use the Erase command to erase the top lines in the buffer to create some room. tUQPORTCA {QuickPort procedures declaration, to be used by program} INTERFACE USES $QuickDraw; {needed to compile Style, etc} "CONST $maxPosLines = 50; {max possible lines for any terminal emulator} $maxPosColumns = 132; %{clearkind definition for ClearScreen procedure} $sclearScreen = 1; {clear the whole screen} $sclearEScreen = 2; {clear to the end of the screen} $sclearBScreen = 3; {clear from the beginning of the screen to the cursor position} $sclearLine = 4; {clear the whole line} $sclearELine = 5; {clear to end of line} $sclearBLine = 6; {clear from the beginning of the line to the cursor position} "TYPE $QPByte = -128..127; $TQPConfigRec = RECORD 5tosaveBuffer : BOOLEAN; {save lines in buffer} 5passApplePeriod : BOOLEAN; {pass apple '.' to main program} 5showInputPanel : BOOLEAN; {display input panel} 5CASE twoPanels : BOOLEAN OF {have both text and graphic panels} 7TRUE : (vhs : VHSelect; {vertical or horizontal split} ?grPanelSize : INTEGER); {initial width or height in pixels, if < 0, text ]panel is below or right of the graph panel} 3END; $TCursorshape = (blockshape, underscoreshape, invisibleshape); $TTermPara = RECORD 2rowsize : 1..maxPosLines; 2columnsize : 1..maxPosColumns; 2toWraparound : BOOLEAN; 2keytoStopOutput : CHAR; 2keytoStartOutput : CHAR; 2tmcursorShape : TCursorshape; 0END; $TMouseEvent = RECORD 4mouseLoc : Point; 4clicknum : INTEGER; {max 3 for triple clicks} 4mouseDown, meShift, meApple, meOption : BOOLEAN; 2END; {Procedures to be called by programs, or terminal emulators} "PROCEDURE QPConfig (config : TQPConfigRec); {main program should call this before any screen i/o} "PROCEDURE SetupTermPara (termpara : TTermPara); {set up terminal parameters from program or terminal emulator} R{main program or terminal emulator should call this before any Sscreen i/o.} "PROCEDURE VRead (VAR ch: CHAR; VAR keycap : QPByte; VAR applekey, shiftkey, optionkey: BOOLEAN); R{program can call this to get control keys, instead of READ, SBut this call will not echo the character read, nor do mapping.} "PROCEDURE ClearScreen (clearkind : INTEGER); "PROCEDURE VGotoxy (x, y : INTEGER); "PROCEDURE MoveCursor (scroll : BOOLEAN; xdistance, ydistance : INTEGER); R{scroll is only meanful in vertical direction.} R{xdistance, ydistance: positive means to the right or down.} "PROCEDURE SetTab (column : INTEGER); {use cursor if column < 0} "PROCEDURE ClearTab (clearAll : BOOLEAN; column : INTEGER); {use cursor if column < 0} "PROCEDURE StopInput; {lock keyboard from program or terminal emulator} "PROCEDURE StartInput; {unlock keyboard} ${Character attributes change} "PROCEDURE ChangeCharStyle (newstyle : Style); "PROCEDURE QPYield_CPU; {Programs should include this call in the long compute-bound ?loop. This call will handle user's menu and mouse actions ?as well. If programs do not want to give up being the active ?window, they may call Yield_CPU.} ${-Printer support} "procedure PrChangeFont ( Font: integer); {Mouse input routines} "PROCEDURE VGetMouse (VAR pt : Point); {same as GetMouse in QPSupport} "FUNCTION MouseButton : BOOLEAN; {same as MouseButton in QPSupport} "FUNCTION MouseEvent (VAR aMouseEvent : TMouseEvent) : BOOLEAN; -{Return a mouse event if there is one in the queue; otherwise, return false. A mouse event is a .mouse button down, mouse click, double clicks or triple clicks. Mouse move without button .pressed down is not a mouse event. If you get a mouseDown event, several different mouseLoc .events may be returned in subsequent calls, and they are always ended with a mouse up event. If .double clicks, events of down, up, down, up are returned, with the second down event's clicknum .= 2. If triple clicks, events of down, up, down, up, down, up are returned, with the second down .event's clicknum = 2, and third down event's clicknum = 3. If mouseDown field is false, other .fields are meaningless. } "PROCEDURE WaitMouseEvent (VAR aMouseEvent : TMouseEvent); -{This procedure gets a mouse event in a similar way to READ and READLN in PASCAL, ie, it will .block the caller until there is a mouse event in the queue. Program should use this call instead .of the above call to avoid polling and wasting CPU time. This call would also make program more .reponsive to user events such as pulling down menus, clicking to other windows, etc. when .program is waiting for mouse input.} "PROCEDURE WaitEvent (VAR fromKeyboard : BOOLEAN); -{This procedure is combination of READ and WaitMouseEvent. It will block the caller until there .is either keyboard or mouse input. Program that is interested in getting both keyboard and .mouse input should use this call instead of KEYPRESS and MouseEvent.} "FUNCTION QPGrafPicSize : INTEGER; -{This function returns the current size of the picture used to save all the graphic output in .the graphic panel.} "PROCEDURE TrmntExceptionHandler; -{Standard terminate exception handler. If you want to declare your .own terminal exception handler, you should call this one first thing .in your own handler.} IMPLEMENTATION UQPORTGRUQPORTGR uqportgrUQPORTGRuqpgraphUQPGRAPH.ustdtermUSTDTERM*blkiointBLKIOINT&udialog UDIALOG "utext UTEXT utkuniveUTKUNIVEuabc UABC udraw UDRAW uobject UOBJECT %_UNIT %_UNIT FJoNVNNNNNNNNNNN^NuQPORTGR>/{to be used by quickport graphic programs, so that they don't have 0to use all these units.} INTERFACE USES $UObject, $QuickDraw, $UDraw, $UABC, $UTKUniversalText, $UText, $UDialog, $Blkiointr, $UStdterm, $UQPGraph; IMPLEMENTATION END. UQPORTSOUQPORTSO uqportsoUQPORTSOusoroc USOROC .ustdtermUSTDTERM*blkiointBLKIOINT&udialog UDIALOG "utext UTEXT utkuniveUTKUNIVEuabc UABC udraw UDRAW uobject UOBJECT %_UNIT %_UNIT FJoNVNNNNNNNNNNN^NuQPORTSO>/{to be used by quickport programs that want to use Soroc emulator, 0so that they don't have to use all these units.} INTERFACE USES $UObject, $QuickDraw, $UDraw, $UABC, $UTKUniversalText, $UText, $UDialog, $Blkiointr, $UStdterm, $USoroc; IMPLEMENTATION END. UQPORTVTUQPORTVT uqportvtUQPORTVTuvt100 UVT100 .ustdtermUSTDTERM*blkiointBLKIOINT&udialog UDIALOG "utext UTEXT utkuniveUTKUNIVEuabc UABC udraw UDRAW uobject UOBJECT %_UNIT %_UNIT FJoNVNNNNNNNNNNN^NuQPORTVT>/{to be used by quickport programs that want to use VT100 emulator, 0so that they don't have to use all these units.} INTERFACE USES $UObject, $QuickDraw, $UDraw, $UABC, $UTKUniversalText, $UText, $UDialog, $Blkiointr, $UStdterm, $UVT100; IMPLEMENTATION END. UQUICKPOUQUICKPO uquickpoUQUICKPOustdtermUSTDTERM*blkiointBLKIOINT&udialog UDIALOG "utext UTEXT utkuniveUTKUNIVEuabc UABC udraw UDRAW uobject UOBJECT %_UNIT %_UNIT BJoNVNNNNNNNNNN^NuQUICKPO:/{to be used by quickport programs, so that they don't have to use 0all these units.} INTERFACE USES $UObject, $QuickDraw, $UDraw, $UABC, $UTKUniversalText, $UText, $UDialog, $Blkiointr, $UStdterm; IMPLEMENTATION END. vsQPortIn  sQPortRe  `@sQPortCo  'sQPortTE  0x.*BUQPPRINT>USTDTERM ^UQPGRAPH&USOROC )UVT100 +̛=hPASLIB UNITSTD GRAFUTILUNITHZ STORAGE QUICKDRAHWINT FEDEC FONTMGR EVENTS WINDOWS FOLDERS MENUS FLDUT WMLSTD WMLCRS WMLGROW WMLSB INTERNATFPLIB ALERTMGRMATHLIB UNITFF UNITCS UNITFILEUNITFMT UUNIVERS USTDTERM#UQPGRAPH$UQPPRINT&FMGRUTIL*PMM +PMDECL ,UNITFIGA-SYS1LOCK.UCLASCAL/UTKUNIVE1UOBJECT 2UTEXT 3UDRAW 4UABC 5UDIALOG 6DBENV ?FIELDEDIGSCRAP IFILERCOMKPRPUBLICLPRSTDINFMPRSTDPRONPRFILEPROPRBUF PPRSPOOL QQUEUES RPREVENTSSPRDLGMGRTPRMGR UUVT100 VUSOROC WBLKIOINTfBLOCKIO gPASHEAP h@SgParResSgTxtIniSgTxtResSgTxtTwoSgDialogSgDIAdbgSgLayoutTKUT sQPortIn sQPortRe sQPortCo sQPortTE PASLIB1 LWWORK OTHRWORKACTIVATEOPENSEG1INcold NEVER SgABCdatSgABCdbgSgABCiniSgABCcldSgABCresalert WMcold SMcold SUcold "SgDRWres$SCROLL &SgCLAini)UT 3SgCLAdbg=SYSINIT ASgABCpriBPMMSeg CWORKSET DGRAFSEG EFEcutCopFFEcold GSBcold HOPENSEG2IPrBtn JMOVERS KPrwork LPrMgr MALRTDIALNOPEN1LW OPr PPrInit Qfpsane Sfpelems Tfpreal UfprealioVfpdecstrWcorrbd Ymathlib Zfinance [matrix \double ]mathsort^solve _PASIOLIB`SgPASinib UQPPRINTINTRINSIC; INTERFACE uses {$U libos/syscall } syscall, {$U libpl/paslibcall } paslibcall, {$U libpl/ppaslibc } PPasLibC, {$U libpm/pmdecl } PMDecl, {$U UnitStd } UnitStd, {$U UnitHz } UnitHz, {$U Storage } Storage, {$U QuickDraw } QuickDraw, {$U FontMgr } FontMgr, {$U+ } {$U Sys1Lib } PrStdInfo, {$U PRLib } PrPublic; type LongStr = String[255]; tPStr = ^LongStr; procedure vwp_Init; function vwp_Reset: boolean; function vwp_Close: boolean; function vwp_W_Str (pStr: tPStr): boolean; procedure PrChangeFont ( Font: integer); procedure PrWrapAround ( TurnOn: boolean); procedure PrPageRect (l,t,r,b: integer); VAR vwptoinit : BOOLEAN; IMPLEMENTATION {$IFC fDbgOK} {$R+} {$ELSEC} {$R-} {$ENDC} (USTDTERMNTRINSIC; INTERFACE USES {$U tklib} UObject, {$U sys1lib} QuickDraw, {$U tklib} UDraw, {$U tklib} UABC, {$U tk2lib} UTKUniversalText, {$U tk2lib} UText, {$U tk2lib} UDialog, {$U libos/Syscall} Syscall, {$U iospaslib} UClascal, {$U iospaslib} Blkiointr, {$U libqp/UQPPrint} UQPPrint, {$U libqp/QP/Hardware} Hardware; {$SETC fRngQP := fDbgOK} {$SETC fSymQP := fSymOK} CONST maxPosLines = 50; maxPosColumns = 132; maxtextline = 133; sclearScreen = 1; sclearEScreen = 2; sclearBScreen = 3; sclearLine = 4; sclearELine = 5; sclearBLine = 6; TYPE TQPConfigRec = RECORD tosaveBuffer : BOOLEAN; passApplePeriod : BOOLEAN; showInputPanel : BOOLEAN; CASE twoPanels : BOOLEAN OF TRUE : (vhs : VHSelect; grPanelSize : INTEGER); END; Tcursorshape = (blockshape, underscoreshape, invisibleshape); TTermPara = RECORD rowsize : 1..maxPosLines; columnsize : 1..maxPosColumns; toWraparound : BOOLEAN; keytoStopOutput : CHAR; keytoStartOutput : CHAR; tmcursorShape : Tcursorshape; END; TMouseEvent = RECORD mouseLoc : Point; clicknum : INTEGER; mouseDown, meShift, meApple, meOption : BOOLEAN; END; TTermProcess = SUBCLASS OF TProcess FUNCTION CREATE: TTermProcess; END; TTermDocManager = SUBCLASS OF TDocManager FUNCTION CREATE(object: TObject; heap: THeap; itsPathPrefix: TFilePath): TTermDocManager; END; TTermView = SUBCLASS OF TView minViewLRect : LRect; lines : TArray; firstLineStartX : INTEGER; FUNCTION CREATE(object: TObject; heap: THeap; itsPanel: TPanel; itsExtent: LRect; itsLines : TArray): TTermView; END; TInputView = SUBCLASS OF TView FUNCTION CREATE(object: TObject; heap: THeap; itsPanel: TPanel; itsExtent: LRect): TInputView; END; TTermCutCopyCmd = SUBCLASS OF TCutCopyCommand termSelection: TTermSelection; FUNCTION CREATE(object: TObject; heap: THeap; itsCmdNumber: TCmdNumber; itsView: TView; itsSelection: TTermSelection): TTermCutCopyCmd; END; TTermPasteCmd = SUBCLASS OF TPasteCommand FUNCTION CREATE (object: TObject; heap: THeap; itsCmdNumber: TCmdNumber; itsView: TView): TTermPasteCmd; END; TCoordinate = RECORD Case BOOLEAN OF TRUE : (y, x : INTEGER); FALSE : (xyCoord : LONGINT); END; TSelRange = RECORD startXY : TCoordinate; endXY : TCoordinate; END; TTermSelection = SUBCLASS OF TSelection selRange : TSelRange; anchorXY : TCoordinate; FUNCTION CREATE (object: TObject; heap: THeap; itsView: TView; itsKind: INTEGER; itsCharPos : TCoordinate; itsAnchorLPt: LPoint): TTermSelection; PROCEDURE QPHighlight (highTransit: THighTransit; cursorpoint : Point); PROCEDURE SetRange (sXY, eXY : TCoordinate; startIsAnchor : BOOLEAN); END; TGraphView = SUBCLASS OF TView minViewLRect : LRect; qdpPicture : PicHandle; scrolldh : INTEGER; scrolldv : INTEGER; FUNCTION CREATE (object: TObject; heap: THeap; itsPanel: TPanel; itsExtent: LRect): TGraphView; END; TGraphCutCopyCmd = SUBCLASS OF TCutCopyCommand graphSelection: TGraphSelection; FUNCTION CREATE (object: TObject; heap: THeap; itsCmdNumber: TCmdNumber; itsView: TView; itsSelection: TGraphSelection): TGraphCutCopyCmd; END; TGraphSelection = SUBCLASS OF TSelection FUNCTION CREATE (object: TObject; heap: THeap; itsView: TView; itsKind: INTEGER; itsAnchorLPt: LPoint): TGraphSelection; END; TInputBuffer = SUBCLASS OF TObject inputRun : TString; combKeys : TArray; FUNCTION CREATE(object: TObject; heap: THeap; fromKeyboard : BOOLEAN): TInputBuffer; END; TVanWindow = SUBCLASS OF TWindow typeAhead : TArray; inputcount : INTEGER; termPanel : TPanel; inputPanel : TPanel; graphPanel : TPanel; stdterm : TStdTerm; dialogWindow : TDialogWindow; termDialog : TTermDialog; FUNCTION CREATE(object: TObject; heap: THeap; itsWmgrID: TWindowID): TVanWindow; PROCEDURE TVanWindow. DoKey (ascii: CHAR; keycap : Byte; shiftKey, appleKey, optionKey: BOOLEAN); END; TTermWriteUnivText = SUBCLASS OF TTKWriteUnivText termView : TTermView; linePosition : INTEGER; charPosition : INTEGER; FUNCTION CREATE (object: TObject; heap: THeap; itsDataArray: TString; itsDataSize: INTEGER; itsView : TTermView): TTermWriteUnivText; END; TTermDialog = SUBCLASS OF TDialog orgtabindex : INTEGER; orgtabstr : STRING [5]; FUNCTION CREATE (object: TObject; heap: THeap; itsView: TView): TTermDialog; PROCEDURE SetupDialog; END; TTabPosition = RECORD Case TabSet : BOOLEAN OF TRUE : (TabStop : packed array [0..maxPosColumns] of BOOLEAN); FALSE : (All : array [1..5] of LONGINT); END; TRAttributes = RECORD charStyle : Style; charFont : INTEGER; END; Tfontinfo = RECORD leading, ascent, descent, widmax, lineheight : INTEGER; END; TTermLine = SUBCLASS OF TObject size : INTEGER; ch : PACKED ARRAY [0..maxtextline] OF CHAR; FUNCTION CREATE : TTermLine; END; TStdTerm = SUBCLASS OF TObject window : TVanWindow; buffer : TArray; screen : ARRAY [0..maxPosLines] OF TTermLine; maxLines : INTEGER; maxColumns : INTEGER; viewSize : INTEGER; cursorPt : Point; cursorXY : TCoordinate; cursorshape : Tcursorshape; saveBuffer : BOOLEAN; wrapAround : BOOLEAN; stopOutputKey : CHAR; startOutputKey : CHAR; tabPosition : TTabPosition; dfontInfo : TFontinfo; defltAttr : TRAttributes; currAttr : TRAttributes; handleApplePeriod : BOOLEAN; haveInputPanel : BOOLEAN; haveTwoPanels : BOOLEAN; txpanelonly : BOOLEAN; grpanelonly : BOOLEAN; alreadyConfigured : BOOLEAN; bufhasroom : BOOLEAN; FUNCTION CREATE (object : TObject; heap : Theap) : TStdTerm; PROCEDURE VWrite (VAR str : Tstr255); PROCEDURE CtrKeyWrite (ctrch : CHAR); PROCEDURE VRead (VAR ach: char; VAR keycap : Byte; VAR applekey, shiftkey, optionkey : BOOLEAN); END; TPasTerm = SUBCLASS of TTERMINAL FUNCTION CREATE : TPasTerm; END; TPMouseEvent = ^TMouseEvent; VAR ConsTerm : TStdTerm; qdpUsed : BOOLEAN; qdpGPtr : grafptr; qdpGPort : grafport; qdpPicOpen : BOOLEAN; qdpViewRect : Rect; qMouseEvents : TArray; PROCEDURE QPConfig (config : TQPConfigRec); PROCEDURE SetupTermPara (termpara : TTermPara); PROCEDURE VRead (VAR ch: CHAR; VAR keycap : Byte; VAR applekey, shiftkey, optionkey: BOOLEAN); PROCEDURE ClearScreen (clearkind : INTEGER); PROCEDURE VGotoxy (x, y : INTEGER); PROCEDURE MoveCursor (scroll : BOOLEAN; xdistance, ydistance : INTEGER); PROCEDURE SetTab (column : INTEGER); PROCEDURE ClearTab (clearAll : BOOLEAN; column : INTEGER); PROCEDURE StopInput; PROCEDURE StartInput; PROCEDURE ChangeCharStyle (newstyle : Style); PROCEDURE QPYield_CPU; PROCEDURE VStrWrite (VAR str : Tstr255); PROCEDURE VGetLine (lineNo : INTEGER; VAR line : Tstr255; delete : BOOLEAN); PROCEDURE VPutLine (lineNo : INTEGER; VAR line : Tstr255; insert : BOOLEAN); PROCEDURE VScrollLines (topRegion, bottomRegion : INTEGER; scrollhowmanylines : INTEGER); PROCEDURE RedrawScreen; PROCEDURE RedrawLine (lineNo : INTEGER); PROCEDURE ChangeMaxColumns (newColumns : INTEGER); PROCEDURE ChangeFont (newfont : INTEGER); PROCEDURE BindDocheap; PROCEDURE CkPutAway; FUNCTION NotToWait : BOOLEAN; IMPLEMENTATION UQPGRAPHVNTRINSIC; INTERFACE USES {$U tklib} UObject, {$U sys1lib} QuickDraw, {$U tklib} UDraw, {$U tklib} UABC, {$U tk2lib} UTKUniversalText, {$U tk2lib} UText, {$U tk2lib} UDialog, {$U iospaslib} Blkiointr, {$U libqp/UStdterm} UStdterm, {$U libos/Syscall} Syscall; TYPE TQPGraph = SUBCLASS of TObject FUNCTION CREATE : TQPGraph; END; PROCEDURE VGetMouse (VAR pt : Point); FUNCTION MouseButton : BOOLEAN; FUNCTION MouseEvent (VAR aMouseEvent : TMouseEvent) : BOOLEAN; FUNCTION VStillDown : BOOLEAN; PROCEDURE WaitMouseEvent (VAR aMouseEvent : TMouseEvent); PROCEDURE WaitEvent (VAR fromKeyboard : BOOLEAN); FUNCTION QPGrafPicSize : INTEGER; PROCEDURE QPScrollRect (dstRect : Rect; dh, dv : INTEGER; updateRgn : RgnHandle); IMPLEMENTATION JUSOROC NTRINSIC; INTERFACE USES {$U tklib} UObject, {$U sys1lib} QuickDraw, {$U tklib} UDraw, {$U tklib} UABC, {$U tklib} UTKUniversalText, {$U tklib} UText, {$U tklib} UDialog, {$U iospaslib} Blkiointr, {$U libqp/UStdTerm} UStdTerm; CONST maxI = 3; TYPE states = (q0,q1,q2,q3,q4,q6); Ilist = ARRAY [1..maxI] OF CHAR; smallstr = STRING [10]; TSOROC = SUBCLASS OF TStdTerm state : states; I : Ilist; newline : BOOLEAN; params, pos, top,bottom,rmarg : INTEGER; vReadBuff : TString; FUNCTION CREATE (object : TObject; heap : Theap) : TSOROC; END; IMPLEMENTATION 4UVT100 NTRINSIC; INTERFACE USES {$U tklib} UObject, {$U sys1lib} QuickDraw, {$U tklib} UDraw, {$U tklib} UABC, {$U tklib} UTKUniversalText, {$U tklib} UText, {$U tklib} UDialog, {$U iospaslib} Blkiointr, {$U libqp/UStdTerm} UStdTerm; CONST maxp = 5; maxI = 5; bmarg = 23; tmarg = 0; TYPE states = (q0,q1,q2,q3,q4,q5,q6,q7); Plist = array[1..maxp] OF Tstr255; Ilist = array[1..maxI] OF CHAR; padtype = (ansiAppl,vt52Appl,normal); curskeymodes = (ansiSet,ansiReset,vt52set); smallstr = string[10]; typeStyle = (GR,US,UK); fontStuff = record vcursorXY : TCoordinate; charInfo : TRAttributes; currType : typestyle; END; TVT100 = SUBCLASS OF TStdTerm state : states; P : Plist; I : Ilist; newline, ansi, vt52, LetHerScroll, ukPound, origabs : BOOLEAN; params, pos, top,bottom,rmarg : INTEGER; charAttr : fontStuff; vReadBuff : TString; S1Font,S0Font, currentFont : typeStyle; TILE12VTS, TILE20VTS : INTEGER; CursorKeyMode : curskeymodes; keyPad : padtype; FUNCTION CREATE (object : TObject; heap : Theap) : TVT100; END; IMPLEMENTATION IntrinSgsQPortTETVT100 TVT100  uvt100 UVT100 TSOROC TSOROC usoroc USOROC .*N$^N N-N$JoNVH,.*. JfB/ mTA/:D*B//$-_BB/?<:. n(P9|L9|N|P|Q)GDBl09|O8Bl49|6|-G:64BkB+7||I|HlHJB,.|/Bl0B,||*B,+|,9|P9|BlBl)l>)lLN^ _PONJoNVH nCJ"""(nA&H l P hD P (R// l P/(DN. g?. l P/(DN LN^ _ NJoNV n~ _ n0 \D@N^ _\ONJoNV n \ n~ _D@N^ _\ONJoNV n/ _ n \D@N^ _\ONJoNV n~ _ n@ \D@N^ _\ONJoNV nCJp@"S@n n RP n .@Pm n 0A0A n0` nBPN^ _NJoNVH. nG S(PFJ fB,. lO8f~`~?`*Jf lO8f>,L`>,N?` f|.LN^ _\ONJoNVH(n>. HgS@gS@g8S@gN`d Gf`X GYf`Bg?/.NFg`B`2Bg?/.NTg`B`Bg?/.N:g`BLN^ _ NJoNV n9 _ n0 \D@N^ _\ONJoNVH(n>. HgS@g(S@gbS@gU@gU@g` Gf` G[f`.Bg?/.Ng`Bg?/.N\g`B`Bg?/.Ng`Bg?/.N4g` G?gB`~ G;f`*Bg?/.Nvg`Bg?/.Ng`B`FBg?/.Ng`B`,Bg?/.Ng`Bg?/.N gBLN^ _ NJoNVH>. .&n.g~ KP-H n P(P0,l4]2,l6^g^JGl( lJ@m?, l?D` ?,BgD`.JGo* l @n?, l?D` ?,?<D`JGlx l2,4@<JFoT?,?,4DgB?0,$| <l6o>,l8o<,??DLN^ _ N/ZJoNVH nCJ""2&nJn f`0.@7gS@g[@g,S@g2]@gS@g&W@g [@g>@g` KP-H n P(PA:-H|P|Q9|O8Bl49|6|-|IlIHlHJ n04 nBh nB( n1||/Bl0B,||*B,+|, k P hPg?<P k PB@(>??<?<"?<T k P?(@?<Bg k P?(4D`&<<?</.N `<<?</.N?< /+N`<<?JGoSG`JGgB. Fo(BgHn/.N=_JnoSn` JngB.n]. n_gH KP-H n P(P ngB,-`|-9n69G4,/g BgBgD` Bg?,4D``JFoZ=F~`J @AHpHz"g <Bg `" @AHpHz"g Bg?< RGino` Bg?< `HnHz"g=F~`Bg @AHp/.N0S@gU@gW@grS@g` k PB(P`?< KP-H n P(PBl49|89|6|-?< k P(J/.N"Bg k P?(4D`( k PB(/Bg k P?(4D` k P|RGino8`" FfHnHz"g k P|*`-|XX pApA[BgHn/.N _f KP-H n P(P:,8,?,Hn/.N,/g?,Hn/.Nr`.0,l4\2,l6_g0,l4?Hn/.NBHn?< Bg/.NHn?<;</.NHn?<n</.Nl`4HnHzΠ"g$Hn?< Bg/.NHHz?< Bg/.N6`-|XX pApA[Hn?< Bg/.NHz^?< Bg/.N`8HnHzB"g=F~`Bg @AHp/.N0S@gS@g$S@gNW@gS@g` k P|P` KP-H n P(P|,B,+|PJ,Qf|Q`z?< KP-H n P(PBl49|6|-9|O8 k P(J/.N?<PBg k P?(4D` k P|/BgBgD` k PB(RGino ` FfHnHz""g k PB(*LN^ _ N20??1;2c5n503JoNVH nCJp@"S@n(np n C l P(-g HnX` l P"l"Q0(8iR@>.@@l l P( g6 .AA0BApAHnXB.`XHn?<?Hn"ACp@ S@nHn?<?"HnX<<?</.Nv?< /,N` HnXB.HnHz "g n BPLN^ _ NJoNVH n P(- n @<=F~` n 0p@ @nBRGino n PJ(W"gh n P(.gP n Cp@"S@n=F~`(A0p@ @#f=| ARGinoHnX`/. X`X FW n r0B B WgH?< /.N n P(*g, n P(-g?< /.N`<<?</N`BnBnnoRn n 0.0A=A nnJnoHnHn/NP0.Q@gU@gS@gS@gS@gpS@gHS@gV@ g&U@g"S@g` n P| n PBh0` n PB( n PBh0` n P(I/N`n n P(H/N`\?./.N n P(*g<<?</N `0<<?</N`BgBg?. HgS@gS@g8S@gN`d Gf`X G=f`Bg?/.Ng`B`2Bg?/.Ng`B`Bg?/.Ng`BLN^ _ NJoNV n9 _ n0 \D@N^ _\ONJoNVH>. .&n.gh KP-H n P(P0,l,]2,l.^g^JGl( lJ@m?, l?D` ?,BgD`.JGo* l @n?, l?D` ?,?<D`JGlh l2,,@<JFoD k P?(?,,Dg,?0,$| <l.o>,l0o<,??DLN^ _ NJoNVH nCJp@"S@n(np n C l P"l"Q0(0iR@>.@@l l P( g6 .AA0BApAHnXB.`XHn?<?Hn"ACp@ S@nHn?<?"HnX<<?</.N?< /,N` HnXB.HnHz "g n BPLN^ _ NJoNVH n @>z=G|` n 0`@ @ lBRFino n PJ(W"g /. X`b GW n r0B B Wg(?< /.N n P(&g ?< /.N`B.BnBnno/. HnHn/N nnJnoHnHn/N0.Q@g~U@gfS@gS@gS@g*@g W@g` n P| n PBh(`?./.N n P(&g<<?</N.`^<<?</N`JBgBg?HnBg"hLN^ _ NJoNVH&n(mN m h0,ΰhDg?,Π m h,(FgB@,??<?<"?<T m h0,ҰhHg?,Ҡ m h0,԰hJg?,Ԡ m h ,ְLg/,֠h?+?+/+N?+/+/+ /+LN^.NuJoNVHnBgN>g/.N?././. /. m h P h P-hHz//.NNHnBg"hN^ _NJoNV/ (nNDHlꠊ?,?,ꠊ/,|(_N^.NuJoNVHnꠊBgNg/.| m h P h P-hHz//.NNPHnBg"hN^.NuJoNVH(n&mNHl⠊ , fHlHk` , fHk4, HlLN^.NuJoNVH nCJ""(m&mN k P h P.( . fLBgHnHlHg:+gB+ G P,($ F P/(Rp F PBRHlBgBgBgBg(Hn⠊BgN^g. HnHlHnHlHz//NNHnBg"hLN^ _\ONJoNVH(n&mNtHl⠊ ,fHl?, ?,Hk`$ ,fHk4,Hl?, ?,LN^.NuJoNVH n CJ""(mHn⠊BgNg$.Hn?. ?.HlHnHl m h P h P&hHz*// NN"HnBg"hLN^ _ NJoNVH(n&mNxHl⠊ , fHlHk` , fHk4, HlLN^.NuJoNVH nCJ""(mHn⠊BgNg. HnHlHnHl m h P h P&hHzB// NN>HnBg"hLN^ _\ONJoNVH(n&mNHl⠊ ,fHl?, ?,Hk`$ ,fHk4,Hl?, ?,lLN^.NuJoNVH n CJ""(mHn⠊BgNg$.Hn?. ?.lHlHnHl m h P h P&hHz*// NNDHnBg"hLN^ _ NJoNVH(n&mNHlꠊ , f/,Hk` , fHk4, /,LN^.NuJoNVH(mHnꠊBgNg". /.Hl n PHhHl m h P h P&hHzJ// NNhHnBg"hLN^ _\ONJoNVH(n&mNHlꠊ , f/,Hk` , fHk4, /,LN^.NuJoNVH(mHnꠊBgNg". /.Hl n PHhHl m h P h P&hHzJ// NNHnBg"hLN^ _\ONJoNV/ (nN/,/,/,?, /,p(_N^.NuJoNVH(mBgNBg(/././.?. /.pHl/.Hl m h P h P&hHzv// NNHnBg"hLN^ _NJoNV mA-HAp"n"A"n#HA"n#HA"n#H A"n#HA"n#HA"n#HAj"n#HA"n#H N^Nu _"_JNJoNVH.&m?.?. HnN?. ?.HnN KY-H n P P-H nI<.0l2.@>0.n o~Jno6Hn???+R0,n?(g Hn`Hn|lHn???+R0l2.@?(g Hn`Hn0l2.@>Hn???.0,n?(g Hn`HnLN^ _ NJoNVH(m?,ZB@,X??<?<"?<T n PJRgnA\-H n"n0)P> n P hR P=h|`6BH/ n P/(RN _*p/H/H/N  nhRFino` l PJg m h P0,LH,o& l P h P8(JDoBg D@?HnN >.=D|` LY-H n P P-H nGJGob m h P0+GH,oJ m h P kSH4l,p/H/HBH/ l P/(N _*/N.``kRFinop m( gPBn=lL=|=|=| mCA""HnࠊB0,LH/H0,RH/BH LY-H n P P-H nG0lL2+@> n0(S@=@BF`\ m h P0+GH,o< m h P kSH4l p/H/H l P @/0 N.``kRFino,3g&HlDBg?.(m,4fH G?^.g H H@J@>,7  l PhWg |7` l PhfB,7`,6,7g` S ht PJf*BBB/ N<-_A/ S/(tN`FB S/(tN _-P n PJf(BBB/ N<-_A/ S/(tN S-H n P-H? n/(N nnnn A/ n/(N n0(xR@ n1@x S h$ P/(,NLN^ _NJoNVH>.Bg?. /. mHhl?<?< L_ mY-H n P(P,gt,g G W G WgB.,g GW G W GWgB.,g GW G WgB. GW GW GWgB.`r,g GW GWgB.,g GW GW GWgB.,g GW GWgB. GW G W G WgB.LN^ _PONJoNV/ BB m/(N mAD/Bg:@-_ n(P9|pB4(_N^NuJoNVB m/(N-_/.NN^NuJoNV m h PJf m|< m/(NN^NuJoNV|N^NuJoNVH(m n Pp0A>JGg|<,ZlX m hhDg? m h(F.gB@.??<?<"?<TBE n P\ R( n PJhl n P0(D@W@ @l" @g H Ї-@` H ЇR-@` м-@BH/0,fH/:< >=| n0.Pn| n0.A&H/?B0H/H/:/? E?TLN^.NuJoNVH. Bg m h P/(N g f~ f~ mH ABHp mY-H n P&PIJ+f4=n 0.l=@0,n =@0,n=@Hn`2 +f*?. 0,nS@??<?<4?,BgLN^ _\ONJoNV m h PJg m(7 @ `| N^.NuJoNV/ (m l P h P h$ P/(,NHz/ m/(NN,g/,(_N^NuJoNV/.?<:X n P1|N^.NuJoNVH&m KY-H n P(P0.n 8lo8,0,ؐn:n l=lBE0,S@=@* .fd~ S@=@<. ` @"AA,! RGRFino @A -H0. @A -H/./.0,ؐn S@@?"L`j~=n*<` @"AA,! RGRFino0. @A -H @A -H/./.0,ؐn S@@?"P:. S@=@*. gj~=n*<`V @C, q PJhl @A,/0Nz @C, q PpB0 @ k P"AC,! RGRFino`\ .f0=n*<`BN^-_ k P @! RFino`$=n~` @A,/0NRGinoLN^ _PONJoNVH mY-H n P(PG0,ؐn S@> l P hz P h$ P 2+@\AH ( n00+\@ n1@LN^ _PONJoNVH mY-H n P&PI k P*(z0, >0,@<HnBBH/H/HHnB0+G2,A@H/B:80l2+ޒ@lH/HHn??/NLN^NuJoNV/ (n0,R@ l0 l0. A)H l0 l!l(_N^ _\ONJoNVH(m l P!n)nTB@.??<?<"?<T?.  l P"l"Q0)@&p S=hJno<<`" S\ мR-@ np|\@</ ?:X S\ мR-@Jno nBP0.D@ S1@ l P=h n=P~nnh n A-H n0.Pl.*. .\(//0.GR@?"P?/N`,` n0.Pf n!n`RG`0.R@?/N`B,2LN^.NuJoNVH(n</,N mY-H n P&P, g@Jlo8+gvBn m=hL=|=|=| mCA""HnޠBg m?(L m?(RBg l P h$ PHhHn m/(N ` mCAL"" m hA . G"G )АJg mHh4HnBg0, D@? m/(@ m h@ P-H nT-H m h P"m0)P]@H4^ n"n2(Qk ^g n0H-@p-@HnHnNBg?.HlN0,k n°hl9n0+l n°P^2,k]gjJll:B m h P h P0,HШR/ m h P/(N _)P` m h P0,@)p ?<?,ࠊ/,N0+ l9@0.R@=@`F+g(Bg m?(L mHh䠊0 m?(RBg?+?+HkN</+NLN^.NuJoNVH m h P h P-hz n P.(, mY-H n P(P-l0. l=@0.l<9n9FJnlBl`0,S@nl 0,S@9@0,S@"@=AJFlBl`Jno 0,S@9@ mY-H n P(P. g`JnoX,gT l P:(JEo FR@2,SAA=@Jno|0.HT@l=@0.H2, H//" \-@ l9n n P(($:P m h P/(N D PHhBBB/</.H/N < m h P/(N:LBgBgHnN mHhL?.0.ll? D P?( D P?((?,?,HlNN*` m h P(g&?< m/(N/.N m h PB(=n=|`:B m h P/(N _-P/.N m h P/(NRni 0.no=n=|` m h P-h n PJhoF n Pp0A0<A2<@RA: n Pp0AXA n P1A/.?:XA/ m h P/(N<BgBg?<NRni 0.nof`<<Bg?.N` n P h, P hf n P.(, G P-H nG8 n @WD@0n60+n7@ n0(@n n1@@, gvJS]Jk]g>BBBB m/(N n h P/($?</ mHh//.N mY-H n P(P,,V2,lVg m|2LN^ _\ONJoNVH n CJ""&n mY-H n P(PA-H .]/ n0(H/" 7@ m0(P]@H/ n0(H/" :0,S@E60lm0,S@6JSl" m h P h P>(0GJ@l D@6JSl$B0GR@H/ m h P/(N _,` m h P0@,0 F Pp0Akl F Pp0A7A` JklBkLN^ _PONJoNV n p0A A l@ n p0A A f<?<8?<N` n p0A?/.N`/. N hN^ _PONJoNVH&n</+/+NHk KP-H n P(P?,?,HlNB</,/+NLN^.NuJoNVH&n</+/+N KP-H n P(P?,?,HlN</,/+NLN^.NuJoNVHN n P h P&hz S-h,0. _@gS@g,`0@A0g ??,ND`RGino`0,S@??,N&NLN^ _\ONJoNV/ (mJ g( , g"n i PJhx^D@ `B. ` l PJWD@ (_N^.NuJoNVH(mNN n P-h n PJhxn8B,Bg/,N g B/, NHzV//,N|`HzB/,NN nB nB nB n BB n P/(tN _. G P h PJf^B n P/(tN _./N n P/(tN n P ht PJfHzpc/2"0B n P/(tN _. n P-H G&P n/Bg/+N0 _0/+NJg:B/+N, F"n F"n F"n F"n /+N n0(xS@ n1@x n PJ~g n P f n P/(~N n P h$ P/(,N m(g m/(LN^ _N5In TStdTerm.VRead, typeAhead.size = 0 after DelFirst JoNVHn<"hN/./././. /. m/(NHnBg"hN^ _NJoNVH(m=n >.`B l P @ p PJhl l P @/0 N l P @ p PpB0RGinoLN^ _PONJoNVH(n&m< l P/(,NHlBn=kL=|=|=| mCA""HnBg?+L?+RBg< l P/(,NLN^.NuJoNVH&mHn<"hNz k P h P-hz KY-H n P(P0.S@k @nH0;N.&Bg0,S@?/NACL `L0,R@>?<Nh?0,S@?/NV KY-H n P P-H nҾhl0Bg?HnNtHn?. n0.h??+R?+P(```Bg0,S@?/N?<N KY-H n P P-H nJhoDBg n0(S@?HnNHn?+N n0(kL??+R n0(n?(``f`T0,@ t PJhl0,@/4 N| KY-H n P P-H n"n0)@ p PpB0Bg n?(HnNfHn?. n0.h??+R n0(n?(`0,@ t Pp?,?,HnNHn?.0.l??+R0,n?(`x0,@ t P\*0,R@=@|` E  RFinoBg?,HnN0,R@??,HnNHn?.0.l??.0,n?(Hz//.NNHnBg"hLN^ _TONJoNV/ < n/(N mY-H n P(P?,?,HlN</,Np(_N^.NuJoNVH<. :.&mHn<"hN& KY-H n P(P l P.(z-l9F9EJFlBl`0,S@Fl 0,S@9@JElBl`0,S@El 0,S@9@Hz"//N KY-H n P(P,,V2,lVg|2NHnBg"hLN^.NuJoNVHn<"hNV. ?. ?.NVNtHnBg"hN^ _\ONJoNVHn<"hN m h P(. gn m h P=h/.NNHnBg"hN^ _TONJoNVH(n l P h, P hf</,N` l P.(,</,/N mY-H n P&P m h0(Dkg?+ m h(F+gB@+??<?<"?<T m h hHg?<,g`  RGinopB n@llmt,g@|/.0,ڐlR@? n@2,ڒlA?Hn"ACp@ S@n n//.?<0,ڐl?Hn" _Cp@ S@n .R*0,HЋR(// n@?"Lp3AlnB. n@lA@lp nAl m h0(Dlg?,-l n@l9@Bg/.0l9@0,lm0,S@9@0, \@9@Hz//.Ng<?<8?<NTHnNLN^.NuJoNVH>.(m n B l Phl l P h P<(JGlJFoB l P/(N _&P` l P @&p *. S\(// Sp0ARA?"L.ghJGl:B l P/(N _&P/ N l P/(N D@???<N`*<<??<N? l P0(S@??.(m l Phl" l P h P<(.gBNު-_&n n P\*/ / n @R@?"LJGl: l P(g(A/ l P/(N D@S@???N^NuJoNVHn<"hN"/. m/(NN@HnBg"hN^ _PONJoNVHn<"hNHnHnHnHnHn m/(N n \.g0.H H@J@=@=n HnBg"hN^.NuJoNVHn<"h?.?. N"HnBg"hN^ _PONJoNVHn<"hNDHzۜB m/(NNT m h P h PJhx^D@ HnBg"hN^.NuJoNV/ (mHn<"hNHzS@gHS@gRS@g\`f?<NBgBgN `T?<N`J?<N`@BgBgN`6Bg?N N@N NdNNNNNN0NNnN"NDNN FN@N"NJoNVH(m&mHnA)H/,A)HHk8HlB'_/.LN^NuJoNVB m/( mA/:D-_N^NuJoNVHz~Hzp mHhBgBg?<$$ mB m| mB( m|N( mA-H nBh nBP nBh nBhN^NuTOBJECT TQPGRAPHJoNVD4p4l4hh(dXNN@N^NuJoNVBB m/( mA/:D m/(4P-_N^NuJoNV nCJp@"S@nBB m/(HnNX-_N^ _ NJoNVHz4Hz& mHhBgBg?<$?<N$N^NuTPROCESSTTERMPROJoNV nCJp@"S@nJfB/. mA/:D-_B/./. Hn44-_N^ _ NJoNVBB/./. N -_N^ _ NJoNVH&mB+9/././. /. mHh?<?<L n P.(B+9g k P!GN"`l G P'h KY-H n P(P7lfA\C 0'lX'lT G P hz P h, P1|+g G P h P h, P1| KY-H n P(P,g 9|0,l9@ALC `NBgBgHlޠ BHkL?,0,ސll? G P hz P h$ P?( G P hz P h$ P?((LN^ _NJoNVHz mHh|BgBg?<Z$?<?< ڠJ mHhBgBg?<8$?<?<?<8?<*$N^NuTSELECTITGRAPHSEJoNVH*.(. JfB/ mA0/:D*(E.g ><BB/?<?<:d&_ T!K` >< TBBB/?:, T!F-LLN^ _ NJoNVHz4Hz& mHh0BgBg?< $?<$N^NuTOBJECT TINPUTBUJoNVH.. ,.JfB/ mAl/:D,BB/?<?<:d&_BB/<N-_A// N F(P)KtBlxBzB~BBBB///.<4`-_LN^ _ NJoNVH,.(m|9B/N.*,B//N)_ F P!lBB//BgBg?:$?: 4H&_, g LY-H n P P-H n"n0) \@8HnBB/<H/HBB// HnBN-_ F P!Kz F PBBBBB//.?</. mHhNB S/(,N-_`bHlHn m/(NBB// HnN-_ F P!K F P!KzBBB//.?< mHhN S/(,N-_ F PB~LN^.NuJoNVHz^HzP mHhl?<Bg?<$?< J?<?< ?<N@?<$N^NuTWINDOW TVANWINDJoNVH&n fB/. mA /:D&_(S)n&9|* n P9hV,B/ /./.?. -_LN^ _NJoVNVRH,. F P-h& F P=h*0.H n P hR PnB0.H/ n P/(RN _* E Pp0A=A F P/(N F P/( N F(P LX-HRG nRJl,W nW"n"Q4,,iVWDB+B+ m h P6 m h Ph0.l,8 E PJh^nWg" E P\-Hp//. F P/( N` E PJhl E P\ Rм-@Z~ nZPn< nZ A-HV nV0,,Pl nV0l,8 GoSG```.RG` nZ> nZ A-HV nV6 nVh E P\ R2,,HҀ-A^Af R-@b/.^/.b?"LpAfAf-Hp//. F P/( N F(P l,9@,0,,nmBl,0.R@9@*` F P/( NLN^.NuJoNVHz4Hz& mHh BgBg?<.$?<N$N^NuTTKWRITETTERMWRIJoNVH(m&mJfB/. A/:D-_B/./. Hz/.0.Bg/N Bg/N ?<Hn/+N BHnp/p//N*BHn/<,p//N ( l P0(ڰl>_D@BHz./N*BHzl. /N*?<Hn/+N BHnp/p2//N*BHn/<,p(//N (?<Hn/+N BHn l P(/N*?<Hn/+N BHn l P( /N*?<Hn/+N BHnp2/pd/?</N-_ LY-H n P P-H nA-H ng, n0(S@=@BF` n0@ 0fRFino`BF G P1FC 0Hn/.N-GLN^ _ N13280 TERMJoNVH,.(m?<Hn/,N BHn/N &_ m h P"m0(ڰi>nBHzH/ N / N`BHz0/ N / N?<Hn/,N BHn/N &_ m h P(g$?<Hn/,N BHn/ N / N`"?<Hn/,N BHn/ N / N?<Hn/,N BHn/N * mY-H n P P-H nA-H ng, n0(S@=@BG` n0@0fRGino`BG F P1GC 0Hn/NLN^.Nu13280 JoNVH*.(m&m?<Hn/+N BHn/N -_?<Hn/+N BHn/N -_?<Hn/+N ?<Hn/+N ?<Hn/+N BHn/N (Hn/NBgHk/. N gBgHz" n P/(>N g l P0(ڰl>o?<P` l P0(ڰl>n?<BgHn n P/(>N g l P|` l PB(Hn E PHh>"gHnHz"g<Bg ` LY-H n P P-H nA-HBG.@=@|`A0`@|0" @>RFino<JF^ E Ph(< n0(S@Gm, n rA4BHAp8) E Ph<`> n0(S@Gm. n n rA4BHAp8)F``BgHk/. N g/N /. / mHh?<?< L E PhHz0 mHh?<Bg?<D$?< N?< NT$N^NuTDIALOG TTERMDIAJoNVHz,Hz mHhDBgBg?<$$N^NuTOBJECT TTERMLINJoNVH(mBBB/,N?<?<:d&_ l P!K l P0(S@=@BG`B8, l P @! RGinoLN^NuJoNVH.. JfB/. mAX/:D.-G n(PB9|9|P9lBB,B,|B,B,B,||9|9|GBBBB BBGB7|?+Hn0<H m1@>G67n7n7n0.n2.@7A)lLN^ _PONJoNVHzHz mHhX?<Bg?<$+N,v.$ mB(4 mB( mB( mB(5 mB(8 mB(7 mB(6 mB(3 mB(2 mA-H nBh nBP n1| n1|l m/BB"m/)N:  _!@N^NuTOBJECT TSTDTERMJoNV/ (mA4)H8 mAl)H4A8-H(_N^NuJoNVHzbHzT mHhlBgBg?<$?<>\>??:??""ڠ##$Hz6B N^NuTTERMINATPASTERMJoNV mh8N^NuJoNVH(mACrp S@n0?.4 LY-H n P&P+ , @+ ,@B)_@ LY-H n P&P9kfA\C 0)kX)kT m/BN  _!@N$N#N%JoNV m.HABHp</. /.(N^ _ NJoNVH mY-H n P&P+ g<?<80+ؐk?% mY-H n P(P,rV lV lVg(B. m0,ڰh>n=|`=|/.!ACp S@nHnXLN^Nu *** Program Terminated ***JoNVH mY-H n P&PI0,\@> R@2,HAlH/ m0(HlT@H/HB@+??<?<"?<T?<?<?<<4LN^ _TONJoNVH(mHlD=|=|=| mCA""Hn䠊 l PB@(??<?<"?<Tz0,H|< l P0(S@=@BG` HH@J@J@f@ T@H/ Z@H/H?A/z l P?(HnP8=|` Q@8=| H/H/HB0.D@H/H l P0@A0g?NJ l Ph RGinoZLN^NuJoNV< m h P/(ޠN^.NuJoNVH n CJ""*.&m0+RH\2+PH\gX E P,(=n=nBg/.HkD\+3g KY-H n P P-H nI0.]@ nH > n0(S@Gmj 2A4WDHA4BHAp8)0@4g`*JWJWJ WJWJWgB?N` m/Bg"F"Q/),HkԠ _(gHn F P/(,N`L/NHz//NHnHn*BBBB/N/?</.Hn< F P/(,N(LN^ _PONJoNVBBB m/(NB?</.D-_/.NN^.NuJoNVH&m k P?( k PB@(??<?<"?<T k P"k"Q0)h8?<?Hz$P n P h P-h n P ht P=hz`BH/ n P/(tN _-P n(P~ l P=h|`HBgH//,N _ f0FlH/ G?/,N k Ph ?<? R@>RFino l PHǾlH/ l PH (R?/,NREinoJ k P?( k PB@(??<?<"?<TLN^.NuINPUT: JoNVH. HgS@gS@g`B/.N* n P-hBB/?<?<:d-_ n P&h m h P h P=h SI8=l>`JGl&B nR@H/ m h P/(N _(` m h P @(0 lVJlVgnB//N-_ n P\-H D Pp0A<lfBH/0,H/:< <`RF n  npA//.NRGino`Tf Ep`.lf =l|` E  RFino` EpB0RGino D P-h/.NHz//.NBBB/./.?< D P/(@ mHh< n P/(,N-_` B?. / mHh?<?<L-_LN^ _\ONJoNV/ n CJ""(mJ|gd l| P lT mA-H=n=n| n=h nh nh nh A//,|N(_N^ _PONJoNVH n CJ""(mJ|g B/,|N&_0+HV2HVg Hn/.N LN^ _PONJoNVH(mJ|g> l| P l. n PCA""Hn/.N B/,|N&_B+LN^.NuJoNV?..... m h P/(NN^ _NJoNV nf& m h P"n"Q iW(@@`&Bg?./. /. mHh?<?<L_N^ _ NJoNVH(n>. B0@g` BBB/ N? T/( / -_`B?/ mHh?<?<L-_LN^ _\ONJoNV n PJg n P/(N n P/(N/. mHh0?<?<LN^.NuJoNV/ (m0.@lg8@_g:S@g6@gTS@gfS@g~U@g$@gS@g$S@g0@bgtS@g~`B.`|`,3 @`l3`| l P"n `v| l P(  n `Z l Ph`L,8 @`>,5,8 l P(@`&Bg?./. /. mHhl?<?< L_(_N^ _ NJoNV< m h P/(ޠ< n/( n/(NN^.NuJoNV< m h P/(ޠN^.NuJoNV/ < n/(ܠ mY-H n P(PBgBgHlޠ B</,ޠ(_N^.NuJoNV mHhN^.NuJoNVH&n8. (mBB/ N* S.(z S,(0@ggRY@gN@`gS@gL@g S@gS@gU@g@g^S@gS@g@bgS@g`,,g HnȠ/,B,/.Ƞ Dgf&,3gBgBg?

.&mHn<"hJGl k P>( k Phn, k PI rA4BHAp8)HnBg"hLN^ _TONJoNVH>.&mHn<"h k PI. gBBBB BB`bJGl k P>( k PhnH rA4BHAp8)JWJWJ WJWJWgBHnBg"hLN^.NuJoNVH nCJ""(mHn<"h LY-H n P&P+fn. @nn| l P h P*(z:P l P/(N.g| l P0( @ l P2(@>BBg?Bg?:6Bg?:0?:./N,HnBB/</<lHBBB/,N/Hnڠ-_ l P h P!F~.g, J.V .V@g l PB(` E P.H@"E"Q.HA40q>Jno nJGlBG`0.GD@>JGoBGB.?Bg?:XBg?:P?:L/N,G S P-H n"n0) \@8HnBB/<H/HBBB/,N/HnB@-_ l P h P!FzBBBBB/,N/.?</. mHh< F P/(,N-_G S P-HBgBg nHhޠ BHlL n?( n"n0(ސi nh??.?.䠊(?< m/(N ?<?< m/(N ?<?< m/(N m/(N LY-H n P&P+ , @+ ,@+gB+.g LY-H n P&P+g&?< m/(N ?<?< m/(N `V+g&?< m/(N ?< ?< m/(N `*+g$?< m/(N ?< ?< m/(N m/(N:L,g/,HnBg"hLN^.NuJoNVH nCJ"""Hn<"h mY-H n P(P .2_ n_g*.Hlo6.HS@=@<,`B8* m h P @! RFino.H9@.Hlo.H9@ l P hz P.($.H \@8 G PHhBBB/<H/H/N BgBgHn B mHhL?.0.ll? G P?( G P?((?,?,Hlޠ B0,ڰng?.NX mY-H n P&Pn7n7nnHnBg"hLN^.NuJoNVHn<"h(B m/(N m(g m/(HnBg"hN^NuJoNVH&n(m< k P/(,N l P0(lL l P2(@=A?<?. l P0(S@=@BG`4 l P @/0  l P0( n=@?<?.RGino< k P/(,NLN^.NuJoNV m h P h P-hzHz&//.NN^NuJoNVH(n&m< l P/(,NJll0B k P h P0,HШR/ k P/(N _.` k P0,@.0 Bg?,Hn B?.?./< l P/(,NLN^.NuJoNV m h P h P-hzHz8//.NN^ _TONJoNVH:.&m k P h P,(z KY-H n P(Plg9E7Efk>n~`~9G7GZ7GV9G?HnA-H n0 n1n n1n n1n0.n2.@ n1AA\C 0BgBgDHkL?,0,ސll? F P h$ P?( F P h$ P?((?</NLN^ _TONJoNVHn<"hBgNTgBn `=| HnBg"hN^.NuJoNVHn<"hBg/. NgBn`=|HnBg"hN^ _PONJoNVHn<"hBgNgBn `=| HnBg"hN^.NuJoNV m h PJWD@ N^.NuJoNV/ (mHn<"hJgd l PJgX m|4NB,Bg/,N g B/, NHzz//,N m|</,N(_N^.NuJoNVH(mHn,g|B,BlB,,g |`HlBgHlHn<AC Hl?< ?< 0BgHlHlZ?< Bgtg0BgHlHlZ?<N\?,0,l?|G/.LN^NuJoNVH(m,g8HnBgHlHlZ|HlHlZp/.B,|`B.LN^NuJoNVH(mBgHlHlZ|BgHlHlZAZ/Hlj?,0,l?LN^NuJoNVH(m0,l>0,zG2,~A@lmNt` ?,?LN^.NuJoNVH&n(m, gB. `| @J@n`HnAZ/@:p3AA g UAgSAg`./NF~SE`$N~SE`8,/N,?Bg~SE`~Bg/ ??0,_ln / ??T`\<@FmPBg3`@?0,_lo",g/N3`@?4`<<`3`@?4RF`/.LN^.NuJoNVH(mHnAZ/?.Hlx0,zlx2,~@>VG l<9G l2,z@0,~@AlmN`Bg?/.LN^ _TONJoNV mnN^ _TONJoNV mHh?.?. ?. ?.(N^ _PONЁ' +hPASLIB UNITSTD GRAFUTILUNITHZ STORAGE QUICKDRAHWINT FEDEC FONTMGR EVENTS WINDOWS FOLDERS MENUS FLDUT WMLSTD WMLCRS WMLGROW WMLSB INTERNATALERTMGRUNITFF UNITCS UNITFILEUNITFMT UUNIVERS FMGRUTIL*PMM +PMDECL ,UNITFIGA-SYS1LOCK.UCLASCAL/IOPRIMIT8SHELLCOM9PROGCOMM:DBENV ?FIELDEDIGSCRAP IFILERCOMKPRSTDINFMSTDUNIT XBLKIOINTfBLOCKIO gPASHEAP hBx(?N7PASLIB1 LWWORK OTHRWORKACTIVATEOPENSEG1INcold NEVER alert WMcold SMcold SUcold "SCROLL &UT 3SYSINIT APMMSeg CWORKSET DGRAFSEG EFEcutCopFFEcold GSBcold HOPENSEG2IMOVERS KALRTDIALNOPEN1LW OPASIOLIB`SgPASinibSULib cMainProg x?JoNV/=mBG` ZAHpBgRGino.N^NuJoNVHm?-",-@J@o HmHm".gNHmР,"0N^ _TONJoNV/- /- HzFBg/- /- HzBgX<NtN^ _\ONtype SPACE to exit!The heap is full. User Croak !! JoNV nCJp@"S@n/- J-f/- HzBg/- <?<x/- Jml/- HzbBg/- `:/- HzBg/- 0-H/?<|/- <.?<x/- `/- Hz*Bg/- <?<x/- Jml/- HzBg/- `X/- HzBg/- 0-H/?<|/- HzBg/- 0-@A20SAH/?<|/- /- /- HzHBg/- HnBg/- <.?<x/- /- X<NN^.Nu Error is...  item At menu At the beginning of the fileFatal error in Menu File.At alert number *Fatal error in Phrase File, Alert Section.JoNV nCJ"2.H@J@WD@ N^.NuJoNV nCJp@"S@n/- /- HzBg/- 0-@AHpBg/- /- HzBg/- HmBg/- /- /- Hz`Bg/- 0. H/?<|/- HnBg/- Hz ?. A/HnNN^ _\ON OSErrs.ErrError Output file is: Input file is: JoNVJno"Hm?-/. 0.H/Hm<B"Jmo ?-HzNN^ _\ON writing the output file!JoNVHBg@g<ND~JmlHz$N0-ZAHp/.?<p0-ZAHph0-ZAHpg`Jm^-g4/- HzBg/- /.Bg/- <)?<x/- 0-ZAHpBgSmB` n@J@o np0A A$fT np0A A~f`Jm^-g4/- HzBg/- /.Bg/- <)?<x/- 0-ZAHpBgSmB`Hz/."T<JFf n@R@<B.`BHz/.? n@FR@?Hn"HnHn?<" ACp@ S@n n//.?< U@?Hn" _Cp@ S@n/.Hz ?<Hm^-g4/- HzBg/- /.Bg/- <)?<x/- Rm moHzN0-@ nECp@"S@n0-ZAHp/.?<<;_Jmo ?-Hz/.Hn?<" HnN.@J@ov0-ZAHp/.?<p0-ZAHph0-ZAHpgHz|HnHn?<" HnN n/Hn"gB`< np0A A;fB`$ np0A A~f/.?<?<"g~LN^.Nu*Include file does not have a marker named  opening include file Include files nested too deep(Begin Include File .text$~(Stop Reading Include File (End Include File *A line with just a zero should precede EOFJoNVHB n@=@~` n0p@ @ f RGino|F LN^.NuJoNVRm-@ml;| `0-A0A;AN^NuJoNV nCp@"S@nBmNN^.NuJoNVpAHmHm-@R@?"HzHm0-R@?-@m?Hn"HnHn?<" HnN~`p-g/- HmBg/- < ?<xB|` H  AHpHm"gR oJfHz&HmHn?<" HnNGLN^NuUnknown keyword: Extra characters: JoNVHBFBG m fN` m V m VgH m0\ m9_g  2-@|0>RFN`J-f HzN`HzN`JFfJ-f HzdN`Hz8N-g /- H/?<|/- < ?<x=GLN^Nu!Menuid or command number expectedAlert number expected$Nondigit in menuid or command number*Nondigit in alert number or version numberJoNVHBgN> GlHzNܾmoHztN=m|` Apf>`RFinoHz N D@"n i1@LN^.Nu"Can't equate to an undefined alertCan't equate to a later alertCan't equate to 0JoNV/ n(hBgNDHS@gU@gY@g4S@g"S@g:`F LTPP`@ LTPP`2 LTPP`$ LTPPp` LTPP`HzN(_N^.Nu!Caution not followed by qualifierJoNV/ n(hBgNHS@gS@g4S@g"S@g6S@g@S@gJ@ gR`X LTPP@`R LTPPP`D/.N`: LTPP0`, LTPP ` LTPP`l`HzN(_N^.Nu%Alert number not followed by severityJoNVHBBG`g S@@"A=` @IBB,BB|.gBgNH@ k @nH0;Nh"*2<J`|B`f|`^|`V|`Nx|`DfHzdN`6 gB.`HzFN` B.z`B.z/.N`HzN`T  "gHzN @I n&h0gS@g:S@gbS@g`H KT@HP?P,H KT@H`~H KT@HPρP,H KT@H`RH KT@HPP,H KT@H`&H KT@PP,H KT@RG Go4LN^.Nu missing stagebad word in stageextra ; Bad use of +JoNV/ /. NZBgN4;_Jmod n0(nBlllll/NBg/.Nt g$ nJhf/NnBgNN gHzN-g/- (_N^ _PONtoo many stagesJoNVH(nB- m^fNb0-@!g@gpS@glS@ghS@gdS@g`S@g\U@gS@gS@g]@gfY@g6@ g$U@gN@g[@g"@ gU@g:`N\`8N`8N`0-|02<@8N`|8N`r m?f8`8N m V m^VgN``@<-~Nmf GlRGNr`pG"|7A|8` ;|^N`f8 m V m V m^VgN` m fNx` m W-AJA^gHzHm-@R@?"<-@J@W TWD-g0|@kF @n>H0;NzfR>*444vbN" <5-digit counter#9><4-digit counter#9><3-digit counter#9><2-digit counter#9><1-digit counter#9><5-digit counter#8><4-digit counter#8><3-digit counter#8><2-digit counter#8><1-digit counter#8><5-digit counter#7><4-digit counter#7><3-digit counter#7><2-digit counter#7><1-digit counter#7>  JoNVH n CJp@"S@n(n l0R@.A@ AoHzpN l "l0.@=@~` A0p@ l "l"QRGino l.@PR@ l0LN^ _ N Text too longJoNV/.NBgHnN gJ ng?.HzF/N nW nW nWg-@?Hm/N`N^ _ NJoNVH0-LS@=@~` R@=mL<`r @A\Jp_"A$BA\60A\p ^$BA\Jp ^g2 @A\-p @"AA\C\# @A\!RFinoRGinop>-L` @A\Jpo;GL` SG GlBmLLN^NuJoNVH&n (n6 loh0,S@A0AnfP0,A0A60k|nAP2IDA0 <f0| 6Hl0,S@??<"UlLN^ _ NJoNVH/- HzBg/- ;|;|LHnNJml/- HzBg/- `hBgHnN g0-@ABpHnNl0-AIBgN68JTg"=|`&0.rS@A4BHAp8)Rn n oHnN-g/- HnBg/- .@R@9@B/-?,&_ m fHzpN0,S@=@Bn` 0.A0A S0.Rni 0.noBg/-Hn.  g/- Hz:Bg/- 0-@A20A)0-@ARpHnN6HnN,.@=@Jno~0-L@A\Im0-@ApHzHn"T=_JnW2.QAn^2.nWg0-L@A\1`.;nNl0-L@/BgNx2 A\10.S@=@0-L@A\JpWrA0B B.WtA0 C C-W‚ nW4-LBA\Jp _g<0-2-AA40RBrSBA6CJ@CA p8)?<\Hn/NP?</Hn/NB0.R@A0.T@AB00.V@A0-AI0.lX@9@pA-g/- HnBg/- B/-0.X@?&_ m fHzNd0.V@=@Bn` 0.A0A S0.Rni 0.noBg/-Hn.  g/- HzBg/- 0-2-AA40BBA!RmL0-@ARpJnfZB/-?<&_ m fHzN SB0-2-AA40BBA!0-A20XA0-A10-@A p oHzN>-g/- HzBg/- 0-H/?<|/- HzZBg/- 0-@A20SAH/?<|/- Hz$Bg/- /- HzBg/- 0-A20H/?<|/- HzBg/- Rm-g/- HnNFBgHnN g`SmJmo:/- HzvBg/- 0-H/?<|/- HzFBg/- `/- HzBg/- SmLLN^NuNo menus in file. menus read.All bytes longand is  items has Menu Too many menu items in one menuHAllocate failedheap big fuckup 2#heap big fuckup 1No menus read.Reading the menus.JoNV HHnNHnNBgN;_-g*/- HzBg/- 0-H/?<|/- HnNHnN m0\ m9_gBgN\;_-g*/- HzfBg/- 0-H/?<|/- HnNBHnN8BgN;_-g*/- HzBg/- 0-H/?<|/- HnNHnNz` gHnN-g>/- H  A`HpBg/- HzpBg/- HnBg/- .@ @oHz^Nݮ.@R@>` A RG GoH @CAC R oTBHnN2BgHnN g oHzN<-gj n@/- H  AHpBg/- HzBg/- HnBg/- `$/- HztBg/- HnBg/- .@ @oHz2Nܶ.@R@>` A RG GoH @CAC H R@BgHnNgH S@@;_Jmo ?-Hz2Nޢ -lHzN.|.gHnN;_Jmo ?-HzNbBgHnN@ gHnHnNHJmfB.`BJmoT0-2-Apn>=m~` A20mf;GxRGino  gHzNv  g0-R@;@;m԰ mаoHz\NN0-CAC 0Jn]D@Bn|.gHnN;_Jmo ?-HzNZBgHnN8gB.`BgHnN gh-g/- HnBg/- JnoHzlNڨ.@R@=@.@=@BG`A0p@A"pRGino`HnHn"HnNN`8-g/- .V.V.V.V/BgHnNJ @@.gPJnoHzN0-D@=@0.D@=@0.A=pJnmJnW.gHz Nٴ`&JnW.gHzNٞ0-A1B/-?.(_ m fHzNj0.S@=@ BG` TC"ppRGin og/-0-@A/00-@A!`/- /- HzHBg/- 0-H/?<|/- HzBg/- LN^Nu alerts read.All HAllocate failedno text for alert'the equated alert doesn't have any text/there should not be text after an equated alert.Only one line of text allowed when no severity reading the input file!More than 2000 alerts!,Alert numbers must appear in ascending order'Require nonblank text for cancel and okButn name too long  = Too many Butns definedSign name too long cacheBytes = cacheSize = Version number = JoNVHmHmBg"HmHmHm?:6"Jmo ?-Hz N|, HdH@J@"@|d>/- HzBg/- /- HzPBg/- H/?<|/- <.?<x/- /- HzBg/- /- HzvBg/- /- Jmo ml8/- Hz,Bg/- 0-H/?<|/- HzBg/- mo8/- HzBg/- 0-H/?<|/- HzBg/- m]m^g*/- <?<x/- HzBg/- XLN^Nu?You might want to increase the value(s) an re-run this program.) is less than recommended.Your value of cache bytes (Your value of cache size (> arguments to alerts, and extra space for expansion.L (NOTE: the sugested numbers take into account alerts used for printing,)The suggested value for 'cache bytes' is *The suggested value for 'cache size' is 3.Largest alert = Average alert = indexSize = cacheFactor = overhead = 0cacheFactor*cacheSize + indexSize + largestAlert%MINIMUM cacheSize value = overhead + JoNV;|BmBmBmBmLBmB-NJmf/- HzBg/- `|NNNˊ;|Jmo0-A;p mV-IAJAWgHzjNL m] mVg HzN0` m"lHzNNJmoL/- HzBg/- N0/- HzBg/- A/?<NFA/?<N8/- HzTBg/- NNN@NN^`Hz N˔N^Nu There are no alerts in the file.writing alertswriting alert header writing menusAlert #2 must contain text.5You forgot to define alert #2 as the Swan Song alert.:You forgot to define alert #1 as the default non-GetAlert.LNo cache size/cache bytes in input file; assuming old file format (no menus)JoNV/- /- Hz"BgBg-_/- N^Nu4Do you want to list tokenized input to the console? "NV,_NU^"8;|XACt +|ok ;|?xACh 0ACp 0ACV 0ACP ACL 0AC8 AC& 0AC 0+|ask AC 0+|ok $A0C A boxArray[i].dist DO i:=i+1; { insert in order of dist } "FOR j:=nBoxes DOWNTO i+1 DO boxArray[j]:=boxArray[j-1]; "boxArray[i]:=myBox; "nBoxes:=nBoxes+1; END; PROCEDURE DrawBox(pt1,pt2: Point3D); { draws a 3D box with shaded faces. } { only shades correctly in one direction } VAR tempRgn: RgnHandle; BEGIN "tempRgn:=NewRgn; "OpenRgn; $MoveTo3D(pt1.x,pt1.y,pt1.z); { front face, y=y1 } $LineTo3D(pt1.x,pt1.y,pt2.z); $LineTo3D(pt2.x,pt1.y,pt2.z); $LineTo3D(pt2.x,pt1.y,pt1.z); $LineTo3D(pt1.x,pt1.y,pt1.z); "CloseRgn(tempRgn); "FillRgn(tempRgn,white); "OpenRgn; $MoveTo3D(pt1.x,pt1.y,pt2.z); { top face, z=z2 } $LineTo3D(pt1.x,pt2.y,pt2.z); $LineTo3D(pt2.x,pt2.y,pt2.z); $LineTo3D(pt2.x,pt1.y,pt2.z); $LineTo3D(pt1.x,pt1.y,pt2.z); "CloseRgn(tempRgn); "FillRgn(tempRgn,gray); "OpenRgn; "MoveTo3D(pt2.x,pt1.y,pt1.z); { right face, x=x2 } $LineTo3D(pt2.x,pt1.y,pt2.z); $LineTo3D(pt2.x,pt2.y,pt2.z); $LineTo3D(pt2.x,pt2.y,pt1.z); $LineTo3D(pt2.x,pt1.y,pt1.z); "CloseRgn(tempRgn); "FillRgn(tempRgn,black); "PenPat(white); "MoveTo3D(pt2.x,pt2.y,pt2.z); { outline right } "LineTo3D(pt2.x,pt2.y,pt1.z); "LineTo3D(pt2.x,pt1.y,pt1.z); "PenNormal; "DisposeRgn(tempRgn); END; BEGIN { main program } (* Must not do this in the QuickPort "{----- Initialization - Generic to all applications using QuickDraw -----} "QDInit(@heapBuf, @heapBuf[8192], @heapError); { Must do this once at beginning } "myPort := @GPort1; "OpenPort(myPort); *) "myPort3D := @GPort2; "Open3DPort(myPort3D); "ViewPort(thePort^.portRect); { put the image in this rect } "LookAt(-100,75,100,-75); { aim the camera into 3D sapce } "ViewAngle(30); { choose lens focal length } "Identity; Roll(20); Pitch(70); { roll and pitch the plane } "PenPat(white); "BackPat(black); "EraseRect(thePort^.portRect); "FOR i:=-10 TO 10 DO $BEGIN &MoveTo3D(i*10,-100,0); &LineTo3D(i*10,+100,0); $END; "FOR i:=-10 TO 10 DO $BEGIN &MoveTo3D(-100,i*10,0); &LineTo3D(+100,i*10,0); $END; "nBoxes:=0; "REPEAT MakeBox; UNTIL nBoxes=boxCount; "FOR i:=nBoxes-1 DOWNTO 0 DO $DrawBox(boxArray[i].pt1,boxArray[i].pt2); "Beep (2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for 6500 milliseconds } $(* Program has to use Beep in the QuickPort instead of Tone. Same parameters. $Tone(2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for <500 milliseconds } $*) "ReadLn; { Wait until RETURN entered before terminating program } END. 3. "6F^9. D!$ǐ^  tJ0 "ELSE Writeln ('We can not get the docuL4 "Writeln ('DoœL0̦̦4̥¬L.LH̦ d̦4̥̦̦program BaudRate; 4{QuickPort sample program with text output only} 4{use all default setting in the QuickPort} uses ${$U QP/UQuickPort} UQuickPort, ${$U QP/UBaudRate } UBaudRate; begin "main1; "main; end. 3. "6F^9. D!$ǐ^)) J0*own the input'); „FF̳r̳jD̥L224p̳œL0̦̦4̥¬L.LH2̦25(̦4̥̦̦program BaudRate; 4{QuickPort sample program with text output only} 4{call VWConfig to show input panel} uses $QuickDraw, {needed to compile UQPortCall} ${$U QP/UQuickPort} UQuickPort, {program has to use this if has text output} ${$U QP/UQPortCall} UQPortCall, {QuickPort procedures declaration} ${$U QP/UBaudRate } UBaudRate; var config : TQPConfigRec; begin "WITH config DO $BEGIN &tosaveBuffer := TRUE; {save lines in buffer} &passApplePeriod := TRUE; {pass apple '.' to main program} &showInputPanel := TRUE; {display input panel} &twoPanels := FALSE; {can only have one panel in this program} $END; "QPConfig (config); {main program should call this before any screen i/o} "Writeln ('This is a text sample program running in the QuickPort, with'); "Writeln ('text panel and input panel showing here. You can close down the input'); "Writeln ('panel to show most of the text panel.'); "Writeln; "main; end. 3. "6F^9. D!$ǐ^  uJ0Y e. To skip'); „FF̳r̳jD̥L??4p̳œL0̦̦4̥¬L.LH?̦?O̦4̥̦̦program BaudRate; 4{QuickPort sample program with text output only} 4{use VT100 in the QuickPort} uses ${$U QP/UQPortVT100} UQPortVT100, ${$U QP/UBaudRate } UBaudRate; begin "main; end. 3. "6F^9D!$ǐ^jZ̐L̐̐,̐,̐̐,̜XX钜.LH"̓̓̒\H HzX̓X̓̒ ̜̓̓̐D̐,BJ0 "j2FF̜̜.̜D̜D88̐~̜D̜D88,FFF̏PROGRAM MouseInput; USES $QuickDraw, {needed by this program, also needed to compile UQPortCall} ${$U QP/UQPortCall} UQPortCall, {needed to call mouse input routines} ${$U QP/UQPortGraph} UQPortGraph; {program has to use this if has graphic output} "PROCEDURE SetupPanels; "VAR config : TQPConfigRec; "BEGIN $WITH config DO &BEGIN (tosaveBuffer := TRUE; {save lines in buffer} (passApplePeriod := FALSE; {pass apple '.' to main program} (showInputPanel := false; {display input panel} (twoPanels := TRUE; (vhs := h; {vertical or horizontal split} (grPanelSize := -150; {initial width or height, if < 0, graphic Kpanel is below or right of the text panel} &END; $QPConfig (config); {main program should call this before any screen i/o} $WRITELN ('This is a sample program running in the QuickPort demonstrating'); $WRITELN ('the mouse input capability, with text panel and graphic'); $WRITELN ('panel all showing here. '); $WRITELN; "END; "PROCEDURE DrawNum (n : INTEGER); {n < 1000} "VAR n1, n2, i : INTEGER; &str : str255; "BEGIN $n1 := n div 100; $n := n - n1*100; $n2 := n div 10; $n := n - n2 *10; $i := 1; $IF n1 <> 0 THEN &BEGIN (str [i] := chr (n1 + $30); (i := i + 1; &END; $IF (n2 <> 0) or (n1 <> 0) THEN &BEGIN (str [i] := chr (n2 + $30); (i := i + 1; &END; $str [i] := chr (n + $30); $str [0] := chr (i); $DrawString (str); "END; "PROCEDURE drawcheckerboard; "VAR i : INTEGER; "BEGIN $TextFont (8); $i := 20; {draw checker board} $WHILE i < 364 DO &BEGIN (MoveTo (0, i); (LineTo (720, i); (MoveTo (0, i); (DrawNum (i); (i := i+20; &END; $i := 20; $WHILE i < 720 DO &BEGIN (MoveTo (i, 0); (LineTo (i, 364); (if odd (i div 20) then MoveTo (i, 12) else MoveTo (i, 24); (DrawNum (i); (i := i+20; &END; "END; "PROCEDURE PaintCircle (mousept : Point); {invert a cicle around mousept} "VAR r : Rect; "BEGIN $SetRect (r, 0, 0, 7, 5); $OffsetRect (r, mousept.h - 3, mousept.v - 2); $PaintOval (r); "END; "PROCEDURE Doit; "VAR i : INTEGER; &mousept, prepoint : Point; &aMouseEvent : TMouseEvent; &f, more, fromkeyboard : BOOLEAN; &ch : CHAR; &keycap : QPByte; &applekey, shiftkey, optionkey: BOOLEAN; "BEGIN $WHILE TRUE DO &BEGIN (VGetMouse (mousept); (WRITELN ('GetMouse = (h, v) ', mousept.h, mousept.v); (f := MouseButton; (WRITELN ('MouseButton = ', f); (WRITELN; (WRITELN ('Program is waiting for a mouse down, or clicks in the graphic panel.'); (WaitMouseEvent (aMouseEvent); {wait for mouse input} (REPEAT {display all mouse events} *WITH aMouseEvent DO ,BEGIN .WRITELN ('MouseEvent = mouseLoc - ', mouseLoc.h, mouseLoc.v); .WRITELN (' clicknum - ', clicknum); .WRITELN (' mouseDown, meShift, meApple, meOption - '); .WRITELN (' ', mouseDown, ' ', meShift, ' ', meApple, ' ', meOption); .WRITELN; .IF NOT mouseDown THEN 0PaintCircle (mouseLoc); ,END; *more := MouseEvent (aMouseEvent); (UNTIL NOT more; &{Or program can poll to see if there is mouse event} (WRITELN; (WRITELN ('Program is polling for a mouse down, or clicks in the graphic panel.'); (WHILE NOT MouseEvent (aMouseEvent) DO QPYield_CPU; {wait for mouse input} f{got something} (REPEAT *WITH aMouseEvent DO ,BEGIN .WRITELN ('MouseEvent = mouseLoc - ', mouseLoc.h, mouseLoc.v); .WRITELN (' clicknum - ', clicknum); .WRITELN (' mouseDown, meShift, meApple, meOption - '); .WRITELN (' ', mouseDown, ' ', meShift, ' ', meApple, ' ', meOption); .WRITELN; .prepoint := mouseLoc; .(* .REPEAT 0VGetMouse (mousept); 0MoveTo (prepoint.h, prepoint.v); 0LineTo (mousept.h, mousept.v); 0prepoint := mousept; .UNTIL NOT VStillDown; .*) ,END; (UNTIL NOT MouseEvent (aMouseEvent); &{Or program can wait for either keyboard or mouse input} (WRITELN; (WRITELN ('Program is waiting for a mouse down, or clicks in the graphic panel,'); (WRITELN (' or keyboard input.'); (WaitEvent (fromKeyboard); (IF fromkeyboard THEN *BEGIN ,VGetMouse (mousept); ,WRITE ('You typed : '); ,WHILE keypress DO .BEGIN 0read (ch); 0if (ch = ' ') and eoln then readln; 0PaintCircle (mousept); .END; ,WRITELN; *END (ELSE *WHILE MouseEvent (aMouseEvent) DO +WITH aMouseEvent DO ,BEGIN .WRITELN ('MouseEvent = mouseLoc - ', mouseLoc.h, mouseLoc.v); .WRITELN (' clicknum - ', clicknum); .WRITELN (' mouseDown, meShift, meApple, meOption - '); .WRITELN (' ', mouseDown, ' ', meShift, ' ', meApple, ' ', meOption); .WRITELN; .IF NOT mouseDown THEN 0PaintCircle (mouseLoc); ,END; &{Or program can wait for keyboard only} (WRITELN; (WRITELN ('Program is waiting for keyboard input.'); (REPEAT *VRead (ch, keycap, applekey, shiftkey, optionkey); *WRITELN ('You typed : ', ch, ' keycap = ', keycap, ' applekey = ', applekey, ' shiftkey = ', shiftkey); *WRITELN (' optionkey = ', optionkey); (UNTIL NOT keypress; &END; "END; BEGIN "SetupPanels; "DrawCheckerboard; "Doit; END. 3. "6F^9; D!$ǐ^LLmevent DO (BEGIN *KeybdEvent := TRUE; *key := 0; *IF mouV8 ($00) ELSE Asci¾H"̓̓V̒H 8Hz8j̓ ̓V̒St ̓0̓"tate := State + 4; *MouseX := mouseLoc.h; *MouseY := mouseLoc.v; (END $ELSE KeybdEvent := FALSE; "END; "PROCEDURE Doit; "VAR i : INTEGER; &mousept, prepoint : Point; &aMouseEvent : TMouseEvent; PROGRAM MouseInput; USES $QuickDraw, {needed by this program, also needed to compile UQPortCall} ${$U QP/UQPortCall} UQPortCall, {needed to call mouse input routines} ${$U QP/UQPortGraph} UQPortGraph, {program has to use this if has graphic output} ${$U QP/Hardware} Hardware; TYPE "KeyEvent = Packed Record -Key: Keycap; -Ascii: CHAR; -State: INTEGER; -MouseX: Pixels; -MouseY: Pixels; -Time: Milliseconds; -END; "PROCEDURE SetupPanels; "VAR config : TQPConfigRec; "BEGIN $WITH config DO &BEGIN (tosaveBuffer := TRUE; {save lines in buffer} (passApplePeriod := FALSE; {pass apple '.' to main program} (showInputPanel := false; {display input panel} (twoPanels := TRUE; (vhs := h; {vertical or horizontal split} (grPanelSize := -150; {initial width or height, if < 0, graphic Kpanel is below or right of the text panel} &END; $QPConfig (config); {main program should call this before any screen i/o} $WRITELN ('This is a sample program running in the QuickPort demonstrating'); $WRITELN ('the mouse input capability, with text panel and graphic'); $WRITELN ('panel all showing here. '); $WRITELN; "END; "PROCEDURE DrawNum (n : INTEGER); {n < 1000} "VAR n1, n2, i : INTEGER; &str : str255; "BEGIN $n1 := n div 100; $n := n - n1*100; $n2 := n div 10; $n := n - n2 *10; $i := 1; $IF n1 <> 0 THEN &BEGIN (str [i] := chr (n1 + $30); (i := i + 1; &END; $IF (n2 <> 0) or (n1 <> 0) THEN &BEGIN (str [i] := chr (n2 + $30); (i := i + 1; &END; $str [i] := chr (n + $30); $str [0] := chr (i); $DrawString (str); "END; "PROCEDURE drawcheckerboard; "VAR i : INTEGER; "BEGIN $TextFont (8); $i := 20; {draw checker board} $WHILE i < 364 DO &BEGIN (MoveTo (0, i); (LineTo (720, i); (MoveTo (0, i); (DrawNum (i); (i := i+20; &END; $i := 20; $WHILE i < 720 DO &BEGIN (MoveTo (i, 0); (LineTo (i, 364); (if odd (i div 20) then MoveTo (i, 12) else MoveTo (i, 24); (DrawNum (i); (i := i+20; &END; "END; "PROCEDURE PaintCircle (mousept : Point); {invert a cicle around mousept} "VAR r : Rect; "BEGIN $SetRect (r, 0, 0, 7, 5); $OffsetRect (r, mousept.h - 3, mousept.v - 2); $PaintOval (r); "END; "FUNCTION KeybdEvent (repeats, wait : BOOLEAN; VAR event : KeyEvent) : BOOLEAN; 9{An equivalent funciton as the one in the Hardware. :Note that the parameter repeats is not recognized.} "VAR ch : CHAR; &rkey : QPByte; &appleKey, shiftKey, optionKey, fromKeyboard : BOOLEAN; &tmpPt : Point; &mevent : TMouseEvent; "BEGIN $IF wait THEN WaitEvent (fromKeyboard) $ELSE fromKeyboard := KeyPress; $IF fromKeyboard THEN &BEGIN (KeybdEvent := TRUE; (VRead (ch, rkey, appleKey, shiftKey, optionKey); (VGetMouse (tmpPt); (WITH event DO *BEGIN ,key := rkey; ,Ascii := ch; ,State := 0; ,IF appleKey THEN State := State+8; ,IF shiftKey THEN State := State+2; ,IF optionKey THEN State := State+4; ,MouseX := tmpPt.h; ,MouseY := tmpPt.v; *END; &END $ELSE IF MouseEvent (mEvent) THEN &WITH mEvent, event DO (BEGIN *KeybdEvent := TRUE; *key := 0; *IF mouseDown THEN Ascii := CHR ($00) ELSE Ascii := CHR ($01); *State := 16; *IF meApple THEN State := State + 8; *IF meShift THEN State := State + 2; *IF meOption THEN State := State + 4; *MouseX := mouseLoc.h; *MouseY := mouseLoc.v; (END $ELSE KeybdEvent := FALSE; "END; "PROCEDURE Doit; "VAR i : INTEGER; &mousept, prepoint : Point; &aMouseEvent : TMouseEvent; &f, more, fromkeyboard : BOOLEAN; &ch : CHAR; &keycap : QPByte; &applekey, shiftkey, optionkey: BOOLEAN; &event : KeyEvent; "BEGIN $WHILE TRUE DO &BEGIN (VGetMouse (mousept); (WRITELN ('GetMouse = (h, v) ', mousept.h, mousept.v); (f := MouseButton; (WRITELN ('MouseButton = ', f); (WRITELN; (WRITELN ('Program is waiting for a mouse down, or clicks in the graphic panel.'); (WaitMouseEvent (aMouseEvent); {wait for mouse input} (REPEAT {display all mouse events} *WITH aMouseEvent DO ,BEGIN .WRITELN ('MouseEvent = mouseLoc - ', mouseLoc.h, mouseLoc.v); .WRITELN (' clicknum - ', clicknum); .WRITELN (' mouseDown, meShift, meApple, meOption - '); .WRITELN (' ', mouseDown, ' ', meShift, ' ', meApple, ' ', meOption); .WRITELN; .IF NOT mouseDown THEN 0PaintCircle (mouseLoc); ,END; *more := MouseEvent (aMouseEvent); (UNTIL NOT more; &{Or program can poll to see if there is mouse event} (WRITELN; (WRITELN ('Program is polling for a mouse down, or clicks in the graphic panel.'); (WHILE NOT MouseEvent (aMouseEvent) DO QPYield_CPU; {wait for mouse input} f{got something} (REPEAT *WITH aMouseEvent DO ,BEGIN .WRITELN ('MouseEvent = mouseLoc - ', mouseLoc.h, mouseLoc.v); .WRITELN (' clicknum - ', clicknum); .WRITELN (' mouseDown, meShift, meApple, meOption - '); .WRITELN (' ', mouseDown, ' ', meShift, ' ', meApple, ' ', meOption); .WRITELN; .prepoint := mouseLoc; ,END; (UNTIL NOT MouseEvent (aMouseEvent); &{Or program can wait for either keyboard or mouse input} (WRITELN; (WRITELN ('Program is waiting for a mouse down, or clicks in the graphic panel,'); (WRITELN (' or keyboard input.'); (WaitEvent (fromKeyboard); (IF fromkeyboard THEN *BEGIN ,VGetMouse (mousept); ,WRITE ('You typed : '); ,WHILE keypress DO .BEGIN 0read (ch); 0if (ch = ' ') and eoln then readln; 0PaintCircle (mousept); .END; ,WRITELN; *END (ELSE *WHILE MouseEvent (aMouseEvent) DO +WITH aMouseEvent DO ,BEGIN .WRITELN ('MouseEvent = mouseLoc - ', mouseLoc.h, mouseLoc.v); .WRITELN (' clicknum - ', clicknum); .WRITELN (' mouseDown, meShift, meApple, meOption - '); .WRITELN (' ', mouseDown, ' ', meShift, ' ', meApple, ' ', meOption); .WRITELN; .IF NOT mouseDown THEN 0PaintCircle (mouseLoc); ,END; &{Or program can wait for keyboard only} (WRITELN; (WRITELN ('Program is waiting for keyboard input.'); (REPEAT *VRead (ch, keycap, applekey, shiftkey, optionkey); *WRITELN ('You typed : ', ch, ' keycap = ', keycap, ' applekey = ', applekey, ' shiftkey = ', shiftkey); *WRITELN (' optionkey = ', optionkey); (UNTIL NOT KeyPress; &{Or program can use the KeybdEvent function defined above} (WRITELN; (WRITELN ('Program is using KeybdEvent for either mouse or keyboard input.'); (IF KeybdEvent (TRUE, TRUE, event) THEN *BEGIN ,REPEAT .WITH event DO /BEGIN 1WRITELN (' event = key - ', key, ' Ascii - ', ORD (Ascii), ' State - ', State); 1WRITELN (' MouseX - ', MouseX, ' MouseY -', MouseY); /END; ,UNTIL NOT KeybdEvent (TRUE, FALSE, event); *END; &END; "END; BEGIN "SetupPanels; "DrawCheckerboard; "Doit; END. 3. "6F^9 D!$ǐ^ZZ*J$*ZHpœ̏̏̏p̳̏r4.8̏CœL0̦̦4̥¬L.LH̦̦4̥p̦̦]ev ƝJ̏z̳̏ $SÂFF̳r̳hB̳̳88p̳̳88,FFFpr00;This is a sample phrase file for QuickPort applications ;NOTE: You can only add your alert messages at *****. Everything else must not be changed. 1 3 2300 $libtk/PABC ; Apple building block phrase files can be included here 1000 QuickPort ; Other application alerts can be included here, numbered between 1001 and 32000 ; phrases for dialog box, invoked by the Setup menu. 1001 Characters Per Line 1002 Wraparound 1003 Yes 1004 No 1005 Tab 1006 stop alert QuickPort's picture is running out of space. The subsequent graphic output will be displayed, but not saved for scrolling, until your tool erase the whole screen. 1007 stop alert Your QuickPort tool has called another OpenPicture in the QuickPort's grafport. This tool will be aborted. 1008 stop alert QuickPort's buffer is running out of space. The top lines will be deleted. You can use the Erase command to erase the top lines in the buffer to create some room. ; ***** Quickport programs can add any alerts (stop alerts only) here with number greater than 1008 2000 stop alert QuickPort program's special alert. 0 2 $libtk/PABC~File/Print ; Text-panel-only edit menu, without Flush Input menu item 3 Edit Copy#201 Read Input From Clipboard#203 - Erase#1200 Save Buffer#1201 Don't Save Buffer#1202 - Select All Text#204 ; Grpahic-panel-only edit menu, without Flush Input menu item 4 Edit Copy#201 Read Input From Clipboard#203 ; Both-text-and-grpahic-panel edit menu, without Flush Input menu item 5 Edit Copy#201 Read Input From Clipboard#203 - Erase#1200 Save Buffer#1201 Don't Save Buffer#1202 - Select All Text#204 Select All Graph#1205 ; Text-panel-only edit menu, with Flush Input menu item 8 Edit Copy#201 Read Input From Clipboard#203 - Erase#1200 Save Buffer#1201 Don't Save Buffer#1202 - Flush Input#1203 - Select All Text#204 ; Grpahic-panel-only edit menu, with Flush Input menu item 9 Edit Copy#201 Read Input From Clipboard#203 - Flush Input#1203 ; Both-text-and-grpahic-panel edit menu, with Flush Input menu item 10 Edit Copy#201 Read Input From Clipboard#203 - Erase#1200 Save Buffer#1201 Don't Save Buffer#1202 - Flush Input#1203 - Select All Text#204 Select All Graph#1205 ;show up only when there is a text panel 6 Terminal Specifics Set up#2001 Show Tab Ruler#2002 Hide Tab Ruler#2003 7 Execution Restart#2101 Resume#2102 20 Page Layout Preview Page Margins#401 Preview Page Breaks#402 Don't Preview Pages#403 - Headings and Margins...#405 - Set Horizontal Page Break#411 Set Vertical Page Break#412 Clear All Manual Breaks#413 99 $libtk/PABC~Debug 100 $libtk/PABC~Buzzwords 1000 $libtk/PABC~Clipboard File/Print 0 O^E69PH r^J4|̟`L.999SAMPLE.CONFIG.TE*L0`̦̦̥:L.L9̦9C̦̥̦̦GC>Jqp/QDSAMPLE.CONFIG.TEXTjtA A-#2#2̏z̏lFFxp$̏ ̵PFP̏zPROGRAM QDSample; { QuickDraw sample program modified to illustrate the use of QuickDraw in the QuickPort. } { Call QPConfig to show both text and graphic panel in vertical arrangement.} { Also show example of putting up an alert and getting document prefix} USES $QuickDraw, {needed to compile UQPortCall, also needed by this program} ${$U QP/UQPortCall} UQPortCall, {needed to call QPConfig} ${$U QP/UQPortGraph} UQPortGraph, {program has to use this if has graphic output} ${$U QP/Hardware} Hardware, {program has to use this in QuickPort to access Hardware unit} ${$U syscall} Syscall, ${$U QP/UQPSupport} UQPSupport; TYPE IconData = ARRAY[0..95] OF INTEGER; VAR heapBuf: ARRAY[0..10000] OF INTEGER;{must keep array under 32K byte limit} $myPort: GrafPort; $icons: ARRAY[0..5] OF IconData; $config : TQPConfigRec; $updateRgn : RgnHandle; $prefix : pathname; $ch : char; (* We do not need this in the QuickPort FUNCTION HeapFull(hz: QDPtr; bytesNeeded: INTEGER): INTEGER; { This function will be called if the heapZone runs out of space } BEGIN "WRITELN('The heap is full. The program must now terminate! '); "Halt; END; *) PROCEDURE InitIcons; { Manually stuff some icons. Normally we would read them from a file } BEGIN "{ Lisa } "StuffHex(@icons[0, 0],'000000000000000000000000000000000000001FFFFFFFFC'); "StuffHex(@icons[0,12],'00600000000601800000000B0600000000130FFFFFFFFFA3'); "StuffHex(@icons[0,24],'18000000004311FFFFF00023120000080F231200000BF923'); "StuffHex(@icons[0,36],'120000080F23120000080023120000080023120000080F23'); "StuffHex(@icons[0,48],'1200000BF923120000080F2312000008002311FFFFF00023'); "StuffHex(@icons[0,60],'08000000004307FFFFFFFFA30100000000260FFFFFFFFE2C'); "StuffHex(@icons[0,72],'18000000013832AAAAA8A9F0655555515380C2AAAA82A580'); "StuffHex(@icons[0,84],'800000000980FFFFFFFFF300800000001600FFFFFFFFFC00'); "{ Printer } "StuffHex(@icons[1, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[1,12],'00000000000000007FFFFF00000080000280000111514440'); "StuffHex(@icons[1,24],'0002000008400004454510400004000017C00004A5151000'); "StuffHex(@icons[1,36],'0004000010000004A54510000004000017FE00F4A5151003'); "StuffHex(@icons[1,48],'0184000013870327FFFFF10F06400000021B0CFFFFFFFC37'); "StuffHex(@icons[1,60],'18000000006B3000000000D77FFFFFFFFFABC00000000356'); "StuffHex(@icons[1,72],'8000000001AC87F000000158841000CCC1B087F000CCC160'); "StuffHex(@icons[1,84],'8000000001C0C000000003807FFFFFFFFF0007800001E000'); "{ Trash Can } "StuffHex(@icons[2, 0],'000001FC000000000E0600000000300300000000C0918000'); "StuffHex(@icons[2,12],'00013849800000026C4980000004C0930000000861260000'); "StuffHex(@icons[2,24],'0010064FE0000031199830000020E6301800002418E00800'); "StuffHex(@icons[2,36],'0033E3801C0000180E002C00000FF801CC0000047FFE0C00'); "StuffHex(@icons[2,48],'000500004C000005259A4C000005250A4C00000525FA4C00'); "StuffHex(@icons[2,60],'000524024C00000524924C00600524924C0090E524924C7C'); "StuffHex(@icons[2,72],'932524924C82A44524924D01C88524924CF10C4524924C09'); "StuffHex(@icons[2,84],'0784249258E70003049233100000E000E40800001FFFC3F0'); "{ tray } "StuffHex(@icons[3, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[3,12],'0000000000000000000000000000000000000007FFFFFFF0'); "StuffHex(@icons[3,24],'000E00000018001A00000038003600000078006A000000D8'); "StuffHex(@icons[3,36],'00D7FFFFFFB801AC000003580358000006B807FC000FFD58'); "StuffHex(@icons[3,48],'040600180AB80403FFF00D58040000000AB8040000000D58'); "StuffHex(@icons[3,60],'040000000AB807FFFFFFFD5806AC00000AB8055800000D58'); "StuffHex(@icons[3,72],'06B000000AB807FC000FFD70040600180AE00403FFF00DC0'); "StuffHex(@icons[3,84],'040000000B80040000000F00040000000E0007FFFFFFFC00'); "{ File Cabinet } "StuffHex(@icons[4, 0],'0007FFFFFC00000800000C00001000001C00002000003400'); "StuffHex(@icons[4,12],'004000006C0000FFFFFFD40000800000AC0000BFFFFED400'); "StuffHex(@icons[4,24],'00A00002AC0000A07F02D40000A04102AC0000A07F02D400'); "StuffHex(@icons[4,36],'00A00002AC0000A08082D40000A0FF82AC0000A00002D400'); "StuffHex(@icons[4,48],'00A00002AC0000BFFFFED40000800000AC0000BFFFFED400'); "StuffHex(@icons[4,60],'00A00002AC0000A07F02D40000A04102AC0000A07F02D400'); "StuffHex(@icons[4,72],'00A00002AC0000A08082D40000A0FF82AC0000A00002D800'); "StuffHex(@icons[4,84],'00A00002B00000BFFFFEE00000800000C00000FFFFFF8000'); "{ drawer } "StuffHex(@icons[5, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,12],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,24],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,36],'00000000000000000000000000000000000000001FFFFFF0'); "StuffHex(@icons[5,48],'0000380000300000680000700000D80000D0003FFFFFF1B0'); "StuffHex(@icons[5,60],'0020000013500020000016B000201FE01D50002010201AB0'); "StuffHex(@icons[5,72],'00201FE01560002000001AC0002000001580002020101B00'); "StuffHex(@icons[5,84],'00203FF01600002000001C00002000001800003FFFFFF000'); END; PROCEDURE DrawIcon(whichIcon,h,v: INTEGER); VAR srcBits: BitMap; $srcRect,dstRect: Rect; BEGIN "srcBits.baseAddr:=@icons[whichIcon]; "srcBits.rowBytes:=6; "SetRect(srcBits.bounds,0,0,48,32); "srcRect:=srcBits.bounds; "dstRect:=srcRect; "OffsetRect(dstRect,h,v); "CopyBits(srcBits,thePort^.portBits,srcRect,dstRect,srcOr,Nil); END; PROCEDURE DrawStuff; VAR i: INTEGER; $tempRect: Rect; $myPoly: PolyHandle; $myRgn: RgnHandle; $myPattern: Pattern; BEGIN "StuffHex(@myPattern,'8040200002040800'); "tempRect := thePort^.portRect; "ClipRect(tempRect); "EraseRoundRect(tempRect,30,20); "FrameRoundRect(tempRect,30,20); "{ draw two horizontal lines across the top } "MoveTo(0,18); "LineTo(719,18); "MoveTo(0,20); "LineTo(719,20); "{ draw divider lines } "MoveTo(0,134); "LineTo(719,134); "MoveTo(0,248); "LineTo(719,248); "MoveTo(240,21); "LineTo(240,363); "MoveTo(480,21); "LineTo(480,363); "{ draw title } "TextFont(14); {used to be 0 - systext, user should never use 0 thru 3. A14 is p10cent. Ufont will have all the legal font constant later.} "MoveTo(210,14); "DrawString('Look what you can draw with QuickDraw'); "{--------- draw text samples --------- } "MoveTo(80,34); Drawstring('Text'); "TextFace([bold]); "MoveTo(70,55); Drawstring('Bold'); "TextFace([italic]); "MoveTo(70,70); Drawstring('Italic'); "TextFace([underline]); "MoveTo(70,85); Drawstring('Underline'); "TextFace([outline]); "MoveTo(70,100); Drawstring('Outline'); "TextFace([shadow]); "MoveTo(70,115); Drawstring('Shadow'); "TextFace([]); { restore to normal } "{ --------- draw line samples --------- } "MoveTo(330,34); Drawstring('Lines'); "MoveTo(280,25); Line(160,40); "PenSize(3,2); "MoveTo(280,35); Line(160,40); "PenSize(6,4); "MoveTo(280,46); Line(160,40); "PenSize(12,8); "PenPat(gray); "MoveTo(280,61); Line(160,40); "PenSize(15,10); "PenPat(myPattern); "MoveTo(280,80); Line(160,40); "PenNormal; "{ --------- draw rectangle samples --------- } "MoveTo(560,34); Drawstring('Rectangles'); "SetRect(tempRect,510,40,570,70); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseRect(tempRect); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "PaintRect(tempRect); "OffsetRect(tempRect,25,15); "PenNormal; "FillRect(tempRect,gray); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "FillRect(tempRect,myPattern); "FrameRect(tempRect); "{ --------- draw roundRect samples --------- } "MoveTo(70,148); Drawstring('RoundRects'); "SetRect(tempRect,30,150,90,180); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseRoundRect(tempRect,30,20); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PaintRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PenNormal; "FillRoundRect(tempRect,30,20,gray); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "FillRoundRect(tempRect,30,20,myPattern); "FrameRoundRect(tempRect,30,20); "{ --------- draw bit image samples --------- } "MoveTo(320,148); Drawstring('Bit Images'); "DrawIcon(0,266,156); "DrawIcon(1,336,156); "DrawIcon(2,406,156); "DrawIcon(3,266,196); "DrawIcon(4,336,196); "DrawIcon(5,406,196); "{ --------- draw Wedge samples --------- } "MoveTo(570,148); Drawstring('Wedges'); "SetRect(tempRect,520,153,655,243); "FillArc(tempRect,135,65,dkGray); "FillArc(tempRect,200,130,myPattern); "FillArc(tempRect,330,75,gray); "FrameArc(tempRect,135,270); "OffsetRect(tempRect,20,0); "PaintArc(tempRect,45,90); "{ --------- draw polygon samples --------- } "MoveTo(80,262); Drawstring('Polygons'); "myPoly:=OpenPoly; $MoveTo(30,290); $LineTo(30,280); $LineTo(50,265); $LineTo(90,265); $LineTo(80,280); $LineTo(95,290); $LineTo(30,290); "ClosePoly; { end of definition } "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "PenSize(3,2); "ErasePoly(myPoly); "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "PaintPoly(myPoly); "OffsetPoly(myPoly,25,15); "PenNormal; "FillPoly(myPoly,gray); "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "FillPoly(myPoly,myPattern); "FramePoly(myPoly); "KillPoly(myPoly); "{ --------- demonstrate region clipping --------- } "MoveTo(320,262); Drawstring('Regions'); "myRgn:=NewRgn; "OpenRgn; $ShowPen; $SetRect(tempRect,260,270,460,350); $FrameRoundRect(tempRect,24,16); $MoveTo(275,335); { define triangular hole } $LineTo(325,285); $LineTo(375,335); $LineTo(275,335); $SetRect(tempRect,365,277,445,325); { oval hole } $FrameOval(tempRect); $HidePen; "CloseRgn(myRgn); { end of definition } "SetClip(myRgn); "FOR i:=0 TO 6 DO { draw stuff inside the clip region } $BEGIN &MoveTo(260,280+12*i); &Drawstring('Arbitrary Clipping Regions'); $END; "ClipRect(thePort^.portRect); "DisposeRgn(myRgn); "{ --------- draw oval samples --------- } "MoveTo(580,262); Drawstring('Ovals'); "SetRect(tempRect,510,264,570,294); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseOval(tempRect); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "PaintOval(tempRect); "OffsetRect(tempRect,25,15); "PenNormal; "FillOval(tempRect,gray); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "FillOval(tempRect,myPattern); "FrameOval(tempRect); END; { DrawStuff } BEGIN { main program QDSample} (* Must not do this in the QuickPort "{----- Initialization - Generic to all applications using QuickDraw -----} "QDInit(@heapBuf, @heapBuf[10000], @HeapFull); { Must do this once at beginning } "OpenPort(@myPort); *) "WITH config DO $BEGIN &tosaveBuffer := TRUE; {save lines in buffer} &passApplePeriod := FALSE; {pass apple '.' to main program} &showInputPanel := FALSE; {display input panel} &twoPanels := TRUE; &vhs := v; {vertical or horizontal split} &grPanelSize := -150; {initial width or height, if < 0, text Ipanel is below or right of the graph panel} $END; "QPConfig (config); {main program should call this before any screen i/o} "Writeln ('This is a QuickDraw sample program running in the QuickPort, with both'); "Writeln ('text and graphic panel showing up and down here. You can close down the'); "Writeln ('text panel to show most of the graphic panel.'); "PaintRect(thePort^.portRect); { Paint grey background } "InitIcons; "DrawStuff; "Beep (2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for 6500 milliseconds } H(* Program has to use Beep instead of Tone. Same parameters. HTone(2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for `500 milliseconds } H*) "IF getdocprefix (prefix) THEN $Writeln ('This document''s OS file name prefix is ', prefix) "ELSE Writeln ('We can not get the document prefix right now'); "Writeln ('Do you want to put up an alert ?'); "Read (ch); "IF (ch = 'Y') OR (ch = 'y') THEN $putupalert (2000); {2000 is the phrase number used in the user phrase file} "ReadLn; { Wait until RETURN entered before terminating program } END. O^E69o PH r^ ) )c4xhePort^.PortRect); "Beep (2000, 500); { Beep tone of (1/H..V8/sec for 6500 m¾H"̓̓V̒H 8Hz8j.̓.-$̓V̒To ̓0̓"f (1/2000)*10^6 == 500 cycles/sec for <500 milliseconds } $*) "ReadLn; { Wait until RETURN entered before terminating program } END. PROGRAM QDSample; { Sample program illustrating the use of QuickDraw in the QuickPort. } { Use default setting in the QuickPort - graphic panel only} USES $QuickDraw, {needed by this program} ${$U QP/Hardware} Hardware, {program has to use this in QuickPort to access Hardware unit} ${$U QP/UQPortGraph} UQPortGraph; {program has to use this if has graphic output} TYPE IconData = ARRAY[0..95] OF INTEGER; VAR heapBuf: ARRAY[0..10000] OF INTEGER;{must keep array under 32K byte limit} $myPort: GrafPort; $icons: ARRAY[0..5] OF IconData; $sysportptr : GrafPtr; $myPicture : PicHandle; (* We do not need this in the QuickPort FUNCTION HeapFull(hz: QDPtr; bytesNeeded: INTEGER): INTEGER; { This function will be called if the heapZone runs out of space } BEGIN "WRITELN('The heap is full. The program must now terminate! '); "Halt; END; *) PROCEDURE InitIcons; { Manually stuff some icons. Normally we would read them from a file } BEGIN "{ Lisa } "StuffHex(@icons[0, 0],'000000000000000000000000000000000000001FFFFFFFFC'); "StuffHex(@icons[0,12],'00600000000601800000000B0600000000130FFFFFFFFFA3'); "StuffHex(@icons[0,24],'18000000004311FFFFF00023120000080F231200000BF923'); "StuffHex(@icons[0,36],'120000080F23120000080023120000080023120000080F23'); "StuffHex(@icons[0,48],'1200000BF923120000080F2312000008002311FFFFF00023'); "StuffHex(@icons[0,60],'08000000004307FFFFFFFFA30100000000260FFFFFFFFE2C'); "StuffHex(@icons[0,72],'18000000013832AAAAA8A9F0655555515380C2AAAA82A580'); "StuffHex(@icons[0,84],'800000000980FFFFFFFFF300800000001600FFFFFFFFFC00'); "{ Printer } "StuffHex(@icons[1, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[1,12],'00000000000000007FFFFF00000080000280000111514440'); "StuffHex(@icons[1,24],'0002000008400004454510400004000017C00004A5151000'); "StuffHex(@icons[1,36],'0004000010000004A54510000004000017FE00F4A5151003'); "StuffHex(@icons[1,48],'0184000013870327FFFFF10F06400000021B0CFFFFFFFC37'); "StuffHex(@icons[1,60],'18000000006B3000000000D77FFFFFFFFFABC00000000356'); "StuffHex(@icons[1,72],'8000000001AC87F000000158841000CCC1B087F000CCC160'); "StuffHex(@icons[1,84],'8000000001C0C000000003807FFFFFFFFF0007800001E000'); "{ Trash Can } "StuffHex(@icons[2, 0],'000001FC000000000E0600000000300300000000C0918000'); "StuffHex(@icons[2,12],'00013849800000026C4980000004C0930000000861260000'); "StuffHex(@icons[2,24],'0010064FE0000031199830000020E6301800002418E00800'); "StuffHex(@icons[2,36],'0033E3801C0000180E002C00000FF801CC0000047FFE0C00'); "StuffHex(@icons[2,48],'000500004C000005259A4C000005250A4C00000525FA4C00'); "StuffHex(@icons[2,60],'000524024C00000524924C00600524924C0090E524924C7C'); "StuffHex(@icons[2,72],'932524924C82A44524924D01C88524924CF10C4524924C09'); "StuffHex(@icons[2,84],'0784249258E70003049233100000E000E40800001FFFC3F0'); "{ tray } "StuffHex(@icons[3, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[3,12],'0000000000000000000000000000000000000007FFFFFFF0'); "StuffHex(@icons[3,24],'000E00000018001A00000038003600000078006A000000D8'); "StuffHex(@icons[3,36],'00D7FFFFFFB801AC000003580358000006B807FC000FFD58'); "StuffHex(@icons[3,48],'040600180AB80403FFF00D58040000000AB8040000000D58'); "StuffHex(@icons[3,60],'040000000AB807FFFFFFFD5806AC00000AB8055800000D58'); "StuffHex(@icons[3,72],'06B000000AB807FC000FFD70040600180AE00403FFF00DC0'); "StuffHex(@icons[3,84],'040000000B80040000000F00040000000E0007FFFFFFFC00'); "{ File Cabinet } "StuffHex(@icons[4, 0],'0007FFFFFC00000800000C00001000001C00002000003400'); "StuffHex(@icons[4,12],'004000006C0000FFFFFFD40000800000AC0000BFFFFED400'); "StuffHex(@icons[4,24],'00A00002AC0000A07F02D40000A04102AC0000A07F02D400'); "StuffHex(@icons[4,36],'00A00002AC0000A08082D40000A0FF82AC0000A00002D400'); "StuffHex(@icons[4,48],'00A00002AC0000BFFFFED40000800000AC0000BFFFFED400'); "StuffHex(@icons[4,60],'00A00002AC0000A07F02D40000A04102AC0000A07F02D400'); "StuffHex(@icons[4,72],'00A00002AC0000A08082D40000A0FF82AC0000A00002D800'); "StuffHex(@icons[4,84],'00A00002B00000BFFFFEE00000800000C00000FFFFFF8000'); "{ drawer } "StuffHex(@icons[5, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,12],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,24],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,36],'00000000000000000000000000000000000000001FFFFFF0'); "StuffHex(@icons[5,48],'0000380000300000680000700000D80000D0003FFFFFF1B0'); "StuffHex(@icons[5,60],'0020000013500020000016B000201FE01D50002010201AB0'); "StuffHex(@icons[5,72],'00201FE01560002000001AC0002000001580002020101B00'); "StuffHex(@icons[5,84],'00203FF01600002000001C00002000001800003FFFFFF000'); END; PROCEDURE DrawIcon(whichIcon,h,v: INTEGER); VAR srcBits: BitMap; $srcRect,dstRect: Rect; BEGIN "srcBits.baseAddr:=@icons[whichIcon]; "srcBits.rowBytes:=6; "SetRect(srcBits.bounds,0,0,48,32); "srcRect:=srcBits.bounds; "dstRect:=srcRect; "OffsetRect(dstRect,h,v); "CopyBits(srcBits,thePort^.portBits,srcRect,dstRect,srcOr,Nil); END; PROCEDURE DrawStuff; VAR i: INTEGER; $tempRect: Rect; $myPoly: PolyHandle; $myRgn: RgnHandle; $myPattern: Pattern; BEGIN "(* This pattern is not accepted in LisaDraw when we paste this output to LisaDraw. "StuffHex(@myPattern,'8040200002040800'); "*) "StuffHex(@myPattern,'2040800008040200'); {and this will} "tempRect := thePort^.portRect; "ClipRect(tempRect); "EraseRoundRect(tempRect,30,20); "FrameRoundRect(tempRect,30,20); "{ draw two horizontal lines across the top } "MoveTo(0,18); "LineTo(719,18); "MoveTo(0,20); "LineTo(719,20); "{ draw divider lines } "MoveTo(0,134); "LineTo(719,134); "MoveTo(0,248); "LineTo(719,248); "MoveTo(240,21); "LineTo(240,363); "MoveTo(480,21); "LineTo(480,363); "{ draw title } "TextFont(14); {used to be 0 - systext, user should never use 0 thru 3. ;14 is p10cent. Ufont will have all the legal font constant later.} "MoveTo(210,14); "DrawString('Look what you can draw with QuickDraw'); "{--------- draw text samples --------- } "MoveTo(80,34); Drawstring('Text'); "TextFace([bold]); "MoveTo(70,55); Drawstring('Bold'); "TextFace([italic]); "MoveTo(70,70); Drawstring('Italic'); "TextFace([underline]); "MoveTo(70,85); Drawstring('Underline'); "TextFace([outline]); "MoveTo(70,100); Drawstring('Outline'); "TextFace([shadow]); "MoveTo(70,115); Drawstring('Shadow'); "TextFace([]); { restore to normal } "{ --------- draw line samples --------- } "MoveTo(330,34); Drawstring('Lines'); "MoveTo(280,25); Line(160,40); "PenSize(3,2); "MoveTo(280,35); Line(160,40); "PenSize(6,4); "MoveTo(280,46); Line(160,40); "PenSize(12,8); "PenPat(gray); "MoveTo(280,61); Line(160,40); "PenSize(15,10); "PenPat(myPattern); "MoveTo(280,80); Line(160,40); "PenNormal; "{ --------- draw rectangle samples --------- } "MoveTo(560,34); Drawstring('Rectangles'); "SetRect(tempRect,510,40,570,70); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseRect(tempRect); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "PaintRect(tempRect); "OffsetRect(tempRect,25,15); "PenNormal; "FillRect(tempRect,gray); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "FillRect(tempRect,myPattern); "FrameRect(tempRect); "{ --------- draw roundRect samples --------- } "MoveTo(70,148); Drawstring('RoundRects'); "SetRect(tempRect,30,150,90,180); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseRoundRect(tempRect,30,20); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PaintRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PenNormal; "FillRoundRect(tempRect,30,20,gray); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "FillRoundRect(tempRect,30,20,myPattern); "FrameRoundRect(tempRect,30,20); "{ --------- draw bit image samples --------- } "MoveTo(320,148); Drawstring('Bit Images'); "DrawIcon(0,266,156); "DrawIcon(1,336,156); "DrawIcon(2,406,156); "DrawIcon(3,266,196); "DrawIcon(4,336,196); "DrawIcon(5,406,196); "{ --------- draw Wedge samples --------- } "MoveTo(570,148); Drawstring('Wedges'); "SetRect(tempRect,520,153,655,243); "FillArc(tempRect,135,65,dkGray); "FillArc(tempRect,200,130,myPattern); "FillArc(tempRect,330,75,gray); "FrameArc(tempRect,135,270); "OffsetRect(tempRect,20,0); "PaintArc(tempRect,45,90); "{ --------- draw polygon samples --------- } "MoveTo(80,262); Drawstring('Polygons'); "myPoly:=OpenPoly; $MoveTo(30,290); $LineTo(30,280); $LineTo(50,265); $LineTo(90,265); $LineTo(80,280); $LineTo(95,290); $LineTo(30,290); "ClosePoly; { end of definition } "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "PenSize(3,2); "ErasePoly(myPoly); "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "PaintPoly(myPoly); "OffsetPoly(myPoly,25,15); "PenNormal; "FillPoly(myPoly,gray); "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "FillPoly(myPoly,myPattern); "FramePoly(myPoly); "KillPoly(myPoly); "{ --------- demonstrate region clipping --------- } "MoveTo(320,262); Drawstring('Regions'); "myRgn:=NewRgn; "OpenRgn; $ShowPen; $SetRect(tempRect,260,270,460,350); $FrameRoundRect(tempRect,24,16); $MoveTo(275,335); { define triangular hole } $LineTo(325,285); $LineTo(375,335); $LineTo(275,335); $SetRect(tempRect,365,277,445,325); { oval hole } $FrameOval(tempRect); $HidePen; "CloseRgn(myRgn); { end of definition } "SetClip(myRgn); "FOR i:=0 TO 6 DO { draw stuff inside the clip region } $BEGIN &MoveTo(260,280+12*i); &Drawstring('Arbitrary Clipping Regions'); $END; "ClipRect(thePort^.portRect); "DisposeRgn(myRgn); "{ --------- draw oval samples --------- } "MoveTo(580,262); Drawstring('Ovals'); "SetRect(tempRect,510,264,570,294); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseOval(tempRect); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "PaintOval(tempRect); "OffsetRect(tempRect,25,15); "PenNormal; "FillOval(tempRect,gray); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "FillOval(tempRect,myPattern); "FrameOval(tempRect); END; { DrawStuff } BEGIN { main program } (* Must not do this in the QuickPort "{----- Initialization - Generic to all applications using QuickDraw -----} "QDInit(@heapBuf, @heapBuf[10000], @HeapFull); { Must do this once at beginning } "OpenPort(@myPort); *) "{example of using picture in the QuickPort} "GetPort (sysportptr); "OpenPort(@myPort); {you must open another port before open a picture} "myPicture := OpenPicture (thePort^.portRect); "PaintRect(thePort^.portRect); { Paint grey background } "InitIcons; "DrawStuff; "ClosePicture; "SetPort (sysportptr); {switch to system grafport before drawing to screen} "EraseRect (thePort^.PortRect); {you must do this before DrawPicture to get Ithe QuickPort's picture open} "DrawPicture (myPicture, thePort^.PortRect); "Beep (2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for 6500 milliseconds } $(* Program has to use Beep in the QuickPort instead of Tone. Same parameters. $Tone(2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for <500 milliseconds } $*) "ReadLn; { Wait until RETURN entered before terminating program } END. O^E69. PH r^izzo/* for ameters. nt later.} re unit} ̜̜.ÌfTTV8̜D¾H"̓̓V̒H 8Hz8jT̓Txr̓V̒" ̓0̓""PaintRect(tempRect); "OffsetRect(tempRect,25,15); "PenNormal; "FillRect(tempRect,gray); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "FillRect(tempRect,myPattern); "FrameRect(tempRect); PROGRAM QDSample; { Sample program illustrating the use of QuickDraw in the QuickPort. } { Use default setting in the QuickPort - graphic panel only} USES $QuickDraw, {needed by this program} ${$U QP/Hardware} Hardware, {program has to use this in QuickPort to access Hardware unit} ${$U QP/UQPortGraph} UQPortGraph; {program has to use this if has graphic output} TYPE IconData = ARRAY[0..95] OF INTEGER; VAR heapBuf: ARRAY[0..10000] OF INTEGER;{must keep array under 32K byte limit} $myPort: GrafPort; $icons: ARRAY[0..5] OF IconData; (* We do not need this in the QuickPort FUNCTION HeapFull(hz: QDPtr; bytesNeeded: INTEGER): INTEGER; { This function will be called if the heapZone runs out of space } BEGIN "WRITELN('The heap is full. The program must now terminate! '); "Halt; END; *) PROCEDURE InitIcons; { Manually stuff some icons. Normally we would read them from a file } BEGIN "{ Lisa } "StuffHex(@icons[0, 0],'000000000000000000000000000000000000001FFFFFFFFC'); "StuffHex(@icons[0,12],'00600000000601800000000B0600000000130FFFFFFFFFA3'); "StuffHex(@icons[0,24],'18000000004311FFFFF00023120000080F231200000BF923'); "StuffHex(@icons[0,36],'120000080F23120000080023120000080023120000080F23'); "StuffHex(@icons[0,48],'1200000BF923120000080F2312000008002311FFFFF00023'); "StuffHex(@icons[0,60],'08000000004307FFFFFFFFA30100000000260FFFFFFFFE2C'); "StuffHex(@icons[0,72],'18000000013832AAAAA8A9F0655555515380C2AAAA82A580'); "StuffHex(@icons[0,84],'800000000980FFFFFFFFF300800000001600FFFFFFFFFC00'); "{ Printer } "StuffHex(@icons[1, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[1,12],'00000000000000007FFFFF00000080000280000111514440'); "StuffHex(@icons[1,24],'0002000008400004454510400004000017C00004A5151000'); "StuffHex(@icons[1,36],'0004000010000004A54510000004000017FE00F4A5151003'); "StuffHex(@icons[1,48],'0184000013870327FFFFF10F06400000021B0CFFFFFFFC37'); "StuffHex(@icons[1,60],'18000000006B3000000000D77FFFFFFFFFABC00000000356'); "StuffHex(@icons[1,72],'8000000001AC87F000000158841000CCC1B087F000CCC160'); "StuffHex(@icons[1,84],'8000000001C0C000000003807FFFFFFFFF0007800001E000'); "{ Trash Can } "StuffHex(@icons[2, 0],'000001FC000000000E0600000000300300000000C0918000'); "StuffHex(@icons[2,12],'00013849800000026C4980000004C0930000000861260000'); "StuffHex(@icons[2,24],'0010064FE0000031199830000020E6301800002418E00800'); "StuffHex(@icons[2,36],'0033E3801C0000180E002C00000FF801CC0000047FFE0C00'); "StuffHex(@icons[2,48],'000500004C000005259A4C000005250A4C00000525FA4C00'); "StuffHex(@icons[2,60],'000524024C00000524924C00600524924C0090E524924C7C'); "StuffHex(@icons[2,72],'932524924C82A44524924D01C88524924CF10C4524924C09'); "StuffHex(@icons[2,84],'0784249258E70003049233100000E000E40800001FFFC3F0'); "{ tray } "StuffHex(@icons[3, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[3,12],'0000000000000000000000000000000000000007FFFFFFF0'); "StuffHex(@icons[3,24],'000E00000018001A00000038003600000078006A000000D8'); "StuffHex(@icons[3,36],'00D7FFFFFFB801AC000003580358000006B807FC000FFD58'); "StuffHex(@icons[3,48],'040600180AB80403FFF00D58040000000AB8040000000D58'); "StuffHex(@icons[3,60],'040000000AB807FFFFFFFD5806AC00000AB8055800000D58'); "StuffHex(@icons[3,72],'06B000000AB807FC000FFD70040600180AE00403FFF00DC0'); "StuffHex(@icons[3,84],'040000000B80040000000F00040000000E0007FFFFFFFC00'); "{ File Cabinet } "StuffHex(@icons[4, 0],'0007FFFFFC00000800000C00001000001C00002000003400'); "StuffHex(@icons[4,12],'004000006C0000FFFFFFD40000800000AC0000BFFFFED400'); "StuffHex(@icons[4,24],'00A00002AC0000A07F02D40000A04102AC0000A07F02D400'); "StuffHex(@icons[4,36],'00A00002AC0000A08082D40000A0FF82AC0000A00002D400'); "StuffHex(@icons[4,48],'00A00002AC0000BFFFFED40000800000AC0000BFFFFED400'); "StuffHex(@icons[4,60],'00A00002AC0000A07F02D40000A04102AC0000A07F02D400'); "StuffHex(@icons[4,72],'00A00002AC0000A08082D40000A0FF82AC0000A00002D800'); "StuffHex(@icons[4,84],'00A00002B00000BFFFFEE00000800000C00000FFFFFF8000'); "{ drawer } "StuffHex(@icons[5, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,12],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,24],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,36],'00000000000000000000000000000000000000001FFFFFF0'); "StuffHex(@icons[5,48],'0000380000300000680000700000D80000D0003FFFFFF1B0'); "StuffHex(@icons[5,60],'0020000013500020000016B000201FE01D50002010201AB0'); "StuffHex(@icons[5,72],'00201FE01560002000001AC0002000001580002020101B00'); "StuffHex(@icons[5,84],'00203FF01600002000001C00002000001800003FFFFFF000'); END; PROCEDURE DrawIcon(whichIcon,h,v: INTEGER); VAR srcBits: BitMap; $srcRect,dstRect: Rect; BEGIN "srcBits.baseAddr:=@icons[whichIcon]; "srcBits.rowBytes:=6; "SetRect(srcBits.bounds,0,0,48,32); "srcRect:=srcBits.bounds; "dstRect:=srcRect; "OffsetRect(dstRect,h,v); "CopyBits(srcBits,thePort^.portBits,srcRect,dstRect,srcOr,Nil); END; PROCEDURE DrawStuff; VAR i: INTEGER; $tempRect: Rect; $myPoly: PolyHandle; $myRgn: RgnHandle; $myPattern: Pattern; BEGIN "(* This pattern is not accepted in LisaDraw when we paste this output to LisaDraw. "StuffHex(@myPattern,'8040200002040800'); "*) "StuffHex(@myPattern,'2040800008040200'); {and this will} "tempRect := thePort^.portRect; "ClipRect(tempRect); "EraseRoundRect(tempRect,30,20); "FrameRoundRect(tempRect,30,20); "{ draw two horizontal lines across the top } "MoveTo(0,18); "LineTo(719,18); "MoveTo(0,20); "LineTo(719,20); "{ draw divider lines } "MoveTo(0,134); "LineTo(719,134); "MoveTo(0,248); "LineTo(719,248); "MoveTo(240,21); "LineTo(240,363); "MoveTo(480,21); "LineTo(480,363); "{ draw title } "TextFont(14); {used to be 0 - systext, user should never use 0 thru 3. ;14 is p10cent. Ufont will have all the legal font constant later.} "MoveTo(210,14); "DrawString('Look what you can draw with QuickDraw'); "{--------- draw text samples --------- } "MoveTo(80,34); Drawstring('Text'); "TextFace([bold]); "MoveTo(70,55); Drawstring('Bold'); "TextFace([italic]); "MoveTo(70,70); Drawstring('Italic'); "TextFace([underline]); "MoveTo(70,85); Drawstring('Underline'); "TextFace([outline]); "MoveTo(70,100); Drawstring('Outline'); "TextFace([shadow]); "MoveTo(70,115); Drawstring('Shadow'); "TextFace([]); { restore to normal } "{ --------- draw line samples --------- } "MoveTo(330,34); Drawstring('Lines'); "MoveTo(280,25); Line(160,40); "PenSize(3,2); "MoveTo(280,35); Line(160,40); "PenSize(6,4); "MoveTo(280,46); Line(160,40); "PenSize(12,8); "PenPat(gray); "MoveTo(280,61); Line(160,40); "PenSize(15,10); "PenPat(myPattern); "MoveTo(280,80); Line(160,40); "PenNormal; "{ --------- draw rectangle samples --------- } "MoveTo(560,34); Drawstring('Rectangles'); "SetRect(tempRect,510,40,570,70); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseRect(tempRect); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "PaintRect(tempRect); "OffsetRect(tempRect,25,15); "PenNormal; "FillRect(tempRect,gray); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "FillRect(tempRect,myPattern); "FrameRect(tempRect); "{ --------- draw roundRect samples --------- } "MoveTo(70,148); Drawstring('RoundRects'); "SetRect(tempRect,30,150,90,180); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseRoundRect(tempRect,30,20); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PaintRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PenNormal; "FillRoundRect(tempRect,30,20,gray); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "FillRoundRect(tempRect,30,20,myPattern); "FrameRoundRect(tempRect,30,20); "{ --------- draw bit image samples --------- } "MoveTo(320,148); Drawstring('Bit Images'); "DrawIcon(0,266,156); "DrawIcon(1,336,156); "DrawIcon(2,406,156); "DrawIcon(3,266,196); "DrawIcon(4,336,196); "DrawIcon(5,406,196); "{ --------- draw Wedge samples --------- } "MoveTo(570,148); Drawstring('Wedges'); "SetRect(tempRect,520,153,655,243); "FillArc(tempRect,135,65,dkGray); "FillArc(tempRect,200,130,myPattern); "FillArc(tempRect,330,75,gray); "FrameArc(tempRect,135,270); "OffsetRect(tempRect,20,0); "PaintArc(tempRect,45,90); "{ --------- draw polygon samples --------- } "MoveTo(80,262); Drawstring('Polygons'); "myPoly:=OpenPoly; $MoveTo(30,290); $LineTo(30,280); $LineTo(50,265); $LineTo(90,265); $LineTo(80,280); $LineTo(95,290); $LineTo(30,290); "ClosePoly; { end of definition } "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "PenSize(3,2); "ErasePoly(myPoly); "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "PaintPoly(myPoly); "OffsetPoly(myPoly,25,15); "PenNormal; "FillPoly(myPoly,gray); "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "FillPoly(myPoly,myPattern); "FramePoly(myPoly); "KillPoly(myPoly); "{ --------- demonstrate region clipping --------- } "MoveTo(320,262); Drawstring('Regions'); "myRgn:=NewRgn; "OpenRgn; $ShowPen; $SetRect(tempRect,260,270,460,350); $FrameRoundRect(tempRect,24,16); $MoveTo(275,335); { define triangular hole } $LineTo(325,285); $LineTo(375,335); $LineTo(275,335); $SetRect(tempRect,365,277,445,325); { oval hole } $FrameOval(tempRect); $HidePen; "CloseRgn(myRgn); { end of definition } "SetClip(myRgn); "FOR i:=0 TO 6 DO { draw stuff inside the clip region } $BEGIN &MoveTo(260,280+12*i); &Drawstring('Arbitrary Clipping Regions'); $END; "ClipRect(thePort^.portRect); "DisposeRgn(myRgn); "{ --------- draw oval samples --------- } "MoveTo(580,262); Drawstring('Ovals'); "SetRect(tempRect,510,264,570,294); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseOval(tempRect); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "PaintOval(tempRect); "OffsetRect(tempRect,25,15); "PenNormal; "FillOval(tempRect,gray); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "FillOval(tempRect,myPattern); "FrameOval(tempRect); END; { DrawStuff } BEGIN { main program } (* Must not do this in the QuickPort "{----- Initialization - Generic to all applications using QuickDraw -----} "QDInit(@heapBuf, @heapBuf[10000], @HeapFull); { Must do this once at beginning } "OpenPort(@myPort); *) "PaintRect(thePort^.portRect); { Paint grey background } "InitIcons; "DrawStuff; "Beep (2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for 6500 milliseconds } $(* Program has to use Beep in the QuickPort instead of Tone. Same parameters. $Tone(2000, 500); { Beep tone of (1/2000)*10^6 == 500 cycles/sec for <500 milliseconds } $*) "ReadLn; { Wait until RETURN entered before terminating program } END. 3. "6F^5D!$ǐ^" " UNIT UBaudRate; interface uses ${$U QP/Hardware} Hardware; {program has to use this in QuickPort to access Hardware unit} "procedure main; "procedure main1; implementation var "T1, E: milliseconds; "f: text; "n, count: longint; "s: string[255]; "len, test, baud: integer; procedure StartTimer; "begin $T1 := timer; "end; function MarkTime: longint; "var t2: milliseconds; "begin $T2 := timer; E := T2-T1; $MarkTime := E; "end; procedure ReportTime (var f: text); "begin $writeln; $writeln (f, 'Elapsed time: ', (e div 1000):1,' and ', (e mod 1000):1,'/1000 ', 0' seconds.'); "end; procedure main; var count : longint; begin "test := 0; "repeat $test := test + 1; $if test = 1 then &s := 'A' $else if test = 2 then &s := 'ab' $else if test = 3 then &s := 'abcdefghijklmnopqrstuvwzyz0123456789' $else &s := concat (s, s); $repeat &len := length (s); &write (('Number of ', len:1, *' character lines? (0 for next test, -1 to exit '); &readln (n); &if n > 0 then (begin *StartTimer; *for count := 1 to n do ,writeln (s); *e := MarkTime; *ReportTime(Output); *count := ord4(len)*n; *baud := (count*1000) div e; *writeln (' ', count:5, ' characters at ', baud:4, ' chars/sec.'); (end; $until (n = -1) or (n = 0); "until (n = -1) or (length(s) >= 128); end; procedure main1; var count : longint; begin "test := 0; "repeat $test := test + 1; $if test = 1 then &s := 'A' $else if test = 2 then &s := 'ab' $else if test = 3 then &s := 'abcdefghijklmnopqrstuvwzyz0123456789' $else &s := concat (s, s); $repeat &len := length (s); &write (('Number of single character write (0 for next test, -1 to exit '); &readln (n); &if n > 0 then (begin *StartTimer; *for count := 1 to n do ,write ('A'); *e := MarkTime; *ReportTime(Output); *count := n; *baud := (count*1000) div e; *writeln; *writeln (' ', count:5, ' characters at ', baud:4, ' chars/sec.'); (end; $until (n = -1) or (n = 0); "until (n = -1) or (length(s) >= 128); end; end. 3. "6F^9D!$ǐ^.Kkd̦̦̥>L.ĨLĨH̥LHH4.̦œL0HHdF̥¬L.L0R̦̦d̥L.FLFRxH̦̦d̥̦>̦0̫̫V0̬̬88pļ̬̬&88,FFFpr. 8."NUNIT UQPortUser; /{to be used by your main programs that want to use special terminal 0processing such as the one in UUerTerm unit, so that they don't 0have to use all these units.} INTERFACE USES $UObject, $QuickDraw, $UDraw, $UABC, $UTKUniversalText, $UText, $UDialog, $Blkiointr, $UStdterm, ${$U QP/UUSERTERM} UUSERTERM; IMPLEMENTATION END. 3. "6F^9. D!$ǐ^MM*LR**************} got the document prefix} ̯*jD̥LUU4p̯@œL0̦̦4̥¬L.LHU̦Uz̦4̥̦̦UNIT UQPSupport; INTERFACE USES ${$U tklib} UObject, ${$U sys1lib} QuickDraw, ${$U tklib} UDraw, ${$U tklib} UABC, ${$U tklib} UTKUniversalText, ${$U tklib} UText, ${$U tklib} UDialog, ${$U iospaslib} Blkiointr, {paslib's unit, should not be before UObject, Xneeded to compile UStdTerm} ${$U qplib} UStdTerm, ${$U syscall} syscall; %PROCEDURE putupalert (phrasenum : INTEGER); %FUNCTION getdocprefix (VAR prefix : pathname) : BOOLEAN; {return true if got the document prefix} /{You should use this prefix and append your file names to it when you want to create OS files 0in your program, so that the Desktop manager can copy all these files when user copys the 0document icon.} IMPLEMENTATION {$S someseg} {*********************************************************************************} PROCEDURE putupalert (phrasenum : INTEGER); BEGIN $process.stop (phrasenum); END; {putupalert} FUNCTION getdocprefix (VAR prefix : pathname) : BOOLEAN; BEGIN $IF currentDocument = NIL THEN getdocprefix := FALSE $ELSE &BEGIN (prefix := currentDocument.files.volumePrefix; (getdocprefix := TRUE; &END; END; {getdocprefix} END. {OF UNIT} 3. "6F^9 D!$ǐ^QQeKtZpœ̏̏̏p̫̏KK4p̬œL0̦̦4̥¬L.LHK̦Ke@̦4̥p̦̦ide LSW of dȉz̬̏sor (MOVE.W D0ÂFF̫̫hB̬̬88p̬̬d re88,FFFpr00,Dprogram QPUserTab; 4{QuickPort sample program with output copyable to LisaCalc} uses ${$U QP/UQuickPort} UQuickPort, $QuickDraw, ${$U QP/UQPortCall} UQportCall, ${$U QP/UQPortUser} UQPortUser; {You have to use this unit to get customized Jprocessing of Tab keys.} var i, j : integer; begin $Writeln ('We are going to write a table of numbers so you can copy them to'); $Writeln ('LisaCalc or LisaList.'); $SetTab (15); {set tab positions so we can use tab key} $SetTab (30); $SetTab (45); $FOR i := 1 TO 10 DO &BEGIN (FOR j := 1 TO 3 DO *BEGIN ,Write (CHR (9)); {tab} /{Note that the screen will have a tab character instead of space} ,Write (i*10+j); *END; (Writeln; &END; $Writeln ('Now you can do the copy and paste.'); end. 3. "6F^9. D!$ǐ^55W5WsL its class init routine like this.} to 004œL0̦̦4̥¬L.LH0̦01̦4̥̦̦UNIT UUSERTERM; INTERFACE USES ${$U tklib} UObject, ${$U sys1lib} QuickDraw, ${$U tklib} UDraw, ${$U tklib} UABC, ${$U tklib} UTKUniversalText, ${$U tklib} UText, ${$U tklib} UDialog, ${$U iospaslib} Blkiointr, {paslib's unit, should not be before UObject, Xneeded to compile UStdTerm} ${$U qplib} UStdTerm; TYPE #TUSERTERM = SUBCLASS OF TStdTerm 'FUNCTION {TUSERTERM.}CREATE (object : TObject; heap : Theap) : TUSERTERM; {must not be changed} H{All subclass create must have these two parameters.} &{PROCEDURE TUSERTERM. CtrKeyWrite (ctrch : CHAR);} 'END; IMPLEMENTATION {$IFC fRngQP} {$R+} {$ELSEC} {$R-} {$ENDC} {$IFC fSymQP} {$D+} {$ELSEC} {$D-} {$ENDC} {$S someseg} {*********************************************************************************} METHODS OF TUSERTERM; FUNCTION {TUSERTERM.}CREATE {(object : TObject; heap : Theap) : TUSERTERM}; R{This function must not be changed.} BEGIN #IF object = NIL THEN 'object := NewObject (heap, THISCLASS); #SELF := TUSERTERM (TStdTerm.CREATE (object, heap)); END; {Create} PROCEDURE {TUSERTERM.}CtrKeyWrite {(ctrch : CHAR)}; VAR str : Tstr255; BEGIN $IF ctrch = CHR (9) THEN {tab} &BEGIN (str[1] := ctrch; (str[0] := CHR (1); (VStrWrite (str); {this will save the tab key as is.} (TStdTerm.CtrKeyWrite (ctrch); {to move cursor to the next tab position} &END $ELSE SELF.CtrKeyWrite (ctrch); {You can add any other control key processing here} END; {CtrKeyWrite} BEGIN {TUSERTERM init routine} $Consterm := TUSERTERM.CREATE (NIL, mainHeap); {Terminal subclass has to assign its own CREATE to YConsterm in its class init routine like this.} END; {METHODS OF TUSERTERM} END. {OF UNIT} 3. "6F^9D!$ǐ^~o&6.ZCp:œpz̋̋p:̲̋h̲LD4|LdLdœL0¨FFFœošo̲hFPFPjpP̋FFxp:̲̋FFFpP̲̋..2 /ÂFF̲h̲zhB̲̲88p:̲̲̋88,FFFo001EXEC *{This note contains some descriptions about the Quickport sample +programs included here, and their exec files.} *{This is a text output only example.} SUBMIT QP/make(QP/mainbaud,100,slot2chan2,QP/ubaudrate) *{This is a text output only example with input panel shown.} SUBMIT QP/make(QP/mbaud.config,102,slot2chan2,QP/ubaudrate) *{This is a text output program that uses the VT100 terminal emulator.} SUBMIT QP/make(QP/mbaud.vt100,106,slot2chan2,QP/ubaudrate) *{This is an example of defining your special tab key processing instead +of using the standard terminal, so that you can generate a table to +copy to LisaCalc or LisaList directly.} SUBMIT QP/make(QP/usertab,120,slot2chan2,QP/uuserterm,QP/UQPortUser) *{This is a QuickDraw sample program modified to run in the QuickPort.} SUBMIT QP/make(QP/qdsample,75,slot2chan2) *{This is a QuickDraw sample program modified to save graphic output +in a picture before drawing to the screen.} SUBMIT QP/make(QP/qdsample.pic,770,slot2chan2) *{This is a QuickDraw sample program with example of saving and restoring +display.} SUBMIT QP/make(QP/qdsample.savepic,7700,slot2chan2) *{This is a sample program with both text output and graphic output (text +panel and graphic panel). It also shows an example of putting up special +alerts (stop alerts only) for error messages (you need the special +phrase file as shown for this) and getting the document prefix as +shown in QP/uqpsupport.} SUBMIT QP/make(QP/qdsample.config,77,slot2chan2,QP/uqpsupport) $RAlert{to generate customized phrase file} $QP/phuser{Your special phrase file, you must follow this example phrase file here.} $ $ $FBQP/phuserPhrase,~{T77~}Phrase{use same tool number as the one you use in QP/make} $Q *{This is the boxes (3D graphic) program modified to run in the QuickPort. +Note the use of linklist.} SUBMIT QP/make(QP/boxes,79,slot2chan2,<,qp/boxes.llist) *{This is an example program using mouse input.} SUBMIT QP/make(QP/mouseinput,150,slot2chan2) *{This is another example program using mouse input and emulating KeybdEvent.} SUBMIT QP/make(QP/mouseinput2,250,slot2chan2) ENDEXEC O^E69e PH r^}c::o&"New (toptr); { gGG4re, you only neeœL0̠̠4̟n¬L.LHG̠G^̠4̟nnt̠̟ {picSave is handle to picture handle} "fromptr := pointer (ord (picstuff^)); "psize := picstuff^^.picSize; "for index := 0 to psize - 1 do $toptr^[index] := fromptr^[index]; "toptr^[psize] :=PROGRAM QDSample; { QuickDraw sample program modified to illustrate the use of QuickDraw in the QuickPort. } { Call QPConfig to show both text and graphic panel in vertical arrangement.} USES $QuickDraw, {needed to compile UQPortCall, also needed by this program} ${$U QP/UQPortCall} UQPortCall, {needed to call QPConfig} ${$U QP/UQPortGraph} UQPortGraph, {program has to use this if has graphic output} ${$U QP/Hardware} Hardware; {program has to use this in QuickPort to access Hardware unit} TYPE IconData = ARRAY[0..95] OF INTEGER; VAR heapBuf: ARRAY[0..10000] OF INTEGER;{must keep array under 32K byte limit} $myPort: GrafPort; $icons: ARRAY[0..5] OF IconData; $config : TQPConfigRec; $myPicture : PicHandle; $myPicPtr : PicPtr; (* We do not need this in the QuickPort FUNCTION HeapFull(hz: QDPtr; bytesNeeded: INTEGER): INTEGER; { This function will be called if the heapZone runs out of space } BEGIN "WRITELN('The heap is full. The program must now terminate! '); "Halt; END; *) PROCEDURE InitIcons; { Manually stuff some icons. Normally we would read them from a file } BEGIN "{ Lisa } "StuffHex(@icons[0, 0],'000000000000000000000000000000000000001FFFFFFFFC'); "StuffHex(@icons[0,12],'00600000000601800000000B0600000000130FFFFFFFFFA3'); "StuffHex(@icons[0,24],'18000000004311FFFFF00023120000080F231200000BF923'); "StuffHex(@icons[0,36],'120000080F23120000080023120000080023120000080F23'); "StuffHex(@icons[0,48],'1200000BF923120000080F2312000008002311FFFFF00023'); "StuffHex(@icons[0,60],'08000000004307FFFFFFFFA30100000000260FFFFFFFFE2C'); "StuffHex(@icons[0,72],'18000000013832AAAAA8A9F0655555515380C2AAAA82A580'); "StuffHex(@icons[0,84],'800000000980FFFFFFFFF300800000001600FFFFFFFFFC00'); "{ Printer } "StuffHex(@icons[1, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[1,12],'00000000000000007FFFFF00000080000280000111514440'); "StuffHex(@icons[1,24],'0002000008400004454510400004000017C00004A5151000'); "StuffHex(@icons[1,36],'0004000010000004A54510000004000017FE00F4A5151003'); "StuffHex(@icons[1,48],'0184000013870327FFFFF10F06400000021B0CFFFFFFFC37'); "StuffHex(@icons[1,60],'18000000006B3000000000D77FFFFFFFFFABC00000000356'); "StuffHex(@icons[1,72],'8000000001AC87F000000158841000CCC1B087F000CCC160'); "StuffHex(@icons[1,84],'8000000001C0C000000003807FFFFFFFFF0007800001E000'); "{ Trash Can } "StuffHex(@icons[2, 0],'000001FC000000000E0600000000300300000000C0918000'); "StuffHex(@icons[2,12],'00013849800000026C4980000004C0930000000861260000'); "StuffHex(@icons[2,24],'0010064FE0000031199830000020E6301800002418E00800'); "StuffHex(@icons[2,36],'0033E3801C0000180E002C00000FF801CC0000047FFE0C00'); "StuffHex(@icons[2,48],'000500004C000005259A4C000005250A4C00000525FA4C00'); "StuffHex(@icons[2,60],'000524024C00000524924C00600524924C0090E524924C7C'); "StuffHex(@icons[2,72],'932524924C82A44524924D01C88524924CF10C4524924C09'); "StuffHex(@icons[2,84],'0784249258E70003049233100000E000E40800001FFFC3F0'); "{ tray } "StuffHex(@icons[3, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[3,12],'0000000000000000000000000000000000000007FFFFFFF0'); "StuffHex(@icons[3,24],'000E00000018001A00000038003600000078006A000000D8'); "StuffHex(@icons[3,36],'00D7FFFFFFB801AC000003580358000006B807FC000FFD58'); "StuffHex(@icons[3,48],'040600180AB80403FFF00D58040000000AB8040000000D58'); "StuffHex(@icons[3,60],'040000000AB807FFFFFFFD5806AC00000AB8055800000D58'); "StuffHex(@icons[3,72],'06B000000AB807FC000FFD70040600180AE00403FFF00DC0'); "StuffHex(@icons[3,84],'040000000B80040000000F00040000000E0007FFFFFFFC00'); "{ File Cabinet } "StuffHex(@icons[4, 0],'0007FFFFFC00000800000C00001000001C00002000003400'); "StuffHex(@icons[4,12],'004000006C0000FFFFFFD40000800000AC0000BFFFFED400'); "StuffHex(@icons[4,24],'00A00002AC0000A07F02D40000A04102AC0000A07F02D400'); "StuffHex(@icons[4,36],'00A00002AC0000A08082D40000A0FF82AC0000A00002D400'); "StuffHex(@icons[4,48],'00A00002AC0000BFFFFED40000800000AC0000BFFFFED400'); "StuffHex(@icons[4,60],'00A00002AC0000A07F02D40000A04102AC0000A07F02D400'); "StuffHex(@icons[4,72],'00A00002AC0000A08082D40000A0FF82AC0000A00002D800'); "StuffHex(@icons[4,84],'00A00002B00000BFFFFEE00000800000C00000FFFFFF8000'); "{ drawer } "StuffHex(@icons[5, 0],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,12],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,24],'000000000000000000000000000000000000000000000000'); "StuffHex(@icons[5,36],'00000000000000000000000000000000000000001FFFFFF0'); "StuffHex(@icons[5,48],'0000380000300000680000700000D80000D0003FFFFFF1B0'); "StuffHex(@icons[5,60],'0020000013500020000016B000201FE01D50002010201AB0'); "StuffHex(@icons[5,72],'00201FE01560002000001AC0002000001580002020101B00'); "StuffHex(@icons[5,84],'00203FF01600002000001C00002000001800003FFFFFF000'); END; PROCEDURE DrawIcon(whichIcon,h,v: INTEGER); VAR srcBits: BitMap; $srcRect,dstRect: Rect; BEGIN "srcBits.baseAddr:=@icons[whichIcon]; "srcBits.rowBytes:=6; "SetRect(srcBits.bounds,0,0,48,32); "srcRect:=srcBits.bounds; "dstRect:=srcRect; "OffsetRect(dstRect,h,v); "CopyBits(srcBits,thePort^.portBits,srcRect,dstRect,srcOr,Nil); END; PROCEDURE DrawStuff; VAR i: INTEGER; $tempRect: Rect; $myPoly: PolyHandle; $myRgn: RgnHandle; $myPattern: Pattern; BEGIN "StuffHex(@myPattern,'8040200002040800'); "tempRect := thePort^.portRect; "ClipRect(tempRect); "EraseRoundRect(tempRect,30,20); "FrameRoundRect(tempRect,30,20); "{ draw two horizontal lines across the top } "MoveTo(0,18); "LineTo(719,18); "MoveTo(0,20); "LineTo(719,20); "{ draw divider lines } "MoveTo(0,134); "LineTo(719,134); "MoveTo(0,248); "LineTo(719,248); "MoveTo(240,21); "LineTo(240,363); "MoveTo(480,21); "LineTo(480,363); "{ draw title } "TextFont(14); {used to be 0 - systext, user should never use 0 thru 3. A14 is p10cent. Ufont will have all the legal font constant later.} "MoveTo(210,14); "DrawString('Look what you can draw with QuickDraw'); "{--------- draw text samples --------- } "MoveTo(80,34); Drawstring('Text'); "TextFace([bold]); "MoveTo(70,55); Drawstring('Bold'); "TextFace([italic]); "MoveTo(70,70); Drawstring('Italic'); "TextFace([underline]); "MoveTo(70,85); Drawstring('Underline'); "TextFace([outline]); "MoveTo(70,100); Drawstring('Outline'); "TextFace([shadow]); "MoveTo(70,115); Drawstring('Shadow'); "TextFace([]); { restore to normal } "{ --------- draw line samples --------- } "MoveTo(330,34); Drawstring('Lines'); "MoveTo(280,25); Line(160,40); "PenSize(3,2); "MoveTo(280,35); Line(160,40); "PenSize(6,4); "MoveTo(280,46); Line(160,40); "PenSize(12,8); "PenPat(gray); "MoveTo(280,61); Line(160,40); "PenSize(15,10); "PenPat(myPattern); "MoveTo(280,80); Line(160,40); "PenNormal; "{ --------- draw rectangle samples --------- } "MoveTo(560,34); Drawstring('Rectangles'); "SetRect(tempRect,510,40,570,70); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseRect(tempRect); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "PaintRect(tempRect); "OffsetRect(tempRect,25,15); "PenNormal; "FillRect(tempRect,gray); "FrameRect(tempRect); "OffsetRect(tempRect,25,15); "FillRect(tempRect,myPattern); "FrameRect(tempRect); "{ --------- draw roundRect samples --------- } "MoveTo(70,148); Drawstring('RoundRects'); "SetRect(tempRect,30,150,90,180); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseRoundRect(tempRect,30,20); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PaintRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "PenNormal; "FillRoundRect(tempRect,30,20,gray); "FrameRoundRect(tempRect,30,20); "OffsetRect(tempRect,25,15); "FillRoundRect(tempRect,30,20,myPattern); "FrameRoundRect(tempRect,30,20); "{ --------- draw bit image samples --------- } "MoveTo(320,148); Drawstring('Bit Images'); "DrawIcon(0,266,156); "DrawIcon(1,336,156); "DrawIcon(2,406,156); "DrawIcon(3,266,196); "DrawIcon(4,336,196); "DrawIcon(5,406,196); "{ --------- draw Wedge samples --------- } "MoveTo(570,148); Drawstring('Wedges'); "SetRect(tempRect,520,153,655,243); "FillArc(tempRect,135,65,dkGray); "FillArc(tempRect,200,130,myPattern); "FillArc(tempRect,330,75,gray); "FrameArc(tempRect,135,270); "OffsetRect(tempRect,20,0); "PaintArc(tempRect,45,90); "{ --------- draw polygon samples --------- } "MoveTo(80,262); Drawstring('Polygons'); "myPoly:=OpenPoly; $MoveTo(30,290); $LineTo(30,280); $LineTo(50,265); $LineTo(90,265); $LineTo(80,280); $LineTo(95,290); $LineTo(30,290); "ClosePoly; { end of definition } "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "PenSize(3,2); "ErasePoly(myPoly); "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "PaintPoly(myPoly); "OffsetPoly(myPoly,25,15); "PenNormal; "FillPoly(myPoly,gray); "FramePoly(myPoly); "OffsetPoly(myPoly,25,15); "FillPoly(myPoly,myPattern); "FramePoly(myPoly); "KillPoly(myPoly); "{ --------- demonstrate region clipping --------- } "MoveTo(320,262); Drawstring('Regions'); "myRgn:=NewRgn; "OpenRgn; $ShowPen; $SetRect(tempRect,260,270,460,350); $FrameRoundRect(tempRect,24,16); $MoveTo(275,335); { define triangular hole } $LineTo(325,285); $LineTo(375,335); $LineTo(275,335); $SetRect(tempRect,365,277,445,325); { oval hole } $FrameOval(tempRect); $HidePen; "CloseRgn(myRgn); { end of definition } "SetClip(myRgn); "FOR i:=0 TO 6 DO { draw stuff inside the clip region } $BEGIN &MoveTo(260,280+12*i); &Drawstring('Arbitrary Clipping Regions'); $END; "ClipRect(thePort^.portRect); "DisposeRgn(myRgn); "{ --------- draw oval samples --------- } "MoveTo(580,262); Drawstring('Ovals'); "SetRect(tempRect,510,264,570,294); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "PenSize(3,2); "EraseOval(tempRect); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "PaintOval(tempRect); "OffsetRect(tempRect,25,15); "PenNormal; "FillOval(tempRect,gray); "FrameOval(tempRect); "OffsetRect(tempRect,25,15); "FillOval(tempRect,myPattern); "FrameOval(tempRect); END; { DrawStuff } Procedure SavePicture (var savedPicptr : PicPtr); {save Quickport's picture in our data} @{Note that you don't need to do OpenPort, nor OpenPicture here.} type "bytearray = packed array [0..maxint] of 0..255; "arrayptr = ^bytearray; "hdl = ^ptr; "ptr = ^longint; var "ahandle : hdl; "fromptr, toptr : arrayptr; "index, psize : integer; "picstuff : PicHandle; begin "if thePort^.PicSave = nil then $begin &writeln ('no picture saved in the QuickPort'); &{You need to draw something to get the QuickPort picture open, and then erase what you just draw to &restore the original display.} $end; "New (toptr); {get space for saved picture, you only need to do Ythis the first time.} "ahandle := pointer (ord (thePort^.picSave)); "picstuff := pointer (ord (ahandle^^)); {picSave is handle to picture handle} "fromptr := pointer (ord (picstuff^)); "psize := picstuff^^.picSize; "for index := 0 to psize - 1 do $toptr^[index] := fromptr^[index]; "toptr^[psize] := $ff; {to signal the end of picture} "savedPicptr := pointer (ord (toptr)); end; procedure DrawSomethingElse; begin "PenSize(3,2); "MoveTo (5,5); LineTo (700,360); "MoveTo (700,5); LineTo (5,360); end; BEGIN { main program QDSample} (* Must not do this in the QuickPort "{----- Initialization - Generic to all applications using QuickDraw -----} $$$$$$$$$$ $ $ $ $ $$$$$$$$$$$$$?O?9999 )*(+)*-.,/-./>/?=/@>/?NOMPNQOPSTRUSVTWUXVYWZX[Y \Z ][ ^\ _] `^a_b`cadbecfdgehfigjhkiljmknlompnqorp sq!tr"us#vt$wu%xv&yw'zx(y|}{~|}~      !"#$%&'()*+,-./                                                                                        O       !" #!$"%#&$'% (& )' *( +) ,*-+.,/-0.1/20314253478697:8;9<:=;><?= @> A? B@ CA DBECFDGEHFIGJHILMKNLOMPNQOPSTRUSVTWUXVYWZX[Y Z]^\_]`^a_b`cadbec fd ge hf ig jhilmknlompnqorpsqtr us vt wu vyzxy|}{|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu                !"# !" #!$"%#&$'% (& )' *( +) ,*-+.,/-0.1/203125647569:8;9<:=;><?=@>A? B@ CA B E FD GE F!I!JH!KI!LJ!MK!L"O"PN"QO"P#S#TR#US#VT#WU#XV#YW#ZX#[Y# \Z# ][# ^\# _]# ^$a$b`$ca$db$ec$fd$ge$hf$ig$ jh$ ki$ lj$ mk$ nl$om$n%q%rp%sq%tr%us%vt%wu%v&y&zx&{y&|z&}{&~|&}&~&& & & & & &&&&&&&&&&&&&&'''''''''' ' ' ' ' ''''''''''''(((((((((( ( ( ( ( (((((((((((())))))****++++++,,,,------........////////// / / / / ////////////