Quick-Tips

Wohin mit dem Swap-Laufwerk ?

Mit dem TT ist endlich die Zeit gekommen, wo der ATARIaner nicht mehr neidisch auf die WINDOWSen schauen muß. Stichwort: virtuelle Speicherverwaltung, also eine dickere Kiste vorgaukeln, als tatsächlich vorhanden ist. Im Gegensatz zu WINDOWS bedienen sich dieTT-Programme (OUTSIDE, VRAM) gleich ganzer Partitionen. Geschwindigkeit und Datensicherheit sind deshalb in großem Maße gegeben. Nur, wohin mit dem Icon des Swap-Laufwerks? Angemeldet sein muß es, sonst wird es nicht erkannt.

Hier ein Tip: Schieben Sie es doch einfach unter das Symbol für z.B. Laufwerk A:. Die Vorgehensweise ist einfach: Die ersten beiden Zahlenkolonnen im NEWDESK.INF bezeichnen die Position des Icons. Nun wird vor dem Laufwerk A: die Zeile für das Swap-Laufwerk eingefügt, mit den gleichen Koordinaten versteht sich. Das ist alles. Nachfolgend sehen Sie den Eintrag in der NEWDESK.INF-Datei wo die Partition G mit Namen VRAMSWAP, die unter das Laufwerk A: geschoben wurde.

        Laufwerkskennung
               |
Koordinaten    | Laufwerks-
                  bezeichnung

   |  |        |    |

   V  V        V    V

#M 01 00 07 FF C SYS CONFIG@ @

#M 02 00 07 FF D DEVELOPMENT@ @ 

#M 01 01 07 FF E TEXT@ @

#M 02 01 07 FF F C A D@ @

#M 00 00 27 FF G VRAMSWAP@ @    <-

#M 00 00 09 FF A HD-FLOPPY P@ 0 <-

#M 00 01 09 FF B HD-FLOPPY V@ 0

#T 03 01 02 FF   PAPIERKORB@ @

T.W. Müller, 1000 Berlin JO

Accessory-Gerüst

Nach meinen Erfahrungen erreicht man mit Assemblerprogrammen nur geringfügige Geschwindigkeitssteigerungen. Es lohnt sich deshalb selten nur wegen einer höheren Verarbeitungsgeschwindigkeit ein Programm in Assembler zu schreiben. Man kann doch auch auf die Sprache C zurückgreifen, wenn es ein ACC werden soll. Das beigefügte Programmgerüst soll dabei helfen. Nach der Kompilierung kann man es in „.ACC“ umbenennen.

In der Funktion ciction() muß man den Pfeifton, den ich zu Testzwecken einbaute, einfach durch die ACC-Aufgabe ersetzen. Das Accessory kann auch als gewöhnliches Programm genutzt werden, was bedauerlicherweise noch nicht alle ACC können, auch das in der neuesten Auflage des ATARI Profibuches nicht! Wie in dem angesprochenen Werk auf Seite 766 vermerkt ist, darf appl_exit() nur aufgerufen werden, wenn es als Programm gestartet wurde.

W. Fässler, CH-H052 Zürich

/* ACC-Grundgerüst */

#include <stdio.h> 
#include <aes.h>
#include <stdlib.h>

/* Was das ACC tun soll */

void action (void) /* Ausführungsteil des ACC */
{
    printf("\7"); /* für Test: tut sich was? */
}

void main (void)
{
    int     mgbuff[8]; 
    int     appl_id;
    char    acc_name[] = " Test-Accessory": /* Accessory-Name */

    appl_id = appl_init ();

    if(!_app)       /* ist es ein Accessory? */
    {
        menu_register(appl_id, acc_name);
        while(1)    /* die endlose EVENT-Schleife */
        {
            evnt_mesag(mgbuff); 
            if (mgbuff[0] == AC-OPEN)
                action(); /* Aufruf der ACC-Tätigkeit */
        } /* while(1) */
    }
    else
    {
        action();    /* ACC-Tätigkeit, wenn als PRG gestartet */
        appl_exit(); /* nur,wenn es nicht als ACC läuft */ 
        exit (0);
    }

}

TT-Mausknopf ist tot ?

Mit diesem Phänomen hatte ich kurz nach meinem Umstieg auf den TT zu kämpfen: Plötzlich konnte ich die Buttons von Alarmboxen usw. mit der Maustaste nicht mehr selektieren. Nur noch ein RESET half. Manchmal erledigte der Rechner das auch selbst. Der Übeltäter hieß MACCEL3.PRG und gehört als Maustreiber zum MACCEL.CPX des XControl-ACC. Nachdem ich MACCEL3.PRG aus dem AUTO-Ordner und das entsprechende CPX-Modul aus dem CPX-Ordner entfernt habe, also ohne Beschleuniger arbeite, gehören diese Probleme der Vergangenheit an. Wahrscheinlich verträgt es sich nicht mit Programmen, die eine eigene Maus-Routine einklinken.

T.W. Müller, 1000 Berlin 10

Scanner-Probleme?

Der in der ST-COMPUTER 4/92 getestete Scanner von Golden Image litt unter Sehstörungen. Er konnte sehr helle Bilder nicht erkennen. Dieses Problem weist auf eine zu hohe Spannung am Steckernetzteil hin. Bei meinem Steckernetzteil konnte ich eine Spannung von 15.6V messen. Da die Firma Golden Image sehr sparsam mit technischen Daten ist, konnte nicht festgestellt werden, wie hoch die Spannung eigentlich sein sollte. Ich nehme mal an, 15.6V ist ein wenig zu hoch. Die Spannung vom Steckernetzteil dient hauptsächlich zur Spannungsversorgung der Leuchtdiodenzeile. Ich betreibe meinen Scanner seit längerem mit konstanten 12V. Bisher sind keinerlei Probleme aufgetreten, auch die Sehstörungen fallen dann weg.

Für alle, die mit ihrem Scanner mal Probleme mit dem Ausgehen der Leuchtdiodenzeile hatten, folgt eine eventuelle Lösung des Problems:

Es könnte an einem Hardware-Fehler des Interfaces liegen. Das Aus- und Einschalten wird überein Flip-Flop gesteuert. Nun gibt es zwei solcher Flip-Flops auf dem IC (74LS74). Bei meinem Layout, ich habe auf meiner Platine 9806 (Unterseite) als ‘Layout’-Nummer stehen, ist der Ausgang des nicht benutzten Flip-Flops auf Masse gelegt. Das ist nicht so ganz korrekt. Dadurch wird auch das IC stärker belastet. Das IC 74LS74 besitzt 14 Pins. Gezählt wird von unten links, links ist da, wo die Kerbe ist. Der Pin 8 ist der Ausgang des ungenutzten Flip-Flops. Bevor man den Pin 8 durchtrennt, sollte man sich vergewissern, daß das Layout auch diesen Fehler aufweist. Es ist Pin 8 mit Pin 7 und Pin 11 verbunden, außerdem ist Pin 11 noch mit Pin 12 verbunden. Alle diese Pins liegen auf Masse, sprich 0V. Man sollt den Pin so durchtrennen, daß er wieder genutzt werden kann. Dann verweise ich noch auf die ST-COMPUTER 9/91. Da wurde beschrieben wie man aus dem Scanner JS-105 800 DPI herausholen kann.

F. Dahlke, W-3000 Hatmover 91

Simulation eines Tastendruckes für Auto-Ordner-Programme

Von den verschiedenen Programmen, die im Auto-Ordner automatisch starten sollen, machen einige ihrer Bestimmung keine Ehre. Diese zeigen nämlich ein kleines Auswahlmenü und warten stur auf den Moment, bis man endlich seine Wahl getroffen hat und eine entsprechende Taste drückt. Obwohl man vielleicht bei jedem Boot-Vorgang immer die gleiche Wahl treffen würde, ist man gezwungen, mit seinem Pseudo-Auto-Ordner-Programm in Dialog zu treten. Diesen immer wiederkehrenden und damit überflüssigen Dialog übernimmt ein Zweizeiler in GFA-BASIC.

