home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / utility / text / emacsdif.lha / emacs-18.58 / src / amiga_serial.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-04-26  |  1.6 KB  |  73 lines

  1. #include <exec/types.h>
  2. #include <devices/serial.h>
  3.  
  4. #include <proto/exec.h>
  5. #include <proto/dos.h>
  6.  
  7. #include "amiga.h"
  8.  
  9. static struct MsgPort  *SerReadPort;
  10. static struct IOExtSer *SerReadRequest, *SerWriteRequest;
  11. static char ser_inbuf[2];
  12. char *far serial_device = "serial.device";
  13. long serial_unit;
  14.  
  15. int init_amiga_serial(void)
  16. {
  17.     if ((SerWriteRequest = (struct IOExtSer *)
  18.      device_open(serial_device, serial_unit, 0L,
  19.              0L, 0, sizeof(struct IOExtSer))) &&
  20.     (SerReadPort = CreateMsgPort()) &&
  21.     (SerReadRequest  = (struct IOExtSer *)CreateIORequest(SerReadPort, sizeof (struct IOExtSer))))
  22.     {
  23.     SerReadRequest->IOSer.io_Device = SerWriteRequest->IOSer.io_Device;
  24.     SerReadRequest->IOSer.io_Unit = SerWriteRequest->IOSer.io_Unit;
  25.     ser_inbuf[1]=0;
  26.     SerReadRequest->IOSer.io_Command = CMD_READ;
  27.     SerWriteRequest->IOSer.io_Command = CMD_WRITE;
  28.     SerReadRequest->IOSer.io_Length = 1;
  29.     SerReadRequest->IOSer.io_Data = &ser_inbuf[0];
  30.     SendIO(SerReadRequest);
  31.  
  32.     inputsig |= 1L << SerReadPort->mp_SigBit;
  33.  
  34.     return TRUE;
  35.     }
  36.     return FALSE;
  37. }
  38.  
  39. void cleanup_amiga_serial(void)
  40. {
  41.     if (SerReadRequest)
  42.     {
  43.     AbortIO(SerReadRequest);
  44.     WaitIO(SerReadRequest);
  45.     DeleteIORequest(SerReadRequest);
  46.     }
  47.     if (SerReadPort) DeletePort(SerReadPort);
  48.     device_close(SerWriteRequest);
  49. }
  50.  
  51. void check_serial(int force)
  52. {
  53.     while (CheckIO(SerReadRequest))
  54.     {
  55.     int c = ser_inbuf[0];
  56.     SendIO(SerReadRequest);
  57.     enque(c, FALSE);
  58.     }
  59. }
  60.  
  61. void serial_puts(char *str, int len)
  62. {
  63.  
  64.     SerWriteRequest->IOSer.io_Length = len;
  65.     SerWriteRequest->IOSer.io_Data = str;
  66.     DoIO(SerWriteRequest);
  67. }
  68.  
  69. unsigned long serial_baud_rate(void)
  70. {
  71.     return SerWriteRequest->io_Baud;
  72. }
  73.