[BACK]Return to main.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mg

File: [local] / src / usr.bin / mg / main.c (download)

Revision 1.2, Fri Feb 25 19:09:48 2000 UTC (24 years, 3 months ago) by deraadt
Branch: MAIN
Changes since 1.1: +1 -1 lines

make it minimally compile; millert

/*
 *		Mainline
 */
#include	"def.h"
#ifndef NO_MACRO
#include	"macro.h"
#endif

int	thisflag;			/* Flags, this command		*/
int	lastflag;			/* Flags, last command		*/
int	curgoal;			/* Goal column			*/
BUFFER	*curbp;				/* Current buffer		*/
WINDOW	*curwp;				/* Current window		*/
BUFFER	*bheadp;			/* BUFFER listhead		*/
WINDOW	*wheadp = (WINDOW *)NULL;	/* WINDOW listhead		*/
char	pat[NPAT];			/* Pattern			*/
#ifndef NO_DPROMPT
extern char prompt[], *promptp;		/* delayed prompting		*/
#endif

static VOID	edinit();

int
main(argc, argv)
int  argc;
char **argv;
{
#ifndef NO_STARTUP
	char	*startupfile();
#endif
	char	*cp;
	VOID	vtinit(), makename(), eerase();
	BUFFER	*findbuffer();

#ifdef SYSINIT
	SYSINIT;				/* system dependent.	*/
#endif
	vtinit();				/* Virtual terminal.	*/
#ifndef NO_DIR
	dirinit();				/* Get current directory */
#endif
	edinit();				/* Buffers, windows.	*/
	ttykeymapinit();			/* Symbols, bindings.	*/
	/* doing update() before reading files causes the error messages from
	 * the file I/O show up on the screen.	(and also an extra display
	 * of the mode line if there are files specified on the command line.)
	 */
	update();
#ifndef NO_STARTUP				/* User startup file.	*/
	if ((cp = startupfile((char *)NULL)) != NULL)
		(VOID) load(cp);
#endif
	while (--argc > 0) {
		cp = adjustname(*++argv);
		curbp = findbuffer(cp);
		(VOID) showbuffer(curbp, curwp, 0);
		(VOID) readin(cp);
	}
	thisflag = 0;				/* Fake last flags.	*/
	for(;;) {
#ifndef NO_DPROMPT
	    *(promptp = prompt) = '\0';
	    if(epresf == KPROMPT) eerase();
#endif
	    update();
	    lastflag = thisflag;
	    thisflag = 0;
	    switch(doin()) {
		case TRUE: break;
		case ABORT:
		    ewprintf("Quit");		/* and fall through	*/
		case FALSE:
		default:
		    ttbeep();
#ifndef NO_MACRO
		    macrodef = FALSE;
#endif
	    }
	}
}

/*
 * Initialize default buffer and window.
 */
static VOID
edinit() {
	register BUFFER *bp;
	register WINDOW *wp;

	bheadp = NULL;
	bp = bfind("*scratch*", TRUE);		/* Text buffer.		*/
	wp = (WINDOW *)malloc(sizeof(WINDOW));	/* Initial window.	*/
	if (bp==NULL || wp==NULL) panic("edinit");
	curbp  = bp;				/* Current ones.	*/
	wheadp = wp;
	curwp  = wp;
	wp->w_wndp  = NULL;			/* Initialize window.	*/
	wp->w_bufp  = bp;
	bp->b_nwnd  = 1;			/* Displayed.		*/
	wp->w_linep = wp->w_dotp = bp->b_linep;
	wp->w_doto  = 0;
	wp->w_markp = NULL;
	wp->w_marko = 0;
	wp->w_toprow = 0;
	wp->w_ntrows = nrow-2;			/* 2 = mode, echo.	*/
	wp->w_force = 0;
	wp->w_flag  = WFMODE|WFHARD;		/* Full.		*/
}

/*
 * Quit command. If an argument, always
 * quit. Otherwise confirm if a buffer has been
 * changed and not written out. Normally bound
 * to "C-X C-C".
 */
/*ARGSUSED*/
quit(f, n)
{
	register int	s;
	VOID		vttidy();

	if ((s = anycb(FALSE)) == ABORT) return ABORT;
	if (s == FALSE
	|| eyesno("Some modified buffers exist, really exit") == TRUE) {
		vttidy();
#ifdef	SYSCLEANUP
	SYSCLEANUP;
#endif
		exit(GOOD);
	}
	return TRUE;
}

/*
 * User abort. Should be called by any input routine that sees a C-g
 * to abort whatever C-g is aborting these days. Currently does
 * nothing.
 */
/*ARGSUSED*/
ctrlg(f, n)
{
	return ABORT;
}