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 >
Text File  |  1992-04-06  |  6KB  |  226 lines

  1.  
  2. ; Programm  : TeleOffice-Druckertreiber für DMC Calamus 1.09N und SL
  3. ; Version   : 1.0
  4. ; Edition   : 3
  5. ; Autoren   : Michael Bernards
  6. ;             Jens Briesofsky
  7. ; Assembler : Turbo-C MAS
  8. ; Status    : Version 1.0
  9. ;
  10.  
  11.  
  12. ;                               Statusmeldungen
  13. E_BREAK     =   1             ; Abbruch druch User
  14. E_OK        =   0             ; Alles OK
  15. E_NOMEM     =  -1             ; nicht genug Speicher vorhanden
  16. E_INTERN    =  -2             ; interner Fehler
  17. E_PRERR     =  -3             ; special printer error
  18. E_TOUT      =  -4             ; printer timeout
  19. E_POFF      =  -5             ; printer offline
  20. E_PAOUT     =  -6             ; paper out
  21.  
  22. LINECOUNT   =  20             ; alle 20 Scanlines ein UNDO-Test
  23. TIMEOUT     =  6000           ; 30 Sekunden Timeout
  24.  
  25.    text
  26.  
  27. indicator:     dc.b    "CALAMUSCPD"   ; Kennung
  28. start:         link     a6,#0
  29.                movem.l  d1-a5,-(a7)
  30.                moveq.l  #E_OK,d0
  31.                lea      functab(pc),a0
  32.                move     8(a6),d1       ; Command auswerten
  33.                lsl      #2,d1
  34.                add      d1,a0
  35.                move.l   (a0),a0
  36.                jmp      (a0)
  37.  
  38. return:        movem.l  (a7)+,d1-a5    ; Rücksprung
  39.                unlk     a6
  40.                rts
  41.  
  42. functab:       dc.l    return,get_info,pr_init,pr_reset,pr_page,return
  43.                dc.l    get_error,return,return,return,return
  44.  
  45.  
  46. ;----------------------- GET DRIVER INFO ----------------------------------
  47.  
  48. get_info:
  49.                 move.l    #prt_info,d0
  50.                 move.l    fax_out,a0
  51.                 tst.l    cj
  52.                 bne        refresh_info
  53.                 bsr        getcj
  54.  
  55.                 move.l    #error1,error
  56.                 moveq    #E_PRERR,d0                    ; internal error
  57.                 move.l    cj,a0
  58.                 tst.l    cj
  59.                 beq        return
  60.  
  61. i_loop:            tst.l    (a0)                    ; NULL-Cookie
  62.                 beq        return
  63.  
  64.                 cmp.l    #'FxOP',(a0)
  65.                 beq        i_found
  66.                 addq.l    #8,a0
  67.                 bra        i_loop
  68.  
  69. i_found:        move.l    4(a0),fax_out            ; pointer sichern
  70.                 move.l    4(a0),a0
  71. refresh_info:
  72.                 move.l    #error2,error            ; offline
  73.                 tst.w    2(a0)                    ; fax_ready
  74.                 beq        return
  75.                 move.l    #prt_info,d0
  76.  
  77.                 lea        restab,a1
  78.                 move.w    4(a0),(a1)
  79.                 move.w    6(a0),2(a1)
  80.                 lea        formtab,a1
  81.                 move.l    8(a0),d1
  82.                 mulu    #7200,d1
  83.                 divu    #254,d1                    ; mm/10 -> dp
  84.                 ext.l    d1
  85.                 move.l    d1,24(a1)
  86.                 move.l    12(a0),d1
  87.                 mulu    #7200,d1
  88.                 divu    #254,d1
  89.                 ext.l    d1
  90.                 move.l    d1,20(a1)
  91.                 bra        return
  92.  
  93. cj:                dc.l    0
  94.  
  95. getcj:            move.l    $5a0.w,cj
  96.                 rts
  97.  
  98.                bra      return
  99.  
  100. ;------------------------- PRINT INIT CODES ------------------------------
  101.  
  102. pr_init:        move.l    fax_out,a0
  103.                 move.l    22(a0),a0
  104.                 moveq.l    #0,d0
  105.                 moveq.l    #0,d1
  106.                 moveq.l    #0,d2
  107.                 clr.w    -(a7)
  108.                 jsr        (a0)
  109.                 addq.l    #2,a7
  110.                 ext.l    d0
  111.                 tst.w    d0
  112.                 beq        return
  113.                 move.l    #error2,error
  114.                 clr.l    d0
  115.                 move.w    #E_PRERR,d0
  116.                bra      return
  117.  
  118. ;----------------------------- PRINT RESET CODE ---------------------------
  119.  
  120. pr_reset:        move.l    fax_out,a0
  121.                 move.l    42(a0),a0
  122.                 jsr        (a0)
  123.                 move.l    fax_out,a0
  124.                 move.l    26(a0),a0
  125.                 jsr        (a0)
  126.                 clr.l    d0
  127.                 bra      return
  128.  
  129. ;------------------------------ PRINT PAGE --------------------------------
  130.  
  131. pr_page:        move.l   10(a6),a0      ; Pointer auf Parameter holen
  132.                 move.l   (a0),a1        ; a1 = Pointer auf Seitenbuffer
  133.                 move.l   4(a0),d0       ; d0 = Scanlinebreite in Pixel
  134.                 move.l   16(a0),d1      ; d1 = Anzahl Scanlines
  135.                 move.l    d0,d2
  136.                 lsr.l    #4,d2            ; width in words
  137.                 move.l    a1,a0
  138.                 move.l    fax_out,a1
  139.                 move.l    30(a1),a1
  140.                 jsr        (a1)
  141.  
  142.                bra      return
  143.  
  144. ;--------------------------- GET FEED ----------------------------------
  145.  
  146. get_feed:      clr.l    d0
  147.                move     #-1,d0         ; alle erlaubt !
  148.                bra      return
  149.  
  150. get_error:        move.l    error,d0
  151.                 bra        return
  152.  
  153. ;..................... PRINTER INFORMATION TABLE ........................
  154.  
  155.    data
  156.  
  157. prt_info:      dc.w    1000           ; Version 1.0
  158.                dc.l    %10000000000000000000000100010010   ; Flags:
  159. ;                                        Druck darf stückweise erfolgen
  160. ;                                        Zeilenvorschubfunktion enthalten
  161. ;                                        Abbruch mit UNDO möglich
  162. ;                                        Anzahl der Kopien einstellbar
  163. ;                                        Centronics-Ausgabe möglich
  164.                dc.w    99             ; Max. Anzahl von Kopien
  165.  
  166.                dc.w    1              ; 6 Seitenformate
  167. p_formats:     dc.l    formtab        ; Pointer auf Seitenformattabelle
  168.                dc.w    1              ; 4 Auflösungen
  169. p_restab:      dc.l    restab         ; Pointer auf Auflösungstabelle
  170.                dc.w    1              ; 3 Feeds
  171. p_feedtab:     dc.l    feedtab        ; Pointer auf Feed-Tabelle
  172.                dc.l    0              ; reserved long
  173.                dc.b    "Tele Office FAX  V1.0",0   ; Name
  174.                even
  175.  
  176. ;----------------------- SEITENFORMATE
  177.  
  178. formtab:
  179.  
  180. ;----------------------- 
  181.                dc.w    0              ; Metric Index dp
  182.                dc.w    1              ; Format A4
  183.                dc.l    0              ; Seitenbreite und Höhe
  184.                dc.l    0
  185.                dc.l    0            ; Linker Rand in dp
  186.                dc.l    0            ; Oberer Rand in dp
  187.                dc.l    6346           ; Maximale Breite in dp 
  188.                dc.l    8972           ; Maximale Höhe in dp
  189.                dc.l    0              ; keine feste Anzahl horz. und vert.
  190.                dc.l    0              ;  Pixels
  191.                dc.w    16              ; horz. und vert. Modulo-Wert
  192.                dc.w    16
  193.                dc.w    1              ; Left margin modulo
  194.                dc.w    1              ; Top margin modulo
  195.                dc.l    %00000000000000000000000000000000
  196.                dc.l    0              ; reserved long
  197.  
  198. ;--------------------- AUFLÖSUNGEN
  199.  
  200. restab:                                ; Auflösungen
  201.                dc.w    196
  202.                dc.w    196
  203. feedtab:
  204.                dc.w    0
  205.                dc.l    feedname1
  206.  
  207. feedname1:     dc.b    "TKR Faxmodem",0
  208.  
  209. error1:            dc.w    1
  210.                 dc.w    29
  211.                 dc.b    "FAX_OUT ist nicht installiert",0
  212.  
  213. error2:            dc.w    1
  214.                 dc.w    38
  215.                 dc.b    "Es wurde noch kein Empfänger angegeben",0
  216.  
  217. fax_out:        dc.l    0
  218.  
  219.    bss
  220.    even
  221.  
  222. error:            ds.l    1
  223.  
  224.    end                                ; das war's !
  225.  
  226.