163 lines
4.3 KiB
C
163 lines
4.3 KiB
C
|
/* $Id: marquee_ex.c,v 1.13 2016/12/04 15:22:16 tom Exp $ */
|
||
|
|
||
|
#include <cdk_test.h>
|
||
|
|
||
|
#ifdef HAVE_XCURSES
|
||
|
char *XCursesProgramName = "marquee_ex";
|
||
|
#endif
|
||
|
|
||
|
static char startAttr[100];
|
||
|
static char endAttr[100];
|
||
|
|
||
|
/*
|
||
|
* This spits out help about this demo program.
|
||
|
*/
|
||
|
static void help (char *programName)
|
||
|
{
|
||
|
const char *USAGE = "[-m Message] [-R repeat value] [-d delay value] [-b|r|u|k] [-h]";
|
||
|
|
||
|
printf ("Usage: %s %s\n", programName, USAGE);
|
||
|
printf (" -m TEXT Sets the message to display in the marquee\n");
|
||
|
printf (" If no message is provided, one will be created.\n");
|
||
|
printf (" -R COUNT Repeat the message the given COUNT.\n");
|
||
|
printf (" A of -1 repeats the message forever.\n");
|
||
|
printf (" -d COUNT number of milliseconds to delay between repeats.\n");
|
||
|
printf (" -b display the message with the bold attribute.\n");
|
||
|
printf (" -r display the message with a reversed attribute.\n");
|
||
|
printf (" -u display the message with an underline attribute.\n");
|
||
|
printf (" -k display the message with the blinking attribute.\n");
|
||
|
}
|
||
|
|
||
|
static void myParseAttr (CDK_PARAMS * params, int lower, int upper)
|
||
|
{
|
||
|
if (CDKparamString (params, lower) != 0)
|
||
|
{
|
||
|
char starting[3];
|
||
|
char ending[3];
|
||
|
|
||
|
if (startAttr[0] == '\0')
|
||
|
{
|
||
|
startAttr[0] = '<';
|
||
|
endAttr[0] = '<';
|
||
|
}
|
||
|
sprintf (starting, "/%c", upper);
|
||
|
sprintf (ending, "!%c", upper);
|
||
|
strcat (startAttr, starting);
|
||
|
strcat (endAttr, ending);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int main (int argc, char **argv)
|
||
|
{
|
||
|
/* *INDENT-OFF* */
|
||
|
CDKSCREEN *cdkscreen;
|
||
|
CDKMARQUEE *scrollMessage;
|
||
|
char message[1024];
|
||
|
time_t clck;
|
||
|
|
||
|
CDK_PARAMS params;
|
||
|
char *mesg;
|
||
|
int delay;
|
||
|
int repeat;
|
||
|
/* *INDENT-ON* */
|
||
|
|
||
|
|
||
|
CDKparseParams (argc, argv, ¶ms, "brkud:R:m:hw:" CDK_MIN_PARAMS);
|
||
|
myParseAttr (¶ms, 'b', 'B');
|
||
|
myParseAttr (¶ms, 'r', 'R');
|
||
|
myParseAttr (¶ms, 'k', 'K');
|
||
|
myParseAttr (¶ms, 'u', 'U');
|
||
|
repeat = CDKparamNumber2 (¶ms, 'R', 3);
|
||
|
delay = CDKparamNumber2 (¶ms, 'd', 5);
|
||
|
mesg = CDKparamString (¶ms, 'm');
|
||
|
|
||
|
if (CDKparamString (¶ms, 'h') != 0)
|
||
|
help (argv[0]);
|
||
|
|
||
|
/* Clean up the strings. */
|
||
|
cleanChar (message, sizeof (message), '\0');
|
||
|
cleanChar (startAttr, sizeof (startAttr), '\0');
|
||
|
cleanChar (endAttr, sizeof (endAttr), '\0');
|
||
|
|
||
|
/* Put the end of the attributes if they asked for then. */
|
||
|
if (startAttr[0] == '<')
|
||
|
{
|
||
|
strcat (startAttr, ">");
|
||
|
strcat (endAttr, ">");
|
||
|
}
|
||
|
|
||
|
cdkscreen = initCDKScreen (NULL);
|
||
|
curs_set (0);
|
||
|
|
||
|
/* Start CDK Colors. */
|
||
|
initCDKColor ();
|
||
|
|
||
|
/* Create the marquee. */
|
||
|
scrollMessage = newCDKMarquee (cdkscreen,
|
||
|
CDKparamValue (¶ms, 'X', CENTER),
|
||
|
CDKparamValue (¶ms, 'Y', TOP),
|
||
|
CDKparamValue (¶ms, 'w', 30),
|
||
|
CDKparamValue (¶ms, 'N', FALSE),
|
||
|
CDKparamValue (¶ms, 'S', TRUE));
|
||
|
|
||
|
/* Check if the marquee is null. */
|
||
|
if (scrollMessage == 0)
|
||
|
{
|
||
|
/* Exit Cdk. */
|
||
|
destroyCDKScreen (cdkscreen);
|
||
|
endCDK ();
|
||
|
|
||
|
printf ("Cannot create the marquee window. Is the window too small?\n");
|
||
|
ExitProgram (EXIT_FAILURE);
|
||
|
}
|
||
|
|
||
|
/* Draw the CDK screen. */
|
||
|
refreshCDKScreen (cdkscreen);
|
||
|
|
||
|
/* Create the marquee message. */
|
||
|
if (mesg == 0)
|
||
|
{
|
||
|
char *currentTime;
|
||
|
|
||
|
/* Get the current time and chop off the newline. */
|
||
|
time (&clck);
|
||
|
currentTime = ctime (&clck);
|
||
|
currentTime[strlen (currentTime) - 1] = 0;
|
||
|
|
||
|
if (startAttr[0] != '\0')
|
||
|
{
|
||
|
currentTime[strlen (currentTime) - 1] = '\0';
|
||
|
sprintf (message, "%s%s%s (This Space For Rent) ",
|
||
|
startAttr,
|
||
|
currentTime,
|
||
|
endAttr);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprintf (message, "%s (This Space For Rent) ", currentTime);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (startAttr[0] != '\0')
|
||
|
{
|
||
|
sprintf (message, "%s%s%s ", startAttr, mesg, endAttr);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprintf (message, "%s ", mesg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* Run the marquee. */
|
||
|
activateCDKMarquee (scrollMessage, message, delay, repeat, TRUE);
|
||
|
activateCDKMarquee (scrollMessage, message, delay, repeat, FALSE);
|
||
|
activateCDKMarquee (scrollMessage, message, delay, repeat, TRUE);
|
||
|
|
||
|
/* Clean up. */
|
||
|
destroyCDKMarquee (scrollMessage);
|
||
|
destroyCDKScreen (cdkscreen);
|
||
|
endCDK ();
|
||
|
ExitProgram (EXIT_SUCCESS);
|
||
|
}
|