;Druckertreiber ohne lästige Versätze
.MODEL tiny
print macro txt
mov ah,9
mov dx,offset txt
int 21h
endm
.CODE
IDEAL
;Deutsch equ 1 ;Deutsch eingeschaltet
;Ausschalten durch Auskommentierung
org 038h
OldInt5 dd ? ;geretteter Int 5
ISRBase: ;überschreibt Kommandozeile
org 100h
;╔══════════════════════════════════════════════════════╗
;║ Hauptprogramm ║
;╚══════════════════════════════════════════════════════╝
start: print Text0 ;Meldung
mov si,80h
mov cl,[si] ;Kommandozeilenzeichenzahl
xor ch,ch ;in CX
inc si ;1. Zeichen
cld
jcxz scancl3
scancl: lodsb
cmp al,'?'
je help
cmp al,'h'
je help
cmp al,'H'
je help
sub al,'0'
jc scancl1
cmp al,4
jc scancl2
scancl1: loop scancl
scancl3: xor al,al
scancl2:
push ax
mov ax,3505h ;Installations-Check
int 21h
cmp bx,offset ISRBase
jne NewRec
cmp [word ptr es:(offset ISRBase)+8],0d88eh ;(mov ds,ax)
jne NewRec
pop ax
;╔══════════════════════════════════════════════════════════════╗
;║ Deinstallation ║
;╚══════════════════════════════════════════════════════════════╝
lds dx,[es:OldInt5] ;modifiziert ds!
mov ax,2505h ;Interrupt rücksetzen
int 21h
push cs
pop ds
mov ah,49h ;Speicher freigeben
int 21h
print Text4
DosExit: mov ax,4C00h
int 21h ;Ende
help: print TextH
jmp DosExit ;Hilfe ausgeben
;╔══════════════════════════════════════════════════════╗
;║ Neuanlage von PrtScr ║
;╚══════════════════════════════════════════════════════╝
NewRec: mov es,[2ch] ;Segment Environment
mov ah,49h
int 21h ;ENV-Speicher ab es freigeben
pop ax
cmp al,1
jnz nopok1
mov [byte ptr poke1+1],3
nopok1: sub al,2
jc nopok23
mov [byte ptr poke23+1],0
add [byte ptr poke3+1],al ;selbstmodifizirender Code!!!
nopok23: push ds
pop es
mov si,offset NewInt5
mov di,offset ISRBase
mov cx,NewInt5E-NewInt5
cld
rep movsb
;vorgeschaufelt!
mov ax,3505h
int 21h ;alter Int21
mov [word ptr OldInt5],bx
mov [word ptr OldInt5+2],es
mov dx,offset ISRBase
mov ax,2505h
int 21h ;neuer Int21
print Text3 ;Meldung
mov dx,0fh ;nur 0f0h Bytes! (hat jeder!)
mov ax,3100h
int 21h ;TSR dx Paragrafen
NewInt5: ;Druckroutine
push ax
push bx
push cx
push dx
push ds
mov ax,40h ;BIOS-Zellen
mov ds,ax
mov al,1
xchg al,[100h]
cmp al,1
jnz acc
jmp acce
acc: sti
xor dx,dx
mov ah,2
int 17h
xor ah,80h
test ah,0a9h
jz noerr1
mov ax,0e07h ;Fehler-Piepser
int 10h
mov cl,-1
jmp short acce2
noerr1: call pcrlf
mov ah,0fh ;Get VM
int 10h
mov bl,ah
mov ah,3
int 10h
push dx ;Cursorpos
xor dx,dx
psloop: mov ah,2
int 10h
mov ah,8
int 10h
;4 Varianten:
;0 Drucker kann gar keine unteren Sonderzeichen
;1 Drucker kann ein paar davon (Präsident Drucker)
;2 Drucker im IBM-Modus (EPSON-Drucker)
;3 Drucker im NEC-Modus (NEC-Drucker)
poke1: cmp al,' ' ;bei 1 überpokt mit 3h
jc sonder
cmp al,7
jc nsonder
cmp al,'' ;Paragraf
jz nsonder
cmp al,20h
jc sonder
cmp al,7fh
jnz nsonder
sonder: mov ch,' '
poke23: jmp short sonder2 ;bei 2,3 überpokt mit Sprungweite 0
mov ch,al
poke3: mov al,1bh ;esc, bei 3 überpokt mit 1ch
call pout
mov al,'^'
call pout
sonder2: mov al,ch
nsonder: call pout
test ah,29h
jnz perr
inc dl ;Spalte
cmp dl,bl
jnz psloop
sub dl,dl
call pcrlf
inc dh ;Zeile
cmp [84h],dh ;Zeilenzahl-1
jnc psloop
mov cl,0
jmp short pok
perr: mov ax,0e07h
int 10h
mov cl,-1
pok: pop dx ;Cursorpos
mov ah,2
int 10h
acce2: cli
mov [100h],cl
acce: pop ds
pop dx
pop cx
pop bx
pop ax
iret
pcrlf: mov al,13
call pout
mov al,10
pout: push dx
xor dx,dx
xor ah,ah
int 17h
pop dx
ret
NewInt5E:
Text0 db 'PrtScr (haftmann#software) $'
IFDEF Deutsch
;Deutsche Texte
TextH db 13,10,'>> Programm zur Verbesserung der Hardcopyfunktion mit Taste PrtScr <<',13,10,10
db 'Parameter bei Installation (Erstaufruf):',13,10
db 'Eine Ziffer wählt die Möglichkeiten des Druckers aus (Schau ins Handbuch!)',13,10
db '0 - Drucker kann gar keine unteren Sonderzeichen, Vorgabe',13,10
db '1 - Drucker kann ein paar davon (z.B. Präsident Drucker)',13,10
db '2 - Drucker im IBM-Modus (EPSON-Drucker), Umschaltzeichen ESC^',13,10
db '3 - Drucker im NEC-Modus (NEC-Drucker), Umschaltzeichen FS^',13,10,10
db '? oder h - diese Hilfe; es erfolgt KEINE Installation',13,10,10
db 'Parameter bei Wiederaufruf (Deinstallation): keine',13,10,'$'
Text3 db 'resident geladen, Platzbedarf 256 Bytes',13,10,'$'
Text4 db 'vom Speicher entfernt',13,10,'$'
ELSE
;Englische Texte, übersetzt vom English-Guru M. Sternberg
TextH db 13,10,'>> TSR program to improve hardcopy-function by PrtScr<<',13,10,10
db 'parameters on install (use "-" or "/" or no prefix) :',13,10
db '? or h - just this help screen, (NO installation)',13,10,10
db ' to select printer capabilities (cf. printer manual):',13,10
db '0 - printer unable to print any extra character below 20h (default)',13,10
db '1 - printer able to print SOME extra chars (e.g. Präsident Printer)',13,10
db '2 - IBM-compatible printer or emulation using ESC^ to toggle',13,10
db '3 - NEC-compatible printer or emulation using FS^ to toggle',13,10,10
db 'parameters on recall (removal): none',13,10,'$'
Text3 db 'loaded using 256 Bytes',13,10,'$'
Text4 db 'removed from memory',13,10,'$'
ENDIF
end start
Detected encoding: OEM (CP437) | 1
|
|