Esempio n. 1
0
mloop()
{
	while (!quit) {
		if (incmd) {
			docmd();
		} else if (wwcurwin->ww_state != WWS_HASPROC) {
			if (!wwcurwin->ww_keepopen)
				closewin(wwcurwin);
			setcmd(1);
			if (wwpeekc() == escapec)
				(void) wwgetc();
			error("Process died.");
		} else {
			register struct ww *w = wwcurwin;
			register char *p;
			register n;

			if (wwibp >= wwibq)
				wwiomux();
			for (p = wwibp; p < wwibq && *p != escapec;
			     p++)
				;
			if ((n = p - wwibp) > 0) {
				if (!w->ww_ispty && w->ww_stopped)
					startwin(w);
				(void) write(w->ww_pty, wwibp, n);
				wwibp = p;
			}
			if (wwpeekc() == escapec) {
				(void) wwgetc();
				setcmd(1);
			}
		}
	}
}
Esempio n. 2
0
/**
 *
 * @brief parse la chaine courante de l'interpreteur à la recherche d'une commande, et execute cette commande.
 * @param inter l'interpreteur qui demande l'analyse
 * @return CMD_OK_RETURN_VALUE si la commande s'est exécutée avec succès (0)
 * @return CMD_EXIT_RETURN_VALUE si c'est la commande exit. Dans ce cas, le programme doit se terminer. (-1)
 * @return CMD_UNKOWN_RETURN_VALUE si la commande n'est pas reconnue. (-2)
 * @return tout autre nombre (eg tout nombre positif) si erreur d'execution de la commande
 */
