home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume18 / jgraph / patch03 next >
Internet Message Format  |  1991-04-14  |  12KB

  1. From: jsp@Princeton.EDU (James Plank)
  2. Newsgroups: comp.sources.misc
  3. Subject: v18i016:  jgraph - A filter for plotting postscript graphs, Patch03
  4. Message-ID: <1991Apr13.211553.15755@sparky.IMD.Sterling.COM>
  5. Date: 13 Apr 91 21:15:53 GMT
  6. Approved: kent@sparky.imd.sterling.com
  7. X-Checksum-Snefru: 968ab746 03532924 64ddf361 97b8d999
  8.  
  9. Submitted-by: James Plank <jsp@Princeton.EDU>
  10. Posting-number: Volume 18, Issue 16
  11. Archive-name: jgraph/patch03
  12. Patch-To: jgraph: Volume 16, Issue 20
  13.  
  14. I just made a small addition to jgraph to allow for shell escapes in
  15. the input.  More specifically, you can do things like
  16.  
  17. newcurve pts shell : awk '{print $3, $7}' stats
  18.  
  19. to extract points from columns 3 & 7 of the file stats.  
  20. No bugs fixes in this patch, just expanded fuctionality.
  21.  
  22. Jim Plank
  23. jsp@princeton.edu
  24. ------
  25. # To unbundle, "sed '1,/^# To unbundle/d' < thisfile | sh"
  26. # Fri Apr 12 17:37:43 EDT 1991
  27. echo PATCH.3.README 1>&2
  28. sed 's/^-//' >'PATCH.3.README' <<'End of PATCH.3.README'
  29. -This patch adds shell escapes to jgraph.  More specifically, you can
  30. -do things like
  31. -
  32. -newcurve pts shell : awk '{print $3, $7}' stats
  33. -
  34. -to extract points from columns 3 & 7 of the file stats.  For more information,
  35. -see the man page.
  36. -
  37. -Apply the patch by:
  38. -
  39. -patch < patch.3
  40. End of PATCH.3.README
  41. echo patch.3 1>&2
  42. sed 's/^-//' >'patch.3' <<'End of patch.3'
  43. -*** jgraph.1    Fri Apr 12 17:23:20 1991
  44. ---- ../export/jgraph.1    Fri Apr 12 17:11:27 1991
  45. -***************
  46. -*** 87,94 ****
  47. -  attributes.  All keywords and attributes except for string attributes
  48. -  are tokens -- non-white-space characters surrounded by white-space. 
  49. -  Special tokens are 
  50. -! ``(*'', ``*)'', ``include'' and ``:'', which denote
  51. -! comments, include-file statments, and string identifiers:
  52. -  .TP 
  53. -  .B Comments
  54. -  Comments are surrounded by the tokens ``(*'' ``*)'' as in
  55. ---- 87,95 ----
  56. -  attributes.  All keywords and attributes except for string attributes
  57. -  are tokens -- non-white-space characters surrounded by white-space. 
  58. -  Special tokens are 
  59. -! ``(*'', ``*)'', ``include'', ``:'', and ``shell'', which denote
  60. -! comments, include-file statements, string identifiers, and shell-include
  61. -! statements:
  62. -  .TP 
  63. -  .B Comments
  64. -  Comments are surrounded by the tokens ``(*'' ``*)'' as in
  65. -***************
  66. -*** 100,106 ****
  67. -  The token following an ``include'' token is
  68. -  expected to be a file name.  The result of the statement is to
  69. -  include the contents of the file at that point.  Include-file
  70. -! statments can be nested within included files.
  71. -  .TP 
  72. -  .B Strings
  73. -  In places where strings are required (as in graph and
  74. ---- 101,108 ----
  75. -  The token following an ``include'' token is
  76. -  expected to be a file name.  The result of the statement is to
  77. -  include the contents of the file at that point.  Include-file
  78. -! statments can be nested within included files, and within shell
  79. -! includes.
  80. -  .TP 
  81. -  .B Strings
  82. -  In places where strings are required (as in graph and
  83. -***************
  84. -*** 125,130 ****
  85. ---- 127,139 ----
  86. -  Once a string has been started, it may contain any character besides
  87. -  a newline.  Specifically, it may contain the sequence ``(*'' or
  88. -  ``include'' without starting a comment or including a file.
  89. -+ .TP
  90. -+ .B Shell\-include statements
  91. -+ Shell include statements are of the form ``shell'', ``:'', and then
  92. -+ a string.  The result of the statment is that the string is executed
  93. -+ (using popen, which passes the string to sh), and the standard
  94. -+ output is included at that point.  Shell-includes can be freely
  95. -+ nested within include-files and other shell-includes.
  96. -  .TP
  97. -  .B Notation
  98. -  In the descriptions below: 
  99. -*** jgraph.c    Fri Apr 12 17:24:43 1991
  100. ---- ../export/jgraph.c    Fri Apr 12 17:11:23 1991
  101. -***************
  102. -*** 47,54 ****
  103. -                           "ellipse", "general", "xbar", "ybar", "none" };
  104. -  char MARKTYPES[] = { 'o', 'b', 'd', 't', 'x', 'c', 'e', 'g', 'X', 'Y', 'n' };
  105. -  
  106. -- 
  107. -- 
  108. -  Label new_label()
  109. -  {
  110. -    Label l;
  111. ---- 47,52 ----
  112. -***************
  113. -*** 55,65 ****
  114. -  
  115. -    l = (Label) malloc (sizeof(struct label));
  116. -    l->label = CNULL;
  117. -!   l->hj = 'c';
  118. -!   l->vj = 'b';
  119. -!   l->font = "Times-Roman";
  120. -!   l->fontsize = 9.0;
  121. -!   l->rotate = 0;
  122. -  
  123. -    return l;
  124. -  }
  125. ---- 53,63 ----
  126. -  
  127. -    l = (Label) malloc (sizeof(struct label));
  128. -    l->label = CNULL;
  129. -!   l->hj = '!';
  130. -!   l->vj = '!';
  131. -!   l->font = CNULL;
  132. -!   l->fontsize = FSIG;
  133. -!   l->rotate = FSIG;
  134. -  
  135. -    return l;
  136. -  }
  137. -***************
  138. -*** 198,203 ****
  139. ---- 196,221 ----
  140. -    return new_s;
  141. -  }
  142. -  
  143. -+ /*
  144. -+ Default new_default()
  145. -+ {
  146. -+   Default new_d;
  147. -+   new_d = (Default) malloc (sizeof(default));
  148. -+   new_d->rotate = FSIG;
  149. -+   new_d->fontsize = FSIG;
  150. -+   new_d->general_marks = GMNULL;
  151. -+   new_d->fill = FSIG;
  152. -+   new_d->linethick = FSIG;
  153. -+   new_d->font = CNULL;
  154. -+   new_d->hj = '!';
  155. -+   new_d->vj = '!';
  156. -+   new_d->marktype = '!';
  157. -+   new_d->linetype = '!';
  158. -+   new_d->marksize[0] = FSIG;
  159. -+   new_d->marksize[1] = FSIG;
  160. -+ }
  161. -+ */
  162. -+   
  163. -  Graph new_graph(gs, num)
  164. -  Graph gs;
  165. -  int num;
  166. -***************
  167. -*** 215,220 ****
  168. ---- 233,239 ----
  169. -    g->strings = (String) make_list(sizeof(struct string));
  170. -    g->title = new_title();
  171. -    g->legend = new_legend();
  172. -+ /*  g->def = new_default(); */
  173. -    prio_insert(g, gs, 0);
  174. -    return g;
  175. -  }
  176. -*** jgraph.h    Fri Apr 12 17:24:44 1991
  177. ---- ../export/jgraph.h    Fri Apr 12 17:11:23 1991
  178. -***************
  179. -*** 41,47 ****
  180. -  
  181. -  #include "list.h"
  182. -  #include "prio_list.h"
  183. -- #include "fprio_list.h"
  184. -  #ifdef LCC
  185. -  #include <stdlib.h>
  186. -  #endif
  187. ---- 41,46 ----
  188. -***************
  189. -*** 51,56 ****
  190. ---- 50,56 ----
  191. -  #define CPI 72.0
  192. -  #define FCPI 72.0
  193. -  #define CNULL ((char *)0)
  194. -+ #define GMNULL ((Point)0)
  195. -  #define FSIG -10010.0
  196. -  #define HASH_SIZE 5.0
  197. -  #define MHASH_SIZE 2.0
  198. -***************
  199. -*** 101,106 ****
  200. ---- 101,119 ----
  201. -    float size;
  202. -  } *Hash;
  203. -  
  204. -+ typedef struct deflt {
  205. -+   float rotate;
  206. -+   float fontsize;
  207. -+   Point general_marks;
  208. -+   float fill;
  209. -+   float linethick;
  210. -+   float marksize[2];
  211. -+   char *font;
  212. -+   char hj;
  213. -+   char vj;
  214. -+   char marktype;
  215. -+ } *Default;
  216. -+   
  217. -  typedef struct axis {
  218. -    Label label;
  219. -    Label hl;
  220. -***************
  221. -*** 158,163 ****
  222. ---- 171,177 ----
  223. -    Legend legend;
  224. -    String strings;
  225. -    Label title;
  226. -+   Default def;
  227. -  } *Graph;
  228. -  
  229. -  typedef struct graphs {
  230. -*** makefile    Fri Apr 12 17:24:45 1991
  231. ---- ../export/makefile    Fri Apr 12 17:11:27 1991
  232. -***************
  233. -*** 3,9 ****
  234. -  
  235. -  OBJS = draw.o \
  236. -          edit.o \
  237. --         fprio_list.o \
  238. -          jgraph.o \
  239. -          list.o \
  240. -          printline.o \
  241. ---- 3,8 ----
  242. -***************
  243. -*** 29,43 ****
  244. -      $(CC) -g $(OBJS) -lm -o jgraph
  245. -  
  246. -  ###
  247. -! draw.o: draw.c jgraph.h list.h prio_list.h fprio_list.h
  248. -! edit.o: edit.c jgraph.h list.h prio_list.h fprio_list.h
  249. -! fprio_list.o: fprio_list.c list.h prio_list.h
  250. -! jgraph.o: jgraph.c jgraph.h list.h prio_list.h fprio_list.h
  251. -  list.o: list.c list.h
  252. -! printline.o: printline.c jgraph.h list.h prio_list.h fprio_list.h
  253. -  prio_list.o: prio_list.c list.h prio_list.h
  254. -! process.o: process.c jgraph.h list.h prio_list.h fprio_list.h
  255. -! show.o: show.c jgraph.h list.h prio_list.h fprio_list.h
  256. -  token.o: token.c list.h
  257. -  clean: 
  258. -      rm -f *.o a.out
  259. ---- 28,41 ----
  260. -      $(CC) -g $(OBJS) -lm -o jgraph
  261. -  
  262. -  ###
  263. -! draw.o: draw.c jgraph.h list.h prio_list.h
  264. -! edit.o: edit.c jgraph.h list.h prio_list.h
  265. -! jgraph.o: jgraph.c jgraph.h list.h prio_list.h 
  266. -  list.o: list.c list.h
  267. -! printline.o: printline.c jgraph.h list.h prio_list.h 
  268. -  prio_list.o: prio_list.c list.h prio_list.h
  269. -! process.o: process.c jgraph.h list.h prio_list.h 
  270. -! show.o: show.c jgraph.h list.h prio_list.h 
  271. -  token.o: token.c list.h
  272. -  clean: 
  273. -      rm -f *.o a.out
  274. -*** token.c    Fri Apr 12 17:24:49 1991
  275. ---- ../export/token.c    Fri Apr 12 17:11:25 1991
  276. -***************
  277. -*** 1,4 ****
  278. ---- 1,7 ----
  279. -  /* $Log:    token.c,v $
  280. -+  * Revision 1.10  91/04/12  17:06:55  jsp
  281. -+  * Added the shell command to allow jgraph to execute stuff
  282. -+  * 
  283. -   * Revision 1.9  91/01/16  11:04:04  jsp
  284. -   * Fixed Rlog information
  285. -   * 
  286. -***************
  287. -*** 63,68 ****
  288. ---- 66,73 ----
  289. -    FILE *stream;
  290. -    int oldcharvalid;
  291. -    char oldchar;
  292. -+   char pipe;
  293. -+   int line;
  294. -  } *Iostack;
  295. -  
  296. -  static char INPUT[300];
  297. -***************
  298. -*** 69,77 ****
  299. ---- 74,84 ----
  300. -  static int getnew = 1;
  301. -  static char oldchar = '\0';
  302. -  static oldcharvalid = 0;
  303. -+ static char pipe = 0;
  304. -  static int eof = 0;
  305. -  static int init = 0;
  306. -  static Iostack stack;
  307. -+ 
  308. -  #ifndef VMS 
  309. -  static FILE *IOSTREAM = stdin;
  310. -  #else
  311. -***************
  312. -*** 143,149 ****
  313. -    return (first(stack) == nil(stack));
  314. -  }
  315. -  
  316. -! static push_iostack()
  317. -  {
  318. -    Iostack n;
  319. -  
  320. ---- 150,157 ----
  321. -    return (first(stack) == nil(stack));
  322. -  }
  323. -  
  324. -! static push_iostack(p)
  325. -! int p;
  326. -  {
  327. -    Iostack n;
  328. -  
  329. -***************
  330. -*** 153,161 ****
  331. -    n->filename = (char *) malloc (sizeof(char)*(strlen(FILENAME)+2));
  332. -    n->oldchar = oldchar;
  333. -    n->oldcharvalid = oldcharvalid;
  334. -    strcpy(n->filename, FILENAME);
  335. -    insert(n, stack);
  336. -!   IOSTREAM = fopen(INPUT, "r");
  337. -    if (IOSTREAM == NULL) {
  338. -      error_header();
  339. -      fprintf(stderr, "Include file \"%s\" does not exist\n", INPUT);
  340. ---- 161,177 ----
  341. -    n->filename = (char *) malloc (sizeof(char)*(strlen(FILENAME)+2));
  342. -    n->oldchar = oldchar;
  343. -    n->oldcharvalid = oldcharvalid;
  344. -+   n->pipe = pipe;
  345. -+   n->line = line;
  346. -    strcpy(n->filename, FILENAME);
  347. -    insert(n, stack);
  348. -!   if (p) {
  349. -!     IOSTREAM = (FILE *) popen(INPUT, "r");
  350. -!   } else {
  351. -!     IOSTREAM = fopen(INPUT, "r");
  352. -!   }
  353. -!   pipe = p;
  354. -!   line = 1;
  355. -    if (IOSTREAM == NULL) {
  356. -      error_header();
  357. -      fprintf(stderr, "Include file \"%s\" does not exist\n", INPUT);
  358. -***************
  359. -*** 168,179 ****
  360. -  {
  361. -    Iostack n;
  362. -  
  363. -    iostackinit();
  364. -!   fclose(IOSTREAM);
  365. -    n = last(stack);
  366. -    IOSTREAM = n->stream;
  367. -    strcpy(FILENAME, n->filename);
  368. -  /*  free(n->filename); */
  369. -    oldchar = n->oldchar;
  370. -    oldcharvalid = n->oldcharvalid;
  371. -    delete(n);
  372. ---- 184,208 ----
  373. -  {
  374. -    Iostack n;
  375. -  
  376. -+ /*  error_header();
  377. -+   fprintf(stderr, "\nCalled pop_io_stack.  Pipe = %d\n", pipe); */
  378. -+   fflush(IOSTREAM);
  379. -    iostackinit();
  380. -!   if (pipe) {
  381. -!     if (pclose(IOSTREAM)) {
  382. -!       /*error_header();
  383. -!       fprintf(stderr, "\n\nPipe returned a non-zero error code.\n");
  384. -!       exit(1); */
  385. -!     }
  386. -!   } else {
  387. -!     fclose(IOSTREAM);
  388. -!   }
  389. -    n = last(stack);
  390. -    IOSTREAM = n->stream;
  391. -    strcpy(FILENAME, n->filename);
  392. -  /*  free(n->filename); */
  393. -+   pipe = n->pipe;
  394. -+   line = n->line;
  395. -    oldchar = n->oldchar;
  396. -    oldcharvalid = n->oldcharvalid;
  397. -    delete(n);
  398. -***************
  399. -*** 202,209 ****
  400. -            fprintf(stderr, "Empty include statement\n");
  401. -            exit(1);
  402. -          } else {
  403. -!           push_iostack();
  404. -          }
  405. -        } else {
  406. -          getnew = 1;
  407. -          return;
  408. ---- 231,250 ----
  409. -            fprintf(stderr, "Empty include statement\n");
  410. -            exit(1);
  411. -          } else {
  412. -!           push_iostack(0);
  413. -          }
  414. -+       } else if (strcmp(INPUT, "shell") == 0) {
  415. -+         char *s, fn[30];
  416. -+         if (gettoken(INPUT) == 0 || strcmp(INPUT, ":") != 0) {
  417. -+           error_header();
  418. -+           fprintf(stderr, "'shell' must be followed by ':'\n");
  419. -+           exit(1);
  420. -+         } 
  421. -+         if (getsystemstring() == 0) {
  422. -+           fprintf(stderr, "Empty shell statement\n");
  423. -+           exit(1);
  424. -+         }
  425. -+         push_iostack(1);
  426. -        } else {
  427. -          getnew = 1;
  428. -          return;
  429. -***************
  430. -*** 319,324 ****
  431. ---- 360,386 ----
  432. -    ungettokenchar();
  433. -    INPUT[i] = '\0';
  434. -    return new_printable_text(INPUT);
  435. -+ }
  436. -+ 
  437. -+ int getsystemstring()
  438. -+ {
  439. -+   char c;
  440. -+   int i;
  441. -+ 
  442. -+   if (getnew == 0) return 0;
  443. -+   
  444. -+   c = gettokenchar();
  445. -+   if (c == EOF) {
  446. -+     ungettokenchar();
  447. -+     return 0;
  448. -+   }
  449. -+   i = 0;
  450. -+   for (c = gettokenchar(); c != EOF && c != '\n';  c = gettokenchar()) {
  451. -+     INPUT[i++] = c;
  452. -+   }
  453. -+   ungettokenchar();
  454. -+   INPUT[i] = '\0';
  455. -+   return 1;
  456. -  }
  457. -  
  458. -  rejecttoken()
  459. End of patch.3
  460.  
  461. exit 0 # Just in case...
  462. -- 
  463. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  464. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  465. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  466. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  467.