rendered paste body#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <linux/kd.h>
#include <sys/ioctl.h>
#include <sys/fcntl.h>
#include <sys/stat.h>
#include <termios.h>
#include "../hotdog/hotdog.h"
uint32 *screen;
static uint32 WIDTH, HEIGHT;
struct termio savetty, settty;
int e = 1, count, n = 0, cur_item = 2;
char ch, input = 0;
fd_set rd;
struct timeval tv;
hd_object *obj[10];
hd_engine *engine;
int mame_max = 0, lskip, rskip = 0;
hd_font *chicago;
struct stat st;
//MAME Variables
char *mame_path[15] = { "/roms/hellopac", "/roms/matrxpac", "/roms/aarmada", "/roms/mspacmab", "/roms/pacman", "/roms/nibbler", "/roms/pengo2u", "/roms/congo", "/roms/zaxxon", "/roms/centiped", "/roms/milliped", "/roms/gberet", "/roms/rushatk", "/roms/mrdo", "/roms/ladybug"};
char *mame_name[15] = {"Hellopac", "Matrxpac", "Aarmada", "Miss Pacman", "Pacman", "Nibbler", "Pengo", "Congo", "Zaxxon", "Centiped", "Millped", "GBeret", "Rush Attack", "MRDO", "Ladybug"};
char *mame_exename[15] = {"/ipodmame/mame-hellopac", "/ipodmame/mame-matrxpac", "/ipodmame/mame-aarmada", "/ipodmame/mame-mspacmab", "/ipodmame/mame-pacman", "/ipodmame/mame-nibbler", "/ipodmame/mame-pengo2u", "/ipodmame/mame-congo", "/ipodmame/mame-zaxxon", "/ipodmame/mame-centiped", "/ipodmame/mame-milliped", "/ipodmame/mame-gberet", "/ipodmame/mame-rushatk", "/ipodmame/mame-mrdo", "/ipodmame/mame-ladybug"};
int mc_item = 0;
char *mame_rpath[];
char *mame_ry[];
char *mame_rexename[];
//MAME Variables END
void create_rom_bg() {
obj[7] = HD_PNG_Create("img/rs_bg.png");
obj[7]->x = 0;
obj[7]->y = 0;
obj[7]->w = 320;
obj[7]->h = 240;
obj[8] = HD_PNG_Create("img/rs_bar.png");
obj[8]->x = 0;
obj[8]->y = 0;
obj[8]->w = 320;
obj[8]->h = 15;
}
void create_selector(int i) {
obj[1] = HD_PNG_Create("img/black/sel.png");
obj[1]->x = obj[i]->x;
obj[1]->y = obj[i]->y;
obj[1]->w = 72;
obj[1]->h = 86;
}
static void update(hd_engine *e, int x, int y, int w, int h)
{
HD_LCD_Update (e->screen.framebuffer, 0, 0, WIDTH, HEIGHT);
}
void move_sel(int i) //Moves Selection to an icon!
{
HD_Destroy(obj[1]);
create_selector(i);
int c = 0;
for (c = 0; c <= 6; c++) {
HD_Register(engine, obj[c]);
}
}
void KB_Init(void)
{
int flags = fcntl(0, F_GETFL, 0);
int fd = open("/dev/console", O_NONBLOCK);
if (fd < 0)
{
printf("attention: console still active!\n");
sleep(20);
/* not _deadly_ if we can't set graphics mode */
return;
}
ioctl(fd, KDSETMODE, KD_GRAPHICS);
close(fd);
fcntl(0, F_SETFL, flags | O_NONBLOCK);
ioctl(0, TCGETA, &savetty);
ioctl(0, TCGETA, &settty);
settty.c_lflag &= ~ICANON;
settty.c_lflag &= ~ECHO;
ioctl(0, TCSETAF, &settty);
}
void launch_emu(char *cmd) {
HD_LCD_Quit();
system(cmd);
HD_LCD_Init();
move_sel(cur_item);
HD_Render(engine);
}
int main(int argc, char **argv)
{
HD_LCD_Init();
KB_Init();
HD_LCD_GetInfo(0, &WIDTH, &HEIGHT, 0);
screen = malloc(WIDTH * HEIGHT * 2 * sizeof(uint32));
engine = HD_Initialize(WIDTH, HEIGHT, 16, screen, update);
chicago = HD_Font_LoadFNT("img/Chicago.fnt");
//ROM LISTING STUFF
DIR *dir = opendir("/roms/gameboy/");
struct dirent *mydir;
char gb_list, rom_title;
int xy, roms, romselection = 0;
obj[0] = HD_PNG_Create ("img/black/bg.png");
obj[0]->x = 0;
obj[0]->y = 0;
obj[0]->w = 320;
obj[0]->h = 240;
create_selector(2);
obj[2] = HD_PNG_Create ("img/black/scummvm.png");
obj[2]->x = 20;
obj[2]->y = 60;
obj[2]->w = 72;
obj[2]->h = 86;
obj[3] = HD_PNG_Create ("img/black/idoom.png");
obj[3]->x = WIDTH/2-32;
obj[3]->y = 35;
obj[3]->w = 72;
obj[3]->h = 86;
obj[4] = HD_PNG_Create ("img/black/iboy.png");
obj[4]->x = WIDTH-84;
obj[4]->y = 60;
obj[4]->w = 72;
obj[4]->h = 86;
obj[5] = HD_PNG_Create ("img/black/quit.png");
obj[5]->x = 180;
obj[5]->y = 140;
obj[5]->w = 72;
obj[5]->h = 86;
obj[6] = HD_PNG_Create ("img/black/mame.png");
obj[6]->x = 80;
obj[6]->y = 140;
obj[6]->w = 72;
obj[6]->h = 86;
create_rom_bg();
hd_surface mysrf;
mysrf = obj[7]->canvas;
int c = 0;
for (c = 0; c <= 6; c++) {
HD_Register(engine, obj[c]);
}
HD_Render(engine);
move_sel(cur_item);
HD_Render(engine);
while( romselection == 0 ) {
switch(getc(stdin)) {
case 'r':
if(rskip == 's')
{
switch(cur_item) {
case 2:
cur_item = 3;
break;
case 3:
cur_item = 4;
break;
case 4:
cur_item = 5;
break;
case 5:
cur_item = 6;
break;
case 6:
cur_item = 2;
break;
}
move_sel(cur_item);
HD_Render(engine);
rskip = 0;
}
else if(rskip == 10)
{ rskip = 's'; }
else
{ rskip++; }
break;
case 'l':
if(lskip == 's')
{
switch(cur_item) {
case 2:
cur_item = 6;
break;
case 6:
cur_item = 5;
break;
case 5:
cur_item = 4;
break;
case 4:
cur_item = 3;
break;
case 3:
cur_item = 2;
break;
}
move_sel(cur_item);
HD_Render(engine);
lskip = 0;
}
else if(lskip == 10)
{ lskip = 's'; }
else
{ lskip++; }
break;
case '\n':
switch(cur_item) {
case 2:
rom_title = "ScummVM Game Selection";
break;
case 3:
rom_title = "iDoom WAD Selection";
break;
case 4:
rom_title = "iBoy Rom Selection";
break;
case 5:
HD_LCD_Quit();
system("/sbin/reboot");
break;
case 6:
rom_title = "iPodMAME Rom Selection";
break;
}
roms = 0;
romselection = 1;
break;
case 'd':
break;
}
}
while( romselection == 1 ) {
if ( roms == 0 ) {
HD_Destroy(obj[1]);
HD_Register(engine, obj[7]);
HD_Register(engine, obj[8]);
switch(cur_item) {
case 2:
HD_Font_Draw(mysrf, chicago, 25, 8, 0xFFFFFFFF, "ScummVM Game Selection");
break;
case 3:
HD_Font_Draw(mysrf, chicago, 25, 8, 0xFFFFFFFF, "iDoom WAD Selection");
break;
case 4:
HD_Font_Draw(mysrf, chicago, 25, 8, 0xFFFFFFFF, "iBoy Rom Selection");
break;
case 6:
HD_Font_Draw(mysrf, chicago, 25, 8, 0xFFFFFFFF, "iPodMAME Rom Selection");
count = 20;
for (xy=0;xy<=14;xy++) {
if ( stat(mame_path[xy], &st) >= 0 ) {
mame_rexename[e] = mame_exename[xy];
mame_rpath[e] = mame_path[xy];
mame_ry[e] = count+13;
count = count+15;
HD_Font_Draw(mysrf, chicago, 25, count, 0xFFFFFFFF, mame_name[xy]);
}
}
mc_item = 1;
obj[8]->y = mame_ry[1];
break;
}
HD_Render(engine);
roms = 1;
}
switch(getc(stdin)) {
case 'r':
if(rskip == 's')
{
if ( mc_item == e ) {
obj[8]->y = mame_ry[1];
mc_item = 1;
} else {
obj[8]->y = mame_ry[mc_item+1];
mc_item++;
}
rskip = 0;
}
else if(rskip == 10)
{ rskip = 's'; }
else
{ rskip++; }
HD_Render(engine);
break;
case 'l':
if(lskip == 's')
{
if ( mc_item == 1 ) {
obj[8]->y = mame_ry[e];
mc_item = e;
} else {
obj[8]->y = mame_ry[mc_item-1];
mc_item--;
}
lskip = 0;
}
else if(lskip == 10)
{ lskip = 's'; }
else
{ lskip++; }
HD_Render(engine);
break;
case 'd':
break;
case '\n':
HD_LCD_Quit();
system(mame_exename[mc_item]);
break;
}
}
return 0;
}