2017-04-25 14:41:48 +02:00
|
|
|
/*
|
|
|
|
|
* finddisplay.c -
|
|
|
|
|
*
|
2020-05-23 23:13:14 +02:00
|
|
|
* *********************************************************************
|
|
|
|
|
* * 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. *
|
2017-04-25 14:41:48 +02:00
|
|
|
* *********************************************************************
|
|
|
|
|
*
|
|
|
|
|
* 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();
|
|
|
|
|
|
2020-05-23 23:13:14 +02:00
|
|
|
|
2017-04-25 14:41:48 +02:00
|
|
|
/*
|
|
|
|
|
* ----------------------------------------------------------------------------
|
|
|
|
|
* 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.
|
|
|
|
|
*/
|
2020-05-23 23:13:14 +02:00
|
|
|
char **pTabletPort; /* Will be filled in with the name of the
|
2017-04-25 14:41:48 +02:00
|
|
|
* 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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|