CoolFace
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes838downloads
PsalmodyDraw.txt411 linesDownload Raw Back to Psalmody
1 2 3 4        <1>/* Graphics Not Rendered in HTML */5 6        <2>/* Graphics Not Rendered in HTML */7 8        <3>/* Graphics Not Rendered in HTML */9 10        <4>/* Graphics Not Rendered in HTML */11 12        <5>/* Graphics Not Rendered in HTML */13 14        <6>/* Graphics Not Rendered in HTML */15 16 17        <7>/* Graphics Not Rendered in HTML */18 19 20        <8>/* Graphics Not Rendered in HTML */21 22 23        <9>/* Graphics Not Rendered in HTML */24 25 26        <10>/* Graphics Not Rendered in HTML */27 28 29        <11>/* Graphics Not Rendered in HTML */30 31 32 33 34 35 36 37        <12>/* Graphics Not Rendered in HTML */38 39 40 41 42        <13>/* Graphics Not Rendered in HTML */43 44        <14>/* Graphics Not Rendered in HTML */45 46        <15>/* Graphics Not Rendered in HTML */47 48 49        <16>/* Graphics Not Rendered in HTML */50 51#define PSM_NOTE_SPACING        952#define PSM_DURATIONS_NUM       1253 54F64 psm_durations[PSM_DURATIONS_NUM+1]={552*.25/3,.25,2*.5/3,.5,2.0/3.0,0.5*1.5,1.0,1.5,2.0,3.0,4.0,6.0,1000000.0};56U8 *psm_duration_lst="st\0s\0et\0e\0qt\0e.\0q\0q.\0h\0h.\0w\0w.\0";57U8 *psm_duration_imgs[PSM_DURATIONS_NUM]={58        <1>,<1>,<2>,<2>,<3>,<2>,<3>,<3>,<4>,<4>,<5>,<5>};59Bool psm_triplet_durations[PSM_DURATIONS_NUM]={TRUE,FALSE,TRUE,60        FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE};61 62Bool PsmBlink()63{64  if (Blink || psm.playing)65    return TRUE;66  else67    return FALSE;68}69 70Bool PsmHasWords(U8 *st)71{72  if (st && *st && (StrLen(st)>1 || *st!=CH_SPACE && *st!=CH_SHIFT_SPACE))73    return TRUE;74  else75    return FALSE;76}77 78Bool PsmIsDotted(I64 duration)79{80  U8 *st=LstSub(duration,psm_duration_lst);81  if (st[1]=='.')82    return TRUE;83  else84    return FALSE;85}86 87U0 PsmMarkSel(I64 x1,I64 x2,Bool sel)88{89  PsmNote *tmpn=psm.head.next;90  while (tmpn!=&psm.head) {91    if (sel) {92      if (x1<=tmpn->x<=x2)93        tmpn->flags|=PSMF_SEL;94    } else95      tmpn->flags&=~PSMF_SEL;96    tmpn=tmpn->next;97  }98}99 100U0 PsmSetWidth(PsmNote *tmpn)101{102  if (tmpn->type==PSMT_METER)103    tmpn->width=12;104  else {105    tmpn->width=PSM_NOTE_SPACING;106    if (PsmIsDotted(tmpn->duration))107      tmpn->width+=PSM_NOTE_SPACING/2;108    if (Bt(&tmpn->flags,PSMf_SHARP) || Bt(&tmpn->flags,PSMf_FLAT))109      tmpn->width+=PSM_NOTE_SPACING;110  }111}112 113U0 PsmSetOctave(I64 octave)114{115  I64 i;116  U8 buf[STR_LEN];117  CMenuEntry *tmpse;118  for (i=1;i<=7;i++) {119    StrPrint(buf,"Snd/Octave%d",i);120    if (tmpse=MenuEntryFind(Fs->cur_menu,buf)) {121      if (i==octave)122        tmpse->checked=TRUE;123      else124        tmpse->checked=FALSE;125    }126  }127}128 129U0 DrawNote(CDC *dc,I64 x,I64 y,I64 duration)130{131  if (0<=duration<=PSM_DURATIONS_NUM) {132    Sprite3(dc,x,y,0,psm_duration_imgs[duration]);133    if (psm_triplet_durations[duration])134      Sprite3(dc,x,y,0,<16>);135    if (PsmIsDotted(duration))136      Sprite3(dc,x,y,0,<15>);137  }138}139 140U0 DrawTimeSignature(CDC *dc,I64 x,I64 y,I64 top,I64 bottom)141{142  GrPrint(dc,x,y,"%d",top);143  GrPrint(dc,x,y+FONT_HEIGHT,"%d",bottom);144}145 146U0 PsmRecalcNoteXY()147{148  F64 measure_len=4,measure_left=measure_len;149  PsmNote *tmpn=psm.head.next;150  I64 x=8-psm.scrn_x,ona,note,octave;151  while (TRUE) {152    tmpn->x=x;153    tmpn->y=50;154    if (tmpn==&psm.head)155      break;156    else {157      if (tmpn->type!=PSMT_METER) {158        if (tmpn->ona!=ONA_REST) {159          ona=tmpn->ona;160          if (Bt(&tmpn->flags,PSMf_SHARP))161            ona--;162          if (Bt(&tmpn->flags,PSMf_FLAT))163            ona++;164          octave=Ona2Octave(ona);165          note  =Ona2Note  (ona);166          note=music.note_map[*LstSub(note,psm_note_lst)-'A'];167          if (note<3)168            octave++;169          tmpn->y=(15+(psm_note_map[note]-7*(octave-4)))*4;170        }171      }172      x+=tmpn->width;173      if (tmpn->type==PSMT_METER) {174        measure_len=tmpn->meter_top*4.0/tmpn->meter_bottom;175        measure_left=0;176      } else177        measure_left-=psm_durations[tmpn->duration];178      if (measure_left<0.001) {179        x+=PSM_NOTE_SPACING;180        measure_left=measure_len;181      }182    }183    tmpn=tmpn->next;184  }185}186 187U0 DrawIt(CTask *task,CDC *dc)188{189  PsmNote *tmpn;190  I64 i,x,y,191        w=task->pix_width;192  F64 measure_len=4,measure_left=measure_len;193 194  dc->color=BLACK;195  for (i=1;i<6;i++)196    GrLine(dc,0,i*8,w,i*8);197  for (i=7;i<12;i++)198    GrLine(dc,0,i*8,w,i*8);199 200  PsmRecalcNoteXY;201  if (psm.cur_note->x<64) {202    psm.scrn_x-=128;203    PsmRecalcNoteXY;204  }205  if (psm.cur_note->x>=GR_WIDTH-64) {206    psm.scrn_x+=128;207    PsmRecalcNoteXY;208  }209 210  tmpn=psm.head.next;211  while (tmpn!=&psm.head) {212    x=tmpn->x;213    y=tmpn->y;214    if (measure_left<0.001) {215      dc->color=BLACK;216      GrLine(dc,x-PSM_NOTE_SPACING,8,x-PSM_NOTE_SPACING,11*8);217      measure_left=measure_len;218    }219    if (tmpn->type==PSMT_METER) {220      if (tmpn==psm.cur_note && PsmBlink)221        dc->color=BROWN;222      else223        dc->color=BLACK;224      DrawTimeSignature(dc,x,5*8,tmpn->meter_top,tmpn->meter_bottom);225      measure_len=tmpn->meter_top*4.0/tmpn->meter_bottom;226      measure_left=0;227    } else {228      if (tmpn==psm.cur_note && PsmBlink) {229        dc->color=BROWN;230        GrPrint(dc,x+8,y,"%s",tmpn->word);231      } else if (tmpn->flags&PSMF_SEL)232        dc->color=RED;233      else {234        if (tmpn->ona!=ONA_REST)235          dc->color=BLACK;236        else237          dc->color=LTGRAY;238        if (PsmHasWords(tmpn->word))239          dc->color=GREEN;240      }241      DrawNote(dc,x,y,tmpn->duration);242      if (PsmIsDotted(tmpn->duration))243        x+=PSM_NOTE_SPACING/2;244      if (Bt(&tmpn->flags,PSMf_SHARP))245        Sprite3(dc,x,y,0,<13>);246      else if (Bt(&tmpn->flags,PSMf_FLAT))247        Sprite3(dc,x,y,0,<14>);248      measure_left-=psm_durations[tmpn->duration];249    }250    tmpn=tmpn->next;251  }252 253  if (psm.cur_note==&psm.head && PsmBlink)254    dc->color=BROWN;255  else256    dc->color=BLACK;257  Sprite3(dc,psm.head.x,50,0,<12>);258}259 260#define PSM_NOTE_BOX_X  220261#define PSM_NOTE_BOX_Y  (13*FONT_HEIGHT+14)262U0 PsmSetPickNoteBoxX(I64 duration,I64 *x)263{264  I64 i;265  *x=PSM_NOTE_BOX_X;266  for (i=0;i<duration;i++) {267    if (PsmIsDotted(i))268      *x+=PSM_NOTE_SPACING/2;269    *x+=PSM_NOTE_SPACING+4;270  }271}272 273I64 PsmGetPickNoteBoxDuration(I64 xx,I64 yy)274{275  I64 i,x1,x2;276  if (PSM_NOTE_BOX_Y-14<=yy<PSM_NOTE_BOX_Y+6) {277    for (i=0;i<PSM_DURATIONS_NUM;i++) {278      PsmSetPickNoteBoxX(i,&x1);279      PsmSetPickNoteBoxX(i+1,&x2);280      if (x1<=xx+PSM_NOTE_SPACING/2<x2)281        return i;282    }283  }284  return -1;285}286 287U0 DrawPickNoteBox()288{289  I64 i,x;290  for (i=0;i<PSM_DURATIONS_NUM;i++) {291    PsmSetPickNoteBoxX(i,&x);292    if (PsmIsDotted(i))293      psm.dc2->color=RED;294    else if (psm_triplet_durations[i])295      psm.dc2->color=LTRED;296    else297      psm.dc2->color=BLACK;298    DrawNote(psm.dc2,x,PSM_NOTE_BOX_Y,i);299  }300}301 302#define PSM_TOOLS_X     450303#define PSM_TOOLS_Y     13*FONT_HEIGHT304 305U0 DrawPickTools()306{307  if (psm.tool==PSMTT_BOX_TOOL)308    psm.dc2->color=ROPF_DITHER+WHITE<<16+RED;309  else310    psm.dc2->color=ROPF_DITHER+WHITE<<16+BLACK;311  GrBorder(psm.dc2,PSM_TOOLS_X,PSM_TOOLS_Y,PSM_TOOLS_X+10,PSM_TOOLS_Y+10);312 313  if (psm.tool==PSMTT_PTR_TOOL)314    psm.dc2->color=RED;315  else316    psm.dc2->color=BLACK;317  (*gr.fp_draw_ms)(psm.dc2,PSM_TOOLS_X+15,PSM_TOOLS_Y);318  psm.dc2->color=BLACK;319}320 321Bool PsmGetPickToolBox(I64 xx,I64 yy)322{323  if (PSM_TOOLS_X<=xx<PSM_TOOLS_X+27 && PSM_TOOLS_Y<=yy<PSM_TOOLS_Y+15) {324    PsmMarkSel(0,0,FALSE);325    if (xx<PSM_TOOLS_X+13)326      psm.tool=PSMTT_BOX_TOOL;327    else328      psm.tool=PSMTT_PTR_TOOL;329    return TRUE;330  } else331    return FALSE;332}333 334#define PSM_METERS_NUM  7335I64 meter_tops[PSM_METERS_NUM]  ={2,3,4,5,6,7,9},336   meter_bottoms[PSM_METERS_NUM]={4,4,4,4,8,8,8};337 338#define PSM_METER_X     485339#define PSM_METER_Y     13*FONT_HEIGHT340#define PSM_METER_W     12341Bool PsmGetPickMeterBox(I64 xx,I64 yy,I64 *top,I64 *bottom)342{343  I64 i;344  if (PSM_METER_X<=xx<PSM_METER_X+PSM_METER_W*PSM_METERS_NUM &&345        PSM_METER_Y<=yy<PSM_METER_Y+2*FONT_HEIGHT) {346    i=(xx-PSM_METER_X)/PSM_METER_W;347    *top=meter_tops[i];348    *bottom=meter_bottoms[i];349    return TRUE;350  } else351    return FALSE;352}353 354U0 DrawPickMeterBox()355{356  I64 i;357  psm.dc2->color=BLACK;358  for (i=0;i<PSM_METERS_NUM;i++)359    DrawTimeSignature(psm.dc2,PSM_METER_X+i*PSM_METER_W,PSM_METER_Y,360          meter_tops[i],meter_bottoms[i]);361}362 363U0 DrawDC2()364{365  DCFill;366  DrawPickNoteBox;367  DrawPickMeterBox;368  DrawPickTools;369}370 371 372<17>/* Graphics Not Rendered in HTML */373 374 375 376 377 378U0 PsmMenu(I64 psm_octave)379{380  DocClear;381  "$BG,WHITE$$FD,GREEN$$CM,0,12$\n";382  Sprite(<17>);383  '\n\n\n\n\n';384 385  DrawDC2;386 387  "$LTGREEN$<SPACE>$FG$\t\tRest\n"388        "$LTGREEN$<BACKSPACE>$FG$\tDeletes Last Note\n"389        "$LTGREEN$Left Mouse$FG$\tDrag note or shift word\n"390        "$LTGREEN$Right Mouse$FG$\tChange duration or set word\n";391  Sprite(<6>,"$SP+LIS,\"\","392        "LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_LEFT);\",BI=%d$");393  "   ";394  if (psm.playing)395    Sprite(<9>,"$SP,\"\",LM=\"x\",BI=%d$");396  else397    Sprite(<8>,"$SP,\"\",LM=\"x\",BI=%d$");398  "   ";399  if (psm.record_entry->checked) {400    psm.record_entry->checked=TRUE;401    Sprite(<10>,"$SP,\"\",LM=\"z\",BI=%d$");402  } else403    Sprite(<11>,"$SP,\"\",LM=\"z\",BI=%d$");404  "   ";405  Sprite(<7>,"$SP+LIS,\"\","406        "LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_RIGHT);\",BI=%d$");407  "$CM+LX,0,6$";408  PsmSetOctave(psm_octave);409  Refresh(2);410}411