]> git.webhop.me Git - tuxwetter.git/commitdiff
add last worldweather API with all fixes
authorGetAway <get-away@t-online.de>
Fri, 9 Jun 2017 12:57:00 +0000 (14:57 +0200)
committerJacek Jendrzej <satbaby@kawaii.com>
Thu, 22 Jun 2017 09:58:49 +0000 (11:58 +0200)
19 files changed:
bmps.c
color.h [deleted file]
gfx.c
gfx.h
gif.c
gif.h
gifdecomp.c
gifdecomp.h
globals.h [deleted file]
http.c
io.c
jpeg.c
parser.c
parser.h
php.c
pngw.h
text.c
tuxwetter.c
tuxwetter.h

diff --git a/bmps.c b/bmps.c
index d8f4db4f8f519fc244fb4e11d2be07274da3e67b..62b53e2b2af7cf8c5f5f152e35f97d82a7b4e149 100644 (file)
--- a/bmps.c
+++ b/bmps.c
 
 int lcd_fd=-1;
 lcd_packed_buffer s;
-
+#if 0 // only dbox2 begin
 int bmp2lcd (char *bildfile) 
 {
+       char bild2lcd [50];
        char filename[50];
        char bmpfile[50];
        
@@ -109,6 +110,7 @@ int bmp2lcd (char *bildfile)
        }
        if(colors)
                free(colors);
+
        // image
        line_size = (bh.width*bh.bit_count / 8);
        bmpline_size = (line_size + 3) & ~3;
@@ -164,7 +166,6 @@ void clear_lcd(void)
 
 //************** bmp.c **********************
 
-
 int bmp2raw(struct bmp_header bh, unsigned char *bmp, lcd_raw_buffer raw) {
        int x, y, ofs, linesize;
        linesize = ((bh.width*bh.bit_count / 8) + 3) & ~3;
@@ -227,3 +228,4 @@ void raw2raw4bit(lcd_raw_buffer source, lcd_raw4bit_buffer dest) {
                }
        }
 }
+#endif // only dbox2 end
diff --git a/color.h b/color.h
deleted file mode 100644 (file)
index 6ab843b..0000000
--- a/color.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-       Neutrino-GUI  -   DBoxII-Project
-
-       Copyright (C) 2001 Steffen Hehn 'McClean'
-       Homepage: http://dbox.cyberphoria.org/
-
-       Kommentar:
-
-       Diese GUI wurde von Grund auf neu programmiert und sollte nun vom
-       Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert
-       auf der Client-Server Idee, diese GUI ist also von der direkten DBox-
-       Steuerung getrennt. Diese wird dann von Daemons uebernommen.
-
-
-       License: GPL
-
-       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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-
-#ifndef __color__
-#define __color__
-
-#define COL_MAXFREE                    254-8*7 - 1
-#define COL_INFOBAR_SHADOW             254-8*7
-#define COL_INFOBAR                    254-8*6
-#define COL_MENUHEAD                   254-8*5
-#define COL_MENUCONTENT                        254-8*4
-#define COL_MENUCONTENTDARK            254-8*3
-#define COL_MENUCONTENTSELECTED                254-8*2
-#define COL_MENUCONTENTINACTIVE                254-8*1
-
-#define COL_BACKGROUND                         255
-
-#define COL_INFOBAR_SHADOW_PLUS_0       (COL_INFOBAR_SHADOW + 0)
-#define COL_INFOBAR_SHADOW_PLUS_1       (COL_INFOBAR_SHADOW + 1)
-#define COL_INFOBAR_PLUS_0              (COL_INFOBAR + 0)
-#define COL_INFOBAR_PLUS_1              (COL_INFOBAR + 1)
-#define COL_INFOBAR_PLUS_3              (COL_INFOBAR + 3)
-#define COL_INFOBAR_PLUS_7              (COL_INFOBAR + 7)
-#define COL_MENUHEAD_PLUS_0             (COL_MENUHEAD + 0)
-#define COL_MENUCONTENT_PLUS_0          (COL_MENUCONTENT + 0)
-#define COL_MENUCONTENT_PLUS_1          (COL_MENUCONTENT + 1)
-#define COL_MENUCONTENT_PLUS_2          (COL_MENUCONTENT + 2)
-#define COL_MENUCONTENT_PLUS_3          (COL_MENUCONTENT + 3)
-#define COL_MENUCONTENT_PLUS_4          (COL_MENUCONTENT + 4)
-#define COL_MENUCONTENT_PLUS_5          (COL_MENUCONTENT + 5)
-#define COL_MENUCONTENT_PLUS_6          (COL_MENUCONTENT + 6)
-#define COL_MENUCONTENT_PLUS_7          (COL_MENUCONTENT + 7)
-#define COL_MENUCONTENTDARK_PLUS_0      (COL_MENUCONTENTDARK + 0)
-#define COL_MENUCONTENTDARK_PLUS_2      (COL_MENUCONTENTDARK + 2)
-#define COL_MENUCONTENTSELECTED_PLUS_0  (COL_MENUCONTENTSELECTED + 0)
-#define COL_MENUCONTENTSELECTED_PLUS_2  (COL_MENUCONTENTSELECTED + 2)
-#define COL_MENUCONTENTINACTIVE_PLUS_0  (COL_MENUCONTENTINACTIVE + 0)
-#define COL_BACKGROUND_PLUS_0           (COL_BACKGROUND + 0)
-
-enum { COL_WHITE=0x60, COL_RED, COL_GREEN, COL_BLUE, COL_YELLOW, COL_BLACK };
-
-#endif
diff --git a/gfx.c b/gfx.c
index 3f40c34a3cd75f85f1fcf727bb5a9b886766c94a..3a1bb3f8d654e2d1aab8fddfef6afb545a79540c 100644 (file)
--- a/gfx.c
+++ b/gfx.c
@@ -197,6 +197,7 @@ void PaintIcon(char *filename, int x, int y, unsigned char offset)
        return;
 }
 #endif
+
 /******************************************************************************
  * RenderLine
  ******************************************************************************/
diff --git a/gfx.h b/gfx.h
index 64ada4bfd91e3076fde93132ca3cf32f1f7d36e4..9bfa439b4d5808a32808642489317e917499fdc5 100644 (file)
--- a/gfx.h
+++ b/gfx.h
@@ -5,6 +5,7 @@
 void Center_Screen(int wx, int wy, int *csx, int *csy);
 void RenderBox(int sx, int sy, int ex, int ey, int mode, int color);
 //void PaintIcon(char *filename, int x, int y, unsigned char offset);
+
 void RenderLine( int xa, int ya, int xb, int yb, unsigned char farbe );
 void RenderCircle(int sx, int sy, int col);
 
diff --git a/gif.c b/gif.c
index a93da78615a0d274b2a0379bb231b0bb0907382d..bc79eea806acdf2524adbb169592a2d19e4000b2 100644 (file)
--- a/gif.c
+++ b/gif.c
 #define FH_ERROR_FORMAT 2      /* file format error */
 #define FH_ERROR_MALLOC 3      /* error during malloc */
 #define min(a,b) ((a) < (b) ? (a) : (b))
+
 #define gflush return(FH_ERROR_FILE);
-#define grflush { DGifCloseFile(gft); return(FH_ERROR_FORMAT); }
-#define mgrflush { free(lb); free(slb); DGifCloseFile(gft); return(FH_ERROR_FORMAT); }
+#define grflush { DGifCloseFile(gft, &err); return(FH_ERROR_FORMAT); }
+#define mgrflush { free(lb); free(slb); DGifCloseFile(gft, &err); return(FH_ERROR_FORMAT); }
 #define agflush return(FH_ERROR_FORMAT);
