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(); }
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; }
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); }
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); }