void *queue_thread_main(void *arg) { #ifdef USE_THREADS while (1) { deno_cleanup_push(queue_unlock, NULL); queue_lock(); queue_wait(); deno_cleanup_pop(1); while (1) { deno_cleanup_push(queue_unlock, NULL); queue_lock(); deno_cleanup_pop(1); while (qp != NULL) { qp = ExecuteQueue(qp); } break; } } #endif return NULL; }
void FTP::QuequeMenu(void) { int n, num; int Breaks[] = { VK_DELETE, VK_INSERT, VK_F4, VK_RETURN, 0 }, BNumber; FarMenuItem *mi = NULL; FTPUrl* p,*p1; char str1[MAX_PATH], str2[MAX_PATH], str3[MAX_PATH]; QueueExecOptions exOp; SetupQOpt(&exOp); num = -1; do { mi = (FarMenuItem *)realloc(mi, (QuequeSize+1)*sizeof(FarMenuItem)); memset(mi, 0, QuequeSize*sizeof(FarMenuItem)); for(p = UrlsList,n = 0; p; p = p->Next, n++) { StrCpy(str1, p->SrcPath.c_str(), 20); StrCpy(str2, p->DestPath.c_str(), 20); StrCpy(str3, p->FileName.cFileName, 20); _snprintf(mi[n].Text, ARRAYSIZE(mi[n].Text), "%c%c %-20s%c%-20s%c%-20s", p->Download ? '-' : '<', p->Download ? '>' : '-', str1, FAR_VERT_CHAR, str2, FAR_VERT_CHAR, str3); if(p->Error[0]) mi[n].Checked = TRUE; } //Title char title[MAX_PATH]; _snprintf(title, ARRAYSIZE(title), "%s: %d %s", FP_GetMsg(MQMenuTitle), n, FP_GetMsg(MQMenuItems)); //Menu if(num != -1 && num < QuequeSize) mi[num].Selected = TRUE; n = FP_Info->Menu(FP_Info->ModuleNumber,-1,-1,0,FMENU_SHOWAMPERSAND, title, FP_GetMsg(MQMenuFooter), "FTPQueue", Breaks, &BNumber, mi, QuequeSize); //key ESC if(BNumber == -1 && n == -1) goto Done; //key Enter if(BNumber == -1) { //?? goto Done; } //Set selected if(num != -1) mi[num].Selected = FALSE; num = n; //Process keys switch(BNumber) { /*DEL*/ case 0: if(QuequeSize) switch(AskDeleteQueue()) { case -1: case 2: break; case 0: p = UrlItem(n, &p1); DeleteUrlItem(p, p1); break; case 1: ClearQueue(); break; } break; /*Ins*/ case 1: InsertToQueue(); break; /*F4*/ case 2: p = UrlItem(n, NULL); if(p) EditUrlItem(p); break; /*Return*/ case 3: if(QuequeSize && WarnExecuteQueue(&exOp)) { ExecuteQueue(&exOp); if(!QuequeSize) goto Done; } break; } } while(true); Done: free(mi); }