Das Compilat wird so in den Auto-Ordner hineinkopiert, daß es unmittelbar vor dem entsprechenden Programm startet. Hierbei ist zu beachten, daß das Betriebssystem die Auto-Ordner-Programme in der Reihenfolge abarbeitet, wie sie in diesen hineinkopiert wurden. Hieraus ergeben sich folgende Arbeitsschritte:

  1. die Programme des Auto-Ordners auf Diskette sichern
  2. die Programme des Original-Auto-Ordners löschen
  3. Programme einzeln in der gewünschten Reihenfolge in den Auto-Ordner zurückkopieren.

D. Giesler, W-2070 Ahrensburg

' Simulierter Tastendruck für Auto-Ordner-Programme 
' GFA-BASIC 3.x 
' Detlef Giesler, Ahrensburg 
' 21.04.92
REM minimalen Speicher benutzen:
$m1000
REM Simuliere in diesem Fall Druck der Taste "2", also: 
KEYPRESS 50
REM Jetzt wird das eigentliche Auto-Ordner Programm 
REM gestartet, das auf einen Tastendruck wartet.

Quicktip zum Quicktip

Als treuer Leser Ihrer „ST-Computer“ bin ich vor allem auf die Quicktips immer besonders gespannt, aber über die „Trennhilfe im Fileselector“ in Heft 5/92 habe ich mich geärgert. Einmal ist da die Schreibweise mancher Befehlszeilen zu bemängeln:

Was bitteschön soll in Zeile 8 heißen: „AND EXIST <datei$>“? Ähnliches gilt für die Zeilen 10,11,17 und 19. Müßten da nicht Klammern hin? Den Befehl „FLIESELECT“ in Zeile 23 kenne ich auch noch nicht. Wie ist u.a. die Zeile 12 zu verstehen: IF z$="Ü" ?

Am meisten ärgerte mich aber der Q-TIP selber. Da wird ein Dateiname auf eine solch „altertümliche“ Art in Pfad und Name zerlegt, daß schon einem GFA-BASIC-Anfänger die Haare zu Berge stehen. Mit dem schon seit Urzeiten bekannten Befehl „INSTR“ hätte man sich eine Menge Arbeit gespart.

H.-J. Merkel, W-6600 Saarbrücken

BIOS contra GEMDOS

BIOS-Routinen sind im Vergleich zu GEMDOS-Routinen zwar unkomfortabler, aber viel schneller. Besonders macht sich das bei Ausgaben auf die parallele Schnittstelle bemerkbar. Ich habe als Beispiel die Hardcopy-Routine verglichen, die in der „ST-Computer“ 2/92 unter Programmierpraxis zu finden war. Bei Hardcopies kommt es wohl sowieso mehr auf Schnelligkeit als auf Extras durch GEMDOS wie Redirection o.ä. an.

Das Programm stellt 6 verschiedene Druckfunktionen zur Verfügung (siehe Tab.).

Man erkennt, daß man bis zu 40% Zeitersparnis hat. Bei Verwendung der BIOS-Fkt. Bconout muß man allerdings bedenken, daß die Register d0-d2 und a0-a2 zerstört werden! Generell sollte man laut „ATARI ST Profibuch“ davon ausgehen, daß diese Register durch TOS verändert werden!

M. Glodde, W-2802 Stuhr 2

Fkt. | Ausgabezeiten
GEMDOS | BIOS 1 Kleinformat 180 dpi: | 26 sec. | 16 sec.
2 Normalformat 180 dpi: | 56 sec. | 36 sec.
3 Querformat 180 dpi: | 2.35 min. | 1.35 min. 4 Kleinformat 360 dpi: | 52 sec. | 31 sec. 5 Normalformat 360 dpi: | 1.50 min. | 1.06 min. 6 Querformat 360 dpi: | 5.08 min. | 3.09 min.

(Drucker: NEC P6+. Gemessen wurde vom Start des Drucks, bis der Computer das letzte Zeichen gesendet hatte.)

