11 Commits
v1.1 ... master

Author SHA1 Message Date
Morgan Aldridge
ab66e82584 Fixed warning re:unused parameter in readrc() 2020-03-07 12:02:09 -05:00
Morgan Aldridge
ebc53bb8cb Formatting: variables indentation 2020-03-07 11:55:16 -05:00
Morgan Aldridge
af25a06059 Formatting: remove white space 2020-03-07 11:50:48 -05:00
Morgan Aldridge
67f6bf5d9a Formatting: clean up indentation 2020-03-07 11:46:51 -05:00
Morgan Aldridge
ca8f15da73 Formatting: fix spacing around ++ operators 2020-03-07 11:30:06 -05:00
Morgan Aldridge
21b70aa8ba Formatting: fix spacing around parens 2020-03-07 11:28:09 -05:00
Morgan Aldridge
029a115737 Formatting: fix spacing around commas 2020-03-07 11:01:56 -05:00
Morgan Aldridge
7ccb534456 Formatting: remove spaces before semicolons 2020-03-07 10:55:43 -05:00
Morgan Aldridge
d759f5319d Added manual compilation & installation instructions 2020-03-06 11:10:47 -05:00
Morgan Aldridge
0e75409e92 Fix for .mlclockrc parsing 2020-03-06 11:01:08 -05:00
Morgan Aldridge
e8040460b4 Fixes required to compile with clang 2020-03-03 19:04:10 -05:00
2 changed files with 361 additions and 355 deletions

5
README
View File

@@ -5,6 +5,11 @@ HOW TO COMPILE
1) xmkmf 1) xmkmf
2) make 2) make
-or-
1) C_INCLUDE_PATH="/usr/X11R6/include" LIBRARY_PATH="/usr/X11R6/lib" clang -std=c11 -pedantic -D_DEFAULT_SOURCE mlclock.c -o mlclock -lc -lm -lX11 -lXext
2) install -m 755 mlclock /usr/local/bin
HOW TO USE HOW TO USE
Copy mlclockrc file to your home directory as ".mlclockrc" or specifyed name. Copy mlclockrc file to your home directory as ".mlclockrc" or specifyed name.

711
mlclock.c
View File

