Universeller Masken-Generator für DOS

Anspruchsvolle Bildschirmmasken sind das A und O einer jeden hochwertigen PC-Anwendung. Warum nicht auch in Stapeljobs? Drei Programme werden Ihnen die Arbeit erleichtern: SNAPSHOT- und LOADPIC.COM sowie MAKEPIC.BAT.

Wenn beim Aufruf kein Parameter angegeben ist, ersetzt SNAPSHOT die per [PrtScr]- bzw. [Druck]-Taste aktivierbare Hardcopy-Routine (Interrupt 5) durch ein einfaches Programm, das den aktuellen Bildschirminhalt in einen Puffer im RAM kopiert. Auf diese Weise können Sie selbst komplizierteste Bildschirm-Masken in beliebigen Anwendungen mit den dort vorhandenen komfortablen Befehlen erzeugen. Gefällt Ihnen die Bildschirmausgabe (nicht unbedingt die selbstgemachte), genügt ein Druck auf die »Hardcopy«-Taste – und die Maske ist gesichert. Anschließend kehren Sie auf die DOS-Ebene zurück und und speichern den Puffer-Inhalt mit »SNAPSHOT Datei« in eine Datei. Perfektionisten werden jetzt verwundert fragen, warum SNAPSHOT zunächst ins RAM und erst beim zweiten Aufruf in eine Datei speichert. Die Antwort: Wir gehen einen Kompromiß zwischen Tip und DOS ein. Weil das Betriebssystem DOS ja bekanntlich nicht mulitasking-fähig ist, erlaubt es – von wenigen Ausnahmen abgesehen – nur eine Operation zu einem Zeitpunkt. Ein speicherresidentes Programm hat daher das Nachsehen, weil zu dem Zeitpunkt, an dem es in Aktion treten soll, bereits z.B. eine Dateioperation im Gange sein kann. SNAPSHOT darauf einzustellen, wäre nur mit erhöhtem Aufwand möglich: Das Listing würde um ein Vielfaches länger werden – und das alles nur wegen eines Bildschirms…

Wenn Sie alle Einzelmasken in verschiedenen Dateien gesammelt haben, können Sie mit MAKEPIC.BAT ein Auswahl-Programm erzeugen, das bis zu 16 jeweils 4000 Byte großen Bildschirm-Masken mit einem Lade-Modul zusammenfügt. Die Beschränkung auf 16 Masken resultiert aus der Tatsache, daß COM-Programme – das Auswahl-Programm ist eins – nur 64 KByte groß sein dürfen (16 * 4000 = 64000). MAKEPIC.BAT arbeitet direkt mit LOADPIC.COM zusammen. Der COPY-Befehl erlaubt es, über » + « Dateien aneinanderzufügen. Durch die Option »/B« behandelt er alle Dateien als Binärdateien, sodaß Sie auch bequem Programme verketten können.

LOADPIC.COM setzt an seinem eigenen Programmende die Daten der Bilder voraus. Mit MAKEPIC.BAT lassen sich diese direkt, also ohne Umweg über »DB …« oder Linker, in das zu generierende Auswahl-Programm integrieren. Deshalb ergibt auch der Aufruf von LOADPIC ohne vorherige Behandlung mit SNAPSHOT und MAKEPIC keinen Sinn, weil dann die Maskendaten fehlen. LOADPIC ist also nur das Lade-Modul, das durch MAKEPIC.BAT an den Anfang des zu generierenden Auswahl-Programms plaziert wird.

Ein Aufruf des entstandenen Auswahl-Programms mit einem Parameter (A bis P) ermittelt das Startoffset der zu ladenden Maske und kopiert den Inhalt in den Bildschirmspeicher. Somit bringt das Programm die Maske in Sekundenbruchteilen auf den Bildschirm. Um sich die Arbeit beim Auswerten des Parameters zu erleichtern, entnimmt das Programm den Parameter aus dem ersten Standard-Dateisteuerblock (FCB) an Offset 5Ch des Program-Segment-Prefix‘ (PSP) und rechnet diesen Wert in das Offset der Bilderdaten um.

Das »Programm-Paket« funktioniert nur im 80×25-Zeichen-Text-Modus und benutzt stets die erste Bildschirmseite. Auf alten CGA-Karten ist durch den beschleunigten Zugriff auf den Bildschirmspeicher ein leichter »Schneefall« möglich. In manchen Fällen empfiehlt es sich, die Masken auf mehrere Lade-Programme aufzuteilen – im Extremfall 1 pro Programm – was den Ladevorgang beschleunigt. Das gilt speziell für Auswahl-Programme, die überwiegend auf Diskettenlaufwerken laufen sollen. Anstelle der je nach Bedarf bis 64 KByte müssen nur die tatsächlich benötigten 4000 Byte plus Ladeprogramm in den Arbeitsspeicher geladen werden.

In der folgenden Liste haben wir die notwendigen Schritte zur Handhabung unseres Maskengenerators nochmals zusammengefaßt:

  1. SNAPSHOT installieren.
  2. Beliebige Anwendung aufrufen.
  3. Maske erzeugen bzw. wählen.
  4. [PrtScr]- bzw. [Druck]-Taste drücken. (Bildschirmmaske wird im RAM festgehalten)
  5. Anwendung verlassen.
  6. Mit »SNAPSHOT MASKE_?.PIC« Maske aus dem RAM in in die Datei MASKE_?.PIC speichern. Je nach Stand des Vorgangs anstelle des Fragezeichens den Buchstaben A, B … P verwenden.
  7. Schritte 2 bis 6 maximal 16mal – für jede gewünschte Bildschirmmaske (MASKE_A.PIC … MASKE_P.PIC) einmal – wiederholen.
  8. Mit »MAKEPIC AUSWAHL MASKE_A.PIC … MASKE_P« Auswahl-Programm für die »Menüpunkte« A bis P generieren.
  9. Mit »AUSWAHL ?« die gewünschte Bildschirmmaske (? = A … P) aufrufen.
