magic/utils/finddisp.c

124 lines
4.2 KiB
C

/*
* finddisplay.c -
*
* *********************************************************************
* * Copyright (C) 1985, 1990 Regents of the University of California. *
* * Permission to use, copy, modify, and distribute this *
* * software and its documentation for any purpose and without *
* * fee is hereby granted, provided that the above copyright *
* * notice appear in all copies. The University of California *
* * makes no representations about the suitability of this *
* * software for any purpose. It is provided "as is" without *
* * express or implied warranty. Export of this software outside *
* * of the United States of America may require an export license. *
* *********************************************************************
*
* This file contains a single routine that will find the correct
* graphics display to use from the current terminal and return
* parameters for the display, such as its type and the location
* of the tablet port. It is used as part of the Caesar design
* system.
*/
#ifndef lint
static char rcsid[] __attribute__ ((unused)) = "$Header: /usr/cvsroot/magic-8.0/utils/finddisp.c,v 1.1.1.1 2008/02/03 20:43:50 tim Exp $";
#endif /* not lint */
#include <stdio.h>
#include <string.h>
#include "utils/magic.h"
#include "utils/utils.h"
/* Import from library routines: */
extern char *ttyname();
/*
* ----------------------------------------------------------------------------
* FindDisplay --
*
* This procedure locates information about the color display
* to use from a given terminal (determined by tty or the name
* of the standard input file) by looking in the file passed.
*
* Results:
* None.
*
* Side effects:
* The parameters pDisplayPort, pTabletPort, pDisType, and
* pMonType all point to strings that are modified. *pDisplayPort
* is filled with the name of the port that connects to the graphics
* display. *pTabletPort is filled in with the name of the port to be
* used to receive characters from the tablet. *pDisType is filled
* in with the name of the type of display ("OGL", etc.), and
* *pMonType is filled in with the name of the monitor type attached
* to the display (used to select color maps).
*
* If the file is not found or if there is not a suitable line then
* nothing is modified.
*
* File format:
* Each line in the displays file contains up to five strings
* which are, in order, the name of a text terminal, the name
* of the corresponding graphics display port, the monitor type
* attached to that display, the name of the display type, and
* the name of the tablet port to use for that display. The
* tablet port can be omitted, in which case the display port
* is used.
* ----------------------------------------------------------------------------
*/
void
FindDisplay(tty, file, path, pDisplayPort, pTabletPort, pDisType, pMonType)
char *tty; /* Terminal for which display info is desired.
* If NULL, used device on stdin.
*/
char *file; /* Name of file in which to find info. */
char *path; /* Path to use for lookup. */
char **pDisplayPort; /* Will be filled in with the name of the
* port for the graphics display.
*/
char **pTabletPort; /* Will be filled in with the name of the
* tablet. */
char **pDisType; /* Will be filled in with the display type. */
char **pMonType; /* Will be filled in with the monitor type. */
{
int i;
char line[100], name1[100];
static char name2[100], mon[100], dType[100], tabletPort[100];
FILE *f;
if (tty == NULL) tty = ttyname(fileno(stdin));
if (tty == NULL) return;
f = PaOpen(file, "r", (char *) NULL, path, (char *) NULL, (char **) NULL);
if (f == NULL) return;
while (1)
{
if (fgets(line, 99, f) == NULL)
{
(void) fclose(f);
return;
}
i = sscanf(line, "%99s %99s %99s %99s %99s", name1, name2,
mon, dType, tabletPort);
if (i < 4)
{
(void) fclose(f);
return;
}
if (strcmp(name1, tty) == 0)
{
(void) fclose(f);
*pDisplayPort = name2;
*pMonType = mon;
*pDisType = dType;
if (i >= 5) *pTabletPort = tabletPort;
else *pTabletPort = name2;
return;
}
}
}