ė4IBM 3.3p ł ś3ĄŽŠ¼|»x6Å7VSæ+|¹ ü¬&€=t&ŠŖŠÄāń‰GĒ+|ūĶrg |˜÷&|||£?|£7|ø ÷&|‹ |ĆH÷ó7|»”?|čŸøč³r‹ū¹ ¾Ō}ó¦u  ¾ß}¹ ó¦t¾w}čj2äĶ^DĶ¾ŗ}ėė”3Ņ÷6 |žĄ¢<|”7|£=|»”7|čI”|*;|@8<|s <|PčNXrĘ(<|t 7|÷& |ŲėŠŠ.|Šż}‹=|źp¬ Ąt"“»Ķėņ3Ņ÷6|žĀˆ;|3Ņ÷6|ˆ*|£9|Ć“‹9|±Ņę 6;|‹Ź†éŠż}Š6*|ĶĆ Diskfejl eller manglende DOS Anvend DOS disk og tryk p† ENTER Fejl ved start af DOS IBMBIO COMIBMDOS COMUŖł’’@`€   Ą ą @`€ Ąą! #@%`'€) +Ą-ą/1 3@5`7€9 ;Ą=ą?A C@E`G€I KĄMąOQ S@’’’W€Y ’Ļ]ą_’/c@e`gš’i ’Ļmąoq s@uš’w€’Æ{š’}ą’’’’’’ƒ@’o‡€’Æ‹Ąą ‘ “@ •` ’ ™  ›Ą ’ļ Ÿ ”š’’’’’o §€ ©š’’Ļ ­ą Æ ’/ ³š’µ` ·€ ¹  »š’’ļ æ Į Ć@ Å` Ē€ É  ĖĄ Ķą Ļ Ń ’’’Õ` ך’’’’ŪĄ Żą ß’/’Oå`ē€é ėĄķąļń ó@õ`÷š’ł ’Ļżą’š’’/Aań’’Æ ń’ ń’!Aa”Įį’/#A’o')”+Į-į/1!3A5a79”;Į’ļ?A!CAEaGI”KĮMįOQ!SAUaWYń’[Į’ļ_a!’’’eagi”’Ļmįoq!sAuawy”{Į}į!ƒA…a‡‰”‹Įį‘!“A•a—ń’™”’Ļ’ł’’@`€   Ą ą @`€ Ąą! #@%`'€) +Ą-ą/1 3@5`7€9 ;Ą=ą?A C@E`G€I KĄMąOQ S@’’’W€Y ’Ļ]ą_’/c@e`gš’i ’Ļmąoq s@uš’w€’Æ{š’}ą’’’’’’ƒ@’o‡€’Æ‹Ąą ‘ “@ •` ’ ™  ›Ą ’ļ Ÿ ”š’’’’’o §€ ©š’’Ļ ­ą Æ ’/ ³š’µ` ·€ ¹  »š’’ļ æ Į Ć@ Å` Ē€ É  ĖĄ Ķą Ļ Ń ’’’Õ` ך’’’’ŪĄ Żą ß’/’Oå`ē€é ėĄķąļń ó@õ`÷š’ł ’Ļżą’š’’/Aań’’Æ ń’ ń’!Aa”Įį’/#A’o')”+Į-į/1!3A5a79”;Į’ļ?A!CAEaGI”KĮMįOQ!SAUaWYń’[Į’ļ_a!’’’eagi”’Ļmįoq!sAuawy”{Į}į!ƒA…a‡‰”‹Įį‘!“A•a—ń’™”’Ļ’HSPC TTP T)ĪIGEMDEMO {l9UHHA œl9¼MYCALC ¤l9ŲUNITS ­l9`š$ŖR0`BQHighSpeed Pascalfor ATARI-ST Copyright(C)1991D-House Denmark&oAė€#ČIHpB0#ČIL$kÕė Š¼'#ŹHÄ#ĄHĄa?pLa€p`ōpŁ`š ¹IšHĄoša Z#ĄJ^a¢ yIH¼ aĢaLaöAłHČJf Ałš‰a¶`²a #ĄJZ#ĄJV 9HĄ yHÄrdaQĖ’ō` Ał”a’.QĢ’ōa’ Nua’dAłœa’AłGĄa’ a’AłGø6k¼A:ŃBgHopGa¼\O OB(?axaŠŽü INupaŖ?/a¢p=a’`a˜Bg/pAa„aŒpažąTOJ€NuB§a’0kBg?9JČHopWažĄPOaÄ H@NuB§Bg?9JČHopWaž¢PO H@NuH@/?<?9JČHopWaž‚Žü NuHēœ(H*Hazaö&HU@m  :g U‹pažVŠ<Aa²Ąü: \g<@H€?/ pGaž2\Of Jfü|\’’Ūfü(Mg°<\gatĄ`ī ,.’’f, ,\’žfUŒ` ,.’žf ,\’żfWŒ ,:’’g $\fśJfÄ ,:’’fü\BLß9a„NuNVžņ-Hžś=@’ž=|’ßžōB®žöPīžņ nžśCīžžaø I0.’ž.žņQīžņa6gažØ`až¢gÖ-@žögBnžōAīžža"nžśa€ I$.žö0.žōN^NuNV’€/4a"p:aźgnp\aāgfJgåBAłŌ#š JŹ yJŹCī’€JgDŠg ;föB!#ČJŹCī’€Jg Ip\aœJg AłäaB Wa<ĮIB(?a0p`p’ _?aŠažF0N^Nur`r/4aŠp\aRp.aLfJgB AłępĄĀŃĄ"Waę WaF Wa„aaL:2aF2a,02a&Lš0Lš0pHš00Hšp2LßųažČp`Œ40 1‚ 1€ 1 1 Nu40 00 1‚ 1€ NuHēąą#ČKNCšp’!I ‰1@!@!@1@!|p1@ WAŠ|B°ņB°öBpśBpž1€üQÉ’ęBp Cš!IażBLßNuHēą` yKNażŽgR€Ą|’žaž>Ašg‘ČLßNuHēąą" yKN’ˆeJ0naüų`ażģLßNu±łKNc (NuHēąąR€Ą|’ž" yKN’ˆe$J0naü¾`ażjg°°baž`ažJgBÆ LßNuHēĄ@ ‘Č"yKNr21 J1k °±fšAńLßNuHē@€ yKNpr20 J0nökŠ°`īLßNuHēą@  yKNØ D€`Hēą@ yKN/aLßfaü a BLßNu2(J0f"pT‰$( ”€“‰e“b ‘°!B NutNuHēąĄ$³ČgDbHr °c0" µĀ<f&rĀ‚gS€Ų?äˆ`"ŲQČ’ü¼dņpĄ_`ŲQČ’ü¼dņLßNuŃĄÓĄr °c2" $µĀ<f&rĀBgS€ ?äˆ`# QČ’ü¼dņpĄ_` QČ’ü¼dņ`°HēąĄr$gS€k ĮtÄ@äˆ` ĮQČ’ü¼dņ`ĮQŹ’üLßNuĄKU,S6,T8B9KXøCf¼6ÖCÖ{0Nū0>nąŽ Ś&Ö`$°°<g,S,. ,T¼® `t°<frx `n°<fhx`d"TJ©f/ S ( pH@ŠĄpač _a¤g>,I"Sašg4½É`,"T ),qH@ÜĄ"S )"qH@ŅĄ 9`0°Žg °‰g½Éf$$`Bø| gø| f¶| g¶| fāx `&ø|g ø| gø|fĢ¶|g ¶| g¶|fŗx09KT2åI"0ģg#ŅŲDŲ{@üNū@ų Ä(Ŗ,²+d+$<Üg²<drĮKV"<šgü ,fT +fL"T Q d°<mX@åH$,“«NūŅWĮ`VĮ`^Į` ]Į`\Į`_Į(¹_ōB,Ā¼)A`a, +f +d ,f ,d ,fPłKXĒL +f La  ,.tJ«g$tx<*+`, La H Ka zt(*,9KVa ä09KT T P AłüdAłžaØ`d ,fr +fj“<fJ«g"€ ,"+“<faeČ`:“<faeÜ`.“<faf`"H‚åJNū īĄ`ćØ`āØ`Š` `€`³€)@a\`ź ,fDJ¬f>"<gPPłKXĒL 9 KUf¾9KV La Zt 9KV,a `ž +f*J«f$r$gPłKXĒL Ka`xrgp`!Ørgt°<f0 ,fPłKXĒL +f +abf'AüKU`> 9KVf4pr La Śpr Ka Š09KT;a <`  a09KT"< $g0 +f +d ,f ,d ,fPłKXĒLū®KWr°<g °<g, La 6yKV"<Ą09KTgB +f°< g4J«g` «c$,łM=+ Kaģ,¹M=+` Ka(*9KW9KV,a t 9KUf t,a `a L`HJ9KXgĒL K"LpJ+fpĮė Z€2ŲQČ’üNu L9KVa K9KV²(g (gaX`śANu (f aŹ@t (xa ę|aĢNuJ(f,PJ.oašra"a®Nu (f.a‚@0 S P f h fPłKXĒL LaVa¤p Sa¦09KTAłžaāaž¦Nu LaBa~p 9KUgp 9KUgp 9 KUgp S`\,P V f n fNu/,P V fF (g> n g/a& ¹`aĘpD _a`paęaøpaÜaą2Ų"Ų"Ų _Nu,P V f/aä/ ¹`a‚ _pDaŌ _Nu,T". UAgUAfZ La Ka`ś4 (fD,P nng1|Nu1|Nu/Ač .ap _!@1|’Pč1| Pč Nu La`a< KaXa4 9KUga@p aˆ09KTAłž`€ LaŠa p `h,P Vfh . °|d< (fV°|gt°|gzžü2€¼ `°QÉ’ųR@"A×aÄ A!@ ¹_ų1|’Pč1| Pč ŽüNu?aØ ¹_ųaH ¹_ųaŽ0<`taHēĄ ¹_ųaŹaüLß0t &)āC,.apNu,P V f (gJ hf <¼aŽ ¹`Nuraˆa*tvx<:<’(a(tvx<:<(a`Č1||1h`“J©g )"qH@ŅĄ )"qH@ŅĄNu Laj Kafa`9KUp²<gPp²< gHp²<g@p²< g²< g p²<gpat(¹_ō9| < 9 KUfH@)@Nu`L/,P VfD (głM?Nu (f /Ača$ _NuJ(f2( /Ač Jka \ˆSAfō _NupĄłM=åH/ CłKZ#ˆ"_Nu (f (¹M=NuJ(f2( /Ač k¹M=\ˆSAfš _NuüKY`B9KY(g,Sfp<"(NuSf (¹M=NuSfpNup.2(Nu/?( ((Ač °<er:Rgr9"(Jl2`Z"(JlJAg€<(`H€<`B°9KYf ²|n²|’€l€<(t(*a:r€<0tĹM=čZĀ|’‚BgĮ SWgt v(*a \ˆ`”T _Nu|Œ9KYaž9KYNuĄKYa’t„9KY°gt(*`ĪNu Ka L(SgrSgDSg@Ug0( S@oĮüJ0 lJ°gažĀt,.`6Sh až°t v(*|'` ažžHēĄażVažˆLß0t ,P&.;0E,.aų`†/,P\H . V f°|fTHa\ _!@Pč 1|’Pč1| `’N (f(`ażv (fA` (f°(f ¹M=`’,PJ.n(J®fZ ®nmN ®’ g `B ®’’ f8aüĢH€īX€|paĪaż“t ((*Fa|`Faü”ażŠt ((*Faō|²(cR(t((aŅ`āANu (f&At (g8²<f(aųf"H@0NuAśaVPfTˆŠŠN`īNu=\8]QRDŅ6ŲaTdaT°8ü=łL[BB\aTąaHŒgą`H°aT 9LZg^8ü\aH¦a"Lpa’RXŒ P e(łM@`& P fAłM@8Ų(Ų(Ų`Ał_ 0R@āH8ŲQČ’üaTzaHP 9LZg–Nu8üQaHB/ Ųü aTXQłK|a aH0"_BB)pažŚ#yLģ|xap’avaGü 9LZg’BNuHēĄĄ"H0Š@Š{("9LģHēPĄN»Lß "(ŠSga6LßNu.nŅtpź¤¢ ž`ąNup?aGjfņp`baGn ) q H@ŠĄ"( ’Ø ) qH@ŠĄa’vJAgaG0fQÉ’šaG>p’aĄNu&aG* 9LZgN )"qH@ŅĄ IHē@@aT LßfR XQfJ (Šƒa~aGDaG ( pH@ŠĄa’aFŗg¾aFŌp’aVNu/ $IpB§QČ’üaFĀaF”g,a\4p aF–faP°BeüalRB°Bdų`abaFngaF°`Ō * rH@ŠĄLčęIęH’@RAA÷`a QÉ’ųŽü $_NuaZ ( pH@ŠĄ"JaōŚ³Čf” 9M@NuręI÷Nu/ a("_ Pg P fjAł_ Qg0a¼2`a²QÉ’ųNua  ©mœgĢbĀNu/ a^"_0°QfAłM@ °©m°© nNu`/ a¬"_0°QfōAłM@ igmr0atQÉ’ųNuaa4a `\aaz`ö`Āt4ć‚TBSBešāJ”|?ž g"NuprtNuJ‚kÖŌ|žkBJ€g>Ņ¼d R€dāā‘RB“|’e4<’a ėJā‚v ęøę©&Ę¼’ą‚ƒH@Ą|€BH@NuprNuJ‚k„Ō|~kšJ€g(Š¼€dāRB“|’e4<’aŌįJāšHBBB€ąˆ€‚NuByKŠaPØ/ B\BœaPąaDĀQłK|a¬"_2ü]paūdaDœ 9LZgŹ`/ at?aDˆQłK|al/J9K~WłK{p(aDfœaB^RyM*Nu&HJ+ f J9L]n †p2aBg\SyM*aAņfpa&aAųfpa`aBpVaAģg˜pWaAāgŠ`Ōgč0Nu"9K„J9KzgrJk^Eś² 9K{g EśRJ9K{k EśXgEśj²¼gN’v~Ę)Cń0¹K~yKz?paõZ0NŖŅü S@fŅNu` (`X#yM.Ó¹M.Nu`V“yM2iąB©3yM2Nu`B©3yK€ÓyK€i¼NuRyK€y’žK€NuNq#BNuR¹M.y’žM0Nuy’žM2NuByKŠa/aŽ _ (°¼gR€Ą|’ž#ĄK„łL[K~B9KzNua.gpKa=žfų y_ų2 (°¼’lRJ9Kzf.R@Ą|’ž²|e²|eg²|g²| g°|nNuD@NupNu29KŠJAgd yL PŠĮ"9MP"A"Q4(ÄQCń 4fŅ¼ ²¹Mxfą`vŅĀEč4Gé·JVŹ’üfÖ []fŠ2"X  sH@ŠĄpaóŹ`˜Nu9K|aXgBpCa<ŹWłK|a`g2a8g,QłK|a¦g aźgaJga„gaŹgafLßK|g J(lAčNu0<]aHōf  pH@ŠĄ°@Nup*a<\fĘap°©f6°© g0 ©€ d’Xaj6¼ ) aR'@'i'i `FaH6¼paņø"H _p aņ® )a2f²<or’A ( ØR€")aIˆaž'@ KSDf“°@Nur’RāˆdśJ€NupFa;€fŠ9K{?9KŒ?9K€?9K‚?9KŠ3ü1KŒByK€ByK‚paFČaP yMP/aFęaœ6¼L¹K‚a€'@ _pańś3ßKŠ3ßK‚3ßK€3ßKŒßK{ K°@Nu09KŒa:čg”p,a:Žg aŠ09K€°yK‚e3ĄK‚a:¶gĢ``PłL_až:QłL_gaXa:®09KŒa:šgF?9K€aa:ˆgöa:²a:?9KŒ3üKŒa’~3ßKŒ3ßK€a:Tgø09KŒa:Nu/ aū^?a:r"yMP//?#ÉMPüK{aüB"yMP3###ÉMP0"_`ū>pHa:f@a: aĀ( p6g pDfä“0fŽTˆ`Ał6V#ČMTWBgŽ`®?Hz`xaųaöaōaņašaīaģaźačaęaäaāaąaŽaÜaŚaŲaÖaŌaŅaŠaĪaĢaŹaČaĘaÄaĀaĄa¾a¼aŗaøa¶a“a²a°a®a¬aŖaØa¦a¤a¢a ažaœaša˜a–a”a’aaŽaŒaŠaˆa†a„a‚" ā€`ˆHz’Ž`īaųaöaōaņašaīaģaźačaęaäaāaąaŽaÜaŚaŲaÖaŌaŅaŠaĪaĢaŹaČaĘaÄaĀaĄa¾a¼aŗaøa¶a“a²a°a®a¬aŖHz’>`˜aųaöaōaņašaīaģaźačaęaäaāaąaŽaÜaŚaŲaÖaŌaŅaŠHēĄ€ o 2`0aQÉ’ś/H LßNuH@aH@/ yL¾J9LÅfa PŃłLĀ0€ _T¹LĀTyLnk’`U¹]ĢeˆNuH@aH@/ yL¾ PŃłLp1€ _TANu"²¹Lģg&a&ByK¦Jk’¹Lģmž²āda `pa09LŹyLŹ PB° _NuHē`€ yLĘy Mdd yMda P29Ljkü€1¹Ln49LŠ”p 1‚ 49LŹ1‚3ĀLjB° Bp Bp 1¹LŠ 0y LŹ#łLĀLpByLnLßNuHē € yLĘ P49Lj1° 1€ 1‚LßNuNuNuNuNuaŠĪ`ÅŅ(yMj/L’üg /N _(l`īNu&l(v630g/N _`ņNu?630gJs0k/N _630fī6NuHēąĄ"H yLŅa4r~ĀŠA\@3ĄLÖa PRhp Ą—g0‚XPpĄ—gRhŠĀĮIL×2Ą2ĮpŠaÕLßNuHēų€aF 8(Pˆt`4?X/Hv~ĘAš0Ä@gSAgQĢ’äAł<./HLßNuaaa6a*aHē`aTt4`0Hē`aVt(`&Hē`aXt.`Hē`adtR`Hē`aPtJ`Hē`aZt ¹łMXg Aō)ˆ ` t PpLßNu ,2,8HĮNuaņŠ2,,HĮNuaņŠ2,2HĮNuaņŠ",NNuaōŠ",VNuaōŠ",$NuaōŠNužü€AłKŚ"OaĪ>aĢŠJ9F.gpaĢRpPĮaĖ“`paĢBpaĖ:g OpaĢ2#ČMTaÉPk"aŖ LaɬkaÉŚg?aÉŅAłKŚaÉT0Žü€?AłKŚCłD¤aĶČ IaĪ~0NuB¹KšAłKŚ#ČMTJ9F.gaĢ6paĖĄpPĮaĖ"`paĖ°aČŌknp yD€ PafkH yDxa PaVk8 yD|aō PaFk( yD€aä PrŃĮa0k yDaĪJ€g PaaÉg?aÉ AłKŚaȌ0`’:Ń¹Kš`Č¼až²a¾Hē $P , L"JaŅ²ažVt4a.ažZt(a&až^t.aažbtJaaždtRaažft aLßNuB²(Cņ t( P aŅhNu/ #ČMTpaŹ¾paɲf(aĒĀf"aČ°|c Wa PaČf aČR"_Nupõ`  / IłMb(l g0,DBlDJ@gģaČ4`ęaČ"(_NuNV’ųHī’ųHē0xz~cJ€g n’ųpaÉ8f( n’ü#ČMTpaÉ$f**g& n’üaĒ,aĒr,aŃ^ g(H aĒ~.aĒ¾`~"$0Lß ųN^Nu(yG¼af?9ś3ü?ś#ü’’’’Gø3ücMnaČCłGĄB‘HĄgHaÄ/pa$aÅ> _RˆaÅ8AłØėaÅ.abaa4aÅ"09MnkJgAłM„aŊaÅ3ߝś3łMnG®Lß|ųNuB9J­B bƒVłJ­g #łMpGøNup29MnkŠANuAłFĀ0g°fųą@NupNuõߎŻÜŅĻB¹]ĄaŗAłHČaÄčaÅHa$AłHČaÄīaüJyMnf ¹š2fB9š209MnNułš2anAłHČaĞJ9]Šf "HAł]ŌaĆę IpaĀpaĄüf*aĄ6a¶AłHČaĀaŽ ykMngš3ülMn`3ünMnCłM„aƚ`’\B¹KŹB¹MjB9KRAłMh <TaÉÖCłUŚ#ÉVLpaųd#Č_paų#ČM€ <€aųH#ČM|Šü€#ČMxNuaöŅAłM€aų y_aų2NuHēŗ#ČKĀHyHX#ĻKĘByMnaøa$~pNa$faÜf&Nu9š2fīĪadfNuaģLß]ų09MnNu3ĄMnLłKĪ’€”€H¹Mp yVL&(TƒŅƒŌƒHłG°Ač&CłHČaĀ‚ @CłH@paČ8 9MTg @CłM„p@aČ"J¹KŹg apa `ī.yKĘNuAłKĪ <šaȖAłMÅ#ČKŅ#ČKÖ#ČKĪByDv#łMxMP3łš0LbPł]Ģžü€ yKĀ#ČMT"OaĮęłMÄg Opaæžpa¾ņf’ ‘Č"Oa-äa,ø yVL#ŠLŗ#čL¶Žü€paöz#ČL€"PAłØīpaĒPBgOļ’€"OAłE.aĮ¶ Ig°<;föB)’’Jgģ/ ap"_`äajOļ‚p3ĄLÖaö&#ČLŅaL#ČL¾aD#ČLča<#ČLša4#ČLĘa,#ČLĢa$#ČMa#ČL„a#ČLa #ČLŠaļHNup`õ°aĮ’?f( Nu09Mna,BAłLŅaZAłL¾aRAłLčaJAłLšaBAłLĘa:AłLĢa2AłM`a*AłMa"AłL„aAłL€aAłLa AłLŠaNu`õjPłL`pEa!ˆfap`a“y@Lba¢fgR‚Nu(>gR‚g0fabgHē` Kaü¬ LLßf%¶h:f QŹ’Ęp`pW`pYLßNuač–fōĄNuHēą`EłMb$j S€e "j4ŅŃaø„fź JLßNu/ CłL–"i³Čg S€dņ"_NuHēąĄ gćHAłMb h g,¹Čgć:/ h4ŠŠCłL#ÉMTaø*gāų#ČMT _`Ģ)yMj#ĢMjLßNuAłž,`JfüQČ’śNuBy`4&yM€ yMaėT29`4²@l PŠĮ"Kaźay@`4`Ö Kp`ė8$S Z`f“.pŠ‡#Ą`6Jšf¢/#Ņ`:ŽšaaJ Ń¹M.Nuaå¾#ł`6`>`¾p(Ą*g¬Ał_¢r2g°<ae< €R²<f䁼 a#&3ĄML3ĮMN*f@ yMP Pa$"fX0@ °|6g°|Df$a”aV"yLĘ"Q0( 3Ŗ aåŖ`&aFf @ <( `@ °|Qfņ,(a9ˆHŅApŃ¹`>ap‘¹`:j’8Nu$y`>ÕÓNu"9MP A Pa#˜gŅ¼ ²¹Mxfč`¢0°|6g°|DNuJ( g ( f~SyM,`SyM*| NuEųµł`6d*arHz’ņ[AgöUAg<^Af*ÕÓ ²x•ÓgaįNNu3Ą`B3łLn`Daį8Ą|?°|9fö`63Ą`B3łLn`DaįPĀ°|N¹g°|NłgQĀ°|Hyg 2Ā|ń’²|Ałf¦aī[Af“H@aāJAgąŲUAg2SAm¾ga|²<QfJf®`f" `ć*JfžŠ¹M.rd`ć"U€aéXfąPy`Daą”0B9``3łLbLdQłL\9š2g9LeVłL\3łM2M6Hē00+ ać(J9]²f?9LnaĀ?9Ln f J9`dfXA yLĘ P0+ 1LßJƒgHšJ9`dg1‚0gD0g0<&_ yM>g0aŽ‚0av yLĘ P0+ 1ŸLßJƒgHšJ9]²n0pOaBgaž^`źa!0JAgA`Ś®NuaŽ?9M2R9``a" T P eŁŠ ,€g ,fŁx( l fŁjJ, jŁb0< aa1@a ģ La¹va1l K"Ta a0da1"a1AśrJoAśta"fŲŚ#Č`Na °$La14a10 J"TaĪa0(, KaĮlaæ, JaĮ^ KaæNt,+*aĀü y`N0(aŁ†?9LnaŁ| Laæ`Hł`F,.t ,+aĀÄ|.p°,fp>9M2ž@¾yM6l3ĒM63ĒM2t ,*aĀŽ0< .aaŁ?9LnaÜĀ y`N4,x La¾ār`6p La¾Ō0<-Ha×ų09M2Y@°yM6l3ĄM63ĄM22HĮa×Ōp’"yMP³łM|g×H#B! T ( pH@ŠĄ##ÉMPa \g’F0< .a aŪDaū‚ßM<3ßM2#ßMPNuaŪ(aÜ, Laæ T ( pH@ŠĄ#Č`Rģ`cģ`ba #Ļ`V#Ļ`ZaJp a ęgpa ŽfN0?9LnaÖ42aū†JCg2aū|Jf&p0a Ög JfžŚ`ŌüaŁ¼/9`VałĪ#ß`Væł`Vg2aūD`šNuaÓ ( pH@ŠĄ±ł`RfŌüt9`cx<*9M@9`b`æaŁba$p=aäfŌÄ9L[²fÕ 0<`aՎCł`frĀŃRQ Y€gÕÓĮ"Č2łLnł```ÕfaŁGč2(g¢a /? $sH@ŌĄJkg0/ / a $_ L R fa¶2aµČ&_ L"Ja R m.a+t`(Hē0aŠLß JRg Rf 9Lcg L"JaäJko"*ā La½v` La»Ę\‹2SAga ¶`’na Š _a¹˜J( l2( 0aŌ¢SAföNuSg>0p`¹Øa.a2aPa*aHa”ap`¹†a aa.aza&aŒaśp `¹d‘Č0<``śˆaŗf aTaÜ`0`0fa’YAfĖņaZ`a’xpFaµ¾`Š <4>a”Nua4aÜaVaŌa*pBaµ”`¦aa¾apCaµ~`a8fĖPNuaō La³ T0NuašQ@fĖ.Nuaę°| f ,fĖNuaČafŹöNu T Pg Pf La²Ž T2°@Nu/a¢aŅ ²|fH@3Ą`^gĖ& _aaŠ09`^a“š`NŠ9Leg0<€Ea“ŚNuPł]°a>gōp1a@gPł]±aĻ*a#apYa(`ŌQł]°Qł]±Nup`p`p` p`p`p°9LZg`Nu0<A`.0<`(0<`"0<`0< `0<`0<` 0<`0<°9LZg"ąH`ŪÖ 9 LZfHēšĄ yKÖSˆ`ŽNuHēšĄ yKÖa#ČKŅpgŖk< kŽ;*n¶g”H€Š{NūŽx~XH.NŽbžžģųX)śö ōüüüüüüüüüüņšīžźž žBž@žpZ#ČKŅ#ČKÖ`ŚöüLZCł_£rt°<@g$°<0e.°<:e°<_gĄ<ß°<Ae°<[dRˆ²|?gŌĄRASŌ`Ź#ČKÖ¼ Į_¢āI3ĮMLćJ3ĀMNAł©’a lf°čLZ`¤"HR‰°<0e°<9cša °<Eg°<.f( ).g ))ga²e üLZ`Zp9`’a He#ĄM@üLZ`g0p (=f(p`"pJr>J9]°fp (=fp`²(fżŌRˆRˆĄLZ#ČKÖLßB9dhB9L^Nu yKŅ 9K֐ˆ°|?op?Ą`ŲQČ’üNu  gśSˆbaĀfšNu°<{g°<(f" (*fa¤9]±Qł]±a ß]±`¾NuĄdia‚ $fZaxa Š@2CłpŚ01ąfŅqNń4Ą|’æ +fyLb` -fŽF@ĮyLbÄ|@ÄyLbfNa( ,g¦aga`ö }gaa Nu 9{dif }Nu *f ()Nu źād†ŹīöžŽŲÖŲŅŠĪŠDDEFINEELSEENDIFIIFDEFIFNDEFIFOPTLRTUNDEFVFSMak†Nua8CłpśaS€NuHē`€4rR²BnAłdtašęg pŠÓĄ`ęr LßNu#ČKŅCłdtraŒ°<_g°<0e$°<Zb°<Ad°<9b²|?gRaę`Ź#ČKÖNuHēĄaX#ČKŅražĄg,²|?g RA  g  g#ČKÖR¹KÖaš`Ī/ I /graÉ| _ažbLßNuax  gö  gšNuaģa’>J9dtgÄžNuCłdta˜Ō/aVfF yL€aĶ\"PJ1’fS@"pŠ9dt/ŠAkDaĶHaĶ8"PB1’RQCńAłdt ažL _NuagB)Nu"yL€"Qaž–Nua’za’`ż¼a’paŲ`ż²a’faŲVĄ`@a’\aĪWĄ`6a’@ažNŠ@Cłpŗ01gČĄ|’æ29Lb +g -f°FAĄVĄażb"yVLR)fažg "yVLS)Nu"yVLJ)gĆśaż0aŚg "yVLS)Nu"yVLS)eĆÖ`ż žü@pC×ažH" yMaĢ2?Š|@aĢ4"PŅßA×a—†Žü@ ANužü@pC×ažC×a\Žü@Nu`ĆdaT3Ąš$g4a*a83Ąš&a a.3Ąš(aa$3Ąš*a `üˆ°|@b Nu°|čbNu#ČKÖ`¶až#ČKŅ ,f¦až #ČKŅa–øSˆNu°<'f ah°<'fö°<{g°<(f (*gaJ`ÖaFaDĄdi $gaü`Ąa0aüĪ?aü0r°|gr’°|g"<ąg˜a–gü`’JANuJgNuJ9]±gPłdµSˆBo’žNuHēą`$yVLRŖR¹Mt ¹KĪŖ"ŃŖCłMĘ"’‰LŖ A°|€ldrĀ€ÓĮa›ź#ÉKŅ#ÉKÖHqa _ ¼MĘ5@ f."*²’m&J*gĮšJ*fĀ paL yKŅ$yVL`’~a2 yKŅa#ČKĪaŽp’LßNu *"9Mt/a‹¶gĄŚ _NuCź&#ÉMT"H"’ŖgP <°o kB#ź JĘa‘fŅ®ÓŖÓj IpŠ|’’`°TÉ’üg e g Jfä| ’’`ÜB`ŲB¹JĘNu"H0* r~²@oCłMÅŅĄJgBRj ` JWÉ’üfĮ Nu/ $yVLJŖ fDAź&#ČMTa&fŅ(%@ J’f*ą@WĄĄ¼fSŖŃŖ"aņ%@aD$€Aź&aÄĪ#ź JĘ *raxB¹JĘ$_Nu/ ?$yVL3üdjJyMnfažĘJWfaŠr#ź JĘBŖ aL”üv#ŹVLSyVJg:eĄd j P#ŲKŅ#ŲKĪCłMĘ <„a™š jaÉJWfAź&aÄ00$_Nu/ a./PéAé&#ČMTpa’"pa‘fŃ.aNažąLßNuHēą yVJgæčRyVJpvŃ¹VL$yVL Jaš yVJg&0<ŒaČ\%H’ž"P"×"łKĪAłMĘ <„a™J oCź&a“z3üdjP"J$_AłMÅ#ČKĪNu yMP±łM|gæ8B B`! #ČMP2ćI8ĮB\QČ’ü`Č¹ MPNu 9LZf, 9M@3ü_¢3Ą_¤3üMLåH3ĄMNüLZNup42DA`ŅQŹ’üāHćINu yMPa`ōR 9LZfr Pačg¾@#ĢL|8łMNAł_¢09ML8ŲQČ’üNu yMP"yL| P0ĄPAš0gHĄŠˆ‰2€ ˆ0€¹łMl¾JNu 9LZfvłdhf^"9MP A Pang Ņ¼ ²¹MxfźQłdhJ9L_g½ØNu PNf /aóš0< aóh łdh A Pa(fČ"AHłdlLłdl°XgóhNua f°Xgó\NuHē€ 09_¢49MNÄPEš 4g"ŌĀ°jfōAźCł_¢49ML±IVŹ’üfÜ`tLßNu?r9LZ`°WÉ’üf 0ŠĮ_U@`ņōTNur’Nu9LZYHXHgī²fö`ņÖ 9LZf¼¾NuBBØ9LcgCł_¢p°|o p`±QČ’ųNu°<ae °<zb< NuHē0$HBÄĮ&HCĘĄŌCHBBBĄĮŠ‚Lß NuHē8xJ€jD€x’JjDFD$’v Ӂ’‚dŅ‚Ń€QĖ’ōF€JDgD€HDJDgDLßNua¾ Nupr $g0’<:Ņ< d"°¼ ĢĢĶ°¼ ĢĢĖdćˆ/刊ŸŠkRˆ`ÖDüNuBgRˆ²<ae’< ’<:Ņ< e ’<\d Ņ< 鈊RW`Ō _nHĄNuJƒgBJ€gJŗBlĮCĆDÅEšBŗ|@l6ŌEŗ| eš| "pJEgź©źø|’ź®.F†Ģ€‚†Ą‡Ņ„ŃƒeNuāā‘RBNuŚB "$NuprtNuJ€gōJƒgšŌE?t,.ĀÄpBAHA*HEŹÄŅ…Ń‚:g HDŹÄHDŅ…Ń‚2HAp:gŹĆŅ…Ń‚*HEHDŹÄHDŅ…Ń‚:gŹÄŅ…Ń‚2HAp:HCŹĆHCŅ…Ń‚*HEŹĆŅ…Ń‚:g HDŹÄHDŅ…Ń‚*HEŹÄŅ…Ń‚2HAp*HEHCŹĆHCŅ…Ń‚:gŹĆŅ…Ń‚*HEHDŹÄHDŅ…Ń‚*HEHCŹĆHCŠ…:HCŹĆHCHFĢĆH@܅ŃBH@HAŅFHAHFŃFH@ŃB4H@kSBć‰ćNuHĄg t ć€UŹ’üārNu/a _NuJCkAł©¶|@m2–|@aźLł8©`žŠAł©L¶|’ĄnÖ|@aĢLł8©`ž²DCgAč āKdö?LŠ8BEHEaž˜6`äNuv–<:Ö< NuNV’āHīü’āažnB®’śaŽd&?va’n&(*0a’Pażō.’ügÜSn’ś`Öv †(’’¶<.f ī’ügĀ`Œ¶<efRD’üø<-gø<+gSˆa‚dl=C’ža’zd8.’ž:åLŚDŚEŚC=E’žjDEŗ|ˆoŽ`D6.’ž .-’üfDC×n’ś6.’śažŲŌ|?ži$jprtćBā‚CłM@2ĀHŃSˆLīü’āN^NuvSƒ`īar L`¢^ar L`¢Ta„ T P fø¤Nuar L`¢:aj T P eøœNua L` |aT Laœva›R T Pfø€NuaH T P føX ,g La™6 ,H@€|`a¹B29Ln`¹8pJ, gęrNua La˜“`˜Īa¼Ał«ŗaū"f60 La˜la˜’a˜¬a a– La˜€a˜šaHAł«ąa“`¾ 9:LZgNuaķī La˜ra˜Pra”\aÜaRa"S Qf·Öaœ g T ( pH@ŠĄ³Čf·¶ Kaœ~aŸ|0<a”¼(¹_ō9|)|`’HaBAł«Ēaśff40 La—°a—Öa—šada La—Ęa—ąaŽAł¬a’X`ĄNuaBAł«Šaś"f40 La—la—’a—¬a a La—‚a—œaJAł¬(a’`ĄNu 9@LZfTaģšaN La—T T P g P f¶ä ,gp`®F¬`œ ,g La—v ,H@)@Nu , Nu9d¶aµ*Ąd¶aŽ La–ņJ9d¶g< T P g( P f¶PJ9d¶l$ ,gp a<`D¬a›¤` J9d¶lpVaßd¶Nu? Laž/ ¹`a›¦ _0`Ÿų, Laž ,,a H`œ4 9LZg&Ał€Šałf*TˆŠŠN`"PŚ ā?,aŗg aŹga,gaf¶Nua“ff° P f>(¹`9|’Pģ9| Pģ J9d¶la“ B9d¶AłM@p a·6)@`h ("pH@ŅĄ0a œ!iĮIpa”ĪĮI(ˆ P e|)yM@aš‚`*9|’Cł_ L™!@ R€Ą|’ž!@`9±U€jö°@Nup6a÷fd&H ( pH@ŠĄ Pf y_ų(ˆaJ,m T (D€Ą|’ž2aŁ8|` Laš0a ® Kaąa ŽJ,l0FLZdlzŅŌÖŲŚÜŽ TVZnØŹž*.Nl^bŒ†āačØfaśBačŹ9|(¹_äpP`( L9| ¹_üpQ`at T P gH ,g2, La›ft,,a00a™9|`’a²0<A²|f&0<5` 0<7` 0<8`0<6?aŒ²|f®ü0a˜Ņ9|(¹_ōNu0<€Da˜¼9|`žņaä8aõø`ä6a L`faä$aö*2< T0g®L`äaŠr`aŹr La–ä`”†aćöaõü2<<€ T0g®(`ćęać¶fać `ćŲaārNua fJ,f®RNupQaš(glp]aš fb  pH@ŠĄ/aćœaõ®aćš&_ TJ,f (g4°«g.2<<€0g®0g­ž LaŽ(aŽB"+ā aŌ(‹°@Nu(‹a®Nu$H * rH@ŠĄ(ˆGģ | Jaä9@9| PÓ$*)g n²<€fŌ©`L'iRl \‹PÓr`:r€g4jBl`,r°9L[g"m9L['|Rl \‹PÓSfģrA'BJ*g Rl \‹PÓB«pĮģ Gō T0Š@Š{ N»gę`Nu’ž4’ų’ö’ō*2&’ģ’ź’č’ę’ä T (āˆ°¼cp’@°@Nuaā$fj/ a–?9M4aō<3ßM4a¼$K&_ T Pg#ł_šdø"y`#h#h ` ("pH@ŅĄ#Édø ( "p H@ŅĄ ) qH@ŠĄ" R ( pH@ŠĄ²ˆf¬ JaP T Ø’_ĄTĄd· ydø *f *©"(aļZŃ«`x )"(/aļF‘«9d· Ja”Ht 9d·x<** T(mg t ajga•Ų*l „ Ka‘ģ`"*9d· Ja”*t9d·a•¤ 9d·gÓ ydø(ˆ2<B0gaąŅgž aąī°@Nu“| fV 9d·fL/t v*|'a•T*0FUNCTION 6 TYPE ]NOT@ FORWARD5ASMUOR B  BT ->)IJ0š0šššššš ü Uni1System@–’’’’UNI2ō >!R›²0/ŗ&®!t Ž+Rh!d„Bh/ŗ/ŗŅ Ž ^ r X n ² ¼ ” ¤ 2¦  ä „ ’’€’ž’Ź €’’’ž’¶ ’’²’¢ ’²’Ž Ś’z’ī’f *’R *’> *’*Ö>’R’žųfžī ’’€’žžŚŽžĘ¢ž²¶žžŹžŠ ’’’€žžvVŽžlņžbžN ’žž:READLN Z REAL ]ž VALZDISPOSEZ RANDOMIZEZBYTE ]żčTEXT ]>żŚ CLOSEZ FLOAT[LOWORD [ ORD[CONCAT [RENAME Z COS[APPEND Z ABS[ ROUND[ARCTAN [ SQR[FILESIZE [ MOVE Z PTR[SHORTINT ]ŽżLONGINT]žż ODD[ SEEK Z MEMAVAIL [ SETTEXTBUF ZDOUBLE ]üø ORD4 [HALT Z WRITEZ FALSE\Śü† SQRT [ STRZEXIT ZINTEGER]ŠüP TRUNC[ PRED [ COPY [ EOF[" NEWZ MAXLONGINT \žü’’’ SIN[HIWORD [ SWAP [ INCZPI \*ūĘ@ÉŚ¢!hĀ2ADDR [( READ Z INT[LN [BOOLEAN]Śū€EXTENDED ]*ūn LO [ DECZ PAGE ZGETMEM ZCHAR ]²ū2 CHR[SIZEOF [POINTER]fū EOLN [# SUCC [ EXP[DEVICE ZFREEMEMZNAN\*śĄ’’’’’’’’’REWRITEZ ERASEZFILEPOS[!SEEKEOF[$MAXINT \Šśp’MAXAVAIL [UPCASE ['RANDOM [)LENGTH [TRUE \Śś$SINGLE ]ś BLOCKWRITE ZDELETE ZFILLCHAR ZWRITELNZ RESETZSEEKEOLN [% BLOCKREADZIORESULT [& POS[INSERT Z HI [ SWAPWORD [ASSIGN Z’°SYSTEM Nž” UNITVERSION\Šł6–ż‚WORD ]Dł$ ’’žł’ŗPTRLEN ]šłBASE Qfųā’ģSIZE QžųĪhųÄ’Ŗ PBASEPAGE]ĄųØ Šųžś¬ RBASEPAGE] Šų‚œr®P_LOWTPA Qfų`’čP_HITPAQfųJTEXT Qšų6’ÖDATA Qšų"’ŲBSSQšųP_DTAQ f÷ü’ŚP_PARENT Q$Ą÷ä P_RESRVD0Q(ž÷Ģ’¼P_ENVQ,f÷ø’¼P_STDFHQ0Ś÷¢ ž÷ŽŽ÷„Ę÷€’Ā P_RESRVD1Q6Ž÷b’čP_CURDRV Q7Ž÷J’ P_RESRVD2Q8 J÷2 ž÷Hž÷ 6÷’ĄP_CMDLIN Q€ vöņ€ęöŌż€INPUTQ>ö¶’ģOUTPUT QÖ>ö ł*IORESVAR Q¬ŠöˆłxAPPFLAGQ®ŚörśāFPUMODEQÆŽö\ż¢HEAPORGQ°föFūDEVCHAIN Q“fö.’xHIGHSTAK Qøfö÷ÜLOWSTACK Q¼fõžüRANDSEED QĄžõęłFEXITPROC QÄfõĪūŠEXITCODE QȊõ¶’ˆERRORADD QŹfõžż LASTPC QĪžõˆ÷ŌSHFTSHFT QŅfõp’ZBASEPAGE QÖĄõXžęSTRAP5 QŚfõBųzSTRAP102 QŽfõ* „B SystemRF1.ORF2.ORF3.ORF4.OFP1.oFP2.oFP3.oRM1.oŽ ŅXINIf Ņ XHLTLXMULIdXSQRIŠXDIVI–XMODIŽXLDS¦XLACšXSTS²XSCP¾XCONŹXCPYÖXPOSāXINSīXDELXLDZXLZZXAZE*XAZR6XSTZNXZEQZXZGEfXZLErXZUN~XZDIŠXZISBXZINŽXNEWźXDISöXMEMXMAX–XMOV¢XFLCŌXCRWČXCRLśXUPC0 ®X_FP& ŗX_FPTRI ~DEVICEPx ~ˆRSETTEXTr ~.REWRTEXTR –WRCHARąWRINT WRREALh –JWRSTR®WRBOOLz –tWRLNf –ąREADCHARģREADINTųREADREAL‚ –žREADSTR² –ČREADLINE ŠCLSTEXT˜ –ÖTEXTEOFœ –ņTEXTEOLN  –SEOF¤ –SEOLN" ¢–RSETFILE ¢*REWRFILE† ¢pWRFILE~ ¢FREADFILE ¢TSEEKFILEf ¢8CLSFILE& ¢bFILSIZE8 ¢~FILPOSv ¢ŒFILEOFĄ ¢šFRENö ¢ØFERAN ~PGETIORES^ ~ÄCHKIORESŠ –WRPAGE 6REALSTR *INTSTR NSTRREAL BSTRINTø ¢¶XBKRĄ ¢&XBKW¼XSTKl ~ Ņź¤®d€¦$d€˜8d€¦Dd€˜Td€|d€¦2d€¦>d€˜Nd€|d…Źdd^d„źddddd€(d ddˆdˆd€(d€( d„źdˆpdˆpddd„źdddˆ¢$d„źddˆ¢ d„źddˆ¢ d„źd„ų"d…¼d…Ųd…(dd…Ųd0d„ Bddƒī*d…¼d„ų&d‰*d…"Bd‰"d…&d…0Bd…„Fd…hčd…>žd… 6d…hd…®žd…>®d…>dd d ddRdXd`dldtdźŖd¼dĢdĄčddd€dšd¶dęd dLdd€d drZddčdśddrLdrd:dōHdVdęvd€d:ˆdH®dŗd:ĀdHöddVd,–d,¢d,°d,ĪdŚdźdĄd dĄŠdhddŚdĘdźd,dĄdh0dZ:dhģdLödhdL$dL.dhDdLddLndh~dL¦dLĪdvdL"d’*d„Fdv\dhldZ°dZĄd„ĢdLÖdhčdhdZtdhdZ¾dhędLņdhdvdZ&dhbdĪ$dLd dd$dFdÜNdzd”dšd¶d¾dŅdŚdęd<dųndtdzd€d†d”d¼dčdšdśdd(d0d:dLļpāH0ŁQČ’ü _PNŠ0/Lļ°c)’’Ą`ŁQČ’ü _Oļ NŠ0/LļĄ`ŁQČ’ü _Oļ NŠLļt“cSBe ± VŹ’üf² _PNŠLļprŃd Pč’’FŠĮ`ŁQČ’ü _PNŠLÆLļtJAnr²Bn$ŠĮ”ARBJ@o°Bo0ĄS@ŲQČ’ü`B _Oļ NŠLļHē0prtg(g$AeSA6$H&Iµ VĖ’üg RBRˆQČ’źtLß  _\O>‚NŠNuNVžHn’/. ?<?.SWN¹/.Hn’N¹Hnž/. ?.?<’N¹HnžHn’N¹Hn’/. ?. N¹N^ _Oļ NŠNVžHn’/. ?<?. SWN¹Hnž/. 0. Šn??<’N¹HnžHn’N¹Hn’/. ?<’N¹N^ _PNŠ _ Wam WznW NŠNuLÆLļt ”@”A`BQČ’ü`ŁQÉ’ü`BQŹ’ü _Oļ NŠ opB˜QČ’üNu0/ oręIš _TNŠLÆ oe tųęJŠĀŠRfRˆrųSd’š.ŸNuLÆLļŅĄ`ŁQÉ’ü _Oļ NŠ o0/ @ep` 2ęI0 _\NŠLß/p³ˆVČ’üNuLß/p"‚²˜VČ’ųNuLß/p"‚‘²™VČ’ųNuLß/p"ƒXˆQČ’ųNuLß/p"FĆXˆQČ’öNuLß/p"ƐXˆQČ’ųNu0/Lļ±ÉgeŠĄŅĄ`!QČ’ü`ŁQČ’ü _Oļ NŠLÆ o`ĄQÉ’ü _PNŠJ/VĀBAśŠĀ"o4/N¹`FALSETRUE .ŸNuprt +g -ftRˆ: d2: dćˆ/刊ŸŠkRˆ`’ąJgD€°@`DüNuJ€lD€ü-Cś(r °™\É’üY‰"gt/Rl’śŠĀ`’źBNu;šŹõį˜–€B@† 'čd NuLļ#Č°B˜ ˆP˜ ĄrģŅ€A’ų ĮkHpü Ÿ Pr’ Į Į _PNŠ /gN^€@’ų y°" "H°˜ Xb’ö If "i`Jk"ÓĄ‘"#hƉ#A"o"ˆB˜B˜`?<8//Nł _PNŠ/ Lļ^€@’ų"Q y°³Čb `T h³čb’öJkB#h"€Eńt’µčf#j $Ā$Āё!I$HÕŠµÉf!i "Ā"Āѐ$_ _PNŠ y°pŠ˜ Pd’śR€//@Nu y°p` h°d’ų" j’š//ANu <„"9ĄN¹R€#ĄĄNu?<NNTOį€#ĄĄNuN¹B@2/gH@€ĮH@?@NuN¹tćˆUŹ’üg B_ą˜āˆ//@Nu/$HBÄĮ&HCĘĄŌCHBBBĄĮŠ‚&NuLļN¹/@.ŸNu _ "N¹.€NŠNuHēxJ€jD€x’Jf?<7//NłjDFD$’v Ӂ’‚dŅ‚Ń€QĖ’ņF€JDgD€HDJDgDLßNuN¹NuN¹ĮANu"yŅ gNŠ?<:/9ĪNłNu _#×Ī"PC÷‚³ł¼cNł?<2/NłNu _°˜m°˜n #ČĪNł?<3/NłNu _°Xm°Xn #ČĪNł?<3/NłNuNV’ō . Aī’ōN¹ Aī’ōˆ"n4.N¹N^ _\NŠ/NV’®Aī’®"n N¹Aī’®N¹eJg 3üA¬p-@N^NuNV’ŖAī’­"n N¹Cī’­‘É Jy¬f$/ /.Hn’ŖN¹"n Q’f 3üA¬N^.ŸNuNV’®/. /.Hn’®?<PN¹Aī’®p"n4. N¹N^ _PNŠB/ ?”@oSBü SAoQŹ’ō4`ŲSA_Ź’ś "_‰NuNV’ō .Aī’ōN¹ Aī’ōˆ"n 2.4.N¹N^ _Oļ NŠNV’®Aī’®"nr0.l0. @ lp Q@rN¹ Aī’®ˆ"n 2.4.N¹N^ _OļNŠNV’ n Cī’p`ŲQČ’üBAī’N¹Cī’‘Ér"n ƈ±Įfr’RA n0-@ N^.ŸNuNV’ nCī’p`ŲQČ’üBAī’"n N¹Cī’‘Ér"nƈ±Įfr’RA n0N^ _Oļ NŠNV’ÜHīü’ÜptB®’ś -Wī’ųg +fRHaīd,?aņ&(*0HĄN¹N¹.’üg’ŲSn’ś`’Šv †(’’ .fī’üg’ø`œ effD’ü -g +gSˆa€dt=C’žatd&8.’ž:åLŚDŚEŚC=E’žjDE Eˆo’Ś`D6.’ž .-’üfDC×n’ś6.’śN¹J.’ųgB& n’ōN¹ CvSˆLīü’Ü`.vSƒ`’īv: NuJ€g&(*TBN¹RBNuN^NuNV’ĘHīü’Č=@’č=A’ä=|O’ęĆHN¹ I ü NANv gv-ĆJ‚k0aFJn’äg&6.’č8.’źÖD Cl D’āo n’čel6.’čRC ClvaNŲü.Ųf’ü|E’’p+8.’źjp-DDĄ2<čøAmardar a ra`¤p/R˜Ad’śŲAĄNu6.’źÖn’čRC €€Tī’ęaą6.’č4.’źk axQŹ’śSCkbü.afQĖ’ś`Rü0SCkü.RBg’āü0QĖ’ōRBfJ.’ęg |1’’` n’ą -f ˆU@"HRˆŲQČ’ü ILīü’ČN^NuŲf Sˆ|0’’NuBn’źJ€g>6SCĒüMąƒ=C’źFCN¹JBoRn’źv’N¹`’īv–Bxāˆā‘āTQĖ’ų=D’ĘNuAī’ģ CovJCnvJ€gn8$*ŅŃ€ŅŃ€Ņ…Ń‚ŅŃ€z Źī’Ę=E’ĘBEHEŅ…zх$€’’’4<éšĀQĢ’ĘB 5e `R :e¼0QĖ’š¼1Rn’źAī’ģNup0ĄQĖ’üB `’īN^Nu _Hłā?NALłāTJ€j 3Ą¬DüNŠNu"o o  ł“#Ą“ ļr²< o r `aĄQÉ’ųB.Ÿ.Ÿ.ŸNu°<am °<zn< Nu _?9¬By¬NŠJy¬fNu _?9¬/NłJ©faRJ)g HipAaaģTBiNuJ9óg`a"e3@Bi _Nu`žN??)/pBašPONu/) ?)Bg?)p?aŚŽü Nu/) ?)Bg?)p@aĀŽü Nu"o0€Sf N¹N¹BQ.ŸNu"o #o 3oB©J)g3i _Žü NŠ2)²ifN¹JifźDüNu/ "i 1"_Nuta°f0aĢe,°< bRi`ša¼e°< cRi“|PgģRBN¹Ą`ąBNu _"Warfae RiĄ|’?NŠBgNŠLļtaRfa’pe°< gRi“|’gźRB€ `ā‚.ŸNuLß/a$f a’BeRi°< fša’2e °< fRiNu g3ü=¬Nu )g3ü>¬Nu2)/ "i €"_RA3A²ifNłNutpaĀf"?”@o SBp aĘQŹ’ś4`aŗQŹ’śN¹Nu4/"oAļpaČ _XONŠLļ4/a² _\NŠLß/Aś`ž Lß/Aś`Ž t` t`t`t _"_BgJg$ažNeg°< gg°< bRi`ÜRNŠLß/B™BYB™B™B™X‰B™’üNłt`4<Lļ faŠf2‚N¹`HēĄaŗBy¬2‚3oN¹gBQ _Žü NŠ"o€)SfN¹.ŸNuAł`Ał"oapf#o 3iNeig3ü@¬ _XONŠAł`Ał"oa6f,#o 0/?)3@3@N3_"/g A0€By¬ _ŽüNŠNłL×aōf 2)a4rN¹ _PONŠ"oa^2)a*/@Nu"oaL 2)a/@Nu$HBÄĮHBBBĄĮŠ‚Nu Ctv ÕB”AdŌAрQĖ’ō&F€Nu"oa°WĄD _XNŠa’vf*prN¹/prN¹/ /rN¹ "NuprNuNV’€ n Cļ@N¹ n"ON¹HWHo@BgpVN¹N^ _PONŠNV’Ą n"ON¹HWpAN¹N^.ŸNuüœ`Z2 “øĪīFh`RVö<@Cś’ĪNV’źHīų’ģahBn’ź npĄ.Š{jN»f. f&(* n aāĢ|>Üq`N±`. f n J9ÆfaāDī’źLīų’ģN^ _Žü NŠLīų’ģN^"_Žü avNŃ &(ZŠp`p0` H€`0HĄ`ō `ų r$gįˆĄBBHB抱J”|~“|gNu$rļ„¼€’Nu "$g(| ķØķ¹Ą4Ā|ųÄ|’€BBBHB押J”|ž“|gĄNut4ć‚TBSBeāJ”|?ž g "NuĀ `ōJ‚k Ō|?žkiJ€g ćBāŠ0Ā Ą ĮNutpr`ģ4<’`ō n J‚k"Ō|žkJJ€gFŅ¼d R€dāā‘RB“|’d$ėJā‚v ęøę©&Ę¼’ą‚ƒH@Ą|€BH@ Ą ĮNu4<’pr`Ņpr`ź n J‚kŌ|~k2J€g"Š¼€dāRB“|’dįJāšHBBB€ąˆ€‚ €Nu4<’p`äp`š~,Œ…ka~J‚k ~J€g~HBĪB=G’źNuEJ9Æga`žJ‚k’J…k~JƒgJJ€gvŗBlĮCĆDÅEšBŗ|@lbŌEŗ| eš| "pJEgź©źø|’ź®.F†Ģ€‚†Ą‡µ…fŅ„Ńƒe&Nu’„‘ƒdBD@€J€f gčr”| SBć‰ćdųāā‘RBNuŚB "$NuprtNuJ9Æga\`VJ‚kźJ…kŲJ€gÜJƒgŲŌEBE»‚/t,.ĀÄpBAHA*HEŹÄŅ…Ń‚:g HDŹÄHDŅ…Ń‚2HAp:gŹĆŅ…Ń‚*HEHDŹÄHDŅ…Ń‚:gŹÄŅ…Ń‚2HAp:HCŹĆHCŅ…Ń‚*HEŹĆŅ…Ń‚:g HDŹÄHDŅ…Ń‚*HEŹÄŅ…Ń‚2HAp*HEHCŹĆHCŅ…Ń‚:gŹĆŅ…Ń‚*HEHDŹÄHDŅ…Ń‚*HEHCŹĆHCŠ…:HCŹĆHCHFĢĆH@܅ŃBH@HAŅFHAHFŃFH@ŃB$H@kSBć‰ćNuJ‚kžčJ…kžŌJƒgüÜJ€g”EBE»‚RBJ„f¶¼€gzāˆā‘NV’ģ-B’üHī’ģ~ųL®x’ģ$„Ćht’ĘĀČĀŹĀĢĀ=‚pü4<HFBDHDŚ†×„DB“…‘ƒUÅH@HA02JgLī’ģSvpüŅ„ŃƒdöTGf°Lī’ōRBSBć‰ćdųāā‘N^Nu‚NuJ€gBNuJ9Æfrt("gžjĀD€hLśNuQBį‰į˜°göą˜ćˆUŹ’üārNu€ &<€x*BEaż8J‚kżŲJ€gżĢJBożĘ”| lDBäØgD€NuRn’ź <€Nu<ž| |’ī®FFĀ†Nu&(*köaĀBNłJ‚k>J€g:f’nHēą.H@Ąü“Š¼l’a aaāBdRBH@ĄüµkSBćˆaaOļ Nu(HD āˆ€ÄāLŠDdp’H@Nu&(*LļHēN¹Lß8N¹SBNu±r÷ŃĻy­øŖ;)\šŗ¢łƒnND,’žÉŚ¢!hĀ2טƐG˜eF’’š3ūh’@±÷؉#‰™!ÄĄlŽŽ“ēaUW“›Ł½,$krĄlŽ½.B«p½Ŗ|’ū”Ō˜Ÿ`Ū½=sM½f é/(zč•BĄˆ±|:e*Ņ ņuœ‡Ų%ģń‚SÆī”żōĘŁśRŚ©4æĮÅŗĻ  ¤Ūą3·0@øq9hé ĪĆJæĢņ’Ū·¼»†,¦k_’āōyÆN¬Łįö’čńƒ¦īŽø ę’īØ<BŒ†Y}’ō™ifsŖV’ł£5ć;­SnÄ’ż„]ē1-ņ‘sÉŚ¢!hĀ0˜ü”{ KO’żŗMLŗR’’żćŽŠåÕ°’ż’I$†łī¾„’žĢĢĢĢČ č’žŖŖŖŖŖŖMį’’’’’’’’’żÉµÜbŁm’ż›PAŖćŽ(’’ˆÕøČA§\5ŅW!B~X›÷ģl;ļ:ļx¹ą 1ŅśĻH0ęH¢sbŹ×ībkĖÆÆ©ŠĄ>’žŌĢĻēy’ ’’« ĮUæĢ‚ö€æĒÓ£ ƒš‚y™üļ2D ß÷;ˆC"_HēąafHēą?LŲSWgLļ8N¹LŲ8N¹`äLļ8N¹Hļ>˜Lļ`SWgLļ8N¹LŲ8N¹`äTH×NŃ&(*NłHēąaīHēą?LŲSWgLļ8N¹LŲ8N¹`äOļLß8NłLś8üąaü0J‚kd“|üoū²J€gū¬Lś8üøN¹‚VēaūžTB“|m°¼ĄeLśžÖzN¹`JBo LśžĀzaūŲJgBAśżha’VNuJ‚kv“|üoūPf“|lū"Lś8ü:N¹HēąN¹?N¹Lļ8aū„AśüažL×?N¹Lļ8 Hļ LßN¹Lß8Ō_Oļ N¹NuJ‚kd“|üoś¼J€gś¾fś¶?t°¼µó3dSWRBa>AśūŅaž*Lß8LßN¹6Hēą0HĄN¹Lś8ūzN¹Lß8N¹NuHēąLś8żŗN¹L×8H×Lśż¦aś¾Lß8Nł“|üoś:J‚kśņJ€gHB?BBHBAśüō|’RF¼|gAč “XmnīLč’ō˜—€eāJFf Aśüvażö`Ų¼|fa’|Aśü`ażąLś8śųSEN¹`“¼|f(&(*LśżN¹Aśü.aż®Lś8śĘaś`†Hēąp??Lś8ś®WEN¹SWfī(HēąČü AśüØLš@ōHēąLļ8N¹Lś8ü°N¹HēąLļ$Lļ8 N¹L×8N¹Aśū¬aż,Lļ8N¹Oļ0HB6·BHBNu<NłAś’¶|’nÖ|aŠLś8.`āDCgAč āKdö?LŠ8BEHEaŹ6`ęNuŖ~ėūłŽŽSĄ1C%cz:ü® Čœ@¾¼ ŽÉæ6Å­Ø+pµžkĀxI’Ļ¦ÕՓŗGɀ錱ŖĢĢĢĢĢĢĢĶ’ż£× =p£× ’śŃ·Xāe,’ó«Ģw„aĪż’ęꕔ¾ÄMį[’ĖĻ±­E9”ŗ’–Øź'„9é„’,ŻŠF|d¼ä žW(_Ą®#ĶÖLķšD„ŸÅA÷H~#Č¼J9®g$-”‡”ml¼‚l$“…mb*//N¹ŚJ9®g+Eš// Bg?<JNAŽü a¦tŒa˜Aś,J9®g m$ (’’ga"Aś,#ČÄ#ĻøNŌAśŌa¢?<’Ł`źHz#ßŅNuJ9®fAśĶa~`a`&9Źg0–¹ÖAśpad09Č>aFAśqaTAśxtJƒgaXHt‹aBaNuHz’?<&NN\ONuxé›pĄƒŠ<0°<:m^a"QĢ’źNuHĄQO ON¹ OaPONuga`ųHē €?/<NM\OLßNuB—a’F#ߏ3ßČ.yø yÄB¹Ä oN`ģ?9Č?<LNAAųˆHŠŒ xņ2| hg"h$#ÉŅNup98ÄtŒ“øˆg xÖp4Ug p5Sgp6 xĪ±łÖd yĪ$f yÖ|ß’?/`’`p7 o`ŌAś’öpa(#ĄŚAś’ a#ĄŽNu yŚpa yŽ0</??<NMPONu Runtime error: at offset: ????. Not enough space for heap Accessory errorSystem2 ’’’’UNI2ŅŅ*<!R»9öÜīöņ †Ol öö¶Ņ~ĀęĘ,B„r–`ŗ(Ņ Ų’Œ2SYSTEM2NCHAR128]’^ ž’N€Ę’D ’<PCHAR128 ]D’$’TEXTREC]’’ĀŅ¢FINPFLAG QŚžāFOUTFLAG QŚžŹ’ŠFHANDLEQŠž“FBUFSIZE QŠžœ’čFBUFPOSQŠž†’¼FBUFENDQŠžp’ŌFBUFPTRQ DžV’Ō FINOUTPROC Qfž@’^FUSERQžž,’¼FNAMEQhž @žž€²żśTżņFBUFFERQ–żÖhżĢFILEREC]®ż²¦d¶2FINPFLAG QŚż”FOUTFLAG QŚż|’ŠFHANDLEQŠżfFBUFSIZE QŠżNFPRIVATE QJż2 žż" Šż6ż’zFUSERQžüś’”FNAMEQšüā @žüŅ€²üȆüĄ–¶ü°TDEVBUF]ęü– žü†Ęü|Ņüt KEYPRESSED 6ŚüXREADKEY6²ü:(CLRSCR D6CLREOS DDCLREOL DRINSLINED`DELLINEDnGOTOXY D |ŠūzŠūtWHEREX 6Šū\’ >Ø’äRWWHEREY 6Šū6’ >Ø’ęRWž“OMIT 6’īūŠīū’ŠūŠśśINCLUDE6’īśā˜īśÖ’īśŠ’ŠśŹSPTR 6žś“’6.DELAYD ¦žśŠ’b RUNFROMMEMORY6Śśl“žŒ VALIDREAL6 ŚśL’>*ś@’ö _0Ą|’°|’V׆O„BSystem˜ System2ŽāSYSTEM2²KEYPRESS¾READKEYCLRSCRCLREOSCLREOL(INSLINE4DELLINEŽGOTOXYZOMITfINCLUDE$~DELAYrRUNFROMMÖWRITECHSŹREADKEY2|ų:ųOUTESCź*6DR(`4nNNCONIO@Zō$Šf@˜rV“~*Š¦j~¦GETHZ200¦CALLDOS2˜²,¾(ŹŠÖ,Āā. D*2d€Ā d€Ād€źd€źd€źd€źd€ź d€ź&d€ŠZd€Ārd€ĀŠd€źąd€Āh€|&h€Š6h€|h€|&h€|:h€ĀJh€| h.d<dPdŠZdŠdd hd˜d˜dd€( dd˜d@dh‚ h&h‚.*h4h‚’’’ŽENHNDL \Š’*’’’ŻEACCDN \Š’’’’Ü’°EIHNDL \Š’’’’Ū’°ENSMEM \Šžī’’’ŁEIMBA\ŠžÜ’’’ŲEDRIVE \ŠžČ’’’Ņ’ŠENSAME \Šž“’’’ŠENMFIL \Šž ’’’ĻERANGE \ŠžŒ’’’ĄEINTRN \Šžx’’’æEPLFMT \Šžd’’’¾EGSBF\ŠžR’’’½READONLY \Šž<HIDDEN \Šž(žžSYSFILE\ŠžVOLUMEID \Šżž’^ DIRECTORY\ŠżčARCHIVE\ŠżŌ ANYFILE\ŠżĄ?COMSTR ]Äż¤€PATHSTR]迀PO’øDIRSTR ] ż\DCNAMESTR]0ż8 EXTSTR ]TżžŗC_STR]žüņ ’’žüę ’žüŅĘüČvü¼ SEARCHREC]rü¤‚jRESERVED Qśü‚ žüvülęü`ATTR QŠüN’ģTIME Qžü:’ģSIZE Qžü&NAME Q ^ü  .ÄūģDATETIME ]ūŠhT>*YEAR QŠūŗ’ģMONTHQŠū¦DAYQŠū”HOUR QŠū€’ĘMINQŠūnSECQ Šū\ ˜ūJDOSERROR QŠū0ż¼ TOSVERSION 6ŠūENVCOUNT 6Šśö(ENVSTR 6’ īśŲ6ŠśĢGETENV 6’ īś“DīśØ’ü¬ GETVERIFYD RŚś‚ SETVERIFYD `Śś\ PARAMCOUNT 6Šś@nūŲPARAMSTR 6’ īś |ŠśPACKTIME DŠłę’ōžłč UNPACKTIME D˜žłĄł² FINDFIRSTD¦īł”’ŠłŽrł€ūbFINDNEXT D “rłZSETFATTR DĀčł4’°Šł6śJGETFATTR DŠčł’°Šł ś0GETDIR DŽŠųę ųŲ’~CHDIRD ģ ų¶’¼MKDIRD ś ų”’¼’’RMDIRD  ųr’¼’DSETFTIME DRųTžųNGETFTIME D$Rų(žų"FSPLIT D2č÷ö’° ÷š0÷źT÷äųģFEXPAND6’ č÷Ģ@č÷Ą’°DISKSIZE 6 ž÷®NŠ÷¢ū¶DISKFREE 6 ž÷ˆ\Š÷|GETDATEDjŠ÷XŠ÷RŠ÷LŠ÷FüzSETDATEDxŠ÷"Š÷Š÷GETTIMED†ŠöņŠöģŠöęŠöąSETTIMED”Šö¼Šö¶Šö°ŠöŖžāSETDRIVE D ¢Šö„ūRGETDRIVE 6Šöj°÷ŚSUPER6 föN¾föBEXEC DĢčö’°Äö’€ł SWAPVECTORSDŚż:MALLOC 6 fõąčžõŌśÄMFREED öfõ²MSHRINKDfõŽžõˆ$ć]„BSystem„†OSystem2 Dos X.TOSVERSIDENVCOUNTPENVSTR\GETENVœGETVERIFØSETVERIFĪPARAMCOUŚPARAMSTRęPACKTIMEņUNPACKTIžFINDFIRS FINDNEXTSETFATTR"GETFATTR:GETDIRFCHDIRRMKDIR^RMDIR„SETFTIMEGETFTIMEdœFSPLIT`FEXPANDlDISKSIZExDISKFREE„GETDATESETDATEœGETTIMEØSETTIME“SETDRIVEĄGETDRIVEĢSUPERÜEXEC¶SWAPVECTčMALLOCōMFREEMSHRINK  V:<:,T$TF` @l Nx,\„,jxœ2†ØB”“0¢Ą°Ģ¾ęęŲbņHd 44&N(NINE@hRhITZ‚F‚DELAtœ œWRŽ¶¶|ØŠŠ…ŲĀźź@Ü*TO2öv0źJ848BƒB*DD(P 6\8DvĄ0vh A‚œRØ<`Ā2Ā,NA“ĪPnŚ |ę^Šņ>˜ž4¦ `“8Ā"BŠ.D:ŽFfģR2ś^2x2x˜rj„, $œØ¶–Tœ2˜ŚŠ, Š(ŹĀÜ,ĢčPčōö$ ddd‚,ųd‚ddddƒ .d8dƒ&<dddƒ &d0dƒ&4dd‚Fd‚Fdd‚Fd‚F ld„ld„*.l€|l€|d€(@d€6Rl€|^l€“†l€¦–l€|¶l€|d¾d„‚0d¾d¾d„h$d¾ ld„“ d€n&l€|6l@dƒöRl€|4d‚ņ(d‚Ųl€|"d‚,2dƒ@Bd‚Rl€|dƒZd‚.l€|l€|"d‚,4dƒÜl€|"d‚,4dƒÜd°:dƒt\d‚l€|"d‚,*dƒŽl€|"d‚,*dƒØl€|"d‚,*dƒĀ d‚Fd…jd…jvl€|~d…Øžl€¦®l€|Šl€|äl€|śl€Šl€“*l€¦:l€|Rl€¦bl€|vl€|†l€|lldl€|&l€|6d‚,Fd…Ād‚Fd‚FNV"n Jf’ü "n nS€‰ @’c0<’Ą`ŁQČ’üN^ _PNŠNV"n n p`ŲQČ’üBN^ _PNŠNVJ@m By` 3ĄB@N^NuNV’8HēGī’œIī’8*L/./ N¹ n m :gU‹?<NATOAaĄĄü: \g&@H€?/ ?<GNAPOJ@kJf’ü|\’’Ūf’ü(Mg \g atĄ`’ź ,.’’f: ,\’žfUŒ`* ,.’žf ,\’żfWŒ ,:’’g $\f’śJf’° ,:’’fü\BHn’8/. N¹Lß8` @am @zn@ NuN^.ŸNuNV’š?.Hn’š?<6NAPO .’üĄī’śĄī’ö-@ N^ _TNŠNV’š?.Hn’š?<6NAPO .’üĄī’śĄī’ņ-@ N^ _TNŠNV?<*NATO24@ n 0€źIA n0źJčJB¼ n0‚a`L/BƒBl6„üÖBÖ@Aś(Ö0HBJf nSC†üHC n0ƒ&NuN^ _OļNŠNV2. A¼ėIéI02. ėIŠA2.ŠA??<+NAXON^ _\NŠNV?<,NATO""nBQ@Š@"n 2€ źH@?"n2€p ąi"n2N^ _OļNŠNV2.ķIėI02. ėIŠA2. āIŠA??<-NAXON^ _PNŠNV?.?<NAXON^ _TNŠNV?<NATO=@N^NuNV/.?< NA\O-@ N^.ŸNuNV0. 2@"n2€0źH@?"n 2€p ąi"n20."2@"n2€0źH@"n2€p ąiA¼"n2N^ _OļNŠNV n0.ķHėH2.ėIŠA2. āIŠA0Ą0.@¼éHėH2.ėIŠA2.ŠA0ĄN^ _OļNŠNV?</NATO#ĄN^NuNV y"HŠü,Ņü.p QČ’üB@ 1@N^NuNV#īN¹/.?<NA\O?./. ?<NNAPO3ĄnN¹/9?<NA\ON^ _Oļ NŠNV#īN¹/.?<NA\O?<ONATO3ĄnN¹/9?<NA\ON^.ŸNuNV?. /.?<GNAPON¹N^ _\NŠNV/.?<;NA\ON¹N^.ŸNuNV/.?<9NA\O3ĄN^.ŸNuNV/.?<:NA\ON¹N^.ŸNuNV?.?. /.?<CNAŽü N¹=@N^ _PNŠNV"n0. nBrB1a@gNS@ga&f’ģ`=@’ž=A’ü`Sn’ž0.’žr n0° \f =n’ž `0.’ž°n’üf’ŠBn N^.ŸNuNqNqNVž¬/.Hn’°?<ON€U/N€=_’®Jn’®o*Hnž¬Hn’°?<?.’®N€Hnž¬/.?<CN€`4p.’° @fHn’°/.?<CN€`Hzŗ/.?<CN€Hn’°?<p n?N€Hz–Hn’°N€=_’¬Jn’¬oVHnž¬Hn’°?<0.’¬S@?N€Hnž¬/. ?<N€Hnž¬Hn’°?.’¬p.’°?N€Hnž¬/.?<N€`"Hn’°/. ?<N€Hz/.?<N€N^ _OļNŠ .NV/9Ś?<?<NMP/9Ž?<?<NMPN^NuNV/./. /.Bg?<KNAŽü3ĄN^ _Oļ NŠNqNqNVž,/. Hn’°?<ON€/.Hn’0?<N€B®ž,Hn’°Hnž0N€Hnž,Hn’0Hnž0N€N^ _PNŠNV/.?<HNA\O-@ N^.ŸNuNV/.?<INA\ON¹N^.ŸNuNV/./. Bg?<JNAŽü N¹N^ _PNŠCrttem2<’’’’UNI2¶¶śœ|!0¶œ¶t(W!p¶¶z¶Ņ~4CRTN$W!„BSystem„†OSystem2 Crtd‚,Printer†’’’’UNI2¶¶ÜGH `&lZĘ`@,F¬p&&0¶Ņ~F,PRINTERNLSTQ>’`$F¬„BSystem„†OSystem2 Printer(NPRINTER(IBBF*B 4N" ( dlˆd d*l¤0d8l< dldlä ldd4l dNqNqNVHyHz0N€HyHyŚ?<N€HyB§N€N^NuPRN: NqNqNV#łÖÄHyN€N^NuNqNqNV#łÄÖH@#ßÄN€N^NuBioster¤’’’’UNI2¶¶ ¬żjņO›hNśč€hś¾* phhī¶Ņ~Ņ $Œö Ą ō R¬Ō P śŖ D l²ę ˆ ¤Fęü Ō: €: >rĪņ“ *  ø‚ ø ,² x nBIOS NDMAREAD6ž’^Š’RR’LŠ’Fž’@DMAWRITE 6ž’&(Š’R’Š’ž’ NVMACCESS6Šžī6RžāŠžÜŠžÖŠžŠBCONMAP6 fžøDŠž¬ ESETSHIFT6 Šž’RŠž†’~ EGETSHIFT6Šžl`ESETBANK 6 ŠžLnŠž@žŹ ESETCOLOR6 Šž&|ŠžŠž ESETPALETTEDŠRżģŠżęŠżąž` EGETPALETTED˜RżøŠż²Šż¬ESETGRAY 6 Šż’¦Šż† ESETSMEAR6 Šżl“Šż`INITMOUS DĀfż:fż4Šż.SSBRK6 fżŠŠż PHYSBASE 6füņŽLOGBASE6füŌģGETREZ 6Šü¶ś SETSCREENDŠüŠfü„fü~ SETPALETTE D füV’¦SETCOLOR 6 Šü<$Šü0Šü*FLOPRD 6Šü2ŠüŠüŠūśŠūōŠūīfūčfūāFLOPWR 6ŠūŹ@Šū¾ŠūøŠū²Šū¬Šū¦fū fūšFLOPFMT6 Šū‚N ŠūvžūpŠūjŠūdŠū^ŠūXŠūRfūLfūFMIDIWS D\fū"ŠūMFPINT DjfśųŠśņIOREC6 fśÜxŠśŠüjKEYTBL 6fśø†fś¬fś¦fś ż@X_RANDOM 6žś†”ž*PROTOBTD¢Šś\ŠśVžśPfśJż>FLOPVER6Šś2°Šś&Šś ŠśŠśŠśfśfśSCRDMP D¾CURSCONF 6 ŠłŹĢŠł¾ŠłøXSETTIME D Śžł’XGETTIME 6žłxčBIOSKEYS DöIKBDWS Dfł.Šł(JDISINTD Šł’JENABINT D  ŠųŽGIACCESS 6 ŠųÄ.ŠųøŠų²żāRSCONF 6žųš<ŠųŽŠųˆŠų‚Šų|ŠųvŠųpOFFGIBIT D JŠųJ’˜ONGIBITD XŠų&üDXBTIMERDffųŠ÷üŠ÷öŠ÷šų°DOSOUNDD tf÷Ģś SETPRT 6 Š÷“‚Š÷ØžŹKBDVBASE 6f÷ŽKBRATE 6 Š÷pžŠ÷dŠ÷^PRTBLK D ¬f÷:žVSYNCDŗSUPEXECD ČföśPUNTAESDÖų GETMPB D äföø’šBCONSTAT 6 ŠöžņŠö’’ BCONIN 6 žözŠönBCONOUTD ŠöJŠöDžœRWABS6žö.Šö"ŠöŠöföŠö SETEXC 6fõņ*fõęŠõąTICKCAL6žõČ8GETBPB 6 fõŖFŠõžž@BCOSTAT6 žõ†TŠõzMEDIACH6 žõbbŠõVDRVMAP 6žõ>p’āKBSHIFT6 žõ ~ŠõžŠE_OK \ŠõüøERROR\Šōņ’’’’ų"EDRVNR \ŠōŽ’’’ž÷šEUNCMD \ŠōŹ’’’żE_CRC\Šōø’’’üū$EBADRG \Šō¤’’’ūž˜E_SEEK \Šō’’’ś’ŲEMEDIA \Šō|’’’łžøESECNF \Šōh’’’ų’žEPAPER \ŠōT’’’÷EWRITEF\Šō@’’’öśĢEREADF \Šō,’’’õż0EWRPRO \Šō’’’óśÄE_CHNG \Šō’’’ņ÷ŲEUNDEV \Šóš’’’ń’`EBADSF \ŠóÜ’’’š’ŲEOTHER \ŠóČ’’’ļ$ „BSystem„†OSystem2 Bios Œd‚,ųdŒDMAREAD˜DMAWRITE¤NVMACCES°BCONMAP¼ESETSHIFČEGETSHIFŌESETBANKąESETCOLOģESETPALEųEGETPALEESETGRAYESETSMEAINITMOUS(SSBRK4PHYSBASE@LOGBASELGETREZXSETSCREEdSETPALETpSETCOLOR|FLOPRDˆFLOPWR”FLOPFMT MIDIWS¬MFPINTøIORECŠKEYTBLÜX_RANDOMčPROTOBTōFLOPVERSCRDMP CURSCONFXSETTIME$XGETTIME0BIOSKEYS<IKBDWSHJDISINTTJENABINT`GIACCESSÄRSCONFlOFFGIBITxONGIBIT„XBTIMERDOSOUNDœSETPRTØKBDVBASE“KBRATEĄPRTBLKĢVSYNCŲSUPEXECäPUNTAESšGETMPBüBCONSTATBCONINBCONOUT RWABS,SETEXC8TICKCALDGETBPBPBCOSTAT\MEDIACHhDRVMAPtKBSHIFT˜,(¤,6°,D¼RČ`Ōną|ģŠų"˜"¦“Ā("Š4Ž@ģLśXd$p$|2ˆ8@”8N @\¬jøxÄ<Š4†Ü(”č¢ō(°8¾ ĢŚ$č0ö<HT `.lJxX„f(tœ‚ؐ“žĄ¬ĢŗŲČäÖšäüņ ,0*8 8DFPT\bhpt~NV?./.?. /.?<*NNŽü-@N^ _Oļ NŠNV?./.?. /.?<+NNŽü-@N^ _Oļ NŠNV/.?. ?. ?.?<.NNŽü =@N^ _Oļ NŠNV?.?<,NNXO-@ N^ _TNŠNV?.?<PNNXO=@ N^ _TNŠNV?<QNNTO=@N^NuNV?.?<RNNXO=@ N^ _TNŠNV?. ?.?<SNN\O=@ N^.ŸNuNV/. ?. ?.?<TNNŽü N^ _PNŠNV/. ?. ?.?<UNNŽü N^ _PNŠNV?.?<VNNXO=@ N^ _TNŠNV?.?<WNNXO=@ N^ _TNŠNV/./. ?.BgNNŽü N^ _Oļ NŠNV?.?<NNXO-@ N^ _TNŠNV?<NNTO-@N^NuNV?<NNTO-@N^NuNV?<NNTO=@N^NuNV?./. /.?<NNŽü N^ _Oļ NŠNV/.?<NN\ON^.ŸNuNV?. ?.?<NN\O=@ N^.ŸNuNV?.?.?.?.?./. /.?<NNŽü=@N^ _OļNŠNV?.?.?.?.?./. /.?< NNŽü=@N^ _OļNŠNV?./.?.?.?.?.?./. /.?< NNŽü=@ N^ _OļNŠNV/. ?.?< NNPON^ _\NŠNV/. ?.?< NNPON^ _\NŠNV?.?<NNXO-@ N^ _TNŠNV?.?.?.?. ?. ?.?<NNŽü-@N^ _Oļ NŠNV/./. /.?<NNŽü-@N^ _Oļ NŠNV?<NNTO-@N^NuNV?.?./. /.?<NNŽüN^ _Oļ NŠNV?.?.?.?.?./. /.?<NNŽü-@N^ _OļNŠNV?<NNTON^NuNV?. ?.?<NN\O=@ N^.ŸNuNV/.?<NN\ON^.ŸNuNV?<NNTO-@N^NuNV?<NNTON^NuNV/. ?.?<NNPON^ _\NŠNV?.?<NNXON^ _TNŠNV?.?<NNXON^ _TNŠNV?. ?.?<NN\O=@ N^.ŸNuNV?.?<NNXON^ _TNŠNV?.?<NNXON^ _TNŠNV/.?. ?. ?.?<NNŽü N^ _Oļ NŠNV/.?< NN\ON^.ŸNuNV?.?<!NNXO=@ N^ _TNŠNV?<"NNTO-@N^NuNV?. ?.?<#NN\O=@ N^.ŸNuNV?<$NN\ON^.ŸNuNV?<%NNTON^NuNV/.?<&NN\ON^.ŸNuNV>|'NNTON^NuNV/.BgNM\ON^.ŸNuNV?.?<NMXO?N^ _TNŠNV?.?<NMXO-@ N^ _TNŠNV?. ?.?<NM\ON^.ŸNuNV?.?.?./. ?.?<NMŽü-@N^ _Oļ NŠNV/. ?.?<NMPO-@N^ _\NŠNV?<NMTO-@N^NuNV?.?<NMXO-@ N^ _TNŠNV?.?<NMXO-@ N^ _TNŠNV?.?< NMXO-@ N^ _TNŠNV?< NMTO-@N^NuNV?.?< NMXO-@ N^ _TNŠ’žĄ@@$Š$ Ń„ŠĄ¤ ¤P¤Ń$ŃĄ@@$$ ‘„Ą¤ ¤Q¤‘$‘Ą@$°„°Ą¤ ¤ ±Ą$Ą$ Į¤  A<#A,^“       t 4@¦ Ö    : 4J     0     0      *TnVl."* rBRH v x    & ""Ī,  0   4–*$:DF ,  $   &    "       &.   0 * &$    2*$0 2  &&& 2@ $ j„&"     0(@ *4l>   $"  $"  Ztž r4(2~P$   ,$ ( "   "4 " zd:¢D.DŲh 6(*>  ¦ H DfB$" H   0¦@*@ "@   D   LastTime) or DrawAll then begin LastTime:=Sec; Str(Sec:3,S); {Make something to write} graf_mouse(M_OFF, NIL); {Hide the cursor while drawing} vsf_color(VdiHandle, White); vswr_mode(VdiHandle, MD_REPLACE); with MyArea do wind_get(MyWindow, WF_WORKXYWH, x, y, w, h); with WindowRect do wind_get(MyWindow, WF_FIRSTXYWH, x, y, w, h); if intersect(DeskTop, MyArea) then {Stay inside the screen. Updates MyArea!} while not EmptyRect(WindowRect) do begin if intersect(MyArea, WindowRect) then begin MakeXYXY(WindowRect, Clip); vs_clip(VdiHandle, 1, Clip); {Unused, but better safe than sorry!} if DrawAll then vr_recfl(VdiHandle, Clip); {Clear whole area} with MyArea do v_gtext(VdiHandle, x+(w div 2)-20, y+(h div 2), s); end; with WindowRect do wind_get(MyWindow, WF_NEXTXYWH, x, y, w, h); end; graf_mouse(M_ON, NIL); end end; Procedure HandleMsg(Var MsgBuf: array_8); begin case MsgBuf[0] of AC_OPEN: if MsgBuf[4] = deskId then OpenWindow; AC_CLOSE: if MsgBuf[3] = deskId then MyWindow:=0; WM_REDRAW: RedrawWindow(True); WM_TOPPED: wind_set(MyWindow, WF_TOP,0,0,0,0 ); WM_CLOSED: begin if MsgBuf[3] = MyWindow then begin wind_close(MyWindow); wind_delete(MyWindow); MyWindow:=0; end; if AppFlag then QuitFlag:=True; { Stop } end; WM_MOVED, WM_SIZED: if MsgBuf[3] = MyWindow then wind_set(MyWindow, WF_CURRXYWH, MsgBuf[4], MsgBuf[5], MsgBuf[6], MsgBuf[7]); end; end; Procedure EventLoop; var event, mx, my, mbutton, kstate, key, clicks: Integer; MsgBuf: array_8; begin event:=evnt_multi(MU_MESAG or MU_TIMER or MU_KEYBD, 1, $0001, $0001, {clicks, mask, state} 0, 0, 0, 0, 0, {M1 data} 0, 0, 0, 0, 0, {M2 data} MsgBuf, 250, 0, {Timer. HiWord first. LoWord almost always 0} mx, my, mbutton, kstate, key, clicks); wind_update(BEG_UPDATE); if (event and MU_MESAG) <> 0 then HandleMsg(MsgBuf); if (event and MU_TIMER) <> 0 then RedrawWindow(False); if AppFlag and ((event and MU_KEYBD) <>0 ) and (key = Ctrl_Q) then QuitFlag:=True; wind_update(END_UPDATE); end; { Main part of program} begin QuitFlag:=false; Title := ' My first ACC '#0; { Window title. (C string)} ACCtitle := ' My own ACC'#0; { Menu title. (C string)} appl_id:=appl_init; if appl_id <> -1 then begin OpenWork; if VdiHandle <> 0 then begin if AppFlag then begin OpenWindow; repeat EventLoop until QuitFlag; end else begin deskId:=menu_register(appl_id,ACCtitle[1]); repeat EventLoop until FALSE; {Stay here forever} end; v_clsvwk(VdiHandle); end; appl_exit; end end. öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö{--------------------------------------------------------------------- Graphic demo procedures for GEMDEMO Copyright (c) 1990 D-House I ApS All rights reserved Programmed by Martin Eskildsen ---------------------------------------------------------------------} {$D+} unit DemoGraphs; INTERFACE uses GemDecl, GemAES, GemVDI, DemoInterface; { Set up a local array of coordinates, fill styles etc. used for speedy graphics window update } procedure MakeGraphData; { Make sure the entire graphics window is redrawn. This is required when the user selected demo type } procedure ForceGraphicsRedraw; { Do BOXES demo } procedure DoBoxes; { Do LINES demo } procedure DoLines; { Do ELLIPSES demo } procedure DoEllipses; { Do PIES demo } procedure DoPies; {$F+,D-,R-,S-} { <--- note this if you are experimenting } IMPLEMENTATION const DataSize = 80; { size of graphics data array } var wX, wY, wW, wH : Integer; { Size of graphics window work area } GraphData : array [1..DataSize] of record { the array : } x, y, x_rad, y_rad, { radius x and y } beg_ang, end_ang, { start and end angle } fill_style, fill_index : Integer end; procedure MakeGraphData; var i : integer; begin Randomize; for i := 1 to DataSize do with GraphData[i] do begin x := Random(MinX + MaxW - 1); y := Random(MinY + MaxH - 1); x_rad := Random(MaxW DIV 5); y_rad := Random(MaxH DIV 5); beg_ang := Random(3600); { GEM uses 1/10 degrees } end_ang := Random(3600); fill_style := Random(1) + 2; fill_index := Random(12) + 1 end end; { Return current size of the graphics window work area } procedure GetWindowSize; begin wind_get(grafwindow, WF_WORKXYWH, wX, wY, wW, wH) end; { This is advanced! The trick is, however, quite simple : Let the procedure put a message into the event pipe saying that a redraw is requested. In this way, we let the GEMDEMO application write a message to... the GEMDEMO application! } procedure ForceGraphicsRedraw; var mypipe : array [0..7] of integer; begin GetWindowSize; { Redraw all of window } mypipe[0] := WM_REDRAW; { The message } mypipe[3] := grafwindow; { The window } mypipe[4] := wX; { x } mypipe[5] := wY; { y } mypipe[6] := wW; { width } mypipe[7] := wH; { height } appl_write(AES_handle, sizeof(mypipe), mypipe) { write message } end; { Draw a line from (x,y) to (x1,y1) } procedure Line(x,y,x1,y1 : Integer); var p : ptsin_Array; begin p[0] := x; p[1] := y; p[2] := x1; p[3] := y1; v_pline(VDI_handle, 2, p) end; procedure DoBoxes; var i : Integer; { index } a : Array_4; { coordinates of two diagonally opposite corners } begin GetWindowSize; vsf_color(VDI_handle, black); { fill color is black } for i := 1 to DataSize do with GraphData[i] do begin vsf_style(VDI_handle, fill_style); { set fill style } vsf_interior(VDI_handle, fill_index); { set fill type } a[0] := x + wX; a[1] := y + wY; a[2] := x + wX + x_rad - 1; a[3] := y + wY + y_rad - 1; v_bar(VDI_handle, a) { make the box } end end; procedure DoLines; var i : Integer; Xstep, Ystep : Integer; { step sizes in x and y direction } begin GetWindowSize; { get window size } Xstep := wW div 30; { step 1/30 of its width in x dir } Ystep := wH div 30; { and 1/30 of its height in y dir } for i := 0 to 39 do begin { draw 40 times } line(wX, wY + i*Ystep, wX + i*Xstep, wY + wH); line(wX + wW, wY + i*Ystep, wX + wW - i*Xstep, wY + wH); line(wX, wY + wH - i*Ystep, wX + i*Xstep, wY); line(wX + wW, wY + wH - i*Ystep, wX + wW - i*Xstep, wY) end end; procedure DoEllipses; var i : Integer; begin GetWindowSize; vsf_color(VDI_handle, black); { fill color : black } for i := 1 to DataSize do with GraphData[i] do begin vsf_style(VDI_handle, fill_style); { set fill style } vsf_interior(VDI_handle, fill_index); { set fill type } v_ellipse(VDI_handle, x + wX, y + wY, x_rad, y_rad) { draw the ellipse } end end; procedure DoPies; var i : Integer; begin GetWindowSize; vsf_color(VDI_handle, black); { fill is black } for i := 1 to DataSize do with GraphData[i] do begin vsf_style(VDI_handle, fill_style); { set fill style } vsf_interior(VDI_handle, fill_index); { set fill type } v_ellpie(VDI_handle, x + wX, y + wY, x_rad, y_rad, beg_ang, end_ang) end { ^ : draw the pie } end; end. ĀP–)DSISYS ųP– BILINFO :R–cCONFIG SYS †LŅ?€AUTOEXECBAT 5JŖ\ANSI SYS `r–ŽCOUNTRY SYS `r˜,DISPLAY SYS `rž,DRIVER SYS `r¤’EMM SYS ÖØé „5RAMTYPE SYS r/^¬SREMM SYS j›a®ü9FLYT Ų˜öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö{--------------------------------------------------------------------- GEM Interface Procedures, Variables, etc. for GEMDEMO Copyright (c) 1990 D-House I ApS All rights reserved Programmed by Martin Eskildsen ---------------------------------------------------------------------} {$D+} unit DemoInterface; INTERFACE uses GemDecl, GemAES, GemVDI, Bios; {$I GEMDEMO.H - read resource constants } type Object = record { simple object type - o_spec should be extended } o_next, o_start, o_end : integer; o_type, o_flags, o_status : integer; o_spec : Pointer; o_x, o_y, o_w, o_h : integer end; Tree = array [0..50] of Object; { object tree } TreePtr = ^Tree; { Currently selected graphics demo } DemoType = (BoxesDemo, LinesDemo, EllipsesDemo, PiesDemo); { WINMENU item status setting type } SetState = (s_enable, s_disable, s_leave); { s_enable enables a menu item; s_disable disables a menu item; s_leave leaves a menu item alone (no change) } var menu : TreePtr; { the MEINMENU tree } about : TreePtr; { the ABOUTBOX dialog tree } selection : TreePtr; { the SLCTDEMO dialog tree } VDI_handle : Integer; { VDI handle } AES_handle : Integer; { application id } textwindow : Integer; { text window id } grafwindow : Integer; { graphics window id } demo : DemoType; { currently selected graphdemo } MinX, MinY : Integer; { smallest (x,y) a window can have } MaxW, MaxH : Integer; { largest (w,h) a window can have } quit : boolean; { TRUE = leave program } CharBoxHeight : Integer; { height of a character box (pixels)} CharHeight : Integer; { height of a character (pixels) } { Write the message and halt the program } procedure FatalError(message : String); { Initialize GEM. Returns TRUE if ok } function Init_Gem : boolean; { End GEM usage } procedure End_Gem; { Load and set up resorces } procedure Init_Resource; { Terminate resource usage } procedure End_Resource; { Set new status of an object in a tree : t : object tree index : object tree element newstatus : new object status } procedure SetObjectStatus(t : TreePtr; index, newstatus : Integer); { Set WINMENU's state : closecurrent : set state of WINCLOSE opentextwindow : set state of TXTOPEN closetextwindow : set state of TXTCLOSE opengraphicswindow : set state of GRAOPEN closegraphicswindow : set state of GRACLOSE } procedure SetMenuState(closecurrent, opentextwindow, closetextwindow, opengraphicswindow, closegraphicswindow : SetState); {$F+,D-,S-,R-} IMPLEMENTATION procedure FatalError; var ch : char; begin writeln; ClrEol; writeln; ClrEol; writeln('>>> Fatal error condition arised! <<<'); ClrEol; writeln(message); ClrEol; write('Press a key to abort...'); ch := ReadKey; halt(0) end; function Init_Gem; var workin : IntIn_Array; { workstation input parameters } workout : workout_Array; { workstation output parameters } dummy : Integer; s : string; { string holding a message } begin if Bios.GetRez < 2 then begin { low or medium rez. } s := '[0][ |Note! The icons will look a |bit odd in this resolution.' + ' |High res. looks nicest |][ Ok ]'; dummy := form_alert(1, s[1]) end; AES_handle := appl_init; { get AES handle } if AES_handle >= 0 then begin { if legal then go on : } { get VDI handle and height of a character and its box : } VDI_handle := graf_handle(CharHeight, dummy, CharBoxHeight, dummy); { initialize workstation input parameters : } for dummy := 0 to 9 do workin[dummy] := 1; workin[10] := 2; { use Raster Coordinates } v_opnvwk(workin, VDI_handle, workout); { open virtual workstation } { get size of free desktop area : } wind_get(0, WF_FULLXYWH, MinX, MinY, MaxW, MaxH); graf_growbox(0, 0, 0, 0, MinX, MinY, MaxW, MaxH); { nice! } graf_mouse(ARROW, NIL) end; Init_Gem := AES_handle >= 0 { return TRUE if init ok } end; procedure End_Gem; begin graf_shrinkbox(0, 0, 0, 0, MinX, MinY, MaxW, MaxH); v_clsvwk(VDI_handle); { close virtual workstation } appl_exit { exit application (GEMDEMO) } end; procedure Init_Resource; var ResourceName : string; begin ResourceName := 'GEMDEMO.RSC' + #0; { Note #0 ! } rsrc_load(ResourceName[1]); { Note [1] ! } if GemError = 0 then begin ResourceName := 'GEMDEMO\GEMDEMO.RSC'#00; rsrc_load(ResourceName[1]); if GemError = 0 then begin End_Gem; FatalError('GEMDEMO.RSC is missing!') end end; rsrc_gaddr(R_TREE, MAINMENU, menu); { set menu tree ptr } rsrc_gaddr(R_TREE, ABOUTBOX, about); { set aboutbox tree ptr } rsrc_gaddr(R_TREE, SLCTDEMO, selection); { set selection tree ptr } { set defaut states : } SetMenuState(s_disable, s_enable, s_disable, s_enable, s_disable); SetObjectStatus(about, ABOUTOK, NORMAL); SetObjectStatus(selection, BOXES, SELECTED); SetObjectStatus(selection, LINES, NORMAL); SetObjectStatus(selection, ELLIPSES, NORMAL); SetObjectStatus(selection, PIES, NORMAL); menu_bar(menu, 1) { draw menu } end; procedure End_Resource; begin menu_bar(menu, 0); { remove menu from screen } rsrc_free { release memory } end; procedure SetObjectStatus; begin t^[index].o_status := newstatus { quite simple... } end; procedure SetMenuState(closecurrent, opentextwindow, closetextwindow, opengraphicswindow, closegraphicswindow : SetState); { Change a single menu item's state } procedure Change(newstate : SetState; index : Integer); begin case newstate of s_enable : menu_ienable(menu, index, 1); { enable item } s_disable : menu_ienable(menu, index, 0); { disable item } s_leave : { do nothing } end end; begin { SetMenuState } Change(closecurrent, WINCLOSE); Change(opentextwindow, TXTOPEN); Change(closetextwindow, TXTCLOSE); Change(opengraphicswindow, GRAOPEN); Change(closegraphicswindow, GRACLOSE) end; begin { of unit } demo := BoxesDemo; quit := FALSE; textwindow := -1; grafwindow := -1 { no open windows } end. PIAUTO AUT Diä6ßTEST BAT sś0TEE 4sś1 DD `tś3CONFIG Evś4 {--------------------------------------------------------------------- GEM Menu Interface for GEMDEMO Copyright (c) 1990 D-House I ApS All rights reserved Programmed by Martin Eskildsen ---------------------------------------------------------------------} {$D+} unit DemoMenu; INTERFACE uses GemDecl, GemAES, DemoInterface, DemoWindows; { Handle the menu messages title : drow-down menu's title index index : menu item's index } procedure HandleMenu(title, index : Integer); {$F+,D-,R-,S-} IMPLEMENTATION { Handle the ABOUTBOX } procedure DoAboutBox; var x, y, w, h : Integer; { Dialog box outline size } i : Integer; { Item index ending dialog box (ABOUTOK) } begin form_center(about, x, y, w, h); { centre on screen } form_dial(FMD_START, 0, 0, 0, 0, x, y, w, h); { reserve RAM } form_dial(FMD_GROW, 0, 0, 0, 0, x, y, w, h); { draw growing box } objc_draw(about, 0, $7FFF, x, y, w, h); { draw dialog box } i := form_do(about, -1); { do the dialog } form_dial(FMD_SHRINK, 0, 0, 0, 0, x, y, w, h); { shrinking box } form_dial(FMD_FINISH, 0, 0, 0, 0, x, y, w, h); { release RAM } SetObjectStatus(about, ABOUTOK, NORMAL) { reset button state } end; { Not very optimally programmed! But easy to extend, however } procedure HandleMenu; begin case title of DESKMENU : case index of ABOUTBAR : DoAboutBox end; WINMENU : case index of WINCLOSE : CloseTopWindow; TXTOPEN : OpenTextWindow; TXTCLOSE : CloseTextWindow; GRAOPEN : OpenGraphicsWindow; GRACLOSE : CloseGraphicsWindow; GRASELEC : SelectGraphicsDemo end; QUITMENU : case index of QUITBAR : quit := TRUE end end; menu_tnormal(menu, title, 1) { set menu title back to normal } end; end. ated types, constants etc. q"/HSP1 żY9›öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö{--------------------------------------------------------------------- GEM Window Interface for GEMDEMO Copyright (c) 1990 D-House I ApS All rights reserved Programmed by Martin Eskildsen ---------------------------------------------------------------------} {$D+} unit DemoWindows; INTERFACE uses GemDecl, GemAES, GemVDI, DemoInterface, DemoGraphs; { Create and open graphics window } procedure OpenGraphicsWindow; { Close and delete graphics window } procedure CloseGraphicsWindow; { Create and open text window } procedure OpenTextWindow; { Close and delete text window } procedure CloseTextWindow; { Select one of the graphics demos } procedure SelectGraphicsDemo; { Redraw a window. handle : window to redraw x0, y0, w0, h0 : area to redraw } procedure RedrawWindow(handle, x0, y0, w0, h0 : Integer); { Top the given window } procedure TopWindow(handle : Integer); { Full the given window } procedure FullWindow(handle : Integer); { Close and delete the given window } procedure CloseWindow(handle : Integer); { Move the given window. New corner (x,y) coordinates are given } procedure MoveWindow(handle, toX, toY : Integer); { Set the given windows size. New width and height are given } procedure SizeWindow(handle, newW, newH : Integer); { Close the currently active window } procedure CloseTopWindow; {$F+,D-,S-,R-} IMPLEMENTATION var GrafName : String; { Graphics window name } TextName : String; { Text window name } TextLine : String; { The line written in the text window } GrafElements : Integer; { Graphics window border elements } TextElements : Integer; { Text window border elements } TextX : Integer; { Initial positions and sizes of the } TextY : Integer; { two windows. Y, W and H are the same } TextW : Integer; { for both, but are dublated in order } TextH : Integer; { to allow for easy modification and to } GrafX : Integer; { clearify what's going on } GrafY : Integer; GrafW : Integer; GrafH : Integer; { This procedure calculates the correct sizes and positions of the windows from the available desktop space } procedure CalcWindowPositions; begin TextX := 8; TextY := CharBoxHeight + CharBoxHeight DIV 2; TextW := (MaxW - 2*TextX - 20) DIV 2; TextH := MaxH - CharBoxHeight; GrafX := TextX + TextW + 20; GrafY := TextY; GrafW := TextW; GrafH := TextH end; procedure OpenGraphicsWindow; begin { create window : } CalcWindowPositions; grafwindow := wind_create(GrafElements, MinX, MinY, MaxW, MaxH); if grafwindow >= 0 then begin { created ok... } wind_update(BEG_UPDATE); { AES : leave us alone! } { set window name : } wind_set(grafwindow, WF_NAME, HiPtr(GrafName[1]), LoPtr(GrafName[1]), 0, 0); { draw a nice expanding box and open window } graf_growbox(GrafX + GrafW DIV 2 - 5, GrafY + GrafH DIV 2 - 5, 10, 10, GrafX, GrafY, GrafW, GrafH); wind_open(grafwindow, GrafX, GrafY, GrafW, GrafH); { set WINMENU's state } SetMenuState(s_enable, s_leave, s_leave, s_disable, s_enable); wind_update(END_UPDATE) { let the AES rule again } end end; procedure CloseGraphicsWindow; var x, y, w, h : Integer; { window border area } begin if grafwindow >= 0 then begin wind_update(BEG_UPDATE); { leave us alone } { get border size and draw a shrinking box : } wind_get(grafwindow, WF_CURRXYWH, x, y, w, h); graf_shrinkbox(x + w DIV 2 - 5, y + h DIV 2 - 5, 10, 10, x, y, w, h); wind_close(grafwindow); { remove window from screen } wind_delete(grafwindow); { and memory too } grafwindow := -1; { set handle = -1 to prevent mistakes } if textwindow >= 0 then { update WINMENU } SetMenuState(s_leave, s_leave, s_leave, s_enable, s_disable) else SetMenuState(s_disable, s_leave, s_leave, s_enable, s_disable); wind_update(END_UPDATE) { let AES rule } end end; { Consult OpenGraphicsWindow - they're similar } procedure OpenTextWindow; begin CalcWindowPositions; textwindow := wind_create(TextElements, MinX, MinY, MaxW, MaxH); if textwindow >= 0 then begin wind_update(BEG_UPDATE); wind_set(textwindow, WF_NAME, HiPtr(TextName[1]), LoPtr(TextName[1]), 0, 0); graf_growbox(TextX + TextW DIV 2 - 5, TextY + TextH DIV 2 - 5, 10, 10, TextX, TextY, TextW, TextH); wind_open(textwindow, TextX, TextY, TextW, TextH); SetMenuState(s_enable, s_disable, s_enable, s_leave, s_leave); wind_update(END_UPDATE) end; end; { Consult CloseGraphicsWindow - they're similar } procedure CloseTextWindow; var x, y, w, h : Integer; begin if textwindow >= 0 then begin wind_update(BEG_UPDATE); wind_get(textwindow, WF_CURRXYWH, x, y, w, h); graf_shrinkbox(x + w DIV 2 - 5, y + h DIV 2 - 5, 10, 10, x, y, w, h); wind_close(textwindow); wind_delete(textwindow); textwindow := -1; if grafwindow >= 0 then SetMenuState(s_leave, s_enable, s_disable, s_leave, s_leave) else SetMenuState(s_disable, s_enable, s_disable, s_leave, s_leave); wind_update(END_UPDATE) end end; procedure SelectGraphicsDemo; var x, y, w, h : Integer; { dialog border size } selected : Integer; { selected demo icon index } begin form_center(selection, x, y, w, h); { centre of screen } form_dial(FMD_START, 0, 0, 0, 0, x, y, w, h); { reserve RAM } form_dial(FMD_GROW, 0, 0, 0, 0, x, y, w, h); { grow box } objc_draw(selection, 0, $7FFF, x, y, w, h); { draw dialog box } selected := form_do(selection, -1); { do the dialog } form_dial(FMD_SHRINK, 0, 0, 0, 0, x, y, w, h); { shrink box } form_dial(FMD_FINISH, 0, 0, 0, 0, x, y, w, h); { release RAM } case selected of { set currect demo state : } BOXES : demo := BoxesDemo; LINES : demo := LinesDemo; ELLIPSES : demo := EllipsesDemo; PIES : demo := PiesDemo end; ForceGraphicsRedraw { make sure graphics window is redrawn } end; procedure RedrawWindow(handle, x0, y0, w0, h0 : Integer); var R1, R2 : Grect; { used for conversion purposes } x, y, w, h : Integer; { rectangle to redraw } a : Array_4; { used for conversion purposes } { Redraw text window } procedure DoTextRedraw; var x, y, w, h : Integer; { work area size } i : Integer; begin wind_get(textwindow, WF_WORKXYWH, x, y, w, h); i := CharBoxHeight; { y-offset to start writing at } while i <= (y + h - 1 + CharBoxHeight) do begin v_gtext(VDI_handle, x, y + i, TextLine); inc(i, CharBoxHeight) { one line written } end end; { Redraw graphics window } procedure DoGraphicsRedraw; begin case demo of BoxesDemo : DoBoxes; LinesDemo : DoLines; EllipsesDemo : DoEllipses; PiesDemo : DoPies end end; begin { RedrawWindow } R1.x := x0; R1.y := y0; R1.w := w0; R1.h := h0; { set up R1 } wind_update(BEG_UPDATE); { we're updating! } graf_mouse(M_OFF, NIL); { and want no mice around! } { get first rectangle from the window rectangle list : } wind_get(handle, WF_FIRSTXYWH, x, y, w, h); while (w <> 0) and (h <> 0) do begin { there IS a rectangle : } R2.x := x; R2.y := y; R2.w := w; R2.h := h; { set up R2 } if intersect(R1, R2) then begin { is area destroyed? } x := R2.x; y := R2.y; w := R2.w; h := R2.h; a[0] := x; a[1] := y; a[2] := x + w - 1; a[3] := y + h - 1; vs_clip(VDI_handle, 1, a); { set clipping } vsf_color(VDI_handle, White); { clear work area styles :} vsf_interior(VDI_handle, SOLID); { solid, white fill } v_bar(VDI_handle, a); { and clear messy rect. } if handle = textwindow then DoTextRedraw else DoGraphicsRedraw end; { one rectangle done, the rest to go! } wind_get(handle, WF_NEXTXYWH, x, y, w, h) end; graf_mouse(M_ON, NIL); { allright, let's see the mouse again } wind_update(END_UPDATE) { now we're through updating anyway...} end; procedure TopWindow(handle : Integer); begin wind_set(handle, WF_TOP, 0, 0, 0, 0) { set handle to top window } end; { The philosophy is : If window is fulled already, then set it to its old size and position, else full it } procedure FullWindow(handle : Integer); var x, y, w, h : Integer; { current size } x0, y0, w0, h0 : Integer; { max (fulled) size } x1, y1, w1, h1 : Integer; { old size } begin wind_get(handle, WF_CURRXYWH, x, y, w, h); wind_get(handle, WF_FULLXYWH, x0, y0, w0, h0); wind_get(handle, WF_PREVXYWH, x1, y1, w1, h1); if (x <> x0) or (y <> y0) or (w <> w0) or (h <> h0) then wind_set(handle, WF_CURRXYWH, x0, y0, w0, h0) { full it } else wind_set(handle, WF_CURRXYWH, x1, y1, w1, h1); { set to previous } if handle = grafwindow then ForceGraphicsRedraw end; procedure CloseWindow(handle : Integer); begin if handle = textwindow then CloseTextWindow else CloseGraphicsWindow end; procedure CloseTopWindow; var tophandle, dummy : Integer; begin wind_get(0, WF_TOP, tophandle, dummy, dummy, dummy); { get top window } CloseWindow(tophandle) { close it } end; { This could easily be made smarter as GEM puts all four window size parameters in the pipe, but for the sake of example... } procedure MoveWindow(handle, toX, toY : Integer); var x, y, w, h, dummy : Integer; { border area size } begin wind_get(handle, WF_CURRXYWH, x, y, w, h); { get x, y, w and h } graf_movebox(w, h, x, y, toX, toY); wind_set(handle, WF_CURRXYWH, toX, toY, w, h); { set new (x,y) } if handle = grafwindow then ForceGraphicsRedraw end; { As above, this also could be made smarter! } procedure SizeWindow(handle, newW, newH : Integer); var x, y, w, h : Integer; begin wind_get(handle, WF_CURRXYWH, x, y, w, h); { get x and y } wind_set(handle, WF_CURRXYWH, x, y, newW, newH); { set new w, h } if handle = grafwindow then ForceGraphicsRedraw end; begin { of unit DemoWindows } GrafName := ' HighSpeed graphics window '#00#00; { Note! } TextName := ' HighSpeed text window '#00#00; TextLine := 'The Quick Brown Fox Jumps Over The Very Lazy Dog - a GEM text window'#00; TextElements := NAME + CLOSER + FULLER + MOVER + SIZER; GrafElements := NAME + CLOSER + FULLER + MOVER + SIZER end. üByBy By"B9N€N^Nu{------------------------------------------------------------------------- HighSpeed Pascal GEM-interface demo program EVENT LIBRARY DEMO Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+} program Events; uses GemAES, GemVDI, GemDecl, GemInterface; const Clicks = 1; { number of mouse clicks to wait for } Mask = 3; { left and right mouse buttons } State = Mask; var key : Integer; { evnt_keybd key scan code } s, s1 : String; { multi-purpose } x, y : Integer; { mouse x,y coordinate } buttons : Integer; { mouse button state } keys : Integer; { keyboard state (ALT, CTRL etc)} times : Integer; { number of mouse clicks done } speed : Integer; { double click speed } begin if Init_Gem then begin Message('Welcome to the event library demonstration!'); Inform('We''re waiting for a keyboard event...'); key := evnt_keybd; { get scan code } Str(key, s); Message('The key''s scan code is : ' + s); Inform('Now we''re waiting for both mouse buttons...'); graf_mouse(M_ON, NIL); times := evnt_button(Clicks, Mask, State, x, y, buttons, keys); graf_mouse(M_OFF, NIL); str(x, s); str(y, s1); s := 'Mouse (x,y) = (' + s + ',' + s1 + ')'; Message(s); Message('Please use the mouse to click "Ok" now!'); Inform('Try to enter the Output window'); OpenOutputWindow; graf_mouse(M_ON, NIL); with OutputWindow do evnt_mouse(0, wX, wY, wW, wH, x, y, buttons, keys); graf_mouse(M_OFF, NIL); CloseOutputWindow; str(x, s); str(y, s1); s := 'You entered the work area at (x,y) = (' + s + ',' + s1 + ')'; Message(s); Inform('Hang on 1.234 seconds!'); evnt_timer(LoWord(1234), HiWord(1234)); Message('We''re back!'); Message('Now we''ll determine the mouse double click speed'); speed := evnt_dclick(0, 0); case speed of 0 : s := 'slow'; 1 : s := 'below medium'; 2 : s := 'medium'; 3 : s := 'above medium'; 4 : s := 'fast' else s := 'Should never come here!' end; Message('The double click speed is "' + s + '"'); Message('That''s all folks!'); Exit_Gem end end. End; End; Var DevBuf : TDevBuf; BEGIN Device('StrInOut',@StrInOutHandler,DevBuf); Assign(StrIn,'StrInOut'); Reset(StrIn); Assign(StrOut,'StrInOut'); Rewrite(StrOut); END.{------------------------------------------------------------------------- HighSpeed Pascal GEM-interface demo program FORM LIBRARY DEMO Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+} program Forms; uses GemAES, GemVDI, GemDecl, GemInterface; var x, y, w, h : Integer; { message box' centered position } smallX, smallY, smallW, smallH : Integer; { reduced x, y, w, h values } button : Integer; { return value from form_alert } msg : String; { form_alert message string } begin if Init_Gem then begin Message('Welcome to the Form library demonstration!'); Message('First, we''ll look at an alert box'); msg := '[2][ | Nice, isn''t it? ][ Yeah | Oh no! ]'#0; button := form_alert(1, msg[1]); { the "Yeah" button is default } Message('then at an error box'); button := form_error(1); { error code is 1 } Message('Why don''t we center this box on the screen?'); form_center(GemInterface.MessageBox, x, y, w, h); Inform(''); { redraw frame rectangle } Message('How about that!'); Message('Now, we''ll redo this dialog with the help'); Message('of form_dial and form_do'); Message('This message will be redone!'); { the OK button from the message box must be deselected before } { we activate the dialog box again; otherwise it will be drawn } { in a selected state. You can try to comment the following } { line out to see the difference : } GemInterface.MessageBox^[OKBUTTON].ob_state := NORMAL; smallX := x + w div 2; { set up small representation of } smallY := y + h div 2; { the message box } smallW := w div 2; smallH := h div 2; { first, we reserve memory space for the image of the border } { of the box : } form_dial(FMD_START, 0, 0, 0, 0, x, y, w, h); { then we draw a growing rectangle (the one from the desktop) } form_dial(FMD_GROW, smallX, smallY, smallW, smallH, x, y, w, h); { after that, we draw the dialog box on the screen } objc_draw(GemInterface.MessageBox, FRAMEBOX, $7FFF, 0, 0, 0, 0); { so now we're ready to do the dialog } graf_mouse(M_ON, NIL); button := form_do(GemInterface.MessageBox, -1); graf_mouse(M_OFF, NIL); { after that's completed, we draw the shrinking box } form_dial(FMD_SHRINK, smallX, smallY, smallW, smallH, x, y, w, h); { and restore the border area image from memory } form_dial(FMD_FINISH, 0, 0, 0, 0, x, y, w, h); Inform(''); { redraw frame rectangle } Message('That''s all folks!'); Exit_Gem end end. ńņóōõö÷ųłśūüżž’{------------------------------------------------------------------------- HighSpeed Pascal GEM-interface demo program FILE SELECTOR LIBRARY DEMO Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+} program FSEL; uses GemAES, GemVDI, GemDecl, GemInterface; var path : string; { the path and file mask } name : string; { the name } title : string; { title for fsel_exinput } result : string; { resulting file name } ExitValue : integer; { fsel_ exit value (OK/CANCEL) } procedure Decompose; begin path[0] := #255; path[0] := chr(pos(#0, path)); name[0] := #255; name[0] := chr(pos(#0, name)); { turn the "C" strings into Pascal strings ^^^ } { the strings above, however, still holds the #0 in the end } { so before you use them, you have to strip the last char, } { i.e. #0, off. This isn't done here, as we intend to use } { both path and name "as is" later on. } result := path; while result[length(result)] <> '\' { remove file } do result[0] := chr(length(result)-1); { spec. } result := result + copy(name, 1, pos(#0, name) - 1); if ExitValue = 0 then result := result + ' "cancel"'; Inform(''); { clear message box } Message(result) end; begin { main } if Init_Gem then begin Message('Welcome to the File Selector library demo!'); Inform('First, the simple one: Set your own path and name'); path := '\*.*'#0; { default path } name := #0; { no name } graf_mouse(M_ON, NIL); fsel_input(path[1], name[1], ExitValue); { do fsel } graf_mouse(M_OFF, NIL); Decompose; { write result of fsel } Inform('Now reusing your definitions of path and name...'); graf_mouse(M_ON, NIL); fsel_input(path[1], name[1], ExitValue); graf_mouse(M_OFF, NIL); Decompose; if GemDecl.global[0] >= $140 then begin { TOS 1.4 or higher } Inform('We can set our own header, like this :'); title := 'HighSpeed Pascal!'#0; graf_mouse(M_ON, NIL); fsel_exinput(path[1], name[1], ExitValue, title[1]); graf_mouse(M_OFF, NIL); Decompose end else begin Inform(''); { clear message box } Message('Can''t show fsel_exinput with this TOS version!') end; Inform(''); Message('That''s all folks!'); Exit_Gem end end. _GRAPH UNI @)NŅrLIBMAKERPAS @)]aLIBMAKERTTP @)_PRINTER UNI @)b†STPASCALDOC @)cwSTPASCALUNI @)gš³UTILUNITPAS @)~: DEFINITION MODULE GEMDEMO; CONST mainmenu= 0; slctdemo= 1; aboutbox= 2; aboutok= 4; END GEMDEMO. DEFGHIJKLM’’OPQRSTUVWXYZ[\’’^’’`a’’’’def’’hijklmnopqrstuvwxyz{|}’’’’’’’’ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·’’’’ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööMAINMENUDESKMENUQUITMENUWINMENUSLCTDEMOELLIPSESPIESSESABOUTBARLINESARBOXESARWINCLOSETXTCLOSETXTOPENGRAOPENGRASELECGRACLOSEQUITBARABOUTBOXABOUTOKööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööCONST MAINMENU = 0 ; DESKMENU = 3 ; QUITMENU = 5 ; WINMENU = 4 ; SLCTDEMO = 1 ; ELLIPSES = 3 ; PIES = 2 ; ABOUTBAR = 8 ; LINES = 4 ; BOXES = 5 ; WINCLOSE = 18 ; TXTCLOSE = 21 ; TXTOPEN = 20 ; GRAOPEN = 23 ; GRASELEC = 25 ; GRACLOSE = 24 ; QUITBAR = 27 ; ABOUTBOX = 2 ; ABOUTOK = 4 ; öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö{---------------------------------------------------------------------- HighSpeed Pascal GEM Demo Program version 1.24a Copyright (c) 1990 D-House I Aps Transformervej 29 DK-2730 Herlev Denmark Phone (+45) 44 53 99 84 Fax (+45) 44 53 95 44 Programmed by Martin Eskildsen ----------------------------------------------------------------------} {$D+} program GEM_Demo; uses GemDecl, GemAES, GemVDI, DemoInterface, DemoMenu, DemoWindows, DemoGraphs; { Wait for events to be present and take appropriate action } { pipe[3] holds the handle in case of window events } procedure Dispatch; var pipe : array [0..15] of integer; { message pipe } begin repeat evnt_mesag(pipe); { wait for an event... } case pipe[0] of { take action } MN_SELECTED : HandleMenu (pipe[3], pipe[4]); WM_REDRAW : RedrawWindow (pipe[3], pipe[4], pipe[5], pipe[6], pipe[7]); WM_TOPPED : TopWindow (pipe[3]); WM_CLOSED : CloseWindow (pipe[3]); WM_FULLED : FullWindow (pipe[3]); WM_SIZED : SizeWindow (pipe[3], pipe[6], pipe[7]); WM_MOVED : MoveWindow (pipe[3], pipe[4], pipe[5]) end until quit; CloseTopWindow; { make sure, the windows are closed } CloseTopWindow end; begin { main program } if Init_Gem then begin { initialize } graf_mouse(ARROW, NIL); { arrow mouse form } Init_Resource; { load and set up resources } MakeGraphData; { set up data for graphics demo } Dispatch; { handle the events until quit } End_Resource; { remove resources } End_Gem { end GEM usage } end else FatalError('Could not initialize GEM properly!') end. `r[dDOS ĀP–)DSISYS ųP– BILINFO :R–cCONFIG SYS †LŅ?€AUTOEXECBAT 5JŖ\ANSI SYS `r–ŽCOUNTRY SYS `r˜,DISPLAY SYS `rž,DRIVER SYS `r¤’EMM SYS ÖØé „5RAMTYPE SYS r/^¬SREMM SYS j›a®ü9FLYT Ų˜öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö  ō l„„$„ l ø' Ä Desk Windows Quit About HighSpeed Demo... ------------------------- Desk Accessory 1 Desk Accessory 2 Desk Accessory 3 Desk Accessory 4 Desk Accessory 5 Desk Accessory 6 --- Current : Close --- Text window : Open Close --- Graphics window : Open Close Select demo... Let's do it! Select demo type by clicking icon :PIESELLIPSESLINESBOXESHighSpeed Pascal GEM demoThis simple demo program demonstrates how GEMfunctions are interfaced with HighSpeed PascalOk’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’€€<€Ć€€€@€€Ąąšųųš€ą@€€Ć<’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’8’’€ž’’’’’ž’’8’’’’’f’|?’‡€’`€’’’f€€@@@@’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’Ą @  €0š!Ą"šD H0šĄ£šĢų°ššĻ?ąšĄ’€’’’’’’’š’Ž’€įĄĄ˜8?Ą†?’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’€€€ų?€‡ųX!€‡’ĘØ%€‡üEX!€‡śFØ!€€”Gų)€€Ą#€€ˆ@1€€„@!€€Ā@%€€”A’ż€€Į’ł€€’Ą!’€!-!’š’ų) ŖØ%’š ŖØ! ŖØ+’ų)!5!?„Pš0") ,õ@"< <ž0") Ō 0") Ėļ€$’’ZZ’’’’ $’’’’ + ’’’’ 4P’ ’’’’; ’’’’U ’’’’o ’’’’„ ’’’’™’’’’®’’’’Ć’’’’Ų’ ’’’’ķ’’’’’’’’’’’’2’’’’I’’’’`’’’’w’’’’Ž’’’’„’’’’’ ¼’’%’’’’ ō!’’’’ l’’’’ Ž’’’’ ° ’’’’5 Ņ’’5’’’’ ’’’’$-’’’’R.’’’’'(  ° @ `tś3CONFIG Evś4 öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö{------------------------------------------------------------------------- HighSpeed Pascal GEM-interface demo program INTERFACE UNIT Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+} unit GemInterface; INTERFACE uses GemDecl, GemVDI, GemAES, Bios; const { object tree indices for message box } FRAMEBOX = 0; { white, framing rectangle } MSGBOX = 1; { white box containing message } MSGSTR = 2; { the message string (C format) } OKBUTTON = 3; { the "Ok" button } type C_String = packed array [0..255] of char; String_Ptr = ^C_string; Ob_Type = G_BOX..G_TITLE; Spec_Info = RECORD CASE Ob_Type OF G_Box, G_IBox, G_BoxChar : (thick : integer; color : integer); G_Text, G_BoxText, { these fields should } G_FText, { of course be extended } G_FBoxText, { but as the only fields } G_Image, { needed are those above } G_UserDef, { and G_string, this } G_Button, { structure is perfectly } G_Icon, { suitable } G_String, G_Title : (str : String_Ptr) END; Object = RECORD ob_next : Integer; { next object in tree } ob_head : Integer; { parent object } ob_tail : Integer; { next parent on level } ob_type : integer; { object type } ob_flags : integer; { flags } ob_state : integer; { state } ob_spec : Spec_Info; { color/pointer etc. } ob_x : integer; { obj. rectangle size } ob_y : integer; { and position relative } ob_w : integer; { to parent object } ob_h : integer END; Tree = ARRAY [ 0..199 ] OF Object; { the object tree } Tree_Ptr = ^Tree; { pointer to the tree } var workIn : IntIn_Array; { v_opnvwk input parameters } workOut : WorkOut_Array; { v_opnvwk output parameters } AES_handle : Integer; { application id } VDI_handle : Integer; { graphics/VDI handle } CharDefs : record { default character definitions } h_char, w_char, h_box, w_box : integer end; MinX : integer; { desktop area } MinY : integer; MaxX : integer; MaxY : integer; MaxColors : integer; OutputWindow : record handle : integer; { wind_create return } bX, bY, bW, bH : integer; { border area } wX, wY, wW, wH : integer; { work area } midX, midY : integer { work area middle } end; MessageBox : Tree_Ptr; { the message box } function Init_Gem : boolean; { set up GEM (appl, workstation etc.) } procedure Exit_Gem; { complete GEM usage } procedure Message(s : string); { write message, wait for Ok } procedure Inform(s : string); { write message, don't wait for Ok } procedure ErrorCloseDown(s : string); { fatal error, abort program } function MaxW : integer; { max. width of desktop area } function MaxH : integer; { max. height of desktop area } function Binary(s : string) : integer; { convert s into a binary value } procedure OpenOutputWindow; { open predefined output window } procedure CloseOutputWindow; { close output window } procedure ClearOutputWindow; { clear output window } IMPLEMENTATION var WindowName : string; { name of output window (must be global)} { The below proc sets up the message box shown on top of the screen by creating an object tree with the following objects : FRAMEBOX - the white box containing the message and the Ok button MSGBOX - a white box containing the message to output MSGSTR - the message string to output (C format) OKBUTTON - the Ok button The above fields construct a level-tree as shown below : FRAMEBOX | | v MSGBOX ----------> OKBUTTON | | v MSGSTR We havn't shown all pointers involved, but only the ones relevant for clarifying the tree structure. } procedure SetUpMessageBox; begin getmem(MessageBox, 4 * SizeOf(Object)); { get memory for 4 objects } with MessageBox^[FRAMEBOX] do begin { box } ob_w := 50 * CharDefs.w_char; { 50 * 4.5 chars wide box } ob_h := 4 * CharDefs.h_char + CharDefs.h_char DIV 2; ob_x := (MaxX - MinX - ob_w) div 2; { center on X axis } ob_y := MinY + CharDefs.h_char div 2; { a bit down on the Y axis } ob_next := -1; { these three fields must be set to -1, as the } ob_head := -1; { objc_add procedure used later will get con- } ob_tail := -1; { fused otherwise! } ob_type := G_BOX; { this object is a box } ob_flags := NONE; { no flags are set } ob_state := OUTLINED; { it's outlined } ob_spec.color := WHITE; { white background } MinY := ob_y + ob_h + 4 { protect message box } end; with MessageBox^[MSGBOX] do begin { white box containing message string } ob_x := 0; { rel. position to parent (FRAMEBOX) = upper } ob_y := 0; { left corner } ob_w := 50 * CharDefs.w_char; { 50 * 2 chars wide } ob_h := 2 * CharDefs.h_char; ob_next := -1; ob_head := -1; ob_tail := -1; ob_type := G_BOX; ob_flags := NONE; ob_state := NORMAL; ob_spec.color := WHITE end; objc_add(MessageBox, FRAMEBOX, MSGBOX); { the objc_add makes the MSGBOX a child of the FRAMEBOX } with MessageBox^[MSGSTR] do begin { message string } ob_x := CharDefs.w_char div 2; ob_y := 0; ob_w := 50 * CharDefs.w_char; ob_h := 2 * CharDefs.h_char; ob_next := -1; ob_head := -1; ob_tail := -1; ob_type := G_STRING; ob_flags := NONE; ob_state := NORMAL; getmem(ob_spec.str, 50); ob_spec.str^[0] := #0 end; objc_add(MessageBox, MSGBOX, MSGSTR); { objc_add makes the MSGSTR a child of MSGBOX, which is again } { a child of the FRAMEBOX } with MessageBox^[OKBUTTON] do begin { OK button } ob_x := 40 * CharDefs.w_char; ob_y := 3 * CharDefs.h_char; ob_w := 8 * CharDefs.w_char; ob_h := CharDefs.h_char; ob_next := -1; ob_head := -1; ob_tail := -1; ob_type := G_BUTTON; ob_flags := SELECTABLE + DEFAULT + F_EXIT + LASTOB; ob_state := NORMAL; getmem(ob_spec.str, 2 + 1); { reserve space for the string } ob_spec.str^[0] := 'O'; { make the string } ob_spec.str^[1] := 'k'; ob_spec.str^[2] := #0 end; objc_add(MessageBox, FRAMEBOX, OKBUTTON); { objc_add makes the OKBUTTON a child of the FRAMEBOX } objc_draw(MessageBox, FRAMEBOX, $7FFF, 0, 0, 0, 0) { objc_draw draws the FRAMEBOX with all levels ($7FFF = more levels than a 520 ST would have room for in its memory - when using a such big number, we make 101% sure that all of the object tree really IS drawn). The four 0's tell that no clipping should be used } end; function Init_Gem : boolean; var i : integer; s : string; begin AES_handle := appl_init; { get AES id } if AES_handle >= 0 then begin for i := 0 to 9 do WorkIn[i] := 1; { set some defaults } WorkIn[10] := 2; { use Raster Coordinates (RC) } with CharDefs do { get a VDI handle and font information } VDI_handle := graf_handle(w_char, h_char, w_box, h_box); v_opnvwk(WorkIn, VDI_handle, WorkOut); { open virtual workstation } graf_mouse(ARROW, NIL); { make mouse cursor an arrow } { now we determine the available desktop area at our disposal } wind_get(0, WF_FULLXYWH, MinX, MinY, MaxX, MaxY); { the 0 makes wind_get return FULLXYWH information about the desktop } inc(MaxX, MinX); inc(MaxY, MinY); { adjust MaxX and MaxY } if MaxX - MinX < 51 * CharDefs.w_char then begin s := '[3][ | The demo won''t run on screens | with less than 51 characters | per line ][ Sorry ]'#00; i := form_alert(1, s[1]); Exit_Gem; halt(0) end; if GetRez < 2 then begin s := '[1][|The demo looks best in |high resolution, but can |run in medium too][ Ok ]'#00; i := form_alert(1, s[1]) end; MaxColors := WorkOut[39]; graf_mouse(M_OFF, NIL); Init_Gem := TRUE end else Init_Gem := FALSE end; procedure Exit_Gem; begin if MessageBox <> NIL { remove the message box } then FreeMem(MessageBox, 4 * SizeOf(Object)); graf_mouse(M_ON, NIL); v_clsvwk(VDI_handle); { close virtual workstation } appl_exit { end AES usage } end; procedure Message(s : string); var SelectedItem : Integer; { the item that the user selected } begin { (here, it equals OKBUTTON) } if MessageBox = NIL then SetUpMessageBox; MessageBox^[OKBUTTON].ob_state := NORMAL; { deselect button } objc_draw(MessageBox, OKBUTTON, $7FFF, 0, 0, 0, 0); { redraw button } s := copy(s, 1, 49); { truncate string } s := s + #0; { make "C" string } move(s[1], MessageBox^[MSGSTR].ob_spec.str^, length(s)); { move it } objc_draw(MessageBox, MSGBOX, $7FFF, 0, 0, 0, 0); { draw message } graf_mouse(M_ON, NIL); SelectedItem := form_do(MessageBox, 0); { wait for "Ok" } graf_mouse(M_OFF, NIL) end; procedure Inform(s : string); var SelectedItem : integer; begin if MessageBox = NIL then SetUpMessageBox; objc_draw(MessageBox, FRAMEBOX, 0, 0, 0, 0, 0); { draw white box } s := copy(s, 1, 49) + #0; move(s[1], MessageBox^[MSGSTR].ob_spec.str^, length(s)); objc_draw(MessageBox, MSGBOX, $7FFF, 0, 0, 0, 0) { draw all of message (box and str) } end; procedure ErrorCloseDown(s : string); var i : integer; begin s := '[3][ ' + s + '][ Abort ]'#00; graf_mouse(M_OFF, NIL); i := form_alert(1, s[1]); graf_mouse(M_ON, NIL); Exit_Gem; halt(0) end; function MaxW : integer; begin MaxW := MaxX - MinX end; function MaxH : integer; begin MaxH := MaxY - MinY end; function Binary(s : string) : integer; var n, i : integer; begin n := 0; for i := 1 to length(s) do if s[i] in ['0', '1'] then n := n*2 + ord(s[i]) - ord('0'); Binary := n end; procedure OpenOutputWindow; var p : Array_4; begin with OutputWindow do begin bX := MinX + 10; bY := MinY + 10; bW := MaxW - 20; bH := MaxH - 20; handle := wind_create(NAME, bX, bY, bW, bH); wind_set(handle, WF_NAME, HiPtr(WindowName[1]), LoPtr(WindowName[1]), 0, 0); wind_open(handle, bX, bY, bW, bH); wind_calc(WC_WORK, NAME, bX, bY, bW, bH, wX, wY, wW, wH); midX := wX + wW div 2; midY := wY + wH div 2 end; ClearOutputWindow end; procedure CloseOutputWindow; begin with OutputWindow do begin wind_close(handle); wind_delete(handle) end end; procedure ClearOutputWindow; var p : Array_4; a : Array_5; begin vqf_attributes(VDI_handle, a); with OutputWindow do begin p[0] := wX; p[1] := wY; p[2] := wX + wW - 1; p[3] := wY + wH - 1; vs_clip(VDI_handle, 1, p); vsf_color(VDI_handle, White); vsf_interior(VDI_handle, Solid); vr_recfl(VDI_handle, p) end; vsf_color(VDI_handle, a[1]); vsf_interior(VDI_handle, a[0]) end; begin { of unit } MessageBox := NIL; { no message box made yet } WindowName := ' Output '#00#00 end. ’’’’Ź’’’’’’’’’’’’’’’’’’’’’’6’’’’’’789:;<=>?@ABCDEF’’HIJ’’’’MNO’’’’WX’’Z[\]^_’’ab’’’’efghijklmnopqrstuvwxy’’{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’’’”•œ’’žŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“’’¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŪÕĢ’’’’Ļ’’Ń’’’’’’’’Ö×ŲŁŚŻÜCß’’ąįāćäåęēé’’źėģķīļšńņóōõö÷ųłśūüżž’öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö{------------------------------------------------------------------------- HighSpeed Pascal GEM-interface demo program GRAF DEMO Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+} program Graf_Demo; uses GemInterface, GemDecl, GemAES, GemVDI; const MinWidth = 0; { smallest width of rubber box } MinHeight = 0; { smallest height of rubber box } var mouseButton : integer; { mouse button state } mouseX : integer; { mouse X pos } mouseY : integer; { mouse Y pos } KbdState : integer; { kbd CTRL, SHIFT, ALT state } endW : integer; { end width of rubber box } endH : integer; { end height of rubber box } { Set up our own mouse shape } procedure SetOurOwnMouse; var shape : Array_37; { structure holding the mouse shape } begin shape[ 0] := 0; { hot spot = (0, 0) } shape[ 1] := 0; shape[ 2] := 1; { must be so! } shape[ 3] := Black; { use black for mouse } shape[ 4] := Black; { use black for mask } shape[ 5] := Binary('00000000 00000000'); { mouse shape : } shape[ 6] := Binary('01110111 00011100'); { you can change it } shape[ 7] := Binary('00100010 00001000'); { yourself if you want } shape[ 8] := Binary('00100010 00001000'); { 1 = set pixel ; } shape[ 9] := Binary('00100010 00001000'); { 0 = clear pixel } shape[10] := Binary('00100010 00001000'); shape[11] := Binary('00100010 00001000'); shape[12] := Binary('00111110 00001000'); shape[13] := Binary('00100010 00001000'); shape[14] := Binary('00100010 00001000'); shape[15] := Binary('00100010 00001000'); shape[16] := Binary('00100010 00001000'); shape[17] := Binary('00100010 00001000'); shape[18] := Binary('00100010 00001000'); shape[19] := Binary('01110111 00011100'); shape[20] := Binary('00000000 00000000'); shape[21] := Binary('00000000 00000000'); { the mask : } shape[22] := Binary('00000000 00000000'); shape[23] := Binary('00000000 00000000'); shape[24] := Binary('00000000 00000000'); shape[25] := Binary('00000000 00000000'); shape[26] := Binary('00000000 00000000'); shape[27] := Binary('00000000 00000000'); shape[28] := Binary('00000000 00000000'); shape[29] := Binary('00000000 00000000'); shape[30] := Binary('00000000 00000000'); shape[31] := Binary('00000000 00000000'); shape[32] := Binary('00000000 00000000'); shape[33] := Binary('00000000 00000000'); shape[34] := Binary('00000000 00000000'); shape[35] := Binary('00000000 00000000'); shape[36] := Binary('00000000 00000000'); graf_mouse(USER_DEF, @shape) { set the shape! } end; procedure WaitForLeftButton; begin repeat graf_mkstate(mouseX, mouseY, mouseButton, KbdState) until mouseButton = 1 end; { Move (drag) a rectangle within another rectangle } procedure MoveRectangle; var x, y : integer; { moved rectangle's end x,y } begin OpenOutputWindow; Inform('Press left mouse button :'); graf_mouse(M_ON, NIL); WaitForLeftButton; graf_mouse(M_OFF, NIL); Inform('Move the small rectangle :'); graf_mouse(M_ON, NIL); with OutputWindow do graf_dragbox(50, 20, { small rect w, h } MouseX, MouseY, { start x, y } wX, wY, { big rect x, y } wW, wH, { big rect w, h } x, y); { small's end x, y } graf_mouse(M_OFF, NIL); CloseOutputWindow end; begin { main } if Init_Gem then begin Message('Welcome to the Graf library demonstration!'); Message('You know the growing box?'); graf_growbox( MinX + (MaxW - 20) div 2, { start x } MinY + (MaxH - 20) div 2, { start y } 40, 40, { start w, h } MinX, MinY, MaxW, MaxH ); { end x, y, w, h } Message('We can shrink it too...'); graf_shrinkbox( MinX + (MaxW - 20) div 2, MinY + (MaxH - 20) div 2, 40, 40, MinX, MinY, MaxW, MaxH ); { note that the parameter order is the same as graf_growbox } Message('and move boxes around the screen fastly...'); graf_movebox(30, 30, { w, h } MinX, MinY, { start x,y } MaxX - 50, MaxY - 50); { end x,y } Message('We can change the appearance of the mouse...'); graf_mouse(POINT_HAND, NIL); Message('and set our own...'); SetOurOwnMouse; Message('but we like the familiar arrow more, don''t we?'); graf_mouse(ARROW, NIL); Inform('Let''s do a rubber box :'); graf_mouse(M_ON, NIL); { turn mouse on } WaitForLeftButton; graf_rubbox(mouseX, mouseY, MinWidth, MinHeight, endW, endH); graf_mouse(M_OFF, NIL); { turn mouse off } MoveRectangle; Message('That''s all folks!'); Exit_Gem end end. BORLAND TBD ”C'SC5 ļq"/HSP1 żY9›HSP2 6Z9{------------------------------------------------------------------------- HighSpeed Pascal GEM-interface demo program VDI GRAPHICS DEMO Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+} program VDI_graphics; uses GemInterface, GemDecl, GemVDI, GemAES; var i : integer; { FOR index } j : integer; { FOR index } p : PtsIn_Array; { v_pline coordinate array } a : Array_4; { v_bar coordinate array } y : integer; { y coordinates } begin if Init_Gem then begin Message('Welcome to the VDI graphics demonstration!'); OpenOutputWindow; Message('First, we''ll look at some lines...'); vsl_color(VDI_handle, Black); { black lines } vsl_width(VDI_handle, 1); { line width := 1 pixel } with OutputWindow do begin p[0] := wX + 5; { set line's left X } p[2] := wX + wW - 10; { and right X } y := wY + 5 { first line's Y } end; vsl_udsty(VDI_handle, Binary('1100110011001100')); { set user line style } for i := Solid to DashDotDot + 1 do begin { let's see all styles } vsl_type(VDI_handle, i); { set current style } p[1] := y; p[3] := y; { set line start, end Y } v_pline(VDI_handle, 2, p); { draw the line, 2 coords } inc(y, 10) { new y } end; vsl_type(VDI_handle, Solid); { set solid line style } for i := 0 to 4 do begin { let's look at line widths } inc(y, 10); vsl_width(VDI_handle, 1 + i * 2); { set line width (should be odd)} p[1] := y; p[3] := y; v_pline(VDI_handle, 2, p) end; Message('markers...'); ClearOutputWindow; for i := 1 to 6 do p[(i-1)*2] := OutputWindow.wX + i * 80; { set up v_pmarker } p[1] := OutputWindow.wY + 20; { coordinates } vsm_height(VDI_handle, 38); { set marker height } for i := 1 to 6 do begin for j := 1 to 5 do p[j*2+1] := p[1]; { set same y coord } vsm_type(VDI_handle, i); { set marker type } v_pmarker(VDI_handle, 6, p); { make the markers } inc(p[1], 40) { update y pos } end; Message('then at some arcs...'); vsl_width(VDI_handle, 1); { line width := 1 } ClearOutputWindow; with OutputWindow do y := wY + wH div 2; { window mid Y } for i := 0 to 5 do v_arc(VDI_handle, OutputWindow.wX + 50 + i * 100, y, { x, y } 45, { radius } 0, (i + 1) * 600); { start, end angle } Message('not to mention the pies...'); ClearOutputWindow; vsf_interior(VDI_handle, PATTERN); { use a pattern fill } vsf_color(VDI_handle, BLACK); { make set points black } for i := 0 to 5 do begin vsf_style(VDI_handle, i + 1); { set fill style } v_pieslice(VDI_handle, OutputWindow.wX + 50 + i * 100, y, 45, 0, (i + 1) * 600) { parameters same as for v_arc } end; { above } Message('circles...'); ClearOutputWindow; for i := 0 to 5 do begin vsf_style(VDI_handle, i + 1); v_circle(VDI_handle, OutputWindow.wX + 50 + i * 100, y, { x, y } (i+1) * 8) { radius } end; Message('and bars.'); ClearOutputWindow; for i := 0 to 19 do begin vsf_style(VDI_handle, i + 1); a[0] := OutputWindow.wX + 5 + i * 30; a[2] := a[0] + 25; a[1] := OutputWindow.wY + OutputWindow.wH - 5; a[3] := a[1] - (i + 1) * 10; v_bar(VDI_handle, a) end; Message('That''s all folks!'); CloseOutputWindow; Exit_Gem end end. 6: *tę"\ ,$"Ün  & $D8. 2 T: N6 Z  ,˜   $TĪśö(ENVSTR 6’ īśŲ6ŠśĢGööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööprogram HelloWld; Uses GemAES; var Button,n: integer; CStr: String[50]; begin n:=appl_init; if n<>-1 then begin CStr:='[3][ Hello| World][ Ok |Cancel]'#0; Button:=form_alert(1,CStr[1]); appl_exit; write('Thanks for pressing: '); if Button=1 then writeln('Ok') else writeln('Cancel'); end; end. öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö MAINMENUDESK_TUEXAMPL_TFILE_TTABOUT_IITEM2IITEM1IITEM3IITEM4IQUITI if VdiHandle <> 0 then begin if AppFlag then begin OpenWindow; repeat EventLoop until QuitFlag; end else begin deskId:=menu_register(appl_id,ACCtitle[1]); repeat EventLoop until FALSE; {Stay here forever} end; v_clsvwk(VdiHandle); end; appl_exit; end end. ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööCONST MAINMENU = 0 ; DESK_T = 3 ; EXAMPL_T = 4 ; FILE_T = 5 ; ABOUT_I = 8 ; ITEM2 = 18 ; ITEM1 = 17 ; ITEM3 = 20 ; ITEM4 = 21 ; QUIT = 23 ; CONFIG SYS †LŅ?€AUTOEXECBAT 5JŖ\ANSI SYS `r–ŽCOUNTRY SYS `r˜,DISPLAY SYS `rž,DRIVER SYS `r¤’EMM SYS ÖØé „5RAMTYPE SYS r/^¬SREMM SYS j›a®ü9FLYT Ų˜öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö{------------------------------------------------------------------------- HighSpeed Pascal GEM-interface demo program MENU DEMO Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+} program Menu_Demo; uses GemInterface, GemAES, GemVDI; {$I MENUS.H} var RSC_name : string; { string containing RSC file's name } MenuTree : Tree_Ptr; { object tree containing menu } NewText : string; { string containing an item's new text } { Let the user move around with the mouse and select menu items } procedure MoveAround; const Title = 3; { pipe index holding menu title no. } Item = 4; { pipe index holding menu item no. } var pipe : array [ 0..15 ] of integer; { message pipe } TitleStr : string; { text describing menu title selected } ItemStr : string; { item } done : boolean; { done = TRUE = completed moving } begin graf_mouse(M_ON, NIL); { show the cursor (mouse) } done := FALSE; repeat evnt_mesag(pipe); { wait for an event } if pipe[0] = MN_SELECTED then begin { if it's a menu event : } case pipe[Title] of DESK_T : begin { Desk title } TitleStr := 'Desk'; case pipe[Item] of ABOUT_I : ItemStr := 'About' { about item } end end; FILE_T : begin { File title } TitleStr := 'File'; case pipe[Item] of QUIT : ItemStr := 'Quit' { quit item } end end; EXAMPL_T : begin { Examples title } TitleStr := 'Examples'; case pipe[Item] of ITEM1 : ItemStr := 'Item 1'; { item 1 } ITEM2 : ItemStr := 'Item 2'; { item 2 } ITEM3 : ItemStr := 'Item 3'; { item 3 } ITEM4 : ItemStr := 'Item 4' { item 4 } end end; end { case } end; done := (pipe[Title] = FILE_T) and (pipe[Item] = QUIT); graf_mouse(M_OFF, NIL); { hide mouse } if not done then Inform('You selected ' + TitleStr + ', ' + ItemStr); menu_tnormal(MenuTree, pipe[Title], 1); { reset title } graf_mouse(M_ON, NIL) { show mouse } until done; graf_mouse(M_OFF, NIL) { hide mouse } end; begin { main } if Init_Gem then begin Message('Welcome to the Menu library demonstration!'); Message('First, we''ll have to load the MENUS.RSC file'); RSC_name := 'MENUS.RSC'#00; { note the #00 } rsrc_load(RSC_name[1]); { try to load } if GemError = 0 then begin RSC_name := 'GEMDEMO\MENUS.RSC'#00; rsrc_load(RSC_name[1]); if GemError = 0 then ErrorCloseDown('MENUS.RSC could not be found'); end; Message('Then determine the address of the menu tree'); rsrc_gaddr(R_TREE, MAINMENU, MenuTree); { get addr of main menu } Message('So now we''re ready to draw the menu'); menu_bar(MenuTree, 1); { 1 = draw menu } Inform ('Now you''re on your own! File item Quit completes'); MoveAround; Message('Hope you noticed the Examples menu layout?'); Inform ('We''ll modify it slightly now... Examine!'); menu_icheck(MenuTree, ITEM1, 0); { clear } menu_icheck(MenuTree, ITEM4, 1); { set } menu_ienable(MenuTree, ITEM2, 0); { disable } menu_ienable(MenuTree, ITEM3, 1); { enable } NewText := ' Great!'#0; { note #0 } menu_text(MenuTree, ITEM1, NewText[1]); { set new text } MoveAround; Message('That''s all folks!'); menu_bar(MenuTree, 0); { clear menu bar line } rsrc_free; { release resource file memory } Exit_Gem end end. emo; quit := FALSE; textwindow := -1; grafwindow := -1 { no open windows } end. PIAUTO AUT Diä6ßTEST BAT sś0TEE 4sś1 DD `tś3CONFIG Evś4 $$$$$$$$dh Desk Examples File Menu demo -------------------- Desk Accessory 1 Desk Accessory 2 Desk Accessory 3 Desk Accessory 4 Desk Accessory 5 Desk Accessory 6 Item 1 Item 2 ---------- Item 3 Item 4 Quit ’’PP’’’’ $’’’’ + ’’’’ 6P’ ’’’’= ’’’’K ’’’’` ’’’’u ’’’’Š’’’’Ÿ’’’’“’’’’É’ ’’’’Ž ’’’’é ’’’’ō ’’’’’ ’’’’  ’ ’’’’  ${------------------------------------------------------------------------- HighSpeed Pascal GEM-interface demo program RASTER DEMO Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+} program Rasters; uses GemAES, GemVDI, GemDecl, GemInterface, Bios; const Nsteps = 16; { number of steps, the circle is divided into } mode = S_ONLY; { vro_cpyfm copy mode - toy around with it } var sourceMFDB : MFDB; { source MFDB - where to get image from } destMFDB : MFDB; { destination - where to put image } Rectangles : Array_8; { source and destination rectangles } BoxRect : GRect; { image coordinates } i : Integer; { FOR index } x, y : LongInt; { destination x and y coordinates } angle : real; { current angle in circle } stepsize : real; { stepsize for circle } radius : Integer; { circle's radius } colors : Array_2; { colors used for vrt_cpyfm } { Draw a line from (x,y) to (x1, y1) } procedure Line(x, y, x1, y1 : Integer); var p : ptsin_array; { coordinate sets } begin p[0] := x; p[1] := y; p[2] := x1; p[3] := y1; v_pline(VDI_handle, 2, p) { 2 = number of coordinate sets } end; { Draw a box with the coordinates given by BoxRect and draw a polymarker in it } procedure Box; var p : ptsin_array; begin vsm_type(VDI_handle, 3); { star shape } vsm_color(VDI_handle, BLACK); { black } vsm_height(VDI_handle, BoxRect.h); { height = box's height } with BoxRect do begin Line(x, y, x + w - 1, y); { draw the borders } Line(x+w-1, y, x+w-1, y+h-1); Line(x+w-1, y+h-1, x, y+h-1); Line(x, y+h-1, x, y); p[0] := x + w div 2; { set up polymarker } p[1] := y + h div 2; v_pmarker(VDI_handle, 1, p) { set the marker } end end; begin if Init_Gem then begin Message('Welcome to the raster demonstration!'); OpenOutputWindow; Message('First, we''ll draw a rectangle...'); with OutputWindow, Boxrect do begin x := midX - 30; y := midY - 30; w := 2*30; h := 2*30; Box end; Inform('By the way, this is a contour fill...'); vsf_color(VDI_handle, BLACK); { set points are black } vsf_interior(VDI_handle, HATCH); { use cross-hatch... } vsf_style(VDI_handle, 3); { ... type 3 } with OutputWindow do v_contourfill(VDI_handle, wX, wY, BLACK); { fill the area containing the point (wX, wY) until the color black } { is met (the border color) } Message('Now we''ll make some opaque copies of that rect...'); with sourceMFDB do begin mptr := NIL; { use screen memory } formwidth := BoxRect.w; { width of image } formheight := BoxRect.h; { height of image } widthword := BoxRect.w div 16; { number of entire words } formatflag := 0; { device specific form } memplanes := 1 { two colors (monochrome) } end; destMFDB := sourceMFDB; { destination = source } Rectangles[0] := BoxRect.x; { source rectangle = } Rectangles[1] := BoxRect.y; { two diagonally opposite corner} Rectangles[2] := BoxRect.x + BoxRect.w - 1; { points } Rectangles[3] := BoxRect.y + BoxRect.h - 1; { we''ll form a circle with the help of vro_cpyfm, so we need a bit } { of geometry in order to calculate where to put the images : } angle := 0.0; { circle angle = 0.0 } stepsize := (2*pi) / Nsteps; { circle step size } radius := BoxRect.w + BoxRect.w div 2; { circle radius } for i := 0 to Nsteps do begin x := OutputWindow.midX + round(cos(angle) * radius) - BoxRect.w div 2; y := OutputWindow.midY + round(sin(angle) * radius) - BoxRect.h div 2; angle := angle + stepsize; Rectangles[4] := x; { destination rectangle } Rectangles[5] := y; Rectangles[6] := x + BoxRect.w - 1; Rectangles[7] := y + BoxRect.h - 1; vro_cpyfm(VDI_handle, mode, Rectangles, sourceMFDB, destMFDB) end; Message('Now we''ll reverse the rectangle...'); for i := 0 to 3 do Rectangles[i+4] := Rectangles[i]; { dest rect = source } colors[0] := WHITE; { set points shall turn into white } colors[1] := BLACK; { clear points shall turn into black } vrt_cpyfm(VDI_handle, MD_REPLACE, Rectangles, sourceMFDB, destMFDB, colors); Message('... and reverse again, but with another method...'); vro_cpyfm(VDI_handle, NOT_D, Rectangles, sourceMFDB, destMFDB); Message('That''s all folks!'); CloseOutputWindow; Exit_Gem end end. ByBy By"B9N€N^Nuöööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö{------------------------------------------------------------------------- HighSpeed Pascal GEM-interface demo program TEXT OUTPUT DEMO Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+} program Texts; uses GemAES, GemVDI, GemDecl, GemInterface; const NO = 0; YES = 1; CharSpace = YES; { use char spacing in v_justified } WordSpace = YES; { use word spacing in v_justified } TheText = 'The Quick Brown Fox Jumps Over The Very Lazy Dog.'#00; var y : integer; { current text y coordinate } TextHeight : integer; { current height of text } dummy : integer; { Write TheText in the output window } procedure WriteTheMessage; begin inc(y, TextHeight); v_gtext(VDI_handle, OutputWindow.wX, y, TheText) end; begin { main } if Init_Gem then begin Message('Welcome to the text output demonstration!'); Message('We''ll take a look at some different ways...'); Message('of putting text on the screen without GDOS.'); OpenOutputWindow; y := OutputWindow.wY; { set y coord } TextHeight := CharDefs.h_Char; { set text height } Message('First some normal text'); WriteTheMessage; Message('Then justified to fit window'); inc(y, TextHeight); v_justified(VDI_handle, OutputWindow.wX, y, { x,y } TheText, { text to write } OutputWindow.wW, { field width } WordSpace, CharSpace); { spacing flags } Message('Now in another size...'); vst_height(VDI_handle, 19, { new height } dummy, dummy, dummy, TextHeight); WriteTheMessage; Message('Style...'); vst_effects(VDI_handle, BOLD + OUTLINE); { set text effect } WriteTheMessage; Message('and finally in another size, style and rotation'); vst_height(VDI_handle, 25, dummy, dummy, dummy, TextHeight); vst_effects(VDI_handle, SHADED); vst_rotation(VDI_handle, 2700); WriteTheMessage; Message('That''s all folks!'); CloseOutputWindow; Exit_Gem end end. öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö{------------------------------------------------------------------------- HighSpeed Pascal GEM-interface demo program WINDOW DEMO Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+} program Window_Demo; uses GemInterface, GemDecl, GemAES, GemVDI; const LeftButton = 0; { left mouse button } RightButton = 1; { right mouse button } var w1, w2, w3 : integer; { window handles } x, y, w, h : integer; { used for various purposes } Title2 : string; { window 2's title string } Title3 : string; { window 3's title string } InfoLine : string; { window 3's info line string } AllElements : integer; { all window elements } i : 0..1000; { slider position index } j : 0..2; { FOR index } mouseX : integer; { mouse x pos } mouseY : integer; { mouse y pos } mouseKeys : integer; { mouse button state } window : integer; { window handle from wind_find } s : string; { message string } { Clear the work rectangle of the given window } procedure ClearWindow(window : integer); var p : Array_4; { rectangle to clear } begin wind_update(BEG_UPDATE); { we're working ! } wind_get(window, WF_WORKXYWH, x, y, w, h); { get work area } p[0] := x; { set up rectangle } p[1] := y; p[2] := x + w - 1; p[3] := y + h - 1; vs_clip(VDI_handle, 1, p); { set clip rectangle } vsf_color(VDI_handle, WHITE); { white, } vsf_interior(VDI_handle, SOLID); { solid } vr_recfl(VDI_handle, p); { fill } v_gtext(VDI_handle, x, y + CharDefs.h_char, ' HighSpeed Pascal window demonstration program '#00); wind_update(END_UPDATE) { we're through working } end; begin { main } if Init_Gem then begin Message('Welcome to the window library demonstration!'); Message('We will now create and open a simple window...'); x := MinX + 5; { make border size } y := MinY; w := MaxW div 2 - 5; h := MaxH div 2 - 5; w1 := wind_create(0, x, y, w, h); { create the window } wind_open(w1, x, y, w, h); { open (display) it } ClearWindow(w1); { clear work area } Message('and a second, more complex, one...'); x := x + w + 5; { make x pos } Title2 := ' Window 2 '#00#00; { create title } { create window #2 } w2 := wind_create(NAME + CLOSER + SIZER, MinX + 5, MinY + 5, MaxW - 10, MaxH - 10); { set title : } wind_set(w2, WF_NAME, HiPtr(Title2[1]), LoPtr(Title2[1]), 0, 0); wind_open(w2, x, y, w, h); { display window } ClearWindow(w2); { clear work rectangle } Message('and finally the most advanced available.'); AllElements := NAME + CLOSER + FULLER + INFO + SIZER + UPARROW + DNARROW + VSLIDE + LFARROW + RTARROW + HSLIDE; x := MinX + 5; { make border pos, size } y := MinY + MaxH div 2; w := MaxW - 2*5; h := MaxH div 2; Title3 := ' Window 3 '#00#00; { create title } InfoLine := 'This is the window''s' + ' info line'#00#00; { create info line } w3 := wind_create(AllElements, x, y, w, h); { set title : } wind_set(w3, WF_NAME, HiPtr(Title3[1]), LoPtr(Title3[1]), 0, 0); { set info line : } wind_set(w3, WF_INFO, HiPtr(InfoLine[1]), LoPtr(InfoLine[1]), 0, 0); wind_open(w3, x, y, w, h); { display window #3 } ClearWindow(w3); { clear work area } Message('Now we''ll activate the second window...'); wind_set(w2, WF_TOP, 0, 0, 0, 0); { top #2 } Message('and change the size of it...'); wind_get(w2, WF_CURRXYWH, x, y, w, h); { get curr. size } w := w div 2; { make half width} wind_set(w2, WF_CURRXYWH, x, y, w, h); { set new size } ClearWindow(w2); { clear work area} Message('full it...'); wind_get(w2, WF_FULLXYWH, x, y, w, h); { get max size } wind_set(w2, WF_CURRXYWH, x, y, w, h); { set it } ClearWindow(w2); { clear work area} Message('and restore to previous size.'); wind_get(w2, WF_PREVXYWH, x, y, w, h); { get prev. size } wind_set(w2, WF_CURRXYWH, x, y, w, h); { set it } { As window #2 overlaid the other two windows, thereby destroying their work areas, they have to be cleared again} ClearWindow(w1); { clear work #1 } ClearWindow(w2); { #2 } ClearWindow(w3); { #3 } Message('A window can be closed...'); wind_get(w3, WF_CURRXYWH, x, y, w, h); { save size } wind_close(w3); { remove from VDU} Message('and opened again later.'); wind_open(w3, x, y, w, h); { display } ClearWindow(w3); { clear work area} Message('Let''s change the horizontal slider''s size in #3'); wind_set(w3, WF_HSLSIZE, 333, 0, 0, 0); { size = 1/3 of } { max. possible } Message('Now we''ll move the vertical slider.'); i := 0; for j := 0 to 2 do begin while i < 1000 do begin inc(i, 100); wind_set(w3, WF_VSLIDE, i, 0, 0, 0) { set size } end; while i > 0 do begin dec(i, 100); wind_set(w3, WF_VSLIDE, i, 0, 0, 0) { set size } end end; Inform('Move and click left mouse button; right completes'); graf_mouse(M_ON, NIL); repeat vq_mouse(VDI_handle, mouseKeys, mouseX, mouseY); if BitTest(LeftButton, mouseKeys) then begin window := wind_find(mouseX, mouseY); if window = 0 then s := '-No window-' else begin str(window, s); s := 'Window handle = ' + s end; s := s + ' Right button completes'; Inform(s) end until BitTest(RightButton, mouseKeys); graf_mouse(M_OFF, NIL); Message('Now all is shown, so let''s close all windows...'); wind_close(w1); wind_close(w2); wind_close(w3); Message('remove them from memory and terminate!'); wind_delete(w1); wind_delete(w2); wind_delete(w3); Exit_Gem end end. at's completed, we draw the shrinking box } form_dial(FMD_SHRINK, smallX, smallY, smallW, smallH, x, y, w, h); { and restore the border area image from memory } form_dial(FMD_FINISH, 0, 0, 0, 0, x, y, w, h); Inform(''); { redraw frame rectangle } Message('That''s all folks!'); Exit_Gem end end. ńņóōõö÷ųłśūüżž’öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö. œl9¼.. œl9HHA ACC @)½ŠWHHA CFG @)Ó HHA DOC @)ŌÖ `TŅȘ`””PXXXX kf o*HWĄDLķŌ.BNŗ@lNŗ@(Nŗ=’Nŗ/,Nŗ-”Nŗ$zNŗ xBgNŗA“NVūÖHē0. Šn J@o¶U?. ?. Nŗ)ŌJf`*Nŗ ü0. y_ HĄł_ø29_¼RAŠA=@’ü0. y_¢HĄł_ŗ29_¾RAŠA=@’žHnüÖHnūÖ?.’žNŗĘXHnūÖNŗ-„XHnüÖHnżś?<’NŗQ p.żś°n’ü]ĄD2.’ž²y_Ą^ĮD€g`”=n’ü’śHnż¶NŗPF?<A?<ZNŗPZ?<_NŗP@?<0?<9NŗPFXHnż¶HnżÖ/< NŗPZ n’ü^ĄD2.’üSAtAīżś0?HnżÖHnż¶/< &NŗO¶Hnż¶NŗP:VĄDĘg Sn’ü`’øp.żś°n’ś\ĄD2.’śtAīżś0?HnżÖHnż¶/< &NŗOjHnż¶NŗOīVĄDĘg Rn’ś`’¶HnüÖHnżś?.’ü0.’śn’ü?NŗP`HnüÖHnžś?<’NŗOä`Nŗ `HzHnžś?<’NŗOĢ<B§Hz€Nŗ$HzxHnžśNŗOŠg\YHnžśNŗ4-_żö ®’’’’żögB?<B§Nŗ6č/.żöHnžśNŗVB'/.żöHnžśNŗÖBgB§Nŗ6ĘJ.gNŗzNŗ8Nŗī&N^ _\NŠHELP NVHē yuToJNŗ ®SyuT09uTĮüGłrŽGó/HkNŗŽ3ė_¾3ė_¼NŗNŗĪNŗ„`Nŗ(ņLßN^NuNqNqNV’ōJy_–f U?9_’BgBg?9_œ?9_žNŗ6B3ß_–Jy_–l?<Nŗ"¼`ö?9_–?<UHy_kNŗ8ĪUHy_kNŗ8ÜBgBgNŗ7` y’’_ØoAł_ØCī’ų"Ų"Ų`nBg?<Hn’ųHn’śHn’üHn’žNŗ6Č=n’ų’ö=n’ś’ōHn’ųHn’śNŗ'>0.’ųn’ö‘n’ü0.’śn’ō‘n’ž?.’ų?.’śHn’üHn’žNŗ%zAī’ųCł_°"Ų"Ų?9_–?.’ų?.’ś?.’ü?.’žNŗ5°`?9_–?< BgBgBgBgNŗ6¢Nŗ&HBgB§Nŗ4śN^NuNqNqNV n 0 @f Nŗœ`Č @(fh n 0(°y_ŹfRJ9_ŚgBNŗž~Jy_–l By_–`ŒNŗTJyuTfBgBgB'Nŗū~` NŗžNŗ“`BgNŗ!8`Z @f^ n 0(°y_–fH n Hh n Hh Nŗ&?9_–?< n ?( n ?( n ?( n ?(Nŗ5ŖNŗ%P`ö @)f n 0(°y_ŹfBy_–`Ņ @f n 0(°y_–fNŗ&v`° @fŗU?. ?.Nŗ$šJf¢ n 0( @f Nŗ ¢`Š @f Nŗ ś`z @f Nŗ Ų`j @f Nŗ ž`Z @fB'?<Nŗ ü`D @fB'?<Nŗ ę`. @f<?<Nŗ Ī` @f<?<Nŗ ¶`š @fr n 0(°y_–f\ n ?( n ?( n Hh n HhNŗ"ō?9_–?< n ?( n ?( n ?( n ?(Nŗ40NŗNŗČ`x @fNŗ":NŗśNŗ°`` @f?9_–?< BgBgBgBgNŗ3ī`> @f n ?(?<Nŗ*Nŗņ` @f n ?(?< Nŗ NŗŅN^ _PNŠNqNqNV0. @f NŗB`  @bfBgBg<NŗųŌ`ˆ @af Nŗū,`x @f Nŗ$l`hNŗ ®0. @;f Nŗ `P @<f Nŗ ¤`@ @PfJnf Nŗ `Nŗ ģ` @HfJnf Nŗ Ā`Nŗ d` @Kf&JnfB'?<Nŗ ę` B'?<Nŗ Ų`Ō @Mf*Jnf<?<Nŗ ø`<?<Nŗ Ø`¤ @ f(Jnf<?<Nŗ ˆ` B'?<Nŗ z`v @GfnJnf8Jy_¾^ĄDJy_¼^ĮD€gBy_¾By_¼NŗrNŗČNŗ=z=_žÖ n’śžÖWĄD n’óžÖWĮD€g` JnžÖf"UHnžŚNŗRJfHn’*Nŗ?ŹNŗ=D`āB®žŅ09_Ō29_Ö²@m6=@žŲ=AžŠ`RnžŲHnżŠ?.žŲNŗXp.żŠHĄŃ®žŅ0.žŲ°nžŠf’Ų .žŅ€YBg&Nŗ#ø¶Ÿo?<Nŗl`rHn’*HnžŚNŗ=ųNŗ<Ą09_Ō29_Ö²@m@=@žŲ=AžŠ`RnžŲHn’*HnżŠ?.žŲNŗžXHnżŠBgNŗ@“Nŗ@ĀNŗ<|0.žŲ°nžŠf’ĪHn’*Nŗ>źNŗ0. kHĄł_ŗ29_¾RAŠA=@’üHn’ś/NŗžŌHn’ü/NŗžŹJ9_ŅfNU?.?. Nŗ¾Jg:?9_Ō?9_ÖNŗŚ3ī’ü_Ō3ī’ü_Öü_Ņ?9_Ō?9_ÖNŗ²0.’ś°n’ügź0.’ü°n’ś^ĄD@’łJ.’łWĄD@’ų0.’ś°y_ÖWĄDĄ.’łg 3ī’ü_Ö0.’śR@??9_ÖNŗZ`š0.’ś°y_ŌWĄDĄ.’łg 3ī’ü_Ō?.’ś09_ŌS@?Nŗ&`f0.’ś°y_ŌWĄDĄ.’ųg 3ī’ü_Ō0.’śS@??9_ŌNŗņ`20.’ś°y_ÖWĄDĄ.’ųg3ī’ü_Ö?.’ś09_ÖR@?Nŗ¾=n =n ?9_”Hn’žHnHn Nŗ%Ģ`ž$B9_ŅLßN^ _PNŠNV’śHēUNŗö=_’ž09_¾Šn’ž°y_ĄlžRy_¾Gł_ 0+ŠkS@=@’ü0+ŠSS@=@’ś?0+Šy_ŗ??.’ś?.’ü??+?.’ś0.’üy_ŗ??<Nŗņ?0.’üR@y_ŗ??.’ś?.’üNŗ?0.’üR@y_ŗ?09_¾Šn’ž?UNŗ(NŗųLßN^NuNV’üHēJy_¾o’Sy_¾Gł_ 0+ŠSS@=@’ü0+ŠkS@=@’ž??+?.’ü0.’žy_ŗ??0+Šy_ŗ??.’ü?.’ž?<Nŗ0Įüd=@’žHn’žHn’ō?<DNŗ'ĄHzŠHn’ō?< Nŗ'°Hz~Hn’ź?<DNŗ' Hn’ōHn’ź?< Nŗ'Hn’źB§?< SNŗ'‚3ĄuX09uX°yudg(?9_–?<?9uX?9uf?9uf?9ufNŗÄ3łuXudNŗżŠN^Nu’ NV’čHē?9_–?.?. ?9uf?9uf?9ufNŗ~ n fnUNŗ r09_Ą_HzŹHn’ö?<D&Nŗ&Ö=C’ōHn’ōHn’ö?< Nŗ&ĀHn Hn’ź?<DNŗ&²Hn’öHn’ź?< Nŗ&¢Hn’źB§?< SNŗ&”3Ą_¾`hUNŗ č0<’_Hz`Hn’ö?<D&Nŗ&l-C’ņHn’ņHn’ö?< Nŗ&XHn Hn’č?<DNŗ&HHn’öHn’č?< Nŗ&8Hn’čB§?< SNŗ&*3Ą_¼&N^.ŸNučNV’źHē/.Hn’ź?<Nŗ4„ .f4JyuTo&09uTĮüGłrŽGó7y_¾7y_¼`ŹJyuToR09uTĮüAłrŽ"0²® f609uTĮüAłrś3š_¼09uTĮüAłrų3š_¾`p yuTfHysHyrü?<:Nŗ6`RyuTBy_¼By_¾09uTĮüGłrŽGó&® Hn’źHk?<Nŗ37y_¼7y_¾LßN^ _Oļ NŠNVžŌHē/.Hn’?<’Nŗ3ZJ9_Śf`ą-yrœžŌBnžąp.’=@žųGłrš0.žąHĄŠ®žŌ-@žü nžüH€=@žśJnžśo’0.žś°nžųfv/.žüHnžā0.žśR@?Nŗ54HnžāHn’Nŗ3fRBnžÜ0.žąHĄŠ®žŌ2.žśHĮŠR€-@žü/.žüHnžŽ?<Nŗ4ųHnžÜHnžŲ?<Nŗ4č .žŲēˆ2HĮŅ€-A `"0.žśR@T@Ńnžą`-|’’’’ ``’@LßN^.ŸNuNVžüHē0.°y_ĄoHzj/. ?<’Nŗ2>`N0.åHGł_ŲGóp+@’0HĄŠ¹r -@žü/.žüHn’p+?Nŗ4DHn’/. ?<’Nŗ1īLßN^ _TNŠ NqNqNV’ŽHzŗHn’ā?<Nŗ1Č-yr ’Ž=n ’ž0.R@=@’ü0.’žHĄŠ®’Ž-@’ų n’ųP’÷ . ’÷^ĄD . ’÷]ĮDĄg:.’÷H€@ ‘n’ü0.’üHĄŠ®’Ž-@’ųHn’ć/.’ų.’÷H€@ ?Nŗ3’`Sn’ü0.’üHĄŠ®’Ž-@’ų"n’ų®’÷Sn’žJn’ül’tN^.ŸNu NqNqNV’öHy_Ü?<œBgNŗ3\3ü_Ą-yr ’öBn’ž0.’ž°nlX0.’žHĄŠ®’ö-@’ś n’ś  f$Ry_Ą09_ĄåH2.’žRACł_Ų3`09_ĄåHCł_ŚR1Rn’ž`’ N^ _TNŠNqNqNV’ž=yox’žJn’žo*0.’žåHAłov20åI0.’žCł_Ū€Sn’ž`’ŅN^NuNqNqNVžę/.Hn’ź?<Nŗ0J9_Śf`ŌHyr¦Hy_?<Nŗ-FNŗ(p0J@g?<Nŗ`ØHyr¦/. Nŗ.Nŗ(ZHyr¦Hn’č?<B§Nŗ- Nŗ(BHyr¦Hn’ę?<B§Nŗ-ˆNŗ(*Hyr¦Hyox?<B§Nŗ-nNŗ(Nŗ1Ž 29r¤HĮŠ2.’ęHĮ°l?<Nŗ„`Jyr¤oHyr 09r¤HĄ/Nŗ0čHz HnžęNŗ/Hn’źHnžęNŗ/fHzüHnžęNŗ/ZHnžęHy_j?<Nŗ/Hn’źHy_ˆ?<Nŗ.ņ?9_–?<UHy_kNŗ0UHy_kNŗ>BgBgNŗĀHyoz?< BgNŗ1$Hyr¦Hyoz09oxåH?B§Nŗ,†Nŗ'(0.’ę@ 3Ąr¤Hyr 09r¤HĄ/Nŗ/ŹHyr¦/9r ?.’ęB§Nŗ,JNŗ&ģ?.’č?.’ęNŗüv?.’ęNŗżFNŗżŲHyr¦Nŗ+ŠNŗ&ĘN^ _PNŠ Help on  NqNqNVü*Hn’*HzĘNŗ'ÖNŗ&ˆ0J@fhHn’*Hnż*Nŗ)ĪHnż*Hnž*?<’Nŗ-äNŗ)źNŗ&lHn’*Nŗ(ęNŗ&`p.ž*rAīž*0 A\gHzrHnž*?<’p.ž*R@?Nŗ.D`HzVHnž*?<’Nŗ-ŠHnż*Hnž*Hnü*Nŗ-bHy_Hnü*Nŗ-°Hnü*Nŗ ØXHnż*Hy_?<ONŗ-PN^NuHHA.CFG\ NqNqNVNŗ’Hyr¦Hy_?<Nŗ*rNŗ%œ0J@WĄDĄ_ŚJ9_ŚgˆHyrš?<BgNŗ/`Hyr¦Hyrš?<B§Nŗ*ČNŗ%jNŗ.ž 29ršHĮ°o6Hyrœ09ršHĄ/Nŗ.Hyr¦/9rœ?9ršB§Nŗ*„Nŗ%&`B9_ŚHyr¦Nŗ*Nŗ%N^NuNqNqNVż°/.Hn’°?<ONŗ,bHzTHnż°Nŗ,>Hn’°Hnż°Nŗ,ŽHzBHnż°Nŗ,‚Hnż°Hnž°?<’Nŗ,.U?<Hnž±Nŗč0 @WĄD@ N^.ŸNu[3][|&| |already exists.][Overwrite|Cancel] NqNqNVüžHz6Hnżž?<’Nŗ+ĘHyUØ?<BgNŗ(`XNŗ$@0. @fTHzHnüžNŗ+€Hy_HnüžNŗ+ĪHz HnüžNŗ+ĀHzHnüžNŗ+¶Hz HnüžNŗ+ŖHnüžHnžž?<’Nŗ+V`ˆ @f0Hy_HnüžNŗ+$HzšHnüžNŗ+tHnüžHnžž?<’Nŗ+ `R @fHzųHnžž?<’Nŗ+`6 @fHzHnžž?<’Nŗ*č` @fHzHnžž?<’Nŗ*ĢHnžžHnżž?<’?<Nŗ+^U?<Hnż’Nŗr=_’žN^ _TNŠ [1][.][ OK ]Unable to access|| |Please modify HHA.CFG|and restart your machine/ has been removed.| |Please insert correct disk'|Internal Error !| |Insufficient memory(|Internal Error !| |No available windows |Insufficient| |disk space NqNqNVJ9_Ųg?9_”NŗB9_ŲN^NuNqNqNVJ9_Ųf?9_”BgNŗ ¼ü_ŲN^NuNqNqNV’ų=n’ų=n ’ś=n ’ü=n’ž?9_”Hn’ųNŗ ŠN^ _PNŠNqNqNV09_¤HĄł_ø=@N^NuNqNqNV09_¦HĄł_ŗ=@N^NuNqNqNV’ųJ9_Āg$?9_–?<Hn’ųHn’śHn’üHn’žNŗT`Ał_°Cī’ų"Ų"Ų?9_–?<?.’ų?.’ś?.’ü?.’žNŗ„J9_ĀWĄDĄ_ĀN^NuNqNqNV?<?9_’?.?. n ? n?Hy_ Hy_¢Hy_¤Hy_¦Nŗ“09_¦HĄł_ŗH@J@g"nSQSy_¦`’Ü09_¤HĄł_øH@J@g"n SQSy_¤`’ÜN^ _Oļ NŠNqNqNV’ž n =P’ž n"n 2"n2®’žN^ _PNŠNVHēGł_ 0. °S^ĄD2Ņk²n ^ĮDĄ2.²k^ĮDĄ2+Ņk²n^ĮDĄ@ LßN^.ŸNuNVHēGł_ ?9_–?<HSHkHkHkNŗĪGł_ 0+ŠSS@°y_œm0+ŠSS@y_œ‘k0+ŠkS@°y_žo0+ŠkS@y_ž‘kLßN^NuNV’žHē"n SQGł_ "n RQ?<?9_’ n ??.’ž?.’ž?.’žHSHkHkHkNŗ0HĄł_øH@J@f’¼"nSQGł_ "nRQ?<?9_’?.’ž n??.’ž?.’žHSHkHkHkNŗĄ0+HĄł_ŗH@J@f’ŗ09_¢Šy_ŗ29_šŅy_ž°Ao09_ŗĮü"n‘QLßN^ _PNŠNVHē#ł_ÄVšJ9V€f(Gł_Ø?9_–?<HSHkHkHkNŗN` ü_Ģ?9_–Nŗ Ü?9_–NŗBy_–Nŗü LßN^NuNV’ņHēUNŗür=_’ü0. °noHn HnNŗż€Nŗū®0. 2.²@m =@’ž=A’ņ`Rn’ž0.’žy_¾=@’öJn’ö^ĄD2.’ö²n’ü_ĮDĄg^Gł_ 0.’öS@Įł_ŗŠk=@’ś0.’ś@’’Šy_ŗ=@’ų0+ŠSS@=@’ō??.’ś?.’ō?.’ų??.’ś?.’ō?.’ų?< Nŗ 0.’ž°n’ņf’nNŗū$LßN^.ŸNuNqNqNV’ČB®’ģAī’ģCī’Ųp"ŲQČ’ü=n’Š=n’Ņ=n ’Ō=n ’Ö=n’Č=n’Ź=n’Ģ=n’Ī?9_”?.Hn’ČHn’ŲHn’ģNŗ˜N^ _OļNŠNqNqNVHzPHy_X?<Nŗ$HzPHy_j?<Nŗ#ž3üļ_’HzHHy_?<ONŗ#ä3ü’’_Øü_ŲN^Nu HighSpeed Help Welcome to HHA PASCAL.HLP NqNqNVžü/.Hn’?<’Nŗ#ˆp.’r°Am>=Ažž=@žü`Rnžž0.žž2.žžtAī’0?Nŗ$d2Cī’0.žž°nžüf’ŠHn’/. ?<’Nŗ#.N^.ŸNuNV’Hē&nJgW<3ī<W>3ī:W@3ī8WB3ī6WD3ī4WF3ī2WH3ī0WJ3ī.WL3ī,WN3ī*WP3ī(WR#ī$[œ3ī"WT3ī WV?<?<?<?<BgN¹6ņ=yX@D"n2¹XB"n2¹XD"n2¹XF"n2¹XH"n 2¹XJ"n2¹XLN^ _Oļ3īW@?<d?<?<BgBgN¹6ņ=yX@N^ _Oļ NŠNqNqNV3īW83īW:3ī W<3ī W>3īW@?<e?<?<BgBgN¹6ņN^ _Oļ NŠNqNqNV3īW8?<f?<?<BgBgN¹6ņN^ _TNŠNqNqNV3īW8?<g?<?<BgBgN¹6ņN^ _TNŠNqNqNV3īW83īW:?<h?<?<BgBgN¹6ņ"n2¹XB"n2¹XD"n 2¹XF"n2¹XHN^ _OļNŠNqNqNV3īW83īW:3īW<3ī W>3ī W@3īWB?<i?<?<BgBgN¹6ņN^ _Oļ NŠNqNqNV3īW8?<k?<?<BgBgN¹6ņN^ _TNŠNqNqNV3ī"W83ī W:3īW<3īW>3īW@3īWB?<l?<?<BgBgN¹6ņ"n2¹XB"n2¹XD"n 2¹XF"n2¹XHN^ _OļNŠNqNqNV0. °no =n `=n N^.ŸNuNqNqNV0. °nl =n `=n N^.ŸNuNqNqNV/. H@=@ N^.ŸNuNqNqNV/. =@ N^.ŸNuNqNqNV’š n Cī’ų"Ų"ŲU n??.’ųN¹<$=_’šU n?(?.’śN¹<$=_’ņU n0 nŠh?0.’ųŠn’ü?N¹;ś=_’ōU n0( nŠh?0.’śŠn’ž?N¹;ś=_’ö0.’š‘n’ō0.’ņ‘n’öUHn’šN¹=JJWĄD@Aī’š"n"Ų"ŲN^ _PNŠNqNqNV’ų nCī’ų"Ų"ŲJn’ü_ĄDJn’ž_ĮD€@ N^.ŸNuNqNqNV’ų n Cī’ų"Ų"Ų"n2®’ų"n3n’ś0.’ųŠn’üS@"n3@0.’śŠn’žS@"n3@N^ _PNŠNqNqNVHyW #ßW HyW8#ßWHyYX#ßWHyX@#ßWHyZz#ßWHyW #ßVōHy\#ßVųHyW8#ßVüHyX@#ßWHy[œ#ßWHy[Ü#ßWN^NuNqNqNV?<Nŗš?.Nŗ’N^ _TNŠNqNqNV?<ENŗ’ÖN^NuNV’śHēBn &nJg¶Bk?<eNŗ’°UNŗ.=_’ü0.’ü @f*JkoSk?<DNŗ’†?< Nŗ"?<DNŗ’v` ?.’üNŗ n’üVĄD n’üVĮDĄg0+2.’ü"k Rk n ’üWĄD n’üWĮD€2+²kWĮD€g’f?<fNŗ’ `>0+S@r°Am0=A’ž=@’ś`Rn’ž0.’žr k 0?Nŗ|0.’ž°n’śf’ŽBkLßN^.ŸNu#ßVŚHłVŽ?NATLłVŽ/9VŚNup aŲĄ|@NupaŹĄ|’?@NuAłVźp  QŠg pa¬Ą|’€?@Nu _Bpa˜TONŠB§?< NA\O#ųŗVģ/?< NA\ONuaą“¹VģlöNu#ßVš$aĢ„üHBBBHBŌ¹VģaŲ yVšNŠNqNqNVHz0Hzž$HyVĘNŗ ŗHyTŅHzNŗ DHyUØHz Nŗ 0N^Nu ConDevice(_ĄV€#ĶV‚LķšD„ŸÅA÷H~#ČV’J9V€g$-”‡”ml¼‚l$“…mb*//N¹SŚJ9V€g+Eš// Bg?<JNAŽü a¦tŒa˜Aś0J9V€g m$ (’’ga"Aś,#ČVš#ĻVŽNŌAśŲa¢?<’Ł`źHz#ßVØNuJ9V€fAśŃa~`ad&9V g0–¹V‚Aśtad09Vž>aFAśuaTAś|tJƒgaXHt‹aBaNuHz’?<&NN\ONuxé›pĄƒŠ<0°<:m^a"QĢ’źNuHĄQO ON¹Tx OaPONuga`ųHē €?/<NM\OLßNuB—a’F#ßV 3ßVž.yVŽ yVšB¹Vš oN`ģ?9Vž?<LNAAųˆHŠŒ xņ2| hg"h$#ÉVØNup98ÄtŒ“øˆg xÖp4Ug p5Sgp6 xĪ±łV‚d yV¤$f yV‚|ß’?/`’`p7 o`ŌAś’öpa,#ĄV¬Aś’ 0<a#ĄV°Nu yV¬pa yV°0</??<NMPONu Runtime error: at offset: ????. Not enough space for heap Accessory errorģŒPJō"ž¤Ø¾Ž6XPBF ųę,0Cś’ĪNV’źHīų’ģaXBn’ź npĄ.Š{jN»f. f&(* n aŅĢ|>Üq`N±`. f n J9VfaŅDī’źLīų’ģN^ _Žü NŠLīų’ģN^"_Žü afNŃ JzH€`0HĄ`ō `ų r$gįˆĄBBHB抱J”|~“|gNu$rļ„¼€’Nu "$g(| ķØķ¹Ą4Ā|ųÄ|’€BBBHB押J”|ž“|gĄNut4ć‚TBSBeāJ”|?ž g "NuĀ `ōJ‚k Ō|?žkiJ€g ćBāŠ0Ā Ą ĮNutpr`ģ4<’`ō n J‚k"Ō|žkJJ€gFŅ¼d R€dāā‘RB“|’d$ėJā‚v ęøę©&Ę¼’ą‚ƒH@Ą|€BH@ Ą ĮNu4<’pr`Ņpr`ź n J‚kŌ|~k2J€g"Š¼€dāRB“|’dįJāšHBBB€ąˆ€‚ €Nu4<’p`äp`š~,Œ…ka~J‚k ~J€g~HBĪB=G’źNuEJ9Vga`žJ‚k’J…k~JƒgJJ€gvŗBlĮCĆDÅEšBŗ|@lbŌEŗ| eš| "pJEgź©źø|’ź®.F†Ģ€‚†Ą‡µ…fŅ„Ńƒe&Nu’„‘ƒdBD@€J€f gčr”| SBć‰ćdųāā‘RBNuŚB "$NuprtNuJ9Vga\`VJ‚kźJ…kŲJ€gÜJƒgŲŌEBE»‚/t,.ĀÄpBAHA*HEŹÄŅ…Ń‚:g HDŹÄHDŅ…Ń‚2HAp:gŹĆŅ…Ń‚*HEHDŹÄHDŅ…Ń‚:gŹÄŅ…Ń‚2HAp:HCŹĆHCŅ…Ń‚*HEŹĆŅ…Ń‚:g HDŹÄHDŅ…Ń‚*HEŹÄŅ…Ń‚2HAp*HEHCŹĆHCŅ…Ń‚:gŹĆŅ…Ń‚*HEHDŹÄHDŅ…Ń‚*HEHCŹĆHCŠ…:HCŹĆHCHFĢĆH@܅ŃBH@HAŅFHAHFŃFH@ŃB$H@kSBć‰ćNuJ‚kžčJ…kžŌJƒgüÜJ€g”EBE»‚RBJ„f¶¼€gzāˆā‘NV’ģ-B’üHī’ģ~ųL®x’ģ$„Ćht’ĘĀČĀŹĀĢĀ=‚pü4<HFBDHDŚ†×„DB“…‘ƒUÅH@HA02JgLī’ģSvpüŅ„ŃƒdöTGf°Lī’ōRBSBć‰ćdųāā‘N^Nu‚NuJ€gBNuJ9Vfrt("gžjĀD€hLśNuQBį‰į˜°göą˜ćˆUŹ’üārNu€ &<€x*BEaż8J‚kżŲJ€gżĢJBożĘ”| lDBäØgD€NuRn’ź <€Nu<aTBiNu _?HłV¶NALłV¶TJ€j 3ĄV~DüNŠJ9VµgV~Nu2)/ "i €"_RA3A²ifNłL‚NutpaĀf"?”@o SBp aĘQŹ’ś4`aŗQŹ’śN¹L‚Nu4/"oAļpaČ _XONŠLļ4/a² _\NŠLß/Aś`ž Lß/Aś`Ž t` t`t`t _"_BgJg$ažNeg°< gg°< bRi`ÜRNŠLß/B™BYB™B™B™B™B™’üNłK–t`4<Lļ fa˜f2‚N¹J¤`HēĄaŗByV~2‚3oN¹J¾gBQ _Žü NŠ"o€)SfN¹Jö.ŸNuAłLņ`AłLŲ"oa8f#o 3iNeig3ü@V~ _XONŠAłLņ`AłLŲ"oaüf,#o 0/?)3@3@N3_"/g A0€ByV~ _ŽüNŠL×a¾f 2)a4rN¹LĘ _PONŠ"oa^2)a*/@Nu"oaL 2)a/@Nu$HBÄĮHBBBĄĮŠ‚Nu Ctv ÕB”AdŌAрQĖ’ō&F€Nu"oa°WĄD _XNŠa>f*prN¹LĘ/prN¹LĘ/ /rN¹LĘ "NuprNuNłK NłK¢NłL^NV’€ n Cī’Ąaę n"OaŽHWHn’ĄBgpVaĢN^ _PONŠNV’Ą n"Oa¾HWpAa²N^.ŸNu$02"_ _/t ”@”A`BQČ’ü`ŲQÉ’ü`BQŹ’üNu"opB™QČ’üNu _0"WręIńNŠ _20"W’etęJŅĀ€<ųŃRfR‰pųSdņNŠ$02 _"_/ŅĄ`ŁQÉ’üNu _"_0°|d 2ęI1NŠpNŠLļpāH0ŁQČ’ü _PNŠ"0 _"_/°c)’’Ą`ŁQČ’üNu""_ _/t“cSBe³VŹ’üf²Nu""_ _/prŃdPé’’FŅĮ`ŲQČ’üNu$02 _"_/tJAnr²BnŠĮ”ARBJ@o°Bo0ĄS@ŲQČ’üNuBNuNVžHn’/. ?<?.SWN¹Rf/.Hn’N¹R>Hnž/. ?.?<’N¹RfHnžHn’N¹R>Hn’/. ?. N¹QśN^ _Oļ NŠ _ Wam WznW NŠ"_  _#ČV†B˜ ˆP˜ ĄrģŅ€Ā|’ų ĮkHpü Ÿ Pr’ Į ĮNŃ /gF^€Ą|’ų yV†" "H°˜ Xbö If"i`Jk"ÓĄ‘"#hƉ#A"o"ˆB˜B˜ _PONŠ?<8//NłB/ Lļ^€Ą|’ų"Q yV†³Čb`@ h³čböJk2#h"€Eńµčf #j ё!I$HÕŠµÉf !i ѐ$_ _PNŠ yV†pŠ˜ PdśR€"W.€NŃ yV†p` h°dų" jņ"W.NŃ"0"_ _/³ČgeŠĄŅĄ` QČ’üNuŲQČ’üNu"_20 _`ĮQČ’üNŃJ€lD€ü-Cś"r °™\É’üY‰"gt/RlśŠĀ`īBNu;šŹõį˜–€B@† 'čd ŠLÄ *    t T  >F ā.Z¶ ņ0D°     ’vŒb &" 6  $ && .&$ J  @ & "@.` h2" (.2> 4 4P4 0  " 0  6@  x  \j4      .Ž$TČ2".&" 6 ,Ź* Ę.NØ  * "   FV .0 $ " `$  0 Ä . . ā&  *D.$. " 8&. "$F    .  ." &   ¶&( ®T$8  ", V2(, " ōŠØĢī$@ 6* d0:,‚>NŽ$.¦  ( 6"x Ä*6HTC:\PASCAL } end else FatalError('Could not initialize GEM properly!') end. `r[dDOS ĀP–)DSISYS ųP– BILINFO :R–cCONFIG SYS †LŅ?€AUTOEXECBAT 5JŖ\ANSI SYS `r–ŽCOUNTRY SYS `r˜,DISPLAY SYS `rž,DRIVER SYS `r¤’EMM SYS ÖØé „5RAMTYPE SYS r/^¬SREMM SYS j›a®ü9FLYT Ų˜öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö HighSpeed Help Accessory ------------------------ 1. Introduction --------------- The new HighSpeed Pascal Help Accessory, in the following referred to as HHA, is an accessory that provides you with a gateway to the HighSpeed Pascal on-line help system, when you are operating outside the HIDE. 2. Installation --------------- Installing HHA requires two things. First, copy HHA.ACC and HHA.CFG to the root-directory of your boot-drive. Second, modify HHA.CFG so that the first line in this file contains the name of the directory in which the PASCAL.HLP file is located: If PASCAL.HLP is located in the directory C:\PASCAL, then the first line in HHA.CFG must read: C:\PASCAL. 3. Starting HHA --------------- After HHA has been installed, and your machine rebooted, HHA can be activated by clicking on "HighSpeed Help" in the desk menu. 4. Operating HHA ---------------- HHA is operated via a mixture of mouse and keyboard commands. Keyboard: Key Operation ----------------- ----------------------- Help = Show start-up help page Undo = Show previous help page ESC = Close HHA F1 = Page down F2 = Page up Home = Beginning of help page Shift+Home = End of help page Tab = 8 columns right Shift+Tab = 8 columns left Arrow down = Line down Arrow up = Line up Arrow left = Column left Arrow right = Column right Shift+Arrow down = Page down Shift+Arrow up = Page up Shift+Arrow left = 8 columns left Shift+Arrow right = 8 columns right Ctrl+S = Save block to disk Mouse: Double-clicking with the left mouse button, when the cursor is standing on an underlined word, will provide help on the underlined word. Pressing down the left mouse button, and at the same time moving the cursor around, will mark a block. 4.1 Blocks ---------- Marking a block in HHA is done in much the same way as in the HIDE. The only noticeable difference is that HHA marks blocks on a line-boundary, as opposed to HIDE where blocks can be single words, even single letters. Once a block has been marked, it can be saved on disk, by pressing CTRL and S at the same time. HHA automatically names the block, using a combination of the window title and '.HLP'. An example: You are currently getting help on the GEMVDI unit. You mark a block. You press CTRL and S. The saved block will be named: 'GEMVDI' + '.HLP' = GEMVDI.HLP If HHA finds a file with the same name as the block, you will be prompted before HHA overwrites the existing file. If HHA was able to successfully save the block on disk, the block will be de-marked. 5. Errors --------- The HHA recognizes the following error situations: 1. The PASCAL.HLP file cannot be located. Modify (or create) the HHA.CFG file, and put it into the same directory as HHA.ACC. The contents of HHA.CFG must be the name of the directory in which the PASCAL.HLP file is located. 2. The PASCAL.HLP file has been removed (from the disk drive). Insert the disk containing PASCAL.HLP into the disk drive. 3. No available windows. Close a window, and try again. 4. Insufficient disk space. Make some room on the disk, so that the currently marked block can be saved, or make the block smaller. `tś3CONFIG Evś4 öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö. ¤l9Ų.. ¤l9MYCALC DFN @)Ł¦MYCALC DOC @)ŚKMYCALC I @)į,MYCALC PAS @)ć—PMYCALC RSC @)ųō RPN PAS @)ū¶CALCULATSEGMENTSEDISPLAYGMHELPKEYKESEVENEIGHTNINEDDIVKEYDFOURKEYDFIVEIVEYSIXFOUR MULTKEYSIONE  TWO THREE SUBKEY ZEROKEYRADIXROYSIGNKEYAPADDKEYADSWAPKEYENTERKEYDELKEYHELPSCR1 HELPOK1EY MOREEYXHELPSCR2 HELPOK2 BACKKEYBOARD: N6 Z  ,˜   $TĪśö(ENVSTR 6’ īśŲ6ŠśĢGöööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö MyCalc - a HighSpeed accessory example 1. Introduction --------------- This document contains the information required in order to operate the MyCalc accessory, but does not give any information concerning its programming - consult the source code files MYCALC.PAS and RPN.PAS. 2. What is MyCalc? ------------------ MyCalc is an accessory/application (can run as both; .ACC = accessory operation, .PRG = application operation) operating as a Reverse Polish Notation (RPN) calculator. 3. Files -------- The MyCalc program set contains the following files : MYCALC.PAS - main program RPN.PAS - the RPN evaluator unit MYCALC.I - resource file constants from RCS 2.1 MYCALC.DFN - resource file definitions for RCS 2.1 MYCALC.RSC - resource file from RCS 2.1 4. Installing MyCalc -------------------- MyCalc will always look for its resource file in the current directory, which means that if MyCalc is installed as an accessory (named MYCALC.ACC), it will look for the RSC file in the root directory of the boot disk. If the RSC file can't be found, the user is informed, and MyCalc will install itself and wait for activation. Upon activation, MyCalc will again try to locate the RSC file in the current folder, and if it fails to do so, then deny further operation. If, however, the file could be found, then it's loaded and stays resident together with MyCalc. If MyCalc is run as an application (named MYCALC.PRG), then the RSC file must be contained within the current directory; otherwise the program will abort. 5. Executing MyCalc ------------------- When MyCalc is installed as accessory, you activate it from the "Desk" menu. If MyCalc can't open a window, you will be told so, asked to close one and then reactivate MyCalc. This condition should never occur when run as application. 6. Using MyCalc --------------- MyCalc can be used with the mouse and the keyboard. Its functions are all implemented with use of the numeric keypad in mind - this implies that the [ ( ] and [ ) ] keys don't behave as expected (see below). The MyCalc window can be moved and topped as any other GEM window, but of course not sized. 6.1. Mouse usage ---------------- When the mouse is moved to one of the buttons, it will highlight, and reverse when the mouse is moved away again. You select a number/operation by highlighting a button and then pressing the left mouse button. When through using MyCalc, you click the "Close" box on the upper left of the window. 6.2. Keyboard usage ------------------- The following keys have an operation with MyCalc : 0..9 : digits . : radix point + : add - : subtract * : multiply / : divide ( : sign inversion ) : swap top elements (see below) Enter : push number onto stack Backspace : delete last digit/clear top of stack Esc : close MyCalc window Both keypads (alphanumeric and numeric) can be used. 7. How to calculate ------------------- As mentioned above, MyCalc utilizes Reverse Polish Notation. This involves a new way of thinking when evaluation expressions, as the following examples show : normal RPN ------------------ 1+2 1 ENTER 2 + (1+2)*3 1 ENTER 2 + 3 * (1+2)*(3+4) 1 ENTER 2 + 3 ENTER 4 + * 8. MyCalc's implementation of RPN --------------------------------- MyCalc implements a Hewlett-Packard like system of RPN, that is, with a four element stack made up of the registers x, y, z and t. The philosophy behind RPN is to enter the operands on the stack and the execute an operation (e.g. addition). The stack layout can be visualized like this : t - bottom of stack z y x - top of stack, the element shown in the display Most people would probably say, the layout is upside down, but that's the way Hewlett Packard shows it... Now, when an expression like 1+2 is evaluated, the following happens : First, the value 1 is pushed onto the stack (into x). Then 2 is pushed into x, thereby forcing the old value into y. The addition then pops both values off the stack, adds them and pushes the result back onto the stack. The below table should clarify this : reg. operation --------------------------------- 1 ENTER 2 + --------------------------------- x 1 1 2 3 y 1 1 z t As you can see, the ENTER operation pushes the value 1 into y, but at the same time enables x to be overwritten by the value 2. This is termed "disabling stack-lift". Backspace does the same, when a value is cleared (made 0.00000), i.e. allows the x-register value to be overwritten. Let's look at (1+2) * (4-5) : reg. operation --------------------------------------------------------------- 1 ENTER 2 + 4 ENTER 5 - * --------------------------------------------------------------- x 1 1 2 3 4 4 5 -1 -3 y 1 1 3 4 4 3 z 3 3 t Finally, one special property of the t register should be mentioned : Its value can only be changed by pushing numbers onto the stack, and not by popping. Let's illustrate : reg operation --------------------------------------------------------------- 1 ENT 2 ENT 3 ENT 4 + + + + --------------------------------------------------------------- x 1 1 2 2 3 3 4 7 9 10 11 y 1 1 2 2 3 3 2 1 1 1 z 1 1 2 2 1 1 1 1 t 1 1 1 1 1 1 In the above illustrations, we haven't shown the register contents unaffected by our operations. ENT is an abbreviation for ENTER. Finally, we wish you best of luck with experimenting with the HighSpeed Pascal MyCalc accessory. ng[50]; begin n:=appl_init; if n<>-1 then begin CStr:='[3][ Hello| World][ Ok |Cancel]'#0; Button:=form_alert(1,CStr[1]); appl_exit; write('Thanks for pressing: '); if Button=1 then writeln('Ok') else writeln('Cancel'); end; end. öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö CALCULAT = 0; (* TREE *) HELPSCR1 = 1; (* TREE *) HELPSCR2 = 2; (* TREE *) KEYBOARD = 1; (* OBJECT in TREE #0 *) SEVEN = 2; (* OBJECT in TREE #0 *) EIGHT = 3; (* OBJECT in TREE #0 *) NINE = 4; (* OBJECT in TREE #0 *) DIVKEY = 5; (* OBJECT in TREE #0 *) FOUR = 6; (* OBJECT in TREE #0 *) FIVE = 7; (* OBJECT in TREE #0 *) SIX = 8; (* OBJECT in TREE #0 *) MULTKEY = 9; (* OBJECT in TREE #0 *) TWO = 10; (* OBJECT in TREE #0 *) THREE = 11; (* OBJECT in TREE #0 *) SUBKEY = 12; (* OBJECT in TREE #0 *) ZERO = 13; (* OBJECT in TREE #0 *) ADDKEY = 14; (* OBJECT in TREE #0 *) ONE = 15; (* OBJECT in TREE #0 *) DELKEY = 16; (* OBJECT in TREE #0 *) RADIX = 17; (* OBJECT in TREE #0 *) SIGNKEY = 18; (* OBJECT in TREE #0 *) ENTERKEY = 19; (* OBJECT in TREE #0 *) SWAPKEY = 20; (* OBJECT in TREE #0 *) HELPKEY = 21; (* OBJECT in TREE #0 *) DISPLAY = 23; (* OBJECT in TREE #0 *) SEGMENTS = 24; (* OBJECT in TREE #0 *) HELPOK1 = 12; (* OBJECT in TREE #1 *) MORE = 13; (* OBJECT in TREE #1 *) HELPOK2 = 12; (* OBJECT in TREE #2 *) BACK = 13; (* OBJECT in TREE #2 *) se begin deskId:=menu_register(appl_id,ACCtitle[1]); repeat EventLoop until FALSE; {Stay here forever} end; v_clsvwk(VdiHandle); end; appl_exit; end end. öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö{------------------------------------------------------------------------- HighSpeed Pascal GEM accessory demo MyCalc RPN CALCULATOR DEMO Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+,F-,M 4,1,1,20} program MyCalc; uses GemDecl, GemAES, GemVDI, RPN; CONST {$I MyCalc.I} { get resource file constants } type C_String = packed array [0..255] of char; String_Ptr = ^C_string; Ob_Type = G_BOX..G_TITLE; Spec_Info = RECORD CASE Ob_Type OF G_Box, G_IBox, G_BoxChar, G_Text, G_BoxText, { these fields should } G_FText, { of course be extended } G_FBoxText, { but as the only field } G_Image, { needed is G_String, } G_UserDef, { this structure is per- } G_Button, { fectly suitable } G_Icon, G_String, G_Title : (str : String_Ptr) END; Object = RECORD ob_next : Integer; { next object in tree } ob_head : Integer; { parent object } ob_tail : Integer; { next parent on level } ob_type : integer; { object type } ob_flags : integer; { flags } ob_state : integer; { state } ob_spec : Spec_Info; { color/pointer etc. } ob_x : integer; { obj. rectangle size } ob_y : integer; { and position relative } ob_w : integer; { to parent object } ob_h : integer END; Tree = ARRAY [ 0..199 ] OF Object; { the object tree } Tree_Ptr = ^Tree; { pointer to the tree } var VDI_handle : Integer; { GEM VDI handle (graf_handle) } AES_handle : Integer; { GEM AES handle (appl_init) } ACC_handle : Integer; { GEM acc. id (menu_tregister) } Title : string[14]; { ' MyCalc '#0#0 } Window : Integer; { window handle } Quit : Boolean; { TRUE = exit application } noRSC : Boolean; { TRUE = no resource file } Dialog : Tree_Ptr; { the calculator dialog tree } LastSelected : Integer; { index of last selected button } { event manager variables : } x, y : Integer; { mouse x,y coordinate } key : Integer; { keyboard key scan code } button : Integer; { mouse button state } clicks : Integer; { mouse button clicks } kbdstate : Integer; { keyboard state (CTRL, ALT etc)} pipe : array_16; { GEM message pipe } Xres : Integer; { screen x resolution (pixels) } eventflags : Integer; { flags for evnt_multi } evnt_flag : record { different evnt_multi flag ... } wait : Integer; { ... setups } active : Integer end; { Initialize GEM (application and workstation. Accessory detection not until later } procedure Init; var workIn : intin_Array; workOut : workout_Array; i : integer; begin AES_handle := appl_init; if AES_handle <> -1 then begin { -1 = error } VDI_handle := graf_handle(i, i, i, i); for i := 0 to 9 do workIn[i] := 1; workIn[10] := 2; v_opnvwk(workIn, VDI_handle, workOut); Xres := workOut[0] end else begin writeln('MyCalc could not be installed'); Halt(0) end end; procedure DeInit; begin rsrc_free; { remove RSC file } v_clsvwk(VDI_handle); { close workstation } appl_exit { exit application (no AES usage allowed) } end; { Try to load the resource file. If unsuccessful, then write error message } procedure LoadRSC; var title : string; { name of RSC file } i : integer; { dummy } begin title := 'MYCALC.RSC'#0; rsrc_load(title[1]); noRSC := GemError <= 0; if noRSC then begin Insert('MYCALC\',title,1); rsrc_load(title[1]); noRSC := GemError <= 0; if noRSC then begin title := '[3][MYCALC.RSC could not be found |and MyCalc can hence ' + 'not be |activated unless you copy the |RSC file into the' + ' currently |active directory.][ Too bad! ]'#0; i := form_alert(1, title[1]); if AppFlag then begin { terminate if application } v_clsvwk(VDI_handle); appl_exit; halt(0) end end end; rsrc_gaddr(R_TREE, CALCULAT, Dialog) { get Dialog's address } end; { Open calculator window } procedure OpenWindow; var s : String; { alert message string } i : Integer; { dummy } elements : Integer; { window elements } x, y, w, h : Integer; { window bordr x,y,w,h } begin if noRSC then LoadRSC; { try to load resource file again } if not noRSC then begin elements := NAME or MOVER or CLOSER; { window elements } { the below is a tricky thing : All objects in an object tree are located relative to their parent object, i.e. the calculator dialog box (CALCULAT). Now, the window is ment to show itself at the middle of the screen, so we make a form_center to place the dialog box there, and then use wind_calc with the CALCULAT objects size parameters as work area input to calculate the window's border dimensions which we require in order to do a nice wind_create } form_center(dialog, i, i, i, i); with Dialog^[CALCULAT] do wind_calc(WC_BORDER, elements, ob_x, ob_y, ob_w, ob_h, x, y, w, h); window := wind_create(elements, x, y, w, h); if window < 0 then begin { if the AES has no more windows : } s := '[3][|No window for MyCalc |Close one and retry ][ Ok ]'#0; i := form_alert(1, s[1]) end else begin { a window was created successfully } eventflags := evnt_flag.active; { set window title } wind_set(window, WF_NAME, HiPtr(Title[1]), LoPtr(Title[1]), 0, 0); graf_growbox(0,0,0,0, x,y,w,h); wind_open(window, x, y, w, h) end end end; { Redraw our window. The procedure is : If our window is not open, then exit otherwise get the total work area into MyArea. After this, get the first rectangle from the rectangle list and see if it intersects with our window. If it does then redraw the CALCULAT dialog with the intersecting rectangle as active (non-clipped) area } Procedure RedrawWindow; var WindowRect, MyArea : GRect; { Using x,y,w,h system } Clip : Array_4; { Using x1,y1,x2,y2 system } begin if Window = -1 then exit; { can't redraw if no window! } with MyArea do wind_get(Window, WF_WORKXYWH, x, y, w, h); with WindowRect do wind_get(Window, WF_FIRSTXYWH, x, y, w, h); while not EmptyRect(WindowRect) do begin if intersect(MyArea, WindowRect) then with WindowRect do objc_draw(Dialog, CALCULAT, $7FFF, x, y, w, h); with WindowRect do wind_get(Window, WF_NEXTXYWH, x, y, w, h) end end; { Close our window } procedure CloseWindow; var x, y, w, h : Integer; begin eventflags := evnt_flag.wait; { go into "wait-state" } wind_get(window, WF_CURRXYWH, x, y, w, h); { get current position } graf_shrinkbox(0,0,0,0, x,y,w,h); { shrink a box } wind_close(window); { remove from screen } wind_delete(window); { and RAM } window := -1 { and indicate as closed} end; { Top our window } procedure TopWindow; begin wind_set(window, WF_TOP, 0, 0, 0, 0); eventflags := evnt_flag.active end; { Put something in the display. If in an error condition, then write the error message, else if inputting (Result = FALSE) then write input string unformatted, else write the top-of-stack value formatted } procedure WriteDisplay(Result : boolean); var s : string; begin if Error <> -1 then s := ' Error ' + chr(Error + ord('0')) + #0 else if result then begin str(TopOfStack:width:digits, s); s := copy(s, 1, width) + #0 end else s := InputString + #0; move(s[1], Dialog^[SEGMENTS].ob_spec.str^, length(s)); objc_draw(Dialog, DISPLAY, $7FFF, 0, 0, 0, 0) end; { Show the help screens } procedure ShowHelp; var ScreenIndex : 1..2; { screen 1 or 2 is being shown } Choice : Integer; { OK, MORE or BACK selected } Dialog : Tree_Ptr; { the current help screen dialog tree } x, y, w, h : Integer; { its x,y,w,h } function TestWidth : boolean; { can't show help in low res. } var w1, w2 : integer; a : Tree_Ptr; s : string; begin rsrc_gaddr(R_TREE, HELPSCR1, a); { get screen 1's width } w1 := a^[0].ob_w; rsrc_gaddr(R_TREE, HELPSCR2, a); { and screen 2's width } w2 := a^[0].ob_w; if (w1 >= Xres) or (w2 >= Xres) then begin { if larger than screen : } TestWidth := FALSE; s := '[3][|MyCalc can''t show any help |information in this reso- |lution. Try a higher.][ Sorry ]'#0; w1 := form_alert(1, s[1]) end else TestWidth := TRUE end; begin { ShowHelp } if TestWidth then begin { only exec. if screen wide enough } ScreenIndex := 1; { first screen first } repeat if ScreenIndex = 1 { get proper dialog address } then rsrc_gaddr(R_TREE, HELPSCR1, Dialog) else rsrc_gaddr(R_TREE, HELPSCR2, Dialog); form_center(Dialog, x, y, w, h); { center on screen } with Dialog^[0] do begin form_dial(FMD_START, 0, 0, 0, 0, x, y, w, h); form_dial(FMD_GROW, 0, 0, 0, 0, x, y, w, h); objc_draw(Dialog, 0, $7FFF, 0, 0, 0, 0); Choice := form_do(Dialog, 0); form_dial(FMD_SHRINK, 0, 0, 0, 0, x, y, w, h); form_dial(FMD_FINISH, 0, 0, 0, 0, x, y, w, h) end; { deselect the button : } with Dialog^[Choice] do ob_state := ob_state - SELECTED; if ScreenIndex = 1 then ScreenIndex := 2 else ScreenIndex := 1 { MORE and BACK are not needed and hence not used } until ( (ScreenIndex = 1) and (Choice = HELPOK1) ) or ( (ScreenIndex = 2) and (Choice = HELPOK2) ) end end; { Convert from a GEM resource tree index to a char value usable by the RPN unit } function FormChar(index : Integer) : Char; begin case index of ZERO : FormChar := '0'; ONE : FormChar := '1'; TWO : FormChar := '2'; THREE : FormChar := '3'; FOUR : FormChar := '4'; FIVE : FormChar := '5'; SIX : FormChar := '6'; SEVEN : FormChar := '7'; EIGHT : FormChar := '8'; NINE : FormChar := '9'; RADIX : FormChar := '.'; ENTERKEY : FormChar := CR; DELKEY : FormChar := BS; ADDKEY : FormChar := '+'; SUBKEY : FormChar := '-'; MULTKEY : FormChar := '*'; DIVKEY : FormChar := '/'; SWAPKEY : FormChar := ')'; SIGNKEY : FormChar := '(' else FormChar := #0 { bad value } end end; { This is exactly the reverse to FormChar above : Convert from a character to a GEM resource index value } function FormIndex(ch : Char) : Integer; begin case ch of '0' : FormIndex := ZERO; '1' : FormIndex := ONE; '2' : FormIndex := TWO; '3' : FormIndex := THREE; '4' : FormIndex := FOUR; '5' : FormIndex := FIVE; '6' : FormIndex := SIX; '7' : FormIndex := SEVEN; '8' : FormIndex := EIGHT; '9' : FormIndex := NINE; '.' : FormIndex := RADIX; '+' : FormIndex := ADDKEY; '-' : FormIndex := SUBKEY; '*' : FormIndex := MULTKEY; '/' : FormIndex := DIVKEY; '(' : FormIndex := SIGNKEY; ')' : FormIndex := SWAPKEY; CR : FormIndex := ENTERKEY; BS : FormIndex := DELKEY else FormIndex := -1 { bad value } end end; procedure Handle(KBDevent : boolean); var index : Integer; { GEM object index } dummy : Integer; topwindow : Integer; { currently topped window's handle } SetButton : boolean; { TRUE = a mouse button is pressed } begin SetButton := button = 1; { determine if button was pressed } if SetButton then { if so, then wait until it's released } repeat graf_mkstate(x, y, button, kbdstate) until button = 0; { see if it's our window that's on the top : } wind_get(0, WF_TOP, topwindow, dummy, dummy, dummy); { if it isn't then go into wait-state and exit } if (window = -1) or (window <> topwindow) then eventflags := evnt_flag.wait else begin { if a key was pressed then make a GEM object index from it, otherwise determine (via objc_find) at which object the mouse is currently pointing } if KbdEvent then index := FormIndex(chr(lo(key))) else index := objc_find(Dialog, KEYBOARD, $7FFF, x, y); { if the mouse points at the box containing the buttons, then ignore! (if you don't understand why, then try to put a comment around the following line and move the mouse past a button) } if index = KEYBOARD then index := -1; { if the mouse has changed its position : } if (index <> LastSelected) then begin { deselect previously selected object } if LastSelected <> -1 then objc_change(Dialog, LastSelected, 0, 0, 0, 0, 0, NORMAL or SHADOWED, 1); { select the object at which the mouse is pointing } if index <> -1 then objc_change(Dialog, index, 0, 0, 0, 0, 0, SELECTED or SHADOWED, 1); LastSelected := index end; { if, after all the preceeding actions, the we have a legal index and either a pressed key or a pressed mouse button, then see if the choice was the HELP soft-button. If so then show the help screen, else try to make a nice input to the RPN unit (FormChar) and update the display } if (index <> -1) and (SetButton or KBDevent) then begin if index = HELPKEY then ShowHelp else begin CharInput(FormChar(index)); WriteDisplay(InputString = '') end end end end; { This is the GEM pipe message handler. It takes appropriate action when the AES has placed a message in our pipe } Procedure HandleMsg; var x, y, w, h : Integer; { temporary coordinates } begin case Pipe[0] of AC_OPEN : if Pipe[4] = ACC_handle then if window = -1 then OpenWindow else TopWindow; AC_CLOSE : if Pipe[3] = ACC_handle then Window := -1; WM_REDRAW : RedrawWindow; WM_TOPPED : TopWindow; WM_CLOSED : begin if Pipe[3] = Window then CloseWindow; Quit := AppFlag { don't quit if an accessory } end; WM_MOVED : if Pipe[3] = Window then begin wind_get(window, WF_CURRXYWH, x, y, w, h); graf_movebox(w, h, x, y, Pipe[4], Pipe[5]); wind_set(Window, WF_CURRXYWH, Pipe[4], Pipe[5], Pipe[6], Pipe[7]); { update the dialog box' position in accordance with the window's new position } with Dialog^[CALCULAT] do wind_get(window, WF_WORKXYWH, ob_x, ob_y, ob_w, ob_h) end end end; { This is the main loop, where MyCalc waits for something to happen. evnt_multi looks for two different sets of events, depending on the current state of the program. If it is in "wait-state" it only waits for a message via the pipe. In its second, active, state it waits for message events, mouse events and keyboard events. The below defines the state depending on the environment : GEM environment state ------------------------------------------- MyCalc window closed wait window opened and on top active window open, but not on top wait window topped active This scheme is implemented to minimize MyCalc's request for CPU time. If it wasn't you would experience "slow" - sometimes none at all - response to mouse button activations } Procedure EventLoop; var event : Integer; { Coded value containing event flags } begin event := evnt_multi(eventflags, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Pipe, 0, 0, x, y, button, kbdstate, key, clicks); { at this point, something has happened, so we tell GEM that we're updating the screen (disregarding the fact that we just might not after all) } wind_update(BEG_UPDATE); { determine which events had happned. By using an if...then...else if... structure like the below, only one type of (perhaps concurrent) events are allowed to influence MyCalc. Furthermore, this implements a priority scheme in which ordinary messages (MU_MESAG) are at the highest level, after which we look at the keyboard (MU_KEYBD) and finally at the mouse (MU_BUTTON) } if (event and MU_MESAG) <> 0 then HandleMsg else if (event and MU_KEYBD) <> 0 then if key = Esc then begin Quit := AppFlag; CloseWindow end else Handle(TRUE) { TRUE = keyboard event } else if (event and MU_BUTTON) <> 0 then Handle(FALSE); wind_update(END_UPDATE) { done updating } end; { And then to the main program! It inits the some of the global variables and - if the program was started as ACC - tries to install MyCalc. Otherwise the program runs as application, i.e. opens the window, waits for the user to operate, and upon ESC, closes the window and exits } begin { main } Title := ' MyCalc '#0#0; Quit := FALSE; noRSC := FALSE; LastSelected := -1; window := -1; evnt_flag.wait := MU_MESAG; evnt_flag.active := MU_MESAG or MU_KEYBD or MU_BUTTON; Init; if AppFlag then begin { application (.PRG) } LoadRSC; wind_update(BEG_UPDATE); graf_mouse(ARROW, NIL); OpenWindow; wind_update(END_UPDATE); eventflags := evnt_flag.active; repeat EventLoop until Quit; DeInit end else begin { accessory (.ACC) } ACC_handle := menu_register(AES_handle, Title[1]); if ACC_handle > -1 then begin LoadRSC; eventflags := evnt_flag.wait; repeat EventLoop until false end else begin writeln('No accessory slot for MyCalc'); v_clsvwk(VDI_handle); appl_exit end end end. ; ITEM4 = 21 ; QUIT = 23 ; CONFIG SYS †LŅ?€AUTOEXECBAT 5JŖ\ANSI SYS `r–ŽCOUNTRY SYS `r˜,DISPLAY SYS `rž,DRIVER SYS `r¤’EMM SYS ÖØé „5RAMTYPE SYS r/^¬SREMM SYS j›a®ü9FLYT Ų˜ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööØØØØH$ØH č8 ō+/-ENTERSWAPMyCalc HelpMyCalc RPN ver. 1MyCalc - a HighSpeed Pascal accessory exampleThis accessory works like a RPN (Reverse Polish Notation) calculator,much like the Hewlett Packard calculators, i.e. with a four-elementstack. As this is a simple demo, only the simple functions are implemen-ted : Addition, subtraction, multiplication, division, sign inversion,and swapping of the two top elements of the stack. For those unfamiliarwith RPN, a small example to clearify the operation : The calculation of(2+3) / 4 : On a "normal" calculator, you would enter something like :2 + 3 = / 4 = or ( 2 + 3 ) / 4 =In RPN, you enter : 2 ENTER 3 + 4 / (the result is 1.25)For further understanding, please read MYCALC.DOC.OkMore...It should be noted that exponents can't be entered.MyCalc can be used on the keyboard too; these are the keys used :0 1 2 3 4 5 6 7 8 9 . - enter numberEnter - complete number entry/duplicate top element( - sign inversion : [+/-] button) - swap top elements (x and y registers)Backspace - delete last digitThe stack is laid out as follows :t register : its value is only changed when a number is pushedz registery registerx register : the one shown in the displayOkBack...MyCalc is programmed by Martin Eskildsen, October 1990Esc - close the MyCalc window’’’  ’’’’ 7’’’’’ 8’’’’’ 9’ ’’’’ /’’’’’ 4’’’’’ 5’ ’’’’ 6’  ’’’’ *’ ’’’’ 2’ ’’’’ 3’  ’’’’ -’’’’’ 0’’’’’ +’’’’’ 1’’’’’ ’’’’’ .’’’’’ $ ’’’’ (  ’’’’ .’’’’ 3 ’’ ’’’’ ?’’M’’’’Q-’’’’E’’’’ÅC’’’’ H’’’’RF’’’’™G’’’’įH ’’’’* F ’’’’q ( ’’’’š = ’’’’Ų2 ’’’’ A’’’’A’’’’ 3’’H’’’’JA’’’’Œ&’’’’±C’’’’õ5’’’’+=’’’’i)’’’’“ " ’’’’¶ > ’’’’õ  ’’’’  ’’’’ ) ’’’’5=’’’’8=’’’’@6’’’’ w/Ø h; quit := FALSE; textwindow := -1; grafwindow := -1 { no open windows } end. PIAUTO AUT Diä6ßTEST BAT sś0TEE 4sś1 DD `tś3CONFIG Evś4 {------------------------------------------------------------------------- HighSpeed Pascal GEM accessory demo RPN (Reverse Polish Notation) UNIT Copyright (c) 1990 by D-House I All rights reserved Programmed by Martin Eskildsen -------------------------------------------------------------------------} {$R-,S-,D+,F-} unit RPN; INTERFACE const width = 17; { output field width:digits } digits = 5; CR = #13; { Carriage Return } BS = #08; { BackSpace } type real = extended; { define calculator precision } var error : integer; { error code } inputstring : string [width]; { input string } { Enter a char in the input string or react if the char is a command such as '+', '-', CR etc. } procedure CharInput(ch : char); { Return the value of the top of the stack (x register) } function TopOfStack : real; IMPLEMENTATION type stacktype = record { this is our stack } x, y, z, t : real { structure : four regi-} end; { sters } var stack : stacktype; { the stack } lift : boolean; { allow pushes if true } function TopOfStack : real; begin TopOfStack := stack.x end; { Return the value of the x register, and move the y and z registers up : x -> return value y -> x z -> y t is left alone } function Pop : real; begin with stack do begin Pop := x; x := y; y := z; z := t end end; { Push a value onto the stack : z -> t y -> z x -> y value -> x } procedure Push(n : real); begin with stack do begin t := z; z := y; y := x; x := n end end; { Swap the x and y registers, and enable stack lift } procedure SwapXY; var temp : real; begin lift := TRUE; temp := stack.x; stack.x := stack.y; stack.y := temp end; { Add the x and y register } procedure Add; begin Push(Pop + Pop) { first pop gets x reg, second pop gets y reg } end; { Push(y - x) } procedure Sub; begin Push(-Pop + Pop) end; { Push(x * y) } procedure Mult; begin Push(Pop * Pop) end; { Push(y / x) if x <> 0.0. Otherwise return error 1 } procedure Divide; var n : real; begin n := Pop; if n = 0.0 then begin Push(n); Error := 0 end else Push(Pop / n) end; { Insert a character in the input string, or execute command } procedure CharInput(ch : char); { Add the char to the input string, provided it's not full } procedure AddCh; begin if length(InputString) < width then InputString := InputString + ch end; { If the input string is empty, the x register is duplicated (pushed), otherwise the value formed by the string is evaluated and put on the stack } procedure MakeValue; var value : real; errpos : integer; begin if InputString = '' then Push(stack.x) { duplicate } else begin val(InputString, value, errpos); if errpos <> 0 then error := 1 { error 1 should never occur } else begin if lift then Push(value) else stack.x := value; lift := ch <> CR; if not lift then Push(value) end; InputString := '' end end; begin { CharInput } error := -1; case ch of '0'..'9' : AddCh; '.' : if pos('.', inputString) = 0 then AddCh; CR : MakeValue; BS : if length(inputString) > 0 then delete(inputString, Length(InputString), 1) else begin stack.x := 0.0; { clear x reg if input string } lift := FALSE { was empty, else delete char } end else if InputString <> '' then MakeValue; case ch of '(' : push(-Pop); { sign inversion } ')' : SwapXY; '+' : Add; '-' : Sub; '*' : Mult; '/' : Divide end end end; begin { of unit } InputString := ''; error := -1; lift := FALSE; with stack do begin x := 0.0; y := 0.0; z := 0.0; t := 0.0 end end. öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö. ­l9.. ­l9BIOS UNI @)¤CRT UNI @)<EASYGRAFPAS @) f EASYGRAFUNI @) ŅGEMAES UNI @)BHGEMDECL UNI @)!Ž GEMVDI UNI @)%~_GRAPH UNI @)=ŅrLIBMAKERPAS @)ZaLIBMAKERTTP @)]PRINTER UNI @)c†STPASCALDOC @)dwSTPASCALUNI @)kš³UTILUNITPAS @)˜: UTILUNITUNI @)›xUNI2¶¶ ¬żjņO›hNśč€hś¾* phhī¶Ņ~Ņ $Œö Ą ō R¬Ō P śŖ D l²ę ˆ ¤Fęü Ō: €: >rĪņ“ *  ø‚ ø ,² x nBIOS NDMAREAD6ž’^Š’RR’LŠ’Fž’@DMAWRITE 6ž’&(Š’R’Š’ž’ NVMACCESS6Šžī6RžāŠžÜŠžÖŠžŠBCONMAP6 fžøDŠž¬ ESETSHIFT6 Šž’RŠž†’~ EGETSHIFT6Šžl`ESETBANK 6 ŠžLnŠž@žŹ ESETCOLOR6 Šž&|ŠžŠž ESETPALETTEDŠRżģŠżęŠżąž` EGETPALETTED˜RżøŠż²Šż¬ESETGRAY 6 Šż’¦Šż† ESETSMEAR6 Šżl“Šż`INITMOUS DĀfż:fż4Šż.SSBRK6 fżŠŠż PHYSBASE 6füņŽLOGBASE6füŌģGETREZ 6Šü¶ś SETSCREENDŠüŠfü„fü~ SETPALETTE D füV’¦SETCOLOR 6 Šü<$Šü0Šü*FLOPRD 6Šü2ŠüŠüŠūśŠūōŠūīfūčfūāFLOPWR 6ŠūŹ@Šū¾ŠūøŠū²Šū¬Šū¦fū fūšFLOPFMT6 Šū‚N ŠūvžūpŠūjŠūdŠū^ŠūXŠūRfūLfūFMIDIWS D\fū"ŠūMFPINT DjfśųŠśņIOREC6 fśÜxŠśŠüjKEYTBL 6fśø†fś¬fś¦fś ż@X_RANDOM 6žś†”ž*PROTOBTD¢Šś\ŠśVžśPfśJż>FLOPVER6Šś2°Šś&Šś ŠśŠśŠśfśfśSCRDMP D¾CURSCONF 6 ŠłŹĢŠł¾ŠłøXSETTIME D Śžł’XGETTIME 6žłxčBIOSKEYS DöIKBDWS Dfł.Šł(JDISINTD Šł’JENABINT D  ŠųŽGIACCESS 6 ŠųÄ.ŠųøŠų²żāRSCONF 6žųš<ŠųŽŠųˆŠų‚Šų|ŠųvŠųpOFFGIBIT D JŠųJ’˜ONGIBITD XŠų&üDXBTIMERDffųŠ÷üŠ÷öŠ÷šų°DOSOUNDD tf÷Ģś SETPRT 6 Š÷“‚Š÷ØžŹKBDVBASE 6f÷ŽKBRATE 6 Š÷pžŠ÷dŠ÷^PRTBLK D ¬f÷:žVSYNCDŗSUPEXECD ČföśPUNTAESDÖų GETMPB D äföø’šBCONSTAT 6 ŠöžņŠö’’ BCONIN 6 žözŠönBCONOUTD ŠöJŠöDžœRWABS6žö.Šö"ŠöŠöföŠö SETEXC 6fõņ*fõęŠõąTICKCAL6žõČ8GETBPB 6 fõŖFŠõžž@BCOSTAT6 žõ†TŠõzMEDIACH6 žõbbŠõVDRVMAP 6žõ>p’āKBSHIFT6 žõ ~ŠõžŠE_OK \ŠõüøERROR\Šōņ’’’’ų"EDRVNR \ŠōŽ’’’ž÷šEUNCMD \ŠōŹ’’’żE_CRC\Šōø’’’üū$EBADRG \Šō¤’’’ūž˜E_SEEK \Šō’’’ś’ŲEMEDIA \Šō|’’’łžøESECNF \Šōh’’’ų’žEPAPER \ŠōT’’’÷EWRITEF\Šō@’’’öśĢEREADF \Šō,’’’õż0EWRPRO \Šō’’’óśÄE_CHNG \Šō’’’ņ÷ŲEUNDEV \Šóš’’’ń’`EBADSF \ŠóÜ’’’š’ŲEOTHER \ŠóČ’’’ļ$ „BSystem„†OSystem2 Bios Œd‚,ųdŒDMAREAD˜DMAWRITE¤NVMACCES°BCONMAP¼ESETSHIFČEGETSHIFŌESETBANKąESETCOLOģESETPALEųEGETPALEESETGRAYESETSMEAINITMOUS(SSBRK4PHYSBASE@LOGBASELGETREZXSETSCREEdSETPALETpSETCOLOR|FLOPRDˆFLOPWR”FLOPFMT MIDIWS¬MFPINTøIORECŠKEYTBLÜX_RANDOMčPROTOBTōFLOPVERSCRDMP CURSCONFXSETTIME$XGETTIME0BIOSKEYS<IKBDWSHJDISINTTJENABINT`GIACCESSÄRSCONFlOFFGIBITxONGIBIT„XBTIMERDOSOUNDœSETPRTØKBDVBASE“KBRATEĄPRTBLKĢVSYNCŲSUPEXECäPUNTAESšGETMPBüBCONSTATBCONINBCONOUT RWABS,SETEXC8TICKCALDGETBPBPBCOSTAT\MEDIACHhDRVMAPtKBSHIFT˜,(¤,6°,D¼RČ`Ōną|ģŠų"˜"¦“Ā("Š4Ž@ģLśXd$p$|2ˆ8@”8N @\¬jøxÄ<Š4†Ü(”č¢ō(°8¾ ĢŚ$č0ö<HT `.lJxX„f(tœ‚ؐ“žĄ¬ĢŗŲČäÖšäüņ ,0*8 8DFPT\bhpt~NV?./.?. /.?<*NNŽü-@N^ _Oļ NŠNV?./.?. /.?<+NNŽü-@N^ _Oļ NŠNV/.?. ?. ?.?<.NNŽü =@N^ _Oļ NŠNV?.?<,NNXO-@ N^ _TNŠNV?.?<PNNXO=@ N^ _TNŠNV?<QNNTO=@N^NuNV?.?<RNNXO=@ N^ _TNŠNV?. ?.?<SNN\O=@ N^.ŸNuNV/. ?. ?.?<TNNŽü N^ _PNŠNV/. ?. ?.?<UNNŽü N^ _PNŠNV?.?<VNNXO=@ N^ _TNŠNV?.?<WNNXO=@ N^ _TNŠNV/./. ?.BgNNŽü N^ _Oļ NŠNV?.?<NNXO-@ N^ _TNŠNV?<NNTO-@N^NuNV?<NNTO-@N^NuNV?<NNTO=@N^NuNV?./. /.?<NNŽü N^ _Oļ NŠNV/.?<NN\ON^.ŸNuNV?. ?.?<NN\O=@ N^.ŸNuNV?.?.?.?.?./. /.?<NNŽü=@N^ _OļNŠNV?.?.?.?.?./. /.?< NNŽü=@N^ _OļNŠNV?./.?.?.?.?.?./. /.?< NNŽü=@ N^ _OļNŠNV/. ?.?< NNPON^ _\NŠNV/. ?.?< NNPON^ _\NŠNV?.?<NNXO-@ N^ _TNŠNV?.?.?.?. ?. ?.?<NNŽü-@N^ _Oļ NŠNV/./. /.?<NNŽü-@N^ _Oļ NŠNV?<NNTO-@N^NuNV?.?./. /.?<NNŽüN^ _Oļ NŠNV?.?.?.?.?./. /.?<NNŽü-@N^ _OļNŠNV?<NNTON^NuNV?. ?.?<NN\O=@ N^.ŸNuNV/.?<NN\ON^.ŸNuNV?<NNTO-@N^NuNV?<NNTON^NuNV/. ?.?<NNPON^ _\NŠNV?.?<NNXON^ _TNŠNV?.?<NNXON^ _TNŠNV?. ?.?<NN\O=@ N^.ŸNuNV?.?<NNXON^ _TNŠNV?.?<NNXON^ _TNŠNV/.?. ?. ?.?<NNŽü N^ _Oļ NŠNV/.?< NN\ON^.ŸNuNV?.?<!NNXO=@ N^ _TNŠNV?<"NNTO-@N^NuNV?. ?.?<#NN\O=@ N^.ŸNuNV?<$NN\ON^.ŸNuNV?<%NNTON^NuNV/.?<&NN\ON^.ŸNuNV>|'NNTON^NuNV/.BgNM\ON^.ŸNuNV?.?<NMXO?N^ _TNŠNV?.?<NMXO-@ N^ _TNŠNV?. ?.?<NM\ON^.ŸNuNV?.?.?./. ?.?<NMŽü-@N^ _Oļ NŠNV/. ?.?<NMPO-@N^ _\NŠNV?<NMTO-@N^NuNV?.?<NMXO-@ N^ _TNŠNV?.?<NMXO-@ N^ _TNŠNV?.?< NMXO-@ N^ _TNŠNV?< NMTO-@N^NuNV?.?< NMXO-@ N^ _TNŠMENUPAS @)h[DEMOWINDPAS @)kq+EVENTS PAS @)vg FORMS PAS @)yą FSEL PAS @)| GEMDEMO DEF @)†GEMDEMO DFN @)€2GEMDEMO H @)dGEMDEMO PAS @)‚VGEMDEMO RSC @)…Ä GEMINTERPAS @)‰!4UNI2¶¶śœ|!0¶œ¶t(W!p¶¶z¶Ņ~4CRTN$W!„BSystem„†OSystem2 Crtd‚,ISH, 0, 0, 0, 0, x, y, w, h); Inform(''); { redraw frame rectangle } Message('That''s all folks!'); Exit_Gem end end. ńņóōõö÷ųłśūüżž’öööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö{$D+} UNIT EasyGraf; { Filename: EasyGraf.pas } { Coder : Jacob V. Pedersen } { Coded : 1-8-1990 } { Purpose : Example } { This unit contains code which makes it easy to draw lines ect. } { It is used by the examples in the \GRAFDEMO directory. } INTERFACE {$F+,D-,R-,S-} Uses GemDecl, GemAES, GemVDI; Var ActiveHandle, { Handle to graphics screen } MaxColor, { Max. color index } MinX, { Minimum and Maximum } MinY, { coordinates } MaxX, MaxY : Integer; WorkOut : WorkOut_array; { Various defaults } Procedure InitGraphics; Procedure DeInitGraphics; Procedure Line( X1,Y1, X2,Y2 : Integer ); Procedure LineColor( col : Integer ); Procedure ClearDevice; Procedure SetClipping( X1,Y1,X2,Y2 : Integer ); Procedure Box(x1,y1,x2,y2 : Integer ); IMPLEMENTATION {$F+,D-,R-,S-} Procedure InitGraphics; Var D: Integer; WorkIn: IntIn_array; Begin d:=Appl_Init; Activehandle := graf_handle(d,d,d,d); For D := 0 to 9 DO WorkIn[D] := 1; WorkIn[10] := 2; WorkIn[11] := 0; v_opnvwk(WorkIn,ActiveHandle,WorkOut); { Open virtual station } MaxX := WorkOut[0]; MaxY := WorkOut[1]; MaxColor := WorkOut[13]-1; MinX := 0; MinY := 0; SetClipping( MinX, MinY, MaxX, MaxY ); End; { InitGraphics } Procedure DeInitGraphics; Begin v_clsvwk(ActiveHandle); { Close virtual station } Appl_Exit; End; { DeInitGraphics } Procedure SetClipping( X1,Y1,X2,Y2 : Integer ); Var Points : Array_4; Begin Points[0] := X1; Points[1] := y1; Points[2] := x2; Points[3] := y2; vs_clip( ActiveHandle, 1, Points ); End; { SetClipping } Procedure ClearDevice; Begin v_clrwk( ActiveHandle ); End; { ClearDevice } Procedure LineColor( col : Integer ); Begin vsl_color( ActiveHandle, Col ); End; { LineColor } Procedure Line( X1,Y1, X2,Y2 : Integer ); Var PntArray : PtSin_Array; Begin PntArray[0] := X1; PntArray[1] := Y1; PntArray[2] := X2; PntArray[3] := Y2; v_pline( ActiveHandle, 2, PntArray) End; { Line } Procedure Box(x1,y1,x2,y2 : Integer ); Begin Line(x1,y1,x2,y1); Line(x2,y1,x2,y2); Line(x2,y2,x1,y2); Line(x1,y2,x1,y1); End; { Box } END. ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööUNI2SS~Ų“ad _Q  OpŠP@ĢORÓa|Q Q LFS²–śŲ¶Ņ~Ll“Vpj*ÜŖ€R¶vˆEASYGRAF N ACTIVEHANDLE QŠ’TMAXCOLOR QŠ’<MINX QŠ’(MINY QŠ’MAXX QŠ’MAXY Q ŠžģWORKOUTQ jžĪ’® INITGRAPHICS DDEINITGRAPHICS D(LINE D6ŠžlŠžfŠž`ŠžZ LINECOLORD DŠž4 CLEARDEVICEDR SETCLIPPINGD`ŠżźŠżäŠżŽŠżŲBOXDnŠżøŠż²Šż¬Šż¦HÓa„BSystem„†OSystem2éåGEMDECL&GEMAES0·GEMVDI EasyGrafB|ascal —Ö|INITGRAPˆDEINITGRøLINE¬LINECOLO CLEARDEV”SETCLIPPÄBOXˆÖr(”` < R¬ Dø 6Ä< nh l((lt.dvd|d‚hŠˆdŒd’d–dœd¤dŖd°d¶d¼dĀdČdĪd` dh(l|"d0h` dh6 dh¾"d0h˜d60d6Fd6\d6NqNqNVžōUN€=_’žUHn’žHn’žHn’žHn’žN€3ßpr ²@m,=@’ž=Ažō`Rn’ž0.’žćHCīžö3¼0.’ž°nžōf’ā=|’ Bn’ HnžöHyHy N€3ł 3ł 09&S@3ĄByBy?9?9?9?9 N€N^NuNqNqNV?9N€N€N^NuNqNqNV’ų=n’ų=n ’ś=n ’ü=n’ž?9?<Hn’ųN€N^ _PNŠNqNqNV?9N€N^NuNqNqNV?9?.N€N^ _TNŠNqNqNVžŽ=nžŽ=n žą=n žā=nžä?9?<HnžŽN€N^ _PNŠNqNqNV?.?. ?. ?. N€?. ?. ?. ?.N€?. ?.?.?.N€?.?.?.?. N€N^ _PNŠUNI2śŲśŲ%Ē€Æƒ~ē(°×ā6ß×Ŗ8&tē(ē(²–śŲ¶Ņ~$@P``p#J  ī$j$FDöˆLšüŠhz¼ž,"ŌR#J¾Lš&#Ätņˆ¶¬!tōų‚ŽtĪ"J"Ž"l ĀŌ! HĢ :!’#f"Ŗ–øGEMAES NMU_KEYBD \Š’` MU_BUTTON\Š’JMU_M1\Š’8MU_M2\Š’&MU_MESAG \Š’’ĘMU_TIMER \Šžś K_RSHIFT \Šžä’bK_LSHIFT \ŠžĪK_CTRL \ŠžŗK_ALT\ŠžØ MN_SELECTED\Šž WM_REDRAW\Šžz’Ą WM_TOPPED\Šžd WM_CLOSED\ŠžN WM_FULLED\Šž8 WM_ARROWED \Šž WM_HSLID \Šž WM_VSLID \ŠżōžäWM_SIZED \ŠżŽ’WM_MOVED \ŠżČ WM_NEWTOP\Šż²AC_OPEN\Šżž(AC_CLOSE \Šżˆ)žP FMD_START\ŠżrFMD_GROW \Šż\’Ō FMD_SHRINK \ŠżD’Ņ FMD_FINISH \Šż,R_TREE \ŠżR_OBJECT \Šż R_TEDINFO\Šüģ R_ICONBLK\ŠüÖR_BITBLK \ŠüĄR_STRING \ŠüŖ R_IMAGEDATA\Šü’R_OBSPEC \Šü| R_TEPTEXT\Šüf’ R_TEPTMPLT \ŠüN ’Ž R_TEPVALID \Šü6 ž R_IBPMASK\Šü R_IBPDATA\Šü R_IBPTEXT\Šūō ’Ō R_BIPDATA\ŠūŽž‚R_FRSTR\ŠūŹR_FRIMG\Šū¶’ĀNAME \Šū¤CLOSER \ŠūFULLER \Šū|’ģMOVER\ŠūjūōINFO \ŠūX’NSIZER\ŠūF UPARROW\Šū2@ž¶DNARROW\Šū€VSLIDE \Šū ’ŲLFARROW\Šśöž RTARROW\ŠśāHSLIDE \ŠśĪ WC_BORDER\ŠśøWC_WORK\Šś¤żxWF_KIND\Šś’†WF_NAME\Šś|žWF_INFO\Šśhžģ WF_WORKXYWH\ŠśPüF WF_CURRXYWH\Šś8 WF_PREVXYWH\Šś ū¼ WF_FULLXYWH\Šśū$ WF_HSLIDE\Šłņūž WF_VSLIDE\ŠłÜ ž–WF_TOP \ŠłČ žp WF_FIRSTXYWH \Šł® ż` WF_NEXTXYWH\Šł– śīWF_RESVD \Šł€ WF_NEWDESK \Šłhś WF_HSLSIZE \ŠłP WF_VSLSIZE \Šł8žV WF_SCREEN\Šł"üģ END_UPDATE \Šł łä BEG_UPDATE \Šųņ’Š END_MCTRL\ŠųÜ’Ņ BEG_MCTRL\ŠųĘśLARROW\Šų“ TEXT_CRSR\ŠųžžÖBUSYBEE\ŠųŠ’˜ HOURGLASS\Šųtž‚ POINT_HAND \Šų\ FLAT_HAND\ŠųF THIN_CROSS \Šų.ś THICK_CROSS\Šų OUTLN_CROSS\Š÷žūlUSER_DEF \Š÷č’üDM_OFF\Š÷ÖM_ON \Š÷ÄG_BOX\Š÷²’“G_TEXT \Š÷ž G_BOXTEXT\Š÷ˆ’ G_IMAGE\Š÷t G_USERDEF\Š÷^’G_IBOX \Š÷JžÖG_BUTTON \Š÷4 G_BOXCHAR\Š÷üfG_STRING \Š÷üG_FTEXT\Šöō G_FBOXTEXT \ŠöÜG_ICON \ŠöČüLG_TITLE\Šö“ ü¬NONE \Šö¢žŽ SELECTABLE \ŠöŠüRDEFAULT\Šöv÷ØF_EXIT \Šöb÷hEDITABLE \ŠöLRBUTTON\Šö8÷ØLASTOB \Šö$ ü TOUCHEXIT\Šö@ž†HIDETREE \Šõų€’VINDIRECT \ŠõāübNORMAL \ŠõĪś°SELECTED \ŠõøCROSSED\Šõ¤ųŒCHECKED\ŠõżzDISABLED \ŠõzOUTLINED \ŠõdSHADOWED \ŠõN WHITE\Šõ<üąBLACK\Šõ*’īRED\ŠõžfGREEN\ŠõżŌBLUE \ŠōöžŖCYAN \ŠōäśTYELLOW \ŠōŠöņMAGENTA\Šō¼’XLWHITE \ŠōØ÷žLBLACK \Šō” ’ģLRED \Šō‚ LGREEN \Šōn ūäLBLUE\Šō\ żśLCYAN\ŠōJ ż‚LYELLOW\Šō6žhLMAGENTA \Šō ż,EDSTART\Šō ’ŠEDINIT \Šóų’®EDCHAR \Šóäł@EDEND\ŠóŅžXTE_LEFT\Šó¾ųšTE_RIGHT \ŠóØų>TE_CNTR\Šó”żp BACKSPACE\Šó~śTAB\Šón ÷øS_DELETE \ŠóXSż S_INSERT \ŠóBRüø SHIFT_INS\Šó,R0RETURN \Šó ENTER\Šór žŖUNDO \ŠņōaūBHELP \Šņāb’īHOME \ŠņŠG’(CUR_UP \Šņ¼H’¤CUR_DOWN \Šņ¦PżŒCUR_LEFT \ŠņK’N CUR_RIGHT\ŠņzMż, SHIFT_HOME \ŠņbG7õSHIFT_CU \ŠņLH8žzSHIFT_CD \Šņ6P2ż.SHIFT_CL \Šņ K4ūSHIFT_CR \Šņ M6üąESC\ŠńśCTRL_A \ŠńężĘCTRL_B \ŠńŅ0ł¤CTRL_C \Šń¾.ś`CTRL_D \ŠńŖ CTRL_E \Šń–žCTRL_F \Šń‚!ųĪCTRL_G \Šńn"üŠCTRL_H \ŠńZ#ó’CTRL_I \ŠńF ’<CTRL_J \Šń2$ ś¼CTRL_K \Šń% żņCTRL_L \Šń & ż&CTRL_M \Ššö2 žŖCTRL_N \Ššā1żtCTRL_O \ŠšĪCTRL_P \ŠšŗōšCTRL_Q \Šš¦ūCTRL_R \Šš’üšCTRL_S \Šš~÷.CTRL_T \ŠšjūÖCTRL_U \ŠšVž CTRL_V \ŠšB/ż`CTRL_W \Šš.÷RCTRL_X \Šš-ū$CTRL_Y \Šš,ż6CTRL_Z \ŠļņüšCTRL_1 \ŠļŽö0CTRL_2 \ŠļŹū”CTRL_3 \Šļ¶łØCTRL_4 \Šļ¢łĄCTRL_5 \ŠļŽõ&CTRL_6 \Šļz÷¤CTRL_7 \Šļfö CTRL_8 \ŠļR ś–CTRL_9 \Šļ> ü®CTRL_0 \Šļ* ü°ALT_A\ŠļōČALT_B\Šļ0’ČALT_C\Šīō.’ALT_D\Šīā ’ALT_E\ŠīŠ’ALT_F\Šī¾!’ALT_G\Šī¬"’ ALT_H\Šīš#’ ALT_I\Šīˆ’ALT_J\Šīv$’ALT_K\Šīd%’ALT_L\ŠīR&õ“ALT_M\Šī@2÷dALT_N\Šī.1ų6ALT_O\Šīö~ALT_P\Šī ųRALT_Q\ŠķųļĄALT_R\Šķęš4ALT_S\ŠķŌūŚALT_T\ŠķĀūÜALT_U\Šķ°ūŽALT_V\Šķž/ūąALT_W\ŠķŒūāALT_X\Šķz-ūäALT_Y\Šķh,ūęALT_Z\ŠķVś°ALT_1\ŠķDxśāALT_2\Šķ2yłtALT_3\Šķ zų²ALT_4\Šķ{÷~ALT_5\Šģü|ļśALT_6\Šģź}łäALT_7\ŠģŲ~ó ALT_8\ŠģĘł2ALT_9\Šģ“’’€õ@ALT_0\Šģ¢’’õ„F1 \Šģ’;÷ĀF2 \Šģ‚<ųvF3 \Šģr=ņÜF4 \Šģb>ł¦F5 \ŠģR?õF6 \ŠģB@šdF7 \Šģ2AżF8 \Šģ"Bż F9 \ŠģCū¼F10\ŠģDżųSHIFT_F1 \ŠėģTżōSHIFT_F2 \ŠėÖUżšSHIFT_F3 \ŠėĄVżģSHIFT_F4 \ŠėŖWżčSHIFT_F5 \Šė”XżäSHIFT_F6 \Šė~YżąSHIFT_F7 \ŠėhZżÜSHIFT_F8 \ŠėR[żŲSHIFT_F9 \Šė<\žś SHIFT_F10\Šė&]’¾CTRL_AE\Šė(ś€CTRL_OE\Šźž'śäCTRL_UE\ŠźźüALT_AE \ŠźÖ(]’ALT_OE \ŠźĀ'[’pALT_UE \Šź®@ž, SH_ALT_AE\Šź˜(}ü SH_ALT_OE\Šź‚'{üf SH_ALT_UE\Šźl\łbGEMERROR 6ŠźP’ž APPL_INIT6Šź0(ž APPL_FIND6 Šź6Rźžą APPL_TRECORD 6ŠéęDR馊éŌł APPL_READDRŠé®ŠéØRé¢żø APPL_WRITE D`ŠézŠétRénżn APPL_TPLAY DnRéFŠé@Šé:ż APPL_EXITD|śL EVNT_KEYBD 6ŠčžŠż¾ EVNT_DCLICK6 ŠčܘŠčŠŠčŹłŲ EVNT_MESAG D ¦Rč¢žž EVNT_TIMER D “ŠčzŠčt÷” EVNT_MULTI 6DŠčXĀŠčLŠčFŠč@Šč:Šč4Šč.Šč(Šč"ŠčŠčŠčŠč ŠčŠēžRēųŠēņŠēģŠēęŠēąŠēŚŠēŌŠēĪŠēČś† EVNT_BUTTON6Šē¬ŠŠē ŠēšŠē”ŠēŽŠēˆŠē‚Šē|ż EVNT_MOUSE D"Ž ŠēTŠēNŠēHŠēBŠē<Šē6Šē0Šē*Šē$üMENU_BAR Dģf꞊ęųłģ MENU_ICHECKDśfꊊꏊęÄśT MENU_IENABLE DfꚊꔊęŽöN MENU_TNORMAL DfędŠę^ŠęXś° MENU_TEXTD$fę2Šę,Rę&ųŅ MENU_REGISTER6Šę2ŠåüRåööņOBJC_ADD D@fåŠŠåŹŠåÄ’6 OBJC_DELETEDNf圊å–õ OBJC_DRAWD\fåpŠåjŠådŠå^ŠåXŠåRŠåL÷ę OBJC_FIND6Šå2jfå&Šå ŠåŠåŠåų® OBJC_OFFSETDxfäęŠäąŠäŚŠäŌ÷¶ OBJC_ORDER D†f䬊䦊ä ó„ OBJC_EDITD”fäzŠät²änŠähŠäbŠä\ó OBJC_CHANGED¢ fä4Šä.Šä(Šä"ŠäŠäŠäŠä Šäś0FORM_DO6Šćģ°f湊挜Ą FORM_ALERT 6Šć¾¾Šć²Rć¬ū FORM_ERROR 6 ŠćĢŠć„õF FORM_CENTERDŚfć\ŠćVŠćPŠćJŠćDł FORM_DIALDč ŠćŠćŠćŠć ŠćŠćŠāśŠāōŠāīüų GRAF_MOUSE DöŠāĘfāĄłR GRAF_MKSTATE DŠā–ŠāŠāŠŠā„ō GRAF_RUBBOXDŠā\ŠāVŠāPŠāJŠāDŠā>õī GRAF_DRAGBOX D  ŠāŠāŠāŠāŠįüŠįöŠįšŠįźŠįäŠįŽž2 GRAF_MOVEBOX D.Šį“Šį®ŠįØŠį¢ŠįœŠį–ś GRAF_GROWBOX D<ŠįlŠįfŠį`ŠįZŠįTŠįNŠįHŠįBēhGRAF_SHRINKBOX DJŠįŠįŠį ŠįŠąžŠąųŠąņŠąģõp GRAF_WATCHBOX6ŠąĪXfąĀŠą¼Šą¶Šą°żš GRAF_SLIDEBOX6Šą’ffą†Šą€ŠązŠątļŠ GRAF_HANDLE6ŠąXtŠąLŠąFŠą@Šą:ī SCRP_READD ‚Rąūø SCRP_WRITE D Rßģō. FSEL_INPUT DžRßÄRß¾Šßø’~ FSEL_EXINPUT D¬RߎR߈Šß‚Rß|öB WIND_CLOSE D ŗŠßTśF WIND_DELETED ČŠß,żź WIND_FIND6 Šß֊ߊßū| WIND_UPDATED 䊎ŲņWIND_NEW Dņüz WIND_OPENDŠŽ’ŠŽŒŠŽ†ŠŽ€ŠŽz’Ā WIND_CREATE6ŠŽ^ŠŽRŠŽLŠŽFŠŽ@ŠŽ:’WIND_GET DŠŽŠŽŠŽŠŽŠŻüŠŻöńVWIND_SET D*ŠŻŠŠŻŹŠŻÄŠŻ¾ŠŻøŠŻ²ü WIND_CALCD$8 ŠŻŒŠŻ†ŠŻ€ŠŻzŠŻtŠŻnŠŻhŠŻbŠŻ\ŠŻVö^ RSRC_LOADD FRŻ0šH RSRC_FREEDTš RSRC_GADDR DbŠÜčŠÜāRÜÜż` RSRC_SADDR DpŠÜ“ŠÜ®fÜØīF RSRC_OBFIX D~ŠÜ€fÜzė® SHEL_READDŒRÜTRÜNėęSHEL_GET DšRÜ(ŠÜ"ļņSHEL_PUT DØRŪüŠŪö’Ø SHEL_FINDD ¶RŪŠķ¤ SHEL_ENVRN DÄfŪØRŪ¢śņ SHEL_WRITE DŅŠŪzŠŪtŠŪnRŪhRŪb0&„BSystem„†OSystem2éåGEMDECL GemAESīL˜NśGEMERRORAPPL_INI*APPL_FINBAPPL_TREAPPL_REAAPPL_WRI6APPL_TPLNAPPL_EXIZEVNT_KEY¢EVNT_DCL~EVNT_MESŠEVNT_TIM–EVNT_MULfEVNT_BUTrEVNT_MOU®MENU_BARŗMENU_ICHĘMENU_IENŅMENU_TNOŽMENU_TEXźMENU_REGöOBJC_ADDOBJC_DELOBJC_DRAOBJC_FIN&OBJC_OFF2OBJC_ORD>OBJC_EDIJOBJC_CHAVFORM_DOnFORM_ALEzFORM_ERR†FORM_CENbFORM_DIAņGRAF_MOUžGRAF_MKS’GRAF_RUBžGRAF_DRAŖGRAF_MOV¶GRAF_GROĀGRAF_SHRĪGRAF_WATŚGRAF_SLIęGRAF_HAN SCRP_REASCRP_WRI"FSEL_INP.FSEL_EXIRWIND_CLO^WIND_DEL‚WIND_FINŽWIND_UPD¦WIND_NEWFWIND_OPE:WIND_CREjWIND_GETvWIND_SETšWIND_CAL²RSRC_LOA¾RSRC_FREŹRSRC_GADÖRSRC_SADāRSRC_OBFīSHEL_REASHEL_GETSHEL_PUTSHEL_FIN*SHEL_ENVśSHEL_WRIīCALLAESąś6 (2RB`*B666nBBDNB|Z Šf( Šrp6Ž~x<¦Š. “–4Ā¢ų–˜®<ģŗ8śĘ@Ņ@Ž@$źD2öB@@N8\b0j&Z*x2N†>@”J\*¢Vr<°b@čnp<¾zBĢ†6Ś’X$ž\* Ŗ|B.¶X*<Āh6JĪh6XŚR$fęJtņV$öž8 N‚. ". ž.F¬:PFX*RP$ŗ^. Čj. v`**‚X*ÖŽ<äš. 8¦€Bņ²F¾. TŹ bÖBpā@~ī8Œś:ŅV$š:Ø:¶*. Ä:h h hdąh"h(h hhh6dą hhh6dąh$dą*h hhh6dą hh.dą4hdądąh hhh2dą8hDhNhXhbh hhh$h,hBdąLhVh`hjhh$dą hh*dą hhh$h,h4h<hDhLhTh\hdhlhth~h†hŽh¦dą¬høhĀhĢhÖhąhźh hh*dą0h hh,dą hhh4dą hhh4dą hhh4dą hhh6dą hh.dą4h hhh4dą hh,dą hhh$h,h4h<hTdą hhh$h,hDdąJh hh,dą6h@h hhh4dą hhh$h,hDdąNh hhh$h,h4h<hDhLhddą hh,dą2h hhh$h,h4h<hDhLhbdąhh.dą4h h"dą(h h"dą,h6h@hJh hhh$h:dąDhNh hhh$h,h4h<hDhZdądhnh hhh$h,h4hJdą hhh$h,h4h<hDhZdą hhh$h,h4h<hDhZdą hhh$h<dąBh hhh4dą:hdąh*h4h>hHh hh,dądą"h,h6h@hh$dąh$dąhh.dą8hhh"h8dąBh hhh$h,hBdąHh hhh$h,hBdą h"dą h"dą hh*dą4h>hHhRh hhh$h,h4hJdą hh*dą0h h"dą hhh$h,h4hJdąTh^hhhrhdąh$dądą hh,dą6h hhh4dą hh,dąhh.dą hhh&h0hHdą hh.dą hh.dąh$dąhh.dąNVAł,0ī0ī0ī 0ī 0īAł"0<ČNBN^ _Oļ NŠNqNqNV=yLN^NuNqNqNV?< Bg?<BgBgN€3łL,=yLN^NuNqNqNV3īD3ī F/.#ßØ?< ?<?<?<BgN€N^ _PNŠNqNqNV3īD3ī F/.#ßØ?< ?<?<?<BgN€N^ _PNŠNqNqNV/.#ßØ?< Bg?<?<BgN€=yL N^.ŸNuNqNqNV3ī D3īF/. #ßØ?<?<?<?<BgN€N^ _PNŠNqNqNV3īD/. #ßØ?<?<?<?<BgN€=yLN^ _\NŠNqNqNV?<Bg?<BgBgN€N^NuNqNqNV?<Bg?<BgBgN€=yLN^NuNqNqNV3īD3īF3īH?<?<?<BgBgN€=yL"n2¹N"n2¹P"n 2¹R"n2¹TN^ _OļNŠNqNqNV3ī D3īF3īH3īJ3īL?<?<?<BgBgN€"n2¹N"n2¹P"n 2¹R"n2¹TN^ _OļNŠNqNqNV/.#ßØ?<Bg?<?<BgN€N^.ŸNuNqNqNV3ī D3īF?<?<?<BgBgN€N^.ŸNuNqNqNV3īBD3ī@F3ī>H3ī<J3ī:L3ī8N3ī6P3ī4R3ī2T3ī0V3ī.X3ī,Z3ī*\3ī(^/.$#ßØ3ī"`3ī b?<?<?<?<BgN€=yLD"n2¹N"n2¹P"n2¹R"n2¹T"n 2¹V"n2¹XN^ _OļNŽ$.¦  ( 6"x Ä*6HTööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööUNI2¶¶F $pĪ ŚÜ(8¢ü,éåpŚŚśŲ¶Ņ~Š–ÜnŠ0f¤Ņp4®nV’~ .H:ø¤@ā“Ŗ¼Ģ0īź>(GEMDECLN CONTROL_MAX\Š’^ INTIN_MAX\Š’Hƒ INTOUT_MAX \Š’0‹ WORKOUT_MAX\Š’8 ADDRIN_MAX \Š’ ADDROUT_MAX\Šžč GLOBAL_MAX \ŠžŠ’ PTS_MAX\Šž¼ AES_PARAM]ņžž žž’~ž€ŽžlŹžhžģ VDI_PARAM]@žP žžD~ž2,žž GLOBAL_ARRAY ]~żž žżņŠżčjżÜ CONTROL_ARRAY]¼żĄ  žż“ŠżŖØżž INTIN_ARRAY]ųż„ ƒžżxŠżnäżbž˜ INTOUT_ARRAY ]6żF ‹žż:Šż0"ż$ PTSIN_ARRAY]rż žüž"Šüō^üč PTSOUT_ARRAY ]°üĢ žüĄ"Šü¶œüŖ ADDRIN_ARRAY ]īüŽ žü‚@füxŚül ADDROUT_ARRAY],üP žüD@fü:ü. WORKOUT_ARRAY]jü 8žürŠūüVūšARRAY_2]¢ūŚ žūĪŠūÄŽūøARRAY_3]Śū¢ žū–ŠūŒĘū€ARRAY_4]ūj žū^ŠūTžūH’ARRAY_5]Jū2 žū& Šū6ūüARRAY_6]‚śś žśī ŠśänśŲARRAY_8]ŗśĀ žś¶Šś¬¦ś ARRAY_10 ]ōśˆ  žś|ŠśrąśfARRAY_16 ].śN žśB Šś8ś,ARRAY_37 ]hś $žśJŠłžTłņGRECT]ŌłŽ$2XQŠłĢYQŠł¼WQŠł¬’ŠHQŠłœŠłŠüÜAES_PB QņłjVDI_PB Q@łTCONTROLQ,¼ł>žŽINTINQDųł*INTOUT QL6łż*PTSINQdrłPTSOUT Q†°ųźśADDRIN QØīųŌż’ADDROUTQč,ų¾GLOBAL Q(~ųØūŠMIN6 ŠųžŠų’ŠųŒMAX6 Šųx(ŠųlŠųfHIPTR6 ŠųP6RųD’fLOPTR6 Šų.DRų"BITTEST6Śų RŠ÷žž÷ų INTERSECT6Ś÷Ž`Ō÷Ź’ųŌ÷Ä EMPTYRECT6 Ś÷²nŌ÷ž’ųMAKEXYXY D|Ō÷x’ų÷rMAKEXYWH DŠ÷L’ųŌ÷F$éå„BSystem„†OSystem2 GemDecl˜GEMDECL˜MIN¤MAX°HIPTR¼LOPTRČBITTESTŌINTERSECąEMPTYRECģMAKEXYXYųMAKEXYWH¤*(°*6¼DČRŌ(`ąŹnģ0|ųRŠR „"d(:d(`dˆdØdn dddd"d(d.d4d:d@dFdLdRdXd^dddjdpdvd|d‚dˆdNqNqNV0. °no =n `=n N^.ŸNuNqNqNV0. °nl =n `=n N^.ŸNuNqNqNV/. H@=@ N^.ŸNuNqNqNV/. =@ N^.ŸNuNqNqNVp2. ćhHĄĄ®J€VĄD@N^ _\NŠNqNqNV’š n Cī’ų"Ų"ŲU n??.’ųN€=_’šU n?(?.’śN€=_’ņU n0 nŠh?0.’ųŠn’ü?N€=_’ōU n0( nŠh?0.’śŠn’ž?N€=_’ö0.’š‘n’ō0.’ņ‘n’öUHn’šN€JWĄD@Aī’š"n"Ų"ŲN^ _PNŠNqNqNV’ų nCī’ų"Ų"ŲJn’ü_ĄDJn’ž_ĮD€@ N^.ŸNuNqNqNV’ų n Cī’ų"Ų"Ų"n2®’ų"n3n’ś0.’ųŠn’üS@"n3@0.’śŠn’žS@"n3@N^ _PNŠNqNqNV’ų n Cī’ų"Ų"Ų"n2®’ų"n3n’ś0.’ün’ųR@"n3@0.’žn’śR@"n3@N^ _PNŠNqNqNVHy,#ßHyD#ßHyd#ß HyL#ß$Hy†#ß(Hy,#ßHy(#ßHyD#ßHyL#ß HyØ#ßHyč#ßN^NuFLYT Ų˜ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööUNI2śŲśŲč“|Aį«ŅÖ(øz dÄŽ ųøB80·tŅÖŅÖ›ZśŲ¶Ņ~ Pp øZÜ ä Ü.’$č: Ś€$ŗ 62ČĘü Äz†T &@Ąŗ^ \°T |ś*nęŅ:v”²†’šGEMVDI NHOLLOW \Š’b’ąSOLID\Š’PPATTERN\Š’<HATCH\Š’* UDFILLSTYLE\Š’’°DOTS \Š’GRID \ŠžīBRICKS \ŠžŚ WEAVE\ŠžČLDASHED\Šž“DOTTED \Šž DASHDOT\ŠžŒ’PDASHED \Šžx DASHDOTDOT \Šž`SQUARED\ŠžLARROWED\Šž8ROUNDED\Šž$NORMAL \ŠžBOLD \Šżž’rSHADED \ŠżźSKEWED \ŠżÖ UNDERLINED \Šż¾OUTLINE\ŠżŖ’ SHADOW \Šż– ž– MD_REPLACE \Šż~MD_TRANS \Šżh’jMD_XOR \ŠżTMD_ERASE \Šż>’Ą ALL_WHITE\Šż(S_AND_D\Šżżž S_AND_NOTD \Šüüž4S_ONLY \Šüč’Ō NOTS_AND_D \ŠüŠD_ONLY \Šü¼S_XOR_D\ŠüØ’jS_OR_D \Šü”žźNOT_SORD \Šü~ż. NOT_SXORD\Šüh ’€NOT_D\ŠüV S_OR_NOTD\Šü@ ’źNOT_S\Šü. ’ī NOTS_OR_D\Šü NOT_SANDD\Šü ALL_BLACK\ŠūģžVREQUEST\ŠūŲSAMPLE \ŠūÄMFDB ]˜ū¦¬¾’MPTR Qfū”’ģ FORMWIDTHQŠū|’č FORMHEIGHT QŠūb’ę WIDTHWORDQŠūJ FORMATFLAG Q Šū0’ę MEMPLANESQ Šū’¶RES1 QŠūRES2 QŠśš’ĄRES3 QŠśÜĀśĘSTRING80 ]¾śŖRP STRING125]䶄~}V_CLSWKD ŠśZż V_CLSVWK D (Šś4žV_CLRWKD 6ŠśV_UPDWKD DŠłģūVST_UNLOAD_FONTS D RŠł¾ŠłøVS_CLIPD`Šł”ŠłŽł€ż VST_LOAD_FONTS 6 ŠłhnŠł\ŠłVūnV_OPNWKD|ųł*žųŠł,jłV_OPNVWK DŠųųųžųŠųśjųģžPV_PLINED˜ŠųŠŠųŹrų¼ś V_PMARKERD¦ŠųžŠų˜rųŠV_GTEXTD“ŠųnŠųhŠųb¾ųP’® V_FILLAREA DĀŠų4Šų.rų ž V_CONTOURFILLDŠŠ÷žŠ÷ųŠ÷ņŠ÷ģ’VR_RECFL DŽŠ÷Ę÷ø V_CELLARRAYDģŠ÷˜÷ŠŠ÷ŒŠ÷†Š÷€Š÷zų÷lV_BARDśŠ÷R÷Dų$V_ARCDŠ÷*Š÷$Š÷Š÷Š÷Š÷ žä V_PIESLICE DŠöäŠöŽŠöŲŠöŅŠöĢŠöĘłųV_CIRCLE D$Šö ŠöšŠö”ŠöŽżü V_ELLIPSED2ŠöhŠöbŠö\ŠöVŠöPV_RBOX D@Šö,öV_RFBOXDNŠöõōų(V_ELLARC D\ŠõÖŠõŠŠõŹŠõÄŠõ¾ŠõøŠõ²V_ELLPIE DjŠõŒŠõ†Šõ€ŠõzŠõtŠõnŠõh V_JUSTIFIEDDxŠõ@Šõ:Šõ4¾õ"’®Šõ(Šõ"ŠõöŅ VSWR_MODED †ŠōöŠōšVS_COLOR D”ŠōŹŠōÄŚō¶ö`VSL_TYPE D ¢Šō˜Šō’ö VSL_UDSTYD °ŠōlŠōfö0 VSL_COLORD ¾Šō@Šō:õ*VSL_ENDS DĢŠōŠōŠō÷¢VSM_TYPE D ŚŠóāŠóÜ VSM_COLORD čŠó¶Šó°÷ VST_ROTATION D öŠó†Šó€’¤VST_FONT D ŠóZŠóTś. VST_COLORD Šó.Šó(żĄ VST_EFFECTSD  ŠóŠņśö VSF_INTERIOR D .ŠņŠŠņŹ VSF_STYLED <Šņ¤Šņž VSF_COLORD JŠņxŠņr’x VSF_PERIMETERD XŠņHŠņBō VSF_UDPATDfŠņRņŠņśÄVR_TRNFM DtŠńź˜ńŲ˜ńŅłņ V_GET_PIXELD‚Šń¶Šń°ŠńŖŠń¤Šńž’ VSM_HEIGHT D ŠńvŠńpżš VSL_WIDTHD žŠńJŠńD’Ō VST_HEIGHT D¬ŠńŠńŠńŠń ŠńŠšžņš VST_POINTDŗŠšŲŠšŅŠšĢŠšĘŠšĄŠšŗžH VST_ALIGNMENTDČŠšŠšŠŠš„Šš~Ššxōx VRO_CPYFMDÖŠšRŠšLŗš>˜š4˜š.ż VRT_CPYFMD䊚Ššŗš˜ļö˜ļš¢ļī VSIN_MODEDņŠļŠŠļŹŠļÄųø VRQ_CHOICE DŠļœŠļ–ŠļōĘVSC_FORM DŠļjhļ\V_SHOW_C D Šļ>Šļ8õ€V_HIDE_C D *ŠļńVVQ_KEY_S D8ŠīģŠīęōŒVQ_MOUSE DFŠīĄŠīŗŠī“Šī®śt VSM_CHOICE 6Šī’TŠī†Šī€÷ņ VRQ_VALUATOR DbŠīVŠīPŠīJŠīDń VRQ_LOCATORDpŠīŠīŠīŠī ŠīŠķžńŅ VSM_LOCATOR6Šķā~ŠķÖŠķŠŠķŹŠķĊķ¾Šķøž( VSM_VALUATOR DŒŠķŽŠķˆŠķ‚Šķ|Šķv VRQ_STRING DšŠķNŠķHŠķB¢ķ4¾ķ*ńL VSM_STRING 6ŠķØŠķŠķŠķ¢ģō¾ģźųVEX_TIMV D¶ŠģŠfģŹfģĊģ¾ūzVEX_BUTV DÄŠģ˜fģ’fģŒż(VEX_MOTV DŅŠģffģ`fģZ’dVEX_CURV DąŠģ4fģ.fģ(ō“ VQ_EXTENDDīŠģŠėüjėī’8VQL_ATTRIBUTES DüŠėŹ‚ė¼ūLVQM_ATTRIBUTES D Šė˜JėŠ’jVQF_ATTRIBUTES DŠėfJėXVQT_ATTRIBUTES D&Šė4ōė&ńŲVQ_COLOR 6Šė4ŠėŠėŠźüŚźīõD VQT_EXTENT DBŠźĪ¾ź¼’®ŗźŗśˆ VQT_WIDTH6ŠźØPŠźœ²ź–ŠźŠźŠŠź„ė¬VQT_NAME 6Šźj^Šź^ŠźX¾źFū@ VQ_CELLARRAY D lŠź(źŠźŠźŠźŠź Šź6éöś: VQIN_MODEDzŠéŲŠéŅŠéĢļ˜ VQT_FONTINFO DˆŠé¢ŠéœŠé–鈊銌é|ū VQ_CHCELLS D–Šé\ŠéVŠéPų– V_EXIT_CUR D ¤Šé(’\ V_ENTER_CURD ²ŠéżŅV_CURUPD ĄŠčÜō V_CURDOWND ĪŠč¶żV V_CURRIGHT D ÜŠčŽ V_CURLEFTD źŠčhóx V_CURHOMED ųŠčBV_EEOS D ŠčV_EEOL D Šēśö VS_CURADDRESSD"ŠēŠŠēŹŠēÄ’‚ V_CURTEXTD0Šēž¾ēŒ’®V_RVON D >ŠētžLV_RVOFFD LŠēPų VQ_CURADDRESSDZŠē&Šē Šēūˆ V_HARDCOPY D hŠęņī.V_DSPCUR DvŠęĢŠęʊꥳV_RMCURD „ŠęœüJ V_FORM_ADV D ’Šętż˜V_OUTPUT_WINDOWD ŠęHę:V_CLEAR_DISP_LISTD ®Šę VQP_FILMSD¼ŠåīäåÜż€VSP_SAVE D ŹŠåĀņn VSP_MESSAGED ŲŠåščHV_META_EXTENTS DęŠånŠåhŠåbŠå\ŠåVėj VM_FILENAMEDōŠå.¾å’®žę VQ_TABSTATUS 6 Šå Šäžļā VS_PALETTE 6 ŠäāŠäÖŠäŠėH VQP_ERROR6 Šä¶ŠäŖž6 VQP_STATED",Šä„Šä~ŠäxŠärŠälŠäf.äX÷Ō VSP_STATED:Šä:Šä4Šä.Šä(Šä"Šä.äś’ V_WRITE_META DHŠćģŠćęųćŲŠćŚrćĢ÷Ž V_BIT_IMAGEDVŠć¬¾ćš’®Šć ŠćšŠć”ć†00·„BSystem„†OSystem2éåGEMDECL GemVDIr hą V_CLSWK$V_CLSVWK0V_CLRWK<V_UPDWKTVST_UNLO`VS_CLIPHVST_LOADV_OPNWKV_OPNVWKlV_PLINExV_PMARKE„V_GTEXTV_FILLARØV_CONTOU“VR_RECFLœV_CELLARĄV_BARĢV_ARCŲV_PIESLIäV_CIRCLEV_ELLIPSV_RBOX V_RFBOXšV_ELLARCüV_ELLPIE,V_JUSTIF8VSWR_MODDVS_COLORPVSL_TYPE\VSL_UDSTtVSL_COLO€VSL_ENDSŒVSM_TYPE¤VSM_COLOČVST_ROTAŌVST_FONTąVST_COLOģVST_EFFE VSF_INTE VSF_STYL VSF_COLO (VSF_PERI 4VSF_UDPA XVR_TRNFM dV_GET_PI˜VSM_HEIGhVSL_WIDT°VST_HEIG¼VST_POINųVST_ALIG @VRO_CPYF LVRT_CPYF pVSIN_MOD ¬VRQ_CHOI ÜVSC_FORM ōV_SHOW_C V_HIDE_C $VQ_KEY_S 0VQ_MOUSE øVSM_CHOI ”VRQ_VALU |VRQ_LOCA ˆVSM_LOCA  VSM_VALU ÄVRQ_STRI ŠVSM_STRI <VEX_TIMV VEX_BUTV čVEX_MOTV VEX_CURV HVQ_EXTEN `VQL_ATTR lVQM_ATTR xVQF_ATTR „VQT_ATTR TVQ_COLOR VQT_EXTE œVQT_WIDT ØVQT_NAME “VQ_CELLA ĄVQIN_MOD ĢVQT_FONT ŲVQ_CHCEL äV_EXIT_C šV_ENTER_ üV_CURUP V_CURDOW V_CURRIG V_CURLEF ,V_CURHOM 8V_EEOS DV_EEOL PVS_CURAD \V_CURTEX hV_RVON tV_RVOFF €VQ_CURAD ˜V_HARDCO ¤V_DSPCUR °V_RMCUR ¼V_FORM_A ČV_OUTPUT ŌV_CLEAR_ ųVQP_FILM VSP_SAVE (VSP_MESS @V_META_E XVM_FILEN ŒVQ_TABST ģVS_PALET 4VQP_ERRO VQP_STAT VSP_STAT LV_WRITE_ ąV_BIT_IMrGEMVDIPdŒ*ŒGEMVDIF~¦2¦GENSET˜Ą:ĄGENSETP²Ś4ŚRETCONTRĢō$ ōGENESCAPę0| ą**Š$ą*(0*6<*DH*nT8R`2`lv˜xr¦„r“ž*ĀœzģØ|<Š“F$ŽĄlśĢtŲ`6ä`6$šT0\üh<jh<2V0@ tN,tx8ĘH†D ”PV*¢\ °h žt8¾€ ĢŒ<Ś˜ ¤H*č° ¬¼d6ŗČ^0öŌ ą ģ  ų Č P$.  <  J ( X 4 f @JÖ LĄNä XÖZt dtB‚ pP$ņ |<p ˆZ*~ ”l6b  HŒ ¬R$ ø<T Ä:š Š¬<Ø Ü“B č@Ņ ō^0 2* *Ä ^0ą $^08 02F <H¶ Hf0ī Tø$4 `„$ü lv x‚$ „j& ¬B œĢ$P ØZ*^ “¼6l ĄÖ6z Ģ<ˆ Ų˜H– äF¤ š² üĄ Ī Ü ź ,ų 8 D P" \D$0 h’$> tL €Z Œ4 ˜& h ¤v °D$„ ¼’ Č  Ōt® ąV ģč6 ų@¼ “6, ”*: ØBŹ (Ų 4 @& ę LV0H X^$ō’$ hhh hhh&h hhh*d~ hhh(dd hh hhh&ddh,h4hDddNhxh¼h hhddh"h,hDddNhxh¼h hhdd hhdd hhdd hhh*d~ hhh(dd hhhJhjdd hhFhfdd hhFhfddp|h*h2h:hrhdd hhNhndd hh"h*h2h:hDhNp¾Xhndd hhh$h,h:dd hh@h`dd hhhHhhdd hhh$h,h4h<hDhRdd hhh$h,h4h<hDhRdd hhh"h*h2h:hHdd hhh$h,h4h<hDhLhZdd hhh$h,h4h<hDhLhZdd hhh"h*h2h:hHdd hhhHhhdd hhhHhhddp|h,h4hlh„hŒh”hœh¤hŖhøddd² hhh$h0h<hJddd²d² hhh h.ddd² hhh"h0ddd² hhh"h(h0h>ddd² hhh h.dd8hBhLhVh hhh(dd2h<hFhPhd²d²d²d² hhh"h2d~Bhd²d²d²d² hh h0p¾>dd hh h6&h2hD8hDh6JhVhD\hdh’h²dd hh h6&h2hD8hDh6JhVhD\hdhnhzhØhČdd hhh6"h.hD4h@h6FhRhDXhfdd hhh"h2d~Bh hhh"h0dd hhh"h2d~BhLh hhh"h2d~BhLhRhZh hhh*d~:h hhh*d~:hDh hhh*d~ hh d~,h hh h(h2h>hLddRh`h†h hh h(h2h>hLddRh`h†h¤h hhh&p¾4dd hhh6"h.hD4hBddJdĢ hhh(dd hhdd hhh6"h.hD4hBddJdĢ hhh6"h.hD4hBddJdĢ hh d~ hh d~0h:h hhh6"h.hD4hDd~RdĢ hhh(ddRh–h hhh"h2d~`h hhddHhhh hhddHhhhth hhddHh hhddHhŠhp|h(h`h~ddØh hhh*d~8hBhLh hhh*d~@p|fp`rhp˜¢p| hhhJhjddth~h„h²h hhh*d~ hh d~0h:hDhPh\hhhrh|hˆh hhh(d~8hdędędędędędędędędę hhh"h*h8ddp|h(h0hhh†dddędędęh&hdęhdę hhh"h*h8dddędę hhhHhhdddęp|h&h^hœh¶hÄhĢhŚdd hhh"h2d~ hhh&dd8p|^p`jhˆp˜šp|dęh&h0h:hDhph hhh"h*h2h:hBhJhzhšdddędędęh hhh"h*h2h:hHdd hhh&h8hPddp|h(h0hhh†ddNqNqNV3ī ,3ī8Ał"psNBN^.ŸNuNqNqNV3ī ,3ī8Ał"psNB=yL N^.ŸNuNqNqNVBy.3ü23īDU?. ?. N€=_N^ _\NŠNqNqNVBy.3ü23īD?. ?. N€N^ _\NŠNqNqNV09>HĄH@29@HĮŠ-@N^NuNqNqNVBy.By23ī 6?<?.N€N^.ŸNuNqNqNVžō nCīžųpA"ŲQČ’üAīžųCłDpA"ŲQČ’üBy.3ü 2?< n ?N€"n 2¹8pr,²@m8=@žö=Ažō`Rnžö0.žöćH2.žöćIAłL"n3°0.žö°nžōf’Öp-r8²@m<=@žö=Ažō`Rnžö0.žöćH2.žöA-ćIAł†"n3°0.žö°nžōf’ŅN^ _Oļ NŠNqNqNVBy.By2?<?.N€N^ _TNŠNqNqNVžō nCīžųpA"ŲQČ’üBy.3ü 2AīžųCłDpA"ŲQČ’ü?<d n ?N€"n 2¹8pr,²@m8=@žö=Ažō`Rnžö0.žöćH2.žöćIAłL"n3°0.žö°nžōf’Öp-r8²@m<=@žö=Ažō`Rnžö0.žöćH2.žöA-ćIAł†"n3°0.žö°nžōf’ŅN^ _Oļ NŠNqNqNVBy.By2?<e?.N€N^ _TNŠNqNqNVBy.By2?<?.N€N^ _TNŠNqNqNVBy.By2?<?.N€N^ _TNŠNqNqNVBy.3ü23īDU?<w?. N€=_ N^.ŸNuNqNqNVBy.3ü23īD?<x?. N€N^.ŸNuNqNqNV’ü3ü.3ü23ī Dpr²@m8=@’ž=A’ü`Rn’ž0.’žćH2.’žćI nCłd3°0.’ž°n’üf’Ö?<?.N€N^ _PNŠNqNqNV’ü3ī .By20. ćHS@r°Am8=A’ž=@’ü`Rn’ž0.’žćH2.’žćI nCłd3°0.’ž°n’üf’Ö?<?.N€N^ _PNŠNqNqNV’ü3ī .By20. ćHS@r°Am8=A’ž=@’ü`Rn’ž0.’žćH2.’žćI nCłd3°0.’ž°n’üf’Ö?<?.N€N^ _PNŠNqNqNV’Ŗ/.Hn’®?<PN€3ü.p.’®3Ą23īd3ī fp.’®r°Am<=A’¬=@’Ŗ`Rn’¬0.’¬S@ćH2.’¬tAī’®0CłD3‚0.’¬°n’Ŗf’Ņ?<?.N€N^ _Oļ NŠNqNqNV’ś3ī .By20. ćHS@=@’üp2.’ü²@m8=@’ž=A’ś`Rn’ž0.’žćH2.’žćI nCłd3°0.’ž°n’śf’Ö?< ?.N€N^ _PNŠNqNqNV3ü.0.Įī3Ą23ī:3ī<3ī>3ī @/.Hyd?<N€ nCłDpA"ŲQČ’ü?< ?.N€N^ _OļNŠNqNqNV3ü.3ü23ī d3ī f3īD?<g?.N€N^ _PNŠNqNqNV’ü3ü.By2pr²@m8=@’ž=A’ü`Rn’ž0.’žćH2.’žćI nCłd3°0.’ž°n’üf’Ö?<r?. N€N^ _\NŠNqNqNV’ü3ü.By23ü6pr²@m8=@’ž=A’ü`Rn’ž0.’žćH2.’žćI nCłd3°0.’ž°n’üf’Ö?< ?. N€N^ _\NŠNqNqNV3ü.3ü23ü63ī D3īF3īd3īf3ī p?< ?.N€N^ _Oļ NŠNqNqNV3ü.3ü23ü63ī D3īF3īd3īf3ī p?< ?.N€N^ _Oļ NŠNqNqNV3ü.By23ü63ī83ī d3ī f3īl?< ?.N€N^ _PNŠNqNqNV3ü.3ü23ü63ī D3īF3īd3īf3īh3ī j?< ?.N€N^ _OļNŠNqNqNV3ü.3ü23ü63ī D3īF3īd3īf3īh3ī j?< ?.N€N^ _OļNŠNqNqNV3ü.By23ü63īd3ī f3ī h3īj?< ?.N€N^ _Oļ NŠNqNqNV’ü3ü.By23ü6pr²@m8=@’ž=A’ü`Rn’ž0.’žćH2.’žćI nCłd3°0.’ž°n’üf’Ö?< ?. N€N^ _\NŠNqNqNV’ü3ü.By23ü 6pr²@m8=@’ž=A’ü`Rn’ž0.’žćH2.’žćI nCłd3°0.’ž°n’üf’Ö?< ?. N€N^ _\NŠNqNqNV’Ŗ/.Hn’®?<PN€3ü.p.’®T@3Ą23ü 6p.’®r°Am<=A’¬=@’Ŗ`Rn’¬0.’¬R@ćH2.’¬tAī’®0CłD3‚0.’¬°n’Ŗf’Ņ3ī D3īF3īd3īf3ī hByj?< ?.N€N^ _OļNŠNqNqNV?< ?. ?.N€N^.ŸNuNqNqNVBy.3ü23ī D n3ŠF n3čH n3čJ?<?.N€N^ _PNŠNqNqNV?<?. ?.N€N^.ŸNuNqNqNV?<q?. ?.N€N^.ŸNuNqNqNV3ü.By23īdByf?<?. N€N^.ŸNuNqNqNV?<?. ?.N€N^.ŸNuNqNqNVBy.3ü23ī D3īF?<l?. N€N^ _\NŠNqNqNV?<?. ?.N€N^.ŸNuNqNqNV3ü,3ü.By23ī 8Byd3īf?<?. N€N^.ŸNuNqNqNV?<?. ?.N€N^.ŸNuNqNqNV3ü.By2Byd3īf?< ?.N€"n2¹†"n2¹ˆ"n 2¹Š"n2¹ŒN^ _OļNŠNqNqNVBy.3ü23īD?<k?.N€"n2¹†"n2¹ˆ"n 2¹Š"n2¹ŒN^ _OļNŠNqNqNV?< ?. ?.N€N^.ŸNuNqNqNV?<?. ?.N€N^.ŸNuNqNqNV?<?. ?.N€N^.ŸNuNqNqNV?<j?. ?.N€N^.ŸNuNqNqNVBy.3ü23īD3īFU?<'?.N€"n 2Ÿ"n2¹NN^ _OļNŠNqNqNV?<?. ?.N€N^.ŸNuNqNqNV?<?. ?.N€N^.ŸNuNqNqNV?<?. ?.N€N^.ŸNuNqNqNV?<h?. ?.N€N^.ŸNuNqNqNVBy.0.éH3Ą2/. HyD0.éHćH?N€?<p?.N€N^ _PNŠNqNqNV’ü3ü.3ü2U/. N€3ß:U/. N€3ßU/.N€3ß@3īDpr²@m8=@’ž=A’ü`Rn’ž0.’žćH2.’žćI nCłd3°0.’ž°n’üf’Ö?<m?.N€N^ _OļNŠNqNqNV’ü3ü.3ü2U/.N€3ß:U/.N€3ßU/. N€3ß@3īD n3ŠF n3čHpr²@m8=@’ž=A’ü`Rn’ž0.’žćH2.’žćI nCłd3°0.’ž°n’üf’Ö?<y?.N€N^ _OļNŠNqNqNVBy.By2U/. N€3ß:U/. N€3ßU/.N€3ß@?<n?.N€N^ _Oļ NŠNqNqNV3ü.By23īd3īfU?<i?.N€"n 2Ÿ"n2¹NN^ _OļNŠNqNqNVBy.3ü23ī D3īF?<!?. N€N^ _\NŠNqNqNV3ü.By23īd3īfU?<?.N€"n2Ÿ"n2¹†"n 2¹ˆN^ _OļNŠNqNqNV3ü.By23īd3īfU?<?.N€"n2Ÿ"n2¹†"n 2¹ˆ094ćHŠy0=@N^ _OļNŠNqNqNVBy.3ü23īDU?<?.N€"n 2Ÿ"n2¹NN^ _Oļ NŠNqNqNVBy.3ü23īDU?<?.N€"n2Ÿ"n2¹4"n 2¹NN^ _OļNŠNqNqNVBy.3ü23ī DU?<?.N€"n2ŸN^ _PNŠNqNqNVBy.By2U?<?. N€"n2Ÿ=y4N^ _\NŠNqNqNV’ü3ü.3ü20.D@3ĄD3īF n 3Šd n 3čf?<?.N€094"n€p294²@m:=@’ž=A’ü`Rn’ž0.’ž2.’žSAćIAłL40"n‚0.’ž°n’üf’ŌN^ _OļNŠNqNqNV’ü3ü.3ü20.D@3ĄD3īF n 3Šd n 3čf?<?.N€094"n€p294²@m:=@’ž=A’ü`Rn’ž0.’ž2.’žSAćIAłL40"n‚0.’ž°n’üf’Ō=y4N^ _OļNŠNqNqNV’žBy.3ü%2/.HyD?<JN€?<o?. N€N^ _\NŠNqNqNVBy.By2U/. N€3ß:U/. N€3ß"n2¹@=yB p2<‹²@m8=@’ž=A’ü`Rn’ž0.’žćH2.’žćIAłL"n3°0.’ž°n’üf’ÖN^ _OļNŠNqNqNVBy.3ü23ī DU?<s?.N€"n2ŸN^ _PNŠNqNqNVBy.By2U?<ƒ?.N€"n2Ÿ"n2¹N"n2¹ˆ"n3yŒ"n3y"n3y”"n 2¹†"n2¹Š"n3yŽ"n3y’N^ _OļNŠNqNqNVBy.By23ü6U?<?.N€"n 2Ÿ"n2¹NN^ _Oļ NŠNqNqNV?<?.N€N^ _TNŠNqNqNV?<?.N€N^ _TNŠNqNqNV?<?.N€N^ _TNŠNqNqNV?<?.N€N^ _TNŠNqNqNV?<?.N€N^ _TNŠNqNqNV?<?.N€N^ _TNŠNqNqNV?<?.N€N^ _TNŠNqNqNV?< ?.N€N^ _TNŠNqNqNV?< ?.N€N^ _TNŠNqNqNVBy.3ü23ü 63ī D3īF?<?. N€N^ _\NŠNqNqNV’Ŗ/.Hn’®?<PN€By.p.’®3Ą23ü 6p.’®r°Am<=A’¬=@’Ŗ`Rn’¬0.’¬S@ćH2.’¬tAī’®0CłD3‚0.’¬°n’Ŗf’Ņ?<?. N€N^ _\NŠNqNqNV?< ?.N€N^ _TNŠNqNqNV?<?.N€N^ _TNŠNqNqNV?<?.N€"n 2¹L"n2¹NN^ _Oļ NŠNqNqNV?<?.N€=yL N^ _TNŠNqNqNV?<?.N€N^ _TNŠNqNqNV3ü.By23ü63ī d3īf?<?. N€N^ _\NŠNqNqNV?<?.N€N^ _TNŠNqNqNV?<?.N€N^ _TNŠNqNqNV’ü3ü.By23ü6pr²@m8=@’ž=A’ü`Rn’ž0.’žćH2.’žćI nCłd3°0.’ž°n’üf’Ö?<?. N€N^ _\NŠNqNqNV?<?.N€N^ _TNŠNqNqNV’Ŗ/.Hn’®?<PN€3īD3īFp.’®r°Am<=A’¬=@’Ŗ`Rn’¬0.’¬R@ćH2.’¬tAī’®0CłD3‚0.’¬°n’Ŗf’Ņpr²@m8=@’¬=A’Ŗ`Rn’¬0.’¬ćH2.’¬ćI nCłd3°0.’¬°n’Ŗf’Ö3ī .p.’®T@3Ą23ü6?<?.N€N^ _OļNŠNqNqNVBy.3ü23ü<63īDU?<?. N€=_ N^.ŸNuNqNqNVžśBy.By23ü[6?<?. N€Hz†/.?<}N€pr|²@mf=@’ž=A’ü`Rn’ž/.HnžüN€0.’žćHAłL20A’A=AžśHnžśHnžüN€Hnžü/.?<}N€0.’ž°n’üf’ØN^ _\NŠ NqNqNV’ü?<\?. N€"n2¹L"n2¹N"n2¹P"n2¹R"n 2¹Tpr²@m:=@’ž=A’ü`Rn’ž0.’žćH2.’žZAćIAłL"n3°0.’ž°n’üf’ŌN^ _OļNŠNqNqNV’üBy.3ü23ü]63ü]83īD3īF3īH3īJ3ī Lpr²@m:=@’ž=A’ü`Rn’ž0.’žX@ćH2.’žćI nCłD3°0.’ž°n’üf’Ō?<?.N€N^ _OļNŠNqNqNV?<^?.N€N^ _TNŠNqNqNV?<_?.N€N^ _TNŠNqNqNV?<`?.N€=yL N^ _TNŠNqNqNV3ü.By23üb63īd3ī f3ī h3īj?<?.N€N^ _Oļ NŠNqNqNV3ī.3ī 23üc6 nCłDpA"ŲQČ’ü nCłdpG"ŲQČ’ü2Ų?<?.N€N^ _OļNŠNqNqNV’Ŗ/.Hn’®?<PN€By.p.’®3Ą23üd6p.’®r°Am<=A’¬=@’Ŗ`Rn’¬0.’¬S@ćH2.’¬tAī’®0CłD3‚0.’¬°n’Ŗf’Ņ?<?. N€N^ _\NŠ disk, so that the currently marked block can be saved, or make the block smaller. `tś3CONFIG Evś4 UNI2 bŅU&Žśm< Ō )¤9. ō Ā ¶ī Žf² „ )¤ )¤ š bŅ Ÿ~ žüG>U¶Ņ~V\ špxLŹ> ,üz œüH<ž‚FHĀJ\ī¼x D‚Č* ĘĪŌüŚŒVŌ ąöĀÜN \tŽ*$¦,j .6øŌ  GRAPHN GRAPHVERSION \*’^?’ŒĢĢĢĢĢĢĶGROK \Š’F GRNOINITGRAPH\Š’,’’’’ GRNOTDETECTED\Š’’’’žGRFILENOTFOUND \Šžö’’’żGRINVALIDDRIVER\ŠžŚ’’’ü GRNOLOADMEM\ŠžĀ’’’ū’j GRNOSCANMEM\ŠžŖ’’’ś GRNOFLOODMEM \Šž’’’ł’ĪGRFONTNOTFOUND \Šžt’’’ų GRNOFONTMEM\Šž\’’’÷ GRINVALIDMODE\ŠžB’’’öGRERROR\Šž.’’’õ GRIOERROR\Šž’’’ō GRINVALIDFONT\Šżž’’’óGRINVALIDFONTNUM \Šżą’’’ņDETECT \ŠżĢCGA\Šż¼MCGA \ŠżŖ’’EGA\Šżš’lEGA64\Šżˆž\EGAMONO\ŠżtIBM8514\Šż`HERCMONO \ŠżJ’LATT400 \Šż6VGA\Šż& PC3270 \Šż STCOLOR\Šüž STMONO \Šüź ’.STLOW\ŠüŲSTMEDIUM \ŠüĀžNSTHIGH \Šü®CGAC0\ŠüœCGAC1\ŠüŠCGAC2\ŠüxCGAC3\ŠüfCGAHI\ŠüTMCGAC0 \Šü@MCGAC1 \Šü,MCGAC2 \ŠüžLMCGAC3 \ŠüMCGAMED\Šūšž|MCGAHI \ŠūÜ’ģEGALO\ŠūŹž¤EGAHI\ŠūøEGA64LO\Šū¤žāEGA64HI\Šū EGAMONOHI\Šūz HERCMONOHI \ŠūbATT400C0 \ŠūLATT400C1 \Šū6ü\ATT400C2 \Šū ATT400C3 \Šū ż` ATT400MED\Šśōž“ATT400HI \ŠśŽVGALO\ŠśĢVGAMED \Šśø’‚VGAHI\Šś¦’DPC3270HI \Šśž IBM8514LO\Šśzüą IBM8514HI\ŠśdūRBLACK\ŠśRBLUE \Šś@GREEN\Šś.ž*CYAN \Šś’øRED\Šś MAGENTA\ŠłųBROWN\Šłęžl LIGHTGRAY\ŠłŠDARKGRAY \ŠłŗżT LIGHTBLUE\Šł¤ ü’ LIGHTGREEN \ŠłŒ üŽ LIGHTCYAN\Šłv ż¾LIGHTRED \Šł` ž LIGHTMAGENTA \ŠłF YELLOW \Šł2ž¢WHITE\Šł ’:EGABLACK \Šł ž>EGABLUE\ŠųöžźEGAGREEN \ŠųąEGACYAN\ŠųĢ’¬EGARED \Šųø EGAMAGENTA \Šų žŠEGABROWN \ŠųŠžJ EGALIGHTGRAY \Šųpž¶ EGADARKGRAY\ŠųX8 EGALIGHTBLUE \Šų>9žŽ EGALIGHTGREEN\Šų$:żŅ EGALIGHTCYAN \Šų ; EGALIGHTRED\Š÷ņ<śEGALIGHTMAGENTA\Š÷Ö=śž EGAYELLOW\Š÷Ą>üĢEGAWHITE \Š÷Ŗ?üSOLIDLN\Š÷–žPDOTTEDLN \Š÷€ś CENTERLN \Š÷jśąDASHEDLN \Š÷TųÄ USERBITLN\Š÷>’L NORMWIDTH\Š÷(žź THICKWIDTH \Š÷ž0 DEFAULTFONT\Šöųś TRIPLEXFONT\Šöąü² SMALLFONT\ŠöŹü® SANSSERIFFONT\Šö°ū GOTHICFONT \Šö˜ś¼HORIZDIR \Šö‚śøVERTDIR\Šönöö USERCHARSIZE \ŠöTū®LEFTTEXT \Šö>ż CENTERTEXT \Šö&łŠ RIGHTTEXT\Šö BOTTOMTEXT \ŠõųžčTOPTEXT\Šõäų\CLIPON \ŚõŠ’’CLIPOFF\Śõ¼üFTOPON\ŚõŖł’TOPOFF \Śõ–ö EMPTYFILL\Šõ€žž SOLIDFILL\Šõjł>LINEFILL \ŠõTų LTSLASHFILL\Šõ<’¼ SLASHFILL\Šõ&ż BKSLASHFILL\Šõ LTBKSLASHFILL\Šōōż4 HATCHFILL\ŠōŽõč XHATCHFILL \ŠōĘ’INTERLEAVEFILL \ŠōŖ ü WIDEDOTFILL\Šō’ ö6 CLOSEDOTFILL \Šōx USERFILL \Šōb ÷“ NORMALPUT\ŠōLž¶COPYPUT\Šō8’ŽXORPUT \Šō$üORPUT\Šō’ANDPUT \ŠóžžŲNOTPUT \Šóźü– MAXCOLORS\ŠóŌ’Ā PALETTETYPE] $ó SIZE QŠóžCOLORS Q ól žótŽój üóJ Čó:ż”LINESETTINGSTYPE ] ¢ó0 LINESTYLEQDóPATTERNQDņś’ź THICKNESSQDņā Rņ¼ü~TEXTSETTINGSTYPE ]Fņ˜^FFONT QDņ– DIRECTIONQDņ~CHARSIZE QDņf’¼HORIZQDņR’ŌVERT QDņ> Šņ÷$FILLSETTINGSTYPE ]ØńōPATTERNQDńšCOLORQDńÜtń¶ż:FILLPATTERNTYPE]čń” žńœń’Ōńr÷” POINTTYPE]8ńZXQŠń\YQŠńLń&ųF VIEWPORTTYPE ]ČńP<X1 QŠńY1 QŠšō’īX2 QŠšāY2 QŠšŠ’ÜCLIP QŚš¼ bš–üˆ ARCCOORDSTYPE]pšvh<NXQŠšxYQŠšh’šXSTART QŠšRYSTART QŠš<’“XEND QŠš(’ĄYEND Q Šš ņļīüRESTORECRTMODE Dõ GETARCCOORDS D (pļ–ł¤ SETVISUALPAGED 6Dļˆż¾ SETACTIVEPAGED DDļ^’¬ SETWRITEMODE D RŠļ4šŒ GRAPHDEFAULTSD`ö SETBKCOLOR D nDīčö GETBKCOLOR 6DīĢ|ł^ SETALLPALETTED ŠRīœ GETPALETTE D ˜ $īXų~ SETPALETTE D ¦ŠīLŠīFšGETPALETTESIZE 6Šī&“÷ŠGETDEFAULTPALETTED Ā $ķÖ SETRGBPALETTEDŠŠķČŠķĀŠķ¼Šķ¶’–SETCOLOR D ŽDķõ"GETCOLOR 6Dķvģ÷L GETMAXCOLOR6DķTśüOUTTEXTD īķ*’žŽ OUTTEXTXYDŠķŠģžīģų’ż TEXTHEIGHT 6 DģÜ$īģŠ’÷ TEXTWIDTH6 Dģ¶2īģŖ’SETTEXTJUSTIFY D @Dģ~Dģx’* SETTEXTSTYLE DNDģNDģHDģBż|GETTEXTSETTINGSD \FėśņŒ CLEARVIEWPORTDjóœ SETVIEWPORTDxŠėŹŠėÄŠė¾ŠėøŚė²ü~GETVIEWSETTINGSD †ČėjžŽGETX 6Šėp”GETY 6ŠėT¢ōXMOVETO D °Šė*Šė$ó¦MOVERELD ¾ŠėŠźśó& DETECTGRAPHDĢŠźŅŠźĢõš INITGRAPHDŚŠź¦Šź īźš’ö$ CLOSEGRAPH Dčņä GRAPHERRORMSG6’ īźZöŠźNö| GRAPHRESULT6Šź2üœGETMAXX6ŠźóFGETMAXY6Šéö żž GETMAXMODE 6ŠéŌ.ó GETGRAPHMODE 6Šé°<šō GETDRIVERNAME6’īéŒJģR GETMODENAME6’ īéjXŠé^ GETMODERANGE DfŠé4Šé.Šé(óÖ SETGRAPHMODE D tŠčžž2SETASPECTRATIO D ‚DčŅDčĢü"GETASPECTRATIO DDč Dčšņ. CLEARDEVICEDž FLOODFILLD¬ŠčRŠčLDčFśSETFILLPATTERN Dŗčēž’ųDčž SETFILLSTYLE D ČDēźDēäżøGETFILLPATTERN D Öčēœš’GETFILLSETTINGSD äØēpöā IMAGESIZE6žērņŠēfŠē`ŠēZŠēTļģGETIMAGE DŠē.Šē(Šē"ŠēRēūČPUTIMAGE DŠęšŠęźRęäDęŽöÜLINE DŠę¼Šę¶Šę°ŠęŖźXLINETO D *Šę†Šę€LINERELD 8Šę\ŠęVń SETLINESTYLE DFDę,Dę&Dę ėjGETLINESETTINGSD T ¢åŲīøPUTPIXEL DbŠåĪŠåČDåĀł¬GETPIXEL 6 DåØpŠåœŠå–żBARD~ŠåvŠåpŠåjŠådł"BAR3DDŒŠåBŠå<Šå6Šå0Då*Śå$’ FILLELLIPSEDšŠäüŠäöDäšDäź’ĘDRAWPOLY DØDäÄRä¾üxFILLPOLY D¶Dä˜R䒳nARCDÄŠärŠälDäfDä`DäZš$CIRCLE DŅŠä6Šä0Dä*łÜPIESLICE DąŠäŠćžDćųDćņDćģūR RECTANGLEDīŠćʊ楊ćŗŠć“žPELLIPSEDüŠćŠćŠDć„Dć~DćxDćrńFSECTOR D ŠćNŠćHDćBDć<Dć6Dć0ō HALFX6Šćļ,HALFY6Šāž&`² „BSystem„†OSystem2ĢźSTPASCALéåGEMDECL&GEMAES 0·GEMVDIB BIOS Graph4 ¶GRAPH †RESTOREC žGETARCCORSETVISUAFSETACTIV ŖSETWRITEĘGRAPHDEFņSETBKCOLžGETBKCOL"SETALLPA.GETPALET:SETPALET GETPALETGETDEFAUFSETRGBPAĪSETCOLORŚGETCOLORęGETMAXCOšOUTTEXTŽOUTTEXTXvTEXTHEIG‚TEXTWIDT²SETTEXTJ¦SETTEXTS¾GETTEXTS VCLEARVIE >SETVIEWP JGETVIEWShGETXtGETYPMOVETO\MOVERELŅDETECTGR,¬INITGRAP ’CLOSEGRA GRAPHERR bGRAPHRES nGETMAXX zGETMAXYźGETMAXMOöGETGRAPH GETDRIVE GETMODENŽGETMODER &SETGRAPHŠSETASPEC~GETASPEC 2CLEARDEVfFLOODFILŌSETFILLP“ąSETFILLSGETFILLPśGETFILLSRIMAGESIZ^GETIMAGEjPUTIMAGEŹLINEÖLINETOāLINERELīSETLINESśGETLINES¢PUTPIXEL–GETPIXELBBARZBAR3D*FILLELLI¦ŗDRAWPOLY®FILLPOLYARCNCIRCLEPIESLICErRECTANGLELLIPSE6SECTOR4HALFX@HALFY@ &Z ZARLt6tE_REfŽ*ŽEE_R€Ø: ØGET_šĀ@ĀGE“Ü ÜlĪö0 öčn OU*Š¢*_MOUDø“DNE_C6P °\4¾h:$”t(¢Ž(ŽES€ØT Ø_DISšĀP ĀNU_H“Ī*“ŽŚl0ģę śņ nž | $“Ā"fŠ. ˜:\ ¦F€*ŠRŽ0ņ^®*jbNv|N$‚‚B2Ž‚BšüB¦v*N²Š@¾¶*\Ź*֖T*āL*8ī\FśĄZT(ÄląLrü*¬Bš6’< BŠB~Nd0ŅZĘZŒfpH¬rH$ī~ŗTŠ*‚–2p¢L$b®N¶ŗX`ĘŌĀ<ŗØ’Bgŗąp$ģśPNąČ’N€ä$Ö . *:2f:D,F˜ZDRt$6l€*l^††Žx Z Ø’¬ZøĘF>¬Ś`Ņt<ĢŽ~fźd.ö,<  J fX ō`ö &ž*t 2p*ž >2*x JČH† V*j bzN n  z  †  ’$ č ž¼l( ŖĘ~R ¶8 @ d d €ü.€|dö€&€t,€4€ dl¢ d&dF dJdfd€|"d,€|6d@€|JdT€|^dh€|rd|€|†d€|šd¤€|®dø€|ĀdĢ€|Ödą€|źdō€|śdd €|d€|"d,€|6d@€|JdT€|^dh€|rd|€|†d€|šd¤€|®dø€|ĀdĢ€|Ödą€|źdō€|žd€|d€|&d0€| ddšddd$d*d d6dd d*d0d d6dd d d6dd d4h$:d*d8h$d6dRdrdŽd®dĪdīdd,dJdjdˆdØdĘdęddd$l”Vdldrd‚hś²d¦Ōd¦ād¦šd¦žd¦d¦"d¦ d6dś0d6dDl¾JdXl^d d6dd d6ddd¦ d6dd dś d6d“Dd€¾d“.d~d¦–dd“:d d62dDdRl”`djdvd d6rdŒd¦d°dĀdĢl”Ņd d6$df>dfndx€DŠ€(¢d d6$df>dfØd¼€¾Ž€¾ģdśddd8dNlÖTd d6€ģ(€4€xN€¾‚€¾Ød¶dÄdÖdNdhlÖnd€|d6$d.d6lö<dJlB^dhdrlöxd€|d6$d.d6lö<dJlB^dhdrlöxd€|d6*dRd2~d2“d2¾dÄdŌdčl“īd€|d”&d¢0d6d`d2jd d64dbdrdˆdl ¤d¬l ĄdŹl Ždčl üdl d$€(*d0d6d<löHdZd`d~l¬ d6Rd^djd‚d lȬd d6d d d6d"d0d>dHdNdTl†\pfdtl˜zd„l†Šd d”d¢"d,d2d<dBd d”d¢>dHdRd d6Vd\dldzlž†d’džd(d2l¢8dBl°ždØl¢“d d6dd d6d&€,d:€P€b€r€ dč¦d“¬d¶dĀdŽ€(ī€(öl\üdĪd d6*dL0d:dFd\dl€rd€€–€؀ø€Ȁ(Ų€(ąljdÄd(&d<d d68dč>d“DdNdZdz€(Š€(’l\˜dĪžd d6d"d,dJl2Pd“Vdzl\€dĪ†d d6dd&dF€(V€(^ljŒdü–d(¬dĀd d6d"d0d>dHdRlśXd d6d“d d,dBdR€Xdf€|€Ž€ž€¬l\²dĪød €2€B€`dfzdfd~¦dīņdd,dBdXd d6dd&d6lŠ<d d6d"d0dJdldrdxl†€pŠd˜l˜ždØl†®d d6dd d6d"d(d d6dd&d6l‚Bd dģdŽ4dBdŽ d6 d8€¾|d¢d¼dĀdČl†ŠpŚdģlĀd0l˜6d@l†Ld¬d6ĀdŚ€¾ädĘ*dPdjdxl˜Ŗdضd dś4d>€¾PdČVdbd8dŗd6ädģźdųlfžd lJdl.(d4d:dFd d6dd d6d€¾$d hŽdd&d.d 4dņ^€°td‚d€†°dĀ€RŠdŚdģd€Ģd dd"d(d6d>d DdņN€¾Tdbdjd pdņ€€”ˆdDd6 d6(dLdVh\dhd d6(dHdVhbdhdtd d^&x@<x@Rx@ d^&x@<x@Rx@B€|HdVdš^hśr€ģ|€ś†€ś’€x dø¶dšŌ€ģ܀śę€śņ€x"dš:dĢDdNdZhĢfp(‚ptˆdĪdŲlŠąddh0dxBd’RdpdxdŒd’d¬dŗlīĀdŅdŚdądędīlXō€ųdždč€ dd6dD"dR(d€.d`4dždd "dx(d“2dŽ@dFLdśRdČ`dNld@ dhśrdVd d6ddf d6dd d6d*€|H€|Nd d6d"d€2€`@€˜N€˜Zd fd€v€˜„€˜dśœd€¬€˜ŗ€˜Ģ€|Ņd*d<€|Nd€^€`l€˜~€|„d d6ddfDdNdčTdbdŚ dl6dd d$d*d d6Bdbdjdrdzd„dŽ€¾–dœd®l`ŗd d6d d d€¾"dä,d|2dČ8dBlŽXdČ^dbdhdldrd dd d6dd d6dd |6hĢ dd€d,$d*d0d6l(<p|JhĢTd^dldx~d’„d’h˜dš¤h~ d6d:€L€^€p€‚€’€®€Ą€Š€ī€€€$€6€F€b€t€„€®dd,d dd&dNqNqNVUN€0HĄü=@N^NuNqNqNVUN€0HĄü=@N^NuNqNqNV’žp n 0=@’žp n0"n 2€p0.’ž"n2€N^ _PNŠNqNqNV’ž n =P’ž n"n 2"n2®’žN^ _PNŠNqNqNV’ų0.HĄ/BgHn’ų?<N€Hn’ų/. ?<’N€N^ _TNŠNqNqNV’Hn’?.N€XHyÖHn’BgN€N€BgN€N^ _TNŠNqNqNV?9BgN€N^NuNVHēGłŌp0?p0+?p0+?N€&_N^NuNVHēGłźp0.6€p0.7@p0.7@p0. 7@0+°klHkHkN€p0. 7@p0.7@ &_N^ _Oļ NŠNqNqNVHzHy"?<N€HzžHy,?<N€HzōHy6?<N€HzźHy@?<N€HząHyJ?<N€HzÖHyT?<N€HzĢHy^?<N€HzĀHyh?<N€HzøHyr?<N€Hz®Hy|?<N€Hz¤Hy†?<N€HzšHy?<N€Hy,Hyš?<N€N^Nu ’’’’’’’’ ’’’’ €@  ƒĮąp8 Hy¾?<*N€HzLHy’?<*N€HzTHyf?<*N€Hz^Hy:?<*N€Hz`Hy?<*N€HzlHyā?<*N€Hz„Hy¶?<*N€Hz€HyŠ?<*N€Hz€Hy^?<*N€Hz€Hy2?<*N€N^NuNo error Graph not initialized. Graphics hardware not detected.Device driver not found. Invalid device driver. !Not enough memory to load driver.Out of memory in scan fill.Out of memory in flood fill. Font file not found. Not enough memory to load font.*Invalid graphics mode for selected driver. Graphics error.Graphics I/O error.Invalid font file. Invalid font number. NqNqNVJ9 f ?<’’N€N^NuNqNqNV0. Šy3Ą0.Šy3Ą ByN^.ŸNuNqNqNVN€09Šn 3Ą09 Šn3Ą ByN^.ŸNuNqNqNVN€09y=@ByN^NuNqNqNVN€09 y=@ByN^NuNV’üHēpr²@m>=@’ž=A’ü`Rn’ž0.’žćHU?<’’?.’ž&N€Cłö3Ÿ00.’ž°n’üf’Š&N^NuNqNqNV’śpr²@m<=@’ž=A’ś`Rn’žU0.’žćHAłö?0?.’žN€=_’ü0.’ž°n’śf’ŅN^NuNqNqNV’ōBn’śBn’üBn’žAī’śCł¤"Ų2ŲBn’śBn’ü=|ē’žAī’śCłŖ"Ų2ŲBn’ś=|ē’üBn’žAī’śCł°"Ų2Ų=|’ś=|ō’ü=|ō’žAī’śCł¶"Ų2Ų=|ē’śBn’üBn’žAī’śCł¼"Ų2Ų=|ō’ś=|,’ü=|ō’žAī’śCłĀ"Ų2Ų=|Č’ś=|Č’ü=|Č’žAī’śCłČ"Ų2Ų=|X’ś=|ō’ü=|X’žAī’śCłĪ"Ų2Ų=|X’ś=|ō’ü=|X’žAī’śCłŌ"Ų2Ų=|,’śBn’ü=|ē’žAī’śCłŚ"Ų2Ų=|Č’ś=|ē’üBn’žAī’śCłą"Ų2Ų=|’ś=|ō’ü=|ō’žAī’śCłę"Ų2Ų=|ē’ś=|d’üBn’žAī’śCłģ"Ų2Ų=|ō’ś=|,’ü=|ō’žAī’śCłņ"Ų2Ų=| ’ś=| ’üBn’žAī’śCłų"Ų2Ų=|ē’ś=|ē’ü=|ē’žAī’śCłž"Ų2Ųpr²@m>=@’ų=A’ō`Rn’ų?9?.’ų0.’ųĮüAł¤HpN€0.’ų°n’ōf’Špr²@m.=@’ų=A’ō`Rn’ų0.’ų2.’ųCł0.’ų°n’ōf’ąAłCł"Ų"Ų"Ų"ŲUN€0 @f8pr²@m*=@’ų=A’ō`Rn’ų?.’ų?.’ųN€0.’ų°n’ōf’ä`b @f:BgBgN€?<?<N€?<?<N€?<?<N€`" @fBgBgN€?<?<N€N^NuNVHēN€p0.U&N€p0¶€n6p0.3Ą?9p0.?N€?9p0.?N€By&N^ _TNŠNqNqNVN€=yByN^NuNqNqNVN€=yčByN^NuNqNqNVBgp0.?N€N^ _TNŠNqNqNVN€9H€=@ByN^NuNqNqNVUN€0R@=@N^NuNV’üHēN€&nUN€6Ÿ0S@r°e8A’’@’ü`R.’’p.’’r.’’AłCė°.’’°.’üf’Ö&_N^.ŸNuNqNqNV’ź/.Hn’ī?<N€UN€0.’ī°_nhBy0.’īS@r°ePA’ķ@’ź`R.’ķp.’ķAī’š 0’’o"p.’ķ?p.’ķAī’š0H?N€.’ķ°.’źf’¾` 3ü’õN^.ŸNuNV’üHē&nUN€6Ÿ0S@r°Am4=A’ž=@’ü`Rn’ž0.’ž2.’žAłCė°0.’ž°n’üf’Ś&_N^.ŸNuNqNqNV’śN€ n _ĄD n_ĮDĄgL0.ĮüAł¤AšCī’ś"Ų2Ų?9?. Hn’śN€0. 2.CłBy` 3ü’õN^.ŸNuNqNqNVN€ nnŗJn \ĄD n@ ]ĮDĄg¢Jn \ĄD n@ ]ĮDĄgŠJn\ĄD n@]ĮDĄgr0.Įü2. ĆüCł¤30.Įü2. ĆüCł¦30.Įü2.ĆüCłØ3?9?.0.ĮüAł¤HpN€ByN^ _PNŠNqNqNV’śN€0.°n oHnHn N€0. °noHn HnN€0. nR@2. ’nRAHĮƒüHAt”AŠB=@’ś0.’śĮłHĄrN€2.’n RAHĮN€-@’ü .’ü€-@ByN^ _PNŠNqNqNV’ĄN€0.°noHnHnN€0.°n oHnHn N€0.n=@’č0. n=@’ź/. X€€-@’ģ0.’čR@2.’čRAHĮƒüHAt”AŠB=@’š0.’źR@=@’ņ0.’šHĄü=@’ōBn’ö=y’ųHn’ģ/.?<N€/. €-@’ĄHn’č/.’Ą?<N€B®’Ō0.Šy=@’Ä0.Šy=@’Ę0.Šy=@’Č0. Šy=@’ŹBn’ĢBn’Ī0.’čR@=@’Š=n’ņ’Ņ?9?<Hn’ÄHn’ŌHn’ģN€ByN^ _Oļ NŠNqNqNV’œN€p0.?Hn’œN€Bg?<N€XHn’œN€g2B®’Ō/. Hn’ģ?<N€/. X€€-@’ģ/. €-@’Š/.’ŠHn’Ģ?<N€=n’Ģ’ź=n’Ī’čBn’¼Bn’¾=n’ź’Ą=n’č’Ā09Šn=@’Ä09Šn=@’Ę09ŠnŠn’ź=@’Č09ŠnŠn’č=@’Źp0. €f =|`N €f =|`: €f =|`& €f =|` €f=| ?9p0.?Hn’¼Hn’ģHn’ŌN€ByN^ _Oļ NŠNqNqNVžš/.Hn’?<’N€N€ y„(f?9BgN€?9Hn’HnžšN€0.žśnžņ=@ y„(f?9?<„N€ByN^.ŸNuNqNqNVžš/.Hn’?<’N€N€ y„(f?9BgN€?9Hn’HnžšN€0.žųnžü=@ y„(f?9?<„N€ByN^.ŸNuNVžśHē/.Hn’?<’N€N€BnžüBnžžGłŚp0+ €fTp0+J€fUHn’N€0HĄü=@žž`,p0+ €fUHn’N€0HĄüD@=@žž nl$Up.’@’@=@žśHnžśN€=_žü?909ŠnŠnžü?09Šn nžž?Hn’N€By&_N^ _PNŠNV’Hē/.Hn’?<’N€UN€UN€Hn’N€GłŚp0+J€WĄDr2+JWĮDĄgUHn’N€p0Ńy&_N^.ŸNuNqNqNV’ųN€p0. J€]ĄDr2. ^ĮD€g3ü’ņ`Hp0. J€]ĄDr2. ^ĮD€g3ü’õ`p0. 3ĄŚp0. €f?9BgN€`t €f?9BgN€`X €f?9?<N€`: €f?9?<N€` €f?9?<N€p0. 3ĄÜp0. "<„N€3Ą(?9?9(N€p0.3ĄŽp0.Z€=@By?9p0.?Hn’žHn’üHn’śHn’ųN€N^ _\NŠNqNqNV’üN€p0. J€\ĄDr2. _ĮDĄr2.J\ĮDt4. ‚_ĀDĀĄgZByp0. 3Ąąp0.3Ąāp0.J€f=|?9p0. ?p0.?Hn’žHn’üN€` 3ü’õN^.ŸNuNqNqNVN€AłŚ"n"Ų"Ų2ŲByN^.ŸNuNqNqNVžÜN€0.Šy=@žŽ0. Šy=@žą0. Šy=@žā0.Šy=@žä?9?9 N€UN€=_žÜ?9?<HnžŽN€?9?.žÜN€ByN^ _PNŠNqNqNVUN€UN€?. ?.N€0. Šy3Ą0.Šy3Ą N^.ŸNuNqNqNV’üUN€=_’žUN€=_’ü?.’ž?.’ü0.’žŠn ?0.’üŠn?N€0. Ńy0.Ńy N^.ŸNuNqNqNV’śN€p0. €WĄDr2. WĮD€r2. J\ĮDt4. ‚_ĀDĀĄg^ByJ9f=|?9p0.?N€p0.3ĄŲp0. 3ĄŌp0. 3ĄÖp0. €fšp0. €’’l`Bn’üpr²@mN=@’ž=A’ś`Rn’žp0. €J€^ĄDH€€n’ü=@’üp0. āˆ=@ 0.’üćH=@’ü0.’ž°n’śf’Ą`=|’’’ü?9?<N€?9?.’üN€`dp0. €f =|’ž`: €f =|’ž`& €f =|’ž` €f=|’ž?9?.’žN€` 3ü’õN^ _\NŠNqNqNVN€AłŌ"n"Ų2ŲByN^.ŸNuNV’čHēN€p0.HyHn’ō?<D&N€HyHn’ō?< N€=C’ņHn’ņHn’č?<DN€Hn’ōHn’č?< N€Hn’čB§?< SN€=@’ž?.?.p0. ?p0. ?p0.??.’žN€N€?90.Šy?0.Šy?p0.??.’žp0. r N€?p0. r N€?N€N€By&N^ _Oļ NŠNV’ŽHēN€p0. r2. °oHn Hn N€?90.Šy?0.Šy?p0.?p0.HyHn’ź?<D&N€HyHn’ź?< N€=C’čHn’čHn’Ž?<DN€Hn’źHn’Ž?< N€Hn’ŽB§?< SN€?p0. r N€?p0. r N€?N€?.?.p0. ?p0. ?p0.?N€Hn’ōN€?.’ō?.’ö?.’ų?.’śN€?.’ō?.’ö?.’ü?.’žN€&N^ _Oļ NŠNqNqNVN€?.?.p0.?p0. ?p0. ?p0.?N€N€?90.Šy?0.Šy?p0. ?p0.?p0.r N€?p0. r N€?N€N€ByN^ _Oļ NŠNqNqNV’üN€0.Šy=@’ž0. Šy=@’ü?9?.’ž?.’üp0. ?p0.?N€N€?9?.’ž?.’üp0. ?p0.?Bg?<N€N€ByN^ _PNŠNqNqNV’ōN€?90.Šy?0.Šy?p0. ?p0.?p0.r N€?p0. r N€?N€?.?.p0.?p0. ?p0. ?p0.?N€Hn’ōN€?.’ō?.’ö?.’ų?.’śN€?.’ō?.’ö?.’ü?.’žN€N^ _Oļ NŠNqNqNV’ųN€0.Šy=@’ų0. Šy=@’ś0. Šy=@’ü0.Šy=@’ž?9Hn’ųN€ByN^ _PNŠNV’źHēN€N€?90. Šy?0. Šy?p0.?p0.HyHn’ö?<D&N€HyHn’ö?< N€=C’ōHn’ōHn’ź?<DN€Hn’öHn’ź?< N€Hn’źB§?< SN€?Bg?<N€N€By&N^ _\NŠNqNqNV’ģp0. =@’öHn’öHn’ģ?<DN€Hz@Hn’ģ?< N€Hn’ģB§?< SN€=@’ž0.°nlHnHnN€0. °nlHnHn N€?.?.?.?. N€?.?.?.?. N€p0. 2.HĮŅ€=A’üp0. 2.HĮŅ€=A’ś0.n’ž=@’ų?.?. ?.’ü0. n’ž?N€?.’ü0. n’ž??.’ü?.’ųN€J.gD?.’ü?.’ų?.?.N€?.’ü?.’ų?.’ś?.’ųN€?.’ś?.’ų?.?.N€N^ _Oļ NŠ?žĄNqNqNVN€?90. Šy?0. Šy?p0.?N€ByN^ _\NŠNqNqNVžÜN€0.Šy=@žŽ0. Šy=@žą0. Šy=@žā=nžąžä=nžāžę0.Šy=@žč=nžŽžź=nžčžģ=nžŽžī=nžąžš?9?9 N€UN€=_žÜ?9?<HnžŽN€?9?.žÜN€ByN^ _PNŠNqNqNVN€"n 2¹"n2¹N^ _PNŠNqNqNVN€p0. 3Ąp0.3ĄByN^.ŸNuNqNqNV’üN€?90. Šy?0.Šy?Hn’žHn’üN€=n’ü ByN^.ŸNuNqNqNVžÜUN€=_žÜp0.?N€?. ?. ?. ?. N€p0.žÜ?N€N^ _\NŠNqNqNVžŲN€p0. €Hn,By/.HnžŽp0. åˆ?N€p0. ćˆS€r°Amn=AžÜ=@žŲ`RnžÜ0.žÜād(0.žÜćH2.žÜćIAīžŽ40ŌyCīžŽ3‚`$0.žÜćH2.žÜćIAīžŽ40ŌyCīžŽ3‚0.žÜ°nžŲf’ ?9?9 N€UN€=_žŚ?9p0. ?HnžŽN€p0. ćˆćHCīžŽ3®žŽp0. ćˆR€ćHCīžŽ3®žą?9p0. R€?HnžŽN€?9?.žŚN€` 3ü’õN^ _\NŠNqNqNV’śBn’üp n0( r°Amr=A’ž=@’ś`Rn’žTn’ü0.’üćH n2(žŽ nA螎²pWĄD2.’üRAćI n4(žą nA螎“pWĮDĄg0.’žR@=@ `0.’ž°n’śf’œp n0( =@ N^.ŸNuNqNqNVžŲN€p0. €HnōBy/.HnžŽp0. åˆ?N€U/N€=_žÜ0.žÜćHS@r°Amn=AžŚ=@žŲ`RnžŚ0.žŚād(0.žŚćH2.žŚćIAīžŽ40ŌyCīžŽ3‚`$0.žŚćH2.žŚćIAīžŽ40ŌyCīžŽ3‚0.žŚ°nžŲf’ ?9?.žÜHnžŽN€0.žÜ‘n p0. J€o p0. ?0.žÜćHćHAīžŽHpN€` 3ü’õN^ _\NŠNV’ųHē n Cī’ų"Ų"Ųp0.U&N€p0¶€n2Hn’ųHy›?<N€?< p0.?N€By` 3ü’õ&N^ _\NŠNqNqNV’śpr²@mš=@’ž=A’ś`Rn’žp n0( Įü 2.’žŠArAł"0=A’ü0.’žS@Šn’ž2.’ü"nß0.’žŠn’ž2.’ü"nß0.’žŠn’ž@2.’ü"nß0.’žŠn’ž@2.’ü"nß0.’ž°n’śf’tN^.ŸNuNqNqNV’ąN€p0. J€\ĄDr2.  _ĮDĄgd/N€?9Hn’ą?<N€?9p0.?N€?9?<N€p0. 3ĄŠp0.3ĄŅBy` 3ü’õN^.ŸNuNqNqNVN€"n"¹ŠByN^.ŸNuNqNqNVN€Hy›/.?<N€ByN^.ŸNuNV’ųHēYN€#ß*By$YBgBgUN€UN€N€ €-@’śpr²eŽ@’’A’ų`R.’’N€ °®’śo¢p.’’3Ą$p.’’åHAł*Hp/.’śN€p.’’åHr.’’åIt.’’åJ&Ał* 0 ("<N€"<’€Ał*Ņ°@Cł*#0p.’’åHAł*/0 .’ś€?BgN€`p.’’åHAł*B°.’’°.’ųf’0LßN^NuNqNqNV y$f‚ y&f4/9./9*YBgBgUN€UN€N€ ?N€Hy.YBgBgUN€UN€N€ €/N€BgN€BgN€N^NuNqNqNVN€p0. €_ĄDr2.åIAł*J°VĮDĄg,?<’’Hx’’p0.åHAł*/0N€By` 3ü’õN^ _TNŠNqNqNVN€p0. €_ĄDr2.åIAł*J°VĮDĄg8?<’’p0.åHAł*/0Hx’’N€p0.3Ą&By` 3ü’õN^ _TNŠNV -HN^NuNqNqNV’üYN€-_’ü .’ü€/?<N€ .’ü€š/?<N€ .’ü€ŗ/?<?N€N^NuNqNqNV’üYN€-_’ü .’ü€/?<N€ .’ü€š/?<N€ .’ü€ŗ/?<N€N^NuNqNqNV n hžžf =| `=| N^.ŸNuNVż^Hē/.Hn’?<’N€J9 g ?<’õN€UN€=_žž n?Hnż^N€?< N€?< N€XHnż^N€gŽU/N€0 n°Pg ?<’üN€ n P WĄD n ?Hnż^&N€BgN€?<N€XHnż^N€WĄDĘ n P WĄD n PVĮDĄ†g ?<’öN€ nJPf/./. N€ n3Š n 3ŠUBgBgN€=_žüUN€=_žüUHnžüHnžüHnžüHnžüN€3ßp2<ƒ²@m,=@žü=Aż|`Rnžü0.žüćHCīżō3¼0.žü°nż|f’ā=|žHnżōHyHnż‚N€3īžž" n P WĄD n 2²nžžVĮDĄglü$ n ?Hx’’Hx’’N€ n 0 @f N€` @fN€ n 0ĮüGłGó=Sżˆ=kż‚=kżœ`B9$3ü' <'īżŠĮīżˆ3ĄGłä6®ż‚7nż„0.żœS@7@?9?<Hnż‚N€3īżŠ nż¤WĄDĄü N€?9BgN€#łÄH@#ßÄN€BgN€BgN€BgN€N€N€N€LßN^ _Oļ NŠNqNqNVBgBgUN€UN€<N€N€?<N€BgBg?<N€?<UN€N€BgBg?<N€Bg?<N€N^NuNqNqNVByUN€"n2Ÿ n0 @f"n 2¼ `B @f"n 2¼ `. @f"n 2¼ `"n 2¼’ž"n2¼’ž3ü’žN^ _PNŠNqNqNV0. @ f n BP"n2¼`0 @ f"n 2¼"n2¼` @f n BP"n2¼`ś @f n BP"n2¼`ą @f n BP"n2¼`Ę @f n BP"n2¼`¬ @f"n 2¼"n2¼` @f n BP"n2¼`v @f n BP nBP`^ @f n BP"n2¼`D @ f n BP"n2¼`* @ f n BP nBP`"n 2¼’’"n2¼’’ByN^ _Oļ NŠNqNqNV’üN€?9Hn’žHn’üN€=n’üN^NuNqNqNVN€=yByN^NuNqNqNVN€09 @ fHz8/.?<’N€` @ fHz"/.?<’N€ByN^NuSTColorSTMono NqNqNVüN€Hn’UN€0R@?N€XHz“HnžN€Hn’HnžN€Hz HnžN€HnżUN€0R@?N€XHnżHnžN€HzlHnžN€HnüUN€0R@?N€XHnüHnžN€Hz:HnžN€Hnž/. ?<’N€ByN^ _TNŠATARI x,  color NqNqNVžJn_ĄD n’ņ\ĮDĄg&0.Įü,AłšHp/. ?<’N€`@Hn’?.N€XHz:HnžN€Hn’HnžN€Hnž/. ?<’N€ByN^ _TNŠ Graph error #NqNqNV’üN€?9Hn’žHn’üN€0.°n’ž]ĄD2.²n’ü^ĮD€g3ü’ö`N€HyHnHzN€N^ _TNŠ NqNqNV?9N€3ł3ł ByN^NuNqNqNV’ųN€Jn\ĄD2. ²n^ĮDĄJn\ĮDĄ2. ²n^ĮDĄgxBy=n’ų=n’ś=n ’ü=n ’ž3ī3ī 3ī3īHn’ųHyĘ?<N€īĪ?9.H€?Hn’ųN€` 3ü’õN^ _Oļ NŠNqNqNVN€AłĘ"n"Ų"Ų2ŲByN^.ŸNuNqNqNV’ōHyĘHn’ų?<N€Hn’ōN€BgUN€N€?9Hn’ųN€p0.’ō?p0.’ö?N€3ł3ł ByN^NuNqNqNV=yByN^NuNqNqNVN€=yäByN^NuNqNqNVN€=yęByN^NuNqNqNV’žN€U?<BgN€=_’žN^NuNqNqNV’žJ9 gŒ#łÄN€B9 By?9N€N€U?<BgN€=_’žJ9$g<09" @f N€` @fN€?9"Hx’’Hx’’N€N€Y?<’’N€  €m`’ęN^NuNV’ņHēN€Głź(n8“9k0+°kgnHkHn’ņ?<DN€Hz|Hn’ņ?< N€Hn’ņHn’ü?< AN€Hn’üHn’ņ?<ŹN€HkHn’ņ?< N€Hn’ņB§?< QN€2HĮŅ€9AHn’üHn’ņ?<ČN€Hk Hn’ņ?< N€Hn’ņB§?< QN€2,HĮ’€9AHkHn’ņ?<DN€HzČHn’ņ?< N€Hn’ņHn’ü?< AN€Hn’üHn’ņ?<ŹN€HkHn’ņ?< N€Hn’ņB§?< QN€2HĮŅ€9AHn’üHn’ņ?<ČN€Hk Hn’ņ?< N€Hn’ņB§?< QN€2,HĮ’€9A `9T9l9T9l ByLßN^.ŸNu?łŽś5”éČČNqNqNV0. @f3ü ` @f 3ü N^ _TNŠNVHēN€Gł6¼R7|?7|Gł6¼©7|7|&_N^Nu{ LibMaker merges named UNI files together into one big LIB file. The file PASCAL.LIB is the only one known by the commandline compiler. The integrated compiler can use a LIB with any name put into the dialog. Compile this program to LIBMAKER.PRG. } { 1990 Christen Fihl } {$I-,M 10,1,1,20} Program LibMaker; Uses DOS; var F_Lib,F_Tpu: File; fhead: record name: packed array[1..4] of char; count: integer end; procedure AddUNItoLIB(S: String); var s2: string; m,n: integer; B: packed array[1..4096] of byte; head: record name: string[8]; len: longint; DateTime: longint end; begin s2:=s; while pos(':',s)+pos('\',s)>0 do delete(s,1,1); if pos('.',s2)=0 then s2:=s2+'.Uni'; writeln('From file: ',s2,'. unit= ',s); reset(F_Tpu,s2); if IOResult<>0 then begin writeln('cannot open file'); halt end; inc(fhead.count); while pos('.',s)>0 do delete(s,length(s),1); with head do begin name:=s; len:=fileSize(F_Tpu); DateTime:=-1; blockwrite(F_Lib,name,10+4+4); repeat blockread(F_Tpu,B,SizeOf(B),n); blockwrite(F_Lib,B,n,m); until m=0; end; close(F_Tpu); end; procedure CloseLIB; begin seek(F_Lib,4); blockwrite(F_Lib,fhead.count,2); close(F_Lib); if IOResult=0 then writeln('Ok') else writeln('Bad'); end; { Main program } var Index: Integer; s: string; begin if ParamCount<2 then begin writeln('LibMaker: Merges .UNI files together into one .LIB file'); writeln('LibMaker syntax:'); writeln('LibMaker file1 file2 ... fileN NewLib'); halt(99); end; s:=ParamStr(ParamCount); if pos('.',s)=0 then s:=s+'.Lib'; Erase(S); rewrite(F_Lib,s); if IOResult<>0 then begin writeln('cannot create file: ',s); halt end; writeln('To file: ',s); with fhead do begin name:='Uni1'; count:=0; blockwrite(F_Lib,name,4+2); {2 = space for Count} end; for Index:=1 to ParamCount-1 do {Add all UNITs listed on command line} AddUNItoLIB(ParamStr(Index)); CloseLIB end. DIVKEYDFOURKEYDFIVEIVEYSIXFOUR MULTKEYSIONE  TWO THREE SUBKEY ZEROKEYRADIXROYSIGNKEYAPADDKEYADSWAPKEYENTERKEYDELKEYHELPSCR1 HELPOK1EY MOREEYXHELPSCR2 HELPOK2 BACKKEYBOARD: N6 Z  ,˜   $TĪśö(ENVSTR 6’ īśŲ6ŠśĢGöööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö`-Č`(PXXXX kf o*HWĄDLķŌ.BN¹vN¹4N¹BgN¹ ÜN¹€NVģźHē/.Hn’?<’N¹Hn’Hnž?<’N¹HzĄHn’N¹œ0Hz²Hn’&N¹œÖ_JCoHn’?<?<N¹ą`’ÄHz†HnžN¹œ0J@f0HnžHnģźN¹HzdHnģźN¹:HnģźHnž?<’N¹Hy(HzDBgN¹HnžBgN¹Hz8BgN¹Hn’BgN¹N¹¢HyĀHnž?<N¹N¹ €0J@g"Hy(HzüBgN¹N¹¢BgN¹ ÜRyŲHz¾Hn’N¹œ0J@oHn’p.’??<N¹ą`’ŅHn’Hnķź?<N¹HyĀN¹-_ķō-|’’’’ķųHy°Hnķź?<B§N¹ŖHyĀHnķü?<HnżüN¹¢Hy°Hnķü?.żüHnżžN¹ŖJnżžf’ŹHyĀN¹J&N^.ŸNu:\..Uni From file: . unit= cannot open file N¹€NVNqNqHy°HxN¹šHy°HyŲ?<B§N¹ŖHy°N¹JN¹ €0J@fHy(Hz0BgN¹N¹¢`Hy(HzBgN¹N¹¢N^NuOkBadN¹€NVžžHēUN¹¢0 @lTHy(HzÜBgN¹N¹¢Hy(HzüBgN¹N¹¢Hy(HzöBgN¹N¹¢?<cN¹ ÜHn’UN¹¢0N¹¦’?N¹ĀXHn’HyÜ?<’N¹HzŹHyÜN¹œ0J@f4HyÜHn’N¹Hz¤Hn’N¹:Hn’HyÜ?<’N¹HyÜN¹äHy°HyÜ?<N¹N¹ €0J@g0Hy(HzRBgN¹HyÜBgN¹N¹¢BgN¹ ÜHy(Hz:BgN¹HyÜBgN¹N¹¢GłŌ&¼Uni1BkHy°HS?<B§N¹ŖUN¹¢0S@r°AmJ3ĮŚ=@’ž`RyŚHnžž09ŚN¹¦’?N¹ĀXHnžžN¹J09Ś°n’žf’ĘN¹rLßN^Nu7LibMaker: Merges .UNI files together into one .LIB fileLibMaker syntax: %LibMaker file1 file2 ... fileN NewLib..Lib cannot create file: To file: NqNqNVU y@Hh€Nŗh=_N^NuNqNqNV’UNŗ’Ų0.°_oHzB/. ?<’Nŗ 8`*Hn’?. y@Hh€NŗPXHn’/. ?<’Nŗ N^ _TNŠ LßpB1BWagRWaföNŠ  bśJ!NuJg  cöSINu#ß "_0 WBrB1aŚg S@gaČfō`pg²< c R@€`ģ y NŠNqNqNV?<Nŗ†?.Nŗ~N^ _TNŠNV’śHēBn &nJg¶Bk?<eNŗ’ÄUNŗ.=_’ü0.’ü @f*JkoSk?<DNŗ’š?< Nŗ"?<DNŗ’Š` ?.’üNŗ n’üVĄD n’üVĮDĄg0+2.’ü"k Rk n ’üWĄD n’üWĮD€2+²kWĮD€g’f?<fNŗ’ `>0+S@r°Am0=A’ž=@’ś`Rn’ž0.’žr k 0?Nŗ|0.’ž°n’śf’ŽBkLßN^.ŸNu#ß„Hłˆ?NATLłˆ/9„Nup aŲĄ|@NupaŹĄ|’?@NuAł”p  QŠg pa¬Ą|’€?@Nu _Bpa˜TONŠNqNqNVHz2HzžrNŗÜHyHz ?<€NŗbHy(Hz?<€NŗXN^Nu ConDevice(_Ą<#Ķ@LķšD„ŸÅA÷H~#ČPJ9aFAśuaTAś|tJƒgaXHt‹aBaNuHz’?<&NN\ONuxé›pĄƒŠ<0°<:m^a"QĢ’źNuHĄQO ON¹¼ OaPONuga`ųHē €?/<NM\OLßNuB—a’F#ß^3ß\.yL yXB¹X oN`ģ?9\?<LNAAųˆHŠŒ xņ2| hg"h$#ÉfNup98ÄtŒ“øˆg xÖp4Ug p5Sgp6 xĪ±ł@d yb$f y@|ß’?/`’`p7 o`ŌAś’öpa,#ĄjAś’ 0<a#ĄnNu yjpa yn0</??<NMPONu Runtime error: at offset: ????. Not enough space for heap Accessory error"op Ša& g  łH#ĄH ļpŁQČ’ü.Ÿ.ŸNu/ HĄ/N¹D" ²€mB§HW/N¹p _"_Nu3ü?:‘Č`š _?9:By:NŠJy:fNu _?9:/Nł ŽNV’Ą/ Cī’Ąar"_BgJ)gTWHn’Ąp=aFdJ)gBy:Bopa TBQBiNu _?HłrNALłrTJ€j 3Ą:DüNŠpa,J€g.a$/<‚/<?)p?aŗŽü k 9‚fp’ratNu€)°<g 3ü<:DüNu g 3ü=:DüNu )g 3ü>:DüNup4<` pt`ptĄƒ"o JÆgj I0ĀBX0ļB˜B˜B˜ yH"g4Pˆ"o/razat°VÉ’ņLß"o A PfŅ A#h` oaž~f0)až#H fBQ`2a’.e,aD2‚B©J)g3iJigJ9ƒgažĪ`až‚ _Žü NŠ°|am °|zn| NuJ)g3iaNuJifHē ĄBg/ iN3ß:LßNu2)²if/Jfa$`a:e3@Bi _Nu??)/pBaž$PONu/) ?)Bg?)p@až Žü Nu/) ?)Bg?)p?ażņŽü Nup?Ą`ŲQČ’üBNu2)²ifN¹ žJifźDüNu/ "i 1"_NutN¹ Œe0aŹe,°< bRi`šaŗe°< cRi“|PgģRBN¹ |Ą`ąBNu _"WN¹ ŒeaŠe RiĄ|’?NŠBgNŠLļtN¹ Œea’fe°< gRi“|’gźRB€ `ā‚.ŸNuLß/N¹ Œe a’4eRi°< fša’$e °< fRiNu2)/ "i €"_RA3A²ifNł žNutpN¹  e"?”@o SBp aĀQŹ’ś4`a¶QŹ’śN¹ žNu4/"oAļpaÄ _XONŠLļ4/a® _\NŠLß/Aś`š Lß/Aś`Š t` t`t`t _"_BgJg$až^eg°< gg°< bRi`ÜRNŠ4<`t"o JÆg I0ĀBX0ļB˜B˜B˜ oN¹ ŖgBQ`N¹ re2‚N¹ ō _Žü NŠ"o€)°<fN¹ ž.ŸNuAł`Ał ō"oN¹ re#o 3iNeig3ü@: _XONŠAł`Ał ō"oN¹ re,#o 0/?)3@3@N3_"/g A0€By: _ŽüNŠL×N¹ re 2)a4rN¹ ā _PONŠ"oa^2)a*/@Nu"oaL 2)a/@Nu$HBÄĮHBBBĄĮŠ‚Nu Ctv ÕB”AdŌAрQĖ’ō&F€Nu"oa°WĄD _XNŠN¹ re*prN¹ ā/prN¹ ā/ /rN¹ ā "NuprNuNV’€ n Cī’ĄN¹( n"ON¹(HWHn’ĄBgpVN¹ N^ _PONŠNV’Ą n"ON¹(HWpAN¹ N^.ŸNuLļpāH0ŁQČ’ü _PNŠ"0 _"_/°c)’’Ą`ŁQČ’üNu""_ _/prŃdPé’’FŅĮ`ŲQČ’üNu$02 _"_/tJAnr²BnŠĮ”ARBJ@o°Bo0ĄS@ŲQČ’üNuBNuHē0Lļprtg gAeSA6$H&Iµ VĖ’üg RBRˆQČ’ģt?BLß  _\NŠNVžHn’/. ?<?. SWN¹bHnž/. 0. Šn??<’N¹bHnžHn’N¹:Hn’/. ?<’N¹N^ _PNŠ"_  _#ČDB˜ ˆP˜ ĄrģŅ€Ā|’ų ĮkHpü Ÿ Pr’ Į ĮNŃ /gF^€Ą|’ų yD" "H°˜ Xbö If"i`Jk"ÓĄ‘"#hƉ#A"o"ˆB˜B˜ _PONŠ?<8//Nł Ž/ Lļ^€Ą|’ų"Q yD³Čb`@ h³čböJk2#h"€Eńµčf #j ё!I$HÕŠµÉf !i ѐ$_ _PNŠ yDpŠ˜ PdśR€"W.€NŃ yDp` h°dų" jņ"W.NŃ#Čb"yf gNŠp: yb`2 _#×b"PC÷‚³łPbŅp2` _°˜m°˜o¾` _°Xm°Xo²p3?/Nł ŽJ€lD€ü-Cś"r °™\É’üY‰"gt/RlśŠĀ`īBNu;šŹõį˜–€B@† 'čd 2  B                °J\:>$@"", V2(, " |   04   zP".$2F$“    .p   ž6HT (ting with the HighSpeed Pascal MyCalc accessory. ng[50]; begin n:=appl_init; if n<>-1 then begin CStr:='[3][ Hello| World][ Ok |Cancel]'#0; Button:=form_alert(1,CStr[1]); appl_exit; write('Thanks for pressing: '); if Button=1 then writeln('Ok') else writeln('Cancel'); end; end. UNI2¶¶ÜGH `&lZĘ`@,F¬p&&0¶Ņ~F,PRINTERNLSTQ>’`$F¬„BSystem„†OSystem2 Printer(NPRINTER(IBBF*B 4N" ( dlˆd d*l¤0d8l< dldlä ldd4l dNqNqNVHyHz0N€HyHyŚ?<N€HyB§N€N^NuPRN: NqNqNV#łÖÄHyN€N^NuNqNqNV#łÄÖH@#ßÄN€N^Nu2; (* OBJECT in TREE #1 *) MORE = 13; (* OBJECT in TREE #1 *) HELPOK2 = 12; (* OBJECT in TREE #2 *) BACK = 13; (* OBJECT in TREE #2 *) se begin deskId:=menu_register(appl_id,ACCtitle[1]); repeat EventLoop until FALSE; {Stay here forever} end; v_clsvwk(VdiHandle); end; appl_exit; end end. HighSpeed Pascal ---------------- STPASCAL.DOC - information about the usage of the ST Pascal unit 1. Introduction --------------- The ST Pascal unit (STPASCAL.UNI) implements a large set of constants, variables, types, functions and procedures found in the ST Pascal libraries PASLIB, PASGEM and PASTRIX. They are included in the HighSpeed Pascal package for your benefit, so that you won't have to waste too much time rewriting your ST Pascal applications for the HighSpeed Pascal. We shall in the following show what a typical ST Pascal program rewrite implies. For a complete listing of the unit's interface section, please consult the on-line help. NOTE : Although the greatest possible effort has been made to ensure that the unit operates exactly as the original ST Pascal libraries, we can not guarantee that all converted programs will behave exactly as they do with the ST Pascal. If you are experiencing trouble, please send us a note describing the problem - if possible with a listing too - so that we can update the unit. 2. How to rewrite an ST Pascal program -------------------------------------- In order to rewrite an ST Pascal program two steps have to be performed: 1. Correcting strictly compiler related issues 2. Removing the $I files and incorporate the STPASCAL unit 2.1. Compiler related changes ----------------------------- The steps are : 1. Rewrite Shl and Shr expressions : An ST Pascal statement like this : i := Shl(2,4) must be rewritten like this : i := 2 Shl 4 or into : i := ST_Shl(2,4) 2. Rewrite all LOOP..END statements 3. Change compiler options where required; modules require quite a lot of rewriting (splitting 'em up into INTERFACEs and IMPLEMENTATIONs etc.) 4. See what you can do with the special directives BIOS, XBIOS, GEMDOS etc... Quite a few of 'em can be found in other HighSpeed Pascal units such as the DOS unit. 5. Change calls to IO_Check to the corresponding {$I+} and {$I-} directives 6. The ST Pascal implements a file system based on the original Wirth philosophy of PUTting and GETting - from a system programmer's view a quite logical way, but a bit more tricky to deal with when it comes to formatted output etc. Therefore, HighSpeed Pascal implements the nowadays most commonly used method of READing and WRITEing. The actual code rewrite to perform isn't very difficult; it merely involves this : All references to a file pointer (say, f^) will have to be changed into a variable holding the file pointer's value. After that, all PUTs must be changed into WRITEs of the previously mentioned variable and all GETs will have to be changed into the corresponding READs : ST Pascal : HighSpeed Pascal : --------------------------------------------------- VAR f : FILE OF Integer; VAR f : FILE OF Integer; i : Integer; ... ... Rewrite(f, 'JUNK.TMP'); Rewrite(f, 'JUNK.TMP'); f^ := 1234; i := 1234; Put(f); { write 1234 to file } Write(f, i { or 1234 } ); Reset(f); Reset(f); WriteLn(f^); Read(f, i); Get(f); WriteLn(i); Close(f); Close(f); Erase(f); { <-- note this --> } Erase('JUNK.TMP'); 7. The ST Pascal ReadV and WriteV procedures do not exist as the Turbo Pascal procedures Str and Val were inherited, so they require rewriting too - but that's a really simple one : ST Pascal : HighSpeed Pascal : --------------------------------------------------- VAR s : String; VAR s : String; r : Real; r : Real; dummy : Integer; BEGIN BEGIN s := '123.45'; s := '123.45'; ReadV(s, r); Val(s, r, dummy); r := 54.321; r := 54.321; WriteV(s, r); Str(r, s); To sum it up : Changing ReadV into Val and adding a dummy parameter and changing WriteV into Str and swapping parameters. 6. Try to compile and fix whatever else you come across (shouldn't be much, though) 2.2. Incorporating the STPASCAL unit ------------------------------------ First of all, you have to remove the following $Include directives (if they exist) : {$I GEMCONST} {$I GEMTYPE} {$I GEMSUBS} {$I TRIXCONS} {$I TRIXTYPE} {$I TRIXSUBS} Then, after the PROGRAM heading, you include the following line : USES STPascal; A final warning is in order : Not everything in PASTRIX is implemented, so you'll perhaps need to declare a bit of things on your own. As a final example, we give the "before" and "after" header of a program : Before : -------- PROGRAM MyProg; CONST {$I GEMCONST} MyConst = 0; TYPE {$I GEMTYPE} MyType = (hello, good_bye); {$I GEMSUBS} PROCEDURE MyProc; ... After : ------- PROGRAM MyProg; USES STPascal; CONST MyConst = 0; TYPE MyType = (hello, good_bye); PROCEDURE MyProc; ... 3. Implementation notes ------------------------- The following restrictions exist in the current implementation : * IO_Result return codes don't correspond to those documented in the ST Pascal manual as the original function, together with IO_Check, are tightly interfaced with the ST Pascal runtime section. Instead, IO_Result returns exactly the same error codes as the HighSpeed Pascal IOResult. * There is a limitation on the number of menus a program can have. In total, 20 menus with 20 titles each are available. If you create more of either, the program will abort. 3.1. New since version 1.0 -------------------------- Put_Screen, Get_Screen, Read_Screen, Write_Screen, ST_Shl, ST_Shr and associated types, constants etc. ppl_exit end end end. ; ITEM4 = 21 ; QUIT = 23 ; CONFIG SYS †LŅ?€AUTOEXECBAT 5JŖ\ANSI SYS `r–ŽCOUNTRY SYS `r˜,DISPLAY SYS `rž,DRIVER SYS `r¤’EMM SYS ÖØé „5RAMTYPE SYS r/^¬SREMM SYS j›a®ü9FLYT Ų˜ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööUNI2llh?:ė¤±/ˆ Ē’NŚ ¢pō ¶d. ¢ dĢź„ Ē’ Ē’ bŅl1S²–śŲ¶Ņ~*|:(z:ŲZ;Žņ>hØĄ/¤:ī(/ü1p7B302 <ō5;‚Ö=f4,(<¾1Ņ5ś.*)Ą6 ;Ņ7ę8$<>1n8z,(t>6Ģ=œ/’=9ž69;Ō8¾!¦6L8(.=Č3Ā5$0*d; 8€1ģ1d„7nSTPASCAL N LONG_MAXINT\ž’\’’’ SCREEN_DEVICE\Š’BPRINTER_DEVICE \Š’& MAX_C_STRING \Š’ ’’ŠMAX_FN \Šžų MAX_PATH \ŠžāPALFA ]Čž“  žž¼  SHORT_INTEGER]Šž’ LONG_INTEGER ]žž|C_STRING ]BžN ’’žžV ’žžBĘž8ž STRING_PTR ]jżžBżō FILE_NAME]żŲ PATH_NAME]¶ż²RP SHORT_ROUND6 Šż ż”’ųžź SHORT_TRUNC6 Šżx(żl’ų LONG_ROUND 6 žżP6żD’ųž° LONG_TRUNC 6 žż(Dż’ųINT6 ŠżRžüü’ąCTOPSTRD`Bü¼’īüŅ’ÖPTOCSTRDnīü®’BüŒST_SHL 6žü|žü„žü~ST_SHR 6žüfŠžüZžüT’ÖPWROFTEN 6’ *ü:˜Šü.žšBASEPAGE D ¦füCMD_ARGS 6Šūī“ CMD_GETARG DĀŠūĄīūŗü°OPTION 6 Śū¢Šīū–’FILENAME 6 Śū|Žīūp’KEYPRESS 6ŚūVģżä IO_RESULT6Šū6śPEEK 6 ūžūWPEEK6 Šśųžśģż0LPEEK6 žśÖ$žśŹPOKE D2žśØś¢WPOKED@žś€ŠśzLPOKEDNžśXžśRMOVE_B D\žś.žś(žś"żzMOVE_W DjžłžžłųžłņMOVE_L DxžłĪžłČžłĀ’ CLOCK6žł¬†SETDATED”Šł‚Šł|ŠłvSETTIMED¢ŠłRŠłLŠłFž8GETDATED°Šł"ŠłŠłGETTIMED¾ŠųņŠųģŠųęCUR_ON DĢCUR_OFFDŚūŲCUR_UP DčüöCUR_DOWN Dö CUR_RIGHTDż`CUR_LEFT D CUR_UP_SCROLLD ’"CUR_DOWN_SCROLLD.ųģCUR_HOME D<ų‚ CLEAR_HOME DJüp SAVE_CURSORDXūÄRESTORE_CURSOR Dfż SELECT_COLOR D tŠ÷.ū¾SELECT_BACKGROUNDD ‚Š÷ūINV_ON DžŚINV_OFFDž DELETE_LINED¬ųĄ CLEAR_LINE Dŗł< INSERT_LINEDČ START_OF_LINEDÖ END_OF_LINEDäżP END_OF_SCREENDņžœSTART_OF_SCREEND’ WRAP_ONDżdWRAP_OFF DINSUPER6Śõx*SUPERD 8ŚõPžnSCRLEN_B \Šõ<}SCRLEN_W \Šõ&>€żBSCRLEN_L \Šõ@ERR_CODE ]ŠōśSCREEN_B ] °ōĢ |’žōŌ}ŽōŹ œōŖ’rSCREEN_I ] źō’ >žōš}Šō ÖōpżˆSCREEN_L ] $ōX ?žō`}žōV ō6 PTR_SCREEN ] Lō $ōūPALETTE] „óų žō Šóö póÖž| RESOLUTION ]ŠóŲ SCREEN_TYPE] óØ*RESQŠóØPALQ „ózPICQ" $óh}" Ąó^ž8 GET_SCREEN D F ó. PUT_SCREEN D T óöō READ_SCREEN6ŠóbŠņśīņō’ ņŅ WRITE_SCREEN 6ŠņŠpŠņÄīņ¾’ ņœNO_PORT\Šņ¦ROOT \Šņ”žl NULL_INDEX \Šņ|’’’’übMAX_LEN\ŠņhQóč MAX_DEPTH\ŠņRõüMAX_TREE \Šņ<dżģ NO_WINDOW\Šņ&’’’’ų® MAX_WTITLE \ŠņPüžR_TREE \Šńś’TR_STRING \Šńä÷ E_KEYBOARD \ŠńĢE_BUTTON \Šń¶żŚE_MOUSE1 \Šń ó–E_MOUSE2 \ŠńŠüĘ E_MESSAGE\Šńtž„E_TIMER\Šń` REPLACE_MODE \ŠńFńź TRANS_MODE \Šń.żŗXOR_MODE \Šńż(REV_TRANS_MODE \ŠšüūPAT1 \ŠšźłjPAT2 \ŠšŲž²PAT3 \ŠšĘńRPAT4 \Šš“žžPAT5 \Šš¢’PAT6 \Ššō†PAT7 \Šš~ū€PAT8 \Ššl PAT9 \ŠšZ õ¶PAT10\ŠšH ’PAT11\Šš6 öŽPAT12\Šš$ PAT13\ŠšPAT14\ŠšPAT15\Šļīł²PAT16\ŠļÜżHPAT17\ŠļŹPAT18\Šļøž PAT19\Šļ¦’^PAT20\Šļ”’^PAT21\Šļ‚’^PAT22\Šļp’^PAT23\Šļ^’^PAT24\ŠļLžbHATCH1 \Šļ8ž`HATCH2 \Šļ$ž^HATCH3 \Šļž\HATCH4 \ŠīüžZHATCH5 \ŠīčžXHATCH6 \ŠīŌžVHATCH7 \ŠīĄ žTHATCH8 \Šī¬!üžHATCH9 \Šī˜"žņHATCH10\Šī„#žšHATCH11\Šīp$žīHATCH12\Šī\%óąSOLID\ŠīJžnLONGDASH \Šī4õĘDOTTED \Šī ü&DASHDOT\Šī ł‚DASHED \Šķų÷T DASHDOTDOT \Šķą’\NORMAL \ŠķĢžn THICKENED\Šķ¶ūz LIGHTENED\Šķ ’0SLANTED\ŠķŒü UNDERLINED \Šķtó€OUTLINED \Šķ^żpSHADOWED \ŠķH ś$ SYSTEM_FONT\Šķ0żĄ SMALL_FONT \Šķż`G_BOX\ŠķõBG_TEXT \Šģņ’< G_BOXTEXT\ŠģÜžDG_IMAGE\ŠģČžŠ G_PROGDEF\Šģ²ū¶G_IBOX \ŠģžłäG_BUTTON \Šģˆ’Ą G_BOXCHAR\ŠģrūDG_STRING \Šģ\÷6G_FTEXT\ŠģHķf G_FBOXTEXT \Šģ0üfG_ICON \ŠģōzG_TITLE\Šģ öVNONE \ŠėöžŽ SELECTABLE \ŠėŽżŖDEFAULT\ŠėŹ’XEXIT_BTN \Šė“ģŽEDITABLE \Šėž RADIO_BTN\Šėˆł LAST_OB\Šėt žĀ TOUCH_EXIT \Šė\@żŠ HIDE_TREE\ŠėF€’PINDIRECT \Šė0śÖSELECTED \ŠėCROSSED\Šė’ŖCHECKED\ŠźņżŖDISABLED \ŠźÜ’¬G_NAME \ŠźČū¤G_CLOSE\Šź“ūhG_FULL \Šź ū¤G_MOVE \ŠźŒ’rG_INFO \ŠźxūĢG_SIZE \Šźd ļ G_UPARROW\ŠźN@ż° G_DNARROW\Šź8€ż2G_VSLIDE \Šź"žXG_LARROW \Šź G_RARROW \Šéö’VG_HSLIDE \Šéą’’G_ALL\ŠéĪļónWHITE\Šé¼śŌBLACK\ŠéŖ’īRED\Šéšż’GREEN\ŠéˆżBLUE \Šévļ²CYAN \ŠédśTYELLOW \ŠéPśōMAGENTA\Šé<’L_WHITE\Šé(žLL_BLACK\Šé ’ģL_RED\Šé ž:L_GREEN\Ščī žŠL_BLUE \ŠčŚ ü’L_CYAN \ŠčĘ L_YELLOW \Šč°ó L_MAGENTA\ŠčšöĪ MN_SELECTED\Šč‚ ’¼ WM_REDRAW\Ščlś  WM_TOPPED\ŠčVöö WM_CLOSED\Šč@žš WM_FULLED\Šč*’< WM_ARROWED \ŠčņBWM_HSLID \ŠēüWM_VSLID \ŠēęžWM_SIZED \ŠēŠ’WM_MOVED \ŠēŗūÜ WF_PREVXYWH\Šē¢’L WF_FULLXYWH\ŠēŠżš WF_HSLIDE\Šēt’Ž WF_VSLIDE\Šē^ ų& WF_HSLSIZE \ŠēFé WF_VSLSIZE \Šē.óāAC_OPEN\Šē(š˜AC_CLOSE \Šē) COLOR_REG]–ęŅ žęŚüŅ DRAW_MODES ]¾ęŖ žę²ūB LINE_TYPES ]ęę‚ žęŠżR PAINT_TYPES]ęZ %žębōņ GEM_DEVICE ]6ę2 žę:ż*INQ_TYPE ]\ę \åųž^ OPEN_VALS\\åę’źEXT_VALS \\åŠśę MOUSE_TYPE ]°åø °å¤śŅM_ARROW\°å”ųŌ M_TEXT_CURS\°å|ž”M_BEE\°åjūž M_POINT_HAND \°åP’¼ M_FLAT_HAND\°å8ū† M_THIN_CROSS \°åž\ M_THICK_CROSS\°åö` M_OUTLN_CROSS\°äźžPTEXT_PTR ]”äŌ²äęłXWORD16 ]Ģä° žäø Šä®ø䎒¢ MOUSE_FORM ]”ätv†*HOT_XQŠärHOT_YQŠä^RESQŠäL MASK_COLOR QŠä2’Ą DATA_COLOR QŠä’ĢMASK Q Ģćč’ŅDATA Q*ĢćŌJōćŹńŽ WINDOW_TITLE ]¾ćŖRPśÜMESSAGE_BUFFER ]žć~ žć† Šć|źć\ūL CTRL_PARMS ]:ćB  žćJŠć@&ć éņ INT_IN_PARMS ]xć žć  Šćdāāł INT_OUT_PARMS]¶āĘ -žāĪ\ŠāÄ¢ā¤ōŽ PTS_IN_PARMS ]ōāˆ  žāŠā†ąāfōt PTS_OUT_PARMS]2āJ  žāRŠāHā( ADDR_IN_PARMS]pā žāfā \įźł˜ADDR_OUT_PARMS ]°įĢ žįŌfįŹœįŖō”POINT]üį–XQŠį˜YQŠįˆŅįböģ RECTANGLE]lįF$2XQŠįHYQŠį8WQŠį(’ŠHQŠį"ąņž STR30]ŽąŚ čøSTR255 ]²ą¶’żˆTE_JUST]Öą’ Öą~ó*TE_LEFT\ÖąnéZTE_RIGHT \ÖąXś° TE_CENTER\ÖąBōŖ TREE_RANGE ] >ą* džą2ų: TREE_INDEX ] fą ’’’’džą ī*OB_TYPE] ŠßŽ  žßęų` TEXT_ED_INFO ]!Ęß“ÄdÜņTE_PTEXT Qjߒ TE_PTMPLTQjßz TE_PVALIDQjßb’ŠTE_FONTQ Šßh’¢TE_JUNK1 QŠßP’ŗTE_JUSTQŠß:’źTE_COLOR QŠß"TE_JUNK2 QŠß ’Œ TE_THICKNESS QŠŽī’Ģ TE_TXTLENQŠŽÖ’œ TE_TMPLENQŠŽ¾ “Ž˜ž TED_PTR]!źŽ~!ĘŽtśŖ SPEC_INFO]"zŽX0R>THICKQŠŽV’ģCOLORQŠŽBINFO Q!źŽPTRQžŽ’ĘSTRQjŻī"Żäė’OBJECT ]#–ŻŹāøČOB_NEXTQŠŻĘOB_HEADQŠŻ°’źOB_TAILQŠŻš’źOB_TYPEQŠŻ„OB_FLAGS QŠŻl’čOB_STATE Q ŠŻT’xOB_SPECQ "zŻ"’źOB_X QŠŻ*’¾OB_Y QŠŻ’|OB_W QŠŻ’ÄOB_H QŠÜī"žÜČüōTREE ]#øÜ° x#–ܦ >Ü¢’ü†TREE_PTR ]#ŽÜŠ#ø܀÷*MENU_PTR ]#ŽÜd÷J DIALOG_PTR ]#ŽÜPšŅ ICON_BLOCK ]%„Ü<|"8IB_PMASK QžÜ6IB_PDATA QžÜIB_PTEXT QžÜIB_CHARQ ŠŪš’ŗIB_XCHAR QŠŪŲ’ŅIB_YCHAR QŠŪĄ’¢IB_XICON QŠŪØ’øIB_YICON QŠŪ’BIB_WICON QŠŪx’øIB_HICON QŠŪ`’čIB_XTEXT QŠŪH’ IB_YTEXT QŠŪ0’ IB_WTEXT QŠŪ’øIB_HTEXT Q ŠŪ"$,ŚŚõ BIT_BLOCK]&4Ś¾nDVBI_PDATA QžŚøBI_WBQŠŚ¤BI_HLQŠŚ’ŲBI_X QŠŚ|BI_Y Q ŠŚh’ÄBI_COLOR Q ŠŚP%ŖŚ*ņ.USER_BLK ]&ŚUB_CODEQžŚ UB_PARMQžŁō&ZŁĪžōPARM_BLK ]'ŚŁ²Š¦ņPB_TREEQžŁ®’źPB_OBJ QŠŁ˜ PB_PREVSTATE QŠŁ|’Ī PB_CURRSTATE QŠŁ`PB_X Q ŠŁL’ŠPB_Y Q ŠŁ8PB_W QŠŁ$’ÄPB_H QŠŁ’xPB_XCQŠŲü’ÄPB_YCQŠŲč’œPB_WCQŠŲŌ’ÄPB_HCQŠŲĄ’ŲPB_PARMQžŲŖ&¶Ų„óņ ADD_DITEM6 fŲb~ #ŽŲVŠŲlŠŲfŠŲ`ŠŲZŠŲTŠŲNŠŲHŠŲBķĢ ADD_MITEM6ŠŲ(Œ#ŽŲ fל²×ō’łˆ ADD_MTITLE 6Š×ōš#Ž×Ģ²×Ę’ölAES_CALL D؊׼xך¶×”p׎°×ˆģņ AES_VERSION6Š×ˆ¶śī BEGIN_MOUSEDÄśŽ BEGIN_UPDATE DŅé BORDER_RECTDąŠ×Š×Š×Š×ŠÖüļŠBRING_TO_FRONT D īŠÖŠō CENTER_DIALOGD ü#ŽÖŠļ4 CLEAR_SCREEN D źh CLOSE_WINDOW D ŠÖXģ8 DELETE_DIALOGD &#ŽÖšÜ DELETE_MENUD 4#ŽÕźń( DELETE_WINDOWD BŠÕÜī˜DO_ALERT 6ŠÕĀP²Õš’ŠÕ°ęŽ DO_DIALOG6ŠÕ–^#ŽÕnŠÕ„žHDRAGBOXD l ŠÕ`ŠÕZŠÕTŠÕNŠÕHŠÕBŠÕ<ŠÕ6ŠÕ0ŠÕ*ܞ DRAW_MENUD z#ŽŌčų– DRAW_MODED ˆ¾ŌĀ’. DRAW_STRINGD–ŠŌ¶ŠŌ°²ŌŽ’ühD_COLOR6ŠŌ’¤ŠŌ†ŠŌ€ŚŌzŠŌtŠŌnóŅ END_DIALOG D ²#ŽŌ*ģx END_MOUSEDĄłč END_UPDATE DĪż^ ERASE_MENU D Ü#ŽÓĄē‚EXIT_GEM Dźó4 FIND_ALERT DųŠÓ”²Órķ FIND_DIALOGDŠÓf#ŽÓDö„ FIND_MENUDŠÓ:#ŽÓžŠ FIND_RESOURCE6 #ŽŅś"ŠÓ ŠÓļ FIND_WINDOW6 ŠŅč0ŠŅÜŠŅÖåę FIRST_RECT D>ŠŅ®ŠŅ؊Ņ¢ŠŅœŠŅ–ń FRAME_ARCDLŠŅpŠŅjŠŅdŠŅ^ŠŅXŠŅRńö FRAME_OVAL DZŠŅ*ŠŅ$ŠŅŠŅž\ FRAME_RECT DhŠŃšŠŃźŠŃäŠŃŽšśFRAME_ROUND_RECT DvŠŃ°ŠŃŖŠŃ¤ŠŃžż0 FREE_RESOURCED„éŚ FRONT_WINDOW 6ŠŃ\’÷t GET_DEDITD #ŽŃ fŃ²ŃčŒ GET_EVENT6DŠŃ ®ŠŠžŠŠųŠŠņŠŠģžŠęŚŠąŠŠŚŠŠŌŠŠĪŠŠČŚŠĀŠŠ¼ŠŠ¶ŠŠ°ŠŠŖžŠˆŠŠžŠŠ˜ŠŠ’ŠŠŒŠŠ†ŠŠ€ł°GET_EX_IN_FILE 6ŚŠ`¼¶Š8¶Š2ŽŠ,’ąå GET_IN_FILE6ŚŠ,Ź¶Š¶Ļžü> GET_OUT_FILE 6ŚĻüŲ²ĻŌ’¶ĻĪüę GET_WINDOW 6ŠĻĪęłFGROWBOXDōŠĻ¤ŠĻžŠĻ˜ŠĻ’ŠĻŒŠĻ†ŠĻ€ŠĻzžV HIDE_MOUSE DéŌINIT_GEM 6ŠĻ>ö  INIT_MOUSE Dņ\JUSTIFIED_TEXT D,ŠĪźŠĪäŠĪŽŠĪŲŠĪŅ²Ī°’ųž LINE_COLOR D :–ĪˆųČ LINE_ENDSTYLED HŠĪzŠĪt÷x LINE_STYLE D VęĪ0ėĪLINE_TOD dŠĪ(ŠĪ"’ LINE_WIDTH D rŠĶśčÜ LOAD_RESOURCE6 ŚĶÜ€²Ķ“’Õ& MENU_CHECK DŽ#ŽĶŒ fĶ†ŚĶœžŠ MENU_DISABLE Dœ#ŽĶV fĶPģś MENU_ENABLEDŖ#ŽĶ( fĶ"ę& MENU_HILIGHT Dø#ŽĢų fĢņżÖ MENU_NORMALDĘ#ŽĢŹ fĢÄł€ MENU_REGISTER6ŠĢĀŌŠĢ¶²Ģ”čü MENU_TEXTDā#ŽĢn fĢh²Ģb÷ MOVEBOXDšŠĢZŠĢTŠĢNŠĢHŠĢBŠĢ<łźMOVE_TOD žŠĢŠĢ÷ģ NEW_DIALOG 6#ŽĖŚ ŠĖźŠĖäŠĖŽŠĖŲŠĖŅ÷ŒNEW_MENU 6#ŽĖœŠĖ¬²ĖŠ’ł NEW_WINDOW 6ŠĖŠ(ŠĖ~¾Ė\ŠĖrŠĖlŠĖfŠĖ`śą NEXT_RECTD6ŠĖ:ŠĖ4ŠĖ.ŠĖ(ŠĖ"łĢOBJ_DRAW DD#ŽŹą fŹŚ fŹŌŠŹźŠŹäŠŹŽŠŹŲó4OBJ_FIND 6ŠŹ¾R#ŽŹ–ŠŹ¬ŠŹ¦ŠŹ ŠŹšä6 OBJ_FLAGS6ŠŹ€`#ŽŹX fŹRé® OBJ_OFFSET Dn#ŽŹ*ŠŹ@ŠŹ:ŠŹ4óÜ OBJ_REDRAW D|#ŽÉš fÉźÜŖ OBJ_SETFLAGS DŠ#ŽÉĄ fÉŗŠÉŠöœ OBJ_SETSTATE D˜#ŽÉŠ fɄŠÉšŚÉ”ń„OBJ_SIZE D¦#ŽÉRŠÉhŠÉbŠÉ\ŠÉVŠÉPż OBJ_STATE6ŠÉ6“#ŽÉ fÉžŠ OPEN_WINDOWDĀŠČüŠČöŠČšŠČźŠČäū PAINT_ARCDŠŠČ¾ŠČøŠČ²ŠČ¬ŠČ¦ŠČ öĀ PAINT_COLORD Ž–Č\ö` PAINT_OUTLINED ģŚČNüī PAINT_OVAL DśŠČ&ŠČ ŠČŠČߔ PAINT_RECT DŠĒģŠĒęŠĒąŠĒŚüøPAINT_ROUND_RECT DŠĒ¬ŠĒ¦ŠĒ ŠĒš÷Ņ PAINT_STYLED $ŠĒrįÜPLINED2ŠĒPŠĒJŠĒDŠĒ>÷ęLINE D@ŠĒŠĒŠĒŠĒ ļŖPLOT D NŠĘčŠĘāłvRECT_INTERSECT 6 ŚĘĀ\ŠĘ¶ŠĘ°ŠĘŖŠĘ¤ŠĘžŠĘ˜ŠĘ’ŠĘŒž REDO_DIALOG6ŠĘpj#ŽĘHŠĘ^÷ŗ RUBBERBOXDxŠĘ8ŠĘ2ŠĘ,ŠĘ&ŠĘ ŠĘēnSET_CLIP D†ŠÅōŠÅīŠÅčŠÅāߦ SET_COLORD”–Å ŠÅ¶ŠÅ°ŠÅŖųŹ SET_DEDITD¢#ŽÅh fÅb²Å\’²ÅV’²ÅP’ŠÅfÖÅDņŠ SET_DTEXTD°#ŽÅ fŲŒŠÅ(ÖÅüŌ SET_MFORMD ¾”Äą’œ SET_MOUSED Ģ°ÄŗųX SET_WINDOW D ŚŠÄ®āģ SET_WINFODčŠÄˆ¾Äfš~ SET_WNAMEDöŠÄ\¾Ä:Üś SET_WSIZED ŠÄ0ŠÄ*ŠÄ$ŠÄŠÄ’j SHOW_DIALOGD  #ŽĆŌŪB SHOW_MOUSE D ÷¼ SHRINKBOXD .ŠĆØŠĆ¢ŠĆœŠĆ–ŠĆŠĆŠŠĆ„ŠĆ~ż SYS_FONT_SIZED <ŠĆTŠĆNŠĆHŠĆBłTEXT_ALIGNMENT D  JŠĆŠĆž: TEXT_COLOR D  X–ĀĢõŚ TEXT_HEIGTHD  fŠĀĄųŗ TEXT_ROTATIOND  tŠĀ–ü| TEXT_STYLE D  ‚ŠĀnŁ VDI_CALL D&  ŠĀHŠĀBŠĀ<ŠĀ6:ĀxĀ¶ĀōĀ2ĮüŚĀķWIND_GET D žŠĮģŠĮęŠĮąŠĮŚŠĮŌŠĮĪžŒWIND_SET D ¬ŠĮØŠĮ¢ŠĮœŠĮ–ŠĮŠĮŠžŹ WORK_RECTD ŗŠĮdŠĮ^ŠĮXŠĮRŠĮLZĢź„BSystem„†OSystem2éåGEMDECL&GEMAES0·GEMVDIć]DOS BIOS STPascal ČčSTPASCAL ČSHORT_RO ŌSHORT_TR ąLONG_ROU ģLONG_TRU ųINT 8CTOPSTR DPTOCSTR ST_SHL ST_SHR PWROFTEN (BASEPAGE @CMD_ARGS LCMD_GETA rOPTION ~FILENAME “KEYPRESS ĄIO_RESUL ĢPEEK ŲWPEEK äLPEEK šPOKE üWPOKE LPOKE MOVE_B MOVE_W ,MOVE_L 4CLOCK PSETDATE \SETTIME hGETDATE tGETTIME €CUR_ON ŒCUR_OFF ˜CUR_UP ¤CUR_DOWN °CUR_RIGH ¼CUR_LEFT ČCUR_UP_S ŌCUR_DOWN ąCUR_HOME ģCLEAR_HO ųSAVE_CUR RESTORE_ SELECT_C SELECT_B (INV_ON 4INV_OFF @DELETE_L LCLEAR_LI XINSERT_L dSTART_OF pEND_OF_L |END_OF_S ˆSTART_OF ”WRAP_ON  WRAP_OFF ¬INSUPER øSUPER ÄGET_SCRE ŠPUT_SCRE ÜREAD_SCR čWRITE_SC ÄADD_DITEŽ|ADD_MITEpADD_MTITģAES_CALL AES_VERSBEGIN_MO6BEGIN_UPJBORDER_R’BRING_TOCENTER_DrCLEAR_SCCLOSE_WI JDELETE_DdDELETE_MDELETE_W DO_ALERT$DO_DIALOųDRAGBOX–DRAW_MENĀDRAW_MODŹDRAW_STRøD_COLORHEND_DIALEND_MOUSBEND_UPDA¢ERASE_ME EXIT_GEM¢FIND_ALE–FIND_DIAŠFIND_MEN”FIND_RESˆFIND_WINbFIRST_RE¾FRAME_ARŽFRAME_OVvFRAME_RE¦FRAME_RO®FREE_RES†FRONT_WI0GET_DEDI*GET_EVEN`GET_EX_ITGET_IN_FlGET_OUT_ŖGET_WINDGROWBOXīHIDE_MOU ōINIT_GEMINIT_MOUXJUSTIFIEŚLINE_COL@LINE_ENDęLINE_STYRLINE_TO4LINE_WID~LOAD_RESĘMENU_CHEŽMENU_DISŅMENU_ENA®MENU_HILŗMENU_NORŗMENU_REGźMENU_TEXMOVEBOX.MOVE_TO >NEW_DIAL>.NEW_MENUöNEW_WINDnNEXT_REC¬OBJ_DRAWpOBJ_FIND OBJ_FLAG|OBJ_OFFSÄOBJ_REDROBJ_SETF čOBJ_SETS OBJ_SIZE ōOBJ_STATOPEN_WIN²PAINT_ARņPAINT_CO PAINT_OU‚PAINT_OVjPAINT_REšPAINT_ROžPAINT_ST:PLINEFLINE^PLOTzRECT_INT<REDO_DIARUBBERBO¶SET_CLIPĪSET_COLO ÜSET_DEDI ŠSET_DTEXÖSET_MFORāSET_MOUSžSET_WIND>SET_WINF2SET_WNAM&SET_WSIZÜSHOW_DIAśSHOW_MOU(SHRINKBOfSYS_FONTdTEXT_ALITEXT_COLŠTEXT_HEILTEXT_ROT"TEXT_STYĘVDI_CALLNWIND_GETZWIND_SETVWORK_REC Ō4 ( ą4 6 ģ4 D ų4 R ˜ Z | Š (¦ 4† @Z“ LĀ f2  fč: X rŽŠ ~¦* ¦ “‚¢¦ ~ŽĄ ~ ŠT ~ ˜nģ Ąś Ģ Ų  ä$ š2 ü"@ N \ 2j ,4x 84` Dfn Pt” \"¢ h$° t(¾ €(Ģ Œ6Ś ˜6č ¤6ö °6 ¼6 Č6 Ō6. ą < ģ6J ų6X 6f 6t X‚ (X 46ž @6¬ L6ŗ X6Č d6Ö p6ä |6ņ ˆ6 ”6  6 ¬6* ø8 ÄV*F Š„T Ü>b čÜ6p ōÜ6 xź P f¶ 2 2Hy $ >J Jö œ øŽZV J& J VBgN€~ J dANq² J r’Hzź J €Hy" J ŽN€ øNqNq Ŗ Ä~ Š6N° Ü $¢ čdN˜ ōJ“$Š 4`$ü$0^0Ž <0jH$²TbŹ`Ź0¼lHŲ†,Z†’ü3üx ¢ pr’ŗ*ŗ’žćH¬Ō:Ō0.’žĘīJī"nąJDLE ś""IAE .ZVdvx.S_FOf.:XT_AÖ.HXT_C4pŅ6š| <ˆ–Pf|ŒNESSz¢Ü®øŗ$ĘĘ&ŽŅF ŖŽ&œź$āö((”Āt B& 20ö>t$čJt$ąV0 ŗb0>n06z0\†~’’8īž&ŚŖ:궆ĀL ˆĪ$ ”Ś: :ę8Vņ$ Žž$ $ Ų`ģ X"$ ‚. ž: 2Fl0@Rl0d^(NjN$v„0h‚ČHśŽ\$ZšB¦~6v²d$Š¾„6LŹF–Öz0¾āĢī ś $ÄĄ*®6°ŅBĪN žZ0 ¬f0 <r8 ~€Šh$– ¢ ų®0 „ŗŌĘX ąPHąŅģH$Øų bĀl@x0š0ō(8 .48r@ HL" tX ,dˆ0 Jp* R|2nˆ(0”"" &¦¬DDø<¤ÄL|Š. fÜ8$ č& >0€&€€&€€&€€&€$€6€€l†(€(0€(B€( lnl|&€|<€ģJ€V€x€| d X,lnRl|f€|pd X~€Š@€ģN€\€h€x®d ˜ųd ˜d€ģr€~€x܀¦ī€|ü€Š€Š$€Š8€ŠL€Š¢€|¬d Xŗ€`Ȁ˜Ś€|ģd ¦d Š*€ģ4€ś>€śJ€x | €Ä$€¾&€¾&€¾€|lxl”ljl†€˜€*€t€˜€*€t€˜€*€t€˜€*€t€˜€*€t€˜€*€t€˜€*€t €€J€˜€*€t€˜€*€t€˜€*€t€˜€*€t€˜6€˜<€H€t€˜6€˜<€H€t€˜€*€t€˜€*€t€˜€*€t€˜€*€t€˜€*€t€˜€*€t€˜€*€t€˜€*€t€˜€*€t€˜€*€t€˜€*€t ddd,l¾2d>dDl¾Jd hģ&€¾.hśdh$ hģ&€¾4h€|(€*.€Ä^€&~€&¢€&؀ľ€pĀÄ€|(€8.€Ä^€4~€4¢€4؀ľ€pĀÄ t(dd d*d@ttFdLd”džpŠ¤d¶dĄpŚŹdVŌd:Žd$čdŽņdģüdrd dp(t|€|$€`2€˜D€|Tt¾ x:€”€†džd¬dŗd<€”Nd $`d $l€”¤d $܀”€”L€”žd dĀd rÖd €źd Žžd œdd V„€”Ŗ€¶€t¼€ĀdźŹ€d ŖHdVdddrd„€ģŽ€ś˜€ś¢€ś¬€śø€xŹ€†t@€|Z€†hdnʀ”Ś€†ędn€|(€|:€|b€”|€”Žd $¤€“¼€†ČdnŽ€†ģdn€†dn<t\ddd d&tŚTtčlt\|t°"d`t°Vtčdn dn2tž@d`Nd`€¦ž€˜°€|€|$€`2€˜D€|Rdn`dnvt¬„d`’d`Ō€¦ā€˜ō€|€|.d ^d~€d°¬d~Ųd¢d~&d°Pd~td°~düŒd^¤d ®d²ød&*d2d\€h€tn€tdź|€Šddddd ŖZdfd~t@d¬"d2dśh€¦v€`„€˜ŽdŒØdŒ¼dœŅdŒģdŒdŒ dŒ:dŒTdŒHdTd¤d°dŹt@ dd2t@T€|z€†Ųd’ąd:čdHšdVüd¬ddš6€†H€|Zdd¬dX€ģb€śl€śx€x†d $Ŗ€”¾€”€|"d¬2dĘDdTd Ŗ’€† dn¶dĄd t@dBd ŖŒd¼t@ō€|d¬dą*d@dZdˆfd Ŗœd¦dŌx(žt@*€†8dntģtģtt"tś:tśttt$Jd žft€döLd žfttŗtČ"d ¬€` €˜2€|Jx6ZxDdd ¬€` €˜2€|Jx6ZxDdd ¬"d ž"d ž"d ž"d žLx` ddd$d*d žd ¬dd&d ž.d d2d@p` dp†d.p” dp¾d,pč dp¢ dpJd p.&d.pJ4d>p†PdZp.td~p.„d’p<¬d¶p.¼dĢp< d dp dp dddd*d8dDdLdRd`p˜dd*d8dDdLdRd`p˜ ddd2dd(d0d6dDp¦dd.dBdNdXpŽ^dxdhdd.d>dPdddtd†d–d¤d®d¼p˜ dd d0p26dPdZ dd d6p\dd.dBdNdXpN^dhdrp@dd.dBdNdXp@ dd d8pj>dHdRd^dvp\ dd d8p\€|$€`2€˜D€|JdTd`dlp“tötötötö dptötätäžtĀtä tä"t"t* d |6€|$€`2€˜D€|NtFTxtbtbtb$d` tT€` €˜2€|Ft24d@dJdTdZx`djd¤d¼dÖdd.d ddd$d,d2d dddd&d0d:dDdddŅˆdŅ¬dŅĪdŅņdŅdŅ6dŅVdŅxdŅšdŅ¼dŅŽdŅdŅ$dŅHdŅldŅdŅ“dŅŲdŅüdŅ dŅDdŅhdŅŒdŅ°dŅŌdŅųdŅdŅ@dŅbdŅ†dŅØdŅŹdŅģdŅdŅ0dŅRdŅtdŅ˜dŅ¼dŅÜdŅdŅ dŅBdŅddŅ†dŅØdŅŹdŅģdŅdŅ0dŅRdŅtdŅ–dŅødŅŚdŅųdŅdŅ:dŅ^dŅ‚dŅ¤dŅČdŅģdŅ dŅ 2dŅ TdŅ2t "t"t.*t<*tJ dpž dpĢ dpö€|$€`2€˜D€|JdTd`dxpx d pČ tjtxtÖtb.t\"t\ ddd d&d,p¬t\ dddd$d*d0d6dxNqNqNV’ų/.Hn’ų?< CN€Hn’ųB§?<SN€=@ N^.ŸNuNqNqNV’ų/.Hn’ų?< CN€Hn’ųB§?<QN€=@ N^.ŸNuNqNqNV’ų/.Hn’ų?< CN€Hn’ųB§?<SN€-@ N^.ŸNuNqNqNV’ų/.Hn’ų?< CN€Hn’ųB§?<QN€-@ N^.ŸNuNqNqNV .=@ N^.ŸNuNqNqNV’ģAśFCī’ö2Ų"Ų"ŲHnHn’ö?< N€Hn’öHn’ģ?< ĘN€Aī’ģ"n "Ų"Ų2ŲN^ _TNŠ@“]Ż©‹ū‰NqNqNV . ".ćØ-@N^ _PNŠNqNqNV . ".āØ-@N^ _PNŠNqNqNV"n"¹ÖN^.ŸNuNV’ųHēHn’žHn’üHn’śHn’ųN€0.’žHĄr 100 objects) - abortingNV’ŚHēU/.N€=_’ž0.’žĮü&nGó7n0+@ €n7@Bk 0.Įł 7@0.Įł 7@0.Įł 7@0. Įł 7@?.Hn’ŚN€?<N€?<N€?<N€?<N€XHn’ŚN€gFHn’śHxN€(n’śB”B¬B¬9| Bl9n9n BlBl'n’ś `7n 7n/.Bg?.’žN€0.’ž@LßN^ _OļNŠNV’Hē/. Hn’?<’N€.H€Įü&nGó0+ @g @ g @f*Hk p.’R@HĄ/N€Hn’/+ N€`¤ @fp.’įH2+ HŠA7@ `„ @g @g @g @fd(k J”gHT0,HĄ/N€HTp.’R@HĄ/N€Hn’/N€B¬B¬9n .H€9@p.’R@9@BlLßN^ _OļNŠNVüžHē/.Hn’?<’N€/.Hnž?<’N€/. Hnż?<’N€.H€Įü&n&s J“gHS0+HĄ/N€J«gHk0+HĄ/N€J«g HkN€p.’HzČHn’&N€–_TC=CüžHS0.üžHĄ/N€Hnż/N€Hkp.žR@HĄ/N€Hnž/+N€Hkp.’R@HĄ/N€Hn’/+N€7n .H€7@7nüžp.’R@7@.H€Įü&nGó0+@7@LßN^ _OļNŠ_NqNqNV. H€Įü"n3® J.g/.. H€?BgBgBgBgBgN€N^ _Oļ NŠNqNqNV.H€Įü n =p N^ _\NŠNVHē. H€Įü&n Gó0+@ €n7@&_N^ _PNŠNqNqNV.H€Įü n =pN^ _\NŠNqNqNV/.HyHyHyHyN€N^.ŸNuNV’ųHē&n 0+[@=@’ž0+[@=@’ü0+@ =@’ś0+@ =@’ųBgBgBgBgBg?.’ž?.’ü?.’ś?.’ųN€/. Bg?<’BgBgBgBgN€U/. ?.N€=_&_N^ _\NŠNqNqNV. H€Įü n p //.N€N^ _Oļ NŠNqNqNVU/. ?.N€=_N^ _\NŠNV’ųHē&n0+[@=@’ž0+[@=@’ü0+@ =@’ś0+@ =@’ų?<BgBgBgBg?.’ž?.’ü?.’ś?.’ųN€&_N^.ŸNuNqNqNVüü/. Hn’N€/.HnžN€Hn’HnžHnżžN€Hn’/. N€Hnž/.N€p n =@żü0.żür n 0 \g Snżü`’āHnüü/. ?<?.żüN€/.HnüüN€Hnüü/.?<PN€ nżžWĄD@N^ _PNŠNqNqNVüÜ/.Hn’ą?<N€Hn’ąHnüÜN€HzęHnüÜN€HnüÜHn’ą?<N€/.HnžąN€/. HnżąN€HnžąHnżąHnżŽHn’įN€Hnžą/.N€Hnżą/. N€p n=@żÜ0.żÜr n0 \g SnżÜ`’āHnüÜ/.?<?.żÜN€/. HnüÜN€HnüÜ/. ?<PN€ nżŽWĄD@N^ _Oļ NŠNqNqNVžō/. Hn’?<’N€Y?<BgBg?<&?<N€-_žüU/.žü?<Bg?<Bgp.’??<?<’’?<N€H€=@žś/.žü0.žśHn’?<B'N€U/.žü?<?<?<?<?<"?<?<’’?<€N€H€=@žō/.žü0.žōHzHz0/.?<<N€U/.žü?<?<?<?<?<?<?<BgN€H€=@žų/.žü0.žųHz?<<N€U/.žü?<?<?<?<?<?<?<BgN€H€=@žö/.žü0.žöHzŗ?<<N€/.žüN€U/.žüBgN€=_žś/.žü0.žō/.N€/.žüN€/.žüN€0.žś°nžųWĄD@N^ _PNŠ"__________________________________ "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP  OK  Cancel NV’ųHēpr²@mŠ=@’ž=A’ś`Rn’ž0.’žĮü²Gł$GóB“BkBkB+°7|’’B« pr²@m<=@’ü=A’ų`Rn’ü0.’üēHIėIō8¼’’9|’’BlBl0.’ü°n’ųf’Ņ0.’ž°n’śf’„LßN^NuNV’ųHēBn’žB.’ū n’ž_ĄDJ.’ūWĮDĄg,0.’žĮü²Ał$J°WĄD@’ūJ.’ūfRn’ž`’ĄJ.’ūf(HyÖHzœBgN€N€N€BgN€0.’žĮü²Gł$Gó&® 7nBkB+°7|’’B« pr²@m<=@’ü=A’ų`Rn’ü0.’üēHIėIō8¼’’9|’’BlBl0.’ü°n’ųf’ŅLßN^ _\NŠMenu table full - aborting NqNqNV’žBn’ž0.’žĮü²Ał$"0²®g Rn’ž`’ą=n’ž N^.ŸNuNV’žHē0.Įü²Gł$GóBn’ž0.’žēHAė p’’g Rn’ž`’ę=n’ž &_N^ _TNŠNV’žHē0. Įü²Gł$GóBn’ž0.’žēHAė20²ng Rn’ž`’ä=n’ž &_N^.ŸNuNV’žHēU/.N€=_’ž0.’žĮü&nGó7|0+@ 7@Bk Bk BkBk n0(.R@7@09R@7@09 Įü7@/.Bg?.’žN€=n’ž &_N^.ŸNuNVżüHēU/.N€=_’ü0.’üĮü²Gł$GóU/.N€7_|°U/.0+HnžüHz?<p k r’@?N€/+ HnżüN€HnžüHnżüN€HnżüN€=_’žU/.0+HzÖN€=_’ž/.0.’žN€U/.0+HzĀN€=_’žU/.0+Hz¾N€=_’žU/.0+HzŗN€=_’žU/.0+Hz¶N€=_’žU/.0+Hz²N€=_’žU/.0+Hz®N€=_’ž&_N^.ŸNu --------------------  Desk Accessory 1  Desk Accessory 2  Desk Accessory 3  Desk Accessory 4  Desk Accessory 5  Desk Accessory 6 NVHē&n&kžü6¼’’7|’’7|’’7|0+@ 7@Bk Bk BkBkBk09R@7@09R@7@&_N^.ŸNuNVHē&n&kžüGė7|0+@ 7@Bk Bk 7|BkBk09R@7@09 T@7@ n/(žüBg?<N€&_N^.ŸNuNVHē&n&kžüGė07|0+@ 7@Bk Bk Bk09 ćH7@Bk7y n/(žü?<?<N€&_N^.ŸNuNVžöHē/.Hn’?<’N€0. @ @=@žųHnžü0.žųĮüHĄ/N€J®žügJ0.žųS@r°Am<=Ažś=@žö`Rnžś0.žśĮü&nžüGó6¼’’7|’’7|’’0.žś°nžöf’Ņ/.žü?.žųN€/N€/N€/N€U/.žüN€0Įü²Gł$GóU/.žüHzVN€7_Hk p.’R@HĄ/N€Hn’/+ ?<’N€Jn f /.žüN€-nžü&_N^ _\NŠ Desk NV’ÜHēU/.N€0Įü²Gł$Gó0+S@r°Amf=A’ž=@’ü`Rn’ž0.’žĮü(SIō?,Hn’ÜN€?<N€?< N€XHn’ÜN€g Hl N€0.’ž°n’üf’ØHk p k R@HĄ/N€HS0+ĮüHĄ/N€B“B®LßN^.ŸNuNVžśHē/.Hn’?<’N€U/. N€=_žžU?.žžN€=_žü0.žžĮü²Gł$GóU/. N€=_žś0.žśĮü(SIō9| 0,@ 9@Bl Hl p.’R@HĄ/N€Hn’/, N€9kBlp.’Įł 9@9y0.žüēHIėIō8®žś9kBl0.žśĮü S20Ók"S3kD/. ?<?.žśN€=nžśLßN^ _PNŠNV’žHē n0(žžĮü²Gł$Gó n0(žüēHAė p’’g U n/(N€=_’ž0.’žĮü(n(lIō9|0,@ 9@Bl 9|’ 9| n0(žüēH29 ćIAėŅp9ABlBlBl n/(?+?.’žN€ n0(žüēHCė3®’žLßN^.ŸNuNVžśHē/.Hn’?<’N€U/.N€=_žžU?.žž. H€?N€=_žü0.žžĮü²Gł$GóJ+°f /.N€0.žüēHAėJpf /N€U/.N€=_žś0.žśĮü(SIō0.žüēHKėKõBl9mp.’Įł 9@9y 0,Ńm0-ĮüU2-Ćü S?0?,&N€"S3Ÿ00-Įü2,"SÓq/.?-?.žśN€9|0,@ 9@Bl Hl p.’R@HĄ/N€Hn’/, N€=nžśLß8N^ _Oļ NŠNqNqNV/.?<N€N^.ŸNuNqNqNV/.BgN€N^.ŸNuNqNqNV/. .H€?BgN€N^ _\NŠNqNqNV/. .H€??<N€N^ _\NŠNqNqNVJ.g/. . H€??<N€`/. . H€?BgN€N^ _PNŠNqNqNV/. .H€??<N€N^ _\NŠNqNqNV/. .H€?BgN€N^ _\NŠNqNqNV/.. H€?/.N€N^ _Oļ NŠNqNqNV’žJnWĄDJn WĮDĄJn WĮDĄJnWĮDĄgBg?<HnHn Hn HnN€U?.?.?. ?. ?.N€=_’žJn’žm?.’ž/.N€=n’žN^ _OļNŠNqNqNVJnWĄDJn WĮDĄJn WĮDĄJnWĮDĄg ?.?<HnHn Hn HnN€?.?.?. ?. ?.N€N^ _Oļ NŠNqNqNV?.N€N^ _TNŠNqNqNV?.N€N^ _TNŠNqNqNV?.?<?.?. ?. ?.N€N^ _Oļ NŠNqNqNV’/.Hn’N€HzXHn’N€Hn’/.?<PN€?. ?<U nHhN€U nHhN€BgBgN€N^ _\NŠNqNqNV’/.Hn’N€HzXHn’N€Hn’/.?<PN€?. ?<U nHhN€U nHhN€BgBgN€N^ _\NŠNqNqNV?.?</././. /.N€N^ _OļNŠNqNqNV?.?</././. /.N€N^ _OļNŠNqNqNV?.?< /././. /.N€N^ _OļNŠNqNqNV?.?< /././. /.N€N^ _OļNŠNqNqNV’š=n’ų=n’ś=n’ü=n’ž n=P’š n=P’ņ n =P’ō n=P’öUHn’ųHn’šN€_ "n2®’š"n2®’ņ"n 2®’ō"n2®’öN^ _OļNŠNqNqNV’ž?9?< Hn’žHyHyHyN€=n’žN^NuNqNqNV?.?< BgBgBgBgN€N^ _TNŠNqNqNV’ž?.?<HyHy Hn’žHn’žN€3ī"N^ _TNŠNqNqNV=y"N^NuNqNqNV’ų=n’ų=n ’ś0.Šn S@=@’ü0. ŠnS@=@’ž?9?<Hn’ųN€N^ _PNŠNqNqNV?9.H€?N€N^ _TNŠNqNqNV’ś=n ’ś=n ’ü=n’ž?9.H€?Hn’śN€N^ _PNŠNqNqNV?9.H€?N€?9.H€?N€N^ _TNŠNqNqNV?9.H€?N€N^ _TNŠNqNqNV?9.H€?N€N^ _TNŠNqNqNV0. @f4?9?<N€?9BgN€?9?<N€`Œ @f?9?<N€`p @m2 @n*?9?<N€?90.S@?N€`8 @m0 @#n(?9?<N€?90.@?N€N^ _TNŠNqNqNVīN^ _TNŠNqNqNV?9.H€?N€N^ _TNŠNqNqNV?9?.N€N^ _TNŠNqNqNV3ī 3īN^.ŸNuNqNqNVžŽ0.Šy=@žŽ0. Šy =@žą0. Šy=@žā0.Šy =@žä3ī 3ī?9?<HnžŽN€N^ _PNŠNqNqNVžŽ0.Šy=@žŽ0. Šy =@žą0. Šy=@žā0.Šy =@žä3ī 3ī?9?<HnžŽN€N^ _PNŠNqNqNV?9?9?. ?.N€N^.ŸNuNqNqNVžŽ0. Šy=@žŽ0.Šy =@žą3ī 3ī?9?<HnžŽN€N^.ŸNuNqNqNV’ų0.Šy=@’ų0. Šy =@’ś0.Šn ŠyS@=@’ü0. ŠnŠy S@=@’ž?9Hn’ųN€J9g?.?. ?. ?.N€N^ _PNŠNqNqNVžŽ0.Šy=@žŽ0. Šy =@žą0.Šn ŠyS@=@žā0. Šy =@žä0.Šn ŠyS@=@žę0. ŠnŠy S@=@žč0.Šy=@žź0. ŠnŠy S@=@žģ0.Šy=@žī0. Šy =@žš?9?<HnžŽN€N^ _PNŠNqNqNV?90.Šy?0. Šy ??. ?.N€J9g?.?. ?. ?.N€N^ _PNŠNqNqNV?90.Šy?0. Šy ??. ?.Bg?<N€N^ _PNŠNqNqNV’ų0.Šy=@’ų0. Šy =@’ś0.Šn ŠyS@=@’ü0. ŠnŠy S@=@’ž?9Hn’ųN€J9g?9Hn’ųN€N^ _PNŠNqNqNV’ų0.Šy=@’ų0. Šy =@’ś0.Šn ŠyS@=@’ü0. ŠnŠy S@=@’ž?9Hn’ųN€N^ _PNŠNqNqNV?90.Šy?0.Šy ??.?. ?. ?.N€J9g6?90.Šy?0.Šy ??.?. ?. ?.N€N^ _Oļ NŠNqNqNV?90.Šy?0.Šy ??.?. ?. ?.N€N^ _Oļ NŠNqNqNVž/.Hn’?<’N€Hn’HnžN€HzNHnžN€HnžHn’?<’N€?90.Šy?0. Šy ?Hn’N€N^ _PNŠNqNqNV?<’/.N€N^.ŸNuNqNqNV.H€?B§N€N^ _TNŠNqNqNV?<B§N€N^NuNqNqNV?<B§N€N^NuNqNqNV?9BgN€BgB§N€N^NuNqNqNV?<N€N^NuNqNqNV?<N€N^NuNqNqNV’üJ.6g =|’ž`Bn’žJ.,g =|’ü`Bn’üU?.B?.?.’ž?.4?.2?.0?..?.’ü?.*?.(?.&?.$/. .8H€? .8ąXH€?/./. /./././.N€=_DN^ _OļHn’N€Hn’/.?<’N€U?. nHhN€=_N^ _\NŠNqNqNV’ü"n2®$"n3n"n3n "n3n" "n3y /.#ß /.#ß/.#ßHyL#ß/. #ßJ.g`0.ćHr°AmR=A’ž=@’ü`Rn’ž0.’žād0.’žćH29 "nÓq`0.’žćH29"nÓq0.’ž°n’üf’¼Hy "psNBJ.g`0.ćHr°AmR=A’ž=@’ü`Rn’ž0.’žād0.’žćH29 "n Óq`0.’žćH29"n Óq0.’ž°n’üf’¼N^ _OļNŠNqNqNV3ī83ī:3ī <3ī >3ī@Hy "0<ČNBN^ _Oļ NŠNqNqNVHy8#ß HyP#ß$/.#ß(/.#ß,/. #ß0/.#ß40. @ f?< Bg?<BgBgN€`ī @ f?< ?<?<?<BgN€`Ź @ f?< ?<?<?<BgN€`¦ @ f?< Bg?<?<BgN€`„ @f?<?<?<?<BgN€`` @f?<?<?<?<BgN€`< @f?<Bg?<BgBgN€` @f?<Bg?<BgBgN€`ü @f?<?<?<BgBgN€`Ś @f?<?<?<BgBgN€`ø @f?<Bg?<?<BgN€`– @f?<?<?<BgBgN€`t @f?<?<?<?<BgN€`P @f?<?<?<BgBgN€`. @f?<?<?<?<BgN€` @f?<?<?<?<BgN€`ę @ f?< ?<?<?<BgN€`Ā @!f?<!?<?<?<BgN€`ž @"f?<"?<?<?<BgN€`z @#f?<#?<?<?<BgN€`V @(f?<(?<?<?<BgN€`2 @)f?<)?<?<?<BgN€` @*f?<*?<?<?<BgN€`ź @+f?<+?<?<?<BgN€`Ę @,f?<,?<?<?<BgN€`¢ @-f?<-?<?<?<BgN€`~ @.f?<.?<?<?<BgN€`Z @/f?</?<?<?<BgN€`6 @2f?<2?<?<?<BgN€` @3f?<3?< ?<BgBgN€`š @4f?<4?<?<?<BgN€`Ģ @5f?<5?<?<BgBgN€`Ŗ @6f?<6Bg?<?<BgN€`ˆ @Ff?<F?<?<BgBgN€`f @Gf?<G?<?<BgBgN€`D @Hf?<H?<?<BgBgN€`" @If?<I?<?<BgBgN€` @Jf?<J?<?<BgBgN€`Ž @Kf?<K?<?<?<BgN€`ŗ @Lf?<L?<?<?<BgN€`– @Mf?<MBg?<BgBgN€`v @Nf?<N?<?<?<BgN€`R @Of?<OBg?<BgBgN€`2 @Pf?<PBg?<?<BgN€` @Qf?<QBg?<?<BgN€`ī @Zf?<ZBg?<?<BgN€`Ģ @[f?<[Bg?<?<BgN€`Ŗ @df?<d?<?<BgBgN€`ˆ @ef?<e?<?<BgBgN€`f @ff?<f?<?<BgBgN€`D @gf?<g?<?<BgBgN€`" @hf?<h?<?<BgBgN€` @if?<i?<?<BgBgN€`Ž @jf?<j?<?<BgBgN€`¼ @kf?<k?<?<BgBgN€`š @lf?<l?<?<BgBgN€`x @mf?<mBgBgBgBgN€`Z @nf?<nBg?<?<BgN€`8 @of?<oBg?<BgBgN€` @pf?<p?<?<Bg?<N€`ō @qf?<q?<?<?<BgN€`Š @xf?<xBg?<?<BgN€`® @yf?<y?<?<?<BgN€`Š @zf?<z?<?<?<BgN€`f @{f?<{?<?<?<BgN€`B @|f?<|Bg?<?<BgN€` @}f?<}Bg?<?<BgN€N^ _OļNŠNqNqNV?.?.?.?.?.?.?.?./. /.N€N^ _OļNŠNqNqNV?.?.?.?./. /.N€N^ _OļNŠNqNqNV?.?. ?.?.?. ?.N€N^ _Oļ NŠNqNqNV?.?.?.?.?.?. ?. ?.N€N^ _OļNŠNqNqNV?.?.?.?.?.?. ?. ?.N€N^ _OļNŠNqNqNV?9?.N€N^ _TNŠNqNqNV?9?. ?.N€N^.ŸNuNqNqNV?9?.N€N^ _TNŠNqNqNVž/.Hn’?<’N€Hn’HnžN€Hz\HnžN€HnžHn’?<’N€?90.Šy?0.Šy ?Hn’?.?.?. N€N^ _OļNŠNqNqNV?9?. ?.Hn HnN€N^.ŸNuNqNqNVU/.?.?. ?. ?.N€=_N^ _Oļ NŠNqNqNV/.?./. /.N€N^ _OļNŠNqNqNVU?. ?.N€=_ N^.ŸNuNqNqNV’ü?. ?.Hn’üN€-n’ü N^.ŸNuNVHē0.Įü&nGó"n2«"n2«"n 2«"n2«&_N^ _OļNŠNqNqNV/..H€?.H€??.?. ?. ?.N€N^ _OļNŠNqNqNV’ž0.r ćh2.įIŠA2. éIŠAŠn=@’žJ. g0.’ž@€=@’ž=n’žN^ _Oļ NŠNqNqNV/. .H€??<’BgBgBgBgN€N^ _\NŠNqNqNV?9?.HyHyHyHyN€N^ _TNŠNqNqNV/.Bg?<’BgBgBgBgN€N^.ŸNuNqNqNVByByüByBy By"B9N€N^Nu0TEE 4sś1 DD `tś3CONFIG Evś4 {$D+} UNIT UtilUnit; { Filename: UtilUnit.pas } { Coder : Jacob V. Pedersen } { Coded : 06-02-1991 } { Purpose : Example } { This unit contains some routines that might come in handy. } { Changes in version 1.1: For an example of how to use the new Inline Assembler, take a look at the HZ200 function. The Exist function shows how to use Assign as in Turbo Pascal. } INTERFACE Uses DOS; Const Version = 1.1; Var StrIn : Text; { Read } StrOut : Text; { Write } StrData : String; { IO buffer for StrIn and StrOut } Function Int2Str(Num : Integer) : String; Function Exist(Filename : PathStr) : Boolean; Procedure WaitToGo(KeyVal : Byte); Function NoSpaces(S : String) : String; Function UpperStr(S : String) : String; Procedure ClearStrInOut; Function HZ200 : LongInt; IMPLEMENTATION Function HZ200 : LongInt; ASSEMBLER; ASM CLR.L -(SP) { Enter SuperVisor mode } MOVE.W #$20,-(SP) TRAP #1 MOVE.L $4BA,@result { Get long-word containing HZ200 counter } MOVE.L D0,2(SP) { Exit SuperVisor mode } TRAP #1 ADDQ.W #6,SP { Cleanup stack } END; Function Exist(Filename : PathStr) : Boolean; Var Dummy : File; IOres : Integer; Begin Assign(Dummy,FileName); {$I-} Reset(Dummy); {$I+} IOres := IOresult; If (IOres = 0) then Close(Dummy); Exist := IOres = 0; End; Function Int2Str(Num : Integer) : String; Var Res : String; Begin Str(Num, Res); Int2Str := Res; End; Procedure WaitToGo(KeyVal : Byte); Begin Repeat Until (ReadKey = Chr(KeyVal)); End; Function NoSpaces(S : String) : String; Begin While (Pos(#32,S) > 0) Do Delete(S,Pos(#32,S),1); NoSpaces := S; End; Function UpperStr(S : String) : String; Var X : Byte; Begin For X := 1 To Length(S) Do S[X] := UpCase(S[X]); UpperStr := S; End; Procedure ClearStrInOut; Begin While Not(Eof(StrIn)) Do ReadLn(StrIn); End; Procedure StrInOutHandler(Var F : TextRec); Var Tmp : String; Begin With F Do Begin If fInpFlag then Begin { read } Move(StrData[1],fBufPtr^[0],Length(StrData)); fBufEnd := Length(StrData); StrData := ''; End Else Begin { write } Move(fBufPtr^[0],Tmp[1],fBufPos); Tmp[0] := Chr(fBufPos); Insert(Tmp,StrData,Length(StrData)+1); End; fBufPos := 0; End; End; Var DevBuf : TDevBuf; BEGIN Device('StrInOut',@StrInOutHandler,DevBuf); Assign(StrIn,'StrInOut'); Reset(StrIn); Assign(StrOut,'StrInOut'); Rewrite(StrOut); END.r := -1; lift := FALSE; with stack do begin x := 0.0; y := 0.0; z := 0.0; t := 0.0 end end. UNI2ę®ę®ĄV ¼¼ >ćŅÜįĀöāøįŒ6ätćŅćŅß6ꮶŅ~ü’ŗŹ,P\āffUTILUNIT NVERSION\*’`?’ŒĢĢĢĢĢĢĢSTRINQ>’BSTROUT QÖ>’,STRDATAQ¬ī’INT2STR6’ ī’ŠžōEXIST6 ŚžŽ(螏’°WAITTOGO D 6ž¬NOSPACES 6’ īž’Dīž†’UPPERSTR 6’ īžlRīž`’ CLEARSTRINOUTD`HZ2006žž&n,ä„BSystem„†OSystem2ć]DOS UtilUnit|źUTILUNIT”INT2STRˆEXIST WAITTOGO¬NOSPACESøUPPERSTRÄCLEARSTR|HZ200nˆ(”`$ 6 6¬$Dø`RÄz`Ž.ŽSTRINOUTŠź< lZp€|"p„–0pƒ*4pƒÄHpƒpLpƒŅpƒü,p€| l€(p€|"p€“:p€“Bp€ŠVp€|p€|Jpörp€| dp‚ņd p‚Ö$pƒŅd d(p¾.d<dFp€|Zp¾jdvd€p€Ād€Šdp‚ d&p„ˆ*pƒŅ.d6p‚.:pƒŅ>dHp„ˆLpƒŅPdXp‚<\pƒŅNVB§?< NA-xŗ/@NA\ON^NuNqNqNV’X/.Hn’°?<ON€Hn’ZHn’°N€Hn’ZB§?<N€N€=_’XJn’XfHn’ZN€N€Jn’XWĄD@ N^.ŸNuNqNqNV’0.HĄ/BgHn’?<’N€Hn’/. ?<’N€N^ _TNŠNqNqNVUN€0r.°Af’īN^ _TNŠNqNqNV’/.Hn’?<’N€HzDHn’N€0J@oHn’Hz,Hn’N€?<N€`’ŅHn’/. ?<’N€N^.ŸNu NqNqNVžü/.Hn’?<’N€p.’r°Am@=Ažž=@žü`Rnžž0.žž2.žžtAī’0?N€r2Cī’0.žž°nžüf’ĪHn’/. ?<’N€N^.ŸNuNqNqNVHyN€JfHyN€N€`’ąN^NuNV’Hē&nJg