Name: SNAPSHOT.DEB
Funktion: Sichert Bildschirm-Masken in eine Datei.
Übersetzung: DEBUG <SNAPSHOT.DEB
Prüfsumme: 5BEA
Anwendung: 1. SNAPSHOT (ohne Parameter): (Programm wird installiert)2. [PrtScr]- bzw. [Druck]-Taste (sichert den Bildschirminhalt ins RAM) 3. SNAPSHOT Datei (RAM-Inhalt wird in der angegebenen Datei gespeichert)

4. Weiterverarbeitung mit MAKEPIC.BAT

Einschränkungen: Bei alten CGA-Karten kann es beim Abspeichern »Schnee« geben. Das Programm läßt sich nicht disaktivieren. Drucker-Hardcopies sind nicht mehr möglich. Jeder Druck auf die [PrtScr]- bzw. [Druck]-Taste überschreibt die alte Bildschirm-Maske im RAM. Anschließend ist die Rückkehr auf die Systemebene nötig, um den RAM-Inhalt in eine Datei zu kopieren. Verwendet immer die erste Bildschirmseite. Sämtliche Einschränkungen lassen sich jedoch vertreten, da SNAPSHOT nur für endgültige Bildschirm-Masken verwendet werden soll.
A
MOV BL,[80]         ;100
AND BX,FF           ;104
JNZ 167             ;108
MOV DX,11E          ;10A
MOV AX,2505         ;10D
INT 21              ;110
MOV DX,151          ;112
MOV AH,9            ;115
INT 21              ;117
MOV DX,10F1         ;119
INT 27              ;11C
PUSH DS             ;11E
PUSH BX             ;11F
XOR BX,BX           ;120
MOV DS,BX           ;122
MOV BL,[410]        ;124
AND BL,3            ;128
CMP BL,3            ;12B
MOV BX,B000         ;12E
JZ 135              ;131
MOV BH,B8           ;133
MOV DS,BX           ;135
MOV BX,F9E          ;137
PUSH [BX]           ;13A
CS:POP [BX+151]     ;13C
SUB BX,2            ;141
JNB 13A             ;144
POP BX              ;146
POP DS              ;147
IRET                ;148
DB "Fehler.$SNAPSHOT"
DB " installiert.$"
MOV 81[BX],BH       ;167
MOV DX,82           ;16B
XOR CX,CX           ;16E
MOV AH,3C           ;170
CALL 185            ;172
MOV BX,AX           ;175
MOV DS,CX           ;177
MOV DS,[16]         ;179
MOV DX,151          ;17D
MOV CX,FA0          ;180
MOV AH,40           ;183
INT 21              ;185
JB 18A              ;187
RET                 ;189
MOV DX,149          ;18A
MOV AH,9            ;18D
INT 21              ;18F
INT 20              ;191

RCX
93
NSNAPSHOT.COM
W
Q
Name: MAKEPIC.BAT
Funktion: Erzeugt aus bis zu 16 Bilddateien ein Auswahl-Programm.
Übersetzung: ./.
Anwendung: MAKEPIC Auswahl-Programm Maske-A […] [Maske-P]Auswahl-Programm = Name des zu generierenden Masken- Auswahl-Programms ohne Extension (.COM) Maske-A … Maske-P = jeweils mit SNAPSHOT gesicherte

Bildschirm-Masken

Einschränkungen: Die Anzahl der Bildschirm-Masken ist auf 16 beschränkt,weil COM-Programme nur 64 KByte groß sein dürfen.

LOADPIC.COM muß im aktuellen Verzeichnis stehen.

@ECHO OFF
SET DATEI=%1.COM
COPY LOADPIC.COM %DATEI%
:SCHLEIFE
COPY %DATEI%/B+%2/B
SHIFT
IF NOT %2!==! GOTO SCHLEIFE
SET DATEI=
Name: LOADPIC.DEB
Funktion: Wird von MAKEPIC.BAT als Lade-Modul für das zu generierende Auswahl-Programm verwendet.
Übersetzung: DEBUG <LOADPIC.DEB
Prüfsumme: A809
Anwendung: LOADPIC CHR CHR = Bildschirm-Maske (A … P)
Einschränkungen: LOADPIC sollte nicht eigenständig verwendet werden.Das Programm wird von MAKEPIC.BAT verwendet und zusammen mit den Maskendaten in das Auswahlprogramm kopiert. Die »Anwendung« bezieht sich demnach auf dieses Programm, dessen Namen Sie beim Aufruf von MAKEPIC.BAT frei wählen

können.

A
MOV CX,FA0          ;100
MOV AX,[5D]         ;103
MUL CX              ;106
MOV SI,AX           ;108
ADD SI,98C          ;10A
POP ES              ;10E
ES:MOV DI,[44E]     ;10F
ES:MOV AL,[410]     ;114
AND AL,3            ;118
CMP AL,3            ;11A
JZ 122              ;11C
ADD DI,8000         ;11E
MOV AX,B000         ;122
MOV ES,AX           ;125
CLD                 ;127
REPZ MOVSB          ;128
INT 20              ;12A

RCX
2C
NLOADPIC.COM
W
Q

Quelle: 200 Utilities für PC-/MS-DOS von Gerhard Schild und Thomas Jannot