예제 #1
0
/*
 * CheckJobs
 *
 * arguments: none
 *
 * returns: none
 *
 * Checks the status of running jobs.
 */
void
CheckJobs()
{
  bgjobL* job = bgjobs;
  int wait_settings;
  wait_settings = WNOHANG | WUNTRACED | WCONTINUED;
  while (job != NULL){
    int status;
    pid_t pid = waitpid(-1, &status, wait_settings);
    if (pid > 0){
      if (pid == job->pid){
	if (WIFCONTINUED(status)){
	  job->status = "Running";
	}
	else{
	  job->status = "Done";
	  printf("[%d]   %s                 %s\n", job->jid, job->status, job->name);
	  DeleteJob(job->pid);
	}
      }
    }
    job = job->next;
  }
} /* CheckJobs */
예제 #2
0
void CGuiMPIJobDlg::OnRemoveBtn() 
{
    char str[CONSOLE_STR_LENGTH+1];
    int error;
    char key[100];
    char value[CONSOLE_STR_LENGTH];
    char *pszJob;
    int index;

    CString jobstr;

    UpdateData();

    if ((m_job.GetLength() < 1) || (m_sock == INVALID_SOCKET))
	return;

    index = m_job_list.GetCurSel();

    jobstr = m_job;
    jobstr.Delete(0, jobstr.Find('@')+1);
    jobstr = jobstr.Left(jobstr.Find(' '));

    strcpy(str, "dbfirst jobs");
    if (WriteString(m_sock, str) == SOCKET_ERROR)
    {
	error = WSAGetLastError();
	sprintf(value, "Error: JobsToFile, writing '%s' failed, %d\n", str, error);
	Translate_Error(error, str);
	strcat(value, str);
	MessageBox(value, "Connection Error");
	Disconnect();
	return;
    }
    if (ReadStringTimeout(m_sock, str, MPD_DEFAULT_TIMEOUT))
    {
	if (strcmp(str, "DBS_FAIL") == 0)
	{
	    //printf("no jobs on %s\n", host);
	    //WriteString(m_sock, "done");
	    //easy_closesocket(m_sock);
	    return;
	}
	if (strcmp(str, "DBS_END") == 0)
	{
	    //printf("no jobs on %s\n", host);
	    //WriteString(m_sock, "done");
	    //easy_closesocket(m_sock);
	    return;
	}
	GetKeyAndValue(str, key, value);
	pszJob = strstr(value, "@")+1;

	if (strcmp(pszJob, jobstr) == 0)
	{
	    //printf("%s : %s\n", key, value);
	    DeleteJob(m_sock, pszJob);
	    SaveKeyToDelete(key);
	}
    }
    else
    {
	//printf("Error, JobsToFile, unable to read the jobs on %s.\n", host);
	//WriteString(m_sock, "done");
	//easy_closesocket(m_sock);
	return;
    }

    while (true)
    {
	strcpy(str, "dbnext jobs");
	if (WriteString(m_sock, str) == SOCKET_ERROR)
	{
	    error = WSAGetLastError();
	    sprintf(value, "writing '%s' failed, %d\n", str, error);
	    Translate_Error(error, str);
	    strcat(value, str);
	    MessageBox(value, "Connection Error");
	    Disconnect();
	    return;
	}
	if (ReadStringTimeout(m_sock, str, MPD_DEFAULT_TIMEOUT))
	{
	    if (strcmp(str, "DBS_FAIL") == 0)
	    {
		//printf("unexpected error reading the next job\n");
		//WriteString(m_sock, "done");
		//easy_closesocket(m_sock);
		return;
	    }
	    if (strcmp(str, "DBS_END") == 0)
	    {
		break;
	    }
	    GetKeyAndValue(str, key, value);
	    pszJob = strstr(value, "@")+1;
	    if (strcmp(pszJob, jobstr) == 0)
	    {
		//printf("%s : %s\n", key, value);
		DeleteJob(m_sock, pszJob);
		SaveKeyToDelete(key);
	    }
	}
	else
	{
	    //printf("Unable to read the jobs on %s.\n", host);
	    //WriteString(m_sock, "done");
	    //easy_closesocket(m_sock);
	    return;
	}
    }

    if (s_pKeyList == NULL)
    {
	sprintf(value, "The specified job, %s, does not exist on %s\n", pszJob, m_host);
	MessageBox(value, "Note");
    }
    KeyNode *n;
    while (s_pKeyList)
    {
	n = s_pKeyList;
	s_pKeyList = s_pKeyList->next;
	DeleteKey(m_sock, n->key);
	delete n;
    }

    if (m_job_list.GetCount() > 1)
    {
	OnRefreshBtn();
	if (index == m_job_list.GetCount())
	    index--;
	m_job_list.SetCurSel(index);
	GetJobDetails();
    }
    else
    {
	OnRefreshBtn();
    }
}
예제 #3
0
/*
 * RunBuiltInCmd
 *
 * arguments:
 *   commandT *cmd: the command to be run
 *
 * returns: none
 *
 * Runs a built-in command.
 */
