void console_puts(const u08 *str) { while(*str != '\0') { console_putch(*str); str++; } }
static void debug_flush_console() { char * p=exception_text; while(*p){ putch(*p); console_putch(*p++); } exception_text[0]='\0'; }
static void flush_console() { char * p=text; while(*p){ putch(*p); console_putch(*p++); } text[0]='\0'; }
void console_print(const char* str) { u32 i = 0; while (str[i] != 0) { console_putch(str[i]); i++; } }
void command_echo(u8 argc, char** argv) { u8 i; for (i = 1; i < argc; i++) { char* arg = argv[i]; if (i > 1) { console_putch(' '); } console_print(argv[i]); } console_print("\n\n"); }
int main(){ const char * s; char path[256]; int handle; struct controller_data_s pad; int pos=0,ppos=-1,start,count,i; xenos_init(VIDEO_MODE_AUTO); console_init(); xenon_make_it_faster(XENON_SPEED_FULL); usb_init(); usb_do_poll(); xenon_ata_init(); xenon_atapi_init(); fatInitDefault(); handle=-1; handle=bdev_enum(handle,&s); if(handle<0) return 0; strcpy(path,s); strcat(path,":/"); load_dir(path); for(;;){ usb_do_poll(); get_controller_data(&pad, 0); if (pad.s1_y>STICK_THRESHOLD) --pos; if (pad.s1_y<-STICK_THRESHOLD) ++pos; if (entrycount && (pos<0 || pos>=entrycount)){ pos=ppos; continue; } if (pad.logo) return 0; if (pad.a){ if(entries[pos].d_type&DT_DIR){ append_dir_to_path(path,entries[pos].d_name); load_dir(path); ppos=-1; pos=0; }else{ char fn[256]; strcpy(fn,path); strcat(fn,entries[pos].d_name); printf("%s\n",fn); if (strstr(entries[pos].d_name,".elf") || strstr(entries[pos].d_name,".elf32")) { // ugly elf_runFromDisk(fn); }else{ FILE * f=fopen(fn,"rb"); if(f){ int size=1024*1024; int totred=0,red; void * buf=malloc(size); u64 beg=mftb(); do{ red=fread(buf,1,size,f); totred+=red; console_putch('.'); }while(red==size); printf("\n%d bytes, %f KB/s\n",totred, (float)(totred/1024.0)/((float)(mftb()-beg)/PPC_TIMEBASE_FREQ)); free(buf); fclose(f); } } } } if(pad.back){ append_dir_to_path(path,".."); load_dir(path); ppos=-1; pos=0; } if(pad.b){ do{ handle=bdev_enum(handle,&s); }while(handle<0); strcpy(path,s); strcat(path,":/"); load_dir(path); ppos=-1; pos=0; } if (ppos==pos) continue; memset(&pad,0,sizeof(struct controller_data_s)); console_set_colors(BG_COL,FG_COL); console_clrscr(); printf("A: select, B: change disk, Back: parent dir, Logo: reload Xell\n\n%s\n\n",path); start=MAX(0,pos-MAX_DISPLAYED_ENTRIES/2); count=MIN(MAX_DISPLAYED_ENTRIES,entrycount-start); for(i=start;i<start+count;++i){ struct dirent *de = &entries[i]; if (i==pos){ console_set_colors(FG_COL,BG_COL); }else{ console_set_colors(BG_COL,FG_COL); } if (de->d_type&DT_DIR) console_putch('['); s=de->d_name; while(*s) console_putch(*s++); if (de->d_type&DT_DIR) console_putch(']'); console_putch('\r'); console_putch('\n'); } ppos=pos; do{ usb_do_poll(); get_controller_data(&pad, 0); }while(pad.a || pad.b || pad.back || pad.s1_y>STICK_THRESHOLD || pad.s1_y<-STICK_THRESHOLD); } return 0; }
int main(void) { const char *s = NULL; char path[256]; int handle; struct controller_data_s pad; int pos = 0, ppos = -1; xenos_init(VIDEO_MODE_AUTO); console_init(); xenon_make_it_faster(XENON_SPEED_FULL); usb_init(); usb_do_poll(); xenon_ata_init(); dvd_init(); handle = -1; handle = bdev_enum(handle, &s); if (handle < 0) return 0; strcpy(path, s); strcat(path, ":/"); load_dir(path); for (;;) { usb_do_poll(); get_controller_data(&pad, 0); if (pad.s1_y > STICK_THRESHOLD || pad.up) pos--; if (pad.s1_y < -STICK_THRESHOLD || pad.down) pos++; if (entrycount && (pos < 0 || pos >= entrycount)) { pos = ppos; continue; } if (pad.logo) return 0; if (pad.a) { if (entries[pos].d_type & DT_DIR) { append_dir_to_path(path,entries[pos].d_name); load_dir(path); ppos = -1; pos = 0; } else { char fn[256]; strcpy(fn, path); strcat(fn, entries[pos].d_name); printf("%s\n", fn); start_ssnes(fn); } } if (pad.select) { append_dir_to_path(path, ".."); load_dir(path); ppos = -1; pos = 0; } if (pad.b) { do { handle = bdev_enum(handle, &s); } while (handle < 0); strcpy(path, s); strcat(path, ":/"); load_dir(path); ppos = -1; pos = 0; } if (ppos == pos) continue; memset(&pad, 0, sizeof(pad)); console_set_colors(BG_COL, FG_COL); console_clrscr(); printf("A: select, B: change disk, Back: parent dir, Logo: reload Xell\n\n%s\n\n", path); int start = MAX(0, pos - MAX_DISPLAYED_ENTRIES / 2); int count = MIN(MAX_DISPLAYED_ENTRIES, entrycount - start); for (int i = start; i < start + count; i++) { struct dirent *de = &entries[i]; if (i == pos) console_set_colors(FG_COL, BG_COL); else console_set_colors(BG_COL, FG_COL); if (de->d_type & DT_DIR) console_putch('['); s = de->d_name; while (*s) console_putch(*s++); if (de->d_type & DT_DIR) console_putch(']'); console_putch('\r'); console_putch('\n'); } ppos = pos; do { usb_do_poll(); get_controller_data(&pad, 0); } while (pad.a || pad.b || pad.select || pad.s1_y > STICK_THRESHOLD || pad.s1_y < -STICK_THRESHOLD); } return 0; }