/*
 * Ismail Yenigul's famous language config file reader/parser
 * This code derived from EnderUNIX isoqlog project.
 *
 * http://www.enderunix.org/isoqlog
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include <errno.h>

#include <sys/types.h>
#include <sys/stat.h>

#include "defs.h"
#include "langcfg.h"

void loadlang(char *langfile) 
{
	FILE *fd;
	char buf[BIGBUFSIZE];
	char keyword[TINYBUFSIZE];
	char value[BIGBUFSIZE];
	char *cp1, *cp2;
	char *variables[] = { "Invalid",
		"l_charset",
		"l_title",
		"l_create_date",
		"l_no",
		"l_domain",
		"l_ns",
		"l_mx",
		"l_www",
		"l_customer",
		"l_not_customer",
		"l_domain_not_used",
		"l_domain_total",
		"l_link_index",
		"l_link_gsorted",
		"l_link_asorted",
		"l_software_sign1",
		"l_software_sign2",
		"l_software_sign3",
		"l_extra",
		"l_query"
	};

	int i, key, line, keyword_nums = sizeof(variables)/sizeof(char *);

	
	if ((fd = fopen(langfile, "r")) == NULL) {
		fprintf(stderr, "loadLang: cannot open language configuration file %s, exiting...\n", langfile);
		exit(-1);
	}
	line = 0;
	while ((fgets(buf, BIGBUFSIZE, fd)) != NULL) {
		line++;
		if (buf[0] == '#') 
			continue;
		if ((strlen(buf)) <= 1)
			continue;

		cp1 = buf;
		cp2 = keyword;
		while (isspace((int)*cp1)) 
			cp1++;
		while (isgraph((int)*cp1) && (*cp1 != '=')) 
			*cp2++ = *cp1++;
		*cp2 = '\0';
		cp2 = value;
		while ((*cp1 != '\0') && (*cp1 !='\n') && (*cp1 !='='))
			cp1++;
		cp1++; 
		while (isspace((int)*cp1))
			cp1++; 
		if (*cp1 == '"') 
			cp1++;
		while ((*cp1 != '\0') && (*cp1 !='\n') && (*cp1 !='"'))
			*cp2++ = *cp1++;
		*cp2-- = '\0';
		if (keyword[0] =='\0' || value[0] =='\0')
			continue;
		key = 0;
		for (i = 0; i < keyword_nums; i++) {
			if ((strcmp(keyword, variables[i])) == 0) {
				key = i;
				break;
			}
		}

		switch(key) {
		case 0:
			fprintf(stderr, "Illegal Keyword: %s\n", keyword);
			break;
		case 1:
			strncpy(l_charset, value, TINYBUFSIZE);
			break;
		case 2:
			strncpy(l_title, value, TINYBUFSIZE);
			break;
		case 3:
			strncpy(l_create_date, value, TINYBUFSIZE);
			break;
		case 4:
			strncpy(l_no, value, TINYBUFSIZE);
			break;
		case 5:
			strncpy(l_domain, value, TINYBUFSIZE);
			break;
		case 6:
			strncpy(l_ns, value, TINYBUFSIZE);
			break;
		case 7:
			strncpy(l_mx, value, TINYBUFSIZE);
			break;
		case 8:
			strncpy(l_www, value, TINYBUFSIZE);
			break;
		case 9:
			strncpy(l_customer, value, TINYBUFSIZE);
			break;
		case 10:
			strncpy(l_not_customer, value, TINYBUFSIZE);
			break;
		case 11:
			strncpy(l_domain_not_used, value, TINYBUFSIZE);
			break;
		case 12:
			strncpy(l_domain_total, value, TINYBUFSIZE);
			break;
		case 13:
			strncpy(l_link_index, value, TINYBUFSIZE);
			break;
		case 14:
			strncpy(l_link_gsorted, value, TINYBUFSIZE);
			break;
		case 15:
			strncpy(l_link_asorted, value, TINYBUFSIZE);
			break;
		case 16:
			strncpy(l_software_sign1, value, TINYBUFSIZE);
			break;
		case 17:
			strncpy(l_software_sign2, value, TINYBUFSIZE);
			break;
		case 18:
			strncpy(l_software_sign3, value, TINYBUFSIZE);
			break;
		case 19:
			strncpy(l_extra, value, TINYBUFSIZE);
			break;
		case 20:
			strncpy(l_query, value, TINYBUFSIZE);
			break;
		}
	}
	fclose(fd);
	/* If Encoding is left blank, default it to iso-8859-1 */
	if (strlen(l_charset) == 0)
		strcpy(l_charset, "iso-8859-1");
}


syntax highlighted by Code2HTML, v. 0.9.1