home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 4 / CDPD_IV.bin / utilities / print / aroff / sources / vars.c < prev   
Encoding:
C/C++ Source or Header  |  1994-06-28  |  3.3 KB  |  183 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[LGMAXSTR+1] ;
  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.  
  59.   strcpy( v->v_Val , val ) ;
  60. }
  61.  
  62. /**********************************************************************/
  63.  
  64. void SetReg( reg , val , inc )
  65. char *reg ;
  66. long val ;
  67.  
  68. {
  69.   struct Reg *v ;
  70.  
  71.   v = (struct Reg *)FindVar( &TReg , reg ) ;
  72.   if ( ! v )
  73.   {
  74.     v = (struct Reg *) myalloc( sizeof(struct Reg) , 0 ) ;
  75.     InsereTete( &TReg , v ) ;
  76.     strcpy( v->v_Name , reg ) ;
  77.   }
  78.  
  79.   v->v_Val = val ;
  80.   v->v_Inc = inc ;
  81. }
  82.  
  83. /**********************************************************************/
  84.  
  85. void GetStr( name , val )
  86. char *name, *val ;
  87.  
  88. {
  89.   struct Str *v ;
  90.  
  91.   v = (struct Str *) FindVar( &TStr , name ) ;
  92.   if ( v ) strcpy( val , v->v_Val ) ;
  93.       else *val = '\0' ;
  94. }
  95.  
  96. /**********************************************************************/
  97.  
  98. void GetReg( name , val )
  99. char *name , *val ;
  100.  
  101. {
  102.   struct Reg *v ;
  103.  
  104.   v = (struct Reg *) FindVar( &TReg , name ) ;
  105.   sprintf( val , "%d" , ( v ) ? v->v_Val : 0 ) ;
  106. }
  107.  
  108. /**********************************************************************/
  109.  
  110. void RemStr( name )
  111. char *name ;
  112.  
  113. {
  114.   struct Str *v ;
  115.  
  116.   v = (struct Str *) FindVar( &TStr , name ) ;
  117.   if ( v ) EnleveElem( &TStr , v ) ;
  118. }
  119.  
  120. /**********************************************************************/
  121.  
  122. void RemReg( name )
  123. char *name ;
  124.  
  125. {
  126.   struct Reg *v ;
  127.  
  128.   v = (struct Reg *) FindVar( &TReg , name ) ;
  129.   if ( v ) EnleveElem( &TReg , v ) ;
  130. }
  131.  
  132. /**********************************************************************/
  133.  
  134. void IncReg( name , op )
  135. char *name, op ;
  136.  
  137. {
  138.   struct Reg *v ;
  139.  
  140.   v = (struct Reg *) FindVar( &TReg , name ) ;
  141.   if ( ! v ) return ;
  142.   if ( op == '+' ) v->v_Val += v->v_Inc ;
  143.          else v->v_Val -= v->v_Inc ;
  144. }
  145.  
  146. /**********************************************************************/
  147.  
  148. void SetMac( name )
  149. char *name ;
  150.  
  151. {
  152.   struct Macro *m ;
  153.  
  154.   m = (struct Macro *)FindVar( &TMac , name ) ;
  155.   if ( ! m )
  156.   {
  157.     m = (struct Macro *)myalloc( sizeof(struct Macro) , 1 ) ;
  158.     strcpy( m->m_Name , name ) ;
  159.     InitListe( &(m->m_Def) ) ;
  160.     InsereTete( &TMac , m ) ;
  161.   }
  162.   else VideListe( &(m->m_Def) ) ;
  163.  
  164.   CurrentMacro = m ;
  165. }
  166.  
  167. /**********************************************************************/
  168.  
  169. void RemMac( name )
  170. char *name ;
  171.  
  172. {
  173.   struct Macro *m ;
  174.  
  175.   m = (struct Macro *) FindVar( &TMac , name ) ;
  176.   if ( m )
  177.   {
  178.     VideListe( &(m->m_Def) ) ;
  179.     EnleveElem( &TMac , m ) ;
  180.   }
  181. }
  182.  
  183.