home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Computer Club Elmshorn Atari PD
/
CCE_PD.iso
/
pc
/
0400
/
CCE_0406.ZIP
/
CCE_0406.PD
/
FAX_DEV.KIT
/
CALAMUS.S
next >
Wrap
Text File
|
1992-04-06
|
6KB
|
226 lines
; Programm : TeleOffice-Druckertreiber für DMC Calamus 1.09N und SL
; Version : 1.0
; Edition : 3
; Autoren : Michael Bernards
; Jens Briesofsky
; Assembler : Turbo-C MAS
; Status : Version 1.0
;
; Statusmeldungen
E_BREAK = 1 ; Abbruch druch User
E_OK = 0 ; Alles OK
E_NOMEM = -1 ; nicht genug Speicher vorhanden
E_INTERN = -2 ; interner Fehler
E_PRERR = -3 ; special printer error
E_TOUT = -4 ; printer timeout
E_POFF = -5 ; printer offline
E_PAOUT = -6 ; paper out
LINECOUNT = 20 ; alle 20 Scanlines ein UNDO-Test
TIMEOUT = 6000 ; 30 Sekunden Timeout
text
indicator: dc.b "CALAMUSCPD" ; Kennung
start: link a6,#0
movem.l d1-a5,-(a7)
moveq.l #E_OK,d0
lea functab(pc),a0
move 8(a6),d1 ; Command auswerten
lsl #2,d1
add d1,a0
move.l (a0),a0
jmp (a0)
return: movem.l (a7)+,d1-a5 ; Rücksprung
unlk a6
rts
functab: dc.l return,get_info,pr_init,pr_reset,pr_page,return
dc.l get_error,return,return,return,return
;----------------------- GET DRIVER INFO ----------------------------------
get_info:
move.l #prt_info,d0
move.l fax_out,a0
tst.l cj
bne refresh_info
bsr getcj
move.l #error1,error
moveq #E_PRERR,d0 ; internal error
move.l cj,a0
tst.l cj
beq return
i_loop: tst.l (a0) ; NULL-Cookie
beq return
cmp.l #'FxOP',(a0)
beq i_found
addq.l #8,a0
bra i_loop
i_found: move.l 4(a0),fax_out ; pointer sichern
move.l 4(a0),a0
refresh_info:
move.l #error2,error ; offline
tst.w 2(a0) ; fax_ready
beq return
move.l #prt_info,d0
lea restab,a1
move.w 4(a0),(a1)
move.w 6(a0),2(a1)
lea formtab,a1
move.l 8(a0),d1
mulu #7200,d1
divu #254,d1 ; mm/10 -> dp
ext.l d1
move.l d1,24(a1)
move.l 12(a0),d1
mulu #7200,d1
divu #254,d1
ext.l d1
move.l d1,20(a1)
bra return
cj: dc.l 0
getcj: move.l $5a0.w,cj
rts
bra return
;------------------------- PRINT INIT CODES ------------------------------
pr_init: move.l fax_out,a0
move.l 22(a0),a0
moveq.l #0,d0
moveq.l #0,d1
moveq.l #0,d2
clr.w -(a7)
jsr (a0)
addq.l #2,a7
ext.l d0
tst.w d0
beq return
move.l #error2,error
clr.l d0
move.w #E_PRERR,d0
bra return
;----------------------------- PRINT RESET CODE ---------------------------
pr_reset: move.l fax_out,a0
move.l 42(a0),a0
jsr (a0)
move.l fax_out,a0
move.l 26(a0),a0
jsr (a0)
clr.l d0
bra return
;------------------------------ PRINT PAGE --------------------------------
pr_page: move.l 10(a6),a0 ; Pointer auf Parameter holen
move.l (a0),a1 ; a1 = Pointer auf Seitenbuffer
move.l 4(a0),d0 ; d0 = Scanlinebreite in Pixel
move.l 16(a0),d1 ; d1 = Anzahl Scanlines
move.l d0,d2
lsr.l #4,d2 ; width in words
move.l a1,a0
move.l fax_out,a1
move.l 30(a1),a1
jsr (a1)
bra return
;--------------------------- GET FEED ----------------------------------
get_feed: clr.l d0
move #-1,d0 ; alle erlaubt !
bra return
get_error: move.l error,d0
bra return
;..................... PRINTER INFORMATION TABLE ........................
data
prt_info: dc.w 1000 ; Version 1.0
dc.l %10000000000000000000000100010010 ; Flags:
; Druck darf stückweise erfolgen
; Zeilenvorschubfunktion enthalten
; Abbruch mit UNDO möglich
; Anzahl der Kopien einstellbar
; Centronics-Ausgabe möglich
dc.w 99 ; Max. Anzahl von Kopien
dc.w 1 ; 6 Seitenformate
p_formats: dc.l formtab ; Pointer auf Seitenformattabelle
dc.w 1 ; 4 Auflösungen
p_restab: dc.l restab ; Pointer auf Auflösungstabelle
dc.w 1 ; 3 Feeds
p_feedtab: dc.l feedtab ; Pointer auf Feed-Tabelle
dc.l 0 ; reserved long
dc.b "Tele Office FAX V1.0",0 ; Name
even
;----------------------- SEITENFORMATE
formtab:
;-----------------------
dc.w 0 ; Metric Index dp
dc.w 1 ; Format A4
dc.l 0 ; Seitenbreite und Höhe
dc.l 0
dc.l 0 ; Linker Rand in dp
dc.l 0 ; Oberer Rand in dp
dc.l 6346 ; Maximale Breite in dp
dc.l 8972 ; Maximale Höhe in dp
dc.l 0 ; keine feste Anzahl horz. und vert.
dc.l 0 ; Pixels
dc.w 16 ; horz. und vert. Modulo-Wert
dc.w 16
dc.w 1 ; Left margin modulo
dc.w 1 ; Top margin modulo
dc.l %00000000000000000000000000000000
dc.l 0 ; reserved long
;--------------------- AUFLÖSUNGEN
restab: ; Auflösungen
dc.w 196
dc.w 196
feedtab:
dc.w 0
dc.l feedname1
feedname1: dc.b "TKR Faxmodem",0
error1: dc.w 1
dc.w 29
dc.b "FAX_OUT ist nicht installiert",0
error2: dc.w 1
dc.w 38
dc.b "Es wurde noch kein Empfänger angegeben",0
fax_out: dc.l 0
bss
even
error: ds.l 1
end ; das war's !