home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / libs / gle / util / manip / var.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-29  |  4.0 KB  |  218 lines

  1. /*---------------------------------------------------------------------------*/
  2. #include "all.h"
  3.  
  4.  
  5. #define true (!false)
  6. #define false 0
  7.  
  8. int var_local;        /* 0 = global, 1 = local */
  9. char *var_names[100];    /* Global variables */
  10. int var_type[100];
  11. int nvar;
  12. char *lvar_names[100];    /*  Local variables  */
  13. int lvar_type[100];
  14. int nlvar;
  15.  
  16. static void *dp_stack[100];
  17. static void *dp_stackstr[100];
  18. static int ndp;
  19. static double (*lvar_val)[100];
  20. static char *(*lvar_str)[100];
  21. static double var_val[100];
  22. static char *var_str[100];
  23. /*------------------------------------------------------------------*/
  24. int var_check(int *j);
  25. var_check(int *j)
  26. {
  27.     if (*j<0 || *j>400) {
  28.         gprint("Variable index is wrong %d \n",*j);
  29.         *j = 1;
  30.     }
  31.     if (lvar_val == NULL  && *j>=200) {
  32.         *j = 0;
  33.         gprint("No local variables assigned \n");
  34.     }
  35. }
  36. var_alloc_local()
  37. {
  38.     dp_stack[++ndp] = lvar_val;
  39.     dp_stackstr[ndp] = lvar_str;
  40.     lvar_val = myallocz(sizeof(*lvar_val));
  41.     lvar_str = myallocz(sizeof(*lvar_str));
  42. }
  43. var_free_local()
  44. {
  45.     if (ndp==0) {gprint("Cannot free local as none saved \n"); return;}
  46.     myfree(lvar_val);
  47.     myfree(lvar_str);
  48.     lvar_val = dp_stack[ndp];
  49.     lvar_str = dp_stackstr[ndp--];
  50. }
  51. var_set(int jj, double v)
  52. {
  53.     var_check(&jj);
  54.     if (jj<200)
  55.         var_val[jj] = v;
  56.     else
  57.         (*lvar_val)[jj-200] = v;
  58. }
  59. var_setstr(int jj, char *s)
  60. {
  61.     var_check(&jj);
  62.     if (jj<200)
  63.         mystrcpy(&var_str[jj],s);
  64.     else
  65.         mystrcpy(&(*lvar_str)[jj-200],s);
  66. }
  67. var_getstr(int jj, char *s)
  68. {
  69.     var_check(&jj);
  70.     if (jj<200) {
  71.         if (var_str[jj]!=NULL) strcpy(s,var_str[jj]);
  72.         else {
  73.             strcpy(s,"");
  74.             gprint("String Variable not defined %d \n",jj);
  75.         }
  76.     } else {
  77.         if ((*lvar_str)[jj-200]!=NULL) strcpy(s,(*lvar_str)[jj-200]);
  78.         if ((*lvar_str)[jj-200]==NULL) gprint("ERROR, variable not defined\n");
  79.     }
  80.  
  81. }
  82. var_get(int jj, double *v)
  83. {
  84.     var_check(&jj);
  85.     if (jj<200)
  86.         *v = var_val[jj];
  87.     else
  88.         *v = (*lvar_val)[jj-200];
  89. }
  90. /*------------------------------------------------------------------*/
  91. var_nlocal(int *l)
  92. {
  93.     *l = nlvar;
  94. }
  95. var_clear_global()
  96. {
  97.     nvar = 0;
  98. }
  99. var_set_local()
  100. {
  101.     var_local = true;
  102.     nlvar = 0;
  103. }
  104. var_set_global()
  105. {
  106.     var_local = false;
  107. }
  108. var_clear_local()
  109. {
  110.     nlvar = 0;
  111. }
  112. var_findadd(char *name,int *idx,int *type)    /* Add a variable to the list */
  113. {
  114.     var_find(name,idx,type);
  115.     if (*idx==-1) var_add(name,idx,type);
  116. }
  117. var_add(char *name,int *idx,int *type)    /* Add a variable to the list */
  118. {
  119.     if (var_local==0) {
  120.         if (nvar>90) gprint("Too many global variables \n");
  121.         mystrcpy(&var_names[nvar],name);
  122.         *idx = nvar;
  123.         if (lastchar(name,'$')) *type=2;
  124.         else *type=1;
  125.         var_type[nvar++] = *type;
  126.     } else {
  127.         if (nlvar>90) gprint("Too many local variables \n");
  128.         mystrcpy(&lvar_names[nlvar],name);
  129.         *idx = nlvar+200;
  130.         if (lastchar(name,'$')) *type=2;
  131.         else *type=1;
  132.         lvar_type[nlvar++] = *type;
  133.     }
  134. }
  135. var_find(char *name,int *idx,int *type)    /* Find a variable in the list */
  136. {
  137.     int i;
  138. /*     if (var_local==0) { */
  139.  
  140.     for (i=0;i<nlvar;i++) {
  141.         if (strcmp(lvar_names[i],name)==0) {
  142.             *idx = i+200;
  143.             *type = lvar_type[i];
  144.             return;
  145.         }
  146.     }
  147.     for (i=0;i<nvar;i++) {
  148.         if (strcmp(var_names[i],name)==0) {
  149.             *idx = i;
  150.             *type = var_type[i];
  151.             return;
  152.         }
  153.     }
  154.     *idx = -1;
  155.  
  156.  
  157. /*     } else { */
  158. /*     } */
  159. }
  160. /*------------------------------------------------------------------*/
  161. var_find_dn(int *idx, int *var, int *nd)
  162. {
  163.     int i,d;
  164.     *nd = 0;
  165.     for (i=0;i<nlvar;i++) {
  166.         if (strncmp(lvar_names[i],"D",1)==0) {
  167.             d = atoi(lvar_names[i]+1);
  168.             if (d>0 && d<100) {
  169.                 ++*nd;
  170.                 *idx++ = i+200;
  171.                 *var++ = d;
  172.             }
  173.         }
  174.     }
  175. }
  176. var_find_rc(int *idx, int *var, int *nd, int c)
  177. {
  178.     int i,d;
  179.     *nd = 0;
  180.     for (i=0;i<nlvar;i++) {
  181.         if (*lvar_names[i]==c) {
  182.             d = atoi(lvar_names[i]+1);
  183.             if (d>0) {
  184.                 ++*nd;
  185.                 *idx++ = i+200;
  186.                 *var++ = d;
  187.             }
  188.         }
  189.     }
  190.     for (i=0;i<nvar;i++) {
  191.         if (*var_names[i]==c) {
  192.             d = atoi(var_names[i]+1);
  193.             if (d>0) {
  194.                 ++*nd;
  195.                 *idx++ = i;
  196.                 *var++ = d;
  197.             }
  198.         }
  199.     }
  200. }
  201. /*------------------------------------------------------------------*/
  202. str_var(s)
  203. char *s;
  204. {
  205.     int i;
  206.     i = strlen(s);
  207.     if (*(s+i-1)=='$') return true;
  208.       else return false;
  209. }
  210.  
  211. valid_var(s)
  212. char *s;
  213. {
  214.     return true;
  215. }
  216.  
  217. /*------------------------------------------------------------------*/
  218.