Pastebin
API
tools
faq
paste
Login
Sign up
Please fix the following errors:
New Paste
Syntax Highlighting
/* Wiireader v1.1 Copyright (C) 2008 Francisco Muñoz "Hermes" (www.entuwii.net) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #include <math.h> #include "jpeglib.h" #include <setjmp.h> #include <ogcsys.h> #include <gccore.h> #include "ogc/lwp_threads.h" #include <wiiuse/wpad.h> #include <fat.h> #include <fcntl.h> #include "sys/dir.h" #include <sys/statvfs.h> #include "unistd.h" #include <ogc/conf.h> #include "screen.h" #include "textreader.h" // //#include "asnd.h" #include "audioplayer.h" #include "unzip.h" #include "icons.h" #define ticks_to_msecs(ticks) ((u32)((ticks)/(TB_TIMER_CLOCK))) extern unsigned gettick(); #define THREAD_PRIORITY() LWP_SetThreadPriority(LWP_GetSelf(),40) int is_16_9=0; // screen format 16:9 ? /* int fprintf(FILE *a,const char *s, ...) { exit(0); } int printf(const char *s, ...) { exit(0); } */ extern char *debug_str; char path_file[258]="fat0:/"; char path_txt_cfg[258]="fat0:/apps/wiireader/textreader.cfg"; char path_cfg[258]="fat0:/apps/wiireader/textreader.cfg"; static char extern_char_set[28672]; unsigned char temp_buffer[32768]; // buffer temporal unsigned new_key=0,old_key=0; int exit_by_reset=0; int return_reset=2; void reset_call() {exit_by_reset=return_reset;} void power_call() {exit_by_reset=3;} #define WII_A 16 #define WII_B 32 #define WII_MINUS 64 #define WII_PLUS 128 #define WII_HOME 256 #define WII_START 512 #define WII_ONE 1024 #define WII_TWO 2048 #define WII_RIGHT 2 #define WII_LEFT 1 #define WII_UP 4 #define WII_DOWN 8 #define QTDEN(a,b) ((a & (b))==(b)) unsigned wii_nKeys=0; static int valid_keys=0; void wpad_callback(s32 chan, const WPADData *data) { if(WPAD_ReadEvent(chan, (WPADData * )data)<0) valid_keys=0; } unsigned wii_joystick_read(int sel) { u32 type[4]={0,0,0,0}; u32 butt=0; s32 retj[4]={-1,-1,-1,-1}; int n; unsigned ret=0; static expansion_t w_exp; int is_readed=0; debug_str="WPAD_ScanPads()"; DI_AudioThread(1); valid_keys=1; n=WPAD_ReadPending(WPAD_CHAN_ALL, wpad_callback);//WPAD_ScanPads(); DI_AudioThread(0); if(n<WPAD_ERR_NONE || !valid_keys) {return 0;} debug_str="wii_joystick_read()"; if(exit_by_reset) { exit(0); } DI_AudioThread(1); // lee los 4 wiimotes for(n=0;n<4;n++) retj[n]=WPAD_Probe(n, &type[n]); for(n=0;n<4;n++) { if(retj[n]>=0) { butt=WPAD_ButtonsHeld(n); is_readed=1; if(butt & WPAD_BUTTON_HOME) ret|=WII_HOME; if(type[n]==WPAD_EXP_NUNCHUK) { WPAD_Expansion(n,&w_exp); if(w_exp.nunchuk.js.pos.y<(128-48)) ret|=WII_DOWN; if(w_exp.nunchuk.js.pos.y>(128+48)) ret|=WII_UP; if(w_exp.nunchuk.js.pos.x<(128-48)) ret|=WII_LEFT; if(w_exp.nunchuk.js.pos.x>(128+48)) ret|=WII_RIGHT; if(butt & WPAD_NUNCHUK_BUTTON_C) ret|=WII_A; if(butt & WPAD_NUNCHUK_BUTTON_Z) ret|=WII_B; } if(butt & WPAD_BUTTON_A) ret|=WII_A; if(butt & WPAD_BUTTON_B) ret|=WII_B; if(butt & WPAD_BUTTON_1) ret|=WII_ONE; if(butt & WPAD_BUTTON_2) ret|=WII_TWO; if(butt & WPAD_BUTTON_UP) ret|=WII_UP; if(butt & WPAD_BUTTON_DOWN) ret|=WII_DOWN; if(butt & WPAD_BUTTON_RIGHT) ret|=WII_RIGHT; if(butt & WPAD_BUTTON_LEFT) ret|=WII_LEFT; if(butt & WPAD_BUTTON_MINUS) ret|=WII_MINUS; if(butt & WPAD_BUTTON_PLUS) ret|=WII_PLUS; } } DI_AudioThread(0); if(!is_readed) return wii_nKeys; debug_str="Undef"; return ret; } char * get_name(char *name); int volume=204; //////////////////////////////////////////////////////////////////////// /***************************************************************************/ // seleccion de ficheros /***************************************************************************/ int nfiles=0; int ndirs=0; #define MAX_ENTRY 512 struct _files { int size; char name[258]; char is_directory; char is_selected; } files[MAX_ENTRY],swap_file; int njpg_files=0,nmusic_files=0,play_file=-1,current_jpg=-1; int music_playing=0, music_loop=0; struct _play_files { char name[258]; } jpg_files[MAX_ENTRY], music_files[MAX_ENTRY], txt_file, swap_music; // textreader char *txt_file_mem=NULL; int txt_file_len=0; void music_shuffle() { int n,k; int s; if(nmusic_files<=1) return; for(s=0;s<10;s++) for(n=0;n<nmusic_files;n++) { k=((rand() & 511)* nmusic_files)/512; swap_music= music_files[n]; music_files[n]=music_files[k]; music_files[k]= swap_music; } StopAudio();music_playing=0;play_file=-1; } // test_music_file: mode 0 -> Activa flag si fichero está en la lista; mode 1-> añade o borra fichero void test_music_file(int index, int mode) { int n; int test; //if(index>=nfiles) return; if(files[index].is_directory) {files[index].is_selected=0;return;} test=0; for(n=0;n<nmusic_files;n++) { if(!strcmp(files[index].name, music_files[n].name)) { test=1;break; } } if(mode==0) { if(test) files[index].is_selected=1; else files[index].is_selected=0; } if(mode==1) { if(!test) { if(nmusic_files<MAX_ENTRY) {files[index].is_selected=1;memcpy(music_files[nmusic_files].name,files[index].name,258);nmusic_files++;} } else { files[index].is_selected=0; if(nmusic_files>0) nmusic_files--; for(;n<nmusic_files;n++) {music_files[n]=music_files[n+1];} } } } int loop_music_playing() { int n; if(play_file>=0 && music_playing) { n=StatusAudio(); if(n!=AUDIO_STATUS_RUNNING && n!=AUDIO_STATUS_PAUSED) { play_file++; if(music_loop) if(play_file>=nmusic_files) play_file=0; if(play_file<nmusic_files) {music_playing=1;if(PlayAudio(music_files[play_file].name, 0, 0)<0) music_playing=0; return 1;} else {StopAudio();music_playing=0;play_file=-1;} } } return 0; } int is_ext(char *a,char *b) // compara extensiones { int n,m; m=0;n=0; while(a[n]!=0) {if(a[n]=='.') m=n; n++;} n=0; while(b[n]!=0) { unsigned char t1,t2; t1=a[m];t2=b[n]; if(t1>='A' && t1<='Z') t1+=32; if(t2>='A' && t2<='Z') t2+=32; if(t1!=t2) return 0; m++; n++; } if(a[m]==0) return 1; return 0; } char * get_name_short(char *name) // devuelve el nombre del fichero recortado a 36 caracteres { #define MAX_STR 36 #define BRK_STR 17 static unsigned char name2[MAX_STR+4]; int n,m,l; m=0;n=-1; while(name[m]!=0) {if(name[m]=='/') n=m;m++;} // elimina la parte de directorio n++; l=n; while(name[l]!=0) l++; l-=n; if(l>=MAX_STR) { memcpy(name2,&name[n],BRK_STR); name2[BRK_STR]='.'; name2[BRK_STR+1]='.'; n+=(l-MAX_STR)+(BRK_STR+2); for(m=BRK_STR+2;m<MAX_STR;m++) { name2[m]=name[n]; if(name[n]==0) break; n++; } } else { for(m=0;m<MAX_STR;m++) { name2[m]=name[n]; if(name[n]==0) break; n++; } } name2[m]=0; #undef MAX_STR #undef BRK_STR return ((char *)name2); } char * get_name_short_fromUTF8(char *name) // devuelve el nombre del fichero recortado a 36 caracteres { #define MAX_STR 36 #define BRK_STR 17 static unsigned char name2[MAX_STR+4]; int n,m,l,s; m=0;n=-1; while(name[m]!=0) {if(name[m]=='/') n=m;m++;} // elimina la parte de directorio n++; l=n; while(name[l]!=0) l++; l-=n; if(l>=MAX_STR) { s=n; for(m=0;m<BRK_STR;m++) { if((name[s] & 0xc0)==0xc0 && (name[s+1] & 0xc0)==0x80) { name2[m]= (((name[s] & 3)<<6) | (name[s+1] & 63)); s++; } else name2[m]=name[s]; s++; } //memcpy(name2,&name[n],BRK_STR); name2[m]='.'; name2[m+1]='.'; m+=2; n+=(l-MAX_STR)+(m); for(;m<MAX_STR;m++) { if((name[n] & 0xc0)==0xc0 && (name[n+1] & 0xc0)==0x80) { name2[m]= (((name[n] & 3)<<6) | (name[n+1] & 63)); n++; } else name2[m]=name[n]; if(name[n]==0) break; n++; } } else { for(m=0;m<MAX_STR;m++) { if((name[n] & 0xc0)==0xc0 && (name[n+1] & 0xc0)==0x80) { name2[m]= (((name[n] & 3)<<6) | (name[n+1] & 63)); n++; } else name2[m]=name[n]; if(name[n]==0) break; n++; } } name2[m]=0; #undef MAX_STR #undef BRK_STR return ((char *)name2); } void char_to_utf8(char *s, char *d) { u8 *c= (u8 *) s; while(*c!=0) { if((*c & 0xc0)==0xc0 && (*(c+1) & 0xc0)==0x80) // esto es UTF-8! { *d++=*c++; *d++=*c; } else if(*c>=0x80) // convierte a UTF-8 { *d++= 192 | (*c>>6); *d++= 128 | (*c & 63); } else *d++=*c; c++; } *d=0; } void utf8_to_char(char *s, char *d) { u8 *c= (u8 *) s; while(*c!=0) { if((*c & 0xc0)==0xc0 && (*(c+1) & 0xc0)==0x80) { *d++= (((*c & 3)<<6) | (*(c+1) & 63)); c++; } else *d++=*c; c++; } *d=0; } char * get_name(char *name) // devuelve el nombre del fichero completo { static unsigned char name2[256]; int n,m; m=0;n=-1; while(name[m]!=0) {if(name[m]=='/') n=m;m++;} n++; for(m=0;m<255;m++) { name2[m]=name[n]; if(name[n]==0) break; n++; } name2[m]=0; return ((char *) name2); } char * get_name_from_UTF8(char *name) // devuelve el nombre del fichero completo { static unsigned char name2[256]; int n,m; m=0;n=-1; while(name[m]!=0) {if(name[m]=='/') n=m;m++;} n++; for(m=0;m<255;m++) { if((name[n] & 0xc0)==0xc0 && (name[n+1] & 0xc0)==0x80) { name2[m]= (((name[n] & 3)<<6) | (name[n+1] & 63)); n++; } else name2[m]=name[n]; if(name[n]==0) break; n++; } name2[m]=0; return ((char *) name2); } char * LoadZipTxt(char *name, int *fsize) { unz_global_info gi; unzFile uf; int error; int n; char zip_file[256]; unz_file_info zip_file_info; char *mem=NULL; *fsize=0; uf = unzOpen (name); if (uf == NULL) return NULL; error = unzGetGlobalInfo (uf, &gi); if(error != UNZ_OK) {unzClose(uf);return NULL;} for (n=0; n<gi.number_entry; n++) { error = unzGetCurrentFileInfo (uf, &zip_file_info, zip_file, sizeof (zip_file), NULL, 0, NULL, 0); if(error != UNZ_OK) {unzClose(uf);return NULL;} if (is_ext(zip_file, ".txt")) break; if (n < (gi.number_entry-1)) { error = unzGoToNextFile (uf); if(error != UNZ_OK) {unzClose(uf);return NULL;} } } // mem =malloc(zip_file_info.uncompressed_size+0x2000); if (mem == NULL) {unzClose(uf);return NULL;} error = unzOpenCurrentFile (uf); if(error != UNZ_OK) {free(mem);mem=0;unzClose(uf);return NULL;} *fsize=zip_file_info.uncompressed_size; n=0; while(n<zip_file_info.uncompressed_size) { error = unzReadCurrentFile (uf, mem+n, zip_file_info.uncompressed_size-n); if (error <= 0) break; n+=error; } if(error <0) {*fsize=0;free(mem);mem=0;unzCloseCurrentFile(uf);unzClose(uf);return NULL;} error = unzCloseCurrentFile (uf); if(error != UNZ_OK) {*fsize=0;unzClose(uf);free(mem);mem=0;return NULL;} return mem; } int have_device=0; int current_device=0; void read_list_file(unsigned char *dirname, int flag) { DIR_ITER *fd; static char namefile[256*4]; static struct stat filestat; static char swap[257]; int n,m,f; if(!dirname) sprintf(swap, "%s", path_file); else { sprintf(path_file, "%s", dirname); n=0;while(dirname[n]!=0) n++; if(dirname[n-1]=='/') // esto solo pasa si es directorio raiz {sprintf(swap, "%s", dirname);dirname=0;} else { sprintf(swap, "%s/", dirname); if(swap[n-1]=='.') {n--;while(swap[n]!='/') n--;n--;while(swap[n]!='/') n--; if(swap[n-1]==':') dirname=0; n++;swap[n]=0;} // para volver al directorio anterior } } ndirs=0; nfiles = 0; files[nfiles].is_selected=0; if(!dirname) { if(current_device==0 && (have_device & 2)!=0) { sprintf(files[nfiles].name, ".[USB]"); ndirs++;files[nfiles].is_directory=1; files[nfiles].is_selected=0; nfiles++; } if(current_device==1 && (have_device & 1)!=0) { sprintf(files[nfiles].name, ".[SD]"); ndirs++;files[nfiles].is_directory=1; files[nfiles].is_selected=0; nfiles++; } } fd = diropen(swap); if(fd != NULL) { while(nfiles < MAX_ENTRY) { files[nfiles].is_directory=0; files[nfiles].is_selected=0; if(dirnext(fd, namefile, &filestat)!=0) break; if(namefile[0]=='.' && namefile[1]==0) continue; sprintf(files[nfiles].name, "%s%s", swap, namefile); if((filestat.st_mode & S_IFDIR)) { files[nfiles].size=0; ndirs++;files[nfiles].is_directory=1; } else { if(flag==0) { if(!(is_ext(files[nfiles].name,".mp3") || is_ext(files[nfiles].name,".ogg") || is_ext(files[nfiles].name,".m3u") )) continue; if(!is_ext(files[nfiles].name,".m3u")) test_music_file(nfiles, 0); } if(flag==1) if(!(is_ext(files[nfiles].name,".jpg") || is_ext(files[nfiles].name,".jpeg"))) continue; if(flag==2) if(!(is_ext(files[nfiles].name,".txt") || is_ext(files[nfiles].name,".zip"))) continue; files[nfiles].size=filestat.st_size; } nfiles++; } dirclose(fd); } if(!nfiles) { if(current_device==0 && (have_device & 2)!=0) { sprintf(files[nfiles].name, ".[USB]"); ndirs++;files[nfiles].is_directory=1; files[nfiles].is_selected=0; nfiles++; } if(current_device==1 && (have_device & 1)!=0) { sprintf(files[nfiles].name, ".[SD]"); ndirs++;files[nfiles].is_directory=1; files[nfiles].is_selected=0; nfiles++; } } for(n=0;n<(nfiles);n++) //ordena for(m=n+1;m<nfiles;m++) { f=0; if(files[m].is_directory==1 && files[n].is_directory==0) f=1; if(f==0) if(files[m].is_directory==files[n].is_directory) if(strcmp(files[m].name,files[n].name)<0) f=1; if(f) { f=0; swap_file=files[m]; files[m]=files[n]; files[n]=swap_file; } } } void fun_exit() { int m=0; Screen_flip(); autocenter=0; sizeletter=1; m=SCR_HEIGHT/2; SetTexture(MOSAIC_PATTERN); DrawRoundFillBox(32,m-128, 640-64, 256, 0,0xff803000); SetTexture(NULL); DrawRoundBox(32,m-128, 640-64, 256, 0, 6, 0xfff08020); autocenter=1; PX=0;PY=m-16; s_printf("Closing All"); autocenter=0; Screen_flip(); StopAudio(); write_cfg(path_txt_cfg); WPAD_Shutdown(); ASND_End(); if(have_device & 1) fatUnmount(PI_INTERNAL_SD); if(have_device & 2) fatUnmount(PI_USBSTORAGE); VIDEO_WaitVSync(); VIDEO_WaitVSync(); sleep(2); if(exit_by_reset==2) SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); if(exit_by_reset==3) SYS_ResetSystem(SYS_POWEROFF_STANDBY, 0, 0); } struct my_error_mgr { struct jpeg_error_mgr pub; /* "public" fields */ jmp_buf setjmp_buffer; /* for return to caller */ }; typedef struct my_error_mgr * my_error_ptr; char jpg_error_str[JMSG_LENGTH_MAX]; void my_error_exit (j_common_ptr cinfo) { /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */ my_error_ptr myerr = (my_error_ptr) cinfo->err; /* Always display the message. */ /* We could postpone this until after returning, if we chose. */ // (*cinfo->err->output_message) (cinfo); (*cinfo->err->format_message) (cinfo, jpg_error_str); /* Return control to the setjmp point */ longjmp(myerr->setjmp_buffer, 1); } unsigned *jpeg_buf=NULL; int jpeg_tdx,jpeg_tdy; // texel w-h int jpeg_w,jpeg_h; // pixel w-h int read_JPEG_file (char * filename) { /* This struct contains the JPEG decompression parameters and pointers to * working space (which is allocated as needed by the JPEG library). */ struct jpeg_decompress_struct cinfo; /* We use our private extension JPEG error handler. * Note that this struct must live as long as the main JPEG parameter * struct, to avoid dangling-pointer problems. */ struct my_error_mgr jerr; /* More stuff */ FILE * infile; /* source file */ JSAMPARRAY buffer; /* Output row buffer */ int row_stride; /* physical row width in output buffer */ int n,m; int a,b,k,l,same_w; int rr,gg,bb; u8 *buf; /* In this example we want to open the input file before doing anything else, * so that the setjmp() error recovery below can assume the file is open. * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that * requires it in order to read binary files. */ jpg_error_str[0]=0; if ((infile = fopen(filename, "rb")) == NULL) { sprintf(jpg_error_str,"Can't open file"); return 0; } /* Step 1: allocate and initialize JPEG decompression object */ /* We set up the normal JPEG error routines, then override error_exit. */ cinfo.err = jpeg_std_error(&jerr.pub); jerr.pub.error_exit = my_error_exit; /* Establish the setjmp return context for my_error_exit to use. */ if (setjmp(jerr.setjmp_buffer)) { /* If we get here, the JPEG code has signaled an error. * We need to clean up the JPEG object, close the input file, and return. */ //printf("Error!!!\n"); jpeg_destroy_decompress(&cinfo); fclose(infile); return 0; } /* Now we can initialize the JPEG decompression object. */ jpeg_create_decompress(&cinfo); /* Step 2: specify data source (eg, a file) */ jpeg_stdio_src(&cinfo, infile); /* Step 3: read file parameters with jpeg_read_header() */ (void) jpeg_read_header(&cinfo, TRUE); /* We can ignore the return value from jpeg_read_header since * (a) suspension is not possible with the stdio data source, and * (b) we passed TRUE to reject a tables-only JPEG file as an error. * See libjpeg.doc for more info. */ /* Step 4: set parameters for decompression */ /* In this example, we don't need to change any of the defaults set by * jpeg_read_header(), so we do nothing here. */ /* Step 5: Start decompressor */ (void) jpeg_start_decompress(&cinfo); /* We can ignore the return value since suspension is not possible * with the stdio data source. */ /* We may need to do some setup of our own at this point before reading * the data. After jpeg_start_decompress() we have the correct scaled * output image dimensions available, as well as the output colormap * if we asked for color quantization. * In this example, we need to make an output work buffer of the right size. */ /* JSAMPLEs per row in output buffer */ row_stride = cinfo.output_width * cinfo.output_components; // printf("width %i %i\n",cinfo.output_width, cinfo.output_components); /* Make a one-row-high sample array that will go away when done with image */ buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); jpeg_w=cinfo.output_width; jpeg_h=cinfo.output_height; if(!buffer || jpg_error_str[0]!=0) { jpeg_destroy_decompress(&cinfo); fclose(infile); return 0; } /* Step 6: while (scan lines remain to be read) */ /* jpeg_read_scanlines(...); */ /* Here we use the library's state variable cinfo.output_scanline as the * loop counter, so that we don't have to keep track ourselves. */ n=0; jpeg_tdx=(jpeg_w>>3)<<3; if(jpeg_tdx>1024) jpeg_tdx=1024; jpeg_tdy=(jpeg_h>>3)<<3; if(jpeg_tdy>1024) jpeg_tdy=1024; a=0;k=0; while (cinfo.output_scanline < cinfo.output_height) { /* jpeg_read_scanlines expects an array of pointers to scanlines. * Here the array is only one element long, but you could ask for * more than one scanline at a time if that's more convenient. */ (void) jpeg_read_scanlines(&cinfo, buffer, 1); /* Assume put_scanline_someplace wants a pointer and sample count. */ // put_scanline_someplace(buffer[0], row_stride); if(jpg_error_str[0]!=0) { jpeg_destroy_decompress(&cinfo); fclose(infile); return 0; } buf=(u8 *) buffer[0]; rr=buf[2]; gg=buf[1]; bb=buf[0]; b=0;l=0; same_w=0; for(m=0;m<jpeg_w;m++) // re-scale to the max 1024x1024 { if(!same_w) { jpeg_buf[(k*jpeg_tdx)+l]=0xff000000 | (bb<<16) | (gg<<8) | (rr); } else { rr+=buf[2]; gg+=buf[1]; bb+=buf[0]; } buf+=3; b+=jpeg_tdx;if(b>=jpeg_w) { if(same_w) { same_w++; rr/=same_w; gg/=same_w; bb/=same_w; jpeg_buf[(k*jpeg_tdx)+l]=0xff000000 | (bb<<16) | (gg<<8) | (rr); } same_w=0;b-=jpeg_w;l++;if(l>=jpeg_tdx) break; rr=buf[2]; gg=buf[1]; bb=buf[0]; } else same_w++; } a+=jpeg_tdy;if(a>=jpeg_h) {a-=jpeg_h;k++;if(k>=jpeg_tdy) break;} n++; } /* Step 7: Finish decompression */ (void) jpeg_finish_decompress(&cinfo); /* We can ignore the return value since suspension is not possible * with the stdio data source. */ /* Step 8: Release JPEG decompression object */ /* This is an important step since it will release a good deal of memory. */ jpeg_destroy_decompress(&cinfo); /* After finish_decompress, we can close the input file. * Here we postpone it until after no more JPEG errors are possible, * so as to simplify the setjmp error logic above. (Actually, I don't * think that jpeg_destroy can do an error exit, but why assume anything...) */ fclose(infile); /* At this point you may want to check to see whether any corrupt-data * warnings occurred (test whether jerr.pub.num_warnings is nonzero). */ if(jpg_error_str[0]!=0) { return 0; } /* And we're done! */ return 1; } GXTexObj scr_tex; GXTexObj icon_tex[icons_num_sprites]; u16 *animate_mem=NULL; void animate_background() { int n,m,k; static int l=0; n=icons_num_sprites-2; if(!animate_mem) animate_mem=memalign(32, icons_sprites[n].sx*icons_sprites[n].sy*2); if(!animate_mem) return; l++; k=l>>2; for(m=0;m<icons_sprites[n].sy;m++) { k=(k % icons_sprites[n].sy); memcpy(animate_mem+k*icons_sprites[n].sx, ((u16 *)icons_sprites[n].ptr)+m*icons_sprites[n].sx, icons_sprites[n].sx*2); k++; } CreateTexture(&icon_tex[n], TLUT_SRGB5A1, animate_mem, icons_sprites[n].sx, icons_sprites[n].sy, 0); } int audio_pause=0; void select_file(int flag) { int n,m,l,f=0,len,max_entry; static int posfile=0; static int old_flag=-1; int flash=0; read_list_file((void *) path_file, flag); if(flag!=old_flag) { posfile=0; old_flag=flag; } while(1) { flash++; if(exit_by_reset) break; loop_music_playing(); m=0; sizeletter=4; // SetTexture(MOSAIC_PATTERN);DrawFillBox(0,0, 640, SCR_HEIGHT, 0,0xff603000); animate_background(); SetTexture(&icon_tex[icons_num_sprites-2]); DrawFillBox(0,0, 640, SCR_HEIGHT, 0,0xff906000); // header SetTexture(CROSS_PATTERN); DrawRoundFillBox(8,8, 640-16, 32, 0, 0xff302000); SetTexture(NULL_PATTERN); DrawRoundBox(8,8, 640-16, 32, 0, 2, 0xff804000); PX=0;PY=16;color=0xffffffff;autocenter=1; if(flag==0) s_printf("SELECT MUSIC FILES"); if(flag==1) s_printf("SELECT JPEG FILES"); if(flag==2) s_printf("SELECT TEXT FILES"); autocenter=0; // file list SetTexture(CROSS_PATTERN); DrawRoundFillBox(8,48, 640-16, SCR_HEIGHT-32-48, 0, 0xff302000); SetTexture(NULL_PATTERN); DrawRoundBox(8, 48, 640-16, SCR_HEIGHT-32-48, 0, 2, 0xff804000); max_entry=(SCR_HEIGHT-32-48)/20; SetTexture(NULL); DrawRoundFillBox(8,SCR_HEIGHT-28, 640-16, 24, 0, 0xff201010); SetTexture(NULL_PATTERN); DrawRoundBox(8,SCR_HEIGHT-28, 640-16, 24, 0, 2, 0xff804000); PX=24;PY=SCR_HEIGHT-24;color=0xffffffff;autocenter=1; sizeletter=3; if(flag==0) s_printf("Use A to select one file and PLUS to select All"); if(flag==1) s_printf("Use A to select one file and PLUS to select All"); if(flag==2) s_printf("Use A to select one file"); autocenter=0; sizeletter=4; for(n=(posfile-max_entry/2)*(nfiles>=max_entry);n<posfile+max_entry;n++) { if(n<0) continue; if(n>=nfiles) break; if(m>=max_entry) break; PX=16;PY=48+2+m*20; color=0xffffffff; if(n==posfile) { len=38; //if(flash & 8) DrawRoundFillBox(PX,PY-2, len*16, 20, 0, 0xff00004f); DrawRoundBox(PX,PY-2, len*16, 20, 0, 2, 0xff30ffff); } if(files[n].is_directory) { if(files[n].name[0]=='.' && files[n].name[1]=='[') { color=0xffffff00; s_printf("%s",&files[n].name[1]); } else { color=0xff00ffff; s_printf("<%s>",get_name_short_fromUTF8(&files[n].name[0])); } } else { color=0xffffffff; if(files[n].is_selected) color=0xff6fff6f; if(flag==2) if(!strcmp(files[n].name,txt_file.name)) color=0xff6fff6f; s_printf("%s", (char *) get_name_short_fromUTF8(&files[n].name[0])); } bkcolor=0;color=0xffffffff; m++; } wii_nKeys=wii_joystick_read(0); new_key=wii_nKeys & (~old_key); old_key=wii_nKeys; if(!(old_key & (WII_UP | WII_DOWN))) f=0; if(old_key & WII_UP) { if(f==0) f=2; else if(f & 1) f=2; else {f+=2;if(f>40) {f=34;new_key|=WII_UP;}} } if(old_key & WII_DOWN) { if(f==0) f=1; else if(!(f & 1)) f=1; else {f+=2;if(f>41) {f=35;new_key|=WII_DOWN;}} } if(new_key & (WII_HOME | WII_ONE | WII_TWO)) break; if(nfiles>0) if(new_key & WII_PLUS) { if(flag==1) { current_jpg=-1; njpg_files=0; for(n=0;n<nfiles;n++) { if(!files[n].is_directory) if(is_ext(files[n].name,".jpg") || is_ext(files[n].name,".jpeg")) { memcpy(jpg_files[njpg_files].name,files[n].name,258); current_jpg=0; njpg_files++; if(njpg_files>=MAX_ENTRY) break; } } break; } else if(flag==0) { for(n=0;n<nfiles;n++) { if(!files[n].is_directory) if(is_ext(files[n].name,".mp3") || is_ext(files[n].name,".ogg")) { test_music_file(n, 1); } } } } if(nfiles>0) if(new_key & WII_A) { if(!files[posfile].is_directory) { if(is_ext(files[posfile].name,".txt") || is_ext(files[posfile].name,".zip")) { FILE *fp; memcpy(txt_file.name,files[posfile].name,258); if(txt_file_mem) free(txt_file_mem);txt_file_mem=0; txt_file_len=0; if(is_ext(files[posfile].name,".zip")) txt_file_mem = LoadZipTxt(txt_file.name, &txt_file_len); else { fp=fopen(txt_file.name,"r"); // lee el fichero de texto if(fp!=0) { fseek(fp,0,SEEK_END); txt_file_len=ftell(fp); fseek(fp,0,SEEK_SET); txt_file_mem=malloc(txt_file_len+128); if(txt_file_mem) {n=fread(txt_file_mem,1,txt_file_len,fp); if(n<0) {txt_file_len=0;free(txt_file_mem);txt_file_mem=0;} else txt_file_len=n; } else txt_file_len=0; fclose(fp); } } if(txt_file_len!=0) { read_txt_cfg(path_txt_cfg); text_init(txt_file_mem, txt_file_len, txt_file.name); break; } } else if(is_ext(files[posfile].name,".jpg") || is_ext(files[posfile].name,".jpeg")) { current_jpg=-1; njpg_files=0; for(n=0;n<nfiles;n++) { if(!files[n].is_directory) if(is_ext(files[n].name,".jpg") || is_ext(files[n].name,".jpeg")) { memcpy(jpg_files[njpg_files].name,files[n].name,258); if(n==posfile) current_jpg=njpg_files; njpg_files++; if(njpg_files>=MAX_ENTRY) break; } } break; } else { #if 1 if(nmusic_files<MAX_ENTRY) { if(is_ext(files[posfile].name,".mp3") || is_ext(files[posfile].name,".ogg")) { test_music_file(posfile, 1); } else if(is_ext(files[posfile].name,".m3u")) { FILE *fp; memcpy(temp_buffer,files[posfile].name,258); // copia el nombre al archivo temporal m=n=0; while(temp_buffer[n]!=0) {if(temp_buffer[n]=='/') m=n+1; n++;} l=m; temp_buffer[l]=0; fp=fopen(files[posfile].name,"r"); // lee el fichero m3u if(fp!=0) { nmusic_files=0; while(fgets((void *) &temp_buffer[512], 256, fp)) { n=512; while(temp_buffer[n]!=0) {if(temp_buffer[n]<32) {temp_buffer[n]=0;break;} n++;} if(is_ext((void *) &temp_buffer[512],".mp3") || is_ext((void *) &temp_buffer[512],".ogg")) { if(nmusic_files<MAX_ENTRY) { m=n=512; while(temp_buffer[n]!=0) {if(temp_buffer[n]=='/' || temp_buffer[n]=='\\') m=n+1; n++;} n-=512; if((l+n)>258) {n=257-l;temp_buffer[n+512]=0;} sprintf((void *) &temp_buffer[1024],"%s%s",&temp_buffer[0],&temp_buffer[m]); char_to_utf8((void *) &temp_buffer[1024],music_files[nmusic_files].name); nmusic_files++; } else break; } } fclose(fp); if(nmusic_files) { play_file=0; music_playing=1;if(PlayAudio(music_files[play_file].name, 0, 0)<0) music_playing=0; break; // retorna al player } } //clos }// m3u } #endif } } else { // cambio de device if(files[posfile].name[0]=='.' && files[posfile].name[1]=='[') { if(files[posfile].name[2]=='U') { current_device=1; sprintf(path_file, "fat%i:/", PI_USBSTORAGE); read_list_file(NULL, flag); posfile=0; } else if(files[posfile].name[2]=='S') { current_device=0; sprintf(path_file, "fat%i:/", PI_INTERNAL_SD); read_list_file(NULL, flag); posfile=0; } } else {read_list_file((void *) &files[posfile].name[0], flag);posfile=0;} } } if((new_key & WII_UP)) {posfile--;if(posfile<0) posfile=nfiles-1;} if((new_key & WII_DOWN)){posfile++;if(posfile>=nfiles) posfile=0;} Screen_flip(); } Screen_flip(); } void music_player(); void jpeg_player() { int dx,dy; int posx=0,posy=0; static int mode=0; static int amp=100; int n; int osd_time=0; unsigned time; if(current_jpg<0) return; while(1) // proteccion contra pulsaciones { if(exit_by_reset) break; wii_nKeys=wii_joystick_read(1); new_key=wii_nKeys & (~old_key); old_key=wii_nKeys; if(!(old_key & (WII_LEFT | WII_RIGHT | WII_UP | WII_DOWN ))) break; } Next_jpg: posx=0;posy=0; osd_time=0; time=ticks_to_msecs(gettick()); if(read_JPEG_file(jpg_files[current_jpg].name)) { CreateTexture(&scr_tex, TILE_RGBA8, (void *) jpeg_buf, jpeg_tdx, jpeg_tdy, 0); } else { jpeg_tdx=jpeg_tdy=64; jpeg_w=256;jpeg_h=256; memset((void *) jpeg_buf,0,jpeg_tdx*jpeg_tdy*4); for(n=0;n<jpeg_tdx;n++) { jpeg_buf[jpeg_tdx*n+n]=0xffff0000; if((n+1)<jpeg_tdx) jpeg_buf[jpeg_tdx*n+n+1]=0xffff0000; if((n+2)<jpeg_tdx) jpeg_buf[jpeg_tdx*n+n+2]=0xffff0000; if((n+3)<jpeg_tdx) jpeg_buf[jpeg_tdx*n+n+3]=0xffff0000; jpeg_buf[jpeg_tdx*n+jpeg_tdx-n-1]=0xffff0000; if((jpeg_tdx-n-2)>0) jpeg_buf[jpeg_tdx*n+jpeg_tdx-n-2]=0xffff0000; if((jpeg_tdx-n-3)>0) jpeg_buf[jpeg_tdx*n+jpeg_tdx-n-3]=0xffff0000; if((jpeg_tdx-n-4)>0) jpeg_buf[jpeg_tdx*n+jpeg_tdx-n-4]=0xffff0000; } CreateTexture(&scr_tex, TILE_RGBA8, (void *) jpeg_buf, jpeg_tdx, jpeg_tdy, 0); } if((ticks_to_msecs(gettick())-time)<500) // espera al menos medio segundo usleep(500*1000); while(1) { int flag; if(exit_by_reset) break; loop_music_playing(); sizeletter=4; PX=24;PY=SCR_HEIGHT-24;color=0xffffffff; SetTexture(&scr_tex); //DrawFillBox(0,0, 640, SCR_HEIGHT, 0,0xffffffff); wii_nKeys=wii_joystick_read(1); new_key=wii_nKeys & (~old_key); old_key=wii_nKeys; flag=0; if(new_key & WII_PLUS) {flag=1;if(mode==0) {mode=1;posx=posy=0;if(jpeg_w>=jpeg_h) amp=125;} else {if(amp==100) {posx=posy=0;} amp+=25;if(amp>400) amp=400;}} if(new_key & WII_MINUS) {flag=1;amp-=25;if(amp<100) {mode=0;amp=100;}} if(new_key & WII_B) { current_jpg++; if(current_jpg>=njpg_files) { current_jpg--; amp=100;mode=0; } Screen_flip(); SetTexture(NULL); goto Next_jpg; } if(new_key & WII_A) { current_jpg--; if(current_jpg<0) { current_jpg++; amp=100;mode=0; } Screen_flip(); SetTexture(NULL); goto Next_jpg; } if(new_key & WII_HOME) break; if(amp==100 && mode==0) { if(!is_16_9) { dx=640; dy=(640*jpeg_h)/jpeg_w; if(dy>480) { dy=480; dx=(480*jpeg_w)/jpeg_h; } dy=SCR_HEIGHT*dy/480; } else { dx=853; dy=(853*jpeg_h)/jpeg_w; if(dy>480) { dy=480; dx=(480*jpeg_w)/jpeg_h; } dy=SCR_HEIGHT*dy/480; dx=dx*640/853; } posx=(640-dx)/2; posy=(SCR_HEIGHT-dy)/2;if(posy<0) posy=0; } else { if(is_16_9) dy=(((SCR_HEIGHT)*jpeg_h)/jpeg_w)*16/9; else dy=((SCR_HEIGHT/3)*4*jpeg_h)/jpeg_w; dx=640; dx=dx*amp/100; dy=dy*amp/100; #if 0 if(new_key & WII_LEFT) {posx+=128/*dx/3*/;flag=1;} if(new_key & WII_RIGHT) {posx-=128/*dx/3*/;flag=1;} if(new_key & WII_UP) {posy+=64;flag=1;} if(new_key & WII_DOWN) {posy-=64;flag=1;} #endif if(old_key & WII_LEFT) {posx+=16;flag=1;} if(old_key & WII_RIGHT) {posx-=16;flag=1;} if(old_key & WII_UP) {posy+=16;flag=1;} if(old_key & WII_DOWN) {posy-=16;flag=1;} } if(flag) { if(posx>0 && flag!=2) posx=0; if(posy>0) posy=0; if(posx<-(dx-640)) posx=-(dx-640); if(posy<-(dy-(SCR_HEIGHT))) posy=-(dy-(SCR_HEIGHT)); osd_time=0; } if(amp==100 && jpeg_w>=jpeg_h && jpeg_h<=SCR_HEIGHT && (!is_16_9 || mode==0)) {posy=(SCR_HEIGHT-dy)/2;if(posy<0) posy=0;} //DrawFillBox(0,0, 640, dy, 0,0xffffffff); if(mode==1 && amp>=100) { DrawFillBox(posx,posy, dx, dy, 100,0xffffffff); if(osd_time<120) { osd_time++; SetTexture(CROSS_PATTERN); DrawRoundFillBox(8,SCR_HEIGHT-24, 640-16, 24, 0, 0xff302000); SetTexture(NULL_PATTERN); DrawRoundBox(8,SCR_HEIGHT-24, 640-16, 24, 0, 4, 0xffff7f2f); PX=16;PY=SCR_HEIGHT-20;autocenter=1;s_printf("ZOOM: %i%% Img: (%i/%i)",amp, current_jpg+1, njpg_files);autocenter=0; } } else { DrawFillBox(posx,posy, dx, dy, 100,0xffffffff); if(osd_time<120) { osd_time++; SetTexture(CROSS_PATTERN); DrawRoundFillBox(8,SCR_HEIGHT-24, 640-16, 24, 0, 0xff302000); SetTexture(NULL_PATTERN); DrawRoundBox(8,SCR_HEIGHT-24, 640-16, 24, 0, 4, 0xffff7f2f); PX=16;PY=SCR_HEIGHT-20;autocenter=1;s_printf("Img: (%i/%i) Res: %ix%i",current_jpg+1, njpg_files, jpeg_w, jpeg_h);autocenter=0; } } if(jpg_error_str[0]!=0) { SetTexture(CROSS_PATTERN); DrawRoundFillBox(8,SCR_HEIGHT-24, 640-16, 24, 0, 0xff302000); SetTexture(NULL_PATTERN); DrawRoundBox(8,SCR_HEIGHT-24, 640-16, 24, 0, 4, 0xffff7f2f); autocenter=1; PX=16;PY=SCR_HEIGHT-20;s_printf("%s",jpg_error_str); autocenter=0; } Screen_flip(); if(new_key & WII_ONE) {music_player();} } Screen_flip(); SetTexture(NULL); } void music_gfx(); void music_player() { int n,m; int f=0; int mode=0; int select=0; int select2=2; int time_playing=0; int time_playing_old=0; unsigned time_total=0; int left_count=0,right_count=0; int ang_suma=0; int status; int flash=0; int osd_volume=0; int fast=0; if(play_file>=0 && music_playing) select=play_file; wii_nKeys=wii_joystick_read(1); new_key=wii_nKeys & (~old_key); old_key=wii_nKeys; while(1) { int max_entry; if(exit_by_reset) break; flash++; status=StatusAudio(); if(status==AUDIO_STATUS_RUNNING || fast) {ang_suma++;ang_suma %=360;} //SetTexture(MOSAIC_PATTERN);DrawFillBox(0,0, 640, SCR_HEIGHT, 0,0xff603000); animate_background(); SetTexture(&icon_tex[icons_num_sprites-2]); DrawFillBox(0,0, 640, SCR_HEIGHT, 0,0xff906000); for(n=0;n<9;n++) { SetTexture(NULL_PATTERN); switch(n) { case 1: if(left_count) DrawFillBox(140+40*n,48, 32, 32, 0,0xff000000); else DrawFillBox(140+40*n,48, 32, 32, 0,0xff808080); break; case 2: if(status==AUDIO_STATUS_RUNNING && left_count==0 && right_count==0) DrawFillBox(140+40*n,48, 32, 32, 0,0xff000000); else DrawFillBox(140+40*n,48, 32, 32, 0,0xff808080); break; case 3: if(status==AUDIO_STATUS_PAUSED && (flash & 16)!=0 && fast==0) DrawFillBox(140+40*n,48, 32, 32, 0,0xff000000); else DrawFillBox(140+40*n,48, 32, 32, 0,0xff808080); break; case 4: if(!music_playing) DrawFillBox(140+40*n,48, 32, 32, 0,0xff000000); else DrawFillBox(140+40*n,48, 32, 32, 0,0xff808080); break; case 5: if(right_count) DrawFillBox(140+40*n,48, 32, 32, 0,0xff000000); else DrawFillBox(140+40*n,48, 32, 32, 0,0xff808080); break; case 6: DrawFillBox(140+40*n,48, 32, 32, 0,0xff000000); break; case 7: if(music_loop) DrawFillBox(140+40*n,48, 32, 32, 0,0xff0000ff); else DrawFillBox(140+40*n,48, 32, 32, 0,0xff808080); break; } SetTexture(&icon_tex[n]); if(select2==n && mode==0) DrawFillBox(140+40*n,48, 32, 32, 0,0xff40ff40); else DrawFillBox(140+40*n,48, 32, 32, 0,0xffffffff); } SetTexture(CROSS_PATTERN); DrawRoundFillBox(8, 88, 640-16, SCR_HEIGHT-16-88+8*(SCR_HEIGHT>480), 0, 0xff302000); SetTexture(NULL_PATTERN); DrawRoundBox(8, 88, 640-16, SCR_HEIGHT-16-88+8*(SCR_HEIGHT>480), 0, 2, 0xff804000); sizeletter=2; autocenter=1; PX=0;PY=12; color=0xfff08020; SetTexture(NULL_PATTERN); DrawRoundBox(208,8, 640-416, 32, 0, 2, 0xfff08020); s_printf("Music Player"); autocenter=0; sizeletter=4; if(!fast) time_playing=GetTimeAudio()/1000; else time_playing=time_playing_old; time_total=GetTotalTimeAudio()/1000; if(!music_playing) {time_playing_old=0;time_playing=0;} else if(time_playing>0) time_playing_old=time_playing; if(status==AUDIO_STATUS_RUNNING || status==AUDIO_STATUS_PAUSED || fast) { SetTexture(MOSAIC_PATTERN); DrawFillSlice(320,88+(SCR_HEIGHT-16-88)/2, 120, 120, 0, 0, 360, 0xff603000); SetTexture(NULL_PATTERN); DrawSlice(320,88+(SCR_HEIGHT-16-88)/2, 120, 120, 0, 4, 0, 360, 0xff804000); SetTexture(STRIPED_PATTERN); DrawFillSlice(320,88+(SCR_HEIGHT-16-88)/2, 116, 116, 0, ang_suma, ang_suma+time_playing_old*360/time_total, 0x80000040); } SetTexture(NULL_PATTERN); PX=80-32-16; PY=32; color=0xff00f0f0;s_printf("Time"); PX=600-48-32; s_printf("Length"); color=0xffffffff; PX=16; PY=48; { unsigned color=0xff00ff00; unsigned temp=time_playing_old/60; int lh=20+4*(SCR_HEIGHT<=480); SetTexture(CROSS_PATTERN); DrawRoundFillBox(PX-8, PY, 120, 32, 0, 0xff302000); SetTexture(NULL_PATTERN); DrawRoundBox(PX-8, PY, 120, 32, 0, 2, 0xff804000); if((status==AUDIO_STATUS_PAUSED && (flash & 16)!=0) || status!=AUDIO_STATUS_PAUSED || fast) { if(temp/100) { SetTexture(&icon_tex[9+temp/100]); DrawFillBox(PX,PY+4, 20, lh, 0,color);PX+=20; } else PX+=10; temp %=100; SetTexture(&icon_tex[9]+temp/10); DrawFillBox(PX,PY+4, 20, lh, 0,color);PX+=20;temp %=10; SetTexture(&icon_tex[9]+temp); DrawFillBox(PX,PY+4, 20, lh, 0,color);PX+=16; SetTexture(&icon_tex[19]); DrawFillBox(PX,PY+4, 20, lh, 0,color);PX+=16; temp=time_playing_old % 60; SetTexture(&icon_tex[9+temp/10]); DrawFillBox(PX,PY+4, 20, lh, 0,color);PX+=20;temp %=10; SetTexture(&icon_tex[9+temp]); DrawFillBox(PX,PY+4, 20, lh, 0,color); } // total time PX=548-32; temp=time_total/60; SetTexture(CROSS_PATTERN); DrawRoundFillBox(PX-8, PY, 120, 32, 0, 0xff302000); SetTexture(NULL_PATTERN); DrawRoundBox(PX-8, PY, 120, 32, 0, 2, 0xff804000); if(temp/100) { SetTexture(&icon_tex[9+temp/100]); DrawFillBox(PX,PY+4, 20, lh, 0,color);PX+=20; } else PX+=10; temp %=100; SetTexture(&icon_tex[9]+temp/10); DrawFillBox(PX,PY+4, 20, lh, 0,color);PX+=20;temp %=10; SetTexture(&icon_tex[9]+temp); DrawFillBox(PX,PY+4, 20, lh, 0,color);PX+=16; SetTexture(&icon_tex[19]); DrawFillBox(PX,PY+4, 20, lh, 0,color);PX+=16; temp=time_total % 60; SetTexture(&icon_tex[9+temp/10]); DrawFillBox(PX,PY+4, 20, lh, 0,color);PX+=20;temp %=10; SetTexture(&icon_tex[9+temp]); DrawFillBox(PX,PY+4, 20, lh, 0,color); SetTexture(NULL_PATTERN); } //s_printf("%2.2u:%2.2u ",time_playing/60, time_playing % 60); sizeletter=4; /* color=0xff00f080;s_printf("Length: "); color=0xffffffff; s_printf("%2.2u:%2.2u",time_total/60, time_total % 60);*/ max_entry=(SCR_HEIGHT-16-88)/20; PX=24;PY=SCR_HEIGHT-24;color=0xffffffff; m=0; if(mode==0) if(play_file>=0) select=play_file; if(nmusic_files>0) for(n=(select-max_entry/2)*(nmusic_files>=max_entry);n<select+max_entry;n++) { if(n<0) continue; if(n>=nmusic_files) break; if(m>=max_entry) break; PX=16;PY=88+8+2+m*20; color=0xffffffff; if(n==play_file) { DrawRoundFillBox(PX,PY-2, 38*16, 20, 0, 0xff004f00); //DrawRoundBox(PX,PY-2, 38*16, 20, 0, 2, 0xff30ffff); } if(mode!=0) if(n==select) { DrawRoundFillBox(PX,PY-2, 38*16, 20, 0, 0xff00004f); DrawRoundBox(PX,PY-2, 38*16, 20, 0, 2, 0xff30ffff); } s_printf("%s", (char *) get_name_short_fromUTF8(&music_files[n].name[0])); bkcolor=0;color=0xffffffff; m++; } if(osd_volume>0) { osd_volume--; SetTexture(MOSAIC_PATTERN); DrawBox(8,SCR_HEIGHT-16, 640-16, 16, 0, 2, 0xff00c000); SetTexture(MOSAIC_PATTERN); DrawFillBox(12,SCR_HEIGHT-16+4, (640-24)*volume/255, 8, 0, 0xff00c000); } wii_nKeys=wii_joystick_read(1); new_key=wii_nKeys & (~old_key); old_key=wii_nKeys; if(new_key & WII_HOME) break; if(old_key & WII_MINUS) {volume--;if(volume<0) volume=0;SetVolumeAudio(volume);osd_volume=60;} if(old_key & WII_PLUS) {volume++;if(volume>255) volume=255;SetVolumeAudio(volume);osd_volume=60;} if(!(old_key & (WII_UP | WII_DOWN))) f=0; if(old_key & WII_UP) { if(f==0) f=2; else if(f & 1) f=2; else {f+=2;if(f>40) {f=34;new_key|=WII_UP;}} } if(old_key & WII_DOWN) { if(f==0) f=1; else if(!(f & 1)) f=1; else {f+=2;if(f>41) {f=35;new_key|=WII_DOWN;}} } if(mode==0) { if(new_key & WII_LEFT) {select2--;if(select2<0) select2=8;} if(new_key & WII_RIGHT) {select2++;if(select2>8) select2=0;} if(new_key & WII_B) { if(music_playing) { n=StatusAudio(); if(n==AUDIO_STATUS_RUNNING) PauseAudio(1); else if(n==AUDIO_STATUS_PAUSED) PauseAudio(0); } } if(new_key & WII_A) { if(select2==0) // getfiles { select_file(0); new_key=0; } else if(select2==1 && left_count==0) // << { left_count=1; } else if(select2==2 && nmusic_files>0 && right_count==0) // play { if(music_playing) { n=StatusAudio(); if(play_file==select && n==AUDIO_STATUS_PAUSED) { PauseAudio(0); } else {time_playing_old=0;music_playing=1;play_file=select;if(PlayAudio(music_files[play_file].name, 0, 0)<0) music_playing=0;} } else {time_playing_old=0;music_playing=1;play_file=select;if(PlayAudio(music_files[play_file].name, 0, 0)<0) music_playing=0;} } else if(select2==3) // pause { if(music_playing) { n=StatusAudio(); if(n==AUDIO_STATUS_RUNNING) PauseAudio(1); else if(n==AUDIO_STATUS_PAUSED) PauseAudio(0); } } else if(select2==4) // stop { StopAudio();fast=0;music_playing=0; } else if(select2==5) // >> { right_count=1; } else if(select2==6) // shuffle { music_shuffle(); } else if(select2==7) // loop { music_loop^=1; } else if(select2==8) // trash { nmusic_files=0; play_file=-1; } } // wii_a else if(old_key & WII_A) { if(select2==1) // << { if(time_playing>0) if(left_count>42) {fast=1;PauseAudio(1);left_count=40;time_playing_old-=5;if(time_playing_old<0) time_playing_old=0;time_playing=time_playing_old;/*SetTimeAudio(time_playing_old*1000);*/} left_count++; } if(select2==5) // >> { if(time_playing>0) if(right_count>42) {fast=1;PauseAudio(1);right_count=40;time_playing_old+=5;if(time_playing_old>=time_total) time_playing_old=time_total;time_playing=time_playing_old;/*SetTimeAudio(time_playing_old*1000);*/} right_count++; } } else // << >> liberado { if(fast) { fast=0; SetTimeAudio(time_playing_old*1000);PauseAudio(0); } if(left_count>=1 && left_count<40) { fast=0; play_file--; if(music_loop) if(play_file<0) play_file=nmusic_files-1; if(play_file>=0 && nmusic_files>0) {time_playing_old=0;music_playing=1;if(PlayAudio(music_files[play_file].name, 0, 0)<0) music_playing=0;} else {StopAudio();music_playing=0;play_file=-1;} } left_count=0; if(right_count>=1 && right_count<40) { fast=0; play_file++; if(music_loop) if(play_file>=nmusic_files) play_file=0; if(play_file<nmusic_files) {time_playing_old=0;music_playing=1;if(PlayAudio(music_files[play_file].name, 0, 0)<0) music_playing=0;} else {StopAudio();music_playing=0;play_file=-1;} } right_count=0; } } else if(mode==1) { if(new_key & WII_UP) {select--;if(select<0) select=nmusic_files-1;} if(new_key & WII_DOWN) {select++;if(select>=nmusic_files) select=0;} if(music_playing) { if(new_key & WII_RIGHT) right_count=1; else { if(old_key & WII_RIGHT) { if(time_playing>0) if(right_count>42) {fast=1;PauseAudio(1);right_count=40;time_playing_old+=5;if(time_playing_old>=time_total) time_playing_old=time_total; time_playing=time_playing_old;/*SetTimeAudio(time_playing_old*1000);*/} right_count++; } else { if(fast && right_count) { fast=0; SetTimeAudio(time_playing_old*1000);PauseAudio(0); } if(right_count>=1 && right_count<40) { fast=0; play_file++; if(music_loop) if(play_file>=nmusic_files) play_file=0; if(play_file<nmusic_files) {time_playing_old=0;music_playing=1;if(PlayAudio(music_files[play_file].name, 0, 0)<0) music_playing=0;} else {StopAudio();music_playing=0;play_file=-1;} } right_count=0; } } if(new_key & WII_LEFT) left_count=1; else { if(old_key & WII_LEFT) { if(time_playing>0) if(left_count>42) {fast=1;PauseAudio(1);left_count=40;time_playing_old-=5;if(time_playing_old<0) time_playing_old=0; time_playing=time_playing_old;/*SetTimeAudio(time_playing_old*1000);*/} left_count++; } else { if(fast && left_count) { fast=0; SetTimeAudio(time_playing_old*1000);PauseAudio(0); } if(left_count>=1 && left_count<40) { play_file--; if(music_loop) if(play_file<0) play_file=nmusic_files-1; if(play_file>=0 && nmusic_files>0) {time_playing_old=0;music_playing=1;if(PlayAudio(music_files[play_file].name, 0, 0)<0) music_playing=0;} else {StopAudio();music_playing=0;play_file=-1;} } left_count=0; } } } if(new_key & WII_B) { if(music_playing) { n=StatusAudio(); if(n==AUDIO_STATUS_RUNNING) PauseAudio(1); else if(n==AUDIO_STATUS_PAUSED) PauseAudio(0); } } if(new_key & WII_A) { if(fast) { fast=0; SetTimeAudio(time_playing_old*1000);PauseAudio(0); } if(music_playing) { n=StatusAudio(); if(play_file==select && n==AUDIO_STATUS_PAUSED) { PauseAudio(0); } else if(play_file==select && n==AUDIO_STATUS_RUNNING) { StopAudio();music_playing=0; } else if(nmusic_files>0){time_playing_old=0;music_playing=1;play_file=select;if(PlayAudio(music_files[play_file].name, 0, 0)<0) music_playing=0;} } else if(nmusic_files>0){time_playing_old=0;music_playing=1;play_file=select;if(PlayAudio(music_files[play_file].name, 0, 0)<0) music_playing=0;} } } // mode==1 if(mode==0 && nmusic_files>0) { if(new_key & (WII_ONE | WII_DOWN)) mode=1; if(new_key & WII_TWO) {if(fast) { fast=0; SetTimeAudio(time_playing_old*1000);PauseAudio(0); } music_gfx(); } } else if(mode==1) { if(new_key & WII_ONE) mode=0; if(new_key & WII_TWO) {if(fast) { fast=0; SetTimeAudio(time_playing_old*1000);PauseAudio(0); } music_gfx(); }//mode=1; // to do: mode=2 visual effects } Screen_flip(); if(loop_music_playing()) {select=play_file;time_playing_old=0;} } if(fast) { fast=0; SetTimeAudio(time_playing_old*1000);PauseAudio(0); } Screen_flip(); SetTexture(NULL); } void txt_player() { unsigned time1,time2; if(txt_file_len==0) return; time1=time2=ticks_to_msecs(gettick()); while(1) { if(exit_by_reset) break; loop_music_playing(); SetTexture(MOSAIC_PATTERN); DrawFillBox(0,0, 640, SCR_HEIGHT, 0,0xff603000); wii_nKeys=wii_joystick_read(0); new_key=wii_nKeys & (~old_key); old_key=wii_nKeys; if(new_key & WII_HOME) break; time2=ticks_to_msecs(gettick()); SelectFontTexture(1); if(time1>time2) time1=time2; if((time2-time1)>60000) text_main(128, new_key, old_key); else text_main(0, new_key, old_key); SelectFontTexture(0); Screen_flip(); if((time2-time1)>60000) {write_cfg(path_txt_cfg);time1=time2=ticks_to_msecs(gettick());} if(new_key & WII_ONE) {Screen_flip();write_cfg(path_txt_cfg);music_player();time1=time2=ticks_to_msecs(gettick());} } Screen_flip(); write_cfg(path_txt_cfg); } void exit_menu() { int n, m; int select=0; int loop=1; while(loop) { if(exit_by_reset) break; loop_music_playing(); //SetTexture(CROSS_PATTERN); //DrawFillBox(0,0, 640, SCR_HEIGHT, 0,0xff603000); animate_background(); SetTexture(&icon_tex[icons_num_sprites-2]); DrawFillBox(0,0, 640, SCR_HEIGHT, 0,0xff906000); sizeletter=1; autocenter=1; PX=0;PY=12; color=0xfff08020; SetTexture(NULL_PATTERN); DrawRoundBox(144,8, 640-256-32, 40, 0, 2, 0xfff08020); s_printf("WiiReader"); color=0xffffffff; sizeletter=1; for(n=0;n<3;n++) { m=SCR_HEIGHT/2-110+n*110;//48+n*110+50+20; SetTexture(MOSAIC_PATTERN); DrawRoundFillBox(32,m-32, 640-64, 64, 0,0xff803000); SetTexture(NULL_PATTERN); if(n==select) DrawRoundBox(32,m-32, 640-64, 64, 0, 10, 0xff00f0f0); else DrawRoundBox(32,m-32, 640-64, 64, 0, 6, 0xfff08020); switch(n) { case 0: autocenter=1; PX=0;PY=m-16; if(return_reset==1) s_printf("Homebrew Channel"); else s_printf("Reset"); autocenter=0;break; case 1: autocenter=1; PX=0;PY=m-16; s_printf("Power Off"); autocenter=0;break; case 2: autocenter=1; PX=0;PY=m-16; s_printf("Abort"); autocenter=0;break; } } sizeletter=4; PX=24;PY=SCR_HEIGHT-24;color=0xffffffff; wii_nKeys=wii_joystick_read(1); new_key=wii_nKeys & (~old_key); old_key=wii_nKeys; if(new_key & WII_UP) {select--;if(select<0) select=2;} if(new_key & WII_DOWN) {select++;if(select>2) select=0;} Screen_flip(); if(new_key & WII_A) { switch(select) { case 0: exit_by_reset=return_reset; exit(0); break; case 1: exit_by_reset=3; exit(0); break; case 2: loop=0; break; } } if(new_key & WII_B) break; } Screen_flip(); SetTexture(NULL); } void main_menu() { int n,m; int last_menu=-1; static int select=0; while(1) { if(exit_by_reset) break; loop_music_playing(); //SetTexture(CROSS_PATTERN); animate_background(); SetTexture(&icon_tex[icons_num_sprites-2]); DrawFillBox(0,0, 640, SCR_HEIGHT, 0,0xff906000); sizeletter=1; autocenter=1; PX=0;PY=12; color=0xfff08020; SetTexture(NULL_PATTERN); DrawRoundBox(144,8, 640-256-32, 40, 0, 2, 0xfff08020); s_printf("WiiReader"); sizeletter=2; PX=0;PY=48+3*100+50+48;color=0xffffffff; s_printf("%s","\251 Francisco Muñoz 'Hermes' - v1.1"); autocenter=0; sizeletter=1; for(n=0;n<4;n++) { m=48+n*100+50; SetTexture(MOSAIC_PATTERN); DrawRoundFillBox(32,m-32, 640-64, 64, 0,0xff803000); SetTexture(NULL_PATTERN); if(n==select) DrawRoundBox(32,m-32, 640-64, 64, 0, 10, 0xff00f0f0); else DrawRoundBox(32,m-32, 640-64, 64, 0, 6, 0xfff08020); switch(n) { case 0: autocenter=1; PX=0;PY=m-16; s_printf("JPEG Viewer"); autocenter=0;break; case 1: autocenter=1; PX=0;PY=m-16; s_printf("Music Player"); autocenter=0;break; case 2: autocenter=1; PX=0;PY=m-16; s_printf("TXT Reader"); autocenter=0;break; case 3: autocenter=1; PX=0;PY=m-16; s_printf("Exit"); autocenter=0;break; } } sizeletter=4; PX=24;PY=SCR_HEIGHT-24;color=0xffffffff; wii_nKeys=wii_joystick_read(1); new_key=wii_nKeys & (~old_key); old_key=wii_nKeys; if(new_key & WII_UP) {select--;if(select<0) select=3;} if(new_key & WII_DOWN) {select++;if(select>3) select=0;} Screen_flip(); if(new_key & WII_B) { switch(last_menu) { case 0: last_menu=0; jpeg_player(); break; case 1: last_menu=1; music_player(); break; case 2: last_menu=2; txt_player(); break; } } if(new_key & WII_A) { switch(select) { case 0: last_menu=0; select_file(1); jpeg_player(); break; case 1: last_menu=1; music_player(); break; case 2: last_menu=2; select_file(2); txt_player(); break; case 3: exit_menu(); break; } } } Screen_flip(); SetTexture(NULL); } void credits() { int n; for(n=0;n<6*60;n++) { animate_background(); SetTexture(&icon_tex[icons_num_sprites-2]); DrawFillBox(0,0, 640, SCR_HEIGHT, 0,0xff906000); sizeletter=1; autocenter=1; PX=0;PY=12; color=0xfff08020; SetTexture(NULL_PATTERN); DrawRoundBox(144,8, 640-256-32, 40, 0, 2, 0xfff08020); s_printf("WiiReader"); sizeletter=2; color=0xffffffff; PY=60; PX=0;s_printf("%s","\251 Francisco Muñoz 'Hermes' - v1.1");PY+=24; PX=0;s_printf("Under General Public License (GPL) Terms");PY+=60; color=0xff00ffff; PX=0;s_printf("This software is based in part on the");PY+=24; PX=0;s_printf("work of the Independent JPEG Group");PY+=24; PX=0;s_printf("Copyright (C) 1994-1998, Thomas G. Lane");PY+=32; PX=0;s_printf("Also based in libmpg123 copyrighted by ");PY+=24; PX=0;s_printf("Michael Hipp under LGPL 2.1");PY+=32; PX=0;s_printf("Also based in the 'Tremor' lib");PY+=24; PX=0;s_printf("Copyright (c) 2002, Xiph.org Foundation");PY+=32; PX=0;s_printf("Also based in libogc/DevkitPro");PY+=24; PX=0;s_printf("Copyright: Michael Wiedenbauer (shagkur)");PY+=24; PX=0;s_printf("and Dave Murphy (WinterMute)");PY+=32; PX=0;s_printf("Also based in unzip lib");PY+=24; PX=0;s_printf("Copyright (C) 1998 Gilles Vollant"); autocenter=0; Screen_flip(); } } int main(int argc, char *argv[]) { int n; DIR_ITER *dir; return_reset=1; if(argc<1) return_reset=2; CONF_Init(); is_16_9=CONF_GetAspectRatio(); InitScreen(); srand(gettick()); //console_init(frameBuffer[0],20,20,screenMode->fbWidth,screenMode->xfbHeight,screenMode->fbWidth*VI_DISPLAY_PIX_SZ); SYS_SetResetCallback(reset_call); // esto es para que puedas salir al pulsar boton de RESET SYS_SetPowerCallback(power_call); // esto para apagar con power PAD_Init(); WPAD_Init(); WPAD_SetIdleTimeout(60*5); // 5 minutes //WPAD_SetVRes(WPAD_CHAN_ALL, 640, SCR_HEIGHT); THREAD_PRIORITY(); ASND_Init(/*INIT_RATE_48000*/); // Initialize the Sound Lib ASND_Pause(0); ASND_PauseVoice(0, 0); atexit(fun_exit); VIDEO_WaitVSync(); fatInit(8, false); sleep(2); fatSetDefaultInterface(PI_INTERNAL_SD); have_device=0; { path_file[3]=48+PI_INTERNAL_SD; path_txt_cfg[3]=48+PI_INTERNAL_SD; for(n=0;n<5;n++) { dir = diropen(path_file); if (dir) {dirclose(dir); have_device|=1;fatEnableReadAhead(PI_INTERNAL_SD, 12, 32);break;} usleep(200*1000); } path_file[3]=48+PI_USBSTORAGE; for(n=0;n<5;n++) { dir = diropen(path_file); if (dir) {dirclose(dir); have_device|=2;fatEnableReadAhead(PI_USBSTORAGE, 12, 32);break;} usleep(200*1000); } } current_device=0; if(have_device & 1) path_file[3]=48+PI_INTERNAL_SD; else if(have_device & 2) {current_device=1; path_file[3]=48+PI_USBSTORAGE;} for(n=0;n<icons_num_sprites-2;n++) { CreateTexture(&icon_tex[n], TLUT_SRGB5A1, icons_sprites[n].ptr, icons_sprites[n].sx, icons_sprites[n].sy, 0); } credits(); //sleep(1); jpeg_buf=memalign(32,1024*1024*4); sprintf(path_txt_cfg,"%sapps", path_file); if(have_device & 1) mkdir(path_txt_cfg, S_IREAD | S_IWRITE); //usleep(1000*500); sprintf(path_txt_cfg,"%sapps/wiireader", path_file); if(have_device & 1) mkdir(path_txt_cfg, S_IREAD | S_IWRITE); sprintf(path_txt_cfg,"%sapps/wiireader/textreader.cfg", path_file); usleep(1000*500); sprintf(path_cfg,"%sapps/wiireader/font.bin", path_file); { FILE *fp; fp=fopen(path_cfg,"r"); // lee el fichero de texto if(fp!=0) { n=fread(extern_char_set,1, 28672 ,fp); if(n==28672) {UploadFontTextureExt((void *) extern_char_set);} fclose(fp); } } sprintf(path_cfg,"%sapps/wiireader/wiireader.cfg", path_file); SetVolumeAudio(volume); main_menu(); Screen_flip(); StopAudio(); return(0); } static GXTexObj gfx_tex; static u32 gfx_texture[256*128] ATTRIBUTE_ALIGN(32); static u32 gfx_buff[256*128] ATTRIBUTE_ALIGN(8); static void inline set_gfx_pix(u32 x,u32 y, u32 c) { if(x>=256 || y>=128) return; gfx_buff[(y<<8)+x]=c; } static u32 inline get_gfx_pix(u32 x,u32 y) { if(x>=256 || y>=128) return 0xff400040; return gfx_buff[(y<<8)+x]; } static void line_gfx(int x1,int y1,int x2,int y2, unsigned color) { int n,m; int a,b,a2,b2; x2-=x1; y2-=y1; a2=x2;if(a2<0) {a2=-a2;x2=-1;} else x2=1; b2=y2;if(b2<0) {b2=-b2;y2=-1;} else y2=1; m=a2;if(b2>m) m=b2; a=0;b=0; for(n=0;n<m;n++) { set_gfx_pix(x1, y1, color); a+=a2;if(a>=m) {a-=m;x1+=x2;} b+=b2;if(b>=m) {b-=m;y1+=y2;} } } static void gfx_fun() { int n,m,s; int r,g,b; for(n=0;n<128;n++) { s=1;if(n>64) s=-1; for(m=0;m<256;m++) { register u32 color; color=get_gfx_pix(m,n); r=(color) & 255; g=(color>>8) & 255; b=(color>>16) & 255; color=get_gfx_pix(m,n-s); r+=(color) & 255; g+=(color>>8) & 255; b+=(color>>16) & 255; color=get_gfx_pix(m-1,n+s); r+=(color) & 255; g+=(color>>8) & 255; b+=(color>>16) & 255; color=get_gfx_pix(m+1,n+s); r+=(color) & 255; g+=(color>>8) & 255; b+=(color>>16) & 255; r>>=2;g>>=2;b>>=2; if(r<32 && g<32 && b<32) b=32; color=((0xff00+b)<<16) | (g<<8) | r; set_gfx_pix(m, n, color); } } } static void gfx_fun2() { int n,m,s; int r,g,b; for(n=0;n<128;n++) { s=1;//if(n>128) s=-1; for(m=0;m<256;m++) { register u32 color; color=get_gfx_pix(m,n); r=(color) & 255; g=(color>>8) & 255; b=(color>>16) & 255; color=get_gfx_pix(m,n-s); r+=(color) & 255; g+=(color>>8) & 255; b+=(color>>16) & 255; color=get_gfx_pix(m-1,n); r+=(color) & 255; g+=(color>>8) & 255; b+=(color>>16) & 255; color=get_gfx_pix(m+1,n); r+=(color) & 255; g+=(color>>8) & 255; b+=(color>>16) & 255; color=get_gfx_pix(m,n+s); r+=(color) & 255; g+=(color>>8) & 255; b+=(color>>16) & 255; r/=5;g/=5;b/=5; color=((0xff00+b)<<16) | (g<<8) | r; set_gfx_pix(m, n, color); } } } void music_gfx() { int n,m; short l,r,oldl=0,oldr=0; u16 *punt; int hahaha=0; memset(gfx_buff, 0, 256*256/2*4); memset(pcm_outsample,0,512*2); while(1) { if(exit_by_reset) break; wii_nKeys=wii_joystick_read(1); new_key=wii_nKeys & (~old_key); old_key=wii_nKeys; if(new_key & (WII_HOME | WII_ONE | WII_TWO | WII_A | WII_B)) break; for(n=0;n<256;n+=4) { l=(pcm_outsample[n<<1]>>10)+64; r=(pcm_outsample[(n<<1)+1]>>10)+64; if(hahaha & 128) { set_gfx_pix(n,l,0xff008fff); set_gfx_pix(n,r,0xff00ff8f); } else { line_gfx(n-4,oldl, n, l, 0xff008fff); line_gfx(n-4,oldr, n, r, 0xff008fff); } set_gfx_pix(n+2, -(l<<12), 0xff8f00ff+((l & 255)<<8)); set_gfx_pix(n+2, -(r<<12), 0xffff008f+((r & 255)<<8)); oldl=l;oldr=r; } for(n=0;n<256;n++) { l=(pcm_outsample[n<<1]>>10)+64; r=(pcm_outsample[(n<<1)+1]>>10)+64; line_gfx(n-1,128-oldl, n, 128-l, 0xff400000+(l<<1)); line_gfx(n-1,128-oldr, n, 128-r, 0xffff0000+(r<<1)); oldl=l;oldr=r; } hahaha++; if((hahaha & 0xffff)>3600) { if(hahaha>=(65536+3603)) hahaha=0; else if(hahaha>3605 && hahaha<65536) hahaha=65536+3500; punt= (u16 *) icons_sprites[icons_num_sprites-1].ptr; for(n=0;n<96;n++) for(m=0;m<128;m++) { if(punt[((n/3)<<5) | (m>>2)]==0x8000) set_gfx_pix(64+m, 16+n, 0xff000000); else if(punt[((n>>1)<<5) | (m>>2)]) set_gfx_pix(64+m, 16+n, 0xffffffff); } } gfx_fun(); for(n=0;n<256;n+=8) { l=(pcm_outsample[n<<1]>>10)+64; r=(pcm_outsample[(n<<1)+1]>>10)+64; line_gfx(n-8,oldl, n, l, 0xffff8f00+(l<<1)); line_gfx(n-8,oldr, n, r, 0xffff008f+((127-r)<<9)); oldl=l;oldr=r; } gfx_fun2(); memcpy(gfx_texture,gfx_buff, 256*256/2*4); CreateTexture(&gfx_tex, TILE_SRGBA8, (void *) gfx_texture, 256, 256/2, 0); SetTexture(&gfx_tex); DrawFillBox(-40,-40, 640+80, SCR_HEIGHT+80, 0,0xffffffff); DrawFillBox(0,0, 640, SCR_HEIGHT, 0,0x80ffffff); Screen_flip(); loop_music_playing(); } Screen_flip(); SetTexture(NULL); } /* end */
Optional Paste Settings
Syntax Highlighting:
None
Bash
C
C#
C++
CSS
HTML
JSON
Java
JavaScript
Lua
Markdown (PRO members only)
Objective C
PHP
Perl
Python
Ruby
Swift
4CS
6502 ACME Cross Assembler
6502 Kick Assembler
6502 TASM/64TASS
ABAP
AIMMS
ALGOL 68
APT Sources
ARM
ASM (NASM)
ASP
ActionScript
ActionScript 3
Ada
Apache Log
AppleScript
Arduino
Asymptote
AutoIt
Autohotkey
Avisynth
Awk
BASCOM AVR
BNF
BOO
Bash
Basic4GL
Batch
BibTeX
Blitz Basic
Blitz3D
BlitzMax
BrainFuck
C
C (WinAPI)
C Intermediate Language
C for Macs
C#
C++
C++ (WinAPI)
C++ (with Qt extensions)
C: Loadrunner
CAD DCL
CAD Lisp
CFDG
CMake
COBOL
CSS
Ceylon
ChaiScript
Chapel
Clojure
Clone C
Clone C++
CoffeeScript
ColdFusion
Cuesheet
D
DCL
DCPU-16
DCS
DIV
DOT
Dart
Delphi
Delphi Prism (Oxygene)
Diff
E
ECMAScript
EPC
Easytrieve
Eiffel
Email
Erlang
Euphoria
F#
FO Language
Falcon
Filemaker
Formula One
Fortran
FreeBasic
FreeSWITCH
GAMBAS
GDB
GDScript
Game Maker
Genero
Genie
GetText
Go
Godot GLSL
Groovy
GwBasic
HQ9 Plus
HTML
HTML 5
Haskell
Haxe
HicEst
IDL
INI file
INTERCAL
IO
ISPF Panel Definition
Icon
Inno Script
J
JCL
JSON
Java
Java 5
JavaScript
Julia
KSP (Kontakt Script)
KiXtart
Kotlin
LDIF
LLVM
LOL Code
LScript
Latex
Liberty BASIC
Linden Scripting
Lisp
Loco Basic
Logtalk
Lotus Formulas
Lotus Script
Lua
M68000 Assembler
MIX Assembler
MK-61/52
MPASM
MXML
MagikSF
Make
MapBasic
Markdown (PRO members only)
MatLab
Mercury
MetaPost
Modula 2
Modula 3
Motorola 68000 HiSoft Dev
MySQL
Nagios
NetRexx
Nginx
Nim
NullSoft Installer
OCaml
OCaml Brief
Oberon 2
Objeck Programming Langua
Objective C
Octave
Open Object Rexx
OpenBSD PACKET FILTER
OpenGL Shading
Openoffice BASIC
Oracle 11
Oracle 8
Oz
PARI/GP
PCRE
PHP
PHP Brief
PL/I
PL/SQL
POV-Ray
ParaSail
Pascal
Pawn
Per
Perl
Perl 6
Phix
Pic 16
Pike
Pixel Bender
PostScript
PostgreSQL
PowerBuilder
PowerShell
ProFTPd
Progress
Prolog
Properties
ProvideX
Puppet
PureBasic
PyCon
Python
Python for S60
QBasic
QML
R
RBScript
REBOL
REG
RPM Spec
Racket
Rails
Rexx
Robots
Roff Manpage
Ruby
Ruby Gnuplot
Rust
SAS
SCL
SPARK
SPARQL
SQF
SQL
SSH Config
Scala
Scheme
Scilab
SdlBasic
Smalltalk
Smarty
StandardML
StoneScript
SuperCollider
Swift
SystemVerilog
T-SQL
TCL
TeXgraph
Tera Term
TypeScript
TypoScript
UPC
Unicon
UnrealScript
Urbi
VB.NET
VBScript
VHDL
VIM
Vala
Vedit
VeriLog
Visual Pro Log
VisualBasic
VisualFoxPro
WHOIS
WhiteSpace
Winbatch
XBasic
XML
XPP
Xojo
Xorg Config
YAML
YARA
Z80 Assembler
ZXBasic
autoconf
jQuery
mIRC
newLISP
q/kdb+
thinBasic
Paste Expiration:
Never
Burn after read
10 Minutes
1 Hour
1 Day
1 Week
2 Weeks
1 Month
6 Months
1 Year
Paste Exposure:
Public
Unlisted
Private
Folder:
(members only)
Password
NEW
Enabled
Disabled
Burn after read
NEW
Paste Name / Title:
Create New Paste
Hello
Guest
Sign Up
or
Login
Sign in with Facebook
Sign in with Twitter
Sign in with Google
You are currently not logged in, this means you can not edit or delete anything you paste.
Sign Up
or
Login
Public Pastes
My Log File
HTML 5 | 11 min ago
base permanen
C++ | 12 min ago
startupProgram for...
Lua | 47 min ago
(CC) - ChunkMiner
Lua | 59 min ago
jaeger-todo
Bash | 1 hour ago
main.js
JavaScript | 1 hour ago
energyCubeMonitor_...
Lua | 1 hour ago
My Log File
HTML 5 | 1 hour ago
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the
Cookies Policy
.
OK, I Understand
Not a member of Pastebin yet?
Sign Up
, it unlocks many cool features!