int main (int argc, char **argv) { int tv,index,i,j,cmct=CMCT,cmc=CMC,trnspi=TRANSP,trnsp=0,found,loop=1,first=1,x0,x1,x2,x3,x4,x5,x6,x7; int xdir=1, ydir=1; double xstep=1, ystep=1; double csx, cex, csy, cey; time_t atim; struct tm *ltim; char *aptr,*rptr; char dstr[2]={0,0}; printf("SSaver Version %s\n",CL_VERSION); ReadConf(); for(i=1; i<argc; i++) { aptr=argv[i]; if((rptr=strchr(aptr,'='))!=NULL) { rptr++; if(strstr(aptr,"DATE=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { sdat=j; } } if(strstr(aptr,"BIG=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { big=(j)?1:0; } } if(strstr(aptr,"SEC=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { secs=j; } } if(strstr(aptr,"SLOW=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { if(!j) { j=1; } slow=j; } } if(strstr(aptr,"FCOL=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { fcol=j; } } if(strstr(aptr,"BCOL=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { bcol=j; } } } } if((sx=Read_Neutrino_Cfg("screen_StartX"))<0) sx=80; if((ex=Read_Neutrino_Cfg("screen_EndX"))<0) ex=620; if((sy=Read_Neutrino_Cfg("screen_StartY"))<0) sy=80; if((ey=Read_Neutrino_Cfg("screen_EndY"))<0) ey=505; if(!slow) { slow=1; } if(slow>10) { slow=10; } xpos=ex/2; ypos=ey/2; for(index=CMCST; index<=CMH; index++) { sprintf(tstr,"menu_%s_alpha",menucoltxt[index-1]); if((tv=Read_Neutrino_Cfg(tstr))>=0) tr[index-1]=(tv<<8); sprintf(tstr,"menu_%s_blue",menucoltxt[index-1]); if((tv=Read_Neutrino_Cfg(tstr))>=0) bl[index-1]=(tv+(tv<<8)); sprintf(tstr,"menu_%s_green",menucoltxt[index-1]); if((tv=Read_Neutrino_Cfg(tstr))>=0) gn[index-1]=(tv+(tv<<8)); sprintf(tstr,"menu_%s_red",menucoltxt[index-1]); if((tv=Read_Neutrino_Cfg(tstr))>=0) rd[index-1]=(tv+(tv<<8)); } fb = open(FB_DEVICE, O_RDWR); if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) { printf("Clock <FBIOGET_FSCREENINFO failed>\n"); return -1; } if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) { printf("Clock <FBIOGET_VSCREENINFO failed>\n"); return -1; } if(ioctl(fb, FBIOGETCMAP, &colormap) == -1) { printf("Clock <FBIOGETCMAP failed>\n"); return -1; } if(!(lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0))) { printf("Clock <mapping of Framebuffer failed>\n"); return -1; } //init fontlibrary if((error = FT_Init_FreeType(&library))) { printf("Clock <FT_Init_FreeType failed with Errorcode 0x%.2X>", error); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_New(library, 1, 2, 0, &MyFaceRequester, NULL, &manager))) { printf("Clock <FTC_Manager_New failed with Errorcode 0x%.2X>\n", error); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_SBitCache_New(manager, &cache))) { printf("Clock <FTC_SBitCache_New failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_Lookup_Face(manager, FONT, &face))) { printf("Clock <FTC_Manager_Lookup_Face failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } use_kerning = FT_HAS_KERNING(face); #ifdef FT_NEW_CACHE_API desc.face_id = FONT; desc.flags = FT_LOAD_MONOCHROME; #else desc.font.face_id = FONT; desc.image_type = ftc_image_mono; #endif if(!(lbb = malloc(var_screeninfo.xres*var_screeninfo.yres))) { printf("Clock <allocating of Backbuffer failed>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } memset(lbb, 0, var_screeninfo.xres*var_screeninfo.yres); startx = sx; starty = sy; xstep/=(double)slow; ystep/=(double)slow; InitRC(); while(loop) { usleep(15000L); ioctl(fb, FBIOGETCMAP, &colormap); found=0; trnsp=0; for(i=colormap.start;i<colormap.len && found!=7;i++) { if(!colormap.red[i] && !colormap.green[i] && !colormap.blue[i] && !colormap.transp[i]) { cmc=i; found|=1; } if(colormap.red[i]>=0xF000 && colormap.green[i]>=0xF000 && colormap.blue[i]>=0xF000 && !colormap.transp[i]) { cmct=i; found|=2; } if(colormap.transp[i]>trnsp) { trnspi=i; trnsp=colormap.transp[i]; found|=4; } } if(first) { first=0; memset(lbb, (bcol==0)?trnspi:((bcol==1)?cmc:cmct), var_screeninfo.xres*var_screeninfo.yres); memset(lfb, (bcol==0)?trnspi:((bcol==1)?cmc:cmct), var_screeninfo.xres*var_screeninfo.yres); } if(big) { x0=3; x1=14; x2=26; x3=BIG; x4=30; x5=60; } else { x0=7; x1=12; x2=18; x3=MED; x4=18; x5=40; } x6=0; x7=0; time(&atim); ltim=localtime(&atim); if(secs) { sprintf(tstr,"%02d:%02d:%02d",ltim->tm_hour,ltim->tm_min,ltim->tm_sec); } else { sprintf(tstr," %02d%c%02d",ltim->tm_hour,(ltim->tm_sec & 1)?':':' ',ltim->tm_min); if(!sdat) { x6=3; x7=36+4*big; } } xpos+=xstep*(double)xdir; ypos+=ystep*(double)ydir; csx=xpos+x7; csy=ypos; cex=xpos+x7+100+20*big; cey=ypos+x2+2*(1+big)+sdat*x4; if(csx<0 || (sx+cex)>=ex) { xdir*=-1; xpos+=xstep*(double)xdir; csx=xpos+x7; cex=xpos+x7+100+20*big; xstep=rand()&3; if(!xstep) { xstep=1; } xstep/=(double)slow; } if(csy<0 || (sy+cey)>=ey) { ydir*=-1; ypos+=ystep*(double)ydir; csy=ypos; cey=ypos+x2+2*(1+big)+sdat*x4; ystep=rand()&3; if(!ystep || (ystep==3 && ydir==1)) { ystep=1; } ystep/=(double)slow; } for(i=x6; i<strlen(tstr); i++) { *dstr=tstr[i]; RenderString(dstr, xpos-x0+(i*x1), ypos+x2, 30, CENTER, x3, (fcol==0)?trnspi:((fcol==2)?cmct:cmc)); } if(sdat) { sprintf(tstr,"%02d.%02d.%02d",ltim->tm_mday,ltim->tm_mon+1,ltim->tm_year-100); for(i=0; i<strlen(tstr); i++) { *dstr=tstr[i]; RenderString(dstr, xpos-x0+(i*x1), ypos+x5-2-2*big, 30, CENTER, x3, (fcol==0)?trnspi:((fcol==2)?cmct:cmc)); } } for(i=0;i<=((sdat)?40:20)*(1+big);i++) { j=(starty+ypos+i)*var_screeninfo.xres+xpos+startx; if((j+100+20*big)<var_screeninfo.xres*var_screeninfo.yres) { memcpy(lfb+j, lbb+j, 100+20*big); } } RenderBox(csx, csy, cex, cey, FILL, (bcol==0)?trnspi:((bcol==1)?cmc:cmct)); if(++loop>10) { if(RCKeyPressed()||ExistFile("/tmp/.ssaver_kill")) { loop=0; } } } cmct=0; cmc=0; for(i=colormap.start;i<colormap.len;i++) { if(colormap.transp[i]>cmct) { cmc=i; cmct=colormap.transp[i]; } } memset(lfb, cmc, var_screeninfo.xres*var_screeninfo.yres); FTC_Manager_Done(manager); FT_Done_FreeType(library); free(lbb); munmap(lfb, fix_screeninfo.smem_len); close(fb); CloseRC(); remove("/tmp/.ssaver_kill"); return 0; }
int Check_Config(void) { int rv=-1, level=0; char *pt1,*pt2; FSTRUCT fstr; if((fstr.fh[0]=fopen(CFG_FILE,"r"))!=NULL) { fstr.fnum=0; while(GetLine(line_buffer, BUFSIZE, &fstr)) { if(IsMenu(line_buffer)) { if(menu.num_headers>=menu.max_header) { if((menu.headertxt=realloc(menu.headertxt,(menu.max_header+LIST_STEP)*sizeof(char*)))==NULL) { printf(NOMEM); Clear_List(&menu,0); return rv; } memset(&menu.headertxt[menu.max_header],0,LIST_STEP*sizeof(char*)); if((menu.icon=realloc(menu.icon,(menu.max_header+LIST_STEP)*sizeof(char*)))==NULL) { printf(NOMEM); Clear_List(&menu,0); return rv; } memset(&menu.icon[menu.max_header],0,LIST_STEP*sizeof(char*)); if((menu.headerlevels=realloc(menu.headerlevels,(menu.max_header+LIST_STEP)*sizeof(int)))==NULL) { printf(NOMEM); Clear_List(&menu,0); return rv; } memset(&menu.headerlevels[menu.max_header],0,LIST_STEP*sizeof(int)); if((menu.headerwait=realloc(menu.headerwait,(menu.max_header+LIST_STEP)*sizeof(int)))==NULL) { printf(NOMEM); Clear_List(&menu,0); return rv; } memset(&menu.headerwait[menu.max_header],0,LIST_STEP*sizeof(int)); if((menu.headermed=realloc(menu.headermed,(menu.max_header+LIST_STEP)*sizeof(int)))==NULL) { printf(NOMEM); Clear_List(&menu,0); return rv; } memset(&menu.headermed[menu.max_header],0,LIST_STEP*sizeof(int)); if((menu.lastheaderentrys=realloc(menu.lastheaderentrys,(menu.max_header+LIST_STEP)*sizeof(int)))==NULL) { printf(NOMEM); Clear_List(&menu,0); return rv; } memset(&menu.lastheaderentrys[menu.max_header],0,LIST_STEP*sizeof(int)); menu.max_header+=LIST_STEP; } pt1=strchr(line_buffer,'='); if(!pt1) { pt1=line_buffer; } else { ++pt1; } pt2=pt1; while(*pt2 && ((*pt2=='*') || (*pt2=='&') || (*pt2==0302) || (*pt2==0247) || (*pt2=='+') || (*pt2=='-') || (*pt2=='!') || (*pt2=='_'))) { if(*pt2=='_') { menu.headermed[menu.num_headers]=1; } while(*(++pt2)) { *(pt2-1)=*pt2; } *(pt2-1)=0; pt2=pt1; } if(menu.icon[menu.num_headers]) { free(menu.icon[menu.num_headers]); menu.icon[menu.num_headers]=NULL; } if((pt2=strstr(pt1,",ICON="))!=NULL) { *pt2=0; menu.icon[menu.num_headers]=strdup(pt2+6); } if(menu.headertxt[menu.num_headers]) { free(menu.headertxt[menu.num_headers]); } menu.headerlevels[menu.num_headers]=level++; if((pt2=strxchr(pt1,','))!=NULL) { *pt2=0; } menu.headertxt[menu.num_headers++]=strdup(pt1); } else { if(strstr(line_buffer,TYPESTR[TYP_ENDMENU])==line_buffer) { --level; } else { int neutrinofont = Read_Neutrino_Cfg("font_file="); if(neutrinofont!=1 && strstr(line_buffer,"FONT=")==line_buffer) { strcpy(FONT,strchr(line_buffer,'=')+1); } if(strstr(line_buffer,"VFD=")==line_buffer) { strcpy(VFD,strchr(line_buffer,'=')+1); if(access(VFD,1)!=-1) vfd=1; } if(strstr(line_buffer,"FONTSIZE=")==line_buffer) { sscanf(strchr(line_buffer,'=')+1,"%d",&FSIZE_MED); } if(strstr(line_buffer,"MENUTIMEOUT=")==line_buffer) { sscanf(strchr(line_buffer,'=')+1,"%d",&mtmo); } if(strstr(line_buffer,"PAGING=")==line_buffer) { sscanf(strchr(line_buffer,'=')+1,"%d",&paging); } if(strstr(line_buffer,"LINESPP=")==line_buffer) { sscanf(strchr(line_buffer,'=')+1,"%d",&MAX_FUNCS); } if(strstr(line_buffer,"WIDTH=")==line_buffer) { sscanf(strchr(line_buffer,'=')+1,"%d",&ixw); } if(strstr(line_buffer,"HEIGHT=")==line_buffer) { sscanf(strchr(line_buffer,'=')+1,"%d",&iyw); } if(strstr(line_buffer,"HIGHT=")==line_buffer) { sscanf(strchr(line_buffer,'=')+1,"%d",&iyw); printf("shellexec::Check_Config: please use HEIGHT instead of HIGHT\n"); } if(strstr(line_buffer,"TIMESERVICE=")==line_buffer) { strcpy(url,strchr(line_buffer,'=')+1); if(strstr(url,"NONE") || strlen(url)<4) { *url=0; } } } } //printf("Check_Config: Level: %d -> %s\n",level,line_buffer); } rv=0; fclose(fstr.fh[fstr.fnum]); } FSIZE_BIG=(FSIZE_MED*5)/4; FSIZE_SMALL=(FSIZE_MED*4)/5; TABULATOR=2*FSIZE_MED; ixw=scale2res(ixw); iyw=scale2res(iyw); ixw=(ixw>(ex-sx))?(ex-sx):((ixw<scale2res(400))?scale2res(400):ixw); iyw=(iyw>(ey-sy))?(ey-sy):((iyw<scale2res(380))?scale2res(380):iyw); return rv; }
int main (int argc, char **argv) { unsigned int margin_left_F, digit_width, margin_top_t, font_size, margin_top_box, margin_top_d, digits, secs_width, adj_height; int i = 0; int j = 0; int w = 0; int ms = 0; int mw = 0; int loop = 1; unsigned int newmail = 0; unsigned int mailgfx = 0; int xdir = 1, ydir = 1; double xstep = 1, ystep = 1; double csx, cex, csy, cey; time_t atim; struct tm *ltim; char *aptr,*rptr; char dstr[2] = {0,0}; FILE *tfh; printf("Clock / SSaver Version %s\n",CL_VERSION); for (i = 1; i < argc; i++) { if (!strncmp(argv[i], "-ss", 3)) { ssaver = 1; continue; } } if (ssaver) { time(&atim); srand((unsigned int)atim); ReadConf(SCFG_FILE); } else { ReadConf(CCFG_FILE); } for (i = 1; i < argc; i++) { aptr=argv[i]; if((rptr=strchr(aptr,'='))!=NULL) { rptr++; if (!ssaver) { if(strstr(aptr,"X=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { xpos=j; } } if(strstr(aptr,"Y=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { ypos=j; } } if(strstr(aptr,"MAIL=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { mail=j; } } } if(strstr(aptr,"DATE=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { show_date=j; } } if(strstr(aptr,"BIG=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { big=(j)?1:0; } } if(strstr(aptr,"SEC=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { show_sec=j; } } if(strstr(aptr,"BLINK=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { blink=j; } } if(strstr(aptr,"SLOW=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { if(!j) { j=1; } slow=j; } } if(strstr(aptr,"FCOL=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { fcol=j; } } if(strstr(aptr,"BCOL=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { bcol=j; } } } } if((sx=Read_Neutrino_Cfg("screen_StartX"))<0) sx=80; if((ex=Read_Neutrino_Cfg("screen_EndX"))<0) ex=620; if((sy=Read_Neutrino_Cfg("screen_StartY"))<0) sy=80; if((ey=Read_Neutrino_Cfg("screen_EndY"))<0) ey=505; fb = open(FB_DEVICE, O_RDWR); if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) { printf("Clock / SSaver <FBIOGET_FSCREENINFO failed>\n"); return -1; } if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) { printf("Clock / SSaver <FBIOGET_VSCREENINFO failed>\n"); return -1; } if(!(lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0))) { printf("Clock / SSaver <mapping of Framebuffer failed>\n"); return -1; } //init fontlibrary if((error = FT_Init_FreeType(&library))) { printf("Clock / SSaver <FT_Init_FreeType failed with Errorcode 0x%.2X>", error); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_New(library, 1, 2, 0, &MyFaceRequester, NULL, &manager))) { printf("Clock / SSaver <FTC_Manager_New failed with Errorcode 0x%.2X>\n", error); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_SBitCache_New(manager, &cache))) { printf("Clock / SSaver <FTC_SBitCache_New failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_Lookup_Face(manager, FONT, &face))) { printf("Clock / SSaver <FTC_Manager_Lookup_Face failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } use_kerning = FT_HAS_KERNING(face); #ifdef FT_NEW_CACHE_API desc.face_id = FONT; #else desc.font.face_id = FONT; #endif #if FREETYPE_MAJOR == 2 && FREETYPE_MINOR == 0 desc.image_type = ftc_image_mono; #else desc.flags = FT_LOAD_MONOCHROME; #endif //init backbuffer if(!(lbb = malloc(var_screeninfo.xres*var_screeninfo.yres))) { printf("Clock / SSaver <allocating of Backbuffer failed>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if (!slow) slow=1; if (slow>10) slow=10; if (fcol > MAXCOL && !(ssaver == 1 && fcol == 99)) fcol = 2; if (bcol > 3 && !(bcol == 10)) bcol = 1; if (ssaver) { memset(lbb, col[bcol], var_screeninfo.xres*var_screeninfo.yres); memset(lfb, col[bcol], var_screeninfo.xres*var_screeninfo.yres); } else memset(lbb, 0, var_screeninfo.xres*var_screeninfo.yres); if (big) //grosse Schrift (time/date) { margin_left_F = 3; // 3 digit_width = 14; // 14 margin_top_t = 26; // 26 font_size = BIG; // 40 margin_top_box = 30; // 30 margin_top_d = 60; // 60 } else { margin_left_F = 7; //7 Abstand links digit_width = 12; //12 Ziffernblockbreite margin_top_t = 19; //19 Abstand "TimeString"-Unterkante von oben font_size = MED; //30 Schriftgroesse margin_top_box = 20; //20 Abstand Renderbox von oben margin_top_d = 40; //40 Abstand "DateString" von oben } digits = 0; secs_width = 0; startx = sx; starty = sy; mw = (big) ? 42 : 36; //mailwidth adj_height = 1 * (!big && !show_date); //max steprange == 3, so we need always a top/bottom margin of >=3 if (!show_sec && !show_date) { digits = 3; //3 Platzhalter ':ss' secs_width = digits * digit_width; } if (ssaver) { xpos = rand() %480 + 10; ypos = rand() %460 + 10; xdir *= (rand() &1) == 0 ? -1 : 1; ydir *= (rand() &1) == 0 ? -1 : 1; xstep/=(double)slow; ystep/=(double)slow; if (fcol == 99) { cCol = 1; Change_Col(&fcol, &bcol); } InitRC(); } while (loop) { if (ssaver) usleep(15000L); else { usleep(150000L); newmail = 0; if(mail && ExistFile(MAIL_FILE)) { if((tfh = fopen(MAIL_FILE,"r")) != NULL) { if(fgets(tstr, 511, tfh)) { if(sscanf(tstr, "%d", &i)) { newmail = i; } } fclose(tfh); } } } time(&atim); ltim=localtime(&atim); if (show_sec) { sprintf(tstr,"%02d:%02d:%02d", ltim->tm_hour, ltim->tm_min, ltim->tm_sec); } else { if (blink) sprintf(tstr," %02d%c%02d", ltim->tm_hour, (ltim->tm_sec & 1)? ' ' : ':', ltim->tm_min); else sprintf(tstr," %02d:%02d", ltim->tm_hour, ltim->tm_min); } if (!ssaver) { if (((int)xpos >= mw) || (!show_sec)) { ms = (int)xpos + ((show_sec) ? 0 : mw) - mw; //mail left } else { ms = (int)xpos + 100 + 20 * big; //mail right } //paint Backgroundcolor to clear digit RenderBox(xpos+secs_width, ypos, xpos+secs_width+100+20*big, ypos+margin_top_box + adj_height, FILL, col[bcol]); } if (ssaver) { xpos += xstep * (double)xdir; ypos += ystep * (double)ydir; csx = xpos + secs_width; csy = ypos; cex = xpos + secs_width + 100 + 20 * big; cey = ypos + margin_top_t + 2 * (1 + big) + (margin_top_box * show_date) + adj_height; if ((int)csx < 0 || (sx + (int)cex) > ex) { if (cCol) Change_Col(&fcol, &bcol); xdir *= -1; xpos += xstep * (double)xdir; csx = xpos + secs_width; cex = xpos + secs_width + 100 + 20 * big; xstep = rand() &3; if (!xstep) { xstep = 1; } xstep /= (double)slow; } if ((int)csy < 0 || (sy + (int)cey) > ey) { if (cCol) Change_Col(&fcol, &bcol); ydir *= -1; ypos += ystep * (double)ydir; csy = ypos; cey = ypos + margin_top_t + 2 * (1 + big) + (margin_top_box * show_date) + adj_height; ystep = rand() &3; if (!ystep) { ystep = 1; } ystep /= (double)slow; } RenderBox(csx, csy, cex, cey, FILL, col[bcol]); } for (i = digits; i < strlen(tstr); i++) { *dstr = tstr[i]; RenderString(dstr, xpos - margin_left_F + (i * digit_width), ypos + margin_top_t, 30, CENTER, font_size, col[fcol]); } if (show_date) { sprintf(tstr, "%02d.%02d.%02d", ltim->tm_mday, ltim->tm_mon + 1, ltim->tm_year - 100); if (!ssaver) { //Backgroundbox color Date RenderBox(xpos, ypos + margin_top_box, xpos + 100 + 20 * big, ypos + margin_top_d, FILL, col[bcol]); } for(i = 0; i < strlen(tstr); i++) { *dstr = tstr[i]; RenderString(dstr, xpos - margin_left_F + (i * digit_width), ypos + margin_top_d - 2 - (2 * big), 30, CENTER, font_size, col[fcol]); } } if (ssaver) { w = 100 + 20 * big + ((show_sec) ? 0 : - secs_width); for (i = 0; i <= ((show_date) ? 20 : 10) * (2 + big) + adj_height; i++) { j = (starty + (int)ypos + i) * var_screeninfo.xres + (int)xpos + ((show_sec) ? 0 : secs_width) + startx; if ((j + w) < var_screeninfo.xres * var_screeninfo.yres) { memcpy(lfb+j, lbb+j, w); } } } else { if (newmail > 0) { mailgfx = 1; //Background mail, left site from clock RenderBox(ms, ypos, ms+mw, ypos+margin_top_box + adj_height, FILL, col[bcol]); //bcol if(!(ltim->tm_sec & 1)) { RenderBox (ms+8, ypos+5+(1+big), ms+mw-8, ypos+margin_top_box+adj_height-2-(3*big), GRID, col[fcol]); DrawLine (ms+8, ypos+5+(1+big), ms+mw-8, ypos+margin_top_box+adj_height-2-(3*big), col[fcol]); DrawLine (ms+8, ypos+margin_top_box+adj_height-2-(3*big), ms+mw-8, ypos+5+(1+big), col[fcol]); DrawLine (ms+(9+1*big), ypos+4+(1+big), ms+(mw/2), ypos+1, col[fcol]); DrawLine (ms+(9+1*big), ypos+5+(1+big), ms+(mw/2), ypos+2, col[fcol]); DrawLine (ms+(mw/2), ypos+1, ms+mw-(9+1*big), ypos+4+(1+big), col[fcol]); DrawLine (ms+(mw/2), ypos+2, ms+mw-(9+1*big), ypos+5+(1+big), col[fcol]); } else { sprintf(tstr,"%d",newmail); RenderString(tstr, ms, ypos+margin_top_t, mw, CENTER, font_size, col[fcol]); } } else { if (mailgfx > 0) RenderBox(ms, ypos, ms+mw, ypos + margin_top_box + adj_height, FILL, (!show_date || show_sec) ? TRANSP : col[bcol]); else ms=(int)xpos; } w = 100 + 20 * big + ((mailgfx) ? ((show_sec) ? mw : 0) : - secs_width); for (i=0; i <= ((show_date) ? 20 : 10) * (2 + big) + adj_height; i++) { j = (starty + (int)ypos + i) * var_screeninfo.xres + ( ((ms < (int)xpos) ? ms : (int)xpos) + ((show_sec) ? 0 : ((mailgfx) ? 0 : secs_width)) ) + startx; if ((j + w) < var_screeninfo.xres * var_screeninfo.yres) { memcpy(lfb+j, lbb+j, w); } } if (newmail == 0 && mailgfx > 0) mailgfx = 0; } if (++loop > 10) { if ( (ssaver && (RCKeyPressed() || ExistFile("/tmp/.ssaver_kill"))) || (!ssaver && ExistFile("/tmp/.clock_kill")) ) loop = 0; } } /**************************** * close down Clock / SSaver ****************************/ if (ssaver) { memset(lfb, 0, var_screeninfo.xres*var_screeninfo.yres); remove("/tmp/.ssaver_kill"); CloseRC(); } else { memset(lbb, 0, var_screeninfo.xres*var_screeninfo.yres); remove("/tmp/.clock_kill"); for (i=0; i <= ((show_date) ? 20 : 10) * (2 + big) + adj_height; i++) { j=(starty+(int)ypos+i)*var_screeninfo.xres+((ms<(int)xpos)?ms:(int)xpos)+((show_sec)?0:((mailgfx)?0:secs_width))+startx; if((j+100+20*big+((mail)?mw:0))<var_screeninfo.xres*var_screeninfo.yres) { memcpy(lfb+j, lbb+j, w); } } } FTC_Manager_Done(manager); FT_Done_FreeType(library); free(lbb); munmap(lfb, fix_screeninfo.smem_len); close(fb); return 0; }
int main (int argc, char **argv) { int index,index2,tv,found=0; int dloop=1, rcc=-1, flsh=0, cupd=0; char rstr[BUFSIZE], *rptr, *aptr; time_t tm1,tm2; unsigned int alpha; clock_t tk1=0; FILE *fh; if(argc<2) { ShowUsage(); return 0; } dloop=0; for(tv=1; !dloop && tv<argc; tv++) { aptr=argv[tv]; if((rptr=strchr(aptr,'='))!=NULL) { rptr++; if(strstr(aptr,"size=")!=NULL) { if(sscanf(rptr,"%d",&size)!=1) { dloop=1; } } else { if(strstr(aptr,"title=")!=NULL) { title=strdup(rptr); CatchTabs(title); if(strcmp(title,"none")==0) { header=0; } /* tpos=0; while(*rptr) { if(*rptr!='~') { nstr[tpos]=*rptr; } else { rc=*(rptr+1); found=0; for(i=0; i<sizeof(sc) && !found; i++) { if(rc==sc[i]) { rc=tc[i]; found=1; } } if(found) { nstr[tpos]=rc; ++rptr; } else { nstr[tpos]=*rptr; } } ++tpos; ++rptr; } nstr[tpos]=0; title=strdup(nstr); */ } else { if(strstr(aptr,"timeout=")!=NULL) { if(sscanf(rptr,"%d",&timeout)!=1) { dloop=1; } } else { if(strstr(aptr,"msg=")!=NULL) { dloop=Transform_Msg(rptr); if(timeout==0) { if((timeout=Read_Neutrino_Cfg("timing.epg"))<0) timeout=300; } type=1; } else { if(strstr(aptr,"popup=")!=NULL) { dloop=Transform_Msg(rptr); if(timeout==0) { if((timeout=Read_Neutrino_Cfg("timing.infobar"))<0) timeout=6; } type=2; } else { if(strstr(aptr,"refresh=")!=NULL) { if(sscanf(rptr,"%d",&refresh)!=1) { dloop=1; } } else { if(strstr(aptr,"select=")!=NULL) { dloop=GetSelection(rptr); } else { if(strstr(aptr,"default=")!=NULL) { if((sscanf(rptr,"%d",&selection)!=1) || selection<1) { dloop=1; } } else { if(strstr(aptr,"order=")!=NULL) { if(sscanf(rptr,"%d",&bpline)!=1) { dloop=1; } } else { if(strstr(aptr,"echo=")!=NULL) { if(sscanf(rptr,"%d",&echo)!=1) { dloop=1; } } else { if(strstr(aptr,"absolute=")!=NULL) { if(sscanf(rptr,"%d",&absolute)!=1) { dloop=1; } } else { if(strstr(aptr,"hide=")!=NULL) { if(sscanf(rptr,"%d",&mute)!=1) { dloop=1; } } else { if(strstr(aptr,"cyclic=")!=NULL) { if(sscanf(rptr,"%d",&cyclic)!=1) { dloop=1; } } else { dloop=2; } } } } } } } } } } } } } } switch (dloop) { case 1: printf("msgbox <param error: %s>\n",aptr); return 0; break; case 2: printf("msgbox <unknown command: %s>\n\n",aptr); ShowUsage(); return 0; break; } } /*for(tv=0; tv<buttons; tv++) { printf("%cButton %d: %s\n",(tv==selection-1)?'>':' ',tv+1,butmsg[tv]); } return 0;*/ if(!echo) { printf("\nmsgbox Message-Box Version %.2f\n",M_VERSION); } if(!buttons) { butmsg[0]=strdup("OK"); buttons=1; } /* if(selection>buttons) { printf("msgbox <param error: default=%d>\n",selection); return 0; } */ if(!absolute) { for(tv=0; tv<buttons; tv++) { rbutt[tv]=tv+1; } } if(selection) { for(tv=0; tv<buttons && !found; tv++) { if(rbutt[tv]==selection) { selection=tv+1; found=1; } } if(!found) { printf("msgbox <param error: default=%d>\n",selection); return 0; } } else { for(tv=0; tv<buttons && !selection; tv++) { if(strlen(butmsg[tv])) { selection=tv+1; } } } /* for(tv=0; selection!=rbutt[tv] && tv<buttons; tv++); if(tv>=buttons) { selection=1; } */ if(!title) { title=strdup("Information"); } if((line_buffer=calloc(BUFSIZE+1, sizeof(char)))==NULL) { printf(NOMEM); return -1; } if((debounce=Read_Neutrino_Cfg("repeat_genericblocker"))<0) debounce=200; if((rblock=Read_Neutrino_Cfg("repeat_blocker"))<0) rblock=50; if(((sx=Read_Neutrino_Cfg("screen_StartX"))<0)&&((sx=Read_Neutrino_Cfg("/enigma/plugins/needoffsets/left"))<0)) sx=80; if(((ex=Read_Neutrino_Cfg("screen_EndX"))<0)&&((ex=Read_Neutrino_Cfg("/enigma/plugins/needoffsets/right"))<0)) ex=620; if(((sy=Read_Neutrino_Cfg("screen_StartY"))<0)&&((sy=Read_Neutrino_Cfg("/enigma/plugins/needoffsets/top"))<0)) sy=80; if(((ey=Read_Neutrino_Cfg("screen_EndY"))<0)&&((ey=Read_Neutrino_Cfg("/enigma/plugins/needoffsets/bottom"))<0)) ey=505; if(Read_Neutrino_Cfg("rounded_corners")>0) radius=9; else radius=0; if((trstr=malloc(BUFSIZE))==NULL) { printf(NOMEM); return -1; } fb = open(FB_DEVICE, O_RDWR); #ifdef HAVE_DBOX_HARDWARE ioctl(fb, AVIA_GT_GV_GET_BLEV, &alpha); #endif rc = open(RC_DEVICE, O_RDONLY); fcntl(rc, F_SETFL, (fcntl(rc, F_GETFL) | O_EXCL) | O_NONBLOCK); //init framebuffer if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) { printf("msgbox <FBIOGET_FSCREENINFO failed>\n"); return -1; } if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) { printf("msgbox <FBIOGET_VSCREENINFO failed>\n"); return -1; } if(ioctl(fb, FBIOGETCMAP, &oldcmap) == -1) { printf("msgbox <FBIOGETCMAP failed>\n"); return -1; } /* fh=fopen("/tmp/cmap.log","w"); fprintf(fh,"Start: %d, LEN: %d\n",oldcmap.start,oldcmap.len); for(tv=0; tv<256; tv++) { fprintf(fh,"%02d %04x %04x %04x %04x\n",tv,oldcmap.red[tv],oldcmap.green[tv],oldcmap.blue[tv],oldcmap.transp[tv]); } fclose(fh); */ for(index=0; index<8; index++) { sprintf(rstr,"menu_%s_alpha",menucoltxt[index]); if((tv=Read_Neutrino_Cfg(rstr))>=0) for(index2=0; index2<7; index2++) otr[menucolval[index]+index2]=(tv<<8); } ord[FLASH]=ord[CMCT]; ogn[FLASH]=ogn[CMCT]; obl[FLASH]=obl[CMCT]; otr[FLASH]=otr[CMCT]; /* fh=fopen("/tmp/cmap2.log","w"); fprintf(fh,"Start: %d, LEN: %d\n",oldcmap.start,oldcmap.len); for(tv=0; tv<256; tv++) { fprintf(fh,"%02d %04x %04x %04x %04x\n",tv,oldcmap.red[tv],oldcmap.green[tv],oldcmap.blue[tv],oldcmap.transp[tv]); } fclose(fh); */ /* { int i; printf("unsigned short rd[] = {"); for(i=CMCST; i<=CMH;i++) printf("0x%02x<<8, ",(ord[i]>>8)&0xFF); printf("\nunsigned short gn[] = {"); for(i=CMCST; i<=CMH;i++) printf("0x%02x<<8, ",(ogn[i]>>8)&0xFF); printf("\nunsigned short bl[] = {"); for(i=CMCST; i<=CMH;i++) printf("0x%02x<<8, ",(obl[i]>>8)&0xFF); printf("\nunsigned short tr[] = {"); for(i=CMCST; i<=CMH;i++) printf("0x%02x<<8, ",(otr[i]>>8)&0xFF); printf("\n"); } return 0; */ if(ioctl(fb, FBIOPUTCMAP, &oldcmap) == -1) { printf("msgbox <FBIOPUTCMAP failed>\n"); return -1; } if(!(lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0))) { printf("msgbox <mapping of Framebuffer failed>\n"); return -1; } //init fontlibrary if((error = FT_Init_FreeType(&library))) { printf("msgbox <FT_Init_FreeType failed with Errorcode 0x%.2X>", error); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_New(library, 1, 2, 0, &MyFaceRequester, NULL, &manager))) { printf("msgbox <FTC_Manager_New failed with Errorcode 0x%.2X>\n", error); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_SBitCache_New(manager, &cache))) { printf("msgbox <FTC_SBitCache_New failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_Lookup_Face(manager, FONT, &face))) { printf("msgbox <FTC_Manager_Lookup_Face failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } use_kerning = FT_HAS_KERNING(face); #ifdef FT_NEW_CACHE_API desc.face_id = FONT; #else desc.font.face_id = FONT; #endif #if FREETYPE_MAJOR == 2 && FREETYPE_MINOR == 0 desc.image_type = ftc_image_mono; #else desc.flags = FT_LOAD_MONOCHROME; #endif //init backbuffer if(!(lbb = malloc(var_screeninfo.xres*var_screeninfo.yres))) { printf("msgbox <allocating of Backbuffer failed>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if(!(obb = malloc(var_screeninfo.xres*var_screeninfo.yres))) { printf("msgbox <allocating of Backbuffer failed>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); free(lbb); munmap(lfb, fix_screeninfo.smem_len); return -1; } if(!(hbb = malloc(var_screeninfo.xres*var_screeninfo.yres))) { printf("msgbox <allocating of Backbuffer failed>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); free(lbb); free(obb); munmap(lfb, fix_screeninfo.smem_len); return -1; } if(!(ibb = malloc(var_screeninfo.xres*var_screeninfo.yres))) { printf("msgbox <allocating of Backbuffer failed>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); free(lbb); free(obb); free(hbb); munmap(lfb, fix_screeninfo.smem_len); return -1; } if(refresh & 1) { memcpy(ibb, lfb, var_screeninfo.xres*var_screeninfo.yres); } else { memset(ibb, TRANSP, var_screeninfo.xres*var_screeninfo.yres); } if(mute==2) { memcpy(hbb, lfb, var_screeninfo.xres*var_screeninfo.yres); } else { memset(hbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres); } if(refresh & 2) { memcpy(obb, lfb, var_screeninfo.xres*var_screeninfo.yres); } else { memset(obb, TRANSP, var_screeninfo.xres*var_screeninfo.yres); } startx = sx /*+ (((ex-sx) - 620)/2)*/; starty = sy /* + (((ey-sy) - 505)/2)*/; /* Set up signal handlers. */ signal(SIGINT, quit_signal); signal(SIGTERM, quit_signal); signal(SIGQUIT, quit_signal); put_instance(instance=get_instance()+1); show_txt(0); //FBEnterWord( 100, 100, 100,20,CMCT); //rc=RC_HOME; time(&tm1); tm2=tm1; tk1=clock()/(CLOCKS_PER_SEC/1000); #ifdef HAVE_DREAMBOX_HARDWARE ClearKeys(); #endif //main loop while((rcc!=RC_HOME) && (rcc!=RC_OK) && ((timeout==-1)||((tm2-tm1)<timeout))) { rcc=GetRCCode(); if(rcc!=-1) { time(&tm1); } else { if(++cupd>10) { if(cyclic) { show_txt(0); cupd=0; } } usleep(100000L); } if(mute && rcc==RC_MUTE) { hide^=1; show_txt(0); usleep(500000L); while(GetRCCode()!=-1); if(hide) { if((fh=fopen(HDF_FILE,"w"))!=NULL) { fprintf(fh,"hidden"); fclose(fh); } } else { remove(HDF_FILE); } } if((!hide) && (rcc!=RC_HOME) && (rcc!=RC_OK)) { switch(rcc) { case RC_LEFT: if(!hide && (--selection<1)) { selection=buttons; } show_txt(1); break; case RC_RIGHT: if(!hide && (++selection>buttons)) { selection=1; } show_txt(1); break; case RC_UP: if(!hide && ((selection-=bpline)<1)) { selection=1; } show_txt(1); break; case RC_DOWN: if(!hide && ((selection+=bpline)>buttons)) { selection=buttons; } show_txt(1); break; default: if(++flsh==7) { flsh=0; flash^=1; ord[FLASH]=(flash)?ord[CMC]:ord[CMCT]; ogn[FLASH]=(flash)?ogn[CMC]:ogn[CMCT]; obl[FLASH]=(flash)?obl[CMC]:obl[CMCT]; otr[FLASH]=(flash)?otr[CMC]:otr[CMCT]; ioctl(fb, FBIOPUTCMAP, &oldcmap); } break; } } time(&tm2); if(hide) { rcc=-1; } } if((type!=1) || (rcc!=RC_OK)) { selection=0; } //cleanup // clear Display // memset(lbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres); // memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres); memcpy(lfb, obb, var_screeninfo.xres*var_screeninfo.yres); munmap(lfb, fix_screeninfo.smem_len); #ifdef HAVE_DBOX_HARDWARE ioctl(fb, AVIA_GT_GV_SET_BLEV, alpha); #endif close(fb); free(lbb); put_instance(get_instance()-1); if(echo && selection>0) { printf("%s\n",butmsg[selection-1]); } for(tv=0; tv<buttons; tv++) { free(butmsg[tv]); } free(trstr); free(line_buffer); free(title); FTC_Manager_Done(manager); FT_Done_FreeType(library); free(obb); free(hbb); free(ibb); close(rc); remove("/tmp/msgbox.tmp"); if(selection) { return rbutt[selection-1]; } return 0; }
int main (int argc, char **argv) { int index=0,cindex=0,mainloop=1,dloop=1,tv, spr, resolution; char tstr[BUFSIZE]={0}, *rptr; PLISTENTRY pl; printf("%s Version %.2f\n", __plugin__, SH_VERSION); for(tv=1; tv<argc; tv++) { if(*argv[tv]=='/') { strcpy(CFG_FILE,argv[tv]); } } //init framebuffer before 1st scale2res fb = open(FB_DEVICE, O_RDWR); #ifdef MARTII if (fb < 0) fb = open(FB_DEVICE_FALLBACK, O_RDWR); #endif if(fb == -1) { perror(__plugin__ " <open framebuffer device>"); exit(1); } if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) { perror(__plugin__ " <FBIOGET_FSCREENINFO>\n"); return -1; } if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) { perror(__plugin__ " <FBIOGET_VSCREENINFO>\n"); return -1; } #if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) var_screeninfo.xres = DEFAULT_XRES; var_screeninfo.yres = DEFAULT_YRES; #endif if(!(lfb = (uint32_t*)mmap(0, fix_screeninfo.smem_len, PROT_WRITE|PROT_READ, MAP_SHARED, fb, 0))) { perror(__plugin__ " <mapping of Framebuffer>\n"); return -1; } // read config ixw=scale2res(600), iyw=scale2res(680), xoffs=scale2res(13); if((line_buffer=calloc(BUFSIZE+1, sizeof(char)))==NULL) { printf(NOMEM); return -1; } if((trstr=calloc(BUFSIZE+1, sizeof(char)))==NULL) { printf(NOMEM); return -1; } spr=Read_Neutrino_Cfg("screen_preset")+1; resolution=Read_Neutrino_Cfg("osd_resolution"); if (resolution == -1) sprintf(trstr,"screen_StartX_%s", spres[spr]); else sprintf(trstr,"screen_StartX_%s_%d", spres[spr], resolution); if((sx=Read_Neutrino_Cfg(trstr))<0) sx=scale2res(100); if (resolution == -1) sprintf(trstr,"screen_EndX_%s", spres[spr]); else sprintf(trstr,"screen_EndX_%s_%d", spres[spr], resolution); if((ex=Read_Neutrino_Cfg(trstr))<0) ex=scale2res(1180); if (resolution == -1) sprintf(trstr,"screen_StartY_%s", spres[spr]); else sprintf(trstr,"screen_StartY_%s_%d", spres[spr], resolution); if((sy=Read_Neutrino_Cfg(trstr))<0) sy=scale2res(100); if (resolution == -1) sprintf(trstr,"screen_EndY_%s", spres[spr]); else sprintf(trstr,"screen_EndY_%s_%d", spres[spr], resolution); if((ey=Read_Neutrino_Cfg(trstr))<0) ey=scale2res(620); for(index=CMCST; index<=CMH; index++) { sprintf(trstr,"menu_%s_alpha",menucoltxt[index]); if((tv=Read_Neutrino_Cfg(trstr))>=0) tr[index]=255-(float)tv*2.55; sprintf(trstr,"menu_%s_blue",menucoltxt[index]); if((tv=Read_Neutrino_Cfg(trstr))>=0) bl[index]=(float)tv*2.55; sprintf(trstr,"menu_%s_green",menucoltxt[index]); if((tv=Read_Neutrino_Cfg(trstr))>=0) gn[index]=(float)tv*2.55; sprintf(trstr,"menu_%s_red",menucoltxt[index]); if((tv=Read_Neutrino_Cfg(trstr))>=0) rd[index]=(float)tv*2.55; } if(Read_Neutrino_Cfg("rounded_corners")>0) { radius = scale2res(11); radius_small = scale2res(5); } else radius = radius_small = 0; mtmo = Read_Neutrino_Cfg("timing.menu"); if (mtmo < 0) mtmo = 0; cindex=CMC; for(index=COL_MENUCONTENT_PLUS_0; index<=COL_MENUCONTENT_PLUS_3; index++) { rd[index]=rd[cindex]+25; gn[index]=gn[cindex]+25; bl[index]=bl[cindex]+25; tr[index]=tr[cindex]; cindex=index; } sprintf(trstr,"infobar_alpha"); if((tv=Read_Neutrino_Cfg(trstr))>=0) tr[COL_SHADOW_PLUS_0]=255-(float)tv*2.55; sprintf(trstr,"infobar_blue"); if((tv=Read_Neutrino_Cfg(trstr))>=0) bl[COL_SHADOW_PLUS_0]=(float)tv*2.55*0.4; sprintf(trstr,"infobar_green"); if((tv=Read_Neutrino_Cfg(trstr))>=0) gn[COL_SHADOW_PLUS_0]=(float)tv*2.55*0.4; sprintf(trstr,"infobar_red"); if((tv=Read_Neutrino_Cfg(trstr))>=0) rd[COL_SHADOW_PLUS_0]=(float)tv*2.55*0.4; for (index = 0; index <= COL_SHADOW_PLUS_0; index++) bgra[index] = (tr[index] << 24) | (rd[index] << 16) | (gn[index] << 8) | bl[index]; InitRC(); //InitVFD(); //init fontlibrary if((error = FT_Init_FreeType(&library))) { printf("%s <FT_Init_FreeType failed with Errorcode 0x%.2X>", __plugin__, error); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_New(library, 1, 2, 0, &MyFaceRequester, NULL, &manager))) { printf("%s <FTC_Manager_New failed with Errorcode 0x%.2X>\n", __plugin__, error); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_SBitCache_New(manager, &cache))) { printf("%s <FTC_SBitCache_New failed with Errorcode 0x%.2X>\n", __plugin__, error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } memset(&menu,0,sizeof(MENU)); if(Check_Config()) { printf("%s <Check_Config> Unable to read Config %s\n", __plugin__, CFG_FILE); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); Clear_List(&menu,-1); free(line_buffer); return -1; } if((error = FTC_Manager_LookupFace(manager, FONT, &face))) { printf("%s <FTC_Manager_LookupFace failed with Errorcode 0x%.2X, trying default font>\n", __plugin__, error); if((error = FTC_Manager_LookupFace(manager, FONT2, &face))) { printf("%s <FTC_Manager_LookupFace failed with Errorcode 0x%.2X>\n", __plugin__, error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return 2; } else desc.face_id = FONT2; } else desc.face_id = FONT; printf("%s <FTC_Manager_LookupFace Font \"%s\" loaded>\n", __plugin__, desc.face_id); use_kerning = FT_HAS_KERNING(face); desc.flags = FT_LOAD_RENDER | FT_LOAD_FORCE_AUTOHINT; //init backbuffer #if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) lbb = lfb + 1920 * 1080; fix_screeninfo.line_length = DEFAULT_XRES * sizeof(uint32_t); stride = DEFAULT_XRES; #else stride = fix_screeninfo.line_length/sizeof(uint32_t); if(stride == 7680 && var_screeninfo.xres == 1280) { var_screeninfo.yres = 1080; } if(!(lbb = malloc(var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)))) { printf("%s <allocating of Backbuffer failed>\n", __plugin__); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } #endif //lbb=lfb; #if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) FillRect(0, 0, DEFAULT_XRES, DEFAULT_YRES, 0); blit(); #else memset(lbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); //blit(); #endif startx = sx; starty = sy; /* scale to resolution */ FSIZE_BIG = scale2res(FSIZE_BIG); FSIZE_MED = scale2res(FSIZE_MED); FSIZE_SMALL = scale2res(FSIZE_SMALL); TABULATOR = scale2res(TABULATOR); OFFSET_MED = scale2res(OFFSET_MED); OFFSET_SMALL = scale2res(OFFSET_SMALL); OFFSET_MIN = scale2res(OFFSET_MIN); /* Set up signal handlers. */ signal(SIGINT, quit_signal); signal(SIGTERM, quit_signal); signal(SIGQUIT, quit_signal); signal(SIGSEGV, quit_signal); index=0; if(vfd) { sprintf(tstr,"%s -c", VFD); system(tstr); } ShowInfo(&menu, 1); //main loop menu.act_entry=0; if(Get_Menu(1)) { printf("%s <unable to create menu>\n", __plugin__); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } cindex=0; put_instance(instance=get_instance()+1); while(mainloop) { cindex=Get_Selection(&menu); dloop=1; switch(cindex) { case -1: mainloop=0; break; case 0: mainloop=Menu_Up(&menu); break; case 1: pl=menu.list[menu.act_entry]; switch (pl->type) { case TYP_MENU: menu.act_header=pl->headerpos; menu.lastheaderentrys[menu.act_header]=menu.act_entry; menu.headerwait[menu.act_header]=pl->message!=NULL; if(menu.headerwait[menu.act_header]) { strcpy(tstr,pl->entry); if((rptr=strxchr(tstr,','))!=NULL) { *rptr=0; } ShowMessage(tstr, pl->message, 0); } Get_Menu(0); menu.act_entry=0; break; case TYP_EXECUTE: if((rptr=strxchr(pl->entry,','))!=NULL) { strcpy(tstr,pl->entry); rptr=strxchr(tstr,','); *rptr=0; rptr=strxchr(pl->entry,','); rptr++; if(pl->stay) { if(pl->stay==1) { if(pl->message) { if(strlen(pl->message)) { ShowMessage(tstr, pl->message, 0); } } else { ShowMessage(tstr, "Bitte warten", 0); } } else { #if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) FillRect(0, 0, DEFAULT_XRES, DEFAULT_YRES, 0); blit(); #else memset(lbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); //blit(); #endif } if(*(rptr+strlen(rptr)-1)=='&') { *(rptr+strlen(rptr)-1)=0; } } else { if(*(rptr+strlen(rptr)-1)!='&') { sprintf(tstr,"%s &",rptr); rptr=tstr; } } CloseRC(); system(rptr); InitRC(); mainloop= pl->stay==1; if(pl->stay==1) { Get_Menu(1); } } break; } } } //cleanup Clear_List(&menu,-1); FTC_Manager_Done(manager); FT_Done_FreeType(library); #if 0 if(strlen(url)) { sprintf(line_buffer,"/sbin/rdate -s %s > /dev/null &",url); system(line_buffer); } #endif CloseRC(); //CloseVFD(); free(line_buffer); free(trstr); // clear Display #if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) FillRect(0, 0, DEFAULT_XRES, DEFAULT_YRES, 0); blit(); #else memset(lbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); //blit(); #endif munmap(lfb, fix_screeninfo.smem_len); close(fb); #if !defined(MARTII) && !defined(HAVE_SPARK_HARDWARE) && !defined(HAVE_DUCKBOX_HARDWARE) free(lbb); #endif put_instance(get_instance()-1); return 0; }
int main (int argc, char **argv) { int ix,tv,found=0, spr, resolution; int dloop=1, rcc=-1; char rstr[BUFSIZE]={0}, *rptr=NULL, *aptr=NULL; time_t tm1,tm2; #ifndef MARTII FILE *fh; #endif if(argc<2) { ShowUsage(); return 0; } //init framebuffer before 1st scale2res fb = open(FB_DEVICE, O_RDWR); #if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE if (fb < 0) fb = open(FB_DEVICE_FALLBACK, O_RDWR); #endif if(fb == -1) { perror(__plugin__ " <open framebuffer device>"); exit(1); } if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) { perror(__plugin__ " <FBIOGET_FSCREENINFO>\n"); return -1; } if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) { perror(__plugin__ " <FBIOGET_VSCREENINFO>\n"); return -1; } #if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) var_screeninfo.xres = DEFAULT_XRES; var_screeninfo.yres = DEFAULT_YRES; #endif if(!(lfb = (uint32_t*)mmap(0, fix_screeninfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0))) { perror(__plugin__ " <mapping of Framebuffer>\n"); return -1; } dloop=0; for(tv=1; !dloop && tv<argc; tv++) { aptr=argv[tv]; if(!strcmp(aptr,"-v") || !strcmp(aptr,"--version")) { printf("%s Version %.2f\n", __plugin__, M_VERSION); return 0; } if((rptr=strchr(aptr,'='))!=NULL) { rptr++; if(strstr(aptr,"size=")!=NULL) { if(sscanf(rptr,"%d",&FSIZE_MED)!=1) { dloop=1; } } else { if(strstr(aptr,"title=")!=NULL) { size_t l = strlen(rptr); char *t = (char *)alloca(l * 4 + 1); memcpy(t, rptr, l + 1); TranslateString(t, l * 4); title = strdup(t); CatchTabs(title); if(strcmp(title,"none")==0) { header=0; } } else { if(strstr(aptr,"timeout=")!=NULL) { if(sscanf(rptr,"%d",&timeout)!=1) { dloop=1; } } else { if(strstr(aptr,"msg=")!=NULL) { dloop=Transform_Msg(rptr); if(timeout==0) { if((timeout=Read_Neutrino_Cfg("timing.epg"))<0) timeout=300; } type=1; } else { if(strstr(aptr,"popup=")!=NULL) { dloop=Transform_Msg(rptr); if(timeout==0) { if((timeout=Read_Neutrino_Cfg("timing.infobar"))<0) timeout=6; } type=2; } else { if(strstr(aptr,"refresh=")!=NULL) { if(sscanf(rptr,"%d",&refresh)!=1) { dloop=1; } } else { if(strstr(aptr,"select=")!=NULL) { dloop=GetSelection(rptr); } else { if(strstr(aptr,"default=")!=NULL) { if((sscanf(rptr,"%d",&selection)!=1) || selection<1) { dloop=1; } } else { if(strstr(aptr,"order=")!=NULL) { if(sscanf(rptr,"%d",&bpline)!=1) { dloop=1; } } else { if(strstr(aptr,"echo=")!=NULL) { if(sscanf(rptr,"%d",&echo)!=1) { dloop=1; } } else { if(strstr(aptr,"absolute=")!=NULL) { if(sscanf(rptr,"%d",&absolute)!=1) { dloop=1; } } else { if(strstr(aptr,"hide=")!=NULL) { if(sscanf(rptr,"%d",&mute)!=1) { dloop=1; } } else { if(strstr(aptr,"cyclic=")!=NULL) { if(sscanf(rptr,"%d",&cyclic)!=1) { dloop=1; } } else { if(strstr(aptr,"icon=")!=NULL) { icon=rptr; dloop=Transform_Icon(icon)==0; } else { dloop=2; } } } } } } } } } } } } } } } switch (dloop) { case 1: printf("%s <param error: %s>\n", __plugin__, aptr); return 0; break; case 2: printf("%s <unknown command: %s>\n\n", __plugin__, aptr); ShowUsage(); return 0; break; } } FSIZE_BIG=(float)FSIZE_MED*1.25; FSIZE_SMALL=(FSIZE_MED*4)/5; TABULATOR=2*FSIZE_MED; size=FSIZE_MED; /* if(!echo) { printf("\nMsgBox Version %.2f\n", M_VERSION); } */ if(!buttons) { butmsg[0]=strdup("OK"); buttons=1; } if(!absolute) { for(tv=0; tv<buttons; tv++) { rbutt[tv]=tv+1; } } if(selection) { for(tv=0; tv<buttons && !found; tv++) { if(rbutt[tv]==selection) { selection=tv+1; found=1; } } if(!found) { printf("%s <param error: default=%d>\n", __plugin__, selection); return 0; } } else { for(tv=0; tv<buttons && !selection; tv++) { if(strlen(butmsg[tv])) { selection=tv+1; } } } if(!icon) { icon=strdup("info"); } if(!title) { title=strdup("Information"); } if((line_buffer=calloc(BUFSIZE+1, sizeof(char)))==NULL) { printf(NOMEM); return -1; } spr=Read_Neutrino_Cfg("screen_preset")+1; resolution=Read_Neutrino_Cfg("osd_resolution"); if (resolution == -1) sprintf(line_buffer,"screen_StartX_%s", spres[spr]); else sprintf(line_buffer,"screen_StartX_%s_%d", spres[spr], resolution); if((sx=Read_Neutrino_Cfg(line_buffer))<0) sx=scale2res(100); if (resolution == -1) sprintf(line_buffer,"screen_EndX_%s", spres[spr]); else sprintf(line_buffer,"screen_EndX_%s_%d", spres[spr], resolution); if((ex=Read_Neutrino_Cfg(line_buffer))<0) ex=scale2res(1180); if (resolution == -1) sprintf(line_buffer,"screen_StartY_%s", spres[spr]); else sprintf(line_buffer,"screen_StartY_%s_%d", spres[spr], resolution); if((sy=Read_Neutrino_Cfg(line_buffer))<0) sy=scale2res(100); if (resolution == -1) sprintf(line_buffer,"screen_EndY_%s", spres[spr]); else sprintf(line_buffer,"screen_EndY_%s_%d", spres[spr], resolution); if((ey=Read_Neutrino_Cfg(line_buffer))<0) ey=scale2res(620); for(ix=CMCST; ix<=CMH; ix++) { sprintf(rstr,"menu_%s_alpha",menucoltxt[ix]); if((tv=Read_Neutrino_Cfg(rstr))>=0) tr[ix]=255-(float)tv*2.55; sprintf(rstr,"menu_%s_blue",menucoltxt[ix]); if((tv=Read_Neutrino_Cfg(rstr))>=0) bl[ix]=(float)tv*2.55; sprintf(rstr,"menu_%s_green",menucoltxt[ix]); if((tv=Read_Neutrino_Cfg(rstr))>=0) gn[ix]=(float)tv*2.55; sprintf(rstr,"menu_%s_red",menucoltxt[ix]); if((tv=Read_Neutrino_Cfg(rstr))>=0) rd[ix]=(float)tv*2.55; } int cix=CMC; for(ix=COL_MENUCONTENT_PLUS_0; ix<=COL_MENUCONTENT_PLUS_3; ix++) { rd[ix]=rd[cix]+25; gn[ix]=gn[cix]+25; bl[ix]=bl[cix]+25; tr[ix]=tr[cix]; cix=ix; } sprintf(rstr,"infobar_alpha"); if((tv=Read_Neutrino_Cfg(rstr))>=0) tr[COL_SHADOW_PLUS_0]=255-(float)tv*2.55; sprintf(rstr,"infobar_blue"); if((tv=Read_Neutrino_Cfg(rstr))>=0) bl[COL_SHADOW_PLUS_0]=(float)tv*2.55*0.4; sprintf(rstr,"infobar_green"); if((tv=Read_Neutrino_Cfg(rstr))>=0) gn[COL_SHADOW_PLUS_0]=(float)tv*2.55*0.4; sprintf(rstr,"infobar_red"); if((tv=Read_Neutrino_Cfg(rstr))>=0) rd[COL_SHADOW_PLUS_0]=(float)tv*2.55*0.4; for (ix = 0; ix <= COL_SHADOW_PLUS_0; ix++) bgra[ix] = (tr[ix] << 24) | (rd[ix] << 16) | (gn[ix] << 8) | bl[ix]; if(Read_Neutrino_Cfg("rounded_corners")>0) { radius = scale2res(11); radius_small = scale2res(5); } else radius = radius_small = 0; InitRC(); if((trstr=malloc(BUFSIZE))==NULL) { printf(NOMEM); return -1; } //init fontlibrary if((error = FT_Init_FreeType(&library))) { printf("%s <FT_Init_FreeType failed with Errorcode 0x%.2X>", __plugin__, error); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_New(library, 1, 2, 0, &MyFaceRequester, NULL, &manager))) { printf("%s <FTC_Manager_New failed with Errorcode 0x%.2X>\n", __plugin__, error); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_SBitCache_New(manager, &cache))) { printf("%s <FTC_SBitCache_New failed with Errorcode 0x%.2X>\n", __plugin__, error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } Read_Neutrino_Cfg("font_file="); if((error = FTC_Manager_LookupFace(manager, FONT, &face))) { if((error = FTC_Manager_LookupFace(manager, FONT2, &face))) { printf("%s <FTC_Manager_LookupFace failed with Errorcode 0x%.2X>\n", __plugin__, error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return 2; } else desc.face_id = FONT2; } else desc.face_id = FONT; use_kerning = FT_HAS_KERNING(face); desc.flags = FT_LOAD_RENDER | FT_LOAD_FORCE_AUTOHINT; //init backbuffer #if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE lbb = lfb + 1920 * 1080; fix_screeninfo.line_length = DEFAULT_XRES * sizeof(uint32_t); stride = DEFAULT_XRES; #else stride = fix_screeninfo.line_length/sizeof(uint32_t); if(stride == 7680 && var_screeninfo.xres == 1280) { var_screeninfo.yres = 1080; } if(!(lbb = malloc(var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)))) { perror(__plugin__ " <allocating of Backbuffer>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } #endif if(!(obb = malloc(var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)))) { perror(__plugin__ " <allocating of Backbuffer>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); free(lbb); munmap(lfb, fix_screeninfo.smem_len); return -1; } if(!(hbb = malloc(var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)))) { perror(__plugin__ " <allocating of Backbuffer>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); free(lbb); free(obb); munmap(lfb, fix_screeninfo.smem_len); return -1; } if(!(ibb = malloc(var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)))) { perror(__plugin__ " <allocating of Backbuffer>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); free(lbb); free(obb); free(hbb); munmap(lfb, fix_screeninfo.smem_len); return -1; } if(refresh & 1) { memcpy(ibb, lbb, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); } else { memset(ibb, TRANSP, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); } if(mute==2) { memcpy(hbb, lbb, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); } else { memset(hbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); } if(refresh & 2) { memcpy(obb, lbb, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); } else { memset(obb, TRANSP, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); } startx = sx; starty = sy; /* scale to resolution */ FSIZE_BIG = scale2res(FSIZE_BIG); FSIZE_MED = scale2res(FSIZE_MED); FSIZE_SMALL = scale2res(FSIZE_SMALL); TABULATOR = scale2res(TABULATOR); OFFSET_MED = scale2res(OFFSET_MED); OFFSET_SMALL = scale2res(OFFSET_SMALL); OFFSET_MIN = scale2res(OFFSET_MIN); size = scale2res(size); /* Set up signal handlers. */ signal(SIGINT, quit_signal); signal(SIGTERM, quit_signal); signal(SIGQUIT, quit_signal); signal(SIGSEGV, quit_signal); put_instance(instance=get_instance()+1); show_txt(0); time(&tm1); tm2=tm1; //main loop while((rcc!=KEY_EXIT) && (rcc!=KEY_HOME) && (rcc!=KEY_OK) && ((timeout==-1)||((tm2-tm1)<timeout))) { rcc=GetRCCode(1000); if(rcc!=-1) { time(&tm1); } else { if(cyclic) show_txt(0); #if 0 if(++cupd>100) { if(cyclic) { show_txt(0); cupd=0; } } usleep(10000L); #endif } if(mute && rcc==KEY_MUTE) { hide^=1; show_txt(0); #if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE ClearRC(); #else while(GetRCCode(300)!=-1); if(hide) { if((fh=fopen(HDF_FILE,"w"))!=NULL) { fprintf(fh,"hidden"); fclose(fh); } } else { remove(HDF_FILE); } #endif } if((!hide) && (rcc!=KEY_EXIT) && (rcc!=KEY_HOME) && (rcc!=KEY_OK)) { switch(rcc) { case KEY_LEFT: if(!hide && (--selection<1)) { selection=buttons; } show_txt(1); break; case KEY_RIGHT: if(!hide && (++selection>buttons)) { selection=1; } show_txt(1); break; case KEY_UP: if(!hide && ((selection-=bpline)<1)) { selection=1; } show_txt(1); break; case KEY_DOWN: if(!hide && ((selection+=bpline)>buttons)) { selection=buttons; } show_txt(1); break; default: flash^=1; break; } } time(&tm2); if(hide) { rcc=-1; } } if((type!=1) || (rcc!=KEY_OK)) { selection=0; } //cleanup #if HAVE_SPARK_HARDWARE || HAVE_DUCKBOX_HARDWARE memcpy(lbb, obb, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); blit(); #else memcpy(lfb, obb, var_screeninfo.xres*var_screeninfo.yres*sizeof(uint32_t)); #endif munmap(lfb, fix_screeninfo.smem_len); close(fb); #if !defined(HAVE_SPARK_HARDWARE) && !defined(HAVE_DUCKBOX_HARDWARE) free(lbb); #endif put_instance(get_instance()-1); if(echo && selection>0) { printf("%s\n",butmsg[selection-1]); } for(tv=0; tv<buttons; tv++) { free(butmsg[tv]); } free(trstr); free(line_buffer); free(title); FTC_Manager_Done(manager); FT_Done_FreeType(library); free(obb); free(hbb); free(ibb); CloseRC(); remove("/tmp/msgbox.tmp"); if(selection) { return rbutt[selection-1]; } return 0; }
int main (int argc, char **argv) { int tv,index,i,j,k,w,cmct=CMCT,cmc=CMC,trnspi=TRANSP,trnsp=0,found,loop=1,x0,x1,x2,x3,x4,x5,x6,x7,ms,mw,newmail=0; time_t atim; struct tm *ltim; char *aptr,*rptr; char dstr[2]={0,0}; FILE *tfh; printf("Clock Version %s\n",CL_VERSION); ReadConf(); for(i=1; i<argc; i++) { aptr=argv[i]; if((rptr=strchr(aptr,'='))!=NULL) { rptr++; if(strstr(aptr,"X=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { xpos=j; } } if(strstr(aptr,"Y=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { ypos=j; } } if(strstr(aptr,"DATE=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { sdat=j; } } if(strstr(aptr,"BIG=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { big=j; } } if(strstr(aptr,"SEC=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { secs=j; } } if(strstr(aptr,"FCOL=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { fcol=j; } } if(strstr(aptr,"BCOL=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { bcol=j; } } if(strstr(aptr,"MAIL=")!=NULL) { if(sscanf(rptr,"%d",&j)==1) { mail=j; } } } } if((sx=Read_Neutrino_Cfg("screen_StartX"))<0) sx=80; if((ex=Read_Neutrino_Cfg("screen_EndX"))<0) ex=620; if((sy=Read_Neutrino_Cfg("screen_StartY"))<0) sy=80; if((ey=Read_Neutrino_Cfg("screen_EndY"))<0) ey=505; for(index=CMCST; index<=CMH; index++) { sprintf(tstr,"menu_%s_alpha",menucoltxt[index-1]); if((tv=Read_Neutrino_Cfg(tstr))>=0) tr[index-1]=(tv<<8); sprintf(tstr,"menu_%s_blue",menucoltxt[index-1]); if((tv=Read_Neutrino_Cfg(tstr))>=0) bl[index-1]=(tv+(tv<<8)); sprintf(tstr,"menu_%s_green",menucoltxt[index-1]); if((tv=Read_Neutrino_Cfg(tstr))>=0) gn[index-1]=(tv+(tv<<8)); sprintf(tstr,"menu_%s_red",menucoltxt[index-1]); if((tv=Read_Neutrino_Cfg(tstr))>=0) rd[index-1]=(tv+(tv<<8)); } fb = open(FB_DEVICE, O_RDWR); if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) { printf("Clock <FBIOGET_FSCREENINFO failed>\n"); return -1; } if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) { printf("Clock <FBIOGET_VSCREENINFO failed>\n"); return -1; } if(ioctl(fb, FBIOGETCMAP, &colormap) == -1) { printf("Clock <FBIOGETCMAP failed>\n"); return -1; } if(!(lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0))) { printf("Clock <mapping of Framebuffer failed>\n"); return -1; } //init fontlibrary if((error = FT_Init_FreeType(&library))) { printf("Clock <FT_Init_FreeType failed with Errorcode 0x%.2X>", error); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_New(library, 1, 2, 0, &MyFaceRequester, NULL, &manager))) { printf("Clock <FTC_Manager_New failed with Errorcode 0x%.2X>\n", error); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_SBitCache_New(manager, &cache))) { printf("Clock <FTC_SBitCache_New failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_Lookup_Face(manager, FONT, &face))) { printf("Clock <FTC_Manager_Lookup_Face failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } use_kerning = FT_HAS_KERNING(face); #ifdef FT_NEW_CACHE_API desc.face_id = FONT; #else desc.font.face_id = FONT; #endif #if FREETYPE_MAJOR == 2 && FREETYPE_MINOR == 0 desc.image_type = ftc_image_mono; #else desc.flags = FT_LOAD_MONOCHROME; #endif //init backbuffer if(!(lbb = malloc(var_screeninfo.xres*var_screeninfo.yres))) { printf("Clock <allocating of Backbuffer failed>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } memset(lbb, 0, var_screeninfo.xres*var_screeninfo.yres); startx = sx; starty = sy; mw=(big)?40:30; while(loop) { usleep(150000L); newmail=0; if(mail && ExistFile(MAIL_FILE)) { if((tfh=fopen(MAIL_FILE,"r"))!=NULL) { if(fgets(tstr,511,tfh)) { if(sscanf(tstr,"%d",&i)) { newmail=i; } } fclose(tfh); } } ioctl(fb, FBIOGETCMAP, &colormap); found=0; trnsp=0; for(i=colormap.start;i<colormap.len && found!=7;i++) { if(!colormap.red[i] && !colormap.green[i] && !colormap.blue[i] && !colormap.transp[i]) { cmc=i; found|=1; } if(colormap.red[i]>=0xF000 && colormap.green[i]>=0xF000 && colormap.blue[i]>=0xF000 && !colormap.transp[i]) { cmct=i; found|=2; } if(colormap.transp[i]>trnsp) { trnspi=i; trnsp=colormap.transp[i]; found|=4; } } if(big) { x0=3; x1=14; x2=26; x3=BIG; x4=30; x5=60; } else { x0=7; x1=12; x2=18; x3=MED; x4=18; x5=40; } x6=0; x7=0; time(&atim); ltim=localtime(&atim); if(secs) { sprintf(tstr,"%02d:%02d:%02d",ltim->tm_hour,ltim->tm_min,ltim->tm_sec); } else { sprintf(tstr," %02d%c%02d",ltim->tm_hour,(ltim->tm_sec & 1)?':':' ',ltim->tm_min); if(!sdat) { x6=3; x7=36+4*big; } } if((xpos>=mw)||(!secs)) { ms=xpos+((secs)?0:36+4*big)-mw; } else { ms=xpos+100+20*big; } k=((ms>xpos)&&mail)?mw:0; RenderBox(xpos+x7, ypos, xpos+x7+100+20*big, ypos+x2+2*(1+big), FILL, (bcol==0)?trnspi:((bcol==1)?cmc:cmct)); for(i=x6; i<strlen(tstr); i++) { *dstr=tstr[i]; RenderString(dstr, xpos-x0+(i*x1), ypos+x2, 30, CENTER, x3, (fcol==0)?trnspi:((fcol==2)?cmct:cmc)); } if(sdat) { sprintf(tstr,"%02d.%02d.%02d",ltim->tm_mday,ltim->tm_mon+1,ltim->tm_year-100); RenderBox(xpos, ypos+x4, xpos+100+20*big, ypos+x5, FILL, (bcol==0)?trnspi:((bcol==1)?cmc:cmct)); for(i=0; i<strlen(tstr); i++) { *dstr=tstr[i]; RenderString(dstr, xpos-x0+(i*x1), ypos+x5-2-2*big, 30, CENTER, x3, (fcol==0)?trnspi:((fcol==2)?cmct:cmc)); } } if(mail) { if(newmail) { RenderBox(ms, ypos, ms+mw, ypos+x2+2*(1+big), FILL, (bcol==0)?trnspi:((bcol==1)?cmc:cmct)); if(!(ltim->tm_sec & 1)) { RenderBox(ms+5, ypos+5+(1+big), ms+mw-5, ypos+x2+(1+big)-2, GRID, (fcol==0)?trnspi:((fcol==1)?cmc:cmct)); DrawLine(ms+5, ypos+5+(1+big), ms+mw-5, ypos+x2+(1+big)-2, (fcol==0)?trnspi:((fcol==1)?cmc:cmct)); DrawLine(ms+5, ypos+x2+(1+big)-2, ms+mw-5, ypos+5+(1+big), (fcol==0)?trnspi:((fcol==1)?cmc:cmct)); DrawLine(ms+5, ypos+5+(1+big), ms+((mw-2)/2), ypos+2, (fcol==0)?trnspi:((fcol==1)?cmc:cmct)); DrawLine(ms+6, ypos+6+(1+big), ms+((mw-2)/2)+1, ypos+3, (fcol==0)?trnspi:((fcol==1)?cmc:cmct)); DrawLine(ms+((mw-2)/2), ypos+2, ms+mw-5, ypos+5+(1+big), (fcol==0)?trnspi:((fcol==1)?cmc:cmct)); DrawLine(ms+((mw-2)/2)+1, ypos+3, ms+mw-6, ypos+6+(1+big), (fcol==0)?trnspi:((fcol==1)?cmc:cmct)); } else { sprintf(tstr,"%d",newmail); RenderString(tstr, ms, ypos+x2, mw, CENTER, x3, (fcol==0)?trnspi:((fcol==2)?cmct:cmc)); } } else { if(!sdat || secs) { RenderBox(ms+((ms>(xpos+100))?1:0), ypos, ms+mw-((k)?0:1), ypos+x2+2*(1+big), FILL, trnspi); } } } else { ms=xpos; } w=100+20*big+((mail)?5*big+((secs)?mw:0):0)+k-((k&&!sdat)?mw:0); for(i=0;i<=((sdat)?40:20)*(1+big);i++) { j=(starty+ypos+i)*var_screeninfo.xres+((ms<xpos)?ms:xpos)+startx; if((j+w)<var_screeninfo.xres*var_screeninfo.yres) { memcpy(lfb+j, lbb+j, w); } } if(++loop>5) { if(ExistFile("/tmp/.clock_kill")) { loop=0; } } } cmct=0; cmc=0; for(i=colormap.start;i<colormap.len;i++) { if(colormap.transp[i]>cmct) { cmc=i; cmct=colormap.transp[i]; } } memset(lbb, cmc, var_screeninfo.xres*var_screeninfo.yres); for(i=0;i<=((sdat)?40:20)*(1+big);i++) { j=(starty+ypos+i)*var_screeninfo.xres+((ms<xpos)?ms:xpos)+startx; if((j+100+20*big+((mail)?mw:0))<var_screeninfo.xres*var_screeninfo.yres) { memcpy(lfb+j, lbb+j, w); } } FTC_Manager_Done(manager); FT_Done_FreeType(library); free(lbb); munmap(lfb, fix_screeninfo.smem_len); close(fb); remove("/tmp/.clock_kill"); return 0; }
int main (int argc, char **argv) { int tv,cols=25,debounce=25,tmo=0; char ttl[]="Input"; int dloop=1,keys=0,frame=1,mask=0,bhelp=0; char *title=NULL, *format=NULL, *defstr=NULL, *aptr, *rptr; unsigned int alpha; if(argc==1) { ShowUsage(); return 0; } dloop=0; for(tv=1; !dloop && tv<argc; tv++) { aptr=argv[tv]; if((rptr=strchr(aptr,'='))!=NULL) { rptr++; if(strstr(aptr,"l=")!=NULL) { format=rptr; dloop=Transform_Msg(format)==0; } else { if(strstr(aptr,"t=")!=NULL) { title=rptr; dloop=Transform_Msg(title)==0; } else { if(strstr(aptr,"d=")!=NULL) { defstr=rptr; dloop=Transform_Msg(defstr)==0; } else { if(strstr(aptr,"m=")!=NULL) { if(sscanf(rptr,"%d",&mask)!=1) { dloop=1; } } else { if(strstr(aptr,"f=")!=NULL) { if(sscanf(rptr,"%d",&frame)!=1) { dloop=1; } } else { if(strstr(aptr,"k=")!=NULL) { if(sscanf(rptr,"%d",&keys)!=1) { dloop=1; } } else { if(strstr(aptr,"h=")!=NULL) { if(sscanf(rptr,"%d",&bhelp)!=1) { dloop=1; } } else { if(strstr(aptr,"c=")!=NULL) { if(sscanf(rptr,"%d",&cols)!=1) { dloop=1; } } else { if(strstr(aptr,"o=")!=NULL) { if(sscanf(rptr,"%d",&tmo)!=1) { dloop=1; } } else { dloop=2; } } } } } } } } } } switch (dloop) { case 1: printf("input <param error: %s>\n",aptr); return 0; break; case 2: printf("input <unknown command: %s>\n\n",aptr); ShowUsage(); return 0; break; } } if(!format) { printf("input <missing format string>\n"); return 0; } if(!title) { title=ttl; } if((buffer=calloc(BUFSIZE+1, sizeof(char)))==NULL) { printf(NOMEM); return 0; } if(((sx=Read_Neutrino_Cfg("screen_StartX"))<0)&&((sx=Read_Neutrino_Cfg("/enigma/plugins/needoffsets/left"))<0)) sx=80; if(((ex=Read_Neutrino_Cfg("screen_EndX"))<0)&&((ex=Read_Neutrino_Cfg("/enigma/plugins/needoffsets/right"))<0)) ex=620; if(((sy=Read_Neutrino_Cfg("screen_StartY"))<0)&&((sy=Read_Neutrino_Cfg("/enigma/plugins/needoffsets/top"))<0)) sy=80; if(((ey=Read_Neutrino_Cfg("screen_EndY"))<0)&&((ey=Read_Neutrino_Cfg("/enigma/plugins/needoffsets/bottom"))<0)) ey=505; if(Read_Neutrino_Cfg("rounded_corners")>0) radius=9; else radius=0; fb = open(FB_DEVICE, O_RDWR); #ifdef HAVE_DBOX_HARDWARE ioctl(fb, AVIA_GT_GV_GET_BLEV, &alpha); #endif InitRC(); //init framebuffer if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) { printf("input <FBIOGET_FSCREENINFO failed>\n"); return 0; } if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) { printf("input <FBIOGET_VSCREENINFO failed>\n"); return 0; } if(!(lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0))) { printf("input <mapping of Framebuffer failed>\n"); return 0; } //init fontlibrary if((error = FT_Init_FreeType(&library))) { printf("input <FT_Init_FreeType failed with Errorcode 0x%.2X>", error); munmap(lfb, fix_screeninfo.smem_len); return 0; } if((error = FTC_Manager_New(library, 1, 2, 0, &MyFaceRequester, NULL, &manager))) { printf("input <FTC_Manager_New failed with Errorcode 0x%.2X>\n", error); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return 0; } if((error = FTC_SBitCache_New(manager, &cache))) { printf("input <FTC_SBitCache_New failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return 0; } if((error = FTC_Manager_Lookup_Face(manager, FONT, &face))) { printf("input <FTC_Manager_Lookup_Face failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return 0; } use_kerning = FT_HAS_KERNING(face); #ifdef FT_NEW_CACHE_API desc.face_id = (char*)FONT; #else desc.font.face_id = FONT; #endif #if FREETYPE_MAJOR == 2 && FREETYPE_MINOR == 0 desc.image_type = ftc_image_mono; #else desc.flags = FT_LOAD_MONOCHROME; #endif //init backbuffer if(!(lbb = malloc(var_screeninfo.xres*var_screeninfo.yres))) { printf("input <allocating of Backbuffer failed>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return 0; } if(!(obb = malloc(var_screeninfo.xres*var_screeninfo.yres))) { printf("input <allocating of Backbuffer failed>\n"); FTC_Manager_Done(manager); FT_Done_FreeType(library); free(lbb); munmap(lfb, fix_screeninfo.smem_len); return 0; } memcpy(lbb, lfb, var_screeninfo.xres*var_screeninfo.yres); memcpy(obb, lfb, var_screeninfo.xres*var_screeninfo.yres); startx = sx /*+ (((ex-sx) - 620)/2)*/; starty = sy /* + (((ey-sy) - 505)/2)*/; signal(SIGINT, quit_signal); signal(SIGTERM, quit_signal); signal(SIGQUIT, quit_signal); //main loop put_instance(instance=get_instance()+1); printf("%s\n",inputd(format, title, defstr, keys, frame, mask, bhelp, cols, tmo, debounce)); put_instance(get_instance()-1); memcpy(lfb, obb, var_screeninfo.xres*var_screeninfo.yres); free(buffer); FTC_Manager_Done(manager); FT_Done_FreeType(library); free(lbb); free(obb); #ifdef HAVE_DBOX_HARDWARE ioctl(fb, AVIA_GT_GV_SET_BLEV, alpha); #endif munmap(lfb, fix_screeninfo.smem_len); close(fb); CloseRC(); return 1; }
int main (int argc, char **argv) { int i,j,m,cmc=BLACK,transp=TRANSP,found,loop=1,mask=0,test=0,pmode=0,lmode=0,mchanged=1,cchanged=2,mwait; unsigned char lastchan[20]="", actchan[20]=""/*,channel[128]=""*/; int xp[MAX_MASK][8],yp[MAX_MASK][8],xw[MAX_MASK][8],yw[MAX_MASK][8],valid[MAX_MASK],xxp,xxw,yyp,yyw,nmsk=0; FILE *fh; char *cpt1,*cpt2,mc[MAX_MASK]; if(argc==2 && strstr(argv[1],"test")!=NULL) { test=1; } printf("logomask Version %s\n",CL_VERSION); if((mwait=Read_Neutrino_Cfg("timing.infobar"))<0) mwait=6; mwait-=1; fb = open(FB_DEVICE, O_RDWR); if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) { printf("logomask <FBIOGET_FSCREENINFO failed>\n"); return -1; } if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) { printf("logomask <FBIOGET_VSCREENINFO failed>\n"); return -1; } if(!(lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0))) { printf("logomask <mapping of Framebuffer failed>\n"); return -1; } //init backbuffer if(!(lbb = malloc(var_screeninfo.xres*var_screeninfo.yres))) { printf("logomask <allocating of Backbuffer failed>\n"); munmap(lfb, fix_screeninfo.smem_len); return -1; } memset(lbb, 0, var_screeninfo.xres*var_screeninfo.yres); // memset(mc, BLACK, sizeof(mc)); startx = sx; starty = sy; // if problem with config file return from plugin while(loop) { sleep(1); system("saa -w > /tmp/logomaskset.stat"); if((fh=fopen("/tmp/logomaskset.stat","r"))!=NULL) { if(fgets(tstr,500,fh)) { TrimString(tstr); if(strlen(tstr)) { lmode=pmode; if(sscanf(tstr+strlen(tstr)-1,"%d",&i)!=1) { pmode=0; } else { mchanged=(pmode!=i); pmode=i; } } } fclose(fh); } system("wget -q -Y off -O /tmp/logomask.chan http://localhost/control/zapto"); if((fh=fopen("/tmp/logomask.chan","r"))!=NULL) { if(fgets(tstr, 4095, fh)) { TrimString(tstr); } fclose(fh); if(strlen(tstr)) { strcpy(actchan,tstr); cchanged=(cchanged==2)?3:((strcmp(actchan,lastchan)?1:0)); if(mchanged || cchanged) { found=0; if(cchanged) { if(cchanged==1) { sleep(mwait); } cchanged=1; } if(mask) { for(m=0; m<nmsk; m++) { if(valid[m]) { xxp=xp[m][lmode]; xxw=xw[m][lmode]; yyp=yp[m][lmode]; yyw=yw[m][lmode]; cmc=mc[m]; RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, FILL, transp); for(i=0;i<=yyw;i++) { j=(yyp+i)*var_screeninfo.xres+xxp; if((j+xxw)<var_screeninfo.xres*var_screeninfo.yres) { memcpy(lfb+j, lbb+j, xxw); } } } } } mask=0; if((fh=fopen(CFG_FILE,"r"))!=NULL) { strcpy(lastchan,actchan); found=0; while(fgets(tstr, 4095, fh) && !found) { TrimString(tstr); if(strlen(tstr)) { if(strstr(tstr,actchan)!=NULL) { mask=1; nmsk=0; cpt2=strstr(tstr,",MC"); if((cpt1=strchr(tstr,','))!=NULL) { while(cpt1) { valid[nmsk]=0; if(cpt2 && sscanf(cpt2+1,"MC%d",&m)==1) { cmc=m; cpt2=strchr(cpt2+1,','); } else { cmc=BLACK; } for(i=0; i<8 && cpt1; i++) { cpt1++; if(sscanf(cpt1,"%d,%d,%d,%d",&xxp,&xxw,&yyp,&yyw)==4) { xp[nmsk][i]=xxp; xw[nmsk][i]=xxw; yp[nmsk][i]=yyp; yw[nmsk][i]=yyw; mc[nmsk]=cmc; found=1; valid[nmsk]=1; } for(j=0; j<4 && cpt1; j++) { cpt1=strchr(cpt1+1,','); } } if(valid[nmsk]) { nmsk++; } } } } } } fclose(fh); } } } if(mask) { for(m=0; m<nmsk; m++) { if(valid[m]) { xxp=xp[m][pmode]; xxw=xw[m][pmode]; yyp=yp[m][pmode]; yyw=yw[m][pmode]; cmc=mc[m]; RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, (test)?GRID:FILL, cmc); for(i=0;i<=yyw;i++) { j=(yyp+i)*var_screeninfo.xres+xxp; if((j+xxw)<var_screeninfo.xres*var_screeninfo.yres) { memcpy(lfb+j, lbb+j, xxw); } } } } } if(++loop>5) { if(access("/tmp/.logomask_kill",0)!=-1) { loop=0; } } } } for(m=0; m<nmsk; m++) { if(valid[m]) { xxp=xp[m][pmode]; xxw=xw[m][pmode]; yyp=yp[m][pmode]; yyw=yw[m][pmode]; cmc=mc[m]; RenderBox(xxp, yyp, xxp+xxw, yyp+yyw, FILL, transp); for(i=0;i<=yyw;i++) { j=(yyp+i)*var_screeninfo.xres+xxp; if((j+xxw)<var_screeninfo.xres*var_screeninfo.yres) { memcpy(lfb+j, lbb+j, xxw); } } } } free(lbb); munmap(lfb, fix_screeninfo.smem_len); close(fb); remove("/tmp/.logomask_kill"); remove("/tmp/logomask.*"); return 0; }
/****************************************************************************** * Blockads Main ******************************************************************************/ int main (void) { int loop=0,found,werbung=0,tnet, tv, cnum=-1; char tstr[512],line_buffer[512],zapchan[40],srcchan[40],*cpt1=NULL; FILE *fh1,*fh2; printf("Blockads Version %s\n",P_VERSION); if((fh1=fopen(FLG_FILE,"r"))==NULL) { // system("ping -c 5 google.com &"); fb = open(FB_DEVICE, O_RDWR); rc = open(RC_DEVICE, O_RDONLY); fcntl(rc, F_SETFL, (fcntl(rc, F_GETFL) | O_EXCL) & ~O_NONBLOCK); if((sx=Read_Neutrino_Cfg("screen_StartX"))<0) sx=80; if((ex=Read_Neutrino_Cfg("screen_EndX"))<0) ex=620; if((sy=Read_Neutrino_Cfg("screen_StartY"))<0) sy=80; if((ey=Read_Neutrino_Cfg("screen_EndY"))<0) ey=505; if(Read_Neutrino_Cfg("rounded_corners")>0) radius=9; else radius=0; //init framebuffer if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1) { printf("Blockads <FBIOGET_FSCREENINFO failed>\n"); return -1; } if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1) { printf("Blockads <FBIOGET_VSCREENINFO failed>\n"); return -1; } if(!(lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0))) { printf("Blockads <mapping of Framebuffer failed>\n"); return -1; } //init fontlibrary if((error = FT_Init_FreeType(&library))) { printf("Tuxwetter <FT_Init_FreeType failed with Errorcode 0x%.2X>", error); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_New(library, 1, 2, 0, &MyFaceRequester, NULL, &manager))) { printf("Tuxwetter <FTC_Manager_New failed with Errorcode 0x%.2X>\n", error); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_SBitCache_New(manager, &cache))) { printf("Tuxwetter <FTC_SBitCache_New failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } if((error = FTC_Manager_Lookup_Face(manager, FONT, &face))) { printf("Tuxwetter <FTC_Manager_Lookup_Face failed with Errorcode 0x%.2X>\n", error); FTC_Manager_Done(manager); FT_Done_FreeType(library); munmap(lfb, fix_screeninfo.smem_len); return -1; } use_kerning = FT_HAS_KERNING(face); #ifdef FT_NEW_CACHE_API desc.face_id = FONT; desc.flags = FT_LOAD_MONOCHROME; #else desc.font.face_id = FONT; desc.image_type = ftc_image_mono; #endif //init backbuffer if(!(lbb = malloc(var_screeninfo.xres*var_screeninfo.yres))) { printf("Blockads <allocating of Backbuffer failed>\n"); munmap(lfb, fix_screeninfo.smem_len); return -1; } memset(lbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres); if (!ReadConf()) { printf("Blockads <Configuration failed>\n"); return -1; } found=0; loop=0; if(!HTTP_downloadFile("localhost",80,"/control/channellist", LST_FILE, 0, 1)) { if(!HTTP_downloadFile("localhost",80,"/control/zapto", ZAP_FILE, 0, 1)) { if((fh1=fopen(ZAP_FILE,"r"))!=NULL) { while((fgets(line_buffer, sizeof(line_buffer), fh1)>0) && (strlen(line_buffer)<4)); if(strlen(line_buffer)>1) { Trim_String(line_buffer); strcpy(zapchan,line_buffer); if((fh2=fopen(LST_FILE,"r"))!=NULL) { while(!found && (fgets(line_buffer, sizeof(line_buffer), fh2))) { if(strstr(line_buffer,zapchan)==line_buffer) { if((cpt1=strchr(line_buffer,' '))!=NULL) { cpt1++; Trim_String(cpt1); strcpy(msgchan,cpt1); loop=1; if(!Translate_Channel(cpt1, tstr)) { cnum=Get_ChannelNumber(tstr); strcpy(srcchan,tstr); found=1; } } } } if(!found) { inet=-1; } fclose(fh2); } } fclose(fh1); } } } if(!loop) { sprintf(tstr,"Fehler beim Auslesen der Kanalliste.\nPlugin konnte nicht gestartet werden."); Msg_Popup(tstr); return -1; } if(volume) { volume=0; if(!HTTP_downloadFile("localhost",80,"/control/volume?status", ZAP_FILE, 0, 1)) { if((fh1=fopen(ZAP_FILE,"r"))!=NULL) { while((fgets(line_buffer, sizeof(line_buffer), fh1)>0) && !strlen(line_buffer)); if(strlen(line_buffer)>=1) { Trim_String(line_buffer); sscanf(line_buffer,"%d",&mute); } fclose(fh1); } } if(!HTTP_downloadFile("localhost",80,"/control/volume", ZAP_FILE, 0, 1)) { if((fh1=fopen(ZAP_FILE,"r"))!=NULL) { while((fgets(line_buffer, sizeof(line_buffer), fh1)>0) && !strlen(line_buffer)); if(strlen(line_buffer)>=1) { Trim_String(line_buffer); sscanf(line_buffer,"%d",&volume); } fclose(fh1); } } } if(inet>=0) { tnet=-1; if(Open_Socket()!=-1) { tv=Check_Socket(cnum,&werbung); if(tv>0) { tnet=inet; if(!werbung) { if(!zapalways) { int adf=0; sprintf(tstr,"Für Kanal %s wird\nmomentan keine Werbung gemeldet.\nWerbung läuft im Augenblick auf:\n",msgchan); for(tv=0; tv<NUM_CHANNELS; tv++) { Check_Channel(tv,&found); if(found) { sprintf(tstr+strlen(tstr),"\n%s",Get_ChannelName(tv)); adf=1; } } if(!adf) { sprintf(tstr+strlen(tstr),"\nkeinem anderen Sender"); } Msg_Popup(tstr); loop=0; } else { tnet=-1; } } else { if((fh2=fopen(FLG_FILE,"w"))!=NULL) { int adf=0; fprintf(fh2,"%s\n%d\n%d\n%s\n%d\n%d\n%d\n",zapchan,cnum,rezap*60,msgchan,volume,mute,debounce); fclose(fh2); system("/bin/blockad &"); sprintf(tstr,"Werbezapper fr Kanal %s aktiviert.\nSie können jetzt umschalten.\n\nWerbung läuft im Augenblick auch auf:\n",msgchan); for(tv=0; tv<NUM_CHANNELS; tv++) { Check_Channel(tv,&found); if(found && (tv != cnum)) { sprintf(tstr+strlen(tstr),"\n%s",Get_ChannelName(tv)); adf=1; } } if(!adf) { sprintf(tstr+strlen(tstr),"\nkeinem anderen Sender"); } Msg_Popup(tstr); } } } Close_Socket(); } inet=tnet; } if(inet==-1 && loop) { Start_NoInet(zapchan); } } else { Msg_Popup("Werbezapper deaktiviert"); remove(FLG_FILE); sleep(2); } // clear Display memset(lbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres); memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres); munmap(lfb, fix_screeninfo.smem_len); close(fb); free(lbb); FTC_Manager_Done(manager); FT_Done_FreeType(library); fcntl(rc, F_SETFL, O_NONBLOCK); close(rc); return 0; }