4NNNNN9<p NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNXm  @`! #@%)+-1 3@o79;=?A OE`IKMQ OU`WY[]_a c@e`gikmoq s@u`wy{} ` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @` @`Aa   !Aa!!#Ao')+//3A5a79;?ACAGKMOQ!SAUaWY[]_a!cAeagikmoq!sAuawy{}!A/Aa  @`! #@%)+-1 3@o79;=?A OE`IKMQ OU`WY[]_a c@e`gikmoq s@u`wy{} ` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  @` @`Aa   !Aa!!#Ao')+//3A5a79;?ACAGKMOQ!SAUaWY[]_a!cAeagikmoq!sAuawy{}!A/AaA190 FONTCONV ՁjFONTEDIT ~jFONTLOAD jHD_TEST FLDLQ 5OOSLM804 #FONTEDITACC t 8FONTEDITRSC t IBM FNT t %LEES DIT b7F.. j.. jFONTCONVDOC VZ=2FONTCONVPRG KZ10#FONTCONVRSC n<:R . j.. jFONTEDITACC ocB9FONTEDITRSC ]/FONTEDITTIP - FONTEDITTXT 8IBM FNT Er'READ_ME 1ST Cr&FONTEDITSRCjI. j.. jFONTLOADACC cBREAD ME aEFONTLOADSRCj. j.. jCHECKHD6BAS Ep5>7CHECKHD6PRG RpS`HDBENCH BAS IpCNHDBENCH LST NpJHDBENCH PRG Vpl7TRANSFERBAS KpG TRANSFERLST PpO-TRANSFERPRG Zpz$. j.. jSETLQ500PRG apSETLQ500SCR fp}. j.. jLIESMICH mpzLPLOT PRG pp˫LSETUP ACC ypL2SDUMP5 PRG vplTEST PLT }pP`5N)d``8>>> TURBO-C <<<< for ATARI-ST Version 1.1 (C)88/89 Borland International G#8J$VH38 k #8 Ј<.@#8<"@(I$k,"Jf"JfB// ?<?<JNAO N. A6<HCBB`6 !jBJ)gHiRC` "fSI "WJAkHiRCBSQJ)gHiRCHy`$O0 J"LN+.? 95Pg @N 95Tg @NN-?<LNAH8&H(I6N-,$H KN-0 LN-6 JN,0LNu/ / $H&IN+p. JN+&H gBC6* JN+6"o JN+,&_$_NuHBAN, O p?rC??<?<BgBB Rp?BAN+O p?rC??<?<BgBB RpGBAN+O p???<?<BgBBBA RpCN+O p???<?<BgBBBA RpDN+O p???<?<BgBBBA RpEN+dO p???<?<BgBBBA RpBN+DO p?Bg?<?<BgBBBA RpMN+$O p???<?<BgBBBA RpMN+O p?Bg?<?<BgBBBA RpNN*O p???<?<BgBBBA RpNN*O JCf. y 5Zg$p?r??<?<BgBB Rp@BAN*O `"p?r??<?<BgBB Rp@BAN*pO $_6NuH YO<:86/EHoHo"J J098.2N(PO0Y@gU@g_@g`N | `N| ` N$| TEB/A42098.N(NN.N@XOLxNu?4H…HBJyU2HIyUNTTONuH QO80<N+EU>?j0|?@2*|?A0*VBAN'A0*VN'~BC` 20RCN~|o0<N*POLNuH,QO60<N*EU>I?Tp@R?@2<T?AKR0BAN'?T0<T?@Ar0N((RD| mBD`$0HT?@?@>p@R?@Ar0N'RD|m`BD`(0HR?@>r T?Ap`T?@A0rN'RD| mBD`&pDHT?@?@>p@R?@Ar0N'RD| m`hBD`*pDHR?@>r(T?ApXT?@A0rN'^RD|mBD`*pDHT?@?@rR>p8R?@A0rN'*RD|mБ0<N)(POL4Nu4BA5\40 j||ft`BB0Nu??A5\JBf6<kFC8Dp@`6<k8Dp@8D1@86NuHQO86:0/Y@g U@g`XC`RDZC2098.N%R0HyUR@>2IyURA?AtW?Bvo?C0<N(XA098.N$0<N(BPOL8NuH860Nr|lN0Y@gU@g _@g`xz` z8`z8BF`&BG`20NJ@g?t20N(TORGGnRFFnLNuHO60<N'I5̶|MfB@` 2ABtR@|mv B@?@>GUA2YAg\UAg._Ag`~?|?|?S?P pS?@ rP?A`V?|?|?SpP?@ rS?A t P?B`,?|?|pS?@rP?A tS?B v P?CN#(Hy5CAr0+NN#6XO0<N&OLNu?/ ]O60<N&EHoHo"J Jr098.N#PO|lL0H| l<0` 0H<72HHA| l<0`2HHA<7A`p @B/A49U29U098.N#n0<N&\O$_6Nu??86N0N8|fpMN"`0N86Nu?/ O6BB?B ?BG50Y@gU@gL_@g`0H>BorW?A?|?| ?|Hy5CAr098.N!XO`0H>BorW?A?|?| ?|Hy5CAr098.N!XO`@p>BorW?A?|?| ?|Hy5CAr098.N!JXOO&_6Nu?/ O6BB?B>G50Y@gU@gN_@g`?|?|0H?@Bo ro?A ?|Hy5|"KAr098.N XO`?|?|0H?@Bo ro?A ?|Hy5"KAr098.N XO`B?|?|p?@Bo ro?A ?|Hy5"KAr098.N HXOO&_6NuH0$|vGU`N|gT f'|'rX'|`~\'|A``N "f'|'X'| \'|iJ``, f'|)X'|Vr\'|S``BCJCgN"PB@`2I4J' R@|m"hB@`2I4J' R@|m"hB@`2I4JAP! R@|m kX '|Ud'kh'kl'kLpC5\#|80 #|H04#|P0H#I\0L NuH0OBE6*G80B@CAN J@f fB@ANh8m K"<Nް|g rpN`vCANCANC*ANBgp??<?<BgBBBA kp1N O Bgp??<?<BgBBBA kp2N hO Bgp??<?<BgBBBA kp3N FO N&N8NJ0NzJfnBD` k@@RD|mC7ANBD` kC@@RD|mCDANBD` kC@@RD|mCQAN3 5Zp NO,L Nu/ EUHyUCp RNlXOPjHyUCpI RNTXOXjXj HyUC pK RN8XO\j ^jHyUCpL RNXOZjj $_Nu/ E5X0HH@HyU?2HIyU?t8yU?tyUprN \O2*0Nl0<N F2*0N0<N 242*0<NpN$_Nu35X295Z0<NpNNuH>]O&H$IB@20IKMUHo"MA0.VNXO2Vm84|Bn.0Tm&4.|n2U4.T2H:|g0<`*0H:H2H8A2IV64Jn4\OL|Nu?/ 6 y5XgN(35Z0N295Z095XN0NEU?<?<BgBBrpP RND\O0Y@gU@gJ_@g`p???<?<BgBBBA Rp9NVO p?Bg?<?<BgBBBA Rp:N6O `@p?Bg?<?<BgBBBA Rp9NO p???<?<BgBBBA Rp:NO p?Bg?<?<BgBBBA Rp;NO ``p?Bg?<?<BgBBBA Rp9NO p?Bg?<?<BgBBBA Rp:NO p???<?<BgBBBA Rp;NrO $_6NuH0OG5Z kfCAN6|gEU?<?<?*?*?/ CA4/$rpN O CAN|8|f?/?/?/4/rpN\O`Cfd7Cp8R?rj??/4/ prN\O?<pA???*r?tr8RpjNO 20N20NB@N`"0Y@gU@gZ_@g`0H>BorW?A?|2I?ABo to?B ?|Hy5|C"A0*PrNXO`0H>BorW?A?|2I?ABo to?B ?|Hy5C6A0*PrNXO`Np>BorW?A?|r?ABo to?B ?|Hy5CJA0*PrNxEU095ZY@g&U@g_@g`*:<*~@6<`:| jv@>`zR|(jv0>IGHo"LA 0*RN6XOTS0oR2oN@oJAoFH8H64g NJ@gBDBW420N?95Z420NTO095ZNpofPOLNu?6095ZN295Z095XNHp?r??<?<BgBB yU0BANO 6Nu?6BA`4BA5\1 RA|m0N6NuB@A5\`2A40FB1R@|mpHNlNu??A5\2(YAgUAg _Ag` p`p`pBA`4B40 6AC8D10@10RA4H…BopFN86NuH E5\ jgv8`vx BE`@BF`(20N\J@gt2pFNp` BB2pFNbRFFn0@22i5RE|mp=NLxNuB@A5\`2ApUUR@2ApR@|mpGNjNuH E5\ jfv`v BD`4BE`(20NJ@gt2pDN` BB2pDNRE|mRD|mBD`0@22i5RD|mp@NL8NuB@A5\`2A4B1 R@|m0(Y@gU@g _@g`Bh` Bh`Bh p>NNupA5\`2A4B1 S@J@nBPp>N|NuH E5\ jfv`vBD`0@22A5BB02NRD|mp>N8LNu?/ BCE5\`0@22A5BBB@2NRC|mp>N$_6Nu?//NXO6?<?<BgBBr yUB@N\O295Z095XNL06NuH>O8(H$I/ANXOE6*C^AN"LAN,KVGVs/ "M MNXOHoC MNfXO6095ZNJCf rpN*`b ofX/ CANtXO"M KNCa KNC KNA50<NKuMIB@ KNt6m2tAXWf2(N cX4zA"<0N"*|fj"K MN*`A"<0N*|fF"K NN`A"<0N*|f""K LN`jA"<0N*|g rpN`H"K MNHy6C"M MNdXO"K NNHy6P"N NNLXO"K LNHy6]"L LN4XO0NLp?Bg?<?<BgBBBA yUp#NO p?Bg?<?<BgBBBA yUp$NO p?Bg?<?<BgBBBA yUp%NO p?Bg?<?<BgBBBA yUp&NvO 095ZN\?<?<BgBBrpP yUN \OA5B@NOL|8NuH>O:$H6G5Z kgNxKVIVs/ "M MN*XOB/,Ho:C0 MNXOJ@f0N.rpN` o:f"M LN~K6*Ca LN 8C, LN .A0<NB@"LANJ@g0NrpND`|0H"/g0NrpN&`^MuB@ LN 8m2tAXWf:2(N c|DA2H0N ,Ff"L NNr/ "N NN$XOp N`A2H0N ,Ffp"LAN>/ CANXOpN`A2H0N ,Ff8"LAN/ CANߴXOpN`~A2H0N n,Fg0NrpN `X"L NNHy6C"N NNnXO"LANHy6PCANPXO"LANHy6]CAN2XO` 0N F`0NBp?Bg?<?<BgBBBA yUpNO p?Bg?<?<BgBBBA yUpNO p?Bg?<?<BgBBBA yUpNO p?Bg?<?<BgBBBA yUpNhO AB@NOOE8.BA0N r0<NKR:;j0*|;@2*|;A M0N K6*M4Cc NN C{AN CAN INHoNHoR"L Lr 0N FPOAtjr,j0N lNތNޞNް NtBjr j0N LAtRjr j0N 6Atbjr j0N "HoNHoR"L Lr0N PO N4*|r j0N A4*|r j0N A4*|r j0N HoNHoR"L Lr0N vPO N4*|r j0N A4*|r j0N A4*|r j0N nNNNHoNHoR"L Lr0N POA4*|r j0N 4GPHoN"L K0N XO0fHoN"L K0N XO0gr?Bg?<?<BgBB jpQBAN &O 095ZNf0<N HoN"L K0N XO0fOZL|NuH>OE G8.Ho "JpP kN XOVRTj0|5@rj5A0<N BA0N J0N 0<N vR8z jIHoHo"L Lr0N PO0<N A7tErD0N 0<N HoHo"L L295Z0N POKMHo"N M0NXO0f0<N xA7420N 0<N ^Ho"N M0NzXO0g"L LNJ<|lJFf J0N8`nB/0<N NۄNۖNۨA420N LN۰NNԑ0<N y5Zf\D`PD0|@o8Ho"N M0NXO0f0Rm2jn*2/jmjn?<?<BgBB kpPrN \OR j0|5@r j5A0<N T J0Np?Bg?<?<BgBBBA kpRN O 0<N Ho"N M0NB@N`,r?pN` N`N8`N`N`N"` klN` klN` klN` klN`CA6Cp Nv`C!A6PpNb`C.A6]pNN`tCA66pcN:``2<A6Cp N`N2<A6PpN`<2<A6]pN`*2<A66pcN`Nx`N` A7pNF|Ofbr1 NS@fNׂr2 NS@fN׈r3 NS@fN׎ RNBgp??<?<BgBBBA RpONXO L NuH8O^N6E8.HoHoCANPO4B@` 2A?rR@| m?|HW"JAvNXO2?<NNT#TV|g #UV*|V:BmBm;|f ;y8. "<70<sNBL|Nu JgJgJgJgJg JgJgJfSHggggg ggf @Nug fC`Jg INuSHNu g<g8g4g0g,g(g$g ggggg ggf @Nu"HJgJgJgJgJg JgJgJf SNu/ G7 g/ &S?<INA\O`G7 g/ &S?<INA\O`&_Nu/ Hz^?<?<NMPO/Hz?<&NN\O?<?<NMPO$_Nu OJx@371B x@f1J x@fp!PNu.H3 7Nu//??<?NAO Nu/?<NA\ONu?/?<NNAPONu?<NATONu?</NATO @Nu?<0NATONu??<>NAXONu//??<@NAO Nu?/?<42(B86"f$ T. F&RPJ <**@ ^B "*`p2zJ*JP*$N*$$$ $Nr:$$$,F>*4 ~Z  T.6 $    & ,$ 00& T Bedienungsanleitung FontEdit ============================ FontEdit --- noch ein Fonteditor ??? ------------------------------------ Diese Frage werden Sie sich sicherlich gestellt haben, als Sie dieses Programm zuerst gesehen haben. Deshalb erst einmal folgende Klarstellung: Mit FontEdit knnen sie weder beliebige GEM-Fonts, STAD-Fonts, SIGNUM-Fonts, DEGAS-Fonts u.s.w editieren! Ja was den dann werden Sie fragen. Nun ja, mit FontEdit knnen Sie ganz einfach, und fast zu jeder Zeit (es ist ja ein Accessorie), ALLE DREI SYSTEMFONTS editieren! Diese Fonts stehen Ihnen dann in allen Programmen zur Verfgung die die Systemfonts benutzen. Endlich kann man sich also z.B. in 1st Word die Sonderzeichen definieren, die man schon immer haben wollte. Ein Beispiel dafr ist der beiliegende IBM-Font. Dieser Font enthlt im Bereich von B0H - DFH die Grafikzeichen des IBM-Zeichensatzes. Man kann sich damit nun leicht Tabellen oder Rahmen gestalten, die mit jedem IBM-kompatibelen Drucker ausgegeben werden knnen. Auch Steuerzeichen fr z.B. Zeilenabstand oder einen anderen Schrifttyp kann man nun auf einprgsame, selbst definierte Zeichen legen. Interessiert? Dann sollten Sie mal die folgende Beschreibung lesen und mit FontEdit etwas herumspielen. Wo luft FontEdit? ------------------ Da das Editieren der Fonts nicht auf offiziellem Wege mglich ist, muss FontEdit speziell auf verschiedene TOS-Versionen angepasst werden. Im Moment (Ver. 2.1) wird TOS 1.0 (altes ROM- TOS) und TOS 1.2 (Blitter TOS) und TOS 1.4 untersttzt. Fonts editieren ist nur mit dem S/W-Monitor mglich. Das Formular ist fr die geringe Farbauflsung einfach zu mchtig! Unter Farbe wird jedoch auch der DEFAULT.FNT (s.u.) geladen, so dass man auch unter Farbe mit anderen Systemfonts arbeiten kann. Wie installiere ich FontEdit? ----------------------------- FontEdit ist ein Accessorie. Sie mssen also zuerst einmal FONTEDIT.ACC und FONTEDIT.RSC auf Ihre Bootdiskette bzw. Ihre Festplatte kopieren und RESET drcken. Nun steht Ihnen das FontEdit Accessorie zur Verfgung. Seite -1- Wie arbeite ich mit FontEdit? ----------------------------- Nach dem Anklicken von FontEdit im Accessorie-Men erscheint das FontEdit-Formular auf dem Bildschirm. Herzstck des Formulars ist die Darstellung eines kompletten Fonts in der linken Formularhlfte. Rechts daneben befinden sich einige Knpfe mit denen man die verschiedenen Fonts laden, speichern etc. kann. Darunter befindet sich das Editfeld, in dem man ein Zeichen editieren kann und einige Knpfe mit Hilfsfunktionen. Doch nun im einzelnen: ---------------------- FontEdit kann alle 3 Systemfonts bearbeiten. Um die Fonts namentlich zu unterscheiden, werden Sie mit Ihrer Pixelgrsse angesprochen. Es gibt also den 8*16 Font (Standardfont in S/W), den 8*8 Font (Standardfont in Farbe aber auch in S/W bei z.B. 1st Word im Grafikmodus) und den 6*6 Font (z.b. ICON-Beschriftung und Subscript in 1st Word). Zeichen auswhlen ----------------- Wollen Sie ein Zeichen editieren, so mssen Sie zuerst einmal den entsprechenden Font auswhlen (s.u.). Fangen wir aber einfach mal mit dem 8*16 Font an, der beim ersten Aufruf automatisch angezeigt wird. Wollen Sie nun ein Zeichen editieren, so klicken Sie es einfach mit der Maus an. Das Zeichen wird nun unten rechts im Editfeld vergrssert dargestellt. Ausserdem werden die Hilfsknpfe fr das Editieren freigegeben. Zeichen editieren ----------------- Punkt setzen: Nicht gesetzen Punkt mit der Maus anklicken. Hlt man die linke Maustaste gedrckt, so kann man durch Bewegen der Maus weitere Punkte setzen. Punkt lschen: Geht genauso wie Punkt setzen, nur dass man bei einem gesetzten Punkt beginnen muss. Hilfsknpfe: Links neben dem Editfeld befinden sich einige Hilfsknpfe, mit denen man das ganze Zeichen beeinflusst. Die Bedeutung der Knpfe drfte aus den Symbolen ersichtlich sein. Anzumerken ist noch, dass das Symbol fr 'Zeichen drehen' natrlich nur bei den quadratischen 8*8 und 6*6 Fonts freigegeben wird. Um das Editieren zu erleichtern, wird das bearbeitete Zeichen unten links neben dem Editfeld auch noch in Originalgrsse dargestellt. Darunter steht die ASCII-Nummer des Zeichens in HEX. Durch Anklicken von OK kann man sein Werk nun in den Zeichensatz bernehmen. Sollte das Zeichen missraten sein, so kann man es mit UNDO wegwerfen. Seite -2- Zeichen kopieren ---------------- Oft baut ein Zeichen auf einem bereits vorhanden Zeichen auf (z.B. ein invertiertes Zeichen). Man kann deshalb ein Zeichen auch an eine andere Stelle kopieren. Dazu einfach Zeichen anklicken, und mit gedrckter linker Maustaste auf die Zielposition fahren. Maustaste loslassen, und schon ist das Zeichen kopiert. Zeichenstze laden und abspeichern ---------------------------------- Nachdem Sie sich einen eigenen Zeichensatz erstellt haben, mchten Sie diesen sicher auch abspeichern. FontEdit bietet hierzu verschiedene Mglichkeiten. So knnen Sie jeden Systemfont einzeln, oder aber auch alle zusammen abspeichern. Nhere Informationen ber das Format knnen Sie bei mir erhalten (s.u.). 8*16 Font abspeichern: Klicken Sie das Feld 8*16 neben SAVE an. Nun erscheint die Fileselector-Box (kennen Sie schon meine FSEL-BOX?) und Sie knnen Ihren Font unter einem Namen Ihrer Wahl abspeichern. Als Extension wird automatisch .F16 angehngt. 8*8 Font abspeichern: Klicken Sie das Feld 8*8 neben SAVE an. Das Abspeichern erfolgt analog zum 8*16 Font, nur dass die Extension .FN8 angehngt wird. 8*6 Font abspeichern: dito. Extension .FN6 Alle Fonts Abspeichern: Klicken Sie das Feld ALL neben SAVE an. Nun werden alle 3 Fonts in einem File mit der Extension .FNT abgespeichert. Das Laden der Fonts erfolgt analog zum Abspeichern. Sie mssen halt nur die Knpfe neben LOAD anklicken. Systemfont laden ---------------- Die Systemfonts knnen Sie jederzeit laden. Dazu einfach den entsprechenden Font neben SYS anklicken. Nach einer Rckfrage wird der aktuelle Font mit dem Systemfont berschrieben. Font aktivieren --------------- Mit den Knpfen neben USE knnen Sie auswhlen, welcher der editierten Fonts auch benutzt werden soll. Die invertierten Fonts werden aktiviert. Um es Ihnen zu erleichtern, gibt es noch die Knpfe ALL und NONE, mit denen man alle Fonts aktivieren bzw. deaktivieren kann. Seite -3- Font auswhlen -------------- Die unterste Reihe ist mit EDIT beschriftet. Hiermit knnen Sie auswhlen, welchen Font Sie bearbeiten mchten. Klicken Sie einmal 8*8 oder 6*6 an. Auf der linken Seite wird nun der entsprechende Font angezeigt und das Editfeld unten links ndert sich in der Grsse. Probe1 und Probe2 ----------------- Oft ist es wnschenswert sich anzusehen wie verschiedenen Zeichen im Zusammenhang wirken. Dazu gibt es die Knpfe PROBE1 und PROBE2. Mit Probe1 erhalten Sie einen Standardtext in allen 3 Fonts. Mit Probe2 knnen Sie sich einen eigenen Text im aktuellen Font ansehen. Dazu Probe2 anklicken. Der Fontname verschwindet nun und es erscheint ein Cursor. Durch Anklicken knnen Sie nun verschiedene Zeichen nebeneinander darstellen. Sie beenden diesen Modus, indem Sie Ihren Probetext anklicken. FontEdit verlassen ------------------ Als Accessorie wird FontEdit natrlich nie richtig abgebrochen. Man kann nur das Formular wieder schliessen. Das ist jederzeit mit QUIT mglich, sogar wenn man dabei ist ein Zeichen zu editieren. Aktiviert man FontEdit wieder, so kann man an der Stelle weitermachen, an der man aufgehrt hat. Der DEFAULT.FNT --------------- Damit man seinen 'Lieblingsfont' nicht jedesmal von Hand laden muss, bietet FontEdit die Mglichkeit einen Font beim Booten automatisch zu laden und zu aktivieren. Dieser Font muss den Namen DEFAULT.FNT tragen und mit SAVE ALL erzeugt worden sein. Dies funktioniert brigens auch in Farbe, so dass man auch hier eigene Fonts benutzen kann! Wenn Sie den beiliegenden IBM.FNT in DEFAULT.FNT umbenennen, und auf Ihre Bootdiskette bzw. Festplatte kopieren, steht Ihnen der IBM-Font nach jedem Booten unmittelbar zur Verfgung. Seite -4- PUBLIC DOMAIN ============= FontEdit ist PUBLIC DOMAIN und kann damit beliebig weitergegeben werden. Fr die Verbreitung des Programms bin ich Ihnen sogar dankbar. Geben Sie FontEdit aber nur als kompletten Ordner, also mit dieser Anleitung weiter. Wie Sie sich sicher denken knnen, steckt in der Programmierung solcher Programme einige Arbeit. Sollten Sie also mit FontEdit arbeiten, so drfen Sie mir Ihre Dankbarkeit mit 10 DM beweisen. Dafr bekommen Sie dann auch noch einen Hinweis, wie Fontedit die Zeichenstze einbindet und wie die Fontdateien aufgebaut sind. Fr 20 DM schicke ich Ihnen dann noch zustzlich eine Diskette mit folgenden PD-Programmen von mir: 1.) FontEdit: Evt. eine neuere Version [Turbo C / Assembler] 2.) FSEL_BOX: Eine neue Filselector-Box mit einigen ntz- lichen Erweiterungen. (Laufwerkswechsel mit Maus mglich / Lschen von Files / Erstellen von Ordnern / u.a.) [Profimat Assembler] 3.) DRACHEN: Spiel fr s/w-Monitor hnlich Shang-Hai. Versuchen Sie gegen die Uhr die 144 Steine abzubauen. Sehr schne Grafik! [GFABASIC 2.0] 4.) Little-Net: Rechnerkopplung zwischen 2 ATARI ST ber MIDI-Schnittstelle. Man kann jederzeit auf alle Laufwerke des anderen ST zugreifen, wobei dort ganz normal gearbeitet werden kann! Zustzlich kann man noch eine Nachricht verschicken. [GFA Assembler] Auf Wunsch lege ich auch den Quellcode der Programme bei. Meine Adresse: Bankverbindung: -------------- --------------- Dirk Woitha Stadtsparkasse Remscheid Hebbelstr. 11 Blz.: 340 500 00 5630 Remscheid 11 K-Nr.: 612 507 Tel.: 02191/662845 (nach 19 Uhr) Seite -5- mit der Extension .FNT abgespeichert. Das Laden der Fonts erfolgt analog zum Abspeichern. Sie mssen halt nur die Knpfe neben LOAD anklicken. Systemfont laden ---------------- Die Systemfonts knnen Sie jederzeit laden. Dazu einfach den entsprechenden Font neben SYS anklicken. Nach einer Rckfrage wird der aktuelle Font mit dem Systemfont berschrieben. Font aktivieren --------------- Mit den Knpfen neben USE knnen Sie auswhlen, welcher der editierten Fonts auch benutzt werden soll. Die invertierten Fonts werden aktiviert. Um es Ihnen zu erleichtern, gibt es noch die Knpfe ALL und NONE, mit denen man alle Fonts aktivieren bzw. Die Beschreibung FONTEDIT.TXT ist 5 Seiten lang. Sie ist so verfat, da sie auf Endlospapier mit 72 Zeilen/Seite direkt vom Desktop aus gedruckt werden kann. Die Seitenformatierung stimmt dann automatisch! n -------------- Die unterste Reihe ist mit EDIT beschriftet. Hiermit knnen Sie auswhlen, welchen Font Sie bearbeiten mchten. Klicken Sie einmal 8*8 oder 6*6 an. Auf der linken Seite wird nun der entsprechende Font angezeigt und das Editfeld unten links ndert sich in der Grsse. Probe1 und Probe2 ----------------- Oft ist es wnschenswert sich anzusehen wie verschiedenen Zeichen im Zusammenhang wirken. Dazu gibt es die Knpfe PROBE1 und PROBE2. Mit Probe1 erhalten Sie einen Standardtext in allen 3 Fonts. Mit Probe2 knnen Sie sich einen eigenen Text im aktuellen Font ansehen. Dazu Probe2 anklicken. D8@<U6666666666666|||||||| (|````ff >``ff22``6666666666666|880 |x8::x ff>fl`f<<~ ~~<<<8|f~`f<|<>~ffff~`xp`` 80>|`l|00x<88<@@@(ff~fl 0f~~~ ~<~~~~|<~~|~~~f~`f~~~~~ffff~`x88`` 80~fffffff~ffff8f<LL 6666666666666<~~l ~pD|xH<$,4fp@pf`l88<f8f `pff~pf~ffn```f`ffff`ffff `8``0f<<~l|H0f$g< @@ |@.f` 8< f8f ``ff8~8fffff```f`vfff`ff<>|8 l<<|>|>~ffff~0bff<<<<<<<<<888~~`v<<~&&66667?7666f`~08fB~8|88H0$<@8 ::~x9ff|p~~ f <|` <~p f~`f||n~`vfffpff<<0l>~|~~~~~8 ~~~~~~~ffff~88`f~>>>>|~~~888ff`~~~ffffff0~f>8~f~ff,,"U66667?7666f`lfB<~p~@H`H8<|||||||8ff>p~~n <~| <> f|`f||n~`~fff8ff<f`ff~ff fffff`fff667000??|` f0~f~~8~Hx0gf`ffff ffff`pff>>>`fff~~|{ffffffff`f>fff~~f002llU67?77??f`( f0BlB~8>$,4򒌁<y~6<0f lff8~8~f`f``ff`nf|fff<0 ~f`f~ff ffff`<fff88f`f~~~~~`~~~~~`fffffffff0~f~fff~ff0~~nf66666?77666f`(f0B(Bp|P$f8~pqf f~ff0f0f~f0fpffff``fff`nf`ff<<` ff`f`ff ffff`f<f< ~0~~~~~~~~~~~<<~~l~<~~ff><~` 2U6666666666666l`8]|>>>f< `|>f~0<>>>>>>>>>><<><<`p><<>ff<`?6666666666666`>~~~p <00~|`~ ~@`~~"U6666666666666@|T |x`|88|6666666666666<<~||||||||xf8p<<~ ~<~<<`<<|f<f`f<|<|<~ffff~@x```8pf f0f0f`f ?f00ffff 44U66666l666666l< ><0 8888x<$8<` (fl>fl8ff8f ``ff 0ff<|>|8f|<|>|>~ffff~f<<<~~f0 jf|`f||n~p`~f|f|<ff<0f`ff0fflfffff`fff>|666o000??|blllf~fT~f~~l0 Ã~ ~~l0<0f~f0fn~f`f``ffx`nf`vlff<0 >f`f~0ffxffff`<fff 4ff~>`~~~ff|ffffffff`0flffff`f<|<>0bff<0f0~fffn><`0 6lDD666l?7766lf`lfllf|f<f~x>|<><0f<f`|>lf~p~><>>>><<<<<><>~|`><<>fff0 U66666l666666lv|`l8f~~~p0<~`qT8`|p`|8|`<<<66666l666666l`H<`!϶ P>s8B͔{& 1pO<3>q qB((/` ` 1yAQ!D! QQE/A`0l%DB(@A (((  @?q x 0q>b*PȀ Sg ?B;M ` R# 1&( Cl("(R!`gay$!Or(J'0ΈPP#m 0€@A,/+ p @?kfaƾsm!,Ihcb;nPȏs `bp`ǾGq` &B/"(!B0m0(ȁ8#袊$"(2!0k'q q!qȢȘqq"/a͛%DN" < CT3frx0π0hbܓXi@!h>)n`00H(# 1 ("B)*"%6P`蠊$"$"%*1 02/ "(z( aŠAz(> 뢊( (y`< 0yqqȢqǞǀ0y/pBA (BB? p3`ff>>>>`fff~~|{ffffffff`f>fff~~f002llU67?77??f`( f0BlB~8>$,4򒌁<y~6<0f lff8~8~f`f``ff`nf|fff<0 ~f`f~ff ffff`<fff88f`f~~~~~`~~~~~`fffffffff0~f~fff~ff0~~nf66666?77666f`(f0B(Bp|P$f8~pqf f~ff0f0f~f0fpffff``fff`nf`ff<<` ff`f`ff ffff`f<p>p>pw>pw>p?>p?>p>>>pppppppppppppp`<x`f30030060?<<0y68ͳ6͞~yffacacaffafcaffa```````g@@`a@``@```a``g``a````@a `@g @ a@` `@`   00    >fa6f̀a3f̀a3<>f16f̀a3f̀3< Dp   * ^     R     F z    : n     . b    J  d  ~     Z   $-. pvwx|}~RC@(@  @   @ %/ P @ ! R T V XZ\^` b d f h jln@ :* % &  4  B   P  ^ '!&% #""! l $ z %   &    .(-%*))(  +  ,   -  '  6/5%100/  2  3   4 " 5 0 . > <7;% 9887 L : Z ; h 6 v I=H% > ? V @ r A  FBE C@   D@  E@ A@ G H < J@8  OKN,  LM N J P % Q R  %   GfABASICh.5\556`6b6b6h6h6h6t6666POINTERTMAXSECSMAXIMUMLOOPST1T2TICKS SCHLEIFENSECSKBRATEGROESSEADDRIRATEZEILEZYLINDERABUF2BUF3RONROFFABUFBLERGBPSTARGETGERAETFEHLERCYLSPTHEADSBLOCKSIHDCCOMBLOCKRATEMAXNJLINESSECVALIDBLOCKSECTORCNTBUFCNREZCOLUMNSPRUEFFEHLERHILFEBHDI FEHLERTEXTERDPROGRDERRORSSCREENCHOOSEMFREECENTERCHECKDEVERASESEEKTEST TRANSFERTESTRDTESTREADSECMALLOCDOSEEKWAITZEITERRINF TASTENTESTHELPME CPFPlattentest (C) 1989 by Claus Brod F  Am Felsenkeller 2 $ 8772 Marktheidenfeld  MF F &)!Zuwenig Speicher!!!Oweh!!FqF FMFZFehlermeldungen einlesen  E ! FE! FE FMFMF M F qF +FYFEBX pFEBX qFFXM! PLATTENTEST FF!&M!Aus dem SCHEIBENKLEISTER - F6M!+dem etwas anderen Floppy- und Harddiskbuch. F2M! Written & (C) 1989 by Claus Brod F. 0Y !@ ""Format der Platte:"F.XY !` "@| Zylinder | Sek./Spur | Kpfe | Sektoren (ges.) | Sektorgre |FXY ! "@================================================================FXY ! "@| | | | | |FXY !  "@================================================================F.F +FF$EG`HF=EGHF M! FM0 FHY !0 "Target "", Gert "" ist "F F! nicht "F Fangeschlossen.F" FoY@! "WFY8! "WFY ! "WFY,! "WFYt! "WFZY !@ "CSpurwechsel (S), Lesetest (L), Transfer (T), alles (A), weiter (W)?FFES F*SLWATFtM@ F SF M! F F TF M ! F F LF M ! F F AF M! F M ! F M ! F F F F F :)! Fertig! | Nochmal? | !! Nie | Klar !F Fr.F FSieht nach, ob Target Target%, Gert Geraet% am ACSI-Bus finden ist LOUT: Fehler% =0: kein Fehler; Blocks%,Spt%,Cyl%,Heads% sind dann gltig T =-1: Timeout, =2: Sonstiger Fehler, =3: kein DMA-Transfer (SH204!) +! Fh FjF @!z FM !!!!z ! Fu @!z F 4 @@ FuEF  F  #3   FuEF F3, 4 `` 4 @@ FrEF FE3z [ FE2z \ FE2z ` F !PF  !F  !F !@F  !F| F  4 @@ FEF  F  3   FEF FEhB ?@ @ FJ   HH HF0Eg?@`@ FE7?@@ FE7?@@@ F FEFE! F F F F F F.F + ! FhFEPG@F M F FFY !@ "" ESC = Abbruch"" "" HELP = Hilfe""F,Y !` "TRANSFERTEST luft...F EF ~F"E~~F F M  FEF F".Y !p "Zu wenig Speicher frei!F F M  FE FM F"{HF auf Suchende warten E9FEGFM !!!!! F F!M FMF E9FM!! F M F F .F +!! FwhFEHFwY !p "Fw###.##!"F, Sekunden fr "  " KBFF E #  F*Y ! "bertragungsrate: "F#####.#! "F ( Kbyte/s = "#####.#! "F Kbit/s.F=.F + F.E! F.F + FE! F.F + ! FEPG@F M F FFY !@ "" ESC = Abbruch"" "" HELP = Hilfe""F(Y !` "LESETEST luft...F$Y !p " Prfe Sektor F4Y ! "bertragungsrate: KB/sF EF ~F"E~~F F M  FEF F".Y !p "Zuwenig Speicher frei!F  F M  F FE9FEGFYH!p "FeM !!!!! FE9F EHH# # FhYh! " WF F! M F FMF FEF F FF M FM@ F8Y !@ " Lesetest beendet. Taste drcken.FLa F.F +FESFjF BXX F>)!# Schnff... | schon Schlu? | |!! Jawoll|Nie!!Fl F B BDD FMF F.F +! FEPG@Fn M F FFY !@ "" ESC = Abbruch"" "" HELP = Hilfe""F0Y !` "SPURWECHSELTEST luft...F" in: Cyl%, Spt%, Heads% R EF% E F M  F E9F EGFtEG Fs M  FG FGE GFs M  F F FE9F$E##   #@ FuMp FZY !p "Spur-zu-Spur ("@" Zylinderwechsel): "Y!p "F###.##!"F msFMFs F E FE9F EGHFM T  F F E9FE#  HFpM F\Y ! "0Mittl. Suchzeit (200 zufllige Zylinderwechsel):"Y! "F###.##!"F msFMFs F M FE9F EGHF0M F M  F FFE9F E##   HFiM F`Y ! "$Maximale Suchzeit (200 Wechsel ber " " Zylinder):"Y! "F###.##!"F msFMFs F M  FE9F EGHF$ M  F M  F FE9FE#  HFSM F`Y ! "$Mittlere Suchzeit (200 Wechsel ber "" Zylinder):"Y! "F###.##!"F msF F F FM@ F>Y !@ "'Spurwechseltest beendet. Taste drcken.Fa FM@ F.F + FhFE! FY! ""F.F +F h!!FFYFRFQFEF*F4F 8F*Y !@ "" Taste drcken"Fa FYFEF F M! FQFF!a FFF.F + FFhFEG8Fs M F FEFE~F~ ETimeout!FsE7?@@ xFsEg?@@ F<Y ! "Fehler "" ($"n " = " ")FBY ! " bei Sektor "" (Blockadresse: "", "Fl # F nicht "F F gltig)F$Y !( " Fehlerinfo: "FEGF6YH!( "$"n7?@@ "F" FF"die Zustnde am DMA-Bus. Man kann auswhlen, welcher der" 4angeschlossenen (ATARI-)Platten man prfen will., J"Beim Prfen werden alle Sektoren eingelesen; nach jedem Lesen bemht" )Bsich das Programm um eine ordnungsgeme Statusmeldung von der bDPlatte. Eventuelle Fehler werden im Klartext angezeigt. Nach der mB"'Blockadresse' wird 'gltig' oder 'nicht gltig' ausgegeben." rDLeider kann man sich auf diese Angabe - wie auf so vieles bei der D"SH204 und SH205 - wenig verlassen. Ist die Blockadresse gltig," B"heit das jedenfalls, da die Platte mit den vier Statusbytes" :auch die Nummer des fehlerhaften Sektors zurckschickt. BBei ungltiger Blockadresse bekommt man trotzdem oft noch eine @vernnftige Blocknummer. Darum wird sie immer mit angezeigt. e>Die Blocknummer ist nicht zu verwechseln mit der aktuellen .:"Sektornummer, die das Programm beim Prfen anzeigt!", l>"Mittlerweile ist ein Programmteil hinzugekommen, der die" .FSpurwechselzeiten der angeschlossenen Platten mit. Die verwendeten DAlgorithmen lehnen sich der Einheitlichkeit wegen an die Taktiken F"an, die Michael Wilde in der c't 11/88 (fr PCs) vorgestellt hat." D"Die Ergebnisse sind bitte nicht als Absolutwerte zu verstehen," .@sondern nur als Anhaltspunkt fr den Plattenvergleich. Damit nD"einigermaen vernnftige Werte herauskommen, sollte man dieses" .@"Programm compilieren, um den Sprach-Overhead zu minimieren." 6Der Spurwechseltest luft so nicht mit der SH204., nBFr die ganz Neugierigen steht der Transfertest bereit; er gibt DAuskunft ber die bertragungsraten der angeschlossenen (ATARI-) .H"Platten. Beim Lesetest wird ebenfalls eine Transferrate angegeben," "("die aber nicht die optimale ist.",, sB"PS: Bei der SH205 gibt es berdurchschnittlich oft Netzteil-" b@"probleme. Manchmal bringt es schon was, Rechner und Platte" ","an getrennte Steckdosen anzuschlieen." RB"PS/2: Bei Platten, die nicht mit Adaptec-Controllern versehen" >"sind, knnte PLATTENTEST bocken. Adaptec-Controller haben" B"SH204, SH205 sowie die neuen 30- und 60MB-Platten von ATARI." *,*  |F0F60420000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48E7FFFE,42806100,3E045FA "FFFF02480,45FAFFC2,24BC0000,50F8,43E4244,424341FA,FFA64280,223AFF9C "FB2BC0000,16700,3C01010,C07C001F,B03C0003,67000088,B03C000F,670000EA JB03C0004,6700010C,B03C0008,670001F0,B03C000A,67000144,B03C0015,67000132 JB03C001A,670000D6,B03C0011,670000C4,B03C0010,67000106,B03C0013,67000108 JB03C0014,670001AE,B03C001C,670000B8,B03C001D,67000186,323C008A,61000260 H33FC008A,FF8606,6100030E,4278043E,203AFF3E,61000326,4CDF7FFF,4E753C3C J33A3C,16100,2C633C5,FF8604,203AFEE4,61000280,323C008A,42406100,20A6B00 F1C423FC,A,FF8604,6100022A,6B0001B2,33FC008A,FF8606,4E713039,FF8604 BD8000001,6614343C,8251CA,FFFE51CE,FFC033FC,8A00FF,86066100,29A6084 D3C3C0001,3A3C0001,60943C3C,13A3C,1608A,3C3C0001,3A3C0001,60803C3C H13A3C,26000,FF76323C,18A6100,1926B00,14C1028,54840,303C018A,23C000FF 0H86040839,500FF,FA0166F6,6000012E,203AFE38,3A3C0001,6022203A,FE2E3A3C 0H26018,203AFE24,3A3C0001,600E4240,10280004,610002CE,203AFE0C,610001AC 0H33FC0088,FF8606,4280103A,FE064840,303C008A,23C000FF,86046100,1626B00 0HDC323C,18A6100,E86B00,D06100,1D033C5,FF8604,4E7133FC,18A00FF,86064E71 F23FC0000,10A00FF,86044A44,66066100,11C600A,8390005,FFFA01,66F633FC 7H18A00FF,86064E71,6000008E,3A3C0001,203AFD94,22400C11,606600,FF7C50C4 J6000FF76,3A3C0002,2C3AFD7C,600E7000,10280004,6100022A,2C3AFD68,33FC0088 FFF8606,4280103A,FD664840,303C008A,23C000FF,86046100,C26B3C,20066100 JE6323C,8A6144,6B2E6100,11233C5,FF8604,4E7133FC,8A00FF,86064E71,23FC0000 LA00FF,86046100,8033FC,8A00FF,86064E71,6100010E,6000FDFE,48403001,23C000FF J8604606E,48E7A000,42804242,43FA0022,32BC0004,4A436704,32BC0008,52421030 J200061D4,6B04B451,66F24CDF,54E75,4240,33FC0088,FF8606,101061B8,6B0261C0 L4E7561EA,6B181028,54A43,67041028,94840,300123C0,FF8604,61024E75,48E7C020 J4280223C,320,600848E7,C0204280,7214D2B8,4BA0839,500FF,FA01670E,B2B804BA F66F045FA,FC8070FF,24804A80,4CDF0403,4E7513C0,FF860D,E08013C0,FF860B HE08013C0,FF8609,4E754240,103900FF,8609E180,103900FF,860BE180,103900FF F860D41FA,FC442080,4E7533FC,9800FF,86064E71,33FC0198,FF8606,4E7133FC H9800FF,86064E75,61EA33FC,19800FF,86064E75,303900FF,86044840,303900FF D860645FA,FBFCC0BC,FF0007,248033FC,8000FF,86066092,2F003F3C,204E41 L5C8F4E75,1010C07C,1FB03C,3672E,B03C0008,6734B03C,18673E,B03C001B,674AB03C H116744,B03C0019,6746B03C,1A674C,B03C0012,67466000,FC783C3C,3A3C,16000 HFC9A7000,10280004,613A2C3A,FB7A6000,FE104280,10280007,E1481028,8363C H160E4,363C0001,6000FC42,3A3C0001,2C3AFB54,6000FDEA,3A3C0001,2C3AFB4C F6000FDDE,227AFB44,2A11CAC0,8AFC0200,2C054846,4A466702,52454E75,*** CGfABASIC JJJJJJJ X | ZEILEBPBT1TT2IABUFBMEDERGDRIVEBPSBUFFEHLERBYTESTICKSDRVRDPROGCENTER SECTORTESTFILETESTTASTEMEDIASHOWTIME Benchmark III fr Festplatten "1989 ST-Computer & Claus Brod  MF9FYF.M!#Standard-Benchmarks der ST-Computer F.M!fr Massenspeicher - Teil III F,M !Written 1988 by Claus Brod FFN)!. Welches Schweinderl | htten's denn gern? | |!!Exit|Sektor|File!F ZFFFwL!FcMFLFqF +! FY# 6 ! "F.F +F  SEKTORTESTFFF:Laufwerksbezeichnung"F E Fk6R#A #Q #!7   FE7 F821. 50 AUFEINANDERFOLGENDE SEKTOREN 100MAL EINLESENF M FUFE`! FR E3 FEH! FO Ez F!!!!! FDE9FEGHFF"E!!!H!! F FFehler "F F tF E9F MHHH! FF.)2. 100MAL JE 50 SEKTOREN EINZELN EINLESENFF!!!!! FNE9FEGHFEGHFFE!!!!! F FFehler "F F fF RF E9F MHHH! F.F +! F*Zeit: "####.##!H"F SekundenF ~Fd<Transferrate: "####.##!# #HH "F5  KB/sF FF.F +FBFILETESTFaFF: Ziellaufwerk"F E Ff.AQ!7  FE7 FZ)!B Ziellaufwerk | vorher initialisieren| (wird dabei| gelscht!!!)? !!NEIN!|OK!F LFaEGpF M F ~FFE`! F F! BIOS-Fehler!F  HFSE3 ! F!DEG3@ FFE!!z !!! F :F BIOS-Fehler "F F Fe F F"1. 25 DATEIEN WERDEN ERZEUGTF4/ (10*500 Bytes, 5*1500 Bytes, 10*30000 Bytes)F > / FtEj`! FE9FEGHFFB :\ordner.A F07O!M! :\ordner.A  \testfile.A F)@M!;@j`# ^#0 z "F)8MF; FjE9FM! F 2. LESEN DER DATEIENFE9FPEGHFI07I!M! :\ordner.A  \testfile.A F >E_j`# ^#0 z !M F)8MF FE9FFE4F >pF!EF F F =jF CZF,Jetzt ist die Laufwerksnummer eingestellt EB :\*.*FF!z ! F*Fdieser GEMDOS-Aufruf verhindert, da ein eventueller Medienwechsel oJvom folgenden BIOS-Aufruf weggeschnappt wird, bevor GEMDOS ihn bemerkt JDie Showm-Befehle verhindern, da im Compilat bei Critical-Error-Boxen 4("Daten auf Disk ? defekt") die Maus verschwindet FHE`! F  eventuelle Wechselmeldung lschen, Parameter holen n CF"E3 F Sektorgre in Bytes c M F  @rF0)! Zuwenig Speicher frei! !!ha!F CF M FF("1. TEST MIT GERADEN PUFFERADRESSENFjF E FIF E!!!!! FS AF M F B,F <Laufwerk auf Lesezugriff vorbereiten (Kopf positionieren) E9FAEGF E9F E!!!!! F AF EF F 0!9 FF E!!!!! Fn APF E9F BF!M!! F!Mit Positionierung:FM !! F B(F M F F FF*$2. TEST MIT UNGERADEN PUFFERADRESSENFojF EFF E!!!!! FEKopf positionieren BFi M Ft CF E9FCPEGF E9F"E!!!!! F CF EF F 0!9 FF E!!!!! FN BF E9F CF!M!! F!Mit Positionierung:FM !! F CF M F F F M F F CF M F FMF YF= FF + ! ! FFE HFF###.##!"F& Sekunden fr "####.#!  "F KBFE  #  F"Transferrate: "####.#!"F( KByte/s = "#####.#!"F KBit/s.F=F.F + F.J)! Fehler A  auf | Laufwerk B !!Auweh!F.F + FeE! F.F + FE! F.F +FhFFESF" E949\\F (Y !H "P! "Fa F F9HF&Y !H " Taste drcken"F"E9F F E|F.FE(D̀CEHEr' Benchmark III fr Festplatten ' 1989 ST-Computer & Claus Brod ' @Rdprog Do Cls @Center(3,"Standard-Benchmarks der ST-Computer") @Center(4,"fr Massenspeicher - Teil III") @Center(5,"Written 1988 by Claus Brod") Alert 1," Welches Schweinderl | htten's denn gern? | |",1,"Exit|Sektor|File",Erg% Exit If Erg%=1 Print Print On Erg%-1 Gosub Sectortest,Filetest @Taste Loop End ' Procedure Center(Zeile,A$) Print At((80-Len(A$))/2,Zeile);A$ Return ' Procedure Sectortest Print "SEKTORTEST" Print Repeat Input "Laufwerksbezeichnung";A$ A$=Upper$(A$) Until (A$>="A") And (A$<"Q") And (Bios(9,Asc(A$)-65)>=0) Drive%=Asc(A$)-65 Print "1. 50 AUFEINANDERFOLGENDE SEKTOREN 100MAL EINLESEN" @Media(Drive%) Showm Bpb=Bios(7,Drive%) Bps%=Dpeek(Bpb) Buf$=String$(50*Bps%,0) Buf%=Varptr(Buf$) Void Bios(4,0,L:Buf%,1,0,Drive%) T1=Timer For T=1 To 100 Showm Fehler%=Bios(4,0,L:Buf%,50,0,Drive%) If Fehler% Print "Fehler ";Fehler% Endif Next T T2=Timer @Showtime(50*Bps%*100,T2-T1) Print Print "2. 100MAL JE 50 SEKTOREN EINZELN EINLESEN" Showm Void Bios(4,0,L:Buf%,1,0,Drive%) T1=Timer For I=1 To 100 For T=1 To 50 Showm Fehler%=Bios(4,0,L:Buf%,1,T,Drive%) If Fehler% Print "Fehler ";Fehler% Endif Next T Next I T2=Timer @Showtime(50*Bps%*100,T2-T1) Return ' Procedure Showtime(Bytes%,Ticks%) Print "Zeit: ";Using "####.##",Ticks%/200; Print " Sekunden" If Bytes% Print "Transferrate: ";Using "####.##",(Bytes%/1024)/(Ticks%/200); Print " KB/s" Endif Print Return ' Procedure Filetest Print "FILETEST" Print Repeat Input "Ziellaufwerk";A$ A$=Upper$(A$) Until A$>="A" And A$<"Q" And Bios(9,Asc(A$)-65)>=0 Drive%=Asc(A$)-65 Alert 1," Ziellaufwerk | vorher initialisieren| (wird dabei| gelscht!!!)? ",1,"NEIN!|OK",Erg% If Erg%=2 For I=0 To 15 @Media(I) Next I Showm Bpb=Bios(7,Drive%) If Bpb=0 Print "BIOS-Fehler!" Else B$=String$(Dpeek(Bpb),0) For I=1 To Dpeek(Bpb+&HC)-1 Showm Fehler%=Bios(4,1,L:Varptr(B$),1,I,Drive%) If Fehler% Print "BIOS-Fehler ";Fehler% Endif Next I Endif Endif Print "1. 25 DATEIEN WERDEN ERZEUGT" Print " (10*500 Bytes, 5*1500 Bytes, 10*30000 Bytes)" If Dfree(Drive%+1)>350*1024 B$=String$(30000,&H42) T1=Timer For T=1 To 25 Mkdir A$+":\ordner."+Str$(T) Open "O",#1,A$+":\ordner."+Str$(T)+"\testfile."+Str$(T) Print #1,Left$(B$,30000+(T<16)*28500+(T<11)*1000); Close #1 Next T T2=Timer @Showtime(0,T2-T1) ' Print "2. LESEN DER DATEIEN" T1=Timer For T=1 To 25 Open "I",#1,A$+":\ordner."+Str$(T)+"\testfile."+Str$(T) B$=Input$(30000+(T<16)*28500+(T<11)*1000,#1) Close #1 Next T T2=Timer @Showtime(5*500+5*1500+10*30000,T2-T1) ' Print "3. DATEIEN WERDEN GELSCHT" T1=Timer For T=1 To 25 Kill A$+":\ordner."+Str$(T)+"\testfile."+Str$(T) Rmdir A$+":\ordner."+Str$(T) Next T T2=Timer @Showtime(0,T2-T1) @Media(Drive%) Else Print "Zuwenig Platz! Brauche mindestens 350 KB." Endif Return ' Procedure Media(Drv%) T=Varptr(Med$) Void C:T(Drv%) Return ' Procedure Rdprog Med$=String$(400,0) Read A$ T=1 While A$<>"***" Mid$(Med$,T)=Chr$(Val("&h"+A$)) Inc T Read A$ Wend Return ' Procedure Taste Local T Repeat A$=Inkey$ If Timer-T>90 And Timer-T<110 Print At(35,25);String$(13,32); Endif If Timer-T>200 Print At(35,25);"Taste drcken"; T=Timer Endif Until A$<>"" Return ' Data 30,2F,0,4,D0,3C,0,41,41,FA,0,84,10,80,41,FA Data 0,30,61,20,48,7A,0,80,3F,3C,0,1A,4E,41,5C,8F Data 3F,3C,0,0,48,7A,0,68,3F,3C,0,4E,4E,41,50,8F Data 41,FA,0,3C,2F,8,3F,3C,0,26,4E,4E,5C,8F,4E,75 Data 41,FA,0,80,20,B8,4,72,21,78,4,7E,0,4,21,78 Data 4,76,0,8,41,FA,0,2C,21,C8,4,72,41,FA,0,28 Data 21,C8,4,7E,41,FA,0,24,21,C8,4,76,4E,75,21,FA Data 0,52,4,72,21,FA,0,50,4,7E,21,FA,0,4E,4,76 Data 4E,75,70,0,4E,75,70,2,4E,75,70,F2,4E,75,58,3A Data 5C,2A,2E,2A,0,0,*** Reserve 30000 ! Speicher frs System freigeben Maxsecs%=200 ! maximal 200 Sektoren lesen Drive%=2 Do A$=" TRANSFERTEST via | BIOS-Routinen| 1989 Claus Brod| Laufwerk?" Repeat If Drive%>-1 Alert 0,A$,2,"|"+Chr$(Drive%+65)+"|",Erg% Else Alert 0,A$,2,"|Exit|",Erg% Endif If Erg%=1 Dec Drive% If Drive%<-1 Inc Drive% Endif Endif If Erg%=3 Inc Drive% If Drive%>15 Drive%=-1 Endif Endif Until Erg%=2 Exit If Drive%=-1 ' Jetzt ist die Laufwerksnummer eingestellt A$=Chr$(Drive%+65)+":\*.*" Showm Void Gemdos(&H4E,L:Varptr(A$),W:0) ' dieser GEMDOS-Aufruf verhindert, da ein eventueller Medienwechsel ' vom folgenden BIOS-Aufruf weggeschnappt wird, bevor GEMDOS ihn bemerkt ' Die Showm-Befehle verhindern, da im Compilat bei Critical-Error-Boxen ' ("Daten auf Disk ? defekt") die Maus verschwindet Showm Fehler%=Bios(7,Drive%) ! eventuelle Wechselmeldung lschen, Parameter holen If Fehler% Bps%=Dpeek(Fehler%) ! Sektorgre in Bytes @Malloc(-1) If Pointer90 And Timer-T%<110 Print At(35,25);String$(13,32); Endif If Timer-T%>200 Print At(35,25);"Taste drcken"; T%=Timer Endif Until A$<>"" Return `JHRJ` Efv*oM m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HNPHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALNHz2?< NA\pdAxr0XQ)K\NNl N ,`NuJrBjNuHz?<&NN\NCAp$L Qp N9lrBlJpNNpMN9@pdAr 0Q0tr N*9lNupealp`NuaNJHz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu pa4|a@:>< |a6RGk0Gg`a(0GVfA1G<ap??<?<NM\Nu??< NMXNu&8*:EENuHn\ 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NtNu&8*JEgJBgJjBEB:HC҅H@:|ۆ҄ۆ<HC>H@ЃdHA@B@H@хk HAҁHAрSB BbNuNbpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N.?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|v  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</N@JFkSFk&aQN@`Ha"FFaQL8N6.vJgtBnvNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dJf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C]fApNNNHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Fehler # ][Abbruch]\f.B &lX)K\)ld` lp ,BQjNup(NX"l`Yd&-KNN"l`YepN&#k"C-KN"Cփk փk2##`փk"`2`& $Y8gHRDD*D%H8#$c2g# HRDD%H`p"l`Qd&&| NuN"l`QepZNt"l`]d6&|0NuN"l`]epZNpr`&AdRd QJBgRBBABJk"l` d&6&|0!NuN"l` epZNC ҳfHP0(N$W$RR@H`2Q"H _$l` dd" $X&0BP6Y&|Hg R@@%E ҳeHQ0)N@$_$RR@H`2QNu$Y 0P1@Hg R@@%NuN$l` epZN)H,Bl0NuE+000 l,NV0l0oNNuaNHP l,"X42,0Rl0Bd1 _g !g &g, \g2N`Rl01` _NVJ@fp NN _NR NpR@RABd 1\fRA9A0 _/NV"@cԒ@H/N N\p?N _NRp%NLNFH l,"X42,0Rl0Bd1 _g,vxz| +g. -g( *g $g" #g N`Rl01`` `RCRABd1 _fRA` #g $g *g ,g ^gB +gZ -gT .fRxRDRABdH1 #g ^g +g. -g( _f&RA`RERABd1 ^g +g -f2ALH@NrL8"aC " Lx2DE A,b -fEt1BQt1$0000QE[JEft Q0JgE\J"f0J"ff JFj-Sg$E[JEgRE\JEg vJ*g RCJ*f~ g~*Jf`9I0`JEf@RANTE[JEg*ÒEA, gSAR`Ô l,HQ?HjSl0 l,"X0Rl0gL _g0 ,g .g +g( -g $_HRN`$W "0d`Rl0`p Jojp-`Sl0Nu <NAHZNZAN\zNJBfN#:HxNZuwenig Speicher!HPNOweh!r"_ N+@NAIfNZ <r$<v NBN\/p"NPClNprNPCrN+|A#NZA&NZAN\HA3ZNZNNNpN0HPppN0"_NCxNpN0HPpqN0"_NC~NNrAxNRN <r$<HN PLATTENTEST4HPAJ(NZNrA~NRN <r$<HNAus dem SCHEIBENKLEISTER -HPAJ(NZ <r$<HN+dem etwas anderen Floppy- und Harddiskbuch.HPAJ(NZ <r$<HN Written & (C) 1989 by Claus BrodHPAJ(NZNrpr NAxNRNFormat der Platte:A~NRNNrpr NN@| Zylinder | Sek./Spur | Kpfe | Sektoren (ges.) | Sektorgre |NNrpr NN@================================================================NNrp r NN@| | | | | |NNrp r NN@================================================================NNNB <r$<vNBN\/p "A퀤N|B <r$<vNBN\/p "A퀨N|/-/-A*NZ <r$<HA@NZNrp r NNTarget R -NvNBNFN, Gert -NvNBNFN ist 4 -$fN'NrNnicht NrNangeschlossen.N -JgN*0Nrp r N -N:NNrp rN -N:NNrp r#N -N:NNrp r+N -N:NNrp r=N -N:NNrp r NNCSpurwechsel (S), Lesetest (L), Transfer (T), alles (A), weiter (W)?4NNNbC퀄NHmpSN0"_NpJBgp/HmpLN0"_NpJBgp/HmpWN0"_NpJBgp/HmpAN0"_NpJBgp/HmpTN0"_NpJBgp$gd <r$<HA@NZHmpSN0"_NJBfN)/-/-A8jNZHmpTN0"_NJBfN)/-/-A.NZHmpLN0"_NJBfN)/-/-A3NZHmpAN0"_NJBfN*0/-/-A8jNZ/-/-A3NZ/-/-A.NZN`NqN`NqHxN Fertig! | Nochmal? | HPN Nie | Klar r"_ N+@ -SfNN A퀨N A퀤NANB -\/ -l" A /-/-BHx -l/t?AFNZ -\/ -l" A -N&RgN+.+|N.z -N $fN+Z+|N.z -N&NH -\N&NL8N&<x*<NJBfN++|N.z -lN +@ -lN+@ -lN+@ -"- A -R"- @ -Tr @ -Xr @ - r @ -$OHWH>?< @N\L -N&RgN,n+|N.z -N $fN,+|N.zpN0HPHmlpr "_N"_NN+@ -N&<x*< NpJBgp/ -N&<x*<NpJBgp/ -N&<x*<NpJBgp/ -N&<x*<NpJBgp/ -N&<x*< NpJBgp/ -N&<x*<NpJBgp/ -N&<x*<NpJBgp$fN.Hmlpr"_NN+@Hmlpr"_NN+@Hmlpr"_NN+@ -NH -NL8NH -NL8NN\+@ -NH -NL8NN\/p"NPC퀊NNN A퀨N A퀤NAN:A P0 <r$<ANAN\HA@NZNR`NqNqNrpr NAxNRN ESC = Abbruch4A~NRN AxNRN HELP = HilfeA~NRNrpr NNTRANSFERTEST luft... N -NH -NL8NA NpA N\&<x*<NJBfN/A ~0 <r$<HA30NZCA 0 -NA NDNANDNJBfN0FNrpr NNZu wenig Speicher frei!4NN1b -NA NDNHA30NZA 0tHAE6NZp2NN ANA 0AN\AN/-/-BA NX/ANX/t?AFNZNR`NqNqtHAE6NZAF"NZN A$NAN\A$NDNHAN\HA N\HA1jNZAN\HA3ZNZNNLA6N@LA0N@LA*N@AN:A*N\&<x*<NANpNrpr NNrN###.##NFAN\N*NVNrN Sekunden fr A6N\A0NDNH -NL8NvNBNFN KB4NA6N\A0NDNH -NL8NHAN\v NBL8NA?< @N\LNNAN -"- A -R"- @ -Tr @ -+@ -$OHWH>?< @N\L -N JfNN4AN AN AN AN A퀨N A퀤N -P"- A -R/ -N&<x*<N2H -NL8NN\" A -T/ <" A0 -X"- @ -Zr @ -T"- @ -\/ -r" A -r"- @ - r @ -$OHWH>?< @N\L4-NHJBfNHR -\/ -l" A -V"- A -R"- @ -Tr @ -Xr @ - r @ -$OHWH>?< @N\LAlN+@ -N&$fNHR+|NNAfN:A퀄NAN <r$< HA30NZAN\zNJBfNI^)| ~ NC퀄NBHmN***"_NJBfNIDN&hHPA퀄"_NN0AfNp -NANDNN\/AfNX" A <Ѝ/p _ѐNC퀄N`|ANX+@ -+@NN <CNB NC퀄NBHmp*N0"_NJBfNI/-A퀄CNxRNC퀄N` -AN <r$<ANANX/NErrHPAN\N<"_NCNxNR`NqNqNN"_A퀄NLAZN@?<NNT+@ -JWHNH&<x*<N&<x*<NN\+@Nr -NHA퀄NVNL8NvNBN\/AZNX"NA퀄NRNNNKein FehlerKein IndeximpulsSuche nochSchreibfehlerLaufwerk nicht bereitErrSpur 0 nicht gefundenErrErrErrErrErrErrErrErrErrCRC-Fehler im AdrefeldNicht korrigierbarer DatenfehlerID-Adremarke verschollenErrSektor nicht gefundenSeek-FehlerErrErrData Check In No Retry ModeECC-Fehler bei VerifyInterleave-FehlerErrPlattenformat defektErrErrErrBefehl nicht erlaubtBlockadresse nicht erlaubtErrVolume OverflowParameterfehlerUngltige GertenummerErrErrPlatte gewechseltFehlerzhler bergelaufen**PLATTENTEST Das Plattenprfprogramm aus dem SCHEIBENKLEISTER -dem etwas anderen Floppy- und Harddiskbuchvon Claus Brod und Anton StepperWritten & (C) 1989 by Claus BrodDas Programm ermittelt das Format von angeschlossenen Platten.AHDI mu nicht installiert sein. PLATTENTEST kitzelt auch ausder SH204 vernnftige Fehlermeldungen heraus (und das ist nichtselbstverstndlich). PLATTENTEST macht sich zuerst ein Bild berdie Zustnde am DMA-Bus. Man kann auswhlen, welcher derangeschlossenen (ATARI-)Platten man prfen will.Beim Prfen werden alle Sektoren eingelesen; nach jedem Lesen bemhtsich das Programm um eine ordnungsgeme Statusmeldung von derPlatte. Eventuelle Fehler werden im Klartext angezeigt. Nach der'Blockadresse' wird 'gltig' oder 'nicht gltig' ausgegeben.Leider kann man sich auf diese Angabe - wie auf so vieles bei derSH204 und SH205 - wenig verlassen. Ist die Blockadresse gltig,heit das jedenfalls, da die Platte mit den vier Statusbytesauch die Nummer des fehlerhaften Sektors zurckschickt.Bei ungltiger Blockadresse bekommt man trotzdem oft noch einevernnftige Blocknummer. Darum wird sie immer mit angezeigt.Die Blocknummer ist nicht zu verwechseln mit der aktuellenSektornummer, die das Programm beim Prfen anzeigt!Mittlerweile ist ein Programmteil hinzugekommen, der dieSpurwechselzeiten der angeschlossenen Platten mit. Die verwendetenAlgorithmen lehnen sich der Einheitlichkeit wegen an die Taktikenan, die Michael Wilde in der c't 11/88 (fr PCs) vorgestellt hat.Die Ergebnisse sind bitte nicht als Absolutwerte zu verstehen,sondern nur als Anhaltspunkt fr den Plattenvergleich. Damiteinigermaen vernnftige Werte herauskommen, sollte man diesesProgramm compilieren, um den Sprach-Overhead zu minimieren.Der Spurwechseltest luft so nicht mit der SH204.Fr die ganz Neugierigen steht der Transfertest bereit; er gibtAuskunft ber die bertragungsraten der angeschlossenen (ATARI-)Platten. Beim Lesetest wird ebenfalls eine Transferrate angegeben,die aber nicht die optimale ist.PS: Bei der SH205 gibt es berdurchschnittlich oft Netzteil-probleme. Manchmal bringt es schon was, Rechner und Plattean getrennte Steckdosen anzuschlieen.PS/2: Bei Platten, die nicht mit Adaptec-Controllern versehensind, knnte PLATTENTEST bocken. Adaptec-Controller habenSH204, SH205 sowie die neuen 30- und 60MB-Platten von ATARI.**60420000000000000000000048E7FFFE428061003E045FAFFF0248045FAFFC224BC000050F843E4244424341FAFFA64280223AFF9CB2BC0000167003C01010C07C001FB03C000367000088B03C000F670000EAB03C00046700010CB03C0008670001F0B03C000A67000144B03C001567000132B03C001A670000D6B03C0011670000C4B03C001067000106B03C001367000108B03C0014670001AEB03C001C670000B8B03C001D67000186323C008A6100026033FC008AFF86066100030E4278043E203AFF3E610003264CDF7FFF4E753C3C33A3C161002C633C5FF8604203AFEE461000280323C008A4240610020A6B001C423FCAFF86046100022A6B0001B233FC008AFF86064E713039FF860480000016614343C8251CAFFFE51CEFFC033FC8A00FF8606610029A60843C3C00013A3C000160943C3C13A3C1608A3C3C00013A3C000160803C3C13A3C26000FF76323C18A61001926B0014C102854840303C018A23C000FF86040839500FFFA0166F66000012E203AFE383A3C00016022203AFE2E3A3C26018203AFE243A3C0001600E424010280004610002CE203AFE0C610001AC33FC0088FF86064280103AFE064840303C008A23C000FF860461001626B00DC323C18A6100E86B00D061001D033C5FF86044E7133FC18A00FF86064E7123FC000010A00FF86044A446606610011C600A8390005FFFA0166F633FC18A00FF86064E716000008E3A3C0001203AFD9422400C11606600FF7C50C46000FF763A3C00022C3AFD7C600E7000102800046100022A2C3AFD6833FC0088FF86064280103AFD664840303C008A23C000FF86046100C26B3C20066100E6323C8A61446B2E610011233C5FF86044E7133FC8A00FF86064E7123FC0000A00FF860461008033FC8A00FF86064E716100010E6000FDFE4840300123C000FF8604606E48E7A0004280424243FA002232BC00044A43670432BC000852421030200061D46B04B45166F24CDF54E75424033FC0088FF8606101061B86B0261C04E7561EA6B18102854A436704102894840300123C0FF860461024E7548E7C0204280223C320600848E7C02042807214D2B84BA0839500FFFA01670EB2B804BA66F045FAFC8070FF24804A804CDF04034E7513C0FF860DE08013C0FF860BE08013C0FF86094E754240103900FF8609E180103900FF860BE180103900FF860D41FAFC4420804E7533FC9800FF86064E7133FC0198FF86064E7133FC9800FF86064E7561EA33FC19800FF86064E75303900FF86044840303900FF860645FAFBFCC0BCFF0007248033FC8000FF860660922F003F3C204E415C8F4E751010C07C1FB03C3672EB03C00086734B03C18673EB03C001B674AB03C116744B03C00196746B03C1A674CB03C001267466000FC783C3C3A3C16000FC9A700010280004613A2C3AFB7A6000FE10428010280007E14810288363C160E4363C00016000FC423A3C00012C3AFB546000FDEA3A3C00012C3AFB4C6000FDDE227AFB442A11CAC08AFC02002C0548464A46670252454E75***C"BL NPDj:.H6&:4\ Ft2&:2 (rxVvRtr@0rJr`\rN>XBj@6`5Q` Efv*oMD m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HN Hx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALN Hz2?< NA\pdAxr0XQ)K\NN$<\\\\\\JrBjNuHz?<&NN\NCAp$L Qp N9lrBlJpNNpMN9@pdAr 0Q0tr N9lNupealp`NuaNJHz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu pa4|a@:>< |a6RGk0Gg`a(0GVfA1G<ap??<?<NM\Nu??< NMXNu&8*:EENuHn 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NtNu&8*JEgJBgJjBEB:HC҅H@:|ۆ҄ۆ<HC>H@ЃdHA@B@H@хk HAҁHAрSB BbNuNpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|2  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NJFkSFk&aQN`Ha"FFaQL8N6.2JgtBn2Nupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dNAXJ@jNNu?Hl?<6NAP0,NuvN)@p `H@)@prtNAHplrtNB 2pNpNpapaprapalpalpalpaTpaTpaTBp'a?<NNT@B){L9|0<rtNpapap9@p`pvNv`v`vj`v `v`v`v`?(* 9AJA)H@@[000][ˈNv Evz`* [g" ]g |g QSz` zQSpQ][ɈNv Dvx`* [g" ]g |g QSx` xQSpQ]Bp4NHNu2(g"P@g2RADAH""l`r2oZAe 1@#)I`Nuk1@Nup NN"l`dpNAtrdJhk\QpaNH ld$l`"Hg0 k&@ S`g k#&@0+S@H3 Q&f)I`LNu?<?<NAXJgJgNPAH@B pN`A NuApN`NX$N$BS@kH2QNupC ұd"X0Pg"RA$D#Nu"X0NuNvJ@gpNu _0HpN` _0HpN`p"_0HqNp"_0HqNE ұeHHQ0)N`$_$ZR@H`2QNu$Y0gHR@@"D%$X0P2g# R@%NupE $ $X0dP.gRG,D%pr Y2dP.gRG,D!p4Ae4v`VfANuN8VHNuN8SHNuN8RHNu Ihd*N$E$RR@H`2QˈNv ENu(* 0(iN$E 4R`Q$D 4R`QˈNv DNv ENua NuNv IHPg"B  g &gNJBjt BNut`Rptr ae OgT Xgj HgSRB ae Fb$0k  c_  c b退`tSJBkN@RB0 b b瀀`RB0 fрd`2p <0N`QNupC 0(gFd"P$I` *N$E$R(S@jv A(Wf( ae zb Q DNupA` p9`p:`p;?Nv>J@fCAHPBHQ?NA\ _JjNNu?r`??, Nv$F Z268SDĒDcCc2Ac0`QNuPj0,lf$J,nk l*fp?Np N9|nNA0,l2J,jk 0"fZRAR@ 0"g 0 f` 0 g 0,f9@lTll`BllA"H"g"A4`Q"AA 0! NuS@R@ 0 g 0,f9@lRll`R@ 0 fQj`<,*?Hj\F FfN`H FfN`RGFc8>`4A g6 g0 g` gTlfelhgFf2pRGRFa`a,` `?~ap ap a 0NuCpE`bf`FgRGJGgRSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0Nu?<?<NMXNur9A(HNLNu0,^2,`NzEfpaRppaNAEg0PaľEfa4RE`p a2a*Efp a(NldeS@f lbfSl`9Ab9FdNupapqr`p`C l ", Ⲭ dfѬ SA 0! Nup"N"p`tdbDA0Hg<<R@f|0HN*JFk*HQ/??<?NAXfX ENuJkpNp`p`\F( &I.` ??<NMXJ[j E&DNup`pNu)H9@Jp4NP'J&f H LNu P&NuQ'` J,'fJ,&gHA#ȇeC! B,&LNu-W)K20, 8k8@ gJl&f"Nu , 8g"P 8 @/, 8N|  8fQ 8J,'gNupB <``L@ H)l26)z @W , Jf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C]fApNNNHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Fehler # ][Abbruch]\f.B &lX)K\)ld` lp ,BQjNup(NX _b@gGHpp 0f NuGNp| @"l`Yd&-KNN"l`YepN&#k"C-KN"Cփk փk2##`փk"`2`& $Y8gHRDD*D%H8#$c2g# HRDD%H`p"l`Qd&&| NuN"l`QepZNpr`&AdRd QJBgRBBABJk"l` d&6&|0!NuN"l` epZNC ҳfHP0(N$W$RR@H`2Q"H _$l` dd" $X&0BP6Y&|Hg R@@%E ҳeHQ0)N`$_$RR@H`2QNu$Y 0P1@Hg R@@%NuN$l` epZN)H,Bl0NuE+000 l,Nv0l0oNNuaNHP l,"X42,0Rl0Bd1 _g !g &g, \g2N`Rl01` _NvJ@fp NN _N NpR@RABd 1\fRA9A0 _/Nv"@cԒ@H/N Np?N _Np%NLNH l,"X42,0Rl0Bd1 _g,vxz| +g. -g( *g $g" #g N`Rl01`` `RCRABd1 _fRA` #g $g *g ,g ^gB +gZ -gT .fRxRDRABdH1 #g ^g +g. -g( _f&RA`RERABd1 ^g +g -f2ALH@N.L8"aC " Lx2DE A,b -fEt1BQt1$0000QE[JEft Q0JgE\J"f0J"ff JFj-Sg$E[JEgRE\JEg vJ*g RCJ*f~ g~*Jf`9I0`JEf@RANE[JEg*ÒEA, gSAR`Ô l,HQ?HjSl0 l,"X0Rl0gL _g0 ,g .g +g( -g $_HRN`$W "0d`Rl0`p Jojp-`Sl0NuA3XN|N <r$<HN#Standard-Benchmarks der ST-ComputerHPA$N| <r$<HNfr Massenspeicher - Teil IIImHPA$N| <r$<HNWritten 1988 by Claus BrodHPA$N|HxN. Welches Schweinderl | htten's denn gern? | |HPNExit|Sektor|Filer"_ N+@< -pJBgp$gDA$NN@H <r$<L8NzN+@@NN21. 50 AUFEINANDERFOLGENDE SEKTOREN 100MAL EINLESENN/-@A3 N|Nz?-B?<NMXANpJBgp$gLA$NN@H <r$<L8NzN+@@HxNB Ziellaufwerk | vorher initialisieren| (wird dabei| gelscht!!!)? HPNNEIN!|OKr"_ N+@< -t@ކ*> & P`$Q` Efv*oMt m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HNHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALN Hz2?< NA\pdAxr0XQ)K\NN$``````N ,`NuJrBjNuHz?<&NN\NCAp$L Qp Nt9lrBlJpNNtpMNt9@pdAr 0Q0tr N9lNupealp`NuaNJHz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu pa4|a@:>< |a6RGk0Gg`a(0GVfA1G<ap??<?<NM\Nu??< NMXNu&8*:EENuHn\ 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NtNu&8*JEgJBgJjBEB:HC҅H@:|ۆ҄ۆ<HC>H@ЃdHA@B@H@хk HAҁHAрSB BbNuNpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NJFkSFk&aQN`Ha"FFaQL8N6.JgtBnNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dJf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C]fApNNN^HP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Fehler # ][Abbruch]\f.B &lX)K\)ld` lp ,BQjNup(NX"l`Yd&-KNN"l`YepN&#k"C-KN"Cփk փk2##`փk"`2`& $Y8gHRDD*D%H8#$c2g# HRDD%H`p"l`Qd&&| NuN"l`QepZNpr`&AdRd QJBgRBBABJk"l` d&6&|0!NuN"l` epZN)H,Bl0NuE+000 l,Nv0l0oN NuaNHP l,"X42,0Rl0Bd1 _g !g &g, \g2N`Rl01` _NvJ@fp NN _N N pR@RABd 1\fRA9A0 _/Nv"@cԒ@H/N Np?N _Np%NLNH l,"X42,0Rl0Bd1 _g,vxz| +g. -g( *g $g" #g N`Rl01`` `RCRABd1 _fRA` #g $g *g ,g ^gB +gZ -gT .fRxRDRABdH1 #g ^g +g. -g( _f&RA`RERABd1 ^g +g -f2ALH@N L8"aC " Lx2DE A,b -fEt1BQt1$0000QE[JEft Q0JgE\J"f0J"ff JFj-Sg$E[JEgRE\JEg vJ*g RCJ*f~ g~*Jf`9I0`JEf@RANE[JEg*ÒEA, gSAR`Ô l,HQ?HjSl0 l,"X0Rl0gL _g0 ,g .g +g( -g $_HRN`$W "0d`Rl0`p Jojp-`Sl0Nu <u0NT+|Ȁ$+|(NR TRANSFERTEST via | BIOS-Routinen| 1989 Claus Brod| Laufwerk?CN -(RnN0BHmN|HP -(ANP"_NHPN|"_Nr"_ N+@,NRBHmN|Exit|r"_ N+@, -,SgNvS( -(RmNvR( -,WgNR( -( nN+|( -,Uf0 -(RWHgN -(ANPHPN:\*.*"_NCNNzBg -/?<NNAPNz?-*?<NMX+@0 -0$fN -0N+@4 <r$<HA# NZ -$NH -4NL8N<&<x*<NZANNJBfNHxN Zuwenig Speicher frei! HPNhar"_ N+@,N -$NH -4NL8N<&<x*<NZHA# NZNNNN"1. TEST MIT GERADEN PUFFERADRESSENNB8+| N+@H?-*?<?-&AN/Bg?<NM+@0 -0$fN -N+@H?-*?<?-&AN&<x*<NZN\/Bg?<NM+@0 -0$fN - nj>   @P`lT` Efv*oM m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HNNHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALNHz2?< NA\pdAxr0XQ)K\NN::FLLLN ,`NuJrBjNuHz?<&NN\NCAp$L Qp N9lrBlJpNNpMN9@pdAr 0Q0tr N(9lNupealp`NuaNJHz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu pa4|a@:>< |a6RGk0Gg`a(0GVfA1G<ap??<?<NM\Nu??< NMXNu&8*:EENuHnZ 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NtNu&8*JEgJBgJjBEB:HC҅H@:|ۆ҄ۆ<HC>H@ЃdHA@B@H@хk HAҁHAрSB BbNuN`pNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N,?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|t  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</N>JFkSFk&aQN>`Ha"FFaQL8N6.tJgtBntNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dNAXJ@jNNuNNJ@g,A,BBgHQ?<=NAP FJ@k??<>NAXtNutNu ::/rI IN<,(k$/<??<?N`NA Jj ?a0NNHrO INLA NNaHQ` @gS@@CNu   aH@@`"aH@@`a0) 4a3B HA2;i`0^ M / hawAnFNuAXr%eee%NuAMNuA.A&HP 0 0 &0&?< NN\Nu N` A$ HJo d*b` QjNuQjNubNN/N.,*Q(,l؅kb/,h?<INA\/?<HNA\Jg< l`"ld۬d۬`)Dl$I& `&bۛp0R@@b&C CX`~/,l?<HNA\p=N\$_*(<HREHRa" EHRa DHRa??<KNNANNuNN @ep~QBNu&(*NNN~J@jD@vqapvN)@p `H@)@prtN(AHplrtN(B 2pNpN papaprapalpalpalpaTpaTpaTBp'a?<NNT@B){L9|0<rtN(papap9@p`pvNv`v`vj`v `v`v`v`?Aa*` Al 2l 4)lVH)lRprtN(Al 2l 4HVNuAl 2l 4L VA0000000000prtN(9Cp rtN(Av` Av `Avl 2l 4)lVHNAl 2l 4HPrtpgN(aBp0,l 2Nua40,HNua*p0,l 4Nuaprt0,l 22,l 44,NuN9||BlBlrҌpsNBNu?<NNT$g4<rЀ[NuAl 2l 4HpirtN(p0,Nu0<}N,& ?<NNC`&?<NNT"@ C <}N`N(* 9AJA)H@@[000][ˈNN Evz`* [g" ]g |g QSz` zQSpQ][ɈNN Dvx`* [g" ]g |g QSx` xQSpQ]Bp4NHNuNNAH2 @epr0QpptN(vpNr|<NN @xepw2A$JBjDFHB t`0QBl9F)lVTAtp 9| N(2(g"P@g2RADAH""l`r2oZAe 1@#)I`Nuk1@Nup NN"l`dpNAtrdJhk\QpaNH ld$l`"Hg0 k&@ S`g k#&@0+S@H3 Q&f)I`LNu?<?<NAXJgJgNAH@B pN8A NuApN8A0pN8N$N$BS@kH2QNupC ұd"X0Pg"RA$D#Nu"X0Nu _0HpN8 _0HpN8p"_0HqNp"_0HqNE ұeHHQ0)N,$_$ZR@H`2QNu$Y0gHR@@"D%$X0P2g# R@%NupE $ $X0dP.gRG,D%pr Y2dP.gRG,D!p4Ae4v`VfANuNWHNu(* 0(iN$E 4R`Q$D 4R`QˈNN DNN ENua NuNN IHPg"B  g &gN*JBjt BNut`Rptr ae OgT Xgj HgSRB ae Fb$0k  c_  c b退`tSJBkNRB0 b b瀀`RB0 fрd`H&NրNjNud d3 d# d# # d# # # # d# # # # # # # # dB` # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # QNudd2d"d""d""""d""""""""dB` """"""""""""""""""""""""""""""""QNu??<NMXNu0,p2,rR@RANuS@SA9@p9ArNu9@pN(4, 6fprta0,2,NuA4, 6f9@9Ap rt`C l ", Ⲭ dfѬ SA 0! Nup"NNNJfNup#`p`pNu)H9@Jp4NP'J&f H LNu P&NuQ'` J,'fJ,&gHA#ȇeC! B,&LNu-W)K20, 8k8@ gJl&f"Nu , 8g"P 8 @/, 8Nh  8fQ 8J,'gNupB <``L@ H)l26)z @W , Jf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C]fApNNNHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Fehler # ][Abbruch]\f.B &lX)K\)ld` lp ,BQjNup(NXYp-KNu"l`Yd&-KNN"l`YepNA퀺 0 <r$<A퀺NN4A킚NnHm A킚NVN("_NfC NNV`NqNqNx ?????5??.SCRNNLA킔NnA킔NZ&<x*<NJBfN bNx ?????5??.SCRHP?<NNT"_NN$Nx&C:\ABLAGE\GFABASIC\LQ.5OO\?????5??.SCRNNLA큼NnA큼NZ&<x*<NJBfN!Nx&C:\ABLAGE\GFABASIC\LQ.5OO\?????5??.SCRHP?<NNT"_NN$NxC:\LQ.5OO\?????5??.SCRNNLANnANZ&<x*<NJBfN!NxC:\LQ.5OO\?????5??.SCRHP?<NNT"_NN$NC:\?????5??.SCR5NNLANnANZ&<x*<NJBfN!NC:\?????5??.SCR4HP?<NNT"_NN$NLQ.5OO\?????5??.SCRNNLANnANZ&<x*<NJBfN"zNLQ.5OO\?????5??.SCR4HP?<NNT"_NN$Nx ?????5??.SCRNNLANnANZ&<x*<NJBfN"Nx ?????5??.SCRHP?<NNT"_NN$NxA:\LQ.5OO\?????5??.SCRNNLANnANZ&<x*<NJBfN#jNxA:\LQ.5OO\?????5??.SCRHP?<NNT"_NN$NA:\?????5??.SCR5NNLANnANZ&<x*<NJBfN#NA:\?????5??.SCR4HP?<NNT"_NN$N; SORRY| ***** | Das Menbild ist|nirgends zu finden4C킸NNAbbruchRC킾NpNZA NpNprN <"<NpN|HxHmA킾r"_ N+@" -"SgN$NdANBmBmBm$Bm*Bm0A8 0BmTBmHBmlBmrBmxBm~BmBmBmBmBm <r$<&<3338<4*<NANnANZ&<x*<NN~&<x*<NANnA 0A 0A p0A @0Bm Bm&Bm8A: 0C:A킎 0Bm\BmzA| 40ANpNpNNpNRpNVpNpZ"<NANZN4r#NpZ"<NANZN4rNpZ"<+NANZN4rNANZ&<x*<NJBfN&pZ"< N <r$<N4rNA"NZ&<x*<NJBfN&pZ"<NNx1/rNpNNpNRpNVp Npq"<,NA4NZN4rNAXNZ&<x*<NJBfN'T <"<(NA:NZN4rNN'v <"<,NA:NZN4rNpNNpNRpNVpNpNpNZpN^pNbpJr:NN&<x*<NpJBgp/ANZzNpJBgp/pJr:NNzNpJBgp/ANZ&<x*<NpJBgp$fN(HpHr8Np]"<Npcr:NN&<x*<NpJBgp/ANZzNpJBgp/pcr:NNzNpJBgp/ANZ&<x*<NpJBgp$fN(par8Npv"<Np|r:NN&<x*<NpJBgp/A NZzNpJBgp/p|r:NNzNpJBgp/A NZ&<x*<NpJBgp$fN)pzr8N <"<N <r:NN&<x*<NpJBgp/A&NZzNpJBgp/ <r:NNzNpJBgp/A&NZ&<x*<NpJBgp$fN*B <r8N <"<N <r:NN&<x*<NpJBgp/A,NZzNpJBgp/ <r:NNzNpJBgp/A,NZ&<x*<NpJBgp$fN* <r8N <"<NpJ"<NN&<x*<NpJBgp/A8NZzNpJBgp/pJ"<NNzNpJBgp/A8NZ&<x*<NpJBgp$fN+pH"<Np]"<Npc"<NN&<x*<NpJBgp/APNZzNpJBgp/pc"<NNzNpJBgp/APNZ&<x*<NpJBgp$fN,Ppa"<Npv"<Np|"<NN&<x*<NpJBgp/ADNZzNpJBgp/p|"<NNzNpJBgp/ADNZ&<x*<NpJBgp$fN-pz"<N <"<N <"<NN&<x*<NpJBgp/AhNZzNpJBgp/ <"<NNzNpJBgp/AhNZ&<x*<NpJBgp$fN- <"<N <"<N <"<NN&<x*<NpJBgp/AnNZzNpJBgp/ <"<NNzNpJBgp/AnNZ&<x*<NpJBgp$fN.~ <"<N <"<N <"<NN&<x*<NpJBgp/AtNZzNpJBgp/ <"<NNzNpJBgp/AtNZ&<x*<NpJBgp$fN/< <"<N <"<N <"<NN&<x*<NpJBgp/AzNZzNpJBgp/ <"<NNzNpJBgp/AzNZ&<x*<NpJBgp$fN/ <"<N <"<N <"<NN&<x*<NpJBgp/A큀NZzNpJBgp/ <"<NNzNpJBgp/A큀NZ&<x*<NpJBgp$fN0 <"<N < "<N <"<NN&<x*<NpJBgp/A큆NZzNpJBgp/ <"<NNzNpJBgp/A큆NZ&<x*<NpJBgp$fN1v <"<N <%"<N <+"<NN&<x*<NpJBgp/A큌NZzNpJBgp/ <+"<NNzNpJBgp/A큌NZ&<x*<NpJBgp$fN24 <)"<N <>"<N <D"<NN&<x*<NpJBgp/A큒NZzNpJBgp/ <D"<NNzNpJBgp/A큒NZ&<x*<NpJBgp$fN2 <B"<N <W"<N <]"<NN&<x*<NpJBgp/A큘NZzNpJBgp/ <]"<NNzNpJBgp/A큘NZ&<x*<NpJBgp$fN3 <["<N <p"<NAvNZ&<x*<NJBfNNZzNpJBgp/ <D"<NNzNpJBgp/A\NZ&<x*<NpJBgp$fN= <B"<N <W"<FN <D"<NSgN=NNDJWHgN=`NCNN\H ANN ATN AZNNDN&<x*<NpJBgp/NHPpaN"_N\pJBgp$fN>nN`ANNZ&<x*<NpJBgp/ANNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/AZNZ&<x*<NpJBgp$fN@~pHr8Np]"<NpJr:NSgN?|A 0BmBm$Bm*Bm0N?BmANZzNpJBgp/A NZzNpJBgp/A큪NZzNpJBgp$fN?A 0ANZ&<x*<NpJBgp/A8NZzNpJBgp/APNZzNpJBgp/ADNZzNpJBgp$fN@xA8 0Av 0N'ANNZ&<x*<NpJBgp/ANNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/AZNZ&<x*<NpJBgp$fNBpar8Npv"<Npcr:NSgNABmA 0Bm$Bm0NABmANZzNpJBgp/ANZzNpJBgp/A NZzNpJBgp/A,NZzNpJBgp$fNBA 0ANZ&<x*<NpJBgp/A8NZzNpJBgp/APNZzNpJBgp/ADNZzNpJBgp/A&NZzNpJBgp$fNBA8 0Av 0N'ANNZ&<x*<NpJBgp/ANNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/AZNZ&<x*<NpJBgp$fNDpzr8N <"<Np|r:NSgNCBmBmA 0Bm0NCBm$ANZzNpJBgp/ANZzNpJBgp/A NZzNpJBgp/A,NZzNpJBgp$fNDLA 0A NZ&<x*<NpJBgp/A8NZzNpJBgp/APNZzNpJBgp/ADNZzNpJBgp/A&NZzNpJBgp$fNDA8 0N'ANNZ&<x*<NpJBgp/ANNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/AZNZ&<x*<NpJBgp$fNG <r8N <"<N <r:NSgNFBmA& 0Av 0Bm"<N <+"<NSgN_ A큌 0N_BmN'ANNZ&<x*<NpJBgp/ANNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/AZNZ&<x*<NpJBgp$fN`0 <B"<N <W"<N <D"<NSgN`&A큒 0N`*BmN'ANNZ&<x*<NpJBgp/ANNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/AZNZ&<x*<NpJBgp$fNaL <["<N <p"<N <]"<NSgNaBA큘 0NaFBmN'ANNZ&<x*<NpJBgp/ANNZ&<ڀx*<NpJBgp/ATNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/AZNZ&<x*<NpJBgp$fNhA 0ANZ&<(8<*<NJBfNhpH"<Np]"<NpN|pZ"<NANZN4r#NpZ"<NANZN4rNpZ"<+NANZN4rNANZ&<x*<NJBfNcpZ"< N <r$<N4rNBm A"NZ&<x*<NJBfNcJpZ"<NNx1/rNBm&pH"<Np]"<N <r$<&<3338<4*<NANBNANnANZ&<x*<NN~&<x*<NANnANZ&<x*<NJBfNdA 0(0 <r$<ANBNANnANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp$fNfA 0ANZ&<x*<NANnNfCA 0C A 0ANZ&<x*<NJBfNh pZ"< N <r$<N4rNA 0 <r$<ANBNANnANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp/ANZ&<x*<NpJBgp$fNh A 0 <r$<ANBN&<x*<NANnANZ&<x*<NJBfNhVA" 0pZ"<NNx1/rNpZ"<NANZN4r#NpZ"<NANZN4rNpZ"<+NANZN4rNANZ&<x*<NJBfNhpN|BmNDJWHgNh`,ANNZ&<x*<NpJBgp/ANNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/ATNZ&<x*<NpJBgp/AZNZ&<x*<NpJBgp$fNpA( 0ANZ& Zeilenvorschubr|N <r$NN'z'4r#N <rpNNx> Zeilenvorschubr|N <r$NN ' b ' >4rTN <r~NN Blattvorschub4rnN <r$NN ' c ' >4rTN <r~NN All Clear4rnN <r$NN 'Leerschlag'>4rTN <r~NN TESTzeile4rnN <r(NNzurck zum MENU: linke MTt"<NpN <r N <"<NNvprNN* * * * * * * * * * * * *4NNvprNN* *4NNvprNN* *4NNvprNN* *4NNvprNN* *4NNvprNN* *4NNvprNN* *4NNvprNN* *4NNvpr NN SETLQ5OO.prgN <2r@NNin GFA-BASIC2.02 V1.04"<N <rLNN ***********4rxN <rLNN ***********4rxN <rLNN * *4rxN <rLNN * *4rxNNvpr NNBasel, im August 884NNvprNN* * * * * * * * * * * * *4NNvpr$NNBER DIESES PROGRAMMNNvp r$NNNvpr$NN********************NNvp r$NN(Mit Hilfe dieses Programmes kann man dieNNvp r$NN(verschiedenen Schriftarten oder Kombina-NNvp r$NN)tionen davon aus dem EPSON LQ 5OO heraus-4NNvp r$NN)bekommen. Ich verwende es hauptschlich,4NNvp r$NN(um 'LIESMICH'-, 'INFO'- oder andere Da-NNvpr$NN(teien auszudrucken (zB. vom Tempus aus,NNvpr$NN(wenn vorher mit diesem Prg initialisiertNNvpr$NN(wurde). Das Prg sollte mit anderen 'LQ'-NNvpr$NN)Typen kompatibel sein. Fr andere Drucker4NNvpr$NN)kann bei mir das GFA BASIC 2.02- Listing 4NNvpr$NN(angefordert werden, sodass eine eigeneNNvpr$NN)Druckeranpassung vorgenommen werden kann.4N <h"<NN+Beat GENGE,Giornicostrasse 3,CH-4053 BASEL -"<TNA킠 0 <r$<A킠NN4ANNnN4ATNnANNV/ATNV"NrpN|NDN&<x*<NpJBgp/NHPpaN"_N\pJBgp$fNtNzNNDSgNA킦 0A킦NZ&<x*<Ng NZNNV`0Nq)|0 pNNDJWHgN`NDN&<x*<NpJBgp/NHPpaN"_N\pJBgp$fN2N`NDN&<x*<NpJBgp/A킦NZ&<x*<NpJBgp$VHgN`XBmNzN%HmpcN"_N\JBfN <"<N <"<FNpN|N$HmpbN"_N\JBfN^pNRgN^ <"<N <"<FNp rNp2N| <"<N <"<FNpN|Hmp N"_N\JBfNpNRgN <"<N < "<FNp rNpN| <"<N < "<FNpN|pNRgNHmpzN"_N\JBfNjpNRgNj <"<N < "<FNp rNpN| <"<N < "<FNpN|Hmp N"_N\JBfN pNRgN NrN#Ich bin eine TESTzeile (ss= ae=)4N <"<N <%"<FNpN| <"<N <%"<FNHmptN"_N\JBfNXNZNBgNx TEMPUS??.PRGHPA HPA N4N%HmpsN"_N\JBfNNZNBgNx STAD_1_2.PRGHPA HPA N4N%HmppN"_N\JBfNNZNBgN SPOOL.PRGHPA HPA N4N%`pNA퀢NA퀢NZzNJBfN <r$<N~&<x*<NNZN <r$<N~&<x*<NA퀖NnBpANprNpqrNprN <]"<NSgNpprNpqrNprN <D"<NN&<x*<NpJBgp/ <]"<NN&<x*<NpJBgp$fNprNpqrNprNprNpArNANVrNprNplrNA4NVrNprNpQrNA:NVrNprNp N|Bm`N'N\ <r$<N~&<x*<NNZN <r$<N~&<x*<NA퀖NnBpAN04lz,h6J42z,h6J4,ZZ0J(&,4*LV,ndn220*|2J ("*BFFF&&***222**28 ?~p0pL`` `  cݗ}Wg?fjjeUUUUUUUUUUUUUUYUW՝}UV5U_UUUUUUUUUUUUUUUUUUUXUUcUUUUUUUUTUUUUUUUUUUUUUUULf놾jeUUUUUUUUUUUUUUY`UeX8UgYV7%I` rV X8'UaT%UcX5`UUW`UUUUUUUUUUUULfjknj㩬lɠ&p"j&ɪeUUUUUUUUUUUUUUYrVUeRVUIYT7IrT%Iyԕ%R\UYTUeT%IrUUUW%IUUUUUUUUUUUUULfjzjzɩzɲl&ɩ&lK욚&ɲj&ɪeUUUUUUUUUUUUUUaRvarvX\|eY\#ertMUX\U`XeRuVT%UUUUUUUUUUUUULf,:à+;:(Né:,K :N*eUUUUUUUUUUUUUU__}_O__}UYU__UWUUUUUUUUUUUUULfʪeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWU}UUUUUUUUU_UUUUUWUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUULfeUUUUUUUUUUUULfeUUUUUUUUUUUULfeUUUUUUUUUUUULfeUUUUUUUUUUUULf @eUUUUUU<cUUUUUULf?8<8c?<0ÀeUUUUUU> 88<>pÀUUUUUULf<88}8pÀeUUUUUU>=>|=<<|y8p wxχUUUUUULf?>|<<||s{|= ϏeUUUUUUy?>|<Î<|ß?|? ϜpUUUUUULf988?|?ÇqpeUUUUUU8{8{s<8pÇqUUUUUULf;8888pÇqeUUUUUU9188w88qÇqUUUUUULf?;><Ǿ><sc88q=χϼ{peUUUUUU?><><w|>|yϾ=χUUUUUULf;>={>{|>|y=χx>eUUUUUUw|>|8UUUUUULfeUUUUUUUUUUUULfeUUUUUUUUUUUULfeUUUUUUUUUUUULfeUUUUUUUUUUUULfeUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUU_UUUUUUULfj eUUUUUUU\uU }}=xUUUUUULf j AQ@DYDeUUUUUUDEPDUEEAE@@U\~uU yW8GDUUUUUULf ~?jx !A4QDSDeUUUUUUADQDEDU\3uUH }}^xDQxUUUUUULf  3jH eUUUUUUADQDDDAU\0uUH `UUUUUULf 0j 00eUUUUUUADUDEDAU\0@uU <UUUUUULf  0<@j ` eUUUUUUADQEDDDAU\3x@<uU  0`UUUUUULf3 D@`8@QDDjx ;;eUUUUUUDAEPDEEDEEAAU\~? D@GEuU0 $UUUUUULf  ~xx#<j $eUUUUUUU\@uU UUUUUULfj eUUUUUUU\uU UUUUUULfeUUUUUUU_UUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUU_UUUUUUULfeUUUUUUU\uU UUUUUULfj eUUUUUUU\uU UUUUUULf j eUUUUUUnjߏU\uU0 UUUUUULf   jp eUUUUUU  U\uU `>UUUUUULf j |3eUUUUUU  U\uU @`3>UUUUUULfÀ  @j @`a>33eUUUUUU  U\ uU |a633UUUUUULf  xj a3333eUUUUUU U\D@uUp 33UUUUUULf  D@j0 eUUUUUUπ U\ xuU UUUUUULf@j eUUUUUUU\uU UUUUUULfj eUUUUUUU_UUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUU_UUUUUUULfj eUUUUUUU\uU UUUUUULfj eUUUUUU U\uU UUUUUULfnjj0 eUUUUUUU\uUp >UUUUUULfj 03eUUUUUUU\|uU |3ǟUUUUUULf mj @`l>33eUUUUUU  U\}@uU @`g633UUUUUULf  y j |6 3333eUUUUUU U\nxuU 3Ǚx33UUUUUULf  D@jp eUUUUUU U\D@uU0 UUUUUULfǘ  xj eUUUUUUU\@uU UUUUUULfj eUUUUUUU\uU UUUUUULfeUUUUUUU_UUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUU_UUUUUUUUUUUUUUUUUUUUUUUUUUUULfꪪeUUUUUUU\uUUUUUUUUUUUUUUUUUUUUUUUUUUUULfjeUUUUUUU\uUUUUUUUUUUUUUUUUUUUUUUUUUUUULf><c733`jeUUUUUUߟ~ߙU\ ogguUUUUUUUUUUUUUUUUUUUUUUUUUUUULf ٙfa lffmjeUUUUUU ٙfaU\ ٌ ٌ[uUUUUUUUUUUUUUUUUUUUUUUUUUUUULf ٙfa َ ٌjeUUUUUU ߙfa U\>>uUUUUUUUUUUUUUUUUUUUUUUUUUUUULffa 66jeUUUUUUfa U\f3l 3l30fuUUUUUUUUUUUUUUUUUUUUUUUUUUUULf fa f3l 3l33fjeUUUUUU fa U\fnffuUUUUUUUUUUUUUUUUUUUUUUUUUUUULf ߰~cߙ ~~~~~jeUUUUUU 0|=jeUUUUUU~v~U\fg0lٳ0`uUUUUUUUUUUUUUUUUUUUUUUUUUUUULf͘00g0lٳ0`jeUUUUUU͘00U\8`<`uUUUUUUUUUUUUUUUUUUUUUUUUUUUULfa`nj q`<`jeUUUUUUqa`  U\9fg`0`uUUUUUUUUUUUUUUUUUUUUUUUUUUUULfs  fg`0`jeUUUUUU36`  U\fflٳ0`uUUUUUUUUUUUUUUUUUUUUUUUUUUUULffl  fflٳ0`jeUUUUUUg  U\ffϾ|ٳ0`uUUUUUUUUUUUUUUUUUUUUUUUUUUUULfǏǃ ffϼ8ٳ0`jeUUUUUUU\uUUUUUUUUUUUUUUUUUUUUUUUUUUUULfjeUUUUUUU\uUUUUUUUUUUUUUUUUUUUUUUUUUUUULfꪪeUUUUUUU_UUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUU_UUUUUUULfeUUUUUUU\uUUUUUUULfȈjeUUUUUUU\uUUUUUUULf"""""""""""""""""""&jÀeUUUUUU~~~~~~~U\uUÃUUUUUULfȈj၀aeUUUUUU͘00U\uUaaUUUUUULf"͚22"""">""""&9jaeUUUUUU`anj U\9uUa`f`UUUUUULfȉ苌̌ˏ̌Ȏj၀ceUUUUUUp3  U\uU၀UUUUUULf#&c"23"#',#/,&9jaafeUUUUUU af  U\9uUaafUUUUUULfȎ苌̌ˏ̍jceUUUUUU σǏǏǃ U\yuUcUUUUUULf""""""""""""">""""&jeUUUUUUU\uUUUUUUULfȈjeUUUUUUU_UUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUU_UUUUUUULfȈjeUUUUUUU\uUUUUUUULf"""""""""""""""""""&??????jeUUUUUUU\uUUUUUUULfȈjÀeUUUUUUv~f|U\uUUUUUUULf"2"""""""""""&jaeUUUUUU͘0U\uUacgUUUUUULfȉόΌ̏jggeUUUUUUa  U\???uUafffff`UUUUUULf##36&"#..,#/,&pja၆ffff`eUUUUUU336``  U\puUa၆ffff`UUUUUULfȎnɎȈ̌ˋ̎Ȏpjaafff`eUUUUUUg`  U\uUaaffff`UUUUUULf'"#..&jgeUUUUUUU\??????wuUcUUUUUULfȈjeUUUUUUU\uUUUUUUULfeUUUUUUU_UUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUU_UUUUUUULfeUUUUUUU\uUUUUUUULf"""""""""""""""""""&jeUUUUUUU\|x|uUUUUUUULfȈjeUUUUUU<||U\010uUUUUUUULf"~v"~"""""""""""""&010jeUUUUUU͘U\010uUÁcgUUUUUULfȈ̈͘興0p10jぇggeUUUUUUnj U\0810uUafffffff`UUUUUULf##"""#,'.,&010jaffffff`eUUUUUU30  U\0 10uU၇fffff`UUUUUULfȋ;68ˋ̌Ȏ0 10jcfff`eUUUUUUfl`  U\01uUcffff`UUUUUULf'b'"""#,'.-&x01xxxjageUUUUUUǏǃ U\uUacUUUUUULfȈ興jeUUUUUUU\uUUUUUUULf"""""""""""""""""""&jeUUUUUUU_UUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULfeUUUUUUUUUUUUUUUUUUUUUUUUUUUU_UUUUUUULfjeUUUUUUUUUUUUUUUUUUUUUUUUUUUU\uUUUUUUULfjeUUUUUUUUUUUUUUUUUUUUUUUUUUUU\uUUUUUUULfjeUUUUUUUUUUUUUUUUUUUUUUUUU\pquUUUUUUULf pq߹jLJόǙeUUUUUUUUUUUUTUUUUUUUUUUU\pq߹uUϛUUUUUULfpqj   eUUUUUUUUUUUTUUUUUUUUUUU\pquU    UUUUUULfBpqjǃ eUUUUUUUUUUUPAUUUUUUUUUUU\pq߹߸uU    UUUUUULfx pq߸j    eUUUUUUUUUUU@|!UUUUUUUUUUU\pquULJUUUUUULfpqjρLJeUUUUUUUUUUUUUUUUUUUUUU\uUUUUUUULf*jeUUUUUUUUUUUUUUUUUUUUU\uUUUUUUULf *eUUUUUUUUUUU@UUUUUUUUUU_UUUUUUULf9? eUUUUUUUUUUU?UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULf ? eUUUUUUUUUUU ?UUUUUUUUUU_UUUUUUUUUUUUUUUUUUUUUUUUUUUULfꪪeUUUUUUUUUUUUUUUUUUUUU\uUUUUUUUUUUUUUUUUUUUUUUUUUUUULf *jeUUUUUUUUUUUUUUUUUUUU\uUUUUUUUUUUUUUUUUUUUUUUUUUUUULf8jeUUUUUUUUUUU0UUUUUUUUU\uUUUUUUUUUUUUUUUUUUUUUUUUUUUULfd jeUUUUUUUUUUUdUUUUUUUUU\߹uUUUUUUUUUUUUUUUUUUUUUUUUUUUULf ߹jeUUUUUUUUUUU@UUUUUUUU\uUUUUUUUUUUUUUUUUUUUUUUUUUUUULf?jeUUUUUUUUUUU@?UUUUUUUU\uUUUUUUUUUUUUUUUUUUUUUUUUUUUULfb ߹߸jeUUUUUUUUUUUPrUUUUUUU\߸uUUUUUUUUUUUUUUUUUUUUUUUUUUUULf8jeUUUUUUUUUUUP?UUUUUUU\uUUUUUUUUUUUUUUUUUUUUUUUUUUUULf*jeUUUUUUUUUUUP|UUUUUU\uUUUUUUUUUUUUUUUUUUUUUUUUUUUULfjeUUUUUUUUUUUPUUUUUU_UUUUUUUUUUUUUUUUUUUUUUUUUUUULf⪪ꪪeUUUUUUUUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULf?eUUUUUUUUUUUP?UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULf<*eUUUUUUUUUUUPxUUUUU_UUUUUUULf jeUUUUUUUUUUU@UUUUU\uUUUUUUULf ???jeUUUUUUUUUUUUUUUU\2 `12a@uUUUUUUULf~?x 2D @h2@@jeUUUUUUUUUUU??UUUUU\2G9>O)2LuU UUUUUULf 2A!0L)2LjÇeUUUUUUUUUUTUUUUU\2A!F)2OuUUUUUUULf 2A!c(2H!jaafff`eUUUUUUUUUUT<UUUUU\2 1(12H$uUaff`UUUUUULf3~ 2 b)12Oja`eUUUUUUUUUUT#?UUUUU\2A 2 )2L@uUaa`???UUUUUULf' 2g9|)2L`jaaa`eUUUUUUUUUUT'0UUUUU\$ @i@ uUc`UUUUUULfg`<p $ AIa jc`eUUUUUUUUUUTG`x<UUUUU\x?=uUUUUUUULfG jeUUUUUUUUUUTGUUUUU\uUUUUUUULfc eUUUUUUUUUUT#UUUUU_UUUUUUULf8a?x eUUUUUUUUUUTa?UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULf``? eUUUUUUUUUUT``?UUUUU_UUUUUUUULff<ʪeUUUUUUUUUUTf8<UUUUU\uUUpUUUUUULf=@ jeUUUUUUUUUUP@<UUUUU\@3uUUpUUUUUULf 19@0 08fj0~f~<eUUUUUUUUUUDUUUUU\0@00fuU0Up~f~~UUUUUULf<?0 s&0Nj0f`feUUUUUUUUUUDxUUUUU\80 L60LuUUpv`fUUUUUULf~>*0 `L60jv|feUUUUUUUUUUG?x#"8A0#"0. n0H|f0<`00. n02. n 0g0<`Rn nm0<N^NuNVH..*G L N^NuNVH..*G L N^NuNVH..*G L N^NuNVH (n*L L0N^NuNVH*n. L N^NuNVH*n. L N^NuNV?9,NrTB?<N~z\N^NuNVBg?9,N,XB?9(N~z\B?<N~z\N^NuNVH><`RG ./ < /NY X-@Jn0LN^NuNVH.<,`r n0xH|0m< n0xH|9n, < / /NZh  n0xHHЃ0,`$ n0xH|_g n0xH| g `R n0xH|f~ LN^NuNVHJnf/.N X=@BG` n pRG0nm0. n B0>.SG ./ < /NYX м02SG n  ./ < /NY X-@JnLN^NuNVH n/N LX.?<_?< n//N O LN^NuNV?<_?< n//. N O . N^NuNV0.@A.=pHnHnHnHn?<?.N4O?.NT?.?.?.?.BgBg0.2.HA?0.2.HA?N~O0.@A,Bp0. g.?.NT0.@A-Bp0.@A.1N^NuNVH>.BF`0@A.00Gf0` RF Fm0HЈ/NyPBgBg0.QA+>HЈ/?<?.NO HnHnHnHn?<?.N4OHnHnHnHn?<?.N4O?.?.?.?.?.?.?.?.N}O?.?.?.?.?<?.NO 0.@A-HЈ/0.@A-HЈ/0.@A-HЈ/0.@A-HЈ/?<?.N4O0.N^NuNV?<?<NX=@ @g&0.@A-00g0.@A.=p0.@A-HЈ/0.@A-HЈ/0.@A-HЈ/0.@A-HЈ/0.@A-?00.@A-?00.@A-?00.@A-?0?< BgNNO`d0.@A-HЈ/0.@A-HЈ/0.@A-HЈ/0.@A-HЈ/?<@0<.?09(29(H A?09(29(HA??< BgNNO?9(?9(?9(?9(?< NPO =@ nf0<`0.@A-10.@A.10.U@=@Hy0.QA+>HЈ/NyPBgBg0.QA+>HЈ/?<?.NO BgBgBgBg?< ?.NO 0.N^NuNV?<?9,N~X?<?9,NX?<?9,NXBg?9,NX0.@A-3.0.@A-3.0.@A-002.AA-pS@3.0.@A-002.AA-pS@3.Hy.?9,N\N^NuNVVN ?.NT0.@A-=p0.@A-=pBn`T0.PA/HЈ/HnNyP0.2.#A=@Hn?.?.?9,NO Rn0.y4mN N^NuNV?.NTHnHn?<Bg?9,N.O0.@A-=p0.@A-=pBn`<0.PA/HЈ/?.?.?9,NO 0.|=@Rn0.y4mN^NuNV?<NXT-@Bn`$0.@A 02.H n!Rn n@mN^NuNV0.@A(00`,N`4?.NT`$?.NFT``|gа|g԰|gN^NuNV0.@A.=pN ?<NT=n =n =n=nHnHnHnHn?< ?.N4O`@HnHnNYPg ?.N4THnHnHnHn?< ?.N4O0.g0.fBgNTN N^NuNV?.?.?. ?. ?.NO =@J@l,=|?<?<?<NXD\Hy?<N|j\0.N^NuNV0.@A.=p0.@A-=p0.@A-=p0.@A-=p0.@A-=p?.?.?.?.BgBg0.2.HA?0.2.HA?N}O?.?.?.?.?.NO 0.@A-HЈ/0.@A-HЈ/0.@A-HЈ/0.@A-HЈ/?<?.N4O0.@A,10.@A!0BpN^NuNV n -|` n " n  R .m-|`Z <@".S". n !-|`&". n "0 .Ю @  R .mR mB` . nBR m n`X n -|`6 .S n 0".S n"0≀". n!R .".SmN^NuNV l .A#T 9T/ </NY X#l 9TV/ </NY X#JfJTo # 9/ </NY X# < T# < #HyHy2/9TNO HyHy|/9NO N^NuNV 9l 9l J m . "< TnJm ."< :Tn . -@ .뀑 ./ <I/NZh Ю-@B`v". A2"0 .й- @  . o: Hl0". SA"0 .й- @ (!@IR .Tm~N^NuNV 9 9 J m . "<nJm ."<n .-@ .뀑 . / </NZh Ю-@B`v".A|"0 .й @  .o: l0".SA"0 .й @ (!@R .m~N^NuNV 9z# 9z/ <U/NY X# 9z/ </NY X# 9z/ </NY X# 9z/ <9/NY X#N^NuNV 9xgR 9԰zoB 9x`Jf/. /.N!P` 9԰l/. /.N!P` 9԰l/. /.N!P`h 9԰l/. /.N!P` 9԰f/. /.N!P`& 9԰l/. /.N!P``, 9԰o 9԰l/. /.N!P` 9԰l/. /.N!P``^ 9԰oP 9԰l/. /.N!P`~`, 9԰o 9԰l/. /.N!P`L/. /.N!P`8`6|gj|g~|g|g|g|g8N%`/. /.N!PN^NuNV 9xg\P 9PzoBP 9x`JPf/. /.N".P` 9Pl/. /.N".P` 9Pl/. /.N".P`h 9Pl/. /.N".P` 9Pf/. /.N".P`& 9Pl/. /.N".P``, 9Po 9Pl/. /.N".P` 9Pl/. /.N".P``^ 9PoP 9Pl/. /.N".P`~`, 9Po 9Pl/. /.N".P`L/. /.N".P`8`6|gj|g~|g|g|g|g8N'`/. /.N".PN^NuNV## N^NuNV#!,# !6N^NuNV .м/ <g+/NY X-@ . м/ <g+/NY X-@/./.N(P .V/ </NY X-@ <".V/"</NY"X-@/./.N(PN^NuNV . "< To 9"< TnJ l Jl/. /.N(P0<` .-@ . -@ .Jf/. /.N#P0<`-n-n <-@-@Jl-|Jl-|Jl .D` .-@Jl .D` .-@ .찮o .".Ё/ ./NY X-@ f .D-@ 9м-@ .Ю-@`* .//9N#P .Ѯ .ѹ 9谮f#` .".Ё/ ./NY X-@ f .D-@ 9м-@ . Ю-@`*/9 ./N#P .Ѯ .ѹ 9䰮f# ##0<N^NuNV . "<o 9!6"<nJ l J!6l/. /.N(P0<` .!,-@ . !6-@ .Jf/. /.N%P0<`-n-n <-@-@Jl-|Jl-|Jl .D` .-@Jl .D` .-@ .찮o .".Ё/ ./NY X-@ f .D-@ 9!6м-@ .Ю-@`* .//9!,N%P .Ѯ .ѹ!, 9!,f#!,` .".Ё/ ./NY X-@ f .D-@ 9!,м-@ . Ю-@`*/9!6 ./N%P .Ѯ .ѹ!6 9!6f# !6#!,#!60<N^NuNV .м/ <g+/NY X-@ . м/ <g+/NY X-@09g/./.N(P .V/ </NY X-@ <".V/"</NY"X-@/./.N+>PN^NuNV-y-y-n-n 9/ </NY X-@ ./ </NZh Ѯ-n-n|MBnBn`H0. np.H`Bn`(=|`.H@|=@0.Hй=@.H|=@0.@@A 0/ ./NZh /0.H/NZh -@/.NsX&<-@Jl .D-@0.@@A 0/ ./NZh /0.H/NZh -@/.NsX&<-@Jl .D-@ .Ѯ .Ѯ0.g.H|Mfd/./.N(P .V/ </NY X-@ <".V/"</NY"X-@/./.N(P09g/./.N(P .V/ </NY X-@ <".V/"</NY"X-@/./.N+>P|D`-n-n|M``|g|gN.Rn0. n0f 9A 0/ ./NZh / </NZh -@/.NsX&<-@Jl .D-@ .Ю-@ 9A 0/ ./NZh / </NZh -@/.NsX&<-@Jl .D-@ .Ю-@/./.N(P .V/ </NY X-@ <".V/"</NY"X-@/./.N(PN^NuNV`vBn` 0.@A! p nf`Rn0.@A! pH|f0.@A! p nf0.@A!/0N.PXR nfN^NuNV ./ </NY X-@ l-| .Ю-@-n /./.N(4P-n-n`".A##(v#(z .N_Hy(vHy(jNcBP-y(j-y(nHnNX-@ .Ѯ".A(#(v#(z .N_Hy(vHy(jNcBP-y(j-y(nHnNX-@ . Ѯ/./.N-P .Ѯ ImN^NuNV~| |Bh-|[`-| \-|)kX-|)TB B-y-yBnBn=|BnBnBnBnBnBnBnBn=|BnBy`A6D-HBd`> nRP.H|TfL..g nZo$0.AB0HnN2lX| Bn`0.RnA`.H|Zfn| `.H|-f =|`.H|0mp.H|9nd.H|0=@ < / .h/NZh 6.HЃ-@h=|0.gRn0.g0.RnAB0=|Bn`".H|.f\Jnl .hD-@h0.@Al!h .h2.AAN_!(j!(nBh=|Bn=|`.H| W|.H| W|A.H|,W|A.H|;W|A.H|:W|A.H| W|AgP0.g0.@A#(j#(n".hN_Hy(jHy(vNc(P0.Rn@AHЈ @#(j#(nHy(vHy(jNbP (j!y(nBn=|=|`60.g0Jnl .hD-@h=|0.Rn@Al!h=|BnBh0.g0.RnAB0=|Bn.H|;W|.H|CW|AJnW|Ag$/././././. N2O| `0.RnA=| no=|0.g0.@A#(j#(n".hN_Hy(jHy(vNc(P0.Rn@AHЈ @#(j#(nHy(vHy(jNbP (j!y(nBn=|=|`60.g0Jnl .hD-@h=|0.Rn@Al!h=|BnBh0.gHyHnN PJ@f4=|.H|MV|.H|DV|Ag|M`rHy HnN PJ@f |D`RHyHnN PJ@f |M`2HyHnN PJ@f |T`HyHnN PJ@f |S`HyHnN PJ@f|RBn`HyHnN PJ@f|FBn`Hy"HnN PJ@f|PBBn`Hy&HnN PJ@f2Bn.H|MV|.H|DV|Ag|M`8Hy*HnN PJ@f*|I-|[`-| \-|)kX-|)T`Hy.HnN PJ@f |Z`Hy2HnN PJ@f|PB=|`Hy6HnN PJ@f|G#(=|`|Hy:HnN PJ@f|G#(Bn`PHy>HnN PJ@f|LBx#zN#B`HyBHnN PJ@f|CBnBnBnBnBn0.g *.H` nl` -nl(-np$0.g0.gp-n-n-n-n0.g .`#(v#(zHnPHy(vNd8PHnNXX-n~` .~A6DB0R~ ~mJ(rnN^NuNVHnHy Hy N}O nf?<?</966NBPHy Hy,2NyP?<\Hy,2Ny\-@Hy <Ю/NyP?<Hy,2?<NNXPH-@JgHy?<N|j\0<`H?</NXT-@ <Ю-@/.N pX-@ n-P#(r0<`0<N^NuNVJy4gNNGgBgHy,2?<=NXP=@JnodB?<N~z\-y(r o-|Hy6D/.?.?<?NXO l?.?<>NXX-n` .A6DB0R mN N=@ @gB?.NTBgNT?<NT?.N~T?.NTNr`lBn0.@A,Jpf ?.NTNN Hy?<N|j\ @fN ?.NTNr` N N?./.N4D\N(N N^NuNVNBy4Nv=@ @g?.NT?.NT`=|Bg?.N X`Bn`\NGf`ZHy,20.PA/HЈ/NyP0.@A*!(r0.R@34?.NFTRn nmJy4fBg?.N XJy4o ?.NFTN^NuNV3LNBn`0.PA/HЈ/Hy,2NyP0.@A*#(rBgHy,2?<=NXP=@Jno-y(rB?<N~z\-y(r o-|Hy6D/.?.?<?NXO l?.?<>NXX-n` .A6DB0R mN=@ @g6N ?.NTBgNT?<NT?.N~T`(BnN 0.@A,Jpf ?.NT?.NTNr?./.N4D\N(09gNN.N Rn0.y4mhByLN^NuNVB?< NX\-@-xp/.?< NX\ .-@/.N XX-@/.N @X-@ n hf2 n hf& n hf/9-N X n 0<`0<N^NuNV ./ < /NZh -@B`F .м/ <u0/NZh -@ .".Ҽ;/ /NY X-@R .mN^NuNVB?< NX\-@-xp/.?< NX\ .-@/.N XX-@ n h f^ n hfR n hfFHypBg?<NXP n1|/<XNMXHyBg?<NXP0<`0<N^NuNVHnHnHnHn/.N|O?.?.?.?.?.?.?.?.BgN|O?.?.?.?.?.?.?.?.?<N|O?.?.?.?.?<Bg/.NnO?. /.N}\|=@?.?.?.?.?.?.?.?.?<N|O?.?.?.?.?.?.?.?.?<N|O?<?./.NP0.N^NuNVBn0.`H n fHnHn?< /966NO/9 yH/(N P/9 yH/(N P/9 yH/(N P/9 yH/(N P/9 yH/(,N P/9 yH/(DN P y66?( y66?(?.?.Bg/9HNNO=@ yH/(N XH# yH/(N XH# yH/(N XH# yH/(N XH# yH/(,N XH# yH/(DN XH#=|`.0.@A o0.@A! Rn nm`0. `NH`=|`` |g|g0. ` NN.``|g0. `,NJj`.?<?./966NBPNKT`` |gа|g`|g|gr|g|g?<?./966NBP0.N^NuNVBnHnHy.HnHnHnHnBgBgHy!:BgBgBgBgBgBgBgBgBgBgBgBgBg?<N{O<=@?<NT=y!@?.NT=@=y!B=y!D=y!F=y!H0.|g09!:`?9!B?9!@NPX=@`?.?.?.?.?.NO `BgBgBgBg?< ?.NO `n0.@A.?0?.N X`N?.?.?.?.?.NO `,`*| g\|gp|g|g|g|gx0.|gy.BgNT0.glN^NuNVNB?<N~z\Bn`$0.@A(Bp0.@A.BpRnJno=|`&0.@A(10.@A.BpRn no=|`&0.@A(10.@A.BpRn noBn`j0.@A.10.@A-Bp0.@A,Bp0.@A!0Bp0.QA+>B00.QA/B0Rn nmHyNXf*?<?<NXXHy?<N|j\0<`Hy66BgBgN PHyH?<BgN P?<NT?</966N~\By(BBgN~z\?<NXT-@/.N Xм-@/.N @X/N pX# BgNTHyHy NyPByNNMf.Hy?<N|j\Bg?</966NP0<`/l#(j# (n`&HyHnNeP0.|?=@ nlRnB(jB(n-y(j-y(n0.|?=@HyHnNeP#(j#(n-y(j-y(nHnHnNgPPHyHnNePHnHnNePHnHnNhP#(j# (n-y(j-y(nHnHnNgPPA 2.HЁ @#(j#(n-y(j-y(nA м -@ n#(j#(n-y(j-y(n=|`*HnHnNgPPQ ./HnNePSn0.fHnHnNgPPHnHnNeP0.g:HydHnNeP#(j#(n y(j-y(j-y(n0.g#(j#(n y(j`#(j#(nN^NuNV#d(j#h(n-y(j-y(nHnHnNeP#(j#(n/9(n/9(jNjVPN^NuNV#(j# (n-y(j-y(nn#(j#(nN^NuNV=|-|#(j# (n-y(j-y(n0.n@=@ nlB(jB(n`p n3o#(j# (n`T nl( .2<nB#(j#(n`" .2<3n#(j#(nN^Nu#(jHy(jNaXONuHy(jNaXO 9(jNu#(jHy(jN`XONuHy(jN`XO 9(jNu#(vHy(vNaXONuHy(vNaXO"9(vNu#(vHy(vN`XONuHy(vN`XO"9(vNu#(Hy(NaXONuHy(NaXO$9(Nu#(Hy(N`XONuHy(N`XO$9(NuNVH n "(fJg"¼м@ LN^NuNVH nB fB`м8 LN^NuNVH n g jDh <r`V$<H@J@fBH@ @bQB @bYB @?bUBJ@kSB&<"F€JHBЂJj LN^NuNVH n "($HBJ&<BnDB Bcp`*` B c <`6<BtjABJjD LN^NuHHy//NbPOL/WXONuHHy//NcPOL/WXONuH o#HyHyN`NbN`PO o L/WXONuH o#HyHyN`NcN`PO o L/WXONuH////Ne|PLNuH////NePLNuH////NePLNuH////NhPLNuH////NgPPLNuH o#HyN`//NePLNuH o#HyN`//NePLNuH o#HyN`//NhPLNuH o#HyN`//NgPPLNuH o#HyNa//NePLNuH o#HyNa//NePLNuH o#HyNa//NhPLNuH o#HyNa//NgPPLNuH o0H#HyNa//NePLNuH o0H#HyNa//NePLNuH o0H#HyNa//NhPLNuH o0H#HyNa//NgPPLNuNV n " n $&JjFFJjFFN^NuNVH~ n $& n "(JfJf`n*(fJf "`ZNVH.<`b fcBCD!E xzH@:HB<M8NF E6cH@`~GG~GGH@HBҁрSEg:jփՂ`2 E c&tE Ec 6HCBBHBE|.F΂Ć꫆Jk*RA҃тgRD Dcpr``xg`fSDJf"Jf`hHAJAf HA rD `0BADH@~GcH@`0z`XEJ@gREGcH@Ejpr` |.F΁†SDLHDЄJj LN^NuNVH n $& n "((fJg*fJg H@:HB<MNE1F,<.*FHÁ…HC΃ƅąxHB<:HC>܇ۄHAHB>܇ۄH@HC>܇ۄ>ڇلHDHEHF8:|HB>ڇن>؇HC>ڇنH@HB>ڇن~>(JkڅلSG <"FHD„v 歊ȀۆنGk Gc xz`xz`SGOHG؇Jj LN^NuNVH n $& n "(*fJgx(fJgt H@8HB:LME,<.*FHÁ…HC΃ƅąb fbRD1DHBHC.h~>ЇHG~` B@H@:|FH@HAHF<0BAHBHC8:ǒxjSG҃тd6BBHBHC,h ,ІHF|` B@H@:ƒ*HEHE8BEjSF҃BdHG>H@HA0,h ,ІHF|` B@H@6HC:2HAH@xDjSF҃dhrHF<x8(z <"FHG‡v 殌΀݅߅Dk Dc ~|`~|`SDLHDބJj LN^NuNV#(j# (n-y(j-y(n0.| @>l#(j# (n`n#(j#(n/9(n/9(jNm@P-y(j-y(n0.| @OoB(jB(n`j#(j#(n-y(j-y(n nHnHnNgPPHyHnNePHnHnNhP#(j#(nN^NuNVHnHnNgPP#(j# (nN^NuNV #(j# (n-y(j-y(n#(j# (nHy#Hy(jNe|f#(j# (n`R nl#\(j#`(n`20.@=@n0.|gNn?0.@|=@#(j#(n-y(j-y(nHyHnNePn`Ln@0.@|=@#(j#(n-y(j-y(nn HyHnNeP=|`J#(j#(n-y(j-y(nHnHnNhPHnHnNePnSn0.f0.|2.AA=@#(j#(nN^NuNV#(j# (n-y(j-y(n nln=|`Bn n>l#(j# (n`t#(j#(nHydHy(jNe|o#(j#(nHylHy(jNe|o#(j#(n-y(j-y(nHylHnNhP#(j#(n/9(n/9(jN^P-y(j-y(nHylHnNgPPHnHnNeP#(j#(nHydHy(jNe|o@HylHnNeP#(j#(n y(j-y(j-y(n n#(j#(nHy|Hy(jNe|oTHydHnNeP#(j#(n y(j-y(j-y(n-y(j-y(n =|`$#(j#(n-y(j-y(n Bn#(j# (nHy#Hy(jNe|f,0.g#\(j#`(n` B(jB(n`PHyHnNeP0.|?=@ nlRnB(jB(n-y(j-y(n0.|?=@HyHnNePHnHnNeP#(j# (n-y(j-y(nHnHnNgPPA 2.HЁ @#(j#(n-y(j-y(nA м-@ n#(j#(n-y(j-y(n=|`*HnHnNgPPQ ./HnNePSn0.fHnHnNgPP#(j#(n-y(j-y(nHnHnNgPP#(j#(n-y(j-y(n HnHnNePHnHnNeP0.gBHnHnNhP0.g#(j# (n y(j`#(j# (n`@HnHnNhP0.g#(j#(n y(j`#(j#(nN^NuNV 94A䀰|l y4X4 0<`0<N^NuNVH`Y4 y4 PN 94AfA8*H`0- |g / NrX A8"Ҽ@m?.N6TL N^NuNVH*n0- |g/ Ns Xg0<`20- |g /-Nv~XBm ?- NTg0<`0<L N^NuNVH*n0- |f0<`r.0- |gV0- |f0<`R0- |g?<B?- NsP?/-?- NyP @f m@ 0<`m *Bm0<L N^NuNV .lDN^NuNVJnl3 <`H?.?./. ?<BNXO -@Jm .`?<?.B?<BNXO -@Jl .3 <`?<?.B?<BNXO -@ nf .Ю -@ `& nf .Ю -@ `0.g <` . oH?.NwT|J@f .3 <``` Hn . /?.?<@NXO Bg?./. ?<BNXO J]|=@g3 <`` . NqN^NuNVH .<".ҼS/"</N"X/./N. /NyHX*@f <`(M)G P/Nv~X 9zL0N^NuNVH .<".PS/"</N"Xށ 9z(@JfA (@#z#B*T -e* -f(`  -+G#z P`( zf/Nu,X*@Jf <`(M*U`L0N^NuNV0./NuXN^NuNVH .f`v .Q*@(yz` m n l`(T o l "-Ёf T (ѭ T*`* ",Ёf -Ѭ(`(#zL0N^NuNVBn`<0.@A $00f&0.@A $10.@A $1 ` Rn nmN^NuNVBn`*0.@A $00nf0.@A $BpRn nmN^NuNVH>.=|\A $"HPgXHf0(LN^NuNVHHy~/.NyPfBG`Hy/.NyPf><`Hy/.NyPf><`0. |gR0. |?/.?<=NXP>J@m 0. |g&JGm??<>NXXBg/.?<`j0. |gD0. |?/.?<=NXP>J@m"??<>NXXBg/.?<`0. |?/.?<=NXP>JGl 30<`?. ?Nw X0LN^Nu o/ fpJWf ` <gf `SNuNV/.?<HNX\-@ .f-|3 .N^NuNV0./NyHXN^NuLB@ggSBAgHJ@gHANuL rWfNuNVH*n (MBn ng?.NwT| fA&H. nU|`H| f S @  . nU| A|l0fD AH-@Hn/.?.?<@NXO <Hg 30<`dA&H0f~ =@`J/ 0./?.?<@NXO -@2.¼g .30<` .n0.L8N^NuNV?<N"T0<N^NuNVA6:#LA'$#PA'H#TA-#XA+2#\A #`AL#(~?< N"T3--09-N^NuNV3'H3 'J3 'L3'N3'P3'R3'T3'V3'X3'Z3'\3'^3 '`3"'b#$+23('d3*'f?<N"T n,0- n00- n40- n80- n<0- n@0-09-N^NuNV3'H# +2?<4N"TN^NuNV#+2?<6N"T n 0- n0- n0- n0-09-N^NuNV3'H3 'J3 'L3'N3'P3'R3'T3'V3'X nf 3333?<3N"TN^NuNV n0 n 0 n0 n0N^NuNV#+23 'H?<2N"TN^NuNV#+2# +6?<ZN"T n0-09-N^NuNV3'H3 'J3 'L3'N3'P3'R3'T3'V?<IN"TN^NuNV?<MN"T n0- n 0- n0- n0-09-N^NuNV3'H# +2?<NN"TN^NuNV3'H3 'J3 'L3'N3'P3'R3'T3'V?<JN"TN^NuNV#+23 'H?<N"TN^NuNV#+23 'H3'J?< N"TN^NuNV#+23 'H3'J?<!N"TN^NuNV#+23 'H3'J3'L3'N3'P3'R?<*N"TN^NuNV#+23 'H?<,N"T n0- n0-09-N^NuNV?<oN"TN^NuNV3'H3 'J36B?<pN"TBy6B n  09-N^NuNV3'H3 'J3 'L3'N3'P3'R?<lN"T n0- n0- n0- n 0-09-N^NuNV3'H?<fN"TN^NuNV3'H3 'J3 'L3'N3'P?<dN"TN^NuNV3'H?<gN"TN^NuNV3'H3 'J?<hN"T n 0- n0- n0- n0-09-N^NuNV3'H3 'J3 'L3'N3'P?<eN"TN^NuNV3'H3 'J3 'L3'N3'P3'R?<iN"TN^NuNV3'H?<kN"TN^NuNV36:0.| AHЈ-@=|` nR2.AA6:H1Rn nm/9(~NJX09-N^NuNV# 3  3 By 3 3 NA,#N^NuNV3e By By 3 NN^NuNV3 ,3 ,BnNq nR2.RnHA'j|1f3 3 Sn0.3 3 NN^NuNV3{ By By 3 NN^NuNV## .мZ# 3d By 3   n 3 N09  n 03A'j#A-#A%# A,#N^NuNV3 'j3z By 3 3 NN^NuNV .3  .3 N^NuNV .3  .3 N^NuNV09 69 Ƽ n N^NuA&-Xy- !JHy #Hy" <sNBYy-A&-"P$hNuNV#  . м # 3& By By 3 NA-#A%# N^NuNV3 'j3 By 3 3 N09-N^NuNV3 'j3 By 3 3 N09-N^NuNV3 'j3 By 3 3 N09-N^NuNV3 'j3 'l3' By 3 3 N n0- n0-N^NuNV3 'j3  By 3 3 N09-N^NuNVH?<$Hn/.NNO .6.HЃ-@ .3'. .3'0BG`0HЮ @ Ю RG0nm .6.HЃ-@BG`0H/ </NZh  n00`.0H/ </NZh Ю @ ( Ю!@ `8`6|gΰ|gȰ|g°|g|g|g|g|g| g?/.N\RG0nmd .6.HЃ-@BG`v0H/ </NZh Ю @ Ю 0H/ </NZh Ю @ (Ю!@0H/ </NZh Ю @ (Ю!@RG0nm .6.HЃ-@BG`0H/ <"/NZh  n 0Ю2H/"<"/NZh" n!0H/ <"/NZh  n 0Ю2H/"<"/NZh" n!0H/ <"/NZh Ю @ (Ю!@RG0nmN .6.HЃ-@BG`B0H/ </NZh  n 0Ю2H/"</NZh" n!RG0nm0<LN^NuNVH$.f BB`&". Bvd d``bd-@-A LN^NuNVHL&gHC H@J@g@HCBCւ-C LN^.JNuNV?.?<LNXXN^NuNV n"n 2.HbL0|f |f`( |g `Q`fA`2Q`XA`"Q`J0|f |f`$ |g ` Q`A`3 Q` A`# QN^NuNV?.Nw^TJnn0<`,?.?<>NXX=@g30<``0<NqN^NuA&-Xy- !J"/0<NBYy-A&-"P$hNu NV#+23 'H?<rN"TN^NuV2N:F=FD;A2GAW2N54LX88,AA1AY2NH8J"J#KBZ 88>(h-H+Hd#HHEF !ACL/88~N""< h(|FDFa BcD#bHH#ģc%88BBc cD#d HHc#?BCA%Cc.A'K4e cD#㣇)6DVHH#ãfM#g"Ib"*HdA&hHH#_ iJBBj#JABkHHe%lcM}"E"bEbmJ#C"nJ#ocD#ģpM"ãbq Mb"rJ#s"AbbA"t CcMȄuJ"J@ @ @ @ vJ:wJ"B#Gx*yJ#FʣzJ p8p8p8p8[ II,#Cd(?@$@Y@@@È@jA.AcAׄAeB_ B7HvBmB0Bּ C k CAy@Cv4WCm`]IIM#F#GC0#JcG#1HH2 E$"Cb32"Db"Db CcJ##MC4JL52#DcF 6G#ģcJ#7888#Cb"Cc9C#Jc#2N#M#GCHVesN#DcAM#FBHH££C CcJ#DHHʣE HH BcD#A#KBFHH GHţcJ#HHH H!AatcC#ãIHH$'Strichstrken:_2Stift 1:__99_2Stift 2:__99_2Stift 3:__99_2Stift 4:__99_2Stift 5:__99_2Stift 6:__99OKLPLOT v 1.0 Plotter-EmulatorW. Wilhelm 9.4.89 Desk Datei Plot Batch Laser-Plot...-------------------- Desk Accessory 1 Desk Accessory 2 Desk Accessory 3 Desk Accessory 4 Desk Accessory 5 Desk Accessory 6 Lesen Ende Drucken! Dateien StartT88T`aPtDaPD|aPtTbHD&dDwD&`P0(36A DGR UXc fit wz   $        :  V  r  PP     P     (=Rg|         2JC#MKHHh(L HH(VD6MHH9NHHHH& D賈cD&Ab O CcJ#PHH£$2#cc#BQ D賈cJ#RHH£`LRA^L$SC#BccB#{bEb"E"cD#ģ#KBTHH :AFA\ XXU2N#M@ AcJ#ƢEa!"L4@ ! @f??@ ! @@ Plotfiles [3][GEM stellt keine Fenster|mehr zur Verfgung!][ OK ]@ ! PAPDPULBSPROSCDRPRIPDTDISISRLTCI@Y@Y@ @D@@btz@u@[3][File|nicht gefunden!][ Abbruch ][1][Grafik lschen? ][ ja | nein ][3][Resource-File|nicht gefunden!][ Abbruch ]\*.PLT[3][SDUMP5.PRG|nicht installiert!|nur Bildschirmplot mglich][ OK ][3][Nicht gengend Speicher|fr Laserprint!|nur Bildschirmplot mglich][ OK ] ?UUUUT?əuOI"V?c@n?[,?պ/n?ǹ{K[?[u,?bw7?A?d#?ݬgaO?e~0? ?E7?䗏&?Չ?xF4?зM?!TD-@ Wi??!TD-@ !TD-@$?!TD-?.B9????UUUV? x?T%q?WxT?w?I%h?W 6                $     v( 0     ,6  ,     2    h        ~                   0.* *0  .,.$4.6              &(<$  $ D "$"        H0p         *       v                      : & .,              "  (lP (X&>&. . 4&f.,*   ."(Lb8 (                           &"    (L"Z6$(H""H"r ``h o ( ШШм/B?< NA\#a#~Hy?<?a >T _J@gQt`XZCHgg`3 9`G3t yp fXt`#l#p# /9?< NA\AJBjA BfA?/?< NA\pG&A#p3p2Q4jBgNA Bg/?<1NA09"||g^2< 49 |B309&|49$|B309*|49(|B33NqNu?<NNT>|H30H|?30r h3Nu Screen Dump to SLM 804 Laser Printer installed... size 1, 2, 4 or 5 screens per page (Alt-Help activates) E Screen Dump already installed... No action taken this time. E SLM 804 Not Responding... Driver not installed. ͺJygkZJ9>fJH`3NuJyfJyf(3ByH9`|3`#Sy`gNH3#` 9dRy y<f2ByRy y<fByRy yfBy 9edaD#Jyg,3By yg*Jyf ByJyg|F09aa209aa(09aL` r/RA| j|:?0a0`p:r2RF&z(ҹN(A kL4+P>+RSGPQNu49FBy.LJyfNsNu.3@|34909S@Jyf@eAp29|f4rdBdBQB0R@ @e`t|frdBQ0R@ @e`P|f.rdBQ R@ @e`rdBQ R@ @eHy?<?9 aX _JkR683L3AS0<DB Q0: p2V@HS@3 yf 2<4<A`8 yf2<4<Ȑ| ` yf 2<R4<,A` 2<g4<A3B yg^3A3B ygD3A3B yg*3A3B yg3A3B30:24|H3p Ҁ# SB3Jyfp9H@9H @#I@|>GfFF8 yg> <}Ct490<?"QJyfR}t0<g"Q`>|C8<Opv&H4<rAgAPQF2QQRQG849RB3ye3J9>f3P>I yf(yKC>:LOEpHފ# ^>:@a4AG 1|0:~H@ agp`tp3afQ a @H@H@1| zSGJaAG кE Afz E@H@H@1|1| QBy9fa1|Q>t3 <@C49S@BQ`fL 3,Nuprtv <: HHHQ|`H yg`zd¾ze ygFzdzd yg0zdzdzdzd ygzdzdn2:AEM ygb yg yg ygr1JyfUAtBB&5 $,"QJyf`4:JSB2&"Q2& Q2&$Q2&,Q`# 29ʲ|gT|gr3at$" Qxat$$Qat$,Q(y P`Hr3at$"Qxat$ Qart$$,Qxa^t$Q(y P`r3a:t$"Qa.t$ $Qxat$,Q(y `(y G.0<'BBB65 4KtB65 KC4KCQ# I.rNurOtB65 02QrOtB65 <4Q`*29ʲ|g|gr3r'tBB&5 " $TITHTJtBB&5 HCYXZHC204Qr'tBB&5 ,TtBB&5 HC^HC.<. z"n aLN^Nu`>`6`"```tpNVH:<`,tp`tpNVH:<`tp`tpNVHzP>A>.<. "n fag<a.`pQ>LN^Nu/    XO1|1|1|01|0afh0af`vpafVQ0:afHBy0aJBgk8aZ g Jf(g"p`aBfQt`a2f QpNurPa@fRBkp4`a$f pQa@aNurPaf 1|0a8rNuH@0< a*rPҹ9g lpNuH@0< aNur*QNu, l2NPAGE PRINTER$ 2 <J B    h         @  :" (", "N:J4<6zz`(NKBy1BJ$f"O/9.t?<HNA\OJg.@.t`@Ry1B m A#1.t"ҍ¼.A// Bg?<JNA #4 y4/(,HhNP/92/91?90NhNNT?<N|NV0. H/ </N  np N^NuNV0. H/ </N  np N^NuNVH><`RG0.H =@J@n0LN^NuNVH><<`` n0pH|0m* n0pH|9n0< n0pHC|0<`$ n0pH|_g n0pH| g0`RG n0pH|f0LN^NuNVHJnf?.NT=@BG` n pRG0nm0. n B0>.SG0.H H@|02SG n 0.H =@J@nLN^NuNVH..*G L N^NuNVH..*G L N^NuNVH..*G L N^NuNVH (n*L L0N^NuNVH n/N@X>?<_?< n/?NO 0LN^NuNV?<_?< n/?. NO 0. N^NuNVB?< N*\-@-xp/.?< N*\ .-@/.NHX-@/.NxX-@ n hft n hfh n hf\ n32 n3 3 n3 3 n31< n316 n-P/.N`X#30<`0<N^NuNV ./ < /N -@B`F .м/ <u0/N -@ .".Ҽ;/ /Nx X-@R .mN^NuNVB?< N*\-@-xp/.?< N*\ .-@/.NHX-@ n h f n hf n hf09->g nBPBy-> n1y1< n1y3 n1y3 n1y2 091:gBHy-/90NOHy0 Hy10Hy1N!DO ?914?918?91@?91>?<NO 36$BgBgHy-@?<?96$N hO HnHnHnHn?914?918?91@?91>?<BgNFO?.?.?.?.?96$N ,O 0<2F32By20<2F32351D?914?918?91@?91>?91D?92?92?92?<N"O0<N^NuNV?914?918?91@?91>?91D?92?92?92?<N"O?96$NT?96$N T?910N!T36$N^NuNV323?93 y0/(N\?914?918?91@?91>?<Bg/90NON^NuNV091\-@ Hn` <Ю /NPBgHn?<N*X <}Ю-@Rn0.y16mJy16o&Hy-h?<N\=@ nf3->N^NuNV y0/(NX33093ʰy2o 323 y3l33?93 y0/(N\N^NuNVBnBn-|HnNX-@ ?< /90N\Hy-HnNPHy-Hn`NPHnHn`HnNO nfHnHnNP?<\HnN>\-@Hn` <Ю/NPBgHn?<=N*P=@JnoBn`BBn`,0.H n pf0.H n pf0.H n pf?.?<>N*X?<Hn?<=N*P=@Bn`Hn/.?.?<?N*O Rn0.nmN |0.Y@H n 11<0.W@H n 130.U@H n 130.S@H n 12Hn/.?.?<@N*O ?.?<>N*X0<``Rn nmRnHn/.?.?<?N*O J^|H-@f?.?<>N*XHy-?<N\N^NuNVN f&BBgNp\Hy-?<N\0<`Ng y2f?</90N\ y2f?</90N\ y2f?</90N\ y2f?</90N\Jy3g?< /90N\`?< /90N\Jy1?<Bg/90NOBg/90N\|=@0.`32NX`32NX`32NX`32NX`N`xN`nN8`dNZ`ZN `P?</90N\`:?</90N\`$` ]@| c0< @ |."| LN ng" ng ng n g n fN | ngNjNN^NuNVN 34 y4f0<`8Hy(N"Xf$BBgNp\Hy.*?<N\0<`0<N^NuNVN<=@J@gHnNX``31=|`0.@A11Rn n m31.Hy12Hy5Hy5Hy2FN.O310Hy.`?94N\3536$Hy0BgBgNPHnNX0.`80.y5fN L`.0.y5f y6$gN`` |(gİ|)g`N^NuNuNuA2H4Xy4 !J!_ NMYy4A2H4"P$h/( J@NuA2H4Xy4 !J!_ NNYy4A2H4"P$h/( J@NuA2H4Xy4 !J!_ NAYy4A2H4"P$h/( J@NuNVN^NuNVN^NuNVH$.f BB`J". BnJlVnDJlRnDvd`Bbd nmDdD-@-A LN^NuNVHBG".l~D$. l GD&gHC H@J@g@HCBCւJGgD-C LN^.JNuNV 9.xA/ؐ䀰|l y.xX.x 0<`0<N^NuNVH`Y.x y.x PN 9.xA/ؐfA.|*H`0- |g / NX A.|"Ҽ@m?.N&TL N^NuNVH*n0- |g/ NTXg0<`20- |g /-NXBm ?- N&Tg0<`0<L N^NuNVH*n0- |f0<`r.0- |gV0- |f0<`R0- |g?<B?- NP?/-?- NP @f m@ 0<`m *Bm0<L N^NuNVJnl30 <`H?.?./. ?<BN*O -@Jm .`?<?.B?<BN*O -@Jl .30 <`?<?.B?<BN*O -@ nf .Ю -@ `& nf .Ю -@ `0.g <` . oH?.NT|J@f .30 <``` Hn . /?.?<@N*O Bg?./. ?<BN*O J]|=@g30 <`` . NqN^NuNVH .<".ҼS/"</N%"X/./N%. /NlX*@f <`(M)G P/NX 9/L0N^NuNVH .<".PS/"</N%"Xށ 9/(@JfA/ (@#/#/B/*T -e* -f(`  -+G#/ P`( /f/NPX*@Jf <`(M*U`L0N^NuNV0./NXN^NuNVH .f`v .Q*@(y/` m n l`(T o l "-Ёf T (ѭ T*`* ",Ёf -Ѭ(`(#/L0N^NuNVBn`<0.@A000f&0.@A010.@A01 ` Rn nmN^NuNVBn`*0.@A000nf0.@A0BpRn nmN^NuNVH>.=|\A0"HPgXHf0(LN^NuNVHHy//.NPfBG`Hy//.NPf><`Hy//.NPf><`0. |gR0. |?/.?<=N*P>J@m 0. |g&JGm??<>N*XBg/.?<`j0. |gD0. |?/.?<=N*P>J@m"??<>N*XBg/.?<`0. |?/.?<=N*P>JGl 30 0<`?. ?N0X0LN^Nu o/ fpJWf ` <gf `SNuNV/.?<HN*\-@ .f-|30 .N^NuNV0./NlXN^NuLB@ggSBAgHJ@gHANuL rWfNuNVH*n (MBn ng?.NT| fA&H. nU|`H| f S @  . nU| A|l0fD AH-@Hn/.?.?<@N*O <Hg 30 0<`dA&H0f~ =@`J/ 0./?.?<@N*O -@2.¼g .30 0<` .n0.L8N^NuNVA5#6 A2x#6A2#6A4#6A3#6A0#6 A6 #3?< N T344094N^NuNV#3?<N TN^NuNV32# 3?<4N TN^NuNV#3?<6N T n 04 n04 n04 n04094N^NuNV323 23 2323232323232 nf 30303030?<3N TN^NuNV n00 n 00 n00 n00N^NuNV#33 2?<2N TN^NuNV#3# 3?<ZN T n04094N^NuNV?<MN T n04 n 04 n04 n04094N^NuNV32# 3?<NN TN^NuNV32# 3?<#N TN^NuNV#33 23232323232?<*N TN^NuNV323 236?<pN TBy6 n 0094N^NuNV323 23 2323232?<lN T n04 n04 n04 n 04094N^NuNV32?<fN TN^NuNV323 23 23232?<dN TN^NuNV32?<gN TN^NuNV323 23 23232?<eN TN^NuNV323 23 2323232?<iN TN^NuNV350.| A'hHЈ-@=|` nR2.AA5H1Rn nm/93N',X094N^NuNV3e0By0By030N"LN^NuNV#0#0 .мZ#03d0By03 0 n 30N"L090 n 03/A2#0A4#0A1F#0A3#0N^NuNV .30 .30N^NuNV .30 .30N^NuNV090690Ƽ n N^NuA2H4Xy4 !JHy0#0~Hy0~" <sNBYy4A2H4"P$hNuNVH?<$Hn/.N&0O .6.HЃ-@ .32 .32BG`0HЮ @ Ю RG0nm .6.HЃ-@BG`0H/ </N  n00`.0H/ </N Ю @ ( Ю!@ `8`6|gΰ|gȰ|g°|g|g|g|g|g| g?/.N(\RG0nmd .6.HЃ-@BG`v0H/ </N Ю @ Ю 0H/ </N Ю @ (Ю!@0H/ </N Ю @ (Ю!@RG0nm .6.HЃ-@BG`0H/ <"/N  n 0Ю2H/"<"/N" n!0H/ <"/N  n 0Ю2H/"<"/N" n!0H/ <"/N Ю @ (Ю!@RG0nmN .6.HЃ-@BG`B0H/ </N  n 0Ю2H/"</N" n!RG0nm0<LN^NuNVH$.f BB`&". Bvd d``bd-@-A LN^NuNVHL&gHC H@J@g@HCBCւ-C LN^.JNuNV?.?<LN*XN^NuNV n"n 2.HbL0|f |f`( |g `Q`fA`2Q`XA`"Q`J0|f |f`$ |g ` Q`A`3 Q` A`# QN^NuNV?.NTJnn0<`,?.?<>N*X=@g30 0<``0<NqN^NuA2H4Xy4 !J"/0<NBYy4A2H4"P$hNu NV#33 2?<rN TN^Nun$NRW. Wilhelm 9.4.8975 dpi100 dpi150 dpi200 dpi_5Screens pro Seite:__99_0gespeichert:__99MenzeileUhrDrucken!Abbruchauf Disk!SichernOKLSETUP v 1.0 Laser-HardcopyT88T`aPtDaPD|aPtTbHD&dDwD&`h70($6WZoru- A, $  '  QOQGQ? 6 A  A  Q QQ S  Q RQ8  n SETUP HARDCOPY \*.PI3SCREEN_1.PI3[2][Gespeicherte |screens lschen? ][ JA! | Nein ]C:\AUTO\*.PRGSDUMP5.PRG[3][ Kein korrektes| SDUMP5.PRG! ][ Abort ][3][SDUMP5.PRG|nicht installiert!][ Abort ](2FP<Zp[3][Fatal Error !|LSETUP.RSC|File Not Found][ Abort ] Laser-Hardcopy / CON:AUX:PRT: $ **6 &* *6                 ." V$      $  n"0$                      6     "  (l@ (X&>&. . 4&f.,*   ."(Lb8 $                    &   "(L"Z6$(H""H"r SP1;PU1000,1000;PD1000,2000;PD2000,1000;PD1000,2000;PU;LB Saft Hallo HP GL;SP `4dH5L``>>> TURBO-C <<<< for ATARI-ST Release 1 (C) 88 Borland International G#7J$VH37 k  Ј.@// ?<?<JNAO pBAA4|`g |`.gg4TBB"O4SBQBt SAe!dB)SAe !eHiR@`/ R@Hzd"k, ON*? 94fg @N 94jg @NN,?<LNA?/ &H6 IN,z6N,"Kp "Q0&_6Nu/ / $H&IN+p. JN+&H gBC5@ JN+T"o JN+J&_$_NuHBAN+lO p?rC??<?<BgBB Rp?BAN+HO p?rC??<?<BgBB RpGBAN+$O p???<?<BgBBBA RpCN+O p???<?<BgBBBA RpDN*O p???<?<BgBBBA RpEN*O p???<?<BgBBBA RpBN*O p?Bg?<?<BgBBBA RpMN*O p???<?<BgBBBA RpMN*dO p?Bg?<?<BgBBBA RpNN*DO p???<?<BgBBBA RpNN*$O JCf. y 4pg$p?r??<?<BgBB Rp@BAN)O `"p?r??<?<BgBB Rp@BAN)O $_6NuH YO<:86/EHoHo"J J0972N( PO0Y@gU@g_@g`ND `ND ` N D TEB/A42097N(NN*N?j0@?@2*A?A0*VBAN' A0*VN&BC` 20RCN~|o0<N*$POLNuH,QO60<N* EU`>I?Tp@R?@2<T?AKR0BAN&A0N&p0Y@gU@gj_@g`0BD`&0HR?@>?T0<T?@Ar0N'RD| mBD`$0HT?@?@>p@R?@Ar0N'ZRD|m`BD`(0HR?@>r T?Ap`T?@A0rN'$RD| mBD`&pDHT?@?@>p@R?@Ar0N&RD| m`hBD`*pDHR?@>r(T?ApXT?@A0rN&RD|mBD`*pDHT?@?@rR>p8R?@A0rN&RD|mБ0<N(POL4Nu4BA4r40 jB|ft`BB0Nu??A4rJBf6<kFC8Dp@`6<k8Dp@8D1@86NuHQO86:0/Y@g U@g`XC`RDZC2097N$0HyU`R@>2IyUbRA?AtW?Bvo?C0<N'A097N$H0<N'POL8NuH860Nr|lN0Y@gU@g _@g`xz` z8`z8BF`&BG`20NJ@g?t20N(TORGGnRFFnLNuH(O60<N'E4r|MfB@` 2ABrR@|mv B@?@>IUdA2YAg\UAg._Ag`~?|?|?T?P pT?@ rP?A`V?|?|?TpP?@ rT?A t P?B`,?|?|pT?@rP?A tT?B v P?CN"d%HpHy4C\Ar0,NN"XO0<N&0OLNu?/ ]O60<N&EHoHo"J Jr097N#PO|lL0H| l0` 0H72HHA| l0`2HHA7A`p @B/A49Uj29Uh097N"̑0<N%v\O$_6Nu??86N0N8|fpMN `0N86Nu?/ O6BB?B ?BG40Y@gU@gL_@g`0H>BorW?A?|?| ?|Hy4CAr097N!.XO`0H>BorW?A?|?| ?|Hy4CAr097N XO`D0@C@>BorW?A?|?| ?|Hy4CAr097N XOO&_6Nu?/ O6BB?B>G40Y@gU@gN_@g`?|?|0H?@Bo ro?A ?|Hy4"KAr097N ,XO`?|?|0H?@Bo ro?A ?|Hy4"KAr097NXO`F?|?|0@C@?@Bo ro?A ?|Hy4"KAr097NXOO&_6NuH0&|vET f%|'rX%|`~\%|A``F "f%|'X%| \%|iJ``$ "f%|)X%|Vr\%|S``BCJCgN&H PB@`2I4J% R@|m kB@C`2I4J# R@|m kB@GP`2I4J' R@|m jX %|U0d%kLh%iLl%jLpG4r'|7 '|G4'|OH'K\0L NuH0OBE5@G7B@CANJ@f fB@AN8m K"<NV|g rpN`vC ANC-ANC:ANBgp??<?<BgBBBA kp1NO Bgp??<?<BgBBBA kp2NO Bgp??<?<BgBBBA kp3NO N$N6NH0NJfnBD` k@@RD|mCGANBD` kC@@RD|mCTANBD` kC@@RD|mCaAN3 4pp NO,L Nu/ EUXHyU^Cp RNXOPjHyUbCpI RNXOXjXj HyUfC pK RNXO\j ^jHyUjCpL RN~XOZjj $_Nu/ E4n0HH@HyU^?2HIyU\?t8yUb?tyU`prNz\O2*0Nt0<N2*0N0<N42*0<NpN$_Nu34n294p0<NpNNuH>]O&H$IB@20IKMU\Ho"MA0.VNVXO2Vm84BBn.0Tm&4.Bn2U4.T2H:Ag0<`*0H:H2H8A2IV64Jn4\OL|Nu?/ 6 y4ngN(34p0N 294p094nN0NEUX?<?<BgBBrpP RN\O0Y@gU@gJ_@g`p???<?<BgBBBA Rp9NO p?Bg?<?<BgBBBA Rp:NO `@p?Bg?<?<BgBBBA Rp9NvO p???<?<BgBBBA Rp:NVO p?Bg?<?<BgBBBA Rp;N6O ``p?Bg?<?<BgBBBA Rp9NO p?Bg?<?<BgBBBA Rp:NO p???<?<BgBBBA Rp;NO $_6NuH0OG4p kf CAN6|gEUb?<?<?*?*?/ CA4/$rpNnO CAN|8|f?/?/?/4/rpNr\O`Cfd7Cp8R?rj??/4/ prNF\O?<pA???*r?tr8RpjN@O 20N20NB@N`*0Y@gU@gZ_@g`0H>BorW?A?|2I?ABo to?B ?|Hy4C"A0*PrN@XO`0H>BorW?A?|2I?ABo to?B ?|Hy4C6A0*PrNXO`V0@C@>BorW?A?|2ADA?ABo to?B ?|Hy4CJA0*PrNXO0<N220Nt0<N OL NuH 6: y4ngNE7rB@NU@f0Y@g\U@g._@g`zBD` j@@RD|mC5AN`RBD` jC@@RD|mC5AN`(BD` jC@@RD|mC5AN0Np?Bg?<?<BgBBBA j0NO L8Nu/ y4ngNE7rB@NU@f|B@` jR@|mB@` jCR@|mB@` jCR@|mC5ANC5ANC5ANp Np?Bg?<?<BgBBBA jp-NO $_NuH 68EUXt???<?<Bg Rp1BA4NO p???<?<BgBBBA Rp2NO p???<?<BgBBBA Rp3NO p?Bg?<?<BgBBBA R0NnO LNuH6QOE4p jlv8GU`0Y@g*U@g_@g`0:<+~@?|` :| k~@?G`zS|(k~0?GMKHW"M N0+RNXOUW0oN2oJ@oFol@H:H>JCg NJ@gBDBC420N?42/0NTO0NpVfPOLlNu?6094pN294p094nNJp?r??<?<BgBB yUX0BANHO 6Nu?6BAA4r` 4B1 RA|m0N6NuB@A4r`2A40FB1R@|mpHNlNu??A4r2(YAgUAg _Ag` p`p`pBA`4B40 6AC8D10@10RA4H…BopFN86NuH E4r jgv8`vx BE`@BF`(20N^J@gt2pFNr` BB2pFNdRFFn0@22i5RE|mp=NLxNuB@A4r`2ApUUR@2ApR@|mpGNjNuH E4r jfv`v BD`4BE`(20NJ@gt2pDN` BB2pDNRE|mRD|mBD`0@22i5RD|mp@NL8NuB@A4r`2A4B1 R@|m0(Y@gU@g _@g`Bh` Bh`Bh p>NNupA4r`2A4B1 S@J@nBPp>N|NuH E4r jfv`vBD`0@22A5BB02NRD|mp>N8LNu?/ BCE4r`0@22A5BBB@2NRC|mp>N$_6Nu?//N XO6?<?<BgBBr yUXB@N\O294p094nNP06NuH>O8(H$I/ANXOE5@CAN"LANHKUGU/ "M MNXOHoC MNfXO6094pNJCf rpN(`P ofF/ CANrXO"M KNC KNC KNA40<NKuMIB@ KN6m2YAgZUAg2_Ag AVgn`A"<0N*|fj"K MN:`A"<0Nr*|fF"K NN`A"<0NN*|f""K LN`jA"<0N,*|g rpN&`H"K MNHy6"M MNtXO"K NNHy6"N NN\XO"K LNHy6 "L LNDXO0Np?Bg?<?<BgBBBA yUXp#NVO p?Bg?<?<BgBBBA yUXp$N2O p?Bg?<?<BgBBBA yUXp%NO p?Bg?<?<BgBBBA yUXp&NO 094pNl?<?<BgBBrpP yUXN~\OA4B@N,OL|8NuH>O:$H6G4p kgNKUIU/ "M MN:XOB/,Ho:C0 MNXOJ@f0NBrpN` o:f"M LNK5@C LN fC, LN \A0<NB@"LANJ@g0NrpNT`n0H"/g0NrpN6`PMuB@ LN <8m2YAgUAgD_Ag AVg`"A2H0N ,Ff"L NN/ "N NNBXOp N:`A2H0N v,Ffp"LAN\/ CAN XOpN`A2H0N >,Ff8"LAN$/ CANXOpN`~A2H0N ,Fg0NrpN>`X"L NNHy6"N NNߌXO"LANHy6CANnXO"LANHy6CANPXO` 0N `0Ndp?Bg?<?<BgBBBA yUXpNVO p?Bg?<?<BgBBBA yUXpN2O p?Bg?<?<BgBBBA yUXpNO p?Bg?<?<BgBBBA yUXpN O AB@NTOOE7BA0N 0<N*KR:;j0*@;@2*A;A M0N K5@M4C NN CAN C AN INHoNHoR"L Lr 0N POA#tjr,j0N NުN޼N NtBjr j0N AtRjr j0N Atbjr j0N HoNHoR"L Lr0N RPO N4*Br j0N xA4*Br j0N `A4*Br j0N JHoNHoR"L Lr0N PO N4*Br j0N A4*Br j0N A4*Br j0N NNNHoNHoR"L Lr0N POA84*Br j0N GPHoN"L K0N XO0fHoN"L K0N nXO0gr?Bg?<?<BgBB jpQBAN O 094pN∑0<N HoN"L K0N $XO0fOZL|NuH>OE G7Ho "JpP kN 0XOVRTj0@5@rj5A0<N BA0N Z J0N .0<N vR8z jHoHoC A r0N rPO0<N XA6tErD0N 0<N :HoHoC A 294p0N ,POIKMHo"M L0N,XO0f0<N A6420N .0<N Ho"M L0NXO0gCAN^<|lJFf J0N>8`nB/0<N NۖNۨNۺA420NNNN0<N ` y4pf\D`PD0@@o8Ho"M L0N`XO0f0Rm.jn&2jmjn?<?<BgBB kpPrN :\OR j0@5@r j5A0<N J0N`p?Bg?<?<BgBBBA kpRN .O 0<N Ho"M L0NXO0fOL|xNuH8NNNEUX RNfI4nAB@N NNG0N߶20NB@ RN6C0|Rbz@0;Nnbbbbnnnnnnnnnnnnnnnnnnbnnn 2Dnnnnnnnnnnnnnnn&nh@Lxn`pX8nnnnnV\N,`N``N`2p N<`2pN0`2pN$`N`2pN`z2B@N`n S gfp NT`\ SgTpNB`J SgBpN0`8N`0r>B@N`$r?pN `N,`NL`N`N`N6` TlN` TlN` TlN` TlN,`CA6p N`C!A6pN~`C.A6pNj`tCA6pcNV``2<A6p N`N2<A6pN`<2<A6pN`*2<A6pcN`Nt`N` A6pNĶ|Ofjr1 NS@fNלr2 NS@fNעr3 NS@fNר RNBgp??<?<BgBBBA RpONO LNuH8O^Nj6E7HoHoCANPO4B@Gr` 2A7R@| m7|HW"J KNnXO2?<NNT#T4Vt|g #TVt*|V\:BmBm;|f ;y7 "<7t0<sNBL|Nu/ GV g/ &S?<INA\O`GV g/ &S?<INA\O`&_Nu JgJgJgJgJg JgJgJfSHggggg ggf @Nug fC`Jg INuSHNu g<g8g4g0g,g(g$g ggggg ggf @Nu"HJgJgJgJgJg JgJgJf SNu//??<?NAO Nu?/?<NNAPONu?<NATONu?</NATO @Nu??<>NAXONu//??<@NAO Nu?/?<,ntH, p$\**Rl\>46(B8:"f$ T. F&RXJ <**@ ^B $*`p2zJ*JP*$N*$$$ $Nd:$$$,F>.8 ~\  6 $    & ,$ 00&    $ tS&DIWO '89 0 1 2 3 4 5 6 7 8 9 A B C D E F0123456789ABCDEFV 2.0CLRFILLOKUNDOQUITFONT: ________.___[2][Laden eines Systemfonts lscht|den aktuellen Font!| |Trotzdem laden?| ][blo nicht|na klar][0][Mit falscher TOS-Version|kein FontEdit!][ JAMMER ][1][Fehler beim|Diskettenzugriff][ JAMMER ][1][Dieses File|gibt es nicht!][ Dann halt nicht ][1][Dies ist keine|passende Fontdatei!][ Schade ]`p8p8p8p8p8p8p8p<p>p>p>pw>pw>p?>p?>p>>>pppppppppppppp`<x`f30030060?<<0y68ͳ6͞~yffacacaffafcaffa```````g@@`a@``@```a``g``a````@a `@g @ a@` `@`   00    >fa6f̀a3f̀a3<>f16f̀a3f̀3< Dp   * ^     R     F z    : n     . b    J  d  ~     Z   $-. pvwx|}~RC@(@  @   @ %/ P @ ! R T V XZ\^` b d f h jln@ :* % &  4  B   P  ^ '!&% #""! l $ z %   &    .(-%*))(  +  ,   -  '  6/5%100/  2  3   4 " 5 0 . > <7;% 9887 L : Z ; h 6 v I=H% > ? V @ r A  FBE C@   D@  E@ A@ G H < J@8  OKN,  LM N J P % Q R  %   8@<U6666666666666|||||||| (|````ff >``ff22``6666666666666|880 |x8::x ff>fl`f<<~ ~~<<<8|f~`f<|<>~ffff~`xp`` 80>|`l|00x<88<@@@(ff~fl 0f~~~ ~<~~~~|<~~|~~~f~`f~~~~~ffff~`x88`` 80~fffffff~ffff8f<LL 6666666666666<~~l ~pD|xH<$,4fp@pf`l88<f8f `pff~pf~ffn```f`ffff`ffff `8``0f<<~l|H0f$g< @@ |@.f` 8< f8f ``ff8~8fffff```f`vfff`ff<>|8 l<<|>|>~ffff~0bff<<<<<<<<<888~~`v<<~&&66667?7666f`~08fB~8|88H0$<@8 ::~x9ff|p~~ f <|` <~p f~`f||n~`vfffpff<<0l>~|~~~~~8 ~~~~~~~ffff~88`f~>>>>|~~~888ff`~~~ffffff0~f>8~f~ff,,"U66667?7666f`lfB<~p~@H`H8<|||||||8ff>p~~n <~| <> f|`f||n~`~fff8ff<f`ff~ff fffff`fff667000??|` f0~f~~8~Hx0gf`ffff ffff`pff>>>`fff~~|{ffffffff`f>fff~~f002llU67?77??f`( f0BlB~8>$,4򒌁<y~6<0f lff8~8~f`f``ff`nf|fff<0 ~f`f~ff ffff`<fff88f`f~~~~~`~~~~~`fffffffff0~f~fff~ff0~~nf66666?77666f`(f0B(Bp|P$f8~pqf f~ff0f0f~f0fpffff``fff`nf`ff<<` ff`f`ff ffff`f<f< ~0~~~~~~~~~~~<<~~l~<~~ff><~` 2U6666666666666l`8]|>>>f< `|>f~0<>>>>>>>>>><<><<`p><<>ff<`?6666666666666`>~~~p <00~|`~ ~@`~~"U6666666666666@|T |x`|88|6666666666666<<~||||||||xf8p<<~ ~<~<<`<<|f<f`f<|<|<~ffff~@x```8pf f0f0f`f ?f00ffff 44U66666l666666l< ><0 8888x<$8<` (fl>fl8ff8f ``ff 0ff<|>|8f|<|>|>~ffff~f<<<~~f0 jf|`f||n~p`~f|f|<ff<0f`ff0fflfffff`fff>|666o000??|blllf~fT~f~~l0 Ã~ ~~l0<0f~f0fn~f`f``ffx`nf`vlff<0 >f`f~0ffxffff`<fff 4ff~>`~~~ff|ffffffff`0flffff`f<|<>0bff<0f0~fffn><`0 6lDD666l?7766lf`lfllf|f<f~x>|<><0f<f`|>lf~p~><>>>><<<<<><>~|`><<>fff0 U66666l666666lv|`l8f~~~p0<~`qT8`|p`|8|`<<<66666l666666l`H<`!϶ P>s8B͔{& 1pO<3>q qB((/` ` 1yAQ!D! QQE/A`0l%DB(@A (((  @?q x 0q>b*PȀ Sg ?B;M ` R# 1&( Cl("(R!`gay$!Or(J'0ΈPP#m 0€@A,/+ p @?kfaƾsm!,Ihcb;nPȏs `bp`ǾGq` &B/"(!B0m0(ȁ8#袊$"(2!0k'q q!qȢȘqq"/a͛%DN" < CT3frx0π0hbܓXi@!h>)n`00H(# 1 ("B)*"%6P`蠊$"$"%*1 02/ "(z( aŠAz(> 뢊( (y`< 0yqqȢqǞǀ0y/pBA (BB? p3 Hinweise zu FontEdit FontEdit ermglicht das Editieren von allen drei Systemfonts. Wie sind nun aber diese Fonts im ATARI ST eingebunden? Bei den Standardfonts des ATARI ST handelt es sich um GEM-Fonts. Zunchst besteht ein solcher GEM-Font aus dem Font-Header. In dem Font-Header stehen alle wichtigen Merkmale des Fonts. Fr FontEdit ist jedoch nur der Eintrag bei Startadr.-Header + 76 interessant. Hier steht der Zeiger auf die Font-Daten, die man ja mit FontEdit verndern kann. Diese Fontdaten haben einen auf den ersten Blick etwas merkwrdigen Aufbau. Am besten stellt man sich die Fondaten wie einen Bildschirm mit nur einer Zeile aber 256 Zeichen vor. Zuerst stehen also alle oberen Reihen eines Zeichens nacheinander im Speicher, dann die zweiten Reihen u.s.w. Dadurch ergeben sich fr die Dateien von FontEdit (FontEdit speichert ja nur die Fontdaten ab) folgende Lngen: 8*16 Font: (256 Zeichen * 8 Bit * 16 Bit) / 8 Bit = 4096 Byte 8*8 Font: (256 Zeichen * 8 Bit * 8 Bit) / 8 Bit = 2048 Byte 6*6 Font: (256 Zeichen * 6 Bit * 6 Bit) / 8 Bit = 1152 Byte Speichert man alle Fonts zusammen ab, so werden Sie in der Reihenfolge 8*16, 8*8 und 6*6 auf Diskette geschrieben und es ergibt sich eine Lnge von 7296 Byte. Nun mu man den ATARI aber noch berreden auch die eigenen Fontdaten zu benutzen, und das ist gar nicht so einfach! Die folgende Beschreibung beruht nur auf Probieren, und stellt deshalb vielleicht nicht den optimalen oder einzigen Weg der Fonteinbindung dar. Auf jeden Fall funktioniert es aber so. Zuerst einmal mu man die Font-Header und Font-Daten aus dem ROM ins RAM kopieren, wo man die Font-Daten nun editieren kann. Die Adressen der Fontheader, und somit auch der Font-Daten, erhlt man ber den Line-A-Befehl $A000. Nun klinkt man sich in den Line-A Aufruf ein, und liefert die Adressen der Font-Header im RAM. Programme wie GFA-BASIC, die sich die Fontadressen ber den Line-A holen, arbeiten nun schon mit dem neuen Font. Eine normale Zeichenausgabe ber GEMDOS oder BIOS benutzt aber immer noch den Systemfont. Um dies zu ndern, mu man in S/W den eigenen 8*16 und in Farbe den eigenen 8*8 Font als Standardfont anmelden. Dies geschieht mit der VDI ESC Funktion und dem ID 102 (nicht offiziell dokumentiert). Der Aufruf geschieht mit folgenden Parametern: contrl(0) = 5 (Funktionsnummer) contrl(1) = contrl(3) = 0 contrl(5) = 102 (ESC-ID Standardfont anmelden) contrl(6) = handle intin (0) = Adresse des Font-Headers Nun arbeitet aber leider die Textausgabe ber VDI (also alles was GEM ausgibt) immer noch mit den alten Fonts. GEM merkt sich nmlich leider in einigen nicht dokumentierten Speicherstellen die Adressen der 8*16 und 8*8 Fontdaten und des 6*6 Fontheaders. Nun mu man diese Werte noch mit den Adressen der Font-Daten im RAM berschreiben, und schon (schon ist gut) kann man seine eigenen Fonts in allen Programmen genieen. | RAM-TOS | Blitter-TOS | TOS 1.4 ----------------------------|-----------|---------------|----------- Zeiger auf Font-Daten 8*16 | 607E | 8820 | 5672 ----------------------------|-----------|---------------|----------- Zeiger auf Font-Daten 8*8 | 41A8 | 694A | 5316 ----------------------------|-----------|---------------|----------- Zeiger auf Font-Header 6*6 | 2772 | 27D2 | 2914 `JG2 `` >>> TURBO-C <<<< for ATARI-ST Release 1 (C) 88 Borland International G#"bJ$VH3"f k  Ј<.@// ?<?<JNAO pBAA4|`g |`.gg4TB|"O4SBQBt SAe!dB)SAe !eHiR@`/ R@Hzd"k, ON? 9Lg @N 9Pg @NN?<LNAH00<NEG"n fN$'HB@`BBA`6BB`*6K8LDB:MA8LEL:EE R0@RB|mRA|mR@|m0<N@L 8Nu/ N$HNc,Nd$BgBg?<?<vBgBBBAp yCXNO `$Bgp??<?<vBgBBBA yCXpNO $_NuH0N BCEG"j`B5C Jr0+NdBD`BApN S0gRD| m| gBApNd S0g`RC|o|f ApN N(NNL Nu/ / ETp. JN&H f JNG*|.RK|F|1|6B+&_$_Nu/ / Ep. JN6&H f JB@N(&H*|.RK|F|N|TB+&_$_Nu/ B@2EBnR@|XOHyAN.XOHyANXOHyTANXOHyBnANXONB/ANXON /A>NXON8/AcNXON `$GCX(S KrB@NRJ@fANnN&NNLNuH vNEN^U@gApNNZp`ANtNN&AN3"hR@f$Bgr??<?<vBgBB yCXpBANO NN|9Nr9TN^NN8N|&fApNhU@fv`BCJCfNhNB@LNu/ i"hL I$_NuHy?<&NN\ yBNuHy?<&NN\ yBNu#2BNu#6BNuH0O&HN$HANB@ KNJ@f&/`v JN O,L Nu/ / O(HE ^ y \f*"JAN Hp"LAN CAN ApN~N`(C)AN p"LAN CHAN ANXN(pNOP(_$_Nu y \g A NrNu/ EBN(5@R@f A NRy \HyBHyBCAN&PO5@B@` 2A5R@| m5|5jHyBC JN4XO0*f A Ny \$_NuNT09BN By \NJ@f A!NNu/ $HN( JNrJ@f A!@NACXBAB@NbJ@f A!YN|3!$$_Nu/ N y!$g A!sNV3!$ECbHyCbHyC`HyC^C jNO ??*?*?*p??BBBAB@NlO ??*?*?*p??BBBApNJO ??*?*4*rB@ jN \OJ@f A!N$_NuH0E!& jg A!NB@NJ@f JNGCX0* SN 6pNJ@f JNbp?Bg?+ ?+?+4+BA S0N hO 0L Nu/ ECb??*?*?*p??BBBApN tO ??*?*?*p??BBBApN RO 3!$$_Nu?NjN"6N06Nu/YOM,C Hza(XOXO,_NuH@B@H@C"&raJ@kNu.Vp`H8]O$H&I(o&BCx%p JR@gfJ@g@NBEgBA< <b;k`|<*f<`&<0< b ACp a$Wb<gt<.f6<*f4`$<0< b ACp a$Wb~4gv<lf gfgr@dV|?@0;NFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF [0`AB(`0AB(` [2"La@``JEj `p0?4 LaTO@`@JEj `0H?4 La`TO@` JEj `p0?4 LaTO@`JEj `p0?4 LaTO@`@N0\OLxNup`H Ov Jj|-?|D`g|+?|`g| ?|`~?|`vH Ov ?|`dH Ovf?|`L|0f|x?|`2|X?|`$H Ovf?|` |0?|$H>C8jxA a4A pJWF@?@gA 2SAk ae(Q2/@4/(jt@jtBgf 0Ao@@Alx?B?D`XH0$H&IvJWFCJBj4Cb6xJAkCc8Cf K0a0 JN` 0 JN0 Kap0DL Nu6x0/g f@ JaP0/g@AN0/g@ Ja,0/g@A N0/g g@ Ja0OLNuH0E6`H0E4&H6g8Kg SC JpNQ J0|gNL Nu00000000 H:$H&I(Sx&gBJg>+g@,k $ڹd SfRe`&// Ka*$"J@f(S`& L\Nu3 Jp`H&H(k6+"+g0DtaJk+fT"SA"L Ip Wf(| ?/ " 0aX"_2JkJAp QH@" 0a6LJj`&0" La |g&'LB@LNup`|g$//??<@NAO JkNua\3JpNu// &H&g??<NAXOSb&_&Nu|b$??/?<BNAO JkNua3JpNu0<`D@| |"b;NupNu   / GCd g/ &S?<INA\O`GCh g/ &S?<INA\O`&_Nu JgJgJgJgJg JgJgJfSHggggg ggf @NugfSHNuJgNu g<g8g4g0g,g(g$g ggggg ggf @Nu"HJgJgJgJgJg JgJgJf SNu"Jg JgJgJfSHSefB ANuH0$H|g|$brGRgJ3kSJtgtJ@f"p <0f:pgb<߶<Xf(pf"`N|f<0fg><߶<Xfg.G3d"3d&HCHCJCfԃԁd` & gSJ"L Nu3"Jp` 3!Jp& g"`//"4UB|"bZC"t&HCJCf&HC;0NRBH@B@H@f`$?&8BCHC06H@0HC;0&RBJf8QB" _&Nu3!J`0123456789abcdefghijklmnopqrstuvwxyz@@@@@@@@@@@@@@@@@@@@@@@@@@@::::::8888888888888888888866666644444444444444444444@  !"#  !"#//??<?NAO Nu/?<NA\ONu?/?<NNAPONu?<NATONu?<NATONu?</NATO @Nu??<>NAXONu/?< NA\ONu//??<@NAO Nu?/?<GEM nicht erffnet !Fehler bei 'appl_init()' !Fehler bei 'v_opnvwk()' !Fehler bei 'appl_exit' !Fehler bei 'graf_mouse' !Fehler bei 'rsrc_load' !Fehler bei 'rsrc_gaddr' !Kein RSC-File geladen !Fehler bei 'objc_draw' !do_dialog ohne start_dialog !!!!"&"9"9"9":"M"M"M"NClD"E"F"F|h $V"JL8:\ :*Z JP,FF<: X Nl :     zRLBJL ~   & ,$ ( ZX66$ J:  RLadenF16DEGASSpeichern 0 1 2 3 4 5 6 7 8 9 A B C D E F0123456789ABCDEFAufrufenbernehmenInstallierenSystemfontFonteditorF16DEGASOlis FontkonvertiererEndeInfogeschrieben von:Oliver KuhnHeinrich-Heine-Str.283550 MarburgOlis FONT-KonverterDas ultimative Programm zumKonvertieren zwischen DEGASund F16 - Fonts !P@!` ` !@PwpT W T t P@!` ` !@PwpT W T t P@!` ` !@PwpT W T t P@!` ` !@PwpT W T t P@!` ` !@PwpT W T t P@!` ` !@PwpT W T t vV$*+6@A       !"#01 Fbcd$L+!<, 0 <'% B  c @ ! e gikmoqs u w y { }!<  !+    +!<$"#!+# ! %'!+ & ' $%  Q!6 D R ` n |      2 Nj 2    Wieso mssen Fonts konvertiert werden ? Diese Frage stellt sich unweigerlich, wenn man hrt, da es sich bei diesem Programm um einen Fontkonvertierer handelt. Also fange ich ganz vorne an. Vor einiger Zeit erhielt ich die PD - Diskette Nr. 189. Auf dieser Diskette befindet sich ein Programm, genauer gesagt ein Accessory, das sich FONTEDIT nennt. FONTEDIT bietet die verblffende Fhigkeit, beliebige Fonts als Systemfont anzumelden. Beliebig heit dabei, da man jeden Font benutzen kann, der im F16 - Format auf Diskette vorliegt. "F16 - Format, was ist denn das ?" werden Sie sich jetzt vielleicht fragen. Ich mchte darauf hier nicht nher eingehen, falls es Sie interessiert wird Sie Dirk Woitha, der Autor von FONTEDIT, gegen eine Prmie von 10 DM darber informieren. Nheres entnehmen Sie bitte der Datei FONTEDIT.TXT Um es kurz zu machen : Meine Versuche, mit FONTEDIT Fontdateien im DEGAS-Format zu laden, scheiterten klglich. Da ich aber ber einige dieser Dateien verfgte, die ja recht hufig benutzt werden, z.B. von DEGAS, TEMPUS, STAD, ..., machte ich mich daran, ein Programm zu schreiben, das Fontdateien zwischen diesen beiden Formaten konvertiert. Das Ergebnis sehen Sie hier: Um einen Font zu konvertieren brauchen Sie ihn nur zu laden und im anderen Format wieder abzuspeichern. Ob die Fontdatei im richtigen Format geladen wurde erkennen Sie an der Zeichentabelle. Das Konvertieren kann in beiden Richtungen sinnvoll verwendet werden. So knnen Sie vorhandene DEGAS - Fonts nach der Konvertierung als Systemfont anmelden. Sie knnen aber auch mit FONTEDIT eigene Zeichenstze erstellen und diese dann, als DEGAS - Font abgespeichert, z.B. mit TEMPUS benutzen. Es ist sogar mglich, vorhandene DEGAS - Fonts zu edieren. Dabei gehen Sie so vor: Starten Sie FONTCONV.PRG und klicken Sie auf den Button "FONTEDIT Aufrufen". Es ist mir, auf zugegebenermaen nicht ganz legaler Weise, gelungen, FONTEDIT aus dem Fontkon- vertierer ohne Menleiste einfach per Buttonklick aufzurufen. Klicken Sie nun im Fonteditor auf "USE 8*16" und kehren Sie ber "QUIT" wieder zum Fontkonvertierer zurck. Der Button "Systemfont installieren" ist jetzt selektierbar. Nun laden Sie einen DEGAS - Font und melden ihn als Systemfont an. Rufen Sie jetzt wieder den Fonteditor auf. Der Zeichensatz ist bereit um ediert zu werden. Sind Sie damit fertig, klicken Sie auf QUIT. Im Font- konvertierer klicken Sie nun auf "Systemfont bernehmen". Danach knnen Sie den Zeichensatz wieder im DEGAS - Format abspeichern. ACHTUNG: Sowohl DEGAS - Fontdateien als auch die Fontdateien, die mit FONTEDIT mit dem Befehl SAVE ALL erzeugt wurden, haben die Dateiendung FNT. Sowohl FONTEDIT als auch mein Fontkonvertierer erkennen aber anhand der Dateigre, ob die Datei das jeweils passende Format hat. brigens: Der Fontkonvertierer funktioniert auch dann, wenn das Accessory FONTEDIT nicht geladen ist. Lediglich die Funktionen "FONTEDIT aufrufen" und "Systemfont installieren" sind nicht whlbar. "Systemfont installieren" funktioniert nur dann, wenn der Button "USE 8*16" im Fonteditor selektiert ist. Dann nmlich wird statt des ROM - Systemzeichensatzes einer im RAM installiert. Dieser kann vom Fontkonvertierer aus berschrieben werden, jener verstndlicherweise nicht. Da man mit FONTEDIT nur im Monochrommodus Fonts edieren kann und die 8*16 Fonts im Farbbetrieb nicht benutzt werden, luft der Fontkonvertierer nur in der hohen Auflsung. Diese Version des Fontkonvertierers wurd am 26.10.89 fertiggestellt. Beide Programme sind Public Domain und drfen beliebig kopiert werden, allerdings nur mit der jeweiligen Anleitung. FONTCONV ist ohne FONTEDIT allerdings wenig sinnvoll. Bei Fragen, Anregungen, Kritik oder Verbesserungsvorschlgen zum Fonkonvertierer wenden Sie sich bitte an mich. Meine Adresse lautet: Oliver Kuhn Steigertsweg 5 6100 Darmstadt Betrifft Ihre Frage den Fonteditor, wenden Sie sich bitte an: Dirk Woitha Hebbelstr. 11 5630 Remscheid 11 Lesen Sie bitte auch die Datei FONTEDIT.TXT ! Jetzt kann ich nur hoffen, da es bald viele, viele PD - Fonts geben wird ... `8D(T``>>> TURBO-C <<<< for ATARI-ST Version 1.1 (C)88/89 Borland International G#|J$VH3 k # Ј<.@#<"@(I$k,"Jf"JfB// ?<?<JNAO NA6<HCBB`6 !jBJ)gHiRC` "fSI "WJAkHiRCBSQJ)gHiRCHy`$O0 J"LNP? 9:g @N 9>g @NNx?<LNAH8&H(I6N$H KN0 LN6 JN0LNuA"h"!HNjNuA"h "!H $NTNuA "h""h"%NuH0$|vG%NX|gT f'|'rX'|`~\'|A``N "f'|'X'| \'|iJ``, f'|)X'|Vr\'|S``BCJCgnNJ"PB@`2I4J' R@|m"hB@`2I4J' R@|m"hB@`2I4JAP! R@|m kX '|& d0L Nu?OB@CBANvJ@fB f8B@ABNP6m"A"<N|f NlN~N0NO,6NuO^HoHoCANPO3B@` 2A?rR@| m?|HWCAvNXONHJ@f AN<`N?<NNT#%$&T|g #%|&T*|&<:BmBm;|f ;y "<N0<sNBL|Nu/ Gr g/ &S?<INA\O`Gv g/ &S?<INA\O`&_Nu/ Hz^?<?<NMPO/Hz?<&NN\O?<?<NMPO$_Nu OJx@3z1B x@f1J x@fp!PNu.H3 zNu//??<?NAO Nu/?<NA\ONu?/?<NNAPONu?</NATO @Nu?<0NATONu??<>NAXONu?/?<=NAPONu3&/ C&2dBi3| Cp 2Q"<psNB _0&A)^"op+2QA)p 2QNu&'^(^)^)#*p`"/ /pMa"_2"_2"o2"o2Nu3&@@A C&B@22220<"<PNBA)^0Nu&&'^)^*, DEFAULT.FNT&<&T&h&|&%%|%$ f8d :J$>  T.d ,FONTLOAD.ACC dient dazu einen mit FontEdit erstellten DEFAULT.FNT zu laden. Man spart dadurch einiges an Speicherplatz, wenn man nur seinen 'Lieblingsfont' beim Booten automatisch laden will. Es darf jedoch immer nur entweder FontEdit oder FONTLOAD aktiv sein!!! ******************************************************************** Deze diskette is samengesteld door de Stichting ST, Postbus 11129, 2301 EC Leiden. Onze bibliotheek van public domain programma's omvat op dit moment (herfst 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 de aanvullingen en wijzigingen van dat jaar. In uitgave nov/dec 1992 is een overzicht van de Public Domain bibliotheek (bijgewerkt tot dec. 1992) te vinden. 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. ************************************************************************ . jI.. ~jFONTEDITC DcJFONTEDITDEF `BFONTEDITH rFONTEDITPRJ r+FONTHELPO rFONTHELPS r; #include #include #include #include #include #include "FONTEDIT.H" /*---------------------------------------------------------- Variablentypen ----------------------------------------------------------*/ #define BYTE unsigned char /*---------------------------------------------------------- Konstanten / Macros ----------------------------------------------------------*/ #define FALSE 0 #define TRUE !FALSE #define FONT_DAT 76 / 4 /* Nummer des Wortes im Fontheader das auf die Daten zeigt */ #define GROSS 13 /* Zeichensatz-Auswahl fr vst_heigt */ #define MITTEL 6 #define KLEIN 4 #define CLEAR 77 #define ALLES 99 #define mouse_off graf_mouse(M_OFF,0L) /* Maus ein- ausschalten */ #define mouse_on graf_mouse(M_ON,0L) /*---------------------------------------------------------- Definition der Assemblerroutinen ----------------------------------------------------------*/ extern void melde_font(void); extern long *get_header(void); /*---------------------------------------------------------- globale Variablen ----------------------------------------------------------*/ int handle; /* Grafikhandle */ BYTE font_8_16[256*16]; /* Fontdaten */ BYTE font_8_8[256*8]; BYTE font_6_6[192*6]; long head_8_16[22]; /* Kopie der Fontheader im RAM */ long head_8_8[22]; long head_6_6[22]; long *zeig_header_6_6; /* Adr. des Zeigers auf den 6*6 Fontheader */ long *zeig_8_16; /* Adressen der Zeiger auf Fontdaten */ long *zeig_8_8; long *zeig_6_6; BYTE *sys_8_16; /* Adressen der Systemfonts */ BYTE *sys_8_8; BYTE *sys_6_6; OBJECT *tree; /* Nummer des Hauptbaums */ int anz_x,anz_y,ed_x,ed_y; /* Koordinaten markanter Objekte */ int show_x,show_y,asc_x,asc_y; int edit_it = 256; /* gerade editiertes Zeichen */ int edit_flag = GROSS; /* Merker welcher Font editiert wird */ /* Zwischenspeicher fr ein Zeichen */ int rette[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; /* MFDBs fr Copyraster */ MFDB mfdb_8_16 = {0,256*8,16,128,0,1,0,0,0}; MFDB mfdb_8_8 = {0,256*8,8,128,0,1,0,0,0}; MFDB mfdb_6_6 = {0,256*6,6,96,0,1,0,0,0}; MFDB mfdb_rette = {0,16,16,1,0,1,0,0,0}; MFDB mfdb_bild = {0,640,400,40,0,1,0,0,0}; /* Mausform: Diskette */ MFORM maus_disk = {0,0,1,0,1, 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 0xFFFF,0xFFFF,0xFFFF,0x7FFF, 0x0000,0x3FFC,0x500A,0x57CA, 0x500A,0x51CA,0x500A,0x5FFA, 0x4002,0x4002,0x4FF2,0x4B12, 0x4B12,0x2B12,0x1FFC,0x0000 }; char name_8_16[13],name_8_8[13],name_6_6[13]; /* Namen der Fonts */ char path_name[100],akt_file[100]; /*########################################################## Diverse Hilfsprogramme ##########################################################*/ /*---------------------------------------------------------- File auf Disk suchen ----------------------------------------------------------*/ int dfind(DTA *dtabuf,const char *fname,int attr) { int ret_wert; DTA *old_dta; old_dta = Fgetdta(); Fsetdta(dtabuf); ret_wert = (Fsfirst(fname,attr)); Fsetdta(old_dta); return(ret_wert); } /*---------------------------------------------------------- Extension an Dateinamen hngen ----------------------------------------------------------*/ void strmfe(char *newname,const char *oldname,char *ext) { char *pos; strcpy(newname,oldname); if ((pos = strrchr(newname,'.')) != NULL) *pos = '\0'; strcat(newname,"."); strcat(newname,ext); } /*---------------------------------------------------------- Namen und Extension aus Pfad isolieren ----------------------------------------------------------*/ void strsfn(char *filename,char *node,char *ext) { char hilfsname[20],*pos; *ext = '\0'; *node = '\0'; if ((pos = strrchr(filename,'\\')) == NULL) pos = filename - 1; pos++; strcpy(hilfsname,pos); if ((pos = strrchr(hilfsname,'.')) != NULL) { strcpy(ext,pos+1); *pos = '\0'; } strcpy(node,hilfsname); } /*---------------------------------------------------------- Pfadnamen isolieren ----------------------------------------------------------*/ int stcgfp(char *path,const char *name) { char *pos; strcpy(path,name); if ((pos = strrchr(path,'\\')) != NULL) *pos = '\0'; else *path = '\0'; return((int)strlen(path)); } /*---------------------------------------------------------- Zeichenstze ein- und ausschalten ----------------------------------------------------------*/ void on_8_16(void) { *zeig_8_16 = (long)font_8_16; head_8_16[FONT_DAT] = (long)font_8_16; melde_font(); } void on_8_8(void) { *zeig_8_8 = (long)font_8_8; head_8_8[FONT_DAT] = (long)font_8_8; melde_font(); } void on_6_6(void) { *zeig_6_6 = (long)font_6_6; *zeig_header_6_6 = (long)head_6_6; } void off_8_16(void) { *zeig_8_16 = (long)sys_8_16; head_8_16[FONT_DAT] = (long)sys_8_16; melde_font(); } void off_8_8(void) { *zeig_8_8 = (long)sys_8_8; head_8_8[FONT_DAT] = (long)sys_8_8; melde_font(); } void off_6_6(void) { *zeig_6_6 = (long)sys_6_6; *zeig_header_6_6 = (long)head_6_6; } /*---------------------------------------------------------- get_name(filename,name): liefert aus einem kompletten Filenamen (evt. mit Pfad) einen formatierten Filenamen mit Extension! Bsp.: C:\GEHT\DOCH.WAS -> DOCH .WAS ----------------------------------------------------------*/ void get_name(char *name,char *filename) { char node[9],ext[4]; strsfn(filename,node,ext); strcpy(name,node); while (strlen(name) < 8) strcat(name," "); strcat(name,"."); strcat(name,ext); while (strlen(name) < 12) strcat(name," "); } /*---------------------------------------------------------- show_edit: Hauptformular darstellen ----------------------------------------------------------*/ void show_edit(OBJECT *tree) { int xpos,ypos,xwide,ywide; form_center(tree,&xpos,&ypos,&xwide,&ywide); form_dial(FMD_START,0,0,0,0,xpos,ypos,xwide,ywide); form_dial(FMD_GROW,20,15,40,20,xpos,ypos,xwide,ywide); objc_draw(tree,0,8,xpos,ypos,xwide,ywide); } /*---------------------------------------------------------- close_edit: Hauptformular schliessen ----------------------------------------------------------*/ void close_edit(OBJECT *tree) { int xpos,ypos,xwide,ywide; form_center(tree,&xpos,&ypos,&xwide,&ywide); form_dial(FMD_SHRINK,20,15,40,20,xpos,ypos,xwide,ywide); form_dial(FMD_FINISH,0,0,0,0,xpos,ypos,xwide,ywide); } /*---------------------------------------------------------- show_alert: Alertbox darstellen ----------------------------------------------------------*/ int show_alert(int index,int button) { OBJECT *string; graf_mouse(0,&maus_disk); rsrc_gaddr(R_STRING,index,&string); return (form_alert(button,(char *)string)); } /*---------------------------------------------------------- use_name(name): trgt den Fontnamen im Boxtext ein. ----------------------------------------------------------*/ void use_name(int font) { OBJECT *adr; char *text; OBJECT *get_adr(long baum, int obj); adr = get_adr((long)tree,FONTNAME); text = (char*)(((TEDINFO*)(adr->ob_spec.index))->te_ptext) + 6; switch (font) { case GROSS: strcpy(text,name_8_16); break; case MITTEL: strcpy(text,name_8_8); break; case KLEIN: strcpy(text,name_6_6); break; } } /*---------------------------------------------------------- get_adr(baum,obj): berechnet die Adresse eines Objektes ----------------------------------------------------------*/ OBJECT *get_adr(long baum,int obj) { return ((OBJECT*) (baum + 24 * obj)); } /*---------------------------------------------------------- get_status(baum,obj): bestimmt den Status eines Objektes ----------------------------------------------------------*/ unsigned short get_status(long baum,int obj) { OBJECT *adr; adr = get_adr(baum,obj); return ((*adr).ob_state); } /*---------------------------------------------------------- edit_status(mode): Enabled oder disabled die Edit-Knpfe ----------------------------------------------------------*/ void edit_status(int mode) { objc_change(tree,INVERS ,0,0,0,640,400,mode | OUTLINED,1); objc_change(tree,ESPIEGEL,0,0,0,640,400,mode | OUTLINED,1); objc_change(tree,ASPIEGEL,0,0,0,640,400,mode | OUTLINED,1); objc_change(tree,CLR ,0,0,0,640,400,mode | OUTLINED,1); objc_change(tree,FILL ,0,0,0,640,400,mode | OUTLINED,1); objc_change(tree,LIGHT ,0,0,0,640,400,mode | OUTLINED,1); objc_change(tree,HOCH ,0,0,0,640,400,mode,1); objc_change(tree,LINKS ,0,0,0,640,400,mode,1); objc_change(tree,RECHTS ,0,0,0,640,400,mode,1); objc_change(tree,RUNTER ,0,0,0,640,400,mode,1); objc_change(tree,OK ,0,0,0,640,400,NORMAL,1); objc_change(tree,OK ,0,0,0,640,400,mode,1); objc_change(tree,UNDO ,0,0,0,640,400,NORMAL,1); objc_change(tree,UNDO ,0,0,0,640,400,mode,1); if((mode == NORMAL) && (edit_flag != GROSS)) objc_change(tree,DREHE,0,0,0,640,400,NORMAL | OUTLINED,1); else objc_change(tree,DREHE,0,0,0,640,400,DISABLED | OUTLINED,1); } /*########################################################## Hier folgen die Routinen um die Zeichen der ver- schiedenen Zeichenstze auf dem Bildschim darzu- stellen. ##########################################################*/ /*---------------------------------------------------------- print_char(asc,xpos,ypos,font): Zeichnet das ASCII-Zeichen 'asc' an der Stelle xpos, ypos auf dem Bildschirm. Dabei bestimmt 'font' den zu benutzenden FONT. 13 = 8*16, 6 = 8*8 , 4 = 6*6 ----------------------------------------------------------*/ void print_char(int asc,int xpos,int ypos,int font) { int dummy; char text[2]; vst_height(handle,font,&dummy,&dummy,&dummy,&dummy); switch (font) { case GROSS: on_8_16(); ypos += 13; /* alle Fonts mittig im 8*16 Feld */ break; /* zentrieren */ case MITTEL: on_8_8(); ypos += 11; break; case KLEIN: on_6_6(); ypos += 10; xpos += 2; } text[0] = (char) asc; text[1] = (char) 0; v_gtext(handle,xpos,ypos,text); off_8_16(); off_8_8(); off_6_6(); } /*---------------------------------------------------------- zeig_char(asc,font): Zeigt das ASCII-Zeichen 'asc' an der entsprechenden Stelle im Anzeige-Feld. ----------------------------------------------------------*/ void zeig_char(int asc,int font) { print_char(asc,anz_x + (asc / 16) * 16,anz_y + (asc % 16) * 16,font); } /*---------------------------------------------------------- zeig_an(font): Zeigt alle Zeichen eines Fonts im Anzeige Feld an. ----------------------------------------------------------*/ void zeig_an(int font) { int i,coords[4]; mouse_off; /* Anzeigefeld lschen */ coords[0] = anz_x; coords[1] = anz_y; coords[2] = anz_x + 16 * 16 - 9; coords[3] = anz_y + 16 * 16 - 1; vsf_color(handle,0); /* Fllfarbe weiss */ vr_recfl(handle,coords); for (i=0 ; i <= 255 ; zeig_char(i++,font)); mouse_on; } /*########################################################## Die folgenden Routinen bewerkstelligen die Anzeigen im Editfeld und dem kleinen Feld ##########################################################*/ /*---------------------------------------------------------- show_raster(font): zeichnet das Editierraster ins Editfeld ----------------------------------------------------------*/ void show_raster(int font) { int coords[4],i; mouse_off; coords[0] = ed_x; /* Feld lschen */ coords[1] = ed_y; coords[2] = ed_x + 8*8; coords[3] = ed_y + 8*16; vsf_color(handle,0); /* Fllfarbe weiss */ vr_recfl(handle,coords); switch (font) { case GROSS: for(i=0 ; i < 9 ; i++) { coords[0] = coords[2] = ed_x + 8 * i; coords[1] = ed_y; coords[3] = ed_y + 8 * 16; v_pline(handle,2,coords); } for(i=0 ; i < 17 ; i++) { coords[1] = coords[3] = ed_y + 8 * i; coords[0] = ed_x; coords[2] = ed_x + 8 * 8; v_pline(handle,2,coords); } break; case MITTEL: for(i=0 ; i < 9 ; i++) { coords[0] = coords[2] = ed_x + 8 * i; coords[1] = ed_y + 4 * 8; coords[3] = ed_y + 12 * 8; v_pline(handle,2,coords); } for(i=0 ; i < 9 ; i++) { coords[1] = coords[3] = ed_y + 8 * (i + 4); coords[0] = ed_x; coords[2] = ed_x + 8 * 8; v_pline(handle,2,coords); } break; case KLEIN: for(i=0 ; i < 7 ; i++) { coords[0] = coords[2] = ed_x + 8 * (i + 1); coords[1] = ed_y +5 * 8; coords[3] = ed_y + 11 * 8; v_pline(handle,2,coords); } for(i=0 ; i < 7 ; i++) { coords[1] = coords[3] = ed_y + 8 * (i + 5); coords[0] = ed_x + 8; coords[2] = ed_x + 7 * 8; v_pline(handle,2,coords); } break; } mouse_on; } /*---------------------------------------------------------- point(x,y): testet ob der Punkt x,y im 'rette' Buffer gesetzt ist ----------------------------------------------------------*/ int point(int x,int y) { return((int )(((rette[y] << x) & 0x8000) == 0x8000)); } /*---------------------------------------------------------- set(x,y): setzt (art = 1) oder lscht (art = 0) ein Punkt im 'rette' Buffer ----------------------------------------------------------*/ void set(int x,int y,int art) { rette[y] = (art == 0) ? rette[y] & ~(0x8000 >> x) : rette[y] | (0x8000 >> x); } /*---------------------------------------------------------- platsch(x,y,art,font) setzt oder lscht einen Punkt in der Vergrsserung art = 1 setzen / art = 0 loeschen ----------------------------------------------------------*/ void platsch(int x,int y,int art,int font) { int coords[4]; switch (font) /* Koordinaten korrigieren */ { case MITTEL: y += 4; break; case KLEIN: x++; y += 5; break; } vsf_color(handle,art); /* setzen oder lschen whlen */ coords[0] = (ed_x + 1) + 8 * x; /* Koordinaten fr Rechteck */ coords[1] = (ed_y + 1) + 8 * y; coords[2] = coords[0] + 6; coords[3] = coords[1] + 6; mouse_off; vr_recfl(handle,coords); mouse_on; } /*---------------------------------------------------------- paint(asc,font): Stellt ein ASCII-Zeichen in der Vergrerung da ----------------------------------------------------------*/ void paint(int asc,int font) { int x,y,max_x,max_y; show_raster(font); if (asc < 256) { switch (font) { case GROSS: max_x = 8; max_y = 16; break; case MITTEL: max_x = max_y = 8; break; case KLEIN: max_x = max_y = 6; break; } for (y=0 ; y < max_y; y++) for (x=0 ; x < max_x ; x++) if (point(x,y)) platsch(x,y,1,font); } } /*---------------------------------------------------------- show_org(font); zeigt ein Zeichen im kleinen Anzeigefenster font = CLEAR --> Feld lschen ----------------------------------------------------------*/ void show_org(int font) { int coords[8],i; mouse_off; if (font == CLEAR) { for (i=0; i < 16; rette[i++] = 0); font = GROSS; } coords[0] = coords[1] = 0; /* Koordinaten fr Copyraster */ switch (font) { case GROSS: coords[2] = 7; coords[3] = 15; coords[4] = show_x; coords[5] = show_y; coords[6] = show_x + 7; coords[7] = show_y + 15; break; case MITTEL: coords[2] = 7; coords[3] = 7; coords[4] = show_x; coords[5] = show_y + 4; coords[6] = show_x + 7; coords[7] = show_y + 11; break; case KLEIN: coords[2] = 5; coords[3] = 5; coords[4] = show_x + 1; coords[5] = show_y + 5; coords[6] = show_x + 6; coords[7] = show_y + 10; break; } mfdb_bild.fd_addr = Physbase(); vro_cpyfm(handle,3,coords,&mfdb_rette,&mfdb_bild); mouse_on; } /*---------------------------------------------------------- type_asc(asc): gibt die Nummer asc im kleinen Anzeigefeld aus asc = 256 -> Feld lschen ----------------------------------------------------------*/ void type_asc(int asc) { int dummy; char text[3]; mouse_off; vst_height(handle,6,&dummy,&dummy,&dummy,&dummy); if (asc < 256) { text[0] = ((asc / 16) < 10) ? (char)(asc/16+0x30) : (char)(asc/16+0x37); text[1] = ((asc % 16) < 10) ? (char)(asc%16+0x30) : (char)(asc%16+0x37); } else text[0] = text[1] = ' '; text[2] = (char)0; v_gtext(handle,asc_x,asc_y,text); mouse_on; } /*---------------------------------------------------------- show_all(asc,font): erzeugt alle Anzeigen im Formular ----------------------------------------------------------*/ void show_all(int asc,int font) { void zeig_an(),paint(),show_org(),type_asc(); paint(asc,font); type_asc(asc); if (asc == 256) show_org(CLEAR); else show_org(font); } /*---------------------------------------------------------- buffer(asc,font); bertrgt Zeichen in den 'rette' Buffer ----------------------------------------------------------*/ void buffer(int asc,int font) { int coords[8]; coords[4] = coords[5] = 0; switch(font) { case GROSS: coords[0] = asc * 8; coords[1] = 0; coords[2] = coords[0] + 7; coords[3] = 15; coords[6] = 7; coords[7] = 15; vro_cpyfm(handle,3,coords,&mfdb_8_16,&mfdb_rette); break; case MITTEL: coords[0] = asc * 8; coords[1] = 0; coords[2] = coords[0] + 7; coords[3] = 7; coords[6] = 7; coords[7] = 7; vro_cpyfm(handle,3,coords,&mfdb_8_8,&mfdb_rette); break; case KLEIN: coords[0] = asc * 6; coords[1] = 0; coords[2] = coords[0] + 5; coords[3] = 5; coords[6] = 5; coords[7] = 5; vro_cpyfm(handle,3,coords,&mfdb_6_6,&mfdb_rette); break; } } /*---------------------------------------------------------- ent_buffer(asc,font); bertrgt Zeichen aus dem 'rette' Buffer in den Font ----------------------------------------------------------*/ void ent_buffer(int asc,int font) { int coords[8]; coords[0] = coords[1] = 0; switch(font) { case GROSS: coords[2] = 7; coords[3] = 15; coords[4] = asc * 8; coords[5] = 0; coords[6] = coords[4] + 7; coords[7] = 15; vro_cpyfm(handle,3,coords,&mfdb_rette,&mfdb_8_16); break; case MITTEL: coords[2] = 7; coords[3] = 7; coords[4] = asc * 8; coords[5] = 0; coords[6] = coords[4] + 7; coords[7] = 7; vro_cpyfm(handle,3,coords,&mfdb_rette,&mfdb_8_8); break; case KLEIN: coords[2] = 5; coords[3] = 5; coords[4] = asc * 6; coords[5] = 0; coords[6] = coords[4] + 5; coords[7] = 5; vro_cpyfm(handle,3,coords,&mfdb_rette,&mfdb_6_6); break; } } /*########################################################## Unterprogramme fr die Programminitialisierung ##########################################################*/ /*---------------------------------------------------------- init_font: Bestimmt die Adressen der Zeiger auf die Fontdaten ----------------------------------------------------------*/ int init_font(void) { long *version = (long*)0xFC0018L; /* Zeiger auf Versionnummer TOS */ long *header; /* Adr. der Headers im ROM */ long *header_tab; /* Adr. der Fontheadertabelle */ int i,tos_version; tos_version = TRUE; if (Sversion() == 0x1600) /* KAOS TOS ? */ { zeig_header_6_6 = (long*)0x2914; zeig_8_16 = (long*)0x5672; zeig_8_8 = (long*)0x5316; } else if (*version == 0x02061986L) /* 520ST oder 1040ST ? */ { zeig_header_6_6 = (long*)0x2772; /* Adr. des Zeigers auf Header 6*6 */ zeig_8_16 = (long*)0x607E; /* Adr. des Zeigers auf Daten 8*16 Font */ zeig_8_8 = (long*)0x41A8; /* Adr. des Zeigers auf Daten 8*8 Font */ } else if(*version == 0x04221987L) /* Blitter Tos ? */ { zeig_header_6_6 = (long*)0x27D2; zeig_8_16 = (long*)0x8820; zeig_8_8 = (long*)0x694A; } else if((*version & 0xFFFFL) == 0x1989L) /* Tos 1.4 ? */ { zeig_header_6_6 = (long*)0x2914; zeig_8_16 = (long*)0x5672; zeig_8_8 = (long*)0x5316; } else tos_version = FALSE; if (tos_version) { header_tab = get_header(); /* LINEA - Aufruf, Zeiger auf Tabelle */ /* der Fontheader erfragen */ /* alle Header ins RAM kopieren */ header = (long*) *header_tab; /* 6*6 Header ins RAM */ for (i=0 ; i < 22 ; head_6_6[i] = header[i],i++); header = (long*) *(header_tab+1); /* 8*8 Header ins RAM */ for (i=0 ; i < 22 ; head_8_8[i] = header[i],i++); header = (long*) *(header_tab+2) ; /* 8*16 Header ins RAM */ for (i=0 ; i < 22 ; head_8_16[i] = header[i],i++); *zeig_header_6_6 = (long) head_6_6; /* Zeiger auf 6*6 Header zeigt nun auf Header im RAM */ zeig_6_6 = head_6_6+FONT_DAT; /* Adr. des Zeigers auf Daten 6*6 Font */ sys_8_16 = (BYTE*) head_8_16[FONT_DAT]; /* Adr. des 8*16 Systemfont */ sys_8_8 = (BYTE*) head_8_8[FONT_DAT]; /* Adr. des 8*8 Systemfont */ sys_6_6 = (BYTE*) head_6_6[FONT_DAT]; /* Adr. des 6*6 Systemfont */ } /* MFDBs vorbelegen */ mfdb_8_16.fd_addr = font_8_16; /* 8*16 Font */ mfdb_8_8.fd_addr = font_8_8; /* 8*8 Font */ mfdb_6_6.fd_addr = font_6_6; /* 6*6 Font */ mfdb_rette.fd_addr = rette; /* Zwischenspeicher */ return(tos_version); } /*---------------------------------------------------------- load_font(); Zeichenstze aus DEFAULT.FNT lesen und aktivieren. Wenn nicht vorhanden Systemfonts laden. ----------------------------------------------------------*/ void load_font(void) { int i,anzahl; BYTE fonts; int file_handle; DTA finfo; fonts = FALSE; /* Merker keine Fonts galaden */ /* Versuch DEFAULT.FNT zu laden */ if (dfind(&finfo,"DEFAULT.FNT",0) == 0) if (finfo.d_length == 7296) { if ((file_handle = Fopen("DEFAULT.FNT",O_RDONLY)) >= 0) { anzahl = (int)Fread(file_handle,7296L,font_8_16); if (anzahl != 7296) show_alert(DERROR,1); else { fonts = TRUE; strcpy(name_8_16,"DEFAULT .F16"); strcpy(name_8_8,"DEFAULT .FN8"); strcpy(name_6_6,"DEFAULT .FN6"); objc_change(tree,USE816,0,0,0,640,400,SELECTED,0); objc_change(tree,USE88,0,0,0,640,400,SELECTED,0); objc_change(tree,USE66,0,0,0,640,400,SELECTED,0); on_8_16(); on_8_8(); on_6_6(); } } Fclose (file_handle); } if (fonts == FALSE) { for (i=0 ; i < 256*16 ; font_8_16[i] = sys_8_16[i],i++); strcpy(name_8_16,"SYSTEM .F16"); for (i=0 ; i < 256*8 ; font_8_8[i] = sys_8_8[i],i++); strcpy(name_8_8,"SYSTEM .FN8"); for (i=0 ; i < 192*6 ; font_6_6[i] = sys_6_6[i],i++); strcpy(name_6_6,"SYSTEM .FN6"); } edit_flag = GROSS; /* erstmal grossen FONT editieren */ use_name(GROSS); /* Fontanamen eintragen */ } /*---------------------------------------------------------- init_coords(): Koordinaten der EDIT-Objekte bestimmen ----------------------------------------------------------*/ void init_coords(void) { objc_offset(tree,ANZEIGE,&anz_x,&anz_y); /* Koordinaten fr Ausgabe im */ anz_x += 8; /* Anzeigefeld */ objc_offset(tree,EDITFELD,&ed_x,&ed_y); /* Koordinaten des Editfeldes */ ed_x += 4 ; ed_y += 4; objc_offset(tree,SHOW,&show_x,&show_y); /* Koordinaten des kleinen */ show_x += 6 ; show_y += 7; /* Anzeigefeldes */ objc_offset(tree,ASCII,&asc_x,&asc_y); /* Koor. der ASCII-Num. Anz. */ asc_x +=5; asc_y += 9; } /*########################################################## Hilfsprogramme fr die Auswertung der Buttons ##########################################################*/ /*---------------------------------------------------------- ok_edit(): Editiertes Zeichen bernehmen ----------------------------------------------------------*/ void ok_edit(void) { /* graf_shrinkbox(ed_x + 28,ed_y + 56,8,16,ed_x,ed_y,65,129); */ graf_movebox(8,16,ed_x + 28,ed_y + 56,anz_x + (edit_it / 16) * 16, anz_y + (edit_it % 16) * 16); ent_buffer(edit_it,edit_flag); mouse_off; zeig_char(edit_it,edit_flag); mouse_on; edit_it = 256; show_all(256,edit_flag); edit_status(DISABLED); } /*---------------------------------------------------------- undo_edit(): Editiertes Zeichen verwerfen ----------------------------------------------------------*/ void undo_edit(void) { edit_it = 256; show_all(256,edit_flag); edit_status(DISABLED); } /*---------------------------------------------------------- get_asc(x,y): Zeichen auf das die Maus in der Anzeige zeigt bestimmen 256: Maus zeigt auf kein Zeichen nach *x,*y wird die Koorinate des Zeichens auf dem Bildschirm bergeben ----------------------------------------------------------*/ int get_asc(int *x,int *y) { int mx,my,tasten,result; *x = *y = 0; vq_mouse(handle,&tasten,&mx,&my); /* Maus im Anzeigefeld ? */ if ((mx < anz_x) || (mx > anz_x + 16 * 16 - 8) || (my < anz_y) || (my > anz_y + 16 * 16)) result = 256; else { mx -= anz_x; my -= anz_y; /* Anzeigefeld in Nullpunkt ver. */ /* Maus zwischen den Spalten ? */ if (((mx /= 8) & 1) != 0) result = 256; else { result = (mx /= 2) * 16 + (my /= 16); /* Maus steht richtig */ *x = anz_x + mx * 16; *y = anz_y + my * 16; } } return(result); } /*########################################################## Hier folgen die Unterprogramme, die die verschiedenen BUTTONS auswerten ##########################################################*/ /*---------------------------------------------------------- edit(font): Font auswhlen ----------------------------------------------------------*/ void edit(int font) { if (edit_it != 256) undo_edit(); edit_flag = font; zeig_an(font); show_all(edit_it,edit_flag); /* Anzeigen lschen */ use_name(font); objc_draw(tree,FONTNAME,1,0,0,640,400); /* Fontnamen neu malen */ switch (font) /* Knopf selecten */ { case GROSS: objc_change(tree,EDIT816,0,0,0,640,400,SELECTED,1); objc_change(tree,EDIT88 ,0,0,0,640,400,NORMAL,1); objc_change(tree,EDIT66 ,0,0,0,640,400,NORMAL,1); break; case MITTEL: objc_change(tree,EDIT816,0,0,0,640,400,NORMAL,1); objc_change(tree,EDIT88 ,0,0,0,640,400,SELECTED,1); objc_change(tree,EDIT66 ,0,0,0,640,400,NORMAL,1); break; case KLEIN: objc_change(tree,EDIT816,0,0,0,640,400,NORMAL,1); objc_change(tree,EDIT88 ,0,0,0,640,400,NORMAL,1); objc_change(tree,EDIT66 ,0,0,0,640,400,SELECTED,1); break; } } /*---------------------------------------------------------- edit_copy(): Zeichen im Anzeigefenster editieren oder kopieren ----------------------------------------------------------*/ void edit_copy(void) { int asc1,asc2,x1,y1,x2,y2,x3,y3,coords[8]; int get_asc(); if (edit_it == 256) { if ((asc1 = get_asc(&x1,&y1)) == 256); /* kein Zeichen -> fertig */ else { graf_dragbox(8,16,x1,y1,anz_x,anz_y,31*8,16*16,&x3,&y3); if ((asc2 = get_asc(&x2,&y2)) == 256) graf_movebox(8,16,x3,y3,x1,y1); /* kein Zeichen -> Box zurck */ else if (asc1 == asc2) /* gleiches Zeichen -> editieren */ { edit_it = asc1; graf_movebox(8,16,x1,y1,ed_x + 28,ed_y + 56); graf_growbox(ed_x + 28,ed_y + 56,8,16,ed_x,ed_y,65,129); buffer(asc1,edit_flag); /* Zeichen in 'rette' Buffer */ show_all(asc1,edit_flag); /* und alles Anzeigen */ edit_status(NORMAL); } else { /* Zeichen kopieren */ switch (edit_flag) { case GROSS: coords[0] = asc1 * 8; coords[1] = 0; coords[2] = coords[0] + 7; coords[3] = 15; coords[4] = asc2 * 8; coords[5] = 0; coords[6] = coords[4] + 7; coords[7] = 15; vro_cpyfm(handle,3,coords,&mfdb_8_16,&mfdb_8_16); break; case MITTEL: coords[0] = asc1 * 8; coords[1] = 0; coords[2] = coords[0] + 7; coords[3] = 7; coords[4] = asc2 * 8; coords[5] = 0; coords[6] = coords[4] + 7; coords[7] = 7; vro_cpyfm(handle,3,coords,&mfdb_8_8,&mfdb_8_8); break; case KLEIN: coords[0] = asc1 * 6; coords[1] = 0; coords[2] = coords[0] + 5; coords[3] = 5; coords[4] = asc2 * 6; coords[5] = 0; coords[6] = coords[4] + 5; coords[7] = 5; vro_cpyfm(handle,3,coords,&mfdb_6_6,&mfdb_6_6); break; } mouse_off; zeig_char(asc2,edit_flag); mouse_on; } } } } /*---------------------------------------------------------- load_system(font,button): Font ab Adresse rom_font der laenge "laenge" nach ram_font kopieren und BUTTON normalisieren ----------------------------------------------------------*/ void load_system(int font,int button) { int i; if (edit_it != 256) undo_edit(); if (show_alert(SYSLOAD,2) == 2) { switch (font) { case GROSS: for (i=0 ; i < 256*16 ; font_8_16[i] = sys_8_16[i],i++); strcpy(name_8_16,"SYSTEM .F16"); break; case MITTEL: for (i=0 ; i < 256*8 ; font_8_8[i] = sys_8_8[i],i++); strcpy(name_8_8,"SYSTEM .FN8"); break; case KLEIN: for (i=0 ; i < 192*6 ; font_6_6[i] = sys_6_6[i],i++); strcpy(name_6_6,"SYSTEM .FN6"); break; } edit(font); /* Font Anzeigen */ } objc_change(tree,button,0,0,0,640,400,NORMAL,1); } /*---------------------------------------------------------- load_system_all(): Alle Systemfonts ins RAMs kopieren ----------------------------------------------------------*/ void load_all_system(void) { int i; if (edit_it != 256) undo_edit(); if (show_alert(SYSLOAD,2) == 2) { for (i=0 ; i < 256*16 ; font_8_16[i] = sys_8_16[i],i++); for (i=0 ; i < 256*8 ; font_8_8[i] = sys_8_8[i],i++); for (i=0 ; i < 192*6 ; font_6_6[i] = sys_6_6[i],i++); strcpy(name_8_16,"SYSTEM .F16"); strcpy(name_8_8,"SYSTEM .FN8"); strcpy(name_6_6,"SYSTEM .FN6"); edit(GROSS); } objc_change(tree,SYSALL,0,0,0,640,400,NORMAL,1); } /*---------------------------------------------------------- use_change(mode,button): Alle oder keinen Font benutzen ----------------------------------------------------------*/ void use_change(int mode,int button) { objc_change(tree,USE816,0,0,0,640,400,mode,1); objc_change(tree,USE88 ,0,0,0,640,400,mode,1); objc_change(tree,USE66 ,0,0,0,640,400,mode,1); objc_change(tree,button,0,0,0,640,400,NORMAL,1); } /*---------------------------------------------------------- male(): Setzen oder lschen von Punktem mit der Maus ----------------------------------------------------------*/ void male(void) { int breite,hoehe,null_x,null_y; int status,mx,my; int first,set_mode; if (edit_it < 256) { first = TRUE; set_mode = 1; /* Setz-Modus vorbelegen */ switch (edit_flag) /* je nach Font groesse Raster best. */ { case GROSS: null_x = ed_x; null_y = ed_y; breite = 8 * 8; hoehe = 16 * 8; break; case MITTEL: null_x = ed_x; null_y = ed_y + 4 * 8; breite = hoehe = 8 * 8; break; case KLEIN: null_x = ed_x + 8; null_y = ed_y + 5 * 8; breite = hoehe = 6 * 8; break; } do { /* Punkt bestimmen */ vq_mouse(handle,&status,&mx,&my); mx -= null_x; my -= null_y; if ((mx > 0) && (my > 0) && (mx < breite) && (my < hoehe)) { mx /= 8; my /= 8; /* mx und my sind die Koord. des Punktes */ /* Zeichenmodus bestimmen */ if (first && point(mx,my)) set_mode = 0; first = FALSE; /* Punkt setzen bzw. lschen */ set(mx,my,set_mode); platsch(mx,my,set_mode,edit_flag); show_org(edit_flag); } } while ((status & 3) != 0); } } /*---------------------------------------------------------- show_it(button): nach einer Manipulation zeichen neu darstellen ----------------------------------------------------------*/ void show_it(int button) { show_org(edit_flag); paint(edit_it,edit_flag); objc_change(tree,button,0,0,0,640,400,NORMAL | OUTLINED,1); } /*---------------------------------------------------------- clr_fill(art,button;): Zeichen lschen oder schwarz malen ----------------------------------------------------------*/ void clr_fill(int art,int button) { int i; for (i=0 ; i < 16 ; rette[i++] = art); show_it(button); } /*---------------------------------------------------------- invers_it(): Zeichen invertieren ----------------------------------------------------------*/ void invers_it(void) { int i; for (i=0; i < 16 ; rette[i] = ~rette[i],i++); show_it(INVERS); } /*---------------------------------------------------------- kopf(): Zeichen auf den Kopf stellen ----------------------------------------------------------*/ void kopf(void) { int i,help,ymax; switch (edit_flag) { case GROSS: ymax = 15; break; case MITTEL: ymax = 7; break; case KLEIN: ymax = 5; break; } for (i=0 ; i <= ymax/2 ; i++) { help = rette[i]; rette[i] = rette[ymax - i]; rette[ymax - i] = help; } show_it(ASPIEGEL); } /*---------------------------------------------------------- spiegel(): Zeichen spiegeln ----------------------------------------------------------*/ void spiegel(void) { int xmax,x,y,schiebe; if (edit_flag != KLEIN) { xmax = 8; schiebe = 8;} else { xmax = 6; schiebe = 10;} for (y=0; y < 16 ; y++) { for (x=0; x < xmax; x++) if (point(x,y)) set(15 - x,y,1); else set(15 - x,y,0); rette[y] = rette[y] << schiebe; } show_it(ESPIEGEL); } /*---------------------------------------------------------- hell(): Zeichen aufhellen ----------------------------------------------------------*/ void hell(void) { int y; for (y=0; y < 16; rette[y++] &= 0x5555,rette[y++] &= 0xAAAA); show_it(LIGHT); } /*---------------------------------------------------------- turn_it(): Zeichen drehen ----------------------------------------------------------*/ void turn_it(void) { int schiebe,x,y; if (edit_flag == MITTEL) schiebe = 8; else schiebe = 10; for (y=0 ; y < 8 ; y++) for (x=0; x < 8 ; x++) if (point(x,y)) set(15-y,x,1); else set(15-y,x,0); for (y=0 ; y < 8 ; rette[y] = rette[y] << schiebe,y++); show_it(DREHE); } /*---------------------------------------------------------- left(),right(),down(),up(): Unterprogramme um ein Zeichen um ein Dot zu verschieben ----------------------------------------------------------*/ void up(void) { int y; for (y=0; y < 15 ; rette[y] = rette[y+1],y++); switch(edit_flag) { case GROSS: rette[15] = 0; break; case MITTEL: rette[7] = 0; break; case KLEIN: rette[5] = 0; break; } show_it(CLR); } void down(void) { int y; for (y=15; y > 0 ; rette[y] = rette[y-1],y--); rette[0] = 0; show_it(CLR); } void left(void) { int y,breite; if (edit_flag == KLEIN) breite = 5; else breite = 7; for (y=0; y < 16 ; rette[y] = rette[y] << 1,set(breite,y,0),y++); show_it(CLR); } void right(void) { int y; for (y=0; y < 16 ; rette[y] = rette[y] >> 1,set(0,y,0),y++); show_it(CLR); } /*########################################################## Unterprogramme fuer LOAD und SAVE der Fonts ##########################################################*/ /*========================================================== get_filename(path,file,button); erfragt einen Filename path: Pfadname mit Wildcards file: Default Filename button: 0=Abbruch 1=OK Rckgabe 0, wenn Fehler ==========================================================*/ int get_filename(char *path,char *file,int *button) { int err; err = fsel_input(path,file,button); objc_draw(tree,0,8,0,0,640,400); show_all(edit_it,edit_flag); return(err); } /*========================================================== speicher(font,ext,name): font = KLEIN, GROSS, MITTEL oder ALLES ext = "F16" z.B. name = aktuelle Zeichensatzname Speichert einen oder alle Fonts auf Diskette ab ==========================================================*/ void speicher(int font,char *ext,char *name) { int button,file_handle,err; int anzahl; char such[6],file_name[13]; strmfe(file_name,name,ext); strcpy(such,"*."); strcat(such,ext); strmfe(path_name,path_name,ext); err = get_filename(path_name,file_name,&button); zeig_an(edit_flag); if (err == 0) show_alert(DERROR,1); else if (button == 1) { strmfe(file_name,file_name,ext); stcgfp(akt_file,path_name); strcat(akt_file,"\\"); strcat(akt_file,file_name); graf_mouse(255,&maus_disk); if ((file_handle = Fcreate(akt_file,0)) < 0) show_alert(DERROR,1); else switch (font) { case GROSS: anzahl = (int)Fwrite(file_handle,4096L,font_8_16); if (anzahl != 4096) show_alert(DERROR,1); else get_name(name_8_16,akt_file); break; case MITTEL: anzahl = (int)Fwrite(file_handle,2048L,font_8_8); if (anzahl != 2048) show_alert(DERROR,1); else get_name(name_8_8,akt_file); break; case KLEIN: anzahl = (int)Fwrite(file_handle,1152L,font_6_6); if (anzahl != 1152) show_alert(DERROR,1); else get_name(name_6_6,akt_file); break; case ALLES: anzahl = (int)Fwrite(file_handle,7296L,font_8_16); if (anzahl != 7296) show_alert(DERROR,1); else { get_name(name_8_16,akt_file); strmfe(name_8_16,name_8_16,"F16"); get_name(name_8_8,akt_file); strmfe(name_8_8,name_8_8,"FN8"); get_name(name_6_6,akt_file); strmfe(name_6_6,name_6_6,"FN6"); } break; } Fclose(file_handle); } objc_change(tree,SAVE816,0,0,0,640,400,NORMAL,1); objc_change(tree,SAVE88,0,0,0,640,400,NORMAL,1); objc_change(tree,SAVE66,0,0,0,640,400,NORMAL,1); objc_change(tree,SAVEALL,0,0,0,640,400,NORMAL,1); use_name(edit_flag); objc_draw(tree,FONTNAME,1,0,0,640,400); graf_mouse(0,&maus_disk); } /*========================================================== lade(font,ext,laenge): font = KLEIN, MITTEL, GROSS oder ALLES ext = "F16" z.B. laenge = Dateilnge ldt einen oder alle Fonts von Diskette ===========================================================*/ void lade(int font,char *ext,int laenge) { int button,file_handle; int anzahl; char file[14]; DTA finfo; if (edit_it != 256) undo_edit(); strmfe(path_name,path_name,ext); file[0] = '\0'; if (get_filename(path_name,file,&button) == 0) { zeig_an(edit_flag); show_alert(DERROR,1); } else if (button == 1) { stcgfp(akt_file,path_name); strcat(akt_file,"\\"); strcat(akt_file,file); graf_mouse(255,&maus_disk); if (dfind(&finfo,akt_file,0) != 0) { zeig_an(edit_flag); show_alert(NOTFOUND,1); } else if (finfo.d_length != laenge) { zeig_an(edit_flag); show_alert(NOTLANG,1); } else if ((file_handle = Fopen(akt_file,O_RDONLY)) < 0) { zeig_an(edit_flag); show_alert(DERROR,1); } else switch (font) { case GROSS: anzahl = (int)Fread(file_handle,(long)laenge,font_8_16); if (anzahl != laenge) { zeig_an(edit_flag); show_alert(DERROR,1); } else { get_name(name_8_16,akt_file); strmfe(name_8_16,name_8_16,ext); edit(GROSS); } break; case MITTEL: anzahl = (int)Fread(file_handle,(long)laenge,font_8_8); if (anzahl != laenge) { zeig_an(edit_flag); show_alert(DERROR,1); } else { get_name(name_8_8,akt_file); strmfe(name_8_8,name_8_8,ext); edit(MITTEL); } break; case KLEIN: anzahl = (int)Fread(file_handle,(long)laenge,font_6_6); if (anzahl != laenge) { zeig_an(edit_flag); show_alert(DERROR,1); } else { get_name(name_6_6,akt_file); strmfe(name_6_6,name_6_6,ext); edit(KLEIN); } break; case ALLES: anzahl = (int)Fread(file_handle,(long)laenge,font_8_16); if (anzahl != laenge) { zeig_an(edit_flag); show_alert(DERROR,1); } else { get_name(name_8_16,akt_file); strmfe(name_8_16,name_8_16,"F16"); get_name(name_8_8,akt_file); strmfe(name_8_8,name_8_8,"FN8"); get_name(name_6_6,akt_file); strmfe(name_6_6,name_6_6,"FN6"); edit(GROSS); } break; } Fclose (file_handle); } else zeig_an(edit_flag); objc_change(tree,LOAD816,0,0,0,640,400,NORMAL,1); objc_change(tree,LOAD88,0,0,0,640,400,NORMAL,1); objc_change(tree,LOAD66,0,0,0,640,400,NORMAL,1); objc_change(tree,LOADALL,0,0,0,640,400,NORMAL,1); graf_mouse(0,&maus_disk); } /*========================================================== Beispieltext ausgeben ==========================================================*/ void zeige1_probe(void) { int coords[4],maus,dummy; char zeile1[25],zeile2[25],zeile3[25]; vsf_color(handle,0); mouse_off; coords[0] = anz_x; coords[1] = anz_y; coords[2] = anz_x + 16 * 16 - 9; coords[3] = anz_y + 16 * 16 - 1; vr_recfl(handle,coords); strcpy(zeile1,"Dies ist ein Probetext!"); strcpy(zeile2,"DIES IST EIN PROBETEXT!"); strcpy(zeile3,"0123456789 !$%&()=?*+"); vst_height(handle,GROSS,&dummy,&dummy,&dummy,&dummy); v_gtext(handle,anz_x+44,anz_y+25,"Probetexte gefllig?"); on_8_16(); on_8_8(); on_6_6(); v_gtext(handle,anz_x+32,anz_y+66,zeile1); v_gtext(handle,anz_x+32,anz_y+82,zeile2); v_gtext(handle,anz_x+32,anz_y+98,zeile3); vst_height(handle,MITTEL,&dummy,&dummy,&dummy,&dummy); v_gtext(handle,anz_x+32,anz_y+140,zeile1); v_gtext(handle,anz_x+32,anz_y+148,zeile2); v_gtext(handle,anz_x+32,anz_y+156,zeile3); vst_height(handle,KLEIN,&dummy,&dummy,&dummy,&dummy); v_gtext(handle,anz_x+32,anz_y+200,zeile1); v_gtext(handle,anz_x+32,anz_y+206,zeile2); v_gtext(handle,anz_x+32,anz_y+212,zeile3); off_8_16(); off_8_8(); off_6_6(); vst_height(handle,MITTEL,&dummy,&dummy,&dummy,&dummy); v_gtext(handle,anz_x+32,anz_y+240,"weiter mit Mausklick!"); do vq_mouse(handle,&maus,&dummy,&dummy); while (maus != 0); do vq_mouse(handle,&maus,&dummy,&dummy); while (maus == 0); objc_change(tree,PROBE1,0,0,0,640,400,NORMAL,1); zeig_an(edit_flag); mouse_on; do vq_mouse(handle,&maus,&dummy,&dummy); while (maus != 0); } void zeige2_probe(void) { int coords[4],maus,xk,yk,sx,sy,sanf,zeichen,dummy; char stext[2]; objc_offset(tree,FONTNAME,&coords[0],&coords[1]); coords[0] += 3; coords[1] += 2; coords[2] = coords[0] + 20*8; coords[3] = coords[1] + 18; mouse_off; vsf_color(handle,0); vr_recfl(handle,coords); mouse_on; sx = sanf = coords[0] + 7; sy = coords[1] + 13; vst_height(handle,MITTEL,&dummy,&dummy,&dummy,&dummy); mouse_off; v_gtext(handle,sx+4,sy+18,"Probetext eingeben"); mouse_on; vst_height(handle,edit_flag,&dummy,&dummy,&dummy,&dummy); do vq_mouse(handle,&maus,&xk,&yk); while (maus != 0); do { mouse_off; v_gtext(handle,sx,sy,"_"); mouse_on; do vq_mouse(handle,&maus,&xk,&yk); while (maus == 0); if ((zeichen = get_asc(&dummy,&dummy)) < 256) { if (zeichen == 0) { vr_recfl(handle,coords); sx = sanf; } else { stext[0] = (char)zeichen; stext[1] = (char)0; mouse_off; on_8_16(); on_8_8(); on_6_6(); v_gtext(handle,sx,sy,stext); off_8_16(); off_8_8(); off_6_6(); mouse_on; if (edit_flag == KLEIN) sx += 6; else sx += 8; if (sx > sanf + 18*8) sx = sanf; do vq_mouse(handle,&maus,&xk,&yk); while (maus != 0); } } } while((xk < coords[0]) || (xk > coords[2]) || (yk < coords[1]) || (yk > coords[3])); objc_draw (tree,FONTNAME,1,0,0,640,400); coords[0] += 12; coords[1] += 22; coords[2] = coords[0] + 20*8; coords[3] = coords[1] + 10; mouse_off; vr_recfl(handle,coords); objc_change(tree,PROBE2,0,0,0,640,400,NORMAL,1); mouse_on; do vq_mouse(handle,&maus,&xk,&yk); while (maus != 0); } /*########################################################## do_edit: wertet Formular bei Accessorie-Aufruf aus ##########################################################*/ void do_edit(void) { int exit_but; off_8_16(); /* alle User-Fonts aus */ off_8_8(); off_6_6(); show_edit(tree); /* Formular darstellen */ graf_mouse(0,&maus_disk); init_coords(); /* Koordinaten bestimmen */ zeig_an(edit_flag); show_all(edit_it,edit_flag); /* Anzeigen darstellen */ do { exit_but = form_do(tree,0) & 0x7FFF; /* Button abfragen */ switch (exit_but) { case ANZEIGE: edit_copy(); /* Maus im Anzeigefeld */ break; case OK: ok_edit(); /* Zeichen bernehmen */ break; case UNDO: undo_edit(); /* Zeichen verwerfen */ break; /* Systemfonts bertragen */ case SYS816: load_system(GROSS,exit_but); break; case SYS88: load_system(MITTEL,exit_but); break; case SYS66: load_system(KLEIN,exit_but); break; case SYSALL: load_all_system(); break; /* Aktivierung abfragen */ case USEALL: use_change(SELECTED,exit_but); break; case USENONE: use_change(NORMAL,exit_but); break; /* Font auswhlen */ case EDIT816: if (edit_flag != GROSS) edit(GROSS); break; case EDIT88: if (edit_flag != MITTEL) edit(MITTEL); break; case EDIT66: if (edit_flag != KLEIN) edit(KLEIN); break; case EDITFELD: male(); /* Zeichen editieren */ break; case CLR: clr_fill(0,CLR); /* Zeichen lschen */ break; case FILL: clr_fill(0xFFFF,FILL); /* Zeichen schwarz */ break; case INVERS: invers_it(); /* Zeichen invertieren */ break; case ASPIEGEL: kopf(); /* Zeichen auf den Kopf */ break; case ESPIEGEL: spiegel(); /* Zeichen spiegeln */ break; case LIGHT: hell(); /* Zeichen aufhellen */ break; case DREHE: turn_it(); /* Zeichen drehen */ break; case HOCH: if (edit_it < 256) up(); /* Zeichen hoch */ break; case RUNTER: if (edit_it < 256) down(); /* Zeichen runter */ break; case LINKS: if (edit_it < 256) left(); /* Zeichen links */ break; case RECHTS: if (edit_it < 256) right(); /* Zeichen rechts */ break; case SAVE816: speicher(GROSS,"F16",name_8_16); break; case SAVE88: speicher(MITTEL,"FN8",name_8_8); break; case SAVE66: speicher(KLEIN,"FN6",name_6_6); break; case SAVEALL: speicher(ALLES,"FNT",name_8_16); break; case LOAD816: lade(GROSS,"F16",4096); break; case LOAD88: lade(MITTEL,"FN8",2048); break; case LOAD66: lade(KLEIN,"FN6",1152); break; case LOADALL: lade(ALLES,"FNT",7296); break; case PROBE1: zeige1_probe(); break; case PROBE2: zeige2_probe(); break; case DIRK: case DIRK1: case DIRK2: case DIRK3: case DIRK4: form_alert(1,"[1][FontEdit ist von:| " "|Dirk Woitha|" "Hebbelstr. 11|5630 Remscheid 11]" "[ ach der ]"); break; } } while (exit_but != AUSGANG); if (get_status((long)tree,USE816) == SELECTED) on_8_16(); if (get_status((long)tree,USE88) == SELECTED) on_8_8(); if (get_status((long)tree,USE66) == SELECTED) on_6_6(); close_edit(tree); /* Formular abbauen */ objc_change(tree,AUSGANG,0,0,0,640,400,NORMAL | OUTLINED,0); } /*########################################################## main: GEM, VDI und Accessorie anmelden und auf Event warten ##########################################################*/ void main() { int app_id,menu_id; int msg_buf[8]; int gr_1,gr_2,gr_3,gr_4; int work_in[12],work_out[57]; int i; /* -------- GEM initialisieren -------- */ app_id = appl_init(); handle = graf_handle(&gr_1,&gr_2,&gr_3,&gr_4); for (i=0; i<10; i++) work_in[i] = 1; work_in[10] = 2; v_opnvwk(work_in,&handle,work_out); /* -------- Linienmuster setzen -------- */ vsl_udsty(handle,0x5555); vsl_type(handle,7); /* -------- Resource laden -------- */ if (rsrc_load("FONTEDIT.RSC") == FALSE) { form_alert(1,"[3][Merke:| |Ohne Resource-File|kein FontEdit!][ WRG ]"); while(TRUE) evnt_mesag(msg_buf); } /* -------- FONT-Daten initialisieren -------- */ if (init_font() == FALSE) { show_alert (TOSVERS,1); while(TRUE) evnt_mesag(msg_buf); } /* ------- Adresse des Hauptbaums bstimmen ------- */ rsrc_gaddr(R_TREE,FONTEDIT,&tree); /* -------- Zeichensatz aus DEFAULT.FNT lesen ------ */ load_font(); /* -------- Bei Farbe ist hier schluss ! -------- */ if (Getrez() != 2) while(TRUE) evnt_mesag(msg_buf); /* -------- Accessorie anmelden -------- */ menu_id = menu_register(app_id," +++ FontEdit +++"); /* -------- aktuelles Drive vorbelegen ----------*/ path_name[0] = (char) (Dgetdrv() + 0x41); path_name[1] = '\0'; strcat(path_name,":\\*.FNT"); /* -------- auf Event warten -------- */ while(TRUE) { evnt_mesag(msg_buf); if(msg_buf[0] == AC_OPEN && msg_buf[4] == menu_id) { wind_update(BEG_MCTRL); do_edit(); wind_update(END_MCTRL); } } } 4FONTEDITANZEIGELOAD816LOAD88LOAD66LOADALL#SAVE816$SAVE88%SAVE66&SAVEALL*SYS816+SYS88,SYS66-SYSALL1USE8162USE883USE664USEALL5USENONE9EDIT816:EDIT88;EDIT66=ESPIEGEL>CLREGEL?FILLGEL@DREHEELBRUNTERLCHOCHRLDLINKSLERECHTSLFASPIEGELGLIGHTELHINVERSLIEDITFELDKSHOWELDLASCIILDMOKIILDNUNDOLDOAUSGANGPFONTNAMESYSLOADTOSVERSDERRORNOTFOUNDNOTLANGQPROBE1RPROBE2DIRKDIRK1DIRK2DIRK3DIRK4#define FONTEDIT 0 /* TREE */ #define ANZEIGE 8 /* OBJECT in TREE #0 */ #define LOAD816 28 /* OBJECT in TREE #0 */ #define LOAD88 29 /* OBJECT in TREE #0 */ #define LOAD66 30 /* OBJECT in TREE #0 */ #define LOADALL 31 /* OBJECT in TREE #0 */ #define SAVE816 35 /* OBJECT in TREE #0 */ #define SAVE88 36 /* OBJECT in TREE #0 */ #define SAVE66 37 /* OBJECT in TREE #0 */ #define SAVEALL 38 /* OBJECT in TREE #0 */ #define SYS816 42 /* OBJECT in TREE #0 */ #define SYS88 43 /* OBJECT in TREE #0 */ #define SYS66 44 /* OBJECT in TREE #0 */ #define SYSALL 45 /* OBJECT in TREE #0 */ #define USE816 49 /* OBJECT in TREE #0 */ #define USE88 50 /* OBJECT in TREE #0 */ #define USE66 51 /* OBJECT in TREE #0 */ #define USEALL 52 /* OBJECT in TREE #0 */ #define USENONE 53 /* OBJECT in TREE #0 */ #define EDIT816 57 /* OBJECT in TREE #0 */ #define EDIT88 58 /* OBJECT in TREE #0 */ #define EDIT66 59 /* OBJECT in TREE #0 */ #define ESPIEGEL 61 /* OBJECT in TREE #0 */ #define CLR 62 /* OBJECT in TREE #0 */ #define FILL 63 /* OBJECT in TREE #0 */ #define DREHE 64 /* OBJECT in TREE #0 */ #define RUNTER 66 /* OBJECT in TREE #0 */ #define HOCH 67 /* OBJECT in TREE #0 */ #define LINKS 68 /* OBJECT in TREE #0 */ #define RECHTS 69 /* OBJECT in TREE #0 */ #define ASPIEGEL 70 /* OBJECT in TREE #0 */ #define LIGHT 71 /* OBJECT in TREE #0 */ #define INVERS 72 /* OBJECT in TREE #0 */ #define EDITFELD 73 /* OBJECT in TREE #0 */ #define SHOW 75 /* OBJECT in TREE #0 */ #define ASCII 76 /* OBJECT in TREE #0 */ #define OK 77 /* OBJECT in TREE #0 */ #define UNDO 78 /* OBJECT in TREE #0 */ #define AUSGANG 79 /* OBJECT in TREE #0 */ #define FONTNAME 80 /* OBJECT in TREE #0 */ #define SYSLOAD 0 /* STRING */ #define TOSVERS 1 /* STRING */ #define DERROR 2 /* STRING */ #define NOTFOUND 3 /* STRING */ #define NOTLANG 4 /* STRING */ #define PROBE1 81 /* OBJECT in TREE #0 */ #define PROBE2 82 /* OBJECT in TREE #0 */ #define DIRK 1 /* OBJECT in TREE #0 */ #define DIRK1 2 /* OBJECT in TREE #0 */ #define DIRK2 3 /* OBJECT in TREE #0 */ #define DIRK3 24 /* OBJECT in TREE #0 */ #define DIRK4 4 /* OBJECT in TREE #0 */  ; DEFAULT.PRJ for use with single module programs ; ------------------------------------------------- c:\fontedit.acc ; name of executable pgm is topmost window = ; list of modules follows... tcstart.o ; startup code source\fontedit\fontedit.c source\fontedit\fonthelp.s ;tcfltlib.lib ; floating point lib tcstdlib.lib ; standard lib tcextlib.lib ; extended lib tctoslib.lib ; TOS lib tcgemlib.lib ; AES and VDI lib ; remove unused libraries to speed up linking! `$lH / /<(?< ?<NMP#h _LNu"o3FT/IHz @/9hNu49F|fCNsH?>?<NNT#|g #*|:BmBm;|f ;y "<0<sNBL|Nu,@Thandlehead_6_6head_8_8head_8_1get_headmelde_fo\a_neu(L_ADRha_retFa_endZf_tabintinheader_ocontrlvdidatintout,ptsin@ptsoutT ; ; Hilfsroutinen fr das FONTEDIT.ACC in Assembler ; GLOBL get_header,melde_font GLOBL handle,head_6_6,head_8_8,head_8_16 ;------------------------------------------------------------------ ; LINE A aufrufen um Adresse der Fontheadertabelle zu bestimmen ; und neue LINE A Routine einbinden ;------------------------------------------------------------------ get_header: movem.l a2/d2,-(sp) dc.w $A000 move.l a1,-(sp) ; Adresse der alten Fonttabelle merken move.l #a_neu,-(sp) ; neuen Line A Vektor setzen move.w #10,-(sp) ; LINE A ist Vektor Nr. 10 move.w #5,-(sp) trap #13 add.l #8,sp move.l d0,L_ADR ; Adr. alte LINE A Routine merken move.l (sp)+,a0 ; Adr. der alten Fonttabelle zurckliefern movem.l (sp)+,a2/d2 rts ;------------------------------------------------------------------- ; neue LINE A Routine ;------------------------------------------------------------------- a_neu: move.l 2(sp),a1 ; den Line A Aufruf fr Simulation move.w (a1),a_ret ; kopieren addq.l #2,a1 move.l a1,2(sp) ; Rcksprung korrigieren pea a_ret(pc) ; Werte fr Simulation auf den Stack move.w sr,-(sp) move.l L_ADR,-(sp) ; und in alte Lina A Routine springen rts a_ret: dc.w 0 ; Platz fr Line A Aufruf move.w a_ret,d2 cmp.w #$A000,d2 bne a_end ; kein $A000 lea f_tab,a1 a_end: rte ;------------------------------------------------------------------- ; Systemfont anmelden 8*16 bei s/w - 8*8 bei Farbe ;------------------------------------------------------------------- melde_font: movem.l d2-d7/a2-a6,-(sp) move.w #4,-(sp) ; Auflsung bestimmen trap #14 addq.l #2,sp move.l #head_8_16,intin ; 8*16 vorbelegen cmp.w #2,d0 ; hohe Auflsung ? beq header_ok ; Dann ist alles klar move.l #head_8_8,intin ; sonst 8*8 Font nehmen header_ok: ; VDI esc 102 aufrufen move.l #contrl,a5 move.w #5,(a5) clr.w 2(a5) clr.w 6(a5) move.w #102,10(a5) move.w handle,12(a5) move.l #vdidat,d1 move.w #$73,d0 trap #2 movem.l (sp)+,d2-d7/a2-a6 rts ;-------------------------------------------------------------------- ; Daten und Felder fr VDI-Aufruf ;-------------------------------------------------------------------- DATA vdidat: dc.l contrl dc.l intin dc.l intout dc.l ptsin dc.l ptsout ; Neue Tabelle mit den Adressen der Fontheader f_tab: dc.l head_6_6 dc.l head_8_8 dc.l head_8_16 dc.l 0 BSS contrl: ds.w 12 intin: ds.w 10 intout: ds.w 10 ptsin: ds.w 10 ptsout: ds.w 10 ; Adresse der normalen LINE A Routine L_ADR: ds.l 1 end . j.. jFONTLOADC cFONTLOADPRJ b+FONTHELPS _; #include #include #include #include /*---------------------------------------------------------- Variablentypen ----------------------------------------------------------*/ #define BYTE unsigned char /*---------------------------------------------------------- Konstanten / Macros ----------------------------------------------------------*/ #define FALSE 0 #define TRUE !FALSE #define FONT_DAT 76 / 4 /* Nummer des Wortes im Fontheader das auf die Daten zeigt */ /*---------------------------------------------------------- Definition der Assemblerroutinen ----------------------------------------------------------*/ extern void melde_font(void); extern long *get_header(void); /*---------------------------------------------------------- globale Variablen ----------------------------------------------------------*/ int handle; /* Grafikhandle */ BYTE font_8_16[256*16]; /* Fontdaten */ BYTE font_8_8[256*8]; BYTE font_6_6[192*6]; long head_8_16[22]; /* Kopie der Fontheader im RAM */ long head_8_8[22]; long head_6_6[22]; long *zeig_header_6_6; /* Adr. des Zeigers auf den 6*6 Fontheader */ long *zeig_8_16; /* Adressen der Zeiger auf Fontdaten */ long *zeig_8_8; long *zeig_6_6; /*########################################################## Diverse Hilfsprogramme ##########################################################*/ /*---------------------------------------------------------- File auf Disk suchen ----------------------------------------------------------*/ int dfind(DTA *dtabuf,const char *fname,int attr) { int ret_wert; DTA *old_dta; old_dta = Fgetdta(); Fsetdta(dtabuf); ret_wert = (Fsfirst(fname,attr)); Fsetdta(old_dta); return(ret_wert); } /*---------------------------------------------------------- Zeichenstze ein- und ausschalten ----------------------------------------------------------*/ void on_8_16(void) { *zeig_8_16 = (long)font_8_16; head_8_16[FONT_DAT] = (long)font_8_16; melde_font(); } void on_8_8(void) { *zeig_8_8 = (long)font_8_8; head_8_8[FONT_DAT] = (long)font_8_8; melde_font(); } void on_6_6(void) { *zeig_6_6 = (long)font_6_6; *zeig_header_6_6 = (long)head_6_6; } /*########################################################## Unterprogramme fr die Programminitialisierung ##########################################################*/ /*---------------------------------------------------------- init_font: Bestimmt die Adressen der Zeiger auf die Fontdaten ----------------------------------------------------------*/ int init_font(void) { long *version = (long*)0xFC0018L; /* Zeiger auf Versionnummer TOS */ long *header; /* Adr. der Headers im ROM */ long *header_tab; /* Adr. der Fontheadertabelle */ int i,tos_version; tos_version = TRUE; if (Sversion() == 0x1600) /* KAOS TOS ? */ { zeig_header_6_6 = (long*)0x2914; zeig_8_16 = (long*)0x5672; zeig_8_8 = (long*)0x5316; } else if (*version == 0x02061986L) /* 520ST oder 1040ST ? */ { zeig_header_6_6 = (long*)0x2772; /* Adr. des Zeigers auf Header 6*6 */ zeig_8_16 = (long*)0x607E; /* Adr. des Zeigers auf Daten 8*16 Font */ zeig_8_8 = (long*)0x41A8; /* Adr. des Zeigers auf Daten 8*8 Font */ } else if(*version == 0x04221987L) /* Blitter Tos ? */ { zeig_header_6_6 = (long*)0x27D2; zeig_8_16 = (long*)0x8820; zeig_8_8 = (long*)0x694A; } else if((*version & 0xFFFFL) == 0x1989L) /* Tos 1.4 ? */ { zeig_header_6_6 = (long*)0x2914; zeig_8_16 = (long*)0x5672; zeig_8_8 = (long*)0x5316; } else tos_version = FALSE; if (tos_version) { header_tab = get_header(); /* LINEA - Aufruf, Zeiger auf Tabelle */ /* der Fontheader erfragen */ /* alle Header ins RAM kopieren */ header = (long*) *header_tab; /* 6*6 Header ins RAM */ for (i=0 ; i < 22 ; head_6_6[i] = header[i],i++); header = (long*) *(header_tab+1); /* 8*8 Header ins RAM */ for (i=0 ; i < 22 ; head_8_8[i] = header[i],i++); header = (long*) *(header_tab+2) ; /* 8*16 Header ins RAM */ for (i=0 ; i < 22 ; head_8_16[i] = header[i],i++); *zeig_header_6_6 = (long) head_6_6; /* Zeiger auf 6*6 Header zeigt nun auf Header im RAM */ zeig_6_6 = head_6_6+FONT_DAT; /* Adr. des Zeigers auf Daten 6*6 Font */ } return(tos_version); } /*---------------------------------------------------------- load_font(); Zeichenstze aus DEFAULT.FNT lesen und aktivieren. ----------------------------------------------------------*/ void load_font(void) { int anzahl; int file_handle; DTA finfo; /* Versuch DEFAULT.FNT zu laden */ if (dfind(&finfo,"DEFAULT.FNT",0) == 0) if (finfo.d_length == 7296) { if ((file_handle = Fopen("DEFAULT.FNT",O_RDONLY)) >= 0) { anzahl = (int)Fread(file_handle,7296L,font_8_16); if (anzahl == 7296) { on_8_16(); on_8_8(); on_6_6(); } } Fclose (file_handle); } } /*########################################################## main: GEM, VDI und Accessorie anmelden und auf Event warten ##########################################################*/ void main() { int msg_buf[8]; int gr_1,gr_2,gr_3,gr_4; int work_in[12],work_out[57]; int i; /* -------- GEM initialisieren -------- */ handle = graf_handle(&gr_1,&gr_2,&gr_3,&gr_4); for (i=0; i<10; i++) work_in[i] = 1; work_in[10] = 2; v_opnvwk(work_in,&handle,work_out); /* -------- FONT-Daten initialisieren -------- */ if (init_font() == FALSE) { while(TRUE) evnt_mesag(msg_buf); } /* -------- Zeichensatz aus DEFAULT.FNT lesen ------ */ load_font(); /* -------- Das wars dann ! -------- */ while(TRUE) evnt_mesag(msg_buf); } ; DEFAULT.PRJ for use with single module programs ; ------------------------------------------------- c:\fontload.acc ; name of executable pgm is topmost window = ; list of modules follows... tcstart.o ; startup code source\fontload\fontload.c source\fontload\fonthelp.s ;tcfltlib.lib ; floating point lib tcstdlib.lib ; standard lib tcextlib.lib ; extended lib tctoslib.lib ; TOS lib tcgemlib.lib ; AES and VDI lib ; remove unused libraries to speed up linking! ; ; Hilfsroutinen fr das FONTEDIT.ACC in Assembler ; GLOBL get_header,melde_font GLOBL handle,head_6_6,head_8_8,head_8_16 ;------------------------------------------------------------------ ; LINE A aufrufen um Adresse der Fontheadertabelle zu bestimmen ; und neue LINE A Routine einbinden ;------------------------------------------------------------------ get_header: movem.l a2/d2,-(sp) dc.w $A000 move.l a1,-(sp) ; Adresse der alten Fonttabelle merken move.l #a_neu,-(sp) ; neuen Line A Vektor setzen move.w #10,-(sp) ; LINE A ist Vektor Nr. 10 move.w #5,-(sp) trap #13 add.l #8,sp move.l d0,L_ADR ; Adr. alte LINE A Routine merken move.l (sp)+,a0 ; Adr. der alten Fonttabelle zurckliefern movem.l (sp)+,a2/d2 rts ;------------------------------------------------------------------- ; neue LINE A Routine ;------------------------------------------------------------------- a_neu: move.l 2(sp),a1 ; den Line A Aufruf fr Simulation move.w (a1),a_ret ; kopieren addq.l #2,a1 move.l a1,2(sp) ; Rcksprung korrigieren pea a_ret(pc) ; Werte fr Simulation auf den Stack move.w sr,-(sp) move.l L_ADR,-(sp) ; und in alte Lina A Routine springen rts a_ret: dc.w 0 ; Platz fr Line A Aufruf move.w a_ret,d2 cmp.w #$A000,d2 bne a_end ; kein $A000 lea f_tab,a1 a_end: rte ;------------------------------------------------------------------- ; Systemfont anmelden 8*16 bei s/w - 8*8 bei Farbe ;------------------------------------------------------------------- melde_font: movem.l d2-d7/a2-a6,-(sp) move.w #4,-(sp) ; Auflsung bestimmen trap #14 addq.l #2,sp move.l #head_8_16,intin ; 8*16 vorbelegen cmp.w #2,d0 ; hohe Auflsung ? beq header_ok ; Dann ist alles klar move.l #head_8_8,intin ; sonst 8*8 Font nehmen header_ok: ; VDI esc 102 aufrufen move.l #contrl,a5 move.w #5,(a5) clr.w 2(a5) clr.w 6(a5) move.w #102,10(a5) move.w handle,12(a5) move.l #vdidat,d1 move.w #$73,d0 trap #2 movem.l (sp)+,d2-d7/a2-a6 rts ;-------------------------------------------------------------------- ; Daten und Felder fr VDI-Aufruf ;-------------------------------------------------------------------- DATA vdidat: dc.l contrl dc.l intin dc.l intout dc.l ptsin dc.l ptsout ; Neue Tabelle mit den Adressen der Fontheader f_tab: dc.l head_6_6 dc.l head_8_8 dc.l head_8_16 dc.l 0 BSS contrl: ds.w 12 intin: ds.w 10 intout: ds.w 10 ptsin: ds.w 10 ptsout: ds.w 10 ; Adresse der normalen LINE A Routine L_ADR: ds.l 1 end