Beispiel #1
0
int do_factor(GEN n, long prec)
{
	pari_sp ltop;
	GEN sq = gfloor(gsqrt(n, prec));
	GEN q = stoi(2);

	ltop = avma;
	for (;;) {
		if (cmpii(q, sq) > 0)
			return -1;

		if (equalsi(0, gmod(n, q))) {
			pari_printf("%Ps = %Ps * %Ps\n", n, q, gdiv(n, q));
			return 0;
		}
		gaddz(gen_1, q, q);
		avma = ltop;
	}
}
void readConfig(void)
{
	FILE* subor = NULL;
	char option[MAX_OPTION_LENGTH];
	char hodnota[MAX_VALUE_LENGTH];
	int znak = '\0';
	short int i = 0, j = 0, o = 0;
	char nazov_option[MAX_STR];

	Log("readConfig() -- začiatok...\n");
	LogConfig("============================ súbor `%s' ============================\n", CONFIG_FILE);

	LogConfig("Naplním všetky defaulty hodnotou GLOBAL_OPTION_NULL.\n");
	for(o = 0; o < POCET_GLOBAL_OPT; o++){
		for(j = 0; j <= POCET_JAZYKOV; j++){
			cfg_option_default[o][j] = GLOBAL_OPTION_NULL;
		}// for j
	}// for o

	if(! (subor = fopen(CONFIG_FILE, "r")) ){
		LogConfig("Nemôžem otvoriť súbor `%s'.\n", CONFIG_FILE);
#ifdef MODEL_LH_commandline
		LogConfig("Pokúsim sa nájsť ho o level vyššie...\n");
		if(! (subor = fopen(".." STR_PATH_SEPARATOR "" CONFIG_FILE, "r")) ){
			LogConfig("Nemôžem otvoriť súbor `%s'.\n", ".." STR_PATH_SEPARATOR "" CONFIG_FILE);
			return;
		}
		else{
			LogConfig("Súbor `%s' otvorený.\n", ".." STR_PATH_SEPARATOR "" CONFIG_FILE);
		}
#else
		return;
#endif
	}
	else{
		LogConfig("Súbor `%s' otvorený.\n", CONFIG_FILE);
	}

	for (; (znak = fgetc(subor)) != EOF;)
	{
		if (znak == '#'){
#ifdef LOG_READCONFIG
			LogConfig("Parsujem poznámku...\n");
#endif
			while((znak = fgetc(subor)) != EOF && (znak != '\n') ); // parsuj poznámku do konca riadka
			if(znak == EOF){ 
				LogConfig("EOF... break.\n");
				break; 
			}
			continue;
		}

		if (isspace(znak)){
			continue;
		}

		mystrcpy(option, STR_EMPTY, MAX_OPTION_LENGTH);
		// načíta maximálne MAX_OPTION_LENGTH znakov (mínus medzery, ktoré ignoruje)
		for(i = 0; (znak != EOF) && (znak != '\n') && (znak != '=') && (i < (MAX_OPTION_LENGTH - 1)); znak = fgetc(subor), ++i)
		{
#ifdef LOG_READCONFIG
			LogConfig("znak == `%c'\n", znak);
#endif
			if(znak == CHAR_SPACE) // v prípade medzery preskoč, čítaj ďalej
				// aby tu mohlo byť znak = fgetc(subor); je potrebné, aby sme skontrolovali, či nie sme na konci
				i--;
			else{
#ifdef  _READCONFIG
				LogConfig("i == %d\n", i);
#endif
				option[i] = znak;
			}
		}
		option[i] = '\0';

		if (znak != '='){continue;}
		if (znak == EOF){
			LogConfig("EOF... break.\n");
			break;
		}

		if ((znak = fgetc(subor)) == '"'){
			znak = fgetc(subor);
		}
		else if(znak == EOF){
			LogConfig("EOF... break.\n");
			break;
		}

		mystrcpy(hodnota, STR_EMPTY, MAX_VALUE_LENGTH);
		// načíta maximálne MAX_OPTION_LENGTH znakov (mínus medzery, ktoré ignoruje)
		for(i = 0; (znak != EOF) && (znak != '\n') && (znak != '"') && (i < (MAX_HTTP_STR - 1)); znak = fgetc(subor), ++i)
		{
#ifdef LOG_READCONFIG
			LogConfig("znak == `%c'\n", znak);
#endif
			if(znak == CHAR_SPACE) // v prípade medzery preskoč, čítaj ďalej
				// aby tu mohlo byť znak = fgetc(subor); je potrebné, aby sme skontrolovali, či nie sme na konci
				i--;
			else{
#ifdef LOG_READCONFIG
				LogConfig("i == %d\n", i);
#endif
				hodnota[i] = znak;
			}
		}
		hodnota[i] = '\0';

#ifdef LOG_CONFIG
		LogConfig("Parsovaná option  == `%s'\n", option);
		LogConfig("Parsovaná hodnota == `%s'\n", hodnota);
#endif
/*		if (!strcmp(option, "http_adresa_def")){
			strncpy(cfg_HTTP_ADDRESS_default, hodnota, MAX_HTTP_STR);
		}
		else if (!strcmp(option, "http_zobraz_adr_def")){
			strcpy(cfg_HTTP_DISPLAY_ADDRESS_default, hodnota);
		}
		else if (!strcmp(option, "mail_adresa_def")){
			strcpy(cfg_MAIL_ADDRESS_default, hodnota);
		}
*/
		if (!strcmp(option, "incldir_def")){
			strcpy(cfg_INCLUDE_DIR_default, hodnota);
		}
		else{
			for(o = 0; o < POCET_GLOBAL_OPT + POCET_DALSICH_CONF; o++){
				for(j = 0; j <= POCET_JAZYKOV; j++){
					if(!equals(cfg_option_prefix[o], STR_EMPTY) && !equals(cfg_option_postfix[j], STR_EMPTY)){
						// vyskladaj názov option pre jazyk j a option o (natvrdo definované možnosti)
						mystrcpy(nazov_option, cfg_option_prefix[o], MAX_STR);
						strcat(nazov_option, ODDELOVAC_CFG_OPTION_PREFIX_POSTFIX);
						strcat(nazov_option, cfg_option_postfix[j]);
						if(!strcmp(option, nazov_option)){
							if(o < POCET_GLOBAL_OPT){
								if(!strcmp(option, nazov_option)){
									if(isdigit(hodnota[0])){
										cfg_option_default[o][j] = atol(hodnota);
									}
								}// if(!strcmp(option, nazov_option))
							}// if -- štandardná option
							else{
								switch(o - POCET_GLOBAL_OPT){
									case 0: mystrcpy(cfg_http_address_default[j], hodnota, MAX_HTTP_STR); break;
									case 1: mystrcpy(cfg_http_display_address_default[j], hodnota, MAX_HTTP_STR); break;
									case 2: mystrcpy(cfg_mail_address_default[j], hodnota, MAX_MAIL_STR); break;
								} // switch()
							}// else -- natvrdo definovaná option
						}// if(!strcmp(option, nazov_option))
					}// if
				}// for j
			}// for o
		}
		for(; (znak != EOF) && (znak != '\n'); znak = fgetc(subor) );

		if(znak == EOF){
			LogConfig("EOF... break.\n");
			break;
		}

	}
	fclose(subor);

	LogConfig("============================ súbor `%s' ============================\n", CONFIG_FILE);
	if(equalsi(cfg_MAIL_ADDRESS_default, STR_EMPTY)){
		mystrcpy(cfg_MAIL_ADDRESS_default, MAIL_ADDRESS_DEFAULT, MAX_MAIL_STR);
	}
	LogConfig("cfg_MAIL_ADDRESS_default == %s\n", cfg_MAIL_ADDRESS_default);
	for(j = 0; j <= POCET_JAZYKOV; j++){
		LogConfig("=== Jazyk `%s' (%s):\n", skratka_jazyka[j], nazov_jazyka[j]);
		LogConfig("http address: %s\n", cfg_http_address_default[j]);
		if(equals(cfg_http_address_default[j], STR_EMPTY)){
			strcpy(cfg_http_address_default[j], cfg_HTTP_ADDRESS_default);
			LogConfig("http address CHANGED: %s\n", cfg_http_address_default[j]);
		}
		LogConfig("http display address: %s\n", cfg_http_display_address_default[j]);
		if(equals(cfg_http_display_address_default[j], STR_EMPTY)){
			strcpy(cfg_http_display_address_default[j], cfg_HTTP_DISPLAY_ADDRESS_default);
			LogConfig("http display address CHANGED: %s\n", cfg_http_display_address_default[j]);
		}
		LogConfig("mail address: %s\n", cfg_mail_address_default[j]);
		if(equals(cfg_mail_address_default[j], STR_EMPTY)){
			strcpy(cfg_mail_address_default[j], cfg_MAIL_ADDRESS_default);
			LogConfig("mail address CHANGED: %s\n", cfg_mail_address_default[j]);
		}
	}

	// pôvodne pre Ruby || Android, teraz pre všetky platformy, upravené defaulty pre zobrazovanie
	LogConfig("defaults update (originally only for Ruby || Android)...\n");
	for(j = 0; j <= POCET_JAZYKOV; j++){
		if(cfg_option_default[OPT_2_HTML_EXPORT][j] != GLOBAL_OPTION_NULL){
			LogConfig("=== Jazyk `%s' (%s):\n", skratka_jazyka[j], nazov_jazyka[j]);

			// nastavenie parametrov OPT_2_HTML_EXPORT: pridáme bity pre nastavenie
			if((cfg_option_default[OPT_2_HTML_EXPORT][j] & BIT_OPT_2_NAVIGATION) != BIT_OPT_2_NAVIGATION){
				LogConfig("Pre option %d nastavujem bit pre '%ld'\n", OPT_2_HTML_EXPORT, BIT_OPT_2_NAVIGATION);
				cfg_option_default[OPT_2_HTML_EXPORT][j] += BIT_OPT_2_NAVIGATION;
			}
			if((cfg_option_default[OPT_2_HTML_EXPORT][j] & BIT_OPT_2_BUTTONY_USPORNE) != BIT_OPT_2_BUTTONY_USPORNE){
				LogConfig("Pre option %d nastavujem bit pre '%ld'\n", OPT_2_HTML_EXPORT, BIT_OPT_2_BUTTONY_USPORNE);
				cfg_option_default[OPT_2_HTML_EXPORT][j] += BIT_OPT_2_BUTTONY_USPORNE;
			}
			if((cfg_option_default[OPT_2_HTML_EXPORT][j] & BIT_OPT_2_ROZNE_MOZNOSTI) != BIT_OPT_2_ROZNE_MOZNOSTI){
				LogConfig("Pre option %d nastavujem bit pre '%ld'\n", OPT_2_HTML_EXPORT, BIT_OPT_2_ROZNE_MOZNOSTI);
				cfg_option_default[OPT_2_HTML_EXPORT][j] += BIT_OPT_2_ROZNE_MOZNOSTI;
			}
			if((cfg_option_default[OPT_2_HTML_EXPORT][j] & BIT_OPT_2_HIDE_NAVIG_BUTTONS) != BIT_OPT_2_HIDE_NAVIG_BUTTONS){
				LogConfig("Pre option %d nastavujem bit pre '%ld'\n", OPT_2_HTML_EXPORT, BIT_OPT_2_HIDE_NAVIG_BUTTONS);
				cfg_option_default[OPT_2_HTML_EXPORT][j] += BIT_OPT_2_HIDE_NAVIG_BUTTONS;
			}
			if((cfg_option_default[OPT_2_HTML_EXPORT][j] & BIT_OPT_2_HIDE_KALENDAR) != BIT_OPT_2_HIDE_KALENDAR){
				LogConfig("Pre option %d nastavujem bit pre '%ld'\n", OPT_2_HTML_EXPORT, BIT_OPT_2_HIDE_KALENDAR);
				cfg_option_default[OPT_2_HTML_EXPORT][j] += BIT_OPT_2_HIDE_KALENDAR;
			}
			if((cfg_option_default[OPT_2_HTML_EXPORT][j] & BIT_OPT_2_HIDE_OPTIONS1) != BIT_OPT_2_HIDE_OPTIONS1){
				LogConfig("Pre option %d nastavujem bit pre '%ld'\n", OPT_2_HTML_EXPORT, BIT_OPT_2_HIDE_OPTIONS1);
				cfg_option_default[OPT_2_HTML_EXPORT][j] += BIT_OPT_2_HIDE_OPTIONS1;
			}
			if((cfg_option_default[OPT_2_HTML_EXPORT][j] & BIT_OPT_2_HIDE_OPTIONS2) != BIT_OPT_2_HIDE_OPTIONS2){
				LogConfig("Pre option %d nastavujem bit pre '%ld'\n", OPT_2_HTML_EXPORT, BIT_OPT_2_HIDE_OPTIONS2);
				cfg_option_default[OPT_2_HTML_EXPORT][j] += BIT_OPT_2_HIDE_OPTIONS2;
			}
			if((cfg_option_default[OPT_2_HTML_EXPORT][j] & BIT_OPT_2_ALTERNATIVES) != BIT_OPT_2_ALTERNATIVES){
				LogConfig("Pre option %d nastavujem bit pre '%ld'\n", OPT_2_HTML_EXPORT, BIT_OPT_2_ALTERNATIVES);
				cfg_option_default[OPT_2_HTML_EXPORT][j] += BIT_OPT_2_ALTERNATIVES;
			}
		}
		else{
			LogConfig("=== Jazyk `%s' (%s): option je %d\n", skratka_jazyka[j], nazov_jazyka[j], GLOBAL_OPTION_NULL);
		}
	}// for j

	Log("readConfig() -- koniec.\n");

	return;
}// readConfig()
void readConfig(void)
{
	FILE* subor = NULL;
	char option[MAX_OPTION_LENGTH];
	char hodnota[MAX_VALUE_LENGTH];
	int znak = '\0';
	short int i = 0, j = 0, o = 0;
	char nazov_option[MAX_STR];

	Log("readConfig() -- zaèiatok...\n");
	Log("============================ súbor `%s' ============================\n", CONFIG_FILE);

	Log("Naplním všetky defaulty hodnotou GLOBAL_OPTION_NULL.\n");
	for(o = 0; o < POCET_GLOBAL_OPT; o++){
		for(j = 0; j <= POCET_JAZYKOV; j++){
			cfg_option_default[o][j] = GLOBAL_OPTION_NULL;
		}// for j
	}// for o

	if(! (subor = fopen(CONFIG_FILE, "r")) ){
		Log("Nemôžem otvori� súbor `%s'.\n", CONFIG_FILE);
		return;
	}
	else{
		Log("Súbor `%s' otvorený.\n", CONFIG_FILE);
	}

	for (; (znak = fgetc(subor)) != EOF;)
	{
		if (znak == '#'){
#ifdef LOG_READCONFIG
			Log("Parsujem poznámku...\n");
#endif
			while((znak = fgetc(subor)) != EOF && (znak != '\n') ); // parsuj poznámku do konca riadka
			if(znak == EOF){ 
				Log("EOF... break.\n");
				break; 
			}
			continue;
		}

		if (isspace(znak)){
			continue;
		}

		mystrcpy(option, STR_EMPTY, MAX_OPTION_LENGTH);
		// naèíta maximálne MAX_OPTION_LENGTH znakov (mínus medzery, ktoré ignoruje)
		for(i = 0; (znak != EOF) && (znak != '\n') && (znak != '=') && (i < (MAX_OPTION_LENGTH - 1)); znak = fgetc(subor), ++i)
		{
#ifdef LOG_READCONFIG
			Log("znak == `%c'\n", znak);
#endif
			if(znak == ' ') // v prípade medzery preskoè, èítaj ïalej
				// aby tu mohlo by� znak = fgetc(subor); je potrebné, aby sme skontrolovali, èi nie sme na konci
				i--;
			else{
#ifdef LOG_READCONFIG
				Log("i == %d\n", i);
#endif
				option[i] = znak;
			}
		}
		option[i] = '\0';

		if (znak != '='){continue;}
		if (znak == EOF){
			Log("EOF... break.\n");
			break;
		}

		if ((znak = fgetc(subor)) == '"'){
			znak = fgetc(subor);
		}
		else if(znak == EOF){
			Log("EOF... break.\n");
			break;
		}

		mystrcpy(hodnota, STR_EMPTY, MAX_VALUE_LENGTH);
		// naèíta maximálne MAX_OPTION_LENGTH znakov (mínus medzery, ktoré ignoruje)
		for(i = 0; (znak != EOF) && (znak != '\n') && (znak != '"') && (i < (MAX_HTTP_STR - 1)); znak = fgetc(subor), ++i)
		{
#ifdef LOG_READCONFIG
			Log("znak == `%c'\n", znak);
#endif
			if(znak == ' ') // v prípade medzery preskoè, èítaj ïalej
				// aby tu mohlo by� znak = fgetc(subor); je potrebné, aby sme skontrolovali, èi nie sme na konci
				i--;
			else{
#ifdef LOG_READCONFIG
				Log("i == %d\n", i);
#endif
				hodnota[i] = znak;
			}
		}
		hodnota[i] = '\0';

		Log("Parsovaná option  == `%s'\n", option);
		Log("Parsovaná hodnota == `%s'\n", hodnota);
		if (!strcmp(option, "http_adresa_def")){
			strncpy(cfg_HTTP_ADDRESS_default, hodnota, MAX_HTTP_STR);
		}
		else if (!strcmp(option, "http_zobraz_adr_def")){
			strcpy(cfg_HTTP_DISPLAY_ADDRESS_default, hodnota);
		}
		else if (!strcmp(option, "mail_adresa_def")){
			strcpy(cfg_MAIL_ADDRESS_default, hodnota);
		}
		else if (!strcmp(option, "incldir_def")){
			strcpy(cfg_INCLUDE_DIR_default, hodnota);
		}
		else {
			for(o = 0; o < POCET_GLOBAL_OPT; o++){
				for(j = 0; j <= POCET_JAZYKOV; j++){
					if(!equals(cfg_option_prefix[o], STR_EMPTY) && !equals(cfg_option_postfix[j], STR_EMPTY)){
						// vyskladaj názov option pre jazyk j a option o
						mystrcpy(nazov_option, cfg_option_prefix[o], MAX_STR);
						strcat(nazov_option, ODDELOVAC_CFG_OPTION_PREFIX_POSTFIX);
						strcat(nazov_option, cfg_option_postfix[j]);
						if(!strcmp(option, nazov_option)){
							if(isdigit(hodnota[0])){
								cfg_option_default[o][j] = atoi(hodnota);
							}
						}/* if(!strcmp(option, nazov_option)) */
					}// if
				}// for j
			}// for o
		}
		for(; (znak != EOF) && (znak != '\n'); znak = fgetc(subor) );

		if(znak == EOF){
			Log("EOF... break.\n");
			break;
		}

	}
	fclose(subor);

	Log("============================ súbor `%s' ============================\n", CONFIG_FILE);
	if(equalsi(cfg_MAIL_ADDRESS_default, STR_EMPTY)){
		mystrcpy(cfg_MAIL_ADDRESS_default, MAIL_ADDRESS_DEFAULT, MAX_MAIL_STR);
	}
	Log("cfg_MAIL_ADDRESS_default == %s\n", cfg_MAIL_ADDRESS_default);
	mystrcpy(cfg_MAIL_ADDRESS_default_HU, MAIL_ADDRESS_DEFAULT_HU, MAX_MAIL_STR);
	Log("cfg_MAIL_ADDRESS_default_HU == %s\n", cfg_MAIL_ADDRESS_default_HU);

	Log("readConfig() -- koniec.\n");

	return;
}// readConfig()