⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xgps.c

📁 gpsd, a popular GPS daemon.
💻 C
📖 第 1 页 / 共 3 页
字号:
		    gpsdata->fix.track);		XmTextFieldSetString(text_6, s);	} else		XmTextFieldSetString(text_6, "n/a");	if (isnan(gpsdata->fix.eph)==0) {		(void)snprintf(s, sizeof(s), "%f %s",		    gpsdata->fix.eph * altunits->factor,		    altunits->legend);		XmTextFieldSetString(text_7, s);	} else		XmTextFieldSetString(text_7, "n/a");	if (isnan(gpsdata->fix.epv)==0) {		(void)snprintf(s, sizeof(s), "%f %s", 		    gpsdata->fix.epv * altunits->factor,		    altunits->legend);		XmTextFieldSetString(text_8, s);	} else		XmTextFieldSetString(text_8, "n/a");	if (gpsdata->fix.mode == MODE_3D && isnan(gpsdata->fix.climb)==0) {		(void)snprintf(s, sizeof(s), "%f %s/sec", 		    gpsdata->fix.climb * altunits->factor,		    altunits->legend);		XmTextFieldSetString(text_9, s);	} else		XmTextFieldSetString(text_9, "n/a");	if (gpsdata->set & DEVICEID_SET) {		(void)strlcpy(s, "xgps: ", sizeof(s));		(void)strlcpy(s+6, gpsdata->gps_id, sizeof(s)-6);		set_title(s);	}	if (gpsdata->online == 0) {		newstate = 0;		(void)strlcpy(s, "OFFLINE", sizeof(s));	} else {		newstate = gpsdata->fix.mode;		switch (gpsdata->fix.mode) {		case MODE_2D:			(void)snprintf(s, sizeof(s), "2D %sFIX",			    (gpsdata->status == STATUS_DGPS_FIX) ? "DIFF " :			    "");			break;		case MODE_3D:			(void)snprintf(s, sizeof(s), "3D %sFIX",			    (gpsdata->status == STATUS_DGPS_FIX) ? "DIFF " :			    "");			break;		default:		    (void)strlcpy(s, "NO FIX", sizeof(s));			break;		}	}	if (newstate != state) {		timer = time(NULL);		state = newstate;	}	(void)snprintf(s + strlen(s), sizeof(s) - strlen(s), " (%d secs)",	    (int) (time(NULL) - timer));	XmTextFieldSetString(text_10, s);	draw_graphics(gpsdata);	XtRemoveTimeOut(timeout);	timeout = XtAppAddTimeOut(app, 2000, handle_time_out, NULL);}static char *get_resource(Widget w, char *name, char *default_value){	XtResource xtr;	char *value = NULL;	/*@ -observertrans -statictrans -immediatetrans -compdestroy @*/	xtr.resource_name = name;	xtr.resource_class = "AnyClass";	xtr.resource_type = XmRString;	xtr.resource_size = (Cardinal)sizeof(String);	xtr.resource_offset = 0;	xtr.default_type = XmRImmediate;	xtr.default_addr = default_value;	XtGetApplicationResources(w, &value, &xtr, 1, NULL, 0);	/*@ +observertrans +statictrans +immediatetrans +compdestroy @*/	/*@i@*/return value ? value: default_value;}/* runs when gps needs attention *//*@ -globstate -branchstate @*/voidhandle_gps(XtPointer client_data, XtIntervalId *ignored){	char *err_str = NULL;	char error[128];	static bool dialog_posted = false;	/*@i@*/gpsdata = gps_open(server, port);	if (!gpsdata) {		switch (errno ){		case NL_NOSERVICE:			err_str = "can't get service entry";			break;		case NL_NOHOST:			err_str = "can't get host entry";			break;		case NL_NOPROTO:			err_str = "can't get protocol entry";			break;		case NL_NOSOCK:			err_str = "can't create socket";			break;		case NL_NOSOCKOPT:			err_str = "error SETSOCKOPT SO_REUSEADDR";			break;		case NL_NOCONNECT:			err_str = "can't connect to host";			break;		default:			err_str = "Unknown";			break;		}		if (!gps_lost && !dialog_posted) {			(void)snprintf(error, sizeof(error),			    "No GPS data available.\n\n%s\n\n"			    "Check the connection to gpsd and if "			    "gpsd is running.", err_str);			(void)err_dialog(toplevel, error);			dialog_posted = true;		}		gps_timeout = XtAppAddTimeOut(app, 1000, handle_gps, app);	} else {		timeout = XtAppAddTimeOut(app, 2000, handle_time_out, app);		timer = time(NULL);		gps_set_raw_hook(gpsdata, update_panel);		if (jitteropt)		    (void)gps_query(gpsdata, "J=1");		if (device)		    (void)gps_query(gpsdata, "F=%s", device);		(void)gps_query(gpsdata, "w+x");		gps_input = XtAppAddInput(app, gpsdata->gps_fd,		    (XtPointer)XtInputReadMask, handle_input, NULL);		if (gps_lost || dialog_posted)		    (void)err_dialog(toplevel, "GPS data is available.");		dialog_posted = gps_lost = false;	}}/*@ +globstate +branchstate @*/Widgeterr_dialog(Widget widget, char *s){	static Widget dialog;	XmString t;	/*@ -mustfreefresh +charint -usedef -statictrans -immediatetrans -onlytrans @*/	if (!dialog) {		Arg args[5];		int n = 0;		XmString ok = XmStringCreateLocalized("OK");		XtSetArg(args[n], XmNautoUnmanage, False); n++;		XtSetArg(args[n], XmNcancelLabelString, ok); n++;		dialog = XmCreateInformationDialog(widget, "notice", 						   args, (Cardinal)n);		XtAddCallback(dialog, XmNcancelCallback, dlg_callback, NULL);		XtUnmanageChild(XmMessageBoxGetChild(dialog,		    XmDIALOG_OK_BUTTON));		XtUnmanageChild(XmMessageBoxGetChild(dialog,		    XmDIALOG_HELP_BUTTON));	}	t = XmStringCreateLocalized(s);	XtVaSetValues(dialog,	    XmNmessageString,	t,	    XmNdialogStyle,	XmDIALOG_FULL_APPLICATION_MODAL,	    NULL);	XmStringFree(t);	XtManageChild(dialog);	XtPopup(XtParent(dialog), XtGrabNone);	return dialog;	/*@ +mustfreefresh -charint +usedef +statictrans +immediatetrans  +onlytrans @*/}voiddlg_callback(Widget dialog, XtPointer client_data, XtPointer call_data){    /*@i1@*/XtPopdown(XtParent(dialog));}voidfile_cb(Widget widget, XtPointer client_data, XtPointer call_data){	uintptr_t item_no = (uintptr_t)client_data;	if (item_no == 0)		exit(0);}voidhelp_cb(Widget widget, XtPointer client_data, XtPointer call_data){	static Widget help, about;	Widget *dialog;	uintptr_t item_no = (uintptr_t)client_data;	/*@ -usedef -immediatetrans -onlytrans -mustfreefresh -type +charint -ptrcompare @*/	if (item_no == 0 && !help) {		Arg args[5];		int n = 0;		XmString msg = XmStringCreateLtoR(		    "XGps displays live data from a GPS unit controlled by\n"		    "a running gpsd daemon.\n\n"		    "The list of satellites and their position on the sky\n"		    "are displayed and the most important live data is\n"		    "shown in text fields below the skyview.\n",		    XmFONTLIST_DEFAULT_TAG);		XtSetArg(args[n], XmNmessageString, msg); n++;		help = XmCreateInformationDialog(toplevel, "help_dialog",						 args, (Cardinal)n);		XtUnmanageChild(XmMessageBoxGetChild(help,		    XmDIALOG_CANCEL_BUTTON));		XtUnmanageChild(XmMessageBoxGetChild(help,		    XmDIALOG_HELP_BUTTON));	}	if (item_no == 1 && !about) {		Arg args[5];		int n = 0;		XmString msg = XmStringCreateLtoR(		    "XGps 3.1.2\n\n"		    "Copyright (c) 2007 by Marc Balmer <marc@msys.ch>\n"		    "Copyright (c) 2006 by Eric S. Raymond\n"		    "\nUse at your own risk.\n\n",		    XmFONTLIST_DEFAULT_TAG);		XtSetArg(args[n], XmNmessageString, msg);		n++;		about = XmCreateInformationDialog(toplevel, "about_dialog",						  args, (Cardinal)n);		XtUnmanageChild(XmMessageBoxGetChild(about,		    XmDIALOG_CANCEL_BUTTON));		XtUnmanageChild(XmMessageBoxGetChild(about,		    XmDIALOG_HELP_BUTTON));	}	/*@ +usedef +immediatetrans +onlytrans +mustfreefresh +type -charint +ptrcompare @*/	if (item_no == 0)		dialog = &help;	else		dialog = &about;	XtManageChild(*dialog);	/*@i1@*/XtPopup(XtParent(*dialog), XtGrabNone);}/*@ -mustfreefresh @*/intmain(int argc, char *argv[]){	int option;	char *arg = NULL, *colon1, *colon2;	char *su, *au;	/*@ -globstate -onlytrans @*/	toplevel = XtVaAppInitialize(&app, "XGps", options, XtNumber(options),	    &argc, argv, fallback_resources, NULL);	su = get_resource(toplevel, "speedunits", "kmh");	for (speedunits = speedtable; 	    speedunits < speedtable + sizeof(speedtable)/sizeof(speedtable[0]);	    speedunits++)		if (strcmp(speedunits->legend, su)==0)			goto speedunits_ok;	speedunits = speedtable;	fprintf(stderr, "xgps: unknown speed unit, defaulting to %s\n",	    speedunits->legend);speedunits_ok:	au = get_resource(toplevel, "altunits", "meters");	for (altunits = alttable; 	    altunits < alttable + sizeof(alttable)/sizeof(alttable[0]);	    altunits++)		if (strcmp(altunits->legend, au)==0)			goto altunits_ok;	altunits = alttable;	fprintf(stderr, "xgps: unknown altitude unit, defaulting to %s\n",	    altunits->legend);altunits_ok:	while ((option = getopt(argc, argv, "hjl:")) != -1) {		switch (option) {		case 'j':			jitteropt = true;			continue;		case 'l':			switch (optarg[0]) {			case 'd':				deg_type = deg_dd;				continue;			case 'm':				deg_type = deg_ddmm;				continue;			case 's':				deg_type = deg_ddmmss;				continue;			default:				fprintf(stderr, "Unknown -l argument: %s\n",				    optarg);				/*@ -casebreak @*/			}		case 'h':		default:		    (void)fputs("usage:  xgps [-hj] [-speedunits "			    "{mph,kmh,knots}] [-altunits {ft,meters}] "			    "[-l {d|m|s}] [server[:port:[device]]]\n", stderr);			exit(1);		}	}	/*@ -branchstate @*/	if (optind < argc) {		arg = strdup(argv[optind]);		colon1 = strchr(arg, ':');		server = arg;		if (colon1 != NULL) {			if (colon1 == arg)				server = NULL;			else				*colon1 = '\0';			port = colon1 + 1;			colon2 = strchr(port, ':');			if (colon2 != NULL) {				if (colon2 == port)					port = NULL;				else					*colon2 = '\0';				device = colon2 + 1;			}		}		colon1 = colon2 = NULL;	}	/*@ +branchstate @*/	register_shell(toplevel);	build_gui(toplevel);	gps_timeout = XtAppAddTimeOut(app, 200, handle_gps, app);	XtAppMainLoop(app);	return 0;	/*@ +globstate +onlytrans @*/}/*@ +mustfreefresh @*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -