ftp.nice.ch/pub/next/unix/macintosh/uw.4.2.N.bs.tar.gz#/uw/utility/uwtool.c

This is uwtool.c in view mode; [Download] [Up]

/*
 *	uwtool
 *
 * Copyright 1986 by John D. Bruner.  All rights reserved.  Permission to
 * copy this program is given provided that the copy is not sold and that
 * this copyright notice is included.
 */
#include <strings.h>
#include <stdio.h>

#include "uwlib.h"

main(argc, argv)
int argc;
char **argv;
{
	register uwid_t uwid;
	register char *fname, *term;
	register int c;
	register uwtype_t wtype;
	char *argv0;
	char *av[2];
	int vflag;
	int wflag;
	char *title;
	union uwoptval uwoptval;
	extern int errno;
	extern int optind;
	extern char *optarg;
	extern char *getenv();

	/*
	 * If called with no arguments, create a new window using the
	 * current shell according to the SHELL environment variable
	 * (or "/bin/sh" if that doesn't exist).  If called with
	 * arguments, argv[optind] through argv[argc-1] are the arguments
	 * to the command.
	 *
	 * Options which are recognized directly are:
	 *
	 *	-v	(verbose) print new window ID on stdout
	 *	-wtype	create window with emulation "type"
	 *	-ttitle	label window with "title"
	 *
	 * If no explicit title is specified, the command name is used.
	 */
	argv0 = argv[0];
	wflag = 0;
	vflag = 0;
	title = (char *)0;
	while ((c = getopt(argc, argv, "vw:t:")) != EOF) {
		switch (c) {
		case 'v':
			vflag++;
			break;
		case 'w':
			wflag++;
			wtype = uw_ttype(optarg);
			break;
		case 't':
			title = optarg;
			break;
		}
	}
			
	if (optind < argc) {
		/*
		 * Adjust the "argv" pointer according to the number of
		 * arguments we've processed.
		 */
		argv += optind;
		fname = *argv;
	} else {
		/*
		 * No (non-option) arguments -- use SHELL
		 */
		if ((fname = getenv("SHELL")) == (char *)0)
			fname = "/bin/sh";
		av[0] = fname;
		av[1] = (char *)0;
		argv = av;
	}

	if (title == (char *)0) {
		/*
		 * If there was no "-t" argument, then "title" will still
		 * be NULL.  In this case we use the command name as
		 * the title.
		 */
		title = fname;
	}
	
	if (!wflag) {
		/*
		 * If there was no "-w" argument, fetch the window
		 * type from the environment.  If that fails, use
		 * a default.
		 */
		if ((term=getenv("TERM")) != (char *)0)
			wtype = uw_ttype(term);
		else
			wtype = UWT_ADM31;
	}
	
	if ((uwid = uw_cmd(wtype, fname, argv)) > 0) {
		(void)strncpy(uwoptval.uwov_string, title,
		    sizeof uwoptval.uwov_string);
		(void)uw_rsetopt(uwid, UWOP_TITLE, &uwoptval);
		if (vflag)
			printf("%d\n", uwid);
		return(0);
	} else {
		if (uwerrno != UWE_NXSERV)
			uw_perror(fname, uwerrno, errno);
		else
			uw_perror(argv0, uwerrno, errno);
		return(1);
	}
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.