DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T m

⟦d9c848bbd⟧ TextFile

    Length: 7176 (0x1c08)
    Types: TextFile
    Names: »main.c«

Derivation

└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦c319c2751⟧ »unix3.0/TeX3.0.tar.Z« 
        └─⟦036c765ac⟧ 
            └─⟦this⟧ »TeX3.0/MFcontrib/fonttool/main.c« 
└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89
    └─⟦this⟧ »./tex82/MFcontrib/fonttool/main.c« 
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦63303ae94⟧ »unix3.14/TeX3.14.tar.Z« 
        └─⟦c58930e5c⟧ 
            └─⟦this⟧ »TeX3.14/MFcontrib/fonttool/main.c« 

TextFile

/*
 * File:
 *
 *	main.c
 *
 * Author:
 *
 *	Brad Rullman
 *	Department of Computer Science  FR-35
 *	University of Washington
 *	Seattle, Washington  98155
 *	email: ecola@cs.washington.edu
 *
 *	Copyright @ March, 1987 - This program, or any subset of the functions
 *	herein, is not to be redistributed, or used for personal or commercial
 *	gain in the form of fame, fortune, or shorter working hours, without
 *	the consent of the author.
 *
 * Description:
 *
 *	A SunView 3.2 application for editing TeX fonts.
 *
 * Contents:
 *
 *   Public:
 *
 *	main			The main driver.
 *	FixSubWindows		Resets sizes and positions of subwindows.
 *	RedisplayFrame		Redisplays frame and all subwindows.
 *	AbortWithError		Aborts execution, with a message.
 *
 *   Private:
 *
 *	initCursors		Initializes cursors used by FontTool.
 *	initFrame		Creates the main frame window.
 *	initPixrects		Initializes global pixrects.
 *	initRects		Initializes global rects.
 *	catchResize		Intercepts frame resize events.
 *
 * General coding rules:
 *
 *	Names of global variables (those in global.c) are capitalized - 
 *		all others are not.
 *	Functions that are used only within the same module as they are
 *		defined (private internal functions) are declared static.
 *		Names of static (private internal) functions start with a
 *		lower case letter.
 *	Names of all other (global) functions start with an upper case
 *		letter.
 *	For ease in differentiating ft variable and function names from
 *		SunView variable and function names, the former use 
 *		capital letters rather than underscore characters, e.g.
 *		OpenPxlFile vs. open_pxl_file.
 */

#include "global.h"

static short iconImage[] = {		/* FontTool icon */
#include "fonttool.icon"
};
DEFINE_ICON_FROM_IMAGE(fonttoolIcon, iconImage);



/*
 * Main driver.
 *
 */
main(argc, argv)
int argc;
char *argv[];
{
    static void initCursors(), initFrame(), initPixrects(), initRects();
    static Notify_value catchResize();

    initCursors();
    initPixrects();
    initFrame();
    InitMessageSW();
    InitViewSW();
    InitOptionSW();
    InitPaintSW();
    window_fit(FontToolFrame);
    initRects();

    /*
     * Insert an interposer so that whenever the frame gets resized
     * we can handle it ourselves.
     */
    (void) notify_interpose_event_func(
			FontToolFrame, catchResize, NOTIFY_SAFE);

    window_main_loop(FontToolFrame);

    window_destroy(FontToolFrame);
}



/*
 * initCursors
 *
 * Input:
 *	none.
 * Output:
 *	none.
 * Action:
 *	Initializes the mouse cursors used in FontTool.  Normally the
 *	cursor will always be black, but in the PaintSW, where there
 *	may be large regions painted black, we want the cursor to be
 *	black on white paint and white on black paint.
 */
static void
initCursors()
{
    MainCursor = cursor_create(
			CURSOR_IMAGE,	&CursorPR,
			CURSOR_OP, 	PIX_SRC | PIX_DST,
			0);
    PaintCursor = cursor_create(
			CURSOR_IMAGE,	&CursorPR,
			CURSOR_OP, 	PIX_SRC ^ PIX_DST,
			0);
    WatchCursor = cursor_create(
			CURSOR_IMAGE,	&WatchCursorPR,
			CURSOR_OP, 	PIX_SRC | PIX_DST,
			0);
    PaintWatchCursor = cursor_create(
			CURSOR_IMAGE,	&WatchCursorPR,
			CURSOR_OP, 	PIX_SRC ^ PIX_DST,
			0);
}



/*
 * initFrame
 *
 * Input:
 *	none.
 * Output:
 *	none.
 * Action:
 *	Create the main frame.
 */
static void
initFrame()
{
    FontToolFrame = window_create(NULL, FRAME,
			WIN_X,				100,
			WIN_Y,				50,
			FRAME_LABEL,			"FontTool",
			FRAME_SUBWINDOWS_ADJUSTABLE,	FALSE,
			FRAME_ICON,			&fonttoolIcon,
			0);
}



/*
 * initPixrects
 *
 * Input:
 *	none.
 * Output: 
 *	none.
 * Action:
 *	Creates and initializes the global pixrects.
 *	PaintPR maps the PaintSW.
 *	ViewPR maps the ViewSW, which is a "true-size" view of the PaintSW.
 *	UndoPR maps the ViewSW one major action previous.
 *	ReferencePoint contains a description of how the reference point
 *	  should be drawn at the default magnification.
 */
static void
initPixrects()
{
    PaintPR = mem_create(SCALEUP(MINVIEWSWWIDTH), SCALEUP(MINVIEWSWHEIGHT),1);
    ViewPR = mem_create(MINVIEWSWWIDTH, MINVIEWSWHEIGHT, 1);
    UndoPR = mem_create(MINVIEWSWWIDTH, MINVIEWSWHEIGHT, 1);
    ReferenceXY.x = SCALEUP(((int) (.2 * ViewPR->pr_size.x)));
    ReferenceXY.y = SCALEUP(((int) (.667 * ViewPR->pr_size.y)));
    CLEARUNDOREFPT;
    ReferencePoint = mem_create(MAXMAG, MAXMAG, 1);
    pr_vector(
	ReferencePoint, 0, 0, MAXMAG-1, MAXMAG-1, PIX_SET, 1);
    pr_vector(
	ReferencePoint, 0, MAXMAG-1, MAXMAG-1, 0, PIX_SET, 1);
}



/*
 * initRects
 *
 * Input:
 *	none.
 * Output:
 *	none.
 * Action:
 *	Initializes the rect structures that, for convenience, keep track of 
 *	the sizes and positions of the subwindows.
 */
static void
initRects()
{
    Rect *r;

    r = (Rect *) window_get(MessageSW, WIN_RECT);
    MessageRect = *r;
    r = (Rect *) window_get(ViewSW, WIN_RECT);
    ViewRect = *r;
    r = (Rect *) window_get(OptionSW, WIN_RECT);
    OptionRect = *r;
    OptionSWHeight = r->r_height;
    r = (Rect *) window_get(PaintSW, WIN_RECT);
    PaintRect = *r;
}



/*
 * catchResize
 *
 * Input:
 *	frame: The frame from which the resize event was initiated.
 *	event: The struct containing the event description.
 *	arg  : "An optional argument containing data pertinent to the event."
 *	type : Type of notification.
 * Output:
 *	A Notify_value, as required.
 * Action:
 *	Interposed function which checks all input events passed to the frame
 *	for resize events; if it finds one, the subwindows are resized
 *	and redisplayed.  Note that checking is done AFTER the frame
 *	processes the event because if the frame changes its size due to
 *	this event (because the window has been opened or closed for instance)
 *	we want to fit the subwindows to the new size.
 */
static Notify_value
catchResize(frame, event, arg, type)
Frame frame;
Event *event;
Notify_arg arg;
Notify_event_type type;
{
    Notify_value value;
    void FixSubwindows();

    if (event_id(event) == WIN_RESIZE) {
	/*
	 * If the window is not iconic, go ahead and fix things up.
	 */
	if ((int)window_get(frame, FRAME_CLOSED) == 0) {
	    FixSubwindows();
	    RedisplayPRs();
	}
    }
    value = notify_next_event_func(frame, event, arg, type);
    return(value);
}



/*
 * FixSubwindows
 *
 * Input:
 *	none.
 * Output:
 *	none.
 * Action:
 *	Compute and set the sizes of any subwindows that may be affected by
 *	a resizing of the frame or of the ViewSW.
 */
void
FixSubwindows()
{
    FixViewSW();
    FixOptionSW();
    FixPaintSW();
}



/*
 * RedisplayFrame
 *
 * Input:
 *	none.
 * Output:
 *	none.
 * Action:
 *	Forces the frame and its contents to be redisplayed, to remove
 *	garbage left behind after subwindows have been resized or repositioned.
 */
void
RedisplayFrame()
{
    int framefd;	/* file descriptor for the FontTool frame */

    framefd = (int) window_get(FontToolFrame, WIN_FD);
    wmgr_refreshwindow(framefd);
}



/*
 * AbortWithError
 *
 * Input:
 *	A string to be printed on standard error.
 * Output:
 *	none.
 * Action:
 *	Prints the passed message, and aborts the tool with an error code.
 */
void
AbortWithError(string)
char *string;
{
	fprintf(stderr, string);
	exit(-1);
}