static void
RunBuiltInCmd(commandT* cmd)
{
  if(strcmp(cmd->argv[0],"cd")==0){
    changeWorkingDir(cmd->argv[1]); 
  }
  /* "pwd" command*/ 
  else if(strcmp(cmd->argv[0],"pwd")==0){
   char *dir = getCurrentWorkingDir();
   printf("%s\n",dir);   
   free(dir);
  }
  else if(!strcmp(cmd->argv[0],"jobs")){
   bgjobL* job = bgjobs;
   while (job != NULL){
    if (!strcmp(job->status, "Running")){
      printf("[%d]   %s                 %s &\n", job->jid, job->status, job->name);
    }
    else{
      printf("[%d]   %s                 %s\n", job->jid, job->status, job->name);
    }
    job = job->next;
  }
 }
  else if (!strcmp(cmd->argv[0],"fg")){
    bgjobL* job;
    if(cmd->argv[1] != NULL){
     job = GetJobFromJid(atoi(cmd->argv[1]));
    }
    else{
      job = GetMRJob();
    }
    
    //bring bg process to foreground
    if (job != NULL){
      tcsetpgrp(job->pid, STDIN_FILENO);
      crpid = job->pid;
      crName = job->name;
      DeleteJob(job->pid);
      kill(-crpid, SIGCONT);
      int status = 0;
      waitpid(crpid, &status, WUNTRACED);
      crpid = 0;
      crName = NULL;
    }
  }
  else if (!strcmp(cmd->argv[0],"bg")){
    bgjobL* job;
    if(cmd->argv[1] != NULL){
     job = GetJobFromJid(atoi(cmd->argv[1]));
     if (job != NULL){
      kill(job->pid, SIGCONT);
      job->status = "Running";
     }
    }
    else{
      job = GetMRJob();
      if (job != NULL){
	kill(job->pid, SIGCONT);
      job->status = "Running";
      }
    }
  }
  else if(!strcmp(cmd->argv[0],"alias")){
  
      addAlias(cmd);

  }
  else if(!strcmp(cmd->argv[0],"unalias")){
  
      deleteAlias(cmd->argv[1]);

  }
   else if(!strcmp(cmd->argv[0],"exit")){
  
      return;

  }
} /* RunBuiltInCmd */
예제 #4
0
/* Print File to port */
void WDPROC
DumpPrinter(HWND hwnd, LPSTR szAppName, LPSTR szFileName)
{
#define PRINT_BUF_SIZE 4096
    char *buffer;
    char *portname;
    int i, iport;
    DLGPROC lpfnSpoolProc;
    HPJOB hJob;
    UINT count;
    HFILE hf;
    int error = FALSE;
    DLGPROC lpfnCancelProc;
    long lsize;
    long ldone;
    char pcdone[10];
    MSG msg;
    HWND hDlgModeless;

    if ((buffer = LocalAllocPtr(LHND, PRINT_BUF_SIZE)) == (char *)NULL)
	return;
    /* get list of ports */
    GetProfileString("ports", NULL, "", buffer, PRINT_BUF_SIZE);
    /* select a port */
    lpfnSpoolProc = (DLGPROC)MakeProcInstance((FARPROC)SpoolDlgProc, hdllInstance);
    iport = DialogBoxParam(hdllInstance, "SpoolDlgBox", hwnd, lpfnSpoolProc, (LPARAM)buffer);
    FreeProcInstance((FARPROC)lpfnSpoolProc);
    if (!iport) {
	LocalFreePtr((void NEAR *)buffer);
	return;
    }
    portname = buffer;
    for (i=1; i<iport && lstrlen(portname)!=0; i++)
	portname += lstrlen(portname)+1;

    /* open file and get length */
    hf = _lopen(szFileName, OF_READ);
    if (hf == HFILE_ERROR) {
	LocalFreePtr((void NEAR *)buffer);
	return;
    }
    lsize = _llseek(hf, 0L, 2);
    (void) _llseek(hf, 0L, 0);
    if (lsize <= 0)
	lsize = 1;

    hJob = OpenJob(portname, szFileName, (HDC)NULL);
    switch ((int)hJob) {
    case SP_APPABORT:
    case SP_ERROR:
    case SP_OUTOFDISK:
    case SP_OUTOFMEMORY:
    case SP_USERABORT:
	_lclose(hf);
	LocalFreePtr((void NEAR *)buffer);
	return;
    }
    if (StartSpoolPage(hJob) < 0)
	error = TRUE;

    ldone = 0;
    lpfnCancelProc = (DLGPROC)MakeProcInstance((FARPROC)CancelDlgProc, hdllInstance);
    hDlgModeless = CreateDialogParam(hdllInstance, "CancelDlgBox", hwnd, lpfnCancelProc, (LPARAM)szAppName);

    while (!error && hDlgModeless && IsWindow(hDlgModeless)
	   && ((count = _lread(hf, buffer, PRINT_BUF_SIZE))!= 0) ) {
	wsprintf(pcdone, "%d%% done", (int)(ldone * 100 / lsize));
	SetWindowText(GetDlgItem(hDlgModeless, CANCEL_PCDONE), pcdone);
	if (WriteSpool(hJob, buffer, count) < 0)
	    error = TRUE;
	ldone += count;
	while (IsWindow(hDlgModeless) && PeekMessage(&msg, hDlgModeless, 0, 0, PM_REMOVE)) {
	    if (!IsDialogMessage(hDlgModeless, &msg)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	    }
	}
    }
    LocalFreePtr((void NEAR *)buffer);
    _lclose(hf);

    if (!hDlgModeless || !IsWindow(hDlgModeless))
	error=TRUE;
    if (IsWindow(hDlgModeless))
	DestroyWindow(hDlgModeless);
    hDlgModeless = 0;
    FreeProcInstance((FARPROC)lpfnCancelProc);
    EndSpoolPage(hJob);
    if (error)
	DeleteJob(hJob, 0);
    else
	CloseJob(hJob);
}