Adresse des AES-Parameterblocks in MAXON-Pascal

In meinem Artikel ‘Form_button & Form_keyb in MAXON-Pascal' (ST 2/92) habe ich beschrieben, wie man mit ein wenig Assembler die Adresse der AES-Parameterstruktur, die der Compiler intern benutzt, erhält. Leider muß ich gestehen, daß ich übersah, daß MAXON-Pascal die Parameterstruktur als globale Variable AES_pb in der UNIT GemDecl deklariert. Die AES_parcim-Struktur in GemDecl ist aber leider etwas ungewöhnlich gewählt. Die Struktur ist üblicherweise wie folgt definiert:

TYPE
    controlp = ARRAY[0..5]  OF INTEGER;
    globalp  = ARRAY[0..15] OF INTEGER;
    intinp   = ARRAY[0..16] OF INTEGER;
    intoutp  = ARRAY[0..7]  OF INTEGER;
    adrinp   = ARRAY[0..2]  OF LongInt;
    adroutp  = ARRAY[0..1]  OF LongInt;

AESParBlk = RECORD
            control : ^controlp; 
            global  : ^globalp;
            intin   : ^intinp;
            intout  : ^intoutp;
            adrin   : ^adrinp;
            adrout  : ^adroutp;
            END;

VAR aespb : ^AESParBlk;

Die Adresse kann man nun mit der Zuweisung:

aespb:=Addr(AES_pb);

ohne große Hindernisse erhalten. Der Zugriff auf die einzelnen Strukturen erfolgt dann wieder genau wie im Artikel beschrieben. Danke an Herrn Pohley, dem die beschriebene Vorgehens weise ebenfalls auffiel.

W. Sattler, W-6670 St. Ingbert

Verschlungene Pfade?

Anbei einen Q-TIP, den man nicht oft genug wiederholen kann. Immer wieder muß ich, auch in teuren Profi-Programmen, traurigerweise feststellen, daß Dateien, die zum Programm nachgeladen werden (RSC-, INF-, CFG-Files u.a.), oft nicht gefunden werden, wenn selbige nicht auf der obersten Verzeichnisebene liegen.

Logischerweise packt der Anwender seine diversen Programme auf der Festplatte in verschiedene Verzeichnisse, um Ordnung und Übersicht zu erhalten. Und genau das „vergessen“ anscheinend einige Programmierer!

Abhilfe: Im AES gibt’s die Funktion SHEL_FIND. Damit findet das Programm seine zusätzlichen Dateien, egal wo sie stehen.

H.-J. Merkel, W-6600 Saarbrücken

' es soll die Datei "BEISPIEL.INF" nachgeladen werden
'
' zurueck! = TRUE, wenn Datei gefunden wurde 
'            FALSE (also 0), wenn nicht gefunden
' pfad$    = String mit dem Dateinamen
'            gleiche Variable enthält nach Funktionsende 
'            den vollständigen Zugriffspfad
'
pfad$="BEISPIEL.INF" 
zurueck!=SHEL_FIND(pfad$)
IF zurueck!=FALSE
    ALERT 3,pfad$+"|konnte nicht gefunden werden!",1,"Pech",dum| 
ELSE
' Variable pfad$ zum Laden weiterverwenden 
ENDIF
'
' oder noch einfacher:
' IF NOT SHEL_FIND(pfad$)
'   ALERT 3,pfad$+"|konnte nicht gefunden werden!", 1,"Pech",dum| 
' ELSE
'   siehe Z. 14 
' ENDIF

Zeitversetztes Senden mit Junior Office

Beim Faxprogramm Junior Office ist es im Gegensatz zur professionelleren Ausgabe Tele Office nicht möglich, dem Faxprogramm einen Versandzeitpunkt für das erstellte Fax mitzuteilen - so entspricht das Datum des Versandes stets dem der Erstellung. Nun kann es allerdings durchaus wünschenswert oder angebracht sein, dennoch mit dem Versand zu warten - sei es, um Nachrichten bereits fertigzustellen und dann termingerecht abzusetzen oder vor allem, um den günstigeren Nachttarif der Telekom nach 1800 und am Wochenende abzu warten.

