CoolFace
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes838downloads
JukeBox.txt202 linesDownload Raw Back to Psalmody
1 2CTask *JukeReward(U8 *msg)3{4  U8 *buf;5  CDoc *doc;6  CTask *res=Spawn(&SrvCmdLine,NULL,"Reward",,Fs);7  StrCpy(res->task_title,"Reward");8  res->title_src=TTS_LOCKED_CONST;9 10  doc=DocNew(,res);11  DocPrint(doc,"$WW+H,1$$RED$%s",msg);12 13  buf=MStrPrint("DocEd(0x%X);",doc);14  TaskExe(res,NULL,buf,1<<JOBf_EXIT_ON_COMPLETE|1<<JOBf_FREE_ON_COMPLETE);15  Free(buf);16  TaskWait(res);17 18  res->border_src =BDS_CONST;19  res->border_attr=LTGRAY<<4+DrvTextAttrGet(':')&15;20  res->text_attr  =LTGRAY<<4+BLUE;21  res->win_inhibit=WIG_NO_FOCUS_TASK_DFT;22  WinHorz(Fs->win_right+2,TEXT_COLS-2,res);23  WinVert(2,TEXT_ROWS-2,res);24 25  WinFocus(Fs->parent_task);26  return res;27}28 29CTask *SingleSong(U8 *msg,U8 *name)30{31  CTask *task=Spawn(&SrvCmdLine,NULL,name,,Fs);32  StrCpy(task->task_title,name);33  task->title_src=TTS_LOCKED_CONST;34  TaskExe(task,Fs,";",1<<JOBf_WAKE_MASTER|1<<JOBf_FREE_ON_COMPLETE);35  WinHorz(task->win_left,task->win_left+50,task);36  WinVert(2,2+8,task);37  task->win_inhibit=WIG_NO_FOCUS_TASK_DFT;38  TaskExe(task,NULL,msg,1<<JOBf_EXIT_ON_COMPLETE|1<<JOBf_FREE_ON_COMPLETE);39  DocPut(task)->max_entries=100;40  return task;41}42 43#define JB_RUN_LEVEL_NULL       044#define JB_RUN_LEVEL_ONE        145#define JB_RUN_LEVEL_TWO        246 47Bool JBPutKey(CDoc *doc,U8 *,I64 ch,I64 sc)48{//ch=ASCII; sc=scan_code49  CDocEntry *doc_ce=doc->cur_entry,*doc_e;50  CDirEntry *tmpde;51  I64 i;52  U8 *st;53  CDoc *doc2;54  if (!(sc&(SCF_ALT|SCF_CTRL|SCF_SHIFT))55        && doc_ce->type_u8==DOCT_MENU_VAL && doc_ce->left_exp>=0) {56    tmpde=doc_ce->left_exp;57    if (sc.u8[0]==SC_DELETE ) {58      Beep;59      Silent;60      Del(tmpde->full_name);61      Silent(OFF);62    } else if ('0'<=ch<='9') {63      if (StrLen(doc_ce->tag)>1)64        doc_ce->tag[0]=ch;65      doc2=DocRead(tmpde->full_name);66      DocGoToLine(doc2,1);67      doc_e=doc2->cur_entry;68      if (doc_e!=doc2 && doc_e->type_u8==DOCT_TEXT && StrLen(doc_e->tag)>=3) {69        doc_e->tag[2]=ch;70        DocWrite(doc2);71      }72      DocDel(doc2);73      return TRUE;74    } else if (ch=='r') {75      if (!DocTreeFFind(tmpde->full_name,"Reward1")) {76        doc2=DocRead(tmpde->full_name);77        DocGoToLine(doc2,2);78        DocPrint(doc2,79              "\n$TR,\"Reward1\"$\n"80              "$ID,2$CallExtStr(\"JukeReward\",\"\"\n"81              "$TR,\"Reward2\"$\n"82              "$ID,2$\n"83              "$ID,-2$\n"84              ");\n$ID,-2$\n"85              );86        DocWrite(doc2);87        DocDel(doc2);88      }89      if (DocTreeFFind(tmpde->full_name,"Reward1/Reward2")) {90        for (i=0;i<5;i++) {91          st=MStrPrint("%s %s %s %s ",92                GodWordStr,GodWordStr,GodWordStr,GodWordStr);93          DocTreeFAppend(tmpde->full_name,"Reward1/Reward2",94                "\"%s\"\n",st);95          Free(st);96        }97        In(" ");98      }99      return TRUE;100    } else if (ch==CH_SPACE||ch==CH_ESC)101      tmpde->user_data++; //JB_RUN_LEVEL++102//<SPACE> is followed by <ESC> --> JB_RUN_LEVEL_TWO103      //Actual <ESC> just exits      --> JB_RUN_LEVEL_ONE104  }105  return FALSE;106}107 108public U0 JukeBox(U8 *dirname="~/Psalmody",U8 **_filename=NULL)109{//_filename is for using this as a song-chooser program.110  I64 i=0,rating;111  U8 *st,*st2;112  CDirEntry *tmpde,*tmpde1;113  CDoc *doc=DocNew,*s;114  CDocEntry *doc_e;115  CTask *task=NULL;116  if (_filename)117    *_filename=NULL;118  SettingsPush; //See SettingsPush119  AutoComplete;120  try {121    dirname=StrNew(dirname);122    st=MStrPrint("%s/*.HC.Z",dirname);123    tmpde=tmpde1=FilesFind(st);124    Free(st);125    Free(dirname);126    doc->user_put_key=&JBPutKey;127    DocPrint(doc,128          "Key: $GREEN$Graphics $BLUE$Words $RED$No Nothing "129          "$BLACK$Incomplete $CYAN$Special$FG$\n\n"130          "$GREEN$<DEL>$FG$\tto delete a song.\n"131          "'$GREEN$0$FG$'-'$GREEN$9$FG$'\tto rate a song.\n"132          "'$GREEN$r$FG$'\tto get your reward from God.\n");133    while (tmpde) {134      if (!(i++%5))135        DocPrint(doc,"\n");136      if (FileOcc("Play(",tmpde->full_name,"")) {137        st=StrNew(tmpde->name);138        FileExtRem(st);139        s=DocRead(tmpde->full_name);140        doc_e=s->head.next;141        while (doc_e!=s && doc_e->type_u8!=DOCT_TEXT)142          doc_e=doc_e->next;143        rating='0';144        if (doc_e!=s && doc_e->type_u8==DOCT_TEXT) {145          if ('0'<=doc_e->tag[2]<='9')146            rating=doc_e->tag[2];147          if (StrMatch("incomplete",doc_e->tag))148            DocPrint(doc,"$BLACK$");149          else if (StrMatch("has graphics",doc_e->tag))150            DocPrint(doc,"$GREEN$");151          else if (StrMatch("has words",doc_e->tag))152            DocPrint(doc,"$BLUE$");153          else if (StrMatch("special",doc_e->tag))154            DocPrint(doc,"$CYAN$");155          else if (StrMatch("no nothing",doc_e->tag)) {156            DocPrint(doc,"$RED$");157            if (FileOcc("\\0",tmpde->full_name,"")) {158              s->cur_entry=doc_e->next;159              s->cur_col=0;160              DocEntryDel(s,doc_e);161              DocPrint(s,"//0 has words\n");162              DocWrite(s);163            }164          }165          DocPrint(doc,"$MU-UL,\"%c%-8ts\",LE=%d$ ",rating,st,tmpde);166          tmpde->user_data=JB_RUN_LEVEL_NULL;167        }168        DocDel(s);169        Free(st);170      }171      tmpde=tmpde->next;172    }173    DocPrint(doc,"\n$CYAN$$MU-UL,\"DONE\",LE=%d$\n",DOCM_CANCEL);174    while (TRUE) {175      if (_filename)176        tmpde=PopUpMenu(doc,DOF_INTERCEPT_TASK_END);177      else178        tmpde=PopUpMenu(doc);179      if (task)180        Kill(task);181      if (tmpde<=0) break;182      st2=StrNew(tmpde->name);183      if (_filename) {184        Free(*_filename);185        *_filename=StrNew(tmpde->full_name);186      }187      if (tmpde->user_data==JB_RUN_LEVEL_ONE) break; //<ESC>188      tmpde->user_data=JB_RUN_LEVEL_NULL; //Rst from <SPACE>189      FileExtRem(st2);190      st=MStrPrint("ExeFile(\"%s\");",tmpde->full_name);191      MusicSettingsRst;192      task=SingleSong(st,st2);193      Free(st2);194      Free(st);195    }196    DocDel(doc);197    DirTreeDel(tmpde1);198  } catch199    PutExcept;200  SettingsPop;201}202