123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /* Functions: commentfile, do_comments
- **
- ** Function commentfile is an extended version of the p.map function.
- **
- ** Author: Paul W. Carlson April 1992
- */
- #include <stdlib.h>
- #include <string.h>
- #include "comment.h"
- #include "local_proto.h"
- #define KEY(x) (strcmp(key,x)==0)
- static char *help1[] = {
- "where x y",
- "font fontname",
- "fontsize fontsize",
- "color color",
- ""
- };
- static char *help2[] = {
- "enter comments, line by line",
- ""
- };
- int read_comment(char *name)
- {
- char buf[1024];
- char *key, *data;
- FILE *in, *out;
- int need_blank;
- int color, fontsize;
- double x, y;
- fontsize = 0;
- color = BLACK;
- x = y = 0.0;
- while (input(2, buf, help1)) {
- if (!key_data(buf, &key, &data))
- continue;
- if (KEY("where")) {
- if (sscanf(data, "%lf %lf", &x, &y) != 2) {
- x = y = 0.0;
- error(key, data, "illegal where request");
- }
- else
- continue;
- }
- if (KEY("fontsize")) {
- fontsize = atoi(data);
- if (fontsize < 4 || fontsize > 50)
- fontsize = 0;
- continue;
- }
- if (KEY("color")) {
- color = get_color_number(data);
- if (color < 0) {
- color = BLACK;
- error(key, data, "illegal color request");
- }
- continue;
- }
- if (KEY("font")) {
- get_font(data);
- cmt.font = G_store(data);
- continue;
- }
- error(key, data, "illegal comment sub-request");
- }
- cmt.x = x;
- cmt.y = y;
- cmt.color = color;
- if (fontsize)
- cmt.fontsize = fontsize;
- in = NULL;
- if (*name) {
- in = fopen(name, "r");
- if (in == NULL) {
- error("comment file", name, "can't open");
- return 1;
- }
- }
- if (PS.commentfile == NULL) {
- PS.commentfile = G_tempfile();
- need_blank = 0;
- if ((out = fopen(PS.commentfile, "w")) != NULL)
- fclose(out);
- }
- else
- need_blank = 1;
- out = fopen(PS.commentfile, "a");
- if (out == NULL) {
- error("can't create a comments file", "", "");
- if (in == NULL)
- gobble_input();
- else
- fclose(in);
- return 1;
- }
- if (in == NULL)
- while (input(2, buf, help2)) {
- if (need_blank) {
- fprintf(out, "\n");
- need_blank = 0;
- }
- /* G_strip(buf); */
- fprintf(out, "%s\n", buf);
- }
- else {
- while (G_getl2(buf, sizeof buf, in)) {
- if (need_blank) {
- fprintf(out, "\n");
- need_blank = 0;
- }
- /* G_strip(buf); */
- fprintf(out, "%s\n", buf);
- }
- fclose(in);
- }
- fclose(out);
- return 0;
- }
- int do_comment(void)
- {
- FILE *fp;
- char text[1024];
- double x, y, dy, fontsize;
- /* set font */
- fontsize = (double)cmt.fontsize;
- fprintf(PS.fp, "(%s) FN %.1f SF\n", cmt.font, fontsize);
- /* set start of first line */
- dy = 1.2 * fontsize;
- y = 72.0 * (PS.page_height - cmt.y);
- if (cmt.y > PS.page_height)
- y = PS.min_y - dy;
- x = 72.0 * PS.left_marg + 1.5;
- if (72.0 * cmt.x > x)
- x = 72.0 * cmt.x;
- /* read the comment file */
- if ((fp = fopen(PS.commentfile, "r")) == NULL) {
- error("comment file", PS.commentfile, "can't open");
- return 1;
- }
- while (G_getl2(text, sizeof text, fp)) {
- /* G_strip(text); */
- if (*text)
- show_text(x, y, text);
- y -= dy;
- }
- fclose(fp);
- y -= 0.25 * dy;
- if (PS.min_y > y)
- PS.min_y = y;
- return 0;
- }
|