DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

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

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦48706b54d⟧ TextFile

    Length: 2448 (0x990)
    Types: TextFile
    Notes: UNIX file
    Names: »inqwin.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »unimenu/src/menu/inqwin.c« 

TextFile

#ifndef LINT
static	char	sccs_id[] = "@(#)inqwin.c	1.1 15:34:55 4/6/85";
#endif
/*
 * inqwin	get the window number they want to run in
 *		First look to see if there is a next available window.
 *		We just run through each window number looking to
 *		see if a process is running in it. If there is no
 *		process in it, we then check to see if it exists.
 *		if it doesn't exist, then we have to make it by
 *		running mkwin.
 *
 * returns	(char *) window
 */

#include	<sys/types.h>
#include	<sys/stat.h>
#include	<windows.h>

extern	int	Runwin;

char	*inqwin(prompt)
char	*prompt;
{
int	windno;
int	isactive;
char	*choice;
char	*inquire();
WINDOW	wbuf;
char	winstr[10];
static	char	buf[40];

static char m[] = "\nWindow is in use or cannot be accessed.";

	for ( ;; )		/* until we get an error or a good window */
	{
		windno = -1;
		if (prompt && *prompt )
			strcpy(buf, prompt);
		else
			strcpy(buf, "Window number? ");

		choice = inquire(buf);		/* get some input */

		if ( !choice )
			break;			/* canceled */

		if ( !(*choice) )		/* typed a return */
		{
			windno = first_empty();
			break;
		}
		else				/* entered something */
		{
			windno = atoi(choice);
			if ( windno == Runwin )	/* the current window */
				return ( (char *) 0 );

#ifdef ACTIVEWIN
			if ( window(ACTIVEWIN, windno, &isactive) || isactive )
			{
				printf(m, windno);	/* can't use this one */
				CRblk(0);
			}
			else
#endif
			if ( dump_win(&wbuf) )
				CRblk(m);
			else
				break;			/* window ok */
		}
	}

	if ( windno < 0 )		/* couldn't find a window */
		return ( (char *) 0 );

	winstr[0] = windno % 10 + '0';	/* note: limited to 10 windows */
	winstr[1] = ' ';
	winstr[2] = '\0';

	strcpy(buf, "runwin ");
	strcat(buf, winstr);

	return (buf);
}

first_empty()
{
WINDOW	wbuf;
int	windno;
int	isactive;

	for (windno = 0; windno < USR_WINDS; windno++ )
	{
		if ( windno == Runwin )
			continue;

#ifdef ACTIVEWIN
		/* i'm not sure how to do this yet... */
		if ( window(ACTIVEWIN, windno, &isactive))
		{
			printf("\nWindow system call error.\n");
			CRblk(0);
			return ( -1 );
		}
		if ( isactive )			/* window is in use */
			continue;
#endif

		if ( !dump_win(&wbuf) && wbuf.w_bf_rows )
			break;
	}

	/*
	 * we now either have an empty window or we ran out of
	 * windows
	 */
	if ( windno > USR_WINDS )
	{
		printf("\nNo windows are available.\n");
		CRblk(0);
		return (-1);
	}

	printf("\nUsing window %d.\n", windno );
	return ( windno );
}