home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d583 / aroff.lha / ARoff / Sources / trappes.c < prev    next >
C/C++ Source or Header  |  1992-01-04  |  2KB  |  110 lines

  1. /*
  2.  * Gestion des trappes
  3.  * (c)1991 par Denis GOUNELLE
  4.  */
  5.  
  6. #include "aroff.h"
  7. #define REAL_LINE( x ) ((x <= 0) ? (PageLen + x) : x)
  8.  
  9. struct Trp
  10. {
  11.   struct Noeud t_Node ;
  12.   char           t_Macro[3] ;
  13.   long           t_Ligne ;
  14.   long           t_Relat ;
  15. } ;
  16.  
  17. extern long PageLen, ArgLen ;
  18. extern struct TeteListe TTrp, TMac ;
  19. extern struct Macro *CurrentMacro, *FindVar() ;
  20.  
  21. /************************************************************************/
  22.  
  23. struct Trp *FindTrp( lig )
  24. long lig ;
  25. {
  26.   register struct Trp *t ;
  27.  
  28.   for ( t = (struct Trp *)TTrp.tl_Premier ;
  29.     t ;
  30.     t = (struct Trp *)t->t_Node.el_Suivant )
  31.     if ( t->t_Ligne == lig ) break ;
  32.  
  33.   return( t ) ;
  34. }
  35.  
  36. /************************************************************************/
  37.  
  38. void SetTrp( val , mac )
  39. long val ;
  40. char *mac ;
  41.  
  42. {
  43.   long k ;
  44.   struct Trp *t ;
  45.  
  46.   k = REAL_LINE( val ) ;
  47.   t = FindTrp( k ) ;
  48.   if ( ! t )
  49.   {
  50.     t = (struct Trp *)myalloc( sizeof(struct Trp) , 0 ) ;
  51.     InsereTete( &TTrp , t ) ;
  52.   }
  53.  
  54.   strcpy( t->t_Macro , mac ) ;
  55.   t->t_Ligne = k ;
  56.   t->t_Relat = val ;
  57. }
  58.  
  59. /************************************************************************/
  60.  
  61. void RemTrp( val )
  62. long val ;
  63.  
  64. {
  65.   long k ;
  66.   struct Trp *t ;
  67.  
  68.   k = REAL_LINE( val ) ;
  69.   t = FindTrp( k ) ;
  70.   if (  t )
  71.   {
  72.     EnleveElem( &TTrp , t ) ;
  73.     free( t ) ;
  74.   }
  75. }
  76.  
  77. /************************************************************************/
  78.  
  79. void UpdateTrp()
  80. {
  81.   register struct Trp *t ;
  82.  
  83.   for ( t = (struct Trp *)TTrp.tl_Premier ;
  84.     t ;
  85.     t = (struct Trp *)t->t_Node.el_Suivant )
  86.     if ( t->t_Relat < 0 ) t->t_Ligne = REAL_LINE( t->t_Relat ) ;
  87. }
  88.  
  89. /************************************************************************/
  90.  
  91. long TestTrp( lig )
  92. long lig ;
  93.  
  94. {
  95.   register struct Trp *t ;
  96.  
  97.   for ( t = (struct Trp *)TTrp.tl_Premier ;
  98.     t ;
  99.     t = (struct Trp *)t->t_Node.el_Suivant )
  100.     if ( t->t_Ligne == lig ) break ;
  101.  
  102.   if ( ! t ) return( 0 ) ;
  103.   if ( CurrentMacro == FindVar( &TMac , t->t_Macro ) ) return( 0 ) ;
  104.  
  105.   ArgLen = 0 ;
  106.   ExecCmd( t->t_Macro ) ;
  107.   return( 1 ) ;
  108. }
  109.  
  110.