home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / MIDICOM.LZH / MC_UTILS / MC_LIB / MC_LIB.C next >
C/C++ Source or Header  |  1993-10-16  |  4KB  |  185 lines

  1. #include <stddef.h>             /* Standard-Definitionen */
  2. #include <string.h>      /* String-Library */
  3. #include "mc_lib.h"
  4.  
  5. static long get_cookie(void)
  6. {
  7.     COOKIE  *cokie;
  8.     
  9.     cokie =     *CJAR;
  10.     if (cokie) 
  11.     {
  12.         while (cokie->tag.aslong != 0) 
  13.         {
  14.             if (!strncmp(cokie->tag.aschar, "MICO",4))
  15.             {
  16.                 infos=(CINFO *)cokie->value;
  17.             }
  18.             cokie++;
  19.         }
  20.     }
  21.     return(0);
  22. }
  23.  
  24. long mygemdos(msg_typ *mc_msg)
  25. {
  26.  long   old_super_stack,erg;
  27.  
  28.  old_super_stack = Super( 0L );
  29.  erg=MC_direct_call(mc_msg);
  30.  Super((void *) old_super_stack );
  31.  return( erg );
  32. }
  33.  
  34. int get_mc_sys(syspar *sys,all_proc *allprocs)
  35. {
  36.  
  37.   long        test;
  38.   msg_typ   mc_msg;
  39.  
  40.     if (MiNT==0)
  41.     {
  42.         (void)Supexec(get_cookie);
  43.         if (infos==NULL) MiNT=2;
  44.             else    MiNT=1;
  45.     }
  46.     if (MiNT==1)
  47.     {
  48.         mc_msg.what =   0;
  49.         *sys        = (sys_par *)mygemdos(&mc_msg);
  50.         mc_msg.what =   1;
  51.         *allprocs     = (all_proc )mygemdos(&mc_msg);
  52.         return(1);
  53.     }
  54.     else
  55.     if (MiNT==2)
  56.     {
  57.  
  58.         mc_msg.what =   0;
  59.         test        =   trap111(&mc_msg);
  60.         if (test>0)    /* ist MIDI-COM nicht aktiviert, existiert GEMDOS 111 nicht =>-34*/
  61.         {
  62.             *sys    = (sys_par *) test;
  63.             mc_msg.what =   1;
  64.             *allprocs = (all_proc) trap111(&mc_msg);
  65.             return(1);
  66.         }
  67.     }
  68.   return(0);
  69. }
  70.  
  71. long    mc_message(msg_typ *mc_msg)
  72. {
  73.     if (MiNT==1)
  74.         return(mygemdos(mc_msg));
  75.     else
  76.         return(trap111(mc_msg));
  77. }
  78.  
  79. long write_message(int what, int an, int size,char *name,void *ptr)
  80. {
  81.   msg_typ   mc_msg;
  82.  
  83.   mc_msg.what =   what;
  84.   mc_msg.size=size;
  85.   mc_msg.ptr=ptr;
  86.   mc_msg.name=name;
  87.   mc_msg.an=an;
  88.   mc_msg.fill=0;
  89.   return(mc_message(&mc_msg));
  90.  
  91. }
  92.  
  93.  
  94. int anmeld_ring(char *name,int buff_size,io_rec *io_ptr)
  95. {
  96.  buff_size-=1;
  97.  if (buff_size<1999) buff_size=1999;
  98.  if (buff_size>29999) buff_size=29999;
  99.  if (io_ptr->ibuf==NULL)
  100.  {
  101.   io_ptr->ibuf=Malloc(buff_size);
  102.  };
  103.  io_ptr->size=buff_size+1; /* groesse des Buffers      */
  104.  io_ptr->   nl  =0;           /* naechste Leseposition    */
  105.  io_ptr->   nw  =0;           /* naechste Schreibposition */
  106.  io_ptr->   blow=0;           /* status/fehler            */
  107.  io_ptr->   bhig=-1;          /* Ack: msg gelesen         */
  108.  if (!write_message(_ASSIGN,0,0,name,io_ptr)) return(TRUE);
  109.  return(FALSE);
  110. }
  111.  
  112.  
  113. io_rec *abmeld_ring(io_rec *read_buf)
  114. {
  115.    write_message(_GOOD_BYE,0,0,NULL,NULL);
  116.    if (read_buf)
  117.    {
  118.        Mfree(read_buf->ibuf);
  119.    }
  120.    return(NULL);
  121. }
  122.  
  123. long transmit(int size,int an,char *name,void *dat_adr)
  124. {  
  125.  return(write_message(_SEND_DATA,an,size,name,dat_adr));
  126. }
  127.  
  128. typedef    union
  129. {
  130.     int asint;
  131.     char    aschar[2];
  132. }konv1;
  133.  
  134. int lese(io_rec *read_buf,char *bufa1,int *esc,int *len)
  135. {
  136.  int i;
  137.  konv1    help;
  138.  
  139.  *esc=0;
  140.  if (read_buf->nl==read_buf->nw) return(FALSE);
  141.  help.aschar[0]=read_buf->ibuf[read_buf->nl++];
  142.  if (read_buf->nl==read_buf->size) read_buf->nl=0;
  143.  help.aschar[1]=read_buf->ibuf[read_buf->nl++];
  144.  if (read_buf->nl==read_buf->size) read_buf->nl=0;
  145.  if (help.asint>4000)
  146.  {
  147.        *esc=help.asint;
  148.     help.aschar[0]=read_buf->ibuf[read_buf->nl++];
  149.     if (read_buf->nl==read_buf->size) read_buf->nl=0;
  150.     help.aschar[1]=read_buf->ibuf[read_buf->nl++];
  151.     if (read_buf->nl==read_buf->size) read_buf->nl=0;
  152.     *len=help.asint;
  153.  }
  154.  for (i=0;i<=help.asint-3;i++)
  155.  {
  156.     bufa1[i]=read_buf->ibuf[read_buf->nl++];
  157.     if (read_buf->nl==read_buf->size) read_buf->nl=0;
  158.  }
  159.  return(TRUE);
  160. }
  161.  
  162. void get_Karte(void)
  163. {
  164.  write_message(_GET_VERW,0,0,NULL,NULL);
  165. }
  166.  
  167.  
  168. int mc_busy(io_rec *read_buf)
  169. /* ring geschlossen und im sende-Modus */
  170. {
  171.  return(((read_buf->blow & 7)==7) && ((read_buf->blow & 64)==64));
  172. }
  173.  
  174. int mc_closed(io_rec *read_buf)
  175. /* ring geschlossen */
  176. {
  177.  return(((read_buf->blow & 7)==7));
  178. }
  179.  
  180. int mc_neustat(io_rec *read_buf)
  181. /* ring-Verwaltung wurde geändert */
  182. {
  183.  return(((read_buf->blow & 2048)==2048));
  184. }
  185.