•  Back 
  •  MICO.CPX 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : MIDI_COM Dokumentation
Author      : H. Blees
Version     : MIDI_COM.hyp (21/5/1997)
Subject     : Dokumentation/MIDI_COM
Nodes       : 125
Index Size  : 3066
HCP-Version : 3
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : 
@help       : 
@options    : +g -i -n +y +z -t4 -d10
@width      : 75
View Ref-FileProgrammbeispiel
Anhand des folgenden Programmbeispieles wird das Auslesen des Puffers
beschrieben:

int leseextern      int   lese(char *bufa1,int *esc,int *len);

Auslesen des Empfangs-Puffers in einen eigenen Datenbereich.

Parameter:
bufa1:      Speicherbereich, in den die Daten gelesen 
            werden sollen.
esc:        Kennzeichnung für interne Nachrichten
len:        Länge der Empfangenen Nachricht
Returnwert:  TRUE, wenn eine Nachricht empfangen 
                           wurde.
                     FALSE sonst
(char *bufa1,int *esc,int *len)
{
  int   i;
  konv1 help;

  *esc=0;
/* Die ersten zwei Bytes sind entweder die Länge der Nachricht oder eine
   ESC-Kennung. Zur Zeit gibt es davon nur eine einzige: _GET_VERW  */
/* Lese-Index = Schreibindex => Puffer LEER */
  if (io_ptrtypedef struct
{
  char  *ibuf;  /* Zeiger auf den buffer   */
  int   size;   /* größe des Buffers       */
  int   nw;     /* nächste Leseposition    */
  int   nl;     /* nächste Schreibposition */
  int   blow;   /* nicht verwendet         */
  int   bhig;   /* nicht verwendet         */
} io_rec;

io_rec      *io_ptr;
.nl==io_ptr.nw) return(FALSE); /* Fertig */
/* kopiere 1. Byte */
  help.aschar[0]=io_ptr.ibuf[io_ptr.nl++]; /* Ist das Puffer-Ende
erreicht, geht's wieder bei 0 weiter */
  if (io_ptr.nl==io_ptr.size) io_ptr.nl=0;
/* kopiere 2. Byte */
  help.aschar[1]=io_ptr.ibuf[io_ptr.nl++];
/* Ist das Puffer-Ende erreicht, geht's wieder bei 0 weiter */
  if (io_ptr.nl==io_ptr.size) io_ptr.nl=0;
  if (help.asint>4000)
  {
/* Falls ESC-Kennung, dann kommt jetzt erst die Länge der Nachricht */
    *esc=help.asint;
    help.aschar[0]=io_ptrtypedef struct
{
  char  *ibuf;  /* Zeiger auf den buffer   */
  int   size;   /* größe des Buffers       */
  int   nw;     /* nächste Leseposition    */
  int   nl;     /* nächste Schreibposition */
  int   blow;   /* nicht verwendet         */
  int   bhig;   /* nicht verwendet         */
} io_rec;

io_rec      *io_ptr;
.ibuf[io_ptr.nl++];
    if (io_ptr.nl==io_ptr.size) io_ptr.nl=0;
    help.aschar[1]=io_ptr.ibuf[io_ptr.nl++];
    if (io_ptr.nl==io_ptr.size) io_ptr.nl=0;
  *len=help.asint-2;
  }
/* Nun den eigentlichen Inhalt der Nachricht kopieren Die Länge enthält
   auch die beiden Bytes für die Längenangabe daher (-2) */
  for (i=0;i<help.asint-2;i++)
  {
    bufa1[i]=io_ptrtypedef struct
{
  char  *ibuf;  /* Zeiger auf den buffer   */
  int   size;   /* größe des Buffers       */
  int   nw;     /* nächste Leseposition    */
  int   nl;     /* nächste Schreibposition */
  int   blow;   /* nicht verwendet         */
  int   bhig;   /* nicht verwendet         */
} io_rec;

io_rec      *io_ptr;
.ibuf[io_ptr.nl++];
    if (io_ptr.nl==io_ptr.size) io_ptr.nl=0;
  }
  return(TRUE);
}