int execute_cmd(interpreteur inter, memory memory) {
    DEBUG_MSG("input '%s'", inter->input);
    char cmdStr[MAX_STR];
    memset( cmdStr, '\0', MAX_STR );

    /* gestion des commandes vides, commentaires, etc*/
    if(strlen(inter->input) == 0
            || sscanf(inter->input, "%s", cmdStr) == 0
            || strlen(cmdStr) == 0
            || cmdStr[0] == '#') { /* ligne commence par # => commentaire*/
        return CMD_OK_RETURN_VALUE;
    }

    /*on identifie la commande avec un premier appel à get_next_token*/
    char * token = get_next_token(inter);

    if(strcmp(token, "exit") == 0) {
        return exitcmd(inter);
    }

    if(strcmp(token, "load") == 0) {
        return loadcmd(inter, memory);
    }
    else if(strcmp(token, "debug") == 0) {
        return debugcmd(inter);
    }
    else if(strcmp(token, "disp") == 0) {
        return dispcmd(inter, memory);
    }
    else if(strcmp(token, "assert") == 0) {
        return assertcmd(inter, memory);
    }
    else if(strcmp(token, "set") == 0) {
        return setcmd(inter, memory);
    }
    else if(strcmp(token, "resume") == 0) {
        return resumecmd(inter);
    }
    else if(strcmp(token, "disasm") == 0) {
        return disasmcmd(inter, memory);
    }
    else if(strcmp(token, "run") == 0) {
        return runcmd(inter, memory);
    }
    else if(strcmp(token, "step") == 0) {
        return stepcmd(inter, memory);
    }
    else if(strcmp(token, "break") == 0) {
        return breakcmd(inter, memory);
    }
    WARNING_MSG("Unknown Command : '%s'\n", cmdStr);
    return CMD_UNKOWN_RETURN_VALUE;
}
Esempio n. 3
0
void prn(char s[])
{
	if( s[0]==8 )
	{
		if(gx)
		{
			t[--ti]=0;
			gx--;
			setfillstyle(0,0);
			bar(gx*6, gy*10+2,(gx+1)*6, (gy+2)*10);
			return;
		}
		beep();
		ti=0;
		return;
	}
	if(s[0]=='\t')
	{
		for(int i=0;i<8;i++)
		prn(" ");
	}
	if(s[0]==13)
	{
		gy++,gx=-1;
		t[ti]=0;
		strcpy(buf[bufi++],t);
		buf[bufi-1][ti]=0;
		if(bufi==47)bufi=0;
		setcmd();
		ti=0;
	}
	else	outtextxy(gx*6,gy*10,s),t[ti++]=s[0];
	gx++;
	if(gx>=105)
	{
		gy++;gx=0;
		t[ti]=0;
		strcpy(buf[bufi++],t);
		if(bufi==47)bufi=0;
		ti=0;
	}
	if(gy>=48) scroll();
}
Esempio n. 4
0
void mood(void)
{
	static uint8_t command;
	static uint16_t i=0;
	static uint16_t r=MAXPWM,g=MAXPWM/2,b=MAXPWM/42;
	static uint16_t r_dir=R_SPEED, g_dir=G_SPEED, b_dir=B_SPEED;
	static bool loop=true;

	command=' ';	// default command: none

	/* Load the next command byte from the USB to USART transmit buffer */
	if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer)))
		  command=RingBuffer_Remove(&USBtoUSART_Buffer);
	switch (command) {
		case 'r': if (r >=1000) r-=1000; break;
		case 'R': if (r <= MAXPWM-1000) r+=1000; break;
		case 'g': if (g >=1000) g-=1000; break;
		case 'G': if (g <= MAXPWM-1000) g+=1000; break;
		case 'b': if (b >=1000) b-=1000; break;
		case 'B': if (b <= MAXPWM-1000) b+=1000; break;
		case 'h': loop=true; helloworld(); break;
		case '#': loop=setcmd(&r,&g,&b); break;
		case 'm': loop=true;
		default:
			if (++i > DELAY) {
				if(loop) {
					if (r >= (MAXPWM - R_SPEED)) r_dir = -R_SPEED;
					if (r <= R_SPEED) r_dir = R_SPEED;
					if (g >= (MAXPWM - G_SPEED)) g_dir = -G_SPEED;
					if (g <= G_SPEED) g_dir = G_SPEED;
					if (b >= (MAXPWM - B_SPEED)) b_dir = -B_SPEED;
					if (b <= B_SPEED) b_dir = B_SPEED;
					r += r_dir; g += g_dir; b += b_dir;
				}
				setcolor(r,g,b);
				//if (lowvoltage()) {	// red light and stop
				//	setcolor(MAXPWM,0,0);
				//	for(;;);
				//}
				i=0;
			}
	}
}
Esempio n. 5
0
void
docmd(void)
{
	int c;
	struct ww *w;
	char out = 0;

	while (!out && !quit) {
		if ((c = wwgetc()) < 0) {
			if (terse)
				wwsetcursor(0, 0);
			else {
				wwputs("Command: ", cmdwin);
				wwcurtowin(cmdwin);
			}
			do
				wwiomux();
			while ((c = wwgetc()) < 0);
		}
		if (!terse)
			wwputc('\n', cmdwin);
		switch (c) {
		default:
			if (c != escapec)
				break;
		case 'h': case 'j': case 'k': case 'l':
		case 'y': case 'p':
		case ctrl('y'):
		case ctrl('e'):
		case ctrl('u'):
		case ctrl('d'):
		case ctrl('b'):
		case ctrl('f'):
		case ctrl('s'):
		case ctrl('q'):
		case ctrl('['):
			if (selwin == 0) {
				error("No window.");
				continue;
			}
		}
		switch (c) {
		case '1': case '2': case '3': case '4': case '5':
		case '6': case '7': case '8': case '9':
			if ((w = window[c - '1']) == 0) {
				error("%c: No such window.", c);
				break;
			}
			setselwin(w);
			if (checkproc(selwin) >= 0)
				 out = 1;
			break;
		case '%':
			if ((w = getwin()) != 0)
				setselwin(w);
			break;
		case ctrl('^'):
			if (lastselwin != 0) {
				setselwin(lastselwin);
				if (checkproc(selwin) >= 0)
					out = 1;
			} else
				error("No previous window.");
			break;
		case 'c':
			if ((w = getwin()) != 0)
				closewin(w);
			break;
		case 'w':
			c_window();
			break;
		case 'm':
			if ((w = getwin()) != 0)
				c_move(w);
			break;
		case 'M':
			if ((w = getwin()) != 0)
				movewin(w, w->ww_alt.t, w->ww_alt.l);
			break;
		case 's':
			if ((w = getwin()) != 0)
				c_size(w);
			break;
		case 'S':
			if ((w = getwin()) != 0)
				sizewin(w, w->ww_alt.nr, w->ww_alt.nc);
			break;
		case 'y':
			c_yank();
			break;
		case 'p':
			c_put();
			break;
		case ':':
			c_colon();
			break;
		case 'h':
			(void) wwwrite(selwin, "\b", 1);
			break;
		case 'j':
			(void) wwwrite(selwin, "\n", 1);
			break;
		case 'k':
			(void) wwwrite(selwin, "\033A", 2);
			break;
		case 'l':
			(void) wwwrite(selwin, "\033C", 2);
			break;
		case ctrl('e'):
			wwscroll(selwin, 1);
			break;
		case ctrl('y'):
			wwscroll(selwin, -1);
			break;
		case ctrl('d'):
			wwscroll(selwin, selwin->ww_w.nr / 2);
			break;
		case ctrl('u'):
			wwscroll(selwin, - selwin->ww_w.nr / 2);
			break;
		case ctrl('f'):
			wwscroll(selwin, selwin->ww_w.nr);
			break;
		case ctrl('b'):
			wwscroll(selwin, - selwin->ww_w.nr);
			break;
		case ctrl('s'):
			stopwin(selwin);
			break;
		case ctrl('q'):
			startwin(selwin);
			break;
		case ctrl('l'):
			wwredraw();
			break;
		case '?':
			c_help();
			break;
		case ctrl('['):
			if (checkproc(selwin) >= 0)
				out = 1;
			break;
		case ctrl('z'):
			wwsuspend();
			break;
		case 'q':
			c_quit();
			break;
		/* debugging stuff */
		case '&':
			if (debug) {
				c_debug();
				break;
			}
		default:
			if (c == escapec) {
				if (checkproc(selwin) >= 0) {
					(void) write(selwin->ww_pty,
						&escapec, 1);
					out = 1;
				}
			} else {
				if (!terse)
					wwbell();
				error("Type ? for help.");
			}
		}
	}
	if (!quit)
		setcmd(0);
}
Esempio n. 6
0
/**
*
* @brief parse la chaine courante de l'interpreteur à la recherche d'une commande, et execute cette commande.
* @param inter l'interpreteur qui demande l'analyse
* @return CMD_OK_RETURN_VALUE si la commande s'est exécutée avec succès (0)
* @return CMD_EXIT_RETURN_VALUE si c'est la commande exit. Dans ce cas, le programme doit se terminer. (-1)
* @return CMD_UNKOWN_RETURN_VALUE si la commande n'est pas reconnue. (-2)
* @return tout autre nombre (eg tout nombre positif) si erreur d'execution de la commande
*/
int execute_cmd(interpreteur inter, registre r,mem *memory,bp * bpa) {
    DEBUG_MSG("input '%s'", inter->input);
    char cmdStr[MAX_STR];

    memset( cmdStr, '\0', MAX_STR );
    int b=1;





    /* gestion des commandes vides, commentaires, etc*/
    if(strlen(inter->input) == 0
            || sscanf(inter->input, "%s", cmdStr) == 0
            || strlen(cmdStr) == 0
            || cmdStr[0] == '#') { /* ligne commence par # => commentaire*/
        return CMD_OK_RETURN_VALUE;
    }

    /*on identifie la commande avec un premier appel à get_next_token*/
    char * token = get_next_token(inter);

    if(strcmp(token, "exit") == 0) {
        return exitcmd(inter);
    }
    else if(strcmp(token, "test") == 0) {
        return testcmd(inter);
    }
    /*else if(strcmp(token, "test2") == 0) { //fonction pour essayer des test rapidement (fichiers tests marchent pas sur mac)
        
        int i=0;
        int n=(*memory)->nseg;
        for(i=0;i<n;i++){
            printf("nom segment %s \n",(*memory)->seg[i].name );
        }


        // int i=0; //vaddr32 c=0;
        char x[20];
        strcpy( x, "$pc" );
       printf("is_in_text %d %d %d\n",IsInText(*memory,0x2090),IsInText(*memory,0x3003), IsInText(*memory,0x5000) );

        printf("%d\n",convert(x));


        //  printf("memory %p\n", *memory );
        // printf("nombre de segments %u\n", (*memory)->nseg );
        // for(i=0;i<(int)(*memory)->nseg;i++){

        //printf("adresse segment 0x %"PRIu32" +%d \n",(*memory)->seg->start,t*i); // *memory)->seg->start est un unint32
        //  c=(int)(*memory)->seg->start._64;
        //printf("%08x\n",c );


        //printf(" %"PRIu32"\n",c );
        //printf("adresse segment 0x%.8s  \n",itoa(c,16));
        //  }
        //int a=350;


        //setRegisterValue(r,31,a);
        //printf("%d\n", getRegisterValueByStr(r, "$31"));
        // printf("%s\n",itoa(a,16) );
        // printf("%d\n",is_hexa("0x33AB") );
    }*/
    else if(strcmp(token, "disp") == 0) {
        return dispcmd(inter,r,*memory);
    }

    else if(strcmp(token, "set") == 0) {
        return setcmd(inter,r,*memory);
    }

    else if(strcmp(token, "load") == 0) {
        return loadcmd(inter,memory,r);
    }

    else if(strcmp(token, "assert") == 0) {
        return assertcmd(inter,r, *memory);
    }

    else if(strcmp(token, "debug") == 0) {
        debugcmd(inter);
        return CMD_OK_RETURN_VALUE;
    }

    else if(strcmp(token, "resume") == 0) {
        resumecmd(inter);
        return CMD_OK_RETURN_VALUE;
    }

    else if (strcmp(token,"disasm")==0) {
        return disasmcmd(inter,*memory);
    }
    else if (strcmp(token,"step")==0) {
        return stepinto(inter,r,*memory,&b,bpa,1);
    }

   /* else if (strcmp(token,"step")==0) {
        return True_step(inter,r,*memory, &b, bpa);
    }*/

    
     else if (strcmp(token,"run")==0) {
         run(inter,r,*memory,*bpa);
         return CMD_OK_RETURN_VALUE;
    }
    else if (strcmp(token,"break")==0) {
        breakcmd(inter,*memory, bpa);
       // DEBUG_MSG("bpa apres break dans emulMips.c %p",*bpa); 
        return CMD_OK_RETURN_VALUE;
    }
else {
    WARNING_MSG("Unknown Command : '%s'\n", cmdStr);
    return CMD_UNKOWN_RETURN_VALUE;
}
}