home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 397.lha / PacketSupport / sendpacket.c < prev   
C/C++ Source or Header  |  1990-07-01  |  2KB  |  68 lines

  1. /*
  2.  
  3.     Packetsupport.lib
  4.     -----------------
  5.  
  6.     DOS-Packet support .lib for Lettuce C V5.04
  7.  
  8.     no © 1990 by Oliver Wagner,
  9.          Landsberge 5,
  10.          4322 Sprockhövel,
  11.          West Germany
  12.  
  13.     Use at your own risk, for everything you want!
  14.  
  15.     long getres2();
  16.     -> return res2 of last packet
  17.  
  18.     long sendpacket(device proc, action, arg1, arg2...)
  19.     -> send packet with type "action" to
  20.        device proc, with arg1 arg2 arg3
  21.        return res1 of packet, set res2
  22.  
  23. */
  24.  
  25. #include <proto/dos.h>
  26. #include <proto/exec.h>
  27. #include <string.h>
  28. #include <exec/memory.h>
  29. #include "packetsupport.h"
  30.  
  31. /* simply return res2 of last packet */
  32. static long res2;
  33. long getres2(void)
  34. {
  35.     return(res2);
  36. }
  37.  
  38. /* send a packet */
  39. long __stdargs sendpacket(devproc,type,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
  40. struct MsgPort *devproc;
  41. long type;
  42. long arg1,arg2,arg3,arg4,arg5,arg6,arg7;
  43. {
  44.     struct MsgPort *replyport=CreatePort(0,0);
  45.     long res1=0;
  46.     struct StandardPacket *packet=AllocMem(sizeof(struct StandardPacket),
  47.                        MEMF_CLEAR|MEMF_PUBLIC);
  48.     if(!packet||!replyport||!devproc) goto xit;
  49.  
  50.     packet->sp_Msg.mn_Node.ln_Name=&(packet->sp_Pkt);
  51.     packet->sp_Pkt.dp_Link=&(packet->sp_Msg);
  52.     packet->sp_Pkt.dp_Port=replyport;
  53.     packet->sp_Pkt.dp_Type=type;
  54.     memcpy(&packet->sp_Pkt.dp_Arg1,&arg1,8*4);
  55.  
  56.     PutMsg(devproc,packet);
  57.     WaitPort(replyport);
  58.     GetMsg(replyport);
  59.  
  60.     res1=packet->sp_Pkt.dp_Res1;
  61.     res2=packet->sp_Pkt.dp_Res2;
  62.  
  63. xit:
  64.     if(packet) FreeMem(packet,sizeof(struct StandardPacket));
  65.     if(replyport) DeletePort(replyport);
  66.     return(res1);
  67. }
  68.