home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 07 / hitech / coproc.h < prev    next >
Encoding:
C/C++ Source or Header  |  1989-04-24  |  1.9 KB  |  60 lines

  1. /*********************************************************/
  2. /*                       COPROC.H                        */
  3. /*              Headerdatei für coproc.c                 */
  4. /*                  Auch in mylib.h                      */
  5. /*         (C) 1989 Guido Goldstein & TOOLBOX            */
  6. /*********************************************************/
  7.  
  8. #include <setjmp.h>
  9.  
  10. typedef struct {
  11.   int       from ;     /* Caller der Routine */
  12.   jmp_buf   buffer ;   /* Buffer für longjmp     */
  13.   char      init   ;   /* Flag ob schon  aktiv gewesen */
  14.   void      (*fnc)();  /* Adresse der Funktion    */
  15.   char      *stack ;   /* Zeiger auf den Stack */
  16.   unsigned  st_size ;  /* Größe des Stacks (max. 64K) */
  17.                 } COPROCESS ;
  18.  
  19. #define NOPROC (-1)
  20. #define MAXCOPROC 62
  21. #define MAINP (MAXCOPROC+1)
  22.  
  23. extern int       HERE ;
  24. extern COPROCESS _coproc[] ;
  25.  
  26. /* Führt den Sprung in die Coroutine mit der Nummer
  27.    to aus */
  28. #define transfer(to)
  29.      {if (!setjmp(_coproc[HERE].buffer)) callcoproc(to);}
  30.  
  31. /*  Führt den Rücksprung zur aufrufenden Funktion durch */
  32. #define coreturn()
  33.      {if (!setjmp(_coproc[HERE].buffer))
  34.           callcoproc(_coproc[HERE].from);}
  35.  
  36. /*  Sollte nicht benutzt werden */
  37. void far callcoproc (int n);
  38.  
  39. /*  Einrichten der Funktion f als Coroutine,
  40.     Stackgröße in st_size */
  41. int far newcoproc (void (*f)(), unsigned int st_size);
  42.  
  43. /*  Löschen der Coroutine mit der Nummer proc */
  44. int far remcoproc (int proc);
  45.  
  46. /*  Umbelegen der Nummer p auf die Funktion f,
  47.     der Stackbereich bleibt gleich */
  48. int far changecoproc (int p, void (*f)());
  49.  
  50. /*  Als erstes aufrufen !!!! */
  51. /*  Initialisiert die Puffer */
  52. void far initcoproc (void);
  53.  
  54. /*  Routine zum ordnungsgemäßen Beenden einer Coroutine */
  55. void far exitcoproc (void);
  56.  
  57. /*  Liefert die Größe des freien Stackbereichs
  58.     der aktiven Coroutine */
  59. unsigned far costackfree (void);
  60.