Ejemplo n.º 1
0
void run_unix () {

	static char command[COMMAND_LENGTH] = "";
	register char *s;
	register ret, o_errno;
	CURSOR	 Old;

	if ((s = getstring(COMMAND_LENGTH, command, "Выполнение команды SHELL",
			 "Введите команду SHELL")) != NULL) {
		strncpy (command, s, COMMAND_LENGTH);
		Old = VGetCursor ();
		VMove (0, 0);
		VSync ();
		VIClear ();
		VFlush ();
		s = strcmp (command, "") == 0 ? "/bin/sh" : command;
		TtyReset ();
		ret = system (s);
		o_errno = errno; /* VRedraw () портит errno */
		fprintf (stderr, "Нажмите 'Enter' для продолжения.");
		(void) getchar ();
		TtySet ();
		VSetCursor( Old );
		VRedraw ();
		if (ret == -1)
			error ("SHELL : %s", sys_errlist[o_errno]);
	}
}
Ejemplo n.º 2
0
void run_dos () {

	static char command[COMMAND_LENGTH] = "";
	register char *s;
	register ret, o_errno;
	CURSOR	 Old;

	if ((s = getstring(COMMAND_LENGTH, command, "Выполнение команды DOS",
			 "Введите команду DOS")) != NULL) {
		strncpy (command, s, COMMAND_LENGTH);
		_dos_setvect (0x1C, old_timer);
		Old = VGetCursor ();
		VMove (0, 0);
		VSync ();
		VIClear ();
		s = strcmp (command, "") == 0 ? "COMMAND.COM" : command;
		ret = system (s);
		o_errno = errno; /* VRedraw () портит errno */
		fprintf (stderr, "Нажмите 'Enter' для продолжения.");
		(void) getchar ();
		VSetCursor( Old );
		VRedraw ();
		_dos_setvect (0x1C, timer_int);
		old_addr = -1;
		if (ret == -1)
			error ("DOS : %s", sys_errlist[o_errno]);
	}
}
Ejemplo n.º 3
0
Archivo: help.c Proyecto: ralienpp/deco
void runhelp (char *name)
{
	register r, c, w, h;
	BOX *box;
	register struct helptab *p;
	struct help *hp;

	hp = findhelp (name);
	if (! hp)
		return;
	p = hp->htab;
	if (! p->str)
		inithelp (hp);
	w = 72;
	h = 21;
	r = 2;
	c = 4;

	box = VGetBox (r, c-1, h, w+2);                 /* save box */
	VStandOut ();
	VSetDim ();
	VFillBox (r, c-1, h, w+2, ' ');                 /* clear */
	VDrawBox (r, c, h, w);                          /* draw margins */
	VMPutString (r, c + (w-6) / 2, " Help ");       /* head */

	for (; p->row; ++p) {
		if (p->row >= h)
			continue;
		if (p->bold) {
			VSetBold ();
			VStandEnd ();
		}
		if (! p->col)
			VMPutString (r+p->row, c + (w-strlen(p->str))/2, p->str);
		else
			VMPutString (r+p->row, c + p->col, p->str);
		if (p->bold) {
			VSetDim ();
			VStandOut ();
		}
	}
	VStandEnd ();
	VSetNormal ();
	for (;;) {
		hidecursor ();
		VSync ();
		switch (KeyGet ()) {
		default:
			break;
		case cntrl (']'):       /* redraw screen */
			VRedraw ();
			continue;
		}
		break;
	}
	VUngetBox (box);
	VFreeBox (box);
}
Ejemplo n.º 4
0
Archivo: menu.c Proyecto: stqism/DEMOS
getmenu ()
{
	if (! menu[0].len)
		initmenu ();

	getboxes ();
	VMPutString (LINES-1, 0, "\0011\16      \17 2\16      \17 3\16      \17 4\16      \17 5\16      \17 6\16      \17 7\16      \17 8\16      \17 9\16      \01710\16Quit \17\2");
	for (;;) {
		drawhead (nmenu);
		for (;;) {
			drawmenu (&menu[nmenu]);
			hidecursor ();
			VSync ();
			switch (KeyGet ()) {
			default:
				VBeep ();
				continue;
			case cntrl (']'):          /* redraw screen */
				VRedraw ();
				continue;
			case cntrl ('M'):
				clrmenu (&menu[nmenu]);
				return (1);
			case cntrl ('J'):
				clrmenu (&menu[nmenu]);
				return (2);
			case cntrl ('C'):
			case cntrl ('['):
			case meta ('J'):        /* f0 */
				clrmenu (&menu[nmenu]);
				return (0);
			case meta ('r'):        /* right */
				clrmenu (&menu[nmenu]);
				if (! menu[++nmenu].mname)
					nmenu = 0;
				break;
			case meta ('l'):        /* left */
				clrmenu (&menu[nmenu]);
				if (--nmenu < 0) {
					for (nmenu=0; menu[nmenu].mname; ++nmenu);
					--nmenu;
				}
				break;
			case meta ('u'):        /* up */
				upmenu (&menu[nmenu]);
				continue;
			case meta ('d'):        /* down */
				downmenu (&menu[nmenu]);
				continue;
			}
			break;
		}
	}
}
Ejemplo n.º 5
0
dowin ()
{
	register c;
loop:
	Jmove (LINES-1, COLS-1);
	switch (c = getch ()) {
	default:
		goto loop;
	case cntrl (']'):
		VRedraw ();
		goto loop;
	case cntrl ('_'):
		if (! daemonflag)
			return;
		goto loop;
	case '0': case '1': case '2': case '3': case '4':
	case '5': case '6': case '7': case '8': case '9':
		curgroup = c - '0';
		curwin = 0;
		break;
	case '*':					/* step */
		step ();
		break;
	case meta ('h'): if (funchome)  (*funchome) (); goto loop;
	case meta ('e'): if (funcend)   (*funcend) ();  goto loop;
	case meta ('p'): if (funcpgup)  (*funcpgup) (); goto loop;
	case meta ('n'): if (funcpgdn)  (*funcpgdn) (); goto loop;
	case meta ('u'): if (funcup)    (*funcup) ();   goto loop;
	case meta ('d'): if (funcdown)  (*funcdown) (); goto loop;
	case meta ('l'): if (funcleft)  (*funcleft) (); goto loop;
	case meta ('r'): if (funcright) (*funcright) (); goto loop;
	case meta ('J'):
		curwin = 0;
		break;
	case meta ('A'): case meta ('B'):
	case meta ('C'): case meta ('D'):
	case meta ('E'): case meta ('F'):
	case meta ('G'): case meta ('H'):
	case meta ('I'):
		curwin = c - meta ('A') + 1;
		break;
	}
	funcclear ();
	pultwin (curgroup, curwin);
	goto loop;
}
Ejemplo n.º 6
0
/* local */
void editfnam (register char *name) {
register d;
register char *p;
char buf [80];
struct stat st;

	if (stat (name, &st) >= 0) {
		if ((st.st_mode & S_IFMT) != S_IFREG) {
			error ("Cannot edit special files");
			return;
		}
	} else {
		d = creat (name, 0644);
		if (d < 0) {
			error ("Cannot create %s", name);
			return;
		}
		close (d);
	}
	if (useredit) {
		strcpy (buf, editname);
		strcat (buf, " ");
		strcat (buf, name);
		VRestore ();
		syscmd (buf);
		VReopen ();
		VRedraw ();
		setdir (cur == left ? right : left, NULL);
		setdir (cur, NULL);
		return;
	}
	if ((d = open (name, 2)) < 0) {
		error ("Cannot open %s for writing", name);
		return;
	}
	/* skip directory name */
	for (p=name; *p; ++p);
	for (; p>=name && *p!='/'; --p);
	EDITFILE editfile(d, name, p+1);
	close (d);
}
Ejemplo n.º 7
0
void run_pult () {

	register ret, o_errno;
	struct wordb word;

	_dos_setvect (0x1C, old_timer);
	VIClear ();
	ret = spawnlp (P_WAIT, pult_file, pult_file, NULL);
	o_errno = errno; /* VRedraw () портит errno */
	VRedraw ();
	_dos_setvect (0x1C, timer_int);
	if (ret == -1)
		error ("%s : %s", pult_file, sys_errlist[o_errno]);
	else {
		ptinitialize();
		old_addr = -1;
		_disable ();
		int_tab [0].ticks = TICK_CHK;
		_enable ();
	}
}
Ejemplo n.º 8
0
/* main, menu */
void view (void) {
char buf [80];
register char *name = cur->d.cat[cur->d.curfile].name;
register d;

	if (userview) {
		strcpy (buf, viewname);
		strcat (buf, " ");
		strcat (buf, name);
		VRestore ();
		syscmd (buf);
		VReopen ();
		VRedraw ();
		setdir (cur == left ? right : left, NULL);
		setdir (cur, NULL);
		return;
	}
	if ((d = open (name, 0)) < 0) {
		error ("Cannot open %s", name);
		return;
	}
	VIEWFILE viewfile(d, name);
	close (d);
}
Ejemplo n.º 9
0
static int menuchoice ()
{
    int ch = 0;

    for (;;) {
        drawchoice (ch);
        hidecursor ();
        VSync ();
        switch (KeyGet ()) {
        default:
            VBeep ();
            continue;
        case cntrl (']'):       /* redraw screen */
            VRedraw ();
            continue;
        case cntrl ('['):
        case cntrl ('C'):
        case meta ('J'):        /* f0 */
            return (-1);
        case cntrl ('M'):
        case cntrl ('J'):
            return (ch);
        case ' ':
        case cntrl ('I'):
        case meta ('r'):        /* right */
            if (++ch >= cnum)
                ch = 0;
            continue;
        case meta ('b'):        /* backspace */
        case meta ('l'):        /* left */
            if (--ch < 0)
                ch = cnum-1;
            continue;
        }
    }
}
Ejemplo n.º 10
0
Archivo: ex.c Proyecto: shodanium/deco
static char *runudm (char *scale)
{
	/* user defined menu */
	register key, cm;
	BOX *box, *curbox;

	box = VGetBox (menurow-2, menucol-4, nm+4, menuwid+8);
	VSetDim ();
	VStandOut ();
	VFillBox (menurow-2, menucol-4, nm+4, menuwid+8, ' ');
	VDrawBox (menurow-1, menucol-1, nm+2, menuwid+2);
	mvcaddstr (menurow-1, 40, " User Menu ");
	printudm ();
	VSetNormal ();
	VStandEnd ();
	cm = 0;
	for (;;) {
		curbox = VGetBox (menurow+cm, menucol, 1, menuwid);
		VPrintBox (curbox);
		hidecursor ();
		VSync ();
		key = KeyGet ();
		VUngetBox (curbox);
		VFreeBox (curbox);
		switch (key) {
		default:
findmenu:
			if (key>0 && key<0200 && scale [key] < MENUSZ) {
				cm = scale [key];
				break;
			}
			VBeep ();
			continue;
		case meta ('A'):        key = 1;        goto findmenu;
		case meta ('B'):        key = 2;        goto findmenu;
		case meta ('C'):        key = 3;        goto findmenu;
		case meta ('D'):        key = 4;        goto findmenu;
		case meta ('E'):        key = 5;        goto findmenu;
		case meta ('F'):        key = 6;        goto findmenu;
		case meta ('G'):        key = 7;        goto findmenu;
		case meta ('H'):        key = 8;        goto findmenu;
		case meta ('I'):        key = 9;        goto findmenu;
		case cntrl (']'):          /* redraw screen */
			VRedraw ();
			continue;
		case cntrl ('M'):
		case cntrl ('J'):
			break;
		case cntrl ('C'):
		case cntrl ('['):
		case meta ('J'):           /* f0 */
			cm = -1;
			break;
		case meta ('u'):          /* up */
			if (--cm < 0)
				cm = nm-1;
			continue;
		case meta ('d'):          /* down */
			if (++cm >= nm)
				cm = 0;
			continue;
		}
		break;
	}
	VUngetBox (box);
	VFreeBox (box);
	if (cm >= 0 && um[cm].cex) {
		if (um[cm].menu)
			return (um[cm].cex);
		/* execute command from menu */
		expand (command, um[cm].cex, cur->cat[cur->curfile].name);
		cpos = strlen (command);
		if (command [0])
			execmd (um[cm].wait, um[cm].hist);
	}
	return ((char *) 0);
}
Ejemplo n.º 11
0
main (int argc, char **argv, char **envp) {
	register c;

	if (argc > 2) {
		outerr("Usage: deco [dirname]\n",0);
		exit (1);
	}
	outerr("Demos Commander, Copyright (C) 1989-1994 Serge Vakulenko\n",0);
	palette = dflt_palette;
	EnvInit (envp);
	uid = getuid ();
	gid = getgid ();
# ifdef GROUPS
	gidnum = getgroups (sizeof(gidlist)/sizeof(gidlist[0]), (unsigned int *)gidlist);
# endif
	ppid = getppid ();
	user = username (uid);
	group = groupname (gid);
	tty = ttyname (0);
	machine = getmachine ();
#if 0
	sigign();
#else
	signal(SIGTERM, SIG_IGN);
	signal(SIGQUIT, SIG_IGN);
	signal(SIGINT, SIG_IGN);
# ifdef SIGTSTP
	signal(SIGTSTP, SIG_IGN);
# endif
#endif
	init ();
//	inithome ();
	VClear ();
/* init class dir */
	if (argc > 1)
//		chdir (argv [1]);
		left = new dir(argv [1]);
	else
		left = new dir;
	right = new dir;
	left->d.basecol = 0;
	right->d.basecol = 40;
/*-----------*/
	initfile.read();
	if (uid == 0)
		palette.dimfg = 6;
	v.VSetPalette (palette.fg, palette.bg, palette.revfg, palette.revbg,
		palette.boldfg, palette.boldbg, palette.boldrevfg, palette.boldrevbg,
		palette.dimfg, palette.dimbg, palette.dimrevfg, palette.dimrevbg);
	setdir (left, ".");
	setdir (right, ".");
	left->chdir(left->d.cwd);
	cur = left;
	draw.draw(cur, left, right);
	for (;;) {
		if (! cmdreg)
			draw.drawcursor(cur);
//		cmd.drawcmd(cur, &left, &right);
		VSync ();
		c = KeyGet ();
		if (! cmdreg)
			draw.undrawcursor(cur);
		switch (c) {
		case '+':               /* select */
		case '-':               /* unselect */
			if (! cpos && ! cmdreg && ! cur->d.status) {
				if (c == '+')
					tagall ();
				else
					untagall ();
				draw.draw(cur, left, right);
				continue;
			}
		default:
//			if (c>=' ' && c<='~' || c>=0300 && c<=0376) {
//				if (cpos || c!=' ')
//					cmd.inscmd(c);
//				continue;
//			}
			VBeep ();
			continue;
//		case cntrl ('V'):       /* quote next char */
//			cmd.inscmd(quote ());
//			continue;
//		case cntrl ('J'):       /* insert file name */
//			if (! cmdreg && ! cur->status)
//				cmd.namecmd(cur);
//			continue;
//		case cntrl ('G'):
//			cmd.delcmd();
//			continue;
//		case meta ('b'):        /* backspace */
//			if (cpos) {
//				cmd.leftcmd();
//				cmd.delcmd();
//			}
//			continue;
		case cntrl ('O'):       /* set/unset command mode */
		case cntrl ('P'):       /* set/unset command mode */
			switchcmdreg ();
			if (! cmdreg)
				visualwin = 1;
			draw.draw(cur, left, right);
			continue;
		case cntrl ('M'):         /* return */
//			if (command [0]) {
//				cmd.exec(cur, &left, &right, 1, 1);
//				draw.draw(cur, &left, &right);
//				continue;
//			}
			if (cmdreg) {
				cmdreg = 0;
				if (! visualwin) {
					visualwin = 1;
					setdir (cur==left ? right : left, NULL);
					setdir (cur, NULL);
				}
				draw.draw(cur, left, right);
				continue;
			}
			execute ();
			continue;
		case cntrl (']'):       /* redraw screen */
			VRedraw ();
			continue;
//		case cntrl ('B'):        /* history */
//			if (! visualwin)
//				VClearBox (1, 0, LINES-2, 80);
//			cmd.histmenu(cur, &left, &right);
//			draw.draw(cur, &left, &right);
//			continue;
		case meta ('A'):        /* f1 */
			genhelp ();
			draw.draw(cur, left, right);
			continue;
		case meta ('B'):          /* f2 */
			udm.menu();
			draw.draw(cur, left, right);
			continue;
		case meta ('I'):        /* f9 */
			mymenu.runmenu (cur==left ? 'l' : 'r');
			draw.draw(cur, left, right);
			continue;
		case meta ('J'):        /* f0 */
		case cntrl ('C'):       /* quit */
			quit ();
			continue;
		case cntrl ('U'):       /* swap panels */
			swappanels ();
			draw.draw(cur, left, right);
			continue;
		case cntrl ('F'):       /* full screen */
			fullscreen ();
			draw.draw(cur, left, right);
			continue;
		case cntrl ('^'):       /* cd / */
			directory (0, 'r');
			if (! cur->d.status)
				draw.drawdir(cur, 1, left, right);
			continue;
		case cntrl ('\\'):      /* cd $HOME */
			directory (0, 'o');
			if (! cur->d.status)
				draw.drawdir(cur, 1, left, right);
			continue;
//		case cntrl ('Y'):       /* clear line */
//			command [cpos = 0] = 0;
//			continue;
//		case cntrl ('X'):       /* next history */
//			cmd.nextcmd();
//			continue;
//		case cntrl ('E'):       /* prev history */
//			cmd.prevcmd();
//			continue;
//		case cntrl ('S'):       /* char left */
//		case cntrl ('A'):       /* char left */
//			cmd.leftcmd();
//			continue;
//		case cntrl ('D'):       /* char right */
//			cmd.rightcmd();
//			continue;
		case cntrl ('I'):       /* tab */
			if (cmdreg) {}
//				if (command [cpos])
//					cmd.endcmd();
//				else
//					cmd.homecmd();
			else {
				switchpanels ();
				if (fullwin) {
					draw.drawbanners();
					draw.drawdir(cur, 0, left, right);
					break;
				}
			}
			continue;
		case cntrl ('W'):       /* double width */
			if (! cmdreg) {
				setdwid ();
				draw.draw(cur, left, right);
			}
			continue;
//		case meta ('G'):        /* f7 */
//			makedir ();
//			draw.draw(cur, &left, &right);
//			continue;
		case meta ('h'):        /* home */
		case meta ('e'):        /* end */
		case meta ('u'):        /* up */
		case meta ('d'):        /* down */
		case meta ('l'):        /* left */
		case meta ('r'):        /* right */
		case meta ('n'):        /* next page */
		case meta ('p'):        /* prev page */
		case cntrl ('K'):       /* find file */
		case cntrl ('R'):       /* reread catalog */
		case cntrl ('T'):       /* tag file */
		case meta ('C'):        /* f3 */
		case meta ('D'):        /* f4 */
		case meta ('E'):        /* f5 */
		case meta ('F'):        /* f6 */
		case meta ('H'):        /* f8 */
		case cntrl ('L'):       /* status */
			if (cmdreg || cur->d.status) {}
//				docmdreg (c);
			else
				doscrreg (c);
			continue;
		}
	}
}
Ejemplo n.º 12
0
static char *editstring (int r, int c, int w, char *str, int cp)
{
    register key, k;
    int firstkey = 1;

    if (cp) {
        for (cp=0; str[cp]; ++cp);
        firstkey = 0;
    }
    for (; ; firstkey=0) {
        VClearBox (r, c, 1, w);
        VMPutString (r, c, str);
        VMove (r, c+cp);
        VSync ();
        switch (key = KeyGet ()) {
        default:
            if (key<' ' || (key>'~' && key<0300) || key>0377) {
                VBeep ();
                continue;
            }
            if (firstkey) {
                str[0] = key;
                str[1] = 0;
                cp = 1;
                continue;
            }
            for (k=cp; str[k]; ++k)
                SWAP (key, str[k]);
            str [k] = key;
            str [w] = str [k+1] = 0;
        /* fall through */
        case meta ('r'):        /* right */
            if (str [cp]) {
                ++cp;
                if (cp >= w)
                    cp = w-1;
            }
            continue;
        case meta ('l'):        /* left */
            if (--cp < 0)
                cp = 0;
            continue;
        case cntrl (']'):       /* redraw screen */
            VRedraw ();
            continue;
        case cntrl ('C'):
        case cntrl ('['):
        case meta ('J'):        /* f0 */
            return (0);
        case cntrl ('M'):
        case cntrl ('J'):
            return (str);
        case cntrl ('I'):
            if (str [cp])
                while (str [++cp]);
            else
                cp = 0;
            continue;
        case meta ('h'):        /* home */
            cp = 0;
            continue;
        case meta ('e'):        /* end */
            while (str [cp])
                ++cp;
            continue;
        case meta ('b'):        /* back space */
            if (cp) {
                for (k=cp--; str[k]; ++k)
                    str[k-1] = str[k];
                str [k-1] = 0;
            }
            continue;
        case cntrl ('G'):       /* delete */
            if (! str [cp])
                continue;
            for (k=cp+1; str[k]; ++k)
                str[k-1] = str[k];
            str [k-1] = 0;
            continue;
        case cntrl ('Y'):       /* clear line */
            str [cp = 0] = 0;
            continue;
        }
    }
}