home *** CD-ROM | disk | FTP | other *** search
/ AMIGA PD 1 / AMIGA-PD-1.iso / Programme_zum_Heft / Anwendungen / Kurztests / PostScript / PsIntrp / console.a < prev    next >
Text File  |  1987-09-06  |  4KB  |  224 lines

  1.  
  2.  
  3.    xref     abortps
  4.    xref     the_window
  5.  
  6. *   xdef     con_signal_number
  7.  
  8.    section  one
  9.  
  10.    include  "ps.h"
  11.  
  12.  
  13.    lref  FindTask,45
  14.    lref  AllocSignal,51
  15.    lref  FreeSignal,52
  16.    lref  AddPort,55
  17.    lref  RemPort,56
  18.    lref  GetMsg,58
  19.    lref  OpenDevice,70
  20.    lref  CloseDevice,71
  21.    lref  DoIO,72
  22.    lref  SendIO,73
  23.  
  24. callex   macro
  25.          move.l   A6,-(SP)
  26.          move.l   4,A6
  27.          jsr      _LVO\1(A6)
  28.          move.l   (SP)+,A6
  29.          endm
  30.  
  31.    xdef     start_console
  32.    xdef     stop_console
  33.    xdef     conmayread
  34.    xdef     conputchar
  35.    xdef     conputstr
  36.  
  37. nt_msgport  equ   4
  38.  
  39. pa_signal   equ   0
  40. pa_ignore   equ   2
  41.  
  42. cmd_reset   equ   1
  43. cmd_read    equ   2
  44. cmd_write   equ   3
  45. cmd_update  equ   4
  46. cmd_clear   equ   5
  47. cmd_stop    equ   6
  48. cmd_start   equ   7
  49. cmd_flush   equ   8
  50.  
  51.  
  52. start_console
  53.    move.l   the_window,o_window
  54.  
  55.    move.l   #128,o_length
  56. *
  57.    lea      console_name,A0
  58.    moveq    #0,D0             unit
  59.    lea      out_request,A1    IORequest
  60.    moveq    #0,D1             flags
  61.    callex   OpenDevice
  62. *
  63.  
  64.    tst.l    D0
  65.    bne      abortps
  66.  
  67. * was opened
  68.    move.b   #nt_msgport,ln_type
  69. *   clr.b     port_flags
  70.    move.b   #pa_ignore,port_flags
  71.  
  72.    moveq    #-1,D0
  73.    callex   AllocSignal
  74.    move.b   D0,con_signal_number
  75.  
  76.    moveq    #0,D0       current task
  77.    move.l   D0,A1
  78.    callex   FindTask
  79.    move.l   D0,this_task
  80.  
  81.    lea      console_port,A1
  82.    callex   AddPort
  83.  
  84.    move.l   #console_port,reply_port
  85.  
  86.    move.l   #out_request,A1
  87.    move.l   #in_request,A0
  88.    moveq    #11,D2
  89. 1$ move.l   (A1)+,(A0)+
  90.    dbra     D2,1$
  91.  
  92.    bra      conin
  93.  
  94.  
  95.  
  96. stop_console
  97.    moveq    #0,D0
  98.    move.b   con_signal_number,D0
  99.    bls      1$
  100.    callex   FreeSignal
  101. 1$
  102.  
  103.    lea      console_port,A1
  104.    callex   RemPort
  105.  
  106.    lea      out_request,A1
  107.    callex   CloseDevice
  108.    rts       
  109.  
  110.  
  111. conmayread
  112.    lea      console_port,A0
  113.    callex   GetMsg
  114.    tst.l    D0
  115.    bne      1$
  116.    moveq    #-1,D0
  117.    rts
  118. 1$
  119.    moveq    #0,D0
  120.    move.b   con_in_buffer,D0
  121.    move.l   D0,-(SP)
  122.    bsr      conin
  123.    move.l   (SP)+,D0
  124.    rts
  125.  
  126. conin
  127.    move.w    #cmd_read,i_command
  128.    move.l    #con_in_buffer,i_data
  129.    moveq     #1,D0
  130.    move.l    D0,i_length
  131.  
  132.    lea      in_request,A1
  133.    callex   SendIO
  134.  
  135.    rts
  136.  
  137.  
  138. conputchar
  139.    move.w   #cmd_write,o_command
  140.    lea      con_out_buffer,A0
  141.    move.b   D0,(A0)
  142.    move.l   A0,o_data
  143.    moveq    #1,D0
  144.    move.l   D0,o_length
  145.    lea      out_request,A1
  146.    callex   DoIO
  147.    rts
  148.  
  149.  
  150. conputstr
  151.    move.w   #cmd_write,o_command
  152.    move.l   D2,o_data
  153.    move.l   D3,o_length
  154.    lea      out_request,A1
  155.    callex   DoIO
  156.    move.l   o_actual,D0
  157.    rts
  158.  
  159.  
  160. console_name
  161.    dc.b      'console.device',0
  162.  
  163.    section  two,bss
  164.  
  165. out_request
  166.    ds.b     14    LN
  167. reply_port
  168.    ds.l     1     reply port
  169.    ds.w     1     length
  170.    ds.l     2     device node pointer & unit
  171. o_command
  172.    ds.w     1
  173.    ds.b     2     flags & error
  174. o_actual
  175.    ds.l     1     actual length
  176. o_length
  177.    ds.l     1
  178. o_window
  179. o_data
  180.    ds.l     2
  181.  
  182.  
  183.  
  184. in_request
  185.    ds.b     14    LN
  186.    ds.l     1
  187.    ds.w     1
  188.    ds.l     2
  189. i_command
  190.    ds.w     1
  191.    ds.b     2
  192.    ds.l     1
  193. i_length
  194.    ds.l     1
  195. i_data
  196.    ds.l     2
  197.  
  198. * message port
  199. console_port
  200. * LN = A A B B A
  201.    ds.l     1
  202.    ds.l     1
  203. * type of LN & pri & name
  204. ln_type
  205.    ds.b     1
  206.    ds.b     1
  207.    ds.l     1
  208. port_flags
  209.    ds.b     1     ;flags
  210. con_signal_number
  211.    ds.b     1     ;signal bit num
  212. this_task
  213.    ds.l     3     ;task & next 14b. is LH
  214.    ds.b     6
  215. * end of message port
  216.  
  217. con_in_buffer
  218.    ds.b     2
  219. con_out_buffer
  220.    ds.b     2
  221.  
  222.    end
  223.  
  224.