Quick-Tips

Signum!-Zeichensätze in Omikron.BASIC

Die Ästheten unter den ST-Anwendern blicken schon immer neidisch auf gewisse andere Fabrikate, die von vornherein mit hübsch proportionalen Zeichensätzen arbeiten. Zwar ist auch der ST von Natur aus dazu geeignet, doch die meisten Hobby-Programmierer verzichten darauf, sich dafür durch den GEM/VDI-Dschungel zu kämpfen. Für einfache Anwendungen genügt aber auch die hier vorgestellte kurze Omikron.BASIC-Routine. Sie verwendet Signum! Bildschirm-Fonts (die als Public Domain reichlich zur Verfügung stehen) und kommt ohne GEMLIB aus.

Die Routine PLOAD() lädt eine/mehrere E24-Dateien in den Speicher und patcht sie für die Ausgabe mit BITBLT. Jeder Zeichensatz muß dabei mit einem Namen gekennzeichnet werden, so daß später mit der Anweisung FONT=Name ein beliebiger Zeichensatz ausgewählt werden kann. Am Ende des Programms sollte der Speicher mit FRE(Name) wieder freigegeben werden.

Die Routine PTEXT(X,Y,Text$) wird genau wie die BASIC-Anweisung TEXT eingesetzt - mit dem Unterschied, daß die Variable X danach auf das Ende des ausgegebenen Textes zeigt, so daß man die nächste freie Position auf dem Bildschirm kennt.

Arno Maurer, W-7400 Tübingen 1

Pload ("SWISS.K24",Swiss)
INPUT " Probetext? ";T$
Font=Swiss
CLS
Ptext(90,90,T$)
FRE(Swiss)
END
'
DEF PROC Pload(File$, R Font)
    LOCAL A,I
    OPEN "I",1,File$
    Font=MEMORY(LOF(1))
    CLOSE 1
    BLOAD File$,Font 
    FOR I=1 TO 127
        A=Font+652+LPEEK(Font+I*4+140)
        POKE Font+I, PEEK(A)
        POKE A+3,PEEK(A+1)
        WPOKE A,PEEK(A+2)
        POKE A+2,0 
    NEXT I 
RETURN
'
DEF PROC Ptext(X,Y,Text$)
    LOCAL A,B,I,S,Z 
    FOR I=1 TO LEN(Text$)
        Z=ASC(MID$(TextS,I,1))
        S=INSTR("äöüÄÖܧß",CHR$(Z))
        IF Z=32 THEN Z=0 
        IF S THEN
            Z=ASC(MID$("][@}{\ "+CHRS(127),S,1)) 
        ENDIF
        IF Z>127 OR Z=0 THEN 
            X=X+8 
        ELSE
            S=WPEEK(A)
            WPOKE A,2 
            B=WPEEK(A+2)
            BITBLT A TO X,Y-17+PEEK(Font+Z),B, WPEEK(A+4),7 
            WPOKE A,S 
            X=X+B 
        ENDIF 
    NEXT I 
RETURN

Listing 1: Signum!-Zeichensätze in Omikron.BASiC

Selbstdefinierte Linienmuster in GFA-BASIC

Der GFA-BASIC-Befehl DEFLINE [stil], [dicke], [anfang_s, end_s] erlaubt bekanntlich neben der Wahl von Liniendicke, Anfang- und Endsymbol auch das Festlegen des Linienstils für die Befehle LINE, BOX usw. Hier gibt es die Möglichkeit, zusätzlich zu den 6 bzw. 7 vordefinierten Linienarten auch selbstdefinierte Muster zu benutzen - wenn man weiß, wie. Alle mir bekannten Angaben dazu (einschl. orig. GFA-Handbuch, allerdings 1. Aufl. vom Mai ’88) sind entweder unvollständig oder schlicht falsch.

Der Knackpunkt ist, daß das gewünschte Linienmuster als 16-Bit-Wert im Zweierkomplement angegeben werden muß (das scheint komplizierter zu sein, als es tatsächlich ist)!

