worklog_2.1.orig/README0000644000175000017500000000640413561763026013422 0ustar atsbatsbINTRODUCTION ------------ Worklog is a program that helps you keep track of your time. I wrote this program because I have several projects that require me to keep a timesheet. I sometimes spend 5 minutes here and there doing miscellaneous administrative tasks. Rather than invoke an editor on a timesheet file for every little segment of my time spent doing these tasks, I wanted to leave a clock running and indicate with one or two keystrokes the onset or change of any given task. Worklog is a simple ncurses based program to do just that. INSTALLATION ------------ The home FTP site for worklog is ftp://ftp.truxton.com/pub/ You should also be able to get the latest version at sunsite.unc.edu or via the Linux Software Map. Before compiling worklog you need to have the ncurses package. You can obtain ncurses from prep.ai.mit.edu in the /pub/gnu directory, or from ftp://ftp.truxton.com/pub/ncurses-4.2.tar.gz Optionally modify the default log and config file #defines at the top of worklog.c. To compile worklog, issue the command : make To install worklog and its manpage in /usr/local/[bin,man/man1] : make install Or, if your man-package supports gzipped man pages : make install.zipman To test worklog with the example projects file : worklog project Then look at the time.log* files created. THE PROJECT CONFIGURATION FILE ------------------------------ The project configuration file is a text file. Each project name and key-character is listed on a seperate line in the format : For example, consider the following 4 lines : B:BOWER consultation L:LIS consultation R:Research r:Read NetNews It should be noted that the order of appearance in worklog of the projects listed in the configuration file is REVERSED. The key of each project is used to construct a separate log file, made unique by appending .X to the main log filename, where X is the key character. Usually keys are case-insensitive, however, if you have a key in upper AND lower case, case matters. RUNNING WORKLOG --------------- I like to use an alias like this : alias wl='worklog $HOME/logs/worklog.projects $HOME/logs/worklog.time.log' You should be able to resize your xterm and have worklog automatically adapt to the new scren size, however xterm sometimes does not send SIGWINCH so it may be necessary to force a redraw by pressing control-L. MISCELLANY ---------- Worklog was written by Truxton King Fulton II. I hereby place worklog into the public domain. You can do whatever you want with this program. I assume no responsibility for it. The most current version of worklog can be obtained at : http://www.truxton.com/~trux/software/worklog.tar.gz If you wish to contact me about worklog, please use the address : truxton@truxton.com Thanks to Tim Newsome for improvements incorporated in version 1.3. Thanks to Egil Kvaleberg and Mark Sebastian Fischer for improvements incorporated in version 1.4. Thanks to Mike Butler for suggesting the "categorize afterwards" feature incorporated in version 1.5. Thanks to Vaiva Bichnevicius for suggesting the persistant state time feature. Thanks to Gary for suggesting support for window resizing. Enjoy... worklog_2.1.orig/Makefile0000644000175000017500000000204313470464333014173 0ustar atsbatsbVERSION = 2.1 CFLAGS=-DVERSIONS=\"${VERSION}\" -D_FORTIFY_SOURCE=2 -O -Wall -Wformat -Wformat-security -Werror=format-security LIBS=-lncurses -lm -z now BIN=$(DESTDIR)/usr/bin MAN=$(DESTDIR)/usr/share/man/man1 # uncomment this to allow use of an environment variable to specify the # default working directory where default log and project files are located # and they can be #defined as relative paths in worklog.c DEFAULT_DIR_ENVVAR=HOME #DEFAULT_DIR_ENVVAR=WORKLOGDIR USE_ENV_DIR=-DDEFAULT_DIR_ENVVAR=\"$(DEFAULT_DIR_ENVVAR)\" all: worklog install: all install -D -m 0755 worklog $(BIN)/worklog install -D -m 0644 worklog.1.gz $(MAN)/man1/worklog.1.gz worklog: worklog.c Makefile gcc $(CFLAGS) $(USE_ENV_DIR) worklog.c $(LIBS) -o worklog clean: rm -f worklog dist: - rm -rf worklog-${VERSION} mkdir worklog-${VERSION} cp Makefile README TODO worklog.c worklog.1.gz worklog.lsm projects worklog-${VERSION} cp worklog.lsm distr/worklog-${VERSION}.lsm tar -clzvf distr/worklog-${VERSION}.tar.gz worklog-${VERSION} - rm -rf worklog-${VERSION} worklog_2.1.orig/TODO0000644000175000017500000000023213470464333013221 0ustar atsbatsb ----------------------------------------------------------------------------- ability to add and delete categories (edit "projects") from within worklog worklog_2.1.orig/projects0000644000175000017500000000037013470464333014310 0ustar atsbatsb# Worklog project file # note that projects appear in Worklog in REVERSE order B:BOWER consultation L:LIS consultation I:ISP administration R:Research J:JHU CS work P:Problems email N:Neuroradiology r:Reading NetNews worklog_2.1.orig/worklog.1.gz0000644000175000017500000000144013470464333014720 0ustar atsbatsb^\worklog.1}TMo0 WeA$uiҡAD-y4#vv dE||||d4bލID&XlTf 5++k( b L ^Ah(TY w46β$wxѥZA*'痗|g4͓DD {ͯ5Vi3Gh7SuS!輵,۶!L 'Bɤ#5yFf%(BY8Dx_kW$!\ Ze ˪ ِhBQ$]M=ЊR9&D*ZYIR!AVΐPMhlϝ#%@H q;CO"2Dy%i*D- V-r"?-IB6k9x&+#g"-< T1Y,kr35r㲭P5=tW1o.c$D|,~sN'7CgM2YN;D/<)Ι\f9',bn a-C`?<`=X+!M9](?WhiEKqâ82 _6cs\$b_4؂"NIŸ;NWi7EGhZ\w!X,jҙ6άYVX;@rV%n֮, n;0MӷVy0VonWOm"G$ L$a$jii^!5z^<7worklog_2.1.orig/worklog.c0000644000175000017500000004175013470464333014373 0ustar atsbatsb/* worklog */ /* program for tracking time spent on different projects */ /* Truxton Fulton */ /* March 27, 1995 */ /* Thanks to : Tim Newsome (25 Dec 1995) Egil Kvaleberg (5 Sep 1996) Mark Sebastian Fischer (1 Nov 1996) Mike Butler (22 Jun 1998) Vaiva Bichnevicius (28 Mar 1999) Gary (21 Apr 1999) for suggestions, bug reports, bug fixes, and improvements */ #include "worklog.h" struct project_list { char *name; int key; struct project_list *next; long time; } *project_head=NULL; long fetch_total_time(struct project_list *project) { long result; double partial; char specific_timefile[STRLEN]; char line[STRLEN]; FILE *fa; char timetype[STRLEN]; result=0.0; sprintf(specific_timefile,"%s.%c",log_filename,project->key); fa=fopen(specific_timefile,"r"); if(fa==NULL) { fa=fopen(specific_timefile,"w"); if(fa==NULL) { fprintf(stderr,"ERROR: cannot open specific project log file : %s\n",specific_timefile); perror("fopen"); exit(-1); } } else { for(;1==fscanf(fa,"%[^\n]",line); fscanf(fa,"\n")) { // [Jon Daley: 2009-09-25] make file parsing more accurate // by using the amounts within the brackets, rather than // the (rounded) amounts at the beginning of the line if(2==sscanf(line,"%*[^[][%lf %s :",&partial, timetype)) { if(strcmp(timetype, "hours]") == 0) result+=(long) rint(partial*60.0*60.0) ; else if(strcmp(timetype, "minutes]") == 0) result+=(long) rint(partial*60.0) ; else if(strcmp(timetype, "seconds]") == 0) result+=(long) rint(partial) ; else printf("Couldn't find timetype: %s, %s\n", line, timetype); } else { printf("Couldn't find timestamp: %s\n", line); } } } fclose(fa); return(result); } void read_config_file(char *filename) { FILE *f; char firstchar,colonchar; struct project_list *project; char names[STRLEN]; int linenum; project=(struct project_list *)malloc(sizeof(struct project_list)); project->key=CR; project->next=project_head; project->time=0; project->name=strdup("no category yet"); project_head=project; no_category=project; num_projects=1; linenum=0; project=project_head; f=fopen(filename,"r"); if(f==NULL) { fprintf(stderr,"ERROR: cannot open project configuration file : %s\n",filename); perror("fopen"); exit(-1); } while(!feof(f) && !ferror(f)) { linenum++; for(firstchar=0;!feof(f) && !ferror(f) && firstchar<=13;) fscanf(f,"%c",&firstchar); if(!feof(f) && !ferror(f)) { if(firstchar=='#') { fscanf(f,"%*[^\n]"); } else { /* must read colon seperator */ fscanf(f,"%c",&colonchar); if(colonchar!=':') { fprintf(stderr,"ERROR: second character in project line must be a colon.\n"); fprintf(stderr," on line %d is '%c'\n",linenum,colonchar); exit(-1); } project=(struct project_list *)malloc(sizeof(struct project_list)); project->key=firstchar; project->next=project_head; project->time=fetch_total_time(project); project_head=project; fscanf(f,"%[^\n]",names); project->name=(char *)malloc(1+strlen(names)); sprintf(project->name,"%s",names); num_projects++; } } } if (ferror(f)) { fprintf(stderr,"ERROR: cannot read project configuration file : %s\n",filename); perror("fscanf"); exit(-1); } fclose(f); } /* there are multiple interpretations of what the "Del" key is */ int isdelkey(int keypress) { return((keypress==127) || \ (keypress==8) || \ (keypress==263) || \ (keypress==330)); } void draw_main_screen() { struct project_list *project; int i; /* move(0,0); clrtobot(); */ sprintf(temps,"Worklog version %s",VERSIONS); attron(A_BOLD); mvaddstr(0,5,temps); attroff(A_BOLD); mvaddstr(1,1,"---------------------------"); /* this fixes a weirdness when using 'screen' !! */ for(i=2,project=project_head;project!=NULL;project=project->next,i++) { attron(A_BOLD); if(project->key!=CR) { move(i,1); sprintf(temps," %c",project->key); mvaddstr(i,1,temps); } else mvaddstr(i,1," CR"); attroff(A_BOLD); mvaddstr(i,7,project->name); } i++; move(i,0); clrtoeol(); attron(A_BOLD); mvaddstr(i,3,"DEL"); attroff(A_BOLD); mvaddstr(i,7,"Quit"); i++; move(i,0); clrtoeol(); i++; move(i,0); clrtoeol(); i++; move(i,0); clrtoeol(); i++; move(i,0); clrtoeol(); } void draw_run_options(int key) { int i; attron(A_BOLD); mvaddstr(y_update,1,"->"); attroff(A_BOLD); i=num_projects+3; if(key==CR) { attron(A_BOLD); mvaddstr(i,1," "); mvaddstr(i,7,"Press any of the category keys above to assign time"); attroff(A_BOLD); i++; } attron(A_BOLD); mvaddstr(i,1,"SPACE"); attroff(A_BOLD); mvaddstr(i,7,"Pause clock "); i++; if(key!=CR) { attron(A_BOLD); mvaddstr(i,1," CR"); attroff(A_BOLD); mvaddstr(i,7,"Stop clock and optionally enter description"); i++; } attron(A_BOLD); mvaddstr(i,1," +"); attroff(A_BOLD); mvaddstr(i,7,"Adjust by increasing time"); i++; attron(A_BOLD); mvaddstr(i,1," -"); attroff(A_BOLD); mvaddstr(i,7,"Adjust by decreasing time"); i++; attron(A_BOLD); mvaddstr(i,1," DEL"); attroff(A_BOLD); mvaddstr(i,7,"Quit"); /* ----------- */ if(key==CR) { mvaddstr(1+num_projects,4," "); } else { move(1+num_projects,0); clrtoeol(); } } void alarm_handler(int flag) { (void)flag; double seconds,minutes,hours; signal(SIGALRM,alarm_handler); project_update->time+=1; if(!update_skip_refresh) { delta_time=project_update->time-initial_time; seconds=(double) delta_time; if(fabs(seconds)<60.0) sprintf(temps,"%0.2f seconds",seconds); else { minutes=seconds / 60.0; if(fabs(minutes)<60.0) sprintf(temps,"%0.2f minutes",minutes); else { hours = seconds / 3600.0; sprintf(temps,"%0.2f hours",hours); } } if(project_update!=no_category) { seconds=(double) project_update->time; if(fabs(seconds)<60.0) sprintf(temps2," (total %0.2f seconds)",seconds); else { minutes=seconds / 60.0; if(fabs(minutes)<60.0) sprintf(temps2," (total %0.2f minutes)",minutes); else { hours = seconds / 3600.0; sprintf(temps2," (total %0.2f hours)",hours); } } strcat(temps,temps2); } attron(A_UNDERLINE); move(y_update,x_update); clrtoeol(); mvaddstr(y_update,x_update,temps); attroff(A_UNDERLINE); } } void do_resize() { endwin(); /* usleep(10000); */ /* fprintf(stderr,"{RESIZE}"); */ /* resizeterm(y,x); */ initscr(); cbreak(); noecho(); keypad(stdscr,TRUE); IDLE_Y = LINES-1; draw_main_screen(); if(current_project!=NULL) draw_run_options(current_project->key); } void resize_handler(int flag) { (void)flag; signal(SIGWINCH,resize_handler); ungetch(12); } void exit_handler(int flag) { (void)flag; struct project_list *project; FILE *f; double seconds,minutes,hours; time_t t; f=fopen(log_filename,"a"); if(f==NULL) { fprintf(stderr,"ERROR: cannot open project log file : %s\n",log_filename); perror("fopen"); exit(-1); } fprintf(f,"-- Worklog summary begins : %s --\n",starttimes); for(project=project_head;project!=NULL;project=project->next) { if(!seconds) continue; seconds=(double) project->time; if(fabs(seconds)<60.0) sprintf(temps,"%0.2f seconds",seconds); else { minutes=seconds / 60.0; if(fabs(minutes)<60.0) sprintf(temps,"%0.2f minutes",minutes); else { hours = seconds / 3600.0; sprintf(temps,"%0.2f hours",hours); } } fprintf(f,"%s : total %s\n",project->name,temps); } time(&t); sprintf(temps,"%s",asctime(localtime(&t))); if(temps[strlen(temps)-1]<14) temps[strlen(temps)-1]=0; fprintf(f,"-- Worklog summary ends : %s --\n\n",temps); fclose(f); endwin(); fprintf(stderr,"\n"); exit(0); } int clock_on(int key) { struct project_list *project; struct itimerval timer_value; int i,j,found,quit; int keypress; int modification,success; FILE *f,*fa; time_t t; double seconds,minutes,hours; char comments[STRLEN]; char specific_timefile[STRLEN]; comments[0]=0; keypress=key; for(found=0,i=2,project=project_head;!found && project!=NULL;project=project->next,i++) if(project->key==key) /* try to find exact match */ { found=1; break; } if(!found) for(found=0,i=2,project=project_head;!found && project!=NULL;project=project->next,i++) if(tolower(project->key)==tolower(key)) /* try to find case-insensitive match */ { found=1; key=project->key; /* remember exact key */ break; } if(found) { current_project=project; initial_time=project->time; if(key!=CR) /* transfer time from no category */ { project->time+=no_category->time; no_category->time=0; } project_update=project; found=1; j=strlen(project->name)+10; y_update=i; x_update=j; draw_run_options(key); timer_value.it_value.tv_sec=1; timer_value.it_value.tv_usec=0; timer_value.it_interval.tv_sec=1; timer_value.it_interval.tv_usec=0; setitimer(ITIMER_REAL,&timer_value,0); for(quit=0;!quit;) { update_skip_refresh=0; nodelay(stdscr,TRUE); for(keypress=ERR;keypress==ERR;usleep(100000)) keypress=mvgetch(IDLE_Y,IDLE_X); update_skip_refresh=1; nodelay(stdscr,FALSE); switch(keypress) { case ' ' : timer_value.it_value.tv_sec=0; timer_value.it_value.tv_usec=0; timer_value.it_interval.tv_sec=0; timer_value.it_interval.tv_usec=0; setitimer(ITIMER_REAL,&timer_value,0); attron(A_BLINK); mvaddstr(y_update,1,"->"); attroff(A_BLINK); i=num_projects+9; mvaddstr(i,5,"-- Clock paused. Press any key to resume --"); move(i,49); keypress=getch(); move(i,0); clrtoeol(); attron(A_BOLD); mvaddstr(y_update,1,"->"); attroff(A_BOLD); timer_value.it_value.tv_sec=1; timer_value.it_value.tv_usec=0; timer_value.it_interval.tv_sec=1; timer_value.it_interval.tv_usec=0; setitimer(ITIMER_REAL,&timer_value,0); break; case '+' : i=num_projects+9; attrset(A_BOLD); mvaddstr(i,5,"Enter number of minutes to add : "); attrset(A_BOLD); echo(); success=(mvscanw(i,38,"%d",&modification)==1); noecho(); if(success) if(modification<0) success=0; attrset(A_NORMAL); move(i,0); clrtoeol(); if(success) { project->time+=60*modification; } else { beep(); mvaddstr(i,5,"Error : input value must be a positive integer"); mvaddstr(i+1,5,"-- Press any key --"); move(i+1,24); keypress=getch(); move(i,0); clrtoeol(); move(i+1,0); clrtoeol(); } break; case '-' : i=num_projects+9; attrset(A_BOLD); mvaddstr(i,5,"Enter number of minutes to subtract : "); attrset(A_BOLD); echo(); success=(mvscanw(i,43,"%d",&modification)==1); noecho(); if(success) if(modification<0) success=0; attrset(A_NORMAL); move(i,0); clrtoeol(); if(success) { project->time-=60*modification; } else { beep(); mvaddstr(i,5,"Error : input value must be a positive integer"); mvaddstr(i+1,5,"-- Press any key --"); move(i+1,24); keypress=getch(); move(i,0); clrtoeol(); move(i+1,0); clrtoeol(); } break; case CR : if(key!=CR) { i=num_projects+9; attrset(A_BOLD); mvaddstr(i,5,"Enter comment : "); attrset(A_BOLD); echo(); mvgetstr(i,21,comments); noecho(); attrset(A_NORMAL); move(i,0); clrtobot(); quit=1; } break; case 12 : /* control-L */ #ifdef KEY_RESIZE case KEY_RESIZE : /* sent by ncurses sometimes */ #endif do_resize(); break;;; default : beep(); quit=1; break; } } if(key!=CR) { sprintf(specific_timefile,"%s.%c",log_filename,key); f=fopen(log_filename,"a"); if(f==NULL) { fprintf(stderr,"ERROR: cannot open project log file : %s\n",log_filename); perror("fopen"); exit(-1); } fa=fopen(specific_timefile,"a"); if(fa==NULL) { fprintf(stderr,"ERROR: cannot open specific project log file : %s\n",specific_timefile); perror("fopen"); exit(-1); } fprintf(f,"%s ",project->name); delta_time=project->time-initial_time; seconds=(double) delta_time; hours = seconds / 3600.0; sprintf(temps,"%8.2f hours : ",hours); fprintf(fa,"%s",temps); if(strlen(comments)>0) { fprintf(f,"(%s) ",comments); fprintf(fa,"%s",comments); } else fprintf(fa,""); seconds=(double) delta_time; if(fabs(seconds)<60.0) sprintf(temps,"%0.2f seconds",seconds); else { minutes=seconds / 60.0; if(fabs(minutes)<60.0) sprintf(temps,"%0.2f minutes",minutes); else { hours = seconds / 3600.0; sprintf(temps,"%0.2f hours",hours); } } fprintf(f,": %s : finished ",temps); fprintf(fa," : [%s] : finished ",temps); time(&t); sprintf(temps,"%s",asctime(localtime(&t))); if(temps[strlen(temps)-1]<14) temps[strlen(temps)-1]=0; fprintf(f,"%s\n",temps); fprintf(fa,"%s\n",temps); fclose(f); fclose(fa); } timer_value.it_value.tv_sec=0; timer_value.it_value.tv_usec=0; timer_value.it_interval.tv_sec=0; timer_value.it_interval.tv_usec=0; setitimer(ITIMER_REAL,&timer_value,0); update_skip_refresh=0; // compensate for extra time about to be added incorrectly project->time-=1; alarm_handler(0); mvaddstr(y_update,1," "); } else if(!isdelkey(key) && key!=12) { /* fprintf(stderr,"\n%c%cunknown key=%d (press control-L to refresh screen)%c%c\n",10,13,key,10,13); */ beep(); keypress=ERR; } /* no current project now... */ current_project=NULL; return(keypress); } int main(int argc, char **argv) { char *config_filename; int keypress; int quit,i; FILE *lf; time_t t; time(&t); if(argc>1) { if(argc>3 || (strstr(argv[1],"-h")==argv[1]) || (strstr(argv[1],"-?")==argv[1])) { fprintf(stderr,"USAGE: %s [ []]\n",argv[0]); exit(0); } } #ifdef DEFAULT_DIR_ENVVAR else { /* no args given */ const char* default_dir; if((default_dir=getenv(DEFAULT_DIR_ENVVAR))) { if(chdir(default_dir)) { fprintf(stderr,"WARNING: Could not change to default directory ($%s = %s)\n",DEFAULT_DIR_ENVVAR,default_dir); perror("chdir"); } else { fprintf(stderr,"INFO: Using default directory %s (environment variable %s)\n",default_dir,DEFAULT_DIR_ENVVAR); } } } #endif /* def DEFAULT_DIR_ENVVAR */ if (argc>2) log_filename=argv[2]; else log_filename=DEFAULT_LOG_FILE; if (argc>1) config_filename=argv[1]; else config_filename=DEFAULT_CONFIG_FILE; read_config_file(config_filename); lf=fopen(log_filename,"a"); if(lf==NULL) { fprintf(stderr,"ERROR: cannot open project log file : %s\n",log_filename); perror("fopen"); exit(-1); } fclose(lf); sprintf(starttimes,"%s",asctime(localtime(&t))); if(starttimes[strlen(starttimes)-1]<14) starttimes[strlen(starttimes)-1]=0; initscr(); cbreak(); noecho(); keypad(stdscr,TRUE); IDLE_Y = LINES-1; signal(SIGALRM,alarm_handler); signal(SIGHUP,exit_handler); signal(SIGINT,exit_handler); signal(SIGQUIT,exit_handler); signal(SIGTERM,exit_handler); signal(SIGWINCH,resize_handler); keypress=CR; draw_main_screen(); for(quit=0;!quit;) { if(keypress==CR) keypress=mvgetch(IDLE_Y,IDLE_X); keypress=clock_on(keypress); draw_main_screen(); if(keypress==ERR) keypress=mvgetch(IDLE_Y,IDLE_X); if(keypress==12) { do_resize(); keypress=CR; } if(isdelkey(keypress)) { i=num_projects+5; attron(A_BLINK); mvaddstr(i,5,"Press DEL once more to quit"); beep(); attroff(A_BLINK); keypress=mvgetch(IDLE_Y,IDLE_X); mvaddstr(i,5," "); if(isdelkey(keypress)) quit=1; keypress=CR; } } exit_handler(0); return(0); } worklog_2.1.orig/worklog.h0000644000175000017500000000157013470464333014374 0ustar atsbatsb#define DEFAULT_LOG_FILE "worklog_time.log" #define DEFAULT_CONFIG_FILE "projects" #define STRLEN 2048 #define IDLE_X 5 #define CR 10 #define LF 13 #include #include #include #include #include #include #include #include #include #include int num_projects; int x_update,y_update; int IDLE_Y; struct project_list *project_update, *no_category, *current_project=NULL; char temps[STRLEN]; char temps2[STRLEN]; char starttimes[STRLEN]; char *log_filename; int update_skip_refresh; long initial_time,delta_time; long fetch_total_time(struct project_list *); void read_config_file(char *); int isdelkey(int); void draw_main_screen(void); void draw_run_options(int); void alarm_handler(int); void do_resize(void); void resize_handler(int); int clock_on(int); void exit_handler(int); worklog_2.1.orig/worklog.lsm0000644000175000017500000000111113470464333014727 0ustar atsbatsbBegin4 Title: worklog Version: 1.8 Entered-date: 2001-11-24 Description: program for clocking and logging time spent on projects Keywords: timesheet timer clock log Author: truxton@truxton.com (Truxton Fulton) Maintained-by: truxton@truxton.com (Truxton Fulton) Primary-site: http://www.truxton.com/~trux/software/worklog.tar.gz 7kB worklog.tar.gz Alternate-site: Original-site: Platforms: Linux Copying-policy: Public domain End worklog_2.1.orig/worklog0000755000175000017500000007655013561762762014173 0ustar atsbatsbELF>0#@(v@8 @@@@hhxx -)-)PPP (\(l(l8\8l8lDDPtdVVVQtdRtd(\(l(l/lib64/ld-linux-x86-64.so.2GNU8aʻ'#)ptpGNU445em+ 9 !xn^ekeAO- n1`T$*Vs< H^" p(p@plibncurses.so.6_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTablemvscanwnoechowattr_onwclrtobotwgetchwaddnstrungetchendwinwattr_offwclrtoeolwmoveinitscrwgetnstrwattrsetbeeplibtinfo.so.6nodelayLINESkeypadstdscrcbreaklibc.so.6strcpy__printf_chkexitfopenperror__isoc99_sscanfsignalstrdupfeofsetitimerstrstrchdirasctime__fprintf_chkfputc__isoc99_fscanffputsfclosemallocgetenvstderrusleepfwritelocaltime__ctype_tolower_loc__cxa_finalize__sprintf_chk__strcat_chk__libc_start_mainferrorNCURSES6_5.0.19991023NCURSES6_TINFO_5.0.19991023GLIBC_2.3GLIBC_2.7GLIBC_2.2.5GLIBC_2.3.4 S( MW>ii Zii dui nti z(l$0l#ppoooo+o4 p5(p6@p7`nhnpnxnnnnn n n n n nnnnnnnnoooo o(o0o8o@o Ho!Po"Xo#`o$ho%po&xo'o(o)o*o,o-o.o/o0o1o2o3HHOHtH5*N%,N@%*Nh%"Nh%Nh%Nh% Nh%Nh%Mh%Mhp%Mh`%Mh P%Mh @%Mh 0%Mh %Mh %Mh%Mh%Mh%Mh%Mh%Mh%Mh%Mh%zMh%rMhp%jMh`%bMhP%ZMh@%RMh0%JMh %BMh%:Mh%2Mh%*Mh %"Mh!%Mh"%Mh#% Mh$%Mh%%Lh&%Lh'p%Lh(`%Lh)P%Lh*@%Lh+0%Lh, %Lh-%Lh.%Lf1I^HHPTL%H s%H=/!LDH=LHLH9tH^LHt H=yLH5rLH)HH?HHHtH5LHtfD=qLu/UH=LHt H=L-hIL]{HH5FH_\HBHHB=T\H+WdHXdfH*f(fT 32;2f/b )2f(^f(fT2f/cf(H b+H=[EH[H;[fH*@f(fT 11f/0 1f(^f(fT}1f/1f(H +H=KH5KH=:[H=Jc5ZH=JH=Jb5ZH=hJH=IJHH *H=Z ^0H *H=xZH )H=J^R0H )H=IH5ZH=IHH5 HUSH(H5)H=~Q9HHH QH+HǸ}H6IH~H\$H`H8HIH )H=EYH4YHHHр| D H YHF+HHH5H H PH*H=RHH=u(,bf(H 'H=kX0D$^i.H 'H=9XL(XH H'HH[Hd$ff.YfH*[\$f(fT-5-f/6-L$^f(fT-f/6f(H &H=yW;ATUSHH$DOL OH .'H߸H5(HHtHýL% -H$H5&rHHtH HH[]A\H$H')H=SFH=v&-cH H=&uN,Y$fInfTw,f.vX\fInfUf(fVH,HH H=-&uE$,f(fT,f.vX\fUf(fVH,HAHH$H5Z( H$H5%H5%H߸gH$H5%H߸KmHH$H$H5)%NuHH=%x +f(Y$Y*f(fT*f.vX\fUf(fVH,H(AWAVAUATUSHI H@ H4DHCHCH=$|HHDH;TLH5%LHtHAH${LH&H=CH=#HH5$H߸HuHu $ ~Ht.HMH=AƄ$Hyuƀ$#H$H5$H߸;$: CI$AFHBIFLIFL5BILH50#H߸HLHHHILJH5"HH ;B9H=%eD$DH"H=BL"HJuHnH[]A\A]A^A_LHZ%H=AH=t"ttJ øATUSL9"H 6"H=Q H=AKH=@uR H=@H=@u;H-@HdL%!H5QH=@&딺H5!H=q@ 뫺H5PH=W@ H=A@H=.@IHmH H=?:} tZH=?DEH H=EPH=?M0H=?,LH=o? HuH=U?+kH=5?PH=)?T H=?NH=? H=>H=>sH=>H=>sH=>H=>sH=q>H=e>sH=Q>lH=E>p[]A\úH5H=(>,H5HH= >AATUS H==%5BNH== H==_EDc  H==DH=w=b H=X=DH=D=_LA\$ [ H==RH== H=<H=<Dc H=<DH=< H=|<'DH=h<~ H=F<H=3<Nf H=<H=<Q e,DpH=;H=;[]A\úH5H=;G H=;DH=};u8DH=d;u9 H=I;DcH5|H=(;뮺H5H=;뭺H59H=:H5H=:r H=:H=:u8 H=:9H={:u$A\$?H5H=T:뮺H5H=::ºH5kH= : H5TH=:5H5QH=9OH5:H=9deH57H=9G}H5H=9*ApH=p9H5H=O9HGH=!9<9YAH99HtxHAWAVAUATUSHHAƄ$H8H HýD9cB H[HuIcH HL$HýE$Dd$A9 H[H DkAE=wHIcHD4D$AwHHL$H=8ſu(5C@H=7 uǿHHH=7- ~ E#wIcDL 0A H|$EL?H LH5H=?IIH H|$H5,IH H HLtHCH+OHOfH*^yH H=IGLH=5G$| L$LHULLLsfH*Nf(fT f/@  f(^f(fTf/A f(H H=FH uFHLLH UFHL,L$LLHIH H=FgHEHHHр| D H EHLH EHLLLHDŽ$0HDŽ$8HDŽ$ HDŽ$(H$ 'EHk5DH=4H5H=m4HDŽ$0HDŽ$8HDŽ$ HDŽ$(H$ H= 4F5cDH=3H=3<h H=31H=3H=3H=~3H=r3 H=\35CH=E3` H=&3HDŽ$0HDŽ$8HDŽ$ HDŽ$(H$ H5H=2]H5<H=2@H5H=2#GD=:Ao H=g2H=T2o H=:2uH$H&PAAH=1-H=1H=1iH=1A DH=1DH=}1H=q1H=^1yH=R1}DH=>1YH=21]kH5H=1$H=0,H=0H=0k$SPACE +Adjust by increasing time -Adjust by decreasing time DEL%d-- Press any key --Enter comment : %s %8.2f hours : (%s) : %s : finished : [%s] : finished projects-h-?HOMEchdirPress DEL once more to quit worklog_time.logERROR: cannot open project log file : %s -- Worklog summary begins : %s -- -- Worklog summary ends : %s -- ERROR: cannot open specific project log file : %s Couldn't find timetype: %s, %s ERROR: cannot open project configuration file : %s ERROR: second character in project line must be a colon. ERROR: cannot read project configuration file : %s Press any of the category keys above to assign timePause clock Stop clock and optionally enter description-- Clock paused. Press any key to resume --Enter number of minutes to add : Error : input value must be a positive integerEnter number of minutes to subtract : USAGE: %s [ []] WARNING: Could not change to default directory ($%s = %s) INFO: Using default directory %s (environment variable %s) rN@ @0C;XXhM4Lnl% W4di|X@zRx +zRx $xFJ w?;*3$"DP\-D A x$D_hAAD@0BAA G0  AABA L}BBB B(A0A8Gk 8A0A(B BBBA 4(,HMBAA   ABA ,xBAA : ABA VDQLR BBB B(A0A8G!a 8A0A(B BBBA (/BBA A(D@D<]BIE E(D0H8G@j8A0A(B BBB$# $I(l0lo@  Hnh   oox oo o8l6 F V f v !!&!6!F!V!f!v!!!!!!!!!""&"6"F"V"f"v"""""""""##pGCC: (Debian 9.2.1-17) 9.2.1 20191102@ x        #0#$IPVXW(l0l8lHnp p `##!#7HpF0lm$y(lZ0l8l(lVHn  I0Ui$w`pPp  p !`x.LhxYup|lxx$I 1&h>] pp.(!3 B&$Qp^Pm6)~H]+0#+Xp%+2<[rp~D/6V(p'De17R p &1Q"m.M@pcrtstuff.cderegister_tm_clones__do_global_dtors_auxcompleted.7447__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryworklog.c__FRAME_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_fini__strcat_chk@@GLIBC_2.3.4nodelay@@NCURSES6_TINFO_5.0.19991023getenv@@GLIBC_2.2.5alarm_handlerwattrset@@NCURSES6_5.0.19991023temps2project_headlocaltime@@GLIBC_2.2.5_ITM_deregisterTMCloneTablestrcpy@@GLIBC_2.2.5__isoc99_fscanf@@GLIBC_2.7ferror@@GLIBC_2.2.5log_filenamewgetch@@NCURSES6_5.0.19991023num_projectsbeep@@NCURSES6_5.0.19991023_edataIDLE_Ystarttimesfclose@@GLIBC_2.2.5wclrtobot@@NCURSES6_5.0.19991023noecho@@NCURSES6_5.0.19991023chdir@@GLIBC_2.2.5asctime@@GLIBC_2.2.5no_categoryy_updatefputs@@GLIBC_2.2.5exit_handlerinitscr@@NCURSES6_5.0.19991023stdscr@@NCURSES6_TINFO_5.0.19991023keypad@@NCURSES6_TINFO_5.0.19991023fputc@@GLIBC_2.2.5wattr_on@@NCURSES6_5.0.19991023__libc_start_main@@GLIBC_2.2.5__data_startsignal@@GLIBC_2.2.5isdelkeyfeof@@GLIBC_2.2.5__gmon_start__resize_handler__dso_handle_IO_stdin_usedfetch_total_timeproject_updatecbreak@@NCURSES6_TINFO_5.0.19991023__libc_csu_initupdate_skip_refreshmalloc@@GLIBC_2.2.5read_config_file__isoc99_sscanf@@GLIBC_2.7current_projecttempsdraw_run_optionsungetch@@NCURSES6_5.0.19991023setitimer@@GLIBC_2.2.5__bss_startmain__printf_chk@@GLIBC_2.3.4wgetnstr@@NCURSES6_5.0.19991023x_updatedo_resizefopen@@GLIBC_2.2.5initial_timeperror@@GLIBC_2.2.5LINES@@NCURSES6_TINFO_5.0.19991023wmove@@NCURSES6_5.0.19991023wclrtoeol@@NCURSES6_5.0.19991023mvscanw@@NCURSES6_5.0.19991023clock_onexit@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__TMC_END____fprintf_chk@@GLIBC_2.3.4_ITM_registerTMCloneTableendwin@@NCURSES6_5.0.19991023strdup@@GLIBC_2.2.5delta_timewaddnstr@@NCURSES6_5.0.19991023__cxa_finalize@@GLIBC_2.2.5wattr_off@@NCURSES6_5.0.19991023strstr@@GLIBC_2.2.5__ctype_tolower_loc@@GLIBC_2.3draw_main_screenusleep@@GLIBC_2.2.5stderr@@GLIBC_2.2.5__sprintf_chk@@GLIBC_2.3.4.symtab.strtab.shstrtab.interp.note.gnu.build-id.note.ABI-tag.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.data.bss.comment#$6 Do4N @@@V^o  pkox x z  B  h   # #0#0#%$I$I PPVVXWXW(l(\0l0\8l8\HnH^p` p` 0`&8` , m%uworklog_2.1.orig/0000700000175000017500000000000013561763251012524 5ustar atsbatsb