@@ -34,416 +34,417 @@
#define FORM2 "(%a)%Y.%b.%d" #define FORM2 "(%a)%Y.%b.%d"
#define DEFAULTLANG "C" #define DEFAULTLANG "C"
int Mode ; /* timing of change form */ int Mode; /* timing of change form */
int Near ; /* the distance of activity */ int Near; /* the distance of activity */
int Head ; /* space of window head */ int Head; /* space of window head */
char *Form1 ; /* display form of main */ char *Form1; /* display form of main */
char *Form2 ; /* display form of second */ char *Form2; /* display form of second */
char *LocaleName ; /* locale name */ char *LocaleName; /* locale name */
char *FSName ; /* font set name */ char *FSName; /* font set name */
char *RCFile ; /* path of config file */ char *RCFile; /* path of config file */
int Color[2][3] ; /* the color for font and background */ int Color[2][3]; /* the color for font and background */
int Bold = False ; /* software bold font */ int Bold = False; /* software bold font */
void SetFont( char *localename , Display *dpy , char *fsname ) ;
void readrc() ;
void getRGB( char *color , int *store ) ;
void usage( char *name ) ;
Display *dpy ; void SetFont(char *localename, Display *dpy, char *fsname);
Window win ; void readrc();
XEvent eve ; void getRGB(char *color, int *store);
XRectangle ink, log; void usage(char *name);
GC gc ;
XFontSet fs ;
Colormap cmap ;
struct timeval wait ; Display *dpy;
Window win;
XEvent eve;
XRectangle ink, logical;
GC gc;
XFontSet fs;
Colormap cmap;
void main( int argc , char **argv ){ struct timeval wait;
char str[MAX_FORM] , str2[MAX_FORM] , *form = NULL ;
int screen , sw = False , lsec = 0 , uhead , width , height , i ;
struct tm *tmm ;
time_t tmt ;
Window root , child ; int main(int argc, char **argv) {
int rootx , rooty , wx , wy ; char str[MAX_FORM], str2[MAX_FORM], *form = NULL;
unsigned int key ; int screen, sw = False, lsec = 0, uhead, width, height, i;
XColor xcol ; struct tm *tmm;
XSizeHints hint ; time_t tmt;
int iro[2] ;
Window root, child;
wait.tv_usec = 200000 ; int rootx, rooty, wx, wy;
wait.tv_sec = 0 ; unsigned int key;
XColor xcol;
str[0] = '\0' ; XSizeHints hint;
i = 1 ; int iro[2];
while( i < argc ){
if ( !strcmp( "-display" , argv[i] )){ wait.tv_usec = 200000;
i++ ; wait.tv_sec = 0;
str[0] = '\0';
i = 1;
while ( i < argc ) {
if ( !strcmp("-display", argv[i]) ) {
i++;
if ( argc >= argc ) if ( argc >= argc )
usage( argv[0]) ; usage(argv[0]);
strcpy( str , argv[i] ) ; strcpy(str, argv[i]);
break ; break;
} }
usage(argv[0]) ; usage(argv[0]);
} }
dpy = XOpenDisplay(NULL); dpy = XOpenDisplay(NULL);
if ( dpy == NULL ){ if ( dpy == NULL ) {
fprintf( stderr , "Can't open display.\n" ) ; fprintf(stderr, "Can't open display.\n");
exit(0) ; exit(0);
} }
screen = DefaultScreen( dpy ) ;
gc = DefaultGC( dpy , screen ) ;
cmap = DefaultColormap( dpy , screen ) ;
readrc() ;
if (XSupportsLocale() == False)
fprintf(stderr,"X does not support the locale\n");
SetFont( LocaleName , dpy , FSName ) ;
XSetForeground( dpy , gc , BlackPixel( dpy , screen )) ; screen = DefaultScreen(dpy);
setlocale(LC_TIME, LocaleName ); gc = DefaultGC(dpy, screen);
cmap = DefaultColormap(dpy, screen);
time( &tmt ) ;
tmm = localtime( &tmt ) ; readrc();
if ( XSupportsLocale() == False )
fprintf(stderr,"X does not support the locale\n");
SetFont(LocaleName, dpy, FSName);
XSetForeground(dpy, gc, BlackPixel(dpy, screen));
setlocale(LC_TIME, LocaleName);
time(&tmt);
tmm = localtime(&tmt);
tmm->tm_sec = 59; tmm->tm_sec = 59;
tmm->tm_min = 59; tmm->tm_min = 59;
tmm->tm_hour = 23; tmm->tm_hour = 23;
tmm->tm_mday = 30; tmm->tm_mday = 30;
tmm->tm_yday = 365; tmm->tm_yday = 365;
strftime(str, MAX_FORM, Form1 , tmm); strftime(str, MAX_FORM, Form1, tmm);
XmbTextExtents( fs , str , strlen(str) , &ink, &log); XmbTextExtents(fs, str, strlen(str), &ink, &logical);
width=log.width ; width=logical.width;
uhead = log.y ; uhead = logical.y;
height = log.height ; height = logical.height;
strftime(str, MAX_FORM, Form2 , tmm); strftime(str, MAX_FORM, Form2, tmm);
XmbTextExtents( fs , str , strlen(str) , &ink, &log); XmbTextExtents(fs, str, strlen(str), &ink, &logical);
if ( width < log.width ) if ( width < logical.width )
width = log.width ; width = logical.width;
if ( uhead < log.y ) if ( uhead < logical.y )
uhead = log.y ; uhead = logical.y;
if ( height < log.height ) if ( height < logical.height )
height = log.height ; height = logical.height;
xcol.flags = DoRed|DoGreen|DoBlue ; xcol.flags = DoRed|DoGreen|DoBlue;
for ( i = 0 ; i < 2 ; i ++ ){ for ( i = 0; i < 2; i++ ) {
xcol.red = Color[i][0] ; xcol.red = Color[i][0];
xcol.green = Color[i][1] ; xcol.green = Color[i][1];
xcol.blue = Color[i][2] ; xcol.blue = Color[i][2];
if ( XAllocColor( dpy , cmap , &xcol )) if ( XAllocColor(dpy, cmap, &xcol) )
iro[i] = xcol.pixel ; iro[i] = xcol.pixel;
else fprintf(stderr,"Can't allocate Color \n" ) ;
}
win = XCreateSimpleWindow( dpy , DefaultRootWindow( dpy ) ,
0 , 0 , width + 3 , height + Head + 2 , 0 ,
iro[0] ,iro[1] ) ;
hint.max_width = hint.min_width = width + 3 ;
hint.max_height = hint.min_height = height + Head + 2 ;
hint.flags = PMinSize | PMaxSize;
XSetNormalHints(dpy , win , &hint);
XSelectInput( dpy , win , ButtonReleaseMask ) ;
XStoreName( dpy , win , "mlclock" ) ;
XSetForeground( dpy , gc , iro[0] ) ;
XSync( dpy , 0 );
XMapWindow( dpy ,win ) ;
XSync( dpy , 0 );
str2[0] = '\0' ;
form = Form1 ;
while(1){
select( 0 , (fd_set *)0 , (fd_set *)0 , (fd_set *)0 , &wait) ;
time( &tmt ) ;
tmm = localtime( &tmt ) ;
if ( Mode == FOCUS ){
XQueryPointer( dpy , win , &root , &child , &rootx,&rooty , &wx,&wy,&key);
if (( -Near < wx ) && ( wx < width + Near ) &&
( -Near < wy ) && ( wy < height + Near + Head ))
form = Form2 ;
else
form = Form1 ; }
else else
if ( Mode == CLICK ){ fprintf(stderr,"Can't allocate Color \n");
if( XEventsQueued( dpy, QueuedAfterFlush ) ){ }
XNextEvent( dpy , &eve ) ;
if ( eve.type == ButtonRelease ){ win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy),
if ( !sw ){ 0, 0, width + 3, height + Head + 2, 0,
sw = True ; iro[0], iro[1]);
lsec = tmm->tm_sec ;
form = Form2 ; hint.max_width = hint.min_width = width + 3;
hint.max_height = hint.min_height = height + Head + 2;
hint.flags = PMinSize | PMaxSize;
XSetNormalHints(dpy, win, &hint);
XSelectInput(dpy, win, ButtonReleaseMask);
XStoreName(dpy, win, "mlclock");
XSetForeground(dpy, gc, iro[0]);
XSync(dpy, 0);
XMapWindow(dpy, win);
XSync(dpy, 0);
str2[0] = '\0';
form = Form1;
while (1) {
select(0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &wait);
time(&tmt);
tmm = localtime(&tmt);
if ( Mode == FOCUS ) {
XQueryPointer(dpy, win, &root, &child, &rootx, &rooty, &wx, &wy, &key);
if ( (-Near < wx) && (wx < width + Near) &&
(-Near < wy) && (wy < height + Near + Head) )
form = Form2;
else
form = Form1;
} else if ( Mode == CLICK ) {
if ( XEventsQueued(dpy, QueuedAfterFlush) ) {
XNextEvent(dpy, &eve);
if ( eve.type == ButtonRelease ) {
if ( !sw ) {
sw = True;
lsec = tmm->tm_sec;
form = Form2;
} else {
sw = False;
form = Form1;
}
}
} }
else {
sw = False ; if ( sw ) {
form = Form1 ; if ( tmm->tm_sec < lsec )
tmm->tm_sec += 60;
if ( tmm->tm_sec > lsec + 2 ) {
sw = False;
form = Form1;
}
} }
} }
}
strftime(str, sizeof(str), form, tmm);
if ( sw ){ if ( strcmp(str, str2) ) {
if ( tmm->tm_sec < lsec ) XClearWindow(dpy, win);
tmm->tm_sec += 60 ; XmbDrawString(dpy, win, fs, gc, 1, - uhead + Head + 1, str, strlen(str));
if ( tmm->tm_sec > lsec + 2 ){
sw = False ;
form = Form1 ;
}
}
}
strftime(str, sizeof(str),form , tmm);
if ( strcmp( str , str2 )){
XClearWindow( dpy , win ) ;
XmbDrawString( dpy , win , fs , gc, 1 , - uhead + Head + 1 , str, strlen(str));
if ( Bold ) if ( Bold )
XmbDrawString( dpy , win , fs , gc, 2 , - uhead + Head + 1 , str, strlen(str)); XmbDrawString(dpy, win, fs, gc, 2, - uhead + Head + 1, str, strlen(str));
XSync( dpy , 0 ) ; XSync(dpy, 0);
strcpy( str2 , str ) ; strcpy(str2, str);
} }
} }
return 0;
} }
void SetFont( char *localename , Display *dpy , char *fsname ) void SetFont(char *localename, Display *dpy, char *fsname) {
{
char **miss, *def; char **miss, *def;
int nMiss; int nMiss;
if (setlocale(LC_ALL, localename) == NULL) if ( setlocale(LC_ALL, localename) == NULL )
fprintf(stderr,"Can't set the locale\n"); fprintf(stderr,"Can't set the locale\n");
fs = XCreateFontSet( dpy , fsname , &miss, &nMiss, &def); fs = XCreateFontSet(dpy, fsname, &miss, &nMiss, &def);
if (fs == NULL) if ( fs == NULL )
fprintf(stderr,"Can't get fontset.\n" ) ; fprintf(stderr,"Can't get fontset.\n");
} }
void readrc(){ void readrc() {
int i , end , len , sw1 , cn = 0 ; int i, end, len, sw1, cn = 0;
char string[501] , work[201] , code[100] , data[100] , *ptr ; char string[501], work[201], code[100], data[100], *ptr;
char *fore , *back ; char *fore, *back;
struct _name { struct _name {
char name[10] ; char name[10];
int sw ; int sw;
} ; };
FILE *file ; FILE *file;
struct _name N[] ={
{ "FORM1" , 1 } ,
{ "FORM2" , 2 } ,
{ "NEAR" , 3 } ,
{ "EVENT" , 4 } ,
{ "LOCALE" , 5 } ,
{ "FONTSET" , 6 } ,
{ "HEAD" , 7 } ,
{ "FONTCOLOR" , 8 } ,
{ "BACKCOLOR" , 9 } ,
{ "BOLD" , 10 } ,
{ "" , 0 }} ;
struct _name N[] = {
Mode = Near = Head = NONE ; { "FORM1", 1 },
Form1 = Form2 = LocaleName = FSName = NULL ; { "FORM2", 2 },
{ "NEAR", 3 },
for ( i = 0 ; i < 3 ; i ++ ){ { "EVENT", 4 },
Color[0][i] = 0 ; { "LOCALE", 5 },
Color[1][i] = 0xffff ; { "FONTSET", 6 },
{ "HEAD", 7 },
{ "FONTCOLOR", 8 },
{ "BACKCOLOR", 9 },
{ "BOLD", 10 },
{ "", 0 }
};
Mode = Near = Head = NONE;
Form1 = Form2 = LocaleName = FSName = NULL;
for ( i = 0; i < 3; i++ ) {
Color[0][i] = 0;
Color[1][i] = 0xffff;
} }
RCFile = malloc ( sizeof( RCFILE ) + strlen( getenv("HOME")) + 3 ) ;
sprintf( RCFile , "%s/%s",getenv("HOME"),RCFILE ) ;
if ( ( file = fopen( RCFile , "r" )) == NULL ){ RCFile = malloc(sizeof(RCFILE) + strlen(getenv("HOME")) + 3);
fprintf( stderr , "Can't open \"%s\" file.\n" , RCFile ) ; sprintf(RCFile, "%s/%s", getenv("HOME"), RCFILE);
fprintf( stderr , "Now making rc file.\n" , RCFile ) ;
if ( (file = fopen(RCFile, "r")) == NULL ) {
if ((file = fopen( RCFile , "a" )) == NULL ) fprintf(stderr, "Can't open \"%s\" file.\n", RCFile);
fprintf( stderr , "You can't make rc file in your own dirctory.\n" ) ; fprintf(stderr, "Now making rc file '%s'.\n", RCFile);
else{
fprintf( file , "FORM1 = \"(%%a)%%l:%%M:%%S%%p\"\n") ; if ( (file = fopen(RCFile, "a")) == NULL )
fprintf( file , "FORM2 = \"(%%a)%%b-%%d\"\n") ; fprintf(stderr, "You can't make rc file in your own dirctory.\n");
fprintf( file , "EVENT = FOCUS ; FOCUS or CLICK\n") ; else {
fprintf( file , "NEAR = 10\n" ) ; fprintf(file, "FORM1 = \"(%%a)%%l:%%M:%%S%%p\"\n");
fprintf( file , "LOCALE = \"C\"\n") ; fprintf(file, "FORM2 = \"(%%a)%%b-%%d\"\n");
fprintf( file , "FONTSET = \"-*-*-medium-r-normal--12-*\"\n") ; fprintf(file, "EVENT = FOCUS ; FOCUS or CLICK\n");
fprintf( file , "HEAD = 5\n") ; fprintf(file, "NEAR = 10\n");
fprintf( file , "FONTCOLOR = \"blue\"\n" ) ; fprintf(file, "LOCALE = \"C\"\n");
fprintf( file , "BACKCOLOR = \"white\"\n" ) ; fprintf(file, "FONTSET = \"-*-*-medium-r-normal--12-*\"\n");
fprintf( file , "BOLD = FALSE ; TRUE or FALSE\n" ) ; fprintf(file, "HEAD = 5\n");
fclose ( file ) ; fprintf(file, "FONTCOLOR = \"blue\"\n");
fprintf( stderr , "Created %s file.\n" , RCFile ) ; fprintf(file, "BACKCOLOR = \"white\"\n");
fprintf(file, "BOLD = FALSE ; TRUE or FALSE\n");
fclose(file);
fprintf(stderr, "Created %s file.\n", RCFile);
}
} else {
while ( fgets(string, 500, file) ) {
end = FALSE;
i = 0;
sw1 = False;
while ( string[i] != ';' && string[i] != '\0' && string[i] != '\n' ) {
if ( string[i] == '=' && sw1 == False ) {
string[i] = ' ';
sw1 = True;
}
work[i] = string[i];
i++;
}
work[i] = '\0';
if ( sw1 == False )
continue;
code[0] = '\0';
data[0] = '\0';
sscanf(work, "%s %s", code, data);
if ( code[0] == '\0' )
continue;
i = 0;
while ( True ) {
if ( N[i].name[0] == '\0' ) {
cn = 0;
break;
}
if ( !strcmp(N[i].name, code) ) {
cn = N[i].sw;
break;
}
i++;
}
switch ( cn ) {
case 1:
len = strlen(data);
Form1 = malloc(len);
strcpy(Form1, &data[1]);
Form1[len-2] = '\0';
break;
case 2:
len = strlen(data);
Form2 = malloc(len);
strcpy(Form2, &data[1]);
Form2[len-2] = '\0';
break;
case 3:
Near = atoi(data);
break;
case 4:
if ( !strcmp(data, "FOCUS") ) {
Mode = FOCUS;
break;
}
if ( !strcmp(data, "CLICK") ) {
Mode = CLICK;
break;
}
break;
case 5:
len = strlen(data);
LocaleName = malloc(len);
strcpy(LocaleName, &data[1]);
LocaleName[len-2] = '\0';
break;
case 6:
len = strlen(data);
FSName = malloc(len);
strcpy(FSName, &data[1]);
FSName[len-2] = '\0';
break;
case 7:
Head = atoi(data);
break;
case 8:
len = strlen(data);
fore = malloc(len);
strcpy(fore, &data[1]);
fore[len-2] = '\0';
getRGB(fore, Color[0]);
break;
case 9:
len = strlen(data);
back = malloc(len);
strcpy(back, &data[1]);
back[len-2] = '\0';
getRGB(back, Color[1]);
break;
case 10:
if ( !strcmp(data, "TRUE") ) {
Bold = True;
break;
}
if ( !strcmp(data, "FALSE") ) {
Bold = False;
break;
}
break;
default:
break;
}
} }
} }
else
while( fgets( string , 500 , file )){
end = FALSE ;
i = 0 ;
sw1 = False ;
while( string[i] != ';' && string[i] != '\0' && string[i] != '\n' ){
if ( string[i] == '=' && sw1 == False ){
string[i] = ' ' ;
sw1 = True ;
}
work[i] = string[i++] ;
}
work[i] = '\0' ;
if ( sw1 == False )
continue ;
code[0] = '\0' ;
data[0] = '\0' ;
sscanf( work , "%s %s", code , data) ;
if ( code[0] == '\0' )
continue ;
i = 0 ;
while( True ){
if ( N[i].name[0] == '\0' ){
cn = 0 ;
break ;
}
if ( !strcmp( N[i].name , code )){
cn = N[i].sw ;
break ;
}
i ++ ;
}
switch( cn ){
case 1:
len = strlen( data ) ;
Form1 = malloc( len ) ;
strcpy( Form1 , &data[1] ) ;
Form1[len-2] = '\0' ;
break ;
case 2:
len = strlen( data ) ;
Form2 = malloc( len ) ;
strcpy( Form2 , &data[1] ) ;
Form2[len-2] = '\0' ;
break ;
case 3:
Near = atoi( data ) ;
break;
case 4:
if ( !strcmp( data , "FOCUS" )){
Mode = FOCUS ;
break ;
}
if ( !strcmp( data , "CLICK" )){
Mode = CLICK ;
break ;
}
break ;
case 5:
len = strlen( data ) ;
LocaleName = malloc( len ) ;
strcpy( LocaleName , &data[1] ) ;
LocaleName[len-2] = '\0' ;
break ;
case 6:
len = strlen( data ) ;
FSName = malloc( len ) ;
strcpy( FSName , &data[1] ) ;
FSName[len-2] = '\0' ;
break ;
case 7:
Head = atoi( data ) ;
break;
case 8:
len = strlen( data ) ;
fore = malloc( len ) ;
strcpy( fore , &data[1] ) ;
fore[len-2] = '\0' ;
getRGB( fore , Color[0] ) ;
break ;
case 9:
len = strlen( data ) ;
back = malloc( len ) ;
strcpy( back , &data[1] ) ;
back[len-2] = '\0' ;
getRGB( back , Color[1] ) ;
break ;
case 10:
if ( !strcmp( data , "TRUE" )){
Bold = True ;
break ;
}
if ( !strcmp( data , "FALSE" )){
Bold = False ;
break ;
}
break ;
default:
break ;
}
}
if ( Mode == NONE ) if ( Mode == NONE )
Mode = FOCUS ; Mode = FOCUS;
if ( Near == NONE ) if ( Near == NONE )
Near = NEAR ; Near = NEAR;
if ( Head == NONE ) if ( Head == NONE )
Head = 0 ; Head = 0;
if ( Form1 == NULL ){ if ( Form1 == NULL ) {
Form1 = malloc( strlen( FORM1 ) + 1) ; Form1 = malloc(strlen(FORM1) + 1);
strcpy( Form1 , FORM1 ) ; strcpy(Form1, FORM1);
} }
if ( Form2 == NULL ){ if ( Form2 == NULL ) {
Form2 = malloc( strlen( FORM2 ) + 1) ; Form2 = malloc(strlen(FORM2) + 1);
strcpy( Form2 , FORM2 ) ; strcpy(Form2, FORM2);
} }
if ( FSName == NULL ){ if ( FSName == NULL ) {
FSName = malloc( strlen( DEFAULTFONT ) + 1) ; FSName = malloc(strlen(DEFAULTFONT) + 1);
strcpy( FSName , DEFAULTFONT ) ; strcpy(FSName, DEFAULTFONT);
} }
if ( LocaleName == NULL ){ if ( LocaleName == NULL ) {
ptr = getenv( "LANG" ) ; ptr = getenv("LANG");
if ( ptr == NULL ) if ( ptr == NULL )
ptr = DEFAULTLANG ; ptr = DEFAULTLANG;
LocaleName = malloc( strlen( ptr ) + 1) ; LocaleName = malloc(strlen(ptr) + 1);
strcpy( LocaleName , ptr ) ; strcpy(LocaleName, ptr);
} }
} }
void getRGB( char *color , int *store ){ void getRGB(char *color, int *store) {
int i ; int i;
char tmpcolor[3] ; char tmpcolor[3];
XColor rgb , hard ; XColor rgb, hard;
if ( color[0] == '#' ){ if ( color[0] == '#' ) {
color ++ ; color++;
for ( i = 0 ; i < 3 ; i ++ ){ for ( i = 0; i < 3; i++ ) {
strncpy( tmpcolor , color , 2 ) ; strncpy(tmpcolor, color, 2);
sscanf( tmpcolor , "%x" , store ) ; sscanf(tmpcolor, "%x", store);
(*store) *= 256 ; (*store) *= 256;
color += 2 ; color += 2;
} }
} }
else { else {
XLookupColor( dpy , cmap , color , &rgb , &hard ) ; XLookupColor(dpy, cmap, color, &rgb, &hard);
store[0] = hard.red ; store[0] = hard.red;
store[1] = hard.green ; store[1] = hard.green;
store[2] = hard.blue ; store[2] = hard.blue;
} }
} }
void usage( char *name ){ void usage(char *name) {
printf("%s: usage\n" , name ) ; printf("%s: usage\n", name);
printf(" -display display name\n\n" ) ; printf(" -display display name\n\n");
printf(" Version %s\n" , VERSION ); printf(" Version %s\n", VERSION);
printf(" Written by Hideki Kimata\n") ; printf(" Written by Hideki Kimata\n");
printf(" EMail hideki@hry.info.gifu-u.ac.jp\n" ) ; printf(" EMail hideki@hry.info.gifu-u.ac.jp\n");
printf(" Access to http://www.hry.info.gifu-u.ac.jp/~hideki/index.html\n" ) ; printf(" Access to http://www.hry.info.gifu-u.ac.jp/~hideki/index.html\n");
exit(0) ; exit(0);
} }