home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / misc / emu / FS1541_11.lha / FS1541 / support.c < prev    next >
C/C++ Source or Header  |  1996-12-07  |  3KB  |  114 lines

  1. /*
  2.     FS1541
  3.  
  4.     support.c
  5.  
  6.  
  7.     These are support routines for PETSCII<->ASCII conversion and
  8.     BCPL conversion.
  9.  
  10. */
  11.  
  12. #include <string.h>
  13.  
  14. #include <exec/types.h>
  15. #include <exec/execbase.h>
  16. #include <dos/dosextens.h>
  17. #include <dos/filehandler.h>
  18. #include <devices/input.h>
  19. #include <devices/inputevent.h>
  20.  
  21. #include <proto/exec.h>
  22.  
  23. #include "support.h"
  24. #include "main.h"
  25.  
  26. /*-------------------------------------------------------------------------*/
  27.  
  28. void ReturnPacket(struct DosPacket *packet, LONG res1, LONG res2)
  29. {
  30.     struct MsgPort *mp = packet->dp_Port;
  31.  
  32.     packet->dp_Port = ourport;
  33.     packet->dp_Res1 = res1;
  34.     packet->dp_Res2 = res2;
  35.  
  36.     PutMsg(mp, packet->dp_Link);
  37. }
  38.  
  39. struct DosPacket *GetPacket(struct MsgPort *port)
  40. {
  41.     struct Message *msg;
  42.  
  43.     if((msg = GetMsg(port)))
  44.         return((struct DosPacket *)msg->mn_Node.ln_Name);
  45.     else
  46.         return(NULL);
  47. }
  48.  
  49. /*-------------------------------------------------------------------------*/
  50.  
  51. void copy64name(STRPTR dest, STRPTR src, UBYTE maxlen)
  52. {
  53.     static const UBYTE conv[91]=" !\"#$%&'()·+,-.\\0123456789|;<=>?"
  54.                                 "@abcdefghijklmnopqrstuvwxyz[£]^{"
  55.                                 "_ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  56.     UBYTE a;
  57.  
  58.     while(((a=*src++) != 0xa0) && maxlen--)
  59.         if(a<32 || a>122)
  60.             *dest++ = '_';
  61.         else
  62.             *dest++ = conv[a-32];
  63.  
  64.     *dest = '\0';
  65. }
  66.  
  67. void asciito64(STRPTR dest, STRPTR src, UBYTE maxlen)
  68. {
  69.     static const UBYTE conv[91]=" !\"#$%&'()*+,-./0123456789:;<=>?"
  70.                                 "@abcdefghijklmnopqrstuvwxyz[/]^{"
  71.                                 "-ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  72.     UBYTE a;
  73.  
  74.     while((a=*src++) && maxlen--)
  75.         if(a<32 || a>122)
  76.             *dest++ = ' ';
  77.         else
  78.             *dest++ = conv[a-32];
  79.  
  80.     while(maxlen--)
  81.         *dest++ = 0xa0;
  82. }
  83.  
  84. /*-------------------------------------------------------------------------*/
  85.  
  86. void SendEvent(BOOL insert)
  87. {
  88.     struct IOStdReq *InputRequest;
  89.     struct MsgPort *InputPort;
  90.     struct InputEvent *ie;
  91.  
  92.     if((InputPort = (struct MsgPort*)CreateMsgPort()))
  93.     {
  94.         if((InputRequest = (struct IOStdReq*)CreateIORequest(InputPort, sizeof(struct IOStdReq))))
  95.         {
  96.             if(!OpenDevice("input.device", 0, (struct IORequest*)InputRequest, 0))
  97.             {
  98.                 if((ie = AllocVec(sizeof(struct InputEvent), MEMF_PUBLIC|MEMF_CLEAR)))
  99.                 {
  100.                     ie->ie_Class = insert ? IECLASS_DISKINSERTED : IECLASS_DISKREMOVED;
  101.                     InputRequest->io_Command = IND_WRITEEVENT;
  102.                     InputRequest->io_Data = ie;
  103.                     InputRequest->io_Length = sizeof(struct InputEvent);
  104.                     DoIO((struct IORequest*)InputRequest);
  105.                     FreeVec(ie);
  106.                 }
  107.                 CloseDevice((struct IORequest*)InputRequest);
  108.             }
  109.             DeleteIORequest (InputRequest);
  110.         }
  111.         DeleteMsgPort (InputPort);
  112.     }
  113. }
  114.