← ST-Computer 02 / 1990

SHOW_CMD: Zeig mir Deine Command Line!

Programmierpraxis

Manchmal möchte man einem Programm Parameter übergeben, weiss aber nicht, in welcher Form. Ein anderes Programm übergibt die Parameter richtig. Nun müsste es doch eine Möglichkeit geben, herauszufinden, was dieses Programm übergibt...

Diese Möglichkeit gibt es auch. Man braucht einfach nur ein Programm, das die erhaltenen Parameter auf dem Monitor ausgibt. Wie geschieht das? Ganz einfach: Beim Starten eines Programmes mit Hilfe von Pexec(), und damit startet auch das Desktop die Programme, kann man Parameter übergeben. Die sogenannte Command Line steht ab Position $80 in der Basepage, dem Teil des Programmes, das das GEMDOS erzeugt und in dem alle Informationen zu Programmlänge und Sektoraufteilung stehen. Das Byte mit dem Offset $80 am Beginn der Basepage gibt die Anzahl der Zeichen an, die übergeben werden; danach kommt gleich die eigentliche Command Line. Bleibt nur noch ungeklärt, wie man an die Anfangsadresse der Basepage kommt. Nichts leichter als das: Sie liegt auf dem Stack. Man braucht sie sich also nur zu holen und weiß dann die Anzahl und die Adresse der auszugebenden Zeichen. Diese kann man mit der GEMDOS-Funktion Conout auf den Bildschirm schreiben. Das folgende Programm SHOW_CMD tut genau das. Es folgt noch ein Zeilenvorschub und es wird auf einen Tastendruck gewartet, damit man genug Zeit hat, die ausgegebene Command Line auch zu lesen. Ist die Anzahl der auszugebenden Zeichen gleich 0, wird das Programm sofort beendet. Somit läßt sich leicht feststellen, ob überhaupt Parameter übergeben wurden. Soweit zur Arbeitsweise des Programms.

Ich habe das nachfolgende Listing mit dem Assembler von Metacomco übersetzt, aber auch mit anderen Assemblern dürfte es keine Probleme geben, notfalls müssen vor die Direktiven text und end ein Punkt. Ist das Programm abgetippt und assembliert, sollte man ihm den Namen des Programmes geben, das die Parameter erhält. Wird SHOW_CMD dann von dem Parameter-übergebenden Programm aufgerufen, kann man die Command Line auf dem Bildschirm ablesen. Es dürfte jetzt kein Problem mehr sein, selber eine entsprechende Command Line zu basteln, ein Aufruf aus eigenen Programmen ist möglich. Bleibt mir nur noch, viel Spaß beim eigenen Experimentieren zu wünschen!

************************************************** * * * SHOW_CMD - zeigt die übergebene Command Line* * * * geschrieben von: Oliver Kuhn * * Heinrich-Heine-Str. 28 * * 3550 Marburg * * * * Version vom 10.10.88 * * (c) MAXON Computer GmbH 1990 * ************************************************** text ; Programm benutzt nur ; Textsegment move.l 4(sp),a6 ; Anfangsadresse Basepage ; -> a6 lea $80{a6),a5 ; Anfangsadresse ; Command Line -> a5 clr.w d7 ; d7 löschen, damit oberes ; Byte 0 ist move.b (a5)+,d7 ; Anzahl der Zeichen ; -> d7 tst.b d7 ; Sind überhaupt Zeichen ; auszugeben ? beq ende ; wenn nicht, beenden subq.w #1,d7 ; d7 für dbra um 1 ; verringern aus: ; hier beginnt die ; Ausgabeschleife clr.w d0 ; d0 löschen, damit oberes ; Byte 0 ist move.b (a5)+,d0 ; Zeichen in d0 ; zwischenspeichern move.w d0,-(sp) ; Zeichen für Ausgabe ; auf Stack legen move.w #2,-(sp) ; Funktionscode 'Conout' ; auf Stack legen trap #1 ; GEMDOS aufrufen addq.l #4,sp ; Stack restaurieren dbra d7,aus ; wenn noch Zeichen ; auszugeben sind nach ; aus springen move.w #$D,-(sp) ; CR (Carriage Return) ; auf Stack legen move.w #$2,-(sp) ; Funktionscode 'Conout' ; auf Stack legen trap #1 ; GEMDOS aufrufen addq.l #4,sp ; Stack restaurieren move.w #$A,-(sp) ; LF (Linefeed) auf ; Stack legen move.w #$2,-(sp) ; Funktionscode 'Conout' ; auf Stack legen trap #1 ; GEMDOS aufrufen addq.l #4,sp ; Stack restaurieren move.w #7,-(sp) ; Funktionscode ; 'Direct Con Without Echo' ; auf Stack legen trap #1 ; GEMDOS aufrufen addq.l #2,sp ; Stack restaurieren ende clr.w -(sp) ; Funktionscode 'Term' auf ; Stack legen trap #1 ; mit GEMDOS-Aufruf ; Programm beenden end
Oliver Kuhn