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

  1. /*
  2.  * Gestion des macros, chaines, et registres
  3.  * (c)1991 par Denis GOUNELLE
  4.  */
  5.  
  6. #include "aroff.h"
  7.  
  8. struct Reg
  9. {
  10.   struct Noeud v_Node ;
  11.   char           v_Name[3] ;
  12.   long           v_Val ;
  13.   long           v_Inc ;
  14. } ;
  15.  
  16. struct Str
  17. {
  18.   struct Noeud v_Node ;
  19.   char           v_Name[3] ;
  20.   char          *v_Val ;
  21. } ;
  22.  
  23. extern struct Macro *CurrentMacro ;
  24. extern struct TeteListe TStr, TReg, TMac ;
  25.  
  26. /**********************************************************************/
  27.  
  28. struct Reg *FindVar( tete , var )
  29. struct TeteListe *tete ;
  30. char *var ;
  31.  
  32. {
  33.   register struct Reg *v ;
  34.  
  35.   for ( v = (struct Reg *)tete->tl_Premier ;
  36.     v ;
  37.     v = (struct Reg *)v->v_Node.el_Suivant )
  38.     if (! strcmp( v->v_Name , var )) break ;
  39.  
  40.   return( v ) ;
  41. }
  42.  
  43. /**********************************************************************/
  44.  
  45. void SetStr( var , val )
  46. char *var , *val ;
  47.  
  48. {
  49.   struct Str *v ;
  50.  
  51.   v = (struct Str *)FindVar( &TStr , var ) ;
  52.   if ( ! v )
  53.   {
  54.     v = (struct Str *) myalloc( sizeof(struct Str) , 0 ) ;
  55.     InsereTete( &TStr , v ) ;
  56.     strcpy( v->v_Name , var ) ;
  57.   }
  58.   else free( v->v_Val ) ;
  59.  
  60.   v->v_Val = (char *)myalloc( strlen(val)+1 , 0 ) ;
  61.   strcpy( v->v_Val , val ) ;
  62. }
  63.  
  64. /**********************************************************************/
  65.  
  66. void SetReg( reg , val , inc )
  67. char *reg ;
  68. long val ;
  69.  
  70. {
  71.   struct Reg *v ;
  72.  
  73.   v = (struct Reg *)FindVar( &TReg , reg ) ;
  74.   if ( ! v )
  75.   {
  76.     v = (struct Reg *) myalloc( sizeof(struct Reg) , 0 ) ;
  77.     InsereTete( &TReg , v ) ;
  78.     strcpy( v->v_Name , reg ) ;
  79.   }
  80.  
  81.   v->v_Val = val ;
  82.   v->v_Inc = inc ;
  83. }
  84.  
  85. /**********************************************************************/
  86.  
  87. void GetStr( name , val )
  88. char *name, *val ;
  89.  
  90. {
  91.   struct Str *v ;
  92.  
  93.   v = (struct Str *) FindVar( &TStr , name ) ;
  94.   if ( v ) strcpy( val , v->v_Val ) ;
  95.       else *val = '\0' ;
  96. }
  97.  
  98. /**********************************************************************/
  99.  
  100. void GetReg( name , val )
  101. char *name , *val ;
  102.  
  103. {
  104.   struct Reg *v ;
  105.  
  106.   v = (struct Reg *) FindVar( &TReg , name ) ;
  107.   sprintf( val , "%d" , ( v ) ? v->v_Val : 0 ) ;
  108. }
  109.  
  110. /**********************************************************************/
  111.  
  112. void RemStr( name )
  113. char *name ;
  114.  
  115. {
  116.   struct Str *v ;
  117.  
  118.   v = (struct Str *) FindVar( &TStr , name ) ;
  119.   if ( v ) EnleveElem( &TStr , v ) ;
  120. }
  121.  
  122. /**********************************************************************/
  123.  
  124. void RemReg( name )
  125. char *name ;
  126.  
  127. {
  128.   struct Reg *v ;
  129.  
  130.   v = (struct Reg *) FindVar( &TReg , name ) ;
  131.   if ( v ) EnleveElem( &TReg , v ) ;
  132. }
  133.  
  134. /**********************************************************************/
  135.  
  136. void IncReg( name , op )
  137. char *name, op ;
  138.  
  139. {
  140.   struct Reg *v ;
  141.  
  142.   v = (struct Reg *) FindVar( &TReg , name ) ;
  143.   if ( ! v ) return ;
  144.   if ( op == '+' ) v->v_Val += v->v_Inc ;
  145.          else v->v_Val -= v->v_Inc ;
  146. }
  147.  
  148. /**********************************************************************/
  149.  
  150. void SetMac( name )
  151. char *name ;
  152.  
  153. {
  154.   struct Macro *m ;
  155.  
  156.   m = (struct Macro *)FindVar( &TMac , name ) ;
  157.   if ( ! m )
  158.   {
  159.     m = (struct Macro *)myalloc( sizeof(struct Macro) , 1 ) ;
  160.     strcpy( m->m_Name , name ) ;
  161.     InitListe( &(m->m_Def) ) ;
  162.     InsereTete( &TMac , m ) ;
  163.   }
  164.   else VideListe( &(m->m_Def) ) ;
  165.  
  166.   CurrentMacro = m ;
  167. }
  168.  
  169. /**********************************************************************/
  170.  
  171. void RemMac( name )
  172. char *name ;
  173.  
  174. {
  175.   struct Macro *m ;
  176.  
  177.   m = (struct Macro *) FindVar( &TMac , name ) ;
  178.   if ( m )
  179.   {
  180.     VideListe( &(m->m_Def) ) ;
  181.     EnleveElem( &TMac , m ) ;
  182.   }
  183. }
  184.  
  185.