$ID,8$ $SP,"<1>",BI=1$ $SP,"<2>",BI=2$ $SP,"<3>",BI=3$ $SP,"<4>",BI=4$ $SP,"<5>",BI=5$ $SP,"<6>",BI=6$ $SP,"<7>",BI=7$ $SP,"<8>",BI=8$ $SP,"<9>",BI=9$ $SP,"<10>",BI=10$ $SP,"<11>",BI=11$ $SP,"<12>",BI=12$ $SP,"<13>",BI=13$ $SP,"<14>",BI=14$ $SP,"<15>",BI=15$ $SP,"<16>",BI=16$ $ID,-8$ #define PSM_NOTE_SPACING 9 #define PSM_DURATIONS_NUM 12 F64 psm_durations[PSM_DURATIONS_NUM+1]={ 2*.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}; U8 *psm_duration_lst="st\0s\0et\0e\0qt\0e.\0q\0q.\0h\0h.\0w\0w.\0"; U8 *psm_duration_imgs[PSM_DURATIONS_NUM]={ $IB,"<1>",BI=1$,$IB,"<1>",BI=1$,$IB,"<2>",BI=2$,$IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<2>",BI=2$,$IB,"<3>",BI=3$,$IB,"<3>",BI=3$,$IB,"<4>",BI=4$,$IB,"<4>",BI=4$,$IB,"<5>",BI=5$,$IB,"<5>",BI=5$}; Bool psm_triplet_durations[PSM_DURATIONS_NUM]={TRUE,FALSE,TRUE, FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE}; Bool PsmBlink() { if (Blink || psm.playing) return TRUE; else return FALSE; } Bool PsmHasWords(U8 *st) { if (st && *st && (StrLen(st)>1 || *st!=CH_SPACE && *st!=CH_SHIFT_SPACE)) return TRUE; else return FALSE; } Bool PsmIsDotted(I64 duration) { U8 *st=LstSub(duration,psm_duration_lst); if (st[1]=='.') return TRUE; else return FALSE; } U0 PsmMarkSel(I64 x1,I64 x2,Bool sel) { PsmNote *tmpn=psm.head.next; while (tmpn!=&psm.head) { if (sel) { if (x1<=tmpn->x<=x2) tmpn->flags|=PSMF_SEL; } else tmpn->flags&=~PSMF_SEL; tmpn=tmpn->next; } } U0 PsmSetWidth(PsmNote *tmpn) { if (tmpn->type==PSMT_METER) tmpn->width=12; else { tmpn->width=PSM_NOTE_SPACING; if (PsmIsDotted(tmpn->duration)) tmpn->width+=PSM_NOTE_SPACING/2; if (Bt(&tmpn->flags,PSMf_SHARP) || Bt(&tmpn->flags,PSMf_FLAT)) tmpn->width+=PSM_NOTE_SPACING; } } U0 PsmSetOctave(I64 octave) { I64 i; U8 buf[STR_LEN]; CMenuEntry *tmpse; for (i=1;i<=7;i++) { StrPrint(buf,"Snd/Octave%d",i); if (tmpse=MenuEntryFind(Fs->cur_menu,buf)) { if (i==octave) tmpse->checked=TRUE; else tmpse->checked=FALSE; } } } U0 DrawNote(CDC *dc,I64 x,I64 y,I64 duration) { if (0<=duration<=PSM_DURATIONS_NUM) { Sprite3(dc,x,y,0,psm_duration_imgs[duration]); if (psm_triplet_durations[duration]) Sprite3(dc,x,y,0,$IB,"<16>",BI=16$); if (PsmIsDotted(duration)) Sprite3(dc,x,y,0,$IB,"<15>",BI=15$); } } U0 DrawTimeSignature(CDC *dc,I64 x,I64 y,I64 top,I64 bottom) { GrPrint(dc,x,y,"%d",top); GrPrint(dc,x,y+FONT_HEIGHT,"%d",bottom); } U0 PsmRecalcNoteXY() { F64 measure_len=4,measure_left=measure_len; PsmNote *tmpn=psm.head.next; I64 x=8-psm.scrn_x,ona,note,octave; while (TRUE) { tmpn->x=x; tmpn->y=50; if (tmpn==&psm.head) break; else { if (tmpn->type!=PSMT_METER) { if (tmpn->ona) { ona=tmpn->ona; if (Bt(&tmpn->flags,PSMf_SHARP)) ona--; if (Bt(&tmpn->flags,PSMf_FLAT)) ona++; octave=Ona2Octave(ona); note =Ona2Note (ona); note=music.note_map[*LstSub(note,psm_note_lst)-'A']; if (note<3) octave++; tmpn->y=(15+(psm_note_map[note]-7*(octave-4)))*4; } } x+=tmpn->width; if (tmpn->type==PSMT_METER) { measure_len=tmpn->meter_top*4.0/tmpn->meter_bottom; measure_left=0; } else measure_left-=psm_durations[tmpn->duration]; if (measure_left<0.001) { x+=PSM_NOTE_SPACING; measure_left=measure_len; } } tmpn=tmpn->next; } } U0 DrawIt(CTask *task,CDC *dc) { PsmNote *tmpn; I64 i,x,y, w=task->pix_width; F64 measure_len=4,measure_left=measure_len; dc->color=BLACK; for (i=1;i<6;i++) GrLine(dc,0,i*8,w,i*8); for (i=7;i<12;i++) GrLine(dc,0,i*8,w,i*8); PsmRecalcNoteXY; if (psm.cur_note->x<64) { psm.scrn_x-=128; PsmRecalcNoteXY; } if (psm.cur_note->x>=GR_WIDTH-64) { psm.scrn_x+=128; PsmRecalcNoteXY; } tmpn=psm.head.next; while (tmpn!=&psm.head) { x=tmpn->x; y=tmpn->y; if (measure_left<0.001) { dc->color=BLACK; GrLine(dc,x-PSM_NOTE_SPACING,8,x-PSM_NOTE_SPACING,11*8); measure_left=measure_len; } if (tmpn->type==PSMT_METER) { if (tmpn==psm.cur_note && PsmBlink) dc->color=BROWN; else dc->color=BLACK; DrawTimeSignature(dc,x,5*8,tmpn->meter_top,tmpn->meter_bottom); measure_len=tmpn->meter_top*4.0/tmpn->meter_bottom; measure_left=0; } else { if (tmpn==psm.cur_note && PsmBlink) { dc->color=BROWN; GrPrint(dc,x+8,y,"%s",tmpn->word); } else if (tmpn->flags&PSMF_SEL) dc->color=RED; else { if (tmpn->ona) dc->color=BLACK; else dc->color=LTGRAY; if (PsmHasWords(tmpn->word)) dc->color=GREEN; } DrawNote(dc,x,y,tmpn->duration); if (PsmIsDotted(tmpn->duration)) x+=PSM_NOTE_SPACING/2; if (Bt(&tmpn->flags,PSMf_SHARP)) Sprite3(dc,x,y,0,$IB,"<13>",BI=13$); else if (Bt(&tmpn->flags,PSMf_FLAT)) Sprite3(dc,x,y,0,$IB,"<14>",BI=14$); measure_left-=psm_durations[tmpn->duration]; } tmpn=tmpn->next; } if (psm.cur_note==&psm.head && PsmBlink) dc->color=BROWN; else dc->color=BLACK; Sprite3(dc,psm.head.x,50,0,$IB,"<12>",BI=12$); } #define PSM_NOTE_BOX_X 220 #define PSM_NOTE_BOX_Y (13*FONT_HEIGHT+14) U0 PsmSetPickNoteBoxX(I64 duration,I64 *x) { I64 i; *x=PSM_NOTE_BOX_X; for (i=0;icolor=RED; else if (psm_triplet_durations[i]) psm.dc2->color=LTRED; else psm.dc2->color=BLACK; DrawNote(psm.dc2,x,PSM_NOTE_BOX_Y,i); } } #define PSM_TOOLS_X 450 #define PSM_TOOLS_Y 13*FONT_HEIGHT U0 DrawPickTools() { if (psm.tool==PSMTT_BOX_TOOL) psm.dc2->color=ROPF_DITHER+WHITE<<16+RED; else psm.dc2->color=ROPF_DITHER+WHITE<<16+BLACK; GrBorder(psm.dc2,PSM_TOOLS_X,PSM_TOOLS_Y,PSM_TOOLS_X+10,PSM_TOOLS_Y+10); if (psm.tool==PSMTT_PTR_TOOL) psm.dc2->color=RED; else psm.dc2->color=BLACK; (*gr.fp_draw_ms)(psm.dc2,PSM_TOOLS_X+15,PSM_TOOLS_Y); psm.dc2->color=BLACK; } Bool PsmGetPickToolBox(I64 xx,I64 yy) { if (PSM_TOOLS_X<=xxcolor=BLACK; for (i=0;i",BI=17$ U0 PsmMenu(I64 psm_octave) { DocClear; "$$BG,WHITE$$$$FD,GREEN$$$$CM,0,12$$\n"; Sprite($IB,"<17>",BI=17$); '\n\n\n\n\n'; DrawDC2; "$$LTGREEN$$$$FG$$\t\tRest\n" "$$LTGREEN$$$$FG$$\tDeletes Last Note\n" "$$LTGREEN$$Left Mouse$$FG$$\tDrag note or shift word\n" "$$LTGREEN$$Right Mouse$$FG$$\tChange duration or set word\n"; Sprite($IB,"<6>",BI=6$,"$$SP+LIS,\"\"," "LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_LEFT);\",BI=%d$$"); ""; if (psm.playing) Sprite($IB,"<9>",BI=9$,"$$SP,\"\",LM=\"x\",BI=%d$$"); else Sprite($IB,"<8>",BI=8$,"$$SP,\"\",LM=\"x\",BI=%d$$"); ""; if (psm.record_entry->checked) { psm.record_entry->checked=TRUE; Sprite($IB,"<10>",BI=10$,"$$SP,\"\",LM=\"z\",BI=%d$$"); } else Sprite($IB,"<11>",BI=11$,"$$SP,\"\",LM=\"z\",BI=%d$$"); ""; Sprite($IB,"<7>",BI=7$,"$$SP+LIS,\"\"," "LM=\"Msg(MSG_KEY_DOWN,0,SCF_CTRL|SC_CURSOR_RIGHT);\",BI=%d$$"); "$$CM+LX,0,6$$"; PsmSetOctave(psm_octave); Refresh(2); } " òÿÿÿñÿÿÿ ñÿÿÿ ñÿÿÿ õÿÿÿ õÿÿÿ óÿÿÿ òÿÿÿ öÿÿÿ ÷ÿÿÿ ÿÿÿÿýÿÿÿüÿÿÿ üÿÿÿ ÿÿÿÿ ÿÿÿÿýÿÿÿ òÿÿÿ þÿÿÿÿÿÿÿÿÿÿÿ ýÿÿÿ ÿÿÿÿ ýÿÿÿ ýÿÿÿÿÿÿÿ  þÿÿÿÿÿÿÿÿÿÿÿ óÿÿÿ óÿÿÿ óÿÿÿóÿÿÿ òÿÿÿ òÿÿÿ ÿÿÿÿýÿÿÿüÿÿÿ üÿÿÿ ÿÿÿÿ ÿÿÿÿýÿÿÿ òÿÿÿ þÿÿÿÿÿÿÿÿÿÿÿ ýÿÿÿ ÿÿÿÿ ýÿÿÿ ýÿÿÿÿÿÿÿ  þÿÿÿÿÿÿÿÿÿÿÿÍ ÿÿÿÿýÿÿÿüÿÿÿ üÿÿÿ ÿÿÿÿ ÿÿÿÿýÿÿÿ òÿÿÿ þÿÿÿÿÿÿÿÿÿÿÿ ýÿÿÿ ÿÿÿÿ ýÿÿÿ ýÿÿÿÿÿÿÿ  þÿÿÿÿÿÿÿÿÿÿÿV ÿÿÿÿýÿÿÿüÿÿÿ üÿÿÿ ÿÿÿÿ ÿÿÿÿýÿÿÿ òÿÿÿE ÿÿÿÿýÿÿÿüÿÿÿ üÿÿÿ ÿÿÿÿ ÿÿÿÿýÿÿÿa      a       Õ                                               ?    # þÿÿÿÖÿÿÿþÿÿÿ& Öÿÿÿ& E úÿÿÿ úÿÿÿ  ýÿÿÿ V ýÿÿÿ       E þÿÿÿöÿÿÿöÿÿÿ öÿÿÿòÿÿÿ òÿÿÿþÿÿÿòÿÿÿ ôÿÿÿÿÿÿÿôÿÿÿò $ $ 0$0 ,4 44 ,, @$@ <D DD << |„ „„ || lt tt ll $À$   ÄA$S4DDFTGdHtJ„K”L¤;´',E<RLTlU|IœP¬[¼] PP LT TT LL `$` p$p €$€ $  $  °$° À$À œ¤ ¤¤ œœ ¬´ ´´ ¬¬ ¼Ä ÄÄ ¼¼ P$P0@Pp€ °À@ ~   P