CTask *JukeReward(U8 *msg) { U8 *buf; CDoc *doc; CTask *res=Spawn(&SrvCmdLine,NULL,"Reward",,Fs); StrCpy(res->task_title,"Reward"); res->title_src=TTS_LOCKED_CONST; doc=DocNew(,res); DocPrint(doc,"$$WW+H,1$$$$RED$$%s",msg); buf=MStrPrint("DocEd(0x%X);",doc); TaskExe(res,NULL,buf,1<border_src =BDS_CONST; res->border_attr=LTGRAY<<4+DrvTextAttrGet(':')&15; res->text_attr =LTGRAY<<4+BLUE; res->win_inhibit=WIG_NO_FOCUS_TASK_DFT; WinHorz(Fs->win_right+2,TEXT_COLS-2,res); WinVert(2,TEXT_ROWS-2,res); WinFocus(Fs->parent_task); return res; } CTask *SingleSong(U8 *msg,U8 *name) { CTask *task=Spawn(&SrvCmdLine,NULL,name,,Fs); StrCpy(task->task_title,name); task->title_src=TTS_LOCKED_CONST; TaskExe(task,Fs,";",1<win_left,task->win_left+50,task); WinVert(2,2+8,task); task->win_inhibit=WIG_NO_FOCUS_TASK_DFT; TaskExe(task,NULL,msg,1<max_entries=100; return task; } #define JB_RUN_LEVEL_NULL 0 #define JB_RUN_LEVEL_ONE 1 #define JB_RUN_LEVEL_TWO 2 Bool JBPutKey(CDoc *doc,U8 *,I64 ch,I64 sc) {//ch=ASCII; sc=scan_code CDocEntry *doc_ce=doc->cur_entry,*doc_e; CDirEntry *tmpde; I64 i; U8 *st; CDoc *doc2; if (!(sc&(SCF_ALT|SCF_CTRL|SCF_SHIFT)) && doc_ce->type_u8==DOCT_MENU_VAL && doc_ce->left_exp>=0) { tmpde=doc_ce->left_exp; if (sc.u8[0]==SC_DELETE ) { Beep; Silent; Del(tmpde->full_name); Silent(OFF); } else if ('0'<=ch<='9') { if (StrLen(doc_ce->tag)>1) doc_ce->tag[0]=ch; doc2=DocRead(tmpde->full_name); DocGoToLine(doc2,1); doc_e=doc2->cur_entry; if (doc_e!=doc2 && doc_e->type_u8==DOCT_TEXT && StrLen(doc_e->tag)>=3) { doc_e->tag[2]=ch; DocWrite(doc2); } DocDel(doc2); return TRUE; } else if (ch=='r') { if (!DocTreeFFind(tmpde->full_name,"Reward1")) { doc2=DocRead(tmpde->full_name); DocGoToLine(doc2,2); DocPrint(doc2, "\n$$TR,\"Reward1\"$$\n" "$$ID,2$$CallExtStr(\"JukeReward\",\"\"\n" "$$TR,\"Reward2\"$$\n" "$$ID,2$$\n" "$$ID,-2$$\n" ");\n$$ID,-2$$\n" ); DocWrite(doc2); DocDel(doc2); } if (DocTreeFFind(tmpde->full_name,"Reward1/Reward2")) { for (i=0;i<5;i++) { st=MStrPrint("%s %s %s %s ", GodWordStr,GodWordStr,GodWordStr,GodWordStr); DocTreeFAppend(tmpde->full_name,"Reward1/Reward2", "\"%s\"\n",st); Free(st); } In(""); } return TRUE; } else if (ch==CH_SPACE||ch==CH_ESC) tmpde->user_data++; //JB_RUN_LEVEL++ // is followed by --> JB_RUN_LEVEL_TWO //Actual just exits--> JB_RUN_LEVEL_ONE } return FALSE; } public U0 JukeBox(U8 *dirname="~/Psalmody",U8 **_filename=NULL) {//_filename is for using this as a song-chooser program. I64 i=0,rating; U8 *st,*st2; CDirEntry *tmpde,*tmpde1; CDoc *doc=DocNew,*s; CDocEntry *doc_e; CTask *task=NULL; if (_filename) *_filename=NULL; SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$ AutoComplete; try { dirname=StrNew(dirname); st=MStrPrint("%s/*.HC.Z",dirname); tmpde=tmpde1=FilesFind(st); Free(st); Free(dirname); doc->user_put_key=&JBPutKey; DocPrint(doc, "Key: $$GREEN$$Graphics $$BLUE$$Words $$RED$$No Nothing " "$$BLACK$$Incomplete $$CYAN$$Special$$FG$$\n\n" "$$GREEN$$$$FG$$\tto delete a song.\n" "'$$GREEN$$0$$FG$$'-'$$GREEN$$9$$FG$$'\tto rate a song.\n" "'$$GREEN$$r$$FG$$'\tto get your reward from God.\n"); while (tmpde) { if (!(i++%5)) DocPrint(doc,"\n"); if (FileOcc("Play(",tmpde->full_name,"")) { st=StrNew(tmpde->name); FileExtRem(st); s=DocRead(tmpde->full_name); doc_e=s->head.next; while (doc_e!=s && doc_e->type_u8!=DOCT_TEXT) doc_e=doc_e->next; rating='0'; if (doc_e!=s && doc_e->type_u8==DOCT_TEXT) { if ('0'<=doc_e->tag[2]<='9') rating=doc_e->tag[2]; if (StrMatch("incomplete",doc_e->tag)) DocPrint(doc,"$$BLACK$$"); else if (StrMatch("has graphics",doc_e->tag)) DocPrint(doc,"$$GREEN$$"); else if (StrMatch("has words",doc_e->tag)) DocPrint(doc,"$$BLUE$$"); else if (StrMatch("special",doc_e->tag)) DocPrint(doc,"$$CYAN$$"); else if (StrMatch("no nothing",doc_e->tag)) { DocPrint(doc,"$$RED$$"); if (FileOcc("\\0",tmpde->full_name,"")) { s->cur_entry=doc_e->next; s->cur_col=0; DocEntryDel(s,doc_e); DocPrint(s,"//0 has words\n"); DocWrite(s); } } DocPrint(doc,"$$MU-UL,\"%c%-8ts\",LE=%d$$ ",rating,st,tmpde); tmpde->user_data=JB_RUN_LEVEL_NULL; } DocDel(s); Free(st); } tmpde=tmpde->next; } DocPrint(doc,"\n$$CYAN$$$$MU-UL,\"DONE\",LE=%d$$\n",DOCM_CANCEL); while (TRUE) { if (_filename) tmpde=PopUpMenu(doc,DOF_INTERCEPT_TASK_END); else tmpde=PopUpMenu(doc); if (task) Kill(task); if (tmpde<=0) break; st2=StrNew(tmpde->name); if (_filename) { Free(*_filename); *_filename=StrNew(tmpde->full_name); } if (tmpde->user_data==JB_RUN_LEVEL_ONE) break; // tmpde->user_data=JB_RUN_LEVEL_NULL; //Rst from FileExtRem(st2); st=MStrPrint("ExeFile(\"%s\");",tmpde->full_name); MusicSettingsRst; task=SingleSong(st,st2); Free(st2); Free(st); } DocDel(doc); DirTreeDel(tmpde1); } catch PutExcept; SettingsPop; }