示例#1
0
static void disallowoverlap(IDTEM * head){
	if(head == NULL){return ;}else{
		disallowoverlap(head->next);
		disallowoverlap(head->forward);
	}
	if(head->overlap == DISALLOW){
		if(head->forward != NULL){
		}else{
			head->forward = malloc(sizeof(IDTEM));
			memset(head->forward,0,sizeof(IDTEM));
			head->forward->backward = head ;
			head->forward->name = malloc(strlen(head->name)+1);
			strcpy(head->forward->name ,head->name);
			head->forward->overlap = UNSPECIFIED ;
		}
		if(head->previous != NULL)
			head->previous->next = head->forward ;
		if(head->next != NULL)
			head->next->previous = head->forward ;
		head->forward->previous = head->previous ;
		head->forward->next = head->next ;

		head->previous = head->next = NULL ;
		setcur(head->forward);
	}
	if(head->overlap != UNSPECIFIED){
		head->overlap -= 1;
	}
}
示例#2
0
文件: kontext.cpp 项目: wschweer/qped
void KontextListList::delete_cur_context()
	{
	if (empty())
		return;
      unsigned idx = cur();
      delete *cc;
      erase(cc);
      if (idx >= size())
            idx = 0;
      setcur(idx);
	}
示例#3
0
void clrscreen()
{
    /* Declare the variables to be used */
    union REGS  inreg,outreg;               // input,output registers

    setcur(0,0);
    inreg.h.ah = 10;
    inreg.h.bh = 0;
    inreg.x.cx = 2048;
    inreg.h.al = ' ';
    int86 (0x10,&inreg,&outreg);
} // End of clrscreen().
示例#4
0
文件: edit.c 项目: DavidKeaton/bvi
/* mode: ('A') append
 *       ('R') replace one or more different characters
 *       ('r') replace 1 character
 *       ('i') insert characters
 *       ('a') insert after cursor
 * a precount can be used
 *
 * for insert and append we misuse the undo buffer for the inserted
 * characters (for "." command)
 */
