mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-22 12:32:40 +03:00
Ticket #???? (clock support)
Initial step for the clock support. Based on Olegarch (olegarch@linuxinside.com) patches. Signed-off-by: Ilia Maslakov <il.smind@gmail.com>
This commit is contained in:
parent
3e66455662
commit
0855a4157e
12
lib/global.c
12
lib/global.c
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Global structure for some library-related variables
|
Global structure for some library-related variables
|
||||||
|
|
||||||
@ -46,6 +47,17 @@
|
|||||||
|
|
||||||
/*** global variables ****************************************************************************/
|
/*** global variables ****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef SIGACT
|
||||||
|
struct sigaction clock_new, clock_old, clock_dummy;
|
||||||
|
#else
|
||||||
|
void (*clock_alarm) (int);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
unsigned int clock_remain;
|
||||||
|
int op_clock_type = HOUR_MIN_SEC;
|
||||||
|
int clock_ticks;
|
||||||
|
int clock_type;
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
mc_global_t mc_global = {
|
mc_global_t mc_global = {
|
||||||
.mc_run_mode = MC_RUN_FULL,
|
.mc_run_mode = MC_RUN_FULL,
|
||||||
|
14
lib/global.h
14
lib/global.h
@ -146,6 +146,10 @@
|
|||||||
|
|
||||||
/*** enums ***************************************************************************************/
|
/*** enums ***************************************************************************************/
|
||||||
|
|
||||||
|
#define NO_CLOCK 0
|
||||||
|
#define HOUR_MIN_SEC 1
|
||||||
|
#define HOUR_MIN 2
|
||||||
|
|
||||||
/* run mode and params */
|
/* run mode and params */
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
@ -274,7 +278,17 @@ typedef struct
|
|||||||
|
|
||||||
/*** global variables defined in .c file *********************************************************/
|
/*** global variables defined in .c file *********************************************************/
|
||||||
|
|
||||||
|
extern unsigned int clock_remain;
|
||||||
extern mc_global_t mc_global;
|
extern mc_global_t mc_global;
|
||||||
|
extern int op_clock_type;
|
||||||
|
extern int clock_ticks;
|
||||||
|
extern int clock_type;
|
||||||
|
|
||||||
|
#ifdef SIGACT
|
||||||
|
struct sigaction clock_new, clock_old, clock_dummy;
|
||||||
|
#else
|
||||||
|
void (*clock_alarm) (int);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*** declarations of public functions ************************************************************/
|
/*** declarations of public functions ************************************************************/
|
||||||
|
|
||||||
|
@ -205,6 +205,7 @@ tty_init (gboolean mouse_enable, gboolean is_xterm)
|
|||||||
noecho ();
|
noecho ();
|
||||||
keypad (stdscr, TRUE);
|
keypad (stdscr, TRUE);
|
||||||
nodelay (stdscr, FALSE);
|
nodelay (stdscr, FALSE);
|
||||||
|
clock_init ();
|
||||||
|
|
||||||
tty_setup_sigwinch (sigwinch_handler);
|
tty_setup_sigwinch (sigwinch_handler);
|
||||||
}
|
}
|
||||||
|
@ -342,6 +342,7 @@ tty_init (gboolean mouse_enable, gboolean is_xterm)
|
|||||||
do_enter_ca_mode ();
|
do_enter_ca_mode ();
|
||||||
tty_keypad (TRUE);
|
tty_keypad (TRUE);
|
||||||
tty_nodelay (FALSE);
|
tty_nodelay (FALSE);
|
||||||
|
clock_init ();
|
||||||
|
|
||||||
tty_setup_sigwinch (sigwinch_handler);
|
tty_setup_sigwinch (sigwinch_handler);
|
||||||
}
|
}
|
||||||
|
133
lib/tty/tty.c
133
lib/tty/tty.c
@ -78,6 +78,139 @@ sigintr_handler (int signo)
|
|||||||
/*** public functions ****************************************************************************/
|
/*** public functions ****************************************************************************/
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void
|
||||||
|
show_clock (void)
|
||||||
|
{
|
||||||
|
int lngstr;
|
||||||
|
time_t curtime;
|
||||||
|
int yt, xt;
|
||||||
|
|
||||||
|
char timestr[11] = "";
|
||||||
|
|
||||||
|
clock_type = op_clock_type;
|
||||||
|
|
||||||
|
if (clock_type)
|
||||||
|
{
|
||||||
|
curtime = time (0);
|
||||||
|
|
||||||
|
if (clock_type == HOUR_MIN)
|
||||||
|
{
|
||||||
|
lngstr = 6;
|
||||||
|
if (!(strftime (timestr, lngstr, "%R", localtime (&curtime))))
|
||||||
|
strcpy (timestr, "??:??");
|
||||||
|
}
|
||||||
|
else if (clock_type == HOUR_MIN_SEC)
|
||||||
|
{
|
||||||
|
lngstr = 9;
|
||||||
|
if (!(strftime (timestr, lngstr, "%X", localtime (&curtime))))
|
||||||
|
strcpy (timestr, "??:??:??");
|
||||||
|
}
|
||||||
|
|
||||||
|
tty_getyx (&yt, &xt);
|
||||||
|
tty_gotoyx (0, COLS - lngstr);
|
||||||
|
tty_print_string (timestr);
|
||||||
|
tty_gotoyx (yt, xt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void
|
||||||
|
clock_interrupt_handler (void)
|
||||||
|
{
|
||||||
|
if (clock_type)
|
||||||
|
{
|
||||||
|
show_clock ();
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__bsdi__)
|
||||||
|
mc_refresh ();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SIGACT
|
||||||
|
sigaction (SIGALRM, &clock_new, &clock_dummy);
|
||||||
|
#else
|
||||||
|
signal (SIGALRM, clock_interrupt_handler);
|
||||||
|
#endif
|
||||||
|
alarm (clock_ticks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void
|
||||||
|
set_clock_type (int ct)
|
||||||
|
{
|
||||||
|
if (ct == HOUR_MIN_SEC)
|
||||||
|
{
|
||||||
|
/* update every seconds */
|
||||||
|
clock_type = ct;
|
||||||
|
clock_ticks = 1;
|
||||||
|
}
|
||||||
|
else if (ct == HOUR_MIN)
|
||||||
|
{
|
||||||
|
/* update every minits */
|
||||||
|
clock_type = ct;
|
||||||
|
clock_ticks = 60;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* no clock at all */
|
||||||
|
clock_type = 0;
|
||||||
|
clock_ticks = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void
|
||||||
|
clock_init (void)
|
||||||
|
{
|
||||||
|
if (op_clock_type)
|
||||||
|
{
|
||||||
|
set_clock_type (op_clock_type);
|
||||||
|
show_clock ();
|
||||||
|
#ifdef SIGACT
|
||||||
|
clock_new.sa_handler = clock_interrupt_handler;
|
||||||
|
sigemptyset (&clock_new.sa_mask);
|
||||||
|
clock_new.sa_flags = 0;
|
||||||
|
sigaction (SIGALRM, &clock_new, &clock_old);
|
||||||
|
#else
|
||||||
|
clock_alarm = signal (SIGALRM, clock_interrupt_handler);
|
||||||
|
#endif
|
||||||
|
clock_remain = alarm (clock_ticks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void
|
||||||
|
clock_cancel (void)
|
||||||
|
{
|
||||||
|
if (clock_type)
|
||||||
|
{
|
||||||
|
#ifdef SIGACT
|
||||||
|
sigaction (SIGALRM, &clock_old, &clock_dummy);
|
||||||
|
if (clock_old.sa_handler != SIG_IGN)
|
||||||
|
alarm (clock_remain);
|
||||||
|
#else
|
||||||
|
signal (SIGALRM, clock_alarm);
|
||||||
|
if (clock_alarm != SIG_IGN)
|
||||||
|
alarm (clock_remain);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void
|
||||||
|
clock_resume (void)
|
||||||
|
{
|
||||||
|
if (clock_type)
|
||||||
|
clock_interrupt_handler ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check terminal type. If $TERM is not set or value is empty, mc finishes with EXIT_FAILURE.
|
* Check terminal type. If $TERM is not set or value is empty, mc finishes with EXIT_FAILURE.
|
||||||
*
|
*
|
||||||
|
@ -71,6 +71,13 @@ extern int reset_hp_softkeys;
|
|||||||
|
|
||||||
/*** declarations of public functions ************************************************************/
|
/*** declarations of public functions ************************************************************/
|
||||||
|
|
||||||
|
void clock_interrupt_handler (void);
|
||||||
|
void set_clock_type (int ct);
|
||||||
|
void clock_init (void);
|
||||||
|
void clock_cancel (void);
|
||||||
|
void clock_resume (void);
|
||||||
|
void show_clock (void);
|
||||||
|
|
||||||
extern void tty_beep (void);
|
extern void tty_beep (void);
|
||||||
|
|
||||||
/* {{{ Input }}} */
|
/* {{{ Input }}} */
|
||||||
|
@ -226,6 +226,12 @@ menubar_draw (WMenuBar * menubar)
|
|||||||
|
|
||||||
tty_print_char (' ');
|
tty_print_char (' ');
|
||||||
}
|
}
|
||||||
|
if (op_clock_type != NO_CLOCK)
|
||||||
|
{
|
||||||
|
mc_log ("show_clock\n");
|
||||||
|
clock_resume ();
|
||||||
|
show_clock ();
|
||||||
|
}
|
||||||
|
|
||||||
if (menubar->is_dropped)
|
if (menubar->is_dropped)
|
||||||
menubar_draw_drop (menubar);
|
menubar_draw_drop (menubar);
|
||||||
|
Loading…
Reference in New Issue
Block a user