Exemple #1
0
void
startpcs(void)
{
	if ((pid = fork()) == 0) {
		pid = getpid();
		msgpcs("hang");
		doexec();
		exits(0);
	}

	if (pid == -1)
		error("can't fork");
	child++;
	sprint(procname, "/proc/%d/mem", pid);
	corfil = procname;
	msgpcs("waitstop");
	bpwait();
	if (adrflg)
		rput(cormap, mach->pc, adrval);
	while (rdc() != EOR)
		;
	reread();
}
Exemple #2
0
int
command(char *buf, int defcom)
{
	char	*reg;
	char	savc;
	char	*savlp=lp;
	char	savlc = lastc;
	char	savpc = peekc;
	static char lastcom = '=', savecom = '=';

	if (defcom == 0)
		defcom = lastcom;
	if (buf) {
		if (*buf==EOR)
			return(FALSE);
		clrinp();
		lp=buf;
	}
	do {
		adrflg=expr(0);		/* first address */
		if (adrflg){
			dot=expv;
			ditto=expv;
		}
		adrval=dot;

		if (rdc()==',' && expr(0)) {	/* count */
			cntflg=TRUE;
			cntval=expv;
		} else {
			cntflg=FALSE;
			cntval=1;
			reread();
		}

		if (!eol(rdc()))
			lastcom=lastc;		/* command */
		else {
			if (adrflg==0)
				dot=inkdot(dotinc);
			reread();
			lastcom=defcom;
		}
		switch(lastcom) {
		case '/':
		case '=':
		case '?':
			savecom = lastcom;
			acommand(lastcom);
			break;

		case '>':
			lastcom = savecom; 
			savc=rdc();
			if (reg=regname(savc))
				rput(correg, reg, dot);
			else	
				error("bad variable");
			break;

		case '!':
			lastcom=savecom;
			shell(); 
			break;

		case '$':
			lastcom=savecom;
			printdollar(nextchar()); 
			break;

		case ':':
			if (!executing) { 
				executing=TRUE;
				subpcs(nextchar());
				executing=FALSE;
				lastcom=savecom;
			}
			break;

		case 0:
			prints(DBNAME);
			break;

		default: 
			error("bad command");
		}
		flushbuf();
	} while (rdc()==';');
	if (buf == 0)
		reread();
	else {
		clrinp();
		lp=savlp;
		lastc = savlc;
		peekc = savpc;
	}

	if(adrflg)
		return dot;
	return 1;
}
Exemple #3
0
int main(int argc, char *argv[]){

	char buff[N], *param; //1024
	int j = 0, nb;

	if( argc != 2){

		printf("Usage: %s <server host>\n", argv[0]);
		exit(1);
	}

	printf("commands\n");
	do{

		memset(buff, '\0', N);
		
		prompt();	
		gets(buff);
	
		param = strchr(buff,' '); // param <- commands
		if (param) {
    			*param=0;
    			param++;
  		}

		for(j = 0; j < NB_CMDS; j++)
			if( !strcmp(buff, commandes[j]))
				break;	
			
		switch(j){

 			case(OPEN):	if(connection) printf("already connected\n");
					else myconnect(argv[1]);
					break;
		
			case(GET):	if(!connection) printf("Not connected!\n"); 
					else get(param);
					break;

			case(PUT):	if(!connection) printf("Not connected!\n"); 
					else put(param);
					break;
				
			case(MGET):	if(!connection) printf("Not connected!\n"); 
					else mget(param);
					break;		
			case(MPUT):	if(!connection) printf("Not connected!\n"); 
					else mput(param);
					break;
			
			case(CD):	if(!connection) printf("NoT connecteD!\n"); 
					else cd(param);
					break;
			
			case(LCD):	lcd(param);
					break;
							
			case(MGET_):	if(!connection) printf("Not connected!\n"); 
					else mget_(param);
					break;		
			case(MPUT_):	if(!connection) printf("Not connected!\n"); 
					else mput_(param);
					break;
			

 			case(DIR):	if(!connection) printf("Not connecte!\n"); 
					else dir();
					break;
			case(LDIR):
					ldir();
					break;
			case(RGET):	if(!connection) printf("Not connected!\n"); 
					else rget(param);
					break;		
			case(RPUT):	if(!connection) printf("Not connected!\n"); 
					else rput(param);
					break;		

			//case (HELP):	aide();
			//		break;

			default:	printf("%s command invalid\n", buff);
					printf("Commands are as follows\n");
					printf(" get : To Get A file from Server\n");
					printf(" put : To Put A file to Server\n");
					printf(" cd : change Server's Current Directory\n");
					printf(" lcd : Change Client's current Directory\n");
					printf(" mget : To Get multiple files from Server\n");
					printf(" mput : To put multiple files from Server\n");
					printf(" dir : List the Server's current Directory\n");
					printf(" ldir : List the Client's current Directory\n");
					printf(" mget_ : Put files with wildcard support\n");
					printf("mput_ : get files with wildcard support\n");
					printf("rget : Get a directory recursively\n");
					printf("rput : Put a Directory recursiovely\n");
					break;
		}
		
	}
	while(1);
 	
return(0);
}
Exemple #4
0
runpcs(int runmode, int keepnote)
{
	int rc;
	BKPT *bkpt;

	rc = 0;
	if (adrflg)
		rput(cormap, mach->pc, dot);
	dot = rget(cormap, mach->pc);
	flush();
	while (loopcnt-- > 0) {
		if(loopcnt != 0)
			printpc();
		if (runmode == SINGLE) {
			bkpt = scanbkpt(dot);
			if (bkpt) {
				switch(bkpt->flag){
				case BKPTTMP:
					bkpt->flag = BKPTCLR;
					break;
				case BKPTSKIP:
					bkpt->flag = BKPTSET;
					break;
				}
			}
			runstep(dot, keepnote);
		} else {
			if ((bkpt = scanbkpt(rget(cormap, mach->pc))) != 0) {
				execbkpt(bkpt, keepnote);
				keepnote = 0;
			}
			setbp();
			runrun(keepnote);
		}
		keepnote = 0;
		delbp();
		dot = rget(cormap, mach->pc);
		/* real note? */
		if (nnote > 0) {
			keepnote = 1;
			rc = 0;
			continue;
		}
		bkpt = scanbkpt(dot);
		if(bkpt == 0){
			keepnote = 0;
			rc = 0;
			continue;
		}
		/* breakpoint */
		if (bkpt->flag == BKPTTMP)
			bkpt->flag = BKPTCLR;
		else if (bkpt->flag == BKPTSKIP) {
			execbkpt(bkpt, keepnote);
			keepnote = 0;
			loopcnt++;	/* we didn't really stop */
			continue;
		}
		else {
			bkpt->flag = BKPTSKIP;
			--bkpt->count;
			if ((bkpt->comm[0] == EOR || command(bkpt->comm, ':') != 0)
			&&  bkpt->count != 0) {
				execbkpt(bkpt, keepnote);
				keepnote = 0;
				loopcnt++;
				continue;
			}
			bkpt->count = bkpt->initcnt;
		}
		rc = 1;
	}
	return(rc);
}