void my_drawboxId(int c, int idx, int idy) { idx *= CELLSIZ_X; idy *= CELLSIZ_Y; api_linewin(win, idx + 6, idy + 42, idx+CELLSIZ_X + 6, idy + 42, c); api_linewin(win, idx + 6, idy+CELLSIZ_Y + 42, idx+CELLSIZ_X + 6, idy+CELLSIZ_Y + 42, c); api_linewin(win, idx + 6, idy + 42, idx + 6, idy+CELLSIZ_Y + 42, c); api_linewin(win, idx+CELLSIZ_X + 6, idy + 42, idx+CELLSIZ_X + 6, idy+CELLSIZ_Y + 42, c); return; }
void HariMain(void) { int win, i, j, dis; char buf[216 * 237]; struct POINT { int x, y; }; static struct POINT table[16] = { { 204, 129 }, { 195, 90 }, { 172, 58 }, { 137, 38 }, { 98, 34 }, { 61, 46 }, { 31, 73 }, { 15, 110 }, { 15, 148 }, { 31, 185 }, { 61, 212 }, { 98, 224 }, { 137, 220 }, { 172, 200 }, { 195, 168 }, { 204, 129 } }; win = api_openwin(buf, 216, 237, -1, "bball"); api_boxfilwin(win, 8, 29, 207, 228, 0); for (i = 0; i <= 14; i++) { for (j = i + 1; j <= 15; j++) { dis = j - i; /*两点间的距离*/ if (dis >= 8) { dis = 15 - dis; /*逆向计数*/ } if (dis != 0) { api_linewin(win, table[i].x, table[i].y, table[j].x, table[j].y, 8 - dis); } } } for (;;) { if (api_getkey(1) == 0x0a) { break; /*按下回车键则break; */ } } api_end(); }
static void draw_clock_line(int win, int val, int total, int r, int col) { const int X0 = 160 / 2 + 8, Y0 = 160 / 2 + 8 + 20; double t = val * M_2PI / total; int x = X0 + (int)round(r * sin(t)); int y = Y0 - (int)round(r * cos(t)); api_linewin(win, X0, Y0, x, y, col); }
void HariMain(void) { char *buf; int win, i; api_initmalloc(); buf = api_malloc(160 * 100); win = api_openwin(buf, 160, 100, -1, "lines"); for (i = 0; i < 8; i++) { api_linewin(win + 1, 8, 26, 77, i * 9 + 26, i); api_linewin(win + 1, 88, 26, i * 9 + 88, 89, i); } api_refreshwin(win, 6, 26, 154, 90); for (;;) { if (api_getkey(1) == 0x0a) { break; //enter } } api_closewin(win); api_end(); }
static void draw_poly_circle(int win, int cx, int cy, int r, int div, int col) { int x = cx + r, y = cy; for (int i = 1; i <= div; ++i) { double t = i * M_2PI / div; int nx = cx + r * cos(t); int ny = cy + r * sin(t); api_linewin(win, x, y, nx, ny, col); x = nx; y = ny; } }
void HariMain() { char buf[WND_X * WND_Y * osak_getbuflen()]; char cmdline[30], *p = 0; struct CSV_INFO csvinfo; int sig, cx, cy, basex, basey, i, mode; int *p_com1, *p_com2; char c; /* CSVデータの初期化 */ p_com2 = &csvinfo.comma[MAX_COMMA_Y - 1][MAX_COMMA_X - 1]; for (p_com1 = &csvinfo.comma[0][0]; p_com1 <= p_com2; p_com1++) *p_com1 = -1; csvinfo.max_x = csvinfo.max_y = csvinfo.filesize = 0; /* コマンドライン取得 */ api_cmdline(cmdline, 30); for (p = cmdline; *p > ' '; p++); /* スペースが来るまで読み飛ばす */ for (; *p == ' '; p++); /* スペースを読み飛ばす */ i = api_fopen(p); if (i == 0) { api_putstr0("File not found.\n"); api_end(); } csvinfo.filesize = api_fsize(i, 0); if (csvinfo.filesize >= MAX_FILESIZ - 1) { /* 読めない */ api_putstr0("Filesize is too big.\n"); api_end(); } api_fread(csvinfo.buf, csvinfo.filesize, i); api_fclose(i); p = csvinfo.buf; i = cx = cy = mode = 0; if (*p != ',') csvinfo.comma[0][0] = 0; while (i < csvinfo.filesize) { c = csvinfo.buf[i++]; if (c == 0x22) { if (i == 1 || mode == 0) { mode++; continue; } if (mode && (csvinfo.buf[i] == ',' || csvinfo.buf[i] == 0x0a || csvinfo.buf[i] == 0x0d)) mode--; } if (mode == 0 && c == ',') { cx++; // 「,,」「,\n」のように、セルに何もない状態ではない if (csvinfo.buf[i] != ',' && csvinfo.buf[i] != 0x0a && csvinfo.buf[i] != 0x0d) csvinfo.comma[cy][cx] = i; // コンマの次の文字の場所が記録される } /* 改行コード */ if ((c == 0x0d /* CR */ && csvinfo.buf[i] == 0x0a /* LF */) || (c == 0x0a /* LF */ && csvinfo.buf[i] == 0x0d /* CR */)) { if (i < csvinfo.filesize) { if (csvinfo.max_x < cx) csvinfo.max_x = cx; cy++; cx = 0; i++; if (i >= csvinfo.filesize) break; csvinfo.max_y++; if (csvinfo.buf[i] != ',' && csvinfo.buf[i] != 0x0a && csvinfo.buf[i] != 0x0d) csvinfo.comma[cy][cx] = i; // コンマの次の文字の場所が記録される if (csvinfo.buf[i] == 0x22) mode++; } } } csvinfo.max_x++; csvinfo.max_y++; win = api_openwin(buf, WND_X, WND_Y, -1, "CSV-Viewer"); api_boxfilwin(win, 6, 26+16, GBOX_X+6, GBOX_Y+26+16, 7); /* ワークシート作成 */ for (i = 0; i <= GBOX_X; i += CELLSIZ_X) api_linewin(win, i + 6, 42, i + 6, GBOX_Y + 42, 15); for (i = 0; i <= GBOX_Y; i += CELLSIZ_Y) api_linewin(win, 6, i + 42, GBOX_X + 6, i + 42, 15); /* CSVデータ表示 */ cx = cy = basex = basey = 1; PutCell(1, 1, &csvinfo); my_drawboxId(4, cx, cy); Putcellinfo(basex+cx-2, basey+cy-2, &csvinfo); /* メインループ */ for (;;) { sig = api_getkey(1); if (sig == 0xb4) { /* left */ if (1 < cx) { my_drawboxId(15, cx, cy); cx--; sig = 0; } else if (1 < basex) { basex--; PutCell(basex, basey, &csvinfo); sig = 0; } } if (sig == 0xb6) { /* rigth */ if (cx < maxell_x-1) { my_drawboxId(15, cx, cy); cx++; sig = 0; } else if (basex+cx < MAX_COMMA_X) { basex++; PutCell(basex, basey, &csvinfo); sig = 0; } } if (sig == 0xb8) { /* up */ if (cy > 1) { my_drawboxId(15, cx, cy); cy--; sig = 0; } else if (1 < basey) { basey--; PutCell(basex, basey, &csvinfo); sig = 0; } } if (sig == 0xb2) { /* down */ if (cy < maxell_y-1) { my_drawboxId(15, cx, cy); cy++; sig = 0; } else if (basey+cy < MAX_COMMA_Y) { basey++; PutCell(basex, basey, &csvinfo); sig = 0; } } if (sig == 0xb9) { /* Page Up */ if (basey > 1) { basey -= maxell_y - 1; if (basey < 1) { my_drawboxId(15, cx, cy); basey = cy = 1; } PutCell(basex, basey, &csvinfo); sig = 0; } } if (sig == 0xb3) { /* Page Down */ if (basey <= MAX_COMMA_Y - maxell_y) { basey += maxell_y - 1; if (basey > MAX_COMMA_Y - maxell_y) { my_drawboxId(15, cx, cy); basey = MAX_COMMA_Y - maxell_y + 1; cy = maxell_y - 1; } PutCell(basex, basey, &csvinfo); sig = 0; } } if (sig == 0) { my_drawboxId(4, cx, cy); Putcellinfo(basex+cx-2, basey+cy-2, &csvinfo); } } }