home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume8 / gnuplot1.10A / part03 / misc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-09-09  |  6.1 KB  |  322 lines

  1. /*
  2.  *
  3.  *    G N U P L O T  --  misc.c
  4.  *
  5.  *  Copyright (C) 1986, 1987  Thomas Williams, Colin Kelley
  6.  *
  7.  *  You may use this code as you wish if credit is given and this message
  8.  *  is retained.
  9.  *
  10.  *  Please e-mail any useful additions to vu-vlsi!plot so they may be
  11.  *  included in later releases.
  12.  *
  13.  *  This file should be edited with 4-column tabs!  (:set ts=4 sw=4 in vi)
  14.  */
  15.  
  16. #include <stdio.h>
  17. #include "plot.h"
  18. #ifdef __TURBOC__
  19. #include <graphics.h>
  20. #endif
  21.  
  22. extern BOOLEAN autoscale;
  23. extern BOOLEAN polar;
  24. extern BOOLEAN log_x, log_y;
  25. extern FILE* outfile;
  26. extern char outstr[];
  27. extern int samples;
  28. extern int term;
  29. extern double zero;
  30. extern double roff, loff, toff, boff;
  31.  
  32. extern BOOLEAN screen_ok;
  33.  
  34. extern int c_token;
  35. extern struct at_type at;
  36. extern struct ft_entry ft[];
  37. extern struct udft_entry *first_udf;
  38. extern struct udvt_entry *first_udv;
  39. extern struct termentry term_tbl[];
  40.  
  41. char *malloc();
  42.  
  43. struct at_type *temp_at();
  44.  
  45.  
  46. /*
  47.  * cp_free() releases any memory which was previously malloc()'d to hold
  48.  *   curve points.
  49.  */
  50. cp_free(cp)
  51. struct curve_points *cp;
  52. {
  53.     if (cp) {
  54.         cp_free(cp->next_cp);
  55.         if (cp->title)
  56.             free((char *)cp->title);
  57.         free((char *)cp);
  58.     }
  59. }
  60.  
  61.  
  62.  
  63. save_functions(fp)
  64. FILE *fp;
  65. {
  66. register struct udft_entry *udf = first_udf;
  67.     
  68.     if (fp) {
  69.         while (udf) {
  70.             if (udf->definition)
  71.                 fprintf(fp,"%s\n",udf->definition);
  72.             udf = udf->next_udf;
  73.         }
  74.         (void) fclose(fp);
  75.     } else
  76.         os_error("Cannot open save file",c_token);            
  77. }
  78.  
  79.  
  80. save_variables(fp)
  81. FILE *fp;
  82. {
  83. register struct udvt_entry *udv = first_udv->next_udv;    /* skip pi */
  84.  
  85.     if (fp) {
  86.         while (udv) {
  87.             if (!udv->udv_undef) {
  88.                 fprintf(fp,"%s = ",udv->udv_name);
  89.                 disp_value(fp,&(udv->udv_value));
  90.                 (void) putc('\n',fp);
  91.             }
  92.             udv = udv->next_udv;
  93.         }
  94.         (void) fclose(fp);
  95.     } else
  96.         os_error("Cannot open save file",c_token);            
  97. }
  98.  
  99.  
  100. save_all(fp)
  101. FILE *fp;
  102. {
  103. register struct udft_entry *udf = first_udf;
  104. register struct udvt_entry *udv = first_udv->next_udv;    /* skip pi */
  105.  
  106.     if (fp) {
  107.         while (udf) {
  108.             if (udf->definition)
  109.                 fprintf(fp,"%s\n",udf->definition);
  110.             udf = udf->next_udf;
  111.         }
  112.         while (udv) {
  113.             if (!udv->udv_undef) {
  114.                 fprintf(fp,"%s = ",udv->udv_name);
  115.                 disp_value(fp,&(udv->udv_value));
  116.                 (void) putc('\n',fp);
  117.             }
  118.             udv = udv->next_udv;
  119.         }
  120.         (void) fclose(fp);
  121.     } else
  122.         os_error("Cannot open save file",c_token);            
  123. }
  124.  
  125.  
  126. load_file(fp)
  127. FILE *fp;
  128. {
  129. register int len;
  130. extern char input_line[];
  131.  
  132.     if (fp) {
  133.         while (fgets(input_line,MAX_LINE_LEN,fp)) {
  134.             len = strlen(input_line) - 1;
  135.             if (input_line[len] == '\n')
  136.                 input_line[len] = '\0';
  137.  
  138.             screen_ok = FALSE;    /* make sure command line is
  139.                        echoed on error */
  140.             do_line();
  141.         }
  142.         (void) fclose(fp);
  143.     } else
  144.         os_error("Cannot open load file",c_token);
  145. }
  146.  
  147.  
  148. show_style(name,style)
  149. char name[];
  150. enum PLOT_STYLE style;
  151. {
  152.     fprintf(stderr,"\t%s are plotted with ",name);
  153.     switch (style) {
  154.         case LINES: fprintf(stderr,"lines\n"); break;
  155.         case POINTS: fprintf(stderr,"points\n"); break;
  156.         case IMPULSES: fprintf(stderr,"impulses\n"); break;
  157.     }
  158. }
  159.  
  160. show_range(name,min,max)
  161. char name;
  162. double min,max;
  163. {
  164.     fprintf(stderr,"\t%crange is [%g : %g]\n",name,min,max);
  165. }
  166.  
  167. show_zero()
  168. {
  169.     fprintf(stderr,"\tzero is %g\n",zero);
  170. }
  171.  
  172. show_offsets()
  173. {
  174.     fprintf(stderr,"\toffsets are %g, %g, %g, %g\n",roff,loff,toff,boff);
  175. }
  176.  
  177. show_samples()
  178. {
  179.     fprintf(stderr,"\tsampling rate is %d\n",samples);
  180. }
  181.  
  182. show_output()
  183. {
  184.     fprintf(stderr,"\toutput is sent to %s\n",outstr);
  185. }
  186.  
  187. show_term()
  188. {
  189.     fprintf(stderr,"\tterminal type is %s\n",term_tbl[term].name);
  190. }
  191.  
  192. show_polar()
  193. {
  194.     if (polar)
  195.         fprintf(stderr,"\tPolar coordinates are in effect\n");
  196.     else
  197.         fprintf(stderr,"\tRectangular coordinates are in effect\n");
  198. }
  199.  
  200. show_autoscale()
  201. {
  202.     fprintf(stderr,"\tautoscaling is %s\n",(autoscale)? "ON" : "OFF");
  203. }
  204.  
  205. show_logscale()
  206. {
  207.     if (log_x && log_y)
  208.         fprintf(stderr,"\tlogscaling both x and y axes\n");
  209.     else if (log_x)
  210.         fprintf(stderr,"\tlogscaling x axis\n");
  211.     else if (log_y)
  212.         fprintf(stderr,"\tlogscaling y axis\n");
  213.     else
  214.         fprintf(stderr,"\tno logscaling\n");
  215. }
  216.  
  217. show_variables()
  218. {
  219. register struct udvt_entry *udv = first_udv;
  220.  
  221.     fprintf(stderr,"\n\tVariables:\n");
  222.     while (udv) {
  223.         fprintf(stderr,"\t%-*s ",MAX_ID_LEN,udv->udv_name);
  224.         if (udv->udv_undef)
  225.             fputs("is undefined\n",stderr);
  226.         else {
  227.             fputs("= ",stderr);
  228.             disp_value(stderr,&(udv->udv_value));
  229.             (void) putc('\n',stderr);
  230.         }
  231.         udv = udv->next_udv;
  232.     }
  233. }
  234.  
  235.  
  236. show_functions()
  237. {
  238. register struct udft_entry *udf = first_udf;
  239.  
  240.     fprintf(stderr,"\n\tUser-Defined Functions:\n");
  241.  
  242.     while (udf) {
  243.         if (udf->definition)
  244.             fprintf(stderr,"\t%s\n",udf->definition);
  245.         else
  246.             fprintf(stderr,"\t%s is undefined\n",udf->udf_name);
  247.         udf = udf->next_udf;
  248.     }
  249. }
  250.  
  251.  
  252. show_at()
  253. {
  254.     (void) putc('\n',stderr);
  255.     disp_at(temp_at(),0);
  256. }
  257.  
  258.  
  259. disp_at(curr_at, level)
  260. struct at_type *curr_at;
  261. int level;
  262. {
  263. register int i, j;
  264. register union argument *arg;
  265.  
  266.     for (i = 0; i < curr_at->a_count; i++) {
  267.         (void) putc('\t',stderr);
  268.         for (j = 0; j < level; j++)
  269.             (void) putc(' ',stderr);    /* indent */
  270.  
  271.             /* print name of instruction */
  272.  
  273.         fputs(ft[(int)(curr_at->actions[i].index)].f_name,stderr);
  274.         arg = &(curr_at->actions[i].arg);
  275.  
  276.             /* now print optional argument */
  277.  
  278.         switch(curr_at->actions[i].index) {
  279.           case PUSH:    fprintf(stderr," %s\n", arg->udv_arg->udv_name);
  280.                     break;
  281.           case PUSHC:    (void) putc(' ',stderr);
  282.                     disp_value(stderr,&(arg->v_arg));
  283.                     (void) putc('\n',stderr);
  284.                     break;
  285.           case PUSHD:    fprintf(stderr," %s dummy\n",
  286.                       arg->udf_arg->udf_name);
  287.                     break;
  288.           case CALL:    fprintf(stderr," %s", arg->udf_arg->udf_name);
  289.                     if (arg->udf_arg->at) {
  290.                         (void) putc('\n',stderr);
  291.                         disp_at(arg->udf_arg->at,level+2); /* recurse! */
  292.                     } else
  293.                         fputs(" (undefined)\n",stderr);
  294.                     break;
  295.           case JUMP:
  296.           case JUMPZ:
  297.           case JUMPNZ:
  298.           case JTERN:
  299.                     fprintf(stderr," +%d\n",arg->j_arg);
  300.                     break;
  301.           default:
  302.                     (void) putc('\n',stderr);
  303.         }
  304.     }
  305. }
  306.  
  307.  
  308. show_version()
  309. {
  310. extern char version[];
  311. extern char date[];
  312. static char *authors[] = {"Thomas Williams","Colin Kelley"};
  313. int x;
  314. long time();
  315.  
  316.     x = time((long *)NULL) & 1;
  317.     fprintf(stderr,"\n\t%s\n\t%sversion %s\n\tlast modified %s\n",
  318.         PROGRAM, OS, version, date);
  319.     fprintf(stderr,"\tCopyright (C) 1986, 1987  %s, %s\n\n",
  320.         authors[x],authors[1-x]);
  321. }
  322.