Path: utzoo!attcan!uunet!mcsun!hp4nl!integow!hot From: hot@integow.uucp (Roland van Hout) Newsgroups: alt.sources Subject: PD plot(4) librarys (and hercules driver for interactive 386) part 6 of 9 Keywords: plot interface graphics Message-ID: <1393@integow.uucp> Date: 28 Oct 90 03:56:28 GMT Organization: Integrity BV, Woerden, the Netherlands Lines: 1050 #!/bin/sh # This is part 06 of a multipart archive if touch 2>&1 | fgrep '[-amc]' > /dev/null then TOUCH=touch else TOUCH=true fi # ============= libplot/sun/sunplot.c ============== echo "x - extracting libplot/sun/sunplot.c (Text)" sed 's/^X//' << 'SHAR_EOF' > libplot/sun/sunplot.c && X/* X * Sunplot - plotter backend for Sun workstation X * X * Copyright (c) 1987 by Sjoerd Mullender, Vrije Universiteit, Amsterdam. X * X * This program may be redistributed without fee as long as this copyright X * notice is in tact. X * Any commercial use is strictly prohibited. X */ X X#include X#include X#include X#include X#include X X/* X * Configurable definitions X */ X#define INIT_CANVAS_SIZE 512 X#define DEFAULT_SPACE 4096 X#define MAX_NAME_LENGTH 128 X X/* X * Unconfigurable definitions X */ X#define BIG 0x7FFFFFFF X X#define FORMAT_RASTER 0 X#define FORMAT_ICON 1 X X#define LABEL 0 X#define SQUARE 1 X#define REVERSE 2 X Xint client_object; /* used for notifier */ Xint *me = &client_object; /* idem */ X Xint curx, cury; /* current position on plot */ Xint lox, loy, hix = DEFAULT_SPACE, hiy = DEFAULT_SPACE; /* current space */ Xint slox, shix, sloy, shiy; /* saved space settings for zooming */ Xint minx, maxx, miny, maxy; /* minimum and maximum values encountered */ Xint hor_size, ver_size; /* canvas size */ Xint turned, xmirror, ymirror; /* orientation of plot */ Xint zooming; Xint make_label = TRUE; /* print labels */ Xint square = TRUE; /* canvas is square */ Xint reverse = FALSE; /* reverse video */ XFrame frame, dump_frame, options_frame; XPanel panel, dump_panel, options_panel; XPanel_item next_page_item; XPanel_item hor_size_item, ver_size_item, toggle_item, font_item; XPanel_item dump_format, dump_file_item; XCanvas canvas; XPixwin *pw; XPixfont *font; Xchar font_name[MAX_NAME_LENGTH]; Xchar font_dir[] = "/usr/lib/fonts/fixedwidthfonts/"; X Xshort sunplot_icon_image[] = { X#include "sunplot.icon" X}; Xmpr_static(sunplot_icon, 64, 64, 1, sunplot_icon_image); X Xchar *malloc(), *realloc(); X X/* X * input module X */ X Xstatic char *plotcommands, *plptr; Xstatic int plotlength; Xstatic int maxplotlength; Xstatic int eof_seen; X Xgetchr() X{ X register c; X X if (plptr < plotcommands + plotlength) X return *plptr++ & 0xFF; X if (eof_seen || (c = getchar()) == EOF) { X eof_seen = 1; X return EOF; X } X if (plotlength >= maxplotlength) { X plotcommands = realloc(plotcommands, maxplotlength *= 2); X plptr = plotcommands + plotlength; X } X *plptr++ = c; X plotlength++; X return c; X} X Xgetint() X{ X register n; X X n = getchr(); X n = n | getchr() << 8; X if (n & 0x8000) /* sign extend */ X n |= ~0x7FFF; X return n; X} X Xchar *getstr() X{ X register i = plptr - plotcommands; X register c; X X while ((c = getchr()) != EOF && c != '\0' && c != '\n') X ; X plptr[-1] = 0; X return plotcommands + i; X} X X/* X * plot module X */ X X#define point(x,y) pw_put(pw, plotx(x, y), ploty(x, y), !reverse) X X#define line(x0,y0,x1,y1) pw_vector(pw,plotx(x0,y0),ploty(x0,y0),plotx(x1,y1),ploty(x1,y1),PIX_SRC,!reverse) X X#define convx(x,s) (((x) - lox) * (s) / (hix - lox)) X#define convy(y,s) (((y) - loy) * (s) / (hiy - loy)) X Xinitplot() X{ X plptr = plotcommands = malloc(maxplotlength = 1024); X plotlength = 0; X} X Xplotx(x, y) X{ X register a; X X switch (turned) { X case 0: a = convx(x, hor_size); break; X case 1: a = hor_size - 1 - convy(y, hor_size); break; X case 2: a = hor_size - 1 - convx(x, hor_size); break; X case 3: a = convy(y, hor_size); break; X } X return xmirror ? hor_size - 1 - a : a; X} X Xploty(x, y) X{ X register a; X X switch (turned) { X case 0: a = ver_size - 1 - convy(y, ver_size); break; X case 1: a = ver_size - 1 - convx(x, ver_size); break; X case 2: a = convy(y, ver_size); break; X case 3: a = convx(x, ver_size); break; X } X a = ymirror ? ver_size - 1 - a : a; X return zooming ? a+1 : a; X} X Xlabel(s) Xchar *s; X{ X struct pr_size pr_size; X X if (!make_label) X return 0; X pw_text(pw, plotx(curx, cury), ploty(curx, cury), reverse ? PIX_NOT(PIX_SRC)&PIX_DST : PIX_SRC|PIX_DST, font, s); X pr_size = pf_textwidth(strlen(s), font, s); X return pr_size.x * (hix - lox) / hor_size; X} X Xisqrt(n) X{ X int a, b, c; X X a = n; X b = n; X if (n > 1) { X while (a > 0) { X a = a >> 2; X b = b >> 1; X } X do { X a = b; X c = n / b; X b = (c + a) >> 1; X } while ((a - c) < -1 || (a - c) > 1); X } X return b; X} X Xstatic setcir(x, y, a1, b1, c1, a2, b2, c2) X{ X if (a1 * y - b1 * x >= c1 && a2 * y - b2 * x <= c2) X point(x, y); X} X Xarc(x, y, x1, y1, x2, y2) X{ X register a1 = x1 - x, b1 = y1 - y, a2 = x2 - x, b2 = y2 - y; X register c1 = a1 * y - b1 * x, c2 = a2 * y - b2 * x; X register r2 = a1 * a1 + b1 * b1; X register i, di, sqrt, dx, dy; X X dx = (hix - lox) / hor_size; X dy = (hiy - loy) / ver_size; X di = dx < dy ? dx : dy; X if (di <= 0) X di = 1; X for (i = isqrt(r2 >> 1); i >= 0; i -= di) { X sqrt = isqrt(r2 - i * i); X setcir(x + i, y + sqrt, a1, b1, c1, a2, b2, c2); X setcir(x + i, y - sqrt, a1, b1, c1, a2, b2, c2); X setcir(x - i, y + sqrt, a1, b1, c1, a2, b2, c2); X setcir(x - i, y - sqrt, a1, b1, c1, a2, b2, c2); X setcir(x + sqrt, y + i, a1, b1, c1, a2, b2, c2); X setcir(x + sqrt, y - i, a1, b1, c1, a2, b2, c2); X setcir(x - sqrt, y + i, a1, b1, c1, a2, b2, c2); X setcir(x - sqrt, y - i, a1, b1, c1, a2, b2, c2); X } X} X Xcircle(x, y, r) X{ X arc(x, y, x + r, y, x - r, y); X arc(x, y, x - r, y, x + r, y); X} X XNotify_value input_reader(me, fd) Xint *me; Xint fd; X{ X int newx, newy, x, y, r; X register char *p; X X do { X switch (getchr()) { X case 'm': /* move */ X curx = getint(); X cury = getint(); X if (curx < minx) minx = curx; X if (curx > maxx) maxx = curx; X if (cury < miny) miny = cury; X if (cury > maxy) maxy = cury; X break; X case 'n': /* cont */ X newx = getint(); X newy = getint(); X line(curx, cury, newx, newy); X curx = newx; X cury = newy; X if (curx < minx) minx = curx; X if (curx > maxx) maxx = curx; X if (cury < miny) miny = cury; X if (cury > maxy) maxy = cury; X break; X case 'p': /* point */ X curx = getint(); X cury = getint(); X point(curx, cury); X if (curx < minx) minx = curx; X if (curx > maxx) maxx = curx; X if (cury < miny) miny = cury; X if (cury > maxy) maxy = cury; X break; X case 'l': /* line */ X newx = getint(); X newy = getint(); X curx = getint(); X cury = getint(); X line(newx, newy, curx, cury); X if (newx < minx) minx = newx; X if (newx > maxx) maxx = newx; X if (newy < miny) miny = newy; X if (newy > maxy) maxy = newy; X if (curx < minx) minx = curx; X if (curx > maxx) maxx = curx; X if (cury < miny) miny = cury; X if (cury > maxy) maxy = cury; X break; X case 't': /* label */ X p = getstr(); X curx += label(p); X if (curx < minx) minx = curx; X if (curx > maxx) maxx = curx; X break; X case 'a': /* arc */ X x = getint(); X y = getint(); X newx = getint(); X newy = getint(); X curx = getint(); X cury = getint(); X arc(x, y, newx, newy, curx, cury); X if (x < minx) minx = x; X if (x > maxx) maxx = x; X if (y < miny) miny = y; X if (y > maxy) maxy = y; X if (newx < minx) minx = newx; X if (newx > maxx) maxx = newx; X if (newy < miny) miny = newy; X if (newy > maxy) maxy = newy; X if (curx < minx) minx = curx; X if (curx > maxx) maxx = curx; X if (cury < miny) miny = cury; X if (cury > maxy) maxy = cury; X break; X case 'c': /* circle */ X curx = getint(); X cury = getint(); X r = getint(); X circle(curx, cury, r); X if (curx - r < minx) minx = curx - r; X if (curx + r > maxx) maxx = curx + r; X if (cury - r < miny) miny = cury - r; X if (cury + r > maxy) maxy = cury + r; X break; X case 'e': /* erase */ X panel_set(next_page_item, PANEL_SHOW_ITEM, TRUE, 0); X /* fall through */ X case EOF: X notify_set_input_func(me, NOTIFY_FUNC_NULL, fd); X if (zooming) { X lox = slox; X hix = shix; X loy = sloy; X hiy = shiy; X zooming = 0; X } X return NOTIFY_DONE; X case 'f': /* linemod */ X getstr(); X break; X case 's': /* space */ X if (zooming) { X slox = getint(); X sloy = getint(); X shix = getint(); X shiy = getint(); X } else { X lox = getint(); X loy = getint(); X hix = getint(); X hiy = getint(); X } X break; X } X } while (plptr < plotcommands + plotlength || stdin->_cnt > 0); X return NOTIFY_DONE; X} X X/* X * button routines X */ X Xrestartplot() X{ X minx = BIG; X maxx = -BIG; X miny = BIG; X maxy = -BIG; X plptr = plotcommands; X X /* clear the canvas */ X pw_writebackground(pw, 0, 0, (int) window_get(canvas, CANVAS_WIDTH), X (int) window_get(canvas, CANVAS_HEIGHT), X reverse ? PIX_SET : PIX_CLR); X} X Xresetplot() X{ X restartplot(); X plotlength = 0; X} X Xvoid redraw() X{ X if (zooming) { X lox = slox; X hix = shix; X loy = sloy; X hiy = shiy; X zooming = 0; X } X restartplot(); X input_reader(me, fileno(stdin)); X} X Xvoid nextpage() X{ X resetplot(); X panel_set(next_page_item, PANEL_SHOW_ITEM, FALSE, 0); X notify_set_input_func(me, input_reader, fileno(stdin)); X if (stdin->_cnt > 0) X input_reader(me, fileno(stdin)); X} X Xvoid zoom() X{ X int a; X X if (!zooming) { X slox = lox; X shix = hix; X sloy = loy; X shiy = hiy; X zooming = 1; X } X if (maxx == minx) { X maxx++; X minx--; X } X if (maxy == miny) { X maxy++; X miny--; X } X if ((a = (maxx-minx) * (shiy-sloy) / (shix-slox)) >= maxy-miny) { X loy = miny - (a - maxy + miny) / 2; X hiy = loy + a; X lox = minx; X hix = maxx; X } else { X a = (maxy - miny) * (shix - slox) / (shiy - sloy); X lox = minx - (a - maxx + minx) / 2; X hix = lox + a; X loy = miny; X hiy = maxy; X } X hix++; X hiy++; X restartplot(); X input_reader(me, fileno(stdin)); X} X Xvoid quit() X{ X /* don't ask for confirmation */ X if (font) X pf_close(font); X window_set(frame, FRAME_NO_CONFIRM, TRUE, 0); X window_destroy(frame); X} X Xvoid turn() X{ X int tmp; X X turned = (turned + 1) & 3; X tmp = xmirror; X xmirror = ymirror; X ymirror = tmp; X} X Xvoid mirrorx() X{ X xmirror ^= 1; X} X Xvoid mirrory() X{ X ymirror ^= 1; X} X Xvoid toggle_proc() X{ X if ((int) panel_get(toggle_item, PANEL_TOGGLE_VALUE, SQUARE)) { X panel_set(ver_size_item, X PANEL_SHOW_ITEM, FALSE, X 0); X panel_set(hor_size_item, X PANEL_LABEL_STRING, "Canvas size: ", X 0); X } else { X panel_set(ver_size_item, X PANEL_SHOW_ITEM, TRUE, X 0); X panel_set(hor_size_item, X PANEL_LABEL_STRING, "Horizontal size: ", X 0); X } X} X Xvoid options() X{ X window_set(options_frame, WIN_SHOW, TRUE, 0); X} X Xvoid options_done() X{ X register int r; X char *f; X Cursor cursor; X X window_set(options_frame, WIN_SHOW, FALSE, 0); X r = (int) panel_get(hor_size_item, PANEL_VALUE); X if (r != hor_size) { X window_set(canvas, CANVAS_WIDTH, r, 0); X hor_size = r; X } X if (square) X r = hor_size; X else X r = (int) panel_get(ver_size_item, PANEL_VALUE); X if (r != ver_size) { X window_set(canvas, CANVAS_HEIGHT, r, 0); X ver_size = r; X } X f = (char *) panel_get_value(font_item); X if (f == 0 || *f == 0) { X if (font_name[0] != 0) { X font_name[0] = 0; X if (font) X pf_close(font); X font = pf_default(); X } X } else { X if (font_name[0] == 0 || strcmp(f, font_name) != 0) { X strcpy(font_name, f); X f = font_name; X if (*f != '/') { X f = malloc(strlen(font_dir)+strlen(font_name)+1); X strcpy(f, font_dir); X strcat(f, font_name); X } X if (font) X pf_close(font); X font = pf_open(f); X if (f != font_name) X free(f); X } X } X if (font == 0) { X font_name[0] = 0; X font = pf_default(); X } X make_label = (int) panel_get(toggle_item, PANEL_TOGGLE_VALUE, LABEL); X square = (int) panel_get(toggle_item, PANEL_TOGGLE_VALUE, SQUARE); X reverse = (int) panel_get(toggle_item, PANEL_TOGGLE_VALUE, REVERSE); X cursor = (Cursor) window_get(canvas, WIN_CURSOR); X cursor_set(cursor, X CURSOR_OP, reverse ? PIX_SRC^PIX_DST : PIX_SRC|PIX_DST, X 0); X window_set(canvas, WIN_CURSOR, cursor, 0); X redraw(); X} X Xvoid dump() X{ X window_set(dump_frame, WIN_SHOW, TRUE, 0); X} X Xvoid dump_done() X{ X char *file; X int width, height; X register int x, y; X register char *s; X register short *p; X FILE *f; X X /* we use the fact that the canvas is retained */ X file = (char *) panel_get_value(dump_file_item); X if (file != 0 && *file != 0 && (f = fopen(file, "w")) != 0) { X width = (int) window_get(canvas, CANVAS_WIDTH); X height = (int) window_get(canvas, CANVAS_HEIGHT); X switch ((int) panel_get_value(dump_format)) { X case FORMAT_RASTER: X pr_dump(pw->pw_prretained, f, (colormap_t *) 0, X RT_STANDARD, 0); X break; X case FORMAT_ICON: X p = mpr_d(pw->pw_prretained)->md_image; X fprintf(f, "\ X/* Format_version=1, Width=%d, Height=%d, Depth=1, Valid_bits_per_item=16\n\ X */\n", (width+15) & ~15, height); X for (y = 0; y < height; y++) { X s = "\t"; X for (x = 0; x < width; x += 16) { X fprintf(f, "%s0x%04x,", s, *p & 0xFFFF); X p++; X s = ""; X } X fprintf(f, "\n"); X } X break; X } X fclose(f); X } X window_set(dump_frame, WIN_SHOW, FALSE, 0); X} X Xvoid fit_screen() X{ X register int w, h; X X w = hor_size + (int) scrollbar_get((Scrollbar) window_get(canvas, WIN_VERTICAL_SCROLLBAR), SCROLL_THICKNESS); X h = ver_size + (int) scrollbar_get((Scrollbar) window_get(canvas, WIN_HORIZONTAL_SCROLLBAR), SCROLL_THICKNESS); X window_set(canvas, WIN_WIDTH, w, WIN_HEIGHT, h, 0); X window_set(canvas, CANVAS_WIDTH, hor_size, CANVAS_HEIGHT, ver_size, 0); X window_set(panel, WIN_WIDTH, w, 0); X window_fit(frame); X} X X/* X * initialization X */ X Xvoid dump_init() X{ X register Pixrect *pr; X X dump_frame = window_create(frame, FRAME, X FRAME_DONE_PROC, dump_done, X 0); X dump_panel = window_create(dump_frame, PANEL, 0); X pr = panel_button_image(dump_panel, "Done", 0, (Pixfont *) 0); X (void) panel_create_item(dump_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, pr, X PANEL_NOTIFY_PROC, dump_done, X 0); X /* order of strings is important (see definitions of FORMAT_*) */ X dump_format = panel_create_item(dump_panel, PANEL_CYCLE, X PANEL_LABEL_STRING, "Dump format:", X PANEL_CHOICE_STRINGS, "Rasterfile format", X "Icon format", X (char *) 0, X 0); X dump_file_item = panel_create_item(dump_panel, PANEL_TEXT, X PANEL_LABEL_X, ATTR_COL(0), X PANEL_LABEL_Y, ATTR_ROW(1), X PANEL_VALUE_DISPLAY_LENGTH, 25, X PANEL_LABEL_STRING, "Dump to file:", X 0); X window_fit(dump_panel); X window_fit(dump_frame); X} X Xvoid options_init() X{ X register Pixrect *pr; X X options_frame = window_create(frame, FRAME, X FRAME_DONE_PROC, options_done, X 0); X options_panel = window_create(options_frame, PANEL, 0); X X pr = panel_button_image(options_panel, "Done", 0, (Pixfont *) 0); X (void) panel_create_item(options_panel, PANEL_BUTTON, X PANEL_LABEL_IMAGE, pr, X PANEL_NOTIFY_PROC, options_done, X 0); X pr = panel_button_image(options_panel, "Rotate", 0, (Pixfont*) 0); X (void) panel_create_item(options_panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, turn, X PANEL_LABEL_IMAGE, pr, X 0); X pr = panel_button_image(options_panel, "X Mirror", 0, (Pixfont*) 0); X (void) panel_create_item(options_panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, mirrorx, X PANEL_LABEL_IMAGE, pr, X 0); X pr = panel_button_image(options_panel, "Y Mirror", 0, (Pixfont*) 0); X (void) panel_create_item(options_panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, mirrory, X PANEL_LABEL_IMAGE, pr, X 0); X toggle_item = panel_create_item(options_panel, PANEL_TOGGLE, X PANEL_LAYOUT, PANEL_HORIZONTAL, X PANEL_CHOICE_STRINGS, "Label", X "Square", X "Reverse", X (char *) 0, X PANEL_TOGGLE_VALUE, LABEL, make_label, X PANEL_TOGGLE_VALUE, SQUARE, square, X PANEL_TOGGLE_VALUE, REVERSE, reverse, X PANEL_NOTIFY_PROC, toggle_proc, X 0); X font_item = panel_create_item(options_panel, PANEL_TEXT, X PANEL_VALUE_DISPLAY_LENGTH, 51, X PANEL_VALUE_STORED_LENGTH, MAX_NAME_LENGTH, X PANEL_LABEL_STRING, "Font name:", X PANEL_VALUE, font_name, X 0); X hor_size_item = panel_create_item(options_panel, PANEL_SLIDER, X PANEL_LABEL_STRING, "Horizontal size: ", X PANEL_VALUE, hor_size, X PANEL_MIN_VALUE, 64, X PANEL_MAX_VALUE, 2048, X PANEL_SLIDER_WIDTH, 200, X 0); X ver_size_item = panel_create_item(options_panel, PANEL_SLIDER, X PANEL_LABEL_STRING, "Vertical size: ", X PANEL_VALUE, ver_size, X PANEL_MIN_VALUE, 64, X PANEL_MAX_VALUE, 2048, X PANEL_SLIDER_WIDTH, 200, X 0); X window_fit(options_panel); X window_fit(options_frame); X if (square) { X panel_set(ver_size_item, X PANEL_SHOW_ITEM, FALSE, X 0); X panel_set(hor_size_item, X PANEL_LABEL_STRING, "Canvas size: ", X 0); X } X} X Xvoid panel_init() X{ X register Pixrect *pr; X X panel = window_create(frame, PANEL, 0); X pr = panel_button_image(panel, "Next Page", 0, (Pixfont *) 0); X next_page_item = panel_create_item(panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, nextpage, X PANEL_LABEL_IMAGE, pr, X 0); X pr = panel_button_image(panel, "Redraw", 0, (Pixfont *) 0); X (void) panel_create_item(panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, redraw, X PANEL_LABEL_IMAGE, pr, X 0); X pr = panel_button_image(panel, "Zoom", 0, (Pixfont *) 0); X (void) panel_create_item(panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, zoom, X PANEL_LABEL_IMAGE, pr, X 0); X pr = panel_button_image(panel, "Options", 0, (Pixfont *) 0); X (void) panel_create_item(panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, options, X PANEL_LABEL_IMAGE, pr, X 0); X pr = panel_button_image(panel, "Dump", 0, (Pixfont *) 0); X (void) panel_create_item(panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, dump, X PANEL_LABEL_IMAGE, pr, X 0); X pr = panel_button_image(panel, "Fit Screen", 0, (Pixfont *) 0); X (void) panel_create_item(panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, fit_screen, X PANEL_LABEL_IMAGE, pr, X 0); X pr = panel_button_image(panel, "Quit", 0, (Pixfont *) 0); X (void) panel_create_item(panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, quit, X PANEL_LABEL_IMAGE, pr, X 0); X window_fit_height(panel); X} X Xcanvas_init() X{ X canvas = window_create(frame, CANVAS, X CANVAS_AUTO_SHRINK, FALSE, X CANVAS_WIDTH, hor_size, X CANVAS_HEIGHT, ver_size, X CANVAS_RETAINED, TRUE, X WIN_VERTICAL_SCROLLBAR, scrollbar_create(0), X WIN_HORIZONTAL_SCROLLBAR, scrollbar_create(0), X 0); X pw = canvas_pixwin(canvas); X} X Xmain(argc, argv) Xchar **argv; X{ X initplot(); X X hor_size = ver_size = INIT_CANVAS_SIZE; X frame = window_create(NULL, FRAME, X FRAME_LABEL, "Sunplot", X FRAME_SUBWINDOWS_ADJUSTABLE, FALSE, X FRAME_ICON, icon_create(ICON_IMAGE, &sunplot_icon, 0), X FRAME_ARGC_PTR_ARGV, &argc, argv, X 0); X while (argc > 1 && argv[1][0] == '-') { X switch (argv[1][1]) { X case 'c': X if (argv[1][2]) X hor_size = atoi(&argv[1][2]); X else if (argc > 2) { X hor_size = atoi(argv[2]); X argv[1] = argv[0]; X argv++; X argc--; X } X if (hor_size < 64) X hor_size = 64; X ver_size = hor_size; X square = TRUE; X break; X case 'h': X if (argv[1][2]) X hor_size = atoi(&argv[1][2]); X else if (argc > 2) { X hor_size = atoi(argv[2]); X argv[1] = argv[0]; X argv++; X argc--; X } X if (hor_size < 64) X hor_size = 64; X square = FALSE; X break; X case 'v': X if (argv[1][2]) X ver_size = atoi(&argv[1][2]); X else if (argc > 2) { X ver_size = atoi(argv[2]); X argv[1] = argv[0]; X argv++; X argc--; X } X if (ver_size < 64) X ver_size = 64; X square = FALSE; X break; X case 'l': X make_label = !make_label; X break; X case 's': X square = !square; X break; X case 'r': X turn(); X break; X case 'x': X mirrorx(); X break; X case 'y': X mirrory(); X break; X case 'f': X if (argv[1][2]) X strcpy(font_name, &argv[1][2]); X else if (argc > 2) { X strcpy(font_name, argv[2]); X argv[1] = argv[0]; X argv++; X argc--; X } X break; X } X argc--; X argv[1] = argv[0]; X argv++; X } X dump_init(); X options_init(); X panel_init(); X canvas_init(); X if (font_name[0]) { X register char *f = font_name; X X if (*f != '/') { X f = malloc(strlen(font_dir)+strlen(font_name)+1); X strcpy(f, font_dir); X strcat(f, font_name); X } X font = pf_open(f); X if (f != font_name) X free(f); X } X if (font == 0) { X font = pf_default(); X font_name[0] = 0; X } X X fit_screen(); X X notify_set_input_func(me, input_reader, fileno(stdin)); X X window_main_loop(frame); X X exit(0); X} SHAR_EOF $TOUCH -am 1225041788 libplot/sun/sunplot.c && chmod 0644 libplot/sun/sunplot.c || echo "restore of libplot/sun/sunplot.c failed" set `wc -c libplot/sun/sunplot.c`;Wc_c=$1 if test "$Wc_c" != "19634"; then echo original size 19634, current size $Wc_c fi # ============= libplot/sun/sunplot.icon ============== echo "x - extracting libplot/sun/sunplot.icon (Text)" sed 's/^X//' << 'SHAR_EOF' > libplot/sun/sunplot.icon && X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16 X */ X 0x0000,0x0000,0x0000,0x0400,0x0000,0x0000,0x0000,0x0400, X 0x0000,0x0000,0x0000,0x0800,0x0000,0x0000,0x0000,0x0800, X 0x0000,0x0000,0x0000,0x1000,0x0000,0x0000,0x7FF0,0x1000, X 0x0000,0x0007,0x800F,0x1000,0x0000,0x0038,0x0000,0xE000, X 0x0000,0x00C0,0x0000,0x3800,0x2000,0x0300,0x0000,0x4600, X 0x1800,0x0400,0x0000,0x4100,0x07FF,0x0800,0x0000,0x8080, X 0x03FF,0xFFFC,0x0000,0x8060,0x01C1,0xFFFF,0xFFF0,0x8010, X 0x00E0,0x8037,0xFFFF,0xF008,0x0071,0x0030,0x001F,0xFE04, X 0x003A,0x0030,0x0002,0x0002,0x001E,0x0060,0x0002,0x0002, X 0x000F,0x0060,0x0002,0x0001,0x000F,0x8060,0x0004,0x0000, X 0x0011,0xC0C0,0x0004,0x0000,0x0010,0xE0C0,0x0008,0x0000, X 0x0020,0x7180,0x0008,0x0000,0x0020,0x3B80,0x0008,0x0000, X 0x0040,0x1F00,0x0010,0x0000,0x0040,0x0E00,0x0010,0x0000, X 0x0040,0x1F80,0x0020,0x0000,0x0080,0x3BC0,0x0020,0x0000, X 0x0080,0x70E0,0x0040,0x0000,0x0081,0xE070,0x0040,0x0000, X 0x0081,0xC038,0x0040,0x0000,0x0100,0x001C,0x0080,0x0000, X 0x0100,0x000E,0x0080,0x0000,0x0100,0x0007,0x0100,0x0000, X 0x0100,0x0003,0x8100,0x0000,0x0100,0x0001,0xE100,0x0000, X 0x0100,0x0000,0xF200,0x0000,0x0100,0x0000,0x3A00,0x0000, X 0x0100,0x0000,0x1C00,0x0000,0x0100,0x0000,0x0E00,0x0000, X 0x0100,0x0000,0x0F00,0x0000,0x0100,0x0000,0x0B80,0x0000, X 0x0080,0x0000,0x0980,0x0000,0x0080,0x0000,0x1040,0x0000, X 0x0080,0x0000,0x1020,0x0000,0x0080,0x0000,0x2000,0x0000, X 0x0040,0x0000,0x2000,0x0000,0x0040,0x0000,0x2000,0x0000, X 0x0FFF,0xFFFF,0xFFFF,0xFFE0,0x0924,0x9249,0x2492,0x4920, X 0x0924,0x9249,0x2492,0x4920,0x0924,0x9249,0x2492,0x4920, X 0x0800,0x0000,0x0000,0x0020,0x0800,0x0000,0x0000,0x0020, X 0x0800,0x0000,0x0000,0x0021,0x0800,0x0000,0x0000,0x0022, X 0x0800,0x0000,0x0000,0x0022,0x0800,0x0000,0x0000,0x0024, X 0x0FFF,0xFFFF,0xFFFF,0xFFE8,0x0000,0x4004,0x0000,0x0010, X 0x0000,0x3008,0x0000,0x0060,0x0000,0x0808,0x0000,0x0080, X 0x0000,0x0410,0x0000,0x0100,0x0000,0x0310,0x0000,0x0600 SHAR_EOF $TOUCH -am 1225041788 libplot/sun/sunplot.icon && chmod 0644 libplot/sun/sunplot.icon || echo "restore of libplot/sun/sunplot.icon failed" set `wc -c libplot/sun/sunplot.icon`;Wc_c=$1 if test "$Wc_c" != "1933"; then echo original size 1933, current size $Wc_c fi # ============= libplot/cgi/CGI.h ============== if test ! -d 'libplot/cgi'; then echo "x - creating directory libplot/cgi" mkdir 'libplot/cgi' fi echo "x - extracting libplot/cgi/CGI.h (Text)" sed 's/^X//' << 'SHAR_EOF' > libplot/cgi/CGI.h && X Xtypedef struct X{ X int x1, y1, x2, y2; X int c; /* || ascii code || strlen */ X char *str; /* String */ X} herc_args; SHAR_EOF $TOUCH -am 0511125390 libplot/cgi/CGI.h && chmod 0666 libplot/cgi/CGI.h || echo "restore of libplot/cgi/CGI.h failed" set `wc -c libplot/cgi/CGI.h`;Wc_c=$1 if test "$Wc_c" != "119"; then echo original size 119, current size $Wc_c fi # ============= libplot/cgi/CGI.mk ============== echo "x - extracting libplot/cgi/CGI.mk (Text)" sed 's/^X//' << 'SHAR_EOF' > libplot/cgi/CGI.mk && X# SCCS: @(#)tCGI.mk 5.1 X XOWN= bin #file owner XGRP= bin #file group XPROT= 664 #protections X XINSDIR = /usr/lib/386 XTESTDIR = . X# c compile flags and system libraries to link with X# DEBUG can be defined on the make command line e.g.: X# $ make -DDEBUG=-Zi X XCFLAGS = -O $(DEBUG) XLINK_LIBS = -lx -lm -lccgi XSOURCE = libCGI.c cgistart.c cgistuff.c gtexttests.c XOFILES = libCGI.o cgistart.o cgistuff.o gtexttests.o XMAKE = make X Xall: $(SOURCE) X cc $(CFLAGS) $(MODEL) -c $(SOURCE) X : X XlibCGI.a: $(OFILES) X chmod $(PROT) $(OFILES) X chgrp $(GRP) $(OFILES) X chown $(OWN) $(OFILES) X -rm libCGI.a X ar r $(TESTDIR)/libCGI.a $(OFILES) X ranlib libCGI.a X @echo "Done building $(libCGI.a)" X X Xinstall: all save move X Xclean: X -rm -f $(OFILES) X Xclobber: clean X -rm -f $(TESTDIR)/libCGI.a X Xdelete: clobber X rm -f $(SOURCE) X Xmove: X -rm -f $(INSDIR)/SlibCGI.a X cp $(TESTDIR)/libCGI.a $(INSDIR)/SlibCGI.a X chmod $(PROT) $(INSDIR)/SlibCGI.a X chmod -x $(INSDIR)/SlibCGI.a # not executable X chgrp $(GRP) $(INSDIR)/SlibCGI.a X chown $(OWN) $(INSDIR)/SlibCGI.a X Xsave: X -if test -f $(INSDIR)/SlibCGI.a ; \ X then \ X rm -f $(INSDIR)/OLDlibCGI.a ; \ X cp $(INSDIR)/SlibCGI.a $(INSDIR)/OLDlibCGI.a ; \ X chmod $(PROT) $(INSDIR)/OLDlibCGI.a ; \ X chmod -x $(INSDIR)/OLDlibCGI.a ; \ X chgrp $(GRP) $(INSDIR)/OLDlibCGI.a ; \ X chown $(OWN) $(INSDIR)/OLDlibCGI.a ; \ X fi X X X SHAR_EOF $TOUCH -am 1014212290 libplot/cgi/CGI.mk && chmod 0666 libplot/cgi/CGI.mk || echo "restore of libplot/cgi/CGI.mk failed" set `wc -c libplot/cgi/CGI.mk`;Wc_c=$1 if test "$Wc_c" != "1343"; then echo original size 1343, current size $Wc_c fi echo "End of part 6, continue with part 7" exit 0 -- UUCP: ..!uunet!mcsun!hp4nl!integow!hot or hot@integow.UUCP or hot@hot.mug Roland van Hout, Sr. software engineer, Integrity software consultants, Pelmolenlaan 16, 3447 GW Woerden, Netherlands, tel +31 3480-30131, fax +31 3480-30182