📄 skyeye_config.c
字号:
/*
skyeye_config.c - config file interface for skyeye
Copyright (C) 2003 Skyeye Develop Group
for help please send mail to <skyeye-developer@lists.sf.linuxforum.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* 3/21/2003 Add config file interface to skyeye.
* Rename memmap.conf to skyeye.conf
* walimis <walimi@peoplemail.com.cn>
* */
#include "armdefs.h"
//chy 2005-07-30
extern char *skyeye_config_filename; //in skyeye.c
//int skyeye_instr_debug=0;
FILE *skyeye_logfd;
/**/ int
parse_line_unformatted (char *line)
{
#define MAX_PARAMS_LEN 40
char *ptr;
unsigned i, string_i;
char string[512];
char *params[MAX_PARAMS_LEN];
int num_params;
int inquotes = 0;
int comment = 0;
int retval = 0;
memset (params, 0, sizeof (params));
if (line == NULL)
return 0;
/*if passed nothing but whitespace, just return */
for (i = 0; i < strlen (line); i++)
{
if (!isspace (line[i]))
break;
}
if (i >= strlen (line))
return 0;
num_params = 0;
ptr = strtok (line, ":");
while ((ptr) && (!comment))
{
string_i = 0;
for (i = 0; i < strlen (ptr); i++)
{
if (ptr[i] == '"')
inquotes = !inquotes;
else if ((ptr[i] == '#') && !inquotes)
{
comment = 1;
break;
}
else
{
if (!isspace (ptr[i]) || inquotes)
string[string_i++] = ptr[i];
}
}
string[string_i] = '\0';
if (string_i == 0)
break;
if (params[num_params] != NULL)
{
free (params[num_params]);
params[num_params] = NULL;
}
if (num_params < MAX_PARAMS_LEN)
{
//chy 2003-08-21, only malloc string_i byte is error!
//params[num_params] = malloc(string_i);
params[num_params] = malloc ((string_i + 16) & 0xfffffff0);
if (!params[num_params])
{
printf
("SKYEYE:parse_line_unformatted: malloc params[%d] error\n",
num_params);
exit (-1);
}
strncpy (params[num_params], string, string_i);
params[num_params][string_i] = '\0';
num_params++;
ptr = strtok (NULL, ",");
}
else
{
fprintf (stderr, "too many parameters, max is %d\n",
MAX_PARAMS_LEN);
}
} /*end while */
/*
for (i=0; i < MAX_PARAMS_LEN; i++)
{
if ( params[i] != NULL )
{
if (i == 0)
printf("****option: %s****\n", params[i]);
else
printf("params %d: %s\n", i, params[i]);
}
}
*/
retval = parse_line_formatted (num_params, ¶ms[0]);
for (i = 0; i < MAX_PARAMS_LEN; i++)
{
if (params[i] != NULL)
{
free (params[i]);
params[i] = NULL;
}
}
return retval;
}
/*parse every line that has been formatted
* return -1: if a option has exceeded it's max number or
* option's do_option function has a error or
* there is an unkonw option.
* upper level function should print error and exit.
* */
int
parse_line_formatted (int num_params, const char *params[])
{
int i;
skyeye_option_t *sop = skyeye_options;
int len = sizeof (skyeye_options) / sizeof (skyeye_option_t);
int retval = 0;
if (num_params < 1)
return 0;
for (i = 0; i < len; i++, sop++)
{
if (!strncmp (sop->name, params[0], MAX_OPTION_NAME))
{
sop->do_num++;
if (sop->do_num > sop->max_do_num)
{
/**/
fprintf (stderr,
"\"%s\" option has exceeded max number %d!\n",
params[0], sop->max_do_num);
return -1;
}
else if (retval = sop->do_option (sop, num_params - 1,
¶ms[1]) < 0)
{
fprintf (stderr, "\"%s\" option parameter error!\n", params[0]);
return retval;
}
else
return retval;
}
}
fprintf (stderr, "Unkonw option: %s\n", params[0]);
return -1; /* unknow option specified */
}
void
skyeye_read_config ()
{
FILE *config_fd;
char *ret;
char line[MAX_STR];
//chy 2005-07-30
//char *config_file = DEFAULT_CONFIG_FILE;
if (skyeye_config_filename == NULL)
skyeye_config_filename = DEFAULT_CONFIG_FILE;
strncpy (skyeye_config.config_file, skyeye_config_filename, MAX_FILE_NAME);
if (config_fd = fopen (skyeye_config.config_file, "r"))
{
int retval = 0;
int len = 0;
do
{
ret = fgets (line, sizeof (line) - 1, config_fd);
line[sizeof (line) - 1] = '\0';
len = strlen (line);
if (len > 0)
line[len - 1] = '\0';
if ((ret != NULL) && strlen (line))
{
if (parse_line_unformatted (line) < 0)
{
retval = -1;
break; // quit parsing after first error
}
}
}
while (!feof (config_fd));
if (retval < 0)
{
fprintf (stderr,
"skyeye_read_config: config file %s have errors!\n",
skyeye_config.config_file);
exit (0);
}
}
else
{
fprintf (stderr,
"Failed to open skyeye config file %s in the same directory\n",
skyeye_config.config_file);
exit (0);
}
//chy 2003-08-20
#if 0
//chy 2003-07-11: add log file
skyeye_logfd = 0;
skyeye_instr_debug = 1;
if (skyeye_logfd = fopen ("/tmp/skyeyelog", "w+"))
fprintf (stderr, "skyeye log file is /tmp/skyeyelog\n");
else
{
fprintf (stderr, "create skyeye log file failed, /tmp/skyeyelog\n");
perror ("error");
exit (0);
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -