Quick-Tips

Userdefined Objects in MAXON-Pascal

Um „Userdefined Objects“ einbinden zu können, muß man GEM die Adresse der Zeichenfunktion im Cdel-Format (das heißt auf deutsch die Routine muß wie in C behandelt werden, wobei noch die Parameter über den Stack übergeben werden müssen) übergeben. MAXON-Pascal geht bei Funktionaufrufen aber einen anderen Weg, deshalb müssen wir einen Cdel-Aufruf emulieren. Hierzu dient die Routine draw -vor, der die Adresse der Zeichenfunktion übergeben wird. Zurück bekommt man die Adresse des Labels DRA. Genau ab diesem Label bauen wir eine Cdel-Funktion nach. Wir puffern die Größen, die auf dem Stack liegen, starten dann die Pascal-Funktion und bringen den Stack wieder in Ordnung. Das war dann schon alles. Die Adresse des Labels wird nun in die Struktur Userblk eingetragen, auf die das zu zeichnende Objekt zeigen muß. über die weitere Vorgehens weise gibt es ja genügend Literatur. Achtung, das Listing ist nur die Basis-Routine und nicht allein lauffähig.

Wolfgang Sattler, W-St. Ingbert

TYPE
    UserBlk = RECORD
            ub_code: LongPtr; 
            ub_parm: LongInt;
            END;
    ParmBlk = RECORD
            pb_tree :ObPtr; {Zeiger auf ObjectTyp }
            pb_obj : INTEGER;
            pb_prevstate ; INTEGER;
            pb_currstate : INTEGER;
            pb_x, pb_y, pb_w, pb_h : INTEGER;
            pb_xc, pb_yc, pbwc, pb_hc ; INTEGER;
            pb_parm : LongInt;
            END;

VAR     adresse,ruck,para,dummy :LongInt;
        char_blk: UserBlk;
FUNCTION drawvor:LongPtr;ASSEMBLER;
ASM lea @DRA,A0
    move.l  A0,@Result 
    lea     @L1,A0
    jmp     (A0)

{ Adresse ist übergeben, Sprung zum Routinenende }
{ Hier beginnt die 'Cdel-Emulation' }

@DRA:   move.l (SP)+,ruck
        move.l (SP),para 
        move.l $004(A7),dummy 
{ hier legt die Funktion ihr Ergebnis hin, deshalb muß der Wert gepuffert werden } 
        move.l  adresse,A0 
        jsr     (A0)
        move.w  (SP),D0
{ MAXON Pascal übergibt Ergebnisse über den STACK, C über D0 } 
        move.l  dummy,(SP) 
        move.l  para,-(SP) 
        move.l  ruck,-(SP)
{ Stack wieder restaurieren } 
        rts
{ ENDE der 'Cdel-Emulation' }
@L1:    END;
FUNCTION draw_user_object(pb :ParmPtr):INTEGER;
BEGIN
draw_char:=0;
{ hier kommt die Zeichnenroutine hin }
END;
BEGIN
    adresse:=LongInt(@draw_user_object) 
    char blk.ub_code := drawvor;
END.

TT-Tastatur an ST (E/FM/Mega)

Es gibt zur Zeit eine ganze Reihe Tastaturen auf dem Markt, deren Preise so zwischen 300 DM bis 450 DM schwanken. Doch warum in die Ferne schweifen, wenn das Gute liegt so nah! Die Atari-TT-Tastatur ist nämlich auch einzeln erhältlich! Damit kann jeder ST-Besitzer seinen Rechner mit einer qualitativ hochwertigen Tastatur ausstatten.

Bei den Rechnern, die schon über eine externe Tastatur verfügen, ist das alles kein Problem: alte Tastatur entstöpseln und neue einstecken. Etwas schwieriger wird es bei den anderen ST-Modellen. Hier muß das Gehäuse geöffnet, der alte Tastaturstecker abgezogen und ein Adapterkabel gebastelt werden. Die benötigten Stecker gibt es im gutsortierten Fachhandel. Die 6polige Westernbuchse ist allerdings nicht immer vorrätig. Es läßt sich hier sehr einfach aus zwei 4poligen Buchsen eine 6polige herstellen (kinderleicht!). Bitte entnehmen Sie die Belegung der Buchse der Skizze. Dem Stecker ST-seitig fehlt ein Steckstift, daran kann man sich gut orientieren. Bei mir auf einem 1040 STFM läuft dieser Umbau schon seit einiger Zeit problemlos. Über eine schwabbelige Tastatur kann ich mich nicht beklagen. Wer sich schon immer nach einer neuen Tastatur gesehnt hat, sollte diesen Umbau auf jeden Fall wagen, es lohnt sich!

Jetzt einfach die Pins wie angegeben miteinander verbinden - und das war's dann ...

Umbaukosten: TT-Tastatur ca.250.- DM und ein paar Pfennige für Stecker, Buchse und Draht.

Ernst Wenzel, W-1000 Berlin 20

Und noch einmal: WORDPLUS V.3.15

Korrektur! Nach meinem Patch für den Zeilenumbruch in der ST-COMPUTER 7/8-91 hat mich Herr Dr. Giese aus Indonesien (! - danke für die Briefmarke) darauf hingewiesen, daß der Fehler doch noch nicht ganz behoben ist. Ein Hochkomma am Ende eines Wortes kann noch immer zum Absturz führen. Wir müssen praktisch den gleichen Patch an einer anderen Stelle noch einmal durchführen: An der Stelle $1EEC4 muß nochmals das Zeichen $6C durch $64 ersetzt werden (siehe auch Listing).

Georg Scheibler, W-4920 Lemgo

Pos.    Inhalt              Reassembliert
1EEA0   4240                CLR.W  D0
1EEA2   1010                MOVE.B (A0),D0
1EEA4   3D40 FFF4           MOVE.W D0,-$C(A6)
1EEA8   0440 0061           SUBI.W #$61,D0
1EEAC   3D40 FFF2           MOVE.W D0,-$E(A6)
1EEB0   0C6E 0005 FFF6      CMPI.W #5,-$A(A6)
1EEB6   6C06                BGE.S  $1EEBE(PC)
1EEB8   4240                CLR.W  D0
1EEBA   6000 00D2           BRA.W  $1EF8E(PC)
1EEBE   0C6E 001A FFF2      CMPI.W #$1A,-$E(A6)
1EEC4   6CF2                BGE.S  $1EEB8(PC)
neu: unsignet statt signet
1EEC4   64F2                BCC.S  $1EEB8(PC)

Turbo-Start per DESKTOP.INF

Jeder, der mit einer Harddisk arbeitet, kennt es: Man möchte das Programm XXX.PRG starten, aber um das zu tun, muß man sich zuerst wacker im Desktop durch manche Partition und Ordner kämpfen. Es gibt jedoch einen kleinen Trick, wie man diese Klickerei (immerhin bei gewissen Programmen) umgehen kann: Das File DESKTOP.INF und die Option Anwendung anmelden.

Dazu klickt im Desktop einmal auf den Namen des Programms, und führt dann Anwendung anmelden aus. Hier gibt man wie gewohnt den gewünschten Extender an, bei dem die Anwendung gestartet werden soll. Nach OK speichert man das DESKTOP.INF (Arbeit sichern). Nun lädt man das DESKTOP.INF in einen Editor und sucht die Zeile, in dem der Namen des vorher angemeldeten Programms vorkommt. Diese sieht z.B. so aus:

#G 03 04 GFA-ASM.PRG0 *.IS@

Nun erweitert man einfach den Namen um den Pfadnamen, z.B:

#G 03 04 F:\GFA_ASS.1_5\GFA-ASM.PRG@ *.IS@

Diese Zeile kann man nun auch duplizieren und den Pfad plus Programmnamen, sowie den Extendern beliebig abändern. Man kann z.B. das *.IS in ASM.XXX ändern und nun ein (Leer-)File ASM.XXX erstellen und dieses in das Directory kopieren, das nach einschalten des Computers geöffnet wird. So kann man ein Programm in einem beliebigen Ordner von dort aus starten (indem man einen Doppelklick auf ASM.-XXX ausübt). Wenn alle Änderungen getätigt sind, das File DESKTOP.INF wieder abspeichern und danach den Reset-Knopf drücken. Damit ist ihr Desktop getunt und Sie müssen sich von nun an nicht mehr durch die Ordner klicken.

Wie ich am Anfang geschrieben habe, funktioniert das nicht mit allen Programmen. Es funktioniert nicht bei Programmen, die ein File (z.B. RSC-File) nachladen, das im gleichen Ordner steht wie das Programm selbst. D.h. im Klartext bei einer grossen Zahl von GEM-Programmen funktioniert der Trick nicht. Aber es laufen viele andere Programme wie z.B. GFA-Basic, GFA-Assembler, einfach alle, die nichts nachladen.

Martin Lacher. CH-6340 Baar

Problem mit Fileselectbox

Sicher kennen Sie das Problem mit der Fileselectbox, wenn ein neuer Pfad oder ein neues Laufwerk über die Tastatur eingegeben werden. Nach der Eingabe soll dann der Fensterbalken angeklickt werden, damit das Dateifenster aktualisiert wird. Leider verschwindet danach eine eingestellte Dateierweiterung (engl. Extension). Wird der Mausklick allerdings innerhalb des Fensters oder auf dem rechten Randbereich (Schieberegler, engl. Slider) getätigt, bleibt die eingestellte bzw. die neue Dateierweiterung aktiv. Es kann in ähnlicher Weise auch auf einen Dateinamen geklickt werden, nicht aber auf einen Ordnereintrag im Auswahlfenster.

Gerhard Stoll, W-6520 Worms

Boot-Umschalter

Das Booten von Laufwerk B kann hardwaremäßig durch ein Vertauschen der Drive-Select-Leitungen am Soundchip vorgenommen werden. Am besten verwendet man dafür einen externen Schalter. User die ein bißchen Ahnung vom Löten haben, können diesen Eingriff ohne Probleme bewerkstelligen.

Der Soundchip von YAMAHA selektiert die Laufwerke über die Pins 19(IOA2) und 20 (IOA1). Am besten trennt man die Pins kurz über der Platine mit einem Teppichmesser ab, (lieber eine neue Klinge einsetzen!), indem man vorsichtig, aber mit einer Portion Kraft die Klinge gegen die Pins drückt. Sind sie durchtrennt, biegt man dieselben mit einem spitzen Gegenstand (Uhrmacher-Schraubendreher) ca. 90 Grad nach oben, während man das Teppichmesser oben auf die Pins legt, damit der Radius etwas größer ist und sie nicht abbrechen. Beim Chip sollte man einen metallischen Gegenstand (Zange etc.) beim Löten darauflegen, damit der Chip nicht zu heiß wird.

Apropos Hitze: nach Möglichkeit einen Lötkolben mit kleiner Leistung bis maximal 30 Watt benutzen! Die Kontakte müssen wie folgt mit einem Kippschalter (2mal UM) verdrahtet werden:

Mit dieser Lösung steht einem Booten von Laufwerk B mit einem Spiel etc. nichts mehr im Wege. Ich selber arbeite und spiele mit dieser Schaltung schon über zwei Jahre erfolgreich. Die Leitungen können ruhig 30-40 cm lang sein. Ich selber habe insgesamt ca. 1.8 Meter(!) zwischen Floppy B und Soundchip, und mein Laufwerk hat bis heute immer treu gearbeitet.

Marc Brünjes, W-2800 Bremen 1

Dummy-Printer

Wem ist es denn nicht auch mal so gegangen: Um den Rechner wieder freizuhaben, wurde ein Spool-Programm installiert, das die Druckerausgaben aus dem Hintergrund heraus erledigt. Dann druckt der Drucker und druckt und druckt...

Und beim zufälligen Hinsehen entdeckt man auf der fünften von 17 Seiten, daß z.B. die Seitenlänge nicht stimmt oder sonst etwas. Der gesamte Text steht im Spooler, der andere ist noch nicht gesichert. Also: Text in fliegender Hast sichern und einen Reset auslösen, den Rechner neu booten, Programm laden usw.

Beim Einsatz eines Dummy-Printers hingegen entfällt ein Reset. Ein Dreh am DATA-SWITCH (Umschalter zw. z.B. 1 Computer und 2 Druckern) -und der Druck geht mit Volldampf ins Leere (bei einem NEC P2200 z.B. mit bis zu 175%!). Am besten wäre ein manueller (kein automatischer, da CENTRONICS-Belegung) DATA-Switch für RS 232 (DB25-Buchse), weil er viel preiswerter ist als ein universeller mit CENTRONICS-Schnittstellen. Zum Anschluß wird dann noch ein sog. GENDER CHANGER benötigt, ein Adapter mit DB25-Steckem auf beiden Seiten (Achtung! Es gibt diese auch mit Buchsen an beiden Seiten.) und ein ganz normales RS232-Kabel mit DB 25-Anschlüssen. (Ich weise auf die DB25 extra hin, denn es gibt auch 9polige RS232-Anschlüsse.)

Der ganze Kniff bei der Sache ist der, daß die BUSY-Leitung (Pin 11) vom Rechner auf HIGH gesetzt und vom empfangsbereiten Drucker auf Masse gelegt wird, also LOW-Pegel erhält. Der Drucker selber wartet auf das STROBE-Signal (Pin 1) des Rechners. Geht dieses kurzfristig auf LOW, erwartet der Schreiberling, daß an den Pins 2-7 die Daten-Bits 0-7 anliegen, und setzt während der Bearbeitung die BUSY-Leitung seinerseits auf HIGH. Der Rechner wartet nun ab, bis diese wieder auf LOW ist und schickt dann wieder STROBE und Daten auf die Reise ...

Beim Dummy-Printer wird der Pin 11, also BUSY, ständig auf LOW gehalten, indem er einfach direkt an Masse gelegt wird. Hier darf kein Widerstand sein, sonst meldet der Rechner ‘Drucker nicht bereit'. Die Daten hingegen werden über 1 kΩ-Widerstände an ihre entsprechenden Signalmassen gelegt (entsprechend der Interface-Schaltung aus dem Druckerhandbuch).

Aber wenn, dann begrenzen die Widerstände die Stromstärke, und man läuft nicht die Gefahr, irgendwelche Bausteine zu zerstören, schließlich ist unser Rechner in puncto Treiberleistung leider keine große Nummer.

Übrigens: Das STROBE-Signal benötigt keine Behandlung und wird in Ruhe gelassen.

Die Stückliste:

1 DB25-Stecker (male)
1 Gehäuse
8 1kΩ-Widerstände

T.W Müller, W-1000 Berlin 10

Fensterausgabe mittels PRINT

Wer stand nicht beim Testen eines selbstgehäkelten GEM-Programmes unter GFA-BASIC vor dem Problem, Variablenwerte überprüfen zu müssen?

Das geschieht meist mit der PRINT-Anweisung. Die Folge: Das schöne Desktop ist schnell zerschossen. Es ist aber extrem einfach, den PRINT-Befehl in eines von vier Fenstern umzulenken und dabei die Schrift auch noch via DEFTEXT zu variieren (!!). Alles weitere möge der geneigte Leser folgendem Listing entnehmen.

T.W. Müller, W-1000 Berlin 10

' PRINT in ein Fenster 
FOR i|=1 TO 4
    TITLEW #i|,"FENSTER "+STR$(i|)
    INFOW #i|,"Info zum Fenster "+STR${i|)
    OPENW i|
    CLEARW i|
NEXT i|
FOR i|=1 TO 4 
    TOPW #i|
    SELECT i|
    CASE 1
        PRINT AT(1,1); ! auch das funktioniert
        DEFTEXT ,,,6 !8x8 
    CASE 2
        PRINT AT(5,8);
        DEFTEXT ,,,4 ! eine Nummer kleiner
    CASE 3
        PRINT AT(1,1);
        DEFTEXT ,5,,13 !8x16, fett & kursiv 
    DEFAULT
        PRINT AT(1,2);
        DEFTEXT ,0,,13 ! normaler 8x16 
    ENDSELECT 
    FOR j|=1 TO 20
        PRINT " Dies ist ein Fenstertest ... 1, 2, 3 , 1, 2, 3," 
    NEXT j|
NEXT i|
~INP(2)
FOR i|=1 TO 4 
    CLOSEW i|
NEXT i|
END

Adreßverwaltung in jedem Textprogramm

Im ST-COMPUTER Heft 3/91 („Adreßbuch im Kopf“) wird darauf hingewiesen, daß manche Textverarbeitung die Möglichkeit bietet, mit Hilfe von selbstdefinierten Makros eine Adreßverwaltung zu programmieren. Als ideale Ergänzung bietet sich dabei übrigens noch ein Notizblock-Accessory an, mit dem man sich eine Makro-Referenzliste basteln kann.

Es gibt aber noch ein völlig anderes Verfahren für eine selbstgestrickte Adreßverwaltung. Es eignet sich vor allem für Serienbriefe und funktioniert in allen Programmen, die das Reservieren einer beliebigen Zeilenzahl für Kopf- und Fußtexte (z.B. in Script2) erlauben.

Als Kopftext wird einfach der komplette Briefkopf eingegeben, wobei man die Absenderzeile für den Fensterumschlag nicht vergessen sollte (siehe auch ST-COMPUTER, Heft 4/ 91, Seite 60). Für den Fußtext werden so viele Zeilen vorgesehen, daß im Mittelteil der Seite nur noch Platz für das Anschriftenfeld, die nachfolgenden Leerzeilen und die Anrede verbleibt.

Mit diesem Seiten-Layout wird nun ein Adressen Verzeichnis geschrieben und abgespeichert, wobei auf eine Seite jeweils eine Anschrift mit Anrede (siehe oben) paßt. Um einen Serienbrief auf die Reise zu schicken, lädt man dieses Verzeichnis, schreibt den Brieftext als Fußtext (!), und schon geht die POST ab.

Karl Große Kracht, W-4506 Hagen a.T.W.



Aus: ST-Computer 10 / 1991, Seite 181

Links

Copyright-Bestimmungen: siehe Über diese Seite