Hier kann man sich zunutze machen, daß der Faxtreiber losgelöst ist vom Erstellungsprogramm. Denn wenn der Faxtreiber nicht geladen ist bzw. nicht gestartet wird, obwohl Faxe zum Versand fertiggestellt sind, können diese ja zwangsläufig auch nicht versandt werden. Man erstellt also zu beliebiger Uhrzeit die Faxe, aber ohne den Treiber geladen zu haben. Diese werden im Ordner zwischengespeichert. Nun wählt man einen angenehmen Zeitpunkt aus, um den Faxtreiber als Programm zu starten - nun werden alle vorliegenden Faxe der Reihe nach abgesetzt.

Sicherlich kann damit nicht jedem Fax ein individuelles Sendedatum gegeben werden, wie das bei Tele Office der Fall ist - zur Gebühreneinsparung reicht diese Vorgehensweise aber in jedem Fall.

Sebastian Lovens, Keetmanstraße 32, W-4100 Duisburg I

Kleiner Fehler im Quicktip

Das erste, was ich in der ST lese, sind die Q-Tips. Im Q-Tip 4/92, S.147, von M. Fricke steckt ein kleiner Fehler: Die Integer-Variablen-Kennzeichnung der Laufvariable / in der ROM-Leseschleife ist uneinheitlich!

D. Gieseler, W-2070 Ahrensburg

Accessories in GFA-BASIC

Accessories sind nützliche und hilfreiche Programme, die dem Anwender ständig zur Verfügung stehen. Doch wissen viele Einsteiger (im Normalfall GFA-BASIC-Programmierer) nicht, wie man solche Helfer schreibt. Deshalb stellen wir hier ein Grundgerüst dazu vor, mit dem Sie ihre eigenen Ideen verwirklichen können.

Alles, was Sie noch zu tun haben, ist das Austauschen des vorgegebenen Namens mit dem eigenen Namen der Anwendung in dem MENU_REGISTER-Befehl, z. B. me_rmenuid&=MENU_REGISTER(ap_id&, "Spooler"). Das eigentliche Hauptprogramm des Accessories liegt in der Prozedur acc_proc, die Sie nach eigenen Wünschen verändern dürfen. Im Moment wird lediglich eine Alertbox angezeigt. Sollte Ihr Accessory mehr als 20 KByte beanspruchen, müssen Sie die Zahl 20000 in der Zeile „$m20000“ durch die Größe des benötigten Speichers ersetzen. Das Programm ist nur compiliert lauffähig. Das Testen im Interpreter wird mit einer Endlosschleife bestraft.

M. Brust und Ch. Roth

' Grundgerüst für die Programmierung 
' von Accessories in GFA-BASIC V3.X 
' von Christian Roth u. Matthias Brust
'
$m20000 !genügend Speicher reservieren
ap_id&=APPL_INIT()
IF ap_id&<>1    ! Fehler bei APPL_INIT?
    ' Name des ACC eintragen
    me_rmenuid&=MENU_REGISTER(ap_id&," Acc in GFA-BASIC")
    IF me_rmenuid&<>-1  !Fehler?
       DO  !Endlosschleife
            ~EVNT_MESAG(0)      !auf Ereignis warten 
            IF MENU(1)=40       !ACC angewählt?
                GOSUB acc_proc  !gehe zu ACC 
            ENDIF 
       LOOP
    ELSE    !kein Platz im Menü
        ALERT 4,"Kein Platz mehr für| ein weiteres ACC!",1," OK ",dummy| 
    ENDIF 
ENDIF
' Jetzt folgt das ACC-Hauptprogramm 
PROCEDURE acc_proc
    ALERT 4,"Beispiel-Accessory| in GFA-BASIC! ",1, " Super! ",dummy|
RETURN


Aus: ST-Computer 07 / 1992, Seite 138

Links

Copyright-Bestimmungen: siehe Über diese Seite