off_t edit(int mode)
{
    int ch, ch1;
    size_t len;
    off_t count = 0L;
    off_t buffer = BUFFER;
    off_t psize;
    if(!filesize && mode == 'i') {
        mode = 'A';
    }
    if(mode != 'A' && mode != 'a') {
        if(current - mem >= filesize) {
            beep();
            return 0L;
        }
    }
    if(precount < 1) {
        precount = 1;
    }
    len = strlen(rep_buf);
    if(mode == 'r' && current + precount > maxpos) {
        beep();
        rep_buf[len] = '\0';
        return 0L;
    }
    if(alloc_buf(buffer, &undo_buf) == 0L) {
        rep_buf[len] = '\0';
        return 0L;
    }
    switch(mode) {
        case 'A':
            edits = U_APPEND;
            break;
        case 'R':
            edits = U_EDIT;
            smsg("REPLACE MODE");
            break;
        case 'r':
            edits = U_EDIT;
            smsg("REPLACE 1 CHAR");
            break;
        case 'a':
        case 'i':
            edits = U_INSERT;
            smsg("INSERT MODE");
            break;
    }
    undo_start = current;
    while((ch = vgetc()) != ESC) {
        ch &= 0xff;
        rep_buf[len++] = ch;
        if(ch == '\t') {
            toggle();
            setcur();
            continue;
        }
        if(ch == KEY_BACKSPACE || ch == ASCII_DEL || ch == BVICTRL('H')) {
            if(count > 0) {
                len--;
                count--;
                if(mode == 'A' || mode == 'a' || mode == 'i') {
                    filesize--;
                    maxpos--;
                }
                current--;
                cur_back();
                setcur();
            } else {
                beep();
            }
            continue;
        }
        if(loc == HEX) {
            if(isxdigit(ch)) {
                mvaddch(y, x + 1, ' ');
                mvaddch(y, x, ch);
                do {
                    ch1 = vgetc() & 0xff;
                    if(ch1 == ESC) {
                        mvaddch(y, x, ' ');
                        current--;
                        cur_back();
                        goto escape;
                    }
                    if(!isxdigit(ch1)) {
                        beep();
                        ch1 = -1;
                    }
                } while(ch1 == -1);
                rep_buf[len++] = ch1;
                mvaddch(y, x + 1, ch1);
                sprintf(tmpbuf, "%c%c", ch, ch1);
                sscanf(tmpbuf, "%2x", &ch);
            } else {
                beep();
                len--;
                goto wrong;
            }
        } else {            /*** ASCII - Bereich ***/
            if(isprint(ch)) {
                mvaddch(y, x, ch);
            } else {
                beep();
                goto wrong;
            }
        }
        curpos = current++;
        if(mode == 'i' || mode == 'a') {
            memmove(current, curpos, maxpos - curpos);
        }
        if(mode == 'A' || mode == 'i' || mode == 'a') {
            maxpos++;
            filesize++;
            /* NEU
            undo_buf[count++] = ch;
            */
            count++;
        } else {
            undo_buf[count++] = *curpos;
        }
        if(count == buffer) {
            buffer += BUFFER;
            if(alloc_buf(buffer, &undo_buf) == 0L) {
                rep_buf[len] = '\0';
                return count;
            }
        }
        *curpos = (char)ch;
        cur_forw(0);
        statpos();
        if(mode == 'i' || mode == 'a') {
            repaint();
        } else {
            lineout();
        }
        setcur();
        if(filesize > memsize - 2L) {
            if(enlarge(100L)) {
                break;
            }
        }
        if((mode != 'A' && mode != 'a') && curpos == maxpos - 1) {
            break;
        }
        if(mode == 'r') {
            break;
        }
wrong:
        continue;
    }
    rep_buf[len++] = ESC;
    rep_buf[len] = '\0';
    if(!count) {
        goto escape;
    }
    if(precount > 1) {
        switch(mode) {
            case 'i':
            case 'a':
            case 'A':
                psize = count * (precount - 1);
                if(filesize + psize > memsize - 2L) {
                    if(enlarge(psize + 100L)) {
                        return count;
                    }
                }
                if(psize + count > buffer) {
                    if(alloc_buf(psize + count, &undo_buf) == 0L) {
                        return count;
                    }
                }
                if(mode == 'i' || mode == 'a') {
                    memmove(current + psize, current, maxpos - curpos);
                }
                /* NEU
                undo_pos = undo_buf + count - 1L;
                */
                while(--precount) {
                    /* NEU
                    memcpy(undo_pos + 1L, undo_pos - count + 1L, count);
                    undo_pos += count;
                    */
                    memcpy(curpos + 1L, curpos - count + 1L, count);
                    curpos += count;
                }
                filesize += psize;
                count += psize;
                maxpos += psize;
                undo_count += psize;
                current = curpos + 1L;
                setpage(current);
                repaint();
                break;
            case 'R':
                if(current + count * (precount - 1) > maxpos) {
                    break;
                }
                psize = count;
                while(--precount) {
                    memcpy(undo_buf + psize, curpos + 1L, count);
                    psize += count;
                    memcpy(curpos + 1L, curpos - count + 1L, count);
                    curpos += count;
                }
                count = psize;
                setpage(++curpos);
                repaint();
                break;
            case 'r':
                while(--precount) {
                    undo_buf[count++] = *(++curpos);
                    *curpos = (char)ch;
                    cur_forw(0);
                    statpos();
                    lineout();
                }
                break;
        }
    }
    cur_back();
escape:
    setcur();
    smsg("");
    return(count);
}
示例#5
0
static FILE *alsaSelectPcmOut(struct modlistentry *entry)
{
	char *t;
	int card, device;
	if (!strcmp(entry->name, "default.dev"))
	{
		strcpy(alsaCardName, "default");
	} else if (!strcmp(entry->name, "custom.dev"))
	{
		int mlTop=mlDrawBox();
		char str[DEVICE_NAME_MAX+1];
		unsigned int curpos;
		unsigned int cmdlen;
		int insmode=1;
		unsigned int scrolled=0;

		strcpy(str, alsaCardName);

		displaystr(mlTop+1, 5, 0x0b, "Give me something to crunch!!", 29);
		displaystr(mlTop+3, 5, 0x0b, "-- Finish with enter, abort with escape --", 32);

		curpos=strlen(str);
		cmdlen=strlen(str);
		setcurshape(1);

		while (1)
		{
			uint16_t key;
			displaystr(mlTop+2, 5, 0x8f, str+scrolled, plScrWidth-10);
			setcur(mlTop+2, 5+curpos-scrolled);

			while (!ekbhit())
				framelock();
			key=egetch();

			if ((key>=0x20)&&(key<=0x7f))
			{
				if (insmode)
				{
					if ((cmdlen+1)<sizeof(str))
					{
						memmove(str+curpos+1, str+curpos, cmdlen-curpos+1);
						str[curpos++]=key;
						cmdlen++;
					}
				} else if (curpos==cmdlen)
				{
					if ((cmdlen+1)<(sizeof(str)))
					{
						str[curpos++]=key;
						str[curpos]=0;
						cmdlen++;
					}
				} else
					str[curpos++]=key;
			} else switch (key)
			{
			case KEY_ESC:
				setcurshape(0);
				return NULL;
			case KEY_LEFT:
				if (curpos)
					curpos--;
				break;
			case KEY_RIGHT:
				if (curpos<cmdlen)
					curpos++;
				break;
			case KEY_HOME:
				curpos=0;
				break;
			case KEY_END:
				curpos=cmdlen;
				break;
			case KEY_INSERT:
				{
					insmode=!insmode;
					setcurshape(insmode?1:2);
				}
				break;
			case KEY_DELETE:
				if (curpos!=cmdlen)
				{
					memmove(str+curpos, str+curpos+1, cmdlen-curpos);
					cmdlen--;
				}
				break;
			case KEY_BACKSPACE:
				if (curpos)
				{
					memmove(str+curpos-1, str+curpos, cmdlen-curpos+1);
					curpos--;
					cmdlen--;
				}
				break;
			case _KEY_ENTER:
				strcpy(alsaCardName, str);
				setcurshape(0);	
				goto out;
			}
			while ((curpos-scrolled)>=(plScrWidth-10))
				scrolled+=8;
			while (((signed)curpos-(signed)scrolled)<0)
				scrolled-=8;
		}
	} else {
		if (!(t=strchr(entry->name, ':')))
			return NULL;
		card=atoi(t+1);
		if (!(t=strchr(entry->name, ',')))
			return NULL;
		device=atoi(t+1);
		snprintf(alsaCardName, sizeof(alsaCardName), "plughw:%d,%d", card, device);
		snprintf(alsaMixerName, sizeof(alsaMixerName), "hw:%d", card);
	}
out:
/* #ifdef ALSA_DEBUG */
	fprintf(stderr, "ALSA: Selected card %s\n", alsaCardName);
/* #endif */
	{
		if (customfileref!=0xffffffff)
		{
			struct moduleinfostruct mi;
			mdbGetModuleInfo(&mi, customfileref);
			snprintf(mi.modname, sizeof(mi.modname), "%s", alsaCardName);
			mdbWriteModuleInfo(customfileref, &mi);
		}

	}
	return NULL;
}
示例#6
0
文件: docomm.c 项目: dank101/4.2BSD
docommand() {
	register char	*p;
	register int	i;
	register ADDR	addr, bkaddr;
	struct proct 	*procp;
	char s[4];
	
	cntval = 1;
	adrflg = 0;
	errflg = 0;

	if (scallf) {
		doscall();
		setcur(1);
		lastcom = NOCOM;
		return;
	}
	
	if (reflag) {  /* search for regular expression */
		dore();
		lastcom = PRCOM;
		return;
	}
	
	if (cmd == '\0') {
		if (integ != 0 && var[0] != '\0') {
			error("Invalid command (1)");
			return;
		}
		if (integ != 0) { /* print line number */
			ffind(integ);
			fprint();
			lastcom = PRCOM;
			return;
		}
		if (var[0] != 0) {
			printf("Unexpected null command\n");
			return;
		}
	}
		
	switch (cmd) {
	
	case 'Y':
		debug = !debug;
		break;

	case 'V':
		version();
		break;

	case 'M':
		if (args[0]) {
			setmap(args);
		} else {
			printmap("? map", &txtmap);
			printmap("/ map", &datmap);
		}
		break;

	case 'x':
		printregs();
		break;

	case 'X':
		printpc();
		break;

	case 'a':
		if (integ) {
			cpstr(args, "l\n");
		} else if (proc[0]) {
			cpall(args, "T\n");
		} else {
			error("Bad arguments");
			break;
		}
		goto setbrk;
		break;	

	case 'l':
		setcur(1);
		lastcom = NOCOM;
		break;
		
	case 'T':
		prfrx(1);
		lastcom = NOCOM;
		break;
		
	case 't':
		prframe();
		lastcom = NOCOM;
		break;
		
	case 'e':
		p = args;
		if (*p == '\0') {
#ifndef FLEXNAMES
			printf("%.16s() in \"%s\"\n",
				curproc()->pname, curfile);
#else
			printf("%s() in \"%s\"\n",
				curproc()->pname, curfile);
#endif
			break;
		}

		while (*p != '\0')
			if (*p++ == '.') goto l1;
		/* argument is procedure name */
		procp = findproc(args);
		if ((procp->pname[0] != '\0') && (procp->sfptr != badfile)) {
			finit(adrtofilep(procp->paddr)->sfilename);
			ffind(procp->lineno);
		}
		else printf("Can't find %s\n", args);
#ifndef FLEXNAMES
		printf("%.16s() in \"%s\"\n", curproc()->pname, curfile);
#else
		printf("%s() in \"%s\"\n", curproc()->pname, curfile);
#endif
		lastcom = PRCOM;
		break;
		
	l1:	/* argument is filename */
		finit(args);
		printf("\"%s\"\n", curfile);
		lastcom = PRCOM;
		break;
		
	case 'p':
		if (integ) ffind(integ);
		fprint();
		lastcom = PRCOM;
		break;
		
	case 'q':
		exit(0);
		
	case 'w':
		if (integ) ffind(integ);
		i = fline;
		fback(WINDOW/2);
		fprintn(WINDOW);
		ffind(i);
		lastcom = PRCOM;
		break;
		
	case 'Q':
		prdebug();
		break;

	case 'z':
		if (integ) ffind(integ);
		fprintn(WINDOW);
		lastcom = PRCOM;
		break;

	case '-':
		fback(integ ? integ : 1);
		fpargs();
		lastcom = PRCOM;
		break;

	case '+':
		fforward(integ ? integ : 1);
		fpargs();
		lastcom = PRCOM;
		break;

	case '\n':
		switch (lastcom) {
		case PRCOM:
			fforward(1);
			fprint();
			break;
		case DSCOM:
			oaddr += oincr ? oincr : typetosize(otype, WORDSIZE);
			printf("0x%x/ ", oaddr);
			dispf((ADDR) oaddr, odesc,
			    oclass == N_RSYM ? oclass : N_GSYM, otype, 0, 0, DSP);
			break;
		case DSICOM:
			dot += oincr;
			prisploc();
			dispi(dot, odesc, N_GSYM, 0, 0);
			break;
		}
		break;

	case '\004':
		if (!isatty(0))
			exit(0);
		switch (lastcom) {
		case PRCOM:
			fforward(1);
			printf("\b");
			fprintn(WINDOW);
			lastcom = PRCOM;
			break;
		case DSICOM:
			printf("\b");
			for (i=0; i<WINDOW; i++) {
				dot += oincr;
				prisploc();
				if (dispi(dot, odesc, N_GSYM, 0, 0) == -1)
					break;
			}
			break;
		case DSCOM:
			printf("\b");
			for (i=0; i<WINDOW; i++) {
				oaddr += oincr ?
					oincr : typetosize(otype, WORDSIZE);
				printf("0x%x/ ", oaddr);
				if (dispf((ADDR) oaddr, odesc,
					oclass == N_RSYM ? oclass :
					N_GSYM, otype, 0, 0, DSP) == -1)
					break;
			}
			break;
		default:
			printf("\n");
		}
		break;

	case 'r':
		if (args[0] == '\0') getargs();
	case 'R':
		signo = 0;
		cpstr(oldargs, args);
		if (debug) error("calling dopcs");
		if (integ) cntval = integ;
		if (!executing) {
			executing = TRUE;
			if (integ) cntval = integ;
			dopcs('r');
			executing = FALSE;
		}
		if (debug) error("exiting dopcs");
		bkaddr = -1;
		goto f1;

	case 'c':
		signo = 0;
	case 'C':
		if (proc[0] != '\0' || integ != 0) {
			setdot();
			if (dot == -1) {
				error("Cannot set temporary breakpoint");
				break;
			}
			dopcs('b');
			bkaddr = dot;
		} else
			bkaddr = -1;
		integ = atoi(args);

f1:		if (debug) error("calling dopcs");
		if (integ) cntval = integ;
		dopcs('c');
		if (debug) error("exiting dopcs");
		if (bkaddr != -1) {
			ADDR dotsave;
			dotsave = dot;
			dot = bkaddr;
			dopcs('d');
			dot = dotsave;
		}
		if (!signo) printf("Breakpoint");
		printf(" at\n");
		setcur(1);
		lastcom = NOCOM;
		break;
		
	case 'S':
	case 's':
		signo = 0;
		integ = atoi(args);
		singstep(integ ? integ : 1, cmd);
		if (signo) printf("\n");
		setcur(1);
		lastcom = NOCOM;
		break;
		
	case 'g':
		if (pid == 0  ||  signo) {
			error("Not stopped at breakpoint");
			break;
		}
		setdot();
		if (dot == -1) {
			error("Bad address");
			break;
		}
		adrflg = 1;
		integ = atoi(args);
		if (integ) cntval = integ;
		dopcs('c');
		if (!signo) printf("Breakpoint");
		printf(" at\n");
		setcur(1);
		lastcom = NOCOM;
		break;

	case 'k':
		if (scallx) {
	 		userpc = dot = *(ADDR *)(((ADDR)&u)+PC) = pcs;
	 		*(ADDR *)(((ADDR)&u)+FP) = fps;
	 		*(ADDR *)(((ADDR)&u)+AP) = aps;
			if (bkpts)
				bkpts->flag = flagss;
			scallx = 0;
			error("Procedure killed");
			longjmp(env, 0);
		} else {
			dopcs('k');
			printf("\n");
			lastcom = NOCOM;
			break;
		}

	case 'B':
		prbkpt();
		break;

	case 'b':
	setbrk:
		if (proc[0] == '\0' && integ == 0) {
			integ = fline;
		}
		setdot();
		if (dot == -1 || dot == 0) {
			error("Cannot set breakpoint");
			break;
		}
		dopcs('b');
		s[0] = ' ';
		s[1] = cmd;
		s[2] = '\n';
		s[3] = 0;
		s[1] = cmd;
		printbkpt(s, adrtoprocp(dot), dot);
		break;
		
	case 'd':
		if (proc[0] == '\0' && integ == 0) {
			idbkpt();
			break;
		}
		setdot();
		if (dot == -1) {
			error("Non existent breakpoint");
			break;
		}
		dopcs('d');
		break;
		
	case 'D':
		dabkpt();
		error("All breakpoints deleted");
		break;

	case 'm':
		addr = varaddr(proc[0] ? proc : curproc()->pname, var);
		printf("stopped with value %d\n", monex(addr, 'd'));
		setcur(1);
		lastcom = NOCOM;
		break;
		
	case '?':
		if (!(var[0] == '.' && var[1] == '\0'))
			setdot();
		if (errflg) {
			error(errflg);
			break;
		}
		prisploc();
		dispi(dot, args[0] ? args : "i", N_GSYM, 0, 0);
		lastcom = DSICOM;
		break;

	case '/':
		if (var[0] == '.' && var[1] == '\0') {
			if (integ == 0) integ = oaddr;
			dispf((ADDR) integ, args[0] ? args : odesc,
			    oclass == N_RSYM ? oclass : N_GSYM, otype, 0, 0, DSP);
			oaddr = integ;
		} else
		if (integ && (var[0] == '\0')) {
			dispf((ADDR) integ, args, N_GSYM, 0, 0, 0, DSP);
			oaddr = integ;
			cpstr(odesc, args);
			oclass = N_GSYM;
			otype = 0;
		} else
			dispvar(proc, var, args);
		lastcom = DSCOM;
		break;
		
	case '=':
		if (var[0] == '\0') {
			if (proc[0]) {
				addr = getaddr(proc, integ);
				if (addr == -1) {
					error("Unknown address");
					break;
				}
			}
			else
				addr = integ;
			dispf(addr, args[0] ? args : "x", 0, -1, 0, 0, DSP);
		} else 
			findvar(proc, var, args[0] ? args : "x", 2);
		break;

	case '!':
		if (var[0] == '\0')
			addr = getaddr(proc, integ);
		else
			addr = varaddr(proc, var);
		if (addr == -1) 
			error("Unknown variable");
		else {
			if (number(args[0]) || eqany(args[0], ".-")) {
				char *p;
				double atof();
				union {
					struct{
						int w1, w2;
					} ww;
					double d;
				} dbl;

				p = (args[0] == '-') ? args+1 : args;
				for (; *p != '.' && *p != 'e'; p++) {
					if (!number(*p)) goto l2;
				}
				dbl.d = atof(args);
				putval(addr, 'd', dbl.ww.w1);
				if (typetodesc(sl_type,0)[0] == 'g')
					putval(addr+WORDSIZE, 'd', dbl.ww.w2);
				break;
			}
l2:			if (percentflag)
				*(ADDR *)(((ADDR)&u)+addr) = argvalue(args);
			else if (sl_class == N_RSYM && addr < 16)
				putreg(addr,typetodesc(sl_type,subflag)[0],
						argvalue(args));
			else
				putval(addr,typetodesc(sl_type,subflag)[0],
						argvalue(args));
		}
		lastcom = NOCOM;
		break;

	case '"':
		printf(args);
		break;
	}
}
示例#7
0
static int addvar(int kind,NODE* idnode){
	IDTEM* tid = ((IDTEM*)idnode->value.type_p)->cur ;
	NODE* head = idnode->parent ;//VarDec
	switch(tid->overlap){
		IDTEM* newid ;
		case ALLOW:
		newid = malloc(sizeof(IDTEM));
		memcpy(newid,tid,sizeof(IDTEM));
		newid->cur = newid ;
		if(newid->next != NULL)
			newid->next->previous = newid ;
		if(newid->previous != NULL)
			newid->previous->next = newid ;
		tid->next = tid->previous = NULL;
		tid->backward = newid ;
		newid->forward = tid ;
		tid = newid ;
		setcur(newid);
		case UNSPECIFIED:
		tid->overlap = DISALLOW ;
		tid->kind = kind ;
		switch(kind){  
			case VARIABLE_KIND:
			tid->u.t = head->attr ;	
			break ;

			case STRUCTUREFIELD_KIND:
			if(head->next_sister == NULL){
			}else if(head->next_sister->name == terminal_name[ASSIGNOP - WHILE]){
				error("initialize a field of a struct",15,idnode->line);
				break ;
			}else if(head->next_sister->name == terminal_name[LB - WHILE]){
			}else{
				perror("unknown error: impossible nest_sister in addvar");
				exit(EXIT_FAILURE);
			}
			tid->u.structurefieldtype.structure = idnode->attr ;
			tid->u.structurefieldtype.t =  head->attr;
			{
				Type* structuretype = idnode->attr ;
				if(structuretype->u.structure.field == NULL){
					structuretype->u.structure.field = malloc(sizeof(FieldList));
					memset(structuretype->u.structure.field,0,sizeof(FieldList));
					structuretype->u.structure.field->type = tid->u.structurefieldtype.t ;
					structuretype->u.structure.field->name = tid->name ;
				}else{
					FieldList* fieldlist = structuretype->u.structure.field ;
					if(fieldlist->tail != NULL){
						fieldlist = fieldlist->tail ;
					}
					fieldlist->tail = malloc(sizeof(FieldList));
					memset(fieldlist->tail,0,sizeof(FieldList));
					fieldlist->tail->type = tid->u.structurefieldtype.t ;
					fieldlist->tail->name = tid->name ;
				}
			}
			break ;

			default:
			perror("unknown error :unknown kind");
			exit(EXIT_FAILURE);
			break ;
		}
		break;
		
		
		case DISALLOW:
		if(kind == VARIABLE_KIND){
			error("Symbol redeclared as variable",3,head->child_head->line);
		}else if(kind == STRUCTUREFIELD_KIND){
			error("Symbol redeclared as variable in a struct defination",15,head->child_head->line);
		}
		break;
		
		default:
		perror("unknown error :unknown overlap state");
		exit(EXIT_FAILURE);
		break;
	}
	idnode->value.type_p = tid ;
	
}