home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
-
- Author: Fred Cassirer
- Date: January 24, 1987
-
- This program is placed in the public domain, and from what I understand
- that means anyone can do whatever they want with it. That's fine
- because they are fairly trivial anyway ... If you can get someone to pay
- you for them, you must be doing something right.
-
- ****************************************************************************/
- /* compiler directives to fetch the necessary header files */
- #include <libraries/dos.h>
- #include <exec/types.h>
- #include <exec/exec.h>
- #include <devices/serial.h>
- #include <stdio.h>
- #include <ctype.h>
- #include <functions.h>
- #include "midi.h"
-
- #undef NULL
- #define NULL ((void *)0)
-
- extern long SetSignal();
-
- breakcheck()
- {
- if (SetSignal(0L,0L) & SIGBREAKF_CTRL_C )
- return ( 1 );
- else
- return( 0 );
- }
-
- breakreset()
- {
- SetSignal(0L, SIGBREAKF_CTRL_C);
- }
-
- /* this routine causes manx to use this Chk_Abort() rather than it's own */
- /* otherwise it resets our ^C when doing any I/O (even when Enable_Abort */
- /* is zero). Since we want to check for our own ^C's */
-
- Chk_Abort()
- {
- return(0);
- }
-
-
- /* declarations for the serial stuff */
-
- extern struct MsgPort *CreatePort();
- struct IOExtSer *Read_Request;
- static unsigned char rs_in[2];
-
- struct IOExtSer *Write_Request;
- static unsigned char rs_out[2];
-
- void initmidi()
- {
-
- Read_Request = (struct IOExtSer *)AllocMem((long)sizeof(*Read_Request),MEMF_PUBLIC|MEMF_CLEAR);
- Read_Request->io_SerFlags = SERF_SHARED | SERF_RAD_BOOGIE;
- Read_Request->IOSer.io_Message.mn_ReplyPort = CreatePort("Read_RS",0);
-
- if(OpenDevice(SERIALNAME,NULL,Read_Request,NULL))
- {
- puts("Cant open Read device\n");
- DeletePort(Read_Request->IOSer.io_Message.mn_ReplyPort);
- FreeMem(Read_Request,(long)sizeof(*Read_Request));
- exit(TRUE);
- }
-
- Read_Request->IOSer.io_Length = 1;
- Read_Request->IOSer.io_Data = (APTR) &rs_in[0];
- Read_Request->io_Baud = 31250;
- Read_Request->io_ReadLen = 8;
- Read_Request->io_WriteLen = 8;
- Read_Request->io_CtlChar = 1L;
- Read_Request->IOSer.io_Command = SDCMD_SETPARAMS;
- DoIO(Read_Request);
- Read_Request->IOSer.io_Command = CMD_READ;
-
- Write_Request = (struct IOExtSer *)AllocMem((long)sizeof(*Write_Request),MEMF_PUBLIC|MEMF_CLEAR);
- Write_Request->io_SerFlags = SERF_SHARED | SERF_RAD_BOOGIE;
- Write_Request->io_StopBits = 1;
- Write_Request->IOSer.io_Message.mn_ReplyPort = CreatePort("Write_RS",0);
- if(OpenDevice(SERIALNAME,NULL,Write_Request,NULL))
- {
- puts("Can't open Write device\n");
- DeletePort(Write_Request->IOSer.io_Message.mn_ReplyPort);
- FreeMem(Write_Request,(long)sizeof(*Write_Request));
- DeletePort(Read_Request->IOSer.io_Message.mn_ReplyPort);
- FreeMem(Read_Request,(long)sizeof(*Read_Request));
- exit(TRUE);
- }
-
- Write_Request->IOSer.io_Command = CMD_WRITE;
- Write_Request->IOSer.io_Length = 1;
- Write_Request->IOSer.io_Data = (APTR) &rs_out[0];
- Write_Request->io_SerFlags = SERF_SHARED | SERF_XDISABLED;
-
- BeginIO(Read_Request);
- breakreset();
-
- }
-
- void cleanup()
- {
-
- CloseDevice(Read_Request);
- DeletePort(Read_Request->IOSer.io_Message.mn_ReplyPort);
- FreeMem(Read_Request,(long)sizeof(*Read_Request));
- CloseDevice(Write_Request);
- DeletePort(Write_Request->IOSer.io_Message.mn_ReplyPort);
- FreeMem(Write_Request,(long)sizeof(*Write_Request));
-
- }
-
- /************************************************************/
- /* send midi data to the serial port */
- /************************************************************/
-
- int putmidi(ch)
- int ch;
- {
-
- rs_out[0] = ch;
- DoIO(Write_Request);
- return(ch);
-
- }
-
- /******************************************************/
- /* This routine will return an unsigned */
- /* byte of midi data. */
- /******************************************************/
-
- int getmidi()
- {
- int c;
-
- Wait( (1L << Read_Request->IOSer.io_Message.mn_ReplyPort->mp_SigBit)
- | (SIGBREAKF_CTRL_C) );
-
- if(CheckIO(Read_Request))
- {
- WaitIO(Read_Request);
- c=rs_in[0];
- BeginIO(Read_Request);
- }
- else
- c = NON_MIDI_EVENT;
-
- return(c);
- }
-
-