]> git.webhop.me Git - lcd4linux.git/commitdiff
[lcd4linux @ 2001-02-18 21:15:15 by reinelt]
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sun, 18 Feb 2001 21:15:15 +0000 (21:15 +0000)
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sun, 18 Feb 2001 21:15:15 +0000 (21:15 +0000)
added setiathome client

git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@84 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

Makefile.am
Makefile.in
TODO
seti.c [new file with mode: 0644]
seti.h [new file with mode: 0644]

index 9e4230af71ea0230876a1bb6f4a618285713a236..e57454b868f2966e3d49fffeaceae52dbb721be6 100644 (file)
@@ -20,6 +20,7 @@ parser.c parser.h \
 processor.c processor.h \
 system.c system.h \
 isdn.c isdn.h \
+seti.c seti.h \
 filter.c filter.h \
 udelay.c udelay.h \
 display.c display.h \
index f46d20f614bfb713b85b476ac569413a7b9e6900..9556e858dc3cc81058ea83209a1ee7a06e4aef0a 100644 (file)
@@ -73,7 +73,7 @@ AM_CFLAGS = $(X_CFLAGS) -D_GNU_SOURCE -Wall
 lcd4linux_LDFLAGS = $(X_LIBS)
 @WITH_X_TRUE@lcd4linux_LDADD = -lX11
 
-lcd4linux_SOURCES =  lcd4linux.c debug.c debug.h cfg.c cfg.h lock.c lock.h parser.c parser.h processor.c processor.h system.c system.h isdn.c isdn.h filter.c filter.h udelay.c udelay.h display.c display.h pixmap.c pixmap.h fontmap.c fontmap.h Skeleton.c MatrixOrbital.c BeckmannEgle.c HD44780.c Crystalfontz.c Crystalfontz.h SIN.c PalmPilot.c Raster.c XWindow.c
+lcd4linux_SOURCES =  lcd4linux.c debug.c debug.h cfg.c cfg.h lock.c lock.h parser.c parser.h processor.c processor.h system.c system.h isdn.c isdn.h seti.c seti.h filter.c filter.h udelay.c udelay.h display.c display.h pixmap.c pixmap.h fontmap.c fontmap.h Skeleton.c MatrixOrbital.c BeckmannEgle.c HD44780.c Crystalfontz.c Crystalfontz.h SIN.c PalmPilot.c Raster.c XWindow.c
 
 
 EXTRA_DIST =  lcd4linux.conf.sample lcd4kde.conf lcd4linux.kdelnk lcd4linux.xpm lcd4linux.lsm CREDITS FAQ TODO README.Drivers README.MatrixOrbital README.HD44780 README.Crystalfontz README.X11 README.KDE README.Raster
@@ -93,7 +93,7 @@ X_LIBS = @X_LIBS@
 X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_PRE_LIBS = @X_PRE_LIBS@
 lcd4linux_OBJECTS =  lcd4linux.o debug.o cfg.o lock.o parser.o \
-processor.o system.o isdn.o filter.o udelay.o display.o pixmap.o \
+processor.o system.o isdn.o seti.o filter.o udelay.o display.o pixmap.o \
 fontmap.o Skeleton.o MatrixOrbital.o BeckmannEgle.o HD44780.o \
 Crystalfontz.o SIN.o PalmPilot.o Raster.o XWindow.o
 @WITH_X_TRUE@lcd4linux_DEPENDENCIES = 
@@ -114,7 +114,7 @@ DEP_FILES =  .deps/BeckmannEgle.P .deps/Crystalfontz.P .deps/HD44780.P \
 .deps/Skeleton.P .deps/XWindow.P .deps/cfg.P .deps/debug.P \
 .deps/display.P .deps/filter.P .deps/fontmap.P .deps/isdn.P \
 .deps/lcd4linux.P .deps/lock.P .deps/parser.P .deps/pixmap.P \
-.deps/processor.P .deps/system.P .deps/udelay.P
+.deps/processor.P .deps/seti.P .deps/system.P .deps/udelay.P
 SOURCES = $(lcd4linux_SOURCES)
 OBJECTS = $(lcd4linux_OBJECTS)
 
diff --git a/TODO b/TODO
index 323a7a643fc8c8467e9c538deb796fa205ae6630..06c992ac8b16caa10dcee480b71d08bb4760a092 100644 (file)
--- a/TODO
+++ b/TODO
@@ -33,4 +33,3 @@ is online
 2001-01-27 Axel Ehnert <axel@ehnert.net>
 - display numer of emails in a mailbox
 - display seti@home values
-
diff --git a/seti.c b/seti.c
new file mode 100644 (file)
index 0000000..915cdae
--- /dev/null
+++ b/seti.c
@@ -0,0 +1,257 @@
+/* $ID$
+ *
+ * seti@home specific functions
+ *
+ * Copyright 2001 by Axel Ehnert <Axel@Ehnert.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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.
+ *
+ *
+ * $Log: seti.c,v $
+ * Revision 1.1  2001/02/18 21:15:15  reinelt
+ *
+ * added setiathome client
+ *
+ */
+
+/* 
+ * exported functions:
+ *
+ * Seti (int *perc, int *cput)
+ *   returns 0 if ok, -1 if error
+ *   sets *perc to the percentage completed by seti@home client
+ *   sets *perc to the cpu time used
+ *
+ */
+
+#define FALSE 0
+#define TRUE 1
+
+#define STATEFILE "state.sah"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/time.h>
+
+#include "cfg.h"
+#include "debug.h"
+#include "seti.h"
+
+int Seti (int *perc, int *cput)
+{
+  FILE *fstr;
+  static int err_marker=0; // Was there an erro before -> -2
+  static time_t cnt;       // Time of last calculation
+  static int retry_cnt=0;  // Retry 10 times to find prog=
+  char *dirname;           // Directory of Seti@HOME
+  char *fn;
+  char fn1[200];
+  char *txt;
+  char txt1[100];
+  int  v1=0;
+  int  i;
+  int  l;
+  int  found_perc;         // Flag to show, if we allready found
+  int  found_cpu;          // Flag to show, if we allready found
+  int  interv=-1;
+  char *cinterv;
+
+  /*
+   * Was there an error before? Return any way
+   */
+  if (err_marker == -2) {
+    return (-1);
+  }
+  /*
+    Interval set?
+  */
+  if (interv < 0) {
+    cinterv = cfg_get("pollintseti");
+    if ( cinterv == NULL ) {
+      interv=DEFSETIPOLLEXT;
+    }
+    else {
+      interv = atoi(cinterv);
+    }
+  }
+  /*
+    Is it time to look into the file?
+  */
+  if (time(NULL)>cnt+interv-1) {
+    cnt=time(NULL);
+  }
+  else {
+    return 0;
+  }
+  /*
+    Reread pollext, because it could be changed due to reading a new conf file
+  */
+  cinterv = cfg_get("pollintseti");
+  if ( cinterv == NULL ) {
+    interv=DEFSETIPOLLEXT;
+  }
+  else {
+    interv = atoi(cinterv);
+  }
+  /*
+    Build the filename from the config
+  */
+  dirname=cfg_get("SetiDir");
+  if (dirname==NULL || *dirname=='\0') {
+    error ("%s: missing 'SetiDir' entry!\n", cfg_file());
+    err_marker = -2;
+    return (-1);
+  }
+  
+  fn=&fn1[0];
+  strcpy(fn, dirname);
+  strcat(fn, "/state.sah");
+  /*
+    Open the file
+  */
+  fstr=fopen(fn,"r");
+
+  if (fstr == NULL) {
+    error ("File %s could not be opened!\n", fn);
+    err_marker = -2;
+    return (-1);
+  }
+  /* 
+     Read the file. Break the loop after we found all strings.
+  */
+  found_perc=FALSE;
+  found_cpu=FALSE;
+  txt=&txt1[0];
+
+  while ( ( fgets ( txt1, 100, fstr ) ) != NULL ) {
+    if ( strncmp (txt1, "prog=", 5 ) == 0 ) {
+      txt=strncpy(txt,txt+7,4);
+      txt[4]='\0';
+      debug ("Seti in text: %s", txt);
+      i=sscanf(txt, "%d", &v1);
+      debug ("Seti in numb: %d", v1);
+      *perc=v1;
+      found_perc=TRUE;
+    }
+    if ( strncmp (txt1, "cpu=", 4 ) == 0 ) {
+      l=strstr(txt+4,".")-txt-4;
+      txt=strncpy(txt,txt+4,l);
+      txt[l]='\0';
+      i=sscanf(txt, "%d", &v1);
+      *cput=v1;
+      found_cpu=TRUE;
+    }
+    if (found_perc && found_cpu) {
+      retry_cnt = 0;               // Reset retry counter. WE FOUND!
+      fclose(fstr);
+      return (0);
+    }
+  }
+
+  retry_cnt++;
+  if ( retry_cnt < 10 ) {
+    error ("%s: prog= or cpu= not found in file! Retrying ...\n", fn);
+    return 0;
+  } 
+  else {
+    error ("%s: prog= or cpu= not found in file!\n", fn);
+    err_marker = -2;
+    return (-1);
+  }
+}
+
+
+int newSeti (double *perc, double *cput)
+{
+  static char fn[256];
+  static time_t now=0;
+  static int fd=-2;
+  static double v1=0;
+  static double v2=0;
+  char buffer[8192], *p;
+  
+  *perc=v1;
+  *cput=v2;
+
+  if (fd==-1) return -1;
+  
+  if (time(NULL)==now) return 0;
+  time(&now);
+  
+  if (fd==-2) {
+    char *dir=cfg_get("SetiDir");
+    if (dir==NULL || *dir=='\0') {
+      error ("%s: missing 'SetiDir' entry!\n", cfg_file());
+      fd=-1;
+      return -1;
+    }
+    if (strlen(dir)>sizeof(fn)-sizeof(STATEFILE)-2) {
+      error ("%s: 'SetiDir' too long!\n", cfg_file());
+      fd=-1;
+      return -1;
+    }
+    strcpy(fn, dir);
+    strcat(fn, "/");
+    strcat(fn, STATEFILE);
+  }
+
+  fd = open(fn, O_RDONLY);
+  if (fd==-1) {
+    error ("open(%s) failed: %s", fn, strerror(errno));
+    return -1;
+  }
+
+  if (read (fd, &buffer, sizeof(buffer)-1)==-1) {
+    error ("read(%s) failed: %s", fn, strerror(errno));
+    fd=-1;
+    return -1;
+  }
+  
+  p=strstr(buffer, "prog=");
+  if (p==NULL) {
+    error ("parse(%s) failed: no 'prog=' line", fn);
+    fd=-1;
+    return -1;
+  }
+  if (sscanf(p+5, "%lf", &v1)!=1) {
+    error ("parse(%s) failed: unknown 'prog=' format", fn);
+    fd=-1;
+    return -1;
+  }
+
+  p=strstr(buffer, "cpu=");
+  if (p==NULL) {
+    error ("parse(%s) failed: no 'cpu=' line", fn);
+    fd=-1;
+    return -1;
+  }
+  if (sscanf(p+4, "%lf", &v2)!=1) {
+    error ("parse(%s) failed: unknown 'cpu=' format", fn);
+    fd=-1;
+    return -1;
+  }
+
+  *perc=v1;
+  *cput=v2;
+
+  return 0;
+
+}
diff --git a/seti.h b/seti.h
new file mode 100644 (file)
index 0000000..5855aa4
--- /dev/null
+++ b/seti.h
@@ -0,0 +1,36 @@
+/* $Id: seti.h,v 1.1 2001/02/18 21:15:15 reinelt Exp $
+ *
+ * seti@home specific functions
+ *
+ * Copyright 2001 by Axel Ehnert <Axel@Ehnert.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, 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.
+ *
+ *
+ * $Log: seti.h,v $
+ * Revision 1.1  2001/02/18 21:15:15  reinelt
+ *
+ * added setiathome client
+ *
+ */
+
+#ifndef _SETI_H_
+#define _SETI_H_
+
+#define DEFSETIPOLLEXT 10
+
+int Seti (int *perc, int *cput);
+
+#endif