S|p ' `  @`! #@%`')+-//3@5`79;=?A OE`GIKMOQ SU`WY[]/cogikmoq s@u`w{} @` ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @ @`Ao!Aa!!#A%a')+-1!O5a79;=?A!CAEaGIKMOQ!SAUaWY[]_a!cAeagikmoq!sAuawy{}!Aa!Aa!Aa!Aa!Aaǁɡ!Aaׁ١!Aa/Aa / `  @`! #@%`')+-//3@5`79;=?A OE`GIKMOQ SU`WY[]/cogikmoq s@u`w{} @` ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @ @`Ao!Aa!!#A%a')+-1!O5a79;=?A!CAEaGIKMOQ!SAUaWY[]_a!cAeagikmoq!sAuawy{}!Aa!Aa!Aa!Aa!Aaǁɡ!Aaׁ١!Aa/Aa / BACKUP `BILDEX `DG_TRIO `0DRVCORR `_GLIB `dMAUSWIND `MENUDLX ` A548 zdLEES DIT =`. `.. BACKUP DAT F CBACKUP PRG F RBACKUP TXT F lE:\*.* A:\ C:\Desktop.inf A:\ C:\program\Gfa\Listings\*.lst A:\gfa\Listings\ C:\program\Gfa\Programs\*.gfa a:\gfa\programs\ D:\Text_DTP\Cypress\NEC_P6_7.Cpr a:\cypress\ D:\Text_DTP\CYpress\Privat.cyp\*.cyp a:\cypress\privat.cyp\ D:\Text_DTP\CYpress\Beruf.cyp\*.cyp a:\cypress\martin.cyp\ D:\Dateien\*.* a:\dateien\ `Nr<"AON&NNaa2APaMna2APa)p(aI.a3>a2ENpHa2Nt EP?pFa22EPpFa2&EPpa2a;A\aCba/f$m("maJ/$m("maJ0(H _a6Ta=a6Cha/(pAha5"ma/ ma3( m 0Hf* ma3(p m HJf H/-N ma3r@a&<8aa+@BHmbN,+mp+@ -a,`l(- m 0H(- m!H(- m 0H(- m!H(-"maI(-"maI`(-"maI(-"maIHR -o]`0-fHSAba4Cba-pAba5p\a'fp$m$ -a,`:$m( m 0Hrg$m("maI EPp a'vp a4lCha%/EPp a2/$m( m 0Haa6<"_a%p a4r"_a%|0< a'/$m("maH"_a%^Cna-*B -a+R`(-"maHx"HAna%fR -o]pЭfP`XEQp@a2/HyHyN /-N ma1r@a &<8Npa8`1a+pa&ajE aApE aAHpd~AaB0 <,~AaB <~AaB p2~AaApr~AaApd~AaBpd~AaApd~AaApd~AaANuEQspa./EQyp a."HAV,a?|AVaA~g,px~AaAAVraptAa>Z+Apa>Nua1 Aa-(REQp a. / -a a1"_a!p:a"xح"maCTa)EQpa-"H ma EQpa"va EQpa)a3bAVa4AVa7pJa"g>0<:\a.D"ma "ma(TBmF/-N a-t/HyHyN `/a@LaBraDN Nu/-?<INA\+@a5a$Nua/A a,Aa+A a+A@a%j$m B/- N,p$m$ -a%`$m( m 0Hrf0$m RA@a /$m("maB$m *("maB`p$m( m 0HrgZEQpa,"H m al/$m("maB"_aV/HyHyN $m("maBp"m a,a$mR$m o8]p$m$$m a%`PA@a "($m*"maB4"m ap\aCta&Hmta <r4<A@a$mR$m o] <r4<A@agTEQpa+/ m 0(HS m a-"_ab/HyHyN m 0(HS m a,a`-a. Aa)Aa* -g Aza%,Q <r4< magAza$ m0(a da4Fava%&<:<aAH 00pa! <r4<AHaa/AHa@&0<4<"a <r4<AHaa/AHa@&0<4<"a <r4<AHaPa\/AHaN>&0<4<"a H <r4<AHaa$rЁ/ m4<"a$ <r4< maPg0a)TC퀀a$A퀀aa+"_a/(- m 0HrWHHgPR -İo]+m - ma* /N,-gRpJ-gpF/ m0(H_HHg-fVpЭ ma)a`2R`R"-p ma*4p\afpЭ ma)ah m0(Hn`*ja*A a&A4a&zA$a&A(a&A0a&bA,a&Aa&x-f4Ppd~Aa:pd~Aa:pd~Aa:pd~Aa:a>$m,$$m, rЁ+@4$m, rЁ+@$$m, rЁ+@0$m, rЁ$m($$m,/?<NA\BEQvpa'"m apapaJfRp$m4(- m!H$m$ (- m!H$m( a(-"ma<$m00Ha)C퀆a!\`p0a'*"HA퀆avC퀆a!B0-@m0<00a'/0<&Xa'/pA퀆a'"_a@a*a)"_a2pa(p:a@/0<00a&/0<&Xa&/prA퀆a(2"_aa*a)"_apa'"_ap:a/0<00a&/0<&Xa&~/pA퀆a'"_aa*Ja)^"_apa'"_a(-"ma;(- m 0HrWHH/(-"ma;p.a/(-"ma;0<..agS?<ONATJgZ`'a ,?HnF?<6NAP0.PTHNu 24&8:BfJBg f DfpNuJEgpNu 24&8:BgnpNu<ngfDcpNufAcpNu 24&8:BgmpNu<ngfDdpNufAdpNu 24&8:JBgfDf EfpNuJEgpNupa JkpNupNua%AHPB?HQ?<NNAP _NuDExa*`bDEa"`ZaR11!Nua11!Nu 24&8:DE`6 24&8:DB`&a&8:DE`DEx`a` 24&8:HnghDBHngXDE~<En g6@ABDFGcGcGb8(vHDl`G8BCHC` GHD8HD쬵k&Dуd QRB BbJjDBNu DENupN֓DjdDA@ cAр[SBoJjDBNurptNuH@g0J`Ѐ[rGoJjDBNu0ftNu@[rB oH@JjDBNu $HkBk Bj*DBNupNuDBBkBjDBDNuf gp` 246jDCCe0 C/jC C@j C jr0H@{0>H@Nur{0Nu{0NutNu 246j(:<DCaf AfBfNu`a 00Nur$o, b4< J@k @[H@NuH@RBNu4<Ѐ[NuDg8k2 b4< J@k @[H@DBNuH@RBDBNu4<Ѐ[DBNu4H@Ѓdh`^HCH@:">H@`H2g&HCH@:<HC>H@Ѓd(`HCH@:H@r` gDBgkDE`HDBDEaBDBNugDBa8DBNutNua 11!Nux`xa`a` 24&8:HoHoEBJAgJDfr:g,|HC҅H@:ۆ<HC>H@Ѓd`vHCH@:H@`fgDBgkDE` DBDEaDBNugDBaDBNutNuHoHoEBz:g|HC҅H@:ۆ҄ۆ<HC>H@ЃdHA@B@H@хk HAҁHAрSB BbNuJBj^tNuk(g.JBjDBAр[SBDBjNutNuAр[SBkNuJlNu0gH@rJBkB JkЀ[`DBЀ[`J.;gP:pr4<Nup`6xa2`Ba411!Nux`4 24&8:`& 24&8:`a&8:` &8:@ABJEoHnfNup`tNugDEDBHngDBEBkQ*HEJDg?<>0rHGGdHGGdSWDуdi?<>0rHGGdHGGdSWDуdi2?<>0rHGGdHGGdSWDуd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNuCEdSW`?<,>CEdGeH@0r`fJCgz?<0rÐdSWЃdi?<0rÐdSWЃdid?<0ÐdSWЃd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNu?<0riP?0i?`?<`QapEShS|gPSj`LJg&B.C`a8aD*9Stfap-I,=|p4aHz*9Stg ENp9Sh` _a &nO:NMS|IKR$<Nu[1][Error +111][Return]EQ g g>Jf`Ar Hjr-D@Hd0H@H 0H@0CNuAF"H [1][fSEfNu`HQ?< NA\Nu"_KRMS|IO:HQ <-H*,`N,d d3 d# d# # d# # # # d ALH dAL H LH d AL`H L|0H>L|H>d~# # # # A`@ALH L|H>L|H>L|PH>L| H>L|H>L|H>L|H>L|`H>L|0H>L|H>QL|Nu$H$&"BA -KaXA"f B &nNuH>dd2d"d""d""""d LHC dLHLH C@d LHL|H| L|H|PCd~""""C`:LHL|H| L|H|PL|H|L|H|L|H|L|H|L|H|@L|H|pL|H|L|H|CQL|Nua`Np?a a?<LNA``NuNu`aza`aaaHA-Hhp alpMah=@F?<NNTT@A0r p0Q`pdr ta0.F=@=@ACp,2QAp 2Qa a`\`Xpea>pCR2Ad0A2r22a"< 0<NBLNurt=@:=A@=B"<! psNB0.Nu=@0=@=B0=@a"< psNBNuC|2 @ e$ @bA0AP2r22a"< 0<NBLJNup"AJӘQNuA> NuHz(` N Hz ?<&NN\Nu9gNuWNu|^|  R^,T:&0D4(*<B$,>2::(   F..26"8@"PQ1!P1P!0PP`0  q#aaa a O: n*NNuNuNupc?a0QNurdAd6Ag,B(dB(dH Ao<a~toBAp`NuNu?<OA`d?<IA`Z0<H IaLt Ig Og Ug Ag Rg,afNup`ap`V0afHRa>Er$Wgr STD:gr COM:g r LPT:f4FA$_0=@Dk"~CA0< BhaB2"pNu$_AF Ge><QBAFpNuafgzp=` aZgzpaAHPBHQ?NA\ _Jk^NuHz `Hz"` <Hz&?<&NN\Nup CNup C0Nu C NuJBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNu <r4<NuQfHR$n2Jjg$_NuH LNuPfJ.fg0HR$n2Jjf$_NuHC/*%I $n2%_LNu B?b4<rpAv JBlDBv-|JBg Bb Bk&H>aTaRFBd&8*L?a4<aSF Be BgQRB`RAdR e <rRF&0xaCձfEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`HQ2.d Aeg>r C 5e&!R 0c 9c0`<R"_`VC0 Ef"_Nuaa/ CFr  g 00VJAgB @ nN @mHJ@j0.4DBUBk0QSAg Q.`S@k 0`0BAF "_Nu.WAkQA 0g`prt|P;Q:  g +g -f .g40  b 0e 9b da6`RF` .f 0e 9b daSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`ZJjDDDS4<.a&JFkSFk4arQa`&HaFFaZQ&8*L/a~,H܆jDBJ.:gtBn:Nu(:HE:a`4JVHHarЁЀ`z@`z8H@0`z(a^*d2d2d"d""d""""d"`""""""""""""""""QjNup"X2g6C/ !UAk$!Q"_Nu @$@JfS a `QNu$Aa`QBNu?aHQA(B?<NNAP DJNu?<ONATNu?</NATNu/?<NA\NuHza 4`HzaxH ` HPHQ0(ika j $I _aRIUd4Id4Id$Id `$$$$Q _Jf,a"Id4Id4Id$Id `$$$$Q @NuSa IdIdId`Q @Nup `X/ a $I> _a G` VNuag`af`ae `ac` acpNuadpNu/ a x$I> _a n4Ae4v` VfANuHP0(R@kBa T $I _a NAXOJkpNu0< aH`0< CF2p`p a2`p CFp`a CF"p`Hza`Hy2"J`B.@=|DNua.@FpAR@C` B.@=|DNuB.@a=GDgNup`a`aCF"E p`.D<jRGg>VGg:TGjp`HPa0CF$IpR@  f _a6Hd2Hd2`"QNu`<.DHSGFaAEg f< &_Nua`Nu.dfaB<=n`r>.D<jRGg.D<jRGg*VGgTGjp`<.Da*`" y< faa` y< f aaAF "g pR@0 ,g  g  fHp`:pR@0  g  g "fR@0 ,g  g  fHpRU@"_  f#<$H _a`QNupR@0 ,g"  g  fa~ (fR~Nua ~ `a~NuaJkHQ ! gRf _NuXX~Nu0jx\@??<NMXJk .dgp Nu`<.DHSGFa ,g gAEf< &_Nu ."Ff +"g ,g`aN|A((@؆*.&|؆kD`&a,k.."*B(.&؅kr-K/.?<INA\/?<HNA\JgB n""n&ۮ&ۮ"$I`&bۛp0R@@b&n CXb`܎ .&/?<HNA\p=`ٺ 24JBkCkNuCktNu 24JBoSBNugRBNu2(gbc  P"H`Nu/0Ha2  _ PSAvjx E(Wf* ae zb Q @NuBnp`pBnp`p=| p|=Fn@=@b=n`raHj=Ah~`:a JfBH@ RfF.f Kg" Mg sg tg Pg Hf~`xSGjtRGFcn>`jAF gp gj g grffnnpenbfJ.fj6pRGFc$SG` J.fjpRGFcRF` Ff`> `?~ap a0p a*0Nu|``CpE`bf`FgRGJGgSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0NuagNu4.rf?HyaNM\Nu=|D`LjazEfpadppa`AFEg0PaEfaFRE`ܾEfp a@a8?nnnp a2RF`<annoS@f nhfSnl=Ah=FnNup` papq4.rf?HyaNM\Nu=|DHaLNu|A0"P2(@e2<EF`QHP=|DJ@g$abAF$HpR@ 0 f _a`QNuHPp?ap a _2<|0`C&pHQ/Hy@NA NuC pa:NuHQ/Hy?NA Nu&g4 Fga@gJAga2< R@AdSf0Nu0a.p Ce`&g4 FgaJBja gPAe CbRa R@Sf0Nu FgRag JBjaΰAeaJAg RP0 pNu`D Fg6agJAga @eaRP Nup NHѨB?<?/?<BNAO JkLLNu&8a&JBja>JAg Df*ڃkd0Nu DfրBH??/?<BNAO LJk!@NuHBHh Hx??<?NAO LJo ѨLNuk:fp`^k: g ѨNuBHPHQ/??<?NAO _JoѨfNuBHPHQS/??<@NAXLfѨNuJkp%`rSRH0a=GDgLFac.܆܆ I$K"e*aj"e Sk"X0HHaa`LSjNu(."Q$KpSk<"X0* ڀcH "KabL$K`Q  Qj g"Ka4Nup`"p`&nAt6<pX0X0X0X0X0X0X0X0QNurSRH0a=GDgkLFa I-Ka"`c.܆܆BGPE`agRSj QENu`҆HPG<.Dx agJBjaְAeaJAgZRP0 ögR@Ae`U  fSC̗ &n _a^ER@Hd2Hd"Hd `""""Q\J@Nu _HzHP`pNuB9`$H Ea`QNuHz?<&NN\ @Nu x NuA@Bh`A@a n@!|}Nup#SxfpScNup`p`#StNu(aJ؀.dfa _JNuz"-A=B|a\-I`#N0HrYa Wenn Sie wollen, da die Dateien, die beim letzten Backup schon gespeichert wurden nur dann neu gespeichert werden, wenn sie gendert worden sind, dann legen Sie bitte jetzt das letzte Speichermedium (z.B. Diskette) vom letzten Backup-Vorgang ein und geben sie anschlieend den Kennbuchstaben des entsprechenden Laufwerks hier an (z.B. A fr Laufwerk A). Andernfalls drcken Sie nur : :\backup.lisISKETTE Die alte Diskette ist voll- Bitte neue einlegen! ==> Das Backup ist beendet! C:\*.*backup.datDISKETTE Soll Disk in Laufwerk vor dem Neubeschreiben gelscht werden (j/n): Datei wird gelscht: Ordner wird gelscht:  0 ( (ZF4< N6:  FB `<HPv:6l *~ f`((@4|$B 8~|  t(Bedienungsanleitung fr BACKUP.PRG Das Programm Backup dient zum komfortablen Backup der Festplatte. Es ist jedoch nicht ntig, den gesamten Inhalt der Festplatte zu bertragen. Schlielich gibt es ja eine Menge Dateien (Programme, RSC-Files, Fonts etc.) die sich nicht verndern. Wenn man von diesen eine einmalige Sicherheitskopie besitzt, reicht das aus. Mit BACKUP lassen sich einzelne Dateien, Ordner oder auch ganze Partitionen der Festplatte auf Disketten, Wechselplatten etc. kopieren. Das Programm arbeitet dabei eine Liste ab, die folgendermaen auszusehen hat (Beispiel): E:\*.* A:\ C:\Desktop.inf A:\ C:\program\Gfa\Listings\*.lst A:\gfa\Listings\ C:\program\Gfa\Programs\*.gfa a:\gfa\programs\ D:\Text_DTP\Cypress\NEC_P6_7.Cpr a:\cypress\ D:\Text_DTP\CYpress\Privat.cyp\*.cyp a:\cypress\privat.cyp\ D:\Text_DTP\CYpress\Beruf.cyp\*.cyp a:\cypress\martin.cyp\ D:\Dateien\*.* a:\dateien\ In einer Zeile stehen jeweils der Quellenpfad, von dem kopiert wird und der Zielpfad, durch ein Leerzeichen getrennt. Der Quellenpfad endet mit \*.* wenn alle Dateien im Ordner/Laufwerk kopiert werden sollen, oder mit \*.LIS wenn alle Dateien mit der Endung LIS kopiert werden sollen, oder mit dem Dateinamen einer bestimmten Datei, die kopiert werden soll. Der Zielpfad endet immer mit \. Gro/Kleinschreibung mu nicht beachtet werden. Falls der Zielpfad auf dem Ziellaufwerk noch nicht existiert, wird er vom Programm automatisch eingerichtet. Die hier aufgefhrte Liste ist auch als BACKUP.DAT auf der Diskette zu finden. Sie knnen sie mit einem Editor entsprechend Ihren Erfordernissen ndern. Programmablauf: Nach dem Programmstart mssen Sie die Datei laden, in der die oben erklrte Liste als gespeichert ist. Anschlieend werden Sie folgendes gefragt: Wenn Sie wollen, da die Dateien, die beim letzten Backup schon gespeichert wurden nur dann neu gespeichert werden, wenn sie gendert worden sind, dann legen Sie bitte jetzt das letzte Speichermedium (z.B. Diskette) vom letzten Backup-Vorgang ein und geben sie anschlieend den Kennbuchstaben des entsprechenden Laufwerks hier an (z.B. A fr Laufwerk A). Andernfalls drcken Sie nur : Das Programm speichert nmlich alle Dateien, die es whrend eines Backup-Vorgangs kopiert hat mit Lnge und Uhrzeit in einer Datei namens BACKUP.LIS, die sich immer auf der letzten verwendeten Diskette/Wechselplatte befindet (diese Datei knnen Sie auch ausdrucken und haben so ein bersichtliches Verzeichnis aller Sicherheitskopien). Wenn sie also auf die Frage des Programms die letzte Diskette vom letzten Mal einlegen und A eintippen, vergleicht das Programm nun immer, ob sich die Datei, die laut Liste kopiert werden soll, berhaupt verndert hat. Ist sie gleichgeblieben, wird auf eine erneute Speicherung verzichtet. Wird erstmals auf ein bestimmtes Laufwerk kopiert, bzw. wenn eine neue Diskette eingelegt wurde, kann diese(s) gelscht werden. Die entsprechende Frage wieder mit j fr ja und n fr nein beantworten. BACKUP kopiert solange, bis es eine Datei erwischt, die nicht mehr auf die Diskette draufpat. Dann wird der Benutzer aufgefordert eine neue Diskette einzulegen. Whrend des Kopiervorgangs werden Quell- und Zielpfad der gerade kopierten Datei am Bildschirm ausgegeben. ACHTUNG!!! Der Autor haftet fr keine Schden, die sich aus der Verwendung dieses Programms ergeben. BACKUP.PRG wurde geschrieben mit Gfa-Basic V 3.5 Stefan Wehner Stettiner Str. 33 6940 Weinheim Fr Verbesserungsvorschlge, Kritik, Geld etc. bin ich dankbar. Weinheim, im Oktober '92 . `.. BILDEX15ACC &S<BILDEX15ASC ^X.``;P?6AON"a+ ;@0-f,E;Vpa4/E;kpa4r"_ta-t+Aa&E;sp a42-a6;@pa*pa1r(fE;~p'a4f/E;p a4Xr"_ta-+Apf`pf NL`pfE;p0a4/E;pa4r"_ta,+AE;p6a3/E<p a3r"_ta,+Apf(E<(pa3/EAh0B0A퀰0B0A0ǀB0`Jgx @g @gpf&a2pa(LA a4-&fpa(8A a`a10 <r4<A agpa+$A0B00<a'A퀸a0<a'AaA퀸a/Aa&4<2<@a)Aa,x <r4< Aagpa*`pa*a7A퀀a@ <r4< Aa/ <r4<A퀀a΀gZ <r4<A퀀ag` pa*T` <r4<A agAh0B0A퀰0B0A0ǀB0`Jgx @g @gAh 24a!a.a#pt r a"*A0B0A0B0A퀘0B0A퀠0B0A C큠""AC큨""A퀘C큰""A퀠C큸""pa AavAa`X <r4<AaD`X <r4<Aa.`B <r4<Aa"`, <r4<Aa `Jg @g @g @gtAax/A퀰CadtAa^ACaJg4A큠C""A큨C""A큰C퀘""A큸C퀠""`Ah 24a .aa"~Aa/Aa$p"a a/A퀀aVR <r4<A퀀a/ WHHgv <r4<A퀀ag``4` <r4<A ag?<NNT+@ -`A퀰0B0A0B0Ah0B0`jAh0B0A퀰0B0A0B0`>Ah0B0A퀰0B0A0ǀB0`Jgx @g @gAh 24aaha!0 -&<:<a&<:<ana@&pt r aA 0B0A0B0 -&<:<a&<:<a"A퀘 00A퀠0B0A C큠""AC큨""A퀘C큰""A퀠C큸""paAanAa` -&<:<a,&<:<aA a& -&<:<a&<:<axA퀘a`z <r4<Aa <r4<A퀠a`P -&<:<a&<:<a$A a -&<:<a&<:<aA퀘a`F <r4<Aav <r4<A퀠ab`Jg @gN @gp @gtA a/A퀰C퀘atAaAC퀠ag4A큠C ""A큨C""A큰C퀘""A큸C퀠""`jAh 24a~aaA a/Aa/A퀘a/A퀠a&$"aa,*A퀀aR <r4<A퀀a2/ 胬WHHg <r4<A퀀ag``p` 0 <r4<A ag nN?<NNT+@ -`A 0B0A0B0Ah0B0`jAh0B0A 0@B0A0B0`>Ah0B0A 0@B0A0€B0`Jgx @g @gAh 24aA 00AaaXp trap tra>A퀘0B0A퀠0B0Ah 24aA 00Aa8ap tr#a8p tr#aA퀰0B0A0B0Ah 24anA 00Aaap tr7ap tr7aA0B0A0B0Ah 24aA 00Aaa\p trKap trKaBA0B0A0B0Ah 24aA 00AaAh0B0A퀰0B0A0ǀB0`Jgx @g @gA퀰 24aA 00A 24azA 00Ah 24abaaA퀰aTa/AaFa/A a/Aa&$"aAazaA퀀afR <r4<A퀀a/ <r4<Aag< <r4<A퀀ag``>A^aNu?<NNT+@ -`A퀰0B0A0B0Ah0B0`jAh0B0A퀰0B0A0B0`>Ah0B0A퀰0B0A0ǀB0`Jgx @g @gBm <r4<A&8:A큐aRf|Bm <r4<A퀰&8:Aa.fLpaAaH@Nur{0Nu{0NutNu 246j(:<DCaf AfBfNu`a 00Nur$o, b4< J@k @[H@NuH@RBNu4<Ѐ[NuDg8k2 b4< J@k @[H@DBNuH@RBDBNu4<Ѐ[DBNu4H@Ѓdh`^HCH@:">H@`H2g&HCH@:<HC>H@Ѓd(`HCH@:H@r` gDBgkDE`HDBDEaBDBNugDBa8DBNutNua 11!Nux`xa`a` 24&8:HoHoEBJAgJDfr:g,|HC҅H@:ۆ<HC>H@Ѓd`vHCH@:H@`fgDBgkDE` DBDEaDBNugDBaDBNutNuHoHoEBz:g|HC҅H@:ۆ҄ۆ<HC>H@ЃdHA@B@H@хk HAҁHAрSB BbNuJBj^tNuk(g.JBjDBAр[SBDBjNutNuAр[SBkNuJlNu0gH@rJBkB JkЀ[`DBЀ[`J.;gP:pr4<Nup`j"_Kd d3 d# d# # d# # # # d ALH dAL H LH d AL`H L|0H>L|H>d~# # # # A`@ALH L|H>L|H>L|PH>L| H>L|H>L|H>L|H>L|`H>L|0H>L|H>QL|Nu$H$&"BA -KaXA"f B &nNuH>dd2d"d""d""""d LHC dLHLH C@d LHL|H| L|H|PCd~""""C`:LHL|H| L|H|PL|H|L|H|L|H|L|H|L|H|@L|H|pL|H|L|H|CQL|Nu`a8A-Hhp apMa=@F?<NNTT@A0r p0Q`pdr ta0.F=@=@ACp,2QAp 2QaNa:``peahp`(p?a(arapaHz?< NA\?<LNAfCR2A0A82r22a"<)>0<NBLNurt=@:=A@=B2::(   F..26"8@"PQ1!P1P!0PP`0  q#p"AӘQNuA Nu|^|  R^,T:Hz(` N)Hz ?<&NN\Nu9zgNuWzNuaaaa O: n*NNuNuNuNuHz `Hz"` <Hz&?<&NN\Nup CNup C0Nu C NuQfHR$n2Jjg$_NuH LNuPfJ.fg0HR$n2Jjf$_NuHC/*%I $n2%_LNu-@ _at4$FAFp_@[000][vx`* [g" ]g |g QSx` xQSrQ][vx`* [g" ]g |g QSx` xQStQ]BAF0-H,=@p4a2HNu 24DBaDB11!Nu 24DBa DBNu 24x6o<Ce(FC BdЄeNu B/dHDDdRdQRBNu&<:<`g BbUC BcjNu BcHDDdSkg RBAрjNuNu0ftNuB H@"jNu Lx6oFCe0FC BdЄe!Nu B/dHDDd`A*p4. g=BNu~dGdEH<Nup`r0@F@AJhg PLNu`RLJg(HPBHh/??<@NAXLf ѨLNuJkp%`aJBja!| ??<>NAXOJkpNu0< aF`0< CF2p`p a0`p CFp`aCF"p`Hza `Hz"J`pB.@=|DNua.@FpAR@C`N B.@=|DNuB.@a=GDgNup`Ra`aCF"E p`.@<.DAp$I"t Q k"RGef~`SG * g *fSG`<.DjZ\FkBJn`g Fgd Fg^HS&I.avQ`p???<NM\Qj&_NuHQ/?Jf`Ar Hjr-D@Hd0H@H 0H@0CNuAF"H [1][fSEfNuaP n2L6(n\n^HHHNua0 n20(n\HNua n20(n^HNua n20(HNuaf:ffNuarNua J[HHNu:nfa@ z^0NuJg6$:Pf,H?<"NNT&@p/&;Hra :,ga &Lr`r??Q@;FHyNM\0Nu#;BNuThat isn't|a programmOh,sorry Bildex1.5 Bildex 1.5|Marten Richter|Es geht los!No|Yes|InfoMarten Richter|Holsteiner Ufer 22|1000 Berlin 2110 MarkProgramierung:|Marten Richter|Graphik:|Michael RichterSuper!|BldMach dir das|doch selber!Tuldigung ,."  f\((@P*$ **********Bildex Version 1.5*********** ************Marten Richter************ *****Programmierung:Marten Richter***** *********Graphik:Michael Richter******* *************************************** Zum Schoner:Hier werden nacheinander verschiedene Graphiken aufgerufen. Dies ist Zufall und fr mgliche Graphik Vernderungen hat der Programmier die Verantwortung. Die vier Graphiken sind beim Aufruf im Hohen Modus Bereit. Neu :Jetzt vier neue Graphiken im farbigen Modus dabei! Zur Unter- brechung :Die Graphiken werden durch die linke Maustaste unterbrochen. Zur Kopie :Das Programm darf jeder Kopieren aber nicht verkaufen,es ist allerdings kein ffentliches Eigentum!Sondern ist es unter- liegt einem Copyright.Bitte Senden Sie 10DM an mich. Herstel- lungs- datum :Oktober 1992,Berlin Adresse :Fr die 10DM und fr Tips: Marten Richter Holsteiner Ufer 22 1000 Berlin 21 Anmerkung :Fr Fehler im Programm nicht Bse sein da ich erst 12 Jahre alt bin. ****************************************************** *Das Programm darf frei kopiert werden ,aber nicht * *verkauft werden. Das Programm hat den PD-Status * *Die Dateien "Bildex15.ACC" und "Bildex15.ASC" * *mssen immer vollstandig und zusammen weiter gege- * *werden! * *Die Diskette ist mit dem Sagrotan-Bootprogramm * *ausgestattet ,achten sie auf die Meldung "Kein Virus* *im Bootsektor. * *Diese anweisungen sind zu beachten!Laut dem Urheber-* *gesetz. * ****************************************************** . `0.. DG_ELHI ACC v1GDG_TELEFACC yClBDG_TIME ACC {T+`F<AONa+z;@(0-(R@g:EFpa72-(a@;@*0-*R@gpa+,pa4r(fN\`aA0B0A 0B0pa-AaW/A aW/Aa//A a/A(*,.a/8:&aaz/Aal/ <r4<A a`/?? <r4<A퀌a8:&aBa,&$"a)ZAarЁ/ <r4<A a /?? <r4<A퀌a8:&aa/Aa/ <r4<A a/?? <r4<A퀌aN8:&aa&$"a(a0|fGpa*\pa*Zpa*Xpa*Va*^AaLrdЁ/A a>rKЁ/EFpa4$"a0bAarZЁ/A ar_Ё/EFp a4$"a02aBH0 Aa& A$a A4a4-:f` <r4<A4a:gFA퀔0B0 <r4<A퀔a/bf <r4<AaAa/ <r4<A af/?? <r4<A퀔a8:&aHA$aJ <r4<Aa$Aa` <r4<A a/?? <r4<A퀔a8:&aA$ag$A<0B0 <r4<Aa6dAa7Aa2dpFa!gpAa20 <r4<ATag ATa!`BmZAT//NACa$B <r4<Aag> <r4<A\ag A\a!`BmbA\//NACa# <r4<Aag| <r4<Adavg Ada!L`BmjAd//NACa#A Ca$pa8Ca`$ a 24&8:BgnpNu<ngfDcpNufAcpNu 24&8:BgmpNu<ngfDdpNufAdpNu 24&8:JBgfDf EfpNuJEgpNuDExa`bDEa`ZaR11!Nua11!Nu 24&8:DE`6 24&8:DB`&a\&8:DE`DEx`aH` 24&8:HnghDBHngXDE~<En g6@ABDFGcGcGb8(vHDl`G8BCHC` GHD8HD쬵k&Dуd QRB BbJjDBNu DENupN֓DjdDA@ cAр[SBoJjDBNurptNuH@g0J`Ѐ[rGoJjDBNu0ftNu@[rB oH@JjDBNu $HkBk Bj*DBNupNuDBBkBjDBDNuf gp` a 00Nur$o, b4< J@k @[H@NuH@RBNu4<Ѐ[NuDg8k2 b4< J@k @[H@DBNuH@RBDBNu4<Ѐ[DBNu4H@Ѓdh`^HCH@:">H@`H2g&HCH@:<HC>H@Ѓd(`HCH@:H@r` gDBgkDE`HDBDEaBDBNugDBa8DBNutNua 11!Nux`xa`a` 24&8:HoHoEBJAgJDfr:g,|HC҅H@:ۆ<HC>H@Ѓd`vHCH@:H@`fgDBgkDE` DBDEaDBNugDBaDBNutNuHoHoEBz:g|HC҅H@:ۆ҄ۆ<HC>H@ЃdHA@B@H@хk HAҁHAрSB BbNuJBj^tNuk(g.JBjDBAр[SBDBjNutNuAр[SBkNuJlNu0gH@rJBkB JkЀ[`DBЀ[`J.;gP:pr4<Nup`6xa2`Ba411!Nux`4 24&8:`& 24&8:`a&8:` &8:@ABJEoHnfNup`tNugDEDBHngDBEBkQ*HEJDg?<>0rHGGdHGGdSWDуdi?<>0rHGGdHGGdSWDуdi2?<>0rHGGdHGGdSWDуd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNuCEdSW`?<,>CEdGeH@0r`fJCgz?<0rÐdSWЃdi?<0rÐdSWЃdid?<0ÐdSWЃd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNu?<0riP?0i?`?<`GRapEHHgPH`LJg&B.C`a8aD*9Hfap-I,=|p4aHz*9Hg ENp9H`( _a &nO:NMHI|KGT$<Nu[1][Error +111][Return]EGR g g>Jf`Ar Hjr-D@Hd0H@H 0H@0CNuAF"H [1][fSEfNu`HQ?< NA\Nu"_KGTMHI|O:HQ <-H*,`N,pCR2Ad0A2r22a"<"&0<NBLNurt=@:=A@=BpsNB0.Nu=@0=@=B0=@aj"<"psNBNuC|2 @ e$ @bA0AP2r22aP"<!0<NBLJNup"AJӘQNuA> NuHz(` N!Hz ?<&NN\Nu9&gNuW&Nu|^|  R^,T:&0D4(*<B$,>2::(   F..26"8@"PQ1!P1P!0PP`0  q#aaa la O: n*NNuNuNuNuHz `Hz"` <Hz&?<&NN\Nup CNup C0Nu C NuJBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNu <r4<NuQfHR$n2Jjg$_NuH LNuPfJ.fg0HR$n2Jjf$_NuHC/*%I $n2%_LNu B?b4<rpAv JBlDBv-|JBg Bb Bk&H>aTaRFBd&8*L?aT<aSF Be BgQRB`RAdR e <rRF&0xaCձfEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`HQ2.d Aeg>r C 5e&!R 0c 9c0`<R"_`VC0 Ef"_Nuaa/ CFr  g 00VJAgB @ nN @mHJ@j0.4DBUBk0QSAg Q.`S@k 0`0BAF "_Nu.WAkQA 0g`prt|P;Q:  g +g -f .g40  b 0e 9b da6`RF` .f 0e 9b daSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`ZJjDDDS4<.aFJFkSFk4arQa2`&HaFFaZQ&8*L/a,H܆jDBJ.:gtBn:Nu @$@JfS a`QNu$Aa`QBNuHza`HzaH `.HPHQ0(ika $I _aIUd4Id4Id$Id `$$$$Q _Jf,aId4Id4Id$Id `$$$$Q @NuSa\IdIdId`Q @Nup `z/ a$$I> _aG` VNuag`af`ae `ac` acpNuadpNu/ a$I> _a4Ae4v` VfANuHP0(R@kBa $I _aIUd4Id4Id$Id `$$$$Q @JfNuNup `afSAfNuag`af`ae `ac` acpNuadpNua2SAkfJANuH HPhkJa$ $I _a IUd4Id4Id$Id `$$$$Q @JgSL`QNup `aưAf` VNuag`af`ae `ac` acpNuadpNua4@m4v` Vf@Nu/HP0(X@kHar $I _aZIUd4Id4Id$Id `$$$$Q @Jf$Nu $Nup `jaYAfNuag`af`ae `ac` acpNuadpNuaSAkEF$p VfWANu?HP0(T@kHa $I _aIUd4Id4Id$Id `$$$$Q @Jf4Nu0XNup `alUAfQNuag`af`ae `ac` acpNuadpNua8SAkXf SAkXfJANuHAHBHCHDHEHFHG-HfAD-HH@-@H|p`rAD-@f-H `r6 @`0.bHNupNuz`z `z8.^n\Dn\@Hp tr=ED`Zn\n^n\n^A0000000000prt`(n\n^648HH`prt`n\n^n\n^8HH`prt`"_A `4RB`"_A42L\A` L0GF11Q-p`prHQ`Bp'rta n2rt6(SC0(S@apaB\papava0pa((?<NNT. n20(LJvA HA HNup @d"X Pe68:ahHQ?<NNT"_HV n2MF-@ @6H H00(L=C=B&<RF<>RG=GYfx-IC=C=C$tBft=B=B(tFJ=BBBB*Do>Eo:@l6Al2DDk =DVBnDEk =EnBn@cVo Acno,_NuAH`/=@a _a &]Ak024E$ Bb5B5A6CC5CK5C:8AB0000DkxEkt00A<:d>:bSFSGFn\GnXDDk0BhDEk1EBh Fchh Gchh0hb"0hbpmrt-|-H-|-L` Nu-HN#?<NNT-@XDbDEbEBb=ET=DV-|PBLBp n20(L=CJ?=B^C=C\=Cj@drAdnED??RGRF=GF=FHtGJ=BltBft=B`=BnGOpЇЇ b nan222-IfHVMF,_Nup `T np`F 24DBaDB11!Nu 24DBa DBNu 24x6o<Ce(FC BdЄeNu B/dHDDdRdQRBNu&<:<`.g BbUC BcjNu BcHDDdSkg RBAрjNuNu0ftNuB H@"jNu Lx6oFCe0FC BdЄe!Nu B/dHDDd`A*p4. g=BNu~dGdEH<Nup`0@F@AJhg PLNu`LJg(HPBHh/??<@NAXLf ѨLNuJkp%`aJBja!| ??<>NAXOJkpNu0< aH`0< CF2p`p a2`p CFp`xa CF"p`jHza`Hy6"J`VB.@=|DNua.@FpAR@C`4 B.@=|DNuB.@a=GDgNup`.@<.DAp$I"t Q k"RGef~`SG * g *fSG`<.DjZ\FkBJn`g Fgd Fg^HS&I.aQ`p???<NM\Qj&_NuHQ/?4(g8HP b6 a^$_// Z4HQ`S@Q _Q _a, _Nua$`p`jAFtЀvQBNuAFt0 9c^QBNuAFt 0QBNua`a`aCF 0gS JfS`|@a Acr `@a A cr `@a\ A cr `N%\$H`Ha@LHP?.d=hdN%\=_d2 "@$Y4Ad2`0Q @Nu@`r ??a"P02R@H`2Q NuaXaJjtNuaJHPa pJk NuCg.BJ@g  g &g, $g %gN&NutNuRpt`2Rpt`Rptr ae OgX Xgn HgSRB ae Fb$0k  c_  c b退`tSHkanNuRB0 b b瀀`RB0 fрd`ap`ap`ap3=|B=xNu>.D<jRGg>VGg:TGjp`HPa0CF$IpR@  f _aRHd2Hd2`"QNu`j<.DHSGFaAEg f< &_Nua`LNu.dfaB=x=n`r>.D<jRGg.D<jRGg*VGgTGjp`<.Da*`" y=x faa` y=x f aaAF "g pR@0 ,g  g  fHp`:pR@0  g  g "fR@0 ,g  g  fHpRU@"_  f#=x$H _a`QNupR@0 ,g"  g  fa~ (fR~Nua ~ `a~NuaJkHQ ! gRf _NuXX~Nu0j<\@??<NMXJk .dgp Nu`ݦ<.DHSGFa ,g gAEf< &_Nu ."Ff +"g ,g`=A|aA*09(Ry(H@@-HtBe2QB p#`Bnp`pBnp`p=| p|=Fn@=@b=n`raRHj=Ah~`:a JfBH@ RfF.f Kg" Mg sg tg Pg Hf~`xSGjtRGFcn>`jAF gp gj g grffnnpenbfJ.fj6pRGFc$SG` J.fjpRGFcRF` Ff`> `?~ap a0p a*0Nu|``CpE`bf`FgRGJGgSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0NuavgNu4.rf?HyazNM\Nu=|D`LjazEfpadppa`AFEg0PaEfaFRE`ܾEfp a@a8?nnnp a2RF`<afnnoS@f nhfSnl=Ah=FnNup` papq4.rf?HyaNM\Nu=|DHaBLNu|A0"P2(@e2<EF`QHP=|DJ@g$abAF$HpR@ 0 f _a`QNuHPp?ap a _2<|0`C&pHQ/Hy@NA NuC pa:NuHQ/Hy?NA Nu&g4 FgagJAga2< R@AdSf0Nu0ap Ce`&g4 FgaJBjagPAe CbRa R@Sf0Nu FgRadg JBjavAeaJAg RP0 pNu`V Fg6a,gJAga @ea6RP Nup NHѨB?<?/?<BNAO JkLLNu&8aJBjaJAg Df*ڃkd0Nu DfրBH??/?<BNAO LJk!@NuHBHh Hx??<?NAO LJo ѨLNuk:fp`^k: g ѨNuBHPHQ/??<?NAO _JoѨfNuBHPHQS/??<@NAXLfѨNuJkp%` _S@Gd@GHpp/0NuGNp(al؀.dfa^jNu?a0` ?a2@@ab` a Nu4.`Af n2LR@RANu4.`g S@SAHNutbpbr??papYa~0ax0`raT n2L6(n\n^HHHNua4 n20(n\HNua" n20(n^HNua n20(HNu`a"Nu, DG-Elektrohilfe DG-Elektrohilfe PD by D.GraveFarbcodeUmrechnungU M R E C H N U N G nF uF F pF F A R B C O D ESCHWARZSILBERBRAUNROTORANGE  2v>,0 z,,T,,T,,R,,0TT"8j*** *~ f((@4\$B 8~`@>AONBa8a;@N0-R@gFNEAVp a*62-a/>;@N0-R@g"NpaNpa&r(fNNnN`a:NaNa5|NA퀎(<*<|E.<a!NNNa/C퀔a%^Na;"H0 Aa Z Aa P Aa FN <r4<Aa / <r4<Aa j <r4<Aa <r4<Aa r <r4<Aa gN <r4<Aa / <r4<Aa <Հr4<Aa  <r4<AagN <r4<Aa/ <r4<Aa <r4<Aa <r4<AagNpra8EAbp a& Npra8NA퀦ra1\NA퀦a,0&<:<a 2AH 00Npra8EAbp a%NEAmp a't~2<a#(NBmvN <r4<Aa/ <r4<Aa <r4<Aa <r4<AagvNpr(a7EAbp a%BNpr)a7NAr a0~NAa+RAP 00Npr(a7EAbp a%NEAxp a'"t~2<=a"XNBmvN <r4<Aa/ <r4<Aa <r4<Aa <r4<AatAPatAHagNp r!a7EAbp a$XNp r!a6EAbp a$BNp r%a6NAx0B0Np"<a6|NAHa"E a2(Np a&ra't^2<a!\NEApa&/aV&<:< a aja("_ahEApavt^2<a!NBm^Np r"a6Da#EAp a%a7|AX 24a8Va7zNBmvNa7H0 Aa: A a0 A(a&Na7UWHH/a%JVHHf <r4<Axa/A퀀a/??av&<:< a a8:&agRNaP&<:< a |ada'|EApavt^2<Na Na&<:< a JA퀀 00N`a0hNBmvNpa4Na6LJVHH/a$4JVHHf`A퀎tE"<aNNupapapaN6<0<tE2<aN6<0<tE2<aNpF2<a"NpG2<aNpH2<a NpF2<aNpG2<aNpH2<aN0<2<aN0<2<aN0<2<aNpapapaN6<0<tI2<aa7A@ 00NA@a&A퀬a!FNA퀬C퀲aC퀲aNa$fGNA퀲t^2<aHNEAmp a t~2<a0NEAxp a t~2<=aNEApa 4<2<aNNuAP 24AXaHNAX 24a#(a ^aN&<x:<aPa&&<:<aRA` 00Np r"a0aH@Nur{0Nu{0NutNu 246j(:<DCaf AfBfNu`ra 00Nur$o, b4< J@k @[H@NuH@RBNu4<Ѐ[NuDg8k2 b4< J@k @[H@DBNuH@RBDBNu4<Ѐ[DBNu4H@Ѓdh`^HCH@:">H@`H2g&HCH@:<HC>H@Ѓd(`HCH@:H@r` gDBgkDE`HDBDEaBDBNugDBa8DBNutNua 11!Nux`xa`a` 24&8:HoHoEBJAgJDfr:g,|HC҅H@:ۆ<HC>H@Ѓd`vHCH@:H@`fgDBgkDE` DBDEaDBNugDBaDBNutNuHoHoEBz:g|HC҅H@:ۆ҄ۆ<HC>H@ЃdHA@B@H@хk HAҁHAрSB BbNuJBj^tNuk(g.JBjDBAр[SBDBjNutNuAр[SBkNuJlNu0gH@rJBkB JkЀ[`DBЀ[`J.;gP:pr4<Nup`6xa2`Ba411!Nux`4 24&8:`& 24&8:`a&8:` &8:@ABJEoHnfNup`tNugDEDBHngDBEBkQ*HEJDg?<>0rHGGdHGGdSWDуdi?<>0rHGGdHGGdSWDуdi2?<>0rHGGdHGGdSWDуd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNuCEdSW`?<,>CEdGeH@0r`fJCgz?<0rÐdSWЃdi?<0rÐdSWЃdid?<0ÐdSWЃd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNu?<0riP?0i?`?<`AapEBBgPB`LJg&B.C`a8aD*9Bfap-I,=|p4aHz*9Bg ENp9B`( _a &nO:NMBI Jf`Ar Hjr-D@Hd0H@H 0H@0CNuAF"H [1][fSEfNu`HQ?< NA\Nu"_KAMBI pCR2Ad0A2r22a"<0<NBLNurt=@:=A@=B NuHz(` NlHz ?<&NN\Nu9}*gNuW}*Nu|^|  R^,T:&0D4(*<B$,>2::(   F..26"8@"PQ1!P1P!0PP`0  q#aaafa O: n*NNuNuNuNuHz `Hz"` <Hz&?<&NN\Nup CNup C0Nu C NuJBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNu <r4<NuQfHR$n2Jjg$_NuH LNuPfJ.fg0HR$n2Jjf$_NuHC/*%I $n2%_LNu B?b4<rpAv JBlDBv-|JBg Bb Bk&H>aTaRFBd&8*L?aT<aSF Be BgQRB`RAdR e <rRF&0xaCձfEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`HQ2.d Aeg>r C 5e&!R 0c 9c0`<R"_`VC0 Ef"_Nuaa/ CFr  g 00VJAgB @ nN @mHJ@j0.4DBUBk0QSAg Q.`S@k 0`0BAF "_Nu.WAkQA 0g`prt|P;Q:  g +g -f .g40  b 0e 9b da6`RF` .f 0e 9b daSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`ZJjDDDS4<.aFJFkSFk4arQa2`&HaFFaZQ&8*L/a,H܆jDBJ.:gtBn:Nu @$@JfS a`QNu$Aa`QBNuHPHQ0(ika $I _aIUd4Id4Id$Id `$$$$Q _Jf,aId4Id4Id$Id `$$$$Q @NuSanIdIdId`Q @Nup `/ a6$I> _a,G` VNuag`af`ae `ac` acpNuadpNu/ a$I> _a4Ae4v` VfANuH HPhkJa $I _aIUd4Id4Id$Id `$$$$Q @JgSL`QNup `apAf` VNuag`af`ae `ac` acpNuadpNua64@m4v` Vf@NuHAHBHCHDHEHFHG-HfAD-HH@-@H|p`rAD-@f-H `r6 @`0.bHNupNuz`z `z8.^n\Dn\@Hp tr=ED``n\n^n\n^A0000000000prt`.n\n^648HH`prt` n\n^n\n^8HH`prt`"_A `4RB`"_A42L\A` L0GF11Q-p`prHQ`Bp'rta n2rt6(SC0(S@apaB\papava0paRG=GYfx-IC=C=C$tBft=B=B(tFJ=BBBB*Do>Eo:@l6Al2DDk =DVBnDEk =EnBn@cVo Acno,_NuAH`/=@a _a $]Ak024E$ Bb5B5A6CC5CK5C:8AB0000DkxEkt00A<:d>:bSFSGFn\GnXDDk0BhDEk1EBh Fchh Gchh0hb"0hbpmrt-| NH-| bL`&Nu-HN0?<NNT-@XDbDEbEBb=ET=DV-|PBLBp n20(L=CJ?=B^C=C\=Cj@drAdnED??RGRF=GF=FHtGJ=BltBft=B`=BnGOpЇЇ b nal222-IfHVMF,_Nup `T np`D 24DBaDB11!Nu 24DBa DBNu 24x6o<Ce(FC BdЄeNu B/dHDDdRdQRBNu&<:<`g BbUC BcjNu BcHDDdSkg RBAрjNuNu0ftNuB H@"jNu Lx6oFCe0FC BdЄe!Nu B/dHDDd`A*p4. g=BNu0@F@AJhg PLNu`LJg(HPBHh/??<@NAXLf ѨLNuJkp%`JaJBja!| ??<>NAXOJkpNu0< aH`0< CF2p`8p a2`p CFp`$a CF"p`Hza`Hy("J`B.@=|DNua.@FpAR@C` @H` @HHy(aa8"H`Hy(`Hy( 24`@H` @HHy(aXa"Hav`rHy(`Hy( 24`aX`$aR@ApDrAeA`?a0J@g*?CJap0g?C2pa SWfTNu.@<.DAp$I"t Q k"RGef~`SG * g *fSG`<.DjZ\FkBJn`g Fgd Fg^HS&I.azQ`p???<NM\Qj&_NuHQ/?4(g8HP b6 a$_// Z4HQ`S@Q _Q _a _Nua`$p`AFtЀvQBNuAFt0 9c^QBNuAFt 0QBNua`a`aCF 0gS JfS`@a Acr `@a A cr `@a\ A cr `N$H`fHa>LHP?.d=hdN=_d2 "@$Y4Ad2`0Q @NuH@&g( b⸃bLHa,LC 0$Ir `Q"Jr0XDQD@CtEe PA`fRشf`e"J*c j|0"cRLJgR $I.f) 5e*0!.g -g  g 9f 0b`RB`1`p `@`r ??a"P02R@H`2Q NuaaJjtNuaHPa pJk NuCg.BJ@g  g &g, $g %gNtNutNuRpt`2Rpt`Rptr ae OgX Xgn HgSRB ae Fb$0k  c_  c b退`tSHkaNuRB0 b b瀀`RB0 fрd`=A|a>A}.09},Ry},H@@-HtBe2QB p#`"HU2<.,HdY=ANu?<*NAT.p a Ha INu.k2@a.0H@av.`2H@af/0@aZ/Yda@HA``jAF gp gj g grffnnpenbfJ.fj6pRGFc$SG` J.fjpRGFcRF` Ff`> `?~ap a0p a*0Nu|``CpE`bf`FgRGJGgSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0NuagNu4.rf?HyaNM\Nu=|D`LjazEfpadppa`AFEg0PaEfaFRE`ܾEfp a@a8?nnnp a2RF`<a"nnoS@f nhfSnl=Ah=FnNup` papq4.rf?Hya&NM\Nu=|DHaLNu|A0"P2(@e2<EF`QHP=|DJ@g$abAF$HpR@ 0 f _a$`QNuHPp?ap a _2<|0`C&pHQ/Hy@NA NuC pa:NuHQ/Hy?NA Nu&g4 FgagJAga2< R@AdSf0Nu0ap Ce`&g4 FgaZJBjargPAe CbRa R@Sf0Nu FgRa"g JBja4AeaJAg RP0 pNu`ݜ Fg6agJAga @eaRP Nup NHѨB?<?/?<BNAO JkLLNu&8aJBjaJAg Df*ڃkd0Nu DfրBH??/?<BNAO LJk!@NuHBHh Hx??<?NAO LJo ѨLNuk:fp`^k: g ѨNuBHPHQ/??<?NAO _JoѨfNuBHPHQS/??<@NAXLfѨNuJkp%`Dp#BfpBNup`p`#BNuB6dNu#66NuB6dNu#66Nu#Bfp`,ajІ"H6Nu#Bfp|`,aHІ"@HC6NuBNu?/NT` pNuNHMBAp f9Bkd n2!|6v ||9B"XLv:g 4zg*Ag61 cg Jg ;e, ]b& Te` Db; g fg  bJg fg fg,HC#0j ` Hx Dg;0L8YBj@1BA gbШ dA gd BBdL@Nu wHHKMPPR g,g&yB`pBy8XB@etAg1B# `\HCHSG}vg*1B f  f&< # XB@etAf&_`A9HC>gZ"HyNN#6.B>"NN @A C#P B?< NA\#9/a?< NA\A0N ;LNuA#: :r x hg3&6AC`g#P Nu?<"NNT @ 96g!@ HzT?<&NN\3Nu#9|>NuHz ?<&NN\NupACnE9rJg" XX\QNuAnCr g"XQ!ACf NuHx`(Hx`"Hx`Hx`Hx`Hx` Hx`Hx !4VxH A3:p Ni LHMBO:|1R/99?< NAO:pdz`״/MBa,_NBNuHz` Hz`Hz&$A?<&NN\NuNu4Nu$Nu(a؀.dfa踀jNu?a0` ?a2@@ad` a Nu4.`Af n2LR@RANu4.`g S@SAHNutbpbr??papYa0a0`.dfNudg"J9Bkfa4fp`:d`/9Bdg/9Bdg/9BNupA;-H=@|p4a$S@Nu[2][Programmstop?][Stop|Cont]aT n2L6(n\n^HHHNua4 n20(n\HNua" n20(n^HNua n20(HNu`a$Nu-Hb=hzBnfNua` nba~fp0nfc`Nuaf/ ? nb"XfRnfSnzkx _g !g &g. \g.a`RnfSnzkN`0"_fC(npH`0"_`pR@RnfSnzk \f2"_gAc@@H?a^0`(p?a$0H"_`HNup?aLn`Hn nb"XfRnfSnzk _g,vxz| +g2 -g, *g $g& #g$a`RnfSnzk`` `RCSnzk _f Snzj`h #g $g *g.g ^gH +g^ -gX.fXxRDSnzkL #g ^g +g4 -g. _f.RSnzj`RESnzk ^g +g -fRSnf nb? JEf0DH2HgR@?=nxvjDnxL8n@aad<z Ndz* I0`  fEQNdS|$Ne Jnvj|- nb XfRnf0nfc|.g8 _g>.g@ +gN -gR $f ,fHQ!a0Rnf"_p$RHQa "_`Rnf`)  g *fp `Jnvjp-`Jnvkp `=_fSnfRnzNuHLn=BvjDBNLxC*E0RJCfRCR@r2HAARACd ` Efr0Sb Eg4 5e.!A*e0R 9c0`R1R@0c JEr+J@jr-D@UEoJYEc0SEnHJEf0SEH@HdREf0SEH@H 0 0REfH@C* nb XfRnf0nfcJ.g _g .g +g -g HQaL`Rnf`Jnvjp-`Jnvkp `=_fSnfRnzNu nAVd$HJf-HS Nup"`XHPa _a`QNua JH aL0Nua`X68714584697669707978466567673280683298121326846327182658669 DG-Telefon Sek/EinheitDM/Einheit Gesprchsdauer Min.###.## DMSTART! ::vN@>$.*h *~ f((@4 L$d 8 $@& $x Z`+l;AON a;@0-R@g:E+]p a2-a";@0-R@gpadpar(fN\`aAV(<*<|E.<aNa"C\aa)H0 Aa Aa Aa <r4<Aa/ <r4<Aa <r4<Aa <r4<Aa <r4<Aag <r4<AaJ/ <r4<Aa4 <Հr4<AaR <r4<Aa< <r4<Aa/ <r4<Aa <r4<Aa <r4<AagPpra(E+fp ahpra(Ahr a%pAha!pra'E+fp a:a t~2<a <r4<AaH/ <r4<Aa2 <r4<AaP <r4<Aa:gPpr)a'pE+fp apr)a'\Anr a$Ana pr)a'BE+fp aa Ft~2<Baa'H0 Aa A a A(aa C\a0/ <r4<Aa <r4<AaT <r4<A ar <r4<A a(ga:t~2<aTat~2<BaF`afa' UWHH/aJVHHf`AVtE"<aNua&AtaAzapapapa6<0<tE2<a6<0<tE2<apF2<a*pG2<a pH2<apF2<a pG2<apH2<a0<2<a0<2<a0<2<apapapa6<0<tI2<aX6<0<tI2<alpapapa6<pdtN2<a$6<pdtN2<a:6<pbtP2<a*6<&0<tm2<a6<&0<tm2<a6<$0<to2<a6<0<tm2</a6<0<tm2</a6<0<to2<1apapa$pa"pc2<apO2<apO2<apn2<a0<2<apn2<%apn2<0a0<2<0apn2<apc2<a@0<2<a40<2<ia(0<2<aE+apA80B0 <r4<A8aLf8a$A@ 00A@a>AtaAtCza *CzaaBfGAzt^2<aha@t~2<aZat~2<BaLNua 24&8:BgnpNu<ngfDcpNufAcpNu 24&8:BgmpNu<ngfDdpNufAdpNu 24&8:JBgfDf EfpNuJEgpNuDExa`bDEa`ZaR11!Nua11!Nu 24&8:DE`6 24&8:DB`&a\&8:DE`DEx`aH` 24&8:HnghDBHngXDE~<En g6@ABDFGcGcGb8(vHDl`G8BCHC` GHD8HD쬵k&Dуd QRB BbJjDBNu DENupN֓DjdDA@ cAр[SBoJjDBNurptNuH@g0J`Ѐ[rGoJjDBNu0ftNu@[rB oH@JjDBNu $HkBk Bj*DBNupNuDBBkBjDBDNuf gp`Pa 00Nur$o, b4< J@k @[H@NuH@RBNu4<Ѐ[NuDg8k2 b4< J@k @[H@DBNuH@RBDBNu4<Ѐ[DBNu40rHGGdHGGdSWDуdi?<>0rHGGdHGGdSWDуdi2?<>0rHGGdHGGdSWDуd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNuCEdSW`?<,>CEdGeH@0r`fJCgz?<0rÐdSWЃdi?<0rÐdSWЃdid?<0ÐdSWЃd&2 H@kփAр[SBkփejRAd RdQRBJjDBNutNu?<0riP?0i?`?<`+rapE,,"gP,`LJg&B.C`a8aD*9,fap-I,=|p4aHz*9,g ENp9,`( _a &nO:NM,"IxK+t$<Nu[1][Error +111][Return]E+r g g>Jf`Ar Hjr-D@Hd0H@H 0H@0CNuAF"H [1][fSEfNu`HQ?< NA\Nu"_K+tM,"IxO:HQ <-H*,`N, pCR2Ad0A2r22a"<h0<NBLNurt=@:=A@=B NuHz(` N:Hz ?<&NN\Nu9fgNuWfNu|^|  R^,T:&0D4(*<B$,>2::(   F..26"8@"PQ1!P1P!0PP`0  q#aaaba O: n*NNuNuNuNuJBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNu <r4<NuQfHR$n2Jjg$_NuH LNuPfJ.fg0HR$n2Jjf$_NuHC/*%I $n2%_LNuprt|P;Q:  g +g -f .g40  b 0e 9b da"`RF` .f 0e 9b daSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`ZJjDDDS4<.ajJFkSFk4a^QaV`&HaFFaFQ&8*L/a,H܆jDBJ.:gtBn:NuHPHQ0(ika $I _a IUd4Id4Id$Id `$$$$Q _Jf,a hId4Id4Id$Id `$$$$Q @NuSa :IdIdId`Q @Nup `/ a $I> _a G` VNuag`af`ae `ac` acpNuadpNu/ a $I> _a 4Ae4v` VfANuHAHBHCHDHEHFHG-HfAD-HH@-@H|p`rAD-@f-H `r6 @`0.bHNupNuz`z `z8.^n\Dn\@Hp tr=ED`dn\n^n\n^A0000000000prt`2n\n^648HH`prt`n\n^n\n^8HH`prt`"_A `4RB`"_A42L\A` L0GF11Q-p`prHQ`Bp'rta n2rt6(SC0(S@apaB\papava0paRG=GYfx-IC=C=C$tBft=B=B(tFJ=BBBB*Do>Eo:@l6Al2DDk =DVBnDEk =EnBn@cVo Acno,_NuAH`/=@a _a]Ak024E$ Bb5B5A6CC5CK5C:8AB0000DkxEkt00A<:d>:bSFSGFn\GnXDDk0BhDEk1EBh Fchh Gchh0hb"0hbpmrt-|H-|,L`*Nu-HN?<NNT-@XDbDEbEBb=ET=DV-|PBLBp n20(L=CJ?=B^C=C\=Cj@drAdnED??RGRF=GF=FHtGJ=BltBft=B`=BnGOpЇЇ b na222-IfHVMF,_Nup `T np` Lx6oFCe0FC BdЄe!Nu B/dHDDd`A*p4. g=BNu0@F@AJhg PLNu`>LJg(HPBHh/??<@NAXLf ѨLNuJkp%`aJBja!| ??<>NAXOJkpNu0< aH`0< CF2p`jp a2`p CFp`Va CF"p`HHza`Hy"J`4B.@=|DNua.@FpAR@C` .@<.DAp$I"t Q k"RGef~`SG * g *fSG`<.DjZ\FkBJn`g Fgd Fg^HS&I.aQ`p???<NM\Qj&_NuHQ/?Y6 :fRS@g.t;ak&AA :fRS@g t;akIA??<-NAXNuaf0g2.k.tak$6g .fS@gt atkAg A .fS@f.Nut a\kAg6 /fS@gtaFkJAgކA /fS@g4<;a.kAjA AbAPjAdYA??<+NAXrNurxS@k0  bS@k .g( :g"0  b DBb BdeS@jJANuSR@JANuBnp`pBnp`p=| p|=Fn@=@b=n`ra@Hj=Ah~`:a JfBH@ RfF.f Kg" Mg sg tg Pg Hf~`xSGjtRGFcn>`jAF gp gj g grffnnpenbfJ.fj6pRGFc$SG` J.fjpRGFcRF` Ff`> `?~ap a0p a*0Nu|``CpE`bf`FgRGJGgSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0NuagNu4.rf?HyaxNM\Nu=|D`LjazEfpadppa`AFEg0PaEfaFRE`ܾEfp a@a8?nnnp a2RF`<aTnnoS@f nhfSnl=Ah=FnNup` papq4.rf?HyaNM\Nu=|DHa8LNu|A0"P2(@e2<EF`QHP=|DJ@g$abAF$HpR@ 0 f _a`QNuHPp?ap a _2<|0`C&pHQ/Hy@NA NuC pa:NuHQ/Hy?NA Nu&g4 FgagJAga2< R@AdSf0Nu0ap Ce`&g4 FgaJBjagPAe CbRa R@Sf0Nu FgRaZg JBjalAeaJAg RP0 pNu` Fg6a"gJAga @ea,RP Nup NHѨB?<?/?<BNAO JkLLNu&8aJBjaJAg Df*ڃkd0Nu DfրBH??/?<BNAO LJk!@NuHBHh Hx??<?NAO LJo ѨLNuk:fp`^k: g ѨNuBHPHQ/??<?NAO _JoѨfNuBHPHQS/??<@NAXLfѨNuJkp%`4p#,fp, Nup`p`#,Nu?a0` ?a2@@aj` a Nu4.`Af n2LR@RANu4.`g S@SAHNutbpbr??papYa0a0`aT n2L6(n\n^HHHNua4 n20(n\HNua" n20(n^HNua n20(HNu`a2Nu n+]d$HJf-HS Nup"`HPa _a`QNua JH a^L0Nua`\68714584737769466567673280683298121326846327182658669 DG-TIME F 2(f.|.0 *~ f((@4$4v . `_.. DRVCORR PRG W`>DRVCORR TXT ]XaK `Hz?<&NN\BgNAJxf xjNNu DRVCORR 1.0 ----------- Wer eine Quantum-Festplatte mit ICD-Hostadapter sein Eigen nennt, kennt vielleicht das Problem, da die Platte beim ersten Einschalten nicht erkannt wird. Dieses Problem lst das Programm BOOTFIX von der ICD- Diskette. Leider entsteht dadurch ein neues Problem (zumindest bei meinem 1040'er mit TOS 1.02): Beim Einschalten wird zwar die Platte erkannt, dafr ignoriert das BIOS jedoch hartnckig die angeschlossenen Disklaufwerke. Versucht man also auf dem Desktop das Laufwerk A zu ffnen, erhlt man die Meldung "Floppy mit dieser Kennung unbekannt". Nach kurzer Zeit stellte ich fest, da in diesem Fall die System- variablen _drvbits und _nflops falsch besetzt sind und dadurch dem Betriebssystem vorgetuscht wird, es wren berhaupt keine Laufwerke vorhanden. Dies wiederum liegt allen Anschein nach daran, da beim ersten Kaltstart die Routine hdv_init nicht oder nicht korrekt durch- laufen wird. Dies uert sich u.a. dadurch, da auch hdv_boot nicht aufgerufen wird und somit ausfhrbare Bootsektoren unbercksichtigt bleiben. Was liegt nun nher, als sich ein Programm fr den AUTO-Ordner der Boot-Partition zu schreiben, da den Aufruf von hdv_init (nicht von hdv_boot!) nachholt, wenn in _nflops noch eine 0 steht (also angeblich keine Laufwerke vorhanden sind). DRVCORR ist eben dieses Programm, das man am besten an den Anfang des AUTO-Ordners kopiert (dies ist z.B. mit meinem Bootwhler SELECTOR ganz problemlos zu erreichen...) Danach gibt es nie wieder die Meldung "Floppy mit dieser Kennung unbekannt". Es kann sein, da dieses Problem bei TOS-Versionen ab 1.04 nicht mehr auftritt, jedoch gibt es sicherlich immer noch genug Benutzer der lteren TOS-Versionen. Auerdem drften auch Besitzer anderer Hostadapter mit Quantum-Platten das selbe Problem haben, auch fr sie ist DRVCORR die Lsung, da es nicht treiberspezifisch ist. DRVCORR darf ohne Einschrnkungen benutzt und an andere "Leidens- genossen" weitergegeben werden. (Alles anderes wre bei einem so primitiven Programm auch schon reichlich merkwrdig...) Einzige Bedingung ist, da die immer die beiden Dateien DRVCORR.TXT und DRVCORR.PRG zusammen in unvernderter Form kopiert werden. Wer Kritik ben, generell seine Meinung zu dem Progrmmchen kundtun oder sogar meinen Bootwhler SELECTOR haben will, wende sich vertrauensvoll an folgende Adresse: Thomas Binder Hauptstrae 43b W-6360 Friedberg/Deutschland . `d.. G1COM C LeOG2COM C LyGdGDEFAULTPRJ wJ!GLIB H zWa|GLIB LIB L?GLIB PRJ UGLIB TXT aDGLIB_DB LIB "L #include #include #include #include enum {W_NAME = 1,W_INFO,W_CURRXYWH = 4,W_HSLIDE = 8,W_VSLIDE = 16, W_TOP = 32,W_NEWDESK = 64,W_HSLSIZE = 128,W_VSLSIZE = 256}; #define W_ANZ 256 #define TRUE 1 #define FALSE 0 #define NO_WIND (-1) #define DESK 0 #define SFLAG 3 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 typedef struct { int handle,full,open,used,x,y,w,h,rfull; int kind; int workx,worky,workw,workh; int xa,ya; int hslide,vslide,hslrast,vslrast,xstep,ystep; long hslsize,vslsize; long dh,dw,fdy,fdx,fwx,fwy; char *name,*info; int free[8]; void *freeptr; } WIND; typedef struct { int im_version,im_headlength,im_nplanes; int im_patlen,im_pixwidth,im_pixheight,im_scanwidth,im_nlines; } IMGHEADER; extern WIND slots[W_ANZ]; extern GRECT t1,t2; extern int wh,icx,icy,charw,charh,cw,ch; extern int gl_wchar,gl_hchar,gl_wbox,gl_hbox; extern int phys_handle,vdi_handle; extern int x_desk,y_desk,w_desk,h_desk; extern int msgbuff[8]; extern int mox,moy,mokstate,mobutton,mclicks,bmask,bstate,breturn; extern int kstate,kreturn; extern int cntrl[12],initin[128],ptsin[128],intout[128],ptsout[128]; extern int work_in[11],work_out[57],pxyarray[10]; extern int event,m1flag,m2flag,m1x,m1y,m1w,m1h,m2x,m2y,m2w,m2h,mreturn; extern int lowcount,hicount; extern int timeinfo; extern int rc_intersect(GRECT *rc1,GRECT *rc2); extern void g_newdesk(OBJECT *desk,int startob,int depth,int flag); extern void g_deskdraw(OBJECT *desk,int startob,int depth); extern void g_icondraw(int h,OBJECT *icon,int startob,int depht); extern void g_rubberbox(OBJECT *tree,int startob,int depth,int x,int y, int w,int h,int xstep,int ystep,int flag); extern void g_swap(int *a,int *b); extern int g_test(int x,int y,int w,int h,OBJECT *desk,int d); extern int g_icon(OBJECT *icon,int index,int startob,int depth, int x,int y,int clicks,int flag, OBJECT *desk,int dstartob,int ddepth, int ix,int iy,int iw,int ih); extern void g_c_wind(int x,int y,int w,int h); extern void g_cwork(int h); extern int g_find_new_slot(void); extern int g_find_slot(void); extern int g_find_handle(int h); extern void g_slidesize(int h); extern void g_sldpos(int h); extern void g_windpos(int h); extern void g_scroll(int x,int y,int w,int h,int anz,int dir,int flag); extern int g_windcset(int h,int flag); extern int g_varset(int h); extern int g_wind_open(int h,int kind); extern void g_rast(int *x,int *y,int rx,int ry); extern int g_anz_rect(int h); extern void g_calc_redraw(int h,int v,void (*a1f)(int v)); extern int g_wind_close(int h); extern int g_full_window(int h); extern void g_redraw(int slot,void(*a1f)(int v)); extern void g_top(int slot); extern void g_wclose(int slot); extern void g_full(int slot); extern void g_rfull(int slot,int rx,int ry,int rw,int rh); extern void g_hslide(int slot,void(*a1f)(void)); extern void g_vslide(int slot,void(*a1f)(void)); extern void g_size(int slot,int min_w,int min_h,int rx,int ry); extern int g_init(int anz,int x,int y,int w,int h,int kind); extern int g_rsrc_init(char *name); extern void g_mouse(int flag); extern void g_update(int flag); extern void g_clip(int x,int y,int x2,int y2,int flag); extern int g_multi(int flag,int (*a1f)(void),int (*b1f)(void),int (*c1f)(void), int (*d1f)(void),int (*e1f)(void),int (*f1f)(void), int (*g1f)(void),int (*h1f)(void),int (*i1f)(void), int (*j1f)(void),int (*k1f)(int evt)); extern void g_invert_state(OBJECT *objc,int index,int flag); extern int g_hndl_dial(OBJECT *objc,int o,int (*a1f)(int ex)); extern int g_dummy(void); extern int g_cwindows(void); extern void g_exit(void); static int all_slot; void (*all_a1f)(int slot); void (*all_b1f)(void); int nplanes = 1; void g_arrow(int slot,void(*a1f)(int slot),void(*b1f)(void)); int g_structset(int handle,int full,int open,int used,int x, int y,int w,int h,int rfull,int workx,int worky, int workw,int workh,int xa,int ya,int hslide, int vslide,int hslrast,int vslrast,int xstep,int ystep,int hslsize, int vslsize,long dw,long dh,long fdx,long fdy,long fwx, long fwy,char *name,char *info,int *free,void *freeptr); void g_move(int slot,int rx,int ry); char *g_get(int x,int y,int w,int h); void g_put(char *addr,int x,int y,int w,int h); int g_popup_menu(int x,int y,OBJECT *tree,int startob,int depth); int g_windall(void); int g_dialdummy(int e); void g_owind(int slot,int kind); void *g_load_image(register unsigned char *img, register IMGHEADER *hdr); void g_arrow(int slot,void(*a1f)(int slot),void(*b1f)(void)) { int whole; switch(msgbuff[4]) { case WA_UPPAGE : case WA_UPLINE : if(!slots[slot].fwy) return; break; case WA_DNPAGE : case WA_DNLINE : if(slots[slot].fwy + slots[slot].workh >= slots[slot].dh) return; break; case WA_LFPAGE : case WA_LFLINE : if(!slots[slot].fwx) return; break; case WA_RTPAGE : case WA_RTLINE : if(slots[slot].fwx + slots[slot].workw >= slots[slot].dw) return; break; } whole = g_anz_rect(slots[slot].handle) - 1; switch(msgbuff[4]) { case WA_UPLINE: if(slots[slot].fwy - slots[slot].ystep >= slots[slot].fdy) { slots[slot].fwy -= slots[slot].ystep; if(!whole) { g_scroll(slots[slot].workx + slots[slot].xa, slots[slot].worky + slots[slot].ya, slots[slot].workw - slots[slot].xa, slots[slot].workh - slots[slot].ya - slots[slot].ystep,slots[slot].ystep,DOWN, SFLAG); g_clip(slots[slot].workx + slots[slot].xa, slots[slot].worky + slots[slot].ya, slots[slot].workx + slots[slot].workw - 1, slots[slot].worky + slots[slot].ya + slots[slot].ystep,TRUE); a1f(slot); g_clip(slots[slot].workx + slots[slot].xa, slots[slot].worky + slots[slot].ya, slots[slot].workx + slots[slot].workw - 1, slots[slot].worky + slots[slot].ya + slots[slot].ystep,FALSE); } else b1f(); } else if(slots[slot].vslsize < 1000) { slots[slot].fwy = slots[slot].fdy; b1f(); } g_sldpos(slots[slot].handle); wind_set(slots[slot].handle,WF_VSLIDE,slots[slot].vslide,0,0,0); break; case WA_DNLINE: if(slots[slot].fwy + slots[slot].workh - slots[slot].ya- 1 + slots[slot].ystep <= slots[slot].fdy + slots[slot].dh - 1) { slots[slot].fwy += slots[slot].ystep; if(!whole) { g_scroll(slots[slot].workx + slots[slot].xa, slots[slot].worky + slots[slot].ya + slots[slot].ystep, slots[slot].workw - slots[slot].xa, slots[slot].workh - slots[slot].ya - slots[slot].ystep, slots[slot].ystep,UP,SFLAG); g_clip(slots[slot].workx + slots[slot].xa, slots[slot].worky + slots[slot].workh - slots[slot].ystep - 1, slots[slot].workx + slots[slot].workw - 1, slots[slot].worky + slots[slot].workh - 1, TRUE); a1f(slot); g_clip(slots[slot].workx + slots[slot].xa, slots[slot].worky + slots[slot].workh - slots[slot].ystep - 1, slots[slot].workx + slots[slot].workw - 1, slots[slot].worky + slots[slot].workh - 1, FALSE); } else b1f(); } else if(slots[slot].vslsize < 1000) { slots[slot].fwy = slots[slot].fdy + slots[slot].dh - slots[slot].workh + slots[slot].ya; b1f(); } g_sldpos(slots[slot].handle); wind_set(slots[slot].handle,WF_VSLIDE,slots[slot].vslide,0,0,0); break; case WA_UPPAGE: slots[slot].fwy -= slots[slot].workh + slots[slot].ya; slots[slot].fwy = (slots[slot].fwy < slots[slot].fdy) ? slots[slot].fdy : slots[slot].fwy; g_sldpos(slots[slot].handle); b1f(); wind_set(slots[slot].handle,WF_VSLIDE,slots[slot].vslide,0, 0,0); break; case WA_DNPAGE: slots[slot].fwy += slots[slot].workh - slots[slot].ya; slots[slot].fwy = (slots[slot].fwy + slots[slot].workh - slots[slot].ya > slots[slot].fdy + slots[slot].dh) ? slots[slot].fdy + slots[slot].dh - slots[slot].workh + slots[slot].ya : slots[slot].fwy; g_sldpos(slots[slot].handle); b1f(); wind_set(slots[slot].handle,WF_VSLIDE,slots[slot].vslide,0,0,0); break; case WA_LFLINE: if(slots[slot].fwx - slots[slot].xstep >= slots[slot].fdx) { slots[slot].fwx -= slots[slot].xstep; if(!whole) { g_scroll(slots[slot].workx + slots[slot].xa, slots[slot].worky + slots[slot].ya, slots[slot].workw - slots[slot].xa - slots[slot].xstep,slots[slot].workh - slots[slot].ya,slots[slot].xstep,RIGHT,SFLAG); g_clip(slots[slot].workx + slots[slot].xa, slots[slot].worky + slots[slot].ya, slots[slot].workx + slots[slot].xa + slots[slot].xstep, slots[slot].worky + slots[slot].workh - 1, TRUE); a1f(slot); g_clip(slots[slot].workx + slots[slot].xa, slots[slot].worky + slots[slot].ya, slots[slot].workx + slots[slot].xa + slots[slot].xstep, slots[slot].worky + slots[slot].workh - 1, FALSE); } else b1f(); } else if(slots[slot].hslsize < 1000) { slots[slot].fwx = slots[slot].fdx; b1f(); } g_sldpos(slots[slot].handle); wind_set(slots[slot].handle,WF_HSLIDE,slots[slot].hslide,0,0,0); break; case WA_RTLINE: if(slots[slot].fwx + slots[slot].workw - slots[slot].xa - 1 + slots[slot].xstep <= slots[slot].fdx + slots[slot].dw - 1) { slots[slot].fwx += slots[slot].xstep; if(!whole) { g_scroll(slots[slot].workx + slots[slot].xa + slots[slot].xstep,slots[slot].worky + slots[slot].ya,slots[slot].workw - slots[slot].xa - slots[slot].xstep, slots[slot].workh - slots[slot].ya, slots[slot].xstep,LEFT,SFLAG); g_clip(slots[slot].workx + slots[slot].workw - slots[slot].xstep - 1, slots[slot].worky + slots[slot].ya, slots[slot].workx + slots[slot].workw - 1, slots[slot].worky + slots[slot].workh - 1, TRUE); a1f(slot); g_clip(slots[slot].workx + slots[slot].workw - slots[slot].xstep - 1, slots[slot].worky + slots[slot].ya, slots[slot].workx + slots[slot].workw - 1, slots[slot].worky + slots[slot].workh - 1, FALSE); } else b1f(); } else if(slots[slot].hslsize < 1000) { slots[slot].fwx = slots[slot].fdx + slots[slot].dw - slots[slot].workw + slots[slot].xa; b1f(); } g_sldpos(slots[slot].handle); wind_set(slots[slot].handle,WF_HSLIDE,slots[slot].hslide,0,0,0); break; case WA_LFPAGE: slots[slot].fwx -= slots[slot].workw + slots[slot].xa; slots[slot].fwx = (slots[slot].fwx < slots[slot].fdx) ? slots[slot].fdx : slots[slot].fwx; g_sldpos(slots[slot].handle); b1f(); wind_set(slots[slot].handle,WF_HSLIDE,slots[slot].hslide,0,0,0); break; case WA_RTPAGE: slots[slot].fwx += slots[slot].workw - slots[slot].xa; slots[slot].fwx = (slots[slot].fwx + slots[slot].workw - slots[slot].xa > slots[slot].fdx + slots[slot].dw) ? slots[slot].fdx + slots[slot].dw - slots[slot].workw + slots[slot].xa : slots[slot].fwx; g_sldpos(slots[slot].handle); b1f(); wind_set(slots[slot].handle,WF_HSLIDE,slots[slot].hslide,0,0,0); break; } } int g_structset(int handle,int full,int open,int used,int x,int y, int w,int h,int rfull,int workx,int worky,int workw, int workh,int xa,int ya,int hslide,int vslide, int hslrast,int vslrast,int xstep,int ystep, int hslsize,int vslsize,long dw,long dh,long fdx, long fdy,long fwx,long fwy,char *name, char *info,int *free,void *freeptr) { long tf = FALSE,i; if(handle < 0) { tf = TRUE; handle = g_find_handle(handle); } i = full >= 0 ? slots[handle].full = full : 0; i = rfull>= 0 ? slots[handle].rfull = rfull : 0; i = open >= 0 ? slots[handle].open = open : 0; i = used >= 0 ? slots[handle].used = used : 0; i = x >= 0 ? slots[handle].x = x : 0; i = y >= 0 ? slots[handle].y = y : 0; i = w >= 0 ? slots[handle].w = w : 0; i = h >= 0 ? slots[handle].h = h : 0; i = workx>= 0 ? slots[handle].workx = workx : 0; i = worky>= 0 ? slots[handle].worky = worky : 0; i = workw>= 0 ? slots[handle].workw = workw : 0; i = workh>= 0 ? slots[handle].workh = workh : 0; i = xa>= 0 ? slots[handle].xa = xa : 0; i = ya>= 0 ? slots[handle].ya = ya : 0; i = hslide>=0 ? slots[handle].hslide = hslide : 0; i = vslide>=0 ? slots[handle].vslide = vslide : 0; i = hslrast>= 0 ? slots[handle].hslrast = hslrast : 0; i = vslrast>= 0 ? slots[handle].vslrast = vslrast : 0; i = xstep>= 0 ? slots[handle].xstep = xstep : 0; i = ystep>= 0 ? slots[handle].ystep = ystep : 0; i = hslsize >= 0 || hslsize == -1 ? slots[handle].hslsize = (long) hslsize : 0; i = vslsize >= 0 || vslsize == -1 ? slots[handle].vslsize = (long) vslsize : 0; slots[handle].dh = dh > 0 ? dh : 1; slots[handle].dw = dw > 0 ? dw : 1; i = fdx >= 0 ? slots[handle].fdx = fdx : 0; i = fdy >= 0 ? slots[handle].fdy = fdy : 0; i = fwx >= 0 ? slots[handle].fwx = fwx : 0; i = fwy >= 0 ? slots[handle].fwy = fwy : 0; name = name != NULL ? slots[handle].name = name : NULL; info = info != NULL ? slots[handle].info = info : NULL; if(free != NULL) for(i = 0;i < 8;i++) slots[handle].free[i] = *free++; freeptr = freeptr != NULL ? slots[handle].freeptr = freeptr :NULL; if(tf) return(handle); return(slots[handle].handle); } void g_move(int slot,int rx,int ry) { int flag = slots[slot].kind; slots[slot].x = msgbuff[4]; slots[slot].y = msgbuff[5]; wind_calc(TRUE,flag,slots[slot].x,slots[slot].y,msgbuff[6], msgbuff[7],&slots[slot].workx,&slots[slot].worky, &slots[slot].workw,&slots[slot].workh); g_rast(&slots[slot].workx,&slots[slot].worky,rx,ry); wind_calc(FALSE,flag,slots[slot].workx,slots[slot].worky, slots[slot].workw,slots[slot].workh,&slots[slot].x, &slots[slot].y,&slots[slot].w,&slots[slot].h); slots[slot].x = slots[slot].x < x_desk ? slots[slot].x + rx : slots[slot].x; slots[slot].y = slots[slot].y < y_desk ? slots[slot].y + ry : slots[slot].y; wind_set(slots[slot].handle,WF_CURRXYWH,slots[slot].x, slots[slot].y,slots[slot].w,slots[slot].h); g_varset(slots[slot].handle); } char *g_get(int x,int y,int w,int h) { MFDB m1,m2; g_update(TRUE); m1.fd_addr = NULL; m2.fd_w = w; m2.fd_h = h; m2.fd_nplanes = nplanes; m2.fd_wdwidth = w / 16 + (w % 16 != 0); m2.fd_addr = malloc(m2.fd_nplanes * m2.fd_wdwidth * 2 * m2.fd_h); if(m2.fd_addr == NULL) return(NULL); pxyarray[0] = x,pxyarray[1] = y,pxyarray[2] = x + w - 1; pxyarray[3] = y + h - 1; pxyarray[4] = 0,pxyarray[5] = 0,pxyarray[6] = w - 1; pxyarray[7] = h - 1; vro_cpyfm(vdi_handle,SFLAG,pxyarray,&m1,&m2); g_update(FALSE); return(m2.fd_addr); } void g_put(char *addr,int x,int y,int w,int h) { MFDB m1,m2; g_update(TRUE); m1.fd_addr = NULL; m2.fd_w = w; m2.fd_h = h; m2.fd_nplanes = nplanes; m2.fd_wdwidth = w / 16 + (w % 16 != 0); m2.fd_addr = addr; pxyarray[0] = 0,pxyarray[1] = 0,pxyarray[2] = w - 1; pxyarray[3] = h - 1; pxyarray[4] = x,pxyarray[5] = y,pxyarray[6] = x + w - 1; pxyarray[7] = y + h - 1; vro_cpyfm(vdi_handle,SFLAG,pxyarray,&m2,&m1); g_update(FALSE); } int g_popup_menu(int x,int y,OBJECT *tree,int startob,int depth) { int obj = NO_WIND,aobj = NO_WIND; int mx,my,mk,kk,h,w; char *buffer; g_update(TRUE); (tree + startob) -> ob_x = x; (tree + startob) -> ob_y = y; w = (tree + startob) -> ob_width + 10; h = (tree + startob) -> ob_height + 10; buffer = g_get(x - 5,y - 5,w,h); objc_draw(tree,startob,depth,x - 5,y - 5,w,h); vswr_mode(vdi_handle,MD_XOR); vsf_interior(vdi_handle,2); vsf_style(vdi_handle,8); vsf_color(vdi_handle,1); g_update(FALSE); while(graf_mkstate(&mx,&my,&mk,&kk),mk) { obj = objc_find(tree,startob,depth,mx,my); /* if(mx + 16 >= x && my + 16 >= y && mx - 16 <= x + w - 1 && my - 16 <= y + h - 1) v_hide_c(vdi_handle); else v_show_c(vdi_handle,0); */ if(aobj != NO_WIND && aobj != obj) { pxyarray[0] = x + (tree + aobj) -> ob_x - 1; pxyarray[1] = y + (tree + aobj) -> ob_y - 1; pxyarray[2] = pxyarray[0] + (tree + aobj) -> ob_width + 1; pxyarray[3] = pxyarray[1] + (tree + aobj) -> ob_height + 1; v_hide_c(vdi_handle); v_bar(vdi_handle,pxyarray); v_show_c(vdi_handle,1); } if(obj != NO_WIND && obj != aobj) { if((tree + obj) -> ob_flags & SELECTABLE) { pxyarray[0] = x + (tree + obj) -> ob_x - 1; pxyarray[1] = y + (tree + obj) -> ob_y - 1; pxyarray[2] = pxyarray[0] + (tree + obj) -> ob_width + 1; pxyarray[3] = pxyarray[1] + (tree + obj) -> ob_height + 1; v_hide_c(vdi_handle); v_bar(vdi_handle,pxyarray); v_show_c(vdi_handle,1); } else obj = NO_WIND; } aobj = obj; } v_show_c(vdi_handle,0); g_put(buffer,x - 5,y - 5,w,h); free(buffer); return(obj); } int g_windall(void) { all_slot = g_find_handle(msgbuff[3]); if(all_slot == NO_WIND) return(FALSE); switch(msgbuff[0]) { case WM_REDRAW : g_redraw(all_slot,all_a1f); break; case WM_TOPPED : case WM_NEWTOP : g_top(all_slot); break; case WM_CLOSED : g_wclose(all_slot); break; case WM_FULLED : g_full(all_slot); break; case WM_ARROWED : g_arrow(all_slot,all_a1f,all_b1f); break; case WM_HSLID : g_hslide(all_slot,all_b1f); break; case WM_VSLID : g_vslide(all_slot,all_b1f); break; case WM_SIZED : g_size(all_slot,4 * cw,4 * ch,1,1); break; case WM_MOVED : g_move(all_slot,1,1); break; } g_update(FALSE); return(FALSE); } int g_dialdummy(int e) { e++; return(FALSE); } void g_owind(int slot,int kind) { int i = 0; slots[slot].kind = kind; if(kind & NAME) i |= W_NAME; if(kind & INFO) i |= W_INFO; g_wind_open(slots[slot].handle,kind); g_windcset(slots[slot].handle,i | W_CURRXYWH); g_varset(slots[slot].handle); g_slidesize(slots[slot].handle); g_sldpos(slots[slot].handle); i = 0; if(kind & HSLIDE) i |= W_HSLIDE | W_HSLSIZE; if(kind & VSLIDE) i |= W_VSLIDE | W_VSLSIZE; g_windcset(slots[slot].handle,i); } void *g_load_image(register unsigned char *img, register IMGHEADER *hdr) { register int anz_z,line,bpl; long bwpl; unsigned char *pb; *hdr = *(IMGHEADER *)img,(int *)img += hdr->im_headlength; bpl = (hdr->im_scanwidth >> 3) + ((hdr->im_scanwidth & 7) != 0); bwpl = bpl + ((bpl & 1) != 0); if((pb = (unsigned char *)malloc(bwpl * hdr->im_nlines)) == NULL) return NULL; for(line = 0;line < hdr->im_nlines;line += anz_z) { register long ngb = 0; if(!*img && !img[1l] && img[2l] == 255) anz_z = img[3l],img += sizeof(int) + 2; else anz_z = 1; do { register unsigned char lb; register int i; lb = *img++; if(lb == 0) { register int j; for(i = 0,lb = *img++;i < lb;i++) for(j = 0;j < hdr->im_patlen;j++) pb[ngb++] = img[j]; img += 2; } else if(lb == 128) { for(i = 0,lb = *img++;i < lb;i++) pb[ngb++] = img[i]; (unsigned char *)img += lb; } else if(lb & 128) for(i = 0;i < (lb & ~128);i++) pb[ngb++] = ~0; else for(i = 0;i < lb;i++) pb[ngb++] = 0; } while(ngb < bpl); for(ngb = 1;ngb < anz_z && line + ngb < hdr->im_nlines;ngb++) memcpy(pb += bwpl,pb,bwpl); pb += bwpl; } return pb - bwpl * hdr->im_nlines; }/* GLIB Library Modul 1 12.10.1992 */ #include #include #include #include enum {W_NAME = 1,W_INFO,W_CURRXYWH = 4,W_HSLIDE = 8,W_VSLIDE = 16, W_TOP = 32,W_NEWDESK = 64,W_HSLSIZE = 128,W_VSLSIZE = 256}; #define W_ANZ 256 #define TRUE 1 #define FALSE 0 #define NO_WIND (-1) #define DESK 0 #define SFLAG 3 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 typedef struct { int handle,full,open,used,x,y,w,h,rfull; int kind; int workx,worky,workw,workh; int xa,ya; int hslide,vslide,hslrast,vslrast,xstep,ystep; long hslsize,vslsize; long dh,dw,fdy,fdx,fwx,fwy; char *name,*info; int free[8]; void *freeptr; } WIND; extern int nplanes; WIND slots[W_ANZ]; GRECT t1,t2; int ap_id; int wh,icx,icy,ch,cw,charw,charh; int gl_wchar,gl_hchar,gl_wbox,gl_hbox; int phys_handle,vdi_handle; int x_desk,y_desk,w_desk,h_desk; int msgbuff[8]; int mox,moy,mokstate,mobutton,mclicks,bmask,bstate,breturn; int kstate,kreturn; int cntrl[12],initin[128],ptsin[128],intout[128],ptsout[128]; int work_in[11],work_out[57],pxyarray[10]; int event,m1flag,m2flag,m1x,m1y,m1w,m1h,m2x,m2y,m2w,m2h,mreturn; int lowcount,hicount; int timeinfo = 125; int swidth = 639,shight = 399; int rc_intersect(GRECT *rc1,GRECT *rc2); void g_newdesk(OBJECT *desk,int startob,int depth,int flag); void g_deskdraw(OBJECT *desk,int startob,int depth); void g_icondraw(int h,OBJECT *icon,int startob,int depht); void g_rubberbox(OBJECT *tree,int startob,int depth,int x,int y, int w,int h,int xstep,int ystep,int flag); void g_swap(int *a,int *b); int g_test(int x,int y,int w,int h,OBJECT *desk,int d); int g_icon(OBJECT *icon,int index,int startob,int depth, int x,int y,int clicks,int flag, OBJECT *desk,int dstartob,int ddepth, int ix,int iy,int iw,int ih); void g_c_wind(int x,int y,int w,int h); void g_cwork(int h); int g_find_new_slot(void); int g_find_slot(void); int g_find_handle(int h); void g_slidesize(int h); void g_sldpos(int h); void g_windpos(int h); void g_scroll(int x,int y,int w,int h,int anz,int dir,int flag); int g_windcset(int h,int flag); int g_varset(int h); int g_wind_open(int h,int kind); void g_rast(int *x,int *y,int rx,int ry); int g_anz_rect(int h); void g_calc_redraw(int h,int v,void (*a1f)(int v)); int g_wind_close(int h); int g_full_window(int h); void g_redraw(int slot,void(*a1f)(int v)); void g_top(int slot); void g_wclose(int slot); void g_full(int slot); void g_rfull(int slot,int rx,int ry,int rw,int rh); void g_hslide(int slot,void(*a1f)(void)); void g_vslide(int slot,void(*a1f)(void)); void g_size(int slot,int min_w,int min_h,int rx,int ry); int g_init(int anz,int x,int y,int w,int h,int kind); int g_rsrc_init(char *name); void g_mouse(int flag); void g_update(int flag); void g_clip(int x,int y,int x2,int y2,int flag); int g_multi(int flag,int (*a1f)(void),int (*b1f)(void),int (*c1f)(void), int (*d1f)(void),int (*e1f)(void),int (*f1f)(void), int (*g1f)(void),int (*h1f)(void),int (*i1f)(void), int (*j1f)(void),int (*k1f)(int evt)); void g_invert_state(OBJECT *objc,int index,int flag); int g_hndl_dial(OBJECT *objc,int o,int (*a1f)(int ex)); int g_dummy(void); int g_cwindows(void); void g_exit(void); int rc_intersect(GRECT *rc1,GRECT *rc2) { int x12,y12,x22,y22; x12 = rc1 -> g_x + rc1 -> g_w - 1; x22 = rc2 -> g_x + rc2 -> g_w - 1; y12 = rc1 -> g_y + rc1 -> g_h - 1; y22 = rc2 -> g_y + rc2 -> g_h - 1; rc2 -> g_w = (x12 < x22) ? x12 : x22; rc2 -> g_h = (y12 < y22) ? y12 : y22; rc2 -> g_x = (rc1 -> g_x > rc2 -> g_x) ? rc1 -> g_x : rc2 -> g_x; rc2 -> g_y = (rc1 -> g_y > rc2 -> g_y) ? rc1 -> g_y : rc2 -> g_y; if(rc2 -> g_x > rc2 -> g_w || rc2 -> g_y > rc2 -> g_h) return(FALSE); return(TRUE); } void g_newdesk(OBJECT *desk,int startob,int depth,int flag) { if(flag) { desk -> ob_x = x_desk; desk -> ob_y = y_desk; desk -> ob_width = w_desk; desk -> ob_height= h_desk; } wind_set(DESK,WF_NEWDESK,(void *) desk,startob,0); g_deskdraw(desk,startob,depth); } void g_deskdraw(OBJECT *desk,int startob,int depth) { int x,y,w,h; wind_get(DESK,WF_FIRSTXYWH,&x,&y,&w,&h); while(w && h) { objc_draw(desk,startob,depth,x,y,w,h); wind_get(DESK,WF_NEXTXYWH,&x,&y,&w,&h); } } void g_icondraw(int h,OBJECT *icon,int startob,int depht) { objc_offset(icon,startob,&t2.g_x,&t2.g_y); t2.g_w = icon -> ob_width; t2.g_h = icon -> ob_height; wind_get(h,WF_FIRSTXYWH,&t1.g_x,&t1.g_y,&t1.g_w,&t1.g_h); while(t1.g_w && t1.g_h) { rc_intersect(&t2,&t1); objc_draw(icon,startob,depht,t1.g_x,t1.g_y, t1.g_w - t1.g_x + 1,t1.g_h - t1.g_y + 1); wind_get(h,WF_NEXTXYWH,&t1.g_x,&t1.g_y,&t1.g_w,&t1.g_h); } } void g_rubberbox(OBJECT *tree,int startob,int depth,int x,int y, int w,int h,int xstep,int ystep,int flag) { int i,ay = y; for(;y < ay + h;y += ystep) for(i = x;i < x + w;i += xstep) { int o; if((o =objc_find(tree,startob,depth,i,y)) != 0) { (tree + o) -> ob_state |= SELECTED; if(flag) g_icondraw(DESK,(tree + o),0,0); } } if(!flag) g_deskdraw(tree,startob,depth); } void g_swap(int *a,int *b) { int c; c = *a; *a = *b; *b = c; } int g_test(int x,int y,int w,int h,OBJECT *desk,int d) /* d : depth */ { int o,ob = NO_WIND; if((o = objc_find(desk,0,d,x,y)) != 0) ob = o; if((o = objc_find(desk,0,d,x + w / 2,y)) != 0) ob = o; if((o = objc_find(desk,0,d,x,y + h / 2)) != 0) ob = o; if((o = objc_find(desk,0,d,x,y + h)) != 0) ob = o; if((o = objc_find(desk,0,d,x + w,y)) != 0) ob = o; if((o = objc_find(desk,0,d,x + w,y + h / 2)) != 0) ob = o; if((o = objc_find(desk,0,d,x + w,y + h)) != 0) ob = o; if((o = objc_find(desk,0,d,x + w / 2,y + h)) != 0) ob = o; return(ob); } int g_icon(OBJECT *icon,int index,int startob,int depth, int x,int y,int clicks,int flag, OBJECT *desk,int dstartob,int ddepth, int ix,int iy,int iw,int ih) { int but,state; if(objc_find(desk,dstartob,ddepth,x,y) != index) { if(flag) { icon -> ob_state &= ~SELECTED; g_icondraw(DESK,desk,index,depth); } return(3); } else { if (clicks == 2) return(2); else { evnt_timer(timeinfo,0); graf_mkstate(&x,&y,&but,&state); if(but & 1) { int ww = icon -> ob_width,hh = icon -> ob_height; register int io = -1,o = -1,as = 0; v_hide_c(vdi_handle); while(graf_mkstate(&x,&y,&but,&state),but) { graf_movebox(ww,hh,x,y,x,y); io = objc_find(desk,dstartob,1,x,y); if(o != -1 && o != io) { int x_off,y_off; objc_offset(desk,o,&x_off,&y_off); (desk + o) -> ob_state = as; objc_draw(desk,o,8,ix,iy,iw,ih); form_dial(FMD_FINISH,0,0,0,0,x_off,y_off, (desk + o) -> ob_width,(desk + o) -> ob_height); o = -1; } if(io != -1 && io != o && io != index && (desk + io) -> ob_flags & SELECTABLE && !((desk + io) -> ob_state & DISABLED)) { o = io; as = (desk + io) -> ob_state; (desk + io) -> ob_state |= SELECTED; objc_draw(desk,io,8,ix,iy,iw,ih); } } v_show_c(vdi_handle,1); x = x + (icon + startob) -> ob_width > ix + iw ? ix + iw - icon -> ob_width: x; y = y + (icon + startob) -> ob_height > iy + ih ? iy + ih - (icon + startob) -> ob_height: y; g_rast(&x,&y,16,16); x = x < ix ? ix - ix % 16 + 16 : x; y = y < iy ? iy - iy % 16 + 16 : y; o = g_test(x,y,16,16,desk,ddepth); if(o == NO_WIND || o == index) { int x_off,y_off; objc_offset(desk,index,&x_off,&y_off); icx = x - x_off + icon -> ob_x; icy = y - y_off + icon -> ob_y; if(flag) { g_swap(&icon -> ob_x,&icx); g_swap(&icon -> ob_y,&icy); form_dial(FMD_FINISH,0,0,0,0,x_off,y_off, icon -> ob_width,icon -> ob_height); g_icondraw(DESK,desk,index,depth); } return(0); } else { icx = x; icy = y; return(-o); } } else { icon -> ob_state ^= SELECTED; if(flag) g_icondraw(DESK,desk,index,depth); return(1); } } } } void g_c_wind(int x,int y,int w,int h) { vswr_mode (vdi_handle,1); vsf_interior (vdi_handle,2); vsf_style (vdi_handle,8); vsf_color (vdi_handle,0); pxyarray[0] = (x > swidth - 1) ? swidth - 1 : x; pxyarray[1] = (y > shight - 1) ? shight - 1 : y; pxyarray[2] = (x + w - 1 > swidth - 1) ? swidth - 1 : (x + w - 1); pxyarray[3] = (y + h - 1 > shight - 1) ? shight - 1 : (y + h - 1); v_bar (vdi_handle,pxyarray); } void g_cwork(int h) { int x,y,w,hi; wind_get(h,WF_WORKXYWH,&x,&y,&w,&hi); g_c_wind(x,y,w,hi); } int g_find_new_slot(void) { int i; for(i = 0;i < W_ANZ;i++) if(!slots[i].used) return(i); return(NO_WIND); } int g_find_slot(void) { int i; for(i = 0; i < W_ANZ;i++) if(slots[i].used && !slots[i].open) return(i); return(NO_WIND); } int g_find_handle(int h) { int i; for(i = 0;i < W_ANZ;i++) if(slots[i].handle == h) return(i); return(NO_WIND); } void g_slidesize(int h) { int slot = g_find_handle(h); if(slot != NO_WIND) { float w = (long) slots[slot].workw - slots[slot].xa; float hi= (long) slots[slot].workh - slots[slot].ya; float dh= (long) slots[slot].dh; float dw= (long) slots[slot].dw; slots[slot].vslsize = dh ? 1000 * hi / dh + 0.5 : 1000; slots[slot].hslsize = dw ? 1000 * w / dw + 0.5 : 1000; slots[slot].vslsize = (slots[slot].vslsize > 1000) ? 1000 : slots[slot].vslsize; slots[slot].hslsize = (slots[slot].hslsize > 1000) ? 1000 : slots[slot].hslsize; } } void g_sldpos(int h) { int slot = g_find_handle(h); if(slot != NO_WIND) { float fwx,fwy; float dw = (float) slots[slot].dw,dh = (float) slots[slot].dh; float workw = (float) slots[slot].workw - slots[slot].xa, workh = (float) slots[slot].workh - slots[slot].ya; float fdx = slots[slot].fdx,fdy = slots[slot].fdy; slots[slot].fwx = (slots[slot].fwx < slots[slot].fdx) ? slots[slot].fdx : slots[slot].fwx; slots[slot].fwy = (slots[slot].fwy < slots[slot].fdy) ? slots[slot].fdy : slots[slot].fwy; slots[slot].fwx = (slots[slot].fwx > slots[slot].dw - slots[slot].fdx - slots[slot].workw + slots[slot].xa) ? (slots[slot].dw - slots[slot].fdx - slots[slot].workw + slots[slot].xa) : slots[slot].fwx; slots[slot].fwy = (slots[slot].fwy > slots[slot].dh - slots[slot].fdy - slots[slot].workh + slots[slot].ya) ? (slots[slot].dh - slots[slot].fdy - slots[slot].workh + slots[slot].ya) : slots[slot].fwy; fwx = (float) slots[slot].fwx; fwy = (float) slots[slot].fwy; slots[slot].hslide = 1000 * ((fwx - fdx) / (dw - workw)) + 0.5; slots[slot].vslide = 1000 * ((fwy - fdy) / (dh - workh)) + 0.5; slots[slot].hslide = (slots[slot].hslide > 1000) ? 1000 : slots[slot].hslide; slots[slot].vslide = (slots[slot].vslide > 1000) ? 1000 : slots[slot].vslide; slots[slot].hslide = (slots[slot].hslide < 0) ? 0 : slots[slot].hslide; slots[slot].vslide = (slots[slot].vslide < 0) ? 0 : slots[slot].vslide; if(slots[slot].fwx < 0) slots[slot].fwx = 0; if(slots[slot].fwy < 0) slots[slot].fwy = 0; if(slots[slot].fdx < 0) slots[slot].fdx = 0; if(slots[slot].fdy < 0) slots[slot].fdy = 0; } } void g_windpos(int h) { int slot = g_find_handle(h); if(slot != NO_WIND) { float hslide = slots[slot].hslide,vslide = slots[slot].vslide; float dw = slots[slot].dw,dh = slots[slot].dh; float fdx = slots[slot].fdx,fdy = slots[slot].fdy; float workw = slots[slot].workw - slots[slot].xa, workh = slots[slot].workh - slots[slot].ya; slots[slot].fwx = ((hslide * (dw - workw)) / 1000 + fdx + 0.5); slots[slot].fwy = ((vslide * (dh - workh)) / 1000 + fdy + 0.5); slots[slot].fwx = (slots[slot].fwx < slots[slot].fdx) ? slots[slot].fdx : slots[slot].fwx; slots[slot].fwy = (slots[slot].fwy < slots[slot].fdy) ? slots[slot].fdy : slots[slot].fwy; if(slots[slot].fwx < 0) slots[slot].fwx = 0; if(slots[slot].fwy < 0) slots[slot].fwy = 0; if(slots[slot].fdx < 0) slots[slot].fdx = 0; if(slots[slot].fdy < 0) slots[slot].fdy = 0; } } void g_scroll(int x,int y,int w,int h,int anz,int dir,int flag) { MFDB m1,m2; g_clip(0,0,swidth,shight,TRUE); m1.fd_addr = m2.fd_addr = 0x0L; pxyarray[0] = x; pxyarray[1] = y; pxyarray[2] = x + w - 1; pxyarray[3] = y + h - 1; switch(dir) { case UP: pxyarray[4] = x; pxyarray[5] = y - anz; pxyarray[6] = pxyarray[2]; pxyarray[7] = pxyarray[3] - anz; break; case DOWN: pxyarray[4] = x; pxyarray[5] = y + anz; pxyarray[6] = pxyarray[2]; pxyarray[7] = pxyarray[3] + anz; break; case LEFT: pxyarray[4] = x - anz; pxyarray[5] = y; pxyarray[6] = pxyarray[2] - anz; pxyarray[7] = pxyarray[3]; break; case RIGHT: pxyarray[4] = x + anz; pxyarray[5] = y; pxyarray[6] = pxyarray[2] + anz; pxyarray[7] = pxyarray[3]; break; } vro_cpyfm(vdi_handle,flag,pxyarray,&m1,&m2); g_clip(0,0,swidth,shight,FALSE); } int g_windcset(int h,int flag) { int slot = g_find_handle(h); int kind = slots[slot].kind; if(slot != NO_WIND) { if(flag & W_CURRXYWH) wind_set(h,WF_CURRXYWH,slots[slot].x,slots[slot].y, slots[slot].w,slots[slot].h); if(flag & W_NAME && kind & NAME) wind_set(h,WF_NAME,(void *) slots[slot].name,0,0); if(flag & W_INFO && kind & INFO) wind_set(h,WF_INFO,(void *) slots[slot].info,0,0); if(flag & W_HSLIDE && kind & HSLIDE) wind_set(h,WF_HSLIDE,slots[slot].hslide,0,0,0); if(flag & W_VSLIDE && kind & VSLIDE) wind_set(h,WF_VSLIDE,slots[slot].vslide,0,0,0); if(flag & W_HSLSIZE && kind & HSLIDE) wind_set(h,WF_HSLSIZE,(int) slots[slot].hslsize,0,0,0); if(flag & W_VSLSIZE && kind & VSLIDE) wind_set(h,WF_VSLSIZE,(int) slots[slot].vslsize,0,0,0); } return(slot); } int g_varset(int h) { int slot = g_find_handle(h); int x,y,w,hi,kind; kind = slots[slot].kind; if(slot != NO_WIND) if(slots[slot].open && slots[slot].used) { wind_get(h,WF_CURRXYWH,&slots[slot].x,&slots[slot].y, &slots[slot].w,&slots[slot].h); wind_get(h,WF_WORKXYWH,&slots[slot].workx,&slots[slot].worky, &slots[slot].workw,&slots[slot].workh); if(kind & FULLER) { wind_get(h,WF_FULLXYWH,&x,&y,&w,&hi); if (slots[slot].x == x && slots[slot].y == y && slots[slot].w == w && slots[slot].h == hi) slots[slot].full = TRUE; else slots[slot].full = FALSE; } if(kind & HSLIDE) { wind_get(h,WF_HSLIDE,&slots[slot].hslide,0,0,0); wind_get(h,WF_HSLSIZE,&slots[slot].hslsize,0,0,0); slots[slot].hslsize = slots[slot].hslsize & 0xFFFF; } if(kind & VSLIDE) { wind_get(h,WF_VSLSIZE,&slots[slot].vslsize,0,0,0); wind_get(h,WF_VSLIDE,&slots[slot].vslide,0,0,0); slots[slot].vslsize = slots[slot].vslsize & 0xFFFF; } } return(slot); } int g_wind_open(int h,int kind) { int slot = g_find_handle(h); if(slot != NO_WIND && slots[slot].used && !slots[slot].open) { graf_growbox(10,10,40,40,slots[slot].x,slots[slot].y, slots[slot].w,slots[slot].h); wind_open(h,slots[slot].x,slots[slot].y,slots[slot].w, slots[slot].h); slots[slot].used = slots[slot].open = TRUE; slots[slot].kind = kind; g_varset(h); } return(slot); } void g_rast(int *x,int *y,int rx,int ry) { *x -= *x % rx; *y -= *y % ry; } int g_anz_rect(int handle) { register i = 1,slot = g_find_handle(handle); int d,w,h,fw,fh; if(slot == NO_WIND) return NO_WIND; wind_get(handle,WF_FIRSTXYWH,&d,&d,&w,&h); fw = w,fh = h; for(;;) { wind_get(handle,WF_NEXTXYWH,&d,&d,&w,&h); if(!(w && h)) break; i++; } if(i == 1 && (fw != slots[slot].workw || fh != slots[slot].workh)) i = INT_MAX; return i; } void g_calc_redraw(int h,int v,void (*a1f)(int v)) { t2.g_x = msgbuff[4]; t2.g_y = msgbuff[5]; t2.g_w = msgbuff[6]; t2.g_h = msgbuff[7]; wind_get(h,WF_FIRSTXYWH,&t1.g_x,&t1.g_y,&t1.g_w,&t1.g_h); while(t1.g_w && t1.g_h) { if(rc_intersect(&t2,&t1)) { g_clip(t1.g_x,t1.g_y,t1.g_w,t1.g_h,TRUE); a1f(v); } wind_get(h,WF_NEXTXYWH,&t1.g_x,&t1.g_y,&t1.g_w,&t1.g_h); } g_clip(t1.g_x,t1.g_y,t1.g_w,t1.g_h,FALSE); } int g_wind_close(int h) { int slot = g_find_handle(h); if(slot != NO_WIND && slots[slot].used && slots[slot].open) { form_dial(FMD_SHRINK,slots[slot].x / 2,slots[slot].y / 2, slots[slot].w / 2,slots[slot].h / 2,slots[slot].x, slots[slot].y,slots[slot].w,slots[slot].h); wind_close(h); slots[slot].full = slots[slot].open = FALSE; } return(slot); } int g_full_window(int h) { int slot = g_find_handle(h); int x,y,w,hi; int kind = slots[slot].kind; if(slot != NO_WIND && slots[slot].used && slots[slot].open && kind & FULLER) { if(slots[slot].full) { wind_get(h,WF_PREVXYWH,&x,&y,&w,&hi); form_dial(FMD_SHRINK,x,y,w,hi,slots[slot].x,slots[slot].y, slots[slot].w,slots[slot].h); } else { wind_get(h,WF_FULLXYWH,&x,&y,&w,&hi); graf_growbox(slots[slot].x,slots[slot].y,slots[slot].w, slots[slot].h,x,y,w,hi); } wind_set(h,WF_CURRXYWH,x,y,w,hi); g_varset(h); } return(slot); } void g_redraw(int slot,void(*a1f)(int v)) { g_calc_redraw(slots[slot].handle,slot,a1f); } void g_top(int slot) { wind_set(slots[slot].handle,WF_TOP,slots[slot].handle,0,0,0); } void g_wclose(int slot) { g_wind_close(slots[slot].handle); } void g_full(int slot) { g_full_window(slots[slot].handle); g_slidesize(slots[slot].handle); g_sldpos(slots[slot].handle); g_windcset(slots[slot].handle,W_VSLIDE|W_HSLIDE|W_VSLSIZE|W_HSLSIZE); } void g_rfull(int slot,int rx,int ry,int rw,int rh) { int x,y,w,hi; int flag = slots[slot].kind; if(slots[slot].rfull) { wind_get(slots[slot].handle,WF_PREVXYWH,&x,&y,&w,&hi); form_dial(FMD_SHRINK,x,y,w,hi,slots[slot].x,slots[slot].y, slots[slot].w,slots[slot].h); } else { wind_get(slots[slot].handle,WF_FULLXYWH,&x,&y,&w,&hi); graf_growbox(slots[slot].x,slots[slot].y,slots[slot].w, slots[slot].h,x,y,w,hi); } wind_calc(1,flag,x,y,w,hi,&x,&y,&w,&hi); g_rast(&x,&y,rx,ry); g_rast(&w,&hi,rw,rh); wind_calc(0,flag,x,y,w,hi,&x,&y,&w,&hi); x = x < x_desk ? x + rx : x; y = y < y_desk ? y + ry : y; w = x + w > x_desk + w_desk ? w - rw : w; hi = y + hi > y_desk + h_desk ? hi - rh : hi; wind_set(slots[slot].handle,WF_CURRXYWH,x,y,w,hi); g_varset(slots[slot].handle); g_slidesize(slots[slot].handle); g_sldpos(slots[slot].handle); g_windcset(slots[slot].handle,W_VSLIDE|W_HSLIDE|W_VSLSIZE| W_HSLSIZE); slots[slot].rfull ^= 1; } void g_hslide(int slot,void(*a1f)(void)) { slots[slot].hslide = msgbuff[4]; wind_set(slots[slot].handle,WF_HSLIDE,slots[slot].hslide,0,0,0); g_windpos(slots[slot].handle); if(slots[slot].hslrast) slots[slot].fwx -= slots[slot].fwx % slots[slot].hslrast; g_sldpos(slots[slot].handle); wind_set(slots[slot].handle,WF_HSLIDE,slots[slot].hslide); a1f(); } void g_vslide(int slot,void(*a1f)(void)) { slots[slot].vslide = msgbuff[4]; wind_set(slots[slot].handle,WF_VSLIDE,slots[slot].vslide,0,0,0); g_windpos(slots[slot].handle); if(slots[slot].vslrast) slots[slot].fwy -= slots[slot].fwy % slots[slot].vslrast; g_sldpos(slots[slot].handle); wind_set(slots[slot].handle,WF_VSLIDE,slots[slot].vslide); a1f(); } void g_size(int slot,int min_w,int min_h,int rx,int ry) { int flag = slots[slot].kind; if(msgbuff[6] < min_w) msgbuff[6] = min_w; if(msgbuff[7] < min_h) msgbuff[7] = min_h; slots[slot].w = msgbuff[6]; slots[slot].h = msgbuff[7]; wind_calc(TRUE,flag,slots[slot].x,slots[slot].y,msgbuff[6], msgbuff[7],&slots[slot].workx,&slots[slot].worky, &slots[slot].workw,&slots[slot].workh); g_rast(&slots[slot].workw,&slots[slot].workh,rx,ry); wind_calc(FALSE,flag,slots[slot].workx,slots[slot].worky, slots[slot].workw,slots[slot].workh,&slots[slot].x, &slots[slot].y,&slots[slot].w,&slots[slot].h); g_slidesize(slots[slot].handle); g_sldpos(slots[slot].handle); g_windcset(slots[slot].handle,W_VSLIDE|W_HSLIDE|W_HSLSIZE| W_VSLSIZE|W_CURRXYWH); g_varset(slots[slot].handle); } int g_init(int anz,int x,int y,int w,int h,int kind) { WIND nullinit = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,0,0,0,0,0,0,0,0,NULL}; int i,slot; ap_id = appl_init(); vdi_handle = phys_handle = graf_handle(&gl_wchar,&gl_hchar,&gl_wbox,&gl_hbox); for(i = 0;i < 10;work_in[i++] = 1); work_in[10] = 2; v_opnvwk(work_in,&vdi_handle,work_out); swidth = work_out[0],shight = work_out[1]; vq_extnd(vdi_handle,1,work_out); nplanes = work_out[4]; vqt_attributes(vdi_handle,work_out); gl_wchar = work_out[6]; gl_hchar = work_out[7]; gl_wbox = work_out[8]; gl_hbox = work_out[9]; vst_height(vdi_handle,13,&charw,&charh,&cw,&ch); vst_rotation(vdi_handle,0); vst_font(vdi_handle,1); vst_effects(vdi_handle,0); graf_mouse(HOURGLASS, 0x0L); wind_get (DESK,WF_WORKXYWH,&x_desk,&y_desk,&w_desk,&h_desk); if(x == -1) x = x_desk; if(y == -1) y = y_desk; if(w == -1) w = w_desk; if(h == -1) h = h_desk; for(i = 0;i < W_ANZ;i++) slots[i] = nullinit; for(i = 0;i < anz;i++) if((slot = g_find_new_slot()) == NO_WIND || (slots[slot].handle = wind_create(kind,x,y,w,h)) == FALSE) return(i); else { slots[slot].kind = kind; slots[slot].used = TRUE; } return(NO_WIND); } int g_rsrc_init(char *name) { rsrc_free(); while(!rsrc_load(name)) if(form_alert (2,"[3][ Resource - Datei | nicht gefunden][ABBRUCH|WEITER]") == 1) return(FALSE); return(TRUE); } void g_mouse(int flag) { if(flag == TRUE) v_show_c(vdi_handle,FALSE); else v_hide_c(vdi_handle); } void g_update(int flag) { if(flag == TRUE) wind_update(BEG_UPDATE); else wind_update(END_UPDATE); g_mouse(flag ^ TRUE); } void g_clip(int x,int y,int x2,int y2,int flag) { pxyarray[0] = x < 0 ? 0 : (x >= swidth ? swidth - 1 : x); pxyarray[1] = y < 0 ? 0 : (y >= shight ? shight - 1 : y); pxyarray[2] = x2 < 0 ? 0 : (x2 >= swidth ? swidth - 1 : x2); pxyarray[3] = y2 < 0 ? 0 : (y2 >= shight ? shight - 1 : y2); if(pxyarray[0] > pxyarray[2]) pxyarray[0] = pxyarray[2]; if(pxyarray[1] > pxyarray[3]) pxyarray[1] = pxyarray[3]; vs_clip(vdi_handle,flag,pxyarray); } int g_multi(int flag,int (*a1f)(void),int (*b1f)(void),int (*c1f)(void), int (*d1f)(void),int (*e1f)(void),int (*f1f)(void), int (*g1f)(void),int (*h1f)(void),int (*i1f)(void), int (*j1f)(void),int (*k1f)(int evt)) { int done = FALSE; do { event = evnt_multi(flag,mclicks,bmask,bstate,m1flag,m1x,m1y,m1w, m1h,m2flag,m2x,m2y,m2w,m2h,msgbuff,lowcount, hicount,&mox,&moy,&mobutton,&mokstate,&kreturn, &breturn); g_update(TRUE); if(event & MU_MESAG) switch(msgbuff[0]) { case MN_SELECTED: done = a1f(); break; case WM_REDRAW : done = b1f(); break; case WM_TOPPED : case WM_NEWTOP : done = c1f(); break; case WM_CLOSED : done = d1f(); break; case WM_FULLED : done = e1f(); break; case WM_ARROWED : done = f1f(); break; case WM_HSLID : done = g1f(); break; case WM_VSLID : done = h1f(); break; case WM_SIZED : done = i1f(); break; case WM_MOVED : done = j1f(); break; default : done = k1f(event); } else done = k1f(event); } while(!done); return(done); } void g_invert_state(OBJECT *objc,int index,int flag) { (objc + index) -> ob_state ^= flag; } int g_hndl_dial(OBJECT *objc,int o,int (*a1f)(int ex)) { int e,x,y,b,h; form_center(objc,&x,&y,&b,&h); form_dial(FMD_GROW,300,180,40,40,x,y,b,h); form_dial(FMD_START,x,y,b + 5,h + 5,x,y,b + 5,h + 5); objc_draw(objc,0,8,x,y,b + 5,h + 5); do ; while(a1f(e = form_do(objc,o) & 0x7FFF)); form_dial(FMD_SHRINK,300,180,40,40,x,y,b,h); form_dial(FMD_FINISH,x,y,b + 5,h + 5,x,y,b,h); return (e & 0x7FFF); } int g_dummy(void) { g_update(FALSE); return(FALSE); } int g_cwindows(void) { int i,k = 0; for(i = 0;i < W_ANZ;i++) if(slots[i].used) { k++; if(slots[i].open) wind_close(slots[i].handle); wind_delete(slots[i].handle); slots[i].open = slots[i].used = FALSE; } return(k); } void g_exit(void) { g_cwindows(); rsrc_free(); v_clsvwk(vdi_handle); appl_exit(); } ; GDEFAULT.PRJ als DEFAULT.PRJ mit G2COM.O - Linkung ; -------------------------------------------------- * ; Name des obersten Fensters als Programmname = ; tcstart.o ; Starup-Code * ; Compiliere oberstes Fenster glib.lib tcbgilib.lib ; BGI - Library tcfltlib.lib ; Float-Library tcstdlib.lib ; Standart-Library tcextlib.lib ; Erweiterungs-Library tctoslib.lib ; TOS Library tcgemlib.lib ; AES- und VDI-Library tclnalib.lib ; LineA-Library /* GLIB Version vom 21.7.1992 */ #ifndef __GLIB #define __GLIB #include #include #include #undef W_NAME #undef W_INFO #undef W_CURRXYWH #undef W_HSLIDE #undef W_VSLIDE #undef W_TOP #undef W_NEWDESK #undef W_HSLSIZE #undef W_VSLSIZE enum {W_NAME = 1,W_INFO,W_CURRXYWH = 4,W_HSLIDE = 8,W_VSLIDE = 16, W_TOP = 32,W_NEWDESK = 64,W_HSLSIZE = 128,W_VSLSIZE = 256}; #define W_ANZ 256 #define TRUE 1 #define FALSE 0 #define NO_WIND (-1) #define DESK 0 #define SFLAG 3 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 typedef struct { int handle,full,open,used,x,y,w,h,rfull; int kind; int workx,worky,workw,workh; int xa,ya; int hslide,vslide,hslrast,vslrast,xstep,ystep; long hslsize,vslsize; long dh,dw,fdy,fdx,fwx,fwy; char *name,*info; int free[8]; void *freeptr; } WIND; typedef struct { int im_version,im_headlength,im_nplanes; int im_patlen,im_pixwidth,im_pixheight,im_scanwidth,im_nlines; } IMGHEADER; extern WIND slots[W_ANZ]; extern GRECT t1,t2; extern int wh,icx,icy,charw,charh,cw,ch; extern int gl_wchar,gl_hchar,gl_wbox,gl_hbox; extern int phys_handle,vdi_handle; extern int x_desk,y_desk,w_desk,h_desk; extern int msgbuff[8]; extern int mox,moy,mokstate,mobutton,mclicks,bmask,bstate,breturn; extern int kstate,kreturn; extern int cntrl[12],initin[128],ptsin[128],intout[128],ptsout[128]; extern int work_in[11],work_out[57],pxyarray[10]; extern int event,m1flag,m2flag,m1x,m1y,m1w,m1h,m2x,m2y,m2w,m2h,mreturn; extern int lowcount,hicount; extern int timeinfo; extern int swidth,shight; extern void (*all_a1f)(int slot); extern void (*all_b1f)(void); extern int nplanes; extern int rc_intersect(GRECT *rc1,GRECT *rc2); extern void g_newdesk(OBJECT *desk,int startob,int depth,int flag); extern void g_deskdraw(OBJECT *desk,int startob,int depth); extern void g_icondraw(int h,OBJECT *icon,int startob,int depht); extern void g_rubberbox(OBJECT *tree,int startob,int depth,int x,int y, int w,int h,int xstep,int ystep,int flag); extern void g_swap(int *a,int *b); extern int g_test(int x,int y,int w,int h,OBJECT *desk,int d); extern int g_icon(OBJECT *icon,int index,int startob,int depth, int x,int y,int clicks,int flag, OBJECT *desk,int dstartob,int ddepth, int ix,int iy,int iw,int ih); extern void g_c_wind(int x,int y,int w,int h); extern void g_cwork(int h); extern int g_find_new_slot(void); extern int g_find_slot(void); extern int g_find_handle(int h); extern int g_structset(int handle,int full,int open,int used,int x, int y,int w,int h,int rfull,int workx,int worky, int workw,int workh,int xa,int ya,int hslide, int vslide,int hslrast,int vslrast,int xstep,int ystep,int hslsize, int vslsize,long dw,long dh,long fdx,long fdy,long fwx, long fwy,char *name,char *info,int *free,void *freeptr); extern void g_slidesize(int h); extern void g_sldpos(int h); extern void g_windpos(int h); extern void g_scroll(int x,int y,int w,int h,int anz,int dir,int flag); extern int g_windcset(int h,int flag); extern int g_varset(int h); extern int g_wind_open(int h,int kind); extern void g_rast(int *x,int *y,int rx,int ry); extern int g_anz_rect(int h); extern void g_calc_redraw(int h,int v,void (*a1f)(int v)); extern int g_wind_close(int h); extern int g_full_window(int h); extern void g_redraw(int slot,void(*a1f)(int v)); extern void g_top(int slot); extern void g_wclose(int slot); extern void g_full(int slot); extern void g_rfull(int slot,int rx,int ry,int rw,int rh); extern void g_arrow(int slot,void(*a1f)(int slot),void(*b1f)(void)); extern void g_hslide(int slot,void(*a1f)(void)); extern void g_vslide(int slot,void(*a1f)(void)); extern void g_size(int slot,int min_w,int min_h,int rx,int ry); extern void g_move(int slot,int rx,int ry); extern int g_init(int anz,int x,int y,int w,int h,int kind); extern int g_rsrc_init(char *name); extern void g_mouse(int flag); extern void g_update(int flag); extern void g_clip(int x,int y,int x2,int y2,int flag); extern int g_multi(int flag,int (*a1f)(void),int (*b1f)(void),int (*c1f)(void), int (*d1f)(void),int (*e1f)(void),int (*f1f)(void), int (*g1f)(void),int (*h1f)(void),int (*i1f)(void), int (*j1f)(void),int (*k1f)(int evt)); extern void g_invert_state(OBJECT *objc,int index,int flag); extern int g_hndl_dial(OBJECT *objc,int o,int (*a1f)(int ex)); extern int g_dummy(void); extern int g_cwindows(void); extern void g_exit(void); extern char *g_get(int x,int y,int w,int h); extern void g_put(char *addr,int x,int y,int w,int h); extern int g_popup_menu(int x,int y,OBJECT *tree,int startob,int depth); extern int g_windall(void); extern int g_dialdummy(int e); extern void g_owind(int slot,int kind); extern void *g_load_image(register unsigned char *img, register IMGHEADER *hdr); #endifN0(H86&H(IE09|bd@0;N6D6Dph"2Hg"`>:/Nm rh1`B@H0/@m rh1`B@H0/Bm rh1 `B@H0/Dm rh1"`B@H0/Fm rh1$`B@H0/Hm rh1&`B@H0/Jm rh1(`B@H0/Lm rh1*`B@HJEl|f0Hrh!,`pJFl|f0Hrh!0`p"/Vo`rth! 4*/Ro`zrh!8 /Zm!@`p /^m rh!<`p /bm rh!D`p /fm rh!H`p" g th! L"A`$I" g th! P$A`&J" gp`rh4BB1TRrn g rh!d"@`*IJg0`ph00TOL$H<v8pN2H ЀЁ55t r>r r?A?rGpENTO&H?/?/pG?tE2/: J0N\OIr0Nr0Nr0Nr0NB@NK`?/4/ 2/60 JNTO6|gVDgR20H$ԂԀr(SA:2r(SA;A0r(R@;@2-r(RA;A0N M0Nr0N|gbCg^p4H"ҁ҂rgH0rS@:4rSB;B0rR@;@4-rRB;B0N M0Nr0N`v8HoHo CANPOJofBA0N?/4/rGpE KNTO KN0O Lr@gx`BDWH 2*HNN(H f`Bo`|f+f +f BG+XK`~Jf(BC`BE` PhRREjmRCBAAmTK`^<f BC` 0hRRCBAAmt`8<gBC` hRRCBA|Am`BC`B4hRRCBAAm0Hml|` "L LNR0Hl2/H҆4*H²mo0/jm L/ 2*HN" AXOLNu??0hS@2iSA4(hSB6)iSC@o8`83DBo0`03@2Qo`220(io`0)3@2inioB@`p86NuH $H68JBg 5y5y5y5yBg?/ rB@NPO20 JNLNuHQO,H86GIKHWHSHTHUr B@NO`(???420 NN\OHWHSHTHUr B@NO0g2fPOLxNuH88&H6:EIHj"J0 KNXO5k5kHlHlHlHTr 0NO`J"L JN0,lR@?2,TRA??,4 K02N\OHlHlHlHTr 0NO0,g2,fL8NuH YO$H?@>:6/ >`P<`>?420/ JNTO8g$H"ҁҀr 4/*gAB@24No&0o"@mo(0o$@m2/*f J0/2NXOLNu002NuH UO:8>$Hg6?4/H…E2B@ JNTO>g60/HD?42 JB@NTO>g60o?42 JB@NTO>g6?4o2B@ JNTO>g60/HD?4o2 JB@NTO>g60o?4o2 JB@NTO>g60o?4/H…E2 JB@NTO>g60TOLNuH>O*H6?A?B(I?42/J0/H LNTO@g 0/Dgm 4/2 LB@Np` oBfp`BA09NHWHo"J KNPOpog?m ?m ~8Bo09NM`???42/0/N\O?4r0/H LNTO>|glDghHVC L0NXO2H ЀЁ9 ?/P?/P?4 L0rN\O2H ЀЁ?4?4??/BgBgBBpBANO x|gJGgFGgBp4H"ҁ҂tg.pt f&8?t t ?/P?/P?0 Lr4N\OHWHo"J KNPOJofr09N0oN2>/H$Ԃԇu(@om`062oP40/H.އހuxAoux`24p"J K2NSo02HHAA|`06Ro24H…HBB|`24?/Hp? L40NXO8R@gDfHoC0 LNXO0om32om34/DgLCANCAN?-?-?/?/BgBgBBBApNO 4/2 LB@NB@`.330D@` m 0/Dg4/2 LB@NpOL|NuH 68:<HWHSHTHTr 0NO0g2gRC`|fAphžpfpg6<0\OLNuH868(HEG4<5k>5k@5kBHkHkHkHSr 0NO`B"K JNJ@gp??+4+2+0NXO0NHkHkHkHSr 0NO0+g2+fBg?+4+2+0NXOLNuH 6N8R@gpEph22g`42gZ?2?2 ?2 ?222H?42 H…?42 H…22HpNO 0NB@rh550LNuH.QO6N8Eph02|grh42g42gr@gIKMph22g>HWHTHUHV0rNOph?2?2 ?2 ?2?/?42pNO `8HWHTHUHVr0NO????ph?242 22 02NO ????r0NPO0N0POLtNu2thC01 NNu?/ 6EBgBgBgph?2r 02NPO$_6NurhA00NNu?/ 6Erh02Nrh02Nrh02N2<th02 N$_6NuH.QO6<:>/2Eph82IKMph22g@HWHTHUHV02rNOph?2?2 ?2 ?2?/?42pNO `>HWHTHUHVrth02 NO????ph?242 22 02NO HWHT?/??"M N42pNO20"M NN20/0C LNHWHT?/??"M N42B@NO0jh,lF`0<2jh.lE`2:0T4*h,jh0Bo8o0`880W2*h.jh2Ao4G`4>????rxh02@NPOrh02Nrh02Nrh02N2<th02 Nph rPOLtNuH06&HEph5h< BgBgBg?2 r02NPOrh02Nph22$g 2DHNrhÑDrh02Nph?2 r02NTONL NuH06&HEph5h<"BgBgBg?2"r 02NPOrh02Nph22&g 2HHNrhÑHrh02Nph?2"r 02NTONL NuH06Eph82Gh4k o7A ko7Bph5 5HrHr?+?+ ?2 CA422pNO2/0/thC A NphHrHr ?2?2?2C A422B@NOrh02Nrh02N2<th02 Nrh02NL NuH/:/ACp"QKN;@hEh*Hmh&Hmh$Ch"Ah NPO;@h(4BCGlp` 0@7RC| m7|IlHT"J KNXO33 Lr0N3 L0N;l h ;lh";lh$;lh&HmhHmhChAhr 0NPOBA0Nr0NBA0NpNHmh2Hmh0Hmh.Hmh,rB@NO ojf?mh,j ohf?mh.h|f<-h0|f>-h2BC`AphCr"QRC|mBC`Hk:?+?+?+?+?+?+?+?+ ?+ ?+?+?+?+DC8A(4+B2+@0NO.6pNpSg2+(| |bA2;N(.4:DNXblv4N6`\N6`VN6`P o N6`F o$N6`< o(N6`2 o,N6`( o0N6` o4N6` o8N6` 0 oS@S<kkbb:S<Sb>S@S<kk d* X  H:O,  0\Qg <:9 ' @gPg < .' Bg jg4Q">  !g '?PTPe^  H H6mTZV  a ~ s WXgp ,`] \ i k(]}P9,>;~l    J &>{ # $@$;&>n*?*{. RN? ?"???&? ?&?U6? {   $?@*>*wT> \OJN@ D C D R C Rw{ D C"{ '    ! b  $  i         Zk      Y      b  S '   S] 0""&&(( \ :  \4"` 0\ O " " # $.;S$S _ Tw  T(w$\ m  T  Z  _V  i k]c 2(w$OOp\ i k]  Yk a  Yk W ZO,i k] \M " 6   % < 0    Z4h) v* o  g oS  '(q f` gt(x w"w> u.w$wg   L)  <   j  h$#DC~sr|+JH2/BKF=[zG&E" r'f871.460-35I:yy_deskx_deskw_deskwhv_bar vst_rotation vswr_modework_outv_show_cwork_in vst_heightvst_font vst_effectsvqt_attributesv_opnvwkshightslots wind_create wind_update wind_open wind_close wind_deletewind_getwind_set wind_calc vro_cpyfmswidth vsf_style vdi_handle vsf_interiorv_clsvwkv_hide_ctimeinfo vsf_colorptsoutt2t1vq_extndptsinpxyarrayvs_clip rsrc_free rsrc_load phys_handlememcpym2ym1ymoym2xm1xmoxm2wm1wm2hm1hm2flagm1flagmalloclowcount rc_intersectnplaneskstate objc_draw objc_find objc_offsetmokstateicyicxintoutmclicksinitinmsgbuffmreturnh_deskmobuttong_exitg_initg_testg_rastg_putg_getg_swapg_clipg_topg_icong_fullg_sizeg_move g_windposg_wclosekreturng_varset g_windcset g_windall g_wind_close g_wind_openg_vslideg_scrollg_rfull g_structsetfreeeventg_update g_rsrc_init g_slidesize g_popup_menug_sldpos g_newdeskg_redraw g_rubberboxg_mouseg_owindg_multicharwcwg_invert_stateform_do form_alert form_dial form_centerhicountcntrl g_icondrawcharh g_load_imagechg_hslideg_c_wind g_find_slotg_find_new_slot g_find_handlebmask g_deskdraw g_hndl_dial g_full_windowg_dummy g_anz_rectbstateg_cwork evnt_multig_arrow evnt_timer g_calc_redraw g_cwindows g_dialdummyap_id graf_growbox graf_mouse graf_movebox graf_mkstategl_hboxgl_wbox graf_handle_lxcnv_xxdiv_xlcnv_wxcnv_xwcnvgl_hchargl_wchar_xscmp_xxmul_lmul_xxadd_lmod_xwsub_xxsub appl_exit appl_initbreturnall_b1fall_a1fall_slotGLIB.LIB .C[-Y] .L[-J -G -L] = d:\tc\glib\neu\G1COM.C d:\tc\glib\neu\G2COM.C ------------------------------- | GLIB | | ----- | | | | Autor: | | Amin Coja-Oghlan | | Eekholtesweg 12 | | W-2000 Hamburg 74 | | | ------------------------------- Vorwort zur GLIB ---------------- GLIB ist eine C-Easy-Gem-Library. Das bedeutet, da GLIB den Umgang mit GEM unter ANSI-C erleichtert. Sollten Sie schon einmal versucht haben, ein Programm mit grafischer Benutzeroberflche auf einem Rechner ohne Funktionen zur grafischen Benutzerfhrung, wie Sie z.B. GEM bietet, zu schreiben, so wird das Entsetzen sicherlich monatelang nicht von Ihnen gewichen sein (ich spreche aus Erfahrung...). Sollten Sie schon einmal versucht haben, ein Programm mit grafischer Benutzeroberflche unter GEM zu schreiben, so wird das Entsetzen je nach Kondition vielleicht nur einige Tage angehalten haben, da auch dies nicht zu den Dingen zhlt, die man als einfach bezeichnen kann (zumindest fr den Anfnger). Sollten Sie bereits Erfahrung mit GEM gesammelt und sich GLIB sowieso nur besorgt haben, um zu prfen, ob auch alles richtig ist, so werden Sie sptestens dann auf GLIB zurckgreifen, wenn Ihr Chef wieder einmal einen Kunden anschleppt, der binnen einer Stunde eine Datenbank mit Iconge- steuertem Desktop, Mens in Fenstern, Popup-Mens und mindestens 4 Mglich- keiten, einen Menpunkt aufzurufen zu erhalten verlangt (die Installation auf seinem Rechner natrlich eingeschlossen, der 32.000 Farben auf einmal darstellt und das ganze in 1024 mal 800 Pixeln). Es ist selbstverstndlich, da GLIB-Programme automatisch mit allen mglichen und unmglichen System- konfigurationen zusammenarbeiten. Die Vorteile gegenber Programmentwicklungswerkzeugen wie z.B. dem ACS (Application Construction System, ein Programm, das die Programmierung der Benutzeroberflche selbst bernimmt) liegen auf der Hand: Sie sind nicht an feste Programmskelette gefesselt, sondern knnen selbst alle Bausteine der Bibliothek zu einem Programm zusammenfgen. Da die Quelltexte mit- geliefert sind, knnen selbst sie eingesehen und fr spezielle Anwendungen abgewandelt werden. GLIB stellt also eine Erweiterung der Mglichkeiten auch fr den Profi dar und gibt dem Einsteiger die Mglichkeit, sich zunchst mit GEM anzufreunden. Allerdings mchte ich als Voraussetzung vorschlagen, sich wenigstens einmal einen berblick ber das GEM-System verschafft zu haben. Dies erleichtert dem Einsteiger die Arbeit mit GLIB ungemein. Auerdem werden natrlich gute Kenntnisse ber die Sprache C vorausgesetzt. Zur PD-Version der GLIB ----------------------- Sie haben nun die PD-Version der GLIB erhalten. Diese Version ist in vollem Umfange funktionstchtig. Eine so komplexe Library wie die GLIB verlangt jedoch ausfhrliche Erluter- ungen und Hilfen zum Verstndnis ihrer Funktionalitt und zur Ausschpfung ihrer Mglichkeiten. Dies kann eine README-Datei nicht gewhrleisten, da ihr Rahmen gesprengt werden wrde. Bei mir ist jedoch ein vernnftiges, gedrucktes Handbuch erhltlich, das ausfhrlich auf alle Funktionen und Variablen eingeht und viele Hilfestell- ungen bietet. Es ist unter meiner Adresse (s.o.) gegen einen Betrag von DM 50,- zu erhalten. Des weiteren werden Sie als Benutzer meiner Bibliothek eingetragen und erhalten Updates sowie die Mglichkeit, Fragen an mich zu richten. Das Handbuch wird fr Benutzer von Pure-C durch eine Hilfsdatei ergnzt, die sich in das Online-Hilfssystem von Pure-C eingliedert. Ihnen stehen dann jederzeit ausfhrliche Hilfestellungen zur Verfgung. GLIB insallieren ---------------- Auf der GLIB-Diskette sollten sich folgende Dateien befinden: GLIB.TXT lesen Sie gerade GLIB.H Include-File, in dem (fast) alle GLIB-Externals deklariert werden und das in Ihre Quelltexte einzubinden ist G2COM.C 1. Sourcefile der GLIB G1COM.C 2. Sourcefile (diese Reihenfolge ist korrekt) GLIB.PRJ Projektfile fr Pure-C, das GLIB.LIB erzeugt GLIB.LIB Pure-C-Library ohne Debug-Infos GLIB_DB.PRJ Projektfile fr Pure-C, das Debug-Infos anfgt und GLIB_DB.LIB erzeugt GLIB_DB.LIB Pure-C-Library mit Debug-Infos IMGMAIN.C Sourcedatei eines kleinen Beispielprogrammes IMG.PRG Das Ganze ausfhrbar IMGLOAD.PRJ Projektdatei GDEFAULT.PRJ Pure-C Projektdatei, die anstelle der DEFAULT.PRJ tritt. HAUS.IMG Beispiel-GEM-Image-Datei fr IMG.PRG Als Pure-C-User fllt Ihnen die Installation besonders leicht: Kopieren Sie GLIB.LIB und GLIB_DB.LIB zu den anderen LIBs, GLIB.H zu den anderen Hs und zuletzt GDEFAULT.PRJ zu DEFAULT.PRJ - fertig. Andere User sollten zuerst GLIB.H zu ihren anderen Hs kopieren. Kompilieren Sie die .Cs neu und binden Sie dann ein. ACHTUNG: Achten Sie beim Kompilieren darauf, da auch Sprnge ber ber 32kB vorkommen knnen, also Compiler-Schalter o..anknipsen! Was GLIB bietet --------------- GLIB bietet eine Funktionssammlung an, die (meiner Meinung nach) alle Berei- che der GEM-Programmierung anspricht. Um es noch einmal klarzustellen: GLIB ist kein ausfhrbares Programm wie du und ich, sondern eine Bibliothek, wie z.B. die C-Standartbibliothek. Und genauso werden auch Ihre Funktionen ange- sprochen. Fr diese Funktionen werden globale Variablen deklariert, die, und das ist ein Unterschied zur Standartbibliothek, dem Benutzer der GLIB zugnglich sind. Dies erhht fr den Fortgeschrittenen die Flexibilitt. Hier eine bersicht ber die Funktionen: - rc_intersect schneidet zwei Rechtecke. Es benutzt die globalen Variablen GRECT t1,t2. GRECT ist eine GEM-Struktur, die in vdi.h deklariert wird. - g_newdesk meldet einen neuen Desktop an. Der Desktop ist die graue Flche (bei Farbe grn), auf der sich im DESKTOP die Laufwerksicons befinden. Es ist klar zwischen DESKTOP und Desktop zu unterscheiden, denn der DESKTOP ist die GEM-Kommandooberflche, die im Handbuch Ihres Rechners beschrieben wird, der Desktop dagegen halt die graue bzw. grne Flche, auf der Menleiste und Fenster liegen. Der Desktop selbst ist ein Objektbaum (s. GEM-Dokumentation z.B. im "Atari ST Profibuch"), in dem auch die Icons enthalten sind. Das besondere am Desktop ist, da das GEM selbst das Redrawing bernimmt. Der Desktop hat das Window- Handle 0, wird also vom GEM als Window benutzt. Dies ist jedoch eine interne Angelegenheit, die uns nicht zu kmmern hat. - g_deskdraw zeichnet den Desktop-Objektbaum auf den Desktop. - g_icondraw zeichnet ein Icon aus einem Objektbaum in ein Fenster (auch in das Fenster mit Handle 0, also auf den Desktop). - g_rubberbox erlaubt eine Selektion aller Icons, die sich in einem Ob- jektbaum in einem gegebenen Rechteck befinden. Diese Funktion ist speziell fr den Einsatz mit Rubberboxen (s. graf_rbox, GEM-Dokumenta- tion) in zusammenhang mit Desktopicons ausgelegt. - g_swap vertauscht zwei gegebene Integer-Werte. - g_test prft, welches Objekt aus einem Objektbaum sich innerhalb eines gegebenen Rechtecks befindet. - g_icon ist eine der komplexesten Funktionen der GLIB. Sie handelt eine Icon-Aktion komplett ab, dazu gehren Anklicken, Verschieben, auf ein anderes Icon schieben, Doppelklicken und ins leere Klicken. - g_c_wind zeichnet ein gegebenes Rechteck wei. - g_cwork zeichnet den Arbeitsbereich eines Fensters wei. - g_find_new_slot dient dazu, in einem Vektor (Vektor bedeutet Array) von Strukturen, die GLIB zur Fensterverwaltung nutzt, ein freies Element zu finden. Diese Struktur (die WIND-Struktur) wird im Handbuch beschrieben. - g_find_slot sucht ein Element in diesem WIND-Vektor, dessen zugehriges Fenster benutzt, nicht aber geffnet ist. - g_find_handle sucht in diesem Vektor nach dem Fenster mit dem gegebenen Handle. - g_structset setzt alle komponenten einer WIND-Struktur mit einem Funk- tionsaufruf. Dies kann natrlich auch einzeln mithlife des '='-Operators geschehen, wird aber sehr viel aufwendiger. - g_slidsize berechnet die Slidergre fr ein Fenster. - g_sldpos berechnet die Sliderposition fr ein Fenster. - g_windpos berechnet, wie das gesamte Dokument (damit sind die Daten ge- meint, von denen ein Teil im Fenster dargestellt wird, z.B. wre das Inhaltsverzeichnis von Laufwerk C: auf dem DESKTOP ein Dokument, von dem ein Teil im Fenster dargestellt wird, wenn man C: ffnet) "unter dem Fenster verschoben" werden mu, um der Sliderposition zu entsprechen - g_scroll scrollt (Scrollen nennt sich der Effekt, den man beim DESKTOP beobachten kann, wenn man die Pfeiltasten an den Fenstern bettigt und ihr Inhalt nicht ganz in ein Fenster pat) ein Fenster. - g_windcset kombiniert mehrere wind_set (s. GEM-Dokumentation) Aufrufe. - g_varset kombiniert mehrere wind_get Aufrufe (s. GEM-Dokumentation). - g_wind_open ffnet ein Fenster. - g_rast veranlat GLIB nicht etwa zu einem kleinen Kaffepuschen, nein, es rechnet ein Koordinatenpaar so um, da es auf N'er Koordinaten einrastet, wobei N fr x und y-Koordinaten verschieden sein kann. - g_calc_redraw berechnet anhand der Rechteckliste eines Fensters und des Message-Buffers (globaler Vektor msgbuff), welche Teile eines Fensters neu zu zeichnen sind und ruft dementsprechend eine benutzerdefinierte Funktion auf, die dies bernimmt. Dazu ist bei den einzelnen Funktions- beschreibungen im Handbuch ein Beispiel gegeben. - g_wind_close schliet ein Fenster. - g_full_window bringt es je nach dem Eintrag in der zugehrigen WIND- Struktur auf volle oder auf vorherige Gre. Die folgenden Fenster-Funktionen bauen auf den eben beschriebenen auf. Sie ermglich eine bequeme und noch recht flexible Art, Fenster zu verwalten. Die obigen Routinen hatten zum Ziel, Ihnen das Grbste abzunehmen, deshalb sei derjenige, der lieber alles selbst und dafr mit viel Schnickschnack macht, auf jene verwiesen. - g_redraw bernimmt das Redrawing eines Fensters von GEM-Seite her. Dazu wird wie bei g_calc_redraw eine Funktion zum zeichnen des Gesamten Fen- sters bentigt. - g_top sorgt dafr, da ein Fenster entsprechend den Informationen im Message-Buffer "getoppt" wird, d.h. da es nach oben geholt und zum Aktiven wird. - g_wclose reagiert auf einen Klick auf den Close-Button des Fensters und schliet es. - g_full bringt das Fenster auf volle oder vorherige Gre. - g_rfull bringt ein Fenster auf volle oder vorherige Gre, jedoch kann angegeben werden, wie das Fenster einrasten soll (s.o., g_rast). - g_arrow bernimmt die Abhandlung von Clicks auf Fenster-Pfeilbuttons und das seitenweise Blttern in einem Fenster mittels Clicks neben die Sli- der entsprechend dem Message-Buffer. - g_hslide verschiebt den horizontzalen Slider des Fenstwers entsprechend den Informationen des Message-Buffers. - g_vslide tut dasselbe mit dem Vertikalen. - g_size sorgt entsprechend den Informationen im Message-Buffer fr eine Grenvernderung des Fensters, wobei dessen minimale Ausmae und die Einrastwerte angegeben werden knnen. - g_move bernimmt anhand der Informationen im Message-Buffer Fensterver- schiebungen. - g_init initialisiert das komplette GEM-System und GLIB und meldet Fens- ter an. Die globalen Variablen phys_handle, vdi_handle, x_desk, y_desk, w_desk, h_desk, gl_wchar, gl_hchar, gl_wbox, gl_hbox, charw, charh, cw, ch, swidth, shight und nplanes werden gesetzt. Was diese im einzelnen bedeuten, wird im Handbuch beschrieben. Es wird eine gegebene Anzahl von Fenstern angemeldet (wind_create, s. GEM-Dokumentation), deren Ausmae ebenfalls zu geben sind. - g_rsrc_init bernimmt das Laden vor Resource-Dateien. - g_mouse zeigt oder versteckt den Mauscursor. - g_update zeigt oder versteckt den Mauscursor und meldet Fenster-Redraw- Aktionen an oder ab. - g_clip setzt das Clipping-Rechteck. - g_multi wartet auf GEM-Ereignisse mittels evnt_multi. Dazu dienen die globalen Variablen msgbuff, mox, moy, mokstate, mobutton, mclicks, bmask, bstate, breturn, kstate, kreturn, event, m1flag, m2flag, m1x, m1y, m1w, m1h, m2x, m2y, m2w, m2h,mreturn, lowcunt und hicount. Anm.: Die Deklarationen der Variablen knnen Sie in glib.h einsehen. Nhere Beschreibungen finden Sie im Handbuch. - g_invert_state invertiert ein Flag im Objekt-Status eines Objekts in einem Objektbaum. g_hndl_dial bernimmt die Dialogabhandlung mithlife einer gegebenen benutzerdefinierten Funktion, die fr Extras zustndig ist. Es kann allerdings auch eine GLIB-Interne (g_dialdummy) Funktion angegeben werden, wenn keine Extras vorhanden sind. - g_dummy dient als Dummy-Parameter fr g_multi, wenn ein Ereignistyp nicht auftritt. (s. Handbuch: Datailinformationen zu g_multi). - g_cwindows schliet alle offenen Fenster und meldet sie ab. (s. GEM- Dokumentation wind_delete). - g_exit reinstalliert eine GEM-Applikation und sollte als letzter Aufruf in einem GEM-Programm erfolgen. - g_get liefert einen Zeiger auf eine Kopie eines gegebenen Bildschirm- bereichs. - g_put kopiert den mittels g_get geholten Bildschirmbereich auf den Bild- schirm. - g_popup_menu lt ein Popup-Men erscheinen und liefert den Index des angeclickten Eintrags zurck. - g_windall bernimmt die Komplette Fensterverwaltung, vom Empfang der Message bis zu deren Auswertung. Die Funktion bedient sich lediglich der beiden globalen Zeiger auf Funktionen all_a1f und all_b1f. all_a1f zeigt auf eine benutzerdefinierte Funktion, die ein komplettes Dokument zeichnet ohne ein Clipping-Rechteck zu setzen (das wird von GLIB ber- nommen) und all_b1f auf eine, die ein dafr sorgt, da ber den Arbeitsbereich des Fensters (also das Fensterinnere ohne die Randelemen- te, die selbstverstndlich vom GEM selbst redrawt werden) gem den Informationen der Rechteckliste Clipping-Rechtecke gesetzt werden und all_a1f aufruft. Dies kann z.B. ber g_redraw geschehen (s. u., Beispielprogramm). - g_dialdummy ist eine Dummy-Funktion fr g_hndl_dial. - g_owind ffnet ein Fenster. - g_load_image entpackt Daten einer GEM-Image-Datei, auf die ein Zeiger bergeben wird, setzt eine IMGHEADER-Struktur (der Header einer Image- Datei, s. glib.h und GEM-Dokumentation), auf die ein Zeiger gegeben wird und liefert einen Zeiger auf die entpackten Bilddaten. Accessories und die Applikationsnummer -------------------------------------- Auch Accessories knnen mit GLIB-Untersttzung laufen. Der einzige Unter- schied ist der, da ACCs sich mittels menu_register Anmelden mssen. Dafr ist die Applikations-Identifizierung ntig. Diese leifert appl_init. Sie wird auch von g_init zwischengespeichert, und zwar unter "ap_id" (Int- eger). Diese Variable mu als extern eingefhrt werden, denn sie ist nicht in der Header-Datei glib.h deklariert, weil normale Applikationen sie ja nicht brauchen. Auerdem ist es selbstverstndlich, da ACCs keinen Desktop anmelden knnen... IMG - Ein praktisches Beispiel ------------------------------ IMG ist ein leicht verstndliches Testprogramm, das ein GEM-Image-File einleist und in einem Fenster das entpackte Bild darstellt. Der Anwender wird also zum Programmstart in einer Fileselector-Box (diese Funktion (s. GEM-Dokumentation) ist so einfach zu handhaben, da eine GLIB-vereinfachung Unsinn wre) aufgefordert, eine ".IMG"-Datei auszuwhlen. Diese wird nun von IMG in den Speicher geladen und per GLIB entpackt. Nun kommt die Fensterverwaltung, die ja bereits initialisiert ist, da mit g_init am Anfang ein Fenster angemeldet wurde, zum Zuge. Zunchst werden die Dokumenttypischen Daten aus der IMGHEADER-Struktur sowie die brigen Fensterinfos fr den Programmstart mittels g_structset in den Slot bertragen. Nachdem das Fenster geffnet und die all_a1f und all_b1f gesetzt sind, tritt g_multi in Aktion. Zunchst sendet GEM fr das neue Fenster eine Redraw-Message, da es ja sonst leer wre. Hierdurch wird durch g_windall die Redraw-Funktion alarmiert. Diese mutet etwas kompliziert an, ist es aber nicht. Eigendlich wrde es reichen, das Bild nach fwx und fwy verschoben in den Arbeitsbereich hineinzukopieren. Jedoch ist erst zur Laufzeit bekannt, wie gro das Bild ist. Es knnte ja theoretisch auch kleiner als das Fenster sein. Deshalb wird der mglicherweise brige Bereich ermittelt und mit einem grauen Recht- eck ausgefllt. Die weitere Arbeit des Users mit dem Fenster schert uns praktisch nicht mehr. GLIB handelt alles brav ab und arbeitet dabei mit unseren Redraw- Funktionen zusammen. Allerdings bleibt ein Ereignis in diesem Beispiel un- serer Obhut berlassen: Das Schlieen des Fensters. Das Programm soll dann ja beendet werden. Also melden wir unsere eigene Funktion g_multi zum Schlieen an (es ist mglich, einen Teil der Ereignisse g_windall zu ber- lassen, whrend der Rest anders gemanagt wird). Diese ruft nun die GLIB- Funktion zum Schlieen des Fensters auf, schaltet g_update ab und gibt TRUE an g_multi zurck, worauf diese Funktion ihre Arbeit beendet, an das Haupt- programm zurckspringt und dessen Arbeit fortgesetzt wird. Eine Anmerkung zur Arbeit mit mehreren Fenstern: Es tritt hierbei ja das Problem auf, da die alles redrawnde Funktion keinen Parameter erhlt. Woher soll diese also wissen, welches Window zu redrawn ist ? Nun, sie fhrt einfach ein g_find_handle auf msgbuff[3] aus und erhlt den slot, den sie nun weiterreichen bzw. fr das Clipping verwenden kann. N0(>H86&H(IE09|bd@0;N6D6Dph"2Hg"`>:/Nm rh1`B@H0/@m rh1`B@H0/Bm rh1 `B@H0/Dm rh1"`B@H0/Fm rh1$`B@H0/Hm rh1&`B@H0/Jm rh1(`B@H0/Lm rh1*`B@HJEl|f0Hrh!,`pJFl|f0Hrh!0`p"/Vo`rth! 4*/Ro`zrh!8 /Zm!@`p /^m rh!<`p /bm rh!D`p /fm rh!H`p" g th! L"A`$I" g th! P$A`&J" gp`rh4BB1TRrn g rh!d"@`*IJg0`ph00TOL$H<v8pN2H ЀЁ55t r>r r?A?rGpENTO&H?/?/pG?tE2/: J0N\OIr0Nr0Nr0Nr0NB@NK`?/4/ 2/60 JNTO6|gVDgR20H$ԂԀr(SA:2r(SA;A0r(R@;@2-r(RA;A0N M0Nr0N|gbCg^p4H"ҁ҂rgH0rS@:4rSB;B0rR@;@4-rRB;B0N M0Nr0N`v8HoHo CANPOJofBA0N?/4/rGpE KNTO KN0O Lr@gx`BDWH 2*HNN(H f`Bo`|f+f +f BG+XK`~Jf(BC`BE` PhRREjmRCBAAmTK`^<f BC` 0hRRCBAAmt`8<gBC` hRRCBA|Am`BC`B4hRRCBAAm0Hml|` "L LNR0Hl2/H҆4*H²mo0/jm L/ 2*HN" AXOLNu??0hS@2iSA4(hSB6)iSC@o8`83DBo0`03@2Qo`220(io`0)3@2inioB@`p86NuH $H68JBg 5y5y5y5yBg?/ rB@NPO20 JNLNuHQO,H86GIKHWHSHTHUr B@NO`(???420 NN\OHWHSHTHUr B@NO0g2fPOLxNuH88&H6:EIHj"J0 KNXO5k5kHlHlHlHTr 0NO`J"L JN0,lR@?2,TRA??,4 K02N\OHlHlHlHTr 0NO0,g2,fL8NuH YO$H?@>:6/ >`P<`>?420/ JNTO8g$H"ҁҀr 4/*gAB@24No&0o"@mo(0o$@m2/*f J0/2NXOLNu002NuH UO:8>$Hg6?4/H…E2B@ JNTO>g60/HD?42 JB@NTO>g60o?42 JB@NTO>g6?4o2B@ JNTO>g60/HD?4o2 JB@NTO>g60o?4o2 JB@NTO>g60o?4/H…E2 JB@NTO>g60TOLNuH>O*H6?A?B(I?42/J0/H LNTO@g 0/Dgm 4/2 LB@Np` oBfp`BA09NHWHo"J KNPOpog?m ?m ~8Bo09NM`???42/0/N\O?4r0/H LNTO>|glDghHVC L0NXO2H ЀЁ9 ?/P?/P?4 L0rN\O2H ЀЁ?4?4??/BgBgBBpBANO x|gJGgFGgBp4H"ҁ҂tg.pt f&8?t t ?/P?/P?0 Lr4N\OHWHo"J KNPOJofr09N0oN2>/H$Ԃԇu(@om`062oP40/H.އހuxAoux`24p"J K2NSo02HHAA|`06Ro24H…HBB|`24?/Hp? L40NXO8R@gDfHoC0 LNXO0om32om34/DgLCANCAN?-?-?/?/BgBgBBBApNO 4/2 LB@NB@`.330D@` m 0/Dg4/2 LB@NpOL|NuH 68:<HWHSHTHTr 0NO0g2gRC`|fAphžpfpg6<0\OLNuH868(HEG4<5k>5k@5kBHkHkHkHSr 0NO`B"K JNJ@gp??+4+2+0NXO0NHkHkHkHSr 0NO0+g2+fBg?+4+2+0NXOLNuH 6N8R@gpEph22g`42gZ?2?2 ?2 ?222H?42 H…?42 H…22HpNO 0NB@rh550LNuH.QO6N8Eph02|grh42g42gr@gIKMph22g>HWHTHUHV0rNOph?2?2 ?2 ?2?/?42pNO `8HWHTHUHVr0NO????ph?242 22 02NO ????r0NPO0N0POLtNu2thC01 NNu?/ 6EBgBgBgph?2r 02NPO$_6NurhA00NNu?/ 6Erh02Nrh02Nrh02N2<th02 N$_6NuH.QO6<:>/2Eph82IKMph22g@HWHTHUHV02rNOph?2?2 ?2 ?2?/?42pNO `>HWHTHUHVrth02 NO????ph?242 22 02NO HWHT?/??"M N42pNO20"M NN20/0C LNHWHT?/??"M N42B@NO0jh,lF`0<2jh.lE`2:0T4*h,jh0Bo8o0`880W2*h.jh2Ao4G`4>????rxh02@NPOrh02Nrh02Nrh02N2<th02 Nph rPOLtNuH06&HEph5h< BgBgBg?2 r02NPOrh02Nph22$g 2DHNrhÑDrh02Nph?2 r02NTONL NuH06&HEph5h<"BgBgBg?2"r 02NPOrh02Nph22&g 2HHNrhÑHrh02Nph?2"r 02NTONL NuH06Eph82Gh4k o7A ko7Bph5 5HrHr?+?+ ?2 CA422pNO2/0/thC A NphHrHr ?2?2?2C A422B@NOrh02Nrh02N2<th02 Nrh02NL NuH/:/ACp"QKN;@hEh*Hmh&Hmh$Ch"Ah NPO;@h(4BCGlp` 0@7RC| m7|IlHT"J KNXO33 Lr0N3 L0N;l h ;lh";lh$;lh&HmhHmhChAhr 0NPOBA0Nr0NBA0NpNHmh2Hmh0Hmh.Hmh,rB@NO ojf?mh,j ohf?mh.h|f<-h0|f>-h2BC`AphCr"QRC|mBC`Hk:?+?+?+?+?+?+?+?+ ?+ ?+?+?+?+DC8A(4+B2+@0NO.6pNpSg2+(| |bA2;N(.4:DNXblv4N6`\N6`VN6`P o N6`F o$N6`< o(N6`2 o,N6`( o0N6` o4N6` o8N6` 0 oS@S<kkbb:S<Sb>S@S<kk d* X  H:O,  0\Qg <:9 ' @gPg < .' Bg jg4Q">  !g '?PTPe^  H H6mTZV  a ~ s WXgp ,`] \ i k(]}P9,>;~l    J &>{ # $@$;&>n*?*{. RN? ?"???&? ?&?U6? {   $?@*>*wT> \OJN@ D C D R C Rw{ D C"{ '    ! b  $  i         Zk      Y      b  S '   S] 0""&&(( \ :  \4"` 0\ O " " # $.;S$S _ Tw  T(w$\ m  T  Z  _V  i k]c 2(w$OOp\ i k]  Yk a  Yk W ZO,i k] \M " 6   % < 0    Z4h) v* o  g oS  '(q f` gt(x w"w> u.w$wg   L)  <   j  h$#DC~sr|+JH2/BKF=[zG&E" r'f871.460-35I:yy_deskx_deskw_deskwhv_bar vst_rotation vswr_modework_outv_show_cwork_in vst_heightvst_font vst_effectsvqt_attributesv_opnvwkshightslots wind_create wind_update wind_open wind_close wind_deletewind_getwind_set wind_calc vro_cpyfmswidth vsf_style vdi_handle vsf_interiorv_clsvwkv_hide_ctimeinfo vsf_colorptsoutt2t1vq_extndptsinpxyarrayvs_clip rsrc_free rsrc_load phys_handlememcpym2ym1ymoym2xm1xmoxm2wm1wm2hm1hm2flagm1flagmalloclowcount rc_intersectnplaneskstate objc_draw objc_find objc_offsetmokstateicyicxintoutmclicksinitinmsgbuffmreturnh_deskmobuttong_exitg_initg_testg_rastg_putg_getg_swapg_clipg_topg_icong_fullg_sizeg_move g_windposg_wclosekreturng_varset g_windcset g_windall g_wind_close g_wind_openg_vslideg_scrollg_rfull g_structsetfreeeventg_update g_rsrc_init g_slidesize g_popup_menug_sldpos g_newdeskg_redraw g_rubberboxg_mouseg_owindg_multicharwcwg_invert_stateform_do form_alert form_dial form_centerhicountcntrl g_icondrawcharh g_load_imagechg_hslideg_c_wind g_find_slotg_find_new_slot g_find_handlebmask g_deskdraw g_hndl_dial g_full_windowg_dummy g_anz_rectbstateg_cwork evnt_multig_arrow evnt_timer g_calc_redraw g_cwindows g_dialdummyap_id graf_growbox graf_mouse graf_movebox graf_mkstategl_hboxgl_wbox graf_handle_lxcnv_xxdiv_xlcnv_wxcnv_xwcnvgl_hchargl_wchar_xscmp_xxmul_lmul_xxadd_lmod_xwsub_xxsub appl_exit appl_initbreturnall_b1fall_a1fall_slotQDB2  XL LhJ&  (<:< 0@> >  : <: < 0>> >  : d\-  X  ,0$  Q$  P$  j) &        # ^  0    *p0       }|B"     #;~h   lN|   f{ ( n   RN $$U<6&    ,* ((  " ?     2L"U  (_ $i  is   jh"" k     $ 66 lb  Y    ^R    b       ],   \p   *`1 "OB  H [  _n F~ 0 *$mT, ZVF    c *$     ~     a~     W     ,0   M#       (  h.) o 3 g";SD  q:OdB t}  " $  T     L .4 8 <A0C0FP N` S X ]0fa0be0^i0Zm0Vp0Rs{LJHFDB@><:86420.,*<=@=@C H ORUX [`d4jn sAu<zA|0 0   0p0P!@Q'Pj40X;P^EPQ0YPde<m`}z  P` dj djj  A*(&$"djn ` ` %%+.1 4 7=APDNGJMHTF D]B@>dj  dAAApmd <e2i(m p]Fa<<F<e2i(mp <=@FgDk@u<ud<<u` `or<A8 u<ud<8 <<<<dwz0<8 <8 <}<<AuhjklX  < 8 4 0 , ( $  4 8  s8  A 0VfJ0Y'  0T~7$8+0m4&:E=L0t[0WbirP;:P\z0k0l-./CP012D0n| 34K&P4y<PhH0bQP]PmsF{0{0s I[P`B0g0a00ZP_"E0LP"PM)0c1P<0OCP]N0WPN^Pi0qp#tp$wPq560S0RP0rHGPU+0o0ipP`  Y#8d "X ZQPjp D} k6}j} }'3p`2R;uXl ? S{  8nq*n;R N U& UzU|Ui   - d! r' # i  is `k  k Y  |Y b ] \a `y JO s _} 8!m"T!#Z$V;% c&lq'aq(W) M *vh'+o,g-S. q'/t016K  @  p  L l   `"D x 4   0 (@(((P p h,"  h   r  P   +17r| 0@P  !`*`3< DMV_hqz `   00p '/7@ I QV[d   u "$&(*{,0s00m40p80e<0i@0aD0]H0XLSPNTFdPD:\TC\GLIB\NEU\G1COM.CD:\TC\GLIB\NEU\G2COM.Cwholeb1fa1fslotitffreeptrfreeinfonamefwyfwxfdyfdxdhdwvslsizehslsizeystepxstepvslrasthslrastvslidehslideyaxaworkhworkwworkyworkxrfullhwyxusedopenfullhandleflagryrxfd_addrfd_wfd_hfd_wdwidthfd_standfd_nplanesfd_r1fd_r2fd_r3m2m1addrbufferkkmkmymxaobjobjdepthstartobcharacterframesizeframecoltextcoltextmodefillpatterninteriorcolte_ptextte_ptmpltte_pvalidte_fontte_junk1te_justte_colorte_junk2te_thicknesste_txtlente_tmplenib_pmaskib_pdataib_ptextib_charib_xcharib_ycharib_xiconib_yiconib_wiconib_hiconib_xtextib_ytextib_wtextib_htextbi_pdatabi_wbbi_hlbi_xbi_ybi_colorub_codeub_parmindexindirectobspectedinfoiconblkbitblkuserblkfree_stringob_nextob_headob_tailob_typeob_flagsob_stateob_specob_xob_yob_widthob_heighttreeekindjlbngbpbbwplbpllineanz_zim_versionim_headlengthim_nplanesim_patlenim_pixwidthim_pixheightim_scanwidthim_nlineshdrimgall_slotobspecptrg_owindg_putg_getg_popup_menug_moveg_windallg_dialdummyg_arrowg_structsetnplanesg_load_imageall_b1fall_a1fBITBLKIMGHEADEROBSPECva_listTEDINFOOBJECTbfobspecUSERBLKICONBLKMFDBy22x22y12x12g_xg_yg_wg_hrc2rc1deskdephticonoaycbaobdy_offx_offasiohhwwstatebutihiwiyixddepthdstartobclickshidiranzfhfwvrhrwmin_hmin_wnullinity2x2donek1fj1fi1fh1fg1ff1fe1fd1fc1fobjckg_fulleventy_deskx_deskw_deskslotsh_deskg_windpospxyarraywhswidthg_topchm2flagm1flagg_redrawptsinvdi_handlekstateg_invert_stateg_sizebstatework_outrc_intersectlowcountg_varsetcntrlg_sldposg_newdeskbmaskgl_hchargl_wcharm2ym1ymoyicyg_dummym2xm1xmoxicxg_rubberboxgl_hboxgl_wboxcharhtimeinfom2wm1wmobuttong_find_handlehicountg_rsrc_initg_scrollg_find_slotg_find_new_slotap_idmclicksg_icondrawg_deskdrawcwwork_inmreturnkreturng_wind_openbreturnmokstateg_updateg_vslideg_hslideg_wcloseg_wind_closeshightptsoutintoutg_exitg_hndl_dialg_initg_rfullg_anz_rectg_rastg_windcsetg_c_windg_testg_cwindowsg_cworkt2t1g_multim2hm1hg_clipg_swapg_full_windowg_calc_redrawcharwmsgbuffiniting_iconphys_handleg_mouseg_slidesizeGRECTWINDGLIB_DB.LIB .C[-Y] .L[-J -G -L -Y] = d:\tc\glib\neu\G1COM.C d:\tc\glib\neu\G2COM.Ctt2ƀƀŀŀŀŀ?ĀĀĀĀĀĀĀĀĀĀ?À|Ā?ĀX?ĀpĀĀĀĀĀĀĀĀĀŀ?ŀŀŀŀƀƀ((/?@@@߰W(((k%"@@@H_(((,+@@_P((h+$"@@H@_((,(+@@@@_P(((h(+$"@@@H@@_(((,((+@@@@_P((h((+$"@@H@@@_((,(((+UU]@_UU]UUUUUUUWU_"""~""?UUUUUUUWUUWUUUU_զ""'"""""?UU_UUUUU_UUUUUj""""UUUU}USUUUjUUUU}UPק? @UUUU׀X` UUUU}VU]T UuP ]U`PU]T UuPj ]U`UUUU}UPU]T UuPj#UUUDDMUUT!B #"#$! UUUU}V#DCB @QP"! "p0D4`V$  D.@XB\ j$"DJt!B UUUUUUPD#$ @R!! jBB ! qPBUP$! B@P0`$!pB4 UUUU}UP$B D .@X!\B ?$ Jt ! # PAj#BA A 0UUb`UUUUUU}V UUT UUP: jA D +AW V$$ N@T A $" rP! UUUUP$CB !@Q0B`!Bp4 UP! .@PB\ j@BD Jx!B UUUU}UP?#$ @T!! j?F !rPB4?#A B.@Q0\`@#! Jp UUUU}V@#B#D @PA B$  x "A Vp "PD j$UUUUUUUU}_| j  UUUUUPUUUPUUUU@*UUUUUUUU}UPUUjUUUUUU}V?j/V8(UUUUP8(UUUU}UP8j(P @UUUU}UP8` (_UUUU8 UuP(WUX ]U`UUUU}V? UuP?WUX ]U` UUUUUU}_? UuP jUUUU}UP"&DMUUT!B ?$DGH! UUUU}UP?$(( @QP"? `8B "p0D4`#",! D.@XB\ j#D%`:Jt!B UUUUUU}VwpG)H @R!! jꪈ`8( ! qPBV݈pߊ#!(B B@P0`ꪈ ꪯ$B `8!pB4 UUUU}_ww pwwwwwww$, .@X!\B ꪈ ꪯ%`:H Jt ! UP ݉p߄߄G( PAjꪇ  ꪯ  UUXA 0UUb`UUUU}UPwwUwwwwwwwwwwwwAAUUP: jꪇꪮ +AW  ߃Uu]]#'*H N@T A  ꪮ#E`9( rP! UUUU}V wwwwwwUu]wwwwwwwwwwww(!@Q0B` ꪮ#! `8BBp4 UUUUUU}V ߃Uu]}݀$B(!.@PB\ jꫫꪮ$%`< Jx!B UUUUUUPwwwwwwwUu]wwwwwwwwG*H @T!! ꫫꪮ$`9( !rPB4UUUU}UPUu]] ݀$!(B.@Q0\`ꪪꫫꪮ$B%`8AJp UUUU}UPwwwwwwwwUu]_ww wwwwwwwG( @PA ꪪꫫꪮ#`<H  x "A UUUUUU ݀ Uu]_ ݀( "PD jꪪꫫꪮ#UU_UUUUUUUU}VwwwwwwwwUu]Www wwwwwwwꪪꫫꪮUUUU`UUUUUUUU}_ ݀ Uu]U݀UUUU@ꪪꫫꪮUUUU`UUUUUUUU}UPwwwwwwwwwwUu]UwwwwwwwwꪪꫫꪮUUUU}UP݀ Uu]U}݀jꪪꫫꪮ UUUUUU}wwwwwwwwwwUu]Uww wwwwwwwꪪꫫꪮUUUU}V ݀ Uu]U]݀ꪪꫫꪮUUUU}VwwwwwwwwwwUu]UWwwwwwwwwꪪꫫꪮ UUUUUU}P ݀ Uu]UU݀jꪪꫫꪮUUUU}UPwwwwwwwwwwUu]UWwwwwwwww ꪪ뫫ꪮU UUUU}UP ݀ UUu]UU݀" ꪪ뫫ꪮ?UUUUU}wwwwwwwwwwUUu]UWwwwwwwww8ꪪꪮ=UUUUxUUUUUU}V݀ UUu]UW݀&"#""hjꪪꪮ7UUUU UUUUUU}VwwwwwwwwwuUUu]UWwwwwwwww)ꪪꪮ5!XUUUUP݀ UUu]UU݀#8(5T XUUUU}UPUU_ UUU)  `5 AXUUUU}Up UUXp5 UUU#@( j 5@AXUUUUUU UUXp UUU) ! 7XUUUU}V UUXp UUU#  ( 5@8XUUUU}Vp UUX UUU) T 5AX UUUUUUPUUP UUU#(j 05AXUUUU}UPUU` UUU+@! @5 XUUUU}UPUU@ UUU# U ( @5@!UXUUUU UU@ UUU)AU P5UX UU@ UUU#8(j @5U@XUUUUUUw UU@ UUU)U A jp @5 U!X UU@ UUU#U( @5  XUUUUuUPUU@ UUU)@@ P`5XUPUU@ UUU#@( j @5 AUUUUUU}UU` UUU)8!j  5TXVUUUP UU#  ( *$ 5 AX UUUUuVUU]]UUX UUU)@  @UUUUUUUX UU'"b*"*"b"""*"*# A"#""""2"*"&"""""2&> 'UU]U]UUUWU]U]W!UUUUuUUU]UUUuUuUU_UUW UU&ȈȈ 8%UU]U]UUUWU]U]U@T UUUUuUUU]UUUuUuU} UU UU%"b*"*"b"""*"*# "#""""2"*"&""""?$UU]U]UUUWU]U]UAUUUUuUUU]UUUuUw UUUW UU-(UUP(UUP(UUP(UUP(UUP(UUP(UUPЀ UUUUW UUUUUUUUUUU"""#"""b""""""b"""&"""2"""""""""UUUUW UUUUUUUUUUU UUUUW UUUUUUUUUUU"""#"""b""""""b"""&"""2"""""""""UUUUW UUUUUUUUUUU((UU((UU((UU((UU((UU((UU((UU((UU((UU`M`vp``T~>>> TURBO-C <<<< for ATARI-ST Version 2.0 (C)88-90 Borland International &H f&op`B@#Tp3Tt k #Tz Ј<.@#TvJyTtg<"@(I$k,"Jf"JfB// ?<?<JNAO A6<HCBB`6 !jBJ)gHiRC` "fSI "WJAkHiRCBSQJ)gHiRCHy`$ON7>0 J"LN? 9Mbg @N 9Mfg @NNA?<LNApNuH<6E5R5j 5j 5jGT0+FkR2+JkjjjIT0l m4 0*l m5l 0*lm5l0*lm5lKHyQHyQzC Jr0NDjPOph23HҳDS8od0rNEr0NDr0NDr0NDBA0NDph23sFs:45s43sSB5B23sSA5A J0NExph23HҳHS4od0rNEr0ND2r0ND^r0NDBA0ND4ph423sJs65A43sSB5B23sSA5A J0NDL<Nu?/ E0*N6ATph5p5p 5p 5pA$0N4$_6Nu/ $HNHz nC jA!pN xO$B@NN"B@TOL<NuH86&H(IET09|bd@0;N6D6Dph"2Hg"`POL8NuH>:/Nm rh1`B@H0/@m rh1`B@H0/Bm rh1 `B@H0/Dm rh1"`B@H0/Fm rh1$`B@H0/Hm rh1&`B@H0/Jm rh1(`B@H0/Lm rh1*`B@HJEl|f0Hrh!,`pJFl|f0Hrh!0`p"/Vo`rth! 4*/Ro`zrh!8 /Zm!@`p /^m rh!<`p /bm rh!D`p /fm rh!H`p" g th! L"A`$I" g th! P$A`&J" gp`rh4BB1TRrn g rh!d"@`*IJg0`ph00TOLr@gx`BDWH 2*HN3 N.(H f`Bo`|f+f +f BG+XK`~Jf(BC`BE` PhRREjmRCBAAmTK`^<f BC` 0hRRCBAAmt`8<gBC` hRRCBA|Am`BC`B4hRRCBAAm0Hml|` "L LN0BR0Hl2/H҆4*H²mo0/jm L/ 2*HN1" AXOLNu??0hS@2iSA4(hSB6)iSC@o8`83DBo0`03@2Qo`220(io`0)3@2inioB@`p86NuB@AT`rh40fNuR@|mpNuBAAT`thp f0` RA|mpNu?/ O6N6R@gtETph22H42H’A N#ph22H42H’A N"phA 24N"phA 28N"A 9R,Ng8A C(""2A(CR0NA(CN@A(CR:N`ARDC(""2A(N"F rh%0A 9RNNXg6AC ""2A CRRNA CNA CR\Nt`ARfC ""2A N! rh%, 0o$<`ph$20ph%0 ,o"<`ph"2,ph%,O2$_6Nu?/ O6N>6R@gETphA 28N!phA 24N!phA02N!pphA02NzphA02N!PphA02NZphA( 2@N!2phA2 2<HWHSHTHTr 0N+O0g2gRC`|fATphžpfpg6<0\OLNuH868(HEG4<5k>5k@5kBHkHkHkHSr 0N+vO`B"K JNJ@gp??+4+2+0NHXO0NHkHkHkHSr 0N+2O0+g2+fBg?+4+2+0NXOLNuH 6N 8R@gpETph22g`42gZ?2?2 ?2 ?222H?42 H…?42 H…22HpN*O 0N+nB@rh550LNuH.QO6N8ETph02|grh42g42gr@gIKMph22g>HWHTHUHV0rN*Oph?2?2 ?2 ?2?/?42pN)bO `8HWHTHUHVr0N)O????ph?242 22 02N)~O ????r0N*$PO0NV0POLtNu2thCT01 NNu?/ 6ETBgBgBgph?2r 02N)PO$_6NurhAT00N8Nu?/ 6ETrh02Nrh02NJrh02N2<th02 N$_6NuH06&HETph5h< BgBgBg?2 r02N)JPOrh02Nbph22$g 2DHN#>rhÑDrh02NXph?2 r02N)TONL NuH06&HETph5h<"BgBgBg?2"r 02N(POrh02Nph22&g 2HHN"rhÑHrh02Nph?2"r 02N(TONL NuH06ETph82Gh4k o7A ko7Bph5 5HrHr?+?+ ?2 CA422pN(6O2/0/thC A N*phHrHr ?2?2?2C A422B@N'Orh02Nprh02N2<th02 Nrh02NL NuH/:/AQCp"QKTN%;@hEh*Hmh&Hmh$Ch"Ah N&`PO;@h(4BCGlp` 0@7RC| m7|IlHT"J KN$XO3Q3Q Lr0N"V3Q L0N";l h ;lh";lh$;lh&HmhHmhChAhr 0N#POBA0N#r0N#TBA0N#2pN%Hmh2Hmh0Hmh.Hmh,rB@N%O ojf?mh,j ohf?mh.h|f<-h0|f>-h2BC`AphCr"QRC|mBC`Hk:?+?+?+?+?+?+?+?+ ?+ ?+?+?+?+DC8A(4+B2+@0N"O.6pNpSg2+(| |bA2;N(.4:DNXblv4N6`\N6`VN6`P o N6`F o$N6`< o(N6`2 o,N6`( o0N6` o4N6` o8N6` 0 oCG?/p<6>܇׀HAHBHDHE>܇׀?<BCHCHF.HG܇׀.HG܇׀.HG܇׀.HG܇׀.HGև.HGևр?<6HCHFp>܇׀>܇׀>և(".Jkއ9S gJg j c a0JfJg9S g9S fJkt`Jk`h/"HA.HGpށ@H@HG0BGHBHE2tށـׂ݂p"Jk އل݆׃SANu b c0a b f$JfgJk؄݆׃SAR׀fRA` Jk؄݆׃SA Ae "$Hza` ҁQ !1LNudivCA f/ / ? AaA0 ]HNu4CG?bfb RGd6|/|$F,HF.h.BGHG҇~`"BAHA,HFpHAHB024 6<?~Gj SWԅӄGd, Q,HF.h.BGHG҇~HA`"BAHB02BB6|FjSG҄FdHG>HG9S f,⎜bHFRFkHz``, c9S g~9S fJkb`lJkf`X//&HC0BCHCH@B@4rЂׁ"$dSGԅӄNu9S f╚kfg` JfJg`,HFRdR`,HF  @c"$Hza` ЀP !1L Numod42<@H@J@fAH@ @bQA @bYA @?bUAJ@kSAH@AԂQ0 B]HNuA(p"@ "ByS A1B3S 3SO"Nu/ Hz?<&NN\O$_Nu@TXJ? ?ry@ڢ!h5?ڢ!h5?ڢ!h5?@@NaN-INF+INF(C)Xmath by d'ARTH:$H&I(Sx&gZJgV+gX,k$dSfRe`6+g// Ka$"J@f.// KaD$"J@kf(S,k`& L\Nu3 M`p`p/aXONuH&H(o Ia6kl g La` a,Jf\(H <a)HgN0@0;` Ka|gB9@{0dQ l)H()H C#Mf LLNup`p`p 3M` g la:`a)b*a)b* YOCBgg Ar`THWf0XONup`rwar+w+a+rbwbabr+b rb+ w+b wb+ a+b ab+ Ap`Ar(WVNu?/ ASva4ASa*G6<`Gp+g Ka Q&_6Nu/ &H+g+g8aJ@f80+aJ@k,+g kaB@7@? Ka0&_Nu3 M`p`H&H(k L0+"+ aJkRgF+f, L"St gSj`"HSISSk ögSjJg&"'LBLNup`p`H&H(k6+"+g0Dta$Jk+fZ"S"L Ip gSj`*| // " 0a"_"JkNgPAp SjH@" 0aLJk*g,`0" La|Jkg&'LB@LNup`p`H06&Hp Cgp@CfFpC?/ ?<=NAPOJk&8jaTpCgF?<?p/?<BNAO Jj.`Br߲fNAXONuaj3M`p`ް|c/ ??<>NAXO$_JkpNua@3M`pNu/ /?<ANA\OJkp$_Nua3M`p$_Nu/ J@f//aJ@fBg`//??<?NAO $_JkNu  _`a3M`pNuH&Hx&SgkJ9Skvf~a<g&< g<<gP< g< e޸dRa`JgSSKpap apa`Rp aSp a`bJg^S`TxB9S`Jx B9S`Sp a2 L$_NuBx`xB9S`x B9S`?<NATONu??<NAXONuH@??<@NAO $_JkfNua3M`pNu3M`Nu/ |b2@?? /?<BNAO JjfSBg jX?<? p/?<BNAO Jk$`X?<? p/?<BNAO JkzЁ"kt?<? p/?<BNAO Jk\$`?<? p/?<BNAO Jk@$Ҁk: $k2HzN <e/`/? ?<@NAO Jkb $_Nua3M`p$_Nu0<`H 6?<?B?<BNAO (Bg?/<?<BNAO *Bg?/?<BNAO JWHL8NuHR CS$Q`"J$R" gf"Aa Ja$_NuD@| |"b;NupNu   JgJgJgJgJg JgJgJfSHggggg ggf @Nu"HJgJgJgJgJg JgJgJf SNuH &/?<HNA\OJf 9Ĭg @ NJ@fp @LNuH0&gPR<e a g!CCS "A`rGS&S f. < a gj&@Ap !| 'H&S#SA"P` )d I"Q f`rd ` #@#C"nAL Nuk |`3 M``/ oLQ d nf@axJg*`6CS g,g"@ f` "/?<INA\OJj`p$_Nugp`/ &yS g/ &S?<INA\O`&yS g/ &S?<INA\O`&_NuH8$< CGS g" c &@ f`(@ ,gb*"Ҩeg ` )H`p"@")Ө )H`>"@ gb" ҩeg`N"(ө`" "H" ҩf @"(ө" l eb&/ ?<INA\OJfQLNuP`Jg/bg2 4gf!Sf`f`!Sg"gH?LxH?LxH?LxH?Lx`H?Lx8H?LxH?LxH?LxH?LxH?LxpH?LxHH?Lx H?LH?SfvLx2|HgS@!!Q|gSA!Q`2 4gfSf`f`S"gH?LxHxLxHx(LxHxPLxHxxLxHxLxHxLxHxLxHxLxHx@LxHxhLxHxLxHxLHSfxLx2|HgS@ Q|gSAQ _Nu$jD BJjD$HBJBf"$HBJBf $jDNuHBЂ$jDNuHBЂ$jDNu"@$jDJjD$HBJBf.$HBJBfB@H@$ jDNuB@H@HB0B@H@$ jDNu A"B@H@HABAtҁрdЈӁрQ$ jDNuH 6?<?p/?<BNAO (k6?<?p/?<BNAO *k?<?/?<BNAO J@k L8Nup3 M``/ /?/MS|:?<NATO|ATNBg/?<GNAPOJf\B.UN _0"H`W,_$_Nu/AİBhBh2<&a"_222222A2222Nu/AİBh1|1A2<fa"_2r+2QAr 2QNu/Aİ1|1|!I!o1A"_A000000000Aİrm`l/Aİ1|1|!I!o1A"o 1Y1Q"_A000000000Aİry`AİBh1|1Ar`Aİ1ABh1|r`AİBh1|1Arh`AİBh1|1Ar`AİBh1|1Arj`AİBh1|1Ar`/ /Aİ1|BhBh01A2r a^A"_2"_2"o2"o2NuAİBh1|1Ar `(AİBh1|1Ar `Cİ3|3|3AC0""Aİ2<`C2222Aİ1|Bh1| r `AİBhBhre`AİBhBhr{`3ļ/ Cİ2dBi3| Cp 2Q"<Hps/ NB$_ _0ļAn"op,2QAp 2QNuİnnAİBh1|1Arz`/ 1@ 0"<T\psNBAn0$_Nup `p`#/ An00000 0 0000000000 pa"_2"o2"o"2"o&2"o*2"o.2Nu#An0000000 0 0p3`lpo`f/ /pMa\"_2"_2"o2"o2NuAn0000000 0 pI` #3npN`/ ?An00pha2CSA|;$Y4Q$_NuAn00000pd`An00000pe`3npg`An000000 pi`l/ /An0000 00plaJ"_2"_2"o 2"o2Nu3npf`(3npk`##pZa "o2Nu/ 3İ@@A"CIJB@22220<"<KxNBAn0$_Nuİnn \*.IMGrbSHOW-IMG by Amin Coja-Oghlan}@?@@?@@?@?@?@?[3][ Resource - Datei | nicht gefunden][ABBRUCH|WEITER]S&S&S&Svİnnr  $Bhn  J2"8` & X ޸> (.v.*H~|^& 6>T<*&8 4B @ (& .* Jf 4 & t x v*$Db 2> bD.R,<*L$(6B  " jP&> $4  BIMG.PRG = ; list of modules follows... TCSTART.O ; startup code imgmain.c glib_db.lib TCFLTLIB.LIB ; floating point library TCSTDLIB.LIB ; standard library TCEXTLIB.LIB ; extended library TCTOSLIB.LIB ; TOS library TCGEMLIB.LIB ; AES and VDI library ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<#include #include #include #include #define KIND (NAME|CLOSER|MOVER|FULLER|SIZER|DNARROW|UPARROW|INFO|VSLIDE|LFARROW|RTARROW|HSLIDE) static MFDB mfdb; static IMGHEADER hdr; static char path[1024] = "",name[16] = ""; int wclose(void); void clear(int slot); void wclear(void); int wclose(void) {return(TRUE);} void clear(int slot) { static MFDB dummy = {NULL}; static int col[] = {1,0}; pxyarray[4] = pxyarray[0]; pxyarray[5] = pxyarray[1]; pxyarray[6] = pxyarray[2]; pxyarray[7] = pxyarray[3]; pxyarray[0] += slots[0].fwx - slots[0].workx; pxyarray[1] += slots[0].fwy - slots[0].worky; pxyarray[2] += slots[0].fwx - slots[0].workx; pxyarray[3] += slots[0].fwy - slots[0].worky; if(pxyarray[0] >= hdr.im_scanwidth) pxyarray[0] = hdr.im_scanwidth; if(pxyarray[2] >= hdr.im_scanwidth) pxyarray[2] = hdr.im_scanwidth; if(pxyarray[1] >= hdr.im_nlines) pxyarray[1] = hdr.im_nlines; if(pxyarray[3] >= hdr.im_nlines) pxyarray[3] = hdr.im_nlines; vrt_cpyfm(vdi_handle,MD_REPLACE,pxyarray,&mfdb,&dummy,col); if(slots[slot].fwx + slots[slot].workw - 1 - slots[slot].dw > 0) { vswr_mode(vdi_handle,MD_REPLACE); vsf_interior(vdi_handle,FIS_PATTERN); vsf_style(vdi_handle,4); vsf_color(vdi_handle,1); vsf_perimeter(vdi_handle,0); pxyarray[0] = slots[slot].workx - slots[slot].fwx + slots[slot].dw; pxyarray[1] = slots[slot].worky; pxyarray[2] = slots[slot].workx + slots[slot].workw - 1; pxyarray[3] = slots[slot].worky + slots[slot].workh - 1; v_bar(vdi_handle,pxyarray); } if(slots[slot].fwy + slots[slot].workh - 1 - slots[slot].dh > 0) { vswr_mode(vdi_handle,MD_REPLACE); vsf_interior(vdi_handle,FIS_PATTERN); vsf_style(vdi_handle,4); vsf_color(vdi_handle,1); vsf_perimeter(vdi_handle,0); pxyarray[0] = slots[slot].workx; pxyarray[1] = slots[slot].worky - slots[slot].fwy + slots[slot].dh; pxyarray[2] = slots[slot].workx + slots[slot].workw - 1; pxyarray[3] = slots[slot].worky + slots[slot].workh - 1; v_bar(vdi_handle,pxyarray); } } void wclear(void) { int slot = g_find_handle(msgbuff[3]); msgbuff[4] = slots[slot].workx; msgbuff[5] = slots[slot].worky; msgbuff[6] = slots[slot].workw; msgbuff[7] = slots[slot].workh; g_redraw(slot,clear); } void cut_string(char *inpath) { int i = strlen(inpath); while(inpath[--i] != '\\'); inpath[i + 1] = '\0'; } int main() { FILE *h; void *mem,*dest; long int len; int exit; g_init(1,-1,-1,-1,-1,KIND); all_a1f = clear; all_b1f = wclear; slots[0].free[7] = KIND; getcwd(path,1020); fsel_input(strcat(path,"\\*.IMG"),name,&exit); if(!exit) return -1; cut_string(path); h = fopen(strcat(path,name),"rb"); mem = malloc(len = filelength(h->Handle) + 16); fread(mem,1,len,h); fclose(h); dest = g_load_image(mem,&hdr); free(mem); mfdb.fd_addr = dest; mfdb.fd_w = hdr.im_scanwidth; mfdb.fd_h = hdr.im_nlines; mfdb.fd_wdwidth = mfdb.fd_w / 16 + (mfdb.fd_w % 16 != 0); mfdb.fd_nplanes = hdr.im_nplanes; g_structset(0,-2,-2,-2,x_desk + 16,y_desk + 16,w_desk - 32, h_desk - 32,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,32,32,0,0,mfdb.fd_w, mfdb.fd_h,0,0,0,0,"SHOW-IMG"," \275 by Amin Coja-Oghlan",NULL, NULL); g_owind(0,KIND); graf_mouse(ARROW,0L); g_multi(MU_MESAG,g_dummy,g_windall,g_windall,wclose,g_windall,g_windall,g_windall,g_windall, g_windall,g_windall,(int (*)(int))g_dummy); g_update(FALSE); g_exit(); return 0; }. `.. MAUSWINDACC )\ MAUSWINDTXT \ `j&V`` >>>> PURE-C <<<< for ATARI-ST Version 1.0 (C)88-90 Borland International &H f&op`B@# x3 | k # Ј<.@# ~Jy |g<"@(I$k,"Jf"JfB// ?<?<JNAO A<~kRrRAfA6<HCBB`6 !jBJ)gHiRC` "fSI "WSAkHiRCBSQJ)gHiRCHy`$ON*0 J"LN? 9lg @N 9pg @NNNM KIG8L|HSHSHSHSHTBgp ?BgBgBgBgBgBgBgBgBgBgBg"M NBBBA0NTO.8pNpDg2|(g` nfANp Dg(Hor B@NnXO20N8oog20N"B@N`VA pNOLxNu//O86A $Ct'QHWHoC A NPO0Hr4HЂ/@ 6/H8/Hք/C*Ap2<NbO.(&NuH6O/HE 0gjj` jjKMGHWHUHV"K JNO ?????/?42B@NO ???4rB@ JNd\OB@ JN~6|?????/?42pNrO 2H ЀЁr tjgv`BC o0O LlNuA(p"@ "By lA1B3 l3 nO"Nu/ Hz?<&NN\O$_Nu/ &y p g/ &S?<INA\O`&y t g/ &S?<INA\O`&_Nup `#A \00p`#/ A \00000 0 0000000000 pah"_2"o2"o"2"o&2"o*2"o.2Nu#A \000000p*` #3 \p2`#A \0000000 0 0p3`/ #p6a"_2"o2"o2"o 2Nu#3 \p4`#3 \pr`3 \#p#`/ /pOax"_2"_2"o2"o2Nu/ ?A \00phaN2CSA|;$Y4Q$_Nu3 \3 ^pj`3 \pk`/ 3 @@A"C B@22220<"<NBA \0$_Nu \ \  L e f g      0t         '    Maus-Window Version 1.00Aktiviert das unter dem Maus-zeiger befindliche Fenster.Geschrieben am 26.10.1992 vonThomas Binder mit Pure C.Maus-Window ist PD!Zustand:anausOK Maus-Window[3][| Maus-Window V1.00 || Kein Platz in| Menleiste!][Abbruch]r  ."p "j ,$  0>  8 Maus-Window V1.00 ----------------- Wer schon einmal mit einem UNIX-Rechner unter XWINDOWS gearbeitet hat, dem wird aufgefallen sein, da immer das Fenster aktiv ist, das sich unter dem Mauszeiger befindet. Dies wre in mancher Hinsicht auch auf dem ATARI unter GEM sehr ntzlich. Ich fand in diesem Zusammenhang einen Artikel in einer Fachzeitschrift fr den ST, der ein solches Programm beschrieb. Leider war das Ergebnis nicht recht berzeugend, da alle vorgestellten Methoden nicht zu vernachlssigende Nachteile auswiesen. Also begann ich, ein eigenes Programm fr diesen Zweck zu erstellen. Das Ergebnis ist das hier vorliegende Programm Maus-Window V1.00, da als Accessory in das Wurzelverzeichnis des Bootlaufwerks kopiert werden mu. Ist das Accessory aktiv, wird automatisch, sobald der Mauszeiger sich ber einem nicht aktiven Fenster befindet, dieses "getopped". Dazu wird mittels der AES-Funktion appl_tplay ein Mausklick simuliert. Diese Methode ist 100%ig GEM-konform und bereitet mit allen sauber programmierten Programmen keine Probleme. Leider zeigte sich whrend der Arbeit mit Pure C, mit dem das Accessory erstellt wurde, da auch dieses Programm nicht fehlerfrei ist. Ruft man z.B. mit der Help-Taste die Hilfefunktion auf, ffnet Pure C das dazugehrige Fenster. Befindet sich der Mauszeiger whrend dieser Aktion ber einem anderen Fenster, wird dieses, wie zu erwarten, von Maus-Window in den Vordergrund geholt. Leider merkt Pure C dies nicht und geht davon aus, da weiterhin das Hilfefenster vorne ist und gibt den Hilfetext in das aktive Fenster aus. Dabei gert zustzlich die interne Fensterverwaltung von Pure C durcheinander, was damit endet, da der Quelltext pltzlich verschwunden ist. Auerdem sollte man aufpassen, da man kein kleines Fenster in ein groes Fenster verschiebt, da dieses sonst beim Aktivieren des darunterliegenden greren komplett verdeckt wird. Durch ein wenig Disziplin bei der Fensterpositionierung ist dies aber einfach zu umgehen, auch wenn das Verhalten mancher Programme beim ffnen von Fenstern dabei nicht gerade hilfreich ist (allen voran der ATARI-Desktop). Sollte es Programme geben, die sich, wie z.B. Pure C, nicht so gut mit Maus-Window verstehen, oder will man Maus-Window einfach fr kurze Zeit abschalten, kann man den Accessory-Eintrag aufrufen. Es erscheint eine Informationsbox, in der man festlegen kann, ob Maus-Window aktiv sein soll oder nicht (den Zustand-Button auf "an" oder "aus" setzen). Ein Klick auf OK verlt den Dialog wieder. Maus-Window ist frei kopierbar, einzige Bedingung ist, da dabei die beiden Dateien MAUSWIND.ACC und MAUSWIND.TXT komplett und unverndert kopiert werden. Wem bei der Benutzung des Accessory weitere Programme auffallen, die Schwierigkeiten bereiten, sollte mir schreiben, ich fhre dann eine entsprechende Liste, die ich jedem zuschicke, der mir einen adressierten und frankierten Rckumschlag zukommen lt. Die Autoren solcher Programme sollten diese Probleme nicht einfach in den Wind schlagen, da sie auch unter der genderten Fensterverwaltung unter MultiTOS oder WINX nicht richtig funktionieren knnten. Meine Adresse: Thomas Binder Hauptstrae 43b W-6360 Friedberg/Deutschland Viel Spa mit Maus-Window V1.00! . ` .. GFA_BAS _V3` BIN ` QUELLTXT  aDOKUMENT a. ` .. ` MENUDLX DAT  GFA_3.PRG COMPLINK\GFA_BCOM.PRG COMPLINK\GL.PRG RCS2.PRG D:\TEMPUS\TEMPUS.PRG C:\BIN\QUIKFIND.PRG C:\BIN\GULAM.PRG COMPILAT\TEST.O COMPILAT\TEST.PRG COMPLINK\GFA3BLIB . ` .. ` GULAM DOC  PsGULAM G *GULAM HLP / GULAM PRG 3_QUIKFINDPRG g{C A Ref Manual for >> gulaam << Copyright (c) 1987 pm@Case April 1987 Gulaam is a shell (i.e., a command line interpreter) for AtariST computers. It contains some 50+ built-in commands, provides file name completion a la TENEX, has history, alias and rehash facilities, and integrates the shell with microEmacs easing the editing of commands being issued. Among the built-in commands are: egrep -- a regular expression based string pattern finder, te -- a simple terminal emulator, rx/sx -- Xmodem file transfers, and pr -- a text file printer with pagination. In common usage, it resembles csh of Unix 4.xBSD; Gulam's control structures, lexical conventions and other details are, however, quite different from csh. While I have borrowed ideas from other shells (such as Korn shell), I made no heroic attempts to be compatible with any. Where possible, I have tried to make Gulam less 'surprising' in what it does. Gulam is a free program; you are encouraged to give it to others, but at no cost. However, the source is copyrighted and will be part of a book on systems programming I am writing. The source is available on request, with the usual provisos regarding material in manuscript form. I am advised to include a disclaimer because there are unreasonable people out there. "I make no warranty with respect to this manual, or the program it describes, and disclaim any implied/explicit suggestions of usefulness for any particular purpose. Use this program only if you are willing to assume all risks, and damages, if any, arising as a result, even if it is caused by negligence or other fault." On the other hand, I know of no bug in this version (>= 04/02/87). However, I would be very surprised (and would ride on clouds for ever) if no bugs are discovered by others. Many thanks to: Jwahar R. Bammi for all the help with TOS calls, and demanding that Gulam be a 'reasonably full fledged' shell; David Conroy for writing a 'small is beautiful' microEmacs; Henry Spencer for the regexp(3) package that is now built into Gulam; David Beckmeyer for his malloc() routines; AtariST for its value to price ratio. The program was developed using Megamax and Mark Williams C compilers. Gulam Manual Table of Contents Comments on the Present Implementation ................. 2 General Usage ....................................... 2 Lexical Conventions ................................. 2 Outline of Command Processing ......................... 3 alias .............................................. 3 Batch Files ......................................... 4 Buffers: Gulam Mini and Regular Buffers ................. 4 Builtin Commands .................................... 5 cd ................................................. 5 chmod [+-w] filenames ................................ 5 Command Line Editing ................................. 5 cp filenames target-dir .............................. 6 cp filename1 filename2 ............................... 6 $cwd also $CWD ....................................... 6 date ............................................... 6 df drivenames ....................................... 6 dm ................................................. 7 dir_cache dirc ...................................... 7 dirs ............................................... 7 Dollar-substitutions ............................... 7 Dotg.g ............................................. 7 echo ............................................... 7 ef ................................................. 7 egrep .............................................. 8 endif .............................................. 8 endfor ............................................. 8 $env_style ......................................... 8 exit [number] ....................................... 8 Expressions ........................................ 8 fg ................................................. 8 File Name Completion ................................. 9 Flags .............................................. 9 foreach ............................................ 9 format ............................................. 9 gem ................................................ 9 grep/egrep/fgrep re-pattern filenames ................ 10 gulam.g ............................................ 10 Gulam Variables and Environment ....................... 11 HELP ............................................... 13 help ............................................... 13 history [-h] ........................................ 13 History Substitutions ............................... 13 $home also $HOME ..................................... 13 if ................................................. 14 IO Redirection ...................................... 14 lpr filenames ....................................... 14 ls [-lRLF] filenames ................................. 14 mem ................................................ 15 Gulam Manual Metacharacter Expansion ............................. 15 mkdir names ......................................... 15 more ............................................... 15 mv filenames target-dir .............................. 15 mv filename1 filename2 ............................... 15 mson/msoff ......................................... 16 PATH ............................................... 16 peekw and pokew ...................................... 16 popd ............................................... 16 print filenames ..................................... 16 printenv ........................................... 17 $prompt ............................................ 17 pushd [dir] ......................................... 17 pwd ................................................ 17 Query Search/Replace ................................ 17 Regular Expressions ................................. 18 rehash ............................................. 19 ren fnm1 fnm2 ........................................ 19 rm filenames ........................................ 19 set [name value] ..................................... 20 setenv ............................................. 20 source file-name .................................... 20 status ............................................. 20 Strings ............................................ 20 sx ................................................. 21 te/teexit .......................................... 21 Tenex File Name Completion ............................ 21 time [command] ...................................... 21 touch fnms .......................................... 22 ue [-r] [fnms] ....................................... 22 uekb redefine microEmacs keybindings .................. 22 unalias [aliassed-name] ............................. 25 unset [var-name] .................................... 25 unsetenv [env-var] .................................. 25 variables .......................................... 25 which .............................................. 26 while .............................................. 26 Comments on Gulam Manual 2 >> Comments on the Present Implementation << The present implementation (dated 03/31/87) is incomplete. However, I find it eminently useable, and indeed use it all the time, in preference to other shells. I am at a stage where I feel further effort in this program should be predicated on how useful other people find this program; so, please tell me both the good and bad things about it. Here are some features that I find unsatisfactory. Control structures are quite ad-hoc, and incomplete. I had a tough time in decreeing that the typical "+-*/()[]{}" are not delimiters; but that decision made Gulam smaller. Here are some things that I hope to add in the months to come: Procedures (with call by name?), keyboard macros available everywhere, and local editing of remote files (this is the real reason why rx/sx are built-in) with transparent transfer of portions of the file. There are a couple of people here who are thinking if they have the time to port this program to Unix and MS-DOS; I think it will be quite routine. >> General Usage << The syntactic details of individual commands, and the sepcific rules that are followed in evaluating them are given later. This section is an overview of how the integration of ue with a shell is used. The moment you enter Gulam, you are in a ue-buffer called >mini<. Thus, all the typical ue text-editing functions are available, except commands such as Visit-file, Switch-to-buffer, etc. The -return- key causes the entire line (on which the return is typed) to be evaluated. The output, if any, of the command you issued appears on the screen but does not enter any ue-buffer. The built-in command "ue" (without any arguments) takes you into the special ue-buffer named >gulam<; the output of (built-in) commands issued while you are in >gulam< does enter that buffer, which can be freely edited. The command "ue " will read-in each of the named files into their ue-buffers. From within "ue", you can Switch-to-Gulam-buffer (whose default binding is ESC-g). To conserve/manage memory, we release all uE buffers when uE is exited in the usual way (i.e., UNDO, or ^X-^C); exiting temporarily via the ^Z does not release memory. Lexical Conventions Gulam Manual 3 >> Lexical Conventions << All input to Gulam is case-sensitive; on the other hand, TOS file names are case-independent. The evaluation of the command line begins by dividing it into -words- and -subwords-. The word-delimiters are: space tab return line-feed (the so-called white chars) single-quote double-quote semicolon vertical-bar Note that +-*=/()[]{} etc. are *not* word-delimiters. A word is either (1) a sequence of chars not containing any word-delimiters, (2) a string of arbitrary chars enclosed in single/double-quotes, (3) a semicolon, or (4) a vertical-bar. Eg, the lines below date 01-22-87-22:08:34 #sets the TOS and ikbd date and time alias cl 'mmcc e:\gulam\$1.c; cp e:\gulam\$1.o .; linkmm l.lnk' if {$x + $y ==23 } if { -e $1.c } would be divided into the words (shown between slashes) /date/01-22-87-22:08:34/#sets/the/TOS/and/ikbd/date/and/time/ /alias/cl/'mmcc e:\gulam\$1.c; cp e:\gulam\$1.o .; linkmm l.lnk'/ /if/{$x/+/$y/==23/}/ /if/{/-e/$1.c/}/ Comments begin with a word whose first char is #, and end at the end of line. A # embedded in the middle of a word does not begin a comment. The subword-delimiters are the chars in "!@#$%^&-=+`~{}:;'"\|,.<>/" >> Outline of Command Processing << The command line is string pre-processed as described below before invoking it as a command. (1) History substitutions occur first; (2) Dollar substitutions, wiggle expansion, meta expansions occur second; (3) Split the resulting line into semi-colon separated commands, (4) For each command, alias expand it, and dollar-substitute; (5) Execute each resulting command. alias Gulam Manual 4 >> alias << The 'alias' built-in command works almost like a shell file but one that is stored in the internal data structures of Gulam. It often just specifies a shorter or different name for a command. alias cc c:\megamax\mmcc.ttp #1 unalias cc #2 alias cl 'mmcc e:\gulam\$1.c; cp e:\gulam\$1.o .; linkmm l.lnk' #3 alias r 'echo $1.c $1.o; r' #4 alias #5 alias g 'echo $3 $1' #6 alias cg 'f:\cc.ttp -c -V -Ie:\gulam -DMWC e:\gulam\$1.c' #7 Alias without args (see #5) lists all the aliases that are currently defined. The command unalias (see 2) removes the def of an alias. Line 4 shows a recursive def; try it out! If we invoke g as in 'g a b c d e f' this is equivalent to 'echo c a d e f'; i.e., all arguments above the highest that was used in a $-substitution are appended to the resulting command string before executing it. >> Batch Files << A batch file, also called a shell file, is a text file containing Gulam commands, both internal and external. Such files must have the extension `.g' for them to be recognized as commands. See the section on gulam.g for an example shell file. In processing these files Gulam uses uE buffers. So, if you have `ue' as a command in a batch file, and then exit uE with either UNDO or ^X-^C, all the buffers (including the one holding the batch file) will be released, and Gulam will surely crash. So, do NOT include ue as a command in a shell file. >> Buffers: Gulam Mini and Regular Buffers << Once you invoke Gulam, you are always in one of the microEmacs `buffers' which are reservoirs of text. In this program, a typical line-oriented command shell is integrated with microEmacs. This necessitated two special kinds of buffers, named >gulam< and >mini<, along with the regular buffers. Right after you invoke gulam, you are in >mini<, and each line you type is taken as a Gulam command, and executed. Any output produced by such a command is displayed on the screen but not entered into any microEmacs buffer. Should you desire to capture such output into a buffer, enter the >gulam< buffer by typing `ue' without any arguments. If you are editing in a regular buffer elsewhere in microEmacs, pressing ESC-g (see uekb below for switch-to-Gulam-buffer) will get you into >gulam<. Buffers: Gulam Gulam Manual 5 While you are in >gulam<, the RETURN key behaves as it does in >mini<. All command input, including giving the names of buffers within ue, takes place in >mini<. The window for this buffer is always at the bottom of screen, and usually only one-line high. (Some of you may want to experiment with ^X-^Z and ^X-z.) You enter the >mini< either because (A) you are outside the normal microEmacs, or (B) a command such as Switch-to-buffer wants to read your input. The >mini< is like any other buffer except for the bindings of a few keys, and the disallowing of ue functions that change/switch buffers/windows/files. One of these exceptional keys (in >mini<) is the RETURN key: it will submit the entire line -- even if the cursor was somewhere in the middle of the line-- to the shell (case A), or to such ue commands as Visit-File (case B). Until you press RETURN, you can edit not only that line but others in >mini< just as you would in regular buffers. Note that unless you occasionally exit microEmacs with ^X-^C or UNDO, both >gulam< and >mini< buffers will keep growing, and you may run out of memory. >> Builtin Commands << A command executed directly by the shell is called a built-in command. The 61 built-in commands of Gulam are: alias dirc exit history msoff pwd source unalias cd dirs fg if mv rehash sx unset chmod echo fgrep lpr peekw ren te unsetenv copy egrep foreach ls pokew rm teexit which cp ef format mem popd rmdir time while date endfor gem mkdir print rx touch df endif grep more printenv set ue dm endwhile help mson pushd setenv uekb >> cd << The cd command changes the current working directory; it also sets the shell variable named cwd, the environment variable named CWD. If cd was given noarguments, it is equivalent to cd $home. >> chmod [+-w] filenames << The chmod changes the read/write attributes of the files: +w makes them read-write, and -w makes them read-only. Command Line Gulam Manual 6 >> Command Line Editing << Full microEmacs editing is available while typing the command. Thus, you can transopse chars by ^T, and go to the beginning of the line by ^A, and ^yank in a perviously deleted word, etc. In addition to these, there are three convenience features. After typing the first few chars of a file name, if you press the key marked INSERT, Gulam will attempt to complete the file name; pressing CLR/HOME will show all possible completions. Secondly, if you type !n and then press INSERT, you will see that the history-expanded result is brought into the buffer, which can then be further edited if necessary. Thirdly, pressing the DownArrow key will cycle you through the previous commands. >> cp filenames target-dir << >> cp filename1 filename2 << Copies files. In the first form, any number of files may be copied into the destination directory; files in the target dir will have their original names. In the second form, only one file is copied, and the new one will be named filename2. cp fnm fnm # will exit with status -1 cp d1 dir2 # if d1 is a directory, this command will createa dir # named d1 in dir2, and copies all the files in d1 to to # dir2\d1 There is a `+t' option that gives the created target files the time and date of the source files. If you care about this, you may want to set up an alias as in: alias cp 'cp +t' >> $cwd also $CWD << The shell variable named cwd (and env var named CWD) holds the full path name of the current working directory. >> date << The date command, without arguments, prints the current date and time. With arguments, it sets the date and time. date 01-22-87-22:08:34 will set the date to Jan 22, 87 and time to 10:08:34 pm. df drivenames Gulam Manual 7 >> df drivenames << Df shows the free space on the asked for drive(s); e.g., 'df a c f' >> dm << -- drive map Gives a string of letters that stand for the installed drives. >> dir_cache dirc << To help do the Tenex file name completion efficiently, there is a cache of contents of directories. Dirc shows the names of these dirs, and how many bytes are used by their contents. Unless you did a 'set dir_cache 1', the dirc has nothing to show since the cache is flushed at the end of each command. Try Gulam with dir_cache set to 1. Note however that this cache is updated only by the 'ls' command; so even after you deleted some files, file name completion may still find those names. >> dirs << Gulam has an internal stack of directories whose content is printed by the dirs command. The built-in commands pushd, and popd are the only others that operate on this stack. >> Dollar-substitutions << The subword $x in a command is substituted by the value of it. If x is the name of a shell var, or an environment var, then $x is the value of that variable. If x is an unsigned number, it stands for the x-th argument; thus, $0 usually gives the command name. $* stands for the text of the entire command; $- stands for words $1 to dollar-last; $< stands for the on-demand input given by the user. >> Dotg.g << -- see Batch Files, and gulam.g >> echo << The echo command prints its arguments. ef Gulam Manual 8 >> ef << -- see if (stands for elseif) >> egrep << -- see grep >> endif << -- see if >> endfor << -- see foreach >> $env_style << This shell var controls the format of the environment string supplied to the external command invoked through Gulam. set env_style bm # to get a style of env string a la Beckmeyer set env_style mw # Mark Williams set env_style gu # the "normal" style, a la Unix >> exit [number] << The exit built-in command is used to force termination of a shell script >> Expressions << An atomic exp is either a number, a filename, a file predicate, a '{ exp }', or '! atomic exp'. A file predicate on a file name fnm is of the form '-c fnm' where c is in {e, f, d, h, v, m}. These letters stand for exists, is-a-regular-file, is-a-dir, is-a-hidden-file, is-a-volume-label, and is-an-archived-file. A filepred yields 1 if it is true, 0 otherwise. An arithmetic expression is constructed using the operators +-/%* All these are of equal precedence and evaluated left-to-right; thus, 2 + 4 / 2 is equal to 3. However, the braces raise the precedence of the ops within them; thus, 2 + { 6 / 2 } is equal to 5. An exp with no operators, i.e., an atom, is a special case because we want the string form of the atom (e.g., as for "blah" in "set s blah"). A non-numeric string yields 0 as its numeric value in an arith exp. A relational expression is of the form `arithexp relation arithexp', where relation is any one of <=, <, ==, !=, >, or >=. Such a relation yields a 1 if it holds, 0 otherwise. (Relational operators among strings are not implemented yet.) You may combine expressions using the boolean operators && and || (which are not, for now, short-circuit evaluated). Note the spaces in the examples above; see Lexical Structure. fg Gulam Manual 9 >> fg << Fg is part of the simulation of what we were used to doing on Unix with GNU-Emacs: get out of it by stopping GNU (^Z in ue/Gulam), do a few shell commands and get back in by fg (works the same in ue/Gulam). >> File Name Completion << -- see Tenex ... >> Flags << Most commands (built-in or external) take flags to alter the behavior of the command in a minor way. The convention made popular by Unix shells is adopted here for Gulam's built-ins: a flag is of the form `-c', or `+c', where c stands for one character. The option '-i', which interrogates you for each of the operand of the command before executing it, is provided on most commands. >> foreach << The foreach command is used in shell scripts (but not at the terminal) to specify repetition of a sequence of commands while the value of a certain shell variable ranges through a specified list. The foreach command ends with an "enfdor" on a separate line all by itself. foreach i { a b c *.o [a-k]*[ch] } echo $i endfor >> format << This command formats diskettes, in the standard form (360K, or 720K) in either the A or B floppy drive. It does not touch hard-/ram-disks, no matter what arguments (illegal or not) you give it. Its valid arguments are either `a', `b', or both. The optional flag `-2' implies double-sided formatting; otherwise the diskette is formatted single-sided. format # does nothing format b # format the floppy in drive B, single-sided format -1 b # same as format b format -2 a # format the floppy in drive A, double-sided If you issue the wrong command (e.g., `format -2 a' on a single-sided drive), you will hear a lot of grinding noises; a control-C will kill this, but not right away. gem Gulam Manual 10 >> gem << The word "gem" is a prefix, like "time" is, to commands. This enables proper running via Gulam of most programs that use the desktop metaphor. It clears screen, turns cursor off, enables mouse and then executes the command, and after the command is finished it again clears screen, turns cursor on, disables mouse. The "time" and "gem" prefixes mix in either order, and the command name will be searched for in the usual way. We do not know, for sure, if all desktop/window/mouse oriented programs can be run properly with this command prefix. So experiment, and be ready to hit the reset button before using the prefix. Dvi is an example of a command that needs to be run with `gem' prefix. And you may be tempted to do the following. alias dvi 'gem dvi' # recurses infinitely alias dzz dvi # dzz or whatever alias dvi 'gem dzz' # will work alias dvi 'gem c:\bin\dvi.prg' # also will work >> grep/egrep/fgrep re-pattern filenames << The grep command searches through a list of argument files for a specified string. Thus grep lex[aw] e:\gulam\*.c will print each line in the files that contains a substring matching lex[aw]. Grep stands for `globally find regular expression matches and print'. Grep and egrep are one and the same. The first argument to egrep is a regular expression, and the rest are expected to be file names. Fgrep's first argument is the as-is string to be searched for in the files. Because of the preprocessing done by Gulam, the as-is string for fgrep or the regular exp for egrep is generally enclosed in single-quotes. >> gulam.g << Files with the .g extension are expected to contain Gulam commands; gulam.g is the name of the startup file. Gulam attempts to find this file in the current directory, and if found executes its contents. Here is an example file: gulam.g Gulam Manual 11 # bgn of my gulam.g set prompt '$ncmd $cwd gu > $u' set histfile e:\history.g set baud_rate 9600 set sz_rs232_buffer 4096 set rgb '005-707-070-075-' # set the palette; note the trailing '-' # the following sets tabs on Epson MX-80 set pr_bof '^Q033^QD^Q010^Q020^Q030^Q040^Q050^Q060^Q070^Q033^QC^Q102' set pr_eof '^Q214' set pr_eop '^Q214^Qn' set pr_eol '^Qr^Qn' setenv PATH c:\bin,d:\bin,f: # no trailing back slashes rehash setenv TEMP f:\ alias h history alias ll ls -lF alias p more alias rm rm -i # asks before deleting alias ug 'ue e:\gulam\$1.c' alias cg 'f:\cc.ttp -c -V -O -Ie:\gulam -Ie:\ue -DMWC e:\gulam\$1.c' alias cpall 'cp e:\ue\*.o e:\gulam*.o f:\ ' alias bk 'cp e:\ue\*.[ch] e:\gulam\*.[ch] e:\gulam\mwc.s a:\ ' # end of my gulam.g Gulam Variables Gulam Manual 12 >> Gulam Variables and Environment << The following shell variables cause/control useful effects. The format of the explanation is `variable_name: default-value; meaning'. batch_max_nesting: 20; if you need to nest batch file execution at levels deeper than this, change this variable. batch_echo: 0; if 1 echoes each cmd of the batch file as it is executed. baud_rate:none; for use in the terminal emulator, rx/sx file transfers. cwd:CWD: full pathname of current directory; gets re-set every time a cd, pushd or popd is executed. dir_cache: 0; (if non-0, turns on the dir list cache) home,HOME: full pathname set GG g set tcdir $GG:\tc set texdir e:\tex set ctexdir g:\ctex set drawdir h:\easydraw set gnucdir f:\gnuc set psdir i:\ps set prtfoliodir e:\prtfolio #set show_mem 1 set dir_cache 1 set verbosity 2 set prompt '$ncmd $cwd 257' set prompt_tail ' ' set baud_rate 19200 set sz_rs232_buffer 4096 set sx_remote_cmd 'rz -a' set rx_remote_cmd 'sz -X' set gulam_help_file c:\bin\gulam.hlp #set histfile e:\history.g set history 20 # the following sets tabs on Epson MX-80 #set pr_bof '033D010020030040050060070033C102' #set pr_eof '214' #set pr_eop '214n' #set pr_eol 'rn' # the following sets Atari SLM 804 #set pr_bof '033D010020030040050060070033C102' set pr_eof '014' #set pr_eop '014' #set pr_eol 'rn' setenv PATH c:,c:\bin,d:\lattic,e:\sound,h:\wordplus setenv TRB c:\bin setenv TEMP e: setenv SUFF .prg,.tos,.ttp #setenv LIBPATH g:,d:\mwc\lib,d:\mwc\bin setenv TMPDIR g: #setenv INCDIR d:\mwc\include #setenv TIMEZONE CST:0:CDT setenv HELPDIR d:\rbhelp setenv HELPFILE 'gnutex;msdos' setenv MYINPUTS g:\metafont #alias cc 'f:\cc.ttp -V -DMWC -c -Ic:\gulam -Ic:\bin\emacs' #alias li 'f:\cc.ttp -V *.o -lgu -lue -o a.prg' #alias ldlib 'cp d:\mwc\lib\*.* d:\mwc\bin\cc.ttp g:\ ' alias ngu 'ue c:\gulam.g' alias clear 'echo %033E%c' alias c clear alias m 'pushd $texdir; gem menu+; popd' alias dfall 'df c d e f g h i' alias since 'time myfind -a$1 -r c:\ d:\ e:\ f:\ g:\ h:\ i:\' alias prtfoljb '$texdir\prtfoljb' alias frmtex '$texdir\frmtex -n' alias frmtexp '$texdir\frmtex -n -r37 -i0' alias touml '$texdir\touml -r78' alias backpr '$texdir\backpr -i5' alias dvitty 'echo "dvi2tty";$texdir\dvi2tty -o t $texdir\dvi\$1; echo "touml";touml -c t;echo "Ready for printing"' alias dvi2tty '$texdir\dvi2tty' alias sda 'myfind -t -i -r $1 $cwd' alias myhelp 'd:\rbhelp\help' alias gnutex 'h:\gnutex\gnutex -l' alias todiss 'pushd $texdir\input\diss' alias todraw 'pushd $drawdir$1' alias draw 'pushd $drawdir; gem easydraw; popd' alias gemtex '$drawdir\gemtex' alias tops 'pushd $psdir; gem uscript; popd' alias topsp 'a2ps $1 >$psdir\t.ps;pushd $psdir;gem uscript t.ps;Rm t.ps;popd' alias tosound 'pushd e:\sound$1' alias tosoundm 'pushd $GG:\soundm$1' alias toprocess 'pushd $GG:\process$1' alias toanalyze 'pushd $GG:\analyze$1' alias tobin 'pushd c:\bin$1' alias tolattic 'pushd d:\lattic\w$1' #alias tomwc 'pushd d:\mwc$1' #alias tosrc 'pushd e:\src$1' alias tovideo 'pushd e:\video$1' alias totex 'pushd $texdir$1' alias toctex 'pushd $ctexdir$1' alias totmp 'pushd e:\tmp$1' alias totc 'pushd $tcdir$1' alias tcc 'pushd $tcdir; gem tc; popd' alias tohelios 'pushd i:\helios' alias tofolio 'pushd $prtfoliodir$1;d' alias tofolio1 'pushd $prtfoliodir$1;d1' alias sig 'pushd i:\helios\home\duenki\signal' alias bye exit alias f01 'gem e:\filt\filt01' alias f02 'gem e:\filt\filt02' alias f03 'gem e:\filt\filt03' alias fcnv 'gem e:\filt\soundflt' alias m30 'gem e:\filt\max300' alias uni 'pushd c:\bin; gem c:\bin\uniterm;popd' alias uw 'pushd $GG:\uw; gem uw.prg;popd' alias soundm 'pushd e:\sound; gem soundm.prg; popd' #alias txc 'rm *.aux *.log *.dvi' alias emacs 'c:\bin\emacs.ttp @c:\emacs.rc $1' alias emacst 'c:\bin\emacs.ttp @c:\emacst.rc $1' alias wp 'gem c:\wordplus\wordplus $1' alias hdscan 'gem hdscan13' alias dir 'ls' alias t 'cat' alias d+ pushd alias d- popd alias h history alias p more alias rm 'rm -i' alias Rm rm alias ll 'ls -lF' alias ls 'ls -F' alias dir 'ls -F' alias cp 'cp +t' alias menu 'pushd e:\tex; gem menu+; popd' alias make 'd:\lattic\make -f $1.mak' alias assems 'd:\lattic\assem from $1.s to $1.o opt j' alias arxx 'd:\clink\arxx' #kb -r 081 44 #kb -r 083 42 #kb -r 084 2c #kb -r 089 3e #kb -r 08a 0d #kb -r 08c 55 #kb -r 08e 54 #kb -r 143 0e #kb -r 15a 62 #kb -r 220 30 #kb -r 252 2f #kb -g 081 44 #kb -g 083 42 #kb -g 084 2c #kb -g 089 3e #kb -g 08a 0d #kb -g 08c 55 #kb -g 08e 54 #kb -g 143 0e #kb -g 15a 62 #kb -g 220 30 #kb -g 252 2f #kb -m 081 44 #kb -m 083 42 #kb -m 084 2c #kb -m 089 3e #kb -m 08a 0d #kb -m 143 0e #kb -m 15a 62 #kb -m 220 30 #kb -m 252 2f rehash gulam.hlp -- help file for Gulam #1 keycode (in hex) to keyname (rest of line) table 000 NUL 029 ) 05d ] 07d } 07f DEL 081 F1 082 F2 083 F3 084 F4 085 F5 086 F6 087 F7 088 F8 089 F9 08a F10 08b HELP 08c UNDO 08d INSERT 08e HOME 0ab SHIFT-HELP 0b0 K0 0b1 K1 0b2 K2 0b3 K3 0b4 K4 0b5 K5 0b6 K6 0b7 K7 0b8 K8 0b9 K9 0bb UPARRO 0bc DNARRO 0bd LTARRO 0be RTARRO 0c0 KLP 0c1 KRP 0c2 KSTAR 0c3 KPLUS 0c4 KENTER 0c5 KMINUS 0c6 KDOT 0c7 KSLASH 140 C-@ 141 C-A 142 C-B 143 C-C 144 C-D 145 C-E 146 C-F 147 C-G 148 C-H 149 TAB 14a LFD 14b C-K 14c C-L 14d RET 14e C-N 14f C-O 150 C-P 151 C-Q 152 C-R 153 C-S 154 C-T 156 C-V 157 C-W 159 C-Y 15a C-Z 15f C-_ 220 ESC SPC 221 ESC ! 225 ESC % 22e ESC . 23c ESC < 23e ESC > 242 ESC B 243 ESC C 244 ESC D 246 ESC F 247 ESC G 24c ESC L 252 ESC R 253 ESC S 255 ESC U 256 ESC V 257 ESC W 27f ESC DEL 346 ESC C-F 348 ESC C-H 35b ESC ESC 421 C-X ! 421 C-X ! 428 C-X ( 429 C-X ) 431 C-X 1 432 C-X 2 43d C-X = 442 C-X B 445 C-X E 446 C-X F 44b C-X K 44e C-X N 44f C-X O 450 C-X P 45a C-X Z 541 C-X C-A 542 C-X C-B 543 C-X C-C 546 C-X C-F 549 C-X TAB 54e C-X C-N 54f C-X C-O 550 C-X C-P 552 C-X C-R 553 C-X C-S 556 C-X C-V 557 C-X C-W 558 C-X C-X 55a C-X C-Z #2 function-code (hex) to function name etc 000 no-op 001 show-possible-expansions 002 expand-name 003 terminate-mini-buffer 004 file-name 005 expand-name-gulam-style 006 switch-to-gulam-buffer 007 execute-buffer 008 read-file 009 show-key-board-macro 00a terminal-emulator 00b move-window-up 00c move-window-dn 00d quick-exit 00e temporary-exit 00f gulam-forward-line 010 gulam-do-newline 011 goto-next-tab 012 save-buffers-kill-emacs 013 keyboard-quit 014 help 015 start-kbd-macro 016 end-kbd-macro 017 call-last-kbd-macro 018 no-op 019 redraw-display 01a backward-char 01b forward-char 01c backward-delete-char 01d delete-char 01e beginning-of-line 01f goto-end-of-line 020 kill-line 021 next-line 022 open-line 023 previous-line 024 insert-newline 025 newline-and-indent 026 goto-line 027 execute-one-Gulam-cmd 028 no-op 029 no-op 02a no-op 02b search-backward 02c search-forward 02d no-op 02e no-op 02f query-replace 030 set-mark-command 031 self-insert 032 recenter 033 quoted-insert 034 transpose-chars 035 copy-region-as-kill 036 kill-region 037 keys-reset 038 no-op 039 no-op 03a no-op 03b yank 03c no-op 03d find-file 03e save-buffer 03f write-file 040 no-op 041 delete-blank-lines 042 exchange-point-and-mark 043 what-cursor-position 044 next-window 045 previous-window 046 shrink-window 047 enlarge-window 048 no-op 049 delete-other-windows 04a split-window-vertically 04b ctrlx-four-hack 04c no-op 04d insert-buffer 04e switch-to-buffer 04f no-op 050 list-buffers 051 kill-buffer 052 save-some-buffers 053 no-op 054 end-of-buffer 055 beginning-of-buffer 056 no-op 057 no-op 058 no-op 059 just-one-space 05a backward-word 05b capitalize-word 05c kill-backward-word 05d kill-word 05e forward-word 05f downcase-word 060 upcase-word 061 scroll-up 062 scroll-down 063 no-op 064 no-op 065 no-op 066 no-op 067 no-op 068 no-op 069 no-op 06a no-op 06b blink-matching-paren-hack 06c no-op 06d no-op 06e describe-key-briefly 06f produce-wall-chart-describe-bindings 070 NUL # -eof- `&.&*o m$m,B"HJgP"&J$YJf"Jg< Af Rf Gf Vf =f Jg#LB "&J$YJf"Jf&f2B "LEHB2 r ggSJ"g fB*`B" ;#;.I+I/ #(L//SA?/ / Bg?<JNA Jf.?<?<N#D>N#?|BWN#D>N#XON ?N"?<LNANVH p\?/. Nl\O*@ fp:?/. Nl\O*@ f . S*@R /N"vXO> Go~?/ /.Np nBL N^NuNVH8*n(n p\? yhHhNl\O&@ g$R KB yhHh/ N"fPOB@`XNh&@B gJ/ / N"fPO/ N"vXOHЌS-@ n \gR np\R nB/ NXOpP?NTO-@Jg/ /.N"fPO/ NLXOp?/<hpP?HnN H /<2NLXO/./ N"fPO/.NXONB@ @gB@ @ g B@ @ fp`B@`pL8N^NuNVH8/.HnN"fPOHnN XO*y] gHnHmN"NPOJ@f yhS(f/9_/9hNPO#h y_!MB@-R-J@f/ /9_NPO`$(y` g_g lf/ `(l ` y_&P y_B@(H>0SGJ@g"yh kg&k` y_!K y_(p?/<(PNP\Op`*m `HnHnN"POBgBgBgBgHnN *@ g\B@-<0@fL0@g0@g. JyhfH?/ /9LN Jg0T@HѹfRye`p3hJ` g 09`3hL N^NuNVH0(yhJ f6-l / NɰXO> @g0`/.HlN"fPO,`,# L/<*/.NPO> Gf/<(NDXO*y` g6 mhf$ yh h *+@BmBBm -*m ` Ggp`B@L0N^NuNVH0*n>. y_:( y_(PN,p?p?NJXOJGg / N:XO` y_// NPO<Jyeg?9e/9f/ /<(ND y_1E y_ 0L0N^NuNV/Hn/<(NPO> @g0`HnN XOBgHnNf\O.N^NuNV/Hn/<(NPO> @g0` HnN XON0BHnNPO.N^NuNV/Hn/<(NPO> Gg0` HnNXO.N^NuNVH8*n(n B@-@g/<(N֪XO8 Df/ NXO8fBFB@H. m&Pg(0+:?Hk N4\O8JDfRF0T@Hހ&S`N:JDf8JEf4p??// /<) Nn/NP\O-/ NXOJDfp`B@L8N^NuNV/Hn/<)BNPO> @fRHnN XO @nHnNXOJfHn/9hNPO> @fHn yhHhN"fPO0.N^NuNVH0*nIB@-@fp`&Jg/ NXOJgN` / / NPOL0N^NuNV/9hN XON^NuNV/Hn/<)]NPO> @f0`2JGgHn`/<2 yhHhN"fPO/9hNXOp.N^NuNV/<;^/<;V/<;J/<)Nn/NXON^NuNV/9c.NXO/9c.NXOBc.N^NuNV/9^NXOB^N^NuNVH8/<*N`. (n<.?/N\OBA9)~B@AgBA9)B@Afvp??Hn/ N+P 8BA9)B@Af> Do8 g4p?p?/.NgPO&@ g/ NXO/ NXOBNLXO/.NXO`^B@L8N^NuNV/ *n/<2N&XO/ N&XO*_N^NuNV/Nv?<NTO-@g2 nB?928/< ?<HnN H > Gf nB ..N^NuNV/ N 8*@/<2N&XOp?/ N x\O*_N^NuNV/ N#gN@X*@p?/ Ni\O/ N XO/NXO*_N^NuNVH0*n?<NoTOJ@fB/ N*XO*@ g2Jg,/ NB XO mJg$NAx/NlXO(@N` / Nf XO L0N^NuNVH8*n>. gJf/ NXO`ZB^p!?/ N!\OJg$/ N9@XO(@g Bg/ NP\ON 6`(MJGg / N:XOBg/ N*&\O&@J^gN 6/ Nf `/<*xN`rXO:JEnz|/<*N`rXOJ@g N#gRF0En NJ@g/ Nf XO0D@H#` `/ N XO*@N NN 6J` g 09`?/<*Nn\O/NXOB` N g./<h/<`/ N> / NXON@X&@`4L8N^NuNVH8>.*n (nN yGf p?N"TON/N_XONh&@ g*/ /<1N`PO/ /<1N`PO/ NXOp/NnXO//<2$N`PO/<*/<2N`PO GgBg/<*NlXO/N x\OBg/<*NlXO/N x\Oz0SG @o^X M&PJEg,/<*/ N"NPOJ@gBg/ NlXO/N x\O`JEgzNe-@`p?/ /.Ng* `JEf.Jg(Bg/.Nf\O&@Bg/ N x\O/.NXO09`?N"TONp3GNBNXN Bg/<*NlXO/N x\OBg/<*NlXO/N x\ONg 0Gp`L0N^NuNVN@~/NXON^NuNV/ B^p.?/.N!\O*@ g4/<-|/ N"NPOJ@f /./. /.N H#` `0N/./. /.BgpK?NA#` NN*_N^NuNVH0BgN^TO(@/<-N`N4J@g ?NJ`p?BgNXO @gB@`v/<-N&XON/<-N` GgJGg/ NXONJ@g/<2NLXOL8N^NuNVH N@~*@ -g|`$-B@ @mfp`B@ @gfp`B@<N@~*@N@~// ?N L N^NuNVH >.*n H @>fj~Byf ->f Rp3fJ-gF0H @f/NXOHmHmNjPOHmNlXO2H Af ~0`H @-0SGJ@o/ N"vXO:B@< F{fRC` F}fSCJCf/ ?NT\O`p8 DlSm`PJng F-g F+f / N$XO`Jn g/ / NjPOR(@`d?/ / Np 0R@0R@`XB :/ NB XON>L8N^NuNVH8p>?/</Nn\O/NXONe&@ gT*|+Jgp?// Ng* `Bgp?/+NgPO(@/ NXO/ NXO/ Nf XOL8N^NuNVH0B` B^Bc.p?/<2/<b.Nd| p?/<2/<fNd| N@~(@/ N"vXO>| Gn,*|+Jg"B@-Gg `// N"NPO<JFnB@-:0@>EJFf~ EfxN4J@gx Eg2 Egp?`BgJFf0@fp?`BgNXON@~(@JFf" E f/-/ NPO`&/ mNXO`Bg/ N\O~` y*gJGf/</)N`rXOJ@fNGL0N^NuNVH0/.N"vXOHV@?NTO*@(@ f `Rp^ nRg:B@ @*fp.`$B@ @.g B@ @+fp\`B@ @?f~.B@`p$B L0N^NuNVH8~(n *@ fB@`|/. NXO&@ g/ N~.XO-@/ NXOJg6Jg2/ /.NPO @fRGJngg`/ N"vXOR@`JngB/.NXO0L8N^NuNVH0*nJy/8g$By/8Bg/</>/<LNd| B9LIR LB@0@LJfJg `BL0N^NuNVH0*n(n >. fB@`/ N"vXO<JGg0Fp*0R@0@Bp?/ / Nb :0FB Ef JGf/ NXOJg/ / N"fPO`z EotJGgp0Fp*x0DBA0DB@AfRD`0R@6Dm0R@0@2CSC`0D2DRF0DJgBg/ / Nb Eg0S@0@B0L0N^NuNVH8*n/<;/ NkPO&@ gV+Jg B@ @\fHk/ N"fPO`0B@ @.f$Bp\?/ Nl\O(@ gHk/ `p\`R*K`L8N^NuNVH8/.NlXO*@ g/ N"vXO> GfB/</E/ N"NPOJ@g:/</J/ N"NPOJ@g$/</O/ N"NPOJ@g GoZp:?HmN!\O(@ gS`./<;/ NkPO(@ f/<;/ NkPO(@ gR g/ / N"fPO`Jg6 -:f. -\gB-Hm/<;&M /Nkh *@/ `j ~glNh(@ g`/ N"vXOHЌS&@ \fB \fB,Hm/ N"fPO&M //<;/ Nkh *@/ NXO/ NXO/ NfXOJ-f(/<2/<;(M /Nkh *@/ NXO L8N^NuNVH8*nB^Bc.B` fB`zp\?/ Nl\O(@ gRNh&@B/ NXOJ` fJ^f p?NGTOp\ g/ NXO/ NXOK` p?NGTOB^ L8N^NuNVH8*n(M /NXO*@/ NXOp\?/ Nl\O(@ gnB/ NlXO&@Bg/ N*&\O-@ n hf nJfp\`(/ /<; n/(Nkh &@/ NXO*K/.Nf XO L8N^NuNVH0*nNBH/ NlXO-@gp ?/.N!\O-@g nBBgp?HnHnN+P >(n gd Go.p\?/ Nl\O(@ gR`(n/./ N"fPO(n/ N"vXO @Oo/ /</TNDPOB,O/ / N"fPO/.NXO/.NXONB0L0N^NuNVH8*n(n /<2/<;/ Nkh &@/ NXO"/9c./ NiPO-@/ NXO/9c.NXOBc.0S@>Bg/./ Nih /.Nf XO0S@<Fl>RG0HЭ(@/ N"vXO@NJ@f/ NK.XOJ@g/ / N!PO`L8N^NuNVH0*nNe(@ g,p?/ / Ng* / NK.XOJ@g / / N!PO L0N^NuNVH8*n(n Ne&@ g>--m0SGJ@g/</4/ N"NPOJ@g/.NK.XOJ@gz/<2/<;/.Nkh -@/.NXO"p?/ /9c.Nb /9c./.NiPO-@/.NXO/9c.NXOBc.`B`/.N"XO-@Bg/./ Nih /.Nf XO/.N"vXOR@ n-H`/ Nf XO L8N^NuNVH8*n g/ NXOJgp\?/ Nl\O(@ g$BHl/ N$JXO/N#PO&@p\`/ NXO(@ g4p?/ /9c.Nb <B/9c./ NiPO&@B@/9c.NXOBc.`f/</4/ NkPO(@ g4f*|/b`B@$ @\g g2B/ N"XO&@B@`XNe&@p?/ / Ng* L8N^NuNVH0*nN@X"p?NTO(@ g()y/:#/:L0N^NuNV/ *y/: g#/:/Nf XO/ NXO*_N^NuNVH8*n/</dN` Ne&@N@~*@ gJg|B@ |&.2<`XHXW PN`HnN&bXO*@ n0nl n0`z|/ NlXO(@/ / NjPONBHBg/ N*&\O-@Bg/.Nf\O*@2f n*h/.NXONB`/ N%`/ NlXO*@JFg&(M/</y/ /</wNkh *@/ NXOBg/ / Ng* / NXO` g*k gNBH/<h/<`/ N> N@~*@ gJg 'g "g/ NXOJf/</4/ NkPOJgb/ N$JXO-@Jg nJhg nJf/ /</{NnPO n `Bg/./.Nih /.Nf XOp?/ /.Ng* `BNB/ Nf XONBL8N^NuNVH *n>. BBn/<h/<`/ N> / NXONe-@N@~*@ g$Jg #gHnHn/ /.N'`JGg(J/:g Rn0.? y/://.Nih N@X/Nf XOJ^f#^ .L N^NuNVH8*n fB`B&m /N^.XO(@g*/ N%pXOp?/ NlXO/N*&\O*@N% L8N^NuNVH8>.<. n BJg nJfB@`"/<h/<` n/N> N@X-@ n0(S@? n/(Nf\O*@/ N"vXOR@=@/ NlXO(@B nSh n0.P !f/ N9@XO(@z`Ne-@HnHn/ /.N' n:( Eg"n n `/ NXO n(hJGg / N LXO(@/ N"vXO@?NTO&@/ / N"fPO/ NXO(K/ NXO*@?/ /9c.Nb :JFg, Ef&/ NK.XOJ@g/<;`/<// N"8PO n c.Bc./.NXOp?/ /.Ng* / NXO n0S@=@K dp`Bp?Hn/.Ng* Bg/.Nf\O&@ KB/.NXO n/NXO n 0L8N^NuNVNh#c.N^NuNV/ Nh*@/ /</N`PO/ NXO*_N^NuNV/ N@~*@Jf/</N`JGn/ /</NnPO#^`/ /.?p??NA &JEg.Bg/ p Fg?p>?NAXOѹ` J9g(g Bg?HnpW?NA Hn/ N8PO?p>?NAXOѹ` / N XOJ` f y"Mf / N0XO/ NXO/ NXOL8N^NuNVH0*n/ N"vXOT@?NTO(@#M f p#` `./ / N"fPO/ N"vXOS@ \gR Lp\R LBL0N^NuNVH8*nJ` f/ NK.XO>Jg -:f T` &@p\?/ Nl\O(@ f ` R(@/<2/ /9MNkh &@JGgJ9bfJ9bg/ / N4tPO`Bg/ / N1 / NXOL8N^NuNVH8(yMЗ/. p9?NA\O/.N"vXOHЮS*@ \f <2` <;*@/<// /.Nkh *@/ N$JXO&@/ NXO gJ*k gB/. N3RXOJg$NJ@f/ N3XO/ N"vXOR@`/9MNXO/ Nf XO#MJ` f y"Mf/.p:?NA\O#` L8N^NuNVH8RyM09M @"f </` </&@N@(@/ NK.XOJ@g*/ N3RXO/<3/ NPO/9MNXO`n|BN@~*@Jg-MRF`JFf #/^ Fo/ /</NnPO#^`&/./ NTPO @fBg/ /.N1 ByML8N^NuNV3!MN5tN^NuNV/ *np?/<2/ N1 *_N^NuNVH /<0.N`rXO83MJDn p83M*yM0H?NTO#MJMf #M` gyMm <9Mz` <09MD:>Dl0RGH @MB`>9MEo SF0H @MSG0H"@ `>JGoSG0H @/NXO`/ NXOyMl3M`ByMByML N^NuNVH8*n(n / N"vXO<09MS@>JGm(0H @M&P?/ / N" J@gSG`#0^&|2/<2/ / Nkh L8N^NuNVH8>.*n (n0yMy0S@<JFmyMl0H @M&P`#0^&|2/ / / Nkh L8N^NuNVH8*n(n -fzR`z&L|B@> G0m G9n0 G@0<`SJEg 090F</ / ?N8 L8N^NuNV/09MRyM>yMfByM/<2/<2090G?N8 .N^NuNVH8JMg0/<d2/<e/.N> Ne&@|N@~*@ gJg/ NlXO*@ g 'g "g g|p!?/ N!\O(@ ghRFBR LH> G!fR // ?90N8 `* G0m G9o G-f / / N8` / / N7PO(@/ NXO*L`p?/ / Ng* / NXO`,JFf / Nf `$/.NXOBg/ Nf\O-@/ NXO .L8N^NuNVH0*nJMfN6(yM g09MyMlRyM`4/NXO~09MS@Go0H @0R@H"@ RG`/ NlXO29MSAH A Ry0ByM090R@H/NnXO//<2$N`POL0N^NuNVH8>.*yM g|zyMl0H @/N"vXO@RE`09MHFR@?NTO#c.(@ g090yM<zyMlJGgLRF0H/NnXO&@/<06/ N"fPOZ/ / N"vXO2 /0H /N"fPOp 0H @// N"fPO2H A/N"vXO/<2/ N"fPOTRE`dL8N^NuNV/ N@~*@ g -f -hfBg`p?N;PTO*_N^NuNV/ /<0N`JGf& 'g "f / N=` Jg / N=RXO*@#MMB 9ML0N^NuNVH8*n(n &nJy0RgBy0Rp?/<0h/<c2Nd| p?/<0m/<aNd| p?/<0r/<`Nd| p?/<0{/<]Nd| p?/<0/<^Nd| p?/<0/<eNd| pe^]`ap?/<0/<hNd| p?/<2/<d2Nd| #M#Mhf <0@` <2#M f*|2M#M/90*@ gp?/ /90Jye4g0D@>0L0N^NuNVH0*n(n "m l0(i>JGf"m l0(i>Jye4g0D@>0L0N^NuNVH8 nf |--|2` |-|2pd?p?NdXO-@Jg .P`B-@J gPJgJ(n JgB-L-nJg n -HHn/.NePO-@/ N"vXOR@`Jg n0(`B@>*|C.Bye4JnoB@9b3e4J9bg*|Cd/ p?? nHhN!V /.N"vXO:0n R@?NTO(@-@ fB@`Jg?p ?NdXO`B-@ .P-@0SGJ@gl n /0H &@/ N"vXOR@8?/ / Np JEg?/.S /Np n/(/.NePO-@P`B/.NXOJg/. NXO`-n p#` n /.NXOJg n ` /.NXOL8N^NuNVH8p?NTO-@Ne(@Jg fB`p ?p ?NdXO-@p/?NATO&@K?90/<0pN?NAPOJfVJgF .fJ-g: -.g2p?Bg/ Nm\O// Ng* Hk/.NePO-@pO?NATOJgJlf #0^HnHl/./,?BgNC n n!n .L8N^NuNVH8*n(m/NXO&m g /Nf XO/+NXO/ NXO/ NXO L8N^NuNVH8*n g6(y` g,&L(l g/ /N"NPOJ@f g/ NFXO'@L8N^NuNV/ *y` g**m g/ NFXO*@`/9`NXOB`*_N^NuNVH8J`f N[#`Nh*@/ /9`NZPO&@ g Jng(k/ NXO`&/ NGHXONE(@/ / /9`N[r Bc. g8 T0R@>?NTO#c.Jc.g? T/(/9c.Np L8N^NuNVH8J`gvN@~*@ -fNG``Jg / NGHXO`P y`(h gB&l S>Jg"k k0@/?/<0Nn /NXO(l`L8N^NuNVH0*n/ N"vXOHЍS(@e \g`c ,\fS`B L0N^NuNVH8B/.NI$XO-@/.NXO&@(@ gxp\?/ Nl\O*@ gNHmNlXO(@ -:fRB*K gJf/.NXO-@?</.pN?NAPOJg/.N"vXO @n~ n (:fr n (\g nJ(f\ nB@?N/N!\OJg>p/?NATO-@ np@ nBB n1@ n1@` p/?NATO-@/.NXO``/ /9`NZPO-@g& n-h/ n P/(Nf4PO>JGm$ n-h n0HЮ &@-K/ NXO/ NXOJg np\ .L8N^NuNVH0*n/ NIlXO(@ gB@,?/ N\O @\fp`B@L0N^NuNVH8*nBBc.Ne(@ g JfBgNGTO 9c.-@*@BBA9bB@9bA:J9bgp ?p ?NdXO-@REB@9bt<Jg$/ NIlXO&@ f/ N"vXOR@` //.NePO-@HnB@+?NH\O/<0HnN"fPOHn/+NBPOHn?+N\OHn?+N\Op @B.BgHn/ Ng* Bg/ / Ng* ~JFgB@+?/ N\O2RG0A@JEf0RG0@p @0RG0@p @0RG0@B(?Hn/ Ng* `/.NXO*l>/ NXOJEf#c.`B/<c././ ?p?NC09]Sy]J@o0Jc.g(/9c.NlXO*@/p?NO\O/ NXOL8N^NuNVH8*nJg~`BgNGTO*yc.~/<2*N`rXO<B@9bt:JGfJEfJ9bf J9bgFNe-@JgpJ9bgp ?p ?NdXO`B-@(MB.B.JgJGgJFg / NXO` &@/ NIlXO-@gnBg/ /.Ng* JEg& nB@(?/ N\O@ . fB.p?Hn/.Ng* .//.NePO-@g / NXO/ N"vXOR@`FJGf / NXOB nHh/. n/( n?p?NC n*h/.NXOBgp?/ NgPO#c.09]Sy]J@o / BgNO\O/ NXOL8N^NuNVH8>.*n g0(MN Jg"NJ@fJGg-p ?/ N!\O&@ gB/ NK.XO<JFg/<0/ N"NPOJ@g/<0/ N"NPOJ@gB^Nh-@/ NXOJ` fZJ^fRNh-@/./<0NnPO/NXO/.NXOJGg/<2NKp` /<2NMXO/.NXO/.NXOJGg p I`/ N"vXOR@`L8N^NuNV/ N@~*@Jgp`B@3]J9bg3]J9bg30J9bfJ9bzg / NKp`/ NMXOp130*_N^NuNVH *n>. JGmP0SGJ@gHNJ@gp#` RyN `,p?NATOJgH?p?NAXOH @ fNR`L N^NuNVH0*n(n / N`JGmZ#N/9NN"vXO3NNQ/<Sn?Np\O/<1!/<1NQPOJNg/9NNXOL N^NuNVByN/<S/<1#NPON^NuNVp3N/<S/<1)NPON^NuNVH0*nRyN/ /9MNPO @f/ N"vXOyN@?NTO(@ gv/9N/ N"fPO LNp 09NH/NnXO/09NR@HЌ/N"fPO/<1-/ N"8PO/ / N"8PO/ NXO/ NXOL0N^NuNVH *nBg/ p=?NAPO>JGl #10^`0#N/9NN"vXO3NByN/<T?Np\OL N^NuNVH8N@~/NlXO*@Jngj/ N"vXOHR@?NTO(@&@ gJp?/<1?HnNd| -MgH0@J(gp\H`B/.NXO*K gN/ N~.XO#M/ NXOJMf p#` `"/<UZ/<1INPO/9MNXOL8N^NuNVBgNUTON^NuNVp?NUTON^NuNV/ *nBg/ /<1ONnPO/NP\O*_N^NuNVH0>.*n / 0H @N/NZPO(@ g ,`BL0N^NuNVH8/. /<;/.Nkh &@/. NlXO(@ g< g8p.?/ Nl\O*@ gB/ / 09N$H @N/N[r L8N^NuNVH8*n .f J-fByN$09N$H @NJfN[29N$H AN Nh-@/ NXOJ^fJ` mBgNGTO(yc. gz/ N"vXOHЍS&@ \g`Bp?/<1f/ Nb >Jg$0SGJ@o/ / NW2PO/ N"vXOR@`/9c.NXOBc. gp\Jg/.NXO/.NXOB^B` L8N^NuNV/ Ne*@Bg?./9NN]\O// Ng* Bg/<1x/ Ng* Bg?./9N N]\O// Ng* g#c./ NXO*_N^NuNVH8N@~*@Jgn~ Gl0H @NJg0H @N/N[XO0RGH @NB`/<1N^`XO*@ gpp3N$/<d2/<^/ N> &@(k>+JGo(SG0?/ Nf\O*@ gJg/ NWXOSG` yN$f#N NBN L8N^NuNVH0*n g (n g(l g/ /N"NPOJ@f L0N^NuNVH8*n gL(n gD&L(l g/ /N"NPOJ@f g&'l/NXO/,NXO/ NXOL8N^NuNV/ JgJJ gDJg>/. /.N[POp ?NTO*@ g* +n n+h n!M*_N^NuNV/ p ?NTO*@ g p+@+@* *_N^NuNVH0*n g((m/NXO/-NXO/ NXO*L`L0N^NuNVH8*n fB`Ne&@ g n lp `p=@B.Jn fp`B@>(m g?// Ng* Jn gjBgHn/ Ng* n fp?/<2/ Ng* Bg/,/ Ng* n l Bg/<2` p?/<2/ Ng* (l`t L8N^NuNVH8*n?. / N\:\O(@ fB`4&lJn fBgp?/ NgPO&@/,NXO/ NXO L8N^NuNVH0N@~*@Jg`NA (@Jg>J1f N[#1/ NlXO// NlXO//91N[r `./ N^.XO/NlXO`p?/91N]\O#c.L0N^NuNVN@~//91N[PON^NuNVH0*n/ /91NZPO(@ g ,` L0N^NuNVH0*n/ /91NZPO(@ g ,`BL0N^NuNVH0*n(n J1f N[#1/ NlXO// NlXO//91N[r L0N^NuNV/>.JGgp`p> Gf$/<2/<2N`JPg0/ NlXO*@/ p?/ Nm\O/N^PO/ NXO0 @2:&P g N`RG`~L8N^NuNVH *n>. 0H/NnXO// N`POL N^NuNV/ N@~*@Jg"HnN@~/N4PO// N`PO`p?/92N]\O#c.*_N^NuNVN@~//92N[PON^NuNVH0*n>. Rye0Hѹf #fB@-@32`hJy2m` y2nVp ?/ N!\O(@ gBg>BHlNlXO// NlXO/092H @2/N[r p L0N^NuNVH p32/<1N`.<. p?0H/Nn\\OR*@/ 0H @2/NZPO(@ g ,` <2L0N^NuNV/ *n/<3N&XO/ N&XOp?NATOp?N"TO*_N^NuNVH0*n(n >.B@<g 0Fp`L0N^NuNVH8*n(n >.JGgp`p@GcB@`B@:g0Ep@`L8N^NuNVH >.<. JGoJFnB`(0P@?NTO*@ g:Bm0;@;@ L N^NuNVH8*n(n gv gr<0-mfF0-P@>0-G?NTO&@ gD?/ / Np / NXO*K0-m?/ 00@HhNp Rm L8N^NuNV/ p ?NTO*@ g:pd?NTO+@gpd;@BmBU mB( mB` / NXO *_N^NuNV/ *n g/-NXO/ NXO*_N^NuNVH0*n(n g0 g,~Jg&/ / N"NPOJ@f0`RG/ N"vXOR@`pL0N^NuNVH *n>. JGm f <2`RGSGgJg/ N"vXOR@` L N^NuNVH8*n>. gJGm 0-<Gn <2`2?/-Nf\O(@&@;GRG0Fl/ N"vXOp ` L8N^NuNVH8*n(n >. g gJGg~/ N"vXOU<0FmmB0@d?NTO&@ gd?/-/ Np /-NXO+K0@d;@&m g0/ /0Hї /N"fPO0F0@B0G:JGgRmL8N^NuNVH8JfB`Jn l8Bn B*nJg"/ N"vXO:no=ERn 0R@`Rn`-n09iU@H8JDnx0. DS@H60.T@ R@?NTO&@(@ gzzClr|Dl`0E>n lRJg0H @ `?/.Nf\O*@~gRG`p @0S@FoRG0nlp `RF`p p RE`B L8N^NuNVH8*n(n Ne&@ g: g6Jg2Bg/ / Ng* p?/ / Ng* / N"vXOR@` L8N^NuNVH8*n(n >. gP gL<,&lJGm@Gm< g8?/ Nf\O&@0RGFl"p?/ / Ng* / N"vXOR@`L8N^NuNVH0*n>. gTmnNJGoJ0S@?/-Nf\O(@/ N"vXOR@<" 0A:?0HЌ// Np SmUL0N^NuNVH0*n(n B@-> G0m2 G9n,~|JFg>R M 0e 9bBA0HA@>SF`JGg0@0@2B@>R8 L0N^NuNVH0*n(n g ggTB@ @"g B@ @'f@R Lg4BAB@Ag(B@ @fHn/ NjHPO(@0.B@`B`,/ N"vXO=@g0.R@?/ / Np L0N^NuNVH0JgFJ g@Jg:/.N"vXO8/. N"vXO6/.N"vXOCDR@?NTO`B*@-@Jg(nfS(n fS(nf .L0N^NuNVH0*n(n g> g:/ N"vXO>B@?/ N!\O*@ g?/ / N" J@gR`қ L0N^NuNVH0~*nJg(n JgBAB@Af`RGR`0L0N^NuNVH0*n g/ N"vXOR@?NTO`B(@ g / / N"fPO L0N^NuNVH0*n>. / N"vXOHЍS(@eB@Gf `S`BL0N^NuNVH0*n(M g4Jn g|azzx `|AzZxgBA0Ab B@EbB@` L0N^NuNV/ *np ?/ Nm|\O*_N^NuNVH *n>. | g -fv-R`v+g0H* GfHB@ @AeB@ @FbB@@H@B@H@*B@ @aeB@ @fbB@@H@B@H@*B@ @0eB@ @9bB@@H@B@H@*2H l/0H/N%POЅ,`bB@ @-f D, L N^NuNVH ..<. *|NF MSBz+Jlz- D.0H//N%tPO"@2 MS0H//N% PO.JnB@ @-fB@`R L N^NuNV/..p ?/Nn\\O.N^NuNVH0K (|NH nRB@>g G%g` nRB@>|0 |&F2<`XHXW PN`\FTFPF?0H/Nn\\O// N"fPO/ N"vXOT`\FTFPF?/Nn\XO// N"f / N"vXOX`V// N"fPO`p-@`B <NHL0N^NuNV/>."U0Hй;o#4^p`B@.N^NuNVH8B` B^-|LHnNbXO-@Jf p#` `2 .U.(n *@/ .HЇ/?.p??NA ,o Ќ&@p (M  gR`gJ , fB$z`"Bzp ?/ N!\O-@g p (nB ?/ n N\O0HЌ*@` Hm(//<4*NnPO#^ ?/ n N\O*K(nd`*n`6Jl#4Q^#` Jf$ ng#4a^B ?/ n N\O?.p>?NAXO/.N XOL8N^NuNVH8Jg/.N"vXOHЮ&@p *nddp ?/ N!\O(@ gPN< Ff.*n #@f/<fNbXO#_J_f p#` `p 3RBRByRB@3R3RByRB@3R3R3Rp3R|/<b"N!8XOJ@g#6^|`HNNp?p?p?p?Bgp?p?NN Grf / Nw`/ N{XO<p?p?p?p?p?p?p?NN/9_N XOJFf/9^NsXONJL8N^NuNV/ *n/ pr?Nr&\O*_N^NuNV/ *n/ ps?Nr&\O*_N^NuNVH *nJyRm?9Rp>?NAXOp3R~ Glp?p?p?NM\ORG`~ Glp?p?p?NM\ORG`BgN|TON@#^p#` B@L N^NuNVH8*np3R ns fBg/ p=?NAPO3R(|61`H?</ pN?NAPOJf/ /<6?NnPO/N֪XOJ@gBg/ p.N<FfRyRRyRByRyRR/9RN}XO09RHff:ByR/9_/9f?9Rp@?NA fg/<52NsXO`:N@p?p?p?NM\O`"RyR09R?p#?N}TXOp3RLN^NuNVHN3RN3RRyR09R?p?N}TXO09RyR @f09RR@@yRfL~<9R09R@Fo*N y_ y_BA0A@>RF`?Nu*TO`L09R@yRfN@p?p?p?NM\O`"RyR09R?p#?N}TXOp3RLN^NuNVH *npr?/ Nt,\OJ@fB@`ByRB@3R3RN@p?p?p?NM\O/<fN!8XOJ@g8RyR09R @dRyR09R?p0?N}TXO`/<5z`~ Gg~ yRgtByR?9RN|TON> Gg Gg Gf Gf /<4` GfNv yRfRyRN@p?p?p?NM\O`~ Gf yRd|p?p?p?NM\O69RH/9_09RH/?9Rp@?NA g/<52`>?9Rp>?NAXOBgN|TO/9R/<RH/<6uND p`/<5NsXOL N^NuNVHByR?9RN|TO/<fN!8XOJ@g> y(Rd"RyR09R?p0?N}TXON@`/<5zNsXO`RyR09R?p?N}TXOp?p?p?NM\O?9Rp?p?NM\O09RF@?p?p?NM\O?< 9_/09RHї /N$\O~:9R09R@Eo y_B@@RE`?p?p?NM\ON@RyRRyRN< FgRyR09R?p#?N}TXO Ff /<5` Fg yRe Ffp`B@LN^NuNV/ ByR?9RN|TO/<fN!8XOJ@g, y(Rd"RyR09R?p0?N}TXON@`p?p?p?NM\ORyRN @g yRfBgN|TO yRf <6` <6*@/9R/<RH/ ND *_N^NuNVH *nps?/ Nt,\OJ@fB@`p3R|ByR/<fN!8XOJ@g> y(Rd"RyR09R?p0?N}TXON@`/<5zNsXO`@?9RN|TONH @gH @g 0RF @(m|H @f/<5` F(m/<5`N@?9RN|TO/9_/9f?9Rp??NA <g yRgvJFl /<5V`R:0Hfl0RF0@_B`ByR09REl/9RN}XONx yRdzRRyRyR`?9Rp>?NAXOp3R yRe /<5`NzLpL N^NuNVH >.*n p7?/<4/<RHNp R|/ N"vXO< Fo|?/ /<RNp 0FRB/<RHN؊XOL N^NuNVH>.<. 0GRJ0H H@@00H <0GRI0H H@@00H <0GRH0H H@@0/<RHN؊XOLN^NuNVH ../NnXO*@/ N"vXO:pE<0RF0@RHfp RW/<RHN؊XOL N^NuNVH8Jf/<6NVXOB`D#Rp3RBR#RR?<NTOHnBgN\OJg Rm/<6`09R@Z?NTO*@ f /<6`~#Rp3RAX#R?<NTOHnBgN\OJgLB-PB-QBRBmVIY/ NXO @JflI flP` fR-Q0.@gF~ g6 f"HlN"vXOGmGHlN"vXO>/ NXO(@`+KR;GV L8N^NuNVH8 n p0Jng4 y Rm /<7 `*>9RRyR0@?NTO*@`HnNXO(@ g g/ / N@PO`*L0.@f n P0.@ n P yR |fRRHnNXO(@ g`Jng 0@?`BgNTO&@/ / N@PO(M g/ / NPO/ NXO(@`Jng yRRR )g /<7`. `4Jnf yRJg yR )f/<7#`/<70NVXOBL8N^NuNVH8 nBPp?NTO*@ yRJg` yR |gT yR )gHHnNXO&@ fB`F0.@ nP f0.@ nP` / / N@PO(K` fp ?NTO" L8N^NuNVH0HnNXO*@ fB` yRH @*g H @+gH @?g n0`0.@fH @?g/<7 yRB@<0R@Gl/<7aNVXOB`xFn?NTORG`RR`hBgNTO yR ]g/<7r`RR`Hnp?N\O*@ g0.@ nP` /<7`~/<7`t yRJf /<7``p?NTO*@ yRRRH?NTOBgNTO`LSR/<7/9RNlPPO>JGn /<7` yR Go H @*gH @+g H @?fSG nP Gf nPp?NTO*@JGo yRRRH?NTOSG`BgNTO L N^NuNVH0*yRʻRfVR`(M0.BB#R L0N^NuNV RRg yRRR0.`RRN^NuNVH8 RRfVR`**yRVR(yRʻ c%`&n 0.BBL8N^NuNVH0 RgD*n/ NXO(@ g*L` f ` . >0@@@0@@L0N^NuNVJg( Rg n f/. nHhN@PON^NuNVH8*n(n g f/<7NVXO`B@-X @g/<7`JRg<&L mRH?/ N!\O&@ g?-V/-R/ N" J@gR` gf#RJ-Qg/ / NPO`N&LJ-Pg0-PH?/ N!\O&@ g,/ / NPOJ@gp`R`/ / NPOJ@fJfB@L8N^NuNVH0# R#R .(#R*n .((@~ JGoBBSG` nHhYN@XOJ@g n n!yR(p`B@L0N^NuNVH0*n g./ NXO-@H @'bPH0@& PN*n`/<7`8 yRұRg`. yRJ` yRJgRR`I yRHHAf/ N"vXO> Go?/9R/ N" J@f yR#R`l yRJg yRH?HmN!\OJfz` yRJg yRH?HmN!\OJgL`^H@>(yR/.N@XOJ@g<0H @RJf0H @R p`H@>(yR/.N@XOJ@g0H @RJf0H @R` n g A-H`l(yRHmN@XOJ@f#R/ NXO*@ g g`~ n f n(  fB@`p:(yRHmNXO<EmFJgH yRHAf/.N@XOJ@fSF0HЌ#R`/<7NVXOB@L0N^NuNVH0~*yR .V(@ nHW@ @bnH0@'j PN`n/ N"vXO>`^HHAfRRGR`JgHH?/ N!\OJg4RGR`Jg*H?/ N!\OJfRGR`/<8NVXO~#R0L0N^NuNVH0*nRfB`D-H-H@HA@=@Jng f /0.H` /0.Hї L0N^NuNVH8*n*U gP/- / /<8>Nn /N&XO(m g0T@?/ /<8SNn /N&XO(l`L8N^NuNV/<8.NXO/<8kN&XO/<8 NXON^NuNVH8*n .X&@(k g d&L(l`'M+Lp0ЋTf 'L0T@S*Kp0ЍTf +l0T@UL8N^NuNVH8>.p0,/pH?NA\O*@ fB`NJy8. GgRG0 @d~GJy8.p38By8<0L N^NuNVH0*|8 (U g*/ pI?NA\O`L0N^NuNVH0*n(n >. g g JGoSGQL0N^NuNu"i!iH!iL1|1|11|Nu"i!iH!iL1|1|1|Nu"h gBi3|"hBQ N|Nu NNu0(R@HNu0(R@HNuB5N|NNVJSg4Jy8g,/9SNXOBS"|S ySA1!!!!!!!N^NuNVJSf/<8N`rXO3SJySf3S/<8/<8N`PO/9SNXO?9SNTO#SJSgBgp?NNXO#S ySC |S1!!!!!!! yS S yS1yS09SH yS1@ 09SH yS1@ ySBh ySBhN^NuNVH *nH@0>JGm G o p38`B0H @838?98?98?98?98?98?98p?NNL N^NuNV/Jy8lX/<8N` Gg HnNXO.N^NuNV/ 098H @R"yS0098H @R"yS0Ry8y8098H @R*P gp?/ / p?NN p%?NNTOp%?NNTO098H @R?098H @R?N|XO*_N^NuNVHBp ?NA\O. y8 y8 2, y8 m y8/p ?NA\OLN^NuNV/JngN.0.HH@B@H@Ї#8`B8.N^NuNV/NJ@gp?/<b"N!F\Op?p?NMXOJgp?p?NMXO`,J8gN.8mp?/<fN!F\O`.N^NuNVH *n>. |GlH?p?p?NM\ORF`L N^NuNV/Nj>98p38N y8f38 y8gNj.N^NuNV/ JRfZp?NNTO#R?<NTO*@#S f 9R` @#RN#SByRp3RNjJy8g&By8/<9$N&XONXNN@*_N^NuNVp?p?NMXOJgp?p?NMXO`N^NuNVp38JS g/9S NXOBS BRNJN^NuNVHJy8fp38N y8f Nf`N|~p?p?NMXOJg*p?p?NMXO@?p?p?NM\OR  f?<p?NAXO,g . ag~ bfNX` ?p?p?NM\O0 @g @g`lN@`bp?p?NMXOJgPp?NATO fp?p?p?NM\O`&NjNBy8LN^NuNVH0*n>. | 0@g|!0@g|#0@g|\p.?/ Nl\O(@ g,Rz El"0H;// N"NPOJ@fp*`XE`0L0N^NuNVH >.*n |-0@ g|m0@g|d0@g|v0@g|hB@pr@0@gp-`pw@/<94HmN"fPOL N^NuNV/>. GAm GZnGA` Gam GznGa?p?NAXO#` .N^NuNV/ *n?</ pN?NAPOJg / p9?NA\O`p#` *_N^NuNV/ *n/ p:?NA\O#` ` f #9?^*_N^NuNVH0?<NTO*@ fB`vp?NATOap:@BgHmpG?NAPOJ-f p\@B-/ N"vXO @m/<9MNdXOBg/ NlXO/Nm\O(@/ NXO L0N^NuNVH8*n gNh(@&MJg& -:fB@?NTOJ-gT`*|9VJ` m:/ p;?NA\O#` l( gB@?NTO/ /<9XNnPO#^ g / NXOL8N^NuNVH8BgBg/.pC?NA >*|f(|b.&|9,|w0FJgG0FJgGzx El(0EB@<0FJgD0FJg2FAAREL`?p?/.pC?NA L8N^NuNVH0*n(n Bg/ p=?NAPO>JGmp??/ pW?NA ?p>?NAXOL0N^NuNV/ *np,?NATO=@p*?NATO=@Hn/ N8PO*_N^NuNV y*op`B@N^NuNVH0*n(n y*m8/ / N"vXOH/p?p@?NA /<2p/p?p@?NA `/ N&XO/<2N&XOL0N^NuNVH p3*3**yf gLBgpE?NAXO3*Bg/ p=?NAPO3*/ NXOBf y*m?9*BgpF?NA\O*yf gp?pE?NAXO3*~Jyfg,p?/ p=?NAPO3*>JGop??BpB?NA JGlBg/ p.0H @* PmV?p>?NAXO0H @*??pF?NA\O0H @*?p>?NAXO0T@H @*?p>?NAXO.N^NuNVBgNNTOp?NNTON^NuNVN/<9lN&XONN^NuNV/>. y9tl099tRy9t0@Sp@.N^NuNV/ *n gJgB@?NTO`*_N^NuNV/Jy9to0B@9S>Sy9t099t?/<S/<SNp ` p?NATO>0.N^NuNV/~p ?NATOJg,p?NATO> Gg Gg Gg Gg ?NTO0.N^NuNV/N> Gg Gfp`B@.N^NuNVH *nH>g?p?p?NM\O`L N^NuNVBgN"S@?N|XO/<;4N&XON^NuNVH>.<. 0HH@ 9x0HH@ 9y/<9vN&XOLN^NuNV//<1N`rXOJ@f8p?NNTO @f@/<1N`rXO> G2fN` GfNNp?p?NXXO.N^NuNVH8/<1N` y]Bh$ y]Bh y]Bh y]Bh6 y]p1@2 y]Bh4 y]C!I.0H @9|=P0H @9~=P0H"@9 y]1Q&0H"@9 y]1Q(0H"@9 y]1Q*0H"@9 y]1Q,0H"@9 y]1Q0H"@9 y]1QN%.N^NuNV/ /<2N`0<@Hn???Nr B./Hn/<<6Nn /NXOLN^NuNV/ *np*?NATO:p,?NATO;@*_N^NuNVH >.*n 0HdH@H @00H H@@0L N^NuNVH >.*n 0@<0@@:0H @;// N"fPOHm?N\Op @@ -0fp @L N^NuNVH >.<. :. *n/ ?N\OHm?N\OHm?N\Op:@@L N^NuNVH >.*n 0@@?<0@@@:0@H8/ ???Nr L N^NuNVH0.Rn0@W2B@> yW2B@<JGgjJFgf G9n` G0mZ F9nT F0mN0@0 F@0H*Jnf` nfP 4. * . FW6#W6LN^NuNVH0*|W6 /NXO nJg/.N"vXO@?NTO(@#W2JW2g nRfS yW2Acp `p?/<BgNPOp?/<p?NPOp?/<~p?NPOp ?/<p ?NPOp?/<p ?NPOBgp/p?NPO/9W6p?NN\O?-p-?NAXO?p+?NAXO/9W2NXO`4p?NTO(@#c./ ?N\OHl?-N\OB,L0N^NuNV/ /<9lN&XONNN@X*@p?/ Ni\O/ N XO/NXON/<9lN&XONΠ*_N^NuNVH0*nNN 8(@ g/ / N"fPO`BNL0N^NuNVH *n>9Gp3G/< Ge?NTO*@ fG` gp0 n p` n p3W:*|W<#Y< L N^NuNV/ *nY?/ /<?/ N"\OL8N^NuNVH8*nzB@9b`R@6p#` Ug .ag .bfB@.@:0R@=@?<$NTO&@ fp`bBFB@>=@ FPl80SDJ@oxp?/9` ???/< GAm GPnG@` Gam GpnG`` p?NATOR@>?Hnp6?NAPOJmp0@`@B.Hn/.N%PO-@Hn/.N%PO-@Hn/.N%PO-@/./.Hn/<="Nn/NXOL N^NuNV/<2N//<=8Nkh #c.N^NuNVH0>.*n g / Nm^XO`B@ @gp`B@3*p?NTO(@ g,89y*Bl)yY`BB )y=^#=^L0N^NuNV/ *y=^=Hg6#=^J g /- Nf XOJg /-NXO/ NXO y=^3* *_N^NuNVH N @> GgJGfL N^NuNVJy=bop`B@N^NuNV/>.p3=d0H#` .N^NuNVH0*n|B@ @d8B@H @B@H"@*1QB@H @*p0R`-yY`Ry=b y=^Jhg/<=F`/<=Dp?N6\O m-P ngNJ@g p#` `/.NXO/NlXO(@/<=fN`rXOJ@g Bg/ NP\O#Y`By=dBg/ N x\O y=dg&Jy=dg 9Y`` yY` -@`fB` Sy=bN#Y`|B@ @d$B@H @*B@H"@0R`L0N^NuNVH0p#` Jg nJg?</.pN?NAPOJg#=q^p`?<NoTOJ@gp`/.NPXO(@ f #=^`p?/<2NP\OJ g n Hh/<=/.Nkh `B*@/<h/<`/ N> /N%pXO/ NXO/ NlXO/ N|XON%09`L0N^NuNVH0>.*n gv?</ pN?NAPOJfd Gef|`\p/?NATO(@B@,< GdfF`> Gff0@fp`B@<`& GhfF` GvfF` GmfF `|JFg <=F` <=DL0N^NuNVH0*nB@ @{f0HnN@~/N4PO(@ n }g#=^`B@ @0e B@ @9cdB@ @-fN@~/B@-?N\O(@`@B@ @!f4N@~/NXO(@ g/ Nm^XOJ@g <=D` <=F`(M/ NlXO(@ L0N^NuNVH8*n(n z~x+(2 gJg/ NXO-@0REJ@f/.NlXO&@Jg/.Nm^XOH,/.NXO`|B@@% @ bNH0@' PN`>ކ`:`6//N%PO`&Jg//N% `Jg //N%t` <.N@~( TB@?/<=Nl\OJg N@~*@` Ef `/NnXO/NlXOL8N^NuNVH8*n(n &n,/ Nm^XO:/ N@~/NhPO/Nm^XO8B@ @fB@ @=fDm`B@ @>f JfDo`B@ @=fB@ @=fDf`B@ @!fB@ @=fDg`xJDg/<=F`/<=DNlXOL8N^NuNVH8*n(n &n,/ Nm^XO:/ N@~/N4PO/Nm^XO8B@ @&fB@ @&fJEg&JDg"p8`"B@ @|fB@ @|f JEfJDfB@`xJDg/<=F`/<=DNlXOL8N^NuNVH8*n(n Hn/ NhPO&@ nB@ |'2<`XHXW PN`(/ /./ N `/ /./ N`( L8N^NuNV/ y=^JhgHnN@~/N4PO/p`/<=Dp?N6\O.N^NuNVH0*y=^ UfL>-NJGg/<=Dp?N6\O`:N@~(@JgHn/ N4PO` <=F(@/ p` Ug #=^L0N^NuNV y=^ Pg y=^ PfN` #=^N^NuNV y=^Jhg/<Y\N@~/N4PO/`/<=Dp?N6\ON^NuNV y=^ Pf* y=^Jhg y=^#Y`p3=dN` #=^N^NuNVH0N@~-@N@~(@ {g #=^Ne*@ y=^JhgdN@~(@ g< }g6Jf #=^`&p?Hn/ N4PO// Ng* (n`Bg/-Nf\O//.N`PO y=^Jhg/<=F`/<=Dp?N6\O/.NlXO y=^!@ y=^!M y=^p1@L0N^NuNVH0(y=^ TfJJlg<0,Rl? l /(Nf\O*@ gJg/ /,N`PO#Y``N` #>^L0N^NuNV y_BhpN^NuNVH >. JGl0D@??.NJXO`b0SGJ@gX y_Jhf@$yh y_"P*i MfB@`0 y_ y_1m y_(` y_Sh`pL N^NuNV y_"P y_1ipN^NuNVH >. JGl0D@??.NXO`^0SGJ@gT y_*P y_0(mf0 yhfB@`. y_ y_Bh y_(` y_Rh`pL N^NuNVNZ yh"h y_ y_Bh y_(pN^NuNV"yh y_  y_Bh y_(pN^NuNVNZN N^NuNV/ Jn l0. D@??.NXO`l09f@f 3e^yf y_*P0. Sn J@g yhg*U` y_ / N~XO y_1@ y_(p*_N^NuNV/ Jn l0. D@??.NPXO`r09f@f 3e^yf y_*P0. Sn J@g"yh mg*m` y_ / N~XO y_1@ y_(p*_N^NuNVH *n|xmg8B@5@ @>: G fE` G m GfREREy^n<RD`0L N^NuNVH >. Jnf y_B@(@>JGn.~`*JGl0D@??.NXO`^ y_BA(0> y_*h0SGJ@g yhg*U` y_!M y_ y_Bh y_(pL N^NuNVH >. Jnf y_B@(@>JGn.~`*JGl0D@??.NXO`d y_BA(0> y_*h0SGJ@g"yh mg*m` y_!M y_ y_Bh y_(pL N^NuNV"y_ y_!Q"y_ y_1i N^NuNVN0/<>NDXOpN^NuNVH y_Jf/<>NDXOB@`V y_*P y_>("y_ y_ "y_ y_1i  y_!M y_1G y_(pL N^NuNVH >. Jnf6B.p ?Hn/<>6N <J.fp`THnNm^XO>"yh i*P Go"yh Ug*USG` y_ y_Bh y_(pL N^NuNVH0*n(n ***L0N^NuNVH8B/<>B/. /.Nkh (@ f(n/ NLXOgD/ NXONe-@|&y] gp?Hkf/.Ng* &k ` n*h nBp?/.N\O @f p?/./ Nb BNLXO`/<2NLXO/.Nf XO nJf/. /.N"fPOB@ @fp`B@ @ g B@ @ fp`B@L8N^NuNV/ yh*h gagff *y] gagff*m ` f*y] *_N^NuNVH N*@HnHmf/<>FN > Gfp`4 Gf$p-?BgBgp?HnN *@ fB@` / NXOL N^NuNVH0*n yhS(f/9_/9hNPO#h y_!M y_!m y_(B@-R-J@f/ /9_NPO`$(y` g_g lf/ `(l `pL0N^NuNVH8*nBgBgBgBg/ N (@ fB@`xhf/<>YNDXO` y_-PByeBf l&Pg0>+?Hk /.N JgRye0Hѹf&S` yh(pL8N^NuNVH N*@HnHmf/<>xN > Gg$ Gfp?HnNf\O> y_(0L N^NuNVH8*n/ NɰXO> @g0`/-N4XO&y]طg(K&k `&k g)K `#] yhf #]h/ N4XONX]fB]`afBa`ffBfpL8N^NuNVH8*n fp`rN(@fp?NTO(@ gRgN/ NXO&y` g. kf 'L/ / NPO'l+R,&k `/ NBXO`B@L8N^NuNVH Hn yhHhf/<>N > Gfp`.JGf 9h`BgBgBgBgHnN *@/ NXOL N^NuNVH8*n(n lf0.`n&l gS+f / / NPO)MB@-R-J@f/ / NPO`,-y`Jg lf ng/.`-l `0.@,pL8N^NuNVH0*n fB`NJ-f&N (@ g:p?/ / N @g"`(y` g lf, `(l ` L0N^NuNVH *n>. ,. m0p //N%tPO0SG20Ap //N% PO,`SG00@ 0JGo SG00@p `L N^NuNVdH8p.?Bgp?p?/<;~N #fJffB@`` yf(/9fNɰXO: @g0`8/<2 yfHhN"fPO/<>/9fNLPOJ@g/<>/9fNLPOJ@g&y] gK|B@+@gpt`p-B@+@gpr`p-B@+@gp*`p-p ~ k-P ng n0(T@Hހ n`/p ?/ N p IffSIJg& ddp `B@<g [d`BHn|/9fNLPOJ@g&k `pL8N^NuNV/ Nf @f/9fNņXO*@ fB@` yf* yf;hp*_N^NuNVH8*n(n g8 g4/ N"vXO?/ /-N &@ g Uf* gp`B@L8N^NuNV/ *y] g"B@-@fB@-@gp`*m `B@*_N^NuNVH8*n>.(y] gHlf/ N"NPOJ@g(l `Jn gpz?NpTO(@ fB`zBgNTO&@ f / N4XO`&'K)K9nv(BBlBl B,0.@/<2HlN"fPO/ HlfN"fPO)y] Gx#] L8N^NuNVH0*nB@-@f4B@-@g(Hmf/<>NnPO/N֪XO> @g0`2"m(Q Lg / NhXO`*BmBBm -pL0N^NuNVH |NȢJ@f/<?ND`NNB*y] gvJ-gjB@-@g^Jng0.`Hm/<?NnPO/N֪XO> Gf"/ N XO @f-/ NXO`RF Gf0`6*m `/9fNņXO/NXO/9fNXOJFfp`B@L N^NuNV/ BgBgp?Bg/<;lN *@ g/ NņXO/NXO/ NXO*_N^NuNVH0p.?Bgp?p?/<;lN (@ g>/ NɰXO/ /<L/.Nq / NņXO*@ g*;lNBL0N^NuNVBfB]p?NTO#hJhfNN^NuNVH BNXOJ?$g/9?$N4XOp3`ByfBy]Bye20<3]3bN"S@:3`N.>3` 3i2RA0P@H<0GF@?NpTO#?$*@ fN#^0@ #i0#_B0T@Byf#`0R@H#_0R@H|En00H @` 0X@0H @_ 0X@RF`L N^NuNVNFB?$N^NuNVH8>.03e2H @` T(@ /09` Hї &@ .  *@ n >(0SGJ@oBB@<fp$@`0 F fp  y` @f` F d p^F@`` y` 3]L8N^NuNVH <9]09` 3]:~ 09e2H @` /0Hї T*@0RFElH`L N^NuNVH >.0H @_ T*@|>9` SGmB@`L N^NuNVJnf p3`` y_B( y_(NpN^NuNVH0*nB@->JGoSGBA-0Ae*B@-@`JGlB@-@JGl~` B@-H>(UJGo"m lgSG(l`+L-L0N^NuNVH0*nB@->(mgRG(T`0H @` PP/ ?N^\ON L0N^NuNVH0*n(mBA-B@-A<B@->FlV0H @` PP0H @` PP3e2By] mg/ ?N^\O(TN RG`L0N^NuNVH8 y_B@(3] y_*h y_g Ry]*U`Bye09]ְy`f 3feI y_ /0(Hї &@d*B@> G f ye` G lRyeRye`09ey` m09` S@3eL8N^NuNV/~y`n"0H @` PP?NdTORG`By`Byf/<?(N&XO.N^NuNVH8*y` gJ-gB@-@f&(m~BA-0Adg mg(TRG`/ NXOB@-@ @f / NT`B@-@ g / NϤXOB@-@g / NՊXOB-B-*m `bN.Jy`gN/<?/N&XO yGf09``B@>y`nJ0H @`&P0@g.S0H @_-P nHhHk?NҤ RG`/<?2N&XO?9e?9]NXOL8N^NuNVH80.H @` P0@g/<?5N&XO:9` 0.y`fHJyffF&yi?9f/9_/ Np f?/. / Np -yi *n 0HЍ-@(ndBAB@AfRR`g|&n ./0Hї -@ nBA(B@+AfSS  g|`-KJFf* ng n ( fS` @n-K ??.NXO .y]޻dB@B@?p?p?NM\O` ng/<?8N&XO MRgp `0.H @` P0@g/<?;N&XOL8N^NuNVH8BgNTO f-|;V&|?>Nh`-|;z&|?E . f-@ n (x ./09` Hї -@(ndB@` n B@(@g np*@ n@ .X(@p  nRfp Z n B@(@gpt n B@(@gprTfS nRfp  n J(g . *@XfB@@L8N^NuNVH nbgrA-HJgd . *@ n1y`  n/(/ NdPO nBA( nB@(A>0H @` PP/.?N^\OL N^NuNVH>.<. ybfy]g??N|XO3b3]LN^NuNVBg?9`NXO/<?LN&XOByf09`H @` PP?9`NdTON^NuNV/B.p?Hn/.N > Gfp` .yg .Yfp`B@.N^NuNV//.NLXO?./. N\O/<2NLXOB@ @f BgBgNXOB@.N^NuNVH0K (yi nRB@>g G%g` nRB@>|0 |'2<`XHXW PN`\FTFPF?0H/Nn\\O// N"fPO/ N"vXOT`\FTFPF?/Nn\XO// N"f / N"vXOX`V// N"fPO`B3]NX/<?ON&XO/9iN&XOp3fL0N^NuNV/ *n g/ /9_N"fPO/9_N"vXO3fNX*_N^NuNVH *n g/ /9_N"fPO/9_N"vXO3f09`H @` PP>9Gp3GNB3GL N^NuNV/ *n/ NK.XOJ@gp?/<?RNP\Op`rBg/ p?9Ydp>?NAXO/9YtN XO0.N^NuNVH *nJn oz0. HйYhYpoNٞ @fp`p0. HйYhYpn0. ` 9YpYh>?/ 9YtйYh/Np ǟn 0HѹYh`9*g*|9(p=@ `jB@L N^NuNVH0*n(n / NK.XOJ@gp?/<?RNP\Op`Bg/ p=?NAPO3Ydlp`p?/ /<?NnPO/NP\OByhByeBf/ ?9YdNp\OJyhl #?^J^g/9^NLXO`vp??9e/9f/ /<?Nn/NP\OB@L0N^NuNVH p?/. Nm|\O>p?/.Nm|\O<JGgD Fun>0.H @E*P0: @gJEgGf:;F`X`/<ENDXOL N^NuNVH>.<. 0H*p?/Nn\\O//<YxN"fPOp Yx0H*p?/Nn\\O//<Y|N"fPOp YYY|?BgNcXO//<YN"fPO/<E/<YN"8PO?p?NcXO//<YN"fPOLN^NuNVH0/<FNDXONr> Gmfp` Ggfp`B@<p.?Bgp?p?0H @E/N *@ gb/ NɰXO @fR0H @E(P0> @g&?,?NPXO/<Yx/ NLPOJ@gX`/ NņXOJgp`B@L0N^NuNVH /<FANDXONr</<FXNDXONr8 Dmfp` Dgfp`B@6~0H @E*P0: @gFf>-`X`JGf F m F~o Fm Fn~1??NPXOB9YB9Y/<Y/<Y/<Yx/<FNDpL N^NuNVH >.< Fl|0@ ?NpTO*@ g;G`?/<FND\O L N^NuNVH8*n>.?NTO(@ g$?/. Hl Np &m&)K+L( L8N^NuNVH8*n&y` g. kf'U Sf&Bk kf'UBk &k `(y] g(J,f Tf(Bl lf)UBl (l ` m U!m/ N4XOL8N^NuNVH0*n>. -g~B@-@f G-(y` g lf,(l `L0N^NuNV?./9hN\ON^NuNVH8p?NRTO y_*P yhfx y_Jhg/<FNDXOB@`?.NTO(@ g-m n (+L)n y_ y_1nG 0.SnJ@gh0. ` y_>(2-A 0-nAoP0.m?NTO(@ gl?-Hm Hl Np m ( U!L)m/ N4XO` 0.m(M /0,Hї  -@ ./0.H &@0GA g S n`|nl 0. RF`-y`Jg n hf n!L n Pf* n n_g n0(Go n0.h n hf n!L n0( Go n0.h n-h `xpL8N^NuNVH8p?NRTO y_&P y_>(?NTO-@fB@`K . (@0GA g`I KA g`k n!k'n n h n -y`Jgv n hf n!n n Pf n0(Gl n ` nh n hf n0( Gl n!n` nh n-h `pL8N^NuNVH809FyFfp=@ Jno y_&P y_>( yhfB@`0+G<no<.JFf6p?NRTONJ@gJn g?. p ?N.XOJ@gSn`p?NRTOKp 0HЍ(@ n fN09FyFFlBgNTOJ@f`n?/ 9F/09FHї /Np yF`L n fD09FFlp?NTOJ@f`?/ 09FFHйF/Np yF KA g`k-y`Jgr n Pf( n0(Gm nh n0(Gl n1G n hf( n0( Gm nh n0( Gl n1G n-h `n`2pL8N^NuNVH8 y_&P-S"yh nfJkf2/ Nh`$ n0+@ khm n?( nHh KHh Np -y`Jgb n hf n!K n Pf n n0+h n hf n!K n0+h n-h ` n0(k n& n P!K`N n0+h?NTO-@fB@`:K . (@ KA g` . *@"n nA g` k "n n n P!n n!k-y`Jg n hg n hf n!n n Pf n ` n Pf n n0+h n hf n!n`$ n hf n!n n0+h n-h `X/ N4XO/.N4XOpL8N^NuNVJFg(/9FN4XOBFByFB@3F3FN^NuNVH>.<. Ff*JyFfp?NTOJ@fB@`BSyF09F`(09FyFfBgNTOJ@g09FRyF0@FpLN^NuNV/>.JGm09FGyFmp`09FG0@FH@.N^NuNVH >.09F@?NpTO*@ f 09F@?/<FND\OB@` Gf 09F@`p@<JFgD09FyF? 9F/09FHї /0HЍ/Np /9FN4XO#FyF09FyFF3F3FpL N^NuNV/>.?<p?p??/<;VN #].N^NuNVp-?p?p?p?/<;dN #aN^NuNV/9`NXOp?NTOJg*/9]NXOJyGgp?BgNΠXOByGN^NuNV/ /9bNXON/9aNXON N R*@ g/ NLXO/ NXO*_N^NuNV/9aNXONvNGN^NuNV/ yhaf N p`@/<G2NDXONr> Gbg GBfN&` Gcg GCfN`B@.N^NuNVH *n>. /<2N`rXOGmPJyGf / ND`R@?NTO&@ gj?Hm / Np 0GBN R(@ gF/ N"vXO<?/ / N" J@f0FR@?0HЋ// Np / NXO L8N^NuNVH8N*y_/9bNXO(yh yhag/9aNXON /.NXO>9Gp3GN3G y_&P<+0. S@Fl0. S@<?Hk /.Np nBN hg / NXO/ NXO09YL8N^NuNV/>. 0@?3Yp3Gp.N^NuNVp??. ?.N\ON^NuNVp??. ?.N\ON^NuNVH >.BgNTOhf y_*P/ NXO-@p?BgHnHnN+P JGgDp?p?/.NgPO-@Jg/.NXO/.NXON y_*P/.NXOJgX y_BhBg?-NXON R-@Jg/.NXO/.NXO/.NXO/.NXOL N^NuNVBgNTON^NuNVp?NTON^NuNVH8BgNTOhg yhaf0 yh*h y_(Pfp?p?NXOJ@fg?. ?. ?.NP\O`N8(@ g y_Bhp?p?N:XO yh]f8/<2/ N R&@/Nkh *@ g / NXO/ NXO`*L/ /9hNLPO/ NXOp?p?NXOL8N^NuNVH p?NTOhg 9h`N*@HnHmf/<GfN > Gfp`T Gf$p-?BgBgp?HnN *@ fB@`*]g"/ NXO/<GNDXO/ NlXOL N^NuNVH >9Gp3G*y_N 3Gp3`Nr/ NXO/<2NLXOL N^NuNVH8 y_-P/.NXO(@ y]"h ng@/<2/ N R&@/Nkh *@ g / NXO/ NXO/ N`p?BgN,XOp?BgNXOp?/ N x\ON N R*@ g/ NXO/ NXO/9hNXOpL8N^NuNV/<GN`rXOH-@Jf-|Hn0.H/N%PO-@ .SJfN^NuNVH0*n>. Bn y_(h"y_ Qgfp=@(T` nfb y_(P y_<( y_ y_1G y_(NBp?N TO y_ y_1F y_(`4/ NXO/NLXONBp?N TO/<2NLXONBpL0N^NuNVH00.@=@0.@g n@m n_nn@?./<GN!\O(@ g,H`0.=@ y_*P y_0(S@>BnJGf*m yhfB@`N0-R@>SG0mfp ` B@5p @<nfJnf?/ NZ\Op`SnnfRn`L0N^NuNV/Jn lB@`0. @g G@m G_nG@??. NlXO.N^NuNVH n fB@`N~n lD?. p??.N$\O< @g0`&?. N@TO @g/<GNDXORG`pLN^NuNVHz| y_hlH"y_ QB@( @> G g G gJnf G fE` G m GfRERERF`0LN^NuNVH "yh i*P~|RF y_fJ=F y_ /0(Hї -@ y_0(mfp `"y_ MB@( @=@0-R@Hހ yhg*U` y_B@(: y_*h yhg y_gRE*U`RE/pd//.N%PO/N% PO=@BgNTO???.?./.?./<GNDpL N^NuNVH y_*P y_0(><mfSGlB@`BB@5p @8SGmB@5p @:p p mg y_Rhp?NRTOpL N^NuNVHNh<Jn lB@`6Jn fp`, F fNt> GfSn f0`??. NlXOLN^NuNVJn lB@`VJn g n o 3 _p`Jn fp`4>. Nt< FfSGf Ff?. ?. ?.N\O<0LN^NuNVH Jn lB@`\0. Sn J@gN y_*P y_0-hf. yhg" UJhfp?BgNJXO> @g0` Nt`pL N^NuNVH8 y_-P . *@ y_0(HЍS(@&@bH: @ g E fS` >"nIdH: @ g E fR` <0FS@8g4 y_h nh F?0HЋ/ KHhNp p ?p?NlXOL8N^NuNVH0 y_*PJmf"yh(m Lg*L`(M~"yh(T Lg JlfRG`JGfp` y_ y_BhBg?NXOL0N^NuNVHJn lB@`0. Sn J@g~z"y_ Qhl2"y_ QB@( @< F g F f F fGRGRE`NtJ@g0H:gp ??NlXOJ@g0HH@:gxp ??NlXOJ@fd`ZpLN^NuNVJn l0. D@??.N`.Jng09f@fNyfp??. NXON^NuNV/Jn l0. D@??.NpXO`PJng09f@fNyf?. ?. ?.N\O> @fp??. NXO>0.N^NuNVH 09f@fN"y_ Q:(yfJnfX y_<(El&"y_ QB@( @8 @ g D fRF` y_0h>EfRG`JGf~`Jn o: y_0hR@>"y_ Q*P<. SFgr yhgf0-R@@*U` y_>( y_Bh y_*P<. 0RFJ@g*"yh mg*m y_(0-R@@` y_ p??NXOL N^NuNVBgp?N:XON^NuNVH Jn mz0. Sn J@g4N0|?NTO>m G ffp?BgNXOJ@gfRERF` y_*h y_ Pf40SEJ@g"yh mg*m` y_!M y_(p`?p?NlXOJ@fB@L N^NuNVH|z/<GNDXON> @0m G9o GUg G-fV GUfN`& G-f JEfB|z`JEf|z0 G@0<JEm?`JFg0D@`p?/<GND\O` Ef JFfRF0D@<??p?N\OLN^NuNV/NByfJyGnBJyYnNBN>JyfgNXNB G g?p?BgN\O`N|.N^NuNVp?BgNΠXOByG/<2N`rXOR@?/<2Na\ON yGf.NR/<2NLXO#h]/<;NDXO` B]Np3G/<2N`rXOS@?/<2Na\ON^NuNVJ]g0/9`NXO/9]NXO/<2NLXONjN^NuNV/ /<G NLXOp?p?N&XON@~*@Jg8 -fRy]`/ NXO=@Jy]g yh( ngNj*_N^NuNVp3]NXN^NuNV/<GN&XOp?N"TON^NuNVH >. "yh0)vH @E*P0: @g Gam GznG JGm Gn 0@@@>0.N^NuNV/N6> Gf N6@`& Gf N6@`JGm Gn 0@@@>0.N^NuNV/N6>JGm Gn 0@@@>0.N^NuNVN6@??. ?.N\ON^NuNVN6@??. ?.N\ON^NuNV/Nh>J]g` ]]c> y]R]p y]R]p) y]BB]/<H"NLXO` y]R]p@0.N^NuNVJ]fJyYo/<HJNDXOB@`/<HnNDXO#Y]pN^NuNV yYo/<YN@XOSyY`ByYJ]g/<H|NDXO y]BB]pN^NuNV/<Y/<HNnPO/NXON^NuNV/>. J]fJyYo/<HNDXOB@`"JGoJ9Yg3Y/<YN@XOp.N^NuNV/<HNDXOJ]g B9YB]ByYpN^NuNVp3GN^NuNV/>. yhB@(@g yhB@(@fN f?NLTO.N^NuNV/Jnf6NȢJ@g,BgN6TO> Gg/<HN֪XO> Gg0` p3Gp.N^NuNVH0*n(y` g g lf,(l `L0N^NuNV0. y_@ y_(pN^NuNV/ *n f*y`#_#hp*_N^NuNV y_ h bf #b_ y_/( NXON^NuNVH0*n y`bfB`& y`f*yb(y` l g(l ` L0N^NuNV/9_NXXO/NXON^NuNV/>. 0D@??.NXO.N^NuNVH >. y_*hJGl0RGJ@g. yhg"*U`0SGJ@g"yh mg*m` y_!M y_(| y_BA(0Ad y_gV yhg*URF` y_*h y_B@(H<0SFJ@g yhg*U` y_ y_BhpL N^NuNVH0*n g / NXXO`B(@ gbbf y_`f# _# ``)m ,B@-R@, mS(f/ /-NPO/ N4XOL0N^NuNVH8*y` g<(m _gbf*L` mS(f/ /-NPO/ N4XO` y_&h y_B@(>JGg"yh kgSG&k` y_bfBgBgN zXO*@ g#_#_` y_!yb ybB 09` yb@ ybp@ y_B(09`S@ y_@ y_!K y_(pL8N^NuNVH >.<. p?NpTO*@ f/<HNDXO`f yhR(p@+yhB-GFJ_g/9_/ NPO y_+h`/9h/ NPO yh+h L N^NuNVH8*n -dB@-?/<IND\OB@`BgBgN zXO&@ gB@-@H>B@-@G<(mzgRE(T`(mGn(Gf(TG'm +K B@-GR@@F``B-y` ng-n n-h `Jf#`` n!K 'M mGRG-F0SGJ@g(T`+L'L-+pL8N^NuNV/9_N XON^NuNVH0Jn l0. D@??.N zXO` y`J f/<I#NDXOB@` y_*h f*y` m _g*m `B@-n b/<I3` y_ h f*(m~n l mg(TRG`+L0. -`B y_(h~n l"yh lg(lRG` y_!L y_0. ( y_0. (0. - y_(-pL0N^NuNVH0Jn l0. D@??.N NXO` y`J f/<IENDXOB@` y_*h f*y` m _g*m ` y_B@(n b/<IU` y_ h f0(m~n l"m lg(lRG`+L0. -`< y_(h~n l yhg(TRG` y_!L y_0. ( y_0. (0. - y_(-pL0N^NuNV/ y`bfB`F/9bNXXO*@BA-09`HAd/ N XOJ@g/9bNXXO*@ *_N^NuNV/ B_B`09`S@?BgN zXO*@p??9`N zXO#b gJbfN #_#`+yb ybB *_N^NuNVN^NuNVH8 y_Jf /<KJ`V"y_ y_ Pfz"y_ n "y_ y_0(i l&"y_ n1i"y_ y_0( i`$"y_ n1i "y_ y_0(i n1@p` y_(P *@ yh&h y_<(0-FR@>f lggB*U y_f,"y_ n "y_ n1i"y_0i `~0-R@@ lg(l0,R@@ y_f n "y_ n1i "y_0`0/<KeNDXOB@L8N^NuNV/HnNXO> Gg0`@09f@fNyf y_ y_1np??.NXO.N^NuNVH HnNXO< Fg0`x09f@fNyf*n>.0.SnJ@gHmfp?p ?N.XO< Ff*U~`p?B@5p @?N.XO< FfRG`pL N^NuNV/<e6/<KxNDPON^NuNVH8/<KN`rXOJ@g/.N"vXOHR@?NpTO&@ gh*K(ng4B@ @ae$B@ @zbp[B@B@@p]`B@`B/ N"vXO @l/ /.N"fPO/ N4XOL8N^NuNVLH8*nB.`J9e6fpP?Hn`/ /<KNnPO` pP?Hn`/<e6/ /<KNn /N > Gfp`J.`gJHn`/<e6N"fPO&|e6I`gB@ @\fpB@`BHn`/<e6N"fPO/9KtNXOBKtJ9e6gB&|e6I`gB@ @f|\B@`BHn`N4XOHn`N~.XO#KtJKtgp`B@L8N^NuNVH >.*n ?<?p?N\O/ N"vXO20A<g& y_8(JFoBg?NXO y_1DB@:g E fF y_"P y_0(if?<p?BgNJ\O`Bgp?NXOJ@gNt`"yh y_ Pf?p?NlXO` y_"P y_0(ifBgp?NXOJ@g\`"y_ y_0(Rh0@E `:p?NRTOp`p ?0D@?NlXOJ@fB@L N^NuNVH8JgJ g nB@(X @f*n Ne&@B.gH @&f|`$H @\f 0m 9n H@0<`|JFlH@BgHn/ Ng* `0H @Jg0H @J(g0H @(h(BBg0H @// Ng* H`N(k/ NXO L8N^NuNVH0 y_*P y_>( yhg./ NXO(@0HЌ//9KtNPO @g *U~`B@`, y_ yKt (( y_1@ y_(pL0N^NuNVH0 y_*P yhf*m y_>( yhgJ/ NXO(@JGm 0G0GB/ /9KtNPO< FgJGm 0GH~*m`B@`^/ N"vXO<JFg 0HЌ//9KtNPO @gSF`JGm 0GH y_ y_1F y_(pL0N^NuNV//<KNXO> Gg$JGg GfN`Nl>JGfN0.N^NuNV//<KNXO> Gg$JGg GfNl`N>JGfN0.N^NuNVH B./<KNXO> @g0`:pP?Hn/<e6/<KNnPO/N > Gfp`Hn/<e6/<LND zxNl @fJEg N< Ff| 0@?fNB`NBNh<0 |(2<`XHXW PN`zHn/9KtNfPO*@"yKt yKt ((6/ ?N\O>/ NXOJGgRD F.g`T/<L$NDXO`P y_(NB?/<LeND\OpL N^NuNVH *nB@ @AeB@ @Zbp?NRTOL N^NuNVH *nB@ @aeB@ @zb p?NRTOL N^NuNV/~NJ@fp?BgNJXOJ@f~`RG`0.N^NuNVH0>.*n (nJGlB@`p0SGJ@gfNN @gNJ@g$y_"y_ RHh NXOp?BgNJXOJ@gNJ@g$y_"y_ RHh N`pL0N^NuNV/</<?. N N^NuNV/</<?. N N^NuNV/</<?. N N^NuNV/>. JGl0D@??.N `fp?BgNXOJ@fB@`R0SGJ@g. JGl0D@??.N|XO`60SGJ@g,NN @fB@`NJ@gp?BgNJXOJ@`p.N^NuNVH Jn lB@`09f@fNyf y_*P y_<(~0. Sn J@g@NJ@fp?BgNJXOJ@g$RG`NJ@gp?BgNJXOJ@gRG` y_ y_1Fp??NXOL N^NuNV/Jn lB@`09f@fNyfp?BgNXOJ@fp`r~0. Sn J@g@NJ@fp?BgNXOJ@g:RG`NJ@gp?BgNXOJ@gRG`p?BgNJXOJ@gjSGp??NXO.N^NuNVH y_*P y_<(mg Gam Gzo$ GAm GZo G0m G9o G$g G_fp`B@L N^NuNVH0>. JGl0D@??.NXO`0SGJ@gvp?BgNXO<NJ@f Fg y_Bh yh(h y_*P mg( mJhgB@- @: @ g E g*m` y_ ` y_(pL0N^NuNVH0>. JGl0D@??.N>XO`0SGJ@g~ y_Bhp?BgNJXO<NJ@f Fg y_Bh y_*P yh(hg4*Ug"JmgB@- @: @ g E f*m y_ `| y_(pL0N^NuNVH8p?p?NXO y_(Pp?p?N>XONe&@ gl~ y_*Pg*URG`0SGJ@gPBg y_/NXO// Ng* Bg/<L/ Ng* p?p?N:XO3ff` L8N^NuNVH8N(@ fB@`XNe*@ f / Nf XO`|~ lB@:0@aJg E fGRGRF` lBBg/,/ Ng* l/<d2/<a ,/0Hї /N> / Nf XO|N@~&@/N"vXO:0E@yL|nJEf"?/- y_/N JEg`|BU>Bg0H @L~// Ng* Bg/ / Ng* 0S@0@B@: E.g E!g E?fp`p<``N@X/Nf XO/ Nf XOpL8N^NuNVJng0. ` BgNTO3L|?9L|/<LND\OpN^Nu o0/BAgJfBNu Nu o B@Nu o0/,X.X.NuNVH *n0. H=@Jno=n0.n ll0.n>JGmX0nHЍ/0.HЍ/ nNPOJ@o0?.0nHЍ/0.HЍ/N" n`Rn`0.`lL N^NuNVH0*n(n >.JGgH=@0.SGfL0N^Nu"o o JfSfNu"o ofJfHHNu"o o fNu o"Jf S@Nu"o oB2/ gSAfJgQHHNuNVN"?.N#0TON^NuNVN^NuNVH *nBp ?NA\O.</p ?NA\O0L N^NuNVH *n>. Bp ?NA\O,:/p ?NA\O0L N^NuNV?.pL?NAXON^NuNV/?.pE?NAXO>l0H/N$XO`"?.N#TO=@m?.?N$BXO0.N^NuNV/?.?. rF?NA\O>J@f(?.N#TO=@m?.?. N$BXO0. `0H/N$XO.N^NuNVH >.0V@ @bH0@(2 PN`*pP`&pA`"pC`JGm*yLSGmJfp`JgHL N^NuNVH >.JGm*yLSGmJfp` Jg0. L N^NuNVH >.0V@ @bHH0@(> PN*yLHGg Jfp`&R` L?N#DTO`~C`~A`~P`pL N^NuNVJl .D3(Jp` .N^Nuʠ fEH]NuNu"o`C"/jD$jDA`|J/j JgRJk`JjDNu"o`C"/$A`JNu"o`C$jD"/A`, g J/j Nu"o`C$"/A` NupJfpN∲cd⒒d҂dFN o"`"/ jD$/jDD$@A`" jDNu o"`"/ _$0"@0HAHBЁH@B@ЉN"(X$(2~("(DoOoXocodoRooTsoxoPDo x$(P)x*+.?[,\^|x<xxFFjjjjjjjjj*Hff666666&<v=v>v|&DOXdנoעsxמDn L!J.L$$$$$$(Old buffer)A namesake buffer exists; give another name: Cannot create buffer(New file)(Inserted %s, %D bytes in %d lines)Insert file: Read file: Visit file: Buffer is marked read-Only; write anyway?(Wrote %s : %D bytes in %d lines)Write the buffer to file: Change associated file name to:  beta-test version 1.03.04.05 121887 of yet another shell for %s (non-profit redistribution is permitted) %s Copyright %s 1987 pm@cwru.edu promptprompt_tail programs accessible through hash table:none! (your hash table is empty)semicolon_maxtimecmd exit code %d2gulam.grehash-cdategulam.gshow_memmemgulamend.gARGV=CCCP????????????????????????????-]|- 6p--- -5t-5t-d- >- -H-..p.V. ..d..%.*.-V.3.; .B.FV.K .P %scp: %s not foundcould not create dest file*mvcpdestination ?last arg '%s' must be a dirhistfileno such historyhistory >>>=<===!=/==~/~unmatched quote ; `'"!@#$%^&-=+`{}:;'"\|,.<>/, '">=?@ACD GHIJKLM OPQ S U WXYZ[\]^_`acdefghijklm opq s u wxyz{|}~fatal situation in Gulam:run-time stack is about to overflowa line with >= %D chars has been splitFile read errorThe last line ended without \nbytes 0 packets 000 errors 000 timeouts 000 rx ?> Cannot open file <> Transfer cancelled by sender <> Transfer cancelled by receiver <> Error writing file -- aborting <> Error reading file -- aborting <> Too many time outs -- aborting <> Too many errors -- aborting <> Receiver not sending NAK's -- aborting <> No acknowledgment of sector -- aborting <> User Aborted Transfer. <sx_remote_cmdfile '%s' exists; overwrite it?rx_remote_cmd%s %s %s %D bytes received. %s %D bytes sent; EOF acknowledgment not received though! %s %D bytes sent. NULL argumentregexp too bigout of spacetoo many ()unmatched ()unmatched ()junk on end*+ operand could be emptynested *?+invalid [] rangeunmatched []internal urp?+* follows nothingtrailing \^$.[()|?+*\internal disasterNULL parametercorrupted programmemory corruptioncorrupted pointersinternal foulupheap at %D size %D chunk at %D size %d --- free(%D) has illegal arg sz_rs232_buffer -1024baud_ratepress left most digit to set baud rate 019200 9600 4800 2400 1200 300:E& whsvdm------- 1 dir non emptygfgetcwd\could not cd to %sEfvYrc?UU  1234567890' qwertzuiop@+ asdfghjkl[]#~yxcvbnm,.- Ž<·!"$%&/()=?` QWERTZUIOP\* ASDFGHJKL{}^|YXCVBNM;:_ >1234567890' QWERTZUIOP@+ ASDFGHJKL[]#~YXCVBNM,.- Ž>·K006-770-707-070-AtariST/TOSgulm minicompletionsbuflisttemporarily exiting to gulm; buffers are NOT freed... \\.\\\~:\\..\gtosttpprg <\<` ba#[qXr@0ABCDEFGHIJ%K LM$NO"P#Q3R+S,T4UpVaW6Y;Z_)k}k]k JIED& U2TZ#^A BPCF=IMOAN P RS>V=W?XBZF!'!=C()1I2JBNEFI<KQNDODPESRZGH\!.0>T<U[V]W%/ YBZC[D]F^GL_Q)R+S,U`VbW5\[DcF7\] 5QPN?=> ba#[qXr@0ABCDEFGHIJ%K LMNO"P#Q3R+S,T4UpVaW6Y;Z_)k}k]k JIED& U2TZ#^A BPCF=IMOAN P RS>V=W?XBZF!'!=C()1I2JBNEFI<KQNDODPESRZGH\!.0>T<U[V]W%/ YBZC[D]F^GL_Q)R+S,U`VbW5\[DcF7\] 58#[Xr@0ABC(DEFGHIJK LMNO"P#Q3RST4U(VaW6Y;ZB U2TZ#^OAXBE()DH\!2.0>T<UBZC[D]F^L_U`VbW5\[7?B D0 EEEsorry, no room for new key binding...wall chart rwall chart gwall chart mwall chart for Regular buffer, Minibuf, or Gulam? [r m or g] Briefly describe key: in Regular buffer, Minibuf, or Gulam? [r m or g] (key-code fn-code %s) %s runs %sCould not allocate %d bytes for a linebug: linsertCan't get %d bytes for killbufue as adapted by pm@cwru.edu 03/04/86help: press B for wall-chart; C for describe-key: Execute cmds in buffer [(cmd output will be in gulm buffer))(][}{delaybeep...Char=0%o point=%D(%d%%) line=%d row=%d col=%dLArg: 4Arg: %dgulam's ueinit() ran out of room [kbd macro forced to end; no more room]sorry, cannot nest key board macros[Start macro][End macro]kbd macro is :%s:sorry, cannot do recursive kbd macro!^G...ok!Unsaved buffers exist! Quit? Cannot allocate WINDOW blockCannot split a %d line windowOnly one windowImpossible changeOnly one windowImpossible changeno-op |&,HL..Lr ΠJp,:Pvl*rZ$`x f8xJ" z NX 8(Ą6<>d|Zh 8v&HNo mark set in this windowBug: lost markSearch failed: "%s"case_insensitive%s: %s: (default %s) re Search Forwardre Search Backwardre Query replacere Query replace %s with: re Query replacing %s with %s: replace, [.] rep-end, don't, [!] repl rest quit(%d replacements done)FLLL Fill column set to %dLCCAP????????????????????????L"20 .   4    F    8&     N    *. $ 6        & $ "  (  ,        (           $*     2*               $ 6 0 80*.&     ,2   <(l.&6( (     " *"      ""    (     " "$ *   &     & (&  $  . :  &*      8            ^ "  (  $ *6 $   4 &              *   (  \   **"      *    "   `$  "         * $  H P* Z"$6 2 8 "      0 $J(&:N &4 0,  H    &  *$ ( (       * ,"          ,   . 2  (*  *            (  4< 0 :8 *@ .$    ,. .   (      4       0 ` $",$ 00:B.T,2F^ L > $tr6Zh $:" <4(   n>0($"n   . , @              $       $  "  2    $  """      $F 6 , $   $ 8 F: 4   "            J .P $$,(       < ", p  jt6.  D   $      0      .  "  (& J 8  l0FD v F6 H $  ,$ ., . VR & :  (** "8 DR$ p   $    "f< >(2   64  0 PD$ *x        :      ,(   *(  *  ,  ,  R&"             $ *  ,    "   ,   T*(   ((         4  @ &  > ,   :    $  $ @ \LL     P& .2D 4  8 $4  ,  * $     $  J& B& B     ( H  "    0 "&(   "< 4(       ( ,  "&2      6"*B2$08B@, &&( h8p p ,     <       (       $$     DH  (          ,      *0 "     HBh6" Z$  F".   ,$2j*"62"2 $   &* *   "f$      * <0*      2    "    & 0      * 2n(V&  8 6  > "       ( ,    (&"P  "*( 0   FXT   ,         <:@  "   &&( "  p  8 0  6 & *  6 $ 0(2> 0 " n.:>"`$KK#$ - ЭЭй$ "ҍ|.A#$// Bg?<JNAO N BNAXBgNA#$#$#xNM"y$$y$N4Vx#$#$#NN"y$$y$N4Vx#$#$#NA"y$$y$N4VxNVH$.". BnJlVnDJlRnDvd`Bbd nmDdD-@#AP-A #ALN^NuNVH*n ..BF0.` :< `6:< `.:<`&:<`|dgܰ|og|ugذ|xgNTJl$ ndf UR- D.` 0. fμ Ef `$ Ef ` /0H/NX 2RFAA1 Ef ` Ef ` 9AP. f`>SF0@A p m0@A00| |A`0@A00|0 UR0fL N^NuNVH *n(UBG`0 HC|0>H|0m H|9o*0L0N^NuNVH*n(n -M&TX``H| f g H|%fH|%fRBn=|Bn| H|-f=|RH|0f|0R-KHnNvX=@&nH|.fR-KHnNvX=@&nH|lf=|RgH-M Gdg Gog Gxg GufF-M0.g `0H/Hn?.?N:O *n0.g0<`0<`> GcfT`0 Gsf&-TX<.` nRSF0g nf`0 nl0.g<." A`SF0f`^ .2.SAHЁ-@-@, ` .2SAHЁ @ nSSF0f` nR .o .R*@fB L8N^NuNVHnHnNPHn?< N\N^NuNVHn /.NPN^NuNVNHNNNN @NN tN^NuNVHBG`40@A3 0=@0.A+HЈ2AA3!RG GmLN^NuNVHnHnHnHnN"OBn`R2.A+20|0.2.A+20AA2.A+12.A+20|0.2.A+20AA2.A+12.A+20|0.2.A+20AA2.A+12.A+20|0.2.A+20AA2.A+10.A+ 0 =@0.A+00`0.A+Hp NX`0.Hg$0.A$RHЈ2.A+! `0.Hg$0."A$0HЈ2.A+! `0.Hg$0.A3HЈ2.A+! `R`N`L|gT|gL|g|g |g|g.|g&|gT| gNRn nRmN^NuNVHBG`L0A$RHЈ/NX0A$RHpNX0A$RHpNXRG GEmLN^NuNVHBG`0@A7HЈ/NXRGJGmLN^NuNVH*n g @A3*L N^NuNVHBG`L0"A$0HЈ/N X0"A$0HpN X0"A$0HpNXRGJGmLN^NuNVHBG`0A3HЈ/N XRGJGmLN^NuNVHBG`0@A7 HЈ/N XRGJGmLN^NuNVH*n g HA3HЈ*L N^NuNVH*n g A3*L N^NuNV09=fB?<N"\3=N^NuNV09=gB?<N"\By=N^NuNVHnHnHnHn/.N"rO?.?.?.?.?.?.?.?.BgN"NO?.?.?.?.BgBg0.2.HA?0.2.HA??<N"NO?.?.?.?.?<Bg/.N"OBg/.N"2\=@?.?.?.?.BgBg0.2.HA?0.2.HA??<N"NO?.?.?.?.?.?.?.?.?<N"NO0.N^NuNVHN!3ANHyAHyAHyCJHyA?<BgN#hOBBgN"\?<NT3ABG`"?HyCPN!8PACP  yA h yA h1| 3C`?<NT??<NX-@Bn`@ .2<6.aHf(0<nH/ </N  yAp Rn nm3A`/9AN LX=@0.H/ </N  yAp 0.`d/9AN LXH/ </N  yAp `Z/9ATN LXH/ </N  yATp `(/9AN LX3A09AH/ </N  yAp 09AH/ </N  yA p  yA h< `3=` yA0(z|gLN 3C`?<Hn/.N @O 0.g?</?<N"^\`HnHnHnHn/9AN"rO?.?.?.?.?.?.?.?.BgN"NO?.?.?.?.BgBg0.2.HA?0.2.HA??<N"NO?.?.?.?.?<Bg/9AN"O` yA0(|gB9@HnHyAHyAN"O Jnf`?<\HyAN!\-@JfHyAHy@N!8P`VR .AA?HyAHy@N!dO .AAA@HЈ @BHyAHy@N PBgHy@?<,?<N"^\`VHnHnHnHn/9@N"rO?.?.?.?.?.?.?.?.BgN"NO?.?.?.?.BgBg0.2.HA?0.2.HA??<N"NO?.?.?.?.?<Bg/9@N"ONJ@lHy>V?<N"^\ yC`o?9C`?<>NX yC`gx?.?.?.?.BgBg0.2.HA?0.2.HA??<N"NO?.?.?.?.?.?.?.?.?<N"NO`Hy>NX?<?<NVX0.gBg/HyCPN!8P yC`fHy>NXHyCPHy>HyBJNO HyBJNXJ@l0<`Bn`n0<nH/ </N  yA00 |g>?.?<NXBgHy>NB\=@JnlHy>NX0<`DRn nm?9=Hy>HyBJNO HyBJNXJ@l0<`0<N^NuNV/.?<;N\=@Jnl0<` /<-?<HN\-@Jf0<` n/.?<N\BgHn?<GNP?<?Hy??<NNP=@J@m n(H|gHy? .м/N!PgHy? .м/N!PgBgHn?<GNP0. R@? .м/NB\=@Jnl`HnN!LXJ@oHn?<;N\=@`Hy??<;N\=@Jnl`H`ACP-H .м-@=|` nH|*fR`R n nf` nH|?f RR`| nH|.fP .S @H|*fR`R nH|.fR` nH|.gBn`2`RR` nR nRgBn` nf: nH|gBn0.gBgHn?<GNP09A`B. n(H|g0<-`0<w@ n(H|g0<-`0<r@ n(H|g0<s`0<-@ n(H|g0<v`0<-@ n(H| g0<a`0<-@ n=h n=h .м/Hn?<NT|A?0.|H?0.|HH?0.|HH|P?0.|?0.|H? n/(HnHy?HyBJNO$HyBJNX=@`~ .м/Hn?<NT|A?Hy?HHyBJNOHyBJNXJ@l`?< .м/?<=NP=@=@JnlHy?\NX=@`D-yCL?<?.Hn?<WNO ?.?<>NXHy?pNX=@` .м/Hn?<NT|A?Hy?tHyBJNOHyBJNXJ@l`BgBg .м/?<CNO |=@?.?< .м/?<CNO J@lHy?NX=@`Hy?NX=@` .м/Hn?<NT|A?Hy?HyBJNOHyBJNXJ@l`BgBg .м/?<CNO |=@?.?< .м/?<CNO J@lHy?NX=@`Hy?NX=@`" .м/Hn?<NT|A?Hy?HyBJNOHyBJNXJ@l`0BgBg .м/?<CNO |=@?.?< .м/?<CNO J@lHy?NX=@`Hy@NX=@`^ .м/Hn?<NT|A?Hy@HyBJNOHyBJNXJ@l`lBgBg .м/?<CNO |=@?.?< .м/?<CNO J@lHy@&NX=@`Hy@DNX=@` .м/Hn?<NT|A?Hy@HHyBJNOHyBJNXJ@l` .м/?<AN\J@lHy@\NX=@`Hy@rNX=@` .м/Hn?<NT|A?Hy@vHyBJNOHyBJNXJ@l`BgBg .м/?<CNO | =@?.?< .м/?<CNO J@lHy@NX=@`Hy@NX=@`B`@|gt|g|g|g|g6|g|g| gRy=Jnl`N/.?<N\?<ONT=@J@l ng ng`/.?<IN\0<`/.?<IN\0. m0H>`((((0SGJ@f`O`)%)%)%)%0SGJ@fL0N^NuNVHBG".l~D$. l GD&gHC H@J@g@HCBCւJGgD-C LN^.JNuNV . @"n rJWfSWfN^NuLB@ggSBAgHJ@gHANuL rWfNu op`R@SJWfFNuNVH*n(n >.&MNqSG0J@mf`BSG0J@l L8N^NuNV nam nzn0.|a|A``0.NqN^Nu o/ fpJWf ` <gf `SNuA@"Hpr2QC!IC"!I < ` <N# <2CAN# <5` <3 CN# <4CAN#NV <6tAN#rC NNV p?@ABCDEFGpHIJpKLMpNOPUVW XYZ[\]^_`abcdef&ghi%jkl&mno pqr stuvwxz{|%}~%"&&511/0304        #( $%%%%!                          " " Q R!S"T#   !"( !"( ( $ %!%"%# $ % & ( y  '$ ($ ) "*+ % , ( -$.&/ 0123( 4 ( 5 ( 6 ( 7 ( 8 (9(:(';  2(  <= > ? @ A B  C %D $&(8H77&7(7*7@7B7D7V7X7Z7~77777777777777777777777777777777788888 88888888 8"8&8(8*8.80828D8F8H8P8R8T8Z8\8^8d8f8h8n8p8r8t8888888888888888899999>9@9B9h9j9l9999999999999999:: :":H:J:L:n:p:r::::::::::::;;;; ;";$;8;:;<;X;Z;\;d;f;h;;;;;;< < <<><@ Cannot Touch! Hiding: %c:%s\%s --> Cannot Hide! Unhiding: %c:%s\%s --> Cannot Unhide! Write Protecting: %c:%s\%s --> Cannot Write Protect! Unwrite Protecting: %c:%s\%s --> Cannot Unwrite Protect! Deleting: %c:%s\%s --> Cannot Delete! Setting Archive Bit: %c:%s\%s --> Cannot Set Archive Bit!   f ^X<*$d. "$$X*   ( .$   ( & 2. ",F$H.           :    $ ,F     ,F   D.    2       .  &$" $  \ $ $$ $*$ $*$ $*$ $*$  $ $*P , 0" ! Compilations-Optionen. 2lm7000 ! Speicherbedarf als Compilat. 6RESERVE 7000 ! Speicherbedarf im Interpreter. 8PL73 ! Ausdruck: Anzahl Zeilen pro Seite. 4N0 ! Ausdruck: Ohne Zeilennummern. i xFF Aktueller Pfad lesen. *4A?FF Aufteilung ntig fr Wieder- 04B@FF herstellung in 'main_path_write'. k*4'A:B\F Vollstndiger Pfad. 4'FF$ p$ verndert sich. ! 8 F!"8Fa! Escape-Sequenzen $4 G3WAIT=ONF _ nicht warten. $4 G3MOVE=ONF _ nicht moven. ,4FF Zustzliche O-Files fr Linker. F<lF Filesystem, BASEPAGE, Pulldown-Menu-Definitionen nFF0f&!. F Fileparameter aus der BASEPAGE. 2F Pfad in BASEPAGE absolut oder relativ? ,Fr Filesystem aus MENUDLX.DAT lesen. J file_system ! Das Filesystem betrachten.  O|.F NT& F N>=&! .GFAF 4 &FF080F Siehe weiter in Proz. 'do_fsel(...)'. 8 NFFF^!3 |Sorry, aber mich interes- |sieren nur GFA-Files! !! Weiter | Abbruch! F N ߀F FS$F$F 8 OvFT 4 FFF^!2 |Filename existiert nicht |oder Pfad ist falsch! !! Weiter | Abbruch! F Op ߀F FS$F$F$F  $8r߸XFZeichenhhe L INLINE: Zhlen der Interpreterzeilen beim Compilieren: !F` DC  p z0AFj`g0r.Ar @'d @d @dd  @ d"`&'B@H@B@H@dB@H@ H@G|pa $@F  keine DebugSymbole x*@ F Nicht xxx.prg aus xxx.gfa  2 Wer steckt dahinter? ,-------------------------,1,2,3,4,5,6, _ File - Auswahl ^A - Compiler ^C - Interpreter ^I - Linker ^L - RCS ^R -----------------  Test ^T  Execute ^X -----------------  Quit ^Q  Optionen  Interrupts I  Select S  Functions F  Procedures P  IntDiv /  IntMul *  Error E -----------------  Memory M -----------------  DebugSym D  Sets u G3WAIT W  G3MOVE M -------------- F G3OBJ O  G3PRG P  G3LIB L  PRG=GFA F2  C-Object C  Extras  Editor ^E - Finder ^F - GULAM ^G - Hilfe ^H - Filesystem  Undo (Bild) ------------- ,,,* *, F8*! FF"mF DO --- ON MENU --- LOOP FFMFF&F Hintergrund zum ersten Mal. F (dFOF V_F Blinkende Anzeige: Compilieren und Linken beendet. $F  VdFF ,F Wird aufgerufen bei Tastendruck. l4 PRINT HEX$(MENU(14),4)'''' ! Test neuer CASE. 8\ F W ݀Fu Fupper $F20 X F Diese ASCII-Codes ohne Scan-code .: X`*!/!O!L!P!M!W!CF 8 F4F@0 XF Nur die ntigen Tastenkombinationen sind wirksam. L X!;!.!@! !& !!!-!!DF" # F%L YV!!!!!~!!!2! !<!"F # F^ Y!!!'!#!a!b!W!M!O!P!L!C!/!*F # F4FF8 F Wird aufgerufen bei Pulldownklick u. Taste. ! !F! F PRINT x% ! Test neuer Menu- und Tastenwerte.  STOP &FF4F 0 ZF, ZF Wer steckt dahinter.... # F#!e FF& [!!;Fr ^A, F1 8FF.GFA F0 [ = ! .GFA ݀FFV!2 |Sorry, aber mich interes- |sieren nur GFA-Files!!! Gewiss ! F F$F \H!.F ^C  \@ F4c#+ Fg Existiert das PRG/TOS-File schon? h \:+F FF F$F$F ]lDF F10  ]d F2c#+ Fe Existiert das PRG/TOS-File schon?  ]^+F F F8 ]X)F  Nur linken wenn Compil. ohne Fehler. e F& ]R(Fn e_link + e_com = 0 p LF Wegen Zeilenabstand. nLFF8&F$F$F$F$F ]! F0 ^I SF ^J!& F0 ^L 4c#+ F  Existiert das PRG/TOS-File schon? h ^B+F F F ^<)(F LF Wegen Zeilenabstand. LFF8&F$F$F8 ^!Ff ^R GFA-Resource-Constr.-Set. F: ^!Ff ^T Test des comp. Programmes. rTF < _ !-Fs ^X Aufruf eines ext. Programmes. 8FQF  FL _j!F0 ^Q .F  Zur Alert-Box: Endfrage (ts).  _!FB ~I F _!FB ~S F _!!FB ~F F _!FB ~P F" `$!~!/F  / eF" `N!!*F  * eF `r!F ~E F a !2F ~M LY?! "Memory: "FdlF0%5 FF `k( F 4FF 8 aFF 4 FF$F a0! F ~D F a^!WF  W !F F a!MF  M !F F a!OF  O  F b|!PF  P  b^߀F Fr!PSie befinden sich im |Widerspruch! |PRG=GFA oder Editieren? |Beides geht nicht! !! Aha! ! FF 8 btF  F$F b!LF  L  F baF undo F bbF help  F> dj!<F  F2 Compilat = Filenamen oder nicht.  c= ! .GFAFs,8! F PRG=GFA oder nicht.  cFE64G3PRG='COMPILAT\TEST.PRGF Defaultpfad. r$F FEB8 dbF  Falls das GFA-File noch nicht gwhlt wurde durch ^A. .FF^!=Sinnlose Umschaltung! | |Bitte whlen Sie erst |das GFA-File!!! Okay! ! F$F. d!CF  C C-Objekt-Datei. F"LY! " C-O-Files: "FdlFFB6 e!Ff ^E Aufruf zustzl. Editor. VF: e\!!F  ^F Aufruf eines File-Finders. a\F0 e!"F  ^G Aufruf des GULAM. F& f!#FD ^H Hilfe? iFR!/ |Hahahahahaha... |Was Sie wollen MIR helfen? |!! ... ! F f4FFFe* ffF UNDO Bildregeneration. F4F, F<8*!F Setzt Hckchen ins Pulldownfeld 'PRG=GFA'. hFFM FoFZFF2F  Wird aufgerufen bei Klick im Pulldown. u#\ FF$F Wiederaufbau des Menues. PLY! FJ~FORM_DIAL(3,0,0,0,0,0,0,WORK_OUT(0),WORK_OUT(1)) ! Besser nicht... # F*8 wF  Neustart des Laufzeichen. F h"F, F Erneuerung der Optionen-Anzeige. $FF, F Anzeige von 'wait, move, Pfade'. o !F F&8wB !B !B !B !B FF7F DXGFd Weisse Flche fr die Help-Wiedergabe richtet FL݀ F sich nach dem lngsten darzustellenden String. - hF8F!&L F Help-Anzeige: wait &L F move <L F Pfad der Haupt-Bibliothek. n:L F Pfad des GFA-Objektcodes. 6L F Pfad des Programmes. dF F( Anzeige der Optionen. F 4 FF j߀F4  *&FF$F j߀F4  %3FF$F j߀F4  S&FF$F k&߀F4  SFF$F l(B F4  mFF$F l߀F l= ! .GFAF,4G3PRG=; !B ߀ .PRGFG lF 4FF$F$F$FD mB F Lnge der weissen Flche richtet sich nach dem 8B F lngsten Eintrag. $FH m= ! .GFAFF bernahme des Filenamens nur wenn es ein 4( FF GFA-File ist. @ m ߀F 4(Nur GFA-File laden!F&$F button% = Tasten der FS-Box. hJ8wB( !#B  !ߠ F Lnge des weissen Feldes. tFj!݀!ߠ#߀ !݀F Weisse Flche fr Schrift. v|!݀߀!߰#߀ !F Rahmen um die weisse Flche. <T!!(F Auswahl-Pfad des GFA-Files.. r8T!݀!Com: Fl Compileroptionen. 2T!ݠ!Lnk:F Linkeroptionen.  p߀FO2T+!ݠ!-sF Debug-Information $FTC!ݠ! FFF.!2 F Aufruf der Fileselector-Box. h9FF 4*F649FF Wegen der Vorwahl des Extention-Knopfes. 2 f$="" ! verndert !!!!!!!!  tЮ9! ! F& q ߀Fu Taste 'Okay'. 40F Weil mit FS-Box neues File gelesen wurde. 249FF Pfad wird nur mit 'Okay' bernommen. ! 4 FF:4! FF Zusatzspeicherung bentigt, weil 'f$' ndert. 8 rF  Taste 'Abbruch'. : rz0Fs Wenn MENUDLX mit Fileparameter gestartet 3*4&FF und FS-Box abgebrochen wurde. *jF Filename aus Pfad maskieren. 8 rF0 4 !FF 4FF$F$F<PRINT "Pfad: ";p1$ ! Nur fr Parameter-Test. <PRINT "File: ";f$ ! " " " " . <taste ! " " " " .  s= ! .TOSF,F Maus verstecken bei TOS-Programmen. $F s< B F4 ; !B  F  sF!8!\ F t F4;! F$F t@< .F4 ; !B  F$F t F ttD !. F 4 F$F 4  F 4FF$F 8 tFF 4 FF$FDF Damit nach der Filesectorbox der Titel wieder erscheint. F6F Sorgt fr 'crslin > 7' and 'crscol = 1'.  uZ8FsLY! "FF$F u|9߀FsLFF$FL!wFL!FL!F \FFSF  Interpreter  F " vPB = ! .GFAF'24  -  FF Wird dem Interpreter bergeben. 8 Fe 8 vF- 4 FFF`!5 |GFA-File wurde nicht geladen! |Was soll geschehen? !! INTERP. | Menu ! F$F z ߀FuFs8wB !B FLY! "FF7F >XGFa Damit beide Zeilen gleich lang werden. L F w^F8F>L Starting (Interpreter): "F Pfad des Interpreters. -:L Starting (GFA-File): " F Pfad des GFA-Files. Fs:`2F Damit Pfade etwas lnger lesbar sind (ts). c x F 4L FF~F Pfad ohne Filename. 24FHFF Anpassung des aktuellen Pfades an den 2vFF des GFA-Files welches ausgewhlt wurde. $F 8>FF8_!! ! FwFF yz݄FaFFT!2 | |Leider ist der Interpreter |nicht ansprechbar!!! Aha! ! FL 8 zFDF Zurck von ext. Programm, wieder grauer Hintergrund (ts). F"LArbeitszeit im Interpreter:FF F!$F$FFF Compiler Fm2LY! "Ruhe, ich bersetze gerade! FFm7F 8>FFFFFF&LY! " "F>LY*! " <--- ZeileF Daneben die Zeilennummern. :8F Der Compiler setzt manchmal den Cursor auf 1,1. 8)_!!X  ! FF {)݄FFt!P |Wie soll ich bloss ein GFA- |File bersetzen, wenn ich |keinen COMPILER finde!!! Stimmt ! Fr@ |X)FF h! |Eine bse berraschung! |) " Befehle wurden nicht | bersetzt.!!Abbruch!! F$FF! F!F F Linker rFF2LY! "Ich linke jetzt! FF 8>FF |߀Fi 4-s F 8 }F- 4FF$FFF8(_!!X! FF }N(FF Fe@ }(݄Fa FFt!R |Entweder ist der LINKER nicht |anwesend, oder es hat Fehler |in den Parametern! !! Hmmm? ! F@ ~(FeCFLFFCFLFF F>FFl!E |Anzahl undefinierter Symbole |und/oder Offsetberschrei- |tungen: ( !! Ojee! ! F$FF!HFF0TF Starten des compilierten Programmes. S4 >! F  T F = ! .TTPFF!iUm TTP-Programme zu starten, |benutzen Sie einen Zeilen- |kommandointerpreter oder |eine geeignete Shell!!! Jawohl ! FF 8 F X F 4L FF~F Pfad ohne Filename. 24FHFF Anpassung des aktuellen Pfades an den 2vFF des GFA-Files welches ausgewhlt wurde. $F# FF>LY! " Executing: " F! Programmstart-Anzeige. Fs `%F 8>FFHF_! !! F&wF Hauptpfad wiederherstellen. FF Zurck von comp. Programm, wieder grauer Hintergrund (ts). -Fb&LArbeitszeit des Testprogrammes:FFb F!$F 8 FTFJ!(| | Wo nichts ist, | luft auch nichts! !! Jaja! ! F$FF,QF Aufruf eines externen Programmes. T!. | |PRG oder TOS ? |Das ist hier die Frage. !! PRG | TOS ! F< ߀F. Entscheiden zwischen PRG oder TOS. 4.PRGFF@ $ ߀FoD4.TOSFF Maus verstecken HIDEM folgt direkt vor TOS-Aufruf. .$F: F HIDEM in dieser Prozedur, falls TOS gilt. < F ߀#= ! .PRG= ! .TOS F 4FFF,vF Neuer Pfad fr externes Programm. # FF&LY! " Executing: " FFF `%F 8>FF<8_!!! F Nur falls PRG oder TOS gewhlt wurde. &wF Hauptpfad wiederherstellen. (HF Wenn von xxxx.TOS retour ntig. @F Zurck von ext. Programm, wieder grauer Hintergrund. uFFFb,L$Arbeitszeit des externen Programmes:FFFb F!(@ ߀= ! .TTPFaF!aUm TTP-Programme zu starten, |benutzen Sie GULAM oder |einen andern Zeilenkommando- |interpreter!!! Jawohl ! FF@ ` ߀FhFH!'| |PRG oder TOS sollte |es schon sein! !! Klar! ! F$F 8FFF6F Direktaufruf des GFA-Recource-Constr.-Set. # FF"LY! " Starting: "FF 8>FFHF8_!!! F. ݄F RSC gibt es nicht. tFh!E|Tut mir leid, aber das |Resource-Programm konnte |ich nicht finden! !! Ach so ! FAFF 8 FeFFb,L$Arbeitszeit im Resource-Constr.-Set:FFFb F$FF0F Environment-String fr den Compiler. S4B F$4 FF$ 2 Fe Editieren der Pfade. u4>! FF LY! " Editiere: FFFLY! "FFL;! "FFdlF 4 FF NB F4;! F$F FFF$ (rXF nix wenn irq% leer z8AV F`GHF A F !F8F$F F߄CF߀CF$FFF߀CF8AV F`GHF A F!F$F FFFF$F Lsche GEM Tastaturpuffer. ux {!!!!!!!!!!!!!!!!d FFF F!L Aus PROCEDURE chek(x%) F 44+| |Haben Sie wirklich etwas |Besseres vor? F4 Klar! | Nein. F2!!!! F  Alertbox - Endfrage  d ߀FiFS$FFFF,RESERVE ! Speicher wider freigeben. FF> F Falls etwas verbessert werden soll im Interpreter.... F F! F! Bildmitte ca. x = 155 , y = 101 , nur unger. Zahlen. F XF t!!Fu<ߠ!ݠ!ݴ!FQt!!F&!!߲!Ft!!Fe<!!ݰ!FQ<|߀!݀!ݱ!FQ&|!!߲!F<#!ݤ!GFA-MENU-DELUXE F>#!ݠ!Thomas Schaerer Fi<#!!Im Lindenhof 6 FiD#!݀!CH-Effretikon (Schweiz) FJ#!ݛ!Dieses Programm wird mit der FJ#!ݩ!dazugehrigen GFA-3.5-BASIC- FH#!ݷ!Datei, gratis an GFA-Basic- FH#!!Enthusiasten weitergegeben. FF <FF<#!ݤ!GFA-MENU-DELUXE F XF( <߀<SF XFHFF2 !!2!K F Gehrt zur Prozedur 'info'. p!!!2F XFT !!KF!p!!!2F XF"T ߀!݀!KF XFF 1 Ft!!1F!!!FWF6 F Vollstndig neue Zeitanzeige in H:M:S (ts). F 60#> Fl Zeitdifferenz in Sekunden LZeit: "FF FL##.###!7"FFL Sek. "FF@ n F L7% " Min. "FFL##.###!7 "FL Sek. "FF 8 FkDL7% " Std. "7% " Min. "FL##.###!7 "FL Sek. "FF$FF>ZF Zustzliche Infos ber Einstellungen in Menuzeile.  ߀F 7FFLYA! "PRG=GFA"FFF8F$FFF GFA-MENU-DELUXE t!!Ft!h!!F XFp!!!F8T!|!#G F A - M E N U E - D e l u x eFFp!!!F."T!|! GFA-3.x-BASICF-p!!!FPTT!!@Fr den I N T E R P R E T E R und den C O M P I L E R .F8p!!! Fg Wieder normale Schrift i XFLY! "FFFL? = Kompilieren und Linken, nach Auswahl (^A oder F1). FFL? = Parameter des Sets-Menue und Bildregeneration. FFL? = Bildregenaration des Menue (z.B. nach Accessory). FFUFOF p!!!F XFT ߉ ݛF Dies ist einerseits eine Spielerei, ander- :8 &F seits kann man gewisse Abstrze leicht t*$F durch dessen Stoppen erkennen. A@T !!_F  Und berhaupt, warum immer alles so tie- e  F_ risch ernst? ap!!! F XF F4F Klingt wie eine Schweizer Bahnhofglocke. l8V!!߀ F 3 Tonkanle <V!!߀߀ F Hllk. Kanal 1 C<V!!ߐ߀ F Hllk. Kanal 2 C<V!!ߠ߀ F Hllk. Kanal 3 C<V!!߰߀ F Hllk. Lowbyte C<V!!߀ F Hllk. Highbyte >V! !߀ F Hllk. abklingend @V!?!߀ F Tonfreq. Lowbyte Kanal 1 HV!!߀߀ F Tonfreq. Highbyte Kanal 1 HV!2!߀߀ F Tonfreq. Lowbyte Kanal 2 HV!!߀ F Tonfreq. Highbyte Kanal 2 HV!%!߀߀ F Tonfreq. Lowbyte Kanal 3 HV!!ߠ߀ F Tonfreq. Highbyte Kanal 3 F>VF Aufruf zu zustzlichem Editor, z.B. Textvergleich. W 4! F B8 F Damit ohne Parameter Editor gestartet werde kann. P n(Nur GFA-File laden!FT LST-File nur suchen wenn GFA-File geladen. oH T;(!#B( ߀ .LST F  Zum geladenen GFA-File das D44;(!#B( ߀ .LSTF gleichnamige LST-File suchen. 8 hFT:4F Parameter lschen, falls keines gesendet wird. eF!XSie haben vergessen ein |LST-File zu erzeugen! |Weiter zum Editor oder zurck |ins Menu?!! Editor | Menu ! F$F$FF | ߀Fc Editor starten mit oder ohne File-Parameter. # FF.LY! "Starting (Editor): "2FF.LY! "Starting (LST-File): "4FFF `%F 8>FFHF*8_!2!BB4 4B ! F Run 0 ݄F+ Editor gibt es nicht. Ff!B|Tut mir leid, aber der |zustzliche Editor ist |in St. Anderswo! !! Na ja. ! FFFF 8 vFeFFb,L$Arbeitszeit im zustzlichen Editor: FFFb F$F$FF6\Fi Aufruf eines File-Finders, z.B. QUICKFIND. n F # FF.LY! "Starting (Finder): "5FFF `%F 8>FF XT5 F7FFFFLY! "FFDL= ACHTUNG: Bei Verwendung des QUICKFIND.PRG - FFL= Abbruch nicht benutzen, sonst Verhalten der Maus gestrt! "FFFb8FF8_!5!! F Run FFb$LArbeitszeit im File-Finder: FFFb F 8 FlF^!;|Tut mir leid, aber der File- |Finder ist nicht zu finden! !! Na ja. ! FFc$FF8F Aufruf des GULAM-Zeilenkommandointerpreters. . 4LIFF~F 4FHFF4vF Pfad damit GULAM.PRG sein GULAM.G findet. # FF&LY! " Executing: "I FFF `%FF 8>FF&8_!I!! F GULAM - Aufruf. &wF Hauptpfad wiederherstellen. (HF Wenn von xxxx.TOS retour ntig. @F Zurck von ext. Programm, wieder grauer Hintergrund. uFFFbLArbeitszeit im GULAM:FFb F!F8_F Blinkende Meldung nach Comp.- und Link.-Ende. 'FN P#'  #' ߀ #' ߀ FF $F7F2L+Compilieren und Linken erfolgreich beendet!F8FF F #2 F:lF% ! Compiler: ENDFUNC-Behandlung.  B F T FDF$F$F.GFA F TB F NT FDF$F$FDF,F c2+ FF.4L>! F Filtert Pfad + Filename. e~F Filtert Pfad. 8 TL F Existiert Pfad u. PRG/TOS-File bereits? Fv!MDateiname existiert bereits! | |berschreiben = Weiter |Zurck = Menu !! Weiter | Menu !+F +߀Fe8+F 8 F&8+FF Keine weiteren Aktionen. /$F 8 FF8+F$FF*f2&!. F Filepar. aus der BASEPAGE !F 8/FFXGFa8.߁FD?/ FF: Fd Endung NULL oder . -4&&B F 8F 4&& FFF*jF Siehe Prozedur 'do_fsel(...)'. mFF <XG Fd Maskiert den Filenamen mit Extension &4 =! F aus dem ganzen Pfad. l ; ! \F 8F@4 = !#B ߀ F  Conversion in Grossbuchstaben. F~F !F XG F 4=L! F : \FF F4H;L!#BL  \FF,vF Neuer Pfad fr externes Programm. FF Laufwerk \ Pfad B?F!!#BF  FA Pfad alleine ohne Laufwerk. F.wF  Pfad dieses Menu wiederherstellen. AFBFFF6xF Testen ob aktueller Pfad bernommen wurde. (4?BW  F Laufwerk n$4@ F Pfad ohne Laufwerk eF0F Lesen des GFA-MENU-Deluxe-Filesystem.  F Bildschirm lschen ab Cursor LB J"FF 2HF  Abfangen unerlaubter Tastenbettigungen F FF TFnF<IF Rckgabe-Charakter in 'key%' und 'key$' (Global) gHF 8J F 4B FFF  J >>>>>>>>>>>>>>>>>>>>>>>>>>> E N D E <<<<<<<<<<<<<<<<<<<<<<<<<<<<< B ` C p z0AFj`g0r.Ar @'d @d @dd  @ d"`&'B@H@B@H@dB@H@ H@G|pa PROCEDURE defines ! RESERVE, Comp-Opt, Aktueller Pfad, Definitionen $E$ ! Fehlermeldung als Text. $s&,s<,f<,p> ! Compilations-Optionen. $m7000 ! Speicherbedarf als Compilat. RESERVE 7000 ! Speicherbedarf im Interpreter. .PL73 ! Ausdruck: Anzahl Zeilen pro Seite. .N0 ! Ausdruck: Ohne Zeilennummern. path_read ! Aktueller Pfad lesen. maindrive$=drive_read$ ! Aufteilung ntig fr Wieder- mainpath_only$=path_read$ ! herstellung in 'main_path_write'. mainpath$=maindrive$+":"+mainpath_only$+"\" ! Vollstndiger Pfad. p$=mainpath$ ! p$ verndert sich. ' button%=1 esc%=27 ! Escape-Sequenzen t_wait$="G3WAIT=ON" ! _ nicht warten. t_move$="G3MOVE=ON" ! _ nicht moven. cobj$="" ! Zustzliche O-Files fr Linker. RETURN > PROCEDURE startup ! Filesystem, BASEPAGE, Pulldown-Menu-Definitionen CLS file_parameter(pfad$,anz_zeichen%) ! Fileparameter aus der BASEPAGE. relat_absol_filepar ! Pfad in BASEPAGE absolut oder relativ? menudlx.dat ! Filesystem aus MENUDLX.DAT lesen. ' file_system ! Das Filesystem betrachten. IF anz_zeichen%>0 IF EXIST(pfad$) IF RIGHT$(pfad$,4)=".GFA" f$=pfad$ filepar_flag%=TRUE ! Siehe weiter in Proz. 'do_fsel(...)'. ELSE sbb_bell ALERT 1," |Sorry, aber mich interes- |sieren nur GFA-Files! ",1," Weiter | Abbruch",ret% IF ret%=2 ende ENDIF ENDIF ELSE f$="" sbb_bell ALERT 1," |Filename existiert nicht |oder Pfad ist falsch! ",1," Weiter | Abbruch",ret% IF ret%=2 ende ENDIF ENDIF ENDIF ' ' fh%=INT{L~A-46} !Zeichenhhe ' INLINE: Zhlen der Interpreterzeilen beim Compilieren: INLINE irq%,&HD6 {irq%+2}=V:a& BYTE{irq%+6}=32+35 !WORK_OUT(0)/8-5 DIM a$(100) FOR i%=0 TO 100 READ a$(i%) EXIT IF a$(i%)="*" NEXT i% coi&=0 ! Kein I cos&=3 ! S& und s< cof&=1 ! F< cod&=0 ! Kein %3 com&=0 ! Kein *& coe&=0 ! Kein E cop&=0 ! Kein P> dbsym&=0 ! keine DebugSymbole auto&=0 ! Nicht xxx.prg aus xxx.gfa DATA  DATA Wer steckt dahinter? DATA -------------------------,1,2,3,4,5,6, DATA File DATA Auswahl ^A DATA Compiler ^C DATA Interpreter ^I DATA Linker ^L DATA RCS ^R DATA ----------------- DATA Test ^T DATA Execute ^X DATA ----------------- DATA Quit ^Q DATA DATA Optionen DATA Interrupts I DATA Select S DATA Functions F DATA Procedures P DATA IntDiv / DATA IntMul * DATA Error E DATA ----------------- DATA Memory M DATA ----------------- DATA DebugSym D DATA DATA Sets DATA G3WAIT W DATA G3MOVE M DATA -------------- DATA G3OBJ O DATA G3PRG P DATA G3LIB L DATA PRG=GFA F2 DATA C-Object C DATA DATA Extras DATA Editor ^E DATA Finder ^F DATA GULAM ^G DATA Hilfe ^H DATA Filesystem DATA Undo (Bild) DATA ------------- DATA ,,,* MENU a$() MENU 42,auto& RETURN > PROCEDURE main ! DO --- ON MENU --- LOOP ON MENU GOSUB men ON MENU KEY GOSUB key cur @cls ! Hintergrund zum ersten Mal. DO ON MENU 100 laufzeichen IF MOUSEK CLR complink% ! Lschwirkung durch MENU und Tastatur, siehe ENDIF ! Prozedur 'check(x)'. IF complink%=TRUE complinkend ! Blinkende Anzeige: Compilieren und Linken beendet. ENDIF LOOP RETURN ' > PROCEDURE key ! Wird aufgerufen bei Tastendruck. ' PRINT HEX$(MENU(14),4)'''' ! Test neuer CASE. key%=MENU(14) IF BYTE(key%)>64 SUB key%,32 !upper ENDIF SELECT BYTE(key%) ! Diese ASCII-Codes ohne Scan-code CASE "*","/","O","L","P","M","W","C" key%=BYTE(key%) ENDSELECT SELECT key% ! Nur die ntigen Tastenkombinationen sind wirksam. CASE &H1E01,&H3B00,&H2E03,&H440,&H1709,&H260C,&H1312,&H1414,&H2D18,&H1011,&H4400 check(key%) CASE &H1700,&H1F00,&H2100,&H1900,&H7E00,&H7F00,&H1200,&H3200,&H2000,&H3C00,&H2207 check(key%) CASE &H1205,&H2106,&H2707,&H2308,&H6100,&H6200,"W","M","O","P","L","C","/","*" check(key%) ENDSELECT RETURN > PROCEDURE check(x%) ! Wird aufgerufen bei Pulldownklick u. Taste. LOCAL exten$,ret%,anz% ' ' PRINT x% ! Test neuer Menu- und Tastenwerte. ' STOP CLR complink% MENU KILL SELECT x% CASE -1 ! Wer steckt dahinter.... hintergrund(7) info(155,101) @cls CASE -11,&H1E01,&H3B00 ! ^A, F1 exec_flag%=NOT TRUE do_fsel(".GFA",f$) IF f$<>"" AND RIGHT$(f$,4)<>".GFA" AND button%=1 sbb_bell ALERT 1," |Sorry, aber mich interes- |sieren nur GFA-Files!",1," Gewiss ",dummy% CLR f$ ENDIF CASE -12,&H2E03 ! ^C IF @chk_file(f$) file_exist(weiter%) ! Existiert das PRG/TOS-File schon? IF weiter%=TRUE keyclr @cls compile ENDIF ENDIF CASE &H4400 ! F10 IF @chk_file(f$) file_exist(weiter%) ! Existiert das PRG/TOS-File schon? IF weiter%=TRUE @cls compile IF e_com%=0 ! Nur linken wenn Compil. ohne Fehler. link IF e_link%=0 ! e_link + e_com = 0 PRINT ! Wegen Zeilenabstand. PRINT complink%=TRUE ENDIF ENDIF ENDIF ENDIF CASE -13,&H1709 ! ^I interpr CASE -14,&H260C ! ^L file_exist(weiter%) ! Existiert das PRG/TOS-File schon? IF weiter%=TRUE @cls link IF e_com%=0 AND e_link%=0 PRINT ! Wegen Zeilenabstand. PRINT complink%=TRUE ENDIF ENDIF CASE -15,&H1312 ! ^R GFA-Resource-Constr.-Set. rcs CASE -17,&H1414 ! ^T Test des comp. Programmes. test_progr CASE -18,&H2D18 ! ^X Aufruf eines ext. Programmes. exec_flag%=TRUE progr_ext CLR button% CASE -20,&H1011 ! ^Q endfrage ! Zur Alert-Box: Endfrage (ts). CASE -23,&H1700 ! ~I INC coi& CASE -24,&H1F00 ! ~S INC cos& CASE -25,&H2100 ! ~F INC cof& CASE -26,&H1900 ! ~P INC cop& CASE -27,&H7E00,"/" ! / INC cod& CASE -28,&H7F00,"*" ! * INC com& CASE -29,&H1200 ! ~E INC coe& CASE -31,&H3200 ! ~M PRINT AT(63,3);"Memory: "; FORM INPUT 7 AS m$ n=INT(VAL(m$)) IF n>1000000000 OR n<=0 m$="" ELSE m$=STR$(n) ENDIF CASE -33,&H2000 ! ~D INC dbsym& CASE -36,"W" ! W SWAP twait$,t_wait$ help CASE -37,"M" ! M SWAP tmove$,t_move$ help CASE -39,"O" ! O in(tobj$) CASE -40,"P" ! P IF auto%=1 sbb_bell ALERT 1,"Sie befinden sich im |Widerspruch! |PRG=GFA oder Editieren? |Beides geht nicht! ",1," Aha! ",dummy% ELSE in(tprg$) ENDIF CASE -41,"L" ! L in(tlib$) CASE &H6100 ! undo @cls CASE &H6200 ! help help CASE -42,&H3C00 ! F2 Compilat = Filenamen oder nicht. IF RIGHT$(f$,4)=".GFA" auto%=XOR(auto%,1) ! PRG=GFA oder nicht. IF auto%=0 tprg$="G3PRG="+mainpath$+"COMPILAT\TEST.PRG" ! Defaultpfad. ENDIF help ELSE ! Falls das GFA-File noch nicht gwhlt wurde durch ^A. sbb_bell ALERT 1,"Sinnlose Umschaltung! | |Bitte whlen Sie erst |das GFA-File!",1," Okay! ",dummy% ENDIF CASE -43,"C" ! C C-Objekt-Datei. @cls PRINT AT(1,7);" C-O-Files: "; FORM INPUT 70 AS cobj$ @cls CASE -46,&H1205 ! ^E Aufruf zustzl. Editor. editor CASE -47,&H2106 ! ^F Aufruf eines File-Finders. finder CASE -48,&H2207 ! ^G Aufruf des GULAM. gulam CASE -49,&H2308 ! ^H Hilfe? sbb_bell ALERT 1," |Hahahahahaha... |Was Sie wollen MIR helfen? |",1," ... ",dummy% CASE -50 file_system @cls CASE -51 ! UNDO Bildregeneration. @cls ENDSELECT MENU a$() MENU 42,auto% ! Setzt Hckchen ins Pulldownfeld 'PRG=GFA'. ON MENU GOSUB men ON MENU KEY GOSUB key com_opt keyclr menu_info RETURN > PROCEDURE men ! Wird aufgerufen bei Klick im Pulldown. check(-MENU(0)) RETURN > PROCEDURE cls ! Wiederaufbau des Menues. PRINT AT(1,1) ' ~FORM_DIAL(3,0,0,0,0,0,0,WORK_OUT(0),WORK_OUT(1)) ! Besser nicht... hintergrund(3) xx%=375 ! Neustart des Laufzeichen. titel IF exec_flag%=NOT TRUE com_opt ! Erneuerung der Optionen-Anzeige. ENDIF RETURN > PROCEDURE help ! Anzeige von 'wait, move, Pfade'. LOCAL anz%,i% ' @cls anz%=MAX(LEN(tmove$),LEN(tlib$),LEN(tobj$),LEN(tprg$),LEN(twait$)) cur stor_curs FOR i%=0 TO 4 ! Weisse Flche fr die Help-Wiedergabe richtet PRINT SPACE$(anz%+1) ! sich nach dem lngsten darzustellenden String. NEXT i% restor_curs PRINT UPPER$(twait$) ! Help-Anzeige: wait PRINT UPPER$(tmove$) ! move PRINT UPPER$(tlib$) ! Pfad der Haupt-Bibliothek. PRINT UPPER$(tobj$) ! Pfad des GFA-Objektcodes. PRINT UPPER$(tprg$) ! Pfad des Programmes. RETURN > PROCEDURE com_opt ! Anzeige der Optionen. LOCAL i% ' co$="" IF com& AND 1 co$=co$+" *&" ENDIF IF cod& AND 1 co$=co$+" %3" ENDIF IF cos& AND 1 co$=co$+" S&" ENDIF IF cos& AND 2 co$=co$+" S<" ENDIF IF coe& AND 1 co$=co$+" E$" ENDIF IF coe& AND 2 co$=co$+" E-" ENDIF IF coi& AND 1 co$=co$+" I+" ENDIF IF cof& AND 1 co$=co$+" F<" ENDIF IF cop& AND 1 co$=co$+" P>" ENDIF IF LEN(m$) co$=co$+" m"+m$ ENDIF IF auto%=1 IF RIGHT$(f$,4)=".GFA" z$="G3PRG="+LEFT$(f$,LEN(f$)-4)+".PRG" IF z$<>tprg$ tprg$=z$ ENDIF ENDIF ENDIF IF LEN(co$)>lastlen_co% ! Lnge der weissen Flche richtet sich nach dem lastlen_co%=LEN(co$) ! lngsten Eintrag. ENDIF IF RIGHT$(f$,4)=".GFA" ! bernahme des Filenamens nur wenn es ein ff$=f$ ! GFA-File ist. ELSE IF exec_flag=NOT TRUE AND button%=1 ff$="Nur GFA-File laden!" ENDIF ! button% = Tasten der FS-Box. i%=MAX(LEN(ff$),(LEN(cobj$)+8),lastlen_co%+5) ! Lnge des weissen Feldes. DEFFILL 0 PBOX 2,fh%*2,10+(i%*8),5*fh%+2 ! Weisse Flche fr Schrift. BOX 1,fh%*2-1,11+(i%*8),5*fh%+3 ! Rahmen um die weisse Flche. TEXT 3,fh%*3,ff$ ! Auswahl-Pfad des GFA-Files.. TEXT 3,fh%*4,"Com:"+co$ ! Compileroptionen. TEXT 3,fh%*5,"Lnk:" ! Linkeroptionen. IF dbsym& AND 1 TEXT 43,fh%*5,"-s" ! Debug-Information ENDIF TEXT 67,fh%*5,UPPER$(cobj$) cur RETURN > PROCEDURE do_fsel(x$,VAR f$) ! Aufruf der Fileselector-Box. LOCAL p1_new$ ' p1$=p$+"*"+x$ p1_new$=p1$ ! Wegen der Vorwahl des Extention-Knopfes. ' f$="" ! verndert !!!!!!!! IF FSEL_INPUT(p1_new$,file$,button%) IF button%=1 ! Taste 'Okay'. CLR filepar_flag% ! Weil mit FS-Box neues File gelesen wurde. p1$=p1_new$ ! Pfad wird nur mit 'Okay' bernommen. f$=file$ file_mem$=file$ ! Zusatzspeicherung bentigt, weil 'f$' ndert. ELSE ! Taste 'Abbruch'. IF filepar_flag%=TRUE ! Wenn MENUDLX mit Fileparameter gestartet p1$=pfad$ ! und FS-Box abgebrochen wurde. file_von_pfad ! Filename aus Pfad maskieren. ELSE f$=file_mem$ x$="" ENDIF ENDIF ' PRINT "Pfad: ";p1$ ! Nur fr Parameter-Test. ' PRINT "File: ";f$ ! " " " " . ' taste ! " " " " . IF RIGHT$(f$,4)=".TOS" HIDEM ! Maus verstecken bei TOS-Programmen. ENDIF WHILE RIGHT$(f$)=CHR$(0) f$=LEFT$(f$,LEN(f$)-1) WEND p%=RINSTR(p1$,"\") IF p% p1$=LEFT$(p1$,p%) ENDIF IF RIGHT$(f$)="." f$=LEFT$(f$,LEN(f$)-1) ENDIF IF f$<>"" IF INSTR(f$,".")=0 f$=f$+x$ ENDIF f$=p1$+f$ p$=p1$ ENDIF ELSE f$="" ENDIF @cls ! Damit nach der Filesectorbox der Titel wieder erscheint. RETURN > PROCEDURE cur ! Sorgt fr 'crslin > 7' and 'crscol = 1'. IF CRSLIN<7 PRINT AT(1,7); ENDIF IF CRSCOL>1 PRINT ENDIF SETCOLOR 0,&H777 SETCOLOR 3,0 SETCOLOR 15,0 DEFMOUSE 0 RETURN > PROCEDURE interpr ! Interpreter LOCAL ret% ' IF LEN(f$) AND RIGHT$(f$,4)=".GFA" f1$=" - "+f$ ! Wird dem Interpreter bergeben. ret%=1 ELSE f1$="" sbb_bell ALERT 1," |GFA-File wurde nicht geladen! |Was soll geschehen? ",1," INTERP. | Menu ",ret% ENDIF IF ret%=1 revrs_curs anz%=MAX(LEN(gfaint$),LEN(f$)) PRINT AT(1,18); stor_curs FOR i%=0 TO 1 ! Damit beide Zeilen gleich lang werden. PRINT SPACE$(anz%+26) NEXT i% restor_curs PRINT " Starting (Interpreter): ";gfaint$ ! Pfad des Interpreters. PRINT " Starting (GFA-File): ";f$ ! Pfad des GFA-Files. norm_curs PAUSE 50 ! Damit Pfade etwas lnger lesbar sind (ts). IF f$<>"" pfad_file$=f$ pfad_nur ! Pfad ohne Filename. p_current$=pfadnur$ ! Anpassung des aktuellen Pfades an den new_path_write ! des GFA-Files welches ausgewhlt wurde. ENDIF t%=TIMER e%=EXEC(0,gfaint$,f1$,"") main_path_write IF e%=-33 sbb_bell ALERT 1," | |Leider ist der Interpreter |nicht ansprechbar!",1," Aha! ",dummy% ELSE @cls ! Zurck von ext. Programm, wieder grauer Hintergrund (ts). revrs_curs PRINT "Arbeitszeit im Interpreter:" norm_curs tmx ENDIF ENDIF RETURN > PROCEDURE compile ! Compiler revrs_curs PRINT AT(1,7);"Ruhe, ich bersetze gerade! " norm_curs stor_curs t%=TIMER env i_on PRINT AT(30,1);" "; PRINT AT(42,1);"<--- Zeile" ! Daneben die Zeilennummern. restor_curs ! Der Compiler setzt manchmal den Cursor auf 1,1. e_com%=EXEC(0,gfacom$,"X"+f$+co$,env$) IF e_com%=-33 sbb_bell ALERT 1," |Wie soll ich bloss ein GFA- |File bersetzen, wenn ich |keinen COMPILER finde!",1," Stimmt ",dummy% ELSE IF e_com%>0 sbb_bell ALERT 1," |Eine bse berraschung! |"+STR$(e_com%)+" Befehle wurden nicht | bersetzt.",1,"Abbruch!",dummy% ENDIF i_off tmx RETURN > PROCEDURE link ! Linker HIDEM revrs_curs PRINT AT(1,11);"Ich linke jetzt! " norm_curs t%=TIMER IF dbsym& AND 1 s$="-s " ELSE s$="" ENDIF env e_link%=EXEC(0,gfalnk$,"X"+s$+cobj$,env$) IF e_link%=0 tmx ELSE IF e_link%=-33 tmx sbb_bell ALERT 1," |Entweder ist der LINKER nicht |anwesend, oder es hat Fehler |in den Parametern! ",1," Hmmm? ",dummy% ELSE IF e_link%>0 cl_line_after_curs PRINT cl_line_after_curs PRINT tmx cls_after_curs sbb_bell ALERT 1," |Anzahl undefinierter Symbole |und/oder Offsetberschrei- |tungen: "+STR$(e_link%),1," Ojee! ",dummy% ENDIF keyclr SHOWM RETURN > PROCEDURE test_progr ! Starten des compilierten Programmes. t$=UPPER$(MID$(tprg$,7)) IF EXIST(t$) IF RIGHT$(t$,4)=".TTP" sbb_bell ALERT 1,"Um TTP-Programme zu starten, |benutzen Sie einen Zeilen- |kommandointerpreter oder |eine geeignete Shell!",1," Jawohl ",dummy% ELSE IF t$<>"" pfad_file$=t$ pfad_nur ! Pfad ohne Filename. p_current$=pfadnur$ ! Anpassung des aktuellen Pfades an den new_path_write ! des GFA-Files welches ausgewhlt wurde. ENDIF hintergrund(7) revrs_curs PRINT AT(1,17);"Executing: ";t$ ! Programmstart-Anzeige. norm_curs PAUSE 37 t%=TIMER SHOWM ~EXEC(0,t$,"","") main_path_write ! Hauptpfad wiederherstellen. @cls ! Zurck von comp. Programm, wieder grauer Hintergrund (ts). revrs_curs PRINT "Arbeitszeit des Testprogrammes:" norm_curs tmx ENDIF ELSE sbb_bell ALERT 1,"| | Wo nichts ist, | luft auch nichts! ",1," Jaja! ",dummy% ENDIF RETURN > PROCEDURE progr_ext ! Aufruf eines externen Programmes. ALERT 2," | |PRG oder TOS ? |Das ist hier die Frage. ",1," PRG | TOS ",ret% IF ret%=1 ! Entscheiden zwischen PRG oder TOS. exten$=".PRG" ELSE IF ret%=2 exten$=".TOS" ! Maus verstecken HIDEM folgt direkt vor TOS-Aufruf. ENDIF do_fsel(exten$,x$) ! HIDEM in dieser Prozedur, falls TOS gilt. IF button%=1 AND (RIGHT$(file$,4)=".PRG" OR RIGHT$(file$,4)=".TOS") p_current$=p$ new_path_write ! Neuer Pfad fr externes Programm. hintergrund(7) revrs_curs PRINT AT(1,17);"Executing: ";UPPER$(x$) norm_curs PAUSE 37 t%=TIMER e%=EXEC(0,x$,"","") ! Nur falls PRG oder TOS gewhlt wurde. main_path_write ! Hauptpfad wiederherstellen. SHOWM ! Wenn von xxxx.TOS retour ntig. @cls ! Zurck von ext. Programm, wieder grauer Hintergrund. cur revrs_curs PRINT "Arbeitszeit des externen Programmes:" norm_curs tmx ELSE IF button%=1 AND RIGHT$(file$,4)=".TTP" sbb_bell ALERT 1,"Um TTP-Programme zu starten, |benutzen Sie GULAM oder |einen andern Zeilenkommando- |interpreter!",1," Jawohl ",dummy% ELSE IF button%=1 sbb_bell ALERT 1,"| |PRG oder TOS sollte |es schon sein! ",1," Klar! ",dummy% ENDIF exec_flag%=NOT TRUE RETURN > PROCEDURE rcs ! Direktaufruf des GFA-Recource-Constr.-Set. hintergrund(7) revrs_curs PRINT AT(1,18);"Starting: ";gfarcs$ norm_curs t%=TIMER SHOWM e%=EXEC(0,gfarcs$,"","") IF e%=-33 ! RSC gibt es nicht. sbb_bell ALERT 1,"|Tut mir leid, aber das |Resource-Programm konnte |ich nicht finden! ",1," Ach so ",dummy% @cls ELSE @cls revrs_curs PRINT "Arbeitszeit im Resource-Constr.-Set:" norm_curs tmx ENDIF RETURN > PROCEDURE env ! Environment-String fr den Compiler. n$=CHR$(0) env$=tobj$+n$+tprg$+n$+tlib$+n$+twait$+n$+tmove$+n$ RETURN > PROCEDURE in(VAR a$) ! Editieren der Pfade. b$=MID$(a$,7) revrs_curs PRINT AT(1,17);"Editiere: " norm_curs PRINT AT(1,17); PRINT LEFT$(a$,6); FORM INPUT 60 AS b$ b$=TRIM$(b$) IF LEN(b$) a$=LEFT$(a$,6)+b$ ENDIF help RETURN > PROCEDURE i_on IF INT{irq%} ! nix wenn irq% leer p%=LPEEK(&H456) FOR i%=p% TO p%+31 STEP 4 IF LPEEK(i%)=0 SLPOKE i%,irq% i%=p%+31 ENDIF NEXT i% {BASEPAGE+132}=irq% {BASEPAGE+128}=&H4030201 ENDIF RETURN > PROCEDURE i_off {BASEPAGE+128}=0 p%=LPEEK(&H456) FOR i%=p% TO p%+31 STEP 4 IF LPEEK(i%)=irq% SLPOKE i%,0 ENDIF NEXT i% RETURN > PROCEDURE keyclr REPEAT ! Lsche GEM Tastaturpuffer. UNTIL EVNT_MULTI(33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100)=32 RETURN > PROCEDURE endfrage LOCAL button% ' Aus PROCEDURE chek(x%) sbb_bell message$="| |Haben Sie wirklich etwas |Besseres vor? " button$=" Klar! | Nein. " ALERT 2,message$,2,button$,button% ! Alertbox - Endfrage IF button%=1 ende ENDIF RETURN > PROCEDURE ende RESERVE ! Speicher wider freigeben. CLS EDIT ! Falls etwas verbessert werden soll im Interpreter.... RETURN ' > PROCEDURE info(x%,y%) ! Bildmitte ca. x = 155 , y = 101 , nur unger. Zahlen. HIDEM GRAPHMODE 1 DEFFILL 1,2,8 PBOX x%+5,y%+5,x%+361,y%+231 DEFFILL 0,2,8 PBOX x%,y%,x%+356,y%+226 DEFFILL 1,2,4 PBOX x%+3,y%+3,x%+353,y%+223 BOX x%+2,y%+2,x%+354,y%+224 BOX x%,y%,x%+356,y%+226 schreibe(x%+26,y%+41,26,"GFA-MENU-DELUXE") schreibe(x%+26,y%+80,16,"Thomas Schaerer ") schreibe(x%+26,y%+104,16,"Im Lindenhof 6") schreibe(x%+26,y%+128,16,"CH-Effretikon (Schweiz)") schreibe(x%+26,y%+155,8,"Dieses Programm wird mit der") schreibe(x%+26,y%+169,8,"dazugehrigen GFA-3.5-BASIC-") schreibe(x%+26,y%+183,8,"Datei, gratis an GFA-Basic-") schreibe(x%+26,y%+197,8,"Enthusiasten weitergegeben.") REPEAT UNTIL MOUSEK=0 REPEAT GOSUB schreibe(x%+26,y%+41,26,"GFA-MENU-DELUXE") GRAPHMODE 3 UNTIL MOUSEK=1 OR MOUSEK=2 OR INKEY$<>"" GRAPHMODE 1 SHOWM RETURN > PROCEDURE schreibe(xx%,yy%,zz%,text$) ! Gehrt zur Prozedur 'info'. DEFTEXT 1,0,0,zz% GRAPHMODE 2 TEXT xx%,yy%,text$ DEFTEXT 1,2,0,zz% GRAPHMODE 3 TEXT xx%-1,yy%-1,text$ GRAPHMODE 1 RETURN > PROCEDURE hintergrund(muster%) DEFFILL 1,2,muster% PBOX -1,18,640,400 RETURN > PROCEDURE tmx ! Vollstndig neue Zeitanzeige in H:M:S (ts). cur d_time=(TIMER-t%)/200 ! Zeitdifferenz in Sekunden PRINT "Zeit: "; IF d_time<60 PRINT USING "##.###",d_time; PRINT " Sek. "; ELSE IF d_time<3600 PRINT INT(d_time/60);" Min. "; PRINT USING "##.###",d_time MOD 60; PRINT " Sek. "; ELSE PRINT INT(d_time/3600);" Std. ";INT(d_time/60) MOD 60;" Min. "; PRINT USING "##.###",d_time MOD 60; PRINT " Sek. "; ENDIF RETURN > PROCEDURE menu_info ! Zustzliche Infos ber Einstellungen in Menuzeile. IF auto%=1 stor_curs revrs_curs PRINT AT(65,1);"PRG=GFA"; norm_curs restor_curs ENDIF RETURN > PROCEDURE titel ! GFA-MENU-DELUXE DEFFILL 1,1,8 PBOX -1,360,640,400 GRAPHMODE 3 DEFTEXT 1,4,0,18 TEXT 1,380,"G F A - M E N U E - D e l u x e" DEFTEXT 1,0,0,6 TEXT 500,380,"GFA-3.x-BASIC" DEFTEXT 1,4,0,6 TEXT 1,398,"Fr den I N T E R P R E T E R und den C O M P I L E R ." DEFTEXT 1,0,0,13 ! Wieder normale Schrift GRAPHMODE 0 PRINT AT(1,20); PRINT " = Kompilieren und Linken, nach Auswahl (^A oder F1). " PRINT " = Parameter des Sets-Menue und Bildregeneration. " PRINT " = Bildregenaration des Menue (z.B. nach Accessory). " curs_home RETURN > PROCEDURE laufzeichen DEFTEXT 1,0,0,4 GRAPHMODE 3 IF xx%<550 OR xx%>620 ! Dies ist einerseits eine Spielerei, ander- xx%=550 ! seits kann man gewisse Abstrze leicht ENDIF ! durch dessen Stoppen erkennen. TEXT xx%,398,"_" ! Und berhaupt, warum immer alles so tie- ADD xx%,3 ! risch ernst? DEFTEXT 1,0,0,13 GRAPHMODE 0 RETURN > PROCEDURE sbb_bell ! Klingt wie eine Schweizer Bahnhofglocke. ~XBIOS(28,&HF8,7+128) ! 3 Tonkanle ~XBIOS(28,16,8+128) ! Hllk. Kanal 1 ~XBIOS(28,16,9+128) ! Hllk. Kanal 2 ~XBIOS(28,16,10+128) ! Hllk. Kanal 3 ~XBIOS(28,0,11+128) ! Hllk. Lowbyte ~XBIOS(28,30,12+128) ! Hllk. Highbyte ~XBIOS(28,9,13+128) ! Hllk. abklingend ~XBIOS(28,63,0+128) ! Tonfreq. Lowbyte Kanal 1 ~XBIOS(28,0,1+128) ! Tonfreq. Highbyte Kanal 1 ~XBIOS(28,50,2+128) ! Tonfreq. Lowbyte Kanal 2 ~XBIOS(28,0,3+128) ! Tonfreq. Highbyte Kanal 2 ~XBIOS(28,37,4+128) ! Tonfreq. Lowbyte Kanal 3 ~XBIOS(28,0,5+128) ! Tonfreq. Highbyte Kanal 3 RETURN > PROCEDURE editor ! Aufruf zu zustzlichem Editor, z.B. Textvergleich. LOCAL edit_par$,ret% ' ret%=1 ! Damit ohne Parameter Editor gestartet werde kann. IF ff$<>"Nur GFA-File laden!" ! LST-File nur suchen wenn GFA-File geladen. IF EXIST(LEFT$(ff$,(LEN(ff$)-4))+".LST") ! Zum geladenen GFA-File das edit_par$=LEFT$(ff$,(LEN(ff$)-4))+".LST" ! gleichnamige LST-File suchen. ELSE CLR edit_par$ ! Parameter lschen, falls keines gesendet wird. sbb_bell ALERT 1,"Sie haben vergessen ein |LST-File zu erzeugen! |Weiter zum Editor oder zurck |ins Menu?",1," Editor | Menu ",ret% ENDIF ENDIF IF ret%=1 ! Editor starten mit oder ohne File-Parameter. hintergrund(7) revrs_curs PRINT AT(1,18);"Starting (Editor): ";editor$ PRINT AT(1,19);"Starting (LST-File): ";edit_par$ norm_curs PAUSE 37 t%=TIMER SHOWM e%=EXEC(0,editor$,CHR$(LEN(edit_par$))+edit_par$+CHR$(0),"") ! Run IF e%=-33 ! Editor gibt es nicht. sbb_bell ALERT 1,"|Tut mir leid, aber der |zustzliche Editor ist |in St. Anderswo! ",1," Na ja. ",dummy% @cls ELSE @cls revrs_curs PRINT "Arbeitszeit im zustzlichen Editor: " norm_curs tmx ENDIF ENDIF RETURN > PROCEDURE finder ! Aufruf eines File-Finders, z.B. QUICKFIND. LOCAL ret% ' hintergrund(7) revrs_curs PRINT AT(1,18);"Starting (Finder): ";finder$ norm_curs PAUSE 37 t%=TIMER IF EXIST(finder$) stor_curs revrs_curs PRINT AT(1,24); PRINT " ACHTUNG: Bei Verwendung des QUICKFIND.PRG - " PRINT " Abbruch nicht benutzen, sonst Verhalten der Maus gestrt! "; norm_curs restor_curs e%=EXEC(0,finder$,"","") ! Run @cls revrs_curs PRINT "Arbeitszeit im File-Finder: " norm_curs tmx ELSE sbb_bell ALERT 1,"|Tut mir leid, aber der File- |Finder ist nicht zu finden! ",1," Na ja. ",dummy% @cls ENDIF RETURN > PROCEDURE gulam ! Aufruf des GULAM-Zeilenkommandointerpreters. pfad_file$=gulam$ pfad_nur p_current$=pfadnur$ new_path_write ! Pfad damit GULAM.PRG sein GULAM.G findet. hintergrund(7) revrs_curs PRINT AT(1,17);"Executing: ";UPPER$(gulam$) norm_curs PAUSE 37 HIDEM t%=TIMER e%=EXEC(0,gulam$,"","") ! GULAM - Aufruf. main_path_write ! Hauptpfad wiederherstellen. SHOWM ! Wenn von xxxx.TOS retour ntig. @cls ! Zurck von ext. Programm, wieder grauer Hintergrund. cur revrs_curs PRINT "Arbeitszeit im GULAM:" norm_curs tmx RETURN > PROCEDURE complinkend ! Blinkende Meldung nach Comp.- und Link.-Ende. INC blink% IF (blink% MOD 6=0) OR (blink% MOD 6=1) OR (blink% MOD 6=2) revrs_curs ENDIF stor_curs PRINT "Compilieren und Linken erfolgreich beendet!" restor_curs norm_curs RETURN > FUNCTION chk_file(VAR f$) $F% ! Compiler: ENDFUNC-Behandlung. IF LEN(f$) IF EXIST(f$) RETURN TRUE ENDIF ENDIF do_fsel(".GFA",f$) IF LEN(f$) IF EXIST(f$) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC > PROCEDURE file_exist(VAR weiter%) pfad_file$=MID$(tprg$,7) ! Filtert Pfad + Filename. pfad_nur ! Filtert Pfad. IF EXIST(pfad_file$) ! Existiert Pfad u. PRG/TOS-File bereits? sbb_bell ALERT 2,"Dateiname existiert bereits! | |berschreiben = Weiter |Zurck = Menu ",1," Weiter | Menu ",weiter% IF weiter%=1 weiter%=TRUE ELSE weiter%=NOT TRUE ! Keine weiteren Aktionen. ENDIF ELSE weiter%=TRUE ENDIF RETURN > PROCEDURE file_parameter(VAR pfad$,anz_zeichen%) ! Filepar. aus der BASEPAGE LOCAL i%,c| ' adr%=BASEPAGE FOR i%=129 TO 256 anz_zeichen%=i%-129 c|=PEEK(adr%+i%) EXIT IF c|=0 OR c|=13 ! Endung NULL oder . pfad$=pfad$+CHR$(c|) ! NEXT i% pfad$=UPPER$(pfad$) RETURN > PROCEDURE file_von_pfad ! Siehe Prozedur 'do_fsel(...)'. LOCAL i% ' FOR i%=0 TO 13 ! Maskiert den Filenamen mit Extension f$=RIGHT$(p1$,i%) ! aus dem ganzen Pfad. EXIT IF LEFT$(f$,1)="\" NEXT i% f$=RIGHT$(f$,(LEN(f$)-1)) ! Conversion in Grossbuchstaben. RETURN > PROCEDURE pfad_nur LOCAL i%,n$ ' FOR i%=0 TO 13 n$=RIGHT$(pfad_file$,i%) EXIT IF LEFT$(n$)="\" NEXT i% pfadnur$=LEFT$(pfad_file$,(LEN(pfad_file$)-i%))+"\" RETURN > PROCEDURE new_path_write ! Neuer Pfad fr externes Programm. CHDRIVE p_current$ ! Laufwerk \ Pfad CHDIR MID$(p_current$,3,(LEN(p_current$)-3)) ! Pfad alleine ohne Laufwerk. RETURN > PROCEDURE main_path_write ! Pfad dieses Menu wiederherstellen. CHDRIVE maindrive$ CHDIR mainpath_only$ RETURN > PROCEDURE path_read ! Testen ob aktueller Pfad bernommen wurde. drive_read$=CHR$(GEMDOS(25)+65) ! Laufwerk path_read$=DIR$(0) ! Pfad ohne Laufwerk RETURN > PROCEDURE menudlx.dat ! Lesen des GFA-MENU-Deluxe-Filesystem. IF EXIST(mainpath$+"menudlx.dat") OPEN "I",#1,mainpath$+"menudlx.dat" INPUT #1,gfaint$,gfacom$,gfalnk$,gfarcs$,editor$,finder$,gulam$,tobj$,tprg$,tlib$ CLOSE #1 ELSE sbb_bell ALERT 1,"|Tut mir leid, aber |MENUDLX.DAT konnte ich |nicht finden! ",2," Weiter | Abbruch",ret% IF ret%=2 ende ENDIF ENDIF ' gfaint$=mainpath$+gfaint$ ! Interpreter GFA_3.PRG gfacom$=mainpath$+gfacom$ ! Compiler BCOMP.PRG gfalnk$=mainpath$+gfalnk$ gfarcs$=mainpath$+gfarcs$ ' editor$=editor$ ! Zustzlicher Editor, Filefinder und UNIX- ' finder$=finder$ ! Zeilenkommandointerpreter sind ausserhalb des ' gulam$=gulam$ ! der GFA-3.5-Basic-Fileordnung. tobj$="G3OBJ="+mainpath$+tobj$ tprg$="G3PRG="+mainpath$+tprg$ tlib$="G3LIB="+mainpath$+tlib$ RETURN > PROCEDURE relat_absol_filepar ! Pfad in BASEPAGE absolut oder relativ? IF MID$(pfad$,2,1)<>":" pfad$=mainpath$+pfad$ ! Wenn der eingegebene Pfad relativ ist. ENDIF RETURN ' ' Testprozeduren: > PROCEDURE path_test ! Nur fr Test (Direct_Mode). path_read ! Testen ob aktueller Pfad bernommen wurde. PRINT PRINT PRINT "Laufwerk: ";drive_read$ PRINT "Nur Pfad: ";path_read$ RETURN > PROCEDURE file_system ! Auch fr Test (Direct-Mode). esc%=27 ! Falls im Direct-Mode gestartet wird. CLS revrs_curs PRINT " Filesystem des GFA-MENU-Deluxe. " norm_curs PRINT PRINT " Aktueller Pfad: ";mainpath$ PRINT PRINT " Interpreter (GFA_3.PRG): ";gfaint$ PRINT " Compiler (GFA_BCOM.PRG): ";gfacom$ PRINT " Linker (GL-PRG): ";gfalnk$ PRINT " Resource-C-S (RCS2.PRG): ";gfarcs$ PRINT " Zustzlicher Editor: ";editor$ PRINT " Finder /QUIKFIND.PRG): ";finder$ PRINT " UNIX-Shell (GULAM.PRG): ";gulam$ PRINT PRINT " Defaultpfad Objectcode: ";tobj$ PRINT " Defaultpfad (TEST.PRG): ";tprg$ PRINT " Defaultfad (GFA3LIB): ";tlib$ PRINT revrs_curs PRINT AT(1,25);" Weiter: Drcke Keyboard- oder Maustaste. "; norm_curs catchkey REPEAT UNTIL MOUSEK=0 REPEAT UNTIL INKEY$<>"" OR MOUSEK CLS RETURN ' ' Escape-Sequenzen: > PROCEDURE curs_home PRINT CHR$(esc%)+"H"; RETURN > PROCEDURE revrs_curs PRINT CHR$(esc%)+"p"; RETURN > PROCEDURE norm_curs PRINT CHR$(esc%)+"q"; RETURN > PROCEDURE stor_curs PRINT CHR$(esc%)+"j"; RETURN > PROCEDURE restor_curs PRINT CHR$(esc%)+"k"; RETURN > PROCEDURE cl_line_after_curs ! Zeile lschen ab Cursor PRINT CHR$(esc%)+"K"; RETURN > PROCEDURE cls_after_curs ! Bildschirm lschen ab Cursor PRINT CHR$(esc%)+"J"; RETURN ' > PROCEDURE catchkey ! Abfangen unerlaubter Tastenbettigungen LOCAL keybuff% ' REPEAT KEYTEST keybuff% UNTIL keybuff%=0 RETURN > PROCEDURE taste ! Rckgabe-Charakter in 'key%' und 'key$' (Global) catchkey key%=INP(2) key$=CHR$(key%) RETURN ' ' ' >>>>>>>>>>>>>>>>>>>>>>>>>>> E N D E <<<<<<<<<<<<<<<<<<<<<<<<<<<<< ' . a.. ` MENUDLX DOC |bMENUDLX.PRG DasInfo-FileMENUDLX.INF(MENUDLX.DOCalsWord-Plus-File) Th.SchaererImLindenhof6CH-8307Effretikon(Schweiz) ============================================================ Motivation. ----------- 9[........................................................]0110 MitderAuslieferungdesoriginalenEntwicklungspacketesGFA-3.x-BASIC derFirmaGFA-Systemtechnik,erhltmanaufderDiskette"Compiler"ein inGFA-3.x-BASICgeschriebenesMenuprogrammalsGFA-Quelltext (MENUX.GFA)undalslauffhigesProgramm(MENUX.PRG).Leideristdieses MenufrdieSteuerungdesInterpretersundCompilersderartminimal gestaltet,dassetwasanspruchvollereGFA-3.x-BASIC-Programmierergen tigtsind,diesesMenudeneigenenBedrfnissenanzupassenundentspre chendzuerweitern,wasnichtseltenvielZeitbeansprucht,diemanfr Produktivereseinsetzenknnte. DieserMangelfhrtedazu,dassichdiesesMENUX.GFAimLaufevonetwa 1Jahrenstetigetwasweiterentwickelthabe.MeineArbeitsollnun dazudienen,dassnichtjederGFA-3.x-BASIC-ProgrammiererdenHammer erneuterfindenmuss. DerneueNamediesesneuenMenuprogrammesistMENUDLX.GFAbzw. MENUDLX.PRG,waseineAbkrzungdesvollenNamen"GFA-MENU-DELUXE"ist. ImFolgendenwirdbeschriebenwasGFA-MENU-DELUXEbesserundzustzlich kann. 9[........................................................]0110 9[........................................................]0110 DieGemeinsamkeitvonMENUXundGFA-MENU-DELUXE. ------------------------------------------------ 9[........................................................]0110 DaGFA-MENU-DELUXE(MENUDLX)eineWeiterentwicklungdesMENUXist, gelten,wennindiesemReadmenichtanderserlutert,diesehrknapp gehaltenenAngabenderREADME.COM-Datei,welchedemGFA-3.x-BASIC-Ent wicklungspacketbeiliegt.Ebenfallsgelten,wennhiernichtanders erlutert,dieAngabenimKapitel"ArbeitenmitderShell"desCom piler-Begleitbuches"GFA-BASIC3.0"vonGFA-SystemtechnikGmbHDssel dorf.BesonderserwhnenswertistderBeitragzumCompilerundLinker imBuch"DasgrosseGFA-BASIC-3.5Buch"vonLitzendorf,vertriebenvon DATA-BECKER. RechtlicheSituation. --------------------- Dawieobenerwhnt,meinGFA-MENU-DELUXE(MENUDLX.GFA)eineWeiterent wicklungdesMENUX.GFAvonGFA-Systemtechnikist,fragteichbeidieser Firmanach,obesmirerlaubtist,meinGFA-MENU-DELUXEzuverffentli chen.IneinemBriefvom8.07.91erhieltichfolgendeAntwort:"Dadie GFA-SystemtechnikaufkeinerleiProgrammCopyrightanspruchhat,diemit GFA-BASICerstelltwurden,stehteinerWeitergabeIhrerShellnichtsim Wege." MeinAngebot. ------------- 9[........................................................]0110 DieBenutzungundVerbreitungmeinesGFA-MENU-DELUXEinklusivedes Quelltextesistgratis.AlsGegenleistungwnscheichmirEchosvon BenutzerndesGFA-MENU-DELUXE.EsinteressierenmichKritik,Anregungen undIdeen,auchsolchewelchevonBenutzernimplementiertwurden. 9[........................................................]0110 VERBESSERUNGENundERWEITERUNGEN. __________________________________________________________________ DarstellungderOberflche. --------------------------- 9[........................................................]0110 ImGegensatzzuMENUXistdieOberflchemeinesGFA-MENU-DELUXEste thischansprechendergestaltet.AlleTextausgabensindblockweiseorga nisiert.DieBlocklngerichtetsichjeweilsnachderlngstenZeile. DassiehtaufeinemdunklenHintergrundschneraus.DieuntereMenu seitedientalsTitel.UntenrechtsbewegensichPunkte,welchestetig einePunktzeileauf-undwiederabbauen.DieseSpielereihatdurchaus aucheinepraktischeBedeutung:WenneinProgrammgestartetwird, welchesdenMonitornichtbentigt,erkenntmanamStillstanddieser Punkte,dassdiesesProgrammgeradeaktivist.Wenneinexternes Programm,ausserCompilerundLinkergestartetwird,kndigtsichdies durchdasAbdunkelndesHintergrundmustersan. BeimInterpreterstartwerdendieDirectoriesfrdenInterpreterund frdasGFA-FileinzweigetrenntenZeilenwhrenddesStartvorganges untereinanderangezeigt.Dassiehtbesserausundistinformativer. NachRckkehrinsMenuwirdordnungsgemssangezeigt,wielangewelches Programmausgefhrtwurde.ImGegensatzzuMENUXzeigtGFA-MENU-DELUXE alleZeitwerteinStunden,MinutenundSekundenan,dennesistz.B lstigwennangezeigtwird,dassman10861SekundenimInterpreter gearbeitethat.Dassind3h:01Min:01Sek.... 9[........................................................]0110 DieFile-Auswahl(^AoderF1). ------------------------------ GemssMENUXwhltmanmit^AoderF1daszubearbeitendeGFA-Fileaus. Neuist,dassGFA-MENU-DELUXEerkennt,obwirklicheinGFA-Filegewhlt wurde.Wennnicht,wirddiesmittelsALERT-Boxbeanstandet. 9[........................................................]0110 9[........................................................]0110 EinewesentlicheErneuerungist,dassGFA-MENU-DELUXEderFileparameter derBASEPAGEauswertet.DaherkannGFA-MENU-DELUXEauchvoneinem ZeilenkommandointerpreterwieGULAM,mitzubearbeitendemGFA-Fileals Parametergestartetwerden.EswerdenalsParameterabsoluter-und relativerPfadinVorwrtsrichtungakzeptiert.Dasbedeutet,dassEinga benwie..\..\falschverarbeitetwerden. 9[........................................................]0110 BevormanauseinemZeilenkommandointerpreterGFA-MENU-DELUXEstartet, mussvorhermittels"cd"derPfadeingestelltwerden,indemsich MENUDLX.PRGbefindet,sonstkanndieFilesystemdateiMENUDLX.DATnicht gefundenwerden. 9[........................................................]0110 FallsSieimGenussderGEMINI-Shellsind,knnenSiewiegewohntein GFA-FilemitderMauspackenundberGFA-MENU-DELUXEschiebenund schonstartetdiesesMenumitdemGFA-File.Luxurisesgehteskaum noch. 9[.......................................................]0110 Compiler-,Interpreter-,Linkerstart,StartdesRCSunddes'Test'. ------------------------------------------------------------------- DieseOperationenentsprechendenendesMENUX,wurdenjedochjeumeine FehlererkennungmittelsALERT-Boxerweitert.Eswirdmitgeteiltwenn dasaufgerufeneProgrammwegenNichterkennungdesPfadesoderdes Programmnamensnichtgestartetwerdenkann. BeimInterpreteraufrufistderPfaddesausgewhltenGFA-Filesals gltigerPfadgesetzt.DieshatdenVorteil,dassauchGFA-Filesmit ihrenzulesendenDateienineinemandernPfadkorrektmitdemInterpre tergetestetwerdenknnen.DiesistinMENUXwegenfehlerhafter Programmierung,nichtmglich! DasStartenfremderProgrammeEXECUTE^X. ------------------------------------------ DieseFunktiongibteszwarinMENUX,jedochkonntemanausserhalb dessenPfadeskeineProgrammestarten,welcheseinerseitsDateienlesen mussten.DiesesProblemistinGFA-MENU-DELUXEgelst:Vorjedemfrem demProgrammstartwirdderrichtigePfadgesetzt.BeiderRckkehrins GFA-MENU-DELUXEwirdebenfallswiederderkorrektePfadgesetzt. Sets:C-ObjektC. ----------------- EsgiltwasinREADME.COMsteht.Nurstehtdortlngstnichtalles,was dieseOptionbereitsimMENUXkonnteundimGFA-MENU-DELUXEselbstver stndlichimmernochkann: BeiderEingabedescompiliertenC-Files,alsoeinesO-Files,wirddie Extension".O"nichtangegeben,dadieseautomatischgesetztwird. EsknnenauchmehrereO-Fileseingegebenwerden,welchedanndurch Leerzeichenvoneinanderzutrennensind. BeiderEingabederO-Files,mussderkorrektePfadnatrlichmitein gegebenwerden.EsgengtjedochdieEingabedesrelativenPfadesin Vorwrts-undRckwrtsrichtung(..\). NeuistinGFA-MENU-DELUXE,dassnachdemLinkvorgangzustzlichmit telsALERT-BoxdieAnzahlundefinierterSymboleundOffsetberschreitun genangezeigtwerden. WenneinC-File-NameoderdessenPfadfalscheingebenwurde,oderder Linkernichtansprechbarist,folgtebenfallseinegeeigneteFehlermel dungmittelsALERT-Box. Sets:PRG=GFA. -------------- DerOrdnungzuliebe,landenallecompiliertenGFA-Programmeineinem OrdnernamensCOMPILAT(TEST.PRG).ImPRG=GFA-Modejedochwiebisherim selbenPfadwosichdaszubearbeitendeGFA-Filebefindet.Existiert beimCompiler-oderLinkerstartbereitsderNamedesPRG-Filesim selbenPfad,fragteineALERT-Box,obmanwirklichdasbestehendePRG- Fileberschreibenmchte. IstdieOptionPRG=GFAaktiv,wirddiesneuerdingsstndigimMenubal kendemProgrammierermitgeteilt.DieshatdenVorteil,dassmandiese OptionnichtimmerwiederimKlappmenuenachschauenmuss.Nurwennder TEST.PRG-Mode(Ordner:Compilat)aktivist,istesgestattet,denPfad zueditieren

.ImPRG=GFA-ModeerfolgtbeimEditierversuch

eine ALERT-BoxmitdemHinweis,dassmansichimWiderspruchbefindet. Extras. ------------ DiesistinGFA-MENU-DELUXEabsolutneu!MitHilfedieses"Extras" knnenzustzlichntzlicheProgrammeundFunktionendirektohneFilese lectorboxaufgerufenwerden,welchedemProgrammiererdasLebenzustz licherleitern.Weshalb,erfahrenSiegleichimDetail. Extras:Editor^E. ------------------- EinzustzlicherEditoraufrufen,wozu? MankannzweiLST-Filesvergleichen,odervoneinemLST-Fileins andere,Blckebertragen. MchtemaneinzueinemgeradebearbeitendemGFA-Filegehrendes Datenfileeditieren,soerledigtmandiesraschundbequemmitdem zustzlichenEditoraufruf.  MankannzumBeispieleinLST-FileundC-Filegegenberstellen.Dies istbesondersinteressantimHinblickaufdiekommendenGFA-TO-C- CONVERTER... Mankann...,SiehabenvielleichtnochweitereIdeen! WelcherEditorkommtinFrage? AlsEditoreignetsichz.B.TEMPUS(perDefaultinGFA-MENU-DELUXE MENUDLX.DATprogrammiert).EsmussinjedemFalleinEditorsein,mit demmanmindestenszweiFilesbearbeitenkann. SpezielleFunktionbeimEditor-Aufruf: HatmanvordemEditoraufruf^EbereitseinGFA-Fileausgewhlt(^A), jedocheingleichnamigesLST-FileexistiertimselbenPfadnicht, erscheinteineALERT-Boxundmeldet,dassmannochkeingleichnamiges LST-Fileerzeugthat.ManhatnundieWahl,weiterzumEditor "durchzustarten"odermangehtzurckberGFA-MENU-DELUXEinden InterpreterumnochdasgleichnamigeLST-Filezuerzeugen.Beinoch maligemEditoraufrufwirdnundasLST-FilealsParameterzumEditor bertragen.DanachkannmannochzustzlicheFilesladen,imTEMPUS maximalnochdrei. Extras:Finder^F. ------------------- DiesisteinkomfortablermausgesteuerterPD-File-Finder.WelcherPro grammiererwarnichtauchschoninderSituation,whrendderArbeit irgendwonacheinemGFA-FileoderLST-FilezumMergensuchenzumssen?  Extras:GULAM^G. ------------------ DiesisteinUNIX-naherZeilenkommandointerpreter.Eineausfhrliche Dokumentaionliegtbei.DerSinnderIntegrationin"Extras"ist, kompilierteGFA-ProgrammemitBASEPAGE-Parameterbernahme(z.B.TTP- Programme)gleichnachdembersetzenzutesten. Extras:Filesystem. -------------------- DieseFunktiongibtdemGFA-ProgrammiererAuskunftberdengltigen PfadunddarberwodieveschiedenenProgrammezuHausesind. Extras:UNDO(Bild). -------------------- DiesbewirktgleichwiedieTastedieBildregenaration.Diese FunktionwirdvorallemnachBenutzungvonAccessoriesbentigt. DasFile-System. ---------------- 9[........................................................]0110 BeimStartdesGFA-MENU-DELUXEliestdasProgrammdieDateiMENUDLX.DAT undbernimmtdasdortenthalteneFilesystem.DienachfolgendeWiederga bediesesMENUDLX.DATistnureinBeispiel.DerBenutzeristfreiin derGestaltung.Wichtigistjedoch,derPfaddesGFA-MENU-DELUXEist Referenz. GFA_3.PRG (GFA-BASIC-Interpreter,umbenannt) COMPLINK\GFA_BCOM.PRG (GFA-BASIC-Compiler) COMPLINK\GL.PRG (GFA-BASIC-Linker) RCS2.PRG (Resource-Constr.-SetvonGFA) D:\TEMPUS\TEMPUS.PRG (ZustzlicherEditor) C:\BIN\QUIKFIND.PRG (File-Finder) C:\BIN\GULAM.PRG (UNIX-naheShell) COMPILAT\TEST.O (DefaultpfaddesTEST.O-Files) COMPILAT\TEST.PRG (DefaultpfaddesCompilates) COMPLINK\GFA3BLIB (Original-GFA-Bibliothek) Wichtig:KommentarewieobenimBeispieldrfenimMENUDLX.DATnicht stehen! DasobendargestellteBeispieldesMENUDLX.DATzeigtrelativeVorwrts pfade.AufdererstenEbenemussdasGFA-MENU-DELUXEMENUDLX.PRGund MENUDLX.DATplatziertsein.DiesillustriertalsBeispielfolgendes "File-System": 9[.......................................................]0110 9[........................................................]0110 E:\ GFA_BAS._V3 \MENUDLX.PRG   (GFA-MENU-DELUXE) \MENUDLX.DAT \ AT_WORK \ ... (GFA-Files in Arbeit) \ COMPILAT \ (TEST.PRG) (DefaultpfaddesCompilates) (TEST.O) (DefaultpfadvonTEST.O) \ COMPLINK \ GFA_BCOM.PRG (GFA-BASIC-Compiler) GL.PRG (GFA-BASIC-Linker) GFA3BLIB (Original-GFA-Bibliothek) GFA3BLIB.NDX \ GFA_3.PRG (GFA-BASIC-Interpreter) \ RCS2.PRG (GFA-Resource-Constr.-Set) \ RCS2.DFN \ RCS2.RSC C:\ BIN\GULAM.PRG (UNIX-naheShell) \GULAM.G (brauchtGULAM.PRG) \GULAM.HLP(brauchtGULAM.PRG) \QUIKFIND.PRG (File-Finder) D:\TEMPUS \TEMPUS.PRG (ZustzlicherEditor)  AnStellederPartitionEeinerHarddisk,kannselbstverstdlichauch eineanderePartitiongewhltwerden.DasselbegiltfrdenHauptord ner"GFA_BAS._V3".MankanndiesenOrdnerandersbenennen,oderwas aberderOrdnungzuliebe,wenigerzuempfehlenist,ganzweglassen. DiePfadederProgrammewelchenichtTeildesGFA-BASIC-Entwicklungs packetessind,drfenauchganzwoandersinstalliertunddementspre chendinMENUDLX.DATvermerktwerden. WelcheProgrammeundDateienbefindensichwoaufderDiskette? 9[........................................................]0110 --------------------------------------------------------------- 9[......................................................]0110 9[........................................................]0110 MENUDLX\GFA_BAS._V3 \ MENUDLX.PRG(GFA-MENU-DELUXE) MENUDLX.DAT (zugehrigesFilesystem) \ BIN  \GULAM.PRG (PD-UNIX-naheShell.) \GULAM.G (Daten,Aliasetc.) \GULAM.HLP (Help-FilefrGULAM.) \ GULAM.DOC (SehrausfhrlichesManual.) \QUIKFIND.PRG (PD-File-Finder) \QUELLTXT \MENUDLX.GFA (GFA-Quelltext) \MENUDLX.LST(LST-Quelltext) \MENUDLX.INL (Inline-Maschinencode) \DOKUMENT \ MENUDLX.INF(DiesesDokumentalsASCII.) MENUDLX.DOC (DiesesDokumentalsWordplus.) 9[........................................................]0110 WieSiefeststellen,istderinGFA-MENU-DELUXEverwendetezustzliche EditorTEMPUSnichtaufderDiskette.DerGrundist,dassTEMPUSweder einPublic-Domain-nocheinShare-Ware-Programmist.Esistaberjedem GFA-3.x-BASIC-Programmiererfreigestellt,seinenLiebliongseditorkombi niertmitGFA-MENU-DELUXEeinzusetzen.Mandarfaberdannnichtverges sen,MENUDLX.DATentsprechendanzupassen. DieandernbeiliegendenProgrammewieGULAMundQUIKFINDdrfenfrei kopiertwerden,dadiesePDssind. IchwnscheIhnenungetrbteProgrammierstundenmitGFA-3.x-BASICin 9[........................................................]0120 SymbiosemitmeinemGFA-MENU-DELUXE.... Th.Schaerer01-nov-91 G F A - M e n u - D e l u x e -----> MENUDLX.PRG Das Info-File MENUDLX.INF (MENUDLX.DOC als Word-Plus-File) Th. Schaerer Im Lindenhof 6 CH-8307 Effretikon (Schweiz) ============================================================ Motivation. ----------- Mit der Auslieferung des originalen Entwicklungspacketes GFA-3.x-BASIC der Firma GFA-Systemtechnik, erhlt man auf der Diskette "Compiler" ein in GFA-3.x-BASIC geschriebenes Menuprogramm als GFA-Quelltext (MENUX.GFA) und als lauffhiges Programm (MENUX.PRG). Leider ist dieses Menu fr die Steuerung des Interpreters und Compilers derart minimal gestaltet, dass etwas anspruchvollere GFA-3.x-BASIC-Programmierer gen- tigt sind, dieses Menu den eigenen Bedrfnissen anzupassen und entspre- chend zu erweitern, was nicht selten viel Zeit beansprucht, die man fr Produktiveres einsetzen knnte. Dieser Mangel fhrte dazu, dass ich dieses MENUX.GFA im Laufe von etwa 1 Jahren stetig etwas weiterentwickelt habe. Meine Arbeit soll nun dazu dienen, dass nicht jeder GFA-3.x-BASIC-Programmierer den Hammer erneut erfinden muss. Der neue Name dieses neuen Menuprogrammes ist MENUDLX.GFA bzw. MENUDLX.PRG, was eine Abkrzung des vollen Namen "GFA-MENU-DELUXE" ist. Im Folgenden wird beschrieben was GFA-MENU-DELUXE besser und zustzlich kann. Die Gemeinsamkeit von MENUX und GFA-MENU-DELUXE. ------------------------------------------------ Da GFA-MENU-DELUXE (MENUDLX) eine Weiterentwicklung des MENUX ist, gelten, wenn in diesem Readme nicht anders erlutert, die sehr knapp gehaltenen Angaben der README.COM-Datei, welche dem GFA-3.x-BASIC-Ent- wicklungspacket beiliegt. Ebenfalls gelten, wenn hier nicht anders erlutert, die Angaben im Kapitel "Arbeiten mit der Shell" des Com- piler-Begleitbuches "GFA-BASIC 3.0" von GFA-Systemtechnik GmbH Dssel- dorf. Besonders erwhnenswert ist der Beitrag zum Compiler und Linker im Buch "Das grosse GFA-BASIC-3.5 Buch" von Litzendorf, vertrieben von DATA-BECKER. Rechtliche Situation. --------------------- Da wie oben erwhnt, mein GFA-MENU-DELUXE (MENUDLX.GFA) eine Weiterent- wicklung des MENUX.GFA von GFA-Systemtechnik ist, fragte ich bei dieser Firma nach, ob es mir erlaubt ist, mein GFA-MENU-DELUXE zu verffentli- chen. In einem Brief vom 8.07.91 erhielt ich folgende Antwort: "Da die GFA-Systemtechnik auf keinerlei Programm Copyrightanspruch hat, die mit GFA-BASIC erstellt wurden, steht einer Weitergabe Ihrer Shell nichts im Wege." Mein Angebot. ------------- Die Benutzung und Verbreitung meines GFA-MENU-DELUXE inklusive des Quelltextes ist gratis. Als Gegenleistung wnsche ich mir Echos von Benutzern des GFA-MENU-DELUXE. Es interessieren mich Kritik, Anregungen und Ideen, auch solche welche von Benutzern implementiert wurden. V E R B E S S E R U N G E N u n d E R W E I T E R U N G E N . __________________________________________________________________ Darstellung der Oberflche. --------------------------- Im Gegensatz zu MENUX ist die Oberflche meines GFA-MENU-DELUXE ste- thisch ansprechender gestaltet. Alle Textausgaben sind blockweise orga- nisiert. Die Blocklnge richtet sich jeweils nach der lngsten Zeile. Das sieht auf einem dunklen Hintergrund schner aus. Die untere Menu- seite dient als Titel. Unten rechts bewegen sich Punkte, welche stetig eine Punktzeile auf- und wieder abbauen. Diese Spielerei hat durchaus auch eine praktische Bedeutung: Wenn ein Programm gestartet wird, welches den Monitor nicht bentigt, erkennt man am Stillstand dieser Punkte, dass dieses Programm gerade aktiv ist. Wenn ein externes Programm, ausser Compiler und Linker gestartet wird, kndigt sich dies durch das Abdunkeln des Hintergrundmusters an. Beim Interpreterstart werden die Directories fr den Interpreter und fr das GFA-File in zwei getrennten Zeilen whrend des Startvorganges untereinander angezeigt. Das sieht besser aus und ist informativer. Nach Rckkehr ins Menu wird ordnungsgemss angezeigt, wie lange welches Programm ausgefhrt wurde. Im Gegensatz zu MENUX zeigt GFA-MENU-DELUXE alle Zeitwerte in Stunden, Minuten und Sekunden an, denn es ist z.B lstig wenn angezeigt wird, dass man 10861 Sekunden im Interpreter gearbeitet hat. Das sind 3h:01Min:01Sek.... Die File-Auswahl (^A oder F1). ------------------------------ Gemss MENUX whlt man mit ^A oder F1 das zu bearbeitende GFA-File aus. Neu ist, dass GFA-MENU-DELUXE erkennt, ob wirklich ein GFA-File gewhlt wurde. Wenn nicht, wird dies mittels ALERT-Box beanstandet. Eine wesentliche Erneuerung ist, dass GFA-MENU-DELUXE der Fileparameter der BASEPAGE auswertet. Daher kann GFA-MENU-DELUXE auch von einem Zeilenkommandointerpreter wie GULAM, mit zu bearbeitendem GFA-File als Parameter gestartet werden. Es werden als Parameter absoluter- und relativer Pfad in Vorwrtsrichtung akzeptiert. Das bedeutet, dass Einga- ben wie ..\..\ falsch verarbeitet werden. Bevor man aus einem Zeilenkommandointerpreter GFA-MENU-DELUXE startet, muss vorher mittels "cd" der Pfad eingestellt werden, in dem sich MENUDLX.PRG befindet, sonst kann die Filesystemdatei MENUDLX.DAT nicht gefunden werden. Falls Sie im Genuss der GEMINI-Shell sind, knnen Sie wie gewohnt ein GFA-File mit der Maus packen und ber GFA-MENU-DELUXE schieben und schon startet dieses Menu mit dem GFA-File. Luxurises geht es kaum noch. Compiler-, Interpreter-, Linkerstart, Start des RCS und des 'Test'. ------------------------------------------------------------------- Diese Operationen entsprechen denen des MENUX, wurden jedoch je um eine Fehlererkennung mittels ALERT-Box erweitert. Es wird mitgeteilt wenn das aufgerufene Programm wegen Nichterkennung des Pfades oder des Programmnamens nicht gestartet werden kann. Beim Interpreteraufruf ist der Pfad des ausgewhlten GFA-Files als gltiger Pfad gesetzt. Dies hat den Vorteil, dass auch GFA-Files mit ihren zu lesenden Dateien in einem andern Pfad korrekt mit dem Interpre- ter getestet werden knnen. Dies ist in MENUX wegen fehlerhafter Programmierung, nicht mglich! Das Starten fremder Programme EXECUTE ^X. ------------------------------------------ Diese Funktion gibt es zwar in MENUX, jedoch konnte man ausserhalb dessen Pfades keine Programme starten, welche seinerseits Dateien lesen mussten. Dieses Problem ist in GFA-MENU-DELUXE gelst: Vor jedem frem- dem Programmstart wird der richtige Pfad gesetzt. Bei der Rckkehr ins GFA-MENU-DELUXE wird ebenfalls wieder der korrekte Pfad gesetzt. Sets: C-Objekt C. ----------------- Es gilt was in README.COM steht. Nur steht dort lngst nicht alles, was diese Option bereits im MENUX konnte und im GFA-MENU-DELUXE selbstver- stndlich immer noch kann: Bei der Eingabe des compilierten C-Files, also eines O-Files, wird die Extension ".O" nicht angegeben, da diese automatisch gesetzt wird. Es knnen auch mehrere O-Files eingegeben werden, welche dann durch Leerzeichen von einander zu trennen sind. Bei der Eingabe der O-Files, muss der korrekte Pfad natrlich mitein- gegeben werden. Es gengt jedoch die Eingabe des relativen Pfades in Vorwrts- und Rckwrtsrichtung (..\). Neu ist in GFA-MENU-DELUXE, dass nach dem Linkvorgang zustzlich mit- tels ALERT-Box die Anzahl undefinierter Symbole und Offsetberschreitun- gen angezeigt werden. Wenn ein C-File-Name oder dessen Pfad falsch eingeben wurde, oder der Linker nicht ansprechbar ist, folgt ebenfalls eine geeignete Fehlermel- dung mittels ALERT-Box. Sets: PRG=GFA. -------------- Der Ordnung zu liebe, landen alle compilierten GFA-Programme in einem Ordner namens COMPILAT (TEST.PRG). Im PRG=GFA-Mode jedoch wie bisher im selben Pfad wo sich das zu bearbeitende GFA-File befindet. Existiert beim Compiler- oder Linkerstart bereits der Name des PRG-Files im selben Pfad, fragt eine ALERT-Box, ob man wirklich das bestehende PRG- File berschreiben mchte. Ist die Option PRG=GFA aktiv, wird dies neuerdings stndig im Menubal- ken dem Programmierer mitgeteilt. Dies hat den Vorteil, dass man diese Option nicht immer wieder im Klappmenue nachschauen muss. Nur wenn der TEST.PRG-Mode (Ordner: Compilat) aktiv ist, ist es gestattet, den Pfad zu editieren

. Im PRG=GFA-Mode erfolgt beim Editierversuch

eine ALERT-Box mit dem Hinweis, dass man sich im Widerspruch befindet. E x t r a s. ------------ Dies ist in GFA-MENU-DELUXE absolut neu! Mit Hilfe dieses "Extras" knnen zustzlich ntzliche Programme und Funktionen direkt ohne Filese- lectorbox aufgerufen werden, welche dem Programmierer das Leben zustz- lich erleitern. Weshalb, erfahren Sie gleich im Detail. Extras: Editor ^E. ------------------- Ein zustzlicher Editor aufrufen, wozu? Man kann zwei LST-Files vergleichen, oder von einem LST-File ins andere, Blcke bertragen. Mchte man ein zu einem gerade bearbeitendem GFA-File gehrendes Datenfile editieren, so erledigt man dies rasch und bequem mit dem zustzlichen Editoraufruf. Man kann zum Beispiel ein LST-File und C-File gegenberstellen. Dies ist besonders interessant im Hinblick auf die kommenden GFA-TO-C- CONVERTER... Man kann... , Sie haben vielleicht noch weitere Ideen! Welcher Editor kommt in Frage? Als Editor eignet sich z.B. TEMPUS (per Default in GFA-MENU-DELUXE MENUDLX.DAT programmiert). Es muss in jedem Fall ein Editor sein, mit dem man mindestens zwei Files bearbeiten kann. Spezielle Funktion beim Editor-Aufruf: Hat man vor dem Editoraufruf ^E bereits ein GFA-File ausgewhlt (^A), jedoch ein gleichnamiges LST-File existiert im selben Pfad nicht, erscheint eine ALERT-Box und meldet, dass man noch kein gleichnamiges LST-File erzeugt hat. Man hat nun die Wahl, weiter zum Editor "durchzustarten" oder man geht zurck ber GFA-MENU-DELUXE in den Interpreter um noch das gleichnamige LST-File zu erzeugen. Bei noch- maligem Editoraufruf wird nun das LST-File als Parameter zum Editor bertragen. Danach kann man noch zustzliche Files laden, im TEMPUS maximal noch drei. Extras: Finder ^F. ------------------- Dies ist ein komfortabler mausgesteuerter PD-File-Finder. Welcher Pro- grammierer war nicht auch schon in der Situation, whrend der Arbeit irgendwo nach einem GFA-File oder LST-File zum Mergen suchen zu mssen? Extras: GULAM ^G. ------------------ Dies ist ein UNIX-naher Zeilenkommandointerpreter. Eine ausfhrliche Dokumentaion liegt bei. Der Sinn der Integration in "Extras" ist, kompilierte GFA-Programme mit BASEPAGE-Parameterbernahme (z.B. TTP- Programme) gleich nach dem bersetzen zu testen. Extras: Filesystem. -------------------- Diese Funktion gibt dem GFA-Programmierer Auskunft ber den gltigen Pfad und darber wo die veschiedenen Programme zu Hause sind. Extras: UNDO (Bild). -------------------- Dies bewirkt gleich wie die Taste die Bildregenaration. Diese Funktion wird vor allem nach Benutzung von Accessories bentigt. Das File-System. ---------------- Beim Start des GFA-MENU-DELUXE liest das Programm die Datei MENUDLX.DAT und bernimmt das dort enthaltene Filesystem. Die nachfolgende Wiederga- be dieses MENUDLX.DAT ist nur ein Beispiel. Der Benutzer ist frei in der Gestaltung. Wichtig ist jedoch, der Pfad des GFA-MENU-DELUXE ist Referenz. GFA_3.PRG (GFA-BASIC-Interpreter, umbenannt) COMPLINK\GFA_BCOM.PRG (GFA-BASIC-Compiler) COMPLINK\GL.PRG (GFA-BASIC-Linker) RCS2.PRG (Resource-Constr.-Set von GFA) D:\TEMPUS\TEMPUS.PRG (Zustzlicher Editor) C:\BIN\QUIKFIND.PRG (File-Finder) C:\BIN\GULAM.PRG (UNIX-nahe Shell) COMPILAT\TEST.O (Defaultpfad des TEST.O-Files) COMPILAT\TEST.PRG (Defaultpfad des Compilates) COMPLINK\GFA3BLIB (Original-GFA-Bibliothek) Wichtig: Kommentare wie oben im Beispiel drfen im MENUDLX.DAT nicht stehen! Das oben dargestellte Beispiel des MENUDLX.DAT zeigt relative Vorwrts- pfade. Auf der ersten Ebene muss das GFA-MENU-DELUXE MENUDLX.PRG und MENUDLX.DAT platziert sein. Dies illustriert als Beispiel folgendes "File-System": E:\ GFA_BAS._V3 \ MENUDLX.PRG (GFA-MENU-DELUXE) \ MENUDLX.DAT \ AT_WORK \ ... (GFA-Files in Arbeit) \ COMPILAT \ (TEST.PRG) (Defaultpfad des Compilates) (TEST.O) (Defaultpfad von TEST.O) \ COMPLINK \ GFA_BCOM.PRG (GFA-BASIC-Compiler) GL.PRG (GFA-BASIC-Linker) GFA3BLIB (Original-GFA-Bibliothek) GFA3BLIB.NDX \ GFA_3.PRG (GFA-BASIC-Interpreter) \ RCS2.PRG (GFA-Resource-Constr.-Set) \ RCS2.DFN \ RCS2.RSC C:\ BIN \ GULAM.PRG (UNIX-nahe Shell) \ GULAM.G (braucht GULAM.PRG) \ GULAM.HLP (braucht GULAM.PRG) \ QUIKFIND.PRG (File-Finder) D:\ TEMPUS \ TEMPUS.PRG (Zustzlicher Editor) An Stelle der Partition E einer Harddisk, kann selbstverstdlich auch eine andere Partition gewhlt werden. Das selbe gilt fr den Hauptord- ner "GFA_BAS._V3". Man kann diesen Ordner anders benennen, oder was aber der Ordnung zu liebe, weniger zu empfehlen ist, ganz weglassen. Die Pfade der Programme welche nicht Teil des GFA-BASIC-Entwicklungs- packetes sind, drfen auch ganz wo anders installiert und dementspre- chend in MENUDLX.DAT vermerkt werden. Welche Programme und Dateien befinden sich wo auf der Diskette? --------------------------------------------------------------- MENUDLX \ GFA_BAS._V3 \ MENUDLX.PRG (GFA-MENU-DELUXE) MENUDLX.DAT (zugehriges Filesystem) \ BIN \ GULAM.PRG (PD-UNIX-nahe Shell.) \ GULAM.G (Daten, Alias etc.) \ GULAM.HLP (Help-File fr GULAM.) \ GULAM.DOC (Sehr ausfhrliches Manual.) \ QUIKFIND.PRG (PD-File-Finder) \ QUELLTXT \ MENUDLX.GFA (GFA-Quelltext) \ MENUDLX.LST (LST-Quelltext) \ MENUDLX.INL (Inline-Maschinencode) \ DOKUMENT \ MENUDLX.INF (Dieses Dokument als ASCII.) MENUDLX.DOC (Dieses Dokument als Wordplus.) Wie Sie feststellen, ist der in GFA-MENU-DELUXE verwendete zustzliche Editor TEMPUS nicht auf der Diskette. Der Grund ist, dass TEMPUS weder ein Public-Domain- noch ein Share-Ware-Programm ist. Es ist aber jedem GFA-3.x-BASIC-Programmierer freigestellt, seinen Liebliongseditor kombi- niert mit GFA-MENU-DELUXE einzusetzen. Man darf aber dann nicht verges- sen, MENUDLX.DAT entsprechend anzupassen. Die andern beiliegenden Programme wie GULAM und QUIKFIND drfen frei kopiert werden, da diese PDs sind. Ich wnsche Ihnen ungetrbte Programmierstunden mit GFA-3.x-BASIC in Symbiose mit meinem GFA-MENU-DELUXE.... Th. Schaerer 01-nov-91 ******************************************************************** Deze diskette is samengesteld door de Stichting ST, Postbus 11129, 2301 EC Leiden. Onze bibliotheek van public domain programma's omvat op dit moment (zomer 1993) al meer dan negenhonderd disks. Daarop vindt u programma's op elk gebied, van tekstverwerker en database tot de leukste spelletjes, de fraaiste tekenprogramma's en de handigste utilities. Ook bevat onze bibliotheek een speciale afdeling voor public domain disks met Macintosh software, die te gebruiken zijn onder de ALADIN emulator. Deze MAC-PD serie bevat tot nu toe ongeveer vijfendertig disks. ******************************************************************** U vindt in het twee maandelijks tijdschrift "ST" (Onafhankelijk tijd- schrift van en voor gebruikers van Atari ST computers) een overzicht en een bespreking van de inhoud van de nieuwe public-domain diskettes. Dit tijdschrift bevat tevens een bestelkaart zodat U vlot over de software kunt beschikken. De november/december uitgave 1993 bevat een compleet overzicht van de Public Domain bibliotheek op dat moment. De Stichting ST geeft ook een speciale PD catalogus disk (database met filenamen) uit. Deze public domain disk is geproduceerd en gedistribueerd door: ************** Stichting ST afd. Software Bakkersteeg 9A 2311 RH LEIDEN ************** Ondanks onze controle komt het af en toe voor dat een diskje niet goed is gecopieerd.Mocht U dit overkomen, aarzel dan niet en stuur de defecte disk aan ons terug. U krijgt dan direct een vervangende disk toegestuurd. ************************************************************************ Teneinde het voor ons mogelijk te maken om productiefouten op te sporen en vervolgens in de toekomst te vermijden, zijn alle disks, geproduceerd door de Stichting ST, voorzien van een groen productienummer. ************************************************************************