#include #include "console.h" #include "screen.h" #include "tools.h" #include "charmap.h" #include "touchpad.h" #include "dirent.h" #define SCROLL_WIDTH 6 #define ICON_HEIGHT 13 #define MAX_ICONLGN 11 typedef struct { char match[12]; char descr[30]; int size; char ssize[10]; int selected; } elem_t; #define NOPTS 21 elem_t elems[NOPTS] = { {"skins", "computer soft skins", 0,"",0}, {"logs", "system logs", 0,"",0}, {"extension", "OS extensions", 0,"",0}, {"en", "locales english", 0,"",0}, {"en_GB", "locales english Great Britain", 0,"",0}, {"nl_BE", "locales dutch Belgium", 0,"",0}, {"nl", "locales dutch", 0,"",0}, {"zh_CN", "locales chinese simplified", 0,"",0}, {"zh_TW", "locales chinese traditional", 0,"",0}, {"fr", "locales french", 0,"",0}, {"de", "locales german", 0,"",0}, {"es", "locales spanish", 0,"",0}, {"it", "locales italian", 0,"",0}, {"pt", "locales portuguese", 0,"",0}, {"da", "locales danish", 0,"",0}, {"fi", "locales finnish", 0,"",0}, {"no", "locales norwegian", 0,"",0}, {"sv", "locales swedish", 0,"",0}, {"ti84", "TI-84+SE backup", 0,"",0}, {"tmp", "OS temp files", 0,"",0}, {"temp_ccp", "CCP temp files", 0,"",0}, }; char pathbuf[2048]; extern unsigned char back[SCREEN_WIDTH*SCREEN_HEIGHT*2]; unsigned char sscreen[SCREEN_WIDTH*SCREEN_HEIGHT*2]; void initOpts(elem_t elems[]) { int i,j,k; char tmp[7]=" "; depthSearch(elems,"/",-1); for(i=0;i=10) { j=j/10; k++; } sprintf(elems[i].ssize,"%s%i",tmp+k,elems[i].size); } } int startsstr(char* buf, char* ref) { int n=strlen(ref); if(strlen(buf)=0) k=idd; else { for(i=0;i=0) if(elems[k].selected) r=1; st.st_mode=0; st.st_size=0; stat(pathbuf, &st); if(st.st_mode & S_IFDIR) { if( l>1 || isExplorable(fileptr)) { strcpy(fileptr+l2,"/"); fsize = depthSearch(elems,pathbuf,(k>=0)?k:idd); fileptr[l2]=0; if(isRemovable(pathbuf) && r) { rr=rmdir(pathbuf); } if(!r || !rr) s+=fsize; } } else if(k>=0) { if(isRemovable(pathbuf)) { if(r) { if(!unlink(pathbuf)) s+=st.st_size; } if(k>=0) elems[k].size += st.st_size; } } } } closedir(hdir); } return s; } int chooseOpts(elem_t elems[], char* title, char* info) { int j,i,li,s, refresh, shouldwait, t, cancelled=0, parent=0, validated=0, si=0; int touchedzone=0; initTP(); refresh=1; li=-1; si=0; s=si; i=s; shouldwait=0; validated=0; memcpy(getScreen(),sscreen,SCREEN_WIDTH*SCREEN_HEIGHT*2); while (!validated && !cancelled) { parent=0; if( refresh ) { //clrBuf(getScreen()); // int size=SCREEN_WIDTH*(7*ICON_HEIGHT+5)/2; // if(has_colors) size*=4; memcpy(getScreen(),sscreen,SCREEN_WIDTH*96*2); clrBufBox(getScreen(),0,7*ICON_HEIGHT+5,SCREEN_WIDTH,SCREEN_HEIGHT-7*ICON_HEIGHT-5); // resetConsole(); drwBufStr(getScreen(),0,2*ICON_HEIGHT+2,title,0,1); drwBufStr(getScreen(),20,(MAX_ICONLGN+6)*ICON_HEIGHT+6,info, 0,1); for (j = s; j < NOPTS && j-ssi) putBufChar(getScreen(),0,ICON_HEIGHT*6+6,24, 1); if(s+MAX_ICONLGN-10 ) { if (isKeyPressed(KEY_NSPIRE_UP) || isKeyPressed(KEY_NSPIRE_8) || touchedzone==8) { i--; if (i < si) i = NOPTS-1; } if (isKeyPressed(KEY_NSPIRE_DOWN) || isKeyPressed(KEY_NSPIRE_2) || touchedzone==2) { i++; if (i >= NOPTS) i = si; } if (i!=li) { while(i=MAX_ICONLGN-1) { s+=MAX_ICONLGN-1; refresh=1; if(s>NOPTS-MAX_ICONLGN+1) s=NOPTS-MAX_ICONLGN+1; } if(!refresh) { if(li>=0) { setCurColorRGB(255,255,255); drwBufBox(getScreen(),0,ICON_HEIGHT*(li-s+7)+5,SCREEN_WIDTH-1,ICON_HEIGHT*(li-s+8)+5); setCurColorRGB(0,0,0); } drwBufBox(getScreen(),0,ICON_HEIGHT*(i-s+7)+5,SCREEN_WIDTH-1,ICON_HEIGHT*(i-s+8)+5); } li=i; wait(250); } } if(isKeyPressed(KEY_NSPIRE_ESC)) cancelled=1; if(isKeyPressed(KEY_NSPIRE_ENTER) || isKeyPressed(KEY_NSPIRE_RET)) validated=1; if(NOPTS-si>0 && (isKeyPressed(KEY_NSPIRE_CLICK) || isKeyPressed(KEY_NSPIRE_5) || isKeyPressed(KEY_NSPIRE_6) || isKeyPressed(KEY_NSPIRE_SPACE) || isKeyPressed(KEY_NSPIRE_RIGHT)) || touchedzone==6 || touchedzone==5) { elems[i].selected=!elems[i].selected; char c='*'; if(!elems[i].selected) c=' '; putBufChar(getScreen(),2,ICON_HEIGHT*(i-s+7)+6,c, 0); while((isKeyPressed(KEY_NSPIRE_CLICK) || isKeyPressed(KEY_NSPIRE_5) || isKeyPressed(KEY_NSPIRE_6) || isKeyPressed(KEY_NSPIRE_SPACE) || isKeyPressed(KEY_NSPIRE_RIGHT)) || touchedzone==6 || touchedzone==5) { readTP(); touchedzone=getTouchedZone5(); } } wait(10); } if(!cancelled) { validated=0; for(i=0;i0) disp(":)",0,1); else disp(":|",0,1); displn("",0,1); paused("",0,1); } h=fopen("/documents/ndless/nclean.cfg.tns","w"); if(h) { for(j=0;j