Exemple #1
0
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;
		}
	}
}
Exemple #2
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;
}
Exemple #3
0
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);
}
Exemple #4
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;
        }
    }
}
Exemple #5
0
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);
}
Exemple #6
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;
		}
	}
}
Exemple #7
0
void doscrreg (int c) {
	switch (c) {
	case meta ('h'):          /* home */
		cur->d.curfile = cur->d.topfile = 0;
		break;
	case meta ('e'):          /* end */
		cur->d.curfile = cur->d.num - 1;
		cur->d.topfile = cur->d.num - PAGELEN (cur);
		if (cur->d.topfile < 0)
			cur->d.topfile = 0;
		break;
	case meta ('u'):          /* up */
		if (cur->d.curfile <= 0)
			return;
		if (cur->d.curfile > cur->d.topfile) {
			--cur->d.curfile;
			return;
		}
		cur->d.topfile = --cur->d.curfile;
		break;
	case meta ('d'):          /* down */
		if (cur->d.curfile >= cur->d.num-1)
			return;
		if (cur->d.topfile + PAGELEN (cur) - 1 > cur->d.curfile) {
			++cur->d.curfile;
			return;
		}
		cur->d.topfile = ++cur->d.curfile - PAGELEN (cur) + 1;
		break;
	case meta ('l'):          /* left */
		if (cur->d.curfile < H) {
			if (cur->d.topfile <= 0)
				return;
			cur->d.curfile -= cur->d.topfile;
			cur->d.topfile = 0;
			break;
		}
		cur->d.curfile -= H;
		if (cur->d.topfile <= cur->d.curfile)
			return;
		cur->d.topfile -= H;
		if (cur->d.topfile <= 0) {
			cur->d.curfile -= cur->d.topfile;
			cur->d.topfile = 0;
		}
		break;
	case meta ('r'):          /* right */
		if (cur->d.curfile + H < cur->d.num) {
			cur->d.curfile += H;
			if (cur->d.topfile + PAGELEN (cur) > cur->d.curfile)
				return;
			cur->d.topfile += H;
			break;
		}
		if (cur->d.topfile + PAGELEN (cur) < cur->d.num) {
			cur->d.curfile = cur->d.num-1;
			cur->d.topfile += H;
			break;
		}
		if ((cur->d.curfile - cur->d.topfile) / H <
		    (cur->d.num - cur->d.topfile - 1) / H)
			cur->d.curfile = cur->d.num-1;
		return;
	case meta ('n'):          /* next page */
		if (cur->d.topfile + PAGELEN (cur) >= cur->d.num) {
			cur->d.curfile = cur->d.num-1;
		} else if (cur->d.topfile + 2 * PAGELEN (cur) >= cur->d.num) {
			cur->d.curfile = cur->d.num-1;
			cur->d.topfile = cur->d.num - PAGELEN (cur);
		} else {
			cur->d.curfile += PAGELEN (cur);
			cur->d.topfile += PAGELEN (cur);
		}
		break;
	case meta ('p'):          /* prev page */
		if (cur->d.topfile == 0) {
			cur->d.curfile = 0;
		} else {
			cur->d.curfile -= PAGELEN (cur);
			if (cur->d.topfile > cur->d.curfile)
				cur->d.topfile -= PAGELEN (cur);
			if (cur->d.topfile < 0) {
				cur->d.curfile -= cur->d.topfile;
				cur->d.topfile = 0;
			}
		}
		break;
	case cntrl ('K'):         /* find file */
		findname ();
		break;
	case cntrl ('R'):         /* reread catalog */
		reread (cur);
		break;
	case cntrl ('T'):         /* tag file */
		if ((cur->d.cat[cur->d.curfile].mode & S_IFMT) == (unsigned) S_IFREG) {
			cur->d.cat[cur->d.curfile].tag ^= 1;
			counttag (cur);
		}
		if (cur->d.curfile < cur->d.num-1) {
			/* move down */
			++cur->d.curfile;
			if (cur->d.topfile + PAGELEN (cur) - 1 < cur->d.curfile)
				cur->d.topfile = cur->d.curfile - PAGELEN (cur) + 1;
		}
		break;
//	case meta ('C'):          /* f3 */
//		if ((cur->d.cat[cur->d.curfile].mode & S_IFMT) != (unsigned) S_IFREG)
//			return;
//		view ();
//		draw.draw(cur, &left, &right);
//		return;
//	case meta ('D'):          /* f4 */
//		edit ();
//		setdir (cur==&left ? &right : &left, NULL);
//		setdir (cur, NULL);
//		draw.draw(cur, &left, &right);
//		return;
	case meta ('E'):          /* f5 */
		copy ();
		draw.draw(cur, left, right);
		return;
//	case meta ('F'):          /* f6 */
//		renmove ();
//		draw.draw(cur, &left, &right);
//		return;
//	case meta ('H'):          /* f8 */
//		mydelete ();
//		draw.draw(cur, &left, &right);
//		return;
	case cntrl ('L'):         /* status */
		setstatus ();
		draw.draw(cur, left, right);
		return;
	}
	draw.drawdir(cur, 1, left, right);
}
Exemple #8
0
//extern char *home;

extern char *username (), *groupname ();

static struct KeyMap keymap [] = {
	"kl",           0,              meta ('l'),
	"kr",           0,              meta ('r'),
	"ku",           0,              meta ('u'),
	"kd",           0,              meta ('d'),
	"kN",           0,              meta ('n'),
	"kP",           0,              meta ('p'),
	"kh",           0,              meta ('h'),
	"kH",           0,              meta ('e'),
	"@7",           0,              meta ('e'),
	"kI",           0,              cntrl ('T'),
	"k.",           0,              cntrl ('G'),
	"kD",           0,              cntrl ('G'),
	"kE",           0,              meta ('h'),
	"kS",           0,              meta ('e'),
	"k1",           0,              meta ('A'),
	"k2",           0,              meta ('B'),
	"k3",           0,              meta ('C'),
	"k4",           0,              meta ('D'),
	"k5",           0,              meta ('E'),
	"k6",           0,              meta ('F'),
	"k7",           0,              meta ('G'),
	"k8",           0,              meta ('H'),
	"k9",           0,              meta ('I'),
	"k0",           0,              meta ('J'),
	"k;",           0,              meta ('J'),
Exemple #9
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;
        }
    }
}