1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
/***************************/
/* liste.c */
/***************************/
#include <stdio.h>
#include <stdlib.h>
#include "liste.h"
void note_insert(oct, pit, laut, t, chann)
int oct, pit, laut, chann;
unsigned long int t;
{
struct element *ptr, *ende;
if ((ptr = (struct element *) malloc (sizeof(struct element))) == NULL) {
fprintf(stderr, "malloc error\n");
exit(10);
}
ptr->oct = oct;
ptr->pit = pit;
ptr->laut = laut;
ptr->t = t;
ptr->chann = chann;
ptr->folger = NULL;
if (anker) {
for (ende = anker; ende->folger; ende = ende->folger);
ende->folger = ptr;
return;
}
anker = ptr;
}
int note_delete(oct, pit, laut, zeit, beg, ch)
int oct, pit, ch, *laut;
unsigned long int zeit, *beg;
{
struct element *ptr1, *ptr2;
unsigned long int delta;
if ((ptr1 = anker) == NULL) {
fprintf(stderr, "oct %d, pit %d not found\n", oct, pit);
exit(10);
}
if ((anker->oct == oct) && (anker->pit == pit) && (anker->chann == ch)) {
*laut = anker->laut;
*beg = anker->t;
if ((delta = zeit - anker->t) <= 0) {
fprintf(stderr, "note_loeschen: delta = %ld\n", delta);
exit(10);
}
anker = anker->folger;
free(ptr1);
return(delta);
}
for(ptr2 = ptr1, ptr1 = ptr1->folger; ptr1; ptr2 = ptr1, ptr1 = ptr1->folger) {
if ((ptr1->oct == oct) && (ptr1->pit == pit)) {
*beg = ptr1->t;
*laut = ptr1->laut;
if ((delta = zeit - ptr1->t) <= 0) {
fprintf(stderr, "note_loeschen: delta = %ld\n", delta);
exit(10);
}
ptr2->folger = ptr1->folger;
free(ptr1);
return(delta);
}
}
fprintf(stderr, "oct %d, pit %d not found\n", oct, pit);
exit(10);
}
int search_note(oct, pit, laut, zeit, beg, ch)
int *oct, *pit, *laut, *ch;
unsigned long int zeit, *beg;
{
struct element *ptr;
int delta;
if (!anker) return (-1);
ptr = anker;
*oct = anker->oct;
*pit = anker->pit;
*laut = anker->laut;
*beg = anker->t;
*ch = anker->chann;
if ((delta = zeit - anker->t) <= 0) {
fprintf(stderr, "note_loeschen: delta = %d\n", delta);
exit(10);
}
anker = anker->folger;
free (ptr);
return(delta);
}
|