F64 MySin(F64 d) { //Sin() does not have an address. return Sin(d); } F64 MyCos(F64 d) { //Cos() does not have an address. return Cos(d); } U0 FunDraw1(CDC *dc, F64 (*f)(F64 t)) { I64 i, w = Fs->pix_width, h = Fs->pix_height; F64 scale = h / 5.0; for (i = -w / 2; i <= w / 2; i++) GrLine(dc, w / 2 + i, h / 2 - scale * f(i / scale * 2 * pi), w / 2 + i + 1, h / 2 - scale * f((i + 1) / scale * 2 * pi)); } U0 FunDraw2(CDC *dc, F64 (*f)(F64 t, F64 p), F64 T) { I64 i, w = Fs->pix_width, h = Fs->pix_height; F64 scale = h / 5.0; for (i = -w / 2; i <= w / 2; i++) GrLine(dc, w / 2 + i, h / 2 - scale * f(i / scale, T), w / 2 + i + 1, h / 2 - scale * f((i + 1) / scale, T)); } U0 Init(CDC *dc) { I64 i, w = Fs->pix_width, h = Fs->pix_height; F64 scale = h / 5.0; DocClear; DCFill(dc); dc->color = BLACK; GrLine(dc, 0, h / 2, w - 1, h / 2); GrLine(dc, w / 2, 0, w / 2, h - 1); for (i = -2; i <= 2; i++) { dc->color = BLACK; GrLine(dc, w / 2 - 3, h / 2 - scale * i, w / 2 + 3, h / 2 - scale * i); if (i) { dc->color = DKGRAY; GrPrint(dc, w / 2 + 5, h / 2 - scale * i - FONT_HEIGHT / 2, "%5.1f", ToF64(i)); } } for (i = -4; i <= 4; i++) { dc->color = BLACK; GrLine(dc, w / 2 + scale * i, h / 2 - 3, w / 2 + scale * i, h / 2 + 3); if (i) { dc->color = DKGRAY; GrPrint(dc, w / 2 + scale * i - 7 * FONT_WIDTH / 2, h / 2 + 5 + FONT_HEIGHT, "%5.1f*T", ToF64(i)); } } } U0 SoundMathDemo() { CDC *dc = DCAlias; Init(dc); dc->color = RED; FunDraw1(dc, &MySin); "$RED$Sin$FG$\n"; PressAKey; dc->color = BLUE; FunDraw2(dc, &Saw, 1.0); "$BLUE$Saw$FG$\n"; PressAKey; dc->color = GREEN; FunDraw2(dc, &FullSaw, 1.0); "$GREEN$FullSaw$FG$\n"; PressAKey; Init(dc); dc->color = RED; FunDraw1(dc, &MyCos); "$RED$Cos$FG$\n"; PressAKey; dc->color = BLUE; FunDraw2(dc, &Caw, 1.0); "$BLUE$Caw$FG$\n"; PressAKey; dc->color = GREEN; FunDraw2(dc, &FullCaw, 1.0); "$GREEN$FullCaw$FG$\n"; PressAKey; Init(dc); dc->color = RED; FunDraw1(dc, &MySin); "$RED$Sin$FG$\n"; PressAKey; dc->color = BLUE; FunDraw2(dc, &Tri, 1.0); "$BLUE$Tri$FG$\n"; PressAKey; dc->color = GREEN; FunDraw2(dc, &FullTri, 1.0); "$GREEN$FullTri$FG$\n"; PressAKey; DCFill(dc); DCDel(dc); } SoundMathDemo;