Text in DOS spaltenweise ausgeben

Ein weiterer Filter zur Textmanipulation – aber etwas anderer, recht nützlicher Art – ist COL.DEB. Das Programm bereitet einen Text spaltenweise auf, sodaß Sie sich z.B. ein zweispaltiges Inhaltsverzeichnis Ihrer Platte zu Gemüte führen können. COL liest einen Text von der Standardeingabe zeilenweise ein, bis entweder der Puffer für jeweils eine Bildschirmseite voll, oder kein Zeichen mehr verfügbar ist. Danach formatiert es den Text in gewünschter Weise um und gibt ihn auf dem Bildschirm aus. Bei längeren Listen fügt COL nach jeder Seite eine Leerzeile ein und beginnt von vorne. COL ist in einem weiten Rahmen individuell konfigurierbar. Die Werte der DW-Zeile im hinteren Teil des Listings legen Anzahl und Breite der Spalten sowie die Seitenlänge fest. Zur Trennung der einzelnen Spalten verwendet COL jeweils ein zusätzliches Leerzeichen, weshalb z.B. bei zwei Spalten deren Breite nur noch maximal 39 betragen kann. Bewährte Werte sind:

2, 39 (27h), 24 (18h) für 2 Spalten
3, 25 (19h), 24 (18h) für 3 Spalten
4, 19 (13h), 24 (18h) für 4 Spalten

Die Zahlen in Klammern spiegeln den hexadezimalen Wert wieder, den Sie anstelle der vorhergehenden dezimalen Zahlen in die DW-Zeile im DEBUG-Listing ohne h (!) eingeben müssen. Ohne Änderungen entsteht COL.COM für die Textausgabe in zwei Spalten. Praktisch wird die ganze Sache, wenn Sie COL – jeweils mit den bewährten Werten – insgesamt dreimal übersetzen und in 2.COM, 3.COM und 4.COM umbenennen. Für ein zweispaltiges Directory geben Sie künftig z. B. »DIR | 2« ein. Je nach Bedarf können Sie nun jede Datei in mehreren Spalten übersichtlich am Bildschirm darstellen. Je mehr Spalten Sie verwenden, desto kürzer muß natürlich jede Zeile des auszugebenden Textes sein, sonst muß COL die Zeile umbrechen und es gibt sehr wahrscheinlich ein Durcheinander. Eine Zeile darf maximal 255 Zeichen lang sein – auf einer Bildschirmseite finden höchsten 252 in mehreren Spalten eingeordnete Zeilen Platz. Außer den Zeilenvorschüben werden sämtliche Steuerzeichen – auch Tabulatoren – ignoriert.

Name: COL.DEB
Funktion: Gibt einen Text spaltenweise aus.
Übersetzung: DEBUG <COL.DEB
Prüfsumme: D569
Anwendung: z. B. COL <Datei oder DIR | Datei
Einschränkungen: COL.DEB sollte praxisgerecht in 2, 3 und 4.COM übersetzt werden. Je länger die aufzubereitende Datei, desto länger braucht das Filter. Sämtliche Steuerzeichen

(außer Zeilenvorschüben) werden ignoriert.

A
XOR BX,BX           ;100
XOR SI,SI           ;102
XOR BP,BP           ;104
MOV CX,[1C9]        ;106
CALL 19C            ;10A
INC BH              ;10D
LOOP 10A            ;10F
INC SI              ;111 
ADD BP,100          ;112
CALL 151            ;116
JZ 121              ;119
CMP SI,[1CD]        ;11B
JB 106              ;11F
XOR DI,DI           ;121
MOV BX,1            ;123
PUSH DI             ;126
MOV CX,[1C9]        ;127
DEC CX              ;12B
CALL 168            ;12C
ADD DI,BP           ;12F
MOV DL,20           ;131
CALL 163            ;133
LOOP 12C            ;136
CALL 168            ;138
CALL 15C            ;13B
POP DI              ;13E
ADD DI,100          ;13F
CMP DI,BP           ;143
JB 126              ;145
CALL 151            ;147
JZ 15B              ;14A
CALL 15C            ;14C
JMP 100             ;14F
CALL 1AA            ;151
JZ 15B              ;154
MOV AH,0            ;156
MOV [1AB],AX        ;158
RET                 ;15B
MOV DL,D            ;15C
CALL 163            ;15E
MOV DL,A            ;161
MOV AH,2            ;163
INT 21              ;165
RET                 ;167
PUSH CX             ;168
MOV CL,[DI+200]     ;169
MOV CH,0            ;16D
LEA DX,[DI+201]     ;16F
MOV AH,40           ;173
INT 21              ;175
MOV CX,[1CB]        ;177
SUB CX,AX           ;17B
JZ 186              ;17D
MOV DL,20           ;17F
CALL 163            ;181
LOOP 181            ;184
POP CX              ;186
RET                 ;187
CALL 156            ;188
CMP BL,[1CB]        ;18B
JZ 1A1              ;18F
MOV By[1AB],6       ;191
MOV [BX+201],AL     ;196
INC BL              ;19A
CALL 1AA            ;19C
JA 188              ;19F
MOV AL,BL           ;1A1
MOV BL,0            ;1A3
MOV [BX+200],AL     ;1A5
RET                 ;1A9
MOV AX,600          ;1AA
MOV Wo[1AB],600     ;1AD
CMP AH,6            ;1B3
JNZ 1BE             ;1B6
MOV DL,FF           ;1B8
INT 21              ;1BA
JZ 1C8              ;1BC
CMP AL,1F           ;1BE
JA 1C8              ;1C0
CMP AL,A            ;1C2
JNZ 1AA             ;1C4
CMP AL,B            ;1C6
RET                 ;1C8
DW 2,27,18

RCX
CF
NCOL.COM
W
Q

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