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 >
Wrap
C/C++ Source or Header
|
1992-01-04
|
2KB
|
110 lines
/*
* 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 ) ;
}