📄 thintest.cpp
字号:
/*** thinlib (c) 2001 Matthew Conte (matt@conte.com)****** This program is free software; you can redistribute it and/or** modify it under the terms of version 2 of the GNU Library General ** Public License as published by the Free Software Foundation.**** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ** Library General Public License for more details. To obtain a ** copy of the GNU Library General Public License, write to the Free ** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.**** Any permitted reproduction of these routines, in whole or in part,** must bear this legend.****** thintest.cpp**** thinlib test** $Id: thintest.cpp,v 1.3 2001/03/12 06:06:55 matt Exp $*/#include <stdio.h>#include <string.h>#include <math.h>#include "thinlib.h"//#define TEST_STEREO#define TEST_DPPclass test{public: test(); ~test(); void run();private: enum { SAMPLE_RATE = 44100, FRAGSIZE = 256, VID_WIDTH = 320, VID_HEIGHT = 240, VID_BPP = 8 }; int testSound(); int testVideo(); int testTimer(); int testEvents();};test::test(){ int ret = thin_init(THIN_KEY | THIN_MOUSE | THIN_TIMER | THIN_VIDEO | THIN_SOUND); THIN_ASSERT(-1 != ret);}test::~test(){ thin_shutdown();}static void fillbuf(void *user_data, void *buf, int size){ static int pos = 0; UNUSED(user_data); while (size--) { *((uint8 *) buf)++ = 127 + (int8)(127.0 * sin(2 * PI * pos / 128));#ifdef TEST_STEREO *((uint8 *) buf)++ = 127 + (int8)(127.0 * cos(2 * PI * pos / 128));#endif pos = (pos + 1) & 1023; }}int test::testSound(){ thinsound_t params; params.sample_rate = SAMPLE_RATE; params.frag_size = FRAGSIZE;#ifdef TEST_STEREO params.format = THIN_SOUND_STEREO | THIN_SOUND_8BIT;#else params.format = THIN_SOUND_MONO | THIN_SOUND_8BIT;#endif params.callback = fillbuf; params.user_data = NULL; if (thin_sound_init(¶ms)) return -1; thin_sound_start(); thin_sound_stop(); return 0;}int test::testVideo(){ int i, x, y; bitmap_t *screen; bitmap_t *buffer; /* set up video */ if (thin_vid_init(VID_WIDTH, VID_HEIGHT, VID_BPP, 0/*THIN_VIDEO_HWSURFACE*/)) return -1; buffer = thin_bmp_create(VID_WIDTH, VID_HEIGHT, VID_BPP, 0); if (NULL == buffer) return -1; /* fill it up with something interesting */ for (y = 0; y < buffer->height; y++) for (x = 0; x < buffer->width; x++) buffer->line[y][x] = x ^ y; /* blit it out 1000 times */ for (i = 0; i < 1000; i++) { screen = thin_vid_lockwrite(); if (NULL == screen) return -1; for (y = 0; y < screen->height; y++) memcpy(screen->line[y], buffer->line[y], screen->width); thin_vid_freewrite(-1, NULL); } thin_vid_shutdown(); if (1000 != i) return -1; return 0;}static volatile int timer_ticks = 0;static void timer_handler(void *param){ (void) param; timer_ticks++;}THIN_LOCKED_STATIC_FUNC(timer_handler)int test::testTimer(){ int last_ticks; THIN_LOCK_FUNC(timer_handler); THIN_LOCK_VAR(timer_ticks); /* one second intervals... */ if (thin_timer_init(60, timer_handler, NULL)) return -1; timer_ticks = last_ticks = 0; while (timer_ticks <= 60) { if (last_ticks != timer_ticks) { last_ticks = timer_ticks; thin_printf("%d 60 hz tick\n", last_ticks); } } thin_timer_shutdown(); return 0;}int test::testEvents(){ thin_event_t event; bool done = false; thin_mouse_init(80, 20, 1); thin_joy_init(); thin_dpp_init(); thin_dpp_add(0x378, 0); thin_printf("event test: press ESC..."); while (!done) { thin_event_gather(); while (thin_event_get(&event)) { switch (event.type) { case THIN_KEY_PRESS: if (event.data.keysym == THIN_KEY_ESC) done = true; thin_printf("key press\n"); break; case THIN_KEY_RELEASE: thin_printf("key release\n"); break; case THIN_MOUSE_MOTION: thin_printf("mouse motion\n"); break; case THIN_MOUSE_BUTTON_PRESS: thin_printf("mouse button press\n"); break; case THIN_MOUSE_BUTTON_RELEASE: thin_printf("mouse button release\n"); break; case THIN_JOY_MOTION: thin_printf("joy motion\n"); break; case THIN_JOY_BUTTON_PRESS: thin_printf("joy button press\n"); break; case THIN_JOY_BUTTON_RELEASE: thin_printf("joy button release\n"); break; default: break; } } } thin_dpp_shutdown(); thin_joy_shutdown(); thin_mouse_shutdown(); return 0;}void test::run(){ if (testSound()) return; if (testVideo()) return; if (testTimer()) return; if (testEvents()) return; thin_printf("\ntest complete.\n");}int main(void){ test *pTest = new test; pTest->run(); delete pTest; return 0;}/*** $Log: thintest.cpp,v $** Revision 1.3 2001/03/12 06:06:55 matt** better keyboard driver, support for bit depths other than 8bpp**** Revision 1.2 2001/02/01 06:28:26 matt** thinlib now works under NT/2000**** Revision 1.1 2001/01/15 05:27:43 matt** initial revision***/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -