/* $Id: Text.c,v 1.9 2003/07/24 04:48:09 reinelt Exp $ * * pure ncurses based text driver * * Copyright 2001 by Leopold Tötsch (lt@toetsch.at) * * 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: Text.c,v $ * Revision 1.9 2003/07/24 04:48:09 reinelt * 'soft clear' needed for virtual rows * * Revision 1.8 2003/02/22 07:53:10 reinelt * cfg_get(key,defval) * * Revision 1.7 2003/02/17 04:27:58 reinelt * Text (curses) driver: cosmetic changes * * Revision 1.6 2002/08/30 03:54:01 reinelt * bug in curses driver fixed * * Revision 1.5 2002/08/19 04:41:20 reinelt * introduced bar.c, moved bar stuff from display.h to bar.h * * Revision 1.4 2001/03/16 16:40:17 ltoetsch * implemented time bar * * Revision 1.3 2001/03/16 09:28:08 ltoetsch * bugfixes * * Revision 1.2 2001/03/09 15:04:53 reinelt * * rename 'raster' to 'Text in Text.c * added TOTO item * * Revision 1.1 2001/03/09 13:08:11 ltoetsch * Added Text driver * * */ /* * * exported fuctions: * * struct LCD Text[] * */ #include #include #include #define min(x,y) (x)<(y)?x:y #ifdef STANDALONE int main(int argc, char *argv[]) { WINDOW *w; int x,y; w = initscr(); for (x=0; x < 255; x++) addch(acs_map[x]); refresh(); sleep(5); endwin(); return 0; } #else #include #include "debug.h" #include "cfg.h" #include "display.h" #include "bar.h" extern int foreground; static LCD Lcd; static WINDOW *w, *err_win; static int err_rows; int Text_clear (int full) { if (full) { werase(w); box(w, 0, 0); } return 0; } int Text_quit(void) { endwin(); return 0; } int Text_init (LCD *Self) { int cols=-1, rows=-1; int scr_cols, scr_rows; char *s; if (!foreground) { error("Text: you want me to display on /dev/null: sorry, I can't"); error("Text: Maybe you want me to run in foreground? Try '-F'"); return -1; } if (sscanf(s=cfg_get("size","20x4"), "%dx%d", &cols, &rows)!=2 || rows<1 || cols<1) { error ("Text: bad size '%s'", s); return -1; } Self->rows=rows; Self->cols=cols; Self->xres=1; Self->yres=1; Lcd=*Self; initscr(); scr_cols=COLS; scr_rows=LINES; debug ("curses thinks that COLS=%d LINES=%d", COLS, LINES); w = newwin(rows+2,cols+2,0,0); err_rows = scr_rows-rows-3; err_rows = min(99, err_rows); debug ("err_rows=%d", err_rows); if (err_rows >= 4) { err_win = newwin(err_rows, scr_cols, rows+3, 0); err_rows -= 3; box(err_win, 0, 0); mvwprintw(err_win,0,3, "Stderr:"); wmove(err_win, 1 , 0); wrefresh(err_win); } Text_clear(1); return w ? 0 : -1; } /* ncures scroll SIGSEGVs on my system, so this is a workaroud */ int curs_err(char *buffer) { static int lines; static char *lb[100]; int start, i; char *p; if (err_win) { /* replace \r, \n with underscores */ while ((p = strpbrk(buffer, "\r\n")) != NULL) *p='_'; if (lines >= err_rows) { free(lb[0]); for (i=1; i<=err_rows; i++) lb[i-1] = lb[i]; start = 0; } else start = lines; lb[lines] = strdup(buffer); for (i=start; i<=lines; i++) { mvwprintw(err_win,i+1,1, "%s", lb[i]); wclrtoeol(err_win); } box(err_win, 0, 0); mvwprintw(err_win,0,3, "Stderr:"); wrefresh(err_win); if (lines < err_rows) lines++; return 1; } return 0; } int Text_put (int row, int col, char *text) { char *p; while ((p = strpbrk(text, "\r\n")) != NULL) { *p='\0'; } if (col < Lcd.cols) { mvwprintw(w, row+1 , col+1, "%.*s", Lcd.cols-col, text); } return 0; } int Text_bar (int type, int row, int col, int max, int len1, int len2) { int len, i; if (cfg_get("TextBar", NULL)) mvwprintw(w, row+1 , col+1, "%d %d %d", max, len1, len2); else { len = min(len1, len2); len = min(len, Lcd.cols-col-1); if (len) { wmove(w, row+1 , col+1); for (i=0; i89 90 91 92 93 94 95 96
/* $Id: plugin_time.c,v 1.5 2005/05/08 04:32:45 reinelt Exp $
 *
 * time plugin
 *
 * Copyright (C) 2003, 2004 Michael Reinelt <reinelt@eunet.at>
 * Copyright (C) 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
 *
 * This file is part of LCD4Linux.
 *
 * LCD4Linux 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.
 *
 * LCD4Linux 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: plugin_time.c,v $
 * Revision 1.5  2005/05/08 04:32:45  reinelt
 * CodingStyle added and applied
 *
 * Revision 1.4  2005/01/18 06:30:23  reinelt
 * added (C) to all copyright statements
 *
 * Revision 1.3  2004/06/26 12:05:00  reinelt
 *
 * uh-oh... the last CVS log message messed up things a lot...
 *
 * Revision 1.2  2004/06/26 09:27:21  reinelt
 *
 * added '-W' to CFLAGS
 * changed all C++ comments to C ones
 * cleaned up a lot of signed/unsigned mistakes
 *
 * Revision 1.1  2004/05/20 07:47:51  reinelt
 * added plugin_time
 *
 */

/* 
 * exported functions:
 *
 * int plugin_init_time (void)
 *  adds some handy time functions
 *
 */


#include "config.h"

#include <time.h>

#include "debug.h"
#include "plugin.h"


static void my_time(RESULT * result)
{
    double value = time(NULL);
    SetResult(&result, R_NUMBER, &value);
}


static void my_strftime(RESULT * result, RESULT * arg1, RESULT * arg2)
{
    char value[256];
    time_t t = R2N(arg2);

    value[0] = '\0';
    strftime(value, sizeof(value), R2S(arg1), localtime(&t));

    SetResult(&result, R_STRING, value);
}


int plugin_init_time(void)
{

    /* register some basic time functions */
    AddFunction("time", 0, my_time);
    AddFunction("strftime", 2, my_strftime);

    return 0;
}

void plugin_exit_time(void)
{
    /* empty */
}