home *** CD-ROM | disk | FTP | other *** search
- From: richb@sunaus.sun.oz.AU (Rich Burridge)
- Newsgroups: comp.sources.misc
- Subject: v09i049: popi, The Digital Darkroom, Part03/09
- Message-ID: <2783@basser.oz>
- Date: 12 Dec 89 23:46:03 GMT
- Approved: john@cs.su.oz.AU (John Mackin - comp.sources.misc)
-
- Posting-number: Volume 9, Issue 49
- Submitted-by: Rich Burridge <richb@sunaus.sun.oz.AU>
- Archive-name: popi/part03
-
- ---- Cut Here and unpack ----
- #!/bin/sh
- # this is part 3 of a multipart archive
- # do not concatenate these parts, unpack them in order with /bin/sh
- # file mgr.c continued
- #
- CurArch=3
- if test ! -r s2_seq_.tmp
- then echo "Please unpack part 1 first!"
- exit 1; fi
- ( read Scheck
- if test "$Scheck" != $CurArch
- then echo "Please unpack part $Scheck next!"
- exit 1;
- else exit 0; fi
- ) < s2_seq_.tmp || exit 1
- echo "x - Continuing file mgr.c"
- sed 's/^X//' << 'Funky_Stuff' >> mgr.c
- X m_bitwrite(x, y, width, height) ;
- X}
- X
- X
- Xdrawline(x1, y1, x2, y2)
- Xint x1, y1, x2, y2 ;
- X{
- X m_func(B_COPY) ;
- X m_line(x1, y1, x2, y2) ;
- X}
- X
- X
- Xdrawtext(x, y, fontno, str)
- Xenum font_type fontno ;
- Xint x, y ;
- Xchar *str ;
- X{
- X if (fontno == NFONT) m_font(N_FONT) ;
- X else if (fontno == BFONT) m_font(B_FONT) ;
- X m_func(B_XOR) ;
- X if (str[strlen(str)-1] == '\n') str[strlen(str)-1] = '\0' ;
- X m_stringto(0, x, y+4, str) ;
- X m_movecursor(2500, 2500) ;
- X}
- X
- X
- Xget_next_char(c) /* Process events, and return when character typed. */
- Xchar *c ;
- X{
- X int chr ;
- X static struct timeval tval = { 0, 0 } ;
- X
- X m_flush() ;
- X for (;;)
- X {
- X readmask = fullmask ;
- X#ifdef NO_43SELECT
- X SELECT(32, &readmask, 0, 0, &tval) ;
- X if (readmask && (1 << mgr_infd))
- X#else
- X SELECT(FD_SETSIZE, &readmask, (fd_set *) 0, (fd_set *) 0, &tval) ;
- X if (FD_ISSET(mgr_infd, &readmask))
- X#endif /* NO_4.3SELECT */
- X {
- X if ((chr = m_getchar()) == EOF)
- X {
- X clearerr(m_termin) ;
- X continue ;
- X }
- X switch (chr)
- X {
- X case '\032' :
- X case '\033' : close_frame() ; /* Turn window iconic. */
- X break ;
- X case '\034' : clean(1) ; /* Window destroyed. */
- X case '\035' : if (iconic) iconic = 0 ;
- X case '\036' : reshape(OPEN) ;
- X case '\037' : paint_canvas() ; /* Repaint popi canvas. */
- X break ;
- X default : *c = chr ;
- X return ;
- X }
- X }
- X }
- X}
- X
- X
- Xinit_fonts()
- X{
- X char path[MAXLINE] ; /* Directory path for font files. */
- X
- X#ifdef MGRHOME
- X STRCPY(path, MGRHOME) ;
- X#else
- X STRCPY(path, "/usr/mgr") ;
- X#endif
- X
- X SPRINTF(fontname, "%s/font/%s", path, NORMAL_FONT) ;
- X m_loadfont(NFONT, fontname) ;
- X nfont_width = 7 ;
- X
- X SPRINTF(fontname, "%s/font/%s", path, BOLD_FONT) ;
- X m_loadfont(BFONT, fontname) ;
- X}
- X
- X
- Xinit_ws_type()
- X{
- X m_setup(M_FLUSH) ; /* Setup I/O; turn on flushing. */
- X m_push(P_BITMAP | P_MENU | P_EVENT | P_FONT | P_FLAGS | P_POSITION) ;
- X mgr_infd = fileno(m_termin) ;
- X mgr_outfd = fileno(m_termout) ;
- X
- X SIGNAL(SIGHUP, clean) ;
- X SIGNAL(SIGINT, clean) ;
- X SIGNAL(SIGTERM, clean) ;
- X m_ttyset() ;
- X m_setraw() ;
- X m_setmode(M_NOWRAP) ;
- X m_setmode(M_ABS) ;
- X m_setmode(ACTIVATE) ;
- X m_clearmode(M_NOINPUT) ;
- X m_func(B_COPY) ;
- X
- X mptr = (unsigned char *) malloc((unsigned) Xsize) ;
- X ops[(int) GCLR] = B_CLEAR ;
- X ops[(int) GSET] = B_SET ;
- X return 0 ;
- X}
- X
- X
- Xload_colors() /* Hardwired to a monochrome version. */
- X{
- X iscolor = 0 ;
- X}
- X
- X
- Xload_icon(pixrect, ibuf)
- Xint pixrect ;
- Xshort ibuf[256] ;
- X{
- X int size ;
- X
- X IOCTL(mgr_outfd, TIOCLGET, &local_mode) ;
- X local_mode |= LLITOUT ;
- X IOCTL(mgr_outfd, TIOCLSET, &local_mode) ;
- X
- X size = ICONHEIGHT * (((64 + 15) &~ 15) >> 3) ;
- X m_bitldto(ICONWIDTH, ICONHEIGHT, 0, 0, pixrect, size) ;
- X m_flush() ;
- X WRITE(mgr_outfd, (char *) ibuf, size) ;
- X
- X local_mode &= ~LLITOUT ;
- X IOCTL(mgr_outfd, TIOCLSET, &local_mode) ;
- X}
- X
- X
- Xmake_items(argc, argv) /* Create icon, frame, canvas etc.. */
- Xint argc ;
- Xchar *argv[] ;
- X{
- X
- X#ifdef NO_43SELECT
- X fullmask = 1 << mgr_infd ;
- X#else
- X FD_ZERO(&fullmask) ;
- X FD_SET(mgr_infd, &fullmask) ;
- X#endif /* NO_4.3SELECT */
- X
- X m_setevent(BUTTON_2U, "\032") ; /* Middle mouse button released. */
- X m_setevent(BUTTON_1U, "\033") ; /* Right mouse button released. */
- X m_setevent(DESTROY, "\034") ; /* Window has been destroyed. */
- X m_setevent(ACTIVATE, "\035") ; /* Window has been activated. */
- X m_setevent(RESHAPE, "\036") ; /* Check for window being reshaped. */
- X m_setevent(REDRAW, "\037") ; /* Check for window being redrawn. */
- X
- X m_movecursor(2500, 2500) ; /* Move character cursor offscreen. */
- X m_font(N_FONT) ; /* Default is the normal font. */
- X load_icon(PR_ICON, icon_image) ;
- X reshape(OPEN) ;
- X m_clear() ; /* Clear popi window. */
- X load_colors() ; /* Hardwired to monochrome. */
- X}
- X
- X
- Xreshape(type)
- Xint type ;
- X{
- X int x, y, w, h ; /* Position and size of calctool window. */
- X
- X get_size(&x, &y, &w, &h) ;
- X switch (type)
- X {
- X case ICONIC : m_shapewindow(x, y, ICONWIDTH+10, ICONHEIGHT+10) ;
- X m_clear() ;
- X m_bitcopyto(0, 0, ICONWIDTH, ICONHEIGHT,
- X 0, 0, 0, PR_ICON) ;
- X break ;
- X case OPEN : m_shapewindow(x, y, TWIDTH+10, THEIGHT+10) ;
- X }
- X m_movecursor(2500, 2500) ;
- X}
- X
- X
- X/*ARGUSED*/
- Xset_cursor(type) /* Doesn't appear to be any way to set the cursor. */
- Xenum cur_type type ;
- X{
- X}
- X
- X
- Xstart_tool() /* Null routine. */
- X{
- X}
- Funky_Stuff
- echo "File mgr.c is complete"
- chmod 0444 mgr.c || echo "restore of mgr.c fails"
- set `wc -c mgr.c`;Sum=$1
- if test "$Sum" != "7681"
- then echo original size 7681, current size $Sum;fi
- echo "x - extracting graphics.h (Text)"
- sed 's/^X//' << 'Funky_Stuff' > graphics.h &&
- X
- X/* @(#)graphics.h 1.1 89/12/12
- X *
- X * External variable definitions used by the popi program
- X * optional graphics module.
- X *
- X * Popi was originally written by Gerard J. Holzmann - AT&T Bell Labs.
- X * This version is based on the code in his Prentice Hall book,
- X * "Beyond Photography - the digital darkroom," ISBN 0-13-074410-7,
- X * which is copyright (c) 1988 by Bell Telephone Laboratories, Inc.
- X *
- X * Permission is given to distribute these extensions, as long as these
- X * introductory messages are not removed, and no monies are exchanged.
- X *
- X * No responsibility is taken for any errors or inaccuracies inherent
- X * either to the comments or the code of this program, but if reported
- X * (see README file) then an attempt will be made to fix them.
- X */
- X
- X/* External declarations for the variables declared in graphics.c. */
- X
- Xextern char geometry[] ; /* X11 geometry information. */
- Xextern char nextline[] ; /* Next input line to be parsed. */
- Xextern char x11_display[] ; /* X11 display information. */
- X
- Xextern unsigned char *mptr ; /* Pointer to scanline data. */
- X
- Xextern int iconic ; /* Set if the window is in an iconic state. */
- Xextern int iscolor ; /* Set if this is a color screen. */
- Xextern int ix ; /* Initial X position of the icon. */
- Xextern int iy ; /* Initial Y position of the icon. */
- Xextern int nfont_width ; /* Width of normal font characters. */
- Xextern int ops[] ; /* Rasterop functions. */
- Xextern int posspec ; /* Set if -Wp or -g option is present (for X11) */
- Xextern int tptr ; /* Input buffer pointer. */
- X
- Xextern int wx ; /* Initial X position of the open window. */
- Xextern int wy ; /* Initial Y position of the open window. */
- Funky_Stuff
- chmod 0444 graphics.h || echo "restore of graphics.h fails"
- set `wc -c graphics.h`;Sum=$1
- if test "$Sum" != "1762"
- then echo original size 1762, current size $Sum;fi
- echo "x - extracting news.c (Text)"
- sed 's/^X//' << 'Funky_Stuff' > news.c &&
- X/*LINTLIBRARY*/
- X
- X/* @(#)news.c 1.8 89/12/11
- X *
- X * C wrappers for News dependent graphics routines used by popi.
- X * written by Rich Burridge - Sun Microsystems Australia.
- X *
- X * Popi was originally written by Gerard J. Holzmann - AT&T Bell Labs.
- X * This version is based on the code in his Prentice Hall book,
- X * "Beyond Photography - the digital darkroom," ISBN 0-13-074410-7,
- X * which is copyright (c) 1988 by Bell Telephone Laboratories, Inc.
- X *
- X * Permission is given to distribute these extensions, as long as these
- X * introductory messages are not removed, and no monies are exchanged.
- X *
- X * No responsibility is taken for any errors or inaccuracies inherent
- X * either to the comments or the code of this program, but if reported
- X * (see README file) then an attempt will be made to fix them.
- X */
- X
- X#include "popi.h"
- X#include "graphics.h"
- X#include <sys/types.h>
- X
- X/* Various pseudo events generated by the popi program. */
- X#define KEYBOARD 100 /* Keyboard character was pressed. */
- X#define REPAINT 101 /* Popi canvas needs repainting. */
- X
- Xextern FILE *PostScript ;
- Xextern FILE *PostScriptInput ;
- X
- Xunsigned short icon_image[] = {
- X#include "popi.icon"
- X} ;
- X
- X
- Xcleanup() /* Null routine for the NeWS version. */
- X{
- X FPRINTF(PostScript, "/destroy Frame send\n") ;
- X FFLUSH(PostScript) ;
- X}
- X
- X
- Xdraw_scanline(line, y) /* Display image scanline on the screen. */
- Xunsigned char *line ;
- Xint y ;
- X{
- X int depth, i ;
- X
- X depth = (iscolor) ? 8 : 1 ;
- X FPRINTF(PostScript, "/ScanLine %1d 1 %1d { } { < \n", Xsize, depth) ;
- X if (iscolor)
- X {
- X for (i = 0; i < Xsize; i++)
- X FPRINTF(PostScript, "%.2X ", line[i]) ;
- X }
- X else
- X {
- X mptr = (unsigned char *) Emalloc((Xsize / 8) + 1) ;
- X halftone(line, y) ;
- X for (i = 0; i < (Xsize / 8) + 1; i++)
- X FPRINTF(PostScript, "%.2X ", 255 - mptr[i]) ;
- X }
- X FPRINTF(PostScript, "> } buildimage def\n") ;
- X FPRINTF(PostScript, "%1d PSDrawScanLine\n", y) ;
- X FFLUSH(PostScript) ;
- X}
- X
- X
- Xdrawarea(x, y, width, height, op)
- Xint x, y, width, height ;
- Xenum op_type op ;
- X{
- X FPRINTF(PostScript, "%d %d %d %d %d PSDrawArea\n",
- X x, y, width, height, (int) op) ;
- X FFLUSH(PostScript) ;
- X}
- X
- X
- Xdrawline(x1, y1, x2, y2)
- Xint x1, y1, x2, y2 ;
- X{
- X FPRINTF(PostScript, "%d %d %d %d PSDrawLine\n", x1, y1, x2, y2) ;
- X}
- X
- X
- Xdrawtext(x, y, fontno, str)
- Xenum font_type fontno ;
- Xint x, y ;
- Xchar *str ;
- X{
- X int i ;
- X char font, fonttype[6], line[MAXLINE] ;
- X
- X if (fontno == NFONT) STRCPY(fonttype, "NFont") ;
- X else if (fontno == BFONT) STRCPY(fonttype, "BFont") ;
- X line[0] = '\0' ;
- X for (i = 0; i < strlen(str); i++)
- X switch (str[i])
- X {
- X case '\\' : STRCAT(line,"\\\\") ;
- X break ;
- X case '(' : STRCAT(line,"\\(") ;
- X break ;
- X case ')' : STRCAT(line,"\\)") ;
- X break ;
- X default : STRNCAT(line, &str[i], 1) ;
- X }
- X FPRINTF(PostScript, "%s %d %d (%s) PSDrawText\n", fonttype, x, y, line) ;
- X}
- X
- X
- Xget_next_char(c) /* Process events, and return when character is typed. */
- Xchar *c ;
- X{
- X int ch, type ;
- X
- X for (;;)
- X {
- X FFLUSH(PostScript) ;
- X if (pscanf(PostScriptInput, "%d", &type) == EOF) exit(0) ;
- X switch (type)
- X {
- X case KEYBOARD : pscanf(PostScriptInput, "%d", &ch) ;
- X *c = ch ;
- X return ;
- X case REPAINT : paint_canvas() ;
- X }
- X }
- X/*NOTREACHED*/
- X}
- X
- X
- Xinit_fonts()
- X{
- X FPRINTF(PostScript, "PSInitFonts\n") ;
- X nfont_width = 9 ;
- X}
- X
- X
- Xinit_ws_type()
- X{
- X if (ps_open_PostScript() < 0) return -1 ;
- X if (send_ps_file(NEWSFILE) == -1)
- X {
- X FCLOSE(PostScript) ;
- X return(-1) ;
- X }
- X FFLUSH(PostScript) ;
- X if (ferror(PostScript))
- X {
- X FCLOSE(PostScript) ;
- X return(-1) ;
- X }
- X FPRINTF(PostScript, "PSIsColor\n") ;
- X pscanf(PostScriptInput, "%d", &iscolor) ;
- X FPRINTF(PostScript, "PSInitialise\n") ;
- X return(0) ;
- X}
- X
- X
- Xload_colors() /* Create and load popi color map. */
- X{
- X int i ;
- X u_char red[CMAPLEN], green[CMAPLEN], blue[CMAPLEN] ;
- X
- X for (i = 0; i < CMAPLEN; i++)
- X red[i] = green[i] = blue[i] = 255 - i ;
- X
- X FPRINTF(PostScript, "%d PSMakeColorTable\n", 256) ;
- X for (i = 0; i < 256; i++)
- X FPRINTF(PostScript, "%d %d %d %d PSLoadColor\n",
- X red[i], green[i], blue[i], i) ;
- X}
- X
- X
- Xmake_icon()
- X{
- X int i, j ;
- X
- X FPRINTF(PostScript,"/PopiIcon 64 64 1 { } { <\n") ;
- X for (i = 0; i < 32; i++)
- X {
- X for (j = 0; j < 8; j++) FPRINTF(PostScript,"%.4X ", icon_image[i*8+j]) ;
- X FPRINTF(PostScript,"\n") ;
- X }
- X FPRINTF(PostScript,"> } buildimage def\n") ;
- X}
- X
- X
- Xmake_items(argc, argv) /* Create icon, frame, canvas etc.. */
- Xint argc ;
- Xchar *argv[] ;
- X{
- X make_icon() ;
- X FPRINTF(PostScript, "%d %d %d %d %d %d %d PSMakeItems\n",
- X wx, wy, TWIDTH, THEIGHT,
- X ix, iy, iconic) ;
- X load_colors() ;
- X}
- X
- X
- Xsend_ps_file(fname)
- Xchar *fname ;
- X{
- X FILE *stream ;
- X int c ;
- X
- X if ((stream = fopen(fname,"r")) == NULL) return -1 ;
- X while ((c = getc(stream)) != EOF) PUTC(c, PostScript) ;
- X FCLOSE(stream) ;
- X return 0 ;
- X}
- X
- X
- Xset_cursor(type)
- Xenum cur_type type ;
- X{
- X FPRINTF(PostScript, "%d PSSetCursor\n", (int) type) ;
- X}
- X
- X
- Xstart_tool() /* Null routine in the NeWS version. */
- X{
- X}
- Funky_Stuff
- chmod 0444 news.c || echo "restore of news.c fails"
- set `wc -c news.c`;Sum=$1
- if test "$Sum" != "5267"
- then echo original size 5267, current size $Sum;fi
- echo "x - extracting nulldev.c (Text)"
- sed 's/^X//' << 'Funky_Stuff' > nulldev.c &&
- X/*LINTLIBRARY*/
- X
- X/* @(#)nulldev.c 1.7 89/12/11
- X *
- X * Popi device driver for a null device.
- X * written by Stephen Frede, Softway Pty Ltd.
- X *
- X * Popi was originally written by Gerard J. Holzmann - AT&T Bell Labs.
- X * This version is based on the code in his Prentice Hall book,
- X * "Beyond Photography - the digital darkroom," ISBN 0-13-074410-7,
- X * which is copyright (c) 1988 by Bell Telephone Laboratories, Inc.
- X *
- X * Permission is given to distribute these extensions, as long as these
- X * introductory messages are not removed, and no monies are exchanged.
- X *
- X * No responsibility is taken for any errors or inaccuracies inherent
- X * either to the comments or the code of this program, but if reported
- X * (see README file) then an attempt will be made to fix them.
- X */
- X
- X#include "popi.h"
- X
- X/* There are ten exportable routines used by the popi program.
- X *
- X * These are:
- X *
- X * disp_init(argc, argv) - called from main at the start.
- X * disp_finish() - called from main prior to exit.
- X * disp_imgstart() - called prior to drawing an image.
- X * disp_imgend() - called after drawing an image.
- X * disp_putline(line, y) - to draw an image scanline.
- X * disp_getchar() - to get the next character typed.
- X * disp_ungetc(c) - put back the last character typed.
- X * disp_prompt() - display popi prompt and clear input buffer.
- X * disp_error(errtype) - display error message.
- X * disp_percentdone(n) - display percentage value of conversion.
- X */
- X
- X/*ARGSUSED*/
- Xvoid
- Xdisp_init(argc,argv) /* called from main at the atart. */
- Xint argc;
- Xchar *argv[];
- X{
- X}
- X
- X
- Xvoid
- Xdisp_finish() /* called from main prior to exit. */
- X{
- X}
- X
- X
- Xvoid
- Xdisp_imgstart() /* called prior to drawing an image. */
- X{
- X}
- X
- X
- Xvoid
- Xdisp_imgend() /* called after drawing an image. */
- X{
- X}
- X
- X
- Xvoid
- Xdisp_putline(line, y) /* called to draw image scanline y. */
- Xpixel_t *line;
- Xint y;
- X{
- X}
- X
- X
- Xdisp_getchar() /* get next user typed character. */
- X{
- X return(getchar());
- X}
- X
- X
- X/*ARGSUSED*/
- Xvoid
- Xdisp_ungetc(c) /* put back the last character typed. */
- Xchar c;
- X{
- X UNGETC(c, stdin);
- X}
- X
- X
- Xdisp_prompt() /* display popi prompt. */
- X{
- X char *prompt = "-> ";
- X
- X PRINTF(prompt);
- X return sizeof prompt - 1;
- X}
- X
- X
- Xvoid
- Xdisp_error(errtype, pos) /* display error message. */
- Xint errtype,
- X pos;
- X{
- X extern int errno;
- X extern char *sys_errlist[];
- X
- X if (errtype & ERR_PARSE)
- X {
- X int i;
- X
- X for (i=1; i < pos; ++i)
- X PUTC('-', stderr);
- X PUTC('^', stderr);
- X PUTC('\n', stderr);
- X }
- X
- X FPRINTF(stderr, "%s\n", ErrBuf);
- X /* we assume errno hasn't been reset by the preceding output */
- X if (errtype & ERR_SYS)
- X FPRINTF(stderr, "\t(%s)\n", sys_errlist[errno]);
- X}
- X
- Xvoid
- Xdisp_percentdone(percent)
- Xint percent;
- X{
- X static int lastpercent = 100;
- X
- X if (!Verbose)
- X return;
- X if (percent == 100)
- X {
- X printf("\r \n");
- X return;
- X }
- X if (percent != lastpercent && percent % 5 == 0)
- X {
- X printf("\r%2d%% ", percent);
- X fflush(stdout);
- X lastpercent = percent;
- X }
- X}
- Funky_Stuff
- chmod 0444 nulldev.c || echo "restore of nulldev.c fails"
- set `wc -c nulldev.c`;Sum=$1
- if test "$Sum" != "3179"
- then echo original size 3179, current size $Sum;fi
- echo "x - extracting patchlevel.h (Text)"
- sed 's/^X//' << 'Funky_Stuff' > patchlevel.h &&
- X
- X/* @(#)patchlevel.h 1.11 89/12/11
- X *
- X * This is the current patchlevel for this version of popi.
- X *
- X * Popi was originally written by Gerard J. Holzmann - AT&T Bell Labs.
- X * This version is based on the code in his Prentice Hall book,
- X * "Beyond Photography - the digital darkroom," ISBN 0-13-074410-7,
- X * which is copyright (c) 1988 by Bell Telephone Laboratories, Inc.
- X *
- X * Permission is given to distribute these extensions, as long as these
- X * introductory messages are not removed, and no monies are exchanged.
- X *
- X * No responsibility is taken for any errors or inaccuracies inherent
- X * either to the comments or the code of this program, but if reported
- X * (see README file) then an attempt will be made to fix them.
- X */
- X
- X#define PATCHLEVEL 2
- Funky_Stuff
- chmod 0444 patchlevel.h || echo "restore of patchlevel.h fails"
- set `wc -c patchlevel.h`;Sum=$1
- if test "$Sum" != "764"
- then echo original size 764, current size $Sum;fi
- echo "x - extracting polar.c (Text)"
- sed 's/^X//' << 'Funky_Stuff' > polar.c &&
- X
- X/* @(#)polar.c 1.6 89/12/11
- X *
- X * Polar coordinate handling routines used by the popi program.
- X *
- X * Popi was originally written by Gerard J. Holzmann - AT&T Bell Labs.
- X * This version is based on the code in his Prentice Hall book,
- X * "Beyond Photography - the digital darkroom," ISBN 0-13-074410-7,
- X * which is copyright (c) 1988 by Bell Telephone Laboratories, Inc.
- X *
- X * Permission is given to distribute these extensions, as long as these
- X * introductory messages are not removed, and no monies are exchanged.
- X *
- X * No responsibility is taken for any errors or inaccuracies inherent
- X * either to the comments or the code of this program, but if reported
- X * (see README file) then an attempt will be made to fix them.
- X */
- X
- X#include <stdio.h>
- X#include "popi.h"
- X
- Xshort
- X *avals = 0,
- X *rvals = 0;
- X
- X/*
- X * +y
- X * ^
- X * 2 | 1
- X * -x <----+----> +x
- X * 3 | 4
- X * v
- X * -y
- X */
- X
- X#ifdef AMIGA
- Xdouble
- Xhypot(x, y)
- Xdouble x, y;
- X{
- X return(sqrt(x*x + y*y));
- X}
- X#endif /* AMIGA */
- X
- Xvoid
- XMakePolar()
- X{
- X short *ap, /* pointer to angle array */
- X *rp, /* pointer into radius array */
- X *a1, /* tmp pointer to angle array */
- X *r1; /* tmp pointer to radius array */
- X int x,
- X y,
- X xmin,
- X xmax,
- X ymin,
- X ymax;
- X
- X if (avals)
- X return; /* previously calculated */
- X
- X avals = (short *) LINT_CAST(Emalloc((unsigned)Xsize * Ysize * sizeof(short)));
- X rvals = (short *) LINT_CAST(Emalloc((unsigned)Xsize * Ysize * sizeof(short)));
- X
- X ymax = Ysize / 2;
- X ymin = -(Ysize - 1) / 2;
- X xmin = -Xsize / 2;
- X xmax = (Xsize - 1) / 2;
- X
- X rp = rvals;
- X ap = avals;
- X
- X for (y = ymax; y >= 0; --y)
- X {
- X /* Quadrant 2 */
- X for (x = xmin; x < 0; ++x)
- X {
- X *ap++ = (short) (RtoD(atan2((double) y, (double) x)) + 0.5);
- X *rp++ = (short) hypot((double) y, (double) x);
- X }
- X /* x == 0 */
- X if (y == 0)
- X {
- X *ap++ = 0; /* prevent a domain error calling atan2() */
- X *rp++ = 0;
- X }
- X else
- X {
- X *ap++ = (short) (RtoD(atan2((double) y, (double) x)) + 0.5);
- X *rp++ = (short) hypot((double) y, (double) x);
- X }
- X ++x;
- X /* remember location just before the 0 value */
- X r1 = rp -2;
- X a1 = ap - 2;
- X /* Quadrant 1 */
- X for (; x <= xmax; ++x)
- X {
- X *ap++ = 180 - *a1--;
- X *rp++ = *r1--;
- X }
- X }
- X r1 = rp - Xsize - 1;
- X a1 = ap - Xsize - 1;
- X for (; y >= ymin; --y)
- X {
- X /* Quadrant 3, 4 */
- X for (x = xmin; x <= xmax; ++x)
- X {
- X *rp++ = *r1--;
- X *ap++ = *a1-- + 180;
- X }
- X }
- X}
- Funky_Stuff
- chmod 0444 polar.c || echo "restore of polar.c fails"
- set `wc -c polar.c`;Sum=$1
- if test "$Sum" != "2418"
- then echo original size 2418, current size $Sum;fi
- echo "x - extracting popi.h (Text)"
- sed 's/^X//' << 'Funky_Stuff' > popi.h &&
- X/* @(#)popi.h 1.10 89/12/11
- X *
- X * Definitions and constants used by the popi program.
- X *
- X * Popi was originally written by Gerard J. Holzmann - AT&T Bell Labs.
- X * This version is based on the code in his Prentice Hall book,
- X * "Beyond Photography - the digital darkroom," ISBN 0-13-074410-7,
- X * which is copyright (c) 1988 by Bell Telephone Laboratories, Inc.
- X *
- X * Permission is given to distribute these extensions, as long as these
- X * introductory messages are not removed, and no monies are exchanged.
- X *
- X * No responsibility is taken for any errors or inaccuracies inherent
- X * either to the comments or the code of this program, but if reported
- X * (see README file) then an attempt will be made to fix them.
- X */
- X
- X#ifndef POPI_DEFINED
- X#define POPI_DEFINED
- X
- X#if defined(MSDOS) && defined(M_I86)
- X/* Assume we are Microsoft C */
- X# define __MSC__ 1
- X#endif /* MSC */
- X
- X/*
- X * Some compilers are near enough to ANSI for our purposes.
- X * In some situations the compiler has a true ANSI mode which
- X * we should set if possible. But sometimes we can't because
- X * we need non-standard features of the compiler (eg far pointers
- X * under DOS). We can't just set __STDC__ ourselves in these cases
- X * because their include files need to know the truth. So we
- X * set the token STDC which means that as far as we're concerned
- X * we are ANSI.
- X */
- X
- X#if defined(__STDC__) || defined(__TURBOC__) || defined(__MSC__)
- X# define STDC 1
- X#endif /* __STDC__ || __TURBOC__ || __MSC__ */
- X
- X#if defined(STDC) && ! defined(apollo)
- X
- X# include <stdlib.h>
- X
- X#else /* ! STDC || apollo */
- X
- X/* No <stdlib.h> */
- X/* We can't define these as well as including <stdlib.h> because
- X * some compilers (eg Turbo C) use silly nonstandard keywords (which
- X * we can't #define away) as part of the type.
- X */
- Xextern char
- X *malloc(),
- X *getenv(),
- X# ifdef BSD
- X *sprintf();
- X# endif /* BSD */
- X#endif /* STDC && !apollo */
- X
- X#if defined(STDC) || ! defined(BSD)
- X# include <string.h>
- X#else
- X# include <strings.h>
- X#endif /* STDC || ! BSD */
- X
- X/*
- X * For all function declarations, if ANSI then use a prototype.
- X */
- X#if defined(STDC)
- X# define P(args) args
- X#else /* ! STDC */
- X# define P(args) ()
- X#endif /* STDC */
- X
- X#ifndef FILE
- X# include <stdio.h>
- X#endif /* FILE */
- X#ifndef assert
- X# include <assert.h>
- X#endif /* assert */
- X
- X/*
- X * The assumption we make here is that not all versions of <math.h>
- X * define M_PI, but they all define HUGE.
- X */
- X#ifndef M_PI
- X# ifndef HUGE
- X# include <math.h>
- X# endif /* HUGE */
- X
- X# ifndef M_PI
- X# define M_PI 3.14159265358979323846
- X# endif /* M_PI */
- X#endif /* M_PI */
- Xextern double
- X pow P((double, double)),
- X sin P((double)),
- X cos P((double)),
- X atan2 P((double, double)),
- X hypot P((double, double)),
- X log P((double)),
- X sqrt P((double));
- X
- X#define NELS(arr) (sizeof (arr) / sizeof (*(arr)))
- X
- X#define DtoR(degrees) ((degrees) * M_PI * 2.0 / 360.0)
- X#define RtoD(radians) ((radians) / (M_PI * 2.0 / 360.0))
- X
- X#define BITSINBYTE 8
- X
- X/*
- X * define RANDOM to be an expression which returns a value
- X * between 0 and some large number (like maxint or maxlong).
- X */
- X#if defined(BSD)
- X# define RANDOM random()
- Xextern long random P((void));
- X#else /* ! BSD */
- X# if defined(SYSV)
- X# define RANDOM lrand48()
- Xextern long lrand48 P((void));
- X# else /* ! SYSV */
- X# define RANDOM rand()
- Xextern int rand P((void));
- X# endif /* SYSV */
- X#endif /* BSD */
- X
- Xtypedef long stack_t;
- Xtypedef long parse_t;
- Xtypedef unsigned char pixel_t;
- Xtypedef int bool;
- X
- X#ifndef FALSE
- X# define FALSE 0
- X# define TRUE 1
- X#endif /* FALSE */
- X
- X
- X/* To make lint happy. */
- X
- X#define FCLOSE (void) fclose
- X#define FFLUSH (void) fflush
- X#define FPRINTF (void) fprintf
- X#define FPUTS (void) fputs
- X#define FREAD (void) fread
- X#define FWRITE (void) fwrite
- X#define IOCTL (void) ioctl
- X#define PCLOSE (void) pclose
- X#define PRINTF (void) printf
- X#define PUTC (void) putc
- X#define SELECT (void) select
- X#define SIGNAL (void) signal
- X#define SPRINTF (void) sprintf
- X#define STRCAT (void) strcat
- X#define STRCPY (void) strcpy
- X#define STRNCAT (void) strncat
- X#define STRNCPY (void) strncpy
- X#define UNGETC (void) ungetc
- X#define WRITE (void) write
- X
- X#ifndef LINT_CAST
- X#ifdef lint
- X#define LINT_CAST(arg) (arg ? 0 : 0)
- X#else
- X#define LINT_CAST(arg) (arg)
- X#endif /* lint */
- X#endif /* LINT_CAST */
- X
- X#define PUTCHAR(ch) (void) putc(ch, stderr)
- X
- X#define BACKSPACE 8 /* for input line parsing. */
- X#define DEL 127
- X#define LINEFEED 13
- X#define RETURN 10
- X
- X#define BITSPERPIXEL 8
- X#define BOXH 40 /* height of input dialog box. */
- X#define BOXW (TWIDTH-40) /* width of input dialog box. */
- X#define BOXX 20 /* x position of input dialog box. */
- X#define BOXY 10 /* y position of input dialog box. */
- X#define CMAPLEN 256 /* length of the color map. */
- X#define DEF_X 512 /* image width */
- X#define DEF_Y 512 /* image height */
- X#define DEF_ZSIZE (1 << BITSPERPIXEL)
- X#define MAXIMG 128
- X
- X#ifndef MAXLINE
- X#define MAXLINE 80 /* length of character strings. */
- X#endif /*MAXLINE*/
- X
- X#define MAXOPS 2 /* number of pseudo rasterop functions. */
- X#define MAXTOKENS 128
- X
- X#ifndef SIGRET
- X#define SIGRET int
- X#endif /* SIGRET */
- X
- X#define THEIGHT 612 /* total height of the popi window. */
- X#define TWIDTH 512 /* total width of the popi canvas. */
- X
- X#define ERR_NONE 0
- X#define ERR_SYS (1<<0) /* system error (errno set) */
- X#define ERR_PARSE (1<<1) /* syntax error while parsing input */
- X#define ERR_SNARK (1<<2) /* internal program error */
- X#define ERR_WARN (1<<3) /* just a warning */
- X
- X/* larger than any char token. */
- X#define CRVAL 257 /* cartesian image coordinate rval */
- X#define CLVAL 258 /* cartesian image coordinate lval */
- X#define INAME 259 /* image name */
- X#define VALUE 260
- X#define NAME 261
- X#define NEW 262
- X#define AND 264 /* && */
- X#define OR 265 /* || */
- X#define EQ 266 /* == */
- X#define NE 267 /* != */
- X#define GE 268 /* >= */
- X#define LE 269 /* <= */
- X#define UMIN 270 /* unary minus */
- X#define POW 271 /* ** */
- X#define LSHIFT 272 /* << */
- X#define RSHIFT 273 /* >> */
- X#define SPECIAL 274
- X#define INUM 275 /* integer number */
- X#define FNUM 276 /* floating point number */
- X#define PLVAL 277 /* polar image coordinate lval */
- X#define PRVAL 278 /* polar image coordinate rval */
- X#define FNAME 279 /* Filename */
- X#define SIN 300 /* sine() * Z */
- X#define COS 301 /* cosine() * Z */
- X#define ATAN 302 /* atan2(y, x) */
- X#define ABS 303 /* abs() */
- X#define LOG 304 /* natural log */
- X#define SQRT 305
- X#define RAND 306 /* RANDOM() as defined above */
- X#define HYPOT 307 /* hypot(x, y) == sqrt(x*x + y*y) */
- X
- X#ifdef NDEBUG
- X# define DEBUG(stuff)
- X#else /* ! NDEBUG */
- X# define DEBUG(stuff) if (Debug) FPRINTF stuff
- X#endif /* ! NDEBUG */
- X
- Xenum cur_type { BUSY_CUR, NORMAL_CUR } ; /* cursor types. */
- X
- Xenum font_type { BFONT, NFONT } ; /* fonts used by popi. */
- X
- Xenum op_type { GCLR, GSET } ; /* pseudo rasterop functions. */
- X
- Xstruct SRC
- X{
- X pixel_t **pix; /* pix[y][x] */
- X char *str;
- X};
- X
- X/* An element of the execution string.
- X * Each such item will perform some operation on the
- X * evaluation stack.
- X */
- Xtypedef
- Xstruct exec
- X{
- X int op;
- X union
- X {
- X long i; /* integer */
- X float f; /* floating point */
- X } value;
- X} exec_t;
- X
- X#if SEQPAR
- X#ifndef sequent
- X#include "Sorry, this will only work on a sequent"
- X#endif /* sequent */
- X#define malloc shmalloc
- X#endif /* SEQPAR */
- X
- X/* External declarations */
- X
- X/* main.c */
- Xextern char *Emalloc P((unsigned int));
- Xextern void PrStrs P((char **));
- Xextern void version P((void));
- X
- X/* io.c */
- Xextern pixel_t **ImgAlloc P((void));
- Xextern void ImgFree P((struct SRC *));
- Xextern void Efclose P((FILE *));
- Xextern FILE *EfopenR P((char *)),
- X *EfopenW P((char *));
- Xextern void getpix P((char *, char *));
- Xextern void putpix P((struct SRC *, char *));
- Xextern void showfiles P((void));
- X
- X/* lex.c */
- Xextern void Skip P((void));
- Xextern void lex P((void));
- Xextern void error P((int));
- Xextern void pushback P((int));
- X
- X/* expr.c */
- Xextern void transform P((void));
- X
- X/* special.c */
- Xextern void help P((void));
- Xextern void OpenLog P((void));
- Xextern void special P((void));
- X
- X/* run.c */
- Xextern void SwapOldNew P((void));
- Xextern void run P((void));
- X
- X/* polar.c */
- Xextern void MakePolar P((void));
- X
- X/* driver routines */
- Xvoid disp_init P((int, char**));
- Xvoid disp_finish P((void));
- Xvoid disp_imgstart P((void));
- Xvoid disp_imgend P((void));
- Xvoid disp_putline P((pixel_t *, int));
- Xvoid disp_error P((int, int));
- Xvoid disp_ungetc P((int));
- Xvoid disp_percentdone P((int));
- Xint disp_prompt P((void));
- Xint disp_getchar P((void));
- X
- X/* External variable declarations */
- X
- Xextern char ErrBuf[] ;
- Xextern char *ProgName ; /* Name of this program. */
- Xextern char nextline[] ; /* Next input line to be parsed. */
- Xextern char text[] ;
- Xextern char *LogFile ; /* Name of file for logging commands */
- X
- Xextern FILE *Debug ; /* Debugging stream */
- Xextern FILE *LogStr ; /* command logging stream */
- X
- Xextern double lexfract ;
- X
- Xextern short CUROLD ;
- Xextern short CURNEW ;
- X
- Xextern long parsed[] ;
- X
- Xextern int CharPos ; /* Position in input line. */
- Xextern int OldPos ;
- Xextern int RangeCheck ;
- Xextern int Xsize ;
- Xextern int Ysize ;
- Xextern int Zsize ;
- Xextern pixel_t Zmax ;
- Xextern short *avals ;
- Xextern int lat ; /* Lookahead token. */
- Xextern int lexval ;
- Xextern int noerr ; /* Indicates if an error has occured. */
- Xextern int nsrc ;
- Xextern int prs ;
- Xextern short *rvals ;
- Xextern int Verbose ;
- Xextern void Skip() ;
- Xextern int Truncate ;
- X
- Xextern struct SRC src[MAXIMG] ;
- X
- Xextern int disp_active ; /* Display results after each operation. */
- X
- X#if SEQPAR
- Xextern int ncpus; /* No. cpus to use in parallel */
- X#endif /* SEQPAR */
- X
- X#endif /* POPI_DEFINED */
- Funky_Stuff
- chmod 0444 popi.h || echo "restore of popi.h fails"
- set `wc -c popi.h`;Sum=$1
- if test "$Sum" != "9927"
- then echo original size 9927, current size $Sum;fi
- echo "x - extracting popi.icon (Text)"
- sed 's/^X//' << 'Funky_Stuff' > popi.icon &&
- X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
- X */
- X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x8000,0x0000,0x0001,0x0001,
- X 0x8000,0x0000,0x0001,0x7F81,0x8000,0x0000,0x0001,0x30C1,
- X 0x8000,0x0000,0x0001,0x3061,0x8000,0x0000,0x0001,0x3061,
- X 0x8000,0x0000,0x0001,0x3061,0x8000,0x0000,0x0001,0x30C1,
- X 0x8000,0x7600,0x0001,0x3781,0x8000,0xDF80,0x0001,0x3001,
- X 0x8001,0x76E8,0x0001,0x3001,0x8001,0xFF00,0x0001,0x3001,
- X 0x8002,0x7BFC,0x0001,0x3001,0x8002,0xDE03,0x0001,0x3001,
- X 0x800A,0xD5F8,0x0001,0x3001,0x804A,0xBF45,0xC001,0x7801,
- X 0x801A,0xE97C,0x0001,0x0001,0x81D3,0xAFEB,0x6001,0x0001,
- X 0x823F,0xFBBE,0x1001,0x0F81,0x82EF,0xEAFF,0xF401,0x11C1,
- X 0x857F,0xABFF,0x8401,0x20E1,0x857F,0xE87F,0xF801,0x6061,
- X 0x87FF,0x007F,0xFE01,0x6061,0x8BFF,0x000F,0xF801,0x6061,
- X 0x8FFC,0x0005,0xFE01,0x6061,0x87FE,0x01FF,0xFF01,0x7041,
- X 0x8FFB,0xF37F,0xFE01,0x3881,0x87EF,0xF1E0,0xFF81,0x1F01,
- X 0x8FF8,0xF1FE,0xFF81,0x0001,0x8FFF,0xB110,0x5D01,0x0001,
- X 0x87E2,0xD0C4,0x5FC1,0x0001,0x8FEA,0x0010,0x3FC1,0x77C1,
- X 0x87A0,0xA045,0x1FC1,0x38E1,0x87F4,0xA030,0x5F81,0x3071,
- X 0x87D2,0x8001,0x3F81,0x3031,0x85D6,0xC014,0xBF81,0x3031,
- X 0x87F0,0x39C5,0xBF01,0x3031,0x87DE,0x8F85,0xFE01,0x3031,
- X 0x83EA,0x3FF4,0x3E01,0x3021,0x83FC,0xA85D,0xF801,0x3841,
- X 0x81F7,0xFFE5,0xB801,0x3F81,0x81FE,0xA005,0xF801,0x3001,
- X 0x807E,0x9007,0xF001,0x3001,0x807F,0x96C3,0xF801,0x3001,
- X 0x80FE,0x8A8F,0xFC01,0x3001,0x80FF,0xCBA2,0xFE01,0x7801,
- X 0x80FF,0xD69F,0xFF01,0x0001,0x807F,0xD5D7,0xFC01,0x0001,
- X 0x81FF,0xF77F,0xFC01,0x0601,0x80FF,0xFDDF,0xFE01,0x0601,
- X 0x80FF,0xEFFE,0xFE01,0x0001,0x81FE,0xFFFD,0xFF81,0x0001,
- X 0x87FE,0xFFFD,0xFFC1,0x1E01,0x9FEF,0xBFF5,0xABF1,0x0601,
- X 0xBFFB,0x7FDF,0xFFFD,0x0601,0xFFCF,0xD7F3,0xC7FF,0x0601,
- X 0xFFFF,0xFFDF,0xFFFF,0x0601,0xFFFF,0x6FF7,0xFFFF,0x0601,
- X 0xFFFF,0xFFFF,0xFFFF,0x0601,0xFFFF,0xEFCF,0xFFFF,0x0601,
- X 0xFFFF,0xFFFF,0xFFFF,0x0601,0xFFFF,0xFFFF,0xFFFF,0x1F81,
- X 0xFFFF,0xFFFF,0xFFFF,0x0001,0xFFFF,0xFFFF,0xFFFF,0xFFFF
- Funky_Stuff
- chmod 0444 popi.icon || echo "restore of popi.icon fails"
- set `wc -c popi.icon`;Sum=$1
- if test "$Sum" != "1933"
- then echo original size 1933, current size $Sum;fi
- echo "x - extracting popi.ps (Text)"
- sed 's/^X//' << 'Funky_Stuff' > popi.ps &&
- X
- X% @(#)popi.ps 1.5 89/12/04
- X%
- X% NeWS dependent graphics routines used by the popi program.
- X% written by Rich Burridge - Sun Microsystems Australia.
- X%
- X% Popi was originally written by Gerard J. Holzmann - AT&T Bell Labs.
- X% This version is based on the code in his Prentice Hall book,
- X% "Beyond Photography - the digital darkroom," ISBN 0-13-074410-7,
- X% which is copyright (c) 1988 by Bell Telephone Laboratories, Inc.
- X%
- X% Permission is given to distribute these extensions, as long as these
- X% introductory messages are not removed, and no monies are exchanged.
- X%
- X% No responsibility is taken for any errors on inaccuracies inherent
- X% either to the comments or the code of this program, but if reported
- X% to me, then an attempt will be made to fix them.
- X
- X/edef { exch def } def
- X
- X/PSDrawArea % x y width height op => -
- X{
- X 5 dict begin
- X /Op edef
- X /Height edef
- X /Width edef
- X /Y edef
- X /Y CanvasHeight Y sub Height sub def
- X /X edef
- X
- X Canvas setcanvas
- X newpath
- X X Y moveto
- X Width Height rect
- X Op [
- X GSET { 0 setgray }
- X GCLR { 1 setgray }
- X ] case
- X fill
- X end
- X} def
- X
- X
- X/PSDrawLine % x1 y1 x2 y2 => -
- X{
- X 4 dict begin
- X /Y2 edef
- X /Y2 CanvasHeight Y2 sub def
- X /X2 edef
- X /Y1 edef
- X /Y1 CanvasHeight Y1 sub def
- X /X1 edef
- X
- X Canvas setcanvas
- X 0 setgray
- X X2 Y2 moveto X1 Y1 lineto stroke
- X end
- X} def
- X
- X
- X/PSDrawScanLine % y => -
- X{
- X /Y edef
- X /Y CanvasHeight Y sub 100 sub def
- X
- X gsave
- X Canvas setcanvas
- X 0 Y translate
- X 512 1 scale
- X ScanLine imagecanvas
- X grestore
- X} def
- X
- X
- X/PSDrawText % font x y text => -
- X{
- X 4 dict begin
- X /Text edef
- X /Y edef
- X /Y CanvasHeight Y sub def
- X /X edef
- X /Font edef
- X
- X Canvas setcanvas
- X Font setfont
- X 0 setgray
- X X Y moveto Text show
- X end
- X} def
- X
- X
- X/PSInitFonts % - => -
- X{
- X /NFont /Courier findfont 14 scalefont def
- X /BFont /Courier-Bold findfont 14 scalefont def
- X} def
- X
- X
- X/PSInitialise % - => -
- X{
- X /GCLR 0 def
- X /GSET 1 def
- X /KEYBOARD 100 def
- X /REPAINT 101 def
- X /BUSY_CUR 0 def
- X /NORMAL_CUR 1 def
- X} def
- X
- X
- X/PSIsColor % - => iscolorscreen
- X{
- X /Color? framebuffer /Color get def
- X Color? {1} {0} ifelse typedprint
- X} def
- X
- X
- X/PSLoadColor % red green blue index => -
- X{
- X 4 dict begin
- X /ColorIndex edef
- X /BlueValue edef
- X /GreenValue edef
- X /RedValue edef
- X
- X /CColor RedValue 255 div GreenValue 255 div BlueValue 255 div rgbcolor def
- X ColorTable ColorIndex CColor put
- X end
- X} def
- X
- X
- X/PSMakeColorTable % size => -
- X{
- X /TableSize edef
- X
- X /ColorTable TableSize array def
- X} def
- X
- X
- X/PSMakeItems % wx wy width height ix iy iconic => -
- X{
- X [ /IsIcon /IconY /IconX /FrameHeight /FrameWidth /FrameY /FrameX ]
- X { exch def } forall
- X
- X clippath pathbbox /ScreenHeight edef pop pop pop
- X /Frame framebuffer /new DefaultWindow send def
- X FrameX FrameY IconX IconY
- X {
- X [ /IconY /IconX /FrameY /FrameX ] { exch def } forall
- X /BorderTop 5 def
- X /BorderLeft 5 def
- X /BorderBottom 5 def
- X /BorderRight 5 def
- X /ControlSize 0 def
- X /PaintClient
- X {
- X REPAINT typedprint
- X } def
- X /PaintIcon
- X {
- X gsave
- X IconCanvas setcanvas
- X 1 fillcanvas
- X clippath pathbbox
- X scale pop pop
- X 0 setgray
- X true PopiIcon imagemaskcanvas
- X grestore
- X } def
- X } Frame send
- X FrameX
- X ScreenHeight FrameHeight sub FrameY sub
- X FrameWidth 10 add FrameHeight /reshape Frame send
- X /map Frame send
- X
- X /Canvas Frame /ClientCanvas get def
- X Canvas
- X begin
- X /Transparent false def
- X /Mapped true def
- X /Retained true def
- X end
- X /CanvasHeight FrameHeight def
- X
- X /KbdEvent
- X {
- X begin
- X Action /DownTransition eq
- X {
- X KEYBOARD typedprint Name typedprint
- X } if
- X end
- X } def
- X
- X /EventMgrKbdInterest
- X {
- X [3 1 roll] { MakeEventMgrKbdInterest} append cvx
- X } def
- X
- X /MakeEventMgrKbdInterest
- X {
- X addkbdinterests
- X { /ClientData 10 dict dup /CallBack 5 index put put } forall
- X pop
- X } def
- X
- X /EventMgr
- X [
- X { KbdEvent } Canvas EventMgrKbdInterest
- X ] forkeventmgr def
- X} def
- X
- X
- X/PSSetCursor % type => -
- X{
- X [
- X BUSY_CUR { /hourg /hourg_m }
- X NORMAL_CUR { /ptr /ptr_m }
- X ] case
- X Canvas setstandardcursor
- X} def
- Funky_Stuff
- chmod 0444 popi.ps || echo "restore of popi.ps fails"
- set `wc -c popi.ps`;Sum=$1
- if test "$Sum" != "4365"
- then echo original size 4365, current size $Sum;fi
- echo "x - extracting run.c (Text)"
- sed 's/^X//' << 'Funky_Stuff' > run.c &&
- X/* @(#)run.c 1.9 89/12/11
- X *
- X * Run time interpreter used by the popi program.
- X *
- X * Popi was originally written by Gerard J. Holzmann - AT&T Bell Labs.
- X * This version is based on the code in his Prentice Hall book,
- X * "Beyond Photography - the digital darkroom," ISBN 0-13-074410-7,
- X * which is copyright (c) 1988 by Bell Telephone Laboratories, Inc.
- X *
- X * Permission is given to distribute these extensions, as long as these
- X * introductory messages are not removed, and no monies are exchanged.
- X *
- X * No responsibility is taken for any errors or inaccuracies inherent
- X * either to the comments or the code of this program, but if reported
- X * (see README file) then an attempt will be made to fix them.
- X */
- X
- X#include <ctype.h>
- X#include "popi.h"
- X#if SEQPAR
- X#include <parallel/microtask.h>
- X#endif /* SEQPAR */
- X
- X#define STACKSIZE 128
- X
- X#define dop(OP) a = *--sp ; tp = sp-1 ; *tp = (*tp OP (stack_t) a)
- X
- X/* local function prototypes */
- Xvoid prun P((void));
- X
- Xvoid
- XSwapOldNew()
- X{
- X CUROLD = CURNEW;
- X CURNEW = 1 - CUROLD;
- X}
- X
- Xstatic void
- Xprun()
- X{
- X long *ParseEnd; /* after end of parse string */
- X int x,
- X y; /* coordinates */
- X int nrange = 0; /* no. range errors */
- X
- X ParseEnd = &parsed[prs];
- X
- X if (Debug)
- X {
- X register long
- X *CurrParse; /* pointer to current item in parse string */
- X FPRINTF(Debug, "Parse string\n");
- X for (CurrParse = parsed; CurrParse != ParseEnd; ++CurrParse)
- X FPRINTF(Debug, "'%c' (%ld)\n", (char) *CurrParse, *CurrParse);
- X FPRINTF(Debug, "---\n");
- X }
- X
- X /*
- X * Warning: Microsoft Quick C generates incorrect code
- X * for the following loop when optimisation is turned on.
- X */
- X#ifndef SEQPAR
- X for (y = 0; y < Ysize; ++y)
- X#else /* ! SEQPAR */
- X for (y = m_myid; y < Ysize; y += m_numprocs)
- X#endif /* ! SEQPAR */
- X {
- X short *ap, /* precalculated polar angles */
- X *rp; /* precalculated polar radius */
- X register pixel_t
- X *p; /* default destination */
- X
- X ap = &avals[y * Xsize];
- X rp = &rvals[y * Xsize];
- X
- X p = src[CURNEW].pix[y];
- X
- X DEBUG((Debug, "y = %d\n", y));
- X for (x = 0; x < Xsize; ++x, ++p)
- X {
- X stack_t
- X Stack[STACKSIZE]; /* the stack */
- X register stack_t
- X *sp, /* stack pointer (top of stack) */
- X *tp; /* temp stack pointer */
- X stack_t
- X a,
- X b;
- X int
- X c; /* scratch */
- X register pixel_t
- X *u; /* explicit destination */
- X register long
- X *CurrParse; /* pointer to current item in parse string */
- X
- X for (CurrParse = parsed, sp = Stack; CurrParse != ParseEnd; ++CurrParse)
- X {
- X if (*CurrParse == VALUE)
- X {
- X *sp++ = (stack_t) *++CurrParse;
- X continue;
- X }
- X if (*CurrParse == '@')
- X {
- X --sp;
- X if (Truncate)
- X {
- X if (*sp > Zmax)
- X *sp = Zmax;
- X else if (*sp < 0)
- X *sp = 0;
- X }
- X *p = (pixel_t) *sp;
- X continue;
- X }
- X switch ((int) *CurrParse)
- X {
- X case '+':
- X dop(+);
- X break;
- X case '-':
- X dop(-);
- X break;
- X case '*':
- X dop(*);
- X break;
- X case '/':
- X a = *--sp;
- X tp = sp-1;
- X if (a == 0)
- X *tp = Zmax;
- X else
- X *tp = (*tp / (stack_t) a);
- X break;
- X case '%':
- X a = *--sp;
- X tp = sp-1;
- X if (a == 0)
- X *tp = 0;
- X else
- X *tp = (*tp % (stack_t) a);
- X break;
- X case '>':
- X dop(>);
- X break;
- X case '<':
- X dop(<);
- X break;
- X case GE:
- X dop(>=);
- X break;
- X case LE:
- X dop(<=);
- X break;
- X case EQ:
- X dop(==);
- X break;
- X case NE:
- X dop(!=);
- X break;
- X case AND:
- X dop(&&);
- X break;
- X case OR:
- X dop(||);
- X break;
- X case '^':
- X dop(^);
- X break;
- X case '|':
- X dop(|);
- X break;
- X case '&':
- X dop(&);
- X break;
- X case 'x':
- X *sp++ = (stack_t) x;
- X break;
- X case 'y':
- X *sp++ = (stack_t) y;
- X break;
- X case UMIN:
- X tp = sp-1;
- X *tp = -(*tp);
- X break;
- X case '!':
- X tp = sp-1;
- X *tp = !(*tp);
- X break;
- X case '=':
- X a = *--sp;
- X u = (pixel_t *) *--sp;
- X if (Truncate)
- X {
- X if (a > Zmax)
- X a = Zmax;
- X else if (a < 0)
- X a = 0;
- X }
- X *u = (pixel_t) a;
- X break;
- X case CRVAL:
- X a = *--sp; /* y */
- X b = *--sp; /* x */
- X tp = sp-1;
- X c = (int) *tp;
- X *tp = (stack_t) src[c].pix[a][b];
- X break;
- X case CLVAL:
- X a = *--sp; /* y */
- X b = *--sp; /* x */
- X tp = sp-1;
- X c = (int) *tp;
- X if
- X (
- X RangeCheck &&
- X (
- X a > Xsize - 1 || a < 0
- X ||
- X b > Ysize - 1 || b < 0
- X )
- X )
- X {
- X if (nrange++ == 0)
- X FPRINTF(stderr,
- X "Range err at (%d,%d) => %s[%d, %d]\n",
- X x, y, src[c].str, b, a);
- X }
- X if (a >= Ysize)
- X a = Ysize - 1;
- X if (a < 0)
- X a = 0;
- X if (b >= Xsize)
- X b = Xsize - 1;
- X if (b < 0)
- X b = 0;
- X *tp = (stack_t) &(src[c].pix[a][b]);
- X break;
- X case PRVAL:
- X {
- X int xval,
- X yval;
- X
- X a = *--sp; /* angle */
- X b = *--sp; /* radius */
- X
- X xval = (int) (b * cos((double) DtoR(a)) + Xsize / 2.0);
- X yval = (int) (- b * sin((double) DtoR(a)) + Ysize / 2.0);
- X
- X tp = sp - 1;
- X c = (int) *tp;
- X
- X if (RangeCheck &&
- X (xval < 0 || xval >= Xsize ||
- X yval < 0 || yval >= Ysize))
- X {
- X if (nrange++ == 0)
- X FPRINTF(stderr,
- X "Range err at (%d,%d) => %s{%d,%d} [%d,%d]\n",
- X x, y, src[c].str, b, a, xval, yval);
- X }
- X
- X if (xval < 0)
- X xval = 0;
- X if (xval >= Xsize)
- X xval = Xsize - 1;
- X if (yval < 0)
- X yval = 0;
- X if (yval >= Ysize)
- X yval = Ysize - 1;
- X
- X *tp = (stack_t) src[c].pix[yval][xval];
- X }
- X break;
- X
- X case PLVAL:
- X {
- X int xval,
- X yval;
- X
- X a = *--sp; /* angle */
- X b = *--sp; /* radius */
- X
- X xval = (int) (b * cos((double) DtoR(a)) + Xsize / 2.0);
- X yval = (int) (- b * sin((double) DtoR(a)) + Ysize / 2.0);
- X
- X tp = sp - 1;
- X c = (int) *tp;
- X
- X if (RangeCheck &&
- X (xval < 0 || xval >= Xsize ||
- X yval < 0 || yval >= Ysize))
- X {
- X if (nrange++ == 0)
- X FPRINTF(stderr,
- X "Range err at (%d,%d) => %s{%d,%d} [%d,%d]\n",
- X x, y, src[c].str, b, a, xval, yval);
- X }
- X
- X if (xval < 0)
- X xval = 0;
- X if (xval >= Xsize)
- X xval = Xsize - 1;
- X if (yval < 0)
- X yval = 0;
- X if (yval >= Ysize)
- X yval = Ysize - 1;
- X
- X *tp = (stack_t) &(src[c].pix[yval][xval]);
- X }
- X break;
- X
- X case POW:
- X a = *--sp; /* exponent */
- X tp = sp-1;
- X *tp = (stack_t) pow((double) *tp, (double) a);
- X break;
- X case 'a':
- X#if NOMEM
- X *sp++ = (stack_t)
- X RtoD(atan2((double) y, (double) x)) + 0.5;
- X#else /* !NOMEM */
- X *sp++ = (stack_t) *ap;
- X#endif /* !NOMEM */
- X break;
- X case 'r':
- X *sp++ = (stack_t) *rp;
- X break;
- X case SIN:
- X tp = sp-1;
- X *tp = (stack_t) (sin((double) DtoR(*tp)) * (double)Zmax);
- X break;
- X case COS:
- X tp = sp-1;
- X *tp = (stack_t) (cos((double) DtoR(*tp)) * (double)Zmax);
- X break;
- X case ATAN:
- X a = *--sp;
- X tp = sp-1;
- X *tp = (stack_t) RtoD(atan2((double) *tp, (double) a));
- X break;
- X case HYPOT:
- X a = *--sp;
- X tp = sp - 1;
- X *tp = (stack_t) hypot((double) *tp, (double) a);
- X break;
- X case ABS:
- X tp = sp-1;
- X *tp = *tp < 0 ? - *tp : *tp;
- X break;
- X case LOG:
- X tp = sp-1;
- X *tp = (stack_t) log((double) *tp);
- X break;
- X case SQRT:
- X tp = sp-1;
- X *tp = (stack_t) sqrt((double) *tp);
- X break;
- X case RAND:
- X#if 0
- X tp = sp -1;
- X *tp = (stack_t) RANDOM % *tp;
- X#else
- X *sp++ = (stack_t) RANDOM;
- X#endif
- X break;
- X case LSHIFT:
- X dop(<<);
- X break;
- X case RSHIFT:
- X dop(>>);
- X break;
- X case '?':
- X a = *--sp;
- X CurrParse++;
- X if (!a)
- X CurrParse = &parsed[*CurrParse];
- X break;
- X case ':':
- X CurrParse = &parsed[CurrParse[1]];
- X break;
- X
- X default:
- X if (*CurrParse < 127 && isprint(*CurrParse))
- X SPRINTF(ErrBuf, "run: unknown operator '%c' (%d)",
- X *CurrParse, *CurrParse);
- X else
- X SPRINTF(ErrBuf, "run: unknown operator %d", *CurrParse);
- X error(ERR_SNARK);
- X return;
- X }
- X }
- X ++ap;
- Funky_Stuff
- echo "End of part 3"
- echo "File run.c is continued in part 4"
- echo "4" > s2_seq_.tmp
- exit 0
-
-