home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************/
- /* COPROC.H */
- /* Headerdatei für coproc.c */
- /* Auch in mylib.h */
- /* (C) 1989 Guido Goldstein & TOOLBOX */
- /*********************************************************/
-
- #include <setjmp.h>
-
- typedef struct {
- int from ; /* Caller der Routine */
- jmp_buf buffer ; /* Buffer für longjmp */
- char init ; /* Flag ob schon aktiv gewesen */
- void (*fnc)(); /* Adresse der Funktion */
- char *stack ; /* Zeiger auf den Stack */
- unsigned st_size ; /* Größe des Stacks (max. 64K) */
- } COPROCESS ;
-
- #define NOPROC (-1)
- #define MAXCOPROC 62
- #define MAINP (MAXCOPROC+1)
-
- extern int HERE ;
- extern COPROCESS _coproc[] ;
-
- /* Führt den Sprung in die Coroutine mit der Nummer
- to aus */
- #define transfer(to)
- {if (!setjmp(_coproc[HERE].buffer)) callcoproc(to);}
-
- /* Führt den Rücksprung zur aufrufenden Funktion durch */
- #define coreturn()
- {if (!setjmp(_coproc[HERE].buffer))
- callcoproc(_coproc[HERE].from);}
-
- /* Sollte nicht benutzt werden */
- void far callcoproc (int n);
-
- /* Einrichten der Funktion f als Coroutine,
- Stackgröße in st_size */
- int far newcoproc (void (*f)(), unsigned int st_size);
-
- /* Löschen der Coroutine mit der Nummer proc */
- int far remcoproc (int proc);
-
- /* Umbelegen der Nummer p auf die Funktion f,
- der Stackbereich bleibt gleich */
- int far changecoproc (int p, void (*f)());
-
- /* Als erstes aufrufen !!!! */
- /* Initialisiert die Puffer */
- void far initcoproc (void);
-
- /* Routine zum ordnungsgemäßen Beenden einer Coroutine */
- void far exitcoproc (void);
-
- /* Liefert die Größe des freien Stackbereichs
- der aktiven Coroutine */
- unsigned far costackfree (void);