home *** CD-ROM | disk | FTP | other *** search
- /*
- * Gestion des macros, chaines, et registres
- * (c)1991 par Denis GOUNELLE
- */
-
- #include "aroff.h"
-
- struct Reg
- {
- struct Noeud v_Node ;
- char v_Name[3] ;
- long v_Val ;
- long v_Inc ;
- } ;
-
- struct Str
- {
- struct Noeud v_Node ;
- char v_Name[3] ;
- char *v_Val ;
- } ;
-
- extern struct Macro *CurrentMacro ;
- extern struct TeteListe TStr, TReg, TMac ;
-
- /**********************************************************************/
-
- struct Reg *FindVar( tete , var )
- struct TeteListe *tete ;
- char *var ;
-
- {
- register struct Reg *v ;
-
- for ( v = (struct Reg *)tete->tl_Premier ;
- v ;
- v = (struct Reg *)v->v_Node.el_Suivant )
- if (! strcmp( v->v_Name , var )) break ;
-
- return( v ) ;
- }
-
- /**********************************************************************/
-
- void SetStr( var , val )
- char *var , *val ;
-
- {
- struct Str *v ;
-
- v = (struct Str *)FindVar( &TStr , var ) ;
- if ( ! v )
- {
- v = (struct Str *) myalloc( sizeof(struct Str) , 0 ) ;
- InsereTete( &TStr , v ) ;
- strcpy( v->v_Name , var ) ;
- }
- else free( v->v_Val ) ;
-
- v->v_Val = (char *)myalloc( strlen(val)+1 , 0 ) ;
- strcpy( v->v_Val , val ) ;
- }
-
- /**********************************************************************/
-
- void SetReg( reg , val , inc )
- char *reg ;
- long val ;
-
- {
- struct Reg *v ;
-
- v = (struct Reg *)FindVar( &TReg , reg ) ;
- if ( ! v )
- {
- v = (struct Reg *) myalloc( sizeof(struct Reg) , 0 ) ;
- InsereTete( &TReg , v ) ;
- strcpy( v->v_Name , reg ) ;
- }
-
- v->v_Val = val ;
- v->v_Inc = inc ;
- }
-
- /**********************************************************************/
-
- void GetStr( name , val )
- char *name, *val ;
-
- {
- struct Str *v ;
-
- v = (struct Str *) FindVar( &TStr , name ) ;
- if ( v ) strcpy( val , v->v_Val ) ;
- else *val = '\0' ;
- }
-
- /**********************************************************************/
-
- void GetReg( name , val )
- char *name , *val ;
-
- {
- struct Reg *v ;
-
- v = (struct Reg *) FindVar( &TReg , name ) ;
- sprintf( val , "%d" , ( v ) ? v->v_Val : 0 ) ;
- }
-
- /**********************************************************************/
-
- void RemStr( name )
- char *name ;
-
- {
- struct Str *v ;
-
- v = (struct Str *) FindVar( &TStr , name ) ;
- if ( v ) EnleveElem( &TStr , v ) ;
- }
-
- /**********************************************************************/
-
- void RemReg( name )
- char *name ;
-
- {
- struct Reg *v ;
-
- v = (struct Reg *) FindVar( &TReg , name ) ;
- if ( v ) EnleveElem( &TReg , v ) ;
- }
-
- /**********************************************************************/
-
- void IncReg( name , op )
- char *name, op ;
-
- {
- struct Reg *v ;
-
- v = (struct Reg *) FindVar( &TReg , name ) ;
- if ( ! v ) return ;
- if ( op == '+' ) v->v_Val += v->v_Inc ;
- else v->v_Val -= v->v_Inc ;
- }
-
- /**********************************************************************/
-
- void SetMac( name )
- char *name ;
-
- {
- struct Macro *m ;
-
- m = (struct Macro *)FindVar( &TMac , name ) ;
- if ( ! m )
- {
- m = (struct Macro *)myalloc( sizeof(struct Macro) , 1 ) ;
- strcpy( m->m_Name , name ) ;
- InitListe( &(m->m_Def) ) ;
- InsereTete( &TMac , m ) ;
- }
- else VideListe( &(m->m_Def) ) ;
-
- CurrentMacro = m ;
- }
-
- /**********************************************************************/
-
- void RemMac( name )
- char *name ;
-
- {
- struct Macro *m ;
-
- m = (struct Macro *) FindVar( &TMac , name ) ;
- if ( m )
- {
- VideListe( &(m->m_Def) ) ;
- EnleveElem( &TMac , m ) ;
- }
- }
-
-