void HariMain() { char buf[496 * 340]; int i; win = api_openwin(buf, 480 + 16, 304 + 36, -1, "kuha"); api_boxfilwin(win, 6, 26, 480 + 6, 304 + 26, 0); timer = api_alloctimer(); api_inittimer(timer, 128); reboot: api_boxfilwin(win, 6, 26, 25 * 8 + 6, 32 + 26, 0); wait(100); api_beep(2001000); wait(5); api_beep(1000500); wait(5); api_beep(0); wait(25); putstr("CPU MODE High", 0, 0, 14); wait(10); putstr("MEMORY 128KB OK", 0, 1, 15); wait(15); putstr("256", 7, 1, 3); wait(15); putstr("384", 7, 1, 3); wait(15); putstr("512", 7, 1, 3); wait(15); putstr("640", 7, 1, 3); wait(15); putstr( "+ KB OK", 13, 1, 14); for (i = 1; i <= 40; i++) { char s[5]; int j = 3, ic = i * 128; do { s[j--] = (ic % 10) + '0'; if ((ic /= 10) == 0) break; } while (j >= 0); while (j >= 0) s[j--] = ' '; putstr(s, 15, 1, 4); wait(75 / 10); } wait(200); goto reboot; }
void HariMain(void) { int i, timer; timer = api_alloctimer(); api_inittimer(timer, 128); for (i = 20000000; i >= 20000; i -= i / 100) { api_beep(i); api_settimer(timer, 1); if (api_getkey(1) != 128) { break; } } api_beep(0); api_end(); }
void HariMain(void) { int i, timer; timer = api_alloctimer(); api_inittimer(timer, 128); for(i = 20000000; i >= 20000; i-= i / 100) { /*20KHz~20Hz是人类可以听到的范围*/ api_beep(i); //让蜂鸣器以iHz的频率进行发声 if(128 != api_get_fifodata(1)) //接收用户任何键盘输入都会关闭程序 { break; } } api_beep(0); //关闭蜂鸣器 api_end(); }
void HariMain(void) { int i, timer; timer = api_alloctimer(); api_inittimer(timer, 128); for (i = 20000000; i >= 20000; i -= i / 100) { /* 20KHz~20Hz ,即人类可以听到的声音范围 */ /* i以1%的速度递减 */ api_beep(i); api_settimer(timer, 1); /* 0.01秒 */ if (api_getkey(1) != 128) { break; } } api_beep(0); api_end(); }
void HariMain(void) { int i, timer; timer = api_alloctimer(); api_inittimer(timer, 128); for (i = 20000000; i >= 20000; i -= i / 100) { /* 20KHz〜20Hz : 人間に聞こえる音の範囲 */ /* iは1%ずつ減らされていく */ api_beep(i); api_settimer(timer, 1); /* 0.01秒 */ if (api_getkey(1) != 128) { break; } } api_beep(0); api_end(); }
void HariMain(void) { char winbuf[256 * 112], txtbuf[100 * 1024]; char s[32], *p, *r; int win, timer, i, j, t = 120, l = 192 / 4, o = 4, q = 7, note_old = 0; /* 音番号と周波数(mHz)の対応表 */ /* たとえば、O4Aは440Hzなので、440000 */ /* オクターブ16のAは1802240Hzなので、1802240000 */ /* 以下はオクターブ16のリスト(C〜B) */ static int tonetable[12] = { 1071618315, 1135340056, 1202850889, 1274376125, 1350154473, 1430438836, 1515497155, 1605613306, 1701088041, 1802240000, 1909406767, 2022946002 }; static int notetable[7] = { +9, +11, +0 /* C */, +2, +4, +5, +7 }; /* コマンドライン解析 */ api_cmdline(s, 30); for (p = s; *p > ' '; p++) { } /* スペースが来るまで読み飛ばす */ for (; *p == ' '; p++) { } /* スペースを読み飛ばす */ i = strlen(p); if (i > 12) { file_error: end("file open error.\n"); } if (i == 0) { end(0); } /* ウィンドウの準備 */ win = api_openwin(winbuf, 256, 112, -1, "mmlplay"); api_putstrwin(win, 128, 32, 0, i, p); api_boxfilwin(win, 8, 60, 247, 76, 7); api_boxfilwin(win, 6, 86, 249, 105, 7); /* ファイル読み込み */ i = api_fopen(p); if (i == 0) { goto file_error; } j = api_fsize(i, 0); if (j >= 100 * 1024) { j = 100 * 1024 - 1; } api_fread(txtbuf, j, i); api_fclose(i); txtbuf[j] = 0; r = txtbuf; i = 0; /* 通常モード */ for (p = txtbuf; *p != 0; p++) { /* 処理を簡単にするためにコメントや空白を消す */ if (i == 0 && *p > ' ') { /* スペースや改行コードなどではない */ if (*p == '/') { if (p[1] == '*') { i = 1; } else if (p[1] == '/') { i = 2; } else { *r = *p; if ('a' <= *p && *p <= 'z') { *r += 'A' - 'a'; /* 小文字は大文字に変換 */ } r++; } } else if (*p == 0x22) { *r = *p; r++; i = 3; } else { *r = *p; r++; } } else if (i == 1 && *p == '*' && p[1] == '/') { /* ブロックコメント */ p++; i = 0; } else if (i == 2 && *p == 0x0a) { /* 行コメント */ i = 0; } else if (i == 3) { /* 文字列 */ *r = *p; r++; if (*p == 0x22) { i = 0; } else if (*p == '%') { p++; *r = *p; r++; } } } *r = 0; /* タイマの準備 */ timer = api_alloctimer(); api_inittimer(timer, 128); /* メイン */ p = txtbuf; for (;;) { if (('A' <= *p && *p <= 'G') || *p == 'R') { /* 音符・休符 */ /* 周波数計算 */ if (*p == 'R') { i = 0; s[0] = 0; } else { i = o * 12 + notetable[*p - 'A'] + 12; s[0] = 'O'; s[1] = '0' + o; s[2] = *p; s[3] = ' '; s[4] = 0; } p++; if (*p == '+' || *p == '-' || *p == '#') { s[3] = *p; if (*p == '-') { i--; } else { i++; } p++; } if (i != note_old) { api_boxfilwin(win + 1, 32, 36, 63, 51, 8); if (s[0] != 0) { api_putstrwin(win + 1, 32, 36, 10, 4, s); } api_refreshwin(win, 32, 36, 64, 52); if (28 <= note_old && note_old <= 107) { api_boxfilwin(win, (note_old - 28) * 3 + 8, 60, (note_old - 28) * 3 + 10, 76, 7); } if (28 <= i && i <= 107) { api_boxfilwin(win, (i - 28) * 3 + 8, 60, (i - 28) * 3 + 10, 76, 4); } if (s[0] != 0) { api_beep(tonetable[i % 12] >> (17 - i / 12)); } else { api_beep(0); } note_old = i; }
void HariMain(void) { char winbuf[256 * 112], txtbuf[100 * 1024]; char s[32], *p, *r; int win, timer, i, j, t = 120, l = 192 / 4, o = 4, q = 7, note_old = 0; /*音号与频率(mHz)的对照表*/ /*例如,04A为440Hz,即440000 */ /*第16八度的A为1802240Hz,即1802240000 */ /*以下为第16八度的列表(C~B) */ static int tonetable[12] = { 1071618315, 1135340056, 1202850889, 1274376125, 1350154473, 1430438836, 1515497155, 1605613306, 1701088041, 1802240000, 1909406767, 2022946002 }; static int notetable[7] = { +9, +11, +0 /* C */, +2, +4, +5, +7 }; /*命令行解析*/ api_cmdline(s, 30); for (p = s; *p > ' '; p++) { } /*一直读到空格为止*/ for (; *p == ' '; p++) { } /*跳过空格*/ i = strlen(p); if (i > 12) { file_error: end("file open error.\n"); } if (i == 0) { end(0); } /*准备窗口*/ win = api_openwin(winbuf, 256, 112, -1, "mmlplay"); api_putstrwin(win, 128, 32, 0, i, p); api_boxfilwin(win, 8, 60, 247, 76, 7); api_boxfilwin(win, 6, 86, 249, 105, 7); /*载入文件*/ i = api_fopen(p); if (i == 0) { goto file_error; } j = api_fsize(i, 0); if (j >= 100 * 1024) { j = 100 * 1024 - 1; } api_fread(txtbuf, j, i); api_fclose(i); txtbuf[j] = 0; r = txtbuf; i = 0; /*通常模式*/ for (p = txtbuf; *p != 0; p++) { /*为了方便处理,将注释和空白删去*/ if (i == 0 && *p > ' ') { /*不是空格或换行符*/ if (*p == '/') { if (p[1] == '*') { i = 1; } else if (p[1] == '/') { i = 2; } else { *r = *p; if ('a' <= *p && *p <= 'z') { *r += 'A' - 'a'; /*将小写字母转换为大写字母*/ } r++; } } else if (*p == 0x22) { *r = *p; r++; i = 3; } else { *r = *p; r++; } } else if (i == 1 && *p == '*' && p[1] == '/') { /*段注释*/ p++; i = 0; } else if (i == 2 && *p == 0x0a) { /*行注释*/ i = 0; } else if (i == 3) { /*字符串*/ *r = *p; r++; if (*p == 0x22) { i = 0; } else if (*p == '%') { p++; *r = *p; r++; } } } *r = 0; /*定时器准备*/ timer = api_alloctimer(); api_inittimer(timer, 128); /*主体*/ p = txtbuf; for (;;) { if (('A' <= *p && *p <= 'G') || *p == 'R') { /*音符、休止符*/ /*计算频率*/ if (*p == 'R') { i = 0; s[0] = 0; } else { i = o * 12 + notetable[*p - 'A'] + 12; s[0] = 'O'; s[1] = '0' + o; s[2] = *p; s[3] = ' '; s[4] = 0; } p++; if (*p == '+' || *p == '-' || *p == '#') { s[3] = *p; if (*p == '-') { i--; } else { i++; } p++; } if (i != note_old) { api_boxfilwin(win + 1, 32, 36, 63, 51, 8); if (s[0] != 0) { api_putstrwin(win + 1, 32, 36, 10, 4, s); } api_refreshwin(win, 32, 36, 64, 52); if (28 <= note_old && note_old <= 107) { api_boxfilwin(win, (note_old - 28) * 3 + 8, 60, (note_old - 28) * 3 + 10, 76, 7); } if (28 <= i && i <= 107) { api_boxfilwin(win, (i - 28) * 3 + 8, 60, (i - 28) * 3 + 10, 76, 4); } if (s[0] != 0) { api_beep(tonetable[i % 12] >> (17 - i / 12)); } else { api_beep(0); } note_old = i; }