summaryrefslogtreecommitdiff
path: root/support/mid2tex/src/liste.c
blob: d0110c0a8d3f3b35d88744b63fd625dbf96e776b (plain)
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);
}