allbery@ncoast.UUCP (08/29/87)
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# graf.c
# graf.h
# graflib.asm
# grafsys.h
# halo.h
# halofake.c
# macros.ah
# macros.h
# makemsc
# maketc
# doc
# This archive created: Thu Aug 27 11:29:51 1987
export PATH; PATH=/bin:$PATH
echo shar: extracting "'graf.c'" '(11654 characters)'
if test -f 'graf.c'
then
echo shar: will not over-write existing file "'graf.c'"
else
sed 's/^X//' << \SHAR_EOF > 'graf.c'
X/*
X * grafix --- graf.c
X *
X * graphics interface
X *
X * Written 4/87 by Scott Snyder (ssnyder@romeo.caltech.edu or @citromeo.bitnet)
X *
X * 5/29/87 sss - fixed bug in box() and allow for different memory models
X *
X */
X
X#include "macros.h"
X#include "graf.h"
X#include "grafsys.h"
X#include <dos.h>
X
X#define int_video 0x10
X#define video_point 0x0c
X#define ega_altsel 0x12
X#define egaalt_info 0x10
X
X/* utility macros */
X
X#define swap(a, b) {int _tmp; _tmp=a; a=b; b=_tmp;}
X#define inrange(a, x, b) ((a)<=(x) && (x)<=(b))
X#define clipto(x, lo, hi) { \
X if (x < lo) \
X x = lo; \
X else if (x > hi) \
X x = hi; \
X}
X
X/*****************************************************************************
X * variable definitions *
X *****************************************************************************/
X
Xunsigned NEAR g_card; /* graphics card we're using */
Xunsigned NEAR g_display; /* type of display we're using */
X
Xg_obj far * NEAR g_drawbuf; /* graphics drawing buffer */
Xg_obj far * NEAR g_physbuf; /* physical screen address */
Xg_obj far * NEAR g_virtbuf; /* virtual buffer address */
Xunsigned NEAR g_colormax; /* maximum color value */
Xunsigned NEAR g_xsize, NEAR g_ysize; /* physical size of screen */
Xunsigned NEAR g_xchsize, NEAR g_ychsize; /* size of screen in characters */
Xunsigned NEAR g_xor; /* xor mode flag */
Xunsigned NEAR g_bufflg; /* buffered mode flag */
Xunsigned NEAR g_pages; /* number of pagse available */
Xunsigned NEAR g_curpage; /* page currently visible */
X
Xint NEAR g_xcliplo, NEAR g_xcliphi; /* clipping boundaries */
Xint NEAR g_ycliplo, NEAR g_ycliphi;
X
Xfloat NEAR g_aspect; /* aspect ratio */
X
X/*****************************************************************************
X * interfaces to graphics drivers *
X *****************************************************************************/
X
X/************************* calls for internal use only ***********************/
X
XSTATIC void nocl_regfill(x1, y1, x2, y2, c)
Xunsigned x1, y1, x2, y2, c;
X{
X switch(g_card) {
X case (CGA): CGA_regfill(x1, y1, x2, y2, c); break;
X case (EGA): EGA_regfill(x1, y1, x2, y2, c); break;
X }
X}
X
XSTATIC void nocl_point(x, y, c)
Xunsigned x, y, c;
X{
X switch(g_card) {
X case (CGA): CGA_point(x, y, c); break;
X case (EGA): EGA_point(x, y, c); break;
X }
X}
X
XSTATIC void nocl_line(x1, y1, x2, y2, c)
Xunsigned x1, y1, x2, y2, c;
X{
X switch(g_card) {
X case (CGA): CGA_line(x1, y1, x2, y2, c); break;
X case (EGA): EGA_line(x1, y1, x2, y2, c); break;
X }
X}
X
XSTATIC void write_pix(x1, y1, x2, y2, c)
Xint x1, y1, x2, y2;
Xunsigned c;
X{
X switch(g_card) {
X case (CGA): CGA_write_pix(x1, y1, x2, y2, c); break;
X case (EGA): EGA_write_pix(x1, y1, x2, y2, c); break;
X }
X}
X
X/* set up for plotting mucho points */
X
XSTATIC void point_set(c)
Xunsigned c;
X{
X switch(g_card) {
X case (CGA): CGA_point_set(c); break;
X case (EGA): EGA_point_set(c); break;
X }
X}
X
XSTATIC void point_res()
X{
X switch(g_card) {
X case (CGA): CGA_point_res(); break;
X case (EGA): EGA_point_res(); break;
X }
X}
X
X/******************** calls safe for anyone to use **************************/
X
Xvoid g_clearall(c)
Xunsigned c;
X{
X switch(g_card) {
X case (CGA): CGA_clearall(c); break;
X case (EGA): EGA_clearall(c); break;
X }
X}
X
Xvoid g_show()
X{
X switch(g_card) {
X case (CGA): CGA_show(); break;
X case (EGA): EGA_show(); break;
X }
X}
X
Xvoid g_setback(c)
Xunsigned c;
X{
X switch(g_card) {
X case (CGA): CGA_setback(c); break;
X case (EGA): EGA_setback(c); break;
X }
X}
X
Xvoid g_setpal(pallette, value)
Xunsigned pallette, value;
X{
X switch(g_card) {
X case (CGA): CGA_setpal(pallette, value); break;
X case (EGA): EGA_setpal(pallette, value); break;
X }
X}
X
X/* g_open also sets clipping boundaries to the physical screen size */
X/* and initializes other things... */
X
Xvoid g_open(mode)
Xunsigned mode;
X{
X switch(g_card) {
X case (CGA): CGA_gopen(mode); break;
X case (EGA): EGA_gopen(mode); break;
X }
X g_xcliplo = 0;
X g_ycliplo = 0;
X g_xcliphi = g_xsize-1;
X g_ycliphi = g_ysize-1;
X
X g_xor = g_bufflg = 0;
X
X/* set g_drawbuf to something appropriately */
X
X g_setbuf(g_bufflg);
X}
X
Xvoid g_close()
X{
X switch(g_card) {
X case (CGA): CGA_gclose(); break;
X case (EGA): EGA_gclose(); break;
X }
X}
X
Xvoid g_writech(row, col, ch, c, page)
Xunsigned row, col, c;
Xchar ch;
Xint page;
X{
X switch(g_card) {
X case (CGA): CGA_writech(row, col, ch, c, page); break;
X case (EGA): EGA_writech(row, col, ch, c, page); break;
X }
X}
X
X/***************************************************************************
X * graphics drawing and control routines *
X ***************************************************************************/
X
X/* fill a region with the specified color */
X
Xvoid g_regfill(x1, y1, x2, y2, c)
Xint x1, y1, x2, y2;
Xunsigned c;
X{
X if (x1 > x2)
X swap(x1, x2);
X if (y1 > y2)
X swap(y1, y2);
X
X if (x1 < g_xcliplo)
X x1 = g_xcliplo;
X else if (x1 > g_xcliphi)
X return;
X
X if (x2 < g_xcliplo)
X return;
X else if (x2 > g_xcliphi)
X x2 = g_xcliphi;
X
X if (y1 < g_ycliplo)
X y1 = g_ycliplo;
X else if (y1 > g_ycliphi)
X return;
X
X if (y2 < g_ycliplo)
X return;
X else if (y2 > g_ycliphi)
X y2 = g_ycliphi;
X
X nocl_regfill(x1, y1, x2, y2, c);
X}
X
X/* plot a point */
X
Xvoid g_point(x, y, c)
Xint x, y;
Xunsigned c;
X{
X if (inrange(g_xcliplo, x, g_xcliphi) &&
X inrange(g_ycliplo, y, g_ycliphi))
X nocl_point(x, y, c);
X}
X
X/* routine to clip one endpoint of a line */
X
XSTATIC int clipln(x1,y1,xc,yc,x2,y2)
Xint x1,y1,x2,y2,*xc,*yc;
X{
X int delx,dely,xx,yy;
X
X if (x1 >= g_xcliplo && x1 <= g_xcliphi &&
X y1 >= g_ycliplo && y1 <= g_ycliphi) {
X *xc=x1; *yc=y1;
X return(1);
X }
X dely=y2-y1;
X delx=x2-x1;
X if (y1 > g_ycliphi || y1 < g_ycliplo) {
X if (dely == 0)
X return(0);
X if (y1 > g_ycliphi) {
X if (dely > 0 || y2 > g_ycliphi) return (0);
X yy=g_ycliphi;
X }
X else {
X if (dely < 0 || y2 < g_ycliplo) return(0);
X yy=g_ycliplo;
X }
X xx=(float)(yy-y1)*delx/dely+x1;
X if (xx >= g_xcliplo && xx <= g_xcliphi) {
X *xc=xx; *yc=yy;
X return(1);
X }
X }
X if (x1 > g_xcliphi || x1 < g_xcliplo) {
X if (delx == 0)
X return(0);
X if (x1 > g_xcliphi) {
X if (delx > 0 || x2 > g_xcliphi) return(0);
X xx=g_xcliphi;
X }
X else {
X if (delx < 0 || x2 < g_xcliplo) return(0);
X xx=g_xcliplo;
X }
X yy=(float)(xx-x1)*dely/delx+y1;
X if (yy >= g_ycliplo && yy <= g_ycliphi) {
X *xc=xx; *yc=yy;
X return(1);
X }
X }
X return(0);
X}
X
X/* draw a clipped line */
X
Xvoid g_line(x1,y1,x2,y2,c)
Xint x1,y1,x2,y2;
Xunsigned c;
X{
X if (clipln(x1,y1,&x1,&y1,x2,y2) &&
X clipln(x2,y2,&x2,&y2,x1,y1)) {
X nocl_line(x1,y1,x2,y2,c);
X }
X}
X
X/* draw an ellipse with aspect aspect and half-major axis length r_sum_m */
X/* from a routine by Tim Hogan in Dr. Dobb's Journal May '85 p. 40 */
X
Xvoid g_ellipse(x, y, r_sub_m, aspect, c)
Xint x,y,r_sub_m;
Xunsigned c;
Xfloat aspect;
X{
X long alpha, beta, two_alpha, four_alpha, two_beta, four_beta, d;
X int row, col, two_x, two_y, rel_x, rel_y;
X double square_aspect;
X
X if (aspect < 0.004) aspect = 0.004;
X
X square_aspect = aspect*aspect;
X
X if (aspect < 1.0) {
X alpha = (long)r_sub_m * (long)r_sub_m;
X beta = alpha * square_aspect;
X row = y + r_sub_m*aspect;
X }
X else {
X beta = (long)r_sub_m * (long)r_sub_m;
X alpha = beta / square_aspect;
X row = y + r_sub_m;
X }
X
X if (alpha == 0L) alpha = 1L;
X if (beta == 0L) beta = 1L;
X
X col = x;
X two_x = x<<1;
X two_y = y<<1;
X rel_y = row-y;
X two_alpha = alpha<<1;
X four_alpha = alpha<<2;
X two_beta = beta<<1;
X four_beta = beta<<2;
X
X d = two_alpha*((long)(rel_y-1)*rel_y) + alpha + two_beta*(1-alpha);
X
X point_set(c); /* set up for point plotting */
X
X while (alpha*(rel_y = row-y) > beta*(rel_x = col-x)) {
X write_pix(col, row, two_x-col, two_y-row, c);
X if (d>=0) {
X d += four_alpha*(1-rel_y);
X row--;
X }
X d += two_beta*(3+(rel_x<<1));
X col++;
X }
X
X d = two_beta * ((long)rel_x * (rel_x+1)) + two_alpha*((long)rel_y*(rel_y-2)+1) +
X beta*(1-two_alpha);
X
X while ((rel_y = row-y) + 1) {
X write_pix(col, row, two_x-col, two_y-row, c);
X if (d<=0) {
X d += four_beta*(1+col-x);
X col++;
X }
X d += two_alpha*(3-(rel_y<<1));
X row--;
X }
X point_res(); /* reset the graphics device */
X}
X
X/* draw a circle */
X
Xvoid g_circle(x, y, r, c)
Xint x, y, r;
Xunsigned c;
X{
X g_ellipse(x, y, r, g_aspect, c);
X}
X
X/* draw a box */
X
Xvoid g_box(x1, y1, x2, y2, c)
Xint x1, y1, x2, y2;
Xunsigned c;
X{
X g_line(x1, y1, x2, y1, c);
X g_line(x2, y1, x2, y2, c);
X g_line(x2, y2, x1, y2, c);
X g_line(x1, y2, x1, y1, c);
X}
X
X/* set xor mode */
X
Xvoid g_setxor(flag)
Xunsigned flag;
X{
X g_xor = flag;
X}
X
X/* set clipping boundaries */
X
Xvoid g_setclip(x1, y1, x2, y2)
Xint x1, y1, x2, y2;
X{
X if (x1 > x2)
X swap(x1, x2);
X if (y1 > y2)
X swap(y1, y2);
X
X clipto(x1, 0, g_xsize-1);
X clipto(x2, 0, g_xsize-1);
X clipto(y1, 0, g_ysize-1);
X clipto(y2, 0, g_ysize-1);
X
X g_xcliplo = x1;
X g_xcliphi = x2;
X g_ycliplo = y1;
X g_ycliphi = y2;
X}
X
X/* clear screen within clipping boundaries */
X
Xvoid g_clear(c)
Xunsigned c;
X{
X nocl_regfill(g_xcliplo, g_ycliplo, g_xcliphi, g_ycliphi, c);
X}
X
X/* set buffered mode flag and initialize drawbuf appropriately */
X
Xvoid g_setbuf(flag)
Xunsigned flag;
X{
X g_bufflg = flag;
X if (flag)
X g_drawbuf = g_virtbuf;
X else
X g_drawbuf = g_physbuf;
X}
X
X/* initialize graphics system */
X
Xvoid g_init(card, display)
Xunsigned card;
Xunsigned display; /* ignored if card = 0 */
X{
X unsigned swt;
X union REGS inregs, outregs;
X
X/* try to get EGA information. if we have enough memory for 2 hi-res
X pages, then say we have an EGA. if not, or if the card does not
X respond, assume we have a CGA. if argument is nonzero however, force
X result to that.
X*/
X
X if (card == 0) {
X inregs.h.ah = ega_altsel;
X inregs.h.bl = egaalt_info;
X int86(int_video, &inregs, &outregs);
X if (outregs.h.bl != 3) { /* not valid | mem. < 256k */
X g_card = CGA;
X g_display = CD;
X }
X else {
X g_card = EGA;
X
X /* now look at the adapter switch settings (in cl) and try to figure
X out what sort of display is attached */
X
X swt = outregs.h.cl & 0x0e;
X swt = (swt >= 6 ? swt-6 : swt);
X if (swt == 4)
X g_display = MO;
X else if (swt == 2)
X g_display = EN;
X else if (swt == 0)
X g_display = CD;
X else
X g_display = CD;
X }
X }
X else {
X g_card = card;
X g_display = display;
X }
X
X g_xor = 0;
X g_bufflg = 0;
X g_xcliplo = g_xcliplo = g_ycliphi = g_ycliplo = 0;
X}
X
X/* write a string tty style with color c at row, col */
X
Xvoid g_writestr(row, col, s, c, page)
Xunsigned row, col;
Xunsigned c;
Xchar *s;
Xint page;
X{
X while (*s) {
X if (col >= g_xchsize) { /* do wrapping */
X col = 0;
X row++;
X }
X if (row >= g_ychsize) /* abort if we run out of screen */
X return;
X if (*s == '\012') /* newline */
X col = g_xchsize; /* force a wrap next time around */
X else if (*s == '\015') /* ignore any carriage returns (for compat) */
X ;
X else {
X g_writech (row, col, *s, c, page);
X col++;
X }
X s++;
X }
X}
X
X/* get information about physical graphics device */
X
Xvoid g_info(p)
Xstruct g_info *p;
X{
X p->card = g_card;
X p->display = g_display;
X p->xsize = g_xsize;
X p->ysize = g_ysize;
X p->colormax = g_colormax;
X p->pages = g_pages;
X p->curpage = g_curpage;
X p->xchsize = g_xchsize;
X p->ychsize = g_ychsize;
X}
SHAR_EOF
if test 11654 -ne "`wc -c < 'graf.c'`"
then
echo shar: error transmitting "'graf.c'" '(should have been 11654 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'graf.h'" '(1424 characters)'
if test -f 'graf.h'
then
echo shar: will not over-write existing file "'graf.h'"
else
sed 's/^X//' << \SHAR_EOF > 'graf.h'
X/*
X * grafix --- graf.h
X *
X * graphics definitions
X *
X * Written 4/87 by Scott Snyder (ssnyder@romeo.caltech.edu or @citromeo.bitnet)
X *
X */
X
X/* graphics card definitions */
X
X#define CGA 1
X#define EGA 2
X
X/* display type definitions */
X
X#define EN 1
X#define CD 2
X#define MO 3
X
X/* graphics mode definitions */
X
X#define CGA_640 1
X#define CGA_320 2
X
X/* info structure definition */
X
Xstruct g_info {
X unsigned card;
X unsigned display;
X unsigned xsize, ysize;
X unsigned xchsize, ychsize;
X unsigned colormax;
X unsigned pages;
X unsigned curpage;
X};
X
X/* graphics interface function definitions */
X
Xextern void g_box(int, int, int, int, unsigned);
Xextern void g_circle(int, int, int, unsigned);
Xextern void g_clear(unsigned);
Xextern void g_clearall(unsigned);
Xextern void g_close(void);
Xextern void g_ellipse(int, int, int, float, unsigned);
Xextern void g_info(struct g_info *);
Xextern void g_init(unsigned, ...);
Xextern void g_line(int, int, int, int, unsigned);
Xextern void g_open(unsigned);
Xextern void g_point(int, int, unsigned);
Xextern void g_regfill(int, int, int, int, unsigned);
Xextern void g_setback(unsigned);
Xextern void g_setbuf(unsigned);
Xextern void g_setclip(int, int, int, int);
Xextern void g_setpal(unsigned, unsigned);
Xextern void g_setxor(unsigned);
Xextern void g_show(void);
Xextern void g_writech(unsigned, unsigned, char, unsigned, int);
Xextern void g_writestr(unsigned, unsigned, char *, unsigned, int);
SHAR_EOF
if test 1424 -ne "`wc -c < 'graf.h'`"
then
echo shar: error transmitting "'graf.h'" '(should have been 1424 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'graflib.asm'" '(962 characters)'
if test -f 'graflib.asm'
then
echo shar: will not over-write existing file "'graflib.asm'"
else
sed 's/^X//' << \SHAR_EOF > 'graflib.asm'
X;
X; grafix --- graflib.asm
X;
X; miscellaneous assembly routines
X;
X; Written 4/87 by Scott Snyder (ssnyder@romeo.caltech.edu or @citromeo.bitnet)
X;
X; Modified 5/29/87 by sss to allow for different memory models
X;
X
X title graflib
X
Xinclude macros.ah
X
Xbuflen equ 32768
X
Xsseg
Xendss
X
Xdseg
Xendds
X
Xbuf segment public 'BUF'
X db buflen dup(?)
Xbuf ends
X
X df g_fmemcpy
X df g_fmemset
X df g_bufseg
X
Xcseg _graflib
X
XpBegin g_bufseg
X
X mov ax, buf
X ret
X
XpEnd g_bufseg
X
XpBegin g_fmemcpy
X
X push bp
X mov bp,sp
X push di
X push si
X push ds
X
X cld
X les di,[bp+argbase]
X lds si,[bp+argbase+4]
X mov cx,[bp+argbase+8]
X shr cx, 1
X jnc c1
X movsb
Xc1: rep movsw
X
X pop ds
X pop si
X pop di
X mov sp,bp
X pop bp
X ret
X
XpEnd g_fmemcpy
X
XpBegin g_fmemset
X
X push bp
X mov bp,sp
X push di
X push si
X
X cld
X les di,[bp+argbase]
X mov al,[bp+argbase+4]
X mov ah,al
X mov cx,[bp+argbase+6]
X shr cx,1
X jnc s1
X stosb
Xs1: rep stosw
X
X pop si
X pop di
X mov sp,bp
X pop bp
X ret
X
XpEnd g_fmemset
X
Xendcs _graflib
X
X end
SHAR_EOF
if test 962 -ne "`wc -c < 'graflib.asm'`"
then
echo shar: error transmitting "'graflib.asm'" '(should have been 962 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'grafsys.h'" '(2081 characters)'
if test -f 'grafsys.h'
then
echo shar: will not over-write existing file "'grafsys.h'"
else
sed 's/^X//' << \SHAR_EOF > 'grafsys.h'
X/*
X * grafix --- grafsys.h
X *
X * definitions for communication between graf.c and drivers
X *
X * Written 4/87 by Scott Snyder (ssnyder@romeo.caltech.edu or @citromeo.bitnet)
X *
X */
X
X/*
X * the assembly routines assume that all the global data is in the default
X * data segment. in MSC's large (& compact) model, however, each module
X * gets its own data segment --- except stuff declared near which goes
X * into the default segment. TC, however, doesn't allow near, etc. to
X * modify static data. but TC also puts all static data into one segment
X * in all models except huge. so we get lucky this time!
X */
X
X#if defined(__TURBOC__)
X# define NEAR
X#else
X# define NEAR near
X#endif
X
X/* display type definitions */
X
X#define EN 1
X#define CD 2
X#define MO 3
X
X/* graphics mode definitions */
X
X#define CGA_640 1
X#define CGA_320 2
X
Xtypedef unsigned char g_obj;
X
X/* physbuf = area that's being displayed;
X virtbuf = other area;
X drawbuf = area that's being drawn on
X*/
X
Xextern g_obj far * NEAR g_drawbuf; /* graphics drawing buffer */
Xextern g_obj far * NEAR g_physbuf; /* addr. of physical screen buffer */
Xextern g_obj far * NEAR g_virtbuf; /* addr. of virtual buffer */
Xextern unsigned NEAR g_colormax; /* maximum color value */
Xextern unsigned NEAR g_xsize, NEAR g_ysize; /* physical size of screen */
Xextern unsigned NEAR g_xchsize, NEAR g_ychsize; /* size of screen in chars */
Xextern unsigned NEAR g_xor; /* xor mode flag */
Xextern unsigned NEAR g_bufflg; /* buffered mode flag */
Xextern int NEAR g_xcliplo, NEAR g_xcliphi; /* clipping boundaries */
Xextern int NEAR g_ycliplo, NEAR g_ycliphi;
Xextern float NEAR g_aspect; /* aspect ratio for circle drawing */
Xextern unsigned NEAR g_pages; /* number of pages available */
Xextern unsigned NEAR g_curpage; /* page currently visible */
Xextern unsigned NEAR g_display; /* display type */
X
X/* utility functions */
X
Xextern g_fmemset(g_obj far *, g_obj, unsigned);
Xextern g_fmemcpy(g_obj far *, g_obj far *, unsigned);
Xextern unsigned g_bufseg(void);
X
X/* driver functions */
X
X#include "cga.h"
X#include "ega.h"
SHAR_EOF
if test 2081 -ne "`wc -c < 'grafsys.h'`"
then
echo shar: error transmitting "'grafsys.h'" '(should have been 2081 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'halo.h'" '(951 characters)'
if test -f 'halo.h'
then
echo shar: will not over-write existing file "'halo.h'"
else
sed 's/^X//' << \SHAR_EOF > 'halo.h'
X/*
X * grafix --- halo.h
X *
X * definitions for fake halo routines
X *
X * Written 4/87 by Scott Snyder (ssnyder@romeo.caltech.edu or @citromeo.bitnet)
X *
X */
X
Xextern void box(float *, float *, float *, float *);
Xextern void cir(float *);
Xextern void halo_init(void);
Xextern void lnabs(float *, float *);
Xextern void lnrel(float *, float *);
Xextern void mapdton (int *, int *, float *, float *);
Xextern void mapdtow (int *, int *, float *, float *);
Xextern void mapntod (float *, float *, int *, int *);
Xextern void mapntow (float *, float *, float *, float *);
Xextern void mapwtod (float *, float *, int *, int *);
Xextern void mapwton (float *, float *, float *, float *);
Xextern void movabs(float *, float *);
Xextern void movrel(float *, float *);
Xextern void setcolor(int *);
Xextern void setviewport(float *, float *, float *, float *, int *, int *);
Xextern void setworld(float *, float *, float *, float *);
Xextern void setxor(int *);
SHAR_EOF
if test 951 -ne "`wc -c < 'halo.h'`"
then
echo shar: error transmitting "'halo.h'" '(should have been 951 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'halofake.c'" '(5672 characters)'
if test -f 'halofake.c'
then
echo shar: will not over-write existing file "'halofake.c'"
else
sed 's/^X//' << \SHAR_EOF > 'halofake.c'
X/*
X * grafix --- halofake.c
X *
X * implement halo-like transformations and calls
X *
X * Written 4/87 by Scott Snyder (ssnyder@romeo.caltech.edu or @citromeo.bitnet)
X *
X */
X
X#include "macros.h"
X#include "graf.h"
X#include <math.h>
X
X/* graphics parameters */
X
XSTATIC unsigned h_xsize, h_ysize, h_colormax;
X
X/* transformation parameters */
X
XSTATIC float w_x_offs = 0;
XSTATIC float w_y_offs = 0;
XSTATIC float w_x_mult = 1;
XSTATIC float w_y_mult = 1;
XSTATIC float v_x_offs = 0;
XSTATIC float v_y_offs = 0;
XSTATIC float v_x_mult = 1;
XSTATIC float v_y_mult = 1;
X
X/* state variables */
X
XSTATIC float cur_wx, cur_wy;
XSTATIC unsigned cur_c;
X
X#define smashcolor(c) ((c) > h_colormax ? h_colormax : c)
X#define swap(a, b) {int tmp; tmp=a; a=b; b=tmp;}
X
X/*****************************************************************************
X * transformation macros *
X *****************************************************************************/
X
X#define tr_x_wtov(x) (((x) + w_x_offs) * w_x_mult)
X#define tr_x_vton(x) ((x) * v_x_mult + v_x_offs)
X#define tr_x_ntod(x) ((x) * (h_xsize-1))
X
X#define tr_x_dton(x) (((float)(x)) / (h_xsize-1))
X#define tr_x_ntov(x) (((x) - v_x_offs) / v_x_mult)
X#define tr_x_vtow(x) ((x) / w_x_mult - w_x_offs)
X
X#define tr_x_wton(x) tr_x_vton( tr_x_wtov (x))
X#define tr_x_ntow(x) tr_x_vtow( tr_x_ntov (x))
X#define tr_x_dtow(x) tr_x_ntow( tr_x_dton (x))
X
X
X#define tr_y_wtov(y) (((y) + w_y_offs) * w_y_mult)
X#define tr_y_vton(y) ((y) * v_y_mult + v_y_offs)
X#define tr_y_ntod(y) ((y) * (h_ysize-1))
X
X#define tr_y_dton(y) (((float)(y)) / (h_ysize-1))
X#define tr_y_ntov(y) (((y) - v_y_offs) / v_y_mult)
X#define tr_y_vtow(y) ((y) / w_y_mult - w_y_offs)
X
X#define tr_y_wton(y) tr_y_vton( tr_y_wtov (y))
X#define tr_y_ntow(y) tr_y_vtow( tr_y_ntov (y))
X#define tr_y_dtow(y) tr_y_ntow( tr_y_dton (y))
X
X
X#define tr_r_wtov(r) ((r) * w_x_mult)
X#define tr_r_vton(r) ((r) * v_x_mult)
X#define tr_r_ntod(r) tr_x_ntod(r)
X
X#define tr_r_wton(r) tr_r_vton( tr_r_wtov (r))
X
X/*****************************************************************************
X * private utility functions *
X *****************************************************************************/
X
Xint tr_x(float);
XSTATIC int tr_x(x)
Xfloat x;
X{
X return( tr_x_ntod( tr_x_wton (x)));
X}
X
Xint tr_y(float);
XSTATIC int tr_y(y)
Xfloat y;
X{
X return( tr_y_ntod( tr_y_wton (y)));
X}
X
Xint tr_r(float);
XSTATIC int tr_r(r)
Xfloat r;
X{
X return( tr_r_ntod( tr_r_wton (r)));
X}
X
X/*****************************************************************************
X * user-callable routines *
X *****************************************************************************/
X
X/* coordinate transforms */
X
Xvoid mapdton(dx, dy, nx, ny)
Xint *dx, *dy;
Xfloat *nx, *ny;
X{
X *nx = tr_x_dton(*dx);
X *ny = tr_y_dton(*dy);
X}
X
Xvoid mapdtow(dx, dy, wx, wy)
Xint *dx, *dy;
Xfloat *wx, *wy;
X{
X *wx = tr_x_dtow(*dx);
X *wy = tr_y_dtow(*dy);
X}
X
Xvoid mapntod(nx, ny, dx, dy)
Xfloat *nx, *ny;
Xint *dx, *dy;
X{
X *dx = tr_x_ntod(*nx);
X *dy = tr_y_ntod(*ny);
X}
X
Xvoid mapntow(nx, ny, wx, wy)
Xfloat *nx, *ny;
Xfloat *wx, *wy;
X{
X *wx = tr_x_ntow(*nx);
X *wy = tr_y_ntow(*ny);
X}
X
Xvoid mapwtod(wx, wy, dx, dy)
Xfloat *wx, *wy;
Xint *dx, *dy;
X{
X *dx = tr_x(*wx);
X *dy = tr_y(*wy);
X}
X
Xvoid mapwton(wx, wy, nx, ny)
Xfloat *wx, *wy;
Xfloat *nx, *ny;
X{
X *nx = tr_x_wton(*wx);
X *ny = tr_y_wton(*wy);
X}
X
X/* routines controlling transformations */
X
Xvoid setworld(x1,y1,x2,y2)
Xfloat *x1,*y1,*x2,*y2;
X{
X w_x_offs = -*x1;
X w_y_offs = -*y2;
X
X if (*x2 - *x1 != 0.0)
X w_x_mult = 1.0/(*x2 - *x1);
X else
X w_x_mult = 1e15;
X
X if (*y1 - *y2 != 0.0)
X w_y_mult = 1.0/(*y1 - *y2);
X else
X w_y_mult = 1e15;
X}
X
Xvoid setviewport(x1, y1, x2, y2, bdr, bck)
Xfloat *x1,*x2,*y1,*y2;
Xint *bdr,*bck;
X{
X int dx1, dx2, dy1, dy2;
X
X v_x_offs = *x1;
X v_y_offs = *y1;
X
X if (*x2 - *x1 != 0.0)
X v_x_mult = (*x2 - *x1);
X else
X v_x_mult = 1e-15;
X
X if (*y2 - *y1 != 0.0)
X v_y_mult = (*y2 - *y1);
X else
X v_y_mult = 1e-15;
X
X dx1 = tr_x_ntod(*x1);
X dx2 = tr_x_ntod(*x2);
X dy1 = tr_y_ntod(*y1);
X dy2 = tr_y_ntod(*y2);
X
X if (*bdr >= 0) {
X if (dx1 > dx2) swap(dx1, dx2);
X if (dy1 > dy2) swap(dy1, dy2);
X
X g_setclip(dx1-1, dy1-1, dx2+1, dy2+1);
X g_box(dx1-1, dy1-1, dx2+1, dy2+1, smashcolor(*bdr));
X }
X
X g_setclip(dx1, dy1, dx2, dy2);
X
X if (*bck >= 0)
X g_clear(smashcolor(*bck));
X}
X
X/* drawing routines */
X
Xvoid movabs(wx, wy)
Xfloat *wx, *wy;
X{
X cur_wx = *wx;
X cur_wy = *wy;
X}
X
Xvoid movrel(wx, wy)
Xfloat *wx, *wy;
X{
X cur_wx += *wx;
X cur_wy += *wy;
X}
X
Xvoid lnabs(wx, wy)
Xfloat *wx, *wy;
X{
X g_line(tr_x(cur_wx), tr_y(cur_wy), tr_x(*wx), tr_y(*wy), cur_c);
X cur_wx = *wx;
X cur_wy = *wy;
X}
X
Xvoid lnrel(wx, wy)
Xfloat *wx, *wy;
X{
X g_line(tr_x(cur_wx), tr_y(cur_wy),
X tr_x(cur_wx+*wx), tr_y(cur_wy+*wy), cur_c);
X cur_wx += *wx;
X cur_wy += *wy;
X}
X
Xvoid cir(r)
Xfloat *r;
X{
X int dx, dy, dr;
X
X if (*r > 0.0) {
X dx = tr_x(cur_wx);
X dy = tr_y(cur_wy);
X dr = tr_r(*r);
X g_circle(dx, dy, dr, cur_c);
X }
X}
X
Xvoid box(wx1, wy1, wx2, wy2)
Xfloat *wx1, *wx2, *wy1, *wy2;
X{
X g_box(tr_x(*wx1), tr_y(*wy1), tr_x(*wx2), tr_y(*wy2), cur_c);
X}
X
X/* mode setting stuff */
X
Xsetcolor(c)
Xint *c;
X{
X cur_c = smashcolor(*c);
X}
X
Xsetxor(m)
Xint *m;
X{
X g_setxor(*m);
X}
X
X/* get parameters - must be called AFTER g_open */
X
Xvoid halo_init()
X{
X struct g_info info;
X
X g_info(&info);
X h_xsize = info.xsize;
X h_ysize = info.ysize;
X h_colormax = info.colormax;
X
X w_x_offs = w_y_offs = 0;
X w_x_mult = w_y_mult = 1;
X v_x_offs = v_y_offs = 0;
X v_x_mult = v_y_mult = 1;
X
X cur_wx = cur_wy = 0;
X cur_c = 0;
X}
SHAR_EOF
if test 5672 -ne "`wc -c < 'halofake.c'`"
then
echo shar: error transmitting "'halofake.c'" '(should have been 5672 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'macros.ah'" '(1420 characters)'
if test -f 'macros.ah'
then
echo shar: will not over-write existing file "'macros.ah'"
else
sed 's/^X//' << \SHAR_EOF > 'macros.ah'
X;
X; grafix --- macros.ah
X;
X; general purpose definitions
X;
X; Written 4/87 by Scott Snyder (ssnyder@romeo.caltech.edu or @citromeo.bitnet)
X;
X; Memory model stuff added 5/29/87 by sss
X;
X
X;include model.inc
X
X;
X; break down modules
X;
Xifdef SMALL
X NEARDATA equ 1
X NEARCODE equ 1
Xendif
X
Xifdef COMPACT
X FARDATA equ 1
X NEARCODE equ 1
Xendif
X
Xifdef MEDIUM
X NEARDATA equ 1
X FARCODE equ 1
Xendif
X
Xifdef LARGE
X FARDATA equ 1
X FARCODE equ 1
Xendif
X
X;
X; define model-dependent parameters
X;
X
Xifdef NEARCODE
X argbase equ 4
Xendif
X
Xifdef FARCODE
X argbase equ 6
Xendif
X
X;
X; macros
X;
X
Xcseg macro moduleName
X ifdef FARCODE
X moduleName&_TEXT segment byte public 'CODE'
X assume cs: moduleName&_TEXT
X else
X _TEXT segment byte public 'CODE'
X assume cs: _TEXT
X endif
X endm
X
Xendcs macro moduleName
X ifdef FARCODE
X moduleName&_TEXT ends
X else
X _TEXT ends
X endif
X endm
X
XpBegin macro pName
X ifdef FARCODE
X pName proc far
X else
X pName proc near
X endif
X endm
X
XpEnd macro pName
X pName endp
X endm
X
Xdseg macro
X assume ds:DGROUP
X_DATA segment byte public 'DATA'
X endm
X
Xendds macro
X_DATA ends
X endm
X
Xsseg macro
XDGROUP group _STACK, _DATA
X assume ss:DGROUP
X_STACK segment word stack 'STACK'
X endm
X
Xendss macro
X_STACK ends
X endm
X
Xdf macro sym
Xpublic sym
X_&sym = sym
Xpublic _&sym
X endm
X
Xex macro sym, typ
Xextrn _&sym : typ
Xsym equ _&sym
X endm
X
XexProc macro pName
X ifdef FARCODE
X ex pName, far
X else
X ex pName, near
X endif
X endm
X
SHAR_EOF
if test 1420 -ne "`wc -c < 'macros.ah'`"
then
echo shar: error transmitting "'macros.ah'" '(should have been 1420 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'macros.h'" '(410 characters)'
if test -f 'macros.h'
then
echo shar: will not over-write existing file "'macros.h'"
else
sed 's/^X//' << \SHAR_EOF > 'macros.h'
X/*
X * macros.h
X *
X * general purpose macros
X *
X * Written 4/87 by Scott Snyder (ssnyder@romeo.caltech.edu or @citromeo.bitnet)
X *
X */
X
X#define LINT_ARGS
X/*#define DEBUG*/
X
X#ifdef DEBUG
X# define debug(x) x
X# define STATIC
X#else
X# define debug(x)
X# define STATIC static
X#endif
X
X#define ever ;;
X#define until(c) while(!(c))
X#define true (1)
X#define false (0)
X#define maxfloat (1.701411e38)
X#define pi (3.1415926)
SHAR_EOF
if test 410 -ne "`wc -c < 'macros.h'`"
then
echo shar: error transmitting "'macros.h'" '(should have been 410 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'makemsc'" '(1347 characters)'
if test -f 'makemsc'
then
echo shar: will not over-write existing file "'makemsc'"
else
sed 's/^X//' << \SHAR_EOF > 'makemsc'
X#
X# Make file for Grafix, Microsoft C. Typing 'make makemsc' will build
X# a small model library called grafix.lib. To compile a different
X# memory model, set other compiler options, or change the name of
X# the library, set the cflags, asmflags, and/or libname macros
X# from the command line. For example, if you want to build a
X# medium model library, you should type:
X# make cflags=/AM asmflags=/DMEDIUM libname=grafixm makemsc
X# Be sure that no object modules that were compiled with a different
X# memory model are lying around! The batch file buildmsc.bat will
X# automatically build all four libraries from scratch. Oh, and also
X# be sure you have the compiler properly configured so that it
X# can find its include files. You will also need to have MASM and
X# Microsoft's LIB utility on your search path.
X#
X
Xcflags=
Xasmflags=
Xlibname=grafix
X
X# /Gs = no stack probes
X.c.obj:
X msc/Gs $(cflags) $*;
X lib $(libname) -+$*;
X
X# /Mx = case is signifigant
X.asm.obj:
X masm/Mx $(asmflags) $*;
X lib $(libname) -+$*;
X
Xcgagraf.obj: cgagraf.c macros.h grafsys.h cga.h
X
Xcgagrafa.obj: cgagrafa.asm macros.ah
X
Xegagraf.obj: egagraf.c macros.h grafsys.h ega.h
X
Xegagrafa.obj: egagrafa.asm macros.ah
X
Xgraf.obj: graf.c macros.h graf.h grafsys.h cga.h ega.h
X
Xgraflib.obj: graflib.asm macros.ah
X
Xhalofake.obj: halofake.c macros.h graf.h
X
SHAR_EOF
if test 1347 -ne "`wc -c < 'makemsc'`"
then
echo shar: error transmitting "'makemsc'" '(should have been 1347 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'maketc'" '(1883 characters)'
if test -f 'maketc'
then
echo shar: will not over-write existing file "'maketc'"
else
sed 's/^X//' << \SHAR_EOF > 'maketc'
X#
X# Make file for Grafix, Turbo C. Typing 'make -fmaketc' will build
X# a small model library called grafix.lib. To compile a different
X# memory model, set other compiler options, or change the name of
X# the library, set the cflags, asmflags, and/or libname macros
X# from the command line. For example, if you want to build a
X# medium model library, you should type:
X# make -Dcflags=-mm -Dasmflags=/DMEDIUM -Dlibname=grafixm -fmaketc
X# Be sure that no object modules that were compiled with a different
X# memory model are lying around! The batch file buildtc.bat will
X# automatically build all four libraries from scratch. Oh, and also
X# be sure you have the compiler properly configured so that it
X# can find its include files. You will also need to have MASM and
X# Microsoft's LIB utility on your search path.
X#
X
X#
X# Note: on the version of Turbo Make I have (dated 1:00 may 13), the $d
X# macro doesn't seem to work. Thus, you'll always have to specify cflags,
X# asmflags, and libname from the command line (buildtc.bat does this, so
X# it's all right). If the make you have works in this regard, remove
X# the #'s from the following lines.
X#
X
X#!if $d(cflags)
X#cflags=
X#!endif
X#!if !$d(asmflags)
X#asmflags=/DSMALL
X#!endif
X#!if !$d(libname)
X#libname=grafix
X#!endif
X
X# -c = don't link
X.c.obj:
X tcc -c $(cflags) $*
X lib $(libname) -+$*;
X
X# /Mx = case is signifigant
X.asm.obj:
X masm /Mx $(asmflags) $*;
X lib $(libname) -+$*;
X
X$(libname).lib: graf.obj graflib.obj cgagrafa.obj egagrafa.obj cgagraf.obj \
X egagraf.obj halofake.obj
X
Xgraf.obj: graf.c macros.h graf.h grafsys.h cga.h ega.h
X
Xgraflib.obj: graflib.asm macros.ah
X
Xcgagrafa.obj: cgagrafa.asm macros.ah
X
Xegagrafa.obj: egagrafa.asm macros.ah
X
Xcgagraf.obj: cgagraf.c macros.h grafsys.h cga.h
X
Xegagraf.obj: egagraf.c macros.h grafsys.h ega.h
X
Xhalofake.obj: halofake.c macros.h graf.h
X
SHAR_EOF
if test 1883 -ne "`wc -c < 'maketc'`"
then
echo shar: error transmitting "'maketc'" '(should have been 1883 characters)'
fi
fi # end of overwriting check
if test ! -d 'doc'
then
echo shar: creating directory "'doc'"
mkdir 'doc'
fi
echo shar: entering directory "'doc'"
cd 'doc'
echo shar: extracting "'fonts.txi'" '(1669 characters)'
if test -f 'fonts.txi'
then
echo shar: will not over-write existing file "'fonts.txi'"
else
sed 's/^X//' << \SHAR_EOF > 'fonts.txi'
X%
X% fonts.txi
X%
X\font\fourteenbf=ambx10 scaled\magstep2
X\font\twelverm =amr10 at 12pt
X\font\twelveit =amti10 at 12pt
X\font\twelvebf =ambx10 at 12pt
X\font\twelvett =amtt10 at 12pt
X\font\twelvemit=ammi10 at 12pt
X\font\twelvecal=amsy10 at 12pt
X\font\tenmex=amex10
X\font\eightbf=ambx8
X\font\eightrm=amr8
X\font\eightmit=ammi8
X\font\eightcal=amsy8
X\font\sixbf=ambx6
X\font\sixrm=amr6
X\font\sixmit=ammi6
X\font\sixcal=amsy6
X
X\def\normbs{\def\\{{\cal \char"6E}}}
X\def\ttbs{\def\\{\char`\\}}
X
X\def\twelvepoint{\def\rm{\fam0\twelverm\normbs}%
X \textfont0=\twelverm \scriptfont0=\eightrm \scriptscriptfont0=\sixrm
X \textfont1=\twelvemit \scriptfont1=\eightmit \scriptscriptfont1=\sixmit
X \textfont2=\twelvecal \scriptfont2=\eightcal \scriptscriptfont2=\sixcal
X \textfont3=\tenmex \scriptfont3=\tenmex \scriptscriptfont3=\tenmex
X \textfont\itfam=\twelveit \def\it{\fam\itfam\twelveit\normbs}%
X \textfont\ttfam=\twelvett \def\tt{\fam\ttfam\twelvett\ttbs}%
X \textfont\bffam=\twelvebf \scriptfont\bffam=\eightbf
X \scriptscriptfont\bffam=\sixbf \def\bf{\fam\bffam\twelvebf\normbs}%
X \def\bigbf{\fourteenbf}%
X \def\cal{\twelvecal\normbs}
X \def\mit{\twelvemit\normbs}
X \def\mex{\twelvemex\normbs}
X \def\normalspacing{\baselineskip=14pt
X \setbox\strutbox=\hbox{\vrule height 9.9pt depth 4.1pt width 0pt}}%
X \def\doublespacing{\baselineskip=24pt
X \setbox\strutbox=\hbox{\vrule height 17pt depth 7pt width 0pt}}%
X \def\codespacing {\baselineskip=12pt
X \setbox\strutbox=\hbox{\vrule height 8.5pt depth 3.5pt width 0pt}}%
X \def\tablespacing {\baselineskip=12pt
X \setbox\strutbox=\hbox{\vrule height 8.5pt depth 3.5pt width 0pt}}%
X \normalspacing\rm}
X
SHAR_EOF
if test 1669 -ne "`wc -c < 'fonts.txi'`"
then
echo shar: error transmitting "'fonts.txi'" '(should have been 1669 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'lib.txi'" '(3642 characters)'
if test -f 'lib.txi'
then
echo shar: will not over-write existing file "'lib.txi'"
else
sed 's/^X//' << \SHAR_EOF > 'lib.txi'
X%
X% various TeX macros
X%
X%
X% insert a MacDraw picture into a document
X%
X\def\PrintMacDraw#1#2{\par
X \vtop to #2{%
X \special{ps::[asis,begin]
X 0 SPB
X /MacDrawCheckPoint save def
X md begin /page {pop} def end
X Xpos Ypos translate
X 0 10.75 72 mul neg translate
X }%
X \special{ps: plotfile #1 asis}%
X \special{ps::[asis,end]
X MacDrawCheckPoint restore
X 0 SPE
X }%
X \vss
X }%
X}
X%
X% insert a CrikDraw picture into a document
X%
X\def\PrintCrikDraw#1#2{\par
X \vtop to #2{%
X \special{ps::[asis,begin]
X 0 SPB
X /MacDrawCheckPoint save def
X /md 200 dict def
X md begin /page {pop} def end
X 8.5 72 mul 11 72 mul translate
X -1 -1 scale
X Xpos neg Ypos neg translate
X 0 11 72 mul translate
X systemdict begin md begin
X }%
X \special{ps: plotfile #1 asis}%
X \special{ps::[asis,end]
X end end
X MacDrawCheckPoint restore
X 0 SPE
X }%
X \vss
X }
X}
X
X\def\HPrintCrikDraw#1#2#3{\hbox to #3{\PrintCrikDraw{#1}{#2}}}
X%
X%
X%
X\def\itwd #1 {{\it #1\/ }}
X\def\itnc #1 {{\it #1}}
X\def\itwdn #1 {{\it #1\/}}
X\def\itncs #1 {{\it #1 }}
X
X\def\bfwd #1 {{\bf #1\/ }}
X\def\bfnc #1 {{\bf #1}}
X\def\bfwdn #1 {{\bf #1\/}}
X\def\bfncs #1 {{\bf #1 }}
X
X\def\ttwd #1 {{\tt #1 }}
X\def\ttwdn #1 {{\tt #1}}
X
X\def\chapno{0}
X\def\chapter #1 #2\par{{\bigbf
X \centerline{Chapter #1}%
X \medskip
X \centerline{#2}}%
X \vskip 1cm
X \global\def\chapno{#1}}
X\def\endchap{\vfill\supereject}
X
X\def\ss #1 #2\par{\medbreak\medskip\noindent{\bf \chapno.#1 \enspace #2}%
X \par\nobreak\medskip\nobreak}
X
X\def\hint{\penalty -100}
X\def\break{\penalty -10000}
X
X\newcount\paritemno
X\outer\def\paritemzero{\paritemno=0}
X\outer\def\paritem #1. {\medbreak\advance\paritemno by 1
X \noindent{\it \the\paritemno.\enspace #1.\enspace}}
X\outer\def\paritemnull {\medbreak\advance\paritemno by 1
X \noindent{\it \the\paritemno.\enspace}}
X
X\newcount\itmno
X\outer\def\itmzero{\itmno=0}
X\outer\def\itm{\advance\itmno by 1\item{\the\itmno.}}
X
X\def\case #1{\medskip\hangindent=\parindent \hangafter=1\noindent{\it #1}\hfil
X \break}
X
X\def\<{{\mit <}}
X\def\>{{\mit >}}
X\def\brocket#1{\<{\it #1}\>}
X
X\def\head#1\par{\medbreak\noindent {\bf #1}\par\nobreak\medskip\nobreak}
X
X\def\begintable{\bigskip\begingroup\tablespacing}
X\def\endtable{\endgroup}
X
X\def\+{\tabalign}
X\def\begintablec#1{\begintable\centerline{\vbox{#1}}}
X\def\endtablec{\endtable}
X
X\def\tbltxt#1{\vtop{\strut#1\strut}}
X
X\def\textbeg{\medskip\begingroup\tt
X \def\par{\leavevmode\endgraf}\catcode`\`=\active
X \advance\parindent by 1em
X \obeylines\obeyspaces\codespacing}
X\def\textend{\endgroup\medskip}
X
X\def\altitem#1{\setbox0=\hbox{#1}\hangindent=\wd0\hangafter=1\noindent\box0}
X
X%
X% verbatim stuff
X%
X{\catcode`\`=\active \gdef`{\relax\lq}}
X{\obeyspaces\global\let =\ }
X
X\def\uncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials}
X\def\vinput#1 {\par\begingroup\setupverbatim\input #1 \endgroup}
X\def\setupverbatim{\tt
X \codespacing\catcode`\_=11
X \def\par{\leavevmode\endgraf} \catcode`\`=\active
X \obeylines \uncatcodespecials \obeyspaces}
X
X\def\almostuncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials
X \catcode`\\=0}
X\def\setupalmostverbatim{\tt
X \codespacing\catcode`\_=11
X \def\par{\leavevmode\endgraf} \catcode`\`=\active
X \obeylines \almostuncatcodespecials \obeyspaces}
X
X\def\vninput#1 {{\parindent=0pt \vinput#1 }}
X
X\def\codebeg{\par\begingroup\advance\parindent by 1em\setupalmostverbatim}
X\def\codeend{\endgroup}
SHAR_EOF
if test 3642 -ne "`wc -c < 'lib.txi'`"
then
echo shar: error transmitting "'lib.txi'" '(should have been 3642 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'man.txi'" '(1387 characters)'
if test -f 'man.txi'
then
echo shar: will not over-write existing file "'man.txi'"
else
sed 's/^X//' << \SHAR_EOF > 'man.txi'
X%
X% manual.txi
X%
X% tex macros for formatting man pages
X%
X% get \parskip right when going to single spacing!!!
X
X%
X% set up global stuff
X%
X\raggedbottom
X\interlinepenalty=1000 % try to put page breaks between pars
X\voffset=24pt
X\advance\vsize by-\voffset
X\leftskip=\parindent
X\parindent=0pt
X\headline={\thepagename\hfil\wholemanname\hfil\thepagename}
X\footline={\hss\tenrm-- \folio\ --\hss}
X\parskip=\medskipamount
X
X\def\noskip{\leftskip=0pt}
X
X%
X% generate the various sections on a page
X%
X\def\manpage#1 {\gdef\thepagename {#1}\begingroup}
X
X\def\manname{\par\endgroup{\noskip NAME\par\nobreak}\begingroup}
X\def\mansyn{\par\endgroup{\noskip SYNOPSIS\par\nobreak}
X \begingroup\tt
X \codespacing\catcode`\_=11
X \def\par{\leavevmode\endgraf}
X \obeylines\obeyspaces}
X\def\mandscr{\par\endgroup{\noskip DESCRIPTION\par\nobreak}\begingroup}
X\def\manbugs{\par\endgroup{\noskip BUGS\par\nobreak}\begingroup}
X\def\manex{\par\endgroup{\noskip EXAMPLE\par\nobreak}\begingroup}
X\def\mansee{\par\endgroup{\noskip SEE ALSO\par\nobreak}
X \begingroup\hyphenpenalty=10000\raggedright}
X\def\manpend{\par\endgroup\vfill\supereject}
X
X%
X% subheadings
X%
X\def\manhead #1\par{\par{\noskip #1\par\nobreak}}
X%
X% other stuff
X%
X\def\mancodebeg{\codebeg}
X\def\mancodeend{\codeend}
X%\def\mancodebeg{\par\begingroup\setupalmostverbatim}
X%\def\mancodeend{\endgroup}
SHAR_EOF
if test 1387 -ne "`wc -c < 'man.txi'`"
then
echo shar: error transmitting "'man.txi'" '(should have been 1387 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'setup.txi'" '(131 characters)'
if test -f 'setup.txi'
then
echo shar: will not over-write existing file "'setup.txi'"
else
sed 's/^X//' << \SHAR_EOF > 'setup.txi'
X\input fonts.txi
X\input lib.txi
X
X\catcode`\_=\active % we want to use this in identifiers
X\def_{\_}
X
X\twelvepoint\doublespacing\rm
SHAR_EOF
if test 131 -ne "`wc -c < 'setup.txi'`"
then
echo shar: error transmitting "'setup.txi'" '(should have been 131 characters)'
fi
fi # end of overwriting check
echo shar: done with directory "'doc'"
cd ..
# End of shell archive
exit 0