home *** CD-ROM | disk | FTP | other *** search
- /*
- * Gestion des trappes
- * (c)1991 par Denis GOUNELLE
- */
-
- #include "aroff.h"
- #define REAL_LINE( x ) ((x <= 0) ? (PageLen + x) : x)
-
- struct Trp
- {
- struct Noeud t_Node ;
- char t_Macro[3] ;
- long t_Ligne ;
- long t_Relat ;
- } ;
-
- extern long PageLen, ArgLen ;
- extern struct TeteListe TTrp, TMac ;
- extern struct Macro *CurrentMacro, *FindVar() ;
-
- /************************************************************************/
-
- struct Trp *FindTrp( lig )
- long lig ;
- {
- register struct Trp *t ;
-
- for ( t = (struct Trp *)TTrp.tl_Premier ;
- t ;
- t = (struct Trp *)t->t_Node.el_Suivant )
- if ( t->t_Ligne == lig ) break ;
-
- return( t ) ;
- }
-
- /************************************************************************/
-
- void SetTrp( val , mac )
- long val ;
- char *mac ;
-
- {
- long k ;
- struct Trp *t ;
-
- k = REAL_LINE( val ) ;
- t = FindTrp( k ) ;
- if ( ! t )
- {
- t = (struct Trp *)myalloc( sizeof(struct Trp) , 0 ) ;
- InsereTete( &TTrp , t ) ;
- }
-
- strcpy( t->t_Macro , mac ) ;
- t->t_Ligne = k ;
- t->t_Relat = val ;
- }
-
- /************************************************************************/
-
- void RemTrp( val )
- long val ;
-
- {
- long k ;
- struct Trp *t ;
-
- k = REAL_LINE( val ) ;
- t = FindTrp( k ) ;
- if ( t )
- {
- EnleveElem( &TTrp , t ) ;
- free( t ) ;
- }
- }
-
- /************************************************************************/
-
- void UpdateTrp()
- {
- register struct Trp *t ;
-
- for ( t = (struct Trp *)TTrp.tl_Premier ;
- t ;
- t = (struct Trp *)t->t_Node.el_Suivant )
- if ( t->t_Relat < 0 ) t->t_Ligne = REAL_LINE( t->t_Relat ) ;
- }
-
- /************************************************************************/
-
- long TestTrp( lig )
- long lig ;
-
- {
- register struct Trp *t ;
-
- for ( t = (struct Trp *)TTrp.tl_Premier ;
- t ;
- t = (struct Trp *)t->t_Node.el_Suivant )
- if ( t->t_Ligne == lig ) break ;
-
- if ( ! t ) return( 0 ) ;
- if ( CurrentMacro == FindVar( &TMac , t->t_Macro ) ) return( 0 ) ;
-
- ArgLen = 0 ;
- ExecCmd( t->t_Macro ) ;
- return( 1 ) ;
- }
-
-