home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / emacs-19.28-src.tgz / tar.out / fsf / emacs / src / amiga_serial.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  2KB  |  79 lines

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