home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / proasm / routines / packets.r < prev    next >
Text File  |  1993-04-04  |  5KB  |  281 lines

  1.  
  2. ;---;  packets.r  ;------------------------------------------------------------
  3. *
  4. *    ****    DOS PACKET HANDLING    ****
  5. *
  6. *    Author        Stefan Walter
  7. *    Version        1.02
  8. *    Last Revision    04.04.93
  9. *    Identifier    dph_defined
  10. *    Prefix        dph_    (DOS packet handling)
  11. *                 ¯   ¯      ¯
  12. *    Functions    AllocPacket, SendPacket, WaitForPacket, ReplyPacket
  13. *            FreePacket
  14. *
  15. ;------------------------------------------------------------------------------
  16.  
  17. ;------------------
  18.     ifnd    dph_defined
  19. dph_defined    =1
  20.  
  21. ;------------------
  22.  
  23. ;------------------------------------------------------------------------------
  24. *
  25. * AllocPacket    Allocate a packet structure and init it. Use V36 AllocDosObject
  26. *        or make it on your own.
  27. *
  28. * RESULT:    d0    APTR Packet or 0 if error.
  29. *        ccr    on d0.
  30. *
  31. ;------------------------------------------------------------------------------
  32.  
  33. ;------------------
  34. AllocPacket:
  35.  
  36. ;------------------
  37. ; Init.
  38. ;
  39. \start:
  40.     movem.l    d1-a6,-(sp)
  41.     moveq    #0,d7
  42.     bsr    OpenDosLib
  43.     beq.s    \exit
  44.  
  45. ;------------------
  46. ; Test version of dos.library.
  47. ;
  48. \testdos:
  49.     move.b    dlb_dosver(pc),d1
  50.     beq.s    \kick13
  51.  
  52. ;------------------
  53. ; Allocate dos object (3=packet).
  54. ;
  55. \kick20:
  56.     moveq    #3,d1
  57.     jsr    -228(a6)        ;AllocDosObject()
  58.     tst.l    d0
  59.     beq.s    \close
  60.     move.l    d0,d7
  61.     bra.s    \close
  62.  
  63. ;------------------
  64. ; Init 1.2/1.3 packet.
  65. ;
  66. \kick13:
  67.     moveq    #$44,d0
  68.     move.l    #$10001,d1
  69.     move.l    4.w,a6
  70.     jsr    -198(a6)        ;AllocMem()
  71.     tst.l    d0
  72.     beq.s    \close
  73.     move.l    d0,a0
  74.     lea    $14(a0),a1
  75.     move.l    a1,$a(a0)        ;link packet to msg
  76.     move.l    a0,(a1)            ;link msg to packet
  77.     move.l    a1,d7
  78.  
  79. ;------------------
  80. ; Installation done.
  81. ;
  82. \close:
  83.     bsr    CloseDosLib
  84.  
  85. \exit:
  86.     move.l    d7,d0
  87.     movem.l    (sp)+,d1-a6
  88.     rts
  89.  
  90. ;------------------
  91.  
  92. ;------------------------------------------------------------------------------
  93. *
  94. * FreePacket    Free a previously allocated packet.
  95. *
  96. * INPUT:    d0    APTR Packet.
  97. *
  98. ;------------------------------------------------------------------------------
  99.  
  100. ;------------------
  101. FreePacket:
  102.  
  103. ;------------------
  104. ; Init.
  105. ;
  106. \start:
  107.     movem.l    d0-a6,-(sp)
  108.     move.l    d0,a0
  109.     bsr    OpenDosLib
  110.     beq.s    \exit
  111.     move.l    (a0),d2
  112.  
  113. ;------------------
  114. ; Test version of dos.library.
  115. ;
  116. \testdos:
  117.     move.b    dlb_dosver(pc),d1
  118.     beq.s    \kick13
  119.  
  120. ;------------------
  121. ; FreeDosObject().
  122. ;
  123. \kick20:
  124.     moveq    #3,d1
  125.     move.l    a0,d2
  126.     jsr    -234(a6)        ;FreeDosObject()
  127.     bra.s    \close
  128.  
  129. ;------------------
  130. ; Free on our own.
  131. ;
  132. \kick13:
  133.     move.l    d2,a1
  134.     moveq    #$44,d0
  135.     move.l    4.w,a6
  136.     jsr    -210(a6)        ;FreeMem()
  137.  
  138. ;------------------
  139. ; Done.
  140. ;
  141. \close:
  142.     bsr    CloseDosLib
  143.  
  144. \exit:
  145.     movem.l    (sp)+,d0-a6
  146.     rts
  147.  
  148. ;------------------
  149.  
  150. ;------------------------------------------------------------------------------
  151. *
  152. * SendPacket    Send a packet to a port but do not wait. The type and
  153. *        argument fields must be already set.
  154. *
  155. * INPUT:    d1    APTR Packet.
  156. *        d2    Destination Port.
  157. *        d3    ReplyPort (our own).
  158. *
  159. ;------------------------------------------------------------------------------
  160.  
  161. ;------------------
  162. SendPacket:
  163.     
  164. ;------------------
  165. ; Init.
  166. ;
  167. \start:
  168.     movem.l    d0-a6,-(sp)
  169.     bsr    OpenDosLib
  170.     beq.s    \exit
  171.  
  172. ;------------------
  173. ; Test version of dos.library.
  174. ;
  175. \testdos:
  176.     move.b    dlb_dosver(pc),d0
  177.     beq.s    \kick13
  178.  
  179. ;------------------
  180. ; Use SendPkt().
  181. ;
  182. \kick20:
  183.     jsr    -246(a6)        ;SendPkt()
  184.     bra.s    \close
  185.  
  186. ;------------------
  187. ; Send it on our own.
  188. ;
  189. \kick13:
  190.     move.l    d1,a0
  191.     move.l    (a0),a1            ;=>msg
  192.     move.l    d3,14(a1)        ;remember reply port
  193.     move.l    d3,4(a0)        ;again
  194.     move.l    d2,a0            ;=>port
  195.     move.l    4.w,a6
  196.     jsr    -$16e(a6)        ;PutMsg()
  197.  
  198. ;------------------
  199. ; Done.
  200. ;
  201. \close:
  202.     bsr    CloseDosLib
  203.  
  204. \exit:
  205.     movem.l    (sp)+,d0-a6
  206.     rts
  207.  
  208. ;------------------
  209.  
  210. ;------------------------------------------------------------------------------
  211. *
  212. * WaitForPacket    Wait for a packet on a port and return packet.
  213. *
  214. * INPUT:    d0    Port to wait on.
  215. *
  216. * RESULT:    d0    Packet.
  217. *
  218. ;------------------------------------------------------------------------------
  219.  
  220. ;------------------
  221. WaitForPacket:
  222.     
  223. ;------------------
  224. ; Do it.
  225. ;
  226. \start:
  227.     movem.l    d1-a6,-(sp)
  228.     move.l    4.w,a6
  229.     move.l    d0,a2
  230. \wait:
  231.     move.l    a2,a0
  232.     jsr    -$180(a6)        ;WaitPort
  233.     move.l    a2,a0
  234.     jsr    -$174(a6)        ;GetMsg()
  235.     tst.l    d0
  236.     beq.s    \wait
  237.     move.l    d0,a0
  238.     move.l    10(a0),d0        ;packet
  239.     movem.l    (sp)+,d1-a6
  240.     rts
  241.  
  242. ;------------------
  243.  
  244. ;------------------------------------------------------------------------------
  245. *
  246. * ReplyPacket    Reply a previously recieved packet.
  247. *
  248. * INPUT:    d1    APTR Packet.
  249. *        d2    Our port.
  250. *
  251. ;------------------------------------------------------------------------------
  252.  
  253. ;------------------
  254. ReplyPacket:
  255.     
  256. ;------------------
  257. ; Do it.
  258. ;
  259. \start:
  260.     move.l    a0,-(sp)
  261.     move.l    d1,a0
  262.     move.l    d2,d3
  263.     move.l    4(a0),d2
  264.     move.l    (sp)+,a0
  265.     bra    SendPacket
  266.  
  267. ;------------------
  268.  
  269. ;--------------------------------------------------------------------
  270.  
  271. ;------------------
  272.     include    doslib.r
  273.  
  274. ;--------------------------------------------------------------------
  275.  
  276. ;------------------
  277.     endif
  278.  
  279.     end
  280.  
  281.