Beispielsweise erhält man eine Linie aus je zwei gesetzten und zwei nicht gesetzten Punkten durch den Befehl

DEFLINE 1+NOT &X1100110011001100,1,0,0

bzw., wenn das Muster in einer Variablen vorliegt, mit

stil%=&X110011001100H00
DEFLINE 1+NOT stil%,1,0,0

Die Übergabe des Wertes für das Muster als negative Zahl (wie es in den meisten Veröffentlichungen dazu immerhin heißt) ergibt sich so von selbst - diesmal jedoch mit dem erwarteten Ergebnis. Dabei ist die Reihenfolge der Operatoren wichtig:... NOT wert+1... liefert ein falsches Ergebnis. Es geht aber... (NOT wert)+1.

Volker Goreth, W-4150 Krefeld I

Kleiner Zeichensatz mit PRINT

Wer fand es noch nicht ärgerlich, daß man mit dem PRINT-Befehl immer nur den normalen Zeichensatz benutzen kann? Dabei gäbe es so viele Anwendungen, bei denen man den kleinen Zeichensatz (88) wesentlich besser einsetzen könnte. Es wäre sicherlich sehr interessant, wenn man statt 25 nunmehr 50 Zeilen auf dem Monitor unterbringen könnte! Tabellen, die normalerweise auf zwei Seiten aufgeteilt werden müßten, passen nun auf einmal auf eine Seite; Listings und Texte werden wesentlich übersichtlicher. Die einzige Abhilfe für dieses Problem war bislang der TEXT-Befehl, der jedoch nicht gerade vor Schnelligkeit strotzte, sondern eher wesentlich langsamer als das PRINT-Äquivalent war. So gaben sich die meisten Programmierer damit zufrieden, daß es nicht anders geht, und teilten ihre Tabellen in mehrere Teile auf. Diesem Problem kann jedoch abgeholfen werden mit einem recht kurzen Listing, das alle folgenden PRINT-Anweisungen im kleinen 88-Zeichensatz ausgeben läßt. Dabei sollte man lediglich beachten, daß man nach dem Umschalten auf eine andere Font-Größe immer den Bildschirm löscht, da das Betriebssystem sonst mit der Darstellung der Fonts durcheinanderkommt. Ansonsten steht dem großflächigen Aufbau von Tabellen oder Datenaufkommen jedweder Art nichts mehr im Wege. Viel Spaß mit der neuen, "großen" Bildschirmauflösung!

S. Just. W-6936 Haag / MP

font_init           !Adressen suchen
text(small_font%)   !kleiner Font
CLS                 !Bildschirm löschen
FOR i&=1 TO 1000    !...mal ansehen
    PRINT "Test! "; !
NEXT i&             !...und raus
text(big_font%)     !großer Font
CLS                 ! Bildschirm löschen
FOR i&=1 TO 1000    !...mal ansehen
    PRINT "Test! "; !
NEXT i&             !...und raus
END                 !...Ente
'
PROCEDURE font_init !Adressen finden
    LOCAL find_match$,find_a%,find_m.adr% 
    ' 0=6*8, 1=8*8, 2=8*16
    find_match$=MKI$(&HA000)+MKI$(&H2009)+MKI$(&H4E75) 
    find_a%=VARPTR(find_match$) 
    findm.adr%=C:find_a%()
    big_font%=LPEEK(find_m.adr%+8)      !groß
    small_font%=LPEEK(find_m.adr%+4)    !klein 
RETURN
PROCEDURE text(fnt_adr%) 'Umschalten 
    IF fnt_adr%>0
        {INTIN}=fnt_adr%
        INT{CONTRL+2}=0 
        INT{CONTRL+6}=2 
        INT{CONTRL+10}=102 
        VDISYS 5 
    ELSE
        ALERT 3,"Font-Adresse|unbekannt!",1,"RETURN",d% 
    ENDIF 
RETURN

Listing 2: So schaltet man den System-Font in GFA-BASIC um.



Aus: ST-Computer 04 / 1991, Seite 182

Links

Copyright-Bestimmungen: siehe Über diese Seite