Udv!
Kis segitseget szeretnek kerni. Van egy Clipper programrendszer, ami DOS
alatt rendesen mukodik, nyomtat is, de Windows XP alatt nem. Windows
beallitasok nem
hoztak eredmenyt, ezert arra gondoltam, atiranyitom a nyomtatast file-ba,
aztan majd
kezzel kinyomtatom a dolgokat. Irtam egy egyszeru progit, ami elvben ezt
csinalja,
CON<->FILE atitanyitasra jo, de ha LPT1 szerepel, akkor elnyeli a nyomtatora
kuldott
dolgokat. DOS alatt biztosan, nyilvan Windows alatt se mukodne.
*******
Title nyomi ;program's title
Comment *
LPT1 átirányítás...
*
;Data section (definition of data area)
Data Segment Para Public 'Data'
fname db "c:\temp\lista.txt",0
hibauz db "Nyitási hiba!$"
atir_h db "Atirányítás nem sikerült!$"
old_handle dw ?
mut db ?
Data Ends ;other data segs from here
;-------------------------------
;Stack section
Stck Segment Para Stack 'Stack'
Stck_siz Dw 256 Dup (?) ;stack's size 256 words
Stck_start Label Word ;Top of the stack
Stck Ends
Page
;-------------------------------
;Code section
Code Segment Para Public 'Code'
Start Proc Far
Assume CS:Code, DS:Data, SS:Stck, ES:nothing
Push Ds
Xor Ax, Ax
Push Ax ;init for return
Mov Ax, Data
Mov Ds, Ax ;init ds reg
;main program
Xor Dx, Dx
Mov Ah, 1
Int 17h ; init printer
; Mov Ah, 02h
; Mov Dl, 07h
; Int 21h ; BEEP
Mov Ax, 06C00h ; extended open
Mov Bx, 04002h
Xor Cx, Cx
Mov Dx, 011h
Mov Si, Offset fname
Int 21h
Jc nyit_hiba
Push Ax
Pop Bx
Mov Ah, 046h
Mov Cx, 4 ;1->Output CON 4->LPT1, 0378h
Int 21h
Jc atir_hiba
Mov Ah, 0
Mov Al, 041h
Int 17h ;'A' a nyomtatora
; Mov Ah, 040h
; Mov Cx, 10
; Mov Dx, Offset fname
; Int 21h
; Mov Ah, 068h
; Int 21h ; flush
Mov Ah, 03Eh ; lezar
Int 21h
Jmp Short vege
nyit_hiba:
Mov Dx, Offset hibauz
Jmp Short h_ki
atir_hiba:
Mov Dx, Offset atir_h
h_ki: Mov Ah, 09h
Int 21h
vege:
Ret ;exit to caller process ->
;far return to Dos
Start Endp
Code Ends ;other code segments
End Start
*******
Talaltam a neten egy masik kodot, ez elvben pontosan azt csinalja, amire
szuksegem van.
A megfejtese meghaladja a kepessegeimet, es
az a baj, hogy inditasnal az 5. utasitasban 6-os kivetelt csinal egy DOS
gepen,
igy nem is probaltam ki, Windows alatt mi lenne vele. Ahogy nezegettem, a
0:0004 cimre
akar irni, ami tudtommal a megszakitasi vektor tabla, ezt talan egy erre
valo megszakitassal
elintezve mukodesre lehet birni.
Tudja valaki a megoldast?
*******
code segment para common
assume cs:code, ds:code, ss:code, es:code
org 100h
BufLen equ 16384
.386p
Start:
jmp Indul
;----------------------------
New1: push bx
mov bx, word ptr cs:Index
mov byte ptr cs:Puffer[bx],al
inc word ptr cs:Index
cmp word ptr cs:Index,BufLen
jb short NoSave
mov word ptr cs:Index,0
; call Save
NoSave: pop bx
iret
;----------------------------
Save:
pusha
push ds cs
pop ds
; sti
mov ah,3ch
xor cx,cx
lea dx,Sname
int 21h ;create file
jc short Hiba
xchg ax,bx ;handle
mov ah,40h
mov cx,BufLen
lea dx,Puffer
int 21h ;write to file
mov ah,3eh ;close file
int 21h
Hiba:
pop ds
popa
ret
;------
Sname: db 'parallel.dat',0
;-------
Index dw 0
Puffer db BufLen dup (0)
;----------------------------
Indul:
;---- set int1 start
push ds
push 0
pop ds
mov word ptr ds:[4],offset New1 ;set int1
mov word ptr ds:[6],cs
pop ds
;---- set int1 end
;-----set trap start
mov eax,cr4
or al,8 ;DE on
mov cr4,eax
mov eax,378h ;port
mov dr0,eax
mov eax,00020002h ;G0=1, RW=10, LEN=00 -> DR0
mov dr7,eax
;-----set trap end
mov dx,Indul-Start+101h
int 27h ;stay resident
code ends
end Start
*******
kosz,
Viktor
|