📄 dc.c
字号:
draw_color_rect(165, 190, 150, a, 0.2f, 0.3f, 0.0f, 1.0f, 5.1f, 1);
list_menu(b);
ta_commit_poly_hdr(&npoly);
ta_commit_eol();
ta_finish_frame();
FirstCont=getButtons(0);
FirstKeyb=getKeys();
if(FirstCont.ltrig & FirstCont.rtrig) setbrk = 1;
if(!(FirstCont.buttons & CONT_DPAD_UP)) { b--; if (b<0) b=3; }
if(!(FirstCont.buttons & CONT_DPAD_DOWN)) { b++; if (b>=4) b=0; }
if(FirstKeyb == 20992) { b--; if (b<0) b=3; }
if(FirstKeyb == 20736) { b++; if (b>=4) b=0; }
if(FirstKeyb == 27) setbrk = 1;
thd_sleep(150);
}
thd_sleep(2000);
return(MAIN_MENU);
} else if(o == SELECT_ROM) {
//strcpy(dir_root,defdir);
//strcpy(pdir[0],dir_root);
select_rom();
return(EXIT_MENU);
}
return(MAIN_MENU);
}
/* Song menu choices */
typedef struct {
char fn[16];
int size;
} entry;
char curdir[64] = "/cd";
#define DC_MAX_FILES 1000
static entry entries[DC_MAX_FILES];
static int num_entries = 0, load_queued = 0;
static int selected = 0, top = 0;
static int framecnt = 0;
static float throb = 0.2f, dthrob = 0.01f;
static void load_song_list() {
file_t d;
d = fs_open(curdir, O_RDONLY | O_DIR);
if (!d) {
strcpy(curdir, "/cd");
d = fs_open(curdir, O_RDONLY | O_DIR);
if (!d) {
num_entries = 1;
strcpy(entries[0].fn,"Error!");
entries[0].size = 0;
return;
}
}
{
dirent_t *de;
num_entries = 0;
if (strcmp(curdir, "/cd")) {
strcpy(entries[0].fn, "<..>"); entries[0].size = -1;
num_entries++;
}
while ( (de = fs_readdir(d)) && num_entries < DC_MAX_FILES) {
//printf("read entry '%s'\n", de->name);
if((de->size<0) || (strcmp(&de->name[strlen(de->name)-3],"ZIP")==0) || (strcmp(&de->name[strlen(de->name)-3],"zip")==0) || (strcmp(&de->name[strlen(de->name)-2],"GG")==0) || (strcmp(&de->name[strlen(de->name)-2],"gg")==0) || (strcmp(&de->name[strlen(de->name)-3],"SMS")==0) || (strcmp(&de->name[strlen(de->name)-3],"sms")==0)) {
strcpy(entries[num_entries].fn, de->name);
entries[num_entries].size = de->size;
num_entries++;
}
}
}
fs_close(d);
}
/* Draws the song listing */
//260x50
static void draw_listing() {
float y = 50.0f;
int i, esel;
/* Draw all the song titles */
for (i=0; i<14 && (top+i)<num_entries; i++) {
draw_string(260.0f, y, 100.0f, 1.0f, 1.0f, 1.0f, 1.0f, entries[top+i].fn, 1.5f, 1.5f);
//draw_poly_strf(32.0f, y, 100.0f, 1.0f, 1.0f, 1.0f, 1.0f, entries[top+i].fn);
if (entries[top+i].size >= 0) {
draw_stringf(260.0f+180.0f, y, 100.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.5f, 1.5f, "%d bytes", entries[top+i].size);
// draw_poly_strf(32.0f+180.0f, y, 100.0f, 1.0f, 1.0f, 1.0f, 1.0f,
// "%d bytes", entries[top+i].size);
} else {
draw_string(260.0f+180.0f, y, 100.0f, 1.0f, 1.0f, 1.0f, 1.0f, "<DIR>", 1.5f, 1.5f);
//draw_poly_strf(32.0f+180.0f, y, 100.0f, 1.0f, 1.0f, 1.0f, 1.0f, "<DIR>");
}
y += 24.0f;
}
/* Put a highlight bar under one of them */
esel = (selected - top);
draw_string(260.0f, 50.0f+esel*24.0f, 100.0f, 1.0f, 1.0f, 0.0f, 1.0f, entries[selected].fn, 1.5f, 1.5f);
//draw_poly_box(31.0f, 82.0f+esel*24.0f - 1.0f,
// 609.0f, 82.0f+esel*24.0f + 25.0f, 95.0f,
// throb, throb, 0.2f, 0.2f, throb, throb, 0.2f, 0.2f);
}
/* Handle controller input */
int check_controller() {
static uint8 mcont = 0;
static int up_moved = 0, down_moved = 0;
cont_cond_t cond;
if (!mcont) {
mcont = maple_first_controller();
if (!mcont) { return 0; }
}
if (cont_get_cond(mcont, &cond)) { return 0; }
if (!(cond.buttons & CONT_DPAD_UP)) {
if ((framecnt - up_moved) > 10) {
if (selected > 0) {
selected--;
if (selected < top) {
top = selected;
}
}
up_moved = framecnt;
}
}
if (!(cond.buttons & CONT_DPAD_DOWN)) {
if ((framecnt - down_moved) > 10) {
if (selected < (num_entries - 1)) {
selected++;
if (selected >= (top+14)) {
top++;
}
}
down_moved = framecnt;
}
}
if (cond.ltrig > 0) {
if ((framecnt - up_moved) > 10) {
selected -= 14;
if (selected < 0) selected = 0;
if (selected < top) top = selected;
up_moved = framecnt;
}
}
if (cond.rtrig > 0) {
if ((framecnt - down_moved) > 10) {
selected += 14;
if (selected > (num_entries - 1))
selected = num_entries - 1;
if (selected >= (top+14))
top = selected;
down_moved = framecnt;
}
}
if (!(cond.buttons & CONT_Y)) {
uint32 hnd;
int i;
hnd = fs_open(curdir, O_RDONLY | O_DIR);
fs_ioctl(hnd, NULL, 0);
fs_close(hnd);
strcpy(curdir, "/cd");
for (i=0; i<DC_MAX_FILES; i++) {
strcpy(entries[i].fn,NULL);
entries[i].size = 0;
}
load_song_list();
}
if (!(cond.buttons & CONT_A)) {
thd_sleep(200);
if (!strcmp(entries[selected].fn, "Error!")) {
num_entries = 0;
load_song_list();
} else if (entries[selected].size >= 0) {
int n,x;
char *t_filename;
t_filename=malloc(4086*10);
//play_s3m(entries[selected].fn, curdir);
strcpy(t_filename, curdir);
strcat(t_filename, "/");
strcat(t_filename, entries[selected].fn);
x=load_rom(t_filename);
for(n = 0; n < (sizeof(smscrc_list) / sizeof(t_smscrc)); n += 1) {
if(cart.crc == smscrc_list[n].crc) {
jpegcover(smscrc_list[n].filename);
dc_print(smscrc_list[n].name);
thd_sleep(2000);
}
}
free(t_filename);
return x;
} else {
if (!strcmp(entries[selected].fn, "<..>")) {
int i;
for (i=strlen(curdir); i>0; i--) {
if (curdir[i] == '/') {
curdir[i] = 0;
break;
} else
curdir[i] = 0;
}
} else {
if (strcmp(curdir, "/"))
strcat(curdir, "/");
strcat(curdir, entries[selected].fn);
}
selected = top = num_entries = 0;
printf("current directory is now '%s'\n", curdir);
load_song_list();
}
}
return 0;
}
/* Main rendering of the song menu */
void song_menu_render() {
/* Draw a background box */
//draw_poly_box(30.0f, 70.0f, 610.0f, 430.0f, 90.0f,
// 0.2f, 0.8f, 0.5f, 0.0f, 0.2f, 0.8f, 0.8f, 0.2f);
//draw_poly_box(30.0f, 70.0f, 610.0f, 430.0f, 90.0f,
// 0.2f, 0.3f, 0.0f, 1.0f, 0.2f, 0.8f, 0.8f, 0.2f);
//
/* If we don't have a file listing, get it now */
if (num_entries == 0) {
if (load_queued < 4) {
//void draw_string(float x, float y, float z, float a, float r, float g, float b, char *str, float xs, float ys);
// 32.0f 82.0f
draw_string(260.0f, 50.0f, 100.0f, 1.0f, 1.0f, 1.0f, 1.0f, "Scanning Directory...", 1.5f, 1.5f);
//draw_poly_strf(32.0f, 82.0f, 100.0f, 1.0f, 1.0f, 1.0f, 1.0f, "Scanning Directory...");
load_queued++;
return;
} else {
load_song_list();
load_queued = 0;
}
}
/* Draw the song listing */
draw_listing();
/* Adjust the throbber */
throb += dthrob;
if (throb < 0.2f || throb > 0.8f) {
dthrob = -dthrob;
throb += dthrob;
}
framecnt++;
}
char *cscroll[] = {
"",
"",
"",
"",
"Credits",
"",
"",
"Dan Potter",
"Sayten",
"Heliophobe",
"ReGex",
"crt0",
"DCGrendel",
"|joey|",
"",
"All the beta",
"testers",
"",
""
};
int select_rom() {
while(!check_controller()) {
ta_begin_render();
display_dcp(splash);
ta_commit_eol();
song_menu_render();
ta_commit_eol();
ta_finish_frame();
}
return(0);
}
int draw_list(int selected, int total, int maxi, int mini) {
//int i,x,y = (480 - 9*24)/2;
int i,y = (512 - 9*24)/2;
//uint16 *uitxrtmp;
//display_dcp(splash);
//uitxrtmp = (uint16*)ta_txr_map(gui_txr);
poly_hdr_t poly;
ta_poly_hdr_col(&poly, TA_TRANSLUCENT);
ta_begin_render();
draw_background();
ta_commit_eol();
//draw_color_rect(8, 60, 616, 400, 0.2f, 0.3f, 0.0f, 1.0f, 5.1f, 1);
// draw_string_center(16, 6.0f, 1.0f, 0.0f, 0.0f, 0.0f, "MP3 Jukebox", 1.5f, 1.5f);
//id draw_string_center(flt y, ft z, ft a, ft r, ft g, ft b, char *strdfsd, f xs, f ys)
for(i=mini;i<total;i++) {
char *temp;
temp=malloc(512);
if(i==selected) {
//bfont_printf(guitxrtmp + y*512+(x-24), 512, "[ %s ]", game_desc[i]);
sprintf(temp,"[ %s ]",game_desc[i]);
draw_string_center(y, 6.0f, 1.0f, 0.0f, 0.0f, 0.0f, temp, 1.5f, 1.5f);
} else {
//bfont_printf(guitxrtmp + y*512+x, 512, game_desc[i]);
strcpy(temp,game_desc[i]);
draw_string_center(y, 6.0f, 1.0f, 0.0f, 0.0f, 0.0f, temp, 1.5f, 1.5f);
}
y += 27;
free(temp);
}
ta_commit_poly_hdr(&poly);
ta_commit_eol();
ta_finish_frame();
return 0;
}
void bfont_printf(uint16 *buffer, int width, char *fmt, ...) {
va_list args;
char pbuf[2048];
va_start(args, fmt);
vsprintf(pbuf, fmt, args);
va_end(args);
bfont_draw_str(buffer, width, 0, pbuf);
}
char return_hex_char_32 (uint32 val);
uint32 return_1_byte (uint32 val, int position);
void dc_print (char *fmt, ...) {
va_list args;
char pbuf[2048];
poly_hdr_t poly;
va_start(args, fmt);
vsprintf(pbuf, fmt, args);
va_end(args);
ta_poly_hdr_col(&poly, TA_TRANSLUCENT);
ta_begin_render();
draw_background();
ta_commit_eol();
draw_string(20, 400, 6.0f, 1.0f, 0.0f, 0.0f, 0.0f, pbuf, 1.5f, 1.5f);
printf("%s\r\n",pbuf);
//bfont_draw_str(uitxrtmp + 400*640+20, 640, 0, pbuf);
ta_commit_poly_hdr(&poly);
ta_commit_eol();
ta_finish_frame();
}
void dc_sleep (uint32 time) {
thd_sleep(time);
}
void print_uint32 (uint32 val) {
uint32 temp, temp2;
char val_32[9];
int i;
poly_hdr_t poly;
ta_poly_hdr_col(&poly, TA_TRANSLUCENT);
ta_begin_render();
draw_background();
ta_commit_eol();
//bfont_draw_str(uitxrtmp + 400*640+20, 640, 0, pbuf);
for (i=0; i < 8; i++) {
temp2 = val;
temp = return_1_byte (temp2, i);
val_32[7-i] = return_hex_char_32 (temp);
}
val_32[8] = '\0';
//draw_string (20, 20, 255, val_32);
draw_string(20, 400, 6.0f, 1.0f, 0.0f, 0.0f, 0.0f, val_32, 1.5f, 1.5f);
printf("%s\r\n",val_32);
ta_commit_poly_hdr(&poly);
ta_commit_eol();
ta_finish_frame();
thd_sleep(3000);
}
/* csleep(int sleep, uint16 pbutton); okay, now I hated that i
* couldnt flash a message with it sleeping for 500ms, in that 500ms
* sleep someone may have pushed a button or something, so what this
* baby does is sleeps for 1ms and after each 1ms it searches for the
* controller, and then sleeps for 1ms again, until the designated
* sleep number is done then it breaks out and returns 0, or if the
* button is pressed then it breaks out of the loop and returns 1
*/
int csleep(int slp, uint16 pbutton) {
int s=1,a=0;
cont_cond_t mcond;
while(1) {
s++;
if(cont_get_cond(maple_first_controller(), &mcond)) {
return 0;
}
if(!(mcond.buttons & pbutton)) {
a=1;
break;
}
thd_sleep(1);
if(s==slp) {
a=0;
break;
}
}
return(a);
return(0);
}
int switch_mode(int res) {
vid_set_mode_and_cable(vid_check_cable(), res, PM_RGB565);
switch(res) {
case DM_320x240:
SCREEN_W = 320;
SCREEN_H = 240;
break;
case DM_640x480:
SCREEN_W = 640;
SCREEN_H = 480;
break;
case DM_800x608:
SCREEN_W = 800;
SCREEN_H = 608;
break;
}
vid_clear(0,0,0);
return(0);
}
void vmu_display(char * vmuimg) {
uint8 vmubitmap[48*32/8];
int x, y, xi, xb;
memset(vmubitmap, 0, 48*32/8);
for (y=0; y<32; y++)
for (x=0; x<48; x++) {
xi = x / 8;
xb = 0x80 >> (x % 8);
if (vmuimg[(31-y)*48+(47-x)] == '.')
vmubitmap[y*(48/8)+xi] |= xb;
}
vmu_draw_lcd(maple_first_vmu(), vmubitmap);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -