void CCommandLineDisplay::InputEnter (void) // InputEnter // // Invoke input { AppendHistory(m_sInput); Output(m_sInput, INPUT_COLOR); ClearInput(); ClearHint(); }
void Shell(COMMAND commands[],char *help[]) { char cmdline[STRING],argv[MAXCMD],argp[MAXCMD]; int i,opcja,n=0,j,ok,len,count=0,itmp; while(commands[n].command!=NULL) n++; for( ; ; ) { /* Interactive mode */ fprintf(stdout,"[%d]MP> ",count); fflush(stdout); argv[0]=argp[0]=0; cmdline[0]=0; if(!fgets(cmdline,sizeof(cmdline)-1,stdin)) { fprintf(stderr,"Read error ! [%s]\n",cmdline); return; } i=0; while(cmdline[i] && isspace(cmdline[i])) i++; (void)sscanf(cmdline+i,"%s",argv); len=strlen(argv); if(len==0) continue; i+=len; while(cmdline[i] && isspace(cmdline[i])) i++; (void)sscanf(cmdline+i,"%[^\n]\n",argp); AppendHistory(count,argv,argp); count++; if(strcmp(argv,"history")==0) { if(strlen(argp)>0) { itmp=atoi(argp); ok=0; for(i=0 ; i<CountHist ; i++) { if(HistTable[i]->count==itmp) { ok=1; strcpy(argv,HistTable[i]->napis); strcpy(argp,HistTable[i]->opt); fprintf(stdout,"[%d] (HISTORY [%d]) MP> %s %s\n", count-1,itmp,argv,argp); break; } } if(!ok) { fprintf(stderr,"No such number\n"); continue; } } else { fprintf(stdout,"\t\t<<< HISTORY >>>\n"); for(i=0 ; i<CountHist ; i++) { fprintf(stdout,"[%d] %s %s\n",HistTable[i]->count, HistTable[i]->napis, HistTable[i]->opt); if(((i+1)%20)==0) pause(); } fprintf(stdout,"\n"); continue; } } if(strcmp(argv,"man")==0) { fprintf(stdout,"\n\t\t<<< BUILT-IN COMMANDS >>\n" "exit \t\t- leave shell\n" "ls \t\t- current directory listing\n" "history [nr]\t\t- display entered commands or execute [nr] if given\n" "batch \t\t- run commands from file\n" "!comd \t\t- run a shell command comd\n" "man \t\t- display all available help\n" "sys comd \t\t- run shell command comd in script\n"); fprintf(stdout,"<<< NEXT - ENTER q - QUIT >>> "); if(getchar()!='q') { if(help!=NULL) PrintAllHelp(commands,help,n); } else (void)getchar(); continue; } if(strcmp(argv,"help")==0 || strcmp(argv,"?")==0 || strcmp(argv,"h")==0) { ok=0; if(strlen(argp)>0) { if(strcmp(argp,"help")==0 || strcmp(argp,"?")==0) { ok=1; fprintf(stderr,"help [arg] or ? [arg] -- info about the arg command\n"); } else if(strcmp(argp,"batch")==0) { ok=1; fprintf(stderr,"batch file -- run script file\n"); } else if(strcmp(argp,"sys")==0) { ok=1; fprintf(stderr,"sys comd -- run shell command comd (from a script only)\n"); } else if(strcmp(argp,"ls")==0) { ok=1; fprintf(stderr,"ls adir -- listing of directory adir, regexp allowed\n"); } else if(strcmp(argp,"history")==0) { ok=1; fprintf(stderr,"history [nr] -- list entered commands\n" "\t\t or if [nr] given - run command No [nr]\n"); } else for(j=0 ; j<n ; j++) if(strcmp(commands[j].command,argp)==0) { ok=1; fprintf(stdout,"%-10s - ",commands[j].command); if(help!=NULL) fprintf(stdout,"%s ",help[j]); fprintf(stdout,"\n"); break; } if(!ok) fprintf(stdout,"Unknown command : %s\n",argp); } else { fprintf(stdout,"%s\n",firsthelp); } continue; } if(strcmp(argv,"exit")==0) { DeleteHistory(); if(prn==1) fprintf(stdout,"<<< LEAVING MP SHELL >>>\n"); Quit(""); break; } if(strcmp(argv,"ls")==0) { ls(argp); continue; } if(strcmp(argv,"batch")==0) { char *newargv[MAXCMD]; int i,argc; for(i=0 ; i<MAXCMD ; i++) newargv[i]=NULL; StrToArgv(argp,newargv,&argc); if(Batch(commands,newargv[0],newargv)==-1) fprintf(stderr,"Missing file %s !\n",argp); FreeArgv(newargv,argc); continue; } if(strcmp(argv,"!")==0) { if(system(argp)==-1) fprintf(stderr,"Error executing system command !\n"); continue; } if(argv[0]=='!') { argv[0]=' '; (void)strcat(argv," "); (void)strcat(argv,argp); if(system(argv)==-1) fprintf(stderr,"Error executing system command !\n"); continue; } opcja=-1; /* Opcje zewnetrzne */ for(i=0 ; i<n ; i++) if(strcmp(commands[i].command,argv)==0) { opcja=i; (*commands[i].func)(argp); break; } if(opcja==-1) { char name[STRING],*newargv[MAXCMD],buffor[STRING]; int argc,i; for(i=0 ; i<MAXCMD ; i++) newargv[i]=NULL; sprintf(buffor,"%s %s",argv,argp); StrToArgv(buffor,newargv,&argc); if(Batch(commands,newargv[0],newargv)==-1) { /* Polecenia w biezacym katologu */ int index=0,ok=0; for( ; ; index++) { if(makePathName(name,index)==NULL) break; strcat(name,newargv[0]); if(Batch(commands,name,newargv)!=-1) { ok=1; break; } } if(ok==0) fprintf(stderr,"MP: Unknown command %s or bad script path %s\n", argv,BatchPath); } FreeArgv(newargv,argc); } } }
void Starter::exited(int status) { ClassAd *jobAd = NULL; bool jobAdNeedsFree = true; if (s_claim && s_claim->ad()) { // real jobs in the startd have claims and job ads, boinc and perhaps others won't jobAd = s_claim->ad(); jobAdNeedsFree = false; } else { // Dummy up an ad int now = (int) time(0); jobAd = new ClassAd(); jobAd->SetMyTypeName("Job"); jobAd->SetTargetTypeName("Machine"); jobAd->Assign(ATTR_CLUSTER_ID, now); jobAd->Assign(ATTR_PROC_ID, 1); jobAd->Assign(ATTR_OWNER, "boinc"); jobAd->Assign(ATTR_Q_DATE, (int)s_birthdate); jobAd->Assign(ATTR_JOB_PRIO, 0); jobAd->Assign(ATTR_IMAGE_SIZE, 0); jobAd->Assign(ATTR_JOB_CMD, "boinc"); MyString gjid; gjid.formatstr("%s#%d#%d#%d", get_local_hostname().Value(), now, 1, now); jobAd->Assign(ATTR_GLOBAL_JOB_ID, gjid); } // First, patch up the ad a little bit jobAd->Assign(ATTR_COMPLETION_DATE, (int)time(0)); int runtime = time(0) - s_birthdate; jobAd->Assign(ATTR_JOB_REMOTE_WALL_CLOCK, runtime); int jobStatus = COMPLETED; if (WIFSIGNALED(status)) { jobStatus = REMOVED; } jobAd->Assign(ATTR_JOB_STATUS, jobStatus); AppendHistory(jobAd); WritePerJobHistoryFile(jobAd, true /* use gjid for filename*/); if (jobAdNeedsFree) { delete jobAd; } // Make sure our time isn't going to go off. cancelKillTimer(); // Just for good measure, try to kill what's left of our whole // pid family. if (daemonCore->Kill_Family(s_pid) == FALSE) { dprintf(D_ALWAYS, "error killing process family of starter with pid %u\n", s_pid); } // Now, delete any files lying around. ASSERT( executeDir() ); cleanup_execute_dir( s_pid, executeDir() ); #if defined(LINUX) if( param_boolean( "GLEXEC_STARTER", false ) ) { cleanupAfterGlexec(); } #endif }