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

📄 pj_param.cpp

📁 projapi是一个关于GIS行业投影转换的程序库
💻 CPP
字号:

#include "stdafx.h"
/* put parameters in linked list and retrieve */
#ifndef lint
static const char SCCSID[]="@(#)pj_param.c	4.4	93/06/12	GIE	REL";
#endif

#include "projects.h"
#include <stdio.h>
#include <string.h>


/* create parameter list entry */
paralist *pj_mkparam(char *str) 
{
	paralist *newitem;

	if (newitem = (paralist *)pj_malloc(sizeof(paralist) + strlen(str)))
	{
		newitem->used = 0;
		newitem->next = 0;
		if (*str == '+')
			++str;
		(void)strcpy(newitem->param, str);
	}
	return newitem;
}

/************************************************************************/
/*                              pj_param()                              */
/*                                                                      */
/*      Test for presence or get parameter value.  The first            */
/*      character in `opt' is a parameter type which can take the       */
/*      values:                                                         */
/*                                                                      */
/*       `t' - test for presence, return TRUE/FALSE in PVALUE.i         */
/*       `i' - integer value returned in PVALUE.i                       */
/*       `d' - simple valued real input returned in PVALUE.f            */
/*       `r' - degrees (DMS translation applied), returned as           */
/*             radians in PVALUE.f                                      */
/*       `s' - string returned in PVALUE.s                              */
/*       `b' - test for t/T/f/F, return in PVALUE.i                     */
/*                                                                      */
/************************************************************************/

/* test for presence or get parameter value */
PJVALUE pj_param(paralist *pl, char *opt) 
{
	int type;
	unsigned l;
	PJVALUE value;

	type = *opt++;
	/* simple linear lookup */
	l = strlen(opt);
	while (pl && !(!strncmp(pl->param, opt, l) &&
	       (!pl->param[l] || pl->param[l] == '=')))
		pl = pl->next;
	if (type == 't')
		value.i = pl != 0;
	else if (pl) 
	{
		pl->used |= 1;
		opt = pl->param + l;
		if (*opt == '=')
			++opt;
		switch (type) 
		{
		case 'i':	/* integer input */
			value.i = atoi(opt);
			break;
		case 'd':	/* simple real input */
			value.f = atof(opt);
			break;
		case 'r':	/* degrees input */
			value.f = dmstor(opt, 0);
			break;
		case 's':	/* char string */
			value.s = opt;
			break;
		case 'b':	/* boolean */
			switch (*opt) 
			{
			case 'F': case 'f':
				value.i = 0;
				break;
			case '\0': case 'T': case 't':
				value.i = 1;
				break;
			default:
				pj_errno = -8;
				value.i = 0;
				break;
			}
			break;
		default:
bum_type:	/* note: this is an error in parameter, not a user error */

			return value;
		}
	} 
	else /* not given */
	{
		switch (type) 
		{
		case 'b':
		case 'i':
			value.i = 0;
			break;
		case 'd':
		case 'r':
			value.f = 0.;
			break;
		case 's':
			value.s = 0;
			break;
		default:
			goto bum_type;
		}
	}

	return value;
}

⌨️ 快捷键说明

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