示例#1
0
int main(int argc, char *argv[], char ** environ) {

	do_opts (argc, argv, environ);

	int                   sockfd;
	struct sockaddr_in    cli_addr, serv_addr;

	//Zero out socket address
	memset(&serv_addr, 0, sizeof(serv_addr));

	//The address is ipv4
	serv_addr.sin_family       = AF_INET;

	// fill in the structure "serv_addr" with the address of the server 
	// that we want to send to
	// ip_v4 adresses is a uint32_t, convert a string representation of the octets 
	// to the appropriate value
	serv_addr.sin_addr.s_addr  = inet_addr(globalArgs.serverip);
	serv_addr.sin_port         = htons(globalArgs.port);

	// open UDP socket (an internet datagram socket)
	if ( (sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
		printf("client: can't open datagram socket to %s:%d\n", 
			globalArgs.serverip, globalArgs.port);
	}
	else {
		if (globalArgs.verbose) {
			printf("client: OK opened datagram socket to %s:%d\n",
				globalArgs.serverip, globalArgs.port);
		}
	}

	// bind any local address for us
	//bzero((char *) &cli_addr, sizeof(cli_addr));  // zero out
	cli_addr.sin_family        = AF_INET;
	cli_addr.sin_addr.s_addr   = htonl(INADDR_ANY);
	cli_addr.sin_port          = htons(0);
	if (bind(sockfd, (struct sockaddr *) &cli_addr, sizeof(cli_addr)) < 0) {
			printf("client: FAIL bind to %s:%d\n", globalArgs.serverip, globalArgs.port);
	}
	else {
		if (globalArgs.verbose) {
			printf("client: OK bind to %s:%d\n", globalArgs.serverip, globalArgs.port);
		}
	}

	// print output
	// now go sit in this command until program exit
	dg_cli(stdin, sockfd, (struct sockaddr *) &serv_addr, (socklen_t) sizeof(serv_addr));

	close(sockfd);
	return 0;
	
}
示例#2
0
int main(int argc, char *argv[])
{
	int n,
		show_days = 0,
		but_stat  = 0,
		microtm   = 0,
		running   = 0,
		force     = 0;
	time_t
		last_time = 0;
	char
		*geometry = NULL,
		*xdisplay = NULL;
	static int signals[] =
		{SIGALRM, SIGHUP, SIGINT, SIGPIPE, SIGTERM, SIGUSR1, SIGUSR2, 0};
	XEvent Event;

	assert(sizeof(char) == 1);

	umask(077);
	do_opts(argc, argv, &show_days, &xdisplay, &geometry, &force);

	path_len = strlen(getenv("HOME")) + strlen("/.wmwork/worklog") + 1;
	if ((dirName = malloc(path_len)) == NULL || (logname = malloc(path_len)) == NULL || (lockname = malloc(path_len)) == NULL) {
		fprintf(stderr, "%s: cannot allocate memory for path variable\n", PACKAGE_NAME);
		fprintf(stderr, "%s: %s\n", PACKAGE_NAME, strerror(errno));
		exit(1);
	}
	snprintf(dirName,  path_len, "%s/.wmwork", getenv("HOME"));
	snprintf(logname,  path_len, "%s/worklog", dirName);
	snprintf(lockname, path_len, "%s/.#LOCK",  dirName);
	if (chdir(dirName) < 0) {
		if (errno == ENOENT) {
			if (mkdir(dirName, 0777)) {
				fprintf(stderr, "%s: cannot mkdir '%s'\n", PACKAGE_NAME, dirName);
				fprintf(stderr, "%s: %s\n", PACKAGE_NAME, strerror(errno));
				exit(1);
			}
			compat();
		} else {
			fprintf(stderr, "%s: cannot chdir into '%s'\n", PACKAGE_NAME, dirName);
			fprintf(stderr, "%s: %s\n", PACKAGE_NAME, strerror(errno));
			exit(1);
		}
	}

	for (n = 0; signals[n]; n++) {
		if (signal(signals[n], handler) == SIG_ERR) {
			fprintf(stderr, "%s: cannot set handler for signal %d\n", PACKAGE_NAME, signals[n]);
			fprintf(stderr, "%s: %s\n", PACKAGE_NAME, strerror(errno));
		}
	}

	make_lock(force);
	atexit(at_exit);
	read_log();
	current = first;

	initXwindow(xdisplay);
	createXBMfromXPM(wmwork_mask_bits, wmwork_master_xpm, 64, 64);
	openXwindow(argc, argv, wmwork_master_xpm, wmwork_mask_bits, 64, 64, geometry, NULL);
	AddMouseRegion(BUT_START,  5, 48, 22, 58);
	AddMouseRegion(BUT_PAUSE, 23, 48, 40, 58);
	AddMouseRegion(BUT_STOP,  41, 48, 58, 58);
	AddMouseRegion(BUT_PREV,   5, 33, 16, 43);
	AddMouseRegion(BUT_NEXT,  47, 33, 58, 43);
	drawTime(current->time, sess_time, microtm, show_days, running);
	drawProject(current->name);

	while (1) {
		last_time = now.tv_sec;
		gettimeofday(&now, &tz);
		if (running) {
			current->time += now.tv_sec - last_time;
			sess_time     += now.tv_sec - last_time;
			microtm        = now.tv_usec;
			drawTime(current->time, sess_time, microtm, show_days, running);
			RedrawWindow();
		}
		while (XPending(display)) {
			XNextEvent(display, &Event);
			switch (Event.type) {
			case Expose:
				RedrawWindow();
				break;
			case DestroyNotify:
				XCloseDisplay(display);
				exit(0);
			case ButtonPress:
				n = CheckMouseRegion(Event.xbutton.x, Event.xbutton.y);
				switch (n) {
				case BUT_START:
				case BUT_PAUSE:
				case BUT_STOP:
				case BUT_PREV:
				case BUT_NEXT:
					ButtonDown(n);
					break;
				}
				but_stat = n;
				RedrawWindow();
				break;
			case ButtonRelease:
				n = CheckMouseRegion(Event.xbutton.x, Event.xbutton.y);
				switch (but_stat) {
				case BUT_START:
				case BUT_PAUSE:
				case BUT_STOP:
				case BUT_PREV:
				case BUT_NEXT:
					ButtonUp(but_stat);
					break;
				}
				if (but_stat && n == but_stat) {
					switch (but_stat) {
					case BUT_START:
						running = 1;
						break;
					case BUT_PAUSE:
						running = 0;
						break;
					case BUT_STOP:
						write_log();
						write_record();
						running   = 0;
						sess_time = 0;
						break;
					case BUT_PREV:
						if (!running && sess_time == 0)
							current = current->prev;
						break;
					case BUT_NEXT:
						if (!running && sess_time == 0)
							current = current->next;
						break;
					}
					drawTime(current->time, sess_time, microtm, show_days, running);
					drawProject(current->name);
				}
				RedrawWindow();
				but_stat = 0;
				break;
			}
		}
		usleep(50000L);
		if (do_exit)
			exit(0);
	}
}
示例#3
0
main(int argc, char **argv)
{
   pthread_attr_t sched_attr;
   int maxprio, minprio;
   int go = 1;
   struct sched_param fifo_param;
   struct sigaction ignoreChildDeath =
   {NULL, 0, (SA_NOCLDSTOP | SA_RESTART), NULL};
   struct sigaction hupAction =
   {hupcatch, 0, SA_RESTART, NULL};
   struct sigaction termAction =
   {termcatch, 0, SA_RESTART, NULL};

   myName=argv[0];
   ch_flag = 0;
   terminate = 0;

   fprintf(stderr,"%s daemon start.\n", myName);

   pthread_attr_init(&sched_attr);
   pthread_attr_setinheritsched(&sched_attr, PTHREAD_EXPLICIT_SCHED);
   pthread_attr_setschedpolicy(&sched_attr, /*SCHED_RR */ SCHED_FIFO);

   maxprio = sched_get_priority_max(SCHED_FIFO);
   minprio = sched_get_priority_min(SCHED_FIFO);

   sigaction(SIGCHLD, &ignoreChildDeath, NULL);		/*zombie protection */
   sigaction(SIGHUP, &hupAction, NULL);
   sigaction(SIGTERM, &termAction, NULL);

   if (terminate == TERM_TERM) {
      go = 0;
   } else {
      go = 1;
   }

   while (go) {			/*The main restart loop */
      terminate = 0;
      /*read config file here */
      cfg_read(CONFIG_FILE, "", "");
      /* do command line option processing, they override config file opts */
      do_opts(argc, argv);
      if (!foreground) {
	 daemon();
      }
      wxin = serial_open(opts.ttydev);
      last_write_time = time(NULL);
      if (wxin > 0) {
	 sane_defaults();
	 init_db();
	 if (setupio(wxin) < 0) {
	    errlog(9, "setupio bailed.");
	 }
	 iobuf = make_cbuf(BSIZE);
	 pthread_mutex_init(&current_obs_lock, pthread_mutexattr_default);
	 pthread_mutex_init(&current_cal_lock, pthread_mutexattr_default);
	 pthread_mutex_init(&terminate_lock, pthread_mutexattr_default);
	 pthread_mutex_init(&cond_update_lock, pthread_mutexattr_default);
	 pthread_cond_init(&cond_update, pthread_condattr_default); 

#if USE_CBUF

	 /*	 fifo_param.sched_priority = (minprio + maxprio) / 2;
		 pthread_attr_setschedparam(&sched_attr, &fifo_param);*/
	 
	 pthread_create(&reader, /*pthread_attr_default */ NULL, (pthread_startroutine_t) serial_reader, (pthread_addr_t) iobuf);

	 pthread_create(&parser, NULL /*&sched_attr*/, (pthread_startroutine_t) parse_input, (pthread_addr_t) iobuf);
#if SCREENOUT
	 pthread_create(&writer, NULL /*&sched_attr*/, (pthread_startroutine_t) screen_writer, (pthread_addr_t) NULL);
#else				/* Make a db writer thread */
	 pthread_create(&writer, NULL /*&sched_attr*/, (pthread_startroutine_t) db_writer, (pthread_addr_t) NULL);
#endif


	 pthread_join(reader, NULL);
	 pthread_join(parser, NULL);
	 pthread_join(writer, NULL);


#else
	 parse_input(iobuf);
#endif
	 release_cbuf(iobuf);
	 serial_close(opts.ttydev);
	 if (terminate == TERM_TERM) {
	    errlog1(1, "%s: TERMINATE.", argv[0]);
	    go = 0;
	 }
	 if (terminate == TERM_RESTART) {
	    errlog1(1, "%s: RESTART.", argv[0]);
	    go = 1;
	 }
#if SCREENOUT
#else
	 db_getout(dbconn);
#endif
      } else {
	 go = 0;
	 errlog2(1, "%s: cannot open serial port: %s", argv[0], opts.ttydev);
      }
   }
   errlog1(1,"%s daemon shutdown.", myName);
   exit(0);
}