-#define agrflush { DGifCloseFile(gft); return(FH_ERROR_FORMAT); }
+#define agrflush { DGifCloseFile(gft, &err); return(FH_ERROR_FORMAT); }
 
 int fh_gif_id(const char *name)
 {
@@ -67,7 +68,8 @@ inline void m_rend_gif_decodecolormap(unsigned char *cmb,unsigned char *rgbb,Col
 }
 int fh_gif_load(const char *name,unsigned char *buffer,int x,int y)
 {
-       int px,py,i,ibxs;
+       int err = 0;
+       int px,py,i;
        int j;
        unsigned char *fbptr;
        unsigned char *lb;
@@ -79,7 +81,7 @@ int fh_gif_load(const char *name,unsigned char *buffer,int x,int y)
        ColorMapObject *cmap;
        int cmaps;
 
-       gft=DGifOpenFileName(name);
+       gft=DGifOpenFileName(name, &err);
        if(gft==NULL) gflush;
        do
        {
@@ -98,7 +100,6 @@ int fh_gif_load(const char *name,unsigned char *buffer,int x,int y)
                                        cmap=(gft->Image.ColorMap ? gft->Image.ColorMap : gft->SColorMap);
                                        cmaps=cmap->ColorCount;
 
-                                       ibxs=ibxs*3;
                                        fbptr=buffer;
                                        if(!(gft->Image.Interlace))
                                        {
@@ -136,18 +137,20 @@ int fh_gif_load(const char *name,unsigned char *buffer,int x,int y)
                }  
        }
        while( rt!= TERMINATE_RECORD_TYPE );
-       DGifCloseFile(gft);
+       DGifCloseFile(gft, &err);
        return(FH_ERROR_OK);
 }
+
 int fh_gif_getsize(const char *name,int *x,int *y, int wanted_width, int wanted_height)
 {
+       int err = 0;
        int px,py;
        GifFileType *gft;
        GifByteType *extension;
        int extcode;
        GifRecordType rt;
 
-       gft=DGifOpenFileName(name);
+       gft=DGifOpenFileName(name, &err);
        if(gft==NULL) gflush;
        do
        {
@@ -160,7 +163,7 @@ int fh_gif_getsize(const char *name,int *x,int *y, int wanted_width, int wanted_
                                px=gft->Image.Width;
                                py=gft->Image.Height;
                                *x=px; *y=py;
-                               DGifCloseFile(gft);
+                               DGifCloseFile(gft, &err);
                                return(FH_ERROR_OK);
                                break;
                        case EXTENSION_RECORD_TYPE:
@@ -173,6 +176,6 @@ int fh_gif_getsize(const char *name,int *x,int *y, int wanted_width, int wanted_
                }  
        }
        while( rt!= TERMINATE_RECORD_TYPE );
-       DGifCloseFile(gft);
+       DGifCloseFile(gft, &err);
        return(FH_ERROR_FORMAT);
 }
diff --git a/gif.h b/gif.h
index ff9bf02dc7f2ac2a2df45661d602eb7bc48aa9ee..d8cc227880bbbb74c1b86bf5d6af46e86c566804 100644 (file)
--- a/gif.h
+++ b/gif.h
@@ -23,7 +23,7 @@
 #define __GIF_H__
 
 int fh_gif_id(const char *name);
-int fh_gif_load(const char *name,unsigned char *buffer,int x,int y);
-int fh_gif_getsize(const char *name,int *x,int *y, int wanted_width, int wanted_height);
+int fh_gif_load(const char *name,char *buffer,int x,int y);
+int fh_gif_getsize(char *name,int *x,int *y, int wanted_width, int wanted_height);
 
 #endif
index 4e81e18905350c933de59de9d3035d6a0f294426..86507fbe4bacf82e37d397dfce14cd09fd4c9b09 100644 (file)
 #include "gif_lib.h"
 #include "gifdecomp.h"
 
+#ifndef TRUE
+#define TRUE        1
+#endif /* TRUE */
+#ifndef FALSE
+#define FALSE       0
+#endif /* FALSE */
+
 #define PROGRAM_NAME   "GifDecomp"
 #define GIF_ASM_NAME   "Tuxwetter"
 #define COMMENT_GIF_ASM    "New-Tuxwetter-Team"
 #define SQR(x)     ((x) * (x))
 
+#define GIF_MESSAGE(Msg) fprintf(stderr, "\n%s: %s\n", PROGRAM_NAME, Msg)
+#define GIF_EXIT(Msg) { GIF_MESSAGE(Msg); exit(-3); }
+
+#define printfe(format, ...) \
+  (fprintf(stderr, format "\n", ## __VA_ARGS__), fflush(stderr))
+
+#define printfef(format, ...) \
+  printfe("%s " format, __func__, ## __VA_ARGS__)
+
 static int
-   ImageNum = 0,
+//     ImageNum = 0,
     InterlacedFlag = FALSE,
     InterlacedOffset[] = { 0, 4, 2, 1 }, /* The way Interlaced image should. */
     InterlacedJumps[] = { 8, 8, 4, 2 };    /* be read - offsets and jumps... */
@@ -50,7 +66,7 @@ void xremove(char *fname);
 ******************************************************************************/
 int gifdecomp(char *InFileName, char *OutFileName)
 {
-int i;
+int i, err = 0;
 
     GifRowType *ImageBuffer;
     char TempGifName[80];
@@ -70,30 +86,30 @@ int i;
     /* Open input file: */
     if (InFileName != NULL) 
     {  
-       if ((GifFileIn = DGifOpenFileName(InFileName)) == NULL)
-               QuitGifError(GifFileIn, GifFileOut);
+       if ((GifFileIn = DGifOpenFileName(InFileName, &err)) == NULL)
+               QuitGifError(GifFileIn, GifFileOut, err);
     }
-    if ((GifFileIn = DGifOpenFileName(InFileName)) != NULL)
+    if ((GifFileIn = DGifOpenFileName(InFileName, &err)) != NULL)
     {
-               if ((GifFileOut = EGifOpenFileName(TempGifName, TRUE)) == NULL)
-               QuitGifError(GifFileIn, GifFileOut);
+               if ((GifFileOut = EGifOpenFileName(TempGifName, TRUE, &err)) == NULL)
+               QuitGifError(GifFileIn, GifFileOut, err);
    
     
                if (EGifPutScreenDesc(GifFileOut,
                GifFileIn->SWidth, GifFileIn->SHeight,
                GifFileIn->SColorResolution, GifFileIn->SBackGroundColor,
                GifFileIn->SColorMap) == GIF_ERROR)
-               QuitGifError(GifFileIn, GifFileOut);
+               QuitGifError(GifFileIn, GifFileOut, err);
 
                /* Scan the content of the GIF file and load the image(s) in: */
                do {
                if (DGifGetRecordType(GifFileIn, &RecordType) == GIF_ERROR)
-               QuitGifError(GifFileIn, GifFileOut);
+               QuitGifError(GifFileIn, GifFileOut, err);
 
                switch (RecordType) {
                case IMAGE_DESC_RECORD_TYPE:
                        if (DGifGetImageDesc(GifFileIn) == GIF_ERROR)
-                           QuitGifError(GifFileIn, GifFileOut);
+                           QuitGifError(GifFileIn, GifFileOut, err);
 
                        /* Put the image descriptor to out file: */
                        if (EGifPutImageDesc(GifFileOut,
@@ -101,27 +117,27 @@ int i;
                            GifFileIn->Image.Width, GifFileIn->Image.Height,
                            InterlacedFlag,
                            GifFileIn->Image.ColorMap) == GIF_ERROR)
-                           QuitGifError(GifFileIn, GifFileOut);
+                           QuitGifError(GifFileIn, GifFileOut, err);
 
                        /* Load the image (either Interlaced or not), and dump it as */
                        /* defined in GifFileOut->Image.Interlaced.                  */
                        if (LoadImage(GifFileIn, &ImageBuffer) == GIF_ERROR)
-                           QuitGifError(GifFileIn, GifFileOut);
+                           QuitGifError(GifFileIn, GifFileOut, err);
                        if (DumpImage(GifFileOut, ImageBuffer) == GIF_ERROR)
-                           QuitGifError(GifFileIn, GifFileOut);
+                           QuitGifError(GifFileIn, GifFileOut, err);
                        break;
                    case EXTENSION_RECORD_TYPE:
                        /* Skip any extension blocks in file: */
                        if (DGifGetExtension(GifFileIn, &ExtCode, &Extension) == GIF_ERROR)
-                           QuitGifError(GifFileIn, GifFileOut);
+                           QuitGifError(GifFileIn, GifFileOut, err);
                        if (EGifPutExtension(GifFileOut, ExtCode, Extension[0],
                                                        Extension) == GIF_ERROR)
-                           QuitGifError(GifFileIn, GifFileOut);
+                           QuitGifError(GifFileIn, GifFileOut, err);
 
                        /* No support to more than one extension blocks, so discard: */
                        while (Extension != NULL) {
                            if (DGifGetExtensionNext(GifFileIn, &Extension) == GIF_ERROR)
-                               QuitGifError(GifFileIn, GifFileOut);
+                               QuitGifError(GifFileIn, GifFileOut, err);
                        }
                        break;
                    case TERMINATE_RECORD_TYPE:
@@ -132,20 +148,20 @@ int i;
         }
          while (RecordType != TERMINATE_RECORD_TYPE);
 
-         if (DGifCloseFile(GifFileIn) == GIF_ERROR)
-               QuitGifError(GifFileIn, GifFileOut);
-         if (EGifCloseFile(GifFileOut) == GIF_ERROR)
-               QuitGifError(GifFileIn, GifFileOut);
+         if (DGifCloseFile(GifFileIn, &err) == GIF_ERROR)
+               QuitGifError(GifFileIn, GifFileOut, err);
+         if (EGifCloseFile(GifFileOut, &err) == GIF_ERROR)
+               QuitGifError(GifFileIn, GifFileOut, err);
                
-       if ((GifFileIn = DGifOpenFileName(TempGifName)) == NULL)
-       QuitGifError(GifFileIn, GifFileOut);
+       if ((GifFileIn = DGifOpenFileName(TempGifName, &err)) == NULL)
+       QuitGifError(GifFileIn, GifFileOut, err);
 
     
                 /* Scan the content of GIF file and dump image(s) to seperate file(s): */
                do {
                sprintf(CrntFileName, "%s%02d.gif", OutFileName, FileNum++);
-               if ((GifFileOut = EGifOpenFileName(CrntFileName, TRUE)) == NULL)
-                   QuitGifError(GifFileIn, GifFileOut);
+               if ((GifFileOut = EGifOpenFileName(CrntFileName, TRUE, &err)) == NULL)
+                   QuitGifError(GifFileIn, GifFileOut, err);
                FileEmpty = TRUE;
 
                /* And dump out its exactly same screen information: */
@@ -153,50 +169,50 @@ int i;
                    GifFileIn->SWidth, GifFileIn->SHeight,
                    GifFileIn->SColorResolution, GifFileIn->SBackGroundColor,
                    GifFileIn->SColorMap) == GIF_ERROR)
-                   QuitGifError(GifFileIn, GifFileOut);
+                   QuitGifError(GifFileIn, GifFileOut, err);
 
                do {
                        if (DGifGetRecordType(GifFileIn, &RecordType) == GIF_ERROR)
-                           QuitGifError(GifFileIn, GifFileOut);
+                           QuitGifError(GifFileIn, GifFileOut, err);
 
                        switch (RecordType) {
                        case IMAGE_DESC_RECORD_TYPE:
                        FileEmpty = FALSE;
                        if (DGifGetImageDesc(GifFileIn) == GIF_ERROR)
-                           QuitGifError(GifFileIn, GifFileOut);
+                           QuitGifError(GifFileIn, GifFileOut, err);
                           /* Put same image descriptor to out file: */
                        if (EGifPutImageDesc(GifFileOut,
                            GifFileIn->Image.Left, GifFileIn->Image.Top,
                            GifFileIn->Image.Width, GifFileIn->Image.Height,
                            GifFileIn->Image.Interlace,
                            GifFileIn->Image.ColorMap) == GIF_ERROR)
-                           QuitGifError(GifFileIn, GifFileOut);
+                           QuitGifError(GifFileIn, GifFileOut, err);
 
                            /* Now read image itself in decoded form as we dont      */
                            /* really care what is there, and this is much faster.   */
                        if (DGifGetCode(GifFileIn, &CodeSize, &CodeBlock) == GIF_ERROR
                           || EGifPutCode(GifFileOut, CodeSize, CodeBlock) == GIF_ERROR)
-                          QuitGifError(GifFileIn, GifFileOut);
+                          QuitGifError(GifFileIn, GifFileOut, err);
                        while (CodeBlock != NULL)
                                if (DGifGetCodeNext(GifFileIn, &CodeBlock) == GIF_ERROR ||
                                    EGifPutCodeNext(GifFileOut, CodeBlock) == GIF_ERROR)
-                                   QuitGifError(GifFileIn, GifFileOut);
+                                   QuitGifError(GifFileIn, GifFileOut, err);
                        break;
                        case EXTENSION_RECORD_TYPE:
                                FileEmpty = FALSE;
                                /* Skip any extension blocks in file: */
                                if (DGifGetExtension(GifFileIn, &ExtCode, &Extension)
                                    == GIF_ERROR)
-                                   QuitGifError(GifFileIn, GifFileOut);
+                                   QuitGifError(GifFileIn, GifFileOut, err);
                                if (EGifPutExtension(GifFileOut, ExtCode, Extension[0],
                                                        Extension) == GIF_ERROR)
-                                   QuitGifError(GifFileIn, GifFileOut);
+                                   QuitGifError(GifFileIn, GifFileOut, err);
 
                                /* No support to more than one extension blocks, discard.*/
                                while (Extension != NULL)
                                if (DGifGetExtensionNext(GifFileIn, &Extension)
                                 == GIF_ERROR)
-                                QuitGifError(GifFileIn, GifFileOut);
+                                QuitGifError(GifFileIn, GifFileOut, err);
                                break;
                        case TERMINATE_RECORD_TYPE:
                        break;
@@ -207,8 +223,8 @@ int i;
                while (RecordType != IMAGE_DESC_RECORD_TYPE &&
                       RecordType != TERMINATE_RECORD_TYPE);
 
-               if (EGifCloseFile(GifFileOut) == GIF_ERROR)
-                   QuitGifError(GifFileIn, GifFileOut);
+               if (EGifCloseFile(GifFileOut, &err) == GIF_ERROR)
+                   QuitGifError(GifFileIn, GifFileOut, err);
                if (FileEmpty) {
                  /* Might happen on last file - delete it if so: */
                    unlink(CrntFileName);
@@ -216,8 +232,8 @@ int i;
         }
        while (RecordType != TERMINATE_RECORD_TYPE);
 
-       if (DGifCloseFile(GifFileIn) == GIF_ERROR)
-               QuitGifError(GifFileIn, GifFileOut);
+       if (DGifCloseFile(GifFileIn, &err) == GIF_ERROR)
+               QuitGifError(GifFileIn, GifFileOut, err);
        FileNum=FileNum-1; 
        }
 return FileNum;
@@ -226,18 +242,22 @@ return FileNum;
 /******************************************************************************
 * Close both input and output file (if open), and exit.                              *
 ******************************************************************************/
-void QuitGifError(GifFileType *GifFileIn, GifFileType *GifFileOut)
+void QuitGifError(GifFileType *GifFileIn, GifFileType *GifFileOut, int ErrorCode)
 {
-    PrintGifError();
-    if (GifFileIn != NULL) DGifCloseFile(GifFileIn);
-    if (GifFileOut != NULL) EGifCloseFile(GifFileOut);
+       const char *errstr = NULL;
+//   PrintGifError();
+       errstr = GifErrorString(ErrorCode);
+       printfef("Failed to open file: %d (%s)", ErrorCode, errstr);
+
+    if (GifFileIn != NULL) DGifCloseFile(GifFileIn, &ErrorCode);
+    if (GifFileOut != NULL) EGifCloseFile(GifFileOut, &ErrorCode);
 //    exit(EXIT_FAILURE);
 }
 
 
 int LoadImage(GifFileType *GifFile, GifRowType **ImageBufferPtr)
 {
-    int Size, i, j, Count;
+    int Size, i, j/*, Count*/;
     GifRowType *ImageBuffer;
 
     /* Allocate the image as vector of column of rows. We cannt allocate     */
@@ -256,12 +276,13 @@ int LoadImage(GifFileType *GifFile, GifRowType **ImageBufferPtr)
 
     *ImageBufferPtr = ImageBuffer;
 
-    GifQprintf("\n%s: Image %d at (%d, %d) [%dx%d]:     ",
+/*    GifQprintf("\n%s: Image %d at (%d, %d) [%dx%d]:     ",
        PROGRAM_NAME, ++ImageNum, GifFile->Image.Left, GifFile->Image.Top,
                                 GifFile->Image.Width, GifFile->Image.Height);
+*/
     if (GifFile->Image.Interlace) {
        /* Need to perform 4 passes on the images: */
-       for (Count = i = 0; i < 4; i++)
+       for (/*Count =*/ i = 0; i < 4; i++)
            for (j = InterlacedOffset[i]; j < GifFile->Image.Height;
                                                 j += InterlacedJumps[i]) {
 //             GifQprintf("\b\b\b\b%-4d", Count++);
@@ -288,11 +309,11 @@ int LoadImage(GifFileType *GifFile, GifRowType **ImageBufferPtr)
 ******************************************************************************/
 int DumpImage(GifFileType *GifFile, GifRowType *ImageBuffer)
 {
-    int i, j, Count;
+    int i, j/*, Count*/;
 
     if (GifFile->Image.Interlace) {
        /* Need to perform 4 passes on the images: */
-       for (Count = GifFile->Image.Height, i = 0; i < 4; i++)
+       for (/*Count = GifFile->Image.Height,*/ i = 0; i < 4; i++)
            for (j = InterlacedOffset[i]; j < GifFile->Image.Height;
                                                 j += InterlacedJumps[i]) {
 //             GifQprintf("\b\b\b\b%-4d", Count--);
@@ -301,7 +322,7 @@ int DumpImage(GifFileType *GifFile, GifRowType *ImageBuffer)
            }
     }
     else {
-       for (Count = GifFile->Image.Height, i = 0; i < GifFile->Image.Height; i++) {
+       for (/*Count = GifFile->Image.Height,*/ i = 0; i < GifFile->Image.Height; i++) {
 //         GifQprintf("\b\b\b\b%-4d", Count--);
            if (EGifPutLine(GifFile, ImageBuffer[i], GifFile->Image.Width)
                == GIF_ERROR) return GIF_ERROR;
index edc4262a69b3762d7b898c52a1efcd0358dbc294..b3272846ca6c8e2fd51592e09e27e29d6d435698 100644 (file)
@@ -26,6 +26,6 @@
 #define __GIFDECOMP_H__
 
 int gifdecomp(char *InFileName, char *OutFileName);
-void QuitGifError(GifFileType *GifFileIn, GifFileType *GifFileOut);
+void QuitGifError(GifFileType *GifFileIn, GifFileType *GifFileOut, int ErrorCode);
 
 #endif
diff --git a/globals.h b/globals.h
deleted file mode 100644 (file)
index 6e18b35..0000000
--- a/globals.h
+++ /dev/null
@@ -1,138 +0,0 @@
-#ifndef __GLOBALS_H__
-#define __GLOBALS_H__
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <getopt.h>
-#include <netdb.h>
-#include <paths.h>
-#include <signal.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <time.h>
-#include <string.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <ft2build.h>
-#include <sys/ioctl.h>
-#include <linux/fb.h>
-#ifndef HAVE_DREAMBOX_HARDWARE
-#include <linux/input.h>
-#endif
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <sys/un.h>
-#include <sys/param.h>
-#include <sys/mman.h>
-#include FT_FREETYPE_H
-#include FT_CACHE_H
-#include FT_CACHE_SMALL_BITMAPS_H
-#include "text.h"
-#include "io.h"
-#include "gfx.h"
-
-#define P_VERSION              "1.36"
-#define MAX_ENTRYS             32
-#define CK_INTERVALL   30
-#define STATFILE "/var/etc/logcsd.stat"
-#define SCKFILE "/tmp/logcsd.socket"
-#define PIDFILE "/tmp/logcsd.pid"
-#define ECMFILE "/tmp/ecm.info"
-
-#define        RC_0            0x00
-#define        RC_1            0x01
-#define        RC_2            0x02
-#define        RC_3            0x03
-#define        RC_4            0x04
-#define        RC_5            0x05
-#define        RC_6            0x06
-#define        RC_7            0x07
-#define        RC_8            0x08
-#define        RC_9            0x09
-#define        RC_RIGHT        0x0A
-#define        RC_LEFT         0x0B
-#define        RC_UP           0x0C
-#define        RC_DOWN         0x0D
-#define        RC_OK           0x0E
-#define        RC_MUTE         0x0F
-#define        RC_STANDBY      0x10
-#define        RC_GREEN        0x11
-#define        RC_YELLOW       0x12
-#define        RC_RED          0x13
-#define        RC_BLUE         0x14
-#define        RC_PLUS         0x15
-#define        RC_MINUS        0x16
-#define        RC_HELP         0x17
-#define        RC_DBOX         0x18
-#define        RC_HOME         0x1F
-
-FILE *fd_pid;
-int pid;
-
-typedef struct {unsigned char  used;
-                               unsigned char   user[32];
-                               unsigned char   pwd[32];
-                               unsigned char   ip[16];
-                               int                             newip;
-                               int                             connection;
-                               int                             cmd;
-                               char                    prov[12];
-                               char                    serv[5];
-                               int                             cok;
-                               int                             active;
-                               time_t                  ltime;
-                               time_t                  atime;
-                               time_t                  stime;
-                               time_t                  ctime;
-                               double                  rtime;
-                               } ENTRY, *PENTRY;
-
-typedef struct {ENTRY                  entrys[MAX_ENTRYS];
-                               } LOG;                                  
-
-extern unsigned char FONT[64];
-extern char camdversion[16];
-extern char dversion[16];
-
-enum {LEFT, CENTER, RIGHT};
-enum {SMALL, MED, BIG};
-
-FT_Error               error;
-FT_Library             library;
-FTC_Manager            manager;
-FTC_SBitCache          cache;
-FTC_SBit               sbit;
-#if FREETYPE_MAJOR == 2 && FREETYPE_MINOR == 0
-FTC_Image_Desc         desc;
-#else
-FTC_ImageTypeRec       desc;
-#endif
-FT_Face                        face;
-FT_UInt                        prev_glyphindex;
-FT_Bool                        use_kerning;
-
-//devs
-
-int fb, rc;
-
-//framebuffer stuff
-
-enum {FILL, GRID};
-enum {EMPTY, CMCST, CMCS, CMCT, CMC, CMCIT, CMCI, CMHT, CMH, WHITE, BLUE0, TRANSP, BLUE2, ORANGE, GREEN, YELLOW, RED};
-
-extern unsigned char *lfb, *lbb;
-extern unsigned char *proxyadress, *proxyuserpwd;
-
-struct fb_fix_screeninfo fix_screeninfo;
-struct fb_var_screeninfo var_screeninfo;
-
-//int startx, starty, sx, ex, sy, ey;
-
-#define FB_DEVICE      "/dev/fb/0"
-
-#define MAXSLOTS               4
-
-#endif
diff --git a/http.c b/http.c
index a3334892c366dc36ace2310d97f2ff71398f11c0..0202f6ae230f4574517a233e9fafca05e22dec50 100644 (file)
--- a/http.c
+++ b/http.c
@@ -72,6 +72,7 @@ int HTTP_downloadFile(char *URL, char *downloadTarget, int showprogress, int tmo
                }
                --i;
        }
+
        headerfile = fopen(downloadTarget, "w");
        if (!headerfile)
                return res;
@@ -94,7 +95,7 @@ int HTTP_downloadFile(char *URL, char *downloadTarget, int showprogress, int tmo
                                                i=0;
                                                while(fgets(tstr, strlen(URL), netfile) && !i)
                                                {
-                                                       if((pt3=strstr(tstr,"address"))!=NULL)
+                                                       if((pt3=strstr(tstr,"address"))!=NULL && (tstr[0]!='#'))
                                                        {
                                                                strcpy(myself,pt3+8);
                                                                myself[strlen(myself)-1]=0;
@@ -112,14 +113,17 @@ int HTTP_downloadFile(char *URL, char *downloadTarget, int showprogress, int tmo
                                }
                        }
                }
+
 */             speed=tmo;
                while(res && repeats--)
                {
                        curl_easy_setopt(curl, CURLOPT_URL, surl);
                        curl_easy_setopt(curl, CURLOPT_FILE, headerfile);
+#if 0
                        curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, show_progress);
                        curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, show_progress);
                        curl_easy_setopt(curl, CURLOPT_NOPROGRESS, (showprogress)?0:1);
+#endif
 //                     curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
                        curl_easy_setopt(curl, CURLOPT_USERAGENT, "neutrino/httpdownloader");
                        curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, (ctimo)?ctimo:(30+tmo*45));
@@ -133,7 +137,7 @@ int HTTP_downloadFile(char *URL, char *downloadTarget, int showprogress, int tmo
                        }
                        else
                        {
-                               curl_easy_setopt(curl, CURLOPT_PROXY, 0);
+                               curl_easy_setopt(curl, CURLOPT_PROXY, NULL);
                        }
                        if(proxyuserpwd && strstr(URL,"//127.0.0.1/")==NULL && strstr(URL,"//localhost/")==NULL)
                        {
diff --git a/io.c b/io.c
index e9ac70ffbf94332c4449878bda4cbe3fc57394ae..173c929ef78ef50b541afccc94cd31100a049f01 100644 (file)
--- a/io.c
+++ b/io.c
@@ -30,7 +30,7 @@ int InitRC(void)
        rc = open(RC_DEVICE, O_RDONLY);
        if(rc == -1)
        {
-               perror("msgbox <open remote control>");
+               perror("tuxwetter <open remote control>");
                exit(1);
        }
        fcntl(rc, F_SETFL, O_NONBLOCK | O_SYNC);
diff --git a/jpeg.c b/jpeg.c
index 8d32e7522277c154e88d6e2658ae5f4f6a4632df..f41f4992ba615d58fd7bed83443df3df54c972d7 100644 (file)
--- a/jpeg.c
+++ b/jpeg.c
@@ -73,7 +73,7 @@ int fh_jpeg_load(const char *filename,unsigned char *buffer,int x,int y)
        struct jpeg_decompress_struct *ciptr;
        struct r_jpeg_error_mgr emgr;
        unsigned char *bp;
-       int px,py,c;
+       int px,/*py,*/c;
        FILE *fh;
        JSAMPLE *lb;
 
@@ -107,7 +107,8 @@ int fh_jpeg_load(const char *filename,unsigned char *buffer,int x,int y)
 
        jpeg_start_decompress(ciptr);
 
-       px=ciptr->output_width; py=ciptr->output_height;
+       px=ciptr->output_width;
+       /*py=ciptr->output_height;*/
        c=ciptr->output_components;
 
 
@@ -137,7 +138,7 @@ int fh_jpeg_getsize(const char *filename,int *x,int *y, int wanted_width, int wa
        struct jpeg_decompress_struct *ciptr;
        struct r_jpeg_error_mgr emgr;
 
-       int px,py,c;
+       int px,py/*,c*/;
        FILE *fh;
        
        ciptr=&cinfo;
@@ -173,7 +174,7 @@ int fh_jpeg_getsize(const char *filename,int *x,int *y, int wanted_width, int wa
 
        jpeg_start_decompress(ciptr);
        px=ciptr->output_width; py=ciptr->output_height;
-       c=ciptr->output_components;
+       /*c=ciptr->output_components;*/
        *x=px; *y=py;
 //     jpeg_finish_decompress(ciptr);
        jpeg_destroy_decompress(ciptr);
index b05b3c0c9ca62fe5d7b4b6727fd5b231fdb763ca..82b64b1e6fa8afe47abc27121dcb893d7b7b1b8c 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -4,11 +4,11 @@
 *********************************************************************************************
 */
 //getline needed #define _GNU_SOURCE
-#define _GNU_SOURCE
-#include <ctype.h>
+//#define _GNU_SOURCE
+//#include <ctype.h>
 
 #include <curl/curl.h>
-#include <strings.h>
+//#include <strings.h>
 #include "tuxwetter.h"
 #include "parser.h"
 #include "http.h"
@@ -27,6 +27,7 @@ char  data            [MAXITEM][MAXMEM];
 char   conveng         [500][40]; 
 char   convger         [500][40];
 int    prev_count =    0;
+int days_count =       0;
 char    null[2]=       {0,0};
 int    ptc=            0;
 int    t_actday=       0;
@@ -34,10 +35,11 @@ int t_actmonth=     0;
 int    t_actyear=      0;
 const char mnames[12][10]={"Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"};
 char prstrans[512];
+extern int num_of_days;
 
 //**************************************** Preview Counter ********************************
 
-extern char CONVERT_LIST[];
+extern const char CONVERT_LIST[];
 extern void TrimString(char *strg);
 
 void prs_check_missing(char *entry)
@@ -71,7 +73,7 @@ FILE *fh;
        }
 }
 
-char  *prs_translate(char *trans, char *tfile)
+char  *prs_translate(char *trans, const char *tfile)
 {
 char *sptr;
 int i,found=0;
@@ -112,6 +114,11 @@ int prs_get_prev_count (void)
        return prev_count;
 }
 
+int prs_get_days_count(void)
+{
+       return days_count;
+}
+
 int prs_get_day (int i, char *out, int metric)
 {
        int ret=1, set=(PRE_DAY+(i*PRE_STEP)), z=0, intdaynum=0, monthtemp=0;
@@ -172,6 +179,8 @@ int prs_get_val (int i, int what, int nacht, char *out)
 int z;
 
        strcpy(out,data[(what & ~TRANSLATION)+(i*PRE_STEP)+(nacht*NIGHT_STEP)]);
+       TrimString(out);
+
        if(what & TRANSLATION)
        {
                for(z=0;z<=ptc;z++)
@@ -295,7 +304,7 @@ int prs_get_dwday(int i, int what, char *out)
 
 //*** XML File ***
 
-int parser(char *citycode, char *trans, int metric, int inet, int ctmo)
+int parser(char *citycode, const char *trans, int metric, int inet, int ctmo)
 {
        int  rec=0, flag=0;
        int cc=0, bc=1, exit_ind=-1;
@@ -318,6 +327,7 @@ int parser(char *citycode, char *trans, int metric, int inet, int ctmo)
        memset(conveng,0,500*40); 
        memset(convger,0,500*40);
        prev_count=0;
+       days_count=0;
        memset(null,0,2);
        ptc=0;
        t_actday=0;
@@ -328,7 +338,7 @@ int parser(char *citycode, char *trans, int metric, int inet, int ctmo)
        exit_ind=system(url);
        sleep(1);
 */
-       sprintf (url,"http://api.worldweatheronline.com/free/v1/weather.ashx?q=%s&format=xml&num_of_days=5&includeLocation=yes&key=%s",citycode,key);
+       sprintf (url,"http://api.worldweatheronline.com/free/v1/weather.ashx?q=%s&format=xml&num_of_days=%d&includeLocation=yes&key=%s",citycode,num_of_days,key);
        exit_ind=HTTP_downloadFile(url, "/tmp/tuxwettr.tmp", 0, inet, ctmo, 3);
 
        if(exit_ind != 0)
@@ -387,7 +397,8 @@ int parser(char *citycode, char *trans, int metric, int inet, int ctmo)
                                if ((gettemp == '<' || gettemp == ']') && d_flag)
                                {
                                        data[bc][cc] = '\0';
-                                       //printf("data[%d] = %s\n",bc,data[bc]);
+                                       //printf("data[%d][%d] = %s\n",bc,cc,data[bc]);
+                                       if (cc == ACT_UPTIME) days_count++;
                                        bc++;
                                        cc = 0;
                                        rec = 0;
@@ -403,9 +414,11 @@ int parser(char *citycode, char *trans, int metric, int inet, int ctmo)
 
        exit_ind=1;
 #else
+/*     sprintf (url,"http://xoap.weather.com/weather/local/%s?cc=*&dayf=%d&prod=xoap&unit=%c&par=1005530704&key=a9c95f7636ad307b",citycode,previews,(metric)?'m':'u');
+       exit_ind=HTTP_downloadFile(url, "/tmp/tuxwettr.tmp", 0, inet, ctmo, 3);
+*/
        sprintf (url,"wget -q -O /tmp/tuxwettr.tmp http://xoap.weather.com/weather/local/%s?unit=%c\\&dayf=%d\\&cc=*\\&prod=xoap\\&link=xoap\\&par=%s\\&key=%s",citycode,(metric)?'m':'u',previews,par,key);
        exit_ind=system(url);
-
        sleep(1);
        if(exit_ind != 0)
        {
@@ -458,34 +471,7 @@ int parser(char *citycode, char *trans, int metric, int inet, int ctmo)
                                {
                                        bc++;
                                        cc = 0;
-                               int prs_get_dwday(int i, int what, char *out)
-{
-       int ret=1;
-       char *wday[] = {"SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","???"};
-
-       struct tm ts;
-
-       *out=0;
-
-       if(sscanf(data[(what & ~TRANSLATION)+(i*PRE_STEP)],"%d-%d-%d",&t_actyear,&t_actmonth,&t_actday)==3)
-       {
-               ts.tm_year = t_actyear - 1900;
-               ts.tm_mon  = t_actmonth - 1;
-               ts.tm_mday = t_actday;
-
-               ts.tm_hour = 0;
-               ts.tm_min  = 0;
-               ts.tm_sec  = 1;
-               ts.tm_isdst = -1;
-
-               if ( mktime(&ts) == -1 )
-                       ts.tm_wday = 7;
-
-               sprintf(out,"%s", wday[ts.tm_wday]);
-               ret=0;
-       }
-       return ret;
-}      rec = 0;
+                                       rec = 0;
                                        flag=1;
                                        prev_count++;
                                }
@@ -522,6 +508,7 @@ int parser(char *citycode, char *trans, int metric, int inet, int ctmo)
 
        exit_ind=1;
 #endif
+
 //*** Übersetzungs File ***
        
        if ((wxfile = fopen(trans,"r"))==NULL)
index 64a1753cc95cf0c96a4af733670d1b39e69408a8..74f15839ce236f965bac209fbfedf901801cb9a7 100644 (file)
--- a/parser.h
+++ b/parser.h
@@ -1,58 +1,86 @@
+/*
+ * $Id: parser.h,v 1.1 2009/12/19 19:42:49 rhabarber1848 Exp $
+ *
+ * tuxwetter - d-box2 linux project
+ *
+ * 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+*/
+
+#ifndef __wxparser__
+#define __wxparser__
 
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <ctype.h>
 
-
-#ifndef __wxparser__
-#define __wxparser__
-
+//#define WWEATHER
+#define MISS_FILE      "/var/plugins/tuxwet/missing_translations.txt"
 #define TRANSLATION 0x8000
 
 #ifdef WWEATHER
-#      define NA               0
-#      define PRE_STEP         14
-#      define NIGHT_STEP       13
+# define NA   0
+# define PRE_STEP  14
+# define NIGHT_STEP 13
 
-       // atual Values
-#      define ACT_CITY         2
-#      define ACT_OBST         3
-#      define ACT_LAT          6
-#      define ACT_LON          7
-#      define ACT_UPTIME       10
-#      define ACT_TEMP         11
-#      define ACT_ICON         14
-#      define ACT_COND         15 | TRANSLATION
-#      define ACT_WSPEED       17
-#      define ACT_WINDD        19 | TRANSLATION
-#      define ACT_PRECIPMM     20
-#      define ACT_HMID         21
-#      define ACT_VIS          22
-#      define ACT_PRESS        23
-#      define ACT_CLOUDC       24
-#      define ACT_SUNR         NA
-#      define ACT_SUNS         NA
-#      define ACT_FTEMP        NA
-#      define ACT_PRTEND       NA
-#      define ACT_UVIND        NA
-#      define ACT_UVTEXT       NA
-#      define ACT_DEWP         NA
-#      define ACT_MOON         NA
+// atual Values
+# define ACT_CITY  3
+# define ACT_LAT  6
+# define ACT_LON  7
+# define ACT_SUNR  NA
+# define ACT_SUNS  NA
+# define ACT_UPTIME 10
+# define ACT_OBST  NA
+# define ACT_TEMPC 11
+# define ACT_TEMPF 12
+# define ACT_FTEMPC NA
+# define ACT_FTEMPF NA
+# define ACT_ICON  14
+# define ACT_COND  15 | TRANSLATION
+# define ACT_PRESS 23
+# define ACT_PRTEND NA
+# define ACT_WSPEEDM 16
+# define ACT_WSPEEDK 17
+# define ACT_WINDD 19 | TRANSLATION
+# define ACT_HMID  21
+# define ACT_VIS  22
+# define ACT_UVIND NA
+# define ACT_UVTEXT NA
+# define ACT_DEWP  NA
+# define ACT_MOON  NA
+# define ACT_CLOUDC 24
+# define ACT_PRECIPMM 20
 
-       // Preview Values
-#      define PRE_DAY          25
-#      define PRE_TEMPH        26
-#      define PRE_TEMPL        28
-#      define PRE_WSPEED       31
-#      define PRE_WINDD        32 | TRANSLATION
-#      define PRE_ICON         36
-#      define PRE_COND         37 | TRANSLATION
-#      define PRE_PRECIPMM     38
-#      define PRE_SUNR         NA
-#      define PRE_SUNS         NA
-#      define PRE_BT           NA
-#      define PRE_PPCP         NA
-#      define PRE_HMID         NA
+// Preview Values
+# define PRE_DAY  25
+# define PRE_TEMPHC 26
+# define PRE_TEMPHF 27
+# define PRE_TEMPLC 28
+# define PRE_TEMPLF 29
+# define PRE_SUNR  NA
+# define PRE_SUNS  NA
+# define PRE_ICON  36
+# define PRE_COND  37 | TRANSLATION
+# define PRE_WSPEEDM 30
+# define PRE_WSPEEDK 31
+# define PRE_WINDD 32 | TRANSLATION
+# define PRE_BT  NA
+# define PRE_PPCP  NA
+# define PRE_HMID  NA
+# define PRE_PRECIPMM 38
 #else
 #      define PRE_STEP         32
 #      define NIGHT_STEP       13
 #      define ACT_SUNS         21
 #      define ACT_UPTIME       25
 #      define ACT_OBST         26
-#      define ACT_TEMP         27
-#      define ACT_FTEMP        28
+#      define ACT_TEMPC        27
+#      define ACT_TEMPF        28
+#      define ACT_FTEMPC       NA
+#      define ACT_FTEMPF       NA
 #      define ACT_COND         29 | TRANSLATION
 #      define ACT_ICON         30
 #      define ACT_PRESS        32
 #      define ACT_PRTEND       33 | TRANSLATION
-#      define ACT_WSPEED       36
+#      define ACT_WSPEEDM      NA
+#      define ACT_WSPEEDK      36
 #      define ACT_WINDD        39 | TRANSLATION
 #      define ACT_HMID         41
 #      define ACT_VIS          42 | TRANSLATION
 #      define PRE_SUNS         59
 #      define PRE_ICON         61
 #      define PRE_COND         62 | TRANSLATION
-#      define PRE_WSPEED       64
+#      define PRE_WSPEEDM      NA
+#      define PRE_WSPEEDK      64
 #      define PRE_WINDD        67 | TRANSLATION
 #      define PRE_BT           69
 #      define PRE_PPCP         70
 #      define PRE_HMID         71
 #endif
 
-int  parser            (char *,char *, int, int, int);
+int  parser            (char *,const char *, int, int, int);
 int  prs_get_prev_count        (void);
 /*void prs_get_act_int (int what, char *out);
 void prs_get_act_loc (int what, char *out);
@@ -105,12 +137,13 @@ void prs_get_act_time(int what, char *out);
 void prs_get_act_dtime(int what, char *out);
 */
 int  prs_get_day       (int, char *, int);
+int  prs_get_days_count(void);
 int  prs_get_val (int i, int what, int nacht, char *out);
 int  prs_get_dbl (int i, int what, int nacht, char *out);
 int  prs_get_time(int i, int what, char *out, int metric);
 int  prs_get_dtime(int i, int what, char *out, int metric);
 int  prs_get_dwday(int i, int what, char *out);
-char *prs_translate(char *trans, char *tfile);
+char *prs_translate(char *trans, const char *tfile);
 
 #endif // __wxparser__
 
diff --git a/php.c b/php.c
index a5649f4ba10d0cd8f9439f14173b0dfb690dd2fc..1da500848fe100079ed4046ef2a3fdfe0e0b8a7a 100644 (file)
--- a/php.c
+++ b/php.c
@@ -14,6 +14,10 @@ int fh_php_trans(const char *name, int sx, int sy, int dy, int cs, int line, int
 {
 char tstr[BUFSIZE],rstr[BUFSIZE],*tptr,*xptr,cc,br3flag=0;
 int loop=1, j, first, aline=0, fx=sx, fy=sy, slen, deg=0;
+
+int wxw=ex-sx-((preset)?120:30);               //box width 
+int wyw=ey-sy-((preset)?60:40);                //box height
+
 FILE *fh;
 
        if(!(fh=fopen(name,"rb")))      return(FH_ERROR_FILE);
@@ -21,7 +25,7 @@ FILE *fh;
        first=(line==0);
        *x=0;
        *y=0;
-       sy+=dy;
+//     sy+=dy;
        while((loop>0) && (fgets(tstr, sizeof(tstr), fh)))
        {
                tptr=tstr+strlen(tstr);
@@ -60,7 +64,14 @@ FILE *fh;
                                                }
                                                else
                                                {
-                                                       if((*(tptr+1)!='#') && (strstr(tptr,"uml;")!=(tptr+2)) && (strstr(tptr,"nbsp;")!=(tptr+1)) && (strstr(tptr,"gt;")!=(tptr+1)) && (strstr(tptr,"lt;")!=(tptr+1)) && (strstr(tptr,"quot;")!=(tptr+1)) && (strstr(tptr,"zlig;")!=(tptr+2)))
+                                                       if ((*(tptr+1)!='#') &&
+                                                               (strstr(tptr,"uml;") != (tptr+2)) &&
+                                                               (strstr(tptr,"nbsp;")!= (tptr+1)) &&
+                                                               (strstr(tptr,"gt;")  != (tptr+1)) &&
+                                                               (strstr(tptr,"lt;")  != (tptr+1)) &&
+                                                               (strstr(tptr,"amp;") != (tptr+1)) &&
+                                                               (strstr(tptr,"quot;")!= (tptr+1)) &&
+                                                               (strstr(tptr,"zlig;")!= (tptr+2)))
                                                        {
                                                                rstr[j++]=*tptr++;
                                                        }
@@ -70,7 +81,14 @@ FILE *fh;
                                                                cc=' ';
                                                                switch (*tptr)
                                                                {
-                                                                       case 'a': cc='ä'; break;
+                                                                       case 'a':
+                                                                               if (strncmp(tptr,"amp;",4)==0) {
+                                                                                       cc='&';
+                                                                               }
+                                                                               else {
+                                                                                       cc='ä';
+                                                                               }
+                                                                               break;
                                                                        case 'A': cc='Ä'; break;
                                                                        case 'o': cc='ö'; break;
                                                                        case 'O': cc='Ö'; break;
@@ -105,18 +123,18 @@ FILE *fh;
                                                        }
                                                }
                                        }
-                                       if((loop>0) && (sy<(fy+420)))
+                                       if((loop>0) && (sy<(fy+wyw/*420*/)))
                                        {
                                                rstr[j]=0;
                                                if(plot)
                                                {
                                                        if(!br3flag)
                                                        {
-                                                               RenderString(rstr, sx, sy, 619, LEFT, cs, (first && highlite)?GREEN:CMCT);
+                                                               RenderString(rstr, sx, sy, wxw/*619*/, LEFT, cs, (first && highlite)?GREEN:CMCT);
                                                        }
                                                        else
                                                        {
-                                                               RenderString(rstr, sx, fx+250, 619, CENTER, FSIZE_BIG, CMCT);
+                                                               RenderString(rstr, sx, fx+250, wxw/*619*/, CENTER, FSIZE_BIG, CMCT);
                                                        }
                                                        if(strlen(rstr))
                                                        {
@@ -140,14 +158,15 @@ FILE *fh;
                                }
                                if(plot)
                                {
-                                       *cut=(sy>=(fy+420));
+                                       int ssy = ((preset)?80:25);
+                                       *cut=(sy>=(fy+wyw/*420*/));
                                        if(line)
                                        {
-                                               RenderString("<<", fx, fy, sx, LEFT, FSIZE_MED, CMHT);
+                                               RenderString("<<", ssy, fy, sx, LEFT, FSIZE_MED, CMHT);
                                        }
                                        if(*cut)
                                        {
-                                               RenderString(">>", fx, sy, sx, LEFT, FSIZE_MED, CMHT);
+                                               RenderString(">>", ssy, sy-dy, sx, LEFT, FSIZE_MED, CMHT);
                                        }
                                }
                        }
diff --git a/pngw.h b/pngw.h
index 4137d992ce604ef837fb19e0bad781e05b3a779e..60dac1830160e60f78e1ebaa371fd6ac30c3caf0 100644 (file)
--- a/pngw.h
+++ b/pngw.h
@@ -22,7 +22,7 @@
 #ifndef __PNGW_H__
 #define __PNGW_H__
 
-int fh_png_load(const char *filename,unsigned char *buffer,int x,int y);
-int fh_png_getsize(const char *filename,int *x,int *y, int wanted_width, int wanted_height);
+int fh_png_load(const char *filename, unsigned char *buffer, int x, int y);
+int fh_png_getsize(const char *filename, int *x, int *y, int wanted_width, int wanted_height);
 
 #endif
diff --git a/text.c b/text.c
index 7c9ddcb4197d30051cc959b68ba6b089ea9ceef6..2fa3f5a6cab040c11f0e2221afcae85e8aa38cb1 100644 (file)
--- a/text.c
+++ b/text.c
@@ -145,7 +145,7 @@ int stringlen = 0;
                                        else
                                        {
                                                found=0;
-                                               for(i=0; i<sizeof(sc) && !found; i++)
+                                               for(i=0; i<sizeof(sc)/sizeof(sc[0]) && !found; i++)
                                                {
                                                        if(*string==sc[i])
                                                        {
@@ -227,7 +227,7 @@ int RenderString(char *string, int sx, int sy, int maxwidth, int layout, int siz
                                ++rptr;
                                rc=*rptr;
                                found=0;
-                               for(i=0; i<sizeof(sc) && !found; i++)
+                               for(i=0; i<sizeof(sc)/sizeof(sc[0]) && !found; i++)
                                {
                                        if(rc==sc[i])
                                        {
@@ -264,19 +264,48 @@ int RenderString(char *string, int sx, int sy, int maxwidth, int layout, int siz
                        }
                        else
                        {
-                               if (*rptr==0xC3)
+                               int uml = 0;
+                               switch(*rptr)    /* skip Umlauts */
                                {
-                                       ++rptr;
-                                       switch(*rptr)
+                                       case '\xc4':
+                                       case '\xd6':
+                                       case '\xdc':
+                                       case '\xe4':
+                                       case '\xf6':
+                                       case '\xfc':
+                                       case '\xdf': uml=1; break;
+                               }
+                               if (uml == 0)
+                               {
+                                       // UTF8_to_Latin1 encoding
+                                       if (((*rptr) & 0xf0) == 0xf0)      /* skip (can't be encoded in Latin1) */
+                                       {
+                                               rptr++;
+                                               if ((*rptr) == 0)
+                                                       *rptr='\x3f'; // ? question mark
+                                               rptr++;
+                                               if ((*rptr) == 0)
+                                                       *rptr='\x3f';
+                                               rptr++;
+                                               if ((*rptr) == 0)
+                                                       *rptr='\x3f';
+                                       }
+                                       else if (((*rptr) & 0xe0) == 0xe0) /* skip (can't be encoded in Latin1) */
+                                       {
+                                               rptr++;
+                                               if ((*rptr) == 0)
+                                                       *rptr='\x3f';
+                                               rptr++;
+                                               if ((*rptr) == 0)
+                                                       *rptr='\x3f';
+                                       }
+                                       else if (((*rptr) & 0xc0) == 0xc0)
                                        {
-                                       case 0x84: *rptr='Ä'; break;
-                                       case 0x96: *rptr='Ö'; break;
-                                       case 0x9C: *rptr='Ü'; break;
-                                       case 0xA4: *rptr='ä'; break;
-                                       case 0xB6: *rptr='ö'; break;
-                                       case 0xBC: *rptr='ü'; break;
-                                       case 0x9F: *rptr='ß'; break;
-                                       default  : *rptr='.'; break;
+                                               char c = (((*rptr) & 3) << 6);
+                                               rptr++;
+                                               if ((*rptr) == 0)
+                                                       *rptr='\x3f';
+                                               *rptr = (c | ((*rptr) & 0x3f));
                                        }
                                }
                                if((charwidth = RenderChar(*rptr, sx, sy, ex, varcolor)) == -1) return sx; /* string > maxwidth */
@@ -339,7 +368,7 @@ char rc,*rptr=src,*tptr=src;
                        ++rptr;
                        rc=*rptr;
                        found=0;
-                       for(i=0; i<sizeof(sc) && !found; i++)
+                       for(i=0; i<sizeof(sc)/sizeof(sc[0]) && !found; i++)
                        {
                                if(rc==sc[i])
                                {
index 8a75510cd62179af4dc86a09f47727c78f53001c..5ca8ce14a4549bf8742cff11189777a8f909b6fe 100644 (file)
@@ -18,7 +18,6 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  *
- * $Id: tuxwetter.c,v 3.18 2010/06/18 20:00 SnowHead $
  */
 
 //getline needed #define _GNU_SOURCE
 #include "resize.h"
 #include "gifdecomp.h"
 
-#define P_VERSION "3.05"
+#define P_VERSION "3.06"
+#define S_VERSION ""
 
 #ifndef HAVE_DREAMBOX_HARDWARE
 char CONVERT_LIST[]="/var/tuxbox/config/tuxwetter/convert.list";
-#define CFG_FILE       "/var/tuxbox/config/tuxwetter/tuxwetter.conf"
-#define MCF_FILE       "/var/tuxbox/config/tuxwetter/tuxwetter.mcfg"
-#define TIME_FILE      "/var/tuxbox/config/tuxwetter/swisstime"
-//#define MISS_FILE    "/var/tuxbox/config/tuxwetter/missing_translations.txt"
+#define CFG_FILE       "/var/tuxbox/config/tuxwetter/tuxwetter.conf"
+#define MCF_FILE       "/var/tuxbox/config/tuxwetter/tuxwetter.mcfg"
+#define TIME_FILE      "/var/tuxbox/config/tuxwetter/swisstime"
+//#define MISS_FILE    "/var/tuxbox/config/tuxwetter/missing_translations.txt"
+#define START_PIC      "/var/plugins/tuxwet/startbild.jpg"
 #else
 char CONVERT_LIST[]="/var/bin/tuxwet/convert.list";
-#define CFG_FILE       "/var/bin/tuxwet/tuxwetter.conf"
-#define MCF_FILE       "/var/bin/tuxwet/tuxwetter.mcfg"
-#define TIME_FILE      "/var/bin/tuxwet/swisstime"
-#define MISS_FILE      "/var/bin/tuxwet/missing_translations.txt"
+#define CFG_FILE       "/var/bin/tuxwet/tuxwetter.conf"
+#define MCF_FILE       "/var/bin/tuxwet/tuxwetter.mcfg"
+#define TIME_FILE      "/var/bin/tuxwet/swisstime"
+#define MISS_FILE      "/var/bin/tuxwet/missing_translations.txt"
 #endif
 #define NCF_FILE       "/var/tuxbox/config/neutrino.conf"
 #define ECF_FILE       "/var/tuxbox/config/enigma/config"
@@ -73,17 +74,17 @@ char CONVERT_LIST[]="/var/bin/tuxwet/convert.list";
 static char TCF_FILE[128]="";
 
 #define LIST_STEP      10
-#define MAX_FUNCS  7
+#define MAX_FUNCS   7
 #define LCD_CPL        12
 #define LCD_RDIST      10
 
 // Forward defines
 int pic_on_data(char *name, int xstart, int ystart, int xsize, int ysize, int wait, int single, int center, int rahmen);
-char par[32]="1005530704", key[32]="a9c95f7636ad307b";
+char par[32]="", key[32]="";
 void TrimString(char *strg);
 
 // Color table stuff
-static char menucoltxt[][25]={"Content_Selected_Text","Content_Selected","Content_Text","Content","Content_inactive_Text","Content_inactive","Head_Text","Head"};
+static const char menucoltxt[][25]={"Content_Selected_Text","Content_Selected","Content_Text","Content","Content_inactive_Text","Content_inactive","Head_Text","Head"};
 //static char spres[][5]={"","_crt","_lcd"};
 
 //#define FONT "/usr/share/fonts/md_khmurabi_10.ttf"
@@ -131,9 +132,9 @@ int Get_Menu();
 void ShowInfo(MENU *m);
 
 // Misc
-char NOMEM[]="Tuxwetter <Out of memory>\n";
+const char NOMEM[]="Tuxwetter <Out of memory>\n";
 unsigned char *lfb = 0, *lbb = 0;
-int intype=0, show_icons=0, gmodeon=0, ctmo=0, metric=1, loadalways=0, radius=0;
+int intype=0, show_icons=0, gmodeon=0, ctmo=0, metric=1, loadalways=0, radius=0, num_of_days=5;
 char city_code[30] = "";
 char city_name[50] = "";
 unsigned int alpha=0x0202;
@@ -143,14 +144,15 @@ char nstr[BUFSIZE]="";
 char *trstr;
 char *htmstr;
 unsigned char *proxyadress=NULL, *proxyuserpwd=NULL;
-char INST_FILE[]="/tmp/rc.locked";
-char LCDL_FILE[]="/tmp/lcd.locked";
+const char INST_FILE[]="/tmp/rc.locked";
+//char LCDL_FILE[]="/tmp/lcd.locked";
 int instance=0;
+int rclocked=0;
 
 int get_instance(void)
 {
-FILE *fh;
-int rval=0;
+       FILE *fh;
+       int rval=0;
 
        if((fh=fopen(INST_FILE,"r"))!=NULL)
        {
@@ -162,16 +164,20 @@ int rval=0;
 
 void put_instance(int pval)
 {
-FILE *fh;
+       FILE *fh;
 
        if(pval)
        {
+               if (!rclocked) {
+                       rclocked=1;
+                       system("pzapit -lockrc > /dev/null");
+               }
                if((fh=fopen(INST_FILE,"w"))!=NULL)
                {
                        fputc(pval,fh);
                        fclose(fh);
                }
-               if(pval==1)
+/*             if(pval==1)
                {
                        if((fh=fopen(LCDL_FILE,"w"))!=NULL)
                        {
@@ -179,18 +185,31 @@ FILE *fh;
                                fclose(fh);
                        }
                }
-       }
+*/     }
        else
        {
                remove(INST_FILE);
-               remove(LCDL_FILE);
+               system("pzapit -unlockrc > /dev/null");
+//             remove(LCDL_FILE);
        }
 }
 
 static void quit_signal(int sig)
 {
+       char *txt=NULL;
+       switch (sig)
+       {
+               case SIGINT:  txt=strdup("SIGINT");  break;
+               case SIGTERM: txt=strdup("SIGTERM"); break;
+               case SIGQUIT: txt=strdup("SIGQUIT"); break;
+               case SIGSEGV: txt=strdup("SIGSEGV"); break;
+               default:
+                       txt=strdup("UNKNOWN"); break;
+       }
+
+       printf("Tuxwetter Version %s%s killed, signal %s(%d)\n", P_VERSION, S_VERSION, txt, sig);
        put_instance(get_instance()-1);
-       printf("tuxwetter Version %s killed\n",P_VERSION);
+       free(txt);
        exit(1);
 }
 
@@ -241,7 +260,7 @@ int rv=-1,styp=0;
                                        rv=-1;
                                }
                        }
-//                     printf("%s\n%s=%s -> %d\n",tstr,entry,cfptr,rv);
+                       //printf("%s\n%s=%s -> %d\n",tstr,entry,cfptr,rv);
                }
                fclose(nfh);
        }
@@ -299,11 +318,11 @@ int ReadConf(char *iscmd)
                                }
                        if(strstr(line_buffer,"ProxyAdressPort") == line_buffer)
                                {
-                                       proxyadress=strdup(cptr+1);
+                                       proxyadress=(unsigned char*)strdup(cptr+1);
                                }
                        if(strstr(line_buffer,"ProxyUserPwd") == line_buffer)
                                {
-                                       proxyuserpwd=strdup(cptr+1);
+                                       proxyuserpwd=(unsigned char*)strdup(cptr+1);
                                }
                        if(strstr(line_buffer,"ConnectTimeout") == line_buffer)
                                {
@@ -317,11 +336,22 @@ int ReadConf(char *iscmd)
                                {
                                        sscanf(cptr+1,"%d",&loadalways);
                                }
+                       if(strstr(line_buffer,"7-Days") == line_buffer)
+                               {
+                                       int dtmp=0;
+                                       sscanf(cptr+1,"%d",&dtmp);
+                                       if (dtmp == 1)
+                                               num_of_days=7;
+                               }
+#ifdef WWEATHER
+                       if(strstr(line_buffer,"API-Key") == line_buffer)
+#else
                        if(strstr(line_buffer,"PartnerID") == line_buffer)
                                {
                                        strncpy(par,cptr+1,sizeof(par)-1);
                                }
-                       if(strstr(line_buffer,"LicenseKey") == line_buffer)
+                       if(strstr(line_buffer,"licenseKey") == line_buffer)
+#endif
                                {
                                        strncpy(key,cptr+1,sizeof(key)-1);
                                }
@@ -336,18 +366,6 @@ int ReadConf(char *iscmd)
                                                        intype=2;
                                                }
                                }
-
-/*                     if(strstr(line_buffer,"FONT=") == line_buffer)
-                       {
-                               strcpy(FONT,strchr(line_buffer,'=')+1);
-                       }
-                       if(strstr(line_buffer,"FONTSIZE=") == line_buffer)
-                       {
-                               sscanf(strchr(line_buffer,'=')+1,"%d",&FSIZE_MED);
-                               FSIZE_FSIZE_BIG=(FSIZE_MED*4)/3;
-                               FSIZE_SMALL=(FSIZE_MED*4)/5;
-                       }
-*/
                }
        }
        if(fd_conf)
@@ -357,13 +375,12 @@ int ReadConf(char *iscmd)
 
 int Transform_Entry(char *src, char *trg)
 {
-int type=0,tret=-1,fcnt,fpos,tval,ferr,tsub;   
+int tret=-1,fcnt,fpos,tval,ferr,tsub;
 int noprint,rndval,loctime=0;
 char /*pstr[512],nstr[512],dstr[50],*/fstr[5],*cptr,*tptr,*aptr;
 time_t stime;
 struct tm *tltime;
 
-       type=0;
        tsub=0;
        *trg=0;
        if((cptr=strchr(src,','))==NULL)
@@ -422,8 +439,7 @@ struct tm *tltime;
                {
                        tltime=gmtime(&stime);
                }       
-//             strncpy(nstr,src,cptr-src);
-//             ++cptr;
+
                fpos=0;
                ferr=0;
                tval=0;
@@ -806,10 +822,12 @@ char *lcptr = NULL, *lcstr= NULL, *lcdptr = NULL;
                        case KEY_VOLUMEUP:      ++m->act_entry;
                                        break;
 
-                       case KEY_PAGEUP :       m->act_entry-=10;
+                       case KEY_LEFT:
+                       case KEY_PAGEUP:        m->act_entry-=10;
                                        break;
 
-                       case KEY_PAGEDOWN :     m->act_entry+=10;
+                       case KEY_RIGHT:
+                       case KEY_PAGEDOWN:      m->act_entry+=10;
                                        break;
 
                        case KEY_OK:
@@ -834,7 +852,7 @@ char *lcptr = NULL, *lcstr= NULL, *lcdptr = NULL;
                                mloop=0;
                                break;
 
-                       case KEY_SETUP:
+                       case KEY_MENU:
                                rv=-98;
                                mloop=0;
                                break;
@@ -1067,11 +1085,13 @@ FILE *fh;
 
 void ShowInfo(MENU *m)
 {
-       int scrollbar_len, scrollbar_ofs, scrollbar_cor, loop;
-       int index=m->act_entry,tind=m->act_entry, sbw=(m->num_entrys>10)?14:0;
+       double scrollbar_len, scrollbar_ofs, scrollbar_cor;
+       int loop, index=m->act_entry,tind=m->act_entry, sbw=(m->num_entrys > LIST_STEP)?14:0;
        char tstr[BUFSIZE], *tptr;
-       int moffs=35, ixw=400, iyw=(m->num_entrys<10)?((m->num_entrys+1)*30+moffs):375, dy, my, mh=iyw-moffs-radius-8, toffs, soffs=4, isx, isy;
-       dy=(m->num_entrys<10)?30:(mh/11);
+       int moffs=35, roffs=8, ixw=400, iyw=(m->num_entrys < LIST_STEP)?((m->num_entrys+1)*30+moffs):375, dy, my, mh, toffs, soffs=4, isx, isy;
+
+       mh=iyw-moffs-roffs-(radius?4:0);
+       dy=(m->num_entrys < LIST_STEP)?30:(mh/(LIST_STEP+1));
        toffs=dy/2;
        my=moffs+dy+toffs;
        
@@ -1084,7 +1104,7 @@ void ShowInfo(MENU *m)
 //     RenderBox(0, 0, ixw, iyw, GRID, CMCS);
 
        // titlebar
-       RenderBox(isx+2, isy+2, ixw-2, moffs+5, radius, CMH);
+       RenderBox(isx+2, isy-2, ixw-2, moffs+roffs, radius, CMH);
 
        //selectbar
        RenderBox(isx+2, isy+moffs+toffs+soffs+(index%10)*dy+2, ixw-sbw-2, dy+2, radius, CMCS);
@@ -1093,12 +1113,12 @@ void ShowInfo(MENU *m)
        if(sbw)
        {
                //sliderframe
-               RenderBox(isx+ixw-sbw, isy+moffs+8, sbw, mh, radius, CMCP1);
+               RenderBox(isx+ixw-sbw, isy+moffs+roffs, sbw, mh, radius, CMCP1);
                //slider
-               scrollbar_len = (double)mh / (double)((m->num_entrys/LIST_STEP+1)*LIST_STEP);
-               scrollbar_ofs = scrollbar_len*(double)((index/LIST_STEP)*LIST_STEP);
+               scrollbar_len = (double)(mh-4) / (double)(((m->num_entrys-1)/LIST_STEP+1)*LIST_STEP);
+               scrollbar_ofs = scrollbar_len*(double)((index/LIST_STEP)*LIST_STEP)+roffs;
                scrollbar_cor = scrollbar_len*(double)LIST_STEP;
-               RenderBox(isx+ixw-sbw, isy+moffs + scrollbar_ofs+8, sbw,  scrollbar_cor , radius, CMCP3);
+               RenderBox(isx+ixw-sbw+2, isy+moffs+scrollbar_ofs+2, sbw-4, scrollbar_cor, radius, CMCP3);
        }
 
        // Title text
@@ -1131,10 +1151,10 @@ void ShowInfo(MENU *m)
                        case 2: RenderCircle(isx+9,isy+my-15,YELLOW); break;
                        case 3: RenderCircle(isx+9,isy+my-15,BLUE0);  break;
 /*
-                       case 0: PaintIcon("/share/tuxbox/neutrino/icons/rot.raw",9,my-17,1); break;
-                       case 1: PaintIcon("/share/tuxbox/neutrino/icons/gruen.raw",9,my-17,1); break;
-                       case 2: PaintIcon("/share/tuxbox/neutrino/icons/gelb.raw",9,my-17,1); break;
-                       case 3: PaintIcon("/share/tuxbox/neutrino/icons/blau.raw",9,my-17,1); break;
+                       case 0: PaintIcon("/share/tuxbox/neutrino/icons/rot.png"  ,isx+25,isy+my-17, 16, 16); break;
+                       case 1: PaintIcon("/share/tuxbox/neutrino/icons/gruen.png",isx+25,isy+my-17, 16, 16); break;
+                       case 2: PaintIcon("/share/tuxbox/neutrino/icons/gelb.png" ,isx+25,isy+my-17, 16, 16); break;
+                       case 3: PaintIcon("/share/tuxbox/neutrino/icons/blau.png" ,isx+25,isy+my-17, 16, 16); break;
 */
                        default:
                                sprintf(tstr,"%1d",(loop % 10)-3);
@@ -1157,9 +1177,8 @@ static int prs_get_city(void)
 char *tptr;
 int cpos;
 int res;
-int len;
 
-       len=strlen(menu.list[menu.act_entry]->entry);
+       int len=strlen(menu.list[menu.act_entry]->entry);
 
        if ((tptr=strchr(menu.list[menu.act_entry]->entry,','))!=NULL)
        {
@@ -1180,6 +1199,14 @@ int len;
                        city_code[0]=0;
                        return 1;
                }
+               if (num_of_days > prs_get_days_count())
+               {
+                       char tstr[64];
+                       sprintf(tstr,"%d-%s", num_of_days, prs_translate("Tage Vorschau nicht möglich", CONVERT_LIST));
+                       ShowMessage(tstr, 1);
+                       city_code[0]=0;
+                       return 1;
+               }
        }
        else
        {
@@ -1193,7 +1220,6 @@ int len;
 
 void clear_screen(void)
 {
-//     for(; sy <= ey; sy++) memset(lbb + sx + var_screeninfo.xres*(sy),TRANSP, ex-sx + 1);
        memset(lbb, TRANSP, fix_screeninfo.line_length*var_screeninfo.yres);
        memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
 }
@@ -1208,30 +1234,27 @@ void show_data(int index)
 #endif
 
 char vstr[512],v2str[512],rstr[512],tstr[512],icon[60];
-int vy=70,col1=40,col2=340;
+int col1=40, vy=70;
+int col2=((preset)?340:300);
 
-int wxw=ex-sx-10;              //box width 
-int wyw=ey-sy;                 //box height
+int wxw=ex-sx-((preset)?120:30);  //box width
+int wyw=ey-sy-((preset)?50:40);   //box height
 int gys=vy;                    //table space top
 int gysf=34;                   //table space bottom
 int gxs=40;                    //table space left
-int gxw=((wxw-(gxs*2))/5) * 5; //table width
+int gxw=((wxw-(gxs*2))/num_of_days) * num_of_days;     //table width
 int gywf=100;                  //table footer height
 int gyw=wyw-vy-gywf-gysf;      //table height
-int gicw=gxw/5;                        //table data width
-int dy=26;                     //linespace
+int gicw=gxw/num_of_days;                      //table data width
 int vxs=0,wsx,wsy;
-int tret=0;
 int prelate=0;
 int rcd;
-int HMED=22;
-int slim=0;                    //using 720x576
+int HMED=((preset)?22:20);
+int dy=26;                     //linespace
+
 time_t atime;
 struct tm *sltime;
-char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
-
-       if (var_screeninfo.xres < 1280)
-               slim=1;
+char tun[2]="C",sun[5]="km/h",dun[6]="km",pun[5]="mbar",iun[7]="mm", cun[20];
 
        clear_screen();
 
@@ -1247,7 +1270,7 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
        if(index!=1)
        {
                RenderBox(wsx, wsy, wxw, wyw, radius, CMC);
-               RenderBox(wsx+2, wsy+2, wxw-2, 44, radius, CMH);
+               RenderBox(wsx+2, wsy+2, wxw-4, 44, radius, CMH);
        }
        else
        {
@@ -1260,19 +1283,21 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
        strcpy(cun,prs_translate("Uhr",CONVERT_LIST));
        if(!metric)
        {
-               sprintf(tun,"F");
-               sprintf(sun,"mph");
-               sprintf(dun,"mi");
-               sprintf(pun,"in");
-               *cun=0;
+               sprintf(tun,"F");     // Fahrenheit
+               sprintf(sun,"mph");   // miles per hour
+               sprintf(dun,"miles");
+               sprintf(pun,"mb");    // millibar
+               sprintf(iun,"inches");
+               *cun=0;               // Uhrzeit
        }
        if(index==-99)
        {
                int i;
                unsigned char grstr[XL+1]={'G'^XX,'r'^XX,'\xFC'^XX,'\xDF'^XX,'e'^XX,' '^XX,'v'^XX,'o'^XX,'m'^XX,' '^XX,'N'^XX,'e'^XX,'w'^XX,'-'^XX,'T'^XX,'u'^XX,'x'^XX,'w'^XX,'e'^XX,'t'^XX,'t'^XX,'e'^XX,'r'^XX,'-'^XX,'T'^XX,'e'^XX,'a'^XX,'m'^XX,'!'^XX,' '^XX,' '^XX,';'^XX,'-'^XX,')'^XX,' '^XX,' '^XX,'w'^XX,'w'^XX,'w'^XX,'.'^XX,'k'^XX,'e'^XX,'y'^XX,'w'^XX,'e'^XX,'l'^XX,'t'^XX,'-'^XX,'b'^XX,'o'^XX,'a'^XX,'r'^XX,'d'^XX,'.'^XX,'c'^XX,'o'^XX,'m'^XX,0};
 
-               sprintf(rstr,"Tuxwetter Version %s",P_VERSION);
-               RenderString(rstr, 0, 34, wxw, CENTER, FSIZE_BIG, CMHT);
+               dy = ((preset)?dy:22);
+               sprintf(rstr,"Tuxwetter    Version %s%s",P_VERSION,S_VERSION);
+               RenderString(rstr, wsx, wsy+34, wxw, CENTER, FSIZE_BIG, CMHT);
 
                sprintf(rstr,"%s",prs_translate("Steuertasten in den Menüs",CONVERT_LIST));
                RenderString(rstr, 0, vy, wxw, CENTER, HMED, GREEN);
@@ -1353,7 +1378,7 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                sprintf(rstr,"%s",prs_translate("nächsten Eintrag anzeigen",CONVERT_LIST));
                RenderString(rstr, col2, vy, wxw-col2, LEFT, HMED, CMCT);
                vy+=dy;
-/*
+
                sprintf(rstr,"%s",prs_translate("Links (in Bildanzeige)",CONVERT_LIST));
                RenderString(rstr, col1, vy, col2-col1, LEFT, HMED, CMCT);
                sprintf(rstr,"%s",prs_translate("neu downloaden (für WebCams)",CONVERT_LIST));
@@ -1365,7 +1390,7 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                sprintf(rstr,"%s",prs_translate("Animation wiederholen",CONVERT_LIST));
                RenderString(rstr, col2, vy, wxw-col2, LEFT, HMED, CMCT);
                vy+=dy;
-*/
+
                sprintf(rstr,"%s",prs_translate("Rot (in fehlenden Übersetzungen)",CONVERT_LIST));
                RenderString(rstr, col1, vy, col2-col1, LEFT, HMED, CMCT);
                sprintf(rstr,"%s",prs_translate("Fehlliste löschen",CONVERT_LIST));
@@ -1382,7 +1407,7 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                        {
                                grstr[i]^=XX;
                        }
-               RenderString(grstr, 0, vy, wxw, CENTER, HMED, CMHT);
+               RenderString((char*)grstr, 0, vy, wxw, CENTER, HMED, CMHT);
                memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
                rcd=GetRCCode();
                while((rcd != KEY_OK) && (rcd != KEY_EXIT))
@@ -1403,9 +1428,9 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                        RenderString(rstr, wsx, wsy+34, wxw, CENTER, FSIZE_BIG, CMHT);
                        RenderLine(gxs,gys,gxs,gys+gyw+gywf,CMCIT);
                        RenderLine(gxs+1,gys,gxs+1,gys+gyw+gywf,CMCIT);
-                       for(i=0; i<5; i++)
+                       for(i=0; i<num_of_days; i++)
                        {
-                               prs_get_val(i, PRE_TEMPH,0,vstr);
+                               prs_get_val(i, PRE_TEMPHC,0,vstr);
                                if(sscanf(vstr,"%d",&tmax[i])!=1)
                                {
                                        if(!i)
@@ -1418,7 +1443,7 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                                tmax[i]=tmax[i-1];
                                        }
                                }
-                               prs_get_val(i, PRE_TEMPL,0,vstr);
+                               prs_get_val(i, PRE_TEMPLC,0,vstr);
                                if(sscanf(vstr,"%d",&tmin[i])!=1)
                                {
                                        tmin[i]=(i)?tmin[i-1]:0;
@@ -1439,25 +1464,28 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                {
                                        maxt=tmin[i];
                                }
-                               if(!show_icons)
-                               {
 #ifdef WWEATHER
-                                       prs_get_dwday(i, PRE_DAY,vstr);
-                                       strcat(vstr,"_SIG");
+                               prs_get_dwday(i, PRE_DAY,vstr);
+                               strcat(vstr,"_SIG");
 #else
-                                       prs_get_day(i, vstr, metric);
-                                       if((pt1=strchr(vstr,','))!=NULL)
-                                       {
-                                               strcpy(pt1,"_SIG");
-                                       }
+                               prs_get_day(i, vstr, metric);
+                               if((pt1=strchr(vstr,','))!=NULL)
+                               {
+                                       strcpy(pt1,"_SIG");
+                               }
 #endif
-                                       strcpy(rstr,prs_translate(vstr,CONVERT_LIST));
+                               strcpy(rstr,prs_translate(vstr,CONVERT_LIST));
+
+                               if(!show_icons) {
                                        RenderString(rstr, gxs+i*gicw, gys+gyw+(FSIZE_BIG/2+gywf/2), gicw, CENTER, FSIZE_BIG, CMCT);//weekday
                                }
+                               else {
+                                       RenderString(rstr, gxs-5+(i*gicw+17), gys+gyw+FSIZE_BIG+5, gicw, LEFT, FSIZE_BIG,CMCT );//weekday
+                               }
                                RenderLine(gxs+(i+1)*gicw,gys,gxs+(i+1)*gicw,gys+gyw+gywf,CMCIT);
                        }
                        RenderLine(gxs+i*gicw+1,gys,gxs+i*gicw+1,gys+gyw+gywf,CMCIT);
-                       tstep=(5*(1+(int)((maxt-mint)/5))+1);
+                       tstep=(num_of_days*(1+(int)((maxt-mint)/num_of_days))+1);
                        tstep=(double)(gyw-5)/tstep;
 
                        RenderLine(gxs,gys,gxs,gys+gyw,CMCIT);
@@ -1468,30 +1496,43 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                        RenderLine(gxs,gys+gyw+2,gxs+gxw,gys+gyw+2,CMCIT);
                        RenderLine(gxs,gys+gyw+gywf,gxs+gxw,gys+gyw+gywf,CMCIT);
                        RenderLine(gxs,gys+gyw+gywf+1,gxs+gxw,gys+gyw+gywf+1,CMCIT);
+                       RenderString((metric)? "°C":"°F", gxs-20, gys-3, 30, RIGHT, FSIZE_SMALL, CMCT);
+                       RenderString((metric)? "°C":"°F", gxs+gxw-20, gys-3, 30, RIGHT, FSIZE_SMALL, CMCT);
                        RenderString(prs_translate("Höchstwerte",CONVERT_LIST), gxs, gys, gxw/2, CENTER, FSIZE_SMALL, YELLOW);
                        RenderString(prs_translate("Tiefstwerte",CONVERT_LIST), gxs+(gxw/2), gys, gxw/2, CENTER, FSIZE_SMALL, GREEN);
 
-                       for(i=1; i<=(5*(1+(int)((maxt-mint)/5))+1); i++)
+                       for(i=1; i<=(num_of_days*(1+(int)((maxt-mint)/num_of_days))+1); i++)
                        {
                                if(i)
                                {
-//                                     RenderLine(gxs,gys+gyw-(i*tstep)-1,gxs+gxw,gys+gyw-(i*tstep)-1,((!(mint+i-1)))?CMCT:CMCIT);
                                        RenderLine(gxs,gys+gyw-(i*tstep)-2,gxs+gxw,gys+gyw-(i*tstep)-2,((!(mint+i-1)))?CMCT:CMCIT);
-                                       if(!((mint+i-1)%5))
+                                       if(!((mint+i-1)%num_of_days))
                                        {
                                                RenderLine(gxs,gys+gyw-(i*tstep)-3,gxs+gxw,gys+gyw-(i*tstep)-3,((!(mint+i-1)))?CMCT:CMCIT);
                                        }
                                        RenderLine(gxs,gys+gyw-(i*tstep)-1,gxs+gxw,gys+gyw-(i*tstep)-1,CMCP3);
                                }
-                               sprintf(vstr,"%d",mint+i-1);
+                               if (metric) {
+                                       sprintf(vstr,"%d",mint+i-1);
+                               }
+                               else {
+                                       sprintf(vstr,"%.1f",(mint+i-1)*1.8+32); // °C to °F
+                               }
                                RenderString(vstr,gxs-35,gys+gyw-(i*tstep)+7, 30, RIGHT, FSIZE_VSMALL, CMCT);
                                RenderString(vstr,gxs+gxw+2,gys+gyw-(i*tstep)+7, 30, RIGHT, FSIZE_VSMALL, CMCT);
                        }
                        RenderLine(gxs,gys+gyw-((i-1)*tstep)-3,gxs+gxw,gys+gyw-((i-1)*tstep)-3,((!(mint+i-1)))?CMCT:CMCIT);
 
 // Geglättete Kurven
+                       int kk,ll;
+                       switch (num_of_days)
+                       {
+                               case 5:   kk=38; ll=40; break;
+                               case 7:   kk=58; ll=60; break;
+                               default:  kk=38; ll=40; break;
+                       }
 
-                       for(i=0; i<5; i++)
+                       for(i=0; i<num_of_days; i++)
                        {
                                tv1=tmin[i];
                                tv2=tmin[i+1];
@@ -1515,11 +1556,11 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                        }
                                }
                        }
-                       for(i=2; i<39; i++)
+                       for(i=2; i<kk; i++)
                        {
                                garr[i]=(garr[i-2]+garr[i-1]+garr[i]+garr[i+1]+garr[i+2])/5.0;
                        }
-                       for(i=1; i<=40; i++)
+                       for(i=1; i<=ll; i++)
                        {
                                pmin=(gys+gyw)-(garr[i-1]-mint+1)*tstep-1;
                                pmax=(gys+gyw)-(garr[i]-mint+1)*tstep-1;
@@ -1527,7 +1568,7 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                RenderLine(gxs+gicw/2+((i-1)*(gicw/10)),pmin+1,gxs+gicw/2+i*(gicw/10),pmax+1,GREEN);
                                RenderLine(gxs+gicw/2+((i-1)*(gicw/10)),pmin+2,gxs+gicw/2+i*(gicw/10),pmax+2,GREEN);
                        }
-                       for(i=vxs; i<5; i++)
+                       for(i=vxs; i<num_of_days; i++)
                        {
                                tv1=tmax[i];
                                tv2=tmax[i+1];
@@ -1551,11 +1592,11 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                        }
                                }
                        }
-                       for(i=2+10*vxs; i<39; i++)
+                       for(i=2+10*vxs; i<kk; i++)
                        {
                                garr[i]=(garr[i-2]+garr[i-1]+garr[i]+garr[i+1]+garr[i+2])/5.0;
                        }
-                       for(i=1+10*vxs; i<=40; i++)
+                       for(i=1+10*vxs; i<=ll; i++)
                        {
                                pmin=(gys+gyw)-(garr[i-1]-mint+1)*tstep-1;
                                pmax=(gys+gyw)-(garr[i]-mint+1)*tstep-1;
@@ -1585,23 +1626,25 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
 
                        if(show_icons)
                        {
-                               for(i=0; i<5; i++)
+                               for(i=0; i<num_of_days; i++)
                                {
                                        prs_get_val(i,PRE_ICON,prelate,vstr);
 #ifdef WWEATHER
                                        if (HTTP_downloadFile(vstr, ICON_FILE, 0, intype, ctmo, 2) == 0)
 #else
-                                       sprintf  (icon,"http://image.weather.com/web/common/intlwxicons/52/%s.gif",vstr);
+                                       snprintf(icon, sizeof(icon), "http://image.weather.com/web/common/intlwxicons/52/%s.gif",vstr);
                                        if (HTTP_downloadFile(icon, ICON_FILE, 0, intype, ctmo, 2) == 0)
 #endif
                                        {
-                                               int picx=80,picy=80;
-                                               tret=pic_on_data(icon,sx+gxs+(i*gicw)+((gicw/2)-(picx/2)),sy+gys+gyw+((gywf/2)-(picy/2)), picx, picy, 5, (i)?((i==4)?1:0):2, 0, 0);
+                                               int picx,picy;
+                                               switch (num_of_days)
+                                               {
+                                                       case 5: picx=picy=80; break;
+                                                       case 7: picx=picy=60; break;
+                                                       default: picx=picy=80; break;
+                                               }
+                                               pic_on_data(icon,sx+gxs+(i*gicw)+((gicw/2)-(picx/2)),sy+gys+gyw+((gywf/2)-(picy/2)), picx, picy, 5, (i)?((i==4)?1:0):2, 0, 0);
                                        }
-                                       prs_get_dwday(i, PRE_DAY,vstr);
-                                       strcat(vstr,"_SIG");
-                                       strcpy(rstr,prs_translate(vstr,CONVERT_LIST));
-                                       RenderString(rstr, gxs+(i*gicw+17), gys+gyw+FSIZE_BIG+5, gicw, LEFT, FSIZE_BIG,CMCT );//weekday
                                }
                        }
 
@@ -1626,7 +1669,7 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
 #ifdef WWEATHER
                                        if (HTTP_downloadFile(vstr, ICON_FILE, 0, intype, ctmo, 2) != 0) 
 #else
-                                       sprintf  (icon,"http://image.weather.com/web/common/intlwxicons/52/%s.gif",vstr);
+                                       snprintf(icon, sizeof(icon), "http://image.weather.com/web/common/intlwxicons/52/%s.gif",vstr);
                                        if (HTTP_downloadFile(icon, ICON_FILE, 0, intype, ctmo, 2) != 0)
 #endif
                                        {
@@ -1635,17 +1678,17 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                }
 
                                sprintf(rstr,"%s",prs_translate("Aktuelles Wetter",CONVERT_LIST));
-                               RenderString(rstr, 0, 34, wxw, CENTER, FSIZE_BIG, CMHT);
+                               RenderString(rstr, wsx, wsy+34, wxw, CENTER, FSIZE_BIG, CMHT);
 
                                sprintf(rstr,"%s",prs_translate("Standort:",CONVERT_LIST));
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, GREEN);
-#ifdef WWEATHER
+/*ifdef WWEATHER
                                prs_get_val(0, ACT_CITY, 0, vstr);
                                RenderString(vstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
 #else
-                               sprintf(rstr,"%s",city_name);
+*/                             sprintf(rstr,"%s",city_name);
                                RenderString(rstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
-#endif
+//#endif
                                vy+=dy;
 
                                sprintf(rstr,"%s",prs_translate("Längengrad:",CONVERT_LIST));
@@ -1709,13 +1752,15 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
 
                                sprintf(rstr,"%s",prs_translate("Temperatur:",CONVERT_LIST));
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, CMCT);
-                               prs_get_val(0, ACT_TEMP, 0, vstr);
-#ifdef WWEATHER
-                               sprintf(rstr,"%s °%s",vstr,tun);
-#else
-                               prs_get_val(0, ACT_FTEMP, 0, v2str);
-                               sprintf(rstr,"%s °%s  %s %s °%s",vstr,tun,prs_translate("gefühlt:",CONVERT_LIST),v2str,tun);
-#endif
+                               if (metric) {
+                                       prs_get_val(0, ACT_TEMPC, 0, vstr);
+                                       prs_get_val(0, ACT_FTEMPC, 0, v2str);
+                               }
+                               else {
+                                       prs_get_val(0, ACT_TEMPF, 0, vstr);
+                                       prs_get_val(0, ACT_FTEMPF, 0, v2str);
+                               }
+                               sprintf(rstr,"%s °%s   %s %s °%s",vstr,tun,prs_translate("gefühlt:",CONVERT_LIST),v2str,tun);
                                RenderString(rstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
                                vy+=dy;
 
@@ -1741,7 +1786,8 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, CMCT);
                                prs_get_val(0, ACT_PRESS, 0, vstr);
 #ifdef WWEATHER
-                               RenderString(vstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
+                               sprintf(rstr,"%s %s",vstr,pun);
+                               RenderString(rstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
 #else
                                prs_get_val(0, ACT_PRTEND, 0, v2str);
                                sprintf(rstr,"%s %s  %s",vstr,pun,v2str);
@@ -1752,7 +1798,12 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                sprintf(rstr,"%s",prs_translate("Wind:",CONVERT_LIST));
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, CMCT);
                                prs_get_val(0, ACT_WINDD, 0, vstr);
-                               prs_get_val(0, ACT_WSPEED, 0, v2str);
+                               if (metric) {
+                                       prs_get_val(0, ACT_WSPEEDK, 0, v2str); //Km
+                               }
+                               else {
+                                       prs_get_val(0, ACT_WSPEEDM, 0, v2str); //miles
+                               }
                                if((strstr(vstr,"windstill")!=NULL) || (strstr(v2str,"CALM")!=NULL))
                                {
                                        sprintf(rstr,"%s",prs_translate("windstill",CONVERT_LIST));
@@ -1805,7 +1856,13 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, CMCT);
                                prs_get_val(0, ACT_VIS, 0, vstr);
 #ifdef WWEATHER
-                               sprintf(rstr,"%s %s",vstr,dun);
+                               if (metric) {
+                                       sprintf(rstr,"%s %s",vstr,dun);
+                               }
+                               else {
+                                       float mi = 0.621371192 * atoi(vstr)+0.05; // 0.621371192 = 1km
+                                       sprintf(rstr,"%.1f %s",mi,dun);
+                               }
 #else
                                if(sscanf(vstr,"%d",&itmp)==1)
                                {
@@ -1815,22 +1872,27 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                {
                                        strcpy(rstr,vstr);
                                }
-#endif
+#endif         
                                RenderString(rstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
                                vy+=dy;
 #ifdef WWEATHER
                                sprintf(rstr,"%s",prs_translate("Niederschlag:",CONVERT_LIST));
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, CMCT);
                                prs_get_val(0, ACT_PRECIPMM, 0, vstr);
-                               sprintf(rstr,"%s mm",vstr);
+                               if (metric) {
+                                       sprintf(rstr,"%s %s",vstr,iun); // mm
+                               }
+                               else {
+                                       float d1 = 0;
+                                       sscanf(vstr, "%f", &d1);
+                                       sprintf(rstr,"%.2f %s",d1*0.03937,iun); // inches
+                               }
 #else
                                sprintf(rstr,"%s",prs_translate("UV-Index:",CONVERT_LIST));
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, CMCT);
-
                                prs_get_val(0, ACT_UVIND, 0, vstr);
                                prs_get_val(0, ACT_UVTEXT, 0, v2str);
                                sprintf(rstr,"%s  %s",vstr,v2str);
-
                                RenderString(rstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
                                vy+=dy;
 
@@ -1842,17 +1904,13 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                RenderString(rstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
                                vy+=dy;
 
-//                             memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres);
-
                                if(show_icons)
                                {
-                                       //tret=pic_on_data(icon, 540, 115, 100, 100, 5, 3, 0, 0);
-                                       if(!slim)
-                                               tret=pic_on_data(icon,700, 115, 100, 100, 5, 3, 0, 0);
+                                       if(preset)
+                                               pic_on_data(icon,col2+350, wsy+115, 100, 100, 5, 3, 0, 0);
                                        else
-                                               tret=pic_on_data(icon,540, 115, 80, 80, 5, 3, 0, 0);
+                                               pic_on_data(icon,col2+200, wsy+115, 80, 80, 5, 3, 0, 0);
                                }
-
                                memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
                        }
                        else
@@ -1860,7 +1918,11 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                --index;
                                if(index==1)
                                {
-                                       prs_get_val(index-1, PRE_TEMPH, 0, vstr);
+                                       if (metric)
+                                               prs_get_val(index-1, PRE_TEMPHC, 0, vstr);
+                                       else
+                                               prs_get_val(index-1, PRE_TEMPHF, 0, vstr);
+
                                        if(strstr(vstr,"N/A")!=NULL)
                                        {
                                                prelate=1;
@@ -1880,7 +1942,7 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
 #ifdef WWEATHER
                                        if (HTTP_downloadFile(vstr, ICON_FILE, 0, intype, ctmo, 2) != 0) 
 #else
-                                       sprintf  (icon,"http://image.weather.com/web/common/intlwxicons/52/%s.gif",vstr);
+                                       snprintf(icon, sizeof(icon), "http://image.weather.com/web/common/intlwxicons/52/%s.gif",vstr);
                                        if (HTTP_downloadFile(icon, ICON_FILE,0,intype,ctmo,2) != 0)
 #endif
                                        {
@@ -1902,7 +1964,7 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
 #endif
                                }
                                sprintf(rstr,"%s %s",prs_translate("Vorschau für",CONVERT_LIST),vstr);
-                               RenderString(rstr, 0, 34, wxw, CENTER, FSIZE_BIG, CMHT);
+                               RenderString(rstr, wsx, wsy+34, wxw, CENTER, FSIZE_BIG, CMHT);
 
                                sprintf(rstr,"%s",prs_translate("Standort:",CONVERT_LIST));
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, GREEN);
@@ -1912,14 +1974,20 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
 
                                sprintf(rstr,"%s",prs_translate("Höchste Temperatur:",CONVERT_LIST));
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, CMCT);
-                               prs_get_val(index-1,PRE_TEMPH,0,vstr);
+                               if (metric)
+                                       prs_get_val(index-1, PRE_TEMPHC, 0, vstr);
+                               else
+                                       prs_get_val(index-1, PRE_TEMPHF, 0, vstr);
                                sprintf(rstr,"%s °%s",vstr,tun);
                                RenderString((prelate)?"---":rstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
                                vy+=dy;
 
                                sprintf(rstr,"%s",prs_translate("Tiefste Temperatur:",CONVERT_LIST));
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, CMCT);
-                               prs_get_val(index-1,PRE_TEMPL,0,vstr);
+                               if (metric)
+                                       prs_get_val(index-1, PRE_TEMPLC, 0, vstr);
+                               else
+                                       prs_get_val(index-1, PRE_TEMPLF, 0, vstr);
                                sprintf(rstr,"%s °%s",vstr,tun);
                                RenderString(rstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
                                vy+=dy;
@@ -1960,7 +2028,10 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, CMCT);
 
                                prs_get_val(index-1, PRE_WINDD, 0, vstr);
-                               prs_get_val(index-1, PRE_WSPEED, 0, v2str);
+                               if (metric)
+                                       prs_get_val(0, PRE_WSPEEDK, 0, v2str); //Km/h
+                               else
+                                       prs_get_val(0, PRE_WSPEEDM, 0, v2str); //miles ph
                                sprintf(tstr,"%s",prs_translate("von",CONVERT_LIST));
                                sprintf(rstr,"%s %s %s %s %s",tstr,vstr,prs_translate("mit",CONVERT_LIST),v2str,sun);
 
@@ -1982,15 +2053,20 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, CMCT);
 
                                prs_get_val(index-1, PRE_PRECIPMM, 0, vstr);
-                               sprintf(rstr,"%s mm",vstr);
+                               if (metric) {
+                                       sprintf(rstr,"%s %s",vstr,iun); // mm
+                               }
+                               else {
+                                       float d1 = 0;
+                                       sscanf(vstr, "%f", &d1);
+                                       sprintf(rstr,"%.2f %s",d1*0.03937,iun); // inches
+                               }
                                RenderString(rstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
 #else
                                sprintf(rstr,"%s",prs_translate("Regenrisiko:",CONVERT_LIST));
                                RenderString(rstr, col1, vy, col2-col1, LEFT, FSIZE_MED, CMCT);
-
                                prs_get_val(index-1, PRE_PPCP, 0, vstr);
                                sprintf(rstr,"%s %%",vstr);
-
                                RenderString((prelate)?"---":rstr, col2, vy, wxw-col2, LEFT, FSIZE_MED, CMCT);
 #endif
                                vy+=(1.5*(double)dy);
@@ -2015,7 +2091,7 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
                                sprintf(rstr,"---");
 #else
                                prs_get_val(index-1, PRE_WINDD, 1, vstr);
-                               prs_get_val(index-1, PRE_WSPEED, 1, v2str);
+                               prs_get_val(index-1, PRE_WSPEEDK, 1, v2str);
                                if((strstr(vstr,"windstill")!=NULL) || (strstr(v2str,"CALM")!=NULL))
                                {
                                        sprintf(rstr,"%s",prs_translate("windstill",CONVERT_LIST));
@@ -2055,8 +2131,10 @@ char tun[2]="C",sun[5]="km/h",dun[3]="km",pun[5]="mbar",cun[20];
 
                                if(show_icons)
                                {
-                                       //tret=pic_on_data(icon, 540, 115, 100, 100, 5, 3, 0, 0);
-                                       tret=pic_on_data(icon,slim?540:700, 115, 100, 100, 5, 3, 0, 0);
+                                       if(preset)
+                                               pic_on_data(icon,col2+350, wsy+115, 100, 100, 5, 3, 0, 0);
+                                       else
+                                               pic_on_data(icon,col2+200, wsy+115, 80, 80, 5, 3, 0, 0);
                                }
 
                                memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
@@ -2070,7 +2148,6 @@ void scale_pic(unsigned char **buffer, int x1, int y1, int xstart, int ystart, i
 {
        float xfact=0, yfact=0;
        int txsize=0, tysize=0;
-       int tempx =0, tempy=0;
        int txstart =xstart, tystart= ystart;
        
        if (xsize > (ex-xstart)) txsize= (ex-xstart);
@@ -2104,9 +2181,7 @@ void scale_pic(unsigned char **buffer, int x1, int y1, int xstart, int ystart, i
                        txstart=txstart+xstart;
                }
        }
-       tempx=*imx;
-       tempy=*imy;
-       *buffer=(char*)color_average_resize(*buffer,x1,y1,*imx,*imy);
+       *buffer=(unsigned char*)color_average_resize(*buffer,x1,y1,*imx,*imy);
 
        *dxp=0;
        *dyp=0;
@@ -2124,8 +2199,8 @@ void close_jpg_gif_png(void)
 //     for(; sy <= ey; sy++) memset(lbb + sx + var_screeninfo.xres*(sy),TRANSP, ex-sx + 1);
        memset(lbb, TRANSP, var_screeninfo.xres*var_screeninfo.yres);
        memcpy(lfb, lbb, fix_screeninfo.line_length*var_screeninfo.yres);
-       gmodeon=0; 
 #endif
+       gmodeon=0;
 }
 
 int wait_image(int repeat, int first)
@@ -2304,16 +2379,16 @@ char *buffer=NULL, fname[512];
                                printf("Tuxwetter <invalid GIF-Format>\n");
                                return -1;
                        }
-                       if((buffer=(unsigned char *) malloc(x1*y1*4))==NULL)
+                       if((buffer=(char *) malloc(x1*y1*4))==NULL)
                        {
                                printf(NOMEM);
                                return -1;
                        }
                        if(!(rv=fh_gif_load(fname, buffer, x1, y1)))
                        {
-                               scale_pic(&buffer,x1,y1,xstart,ystart,xsize,ysize,&imx,&imy,&dxp,&dyp,&dxo,&dyo,center);
+                               scale_pic((unsigned char**)&buffer,x1,y1,xstart,ystart,xsize,ysize,&imx,&imy,&dxp,&dyp,&dxo,&dyo,center);
                                fb_set_gmode(1);
-                               fb_display(buffer, imx, imy, dxp, dyp, dxo, dyo, 1, 1);
+                               fb_display((unsigned char*)buffer, imx, imy, dxp, dyp, dxo, dyo, 1, 1);
                                gmodeon=1;
 
                                if(gifs>1)
@@ -2340,7 +2415,7 @@ char *buffer=NULL, fname[512];
                        else
                        {
                                showBusy(startx+3,starty+3,10,0xff,00,00);
-//                             showBusy(startx+10,starty+10,20,170,0,0);
+
                                if(rcg==KEY_EXIT)
                                {
                                        rcg=KEY_OK;
@@ -2438,18 +2513,16 @@ int show_php(char *name, char *title, int plain, int highlite)
 {
 FILE *tfh;
 int x1,y1,cs,rcp,rv=-1,run=1,line=0,action=1,cut;
-int col1,sy=0,dy=26,psx,psy,pxw=/*620*/ex-sx,pyw=/*510*/ey-sy;
+int col1,sy=0,dy=26,psx,psy;
+int pxw=ex-sx-((preset)?120:30);               //box width old 620
+int pyw=ey-sy-((preset)?60:40);                //box height old 510
 
        Center_Screen(pxw,pyw,&psx,&psy);
-       col1=psx+40;
+       col1=psx+((preset)?60:40);
        sy=psy+70;
        if((tfh=fopen(name,"r"))!=NULL)
        {
-/*             if(gmodeon)
-               {
-                       close_jpg_gif_png();
-               }
-*/             fclose(tfh);
+               fclose(tfh);
 
                RenderString("X", psx+pxw/2, psy+pyw/2, 100, LEFT, FSIZE_SMALL, CMCT);
                if(fh_php_getsize(name, plain, &x1, &y1))
@@ -2483,7 +2556,12 @@ int col1,sy=0,dy=26,psx,psy,pxw=/*620*/ex-sx,pyw=/*510*/ey-sy;
                        if(!rv)
                        {
                                rcp=GetRCCode();
-                               while((rcp != KEY_OK) && (rcp != KEY_EXIT) && (rcp != KEY_PAGEUP) && (rcp != KEY_PAGEDOWN) && (rcp != KEY_DOWN) && (rcp != KEY_UP) && (rcp != KEY_VOLUMEUP) && (rcp != KEY_VOLUMEDOWN)&& (rcp != KEY_RED))
+                               while ((rcp != KEY_OK)       && (rcp != KEY_EXIT)      &&
+                                          (rcp != KEY_PAGEUP)   && (rcp != KEY_PAGEDOWN)  &&
+                                          (rcp != KEY_LEFT)     && (rcp != KEY_RIGHT)     &&
+                                          (rcp != KEY_DOWN)     && (rcp != KEY_UP)        &&
+                                          (rcp != KEY_VOLUMEUP) && (rcp != KEY_VOLUMEDOWN)&&
+                                          (rcp != KEY_RED))
                                {
                                        rcp=GetRCCode();
                                }
@@ -2491,13 +2569,15 @@ int col1,sy=0,dy=26,psx,psy,pxw=/*620*/ex-sx,pyw=/*510*/ey-sy;
                                {
                                        rcp=KEY_OK;
                                }
-                               if((rcp != KEY_PAGEUP) && (rcp != KEY_PAGEDOWN))
+                               if( (rcp != KEY_PAGEUP) && (rcp != KEY_PAGEDOWN) &&
+                                       (rcp != KEY_LEFT)   && (rcp != KEY_RIGHT) )
                                {
                                        return rcp;
                                }
                                switch(rcp)
                                {
                                        case KEY_PAGEDOWN:
+                                       case KEY_RIGHT:
                                                if((action=cut)!=0)
                                                {
                                                        line+=5;
@@ -2505,6 +2585,7 @@ int col1,sy=0,dy=26,psx,psy,pxw=/*620*/ex-sx,pyw=/*510*/ey-sy;
                                                break;
                                                
                                        case KEY_PAGEUP:
+                                       case KEY_LEFT:
                                                if(line)
                                                {                               
                                                        if((line-=5)<0)
@@ -2806,7 +2887,7 @@ void read_neutrino_osd_conf(int *ex,int *sx,int *ey, int *sy)
 
 int main (int argc, char **argv)
 {
-int index=0,cindex=0,tv,rcm,rce,ferr=0,tret=-1;
+int index=0,cindex=0,tv,rce,ferr=0,tret=-1;
 int mainloop=1,wloop=1, dloop=1;
 char rstr[BUFSIZE], *rptr;
 char tstr[BUFSIZE];
@@ -2814,229 +2895,229 @@ FILE *tfh;
 LISTENTRY epl={NULL, 0, TYP_TXTPLAIN, TYP_TXTPLAIN, 0, 0, 0};
 PLISTENTRY pl=&epl;
 
-               // if problem with config file return from plugin
-
-               for(tv=1; tv<argc; tv++)
-               {
-                       if((strstr(argv[tv],"-v")==argv[tv])||(strstr(argv[tv],"--Version")==argv[tv]))
-                       {
-                               printf("Tuxwetter Version %s\n",P_VERSION);
-                               return 0;
-                       }
-                       if(*argv[tv]=='/')
-                       {
-                               strcpy(TCF_FILE,argv[tv]);
-                       }
-                       if(strchr(argv[tv],'='))
-                       {
-                               cmdline=strdup(argv[tv]);
-                               TrimString(cmdline);
-                               TranslateString(cmdline);
-                       }
-               }
-
-//             system("ping -c 2 google.com &");
+       // if problem with config file return from plugin
 
-               if((line_buffer=calloc(BUFSIZE+1, sizeof(char)))==NULL)
+       for(tv=1; tv<argc; tv++)
+       {
+               if((strstr(argv[tv],"-v")==argv[tv])||(strstr(argv[tv],"--Version")==argv[tv]))
                {
-                       printf(NOMEM);
-                       return -1;
+                       printf("Tuxwetter Version %s%s\n",P_VERSION,S_VERSION);
+                       return 0;
                }
-       
-               if (!ReadConf(cmdline))
+               if(*argv[tv]=='/')
                {
-                       printf("Tuxwetter <Configuration failed>\n");
-                       return -1;
+                       strcpy(TCF_FILE,argv[tv]);
                }
-       
-               if((trstr=malloc(BUFSIZE))==NULL)
+               if(strchr(argv[tv],'='))
                {
-                       printf(NOMEM);
-                       return -1;
+                       cmdline=strdup(argv[tv]);
+                       TrimString(cmdline);
+                       TranslateString(cmdline);
                }
+       }
+
+//     system("ping -c 2 google.com &");
+
+       if((line_buffer=calloc(BUFSIZE+1, sizeof(char)))==NULL)
+       {
+               printf(NOMEM);
+               return -1;
+       }
+                       if (!ReadConf(cmdline))
+       {
+               printf("Tuxwetter <Configuration failed>\n");
+               return -1;
+       }
 
-               memset(&menu,0,sizeof(MENU));
-               memset(&funcs,0,sizeof(MENU));
+       if((trstr=malloc(BUFSIZE))==NULL)
+       {
+               printf(NOMEM);
+               return -1;
+       }
+
+       memset(&menu,0,sizeof(MENU));
+       memset(&funcs,0,sizeof(MENU));
 /*
-               if((menu.headertxt=calloc(MAX_MENUTXT, sizeof(char*)))==NULL)
-               {
-                       printf(NOMEM);
-                       free(line_buffer);
-                       Clear_List(&menu,-1);
-                       return -1;
-               }
+       if((menu.headertxt=calloc(MAX_MENUTXT, sizeof(char*)))==NULL)
+       {
+               printf(NOMEM);
+               free(line_buffer);
+               Clear_List(&menu,-1);
+               return -1;
+       }
 */
 /*
-               if(Clear_List(&menu,1))
-               {
-                       printf(NOMEM);
-                       free(line_buffer);
-                       Clear_List(&menu,-1);
-                       return -1;
-               }
+       if(Clear_List(&menu,1))
+       {
+               printf(NOMEM);
+               free(line_buffer);
+               Clear_List(&menu,-1);
+               return -1;
+       }
 */
-               if(!cmdline)
-               {
-                       if(Check_Config())
-                       {
-                               printf("<tuxwetter> Unable to read tuxwetter.conf\n");
-                               Clear_List(&menu,-1);
-                               free(line_buffer);
-                               return -1;
-                       }
-               }
-
-               if((funcs.headertxt=calloc(1, sizeof(char*)))==NULL)
+       if(!cmdline)
+       {
+               if(Check_Config())
                {
-                       printf(NOMEM);
-                       free(line_buffer);
+                       printf("<tuxwetter> Unable to read tuxwetter.conf\n");
                        Clear_List(&menu,-1);
-                       Clear_List(&funcs,-1);
+                       free(line_buffer);
                        return -1;
                }
+       }
 
-               read_neutrino_osd_conf(&ex,&sx,&ey, &sy);
-               if((ex == -1) || (sx == -1) || (ey == -1) || (sy == -1)){
-                       sx = 40;
-                       ex = var_screeninfo.xres - 40;
-                       sy = 40;
-                       ey = var_screeninfo.yres - 40;
-               }
-               printf("sx=%i, ex =%i, sy=%i, ey=%i\n", sx, ex, sy, ey);
+       if((funcs.headertxt=calloc(1, sizeof(char*)))==NULL)
+       {
+               printf(NOMEM);
+               free(line_buffer);
+               Clear_List(&menu,-1);
+               Clear_List(&funcs,-1);
+               return -1;
+       }
 
-               for(index=CMCST; index<=CMH; index++)
-               {
-                       sprintf(rstr,"menu_%s_alpha",menucoltxt[index]);
-                       if((tv=Read_Neutrino_Cfg(rstr))>=0)
-                               tr[index]=255-(float)tv*2.55;
+       read_neutrino_osd_conf(&ex,&sx,&ey, &sy);
+       if((ex == -1) || (sx == -1) || (ey == -1) || (sy == -1)){
+               sx = 40;
+               ex = var_screeninfo.xres - 40;
+               sy = 40;
+               ey = var_screeninfo.yres - 40;
+       }
+       //printf("sx=%i, ex =%i, sy=%i, ey=%i \n", sx, ex, sy, ey);
 
-                       sprintf(rstr,"menu_%s_blue",menucoltxt[index]);
-                       if((tv=Read_Neutrino_Cfg(rstr))>=0)
-                               bl[index]=(float)tv*2.55;
+       for(index=CMCST; index<=CMH; index++)
+       {
+               sprintf(rstr,"menu_%s_alpha",menucoltxt[index]);
+               if((tv=Read_Neutrino_Cfg(rstr))>=0)
+                       tr[index]=255-(float)tv*2.55;
 
-                       sprintf(rstr,"menu_%s_green",menucoltxt[index]);
-                       if((tv=Read_Neutrino_Cfg(rstr))>=0)
-                               gn[index]=(float)tv*2.55;
+               sprintf(rstr,"menu_%s_blue",menucoltxt[index]);
+               if((tv=Read_Neutrino_Cfg(rstr))>=0)
+                       bl[index]=(float)tv*2.55;
 
-                       sprintf(rstr,"menu_%s_red",menucoltxt[index]);
-                       if((tv=Read_Neutrino_Cfg(rstr))>=0)
-                               rd[index]=(float)tv*2.55;
-               }
+               sprintf(rstr,"menu_%s_green",menucoltxt[index]);
+               if((tv=Read_Neutrino_Cfg(rstr))>=0)
+                       gn[index]=(float)tv*2.55;
 
-               cindex=CMC;
-               for(index=CMCP0; index<=CMCP3; index++)
-               {
-                       rd[index]=rd[cindex]+25;
-                       gn[index]=gn[cindex]+25;
-                       bl[index]=bl[cindex]+25;
-                       tr[index]=tr[cindex];
-                       cindex=index;
-               }
+               sprintf(rstr,"menu_%s_red",menucoltxt[index]);
+               if((tv=Read_Neutrino_Cfg(rstr))>=0)
+                       rd[index]=(float)tv*2.55;
+       }
 
-               if(Read_Neutrino_Cfg("rounded_corners")>0)
-                       radius=10;
-               else
-                       radius=0;
+       cindex=CMC;
+       for(index=CMCP0; index<=CMCP3; index++)
+       {
+               rd[index]=rd[cindex]+25;
+               gn[index]=gn[cindex]+25;
+               bl[index]=bl[cindex]+25;
+               tr[index]=tr[cindex];
+               cindex=index;
+       }
 
-               fb = open(FB_DEVICE, O_RDWR);
-               if(fb == -1)
-               {
-                       perror("tuxwetter <open framebuffer device>");
-                       exit(1);
-               }
+       if(Read_Neutrino_Cfg("rounded_corners")>0)
+               radius=10;
+       else
+               radius=0;
 
-               InitRC();
+       fb = open(FB_DEVICE, O_RDWR);
+       if(fb == -1)
+       {
+               perror("tuxwetter <open framebuffer device>");
+               exit(1);
+       }
 
-               if((trstr=malloc(BUFSIZE))==NULL)
-               {
-                       printf(NOMEM);
-                       return -1;
-               }
+       InitRC();
+
+       if((trstr=malloc(BUFSIZE))==NULL)
+       {
+               printf(NOMEM);
+               return -1;
+       }
 
        //init framebuffer
 
-               if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1)
-               {
-                       perror("tuxwetter <FBIOGET_FSCREENINFO>\n");
-                       return -1;
-               }
-               if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1)
-               {
-                       perror("tuxwetter <FBIOGET_VSCREENINFO>\n");
-                       return -1;
-               }
-               if(!(lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0)))
-               {
-                       perror("tuxwetter <mapping of Framebuffer>\n");
-                       return -1;
-               }
+       if(ioctl(fb, FBIOGET_FSCREENINFO, &fix_screeninfo) == -1)
+       {
+               perror("tuxwetter <FBIOGET_FSCREENINFO>\n");
+               return -1;
+       }
+       if(ioctl(fb, FBIOGET_VSCREENINFO, &var_screeninfo) == -1)
+       {
+               perror("tuxwetter <FBIOGET_VSCREENINFO>\n");
+               return -1;
+       }
+       if(!(lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0)))
+       {
+               perror("tuxwetter <mapping of Framebuffer>\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 = 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_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)))
+       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_LookupFace(manager, FONT, &face)))
+       {
+               if((error = FTC_Manager_LookupFace(manager, FONT2, &face)))
                {
-                       printf("tuxwetter <FTC_SBitCache_New failed with Errorcode 0x%.2X>\n", error);
+                       printf("tuxwetter <FTC_Manager_LookupFace 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_LookupFace(manager, FONT, &face)))
-               {
-                       if((error = FTC_Manager_LookupFace(manager, FONT2, &face)))
-                       {
-                               printf("tuxwetter <FTC_Manager_LookupFace failed with Errorcode 0x%.2X>\n", error);
-                               FTC_Manager_Done(manager);
-                               FT_Done_FreeType(library);
-                               munmap(lfb, fix_screeninfo.smem_len);
-                               return 2;
-                       }
-                       else
-                               desc.face_id = FONT2;
+                       return 2;
                }
                else
-                       desc.face_id = FONT;
-               
-               use_kerning = FT_HAS_KERNING(face);
+                       desc.face_id = FONT2;
+       }
+       else
+               desc.face_id = FONT;
 
-               desc.flags = FT_LOAD_MONOCHROME;
+       use_kerning = FT_HAS_KERNING(face);
+
+       desc.flags = FT_LOAD_MONOCHROME;
 
        //init backbuffer
 
-               if(!(lbb = malloc(fix_screeninfo.line_length*var_screeninfo.yres)))
-               {
-                       perror("tuxwetter <allocating of Backbuffer>\n");
-                       FTC_Manager_Done(manager);
-                       FT_Done_FreeType(library);
-                       munmap(lfb, fix_screeninfo.smem_len);
-                       return -1;
-               }
+       if(!(lbb = malloc(fix_screeninfo.line_length*var_screeninfo.yres)))
+       {
+               perror("tuxwetter <allocating of Backbuffer>\n");
+               FTC_Manager_Done(manager);
+               FT_Done_FreeType(library);
+               munmap(lfb, fix_screeninfo.smem_len);
+               return -1;
+       }
 
-               memset(lbb, TRANSP, fix_screeninfo.line_length*var_screeninfo.yres);
+       memset(lbb, TRANSP, fix_screeninfo.line_length*var_screeninfo.yres);
 
-               startx = sx;
-               starty = sy;
+       startx = sx;
+       starty = sy;
 
        /* Set up signal handlers. */
        signal(SIGINT, quit_signal);
        signal(SIGTERM, quit_signal);
        signal(SIGQUIT, quit_signal);
+       signal(SIGSEGV, quit_signal);
 
 
 //  Startbildschirm
@@ -3051,7 +3132,7 @@ PLISTENTRY pl=&epl;
                show_jpg("/tmp/startbild.jpg", sx, sy, ex-sx, ey-sy, 5, 0, 1, 1);
                xremove("/tmp/startbild.jpg");
 #endif
-               show_jpg("/var/tuxbox/config/tuxwetter/startbild.jpg", sx, sy, ex-sx, ey-sy, 5, 0, 1, 1);
+               show_jpg(START_PIC, sx, sy, ex-sx, ey-sy, 5, 0, 1, 1);
        }
 
        //main loop
@@ -3253,8 +3334,9 @@ PLISTENTRY pl=&epl;
                                                                        lrow++;
                                                                }
                                                                LCD_update();
-                                                               ferr=(strlen(line_buffer))?0:-1;
 */
+                                                               ferr=(strlen(line_buffer))?0:-1;
+
                                                                if((!ferr) && ((strcmp(line_buffer,lastpicture)!=0)||(loadalways)) && (pl->pictype!=TYP_TXTHTML))
                                                                {
                                                                        rptr=line_buffer;
@@ -3309,7 +3391,7 @@ PLISTENTRY pl=&epl;
                                                                                                                fprintf(fh2,"<br>");
                                                                                                                while(*pt1)
                                                                                                                {       
-                                                                                                                       if(*pt1==' ' && cnt>40)
+                                                                                                                       if ( *pt1==' ' && cnt > ((preset)?90:40) )
                                                                                                                        {
                                                                                                                                fprintf(fh2,"\n<br>");
                                                                                                                                cnt=0;
@@ -3391,8 +3473,7 @@ PLISTENTRY pl=&epl;
                                                                else
                                                                {
                                                                        close_jpg_gif_png();
-                                                                       sprintf(tstr,"%s",prs_translate("Fehler",CONVERT_LIST));
-                                                                       sprintf(tstr,"%s %d %s.",tstr,ferr,prs_translate("beim Download",CONVERT_LIST));
+                                                                       sprintf(tstr,"%s %d %s.", prs_translate("Fehler",CONVERT_LIST), ferr, prs_translate("beim Download",CONVERT_LIST));
                                                                        ShowMessage(tstr,1);
                                                                        ferr = 0;
                                                                        dloop=-1;
@@ -3416,21 +3497,21 @@ PLISTENTRY pl=&epl;
                                        case TYP_CITY:
                                                if(!prs_get_city())
                                                {
-               
-                                                       rcm = -1;
+
                                                        sprintf(tstr," ");
                                                        
                                                        Clear_List(&funcs, 1);
                                                        funcs.act_entry=0;
                                                        
-                                                       sprintf(tstr,"%s %s",prs_translate("Wetter für",CONVERT_LIST),city_name);
+                                                       sprintf(tstr,"%s %s",prs_translate("Wetterdaten für",CONVERT_LIST),city_name);
                                                        if(funcs.headertxt[0])
                                                        {
                                                                free(funcs.headertxt[0]);
                                                        }
                                                        funcs.headertxt[0]=strdup(tstr);
 
-                                                       for(index=0; index<MAX_FUNCS; index++)
+                                                       int num_of_funcs = (num_of_days==7) ? MAX_FUNCS+2 : MAX_FUNCS;
+                                                       for(index=0; index<num_of_funcs; index++)
                                                        {
 #ifdef WWEATHER
                                                                if(index==2)
@@ -3517,13 +3598,13 @@ PLISTENTRY pl=&epl;
                                                                                                case KEY_VOLUMEDOWN:
                                                                                                        if(--index < 0)
                                                                                                        {                                                       
-                                                                                                               index=MAX_FUNCS-1;
+                                                                                                               index=num_of_funcs-1;
                                                                                                        }
                                                                                                        break;
                                                
                                                                                                case KEY_DOWN:
                                                                                                case KEY_VOLUMEUP:
-                                                                                                       if(++index>=MAX_FUNCS)
+                                                                                                       if(++index>=num_of_funcs)
                                                                                                        {
                                                                                                        index=0;
                                                                                                        }
@@ -3588,20 +3669,21 @@ PLISTENTRY pl=&epl;
        sprintf(tstr,"[ -e /tmp/picture* ] && rm /tmp/picture*");
        system(tstr);
        xremove("/tmp/tuxwettr.tmp");
-       xremove("/tmp/bmps.tar");
+//     xremove("/tmp/bmps.tar");
        xremove("/tmp/icon.gif");
        xremove("/tmp/tempgif.gif");
        xremove(PHP_FILE);
        put_instance(get_instance()-1);
-       
+# if 0
+//     swisstime
        if((tfh=fopen(TIME_FILE,"r"))!=NULL)
        {
                fclose(tfh);
                sprintf(line_buffer,"%s &",TIME_FILE);
                system(line_buffer);
-               free(line_buffer);
        }
-       
+#endif
+       free(line_buffer);
 
        // clear Display
        memset(lbb, TRANSP, fix_screeninfo.line_length*var_screeninfo.yres);
index 819d33e6f2892417dc80d4d82a332f7a22fdf32e..046712487c4a51cdab5dba9b638f3d8d7f29fe39 100644 (file)
@@ -10,9 +10,9 @@
 #include <string.h>
 #include <unistd.h>
 #include <linux/fb.h>
-#if HAVE_DVB_API_VERSION == 3
-#include <linux/input.h>
-#endif
+//#if HAVE_DVB_API_VERSION == 3
+//#include <linux/input.h>
+//#endif
 #include <sys/ioctl.h>
 #include <sys/mman.h>
 #include <sys/socket.h>
@@ -23,9 +23,9 @@
 #include FT_CACHE_H
 #include FT_CACHE_SMALL_BITMAPS_H
 
+//#define WWEATHER
 #define BUFSIZE        4095
 
-#define MISS_FILE      "/var/tuxbox/config/tuxwetter/missing_translations.txt"
 
 enum {LEFT, CENTER, RIGHT};
 
@@ -71,7 +71,7 @@ FT_Bool                       use_kerning;
 #define KEY_HELP                138
 #define KEY_HOME                102
 #define KEY_EXIT                               174
-#define KEY_SETUP               141
+#define KEY_MENU                       139
 #define KEY_PAGEUP              104
 #define KEY_PAGEDOWN            109
 #define KEY_OK                         0x160
@@ -122,7 +122,7 @@ struct fb_fix_screeninfo fix_screeninfo;
 struct fb_var_screeninfo var_screeninfo;
 extern unsigned char rd[],gn[],bl[],tr[];
 
-int startx, starty, sx, ex, sy, ey, debounce, rblock;
+int startx, starty, sx, ex, sy, ey, preset, debounce, rblock;
 extern unsigned sc[8], tc[8];
 extern int instance;
 int get_instance(void);