#include "myWin.h" #pragma comment(lib,"winmm.lib") #define SMSG(st, ch,d1,d2)((DWORD)(st<<4)|ch|(d1<<8)|(d2<<16)) #define MAXLEN 180 #define NUMCHAN 1 #define EDT1 1 #define EDT2 2 #define EDT3 3 #define BT1 1001 #define BT2 1002 #define BT3 1003 #define BT4 1004 #define LB1 2001 #define LB2 2002 typedef struct{ int Len;BYTE note; BYTE vel; } MY_SCALE_DATA; static MY_SCALE_DATA scale[NUMCHAN][MAXLEN]={ {{1,0x45,0x45},{1,0x45,0},{1,0x45,0x45},{1,0x45,0},{1,0x45,0x45},{1,0x45,0}, {3,0x45,0x45},{1,0x45,0},{3,0x45,0x45},{1,0x45,0},{3,0x45,0x45},{1,0x45,0}, {1,0x45,0x45},{1,0x45,0},{1,0x45,0x45},{1,0x45,0},{1,0x45,0x45},{1,0x45,0}}}; static MY_SCALE_DATA Temp[NUMCHAN][MAXLEN]; static int ID[NUMCHAN];static int prog[NUMCHAN]={0x50};//{0x49,0x6B}; static HMIDIOUT hM; typedef struct{ TCHAR ch; int code[9]; }CHARTAB; static CHARTAB alfaTab[]={{L'A',{1,3,0}},{L'B',{3,1,1,1,0}},{L'C',{3,1,3,1,0}}, {L'D',{3,1,1,0}},{L'E',{1,0}},{L'F',{1,1,3,1,0}},{L'G',{3,3,1,0}},{L'H',{1,1,1,1,0}}, {L'I',{1,1,0}},{L'J',{1,3,3,3,0}},{L'K',{3,1,3,0}},{L'L',{1,3,1,1,0}},{L'M',{3,3,0}}, {L'N',{3,1,0}},{L'O',{3,3,3,0}},{L'P',{1,3,3,1,0}},{L'Q',{3,3,1,3,0}},{L'R',{1,3,1,0}}, {L'S',{1,1,1,0}},{L'T',{3,0}},{L'U',{1,1,3,0}},{L'V',{1,1,3,0}},{L'W',{1,3,3,0}}, {L'X',{3,1,1,3,0}},{L'Y',{3,1,3,3,0}},{L'Z',{3,3,1,1,0}}, {L'1',{1,3,3,3,3,0}},{L'2',{1,1,3,3,3,0}},{L'3',{1,1,1,3,3,0}},{L'4',{1,1,1,1,3,0}}, {L'5',{1,1,1,1,1,0}},{L'6',{3,1,1,1,1,0}},{L'7',{3,3,1,1,1,0}},{L'8',{3,3,3,1,1,0}}, {L'9',{3,3,3,3,1,0}},{L'0',{3,3,3,3,3,0}}, {L'.',{1,3,1,3,1,3,0}},{L',',{3,3,1,1,3,3,0}},{L':',{3,3,3,1,1,1,0}}, {L'?',{1,1,3,3,1,1,0}},{L'\'',{1,3,3,3,3,1,0}},{L'-',{3,1,1,1,1,3,0}}, {L'(',{3,1,3,3,1,0}},{L')',{3,1,3,3,1,3,0}},{L'/',{3,1,1,3,1,0}}, {L'=',{3,1,1,1,3,0}},{L'+',{1,3,1,3,1,0}},{L'"',{1,3,1,1,3,1,0}}, {L'*',{3,1,1,3,0}},{L'@',{1,3,3,1,3,1,0}},{L'\\',{1,1,1,1,1,1,1,1,0}}, {0,{0}} // * : 乗算記号(×)の替わり, \ : 訂正記号の替わり }; static CHARTAB kanaTab[]={ {L'イ',{1,3,0}},{L'ロ',{1,3,1,3,0}},{L'ハ',{3,1,1,1,0}},{L'ニ',{3,1,3,1,0}}, {L'ホ',{3,1,1,0}},{L'ヘ',{1,0}},{L'ト',{1,1,3,1,1,0}},{L'チ',{1,1,3,1,0}}, {L'リ',{3,3,1,0}},{L'ヌ',{1,1,1,1,0}},{L'ル',{3,1,3,3,1,0}},{L'ヲ',{1,3,3,3,0}}, {L'ワ',{3,1,3,0}},{L'カ',{1,3,1,1,0}},{L'ヨ',{3,3,0}}, {L'タ',{3,1,0}}, {L'レ',{3,3,3,0}},{L'ソ',{3,3,3,1,0}},{L'ツ',{1,3,3,1,0}},{L'ネ',{3,3,1,3,0}}, {L'ナ',{1,3,1,0}},{L'ラ',{1,1,1,0}},{L'ム',{3,0}},{L'ウ',{1,1,3,0}}, {L'ヰ',{1,3,1,1,3,0}}, {L'ノ',{1,1,3,3,0}},{L'オ',{1,3,1,1,1,0}}, {L'ク',{1,1,1,3,0}},{L'ヤ',{1,3,3,0}},{L'マ',{3,1,1,3,0}}, {L'ケ',{3,1,3,3,0}},{L'フ',{3,3,1,1,0}},{L'コ',{3,3,3,3,0}},{L'エ',{3,1,3,3,3,0}}, {L'テ',{1,3,1,3,3,0}},{L'ア',{3,3,1,3,3,0}},{L'サ',{3,1,3,1,3,0}}, {L'キ',{3,1,3,1,1,0}},{L'ユ',{3,1,1,3,3,0}},{L'メ',{3,1,1,1,3,0}}, {L'ミ',{1,1,3,1,3,0}},{L'シ',{3,3,1,3,1,0}},{L'ヱ',{1,3,3,1,1,0}}, {L'ヒ',{3,3,1,1,3,0}},{L'モ',{3,1,1,3,1,0}},{L'セ',{1,3,3,3,1,0}},{L'ス',{3,3,3,1,3,0}}, {L'ン',{1,3,1,3,1,0}},{L'゛',{1,1,0}},{L'゜',{1,1,3,3,1,0}},{L'ー',{1,3,3,1,3,0}}, {L'1',{1,3,3,3,3,0}},{L'2',{1,1,3,3,3,0}},{L'3',{1,1,1,3,3,0}},{L'4',{1,1,1,1,3,0}}, {L'5',{1,1,1,1,1,0}},{L'6',{3,1,1,1,1,0}},{L'7',{3,3,1,1,1,0}},{L'8',{3,3,3,1,1,0}}, {L'9',{3,3,3,3,1,0}},{L'0',{3,3,3,3,3,0}}, {L'、',{1,3,1,3,1,3,0}},{L'《',{1,3,1,3,1,1,0}},{L'(',{3,1,3,3,1,3,0}},{L')',{1,3,1,1,3,1,0}}, {L'e' ,{1,1,1,3,1,0}},{0 ,{0}} }; static TCHAR tranTB[][10]={ TEXT("ガカ゛"),TEXT("ギキ゛"),TEXT("グク゛"),TEXT("ゲケ゛"),TEXT("ゴコ゛"), TEXT("ザサ゛"),TEXT("ジシ゛"),TEXT("ズス゛"),TEXT("ゼセ゛"),TEXT("ゾソ゛"), TEXT("ダタ゛"),TEXT("ヂチ゛"),TEXT("ヅツ゛"),TEXT("デテ゛"),TEXT("ドト゛"), TEXT("バハ゛"),TEXT("ビヒ゛"),TEXT("ブフ゛"),TEXT("ベヘ゛"),TEXT("ボホ゛"), TEXT("パハ゜"),TEXT("ピヒ゜"),TEXT("プフ゜"),TEXT("ペへ゜"),TEXT("ポホ゜"), TEXT("ヴウ゛"),TEXT("ヷワ゛"),TEXT("ヸヰ゛"),TEXT("ヹヱ゛"),TEXT("ヺヲ゛"), }; static HWND edit1, edit2,edit3,bt1,bt2,bt3,bt4; void procTimer(HWND hw, WPARAM wp,LPARAM lp){ for(int j=0;j0){ Temp[j][ID[j]].Len--; if(Temp[j][ID[j]].Len==0){ midiOutShortMsg(hM,SMSG(0x9,j,Temp[j][ID[j]].note,0)); midiOutShortMsg(hM,SMSG(0xC,j,prog[j],0)); ID[j]++; if(Temp[j][ID[j]].note>0) midiOutShortMsg(hM,SMSG(0x9,j,Temp[j][ID[j]].note,Temp[j][ID[j]].vel)); } } } } HWND createEdit(HWND hw,TCHAR str[] ,int X, int Y, int W, int H, int EDIT){ return CreateWindow(TEXT("EDIT"),str, WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|WS_BORDER| ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_LEFT|ES_MULTILINE| ES_OEMCONVERT|ES_WANTRETURN,X,Y,W,H,hw, (HMENU)EDIT,hInstance,NULL); } HWND createButton(HWND hw,TCHAR str[] ,int X, int Y, int W, int H, int BT){ return CreateWindow(TEXT("BUTTON"),str, WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,X,Y,W,H,hw, (HMENU)BT,hInstance,NULL); } HWND createLabel(HWND hw,TCHAR str[] ,int X, int Y, int W, int H, int BT){ return CreateWindow(TEXT("STATIC"),str, WS_CHILD|WS_VISIBLE|SS_LEFT,X,Y,W,H,hw, (HMENU)BT,hInstance,NULL); } void procCreate(HWND hw, WPARAM wp,LPARAM lp){ MoveWindow(hw,0,0,850,600,true); edit1=createEdit(hw, TEXT("ニイタカヤマノボレ"),10,60,400,200,EDT1); edit2=createEdit(hw, TEXT(""),420,60,400,200,EDT2); edit3=createEdit(hw, TEXT(""),10,320,810,200,EDT3); bt1=createButton(hw, TEXT("SOS"),10,0,40,30,BT1); bt2=createButton(hw, TEXT("停止"),50,0,40,30,BT2); bt3=createButton(hw, TEXT("日本語"),90,0,60,30,BT3); bt4=createButton(hw, TEXT("英語"),150,0,50,30,BT4); createLabel(hw, TEXT("日本語は全角片仮吊/平仮吊(数字は半角),英語は半角で入力。") TEXT("また英語の乗算記号は*,訂正記号は\\で代替"),10,30,800,30,BT4); createLabel(hw, TEXT("モールス信号(・短音,* 長音, / 文字区切り, //単語区切り)"), 10,280,800,30,BT4); midiOutOpen(&hM,MIDIMAPPER,NULL,0,CALLBACK_NULL); } void startTone(HWND hw){ for(int j=0;j=0x3041 && str[i]<=0x3096)str[i]=0x30A1+(str[i]-0x3041); for(int k=0;k<12;k++)if(str[i]==strTB[k][0])str[i]=strTB[k][1]; int id=-1; for(int k=0;k<30;k++){ if(str[i]==tranTB[k][0]){id = k; break;} } if(id<0) str2[j++]=str[i]; else{ str2[j++] = tranTB[id][1]; str2[j++] = tranTB[id][2]; } } str2[j]=0; SetWindowText(edit2,str2); setTone(kanaTab,str2); SetWindowText(edit3,str3); startTone(hw); } void procEnglish(HWND hw){ for(int j=0;j=L'a' && str[i]<=L'z')str[i]=L'A'+(str[i]-L'a'); //if(str[i]L'Z') str2[j++] = L' '; str2[j++]=str[i]; } str2[j]=0; SetWindowText(edit2,str2); setTone(alfaTab,str2); SetWindowText(edit3,str3); startTone(hw); } void procCommand(HWND hw, WPARAM wp,LPARAM lp){ switch(LOWORD(wp)){ case BT1:procSOS(hw);break; case BT2:procStop(hw);break; case BT3:procJapanese(hw);break; case BT4:procEnglish(hw);break; } } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){ switch(msg){ case WM_DESTROY : midiOutReset(hM); midiOutClose(hM); PostQuitMessage(0) ;return 0; case WM_CREATE : procCreate (hw,wp,lp);return 0; case WM_COMMAND : procCommand(hw,wp,lp) ;return 0; case WM_TIMER : procTimer (hw,wp,lp);return 0; } return DefWindowProc(hw,msg,wp,lp); }