/***************************************************************************/ /* */ /* breviar.cpp */ /* (c)1999-2025 | Juraj Vidéky | videky@breviar.sk */ /* */ /* http://www.breviar.sk */ /* */ /* description | master source code containing main() :-) */ /* | most of description available in comments and Git log */ /* */ /* notes | how to compile & link & build */ /* -- do not forget to update #define BUILD_DATE in mydefs.h */ /* */ /* DOS & Windows: Project (Solution) for MS Visual Studio contains all */ /* .cpp and .h files */ /* */ /* linux & other platforms: file `urob' (plays function of makefile) */ /* ------------------------(begin of file `urob') date chmod u=rwx *.* g++ -Wall -W breviar.cpp dbzaltar.cpp liturgia.cpp mygetopt.cpp mylog.cpp myhpage.cpp myexpt.cpp cgiutils.cpp myconf.cpp mydefs.cpp mystring.cpp citania.cpp utf8-utils.cpp mv a.out l.cgi chmod u=rw *.cpp chmod u=rw *.h chmod oa+x *.cgi gzip -c -v l.cgi > l.cgi.gz date * ------------------------(end of file `urob') */ /* */ /* * unfinished parts: marked by ToDo or [ToDo] */ /* */ /***************************************************************************/ /* Debugging in Visual Studio: Debug > breviar Properties, or, in Solution Explorer, right click on your project and choose "Properties" from the drop down menu. Then, go to: Configuration Properties > Debugging You can pass command line arguments in on the line titled by Command Arguments Examples: -i..\..\breviar.sk\include\ -qpsqs -s"qt=pdnes" -qpbm -d1 -m1 -r2000 -f2 -g2 -p2001 -ba.txt -i..\..\breviar.sk\include\ -qpsqs -s"qt=pcr&dvt=pondelok&t=2&p=mpc" -qpdt -d30 -m4 -r2002 -pmrch -ic:\temp\breviar\ -emoja.htm -qpsqs -s"qt=pdt&d=26&m=5&r=2010&p=mrch&ds=1" -s"of5vnv=0&of5hpo=0&of0bf=0&ds=0&of1t=0&of5psps=0&of2tw=0&of2nr=0&of1vkp=0&of1sp=0&of0fn=1&of0tkne=0&of5ps29=0&of0zjvne=0&of1v=0&of5vnpc=0&of1pr=1&of5ps71=0&of1prz=1&of1o=0&of1zspc=1&of0r=0&d=12&of1spspc=0&of5hpred=0&of5ps69=0&of1dps=0&j=sk&k=sk&of1ps3=0&qt=pdt&of2id=0&of5vnhrch=0&of1z95=0&m=10&of5hk=0&o0=65&p=mpc&of5czh=1&o1=5440&of0nanne=0&of5hna=0&r=2015&of1c=0&o2=16384&of1r=0&of0cit=0&of2btnu=1&o3=0&of3=1&of5h1v=0&of2nav=0&of5hpc=1&o4=0&o5=0&of2a=1&of1s=0&of0v=0" -i"D:\personal\breviar\breviar.sk\include" 2017-11-08 value: -s"qt=pdt&d=15&m=7&r=2016&p=mrch&ds=1&o0=2691&o1=202048&o2=25274&o3=5&o4=0&o5=2" -i"D:\personal\breviar\breviar.sk\include" */ #include "vstudio.h" #ifndef __BREVIAR_CPP_ #define __BREVIAR_CPP_ #include #include #include #include #include #include #include "mystring.h" #include "myconf.h" #include "mysystem.h" #include "mysysdef.h" #include "hodin.h" #include "liturgia.h" #include "cgiutils.h" #include "mygetopt.h" #include "utf8-utils.h" #include "dbzaltar.h" #include "mydefs.h" #include "mylog.h" #include "myexpt.h" #include "myhpage.h" #include "mybuild.h" short int isAndroid = NIE; #ifdef IO_ANDROID #include "android.h" #endif // IO_ANDROID #ifdef LITURGICKE_CITANIA_ANDROID #include "citania.h" #endif // LITURGICKE_CITANIA_ANDROID #undef LOG_UNCGI #if defined(LOG_UNCGI) && defined(LOGGING) #define LogUncgi Log #else #define LogUncgi emptyLog #endif // full logging for parameters manipulation #if defined(DEBUG) #define LOG_PARAMS #else #undef LOG_PARAMS #endif #if defined(LOG_PARAMS) && defined(LOGGING) #define LogParams Log #else #define LogParams emptyLog #endif char *_global_buf; char *_global_buf2; #define ishex(x) (((x) >= '0' && (x) <= '9') || ((x) >= 'a' && (x) <= 'f') || ((x) >= 'A' && (x) <= 'F')) #define READ_BUFFER 4096 #define ANCHOR_VYSVETLIVKY "VYSVETLIVKY" #define FILE_VYSVETLIVKY "vysvetl.htm" #define ANCHOR_VYSVETLIVKY_TABULKA "VYSVETL_TABULKA" #define FILE_VYSVETLIVKY_TABULKA "vysvetlt.htm" #define LOG_ciara Log("_____________________________________________________________\n"); #define FILE_LOG "breviar-log.log" #define _main_LOG_to_Export Log #define _main_LOG Log // #ifndef OS_linux #include "breviar.h" // #endif #ifdef IO_ANDROID #define STDIN_FILE stdin_pipe #else #define STDIN_FILE stdin #endif #undef _BREVIAR_ENV #if defined(__APPLE__) #ifndef LIBC_BIONIC #define ENV_K_SIZE 64 #define ENV_V_SIZE 256 #define ENV_ENTRIES 128 struct _breviar_env_entry { char k[ENV_K_SIZE]; char v[ENV_V_SIZE]; }; static struct _breviar_env_entry _breviar_env[ENV_ENTRIES]; #define _BREVIAR_ENV // Overwrite getenv() and putenv() for two reasons: // // 1. It causes crashes if breviar_main() is called multiple times: unlike // setenv(), the argument of putenv() is not copied (at least not on BSD), so // getenv() is likely to crash after the buffers are freed / reused. // // 2. We don't want to save the environment varibles between subsequent // breviar_main() calls as this would cause unexpected behavior. // // Android libc (bionic) has no such problems, putenv copies the values as // well. On the other hand, setenv seems to be not working properly there, so // we disable this logic for android. static int _breviar_putenv(char* s) { char* key = strdup(s); int i; if (!key) { return -1; } char* val = strchr(key, '='); if (!val) { free(key); return -1; } *(val++) = 0; if (strlen(key) >= ENV_K_SIZE) { Log("Too long key in _breviar_putenv(): '%s'\n", key); free(key); return -1; } if (strlen(val) >= ENV_V_SIZE) { Log("Too long value in _breviar_putenv(): '%s'\n", val); free(key); return -1; } for (i = 0; i < ENV_ENTRIES; i++) { if (_breviar_env[i].k[0] == 0 || strcmp(_breviar_env[i].k, key) == 0) { strcpy(_breviar_env[i].k, key); strcpy(_breviar_env[i].v, val); break; } } free(key); if (i == ENV_ENTRIES) { Log("Cannot add key '%s' to environment: env is full\n", key); return -1; } return 0; } static char* _breviar_getenv(const char* k) { int i; if (strlen(k) >= ENV_K_SIZE) { Log("Environment key too long: '%s'\n", k); return NULL; } for (i = 0; i < ENV_ENTRIES && _breviar_env[i].k[0]; i++) { if (strcmp(k, _breviar_env[i].k) == 0) { return _breviar_env[i].v; } } return NULL; } #undef getenv #define getenv _breviar_getenv #define putenv _breviar_putenv #endif /* LIBC_BIONIC */ #elif defined(__linux) || defined(__unix) || defined(__posix) // code before # a98c4029 copied here #ifndef LIBC_BIONIC // Overwrite putenv() because it causes crashes if breviar_main() is called multiple times: // unlike setenv(), the argument of putenv() is not copied (at least not on BSD), so // getenv() is likely to crash after the buffers are freed / reused. // // Android libc (bionic) has no such problems, putenv copies the values as // well. On the other hand, setenv seems to be not working properly there, so // we disable this logic for android. static int my_putenv(char* s) { char* key = strdup(s); if (!key) { return 0; } char* val = strchr(key, '='); if (!val) { free(key); return 0; } *(val++) = 0; int res = setenv(key, val, 1); free(key); return res; } #define putenv my_putenv #endif /* LIBC_BIONIC */ #endif /* apple | unix */ #ifdef IO_ANDROID #define putenv android_putenv #define getenv android_getenv #endif short int query_type; // premenna obsahujuca PRM_..., deklarovana v mydefs.h // globalna premenna, do ktorej sa ukladaju info o analyzovanom dni _struct_dm *_global_den_ptr; // _struct_dm _global_den; #define _global_den (*_global_den_ptr) // globalne premenne, do ktorych sa ukladaju info o analyzovanom dni o sviatkoch svatych _struct_dm* _global_svaty_ptr[MAX_POCET_SVATY]; // an array of '_struct_dm' pointers #define _global_svaty(i) (*(_global_svaty_ptr[i - 1])) // globalna premenna, ktora obsahuje data o spomienke panny marie v sobotu _struct_dm *_global_pm_sobota_ptr; // _struct_dm _global_pm_sobota; #define _global_pm_sobota (*_global_pm_sobota_ptr) // globalne premenne obsahujuce data modlitbach _type_1vespery *_global_modl_prve_vespery_ptr; #define _global_modl_prve_vespery (*_global_modl_prve_vespery_ptr) _type_1kompletorium *_global_modl_1kompletorium_ptr; #define _global_modl_prve_kompletorium (*_global_modl_1kompletorium_ptr) _type_invitatorium *_global_modl_invitatorium_ptr; #define _global_modl_invitatorium (*_global_modl_invitatorium_ptr) _type_posv_citanie *_global_modl_posv_citanie_ptr; #define _global_modl_posv_citanie (*_global_modl_posv_citanie_ptr) _type_ranne_chvaly *_global_modl_ranne_chvaly_ptr; #define _global_modl_ranne_chvaly (*_global_modl_ranne_chvaly_ptr) _type_cez_den_9 *_global_modl_cez_den_9_ptr; #define _global_modl_cez_den_9 (*_global_modl_cez_den_9_ptr) _type_cez_den_12 *_global_modl_cez_den_12_ptr; #define _global_modl_cez_den_12 (*_global_modl_cez_den_12_ptr) _type_cez_den_3 *_global_modl_cez_den_3_ptr; #define _global_modl_cez_den_3 (*_global_modl_cez_den_3_ptr) _type_vespery *_global_modl_vespery_ptr; #define _global_modl_vespery (*_global_modl_vespery_ptr) _type_kompletorium *_global_modl_kompletorium_ptr; #define _global_modl_kompletorium (*_global_modl_kompletorium_ptr) _struct_anchor_and_file *_global_include_static_text_ptr; #define _global_include_static_text (*_global_include_static_text_ptr) // globalna premenna, ktora obsahuje MODL_... short int _global_modlitba = MODL_NEURCENA; // globalna premenna, do ktorej ukladaju funkcie vytvor_query_string_... linku tvaru SCRIPT_PATH(script_name) ++ "?param1=val¶m2=val&..." | 2003-07-09 prerobeny & v linkach na HTML_AMPERSAND char *_global_link_ptr; #define _global_link _global_link_ptr char *_global_pom_str; // pomocný string: návratová hodnota viacerých funkcií (hľadaj "return (_global_pom_str);") // globalna premenna, do ktorej sa ukladaju info o jednotlivych vyznacnych liturgickych dni, pouzivaju void _dm_...() funkcie a void analyzuj_rok() funkcia _struct_dm *_global_result_ptr; #define _global_result (*_global_result_ptr) // globalna premenna, do ktorej sa uklada info o liturgickom roku pouziva void analyzuj_rok() funkcia _struct_lrok *_global_r_ptr; #define _global_r (*_global_r_ptr) // globálna premenná, ktorú je potrebné na miestach, kde by sme potrebovali zistiť v runtime #define a kombinovať ho s podmienkou z runtime (2011-04-20) short int _global_system; // globalna premenna, do ktorej sviatky_svatych() uklada pocet sviatkov (de facto lubovolnych spomienok), ktore pripadaju na dany den // -- v podstate neuklada do nej, ale v _rozbor_dna() sa do nej priradi vysledok (navratova hodnota) z sviatky_svatych() short int _global_pocet_svatych; // globálna premenná -- pole -- obsahujúca options; pôvodne to boli globálne premenné _global_opt 1..9 atď., obsahujú pom_OPT... unsigned long long _global_opt[POCET_GLOBAL_OPT]; // globálna premenná -- pole -- obsahujúca force options; pôvodne to boli globálne premenné _global_force_opt 1..9 atď., obsahujú pom_FORCE_OPT... unsigned long long _global_force_opt[POCET_GLOBAL_OPT]; // globálne premenné -- polia -- obsahujúce jednotlivé bity pre force option 0, 1, 2, 4, 5, 6 unsigned long long _global_opt_0_specialne[POCET_OPT_0_SPECIALNE]; unsigned long long _global_opt_1_casti_modlitby[POCET_OPT_1_CASTI_MODLITBY]; unsigned long long _global_opt_2_html_export[POCET_OPT_2_HTML_EXPORT]; unsigned long long _global_opt_4_offline_export[POCET_OPT_4_OFFLINE_EXPORT]; unsigned long long _global_opt_5_alternatives[POCET_OPT_5_ALTERNATIVES]; unsigned long long _global_opt_6_alternatives_multi[POCET_OPT_6_ALTERNATIVES_MULTI]; short int _global_opt_append = NIE; short int _global_opt_tedeum = NIE; short int _global_pocet_slava_otcu = 0; // pridaná 2007-05-18; 2011-04-28: zrušil som porovnanie pri kontrole chválospevu Dan 3, 57-88. 56; asi je táto premenná zbytočná, ale možno sa ešte zíde :) short int _global_ant_mcd_rovnake = NIE; short int _global_opt_export_date_format = EXPORT_DATE_SIMPLE; short int _global_opt_batch_monthly = NIE; short int _global_hlavicka_Export = 0; short int _global_patka_Export = 0; char *_global_string; char *_global_string2; char *_global_string_farba; char _global_string_modlitba[SMALL]; char _global_string_podnadpis[SMALL]; char _global_string_spol_cast[MAX_GLOBAL_STR2]; char _global_string_spol_cast_full[MAX_GLOBAL_STR]; // 2012-08-16: doplnené kvôli návratovej hodnote z funkcie init_global_string_spol_cast() short int ret_sc = MODL_SPOL_CAST_NULL; short int _global_linky; short int _global_jazyk; short int _global_kalendar; short int _global_ritus; short int _global_theme; char _global_theme_light_background_color[SMALL]; // used for background color override for light theme char _global_theme_dark_background_color[SMALL]; // used for background color override for dark theme short int _global_sidemenu_location; short int _global_font; // for value FONT_CUSTOM, we use pom_FONT as global variable unless empty short int _global_font_size; short int _global_font_size_pt; short int _global_style_margin; short int _global_line_height_perc; short int _global_pocet_zalmov_kompletorium; char _special_anchor_prefix_CZ_hymnus[SMALL]; // used for CZ hymns char _special_anchor_postfix_CZ_hymnus_cezrok[SMALL]; // used for CZ hymns in Per Annum char _special_anchor_prefix_CZ_hymnus_CZ_2cit[SMALL]; // used for CZ 2nd readings char _special_anchor_postfix_two_years_cycle[SMALL]; // used for 1st & 2nd readings (two-years cycle) char _special_file_prefix_two_years_cycle[SMALL]; // used for 1st & 2nd readings (two-years cycle) char _global_export_navig_hore[SMALL] = DEFAULT_MONTH_EXPORT; char _global_export_navig_hore_month[SMALL] = DEFAULT_MONTH_EXPORT; char _global_export_navig_hore_day[SMALL] = DEFAULT_MONTH_EXPORT; char _global_css_font_family[SMALL] = DEFAULT_FONT_FAMILY_SERIF; char _global_css_font_size[SMALL] = STR_EMPTY; short int _global_override_thin_nbsp = NIE; // whether to override ALL nbsp with thin nbsp short int _global_vstup_den = 0; short int _global_vstup_mesiac = 0; short int _global_vstup_rok = 0; short int _global_poradie_svaty = 0; short int _global_rok_from = 0; short int _global_rok_to = 0; short int _global_pocet_navigacia = 0; // počet prejdených/spracovaných parametrov PARAM_NAVIGACIA short int _global_pocet_volani_interpretTemplate = 0; // počet volaní _global_pocet_volani_interpretTemplate() //--------------------------------------------------------------------- #define DEBUG_GET_FORM Log("getForm(): ");Log #define DEBUG_GET_ARGV Log("getArgv(): ");Log // globalna premenna, ktora hovori, ci preskakovat tagy pri preskakovani Magnifikat / Benediktus (ak je _global_opt 1 == ANO) short int _global_skip_in_prayer = NIE; short int _global_skip_in_prayer_2 = NIE; // 2011-04-07: kvôli číslovaniu veršov v častiach, kde sa používa _global_skip_in_prayer short int _global_skip_in_prayer_vnpc = NIE; // 2011-05-03: kvôli veľkonočnej nedeli, posvätné čítanie short int _global_som_vo_vigilii = NIE; short int params; // odkial su brane parametre; hodnoty // SCRIPT_PARAM_FROM_FORM // SCRIPT_PARAM_FROM_ARGV // SCRIPT_PARAM_FROM_QS char *query_string; // QUERY_STRING environment variable char pom_QUERY_TYPE [MAX_POM_QUERY_TYPE] = STR_EMPTY; // typ dotazu, retazec char pom_DEN [SMALL] = STR_EMPTY; // sluzi aj ako pom_DEN_V_TYZDNI a pom_SVIATOK #define pom_DEN_V_TYZDNI pom_DEN #define pom_SVIATOK pom_DEN char pom_MESIAC [SMALL] = STR_EMPTY; // sluzi aj ako pom_TYZDEN aj ako mesiac roka #define pom_TYZDEN pom_MESIAC char pom_ROK [SMALL] = STR_EMPTY; // sluzi aj ako pom_ANALYZA_ROKU #define pom_ANALYZA_ROKU pom_ROK #define pom_STATIC_TEXT pom_ROK char pom_MODLITBA [SMALL] = STR_EMPTY; #define pom_MODL_ORDINARIUM pom_MODLITBA char pom_OPT[POCET_GLOBAL_OPT][SMALL]; char pom_FORCE_OPT[POCET_GLOBAL_OPT][SMALL]; // reťazcové polia pre force option 0, 1, 2, 4 (jednotlivé bit-komponenty), 6 (decimal-place-components) char pom_FORCE_OPT_0_SPECIALNE[POCET_OPT_0_SPECIALNE][SMALL]; char pom_FORCE_OPT_1_CASTI_MODLITBY[POCET_OPT_1_CASTI_MODLITBY][SMALL]; char pom_FORCE_OPT_2_HTML_EXPORT[POCET_OPT_2_HTML_EXPORT][SMALL]; char pom_FORCE_OPT_4_OFFLINE_EXPORT[POCET_OPT_4_OFFLINE_EXPORT][SMALL]; char pom_FORCE_OPT_5_ALTERNATIVES[POCET_OPT_5_ALTERNATIVES][SMALL]; char pom_FORCE_OPT_6_ALTERNATIVES_MULTI[POCET_OPT_6_ALTERNATIVES_MULTI][SMALL]; char pom_OPT_APPEND[SMALL] = STR_EMPTY; char pom_DALSI_SVATY[SMALL] = STR_EMPTY; char pom_ROK_FROM[SMALL] = STR_EMPTY; char pom_ROK_TO[SMALL] = STR_EMPTY; char pom_LINKY[SMALL] = STR_EMPTY; char pom_JAZYK[SMALL] = STR_EMPTY; char pom_KALENDAR[SMALL] = STR_EMPTY; char pom_THEME[SMALL] = STR_EMPTY; char pom_THEME_LIGHT_BACKGROUND_COLOR[SMALL] = STR_EMPTY; char pom_THEME_DARK_BACKGROUND_COLOR[SMALL] = STR_EMPTY; char pom_SIDEMENU_LOCATION[SMALL] = STR_EMPTY; char pom_FONT[SMALL] = STR_EMPTY; char pom_FONT_SIZE[VERY_SMALL] = STR_EMPTY; char pom_FONT_SIZE_PT[VERY_SMALL] = STR_EMPTY; char pom_STYLE_MARGIN[VERY_SMALL] = STR_EMPTY; char pom_LINE_HEIGHT_PERC[VERY_SMALL] = STR_EMPTY; char pom_OPT_DATE_FORMAT[SMALL] = STR_EMPTY; char pom_EXPORT_MONTHLY [SMALL] = STR_EMPTY; // pre batch mód po mesiacoch; 0 = doterajší spôsob (riadok s dátumom a potom linky na modlitby) short int export_monthly_druh = 0; short int export_month_zaciatok = NIE; short int export_month_nova_modlitba = NIE; char pom_LIT_OBD [SMALL] = STR_EMPTY; char pom_LIT_ROK [SMALL] = STR_EMPTY; char bad_param_str[MAX_STR] = STR_EMPTY; urlvariable param[MAX_VARIABLES]; // struktura oznacujuca dvojice z query stringu, napr. QUERY_STRING=QUERY_TYPE=PRM_DATUM&DEN=7&MESIAC=5&ROK=1976... // je to i-tica (tuple) // // , // , // , // , // char file_export[SMALL] = STR_EMPTY; // nazov suboru, do ktoreho sa mozno exportuje v pripade pouzitia switchu `e' pri getArgv(); // ak je na jeho konci '+', tak sa appenduje; vyuzite pre switch -a (append), pozri dolu // pre case SCRIPT_PARAM_FROM_ARGV char include_dir[MAX_STR] = STR_EMPTY; char name_binary_executable[MAX_STR] = STR_EMPTY; char name_batch_file[MAX_STR] = STR_EMPTY; FILE *batch_file = NULL; char name_batch_html_file[MAX_STR] = STR_EMPTY; FILE *batch_html_file = NULL; char dir_name[MAX_STR] = STR_EMPTY; FILE *batch_month_file = NULL; char name_batch_month_file[MAX_STR] = STR_EMPTY; char system_command[MAX_STR] = STR_EMPTY; short int index_pre_mesiac_otvoreny = NIE; char optional_html_line_break[MAX_STR] = STR_EMPTY; char optional_html_class_button[MAX_STR] = STR_EMPTY; char optional_html_button_begin[MAX_STR] = STR_EMPTY; char optional_html_button_prayer_begin[MAX_STR] = STR_EMPTY; char optional_html_button_end[MAX_STR] = STR_EMPTY; // ------------------------------------------------------------------- short int _smer_override(short int smer, short int typslav) { if (isGlobalOption(OPT_1_CASTI_MODLITBY, BIT_OPT_1_OVERRIDE_STUP_SLAV)) { if (typslav == SLAV_SVIATOK) { return 3; // slávnosti Pána, preblahoslavenej Panny Márie a svätých, uvedené vo všeobecnom kalendári } else if (typslav == SLAV_SPOMIENKA) { return ((isGlobalOption(OPT_1_CASTI_MODLITBY, BIT_OPT_1_STUP_SVIATOK_SLAVNOST)) ? 3 : 7); // slávnosti Pána, preblahoslavenej Panny Márie a svätých, uvedené vo všeobecnom kalendári resp. sviatky preblahoslavenej Panny Márie a svätých, uvedené vo všeobecnom kalendári } else if (typslav == SLAV_LUB_SPOMIENKA) { return ((isGlobalOption(OPT_1_CASTI_MODLITBY, BIT_OPT_1_STUP_SVIATOK_SLAVNOST)) ? 4 : 8); // miestne slávnosti resp. miestne sviatky } else { return smer; } } else { return smer; } } // _smer_override() short int _typslav_override(short int typslav) { if (isGlobalOption(OPT_1_CASTI_MODLITBY, BIT_OPT_1_OVERRIDE_STUP_SLAV)) { if (_global_poradie_svaty == PORADIE_PM_SOBOTA) { // override sa neaplikuje na spomienku Panny Márie v sobotu return typslav; } else if (typslav == SLAV_SVIATOK) { return SLAV_SLAVNOST; } else if ((typslav == SLAV_SPOMIENKA) || (typslav == SLAV_LUB_SPOMIENKA)) { return ((isGlobalOption(OPT_1_CASTI_MODLITBY, BIT_OPT_1_STUP_SVIATOK_SLAVNOST)) ? SLAV_SLAVNOST : SLAV_SVIATOK); } else { return typslav; } } else { return typslav; } } // _typslav_override() short int useWhenGlobalOption(short opt_i, unsigned long long bit_opt_i_component_j) { if (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_VOICE_OUTPUT)) { // behave as if these were switched OFF for voice output if ((opt_i == OPT_0_SPECIALNE) && ( (bit_opt_i_component_j == BIT_OPT_0_VERSE) || (bit_opt_i_component_j == BIT_OPT_0_REFERENCIE) || (bit_opt_i_component_j == BIT_OPT_0_CITANIA) || (bit_opt_i_component_j == BIT_OPT_0_FOOTNOTES) || (bit_opt_i_component_j == BIT_OPT_0_TRANSPARENT_NAV) // || (bit_opt_i_component_j == BIT_OPT_0_ZALMY_FULL_TEXT) // read also psalm omissions (for TTS) )) { return NIE; } else if ((opt_i == OPT_1_CASTI_MODLITBY) && ( (bit_opt_i_component_j == BIT_OPT_1_ZOBRAZ_SPOL_CAST) )) { return NIE; } else if ((opt_i == OPT_2_HTML_EXPORT) && ( (bit_opt_i_component_j == BIT_OPT_2_TEXT_WRAP) || (bit_opt_i_component_j == BIT_OPT_2_ROZNE_MOZNOSTI) )) { return NIE; } else if ((opt_i == OPT_5_ALTERNATIVES) && ( (bit_opt_i_component_j == BIT_OPT_5_ZAVER_KNAZ_DIAKON) )) { return NIE; } // behave as if these were switched ON for voice output else if ((opt_i == OPT_0_SPECIALNE) && ( (bit_opt_i_component_j == BIT_OPT_0_FONT_NORMAL) )) { return ANO; } else if ((opt_i == OPT_1_CASTI_MODLITBY) && ( (bit_opt_i_component_j == BIT_OPT_1_TEDEUM) || (bit_opt_i_component_j == BIT_OPT_1_CHVALOSPEVY) || (bit_opt_i_component_j == BIT_OPT_1_SLAVA_OTCU) || (bit_opt_i_component_j == BIT_OPT_1_OTCENAS) || (bit_opt_i_component_j == BIT_OPT_1_PLNE_RESP) || (bit_opt_i_component_j == BIT_OPT_1_PROSBY_ZVOLANIE) || (bit_opt_i_component_j == BIT_OPT_1_ZAVER) || (bit_opt_i_component_j == BIT_OPT_1_SKRY_POPIS) || (bit_opt_i_component_j == BIT_OPT_1_KOMPL_MARIA_ANT) )) { return ANO; } else if ((opt_i == OPT_2_HTML_EXPORT) && ( (bit_opt_i_component_j == BIT_OPT_2_ALTERNATIVES) )) { return ANO; } return isGlobalOption(opt_i, bit_opt_i_component_j); } return isGlobalOption(opt_i, bit_opt_i_component_j); } // useWhenGlobalOption() void setGlobalOption(short opt_i, unsigned long long bit_opt_i_component_j, short value) { if (opt_i == OPT_6_ALTERNATIVES_MULTI) { // OPT 6 uses decimal-place logic; value should be between 0 and 9 short current_value = (short)((_global_opt[opt_i] DIV bit_opt_i_component_j) MOD 10); if (current_value != value && value >= 0 && value <= 9) { _global_opt[opt_i] = _global_opt[opt_i] + bit_opt_i_component_j * (value - current_value); } } else { // bitwise logic if (((_global_opt[opt_i] & bit_opt_i_component_j) == bit_opt_i_component_j) && (value == NIE)) { _global_opt[opt_i] -= bit_opt_i_component_j; } else if (((_global_opt[opt_i] & bit_opt_i_component_j) != bit_opt_i_component_j) && (value == ANO)) { _global_opt[opt_i] += bit_opt_i_component_j; } } } // setGlobalOption() short int getGlobalOption(short opt_i, unsigned long long bit_opt_i_component_j) { if (opt_i == OPT_6_ALTERNATIVES_MULTI) { // OPT 6 uses decimal-place logic; value should be between 0 and 9 return ((_global_opt[opt_i] DIV bit_opt_i_component_j) MOD 10); } else { // bitwise logic return isGlobalOption(opt_i, bit_opt_i_component_j); } } // getGlobalOption() // ------------------------------------------------------------------- // Read a POST query from standard input into a dynamic buffer. Terminate it with a null character. short int postread(void) { char *buf = NULL; long size = 0, sofar = 0, got; LogUncgi("uncgi::postread() -- zaciatok\n"); buf = getenv("CONTENT_TYPE"); if (buf == NULL || strcmp(buf, "application/x-www-form-urlencoded")) { LogUncgi("uncgi::No content type was passed.\n"); return FAILURE; } buf = getenv("CONTENT_LENGTH"); if (buf == NULL) { LogUncgi("uncgi::The server did not tell uncgi how long the request was.\n"); return FAILURE; } size = atoi(buf); buf = (char *)malloc(size + 1); if (buf == NULL) { LogUncgi("uncgi::Error: postread\n"); return FAILURE; } do { got = fread(buf + sofar, 1, size - sofar, STDIN_FILE); sofar += got; } while (got && sofar < size); buf[sofar] = '\0'; _global_buf = buf; LogUncgi("uncgi::postread() -- koniec; výstupný buffer == %s\n", _global_buf); return SUCCESS; } // postread(); // Convert two hex digits to a value. static short int htoi(/* unsigned */ char *s) { short int value; char c; c = s[0]; if (isupper(c)) { c = tolower(c); } value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16; c = s[1]; if (isupper(c)) { c = tolower(c); } value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10; return (value); } // htoi(); // Get rid of all the URL escaping in a string. Modify it in place, since the result will always be equal in length or smaller. static void url_unescape(/* unsigned */ char *str) { /* unsigned */ char *dest = str; while (str[0]) { if (str[0] == '+') { dest[0] = ' '; } else if (str[0] == '%' && ishex(str[1]) && ishex(str[2])) { dest[0] = (/* unsigned */ char)htoi(str + 1); str += 2; } else { dest[0] = str[0]; } str++; dest++; } dest[0] = '\0'; } // url_unescape(); // Stuff a URL-unescaped variable, with the prefix on its name, into the environment. Uses the "=" from the CGI arguments. // Putting an "=" in a field name is probably a bad idea. // If the variable is already defined, append a '#' to it along with the new value. // If the variable name begins with an underline, strip whitespace from the start and end and normalize end-of-line characters. static void stuffenv(char *var) { char *buf, *c, *s, *t, *oldval, *newval; short int despace = 0, got_cr = 0; int putenv_ret; #ifdef DEBUG LogUncgi("Before unescape: %s\n", var); #endif url_unescape(var); #ifdef DEBUG LogUncgi("After unescape: %s\n", var); #endif if (strlen(_global_buf2) > 0) { strcat(_global_buf2, "&"); } strcat(_global_buf2, var); #ifdef DEBUG LogUncgi("Nabaľujem _global_buf2 == %s\n", _global_buf2); #endif // Allocate enough memory for the variable name and its value. buf = (char *)malloc(strlen(var) + sizeof(WWW_PREFIX) + 2); if (buf == NULL) { Log(" Not enough memory to allocate buffer for `buf'\n"); return; } strcpy(buf, WWW_PREFIX); if (var[0] == '_') { strcpy(buf + sizeof(WWW_PREFIX) - 1, var + 1); despace = 1; } else { strcpy(buf + sizeof(WWW_PREFIX) - 1, var); } // If, for some reason, there wasn't an = in the query string, add one so the environment will be valid. // Also, change periods to underscores so folks can get at "image" input fields from the shell, which has trouble with periods in variable names. for (c = buf; *c != '\0'; c++) { if (*c == '.') { *c = '_'; } if (*c == '=') { break; } } if (*c == '\0') { c[1] = '\0'; } *c = '\0'; // Do whitespace stripping, if applicable. Since this can only ever shorten the value, it's safe to do in place. if (despace && c[1]) { #ifdef DEBUG LogUncgi(" Stripping whitespace.\n"); #endif for (s = c + 1; *s && isspace(*s); s++) ; t = c + 1; while (*s) { if (*s == '\r') { got_cr = 1; s++; continue; } if (got_cr) { if (*s != '\n') { *t++ = '\n'; } got_cr = 0; } *t++ = *s++; } // Strip trailing whitespace if we copied anything. while (t > c && isspace(*--t)) ; t[1] = '\0'; } // Check for the presence of the variable. if ((oldval = getenv(buf))) // priradenie do oldval a následný test, či nie je pointer NULL { #ifdef DEBUG LogUncgi(" Variable %s exists with value %s\n", buf, oldval); #endif newval = (char *)malloc(strlen(oldval) + strlen(buf) + strlen(c + 1) + 3); if (newval == NULL) { Log(" Not enough memory to allocate buffer for `buf'\n"); return; } *c = '='; sprintf(newval, "%s#%s", buf, oldval); // pôvodne tu bolo toto; zapoznámkované 2011-04-13 (pokus) // sprintf(newval, "%s", buf); *c = '\0'; // Set up to free the entire old environment variable -- there really ought to be a library function for this. // It's safe to free it since the only place these variables come from is a previous call to this function; we can never be freeing a system-supplied environment variable. oldval -= strlen(buf) + 1; // skip past VAR= } else { #ifdef DEBUG LogUncgi(" Variable %s doesn't exist yet.\n", buf); #endif *c = '='; newval = buf; } #ifdef DEBUG LogUncgi(" putenv %s\n", newval); #endif putenv_ret = putenv(newval); if (putenv_ret != 0) { LogUncgi(" putenv vrátila chybu! (%s)\n", newval); } else { LogUncgi(" putenv OK (%s, %s)\n", buf, newval); } if (oldval) { // Do the actual freeing of the old value after it's not being referred to any more. // Log("free oldval (%s)...\n", oldval); // free(oldval); // Log("free buf (%s)...\n", buf); // free(buf); }// if (oldval) } // stuffenv(); // Scan a query string, stuffing variables into the environment. This should ideally just use strtok(), but that's not available everywhere. static void scanquery(char *q) { char *next = q; LogUncgi("uncgi::scanquery() -- začiatok\n"); do { next = strchr(next, '&'); if (next) { *next = '\0'; } stuffenv(q); if (next) { *next++ = '&'; } q = next; LogUncgi("uncgi::scanquery(): \n\tq == %s\n\t_global_buf == %s\n", q, _global_buf); } while (q != NULL); LogUncgi("uncgi::scanquery() -- koniec\n"); } // scanquery(); // naplni premenne WWW_... hodnotami z QS, t.j. akoby to vratilo uncgi.c // return: on success, returns SUCCESS // on error, returns FAILURE short int setForm(void) { char local_str[SMALL] = STR_EMPTY; short int ret; short int i; // kvôli prilep_request_options Log("setForm() -- begin\n"); #ifndef LOG_PARAMS Log("setForm(): LOG_PARAMS is undefined, no LogParams() printed...\n"); #endif // pri simulácii z qs je pom_QUERY_TYPE = psqs => upravujem, aby bola hodnota parametra param[x].name == qt resp. berieme z query_type mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_QUERY_TYPE, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_QUERY_TYPE), SMALL); strcat(local_str, "="); if (equals(pom_QUERY_TYPE, STR_PRM_SIMULACIA_QS)) { LogParams("\tpre simuláciu priraďujem hodnotu z query_type (%s)...\n", param[0].val); // ak je simulácia, nastav hodnotu podľa query_type strcat(local_str, param[0].val); } else { strcat(local_str, pom_QUERY_TYPE); } LogParams("--- setForm: putenv(%s); ... ", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } // deň mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_DEN, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_DEN), SMALL); strcat(local_str, "="); strcat(local_str, pom_DEN); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } // mesiac mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_MESIAC, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_MESIAC), SMALL); strcat(local_str, "="); strcat(local_str, pom_MESIAC); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } // rok mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_ROK, STR_EMPTY)) { if (query_type == PRM_ANALYZA_ROKU) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_ANALYZA_ROKU), SMALL); } else if (query_type == PRM_STATIC_TEXT) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_STATIC_TEXT), SMALL); } else { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_ROK), SMALL); } strcat(local_str, "="); strcat(local_str, pom_ROK); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } // modlitba mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_MODLITBA, STR_EMPTY)) { if (query_type == PRM_STATIC_TEXT) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_MODL_ORDINARIUM), SMALL); } else { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_MODLITBA), SMALL); } strcat(local_str, "="); strcat(local_str, pom_MODLITBA); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } // pom_DALSI_SVATY mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_DALSI_SVATY, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_DALSI_SVATY), SMALL); strcat(local_str, "="); strcat(local_str, pom_DALSI_SVATY); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } // options for (i = 0; i < POCET_GLOBAL_OPT; i++) { mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_OPT[i], STR_EMPTY)) { mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, i, USE_STR_OPT); strcat(local_str, "="); strcat(local_str, pom_OPT[i]); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } }// for i // force options for (i = 0; i < POCET_GLOBAL_OPT; i++) { mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_FORCE_OPT[i], STR_EMPTY)) { mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, i, USE_STR_FORCE_OPT); strcat(local_str, "="); strcat(local_str, pom_FORCE_OPT[i]); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } }// for i // force option 0, jednotlivé bit-komponenty LogParams("force option %d, jednotlivé bit-komponenty...(setForm)\n", OPT_0_SPECIALNE); for (i = 0; i < POCET_OPT_0_SPECIALNE; i++) { mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_FORCE_OPT_0_SPECIALNE[i], STR_EMPTY)) { mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, OPT_0_SPECIALNE, i); strcat(local_str, "="); strcat(local_str, pom_FORCE_OPT_0_SPECIALNE[i]); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } }// for i // force option 1, jednotlivé bit-komponenty LogParams("force option %d, jednotlivé bit-komponenty...(setForm)\n", OPT_1_CASTI_MODLITBY); for (i = 0; i < POCET_OPT_1_CASTI_MODLITBY; i++) { mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_FORCE_OPT_1_CASTI_MODLITBY[i], STR_EMPTY)) { mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, OPT_1_CASTI_MODLITBY, i); strcat(local_str, "="); strcat(local_str, pom_FORCE_OPT_1_CASTI_MODLITBY[i]); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } }// for i // force option 2, jednotlivé bit-komponenty LogParams("force option %d, jednotlivé bit-komponenty...(setForm)\n", OPT_2_HTML_EXPORT); for (i = 0; i < POCET_OPT_2_HTML_EXPORT; i++) { mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_FORCE_OPT_2_HTML_EXPORT[i], STR_EMPTY)) { mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, OPT_2_HTML_EXPORT, i); strcat(local_str, "="); strcat(local_str, pom_FORCE_OPT_2_HTML_EXPORT[i]); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } }// for i // force option 5, jednotlivé bit-komponenty LogParams("force option %d, jednotlivé bit-komponenty...(setForm)\n", OPT_5_ALTERNATIVES); for (i = 0; i < POCET_OPT_5_ALTERNATIVES; i++) { mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_FORCE_OPT_5_ALTERNATIVES[i], STR_EMPTY)) { mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, OPT_5_ALTERNATIVES, i); strcat(local_str, "="); strcat(local_str, pom_FORCE_OPT_5_ALTERNATIVES[i]); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } }// for i // force option 6, jednotlivé decimal-place-komponenty LogParams("force option %d, jednotlivé decimal-place-komponenty...(setForm)\n", OPT_6_ALTERNATIVES_MULTI); for (i = 0; i < POCET_OPT_6_ALTERNATIVES_MULTI; i++) { mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_FORCE_OPT_6_ALTERNATIVES_MULTI[i], STR_EMPTY)) { mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, OPT_6_ALTERNATIVES_MULTI, i); strcat(local_str, "="); strcat(local_str, pom_FORCE_OPT_6_ALTERNATIVES_MULTI[i]); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } }// for i mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_JAZYK, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_JAZYK), SMALL); strcat(local_str, "="); strcat(local_str, pom_JAZYK); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_KALENDAR, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_KALENDAR), SMALL); strcat(local_str, "="); strcat(local_str, pom_KALENDAR); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_THEME, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_THEME), SMALL); strcat(local_str, "="); strcat(local_str, pom_THEME); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_THEME_LIGHT_BACKGROUND_COLOR, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_THEME_LIGHT_BACKGROUND_COLOR), SMALL); strcat(local_str, "="); strcat(local_str, pom_THEME_LIGHT_BACKGROUND_COLOR); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_THEME_DARK_BACKGROUND_COLOR, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_THEME_DARK_BACKGROUND_COLOR), SMALL); strcat(local_str, "="); strcat(local_str, pom_THEME_DARK_BACKGROUND_COLOR); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_SIDEMENU_LOCATION, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_SIDEMENU_LOCATION), SMALL); strcat(local_str, "="); strcat(local_str, pom_SIDEMENU_LOCATION); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_FONT, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_FONT_NAME), SMALL); strcat(local_str, "="); strcat(local_str, pom_FONT); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_FONT_SIZE, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_FONT_SIZE), SMALL); strcat(local_str, "="); strcat(local_str, pom_FONT_SIZE); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_FONT_SIZE_PT, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_FONT_SIZE_PT), SMALL); strcat(local_str, "="); strcat(local_str, pom_FONT_SIZE_PT); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_STYLE_MARGIN, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_STYLE_MARGIN), SMALL); strcat(local_str, "="); strcat(local_str, pom_STYLE_MARGIN); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } mystrcpy(local_str, STR_EMPTY, SMALL); if (!equals(pom_LINE_HEIGHT_PERC, STR_EMPTY)) { mystrcpy(local_str, ADD_WWW_PREFIX_(STR_LINE_HEIGHT_PERC), SMALL); strcat(local_str, "="); strcat(local_str, pom_LINE_HEIGHT_PERC); LogParams("--- setForm: putenv(%s); ...\n", local_str); ret = putenv(local_str); LogParams("--- setForm: putenv returned %d.\n", ret); } Log("setForm() -- end, returning SUCCESS\n"); return SUCCESS; } // setForm(); // zisti, odkial sa citaju argumenty (vstupy); // return: // // SCRIPT_PARAM_FROM_FORM (z formulara, t.j. syst. premennych WWW_...) // SCRIPT_PARAM_FROM_ARGV (z argumentov dialogoveho riadka) // SCRIPT_PARAM_FROM_QS (zo systemovej premennej QUERY_STRING) // short int getSrciptParamFrom(int argc) { // najprv zistime, ci existuje systemova premenna QUERY_STRING char *qs; char *method; short int ret; Log("--- getSrciptParamFrom(): begin\n"); qs = getenv("QUERY_STRING"); if (qs != NULL) { // znamená to, že existuje query string - či už klasický GET, alebo časť poslaná POST linkou Log("qs (query_string) == %s\n", qs); Log("trying to unescape & characters...\n"); mystrcpy(query_string, mystr_replace(qs, HTML_AMPERSAND, "&").c_str(), MAX_QUERY_STR); } else { mystrcpy(query_string, STR_EMPTY, MAX_QUERY_STR); } if (query_string != NULL) { Log("query_string == %s\n", query_string); } else { Log("query_string is NULL\n"); } // get request method (POST vs. GET) method = getenv("REQUEST_METHOD"); if (method != NULL) { Log("method == %s\n", method); } else { Log("method is NULL\n"); } if (method != NULL && !strcmp(method, "POST")) { ret = postread(); if (ret == SUCCESS) { Log("OK. Pokracujem skenovanim query...\n"); if ((_global_buf != NULL) && (_global_buf[0] != '\0')) { scanquery(_global_buf); Log("POST::Vysledok == %s\n", _global_buf2); if (query_string != NULL && !equals(query_string, STR_EMPTY)) { Log("2006-08-01: Experiment - prilepujem _global_buf2 na koniec query_stringu...\n"); strcat(query_string, "&"); strcat(query_string, _global_buf2); Log("query_string == %s...\n", query_string); } } } else { Log("Chyba.\n"); } }// POST Log("--- getSrciptParamFrom(): end...\n"); // systemova premenna QUERY_STRING existuje prave vtedy, ked query_string nie je prazdny retazec if ((query_string != NULL) && (strlen(query_string) > 0)) { // existuje, teda budeme pekne parsovat Log("returning SCRIPT_PARAM_FROM_QS.\n"); return SCRIPT_PARAM_FROM_QS; } else if (argc == 1) { // query_string bud neexistuje alebo je "", pritom program nema vstupne argumenty (z dial. riadka) Log("returning SCRIPT_PARAM_FROM_FORM (argc == %d).\n", argc); return SCRIPT_PARAM_FROM_FORM; } else {// program ma vstupne argumenty, argc > 1 Log("returning SCRIPT_PARAM_FROM_ARGV -- nothing else matched.\n"); return SCRIPT_PARAM_FROM_ARGV; } } // getSrciptParamFrom(); void ExportTableCell(const char html_class[MAX_STR]) { Export("<"); Export(html_class); Export(">\n"); } // ExportTableCell() // exports empty table cell void ExportEmptyCell(short begin = ANO, short end = ANO) { if (begin == ANO) { ExportTableCell(HTML_TABLE_CELL); } if (begin == ANO || end == ANO) { Export("<" HTML_SPAN_HIDDEN ">." HTML_SPAN_END); // empty table cell } if (end == ANO) { Export(HTML_TABLE_CELL_END "\n"); } } // ExportEmptyCell() // exportuje heading velkosti size; // jednotne exportovanie.

pre Liturgiu hodin,

pre detailnejsi vypis void _export_heading(/* int size, */const char* string) { short int size = 2; Export("\nKontrola údajov\n\n", size, size); size = 4; Export("\n%s\n\n", size, string, size); } // _export_heading() void _export_heading_center(short int typ, const char* string) { short int size = 2; if (typ == PRM_XML) { Export("\n" ELEM_BEGIN(XML_TITLE) "\n"); } else { ExportHtmlComment("BEGIN:heading"); Export("\n", size); } Export("%s", string); if (typ == PRM_XML) { Export("\n" ELEM_END(XML_TITLE) "\n"); } else { Export("\n", size); ExportHtmlComment("END:heading"); } } // _export_heading_center() // helper for _export_link_show_hide(), _export_link_multi() void _export_link_helper(char pom[MAX_STR], char pom2[MAX_STR], char pom3[MAX_STR], char popis[MAX_STR], char html_tag_begin[SMALL], char html_class[SMALL], char specific_string_before[SMALL], char specific_string_after[SMALL], char anchor[SMALL], char html_tag_end[SMALL], char left_parenthesis = '(', char right_parenthesis = ')') { Log("_export_link_helper(): začiatok...\n"); Log("pom == %s\n", pom); Log("pom2 == %s\n", pom2); Log("pom3 == %s\n", pom3); Log("popis == %s\n", popis); char pom_den[VERY_SMALL]; mystrcpy(pom_den, STR_EMPTY, VERY_SMALL); if (_global_den.den == VSETKY_DNI) { mystrcpy(pom_den, STR_VSETKY_DNI, VERY_SMALL); } else { sprintf(pom_den, "%d", _global_den.den); } char pom_mesiac[VERY_SMALL]; mystrcpy(pom_mesiac, STR_EMPTY, VERY_SMALL); // _global_den.mesiac: 1--12; constants MES_JAN..MES_DEC: 0--11 if ((_global_den.mesiac - 1) >= MES_JAN && (_global_den.mesiac - 1) <= MES_DEC) { sprintf(pom_mesiac, "%d", _global_den.mesiac); } else { mystrcpy(pom_mesiac, STR_VSETKY_MESIACE, VERY_SMALL); } // do not manipulate with pom2 for special usage (hyperlinks only) if (query_type != PRM_NONE) { // prilepenie poradia svätca if (_global_poradie_svaty > 0) { sprintf(pom2, HTML_AMPERSAND"%s=%d", STR_DALSI_SVATY, _global_poradie_svaty); }// _global_poradie_svaty > 0 else { mystrcpy(pom2, STR_EMPTY, MAX_STR); }// !(_global_poradie_svaty > 0) // teraz vytvoríme reťazec s options prilep_request_options(pom2, pom3); // prilepíme modlitbu if (_global_modlitba != MODL_NEURCENA) { sprintf(pom3, HTML_LINK_CALL_PARAM, STR_MODLITBA, str_modlitby[_global_modlitba]); strcat(pom2, pom3); Log("_export_link_helper(): pom2 == %s...\n", pom2); } } // napokon prilepíme #anchor if (!equals(anchor, STR_EMPTY)) { sprintf(pom3, "#%s", anchor); strcat(pom2, pom3); } // export hyperlinku if (query_type == PRM_DNES) { sprintf(pom, "%s?%s=%s%s", script_name, STR_QUERY_TYPE, STR_PRM_DNES, pom2); } else if (query_type == PRM_DATUM) { sprintf(pom, "%s?%s=%s" HTML_AMPERSAND "%s=%s" HTML_AMPERSAND "%s=%s" HTML_AMPERSAND "%s=%d%s", script_name, STR_QUERY_TYPE, STR_PRM_DATUM, STR_DEN, pom_den /* _global_den.den */, STR_MESIAC, pom_mesiac /* _global_den.mesiac */, STR_ROK, _global_den.rok, pom2); } else if (query_type == PRM_LIT_OBD) { sprintf(pom, "%s?%s=%s" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%c%s", script_name, STR_QUERY_TYPE, STR_PRM_LIT_OBD, STR_DEN_V_TYZDNI, _global_den.denvt, STR_TYZDEN, _global_den.tyzden, STR_LIT_OBD, _global_den.litobd, STR_LIT_ROK, _global_den.litrok, pom2); } else if (query_type == PRM_ANALYZA_ROKU) { sprintf(pom, "%s?%s=%s" HTML_AMPERSAND "%s=%d%s", script_name, STR_QUERY_TYPE, STR_PRM_ANALYZA_ROKU, STR_ANALYZA_ROKU, _global_den.rok, pom2); } else if (query_type == PRM_TABULKA) { sprintf(pom, "%s?%s=%s" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d%s", script_name, STR_QUERY_TYPE, STR_PRM_TABULKA, STR_ROK_FROM, _global_rok_from, STR_ROK_TO, _global_rok_to, STR_TABULKA_LINKY, _global_den.mesiac, /* whether to display dates as hyperlinks | hack: usage of _global_den.mesiac */ pom2); } else if (query_type == PRM_STATIC_TEXT) { sprintf(pom, "%s?%s=%s" HTML_AMPERSAND "%s=%s%s", script_name, STR_QUERY_TYPE, STR_PRM_STATIC_TEXT, STR_STATIC_TEXT, skratka_static_text[_global_den.mesiac], /* type of static texts | hack: usage of _global_den.mesiac */ pom2); } if (query_type == PRM_NONE) { // used for hyperlinks only sprintf(pom, "%s", pom2); } if (!equals(specific_string_before, STR_EMPTY) && (strlen(specific_string_before) > 0)) { Export("%s", specific_string_before); } if (!equals(html_tag_begin, STR_EMPTY) && (strlen(html_tag_begin) > 0)) { Export("<%s>", html_tag_begin); } // exporting hyperlink Export(HTML_A_HREF_BEGIN "\"%s\"", pom); if (!equals(html_class, STR_EMPTY) && (strlen(html_class) > 0)) { Export(" %s", html_class); } Export(">"); if (left_parenthesis > 0) { Export("%c", left_parenthesis); } Export("%s", popis); if (right_parenthesis > 0) { Export("%c", right_parenthesis); } Export(HTML_A_END); if (!equals(html_tag_end, STR_EMPTY) && (strlen(html_tag_end) > 0)) { Export("%s", html_tag_end); } if (!equals(specific_string_after, STR_EMPTY) && (strlen(specific_string_after) > 0)) { Export("%s", specific_string_after); } Log("_export_link_helper(): koniec.\n"); } // _export_link_helper() void _export_link_menu_dnes(short int j) { Log("_export_link_menu_dnes(): začiatok...\n"); char popis[MAX_STR]; char pom[MAX_STR]; mystrcpy(pom, STR_EMPTY, MAX_STR); char pom2[MAX_STR]; mystrcpy(pom2, STR_EMPTY, MAX_STR); char pom3[MAX_STR]; mystrcpy(pom3, STR_EMPTY, MAX_STR); // backup of some parameters short int local_query_type = query_type; short int local_modlitba = _global_modlitba; short int local_jazyk = _global_jazyk; short int local_kalendar = _global_kalendar; query_type = PRM_DNES; _global_modlitba = MODL_NEURCENA; _global_jazyk = j; _global_kalendar = default_kalendar[j]; if (local_jazyk != j) { // text containing name of language mystrcpy(popis, (char*)nazov_jazyka_native_jazyk[_global_jazyk][local_jazyk], MAX_STR); } else { // real "Today" text mystrcpy(popis, (char*)html_button_Dnes[_global_jazyk], MAX_STR); } prilep_request_options(pom2, pom3); _export_link_helper(pom, pom2, pom3, popis, (char*)STR_EMPTY /* html_tag_begin */, (char*)STR_EMPTY /* html_class */, (char*)"\t" /* specific_string_before */, (char*)"\n" /* specific_string_after */, (char*)STR_EMPTY /* anchor */, (char*)STR_EMPTY /* html_tag_end */, CHAR_EMPTY /* left_parenthesis */, CHAR_EMPTY /* right_parenthesis */ ); // restore of some parameters query_type = local_query_type; _global_modlitba = local_modlitba; _global_jazyk = local_jazyk; _global_kalendar = local_kalendar; Log("_export_link_menu_dnes(): koniec.\n"); } // _export_link_menu_dnes() // produces hyperlink for sidemenu to static HTML content void _export_link_menu_linkitem(short int o) { Log("_export_link_menu_linkitem(): začiatok...\n"); char popis[MAX_STR]; mystrcpy(popis, cfg_sidemenu_item[o][_global_jazyk], MAX_STR); char pom[MAX_STR]; mystrcpy(pom, STR_EMPTY, MAX_STR); char pom2[MAX_STR]; mystrcpy(pom2, cfg_sidemenu_item_link[o][_global_jazyk], MAX_STR); char pom3[MAX_STR]; mystrcpy(pom3, STR_EMPTY, MAX_STR); // backup of some parameters short int local_query_type = query_type; query_type = PRM_NONE; // used for hyperlinks only _export_link_helper(pom, pom2, pom3, popis, (char*)STR_EMPTY /* html_tag_begin */, (char*)STR_EMPTY /* html_class */, (char*)"\t" /* specific_string_before */, (char*)"\n" /* specific_string_after */, (char*)STR_EMPTY /* anchor */, (char*)STR_EMPTY /* html_tag_end */, CHAR_EMPTY /* left_parenthesis */, CHAR_EMPTY /* right_parenthesis */ ); // restore of some parameters query_type = local_query_type; Log("_export_link_menu_linkitem(): koniec.\n"); } // _export_link_menu_linkitem() // funkcia vyexportuje link pre (skryť) / (zobraziť) podľa rozličných nastavení // kvôli nastaveniam, čo sú formulované "default = zobrazené"; treba vždy zvážiť správne nastavenie vstupných parametrov! void _export_link_show_hide(short int opt, unsigned long long bit_opt, char popis_show[MAX_STR], char popis_hide[MAX_STR], char html_tag_begin[SMALL], char html_class[SMALL], char specific_string_before[SMALL], char specific_string_after[SMALL], char anchor[SMALL], char html_tag_end[SMALL], char left_parenthesis, char right_parenthesis) { Log("_export_link_show_hide(): začiatok...\n"); char popis[MAX_STR]; char pom[MAX_STR]; mystrcpy(pom, STR_EMPTY, MAX_STR); char pom2[MAX_STR]; mystrcpy(pom2, STR_EMPTY, MAX_STR); char pom3[MAX_STR]; mystrcpy(pom3, STR_EMPTY, MAX_STR); prilep_request_options(pom2, pom3); unsigned long long _global_opt_backup = _global_opt[opt]; if (isGlobalOption(opt, bit_opt)) { mystrcpy(popis, popis_show, MAX_STR); } else { mystrcpy(popis, popis_hide, MAX_STR); // špeciálne nastavenia pre BIT_OPT_1_STUP_SVIATOK_SLAVNOST if ((opt == OPT_1_CASTI_MODLITBY) && (bit_opt == BIT_OPT_1_STUP_SVIATOK_SLAVNOST) && (!isGlobalOption(opt, BIT_OPT_1_OVERRIDE_STUP_SLAV))) { Log("Pre option %d nastavujem bit pre '%ld'\n", opt, BIT_OPT_1_OVERRIDE_STUP_SLAV); _global_opt[opt] += BIT_OPT_1_OVERRIDE_STUP_SLAV; } } if (strlen(popis) < 1) { Log("_export_link_show_hide(): predčasný koniec (reťazec popis je prázdny).\n"); return; } // nastavenie parametra o_opt: pridáme bit pre nastavenie if (!isGlobalOption(opt, bit_opt)) { Log("Pre option %d nastavujem bit pre '%llu'\n", opt, bit_opt); _global_opt[opt] += bit_opt; }// zmena: použitie nastavenia else { Log("Pre option %d ruším bit pre '%llu'\n", opt, bit_opt); _global_opt[opt] -= bit_opt; }// zmena: zrušenie nastavenia _export_link_helper(pom, pom2, pom3, popis, html_tag_begin, html_class, specific_string_before, specific_string_after, anchor, html_tag_end, left_parenthesis, right_parenthesis); _global_opt[opt] = _global_opt_backup; Log("_export_link_show_hide(): koniec.\n"); } // _export_link_show_hide() // funkcia vyexportuje link pre (skryť) / (zobraziť) podľa rozličných nastavení // kvôli nastaveniam, čo sú formulované "default = zobrazené"; treba vždy zvážiť správne nastavenie vstupných parametrov! void _export_link_multi(short int opt, unsigned long long bit_opt, short int count, char popis[MAX_STR], char html_tag_begin[SMALL], char html_class[SMALL], char specific_string_before[SMALL], char specific_string_after[SMALL], char anchor[SMALL], char html_tag_end[SMALL], char left_parenthesis = '(', char right_parenthesis = ')', short int new_value = -1) { Log("_export_link_multi(): začiatok...\n"); char pom[MAX_STR]; mystrcpy(pom, STR_EMPTY, MAX_STR); char pom2[MAX_STR]; mystrcpy(pom2, STR_EMPTY, MAX_STR); char pom3[MAX_STR]; mystrcpy(pom3, STR_EMPTY, MAX_STR); prilep_request_options(pom2, pom3); unsigned long long _global_opt_backup = _global_opt[opt]; if (strlen(popis) < 1) { Log("_export_link_multi(): predčasný koniec (reťazec popis je prázdny).\n"); return; } if (opt != OPT_6_ALTERNATIVES_MULTI) { Log("_export_link_multi(): predčasný koniec (pracuje len pre OPT_6_ALTERNATIVES_MULTI).\n"); return; } // get value starting from bit-component bit_opt short current_value = isGlobalOption(opt, bit_opt); Log("_global_opt(6) == %llu; current value == %d; opt == %d, bit == %llu\n", _global_opt[OPT_6_ALTERNATIVES_MULTI], current_value, opt, bit_opt); if ((new_value == -1) || (new_value >= count)) { // nastavenie novej hodnoty pre hyperlink (len plus 1) current_value = (current_value + 1) MOD count; } else { current_value = new_value; } setGlobalOption(opt, bit_opt, current_value); Log("current value == %d\n", current_value); _export_link_helper(pom, pom2, pom3, popis, html_tag_begin, html_class, specific_string_before, specific_string_after, anchor, html_tag_end, left_parenthesis, right_parenthesis); _global_opt[opt] = _global_opt_backup; Log("_export_link_multi(): koniec.\n"); } // _export_link_multi() // funkcia vyexportuje link pre zmenu spoločných textov podľa rozličných nastavení // kvôli nastaveniam, čo sú formulované "default = zobrazené"; treba vždy zvážiť správne nastavenie vstupných parametrov! void _export_link_communia(short int spol_cast, char html_tag_begin[SMALL], char html_class[SMALL], char specific_string_before[SMALL], char specific_string_after[SMALL], char anchor[SMALL], char html_tag_end[SMALL]) { Log("_export_link_communia(%d) -- začiatok...\n", spol_cast); static short int opt = OPT_3_SPOLOCNA_CAST; unsigned long long _global_opt_backup = _global_opt[opt]; char pom[MAX_STR] = STR_EMPTY; char pom2[MAX_STR]; mystrcpy(pom2, STR_EMPTY, MAX_STR); char pom3[MAX_STR]; mystrcpy(pom3, STR_EMPTY, MAX_STR); if (spol_cast < 0) { Log("ToDo | warning! should not happen!\n"); } // nastavíme spoločnú časť if (_global_opt[opt] != (unsigned)spol_cast) { Log("Pre option %d nastavujem spoločnú časť na '%d'\n", opt, spol_cast); _global_opt[opt] = (unsigned)spol_cast; } prilep_request_options(pom2, pom3); // prilepenie poradia svätca if (_global_poradie_svaty > 0) { sprintf(pom2, HTML_AMPERSAND"%s=%d", STR_DALSI_SVATY, _global_poradie_svaty); }// _global_poradie_svaty > 0 else { mystrcpy(pom2, STR_EMPTY, MAX_STR); }// !(_global_poradie_svaty > 0) // vytvoríme reťazec s options prilep_request_options(pom2, pom3); // prilepíme modlitbu if (_global_modlitba != MODL_NEURCENA) { sprintf(pom3, HTML_LINK_CALL_PARAM, STR_MODLITBA, str_modlitby[_global_modlitba]); strcat(pom2, pom3); } // napokon prilepíme #anchor if (!equals(anchor, STR_EMPTY)) { sprintf(pom3, "#%s", anchor); strcat(pom2, pom3); } // export hyperlinku if (query_type == PRM_DNES) { sprintf(pom, "%s?%s=%s%s", script_name, STR_QUERY_TYPE, STR_PRM_DNES, pom2); } else if (query_type == PRM_DATUM) { sprintf(pom, "%s?%s=%s" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d%s", script_name, STR_QUERY_TYPE, STR_PRM_DATUM, STR_DEN, _global_den.den, STR_MESIAC, _global_den.mesiac, STR_ROK, _global_den.rok, pom2); } else if (query_type == PRM_LIT_OBD) { sprintf(pom, "%s?%s=%s" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%c%s", script_name, STR_QUERY_TYPE, STR_PRM_LIT_OBD, STR_DEN_V_TYZDNI, _global_den.denvt, STR_TYZDEN, _global_den.tyzden, STR_LIT_OBD, _global_den.litobd, STR_LIT_ROK, _global_den.litrok, pom2); } /* these following query types probably are not used; if used, please check setting of parameters used for sprintf() */ else if (query_type == PRM_ANALYZA_ROKU) { sprintf(pom, "%s?%s=%s" HTML_AMPERSAND "%s=%d%s", script_name, STR_QUERY_TYPE, STR_PRM_ANALYZA_ROKU, STR_ANALYZA_ROKU, _global_den.rok, pom2); } else if (query_type == PRM_TABULKA) { sprintf(pom, "%s?%s=%s" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d%s", script_name, STR_QUERY_TYPE, STR_PRM_TABULKA, STR_ROK_FROM, _global_rok_from, STR_ROK_TO, _global_rok_to, STR_TABULKA_LINKY, _global_den.mesiac, /* whether to display dates as hyperlinks | hack: usage of _global_den.mesiac */ pom2); } else if (query_type == PRM_STATIC_TEXT) { sprintf(pom, "%s?%s=%s" HTML_AMPERSAND "%s=%s%s", script_name, STR_QUERY_TYPE, STR_PRM_STATIC_TEXT, STR_STATIC_TEXT, skratka_static_text[_global_den.mesiac], /* type of static texts | hack: usage of _global_den.mesiac */ pom2); } Export("%s\n", specific_string_before); if (!equals(html_tag_begin, STR_EMPTY)) { Export("<%s>\n", html_tag_begin); } Export(HTML_A_HREF_BEGIN "\"%s\" %s>", pom, html_class); Export("(%s)", lowered_nazov_spolc(spol_cast)); Export(HTML_A_END); if (!equals(html_tag_end, STR_EMPTY)) { Export("%s\n", html_tag_end); } Export("%s\n", specific_string_after); _global_opt[opt] = _global_opt_backup; Log("_export_link_communia(%d) -- koniec.\n", spol_cast); } // _export_link_communia() // vypise hlasky o tom, ze je prazdny formular resp. skript bol spusteny bez vstupnych hodnot void _main_prazdny_formular(void) { if (query_type == PRM_XML) { ExportXmlError((char*)html_error_no_args[_global_jazyk]); } else { ALERT; Export((char *)html_error_no_args[_global_jazyk]); } } // _main_prazdny_formular() #define DetailLog emptyLog void export_div_to_continue_tts_voice_output(short int export_comment_begin = ANO) { // used both in includeFile() and interpretParameter() Export(HTML_P_END "\n"); // end of first verse of psalm/canticle which started

Export(HTML_DIV_END "\n"); // end of

which is in each psalm/canticle Export(HTML_DIV_END "\n"); // end of HTML_DIV_RUBRIC added above Export("<" HTML_DIV_PSALM ">" "\n" HTML_P_VERSE_CONT "\n"); // synthetic begin of psalm + verse if (export_comment_begin == ANO) { Export(HTML_COMMENT_BEGIN); } }// export_div_to_continue_tts_voice_output() void export_tts_pause(short int tts_pause_type = TTS_PAUSE) { DetailLog("exporting TTS pause...\n"); Export("\n"); if (tts_pause_type == TTS_PAUSE) { Export("<" HTML_SPAN_TTS_PAUSE ">"); } else if (tts_pause_type == TTS_PAUSE_SHORT) { Export("<" HTML_SPAN_TTS_PAUSE_SHORT ">"); } else if (tts_pause_type == TTS_PAUSE_LONG) { Export("<" HTML_SPAN_TTS_PAUSE_LONG ">"); } Export(HTML_SPAN_END "\n"); }// export_tts_pause() #define MAX_ZAKONCENIE 200 #define EXPORT_FOOTNOTES ANO #define EXPORT_FULL_TEXT (!vnutri_full_text || useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_ZALMY_FULL_TEXT)) #define EXPORT_REFERENCIA ((!vnutri_myslienky || je_myslienka) && (!vnutri_nadpisu || je_nadpis) && (!(vnutri_footnote || vnutri_note) || useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_FOOTNOTES))) // export red and normal stuff = export asterisks & crosses (psalmody, responsories) #define EXPORT_RED_AND_NORMAL_STUFF(modlitba) (!(isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_VOICE_OUTPUT)) && (write == ANO)) #define EXPORT_RED_TRIANGLE ((!(isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_VOICE_OUTPUT))) && (!(isGlobalOption(OPT_1_CASTI_MODLITBY, BIT_OPT_1_SLAVA_OTCU)))) #define EXPORT_VERSE_NUMBER (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_VERSE) && (EXPORT_FULL_TEXT)) #define EXPORT_TTS_PAUSES (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_VOICE_OUTPUT) && (write == ANO)) #define EXPORT_TTS_SECTIONS (_global_skip_in_prayer == NIE) #define je_velkonocna_nedela_posv_cit (((equals(paramname, PARAM_CITANIE1)) || (equals(paramname, PARAM_CITANIE2))) && (_global_den.denvr = VELKONOCNA_NEDELA) && (_global_modlitba == MODL_POSV_CITANIE)) short int antifona_pocet = 0; // počet antifón (ant1, ant2, ant3 pre psalmódiu a ant. na benediktus/magnifikat kvôli krížikom) char rest_krizik[MAX_BUFFER] = STR_EMPTY; // pre to, čo je za krížikom v antifóne char rest_zakoncenie[MAX_BUFFER] = STR_EMPTY; short int ant_invitat_krizik = 0; // antifóna pre invitatórium s krížikom struct ReadBuffer { ReadBuffer() : pos(0), size(0) {} size_t pos; size_t size; char data[READ_BUFFER]; }; bool LoadToBuffer(FILE* stream, struct ReadBuffer* buffer) { while (buffer->pos >= buffer->size) { size_t new_size = fread(buffer->data, 1, sizeof(buffer->data), stream); if (new_size <= 0) { if (errno == EINTR) continue; return false; } buffer->pos = 0; buffer->size = new_size; } return true; } // Assumes that buffer is loaded. char ConsumeFromBuffer(struct ReadBuffer* buffer) { return buffer->data[buffer->pos++]; } #define ExportHtmlOnly(a) { if (typ != PRM_XML) { Export(a); } } #define ExportHtmlOnlyFormat(a, b) { if (typ != PRM_XML) { Export(a, b); } } void includeFile(short int typ, short int modlitba, const char* paramname, const char* fname, const char* modlparam) { int c, buff_index = 0, fnref_index = 0, fn_index = 0, ref_index = 0, kat_index = 0, z95_index = 0; char strbuff[MAX_BUFFER]; char rest[MAX_BUFFER]; char isbuff = 0; short int write = NIE; short int je_antifona = NIE; short int write_krizik = NIE; short int je_modlitba = NIE; char vnutri_inkludovaneho = 0; // kvôli "V.O. Aleluja" v inkludovaných napr. antifónach char zakoncenie[MAX_ZAKONCENIE]; // zakončenie s veľkým písmenkom na začiatku, následne sa prípadne mení 1. písmeno na malé short int vnutri_referencie = NIE; // PARAM_REFERENCIA... | kvôli biblickým referenciám v inkludovaných súboroch short int vnutri_katechezy = NIE; // PARAM_KATECHEZA... | kvôli odkazom na katechézy v inkludovaných súboroch short int vnutri_z95 = NIE; // PARAM_LINK_ZALM95... | kvôli odkazu na modlitbu so žalmom 95 short int vnutri_footnote_ref = NIE; // PARAM_FOOTNOTE_REF... short int vnutri_footnote = NIE; // PARAM_FOOTNOTE... short int vnutri_note = NIE; // PARAM_NOTE... short int vnutri_full_text = NIE; short int vnutri_myslienky = NIE; // kvôli myšlienkam k žalmom, ktoré v sebe vnútri môžu obsahovať biblickú referenciu short int vnutri_nadpisu = NIE; // kvôli nadpisu pre psalmódiu short int je_myslienka = NIE; // či sa má myšlienka vkladať alebo nie short int je_nadpis = NIE; // či sa má nadpis pre psalmódiu vkladať alebo nie char fnrefbuff[MAX_BUFFER]; // buffer for footnote reference char fnrefrest[MAX_BUFFER]; char fnbuff[MAX_BUFFER]; // buffer for footnote reference char fnrest[MAX_BUFFER]; char refbuff[MAX_BUFFER]; // buffer pre referenciu char refrest[MAX_BUFFER]; // 'rest' uložené zo začiatku referencie (používa sa až pri parsovaní konca referencie) char reference[MAX_BUFFER]; // full reference char katbuff[MAX_BUFFER]; // buffer pre odkaz na katechézu char katrest[MAX_BUFFER]; // 'rest' uložené zo začiatku odkazu na katechézu (používa sa až pri parsovaní konca odkazu na katechézu) char z95buff[MAX_BUFFER]; // buffer pre odkaz na ž95 char z95rest[MAX_BUFFER]; // 'rest' uložené zo začiatku odkazu na ž 95 Log("--includeFile(%d, %d, %s, %s, %s): begin,\n", typ, modlitba, paramname, fname, modlparam); short int isMobileOS; #if defined(IO_ANDROID) || defined (__APPLE__) isMobileOS = 1; #else isMobileOS = 0; #endif // nasledovné sú potrebné pre hyperlink v texte modlitby s prípadne upravenými parametrami #ifdef BEHAVIOUR_WEB unsigned long long _global_opt_1_casti_modlitby_orig; // parameter o1 (_global_opt 1) pre modlitbu cez deň (doplnková psalmódia) #endif char pom[MAX_STR]; mystrcpy(pom, STR_EMPTY, MAX_STR); char pompom[MAX_STR]; mystrcpy(pompom, STR_EMPTY, MAX_STR); Log(" replacing {%s} with %s from file `%s':\n", paramname, modlparam, fname); if ((_global_skip_in_prayer >= ANO) || (_global_skip_in_prayer_vnpc == ANO)) { Log("--includeFile(): end (because _global_skip_in_prayer >= ANO || _global_skip_in_prayer_vnpc == ANO)\n"); return; } // init mystrcpy(strbuff, STR_EMPTY, MAX_BUFFER); mystrcpy(rest, STR_EMPTY, MAX_BUFFER); mystrcpy(refbuff, STR_EMPTY, MAX_BUFFER); mystrcpy(refrest, STR_EMPTY, MAX_BUFFER); mystrcpy(reference, STR_EMPTY, MAX_BUFFER); mystrcpy(katbuff, STR_EMPTY, MAX_BUFFER); mystrcpy(katrest, STR_EMPTY, MAX_BUFFER); mystrcpy(z95buff, STR_EMPTY, MAX_BUFFER); mystrcpy(z95rest, STR_EMPTY, MAX_BUFFER); ant_invitat_krizik = 0; FILE *body = fopen(fname, "r"); if (body == NULL) { // printf("error `%s'\n", sys_errlist[errno]); Log(" file `%s' not found\n", fname); #if defined(EXPORT_HTML_FILENAME_ANCHOR) Export("file `%s' not found (anchor `%s')", fname, modlparam); #elif defined(EXPORT_HTML_FILENAME) Export("file `%s' not found", fname); #else Export("file not found"); #endif Log("--includeFile(): end (because of no body)\n"); return; } #if defined(EXPORT_HTML_FILENAME_ANCHOR) Export("(file `%s', anchor `%s')", fname, modlparam); #elif defined(EXPORT_HTML_FILENAME) Export("(file `%s')", fname); #elif defined(EXPORT_HTML_ANCHOR) Export("(anchor `%s')", modlparam); #endif // nastavenie toho, či sa má zobrazovať myšlienka k žalmom/chválospevom | doplnené aj nastavenie pre zobrazenie nadpisu pre žalm/chválospev (zatiaľ rovnako ako pre myšlienku) // orig: if ((isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_VOICE_OUTPUT)) || _je_global_den_slavnost || _je_global_den_sviatok || (_global_den.typslav == SLAV_VLASTNE) || (_global_den.litobd == OBD_VELKONOCNA_OKTAVA) || (_global_den.smer == 1) && (_global_den.spolcast != _encode_spol_cast(MODL_SPOL_CAST_NEURCENA))) { // last part was commented // 2017-10-13: nevidím dôvod, prečo by sa to nemalo zobrazovať vždy OKREM výstupu pre TTS (voice output) if (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_VOICE_OUTPUT)) { je_myslienka = NIE; je_nadpis = NIE; } else { je_myslienka = ANO; je_nadpis = ANO; } Log("nastavil som je_myslienka == %d\n", je_myslienka); Log("nastavil som je_nadpis == %d\n", je_nadpis); // 2011-09-30: bod č. 114 všeobecných smerníc: "V ofíciu v Cezročnom období, ak sa nespievajú, možno namiesto týchto antifón použiť — ak je to vhodné — myšlienky pripojené k žalmom." /* zatiaľ zapoznámkované, lebo jedna vec je zobrazovať to, druhá vec možnosť použiť ako antifónu -- zobrazujeme podľa tlačenej LH if (_global_den.litobd != OBD_CEZ_ROK) { je_myslienka = NIE; Log("upravil som je_myslienka == %d (nie je cezročné obdobie)\n", je_myslienka); } */ struct ReadBuffer readbuff; struct Utf8DecoderState state; InitUtf8DecoderState(&state); while (1) { if (!LoadToBuffer(body, &readbuff)) break; if (!Utf8StreamingDecoder(ConsumeFromBuffer(&readbuff), &state)) continue; c = state.result; // Export("inside[%c]...", c); switch (c) { case CHAR_KEYWORD_BEGIN: // ak sa nachádza znak CHAR_KEYWORD_BEGIN (t. j. '{') len tak voľne v texte, program zblbol; nevedel zistiť, či ide o keyword alebo nie; pokus o opravu DetailLog("CHAR_KEYWORD_BEGIN"); isbuff = 1; buff_index = 0; continue; case CHAR_KEYWORD_END: DetailLog("CHAR_KEYWORD_END"); isbuff = 0; strbuff[buff_index] = '\0'; DetailLog("\nFile %s, \n\tparam {%s} found\n", fname, strbuff); mystrcpy(rest, strbuff, MAX_BUFFER); splitword(strbuff, rest, CHAR_KEYWORD_DIVIDER); DetailLog("\tstrbuff == %s\n", strbuff); DetailLog("\trest == %s\n", rest); DetailLog("\tmodlparam== %s\n", modlparam); // Export("[INPUT:paramname=%s|fname=%s|modlparam=%s|READ:strbuff=%s|rest=%s]", paramname, fname, modlparam, strbuff, rest); if (equalsi(rest, modlparam)) { #if defined(EXPORT_HTML_SPECIALS) Export("[%s|%s:%s]", fname, strbuff, modlparam); #endif if (equals(strbuff, INCLUDE_BEGIN)) { write = ANO; vnutri_inkludovaneho = ANO; }// INCLUDE_BEGIN else if (equals(strbuff, INCLUDE_END)) { write = NIE; vnutri_inkludovaneho = NIE; // multiple includes Export("-->" }// INCLUDE_END Log("[%s|%s:%s]", fname, strbuff, modlparam); }// equalsi(rest, modlparam) else if (equals(strbuff, PARAM_KRIZIK)) { if ((vnutri_inkludovaneho == ANO) && (write == ANO)) { // Export("[INPUT:paramname=%s|fname=%s|modlparam=%s|READ:strbuff=%s|rest=%s]", paramname, fname, modlparam, strbuff, rest); if (equals(paramname, PARAM_ANTIFONA1) || equals(paramname, PARAM_ANTIFONA2) || equals(paramname, PARAM_ANTIFONA3) || equals(paramname, PARAM_ANTRCHVAL) || equals(paramname, PARAM_ANTVCHVAL) || equals(paramname, PARAM_ANTIFONA1x) || equals(paramname, PARAM_ANTIFONA3x)) { je_antifona = ANO; if (/* rest != NULL && */ strlen(rest) > 0) { mystrcpy(rest_krizik, rest, MAX_BUFFER); } // Export("antifóna[%d] -> zapamätám, ku ktorému žalmu/chválospevu patrí...\n", antifona_pocet); }// krížik v antifóne // ToDo odlíšiť, že ide o invitatórium if (equals(paramname, PARAM_ANTIFONA1)) { ant_invitat_krizik = 1; } #if defined(EXPORT_HTML_SPECIALS) Export("[%s:%s|rest_krizik=%s]", strbuff, modlparam, rest_krizik); #endif Log("_global_modlitba == %d (%s)...\n", _global_modlitba, nazov_modlitby(_global_modlitba)); Log("paramname == %s...\n", paramname); Log("modlparam == %s...\n", modlparam); Log("rest_krizik == %s...\n", rest_krizik); // krížik v texte includovaného žalmu/chválospevu if ((je_antifona == ANO) || (equals(paramname, PARAM_ZALM1) || equals(paramname, PARAM_ZALM2) || equals(paramname, PARAM_ZALM3) || equals(paramname, PARAM_RCHVALOSPEV) || equals(paramname, PARAM_VCHVALOSPEV))) { Log("krížik v texte includovaného žalmu/chválospevu...\n"); write_krizik = ANO; if ((je_antifona == ANO) && ((antifona_pocet MOD 2) == 0)) { // krížik sa vypisuje len v počiatočných (nepárnych) antifónach (pre modlitbu cez deň sa nevyskytuje, ani v silných obdobiach) Log("-párna antifóna-\n"); write_krizik = NIE; } if ((je_antifona == ANO) && (antifona_pocet > 1) && (_global_modlitba == MODL_INVITATORIUM)) { // pre invitatórium sa antifóna opakuje... krížik sa vypisuje len na začiatku Log("-párna antifóna-\n"); write_krizik = NIE; } /* * môže nastať situácia, že antifóna má v sebe krížik, ale nasleduje taký žalm/chválospev, ktorý tam ten verš nemá? * pre žaltár sa to asi nemôže stať, ale pre voliteľné napr. spomienky (keď si vezme iné žalmy), by sa to teoreticky stať mohlo... * príklad, kedy to môže nastať: pondelok v Adventnom období II. (po 16. decembri), kedy sú antifóny rovnaké pre ranné chvály a vešpery; pondelok má ant. 2 zhodnú so začiatkom chválospevu Iz 42 (takže krížik je len pre ranné chvály, nie pre vešpery) * podmienka kontroluje: ak je to antifóna 1, treba porovnať, či equals(rest_krizik, "_global_modl_...".zalm1.anchor) a pod. * case pre danú modlitbu: pre MODL_RANNE_CHVALY: _global_modl_ranne_chvaly.zalm1.anchor; pre iné modlitby iný "_global_modl_..." */ if ((je_antifona == ANO) && ((antifona_pocet MOD 2) == 1)) { // krížik sa vypisuje v počiatočných (nepárnych) antifónach len vtedy, ak nasledujúci žalm/chválospev je ten zodpovedajúci switch (_global_modlitba) { /* * invitatórium obsahuje žalmy uvedené priamo v šablóne case MODL_INVITATORIUM: if (equals(paramname, PARAM_ANTIFONA1) && !equals(rest_krizik, _global_modl_invitatorium.zalm1.anchor)) { Log("_global_modl_invitatorium.zalm1.anchor == %s...\n", _global_modl_invitatorium.zalm1.anchor); // undef write_krizik = NIE; } break; */ case MODL_RANNE_CHVALY: if (equals(paramname, PARAM_ANTIFONA1) && !equals(rest_krizik, _global_modl_ranne_chvaly.zalm1.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTRCHVAL) && !equals(rest_krizik, _global_modl_ranne_chvaly.zalm2.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA3) && !equals(rest_krizik, _global_modl_ranne_chvaly.zalm3.anchor)) { write_krizik = NIE; } break; case MODL_CEZ_DEN_9: if (equals(paramname, PARAM_ANTIFONA1) && !equals(rest_krizik, _global_modl_cez_den_9.zalm1.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA2) && !equals(rest_krizik, _global_modl_cez_den_9.zalm2.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA3) && !equals(rest_krizik, _global_modl_cez_den_9.zalm3.anchor)) { write_krizik = NIE; } break; case MODL_CEZ_DEN_12: if (equals(paramname, PARAM_ANTIFONA1) && !equals(rest_krizik, _global_modl_cez_den_12.zalm1.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA2) && !equals(rest_krizik, _global_modl_cez_den_12.zalm2.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA3) && !equals(rest_krizik, _global_modl_cez_den_12.zalm3.anchor)) { write_krizik = NIE; } break; case MODL_CEZ_DEN_3: if (equals(paramname, PARAM_ANTIFONA1) && !equals(rest_krizik, _global_modl_cez_den_3.zalm1.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA2) && !equals(rest_krizik, _global_modl_cez_den_3.zalm2.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA3) && !equals(rest_krizik, _global_modl_cez_den_3.zalm3.anchor)) { write_krizik = NIE; } break; case MODL_VESPERY: if (equals(paramname, PARAM_ANTIFONA1) && !equals(rest_krizik, _global_modl_vespery.zalm1.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA2) && !equals(rest_krizik, _global_modl_vespery.zalm2.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTVCHVAL) && !equals(rest_krizik, _global_modl_vespery.zalm3.anchor)) { write_krizik = NIE; } break; case MODL_KOMPLETORIUM: if (equals(paramname, PARAM_ANTIFONA1k) && !equals(rest_krizik, _global_modl_kompletorium.zalm1.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA2k) && !equals(rest_krizik, _global_modl_kompletorium.zalm2.anchor)) { write_krizik = NIE; } break; case MODL_POSV_CITANIE: if (equals(paramname, PARAM_ANTIFONA1) && !equals(rest_krizik, _global_modl_posv_citanie.zalm1.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA2) && !equals(rest_krizik, _global_modl_posv_citanie.zalm2.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA3) && !equals(rest_krizik, _global_modl_posv_citanie.zalm3.anchor)) { write_krizik = NIE; } break; case MODL_PRVE_VESPERY: if (equals(paramname, PARAM_ANTIFONA1) && !equals(rest_krizik, _global_modl_prve_vespery.zalm1.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA2) && !equals(rest_krizik, _global_modl_prve_vespery.zalm2.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTVCHVAL) && !equals(rest_krizik, _global_modl_prve_vespery.zalm3.anchor)) { write_krizik = NIE; } break; break; case MODL_PRVE_KOMPLETORIUM: if (equals(paramname, PARAM_ANTIFONA1k) && !equals(rest_krizik, _global_modl_prve_kompletorium.zalm1.anchor)) { write_krizik = NIE; } if (equals(paramname, PARAM_ANTIFONA2k) && !equals(rest_krizik, _global_modl_prve_kompletorium.zalm2.anchor)) { write_krizik = NIE; } break; default: break; } // switch if (write_krizik == NIE) { Log("-nepárna antifóna/iný žalm-\n"); } } if ((je_antifona == NIE) && !equals(modlparam, rest_krizik)) { // krížik sa v žalmoch/chválospevoch vypisuje len v prípade, že predtým (v načítanej antifóne) bolo správne uvedené, ku ktorému žalmu sa to vzťahuje Log("-iný žalm-\n"); write_krizik = NIE; } if (write_krizik == ANO) { Export(HTML_COMMENT_END); if (je_antifona == ANO) { ExportNonbreakingSpace(); // pre krížik na začiatku žalmu/chválospevu medzeru netreba } Export("<" HTML_SPAN_RED ">" STR_CROSS "" HTML_SPAN_END); if (je_antifona != ANO) { ExportNonbreakingSpace(); // pre krížik na konci chválospevu medzeru netreba } Export(HTML_COMMENT_BEGIN); } if ((write_krizik == ANO) && (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_VOICE_OUTPUT))) { Export(HTML_COMMENT_END "\n"); if (je_antifona == ANO) { // stop exporting text for TTS (voice output); add TTS pause Export((_global_jazyk == JAZYK_HU) ? HTML_DIV_END : HTML_P_END); // HU uses
; end of antiphone export_tts_pause(); Export(HTML_DIV_RUBRIC "\n"); // hide the rest of antiphone with beginning of psalm/canticle until the first verse's red cross Export((_global_jazyk == JAZYK_HU) ? HTML_DIV_BEGIN : HTML_P_BEGIN); // HU uses
; synthetic begin of antiphone Export(HTML_COMMENT_BEGIN); // must be added because 'end of antiphone' include follows } else { // continue exporting text for TTS (voice output) export_div_to_continue_tts_voice_output(); } }// do not repeat the same text for voice output (TTS) }// krížik v texte includovaného žalmu/chválospevu }// vypísať krížik, nakoľko antifóna nastavila, že má byť; ináč nerob nič }// PARAM_KRIZIK // doplnková psalmódia, alternatívne žalmy else if ((equals(strbuff, PARAM_DOPLNK_PSALM_122_129)) || (equals(strbuff, PARAM_DOPLNK_PSALM_127_131)) || (equals(strbuff, PARAM_DOPLNK_PSALM_126_129)) || (equals(strbuff, PARAM_OFF_DEF_PSALM_146_150))) { if ((vnutri_inkludovaneho == ANO) && (write == ANO)) { Log("(if ((equals(strbuff, PARAM_DOPLNK_PSALM_...)): _global_opt[OPT_2_HTML_EXPORT] & BIT_OPT_2_ROZNE_MOZNOSTI == %ld: (doplnková psalmódia, alternatívne žalmy)\n", _global_opt[OPT_2_HTML_EXPORT] & BIT_OPT_2_ROZNE_MOZNOSTI); long bit; short int opt = OPT_5_ALTERNATIVES; short int nastavene = NIE; char popis_show[SMALL]; char popis_hide[SMALL]; mystrcpy(popis_show, html_text_option_zobrazit[_global_jazyk], SMALL); mystrcpy(popis_hide, html_text_option_skryt[_global_jazyk], SMALL); char specific_string[SMALL]; mystrcpy(specific_string, STR_EMPTY, SMALL); char anchor[SMALL]; mystrcpy(anchor, STR_EMPTY, SMALL); short int podmienka = (isGlobalOption(OPT_2_HTML_EXPORT, BIT_OPT_2_ROZNE_MOZNOSTI)); // len ak je táto možnosť (zobrazovanie všeličoho) zvolená podmienka = podmienka && (_global_skip_in_prayer == NIE); if (equals(strbuff, PARAM_DOPLNK_PSALM_122_129)) { podmienka = podmienka && (isGlobalOption(OPT_2_HTML_EXPORT, BIT_OPT_2_ALTERNATIVES)); // len ak je táto možnosť (zobrazovanie alternatívy) zvolená podmienka = podmienka && (je_alternativa_doplnkova_psalmodia_z122_129(_global_modlitba)); mystrcpy(specific_string, HTML_P_BEGIN, SMALL); bit = BIT_OPT_5_DOPLNK_PSALM_122_129; sprintf(popis_show, "%s", html_text_opt_5_DPsalmZ122_NORMAL[_global_jazyk]); sprintf(popis_hide, "%s", html_text_opt_5_DPsalmZ122_129[_global_jazyk]); mystrcpy(anchor, (isGlobalOption(OPT_5_ALTERNATIVES, BIT_OPT_5_DOPLNK_PSALM_122_129)) ? PARAM_ZALM122 : PARAM_ZALM129, SMALL); nastavene = ANO; } if (!nastavene && equals(strbuff, PARAM_DOPLNK_PSALM_126_129)) { podmienka = podmienka && (isGlobalOption(OPT_2_HTML_EXPORT, BIT_OPT_2_ALTERNATIVES)); // len ak je táto možnosť (zobrazovanie alternatívy) zvolená podmienka = podmienka && (je_alternativa_doplnkova_psalmodia_z126_129(_global_modlitba)); mystrcpy(specific_string, HTML_P_BEGIN, SMALL); bit = BIT_OPT_5_DOPLNK_PSALM_126_129; sprintf(popis_show, "%s", html_text_opt_5_DPsalmZ126_NORMAL[_global_jazyk]); sprintf(popis_hide, "%s", html_text_opt_5_DPsalmZ126_129[_global_jazyk]); mystrcpy(anchor, (isGlobalOption(OPT_5_ALTERNATIVES, BIT_OPT_5_DOPLNK_PSALM_126_129)) ? PARAM_ZALM126 : PARAM_ZALM129, SMALL); nastavene = ANO; } if (!nastavene && equals(strbuff, PARAM_DOPLNK_PSALM_127_131)) { podmienka = podmienka && (isGlobalOption(OPT_2_HTML_EXPORT, BIT_OPT_2_ALTERNATIVES)); // len ak je táto možnosť (zobrazovanie alternatívy) zvolená podmienka = podmienka && (je_alternativa_doplnkova_psalmodia_z127_131(_global_modlitba)); mystrcpy(specific_string, HTML_P_BEGIN, SMALL); bit = BIT_OPT_5_DOPLNK_PSALM_127_131; sprintf(popis_show, "%s", html_text_opt_5_DPsalmZ127_NORMAL[_global_jazyk]); sprintf(popis_hide, "%s", html_text_opt_5_DPsalmZ127_131[_global_jazyk]); mystrcpy(anchor, (isGlobalOption(OPT_5_ALTERNATIVES, BIT_OPT_5_DOPLNK_PSALM_127_131)) ? PARAM_ZALM127 : PARAM_ZALM131, SMALL); nastavene = ANO; } if (!nastavene && equals(strbuff, PARAM_OFF_DEF_PSALM_146_150)) { podmienka = podmienka && (isGlobalOption(OPT_2_HTML_EXPORT, BIT_OPT_2_ALTERNATIVES)); // len ak je táto možnosť (zobrazovanie alternatívy) zvolená podmienka = podmienka && (je_alternativa_off_def_z146_150(_global_modlitba)); mystrcpy(specific_string, HTML_P_BEGIN, SMALL); bit = BIT_OPT_5_OFF_DEF_PSALM_146_150; sprintf(popis_show, "%s", html_text_opt_5_OffDefZ146_150_NORMAL[_global_jazyk]); sprintf(popis_hide, "%s", html_text_opt_5_OffDefZ146_150[_global_jazyk]); mystrcpy(anchor, (isGlobalOption(OPT_5_ALTERNATIVES, BIT_OPT_5_OFF_DEF_PSALM_146_150)) ? PARAM_ZALM146 : PARAM_ZALM150, SMALL); nastavene = ANO; } // má zmysel len ak platí daná podmienka if (podmienka) { Log("includeFile: including %s\n", paramname); Export("%s:begin" HTML_COMMENT_END, paramname); char before[SMALL] = STR_EMPTY; sprintf(before, HTML_P_CENTER_SMALL); char after[SMALL] = STR_EMPTY; mystrcpy(after, HTML_P_END, SMALL); _export_link_show_hide(opt, bit, popis_show, popis_hide, (char *)HTML_SPAN_RED_SMALL, (char *)HTML_CLASS_QUIET, specific_string, (char *)STR_EMPTY, anchor, (char *)HTML_SPAN_END); Export(HTML_COMMENT_BEGIN "%s:end", paramname); } else { ExportHtmlOnlyFormat("[skipping %s]", paramname); Log("skipping %s\n", paramname); } }// ináč nerob nič }// PARAM_DOPLNK_PSALM_122_129 || PARAM_DOPLNK_PSALM_127_131 || PARAM_DOPLNK_PSALM_126_129 || PARAM_OFF_DEF_PSALM_146_150 // zakončenie v texte includovanej modlitby else if (equals(strbuff, PARAM_ZAKONCENIE)) { if ((vnutri_inkludovaneho == ANO) && (write == ANO)) { // Export("[INPUT:paramname=%s|fname=%s|modlparam=%s|READ:strbuff=%s|rest=%s]", paramname, fname, modlparam, strbuff, rest); if ((equals(paramname, PARAM_MODLITBA)) || (equals(paramname, PARAM_MODL_SPOMPRIVILEG)) || (je_velkonocna_nedela_posv_cit)) { // pre ranné chvály a vešpery, ak sa pridáva 'modlitba' pre spomienku v privilegované dni, tak zakončenie sa dáva až pre PARAM_MODL_SPOMPRIVILEG if ((equals(paramname, PARAM_MODLITBA)) && (je_modl_spomprivileg)) { je_modlitba = !(_global_modlitba == MODL_RANNE_CHVALY || _global_modlitba == MODL_VESPERY); } else if (equals(paramname, PARAM_MODL_SPOMPRIVILEG)) { je_modlitba = ANO; } else { je_modlitba = ANO; } if (/* rest != NULL && */ strlen(rest) > 0) { mystrcpy(rest_zakoncenie, rest, MAX_BUFFER); } } #if defined(EXPORT_HTML_SPECIALS) Export("[%s:%s|rest_zakoncenie=%s]", strbuff, modlparam, rest_zakoncenie); #endif if ((je_modlitba == ANO) && ((equals(paramname, PARAM_MODLITBA)) || (equals(paramname, PARAM_MODL_SPOMPRIVILEG)) || (je_velkonocna_nedela_posv_cit))) { Export("%s--> ", rest_zakoncenie); if (equals(rest_zakoncenie, PARAM_ZAKONCENIE_SKRZE) || equals(rest_zakoncenie, PARAM_ZAKONCENIE_SKRZE_MALE)) { if (je_modlitba_cez_den(_global_modlitba) || je_kompletorium12(_global_modlitba) || (je_velkonocna_nedela_posv_cit)) { mystrcpy(zakoncenie, text_ZAKONCENIE_SKRZE_kratke[_global_jazyk], MAX_ZAKONCENIE); } else { mystrcpy(zakoncenie, text_ZAKONCENIE_SKRZE_dlhe[_global_jazyk], MAX_ZAKONCENIE); } } // ZAKONCENIE_SKRZE else if (equals(rest_zakoncenie, PARAM_ZAKONCENIE_LEBO_TY) || equals(rest_zakoncenie, PARAM_ZAKONCENIE_LEBO_TY_MALE)) { if (je_modlitba_cez_den(_global_modlitba) || je_kompletorium12(_global_modlitba) || (je_velkonocna_nedela_posv_cit)) { mystrcpy(zakoncenie, text_ZAKONCENIE_LEBO_TY_kratke[_global_jazyk], MAX_ZAKONCENIE); } else { mystrcpy(zakoncenie, text_ZAKONCENIE_LEBO_TY_dlhe[_global_jazyk], MAX_ZAKONCENIE); } } // ZAKONCENIE_LEBO_TY else if (equals(rest_zakoncenie, PARAM_ZAKONCENIE_LEBO_ON) || equals(rest_zakoncenie, PARAM_ZAKONCENIE_LEBO_ON_MALE)) { if (je_modlitba_cez_den(_global_modlitba) || je_kompletorium12(_global_modlitba) || (je_velkonocna_nedela_posv_cit)) { mystrcpy(zakoncenie, text_ZAKONCENIE_LEBO_ON_kratke[_global_jazyk], MAX_ZAKONCENIE); } else { mystrcpy(zakoncenie, text_ZAKONCENIE_LEBO_ON_dlhe[_global_jazyk], MAX_ZAKONCENIE); } } // ZAKONCENIE_LEBO_ON else if (equals(rest, PARAM_ZAKONCENIE_ON_JE) && _global_jazyk == JAZYK_SK) { if (je_modlitba_cez_den(_global_modlitba) || je_kompletorium12(_global_modlitba) || (je_velkonocna_nedela_posv_cit)) { mystrcpy(zakoncenie, text_SK_ZAKONCENIE_ON_JE_kratke, MAX_ZAKONCENIE); } else { mystrcpy(zakoncenie, text_SK_ZAKONCENIE_ON_JE_dlhe, MAX_ZAKONCENIE); } } // SK: ZAKONCENIE_ON_JE else if ((equals(rest, PARAM_ZAKONCENIE_KTORY_JE) || equals(rest_zakoncenie, PARAM_ZAKONCENIE_KTORY_JE_MALE)) && (_global_jazyk == JAZYK_SK || _global_jazyk == JAZYK_IS)) { if (je_modlitba_cez_den(_global_modlitba) || je_kompletorium12(_global_modlitba) || (je_velkonocna_nedela_posv_cit)) { mystrcpy(zakoncenie, (_global_jazyk == JAZYK_SK) ? text_SK_ZAKONCENIE_KTORY_JE_kratke : text_IS_ZAKONCENIE_KTORY_JE_kratke, MAX_ZAKONCENIE); } else { mystrcpy(zakoncenie, (_global_jazyk == JAZYK_SK) ? text_SK_ZAKONCENIE_KTORY_JE_dlhe : text_IS_ZAKONCENIE_KTORY_JE_dlhe, MAX_ZAKONCENIE); } } // SK + IS: ZAKONCENIE_KTORY_JE else if (equals(rest, PARAM_ZAKONCENIE_KTORY_ZIJES) && _global_jazyk == JAZYK_IS) { if (je_modlitba_cez_den(_global_modlitba) || je_kompletorium12(_global_modlitba) || (je_velkonocna_nedela_posv_cit)) { mystrcpy(zakoncenie, text_IS_ZAKONCENIE_KTORY_ZIJES_kratke, MAX_ZAKONCENIE); } else { mystrcpy(zakoncenie, text_IS_ZAKONCENIE_KTORY_ZIJES_dlhe, MAX_ZAKONCENIE); } } // IS: ZAKONCENIE_KTORY_ZIJES else if (equals(rest_zakoncenie, PARAM_ZAKONCENIE_O_TO_TA_PROSIME)) { mystrcpy(zakoncenie, text_ZAKONCENIE_O_TO_TA_PROSIME[_global_jazyk], MAX_ZAKONCENIE); } // PARAM_ZAKONCENIE_O_TO_TA_PROSIME if (equals(rest_zakoncenie, PARAM_ZAKONCENIE_SKRZE_MALE) || equals(rest_zakoncenie, PARAM_ZAKONCENIE_LEBO_TY_MALE) || equals(rest_zakoncenie, PARAM_ZAKONCENIE_LEBO_ON_MALE) || equals(rest_zakoncenie, PARAM_ZAKONCENIE_KTORY_JE_MALE)) { FirstToLower(zakoncenie, sizeof(zakoncenie)); // posun z veľkého písmena na malé } // nezlomiteľné medzery Export("%s", convert_nonbreaking_spaces(zakoncenie)); Export(HTML_COMMENT_BEGIN "%s", rest_zakoncenie); je_modlitba = NIE; } }// vypísať zakončenie }// PARAM_ZAKONCENIE else { // !equalsi(rest, modlparam) // write = NIE; -- aby mohli byt nestovane viacere :-) DetailLog("parameter does not match: %s != %s; vnutri_inkludovaneho == %d\n", rest, modlparam, vnutri_inkludovaneho); // stuff in texts: TTS pause if ((equals(strbuff, PARAM_PAUSE) || equals(strbuff, PARAM_PAUSE_SHORT) ) && (vnutri_inkludovaneho == ANO)) { if (EXPORT_TTS_PAUSES) { export_tts_pause(equals(strbuff, PARAM_PAUSE) ? TTS_PAUSE : TTS_PAUSE_SHORT); // ToDo: TTS_PAUSE_LONG } }// normal (black) stuff // normal (black) stuff in psalmody (cross, asterisk) if ((equals(strbuff, PARAM_NORMAL_ASTERISK) || equals(strbuff, PARAM_NORMAL_CROSS) ) && (vnutri_inkludovaneho == ANO)) { DetailLog("exporting normal stuff with nbsp before...\n"); if (EXPORT_RED_AND_NORMAL_STUFF(_global_modlitba)) { ExportNonbreakingSpace(); } if (equals(strbuff, PARAM_NORMAL_ASTERISK)) { if (EXPORT_TTS_PAUSES) { Export("<" HTML_SPAN_TTS_PAUSE ">"); } if (EXPORT_RED_AND_NORMAL_STUFF(_global_modlitba)) { Export(STR_ASTERISK); } } else if (equals(strbuff, PARAM_NORMAL_CROSS)) { if (EXPORT_TTS_PAUSES) { Export("<" HTML_SPAN_TTS_PAUSE_SHORT ">"); } if (EXPORT_RED_AND_NORMAL_STUFF(_global_modlitba)) { Export(STR_CROSS); } } if (EXPORT_TTS_PAUSES) { Export(HTML_SPAN_END); } }// normal (black) stuff // red asterisk, red cross, other "red stuff" if ((equals(strbuff, PARAM_RED_ASTERISK) || equals(strbuff, PARAM_RED_CROSS) ) && (vnutri_inkludovaneho == ANO)) { DetailLog("exporting red stuff...\n"); if (EXPORT_RED_AND_NORMAL_STUFF(_global_modlitba)) { Export("<" HTML_SPAN_TTS_PAUSE_RED ">%s" HTML_SPAN_END, strbuff); } }// red stuff // red triangle (end of psalm/canticle when doxology is not displayed) if (equals(strbuff, PARAM_RED_TRIANGLE) && (vnutri_inkludovaneho == ANO)) { DetailLog("exporting red triangle with nbsp before...\n"); if (EXPORT_RED_TRIANGLE) { ExportNonbreakingSpace(); Export("<" HTML_SPAN_TTS_PAUSE_RED ">%s" HTML_SPAN_END, strbuff); } }// PARAM_RED_TROJUHOLNIK // footnote references // upraviť footnote referencie na hyperlinky if (equals(strbuff, PARAM_FOOTNOTE_REF_BEGIN) && (vnutri_inkludovaneho == ANO)) { vnutri_footnote_ref = ANO; write = NIE; fnref_index = 0; if (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_FOOTNOTES)) { /* if (rest != NULL) */ mystrcpy(fnrefrest, rest, MAX_BUFFER); DetailLog("\trest == %s\n", rest); DetailLog("\tfnrefrest == %s\n", fnrefrest); } }// upraviť footnote referencie na hyperlinky -- PARAM_FOOTNOTE_REF_BEGIN if (equals(strbuff, PARAM_FOOTNOTE_REF_END) && (vnutri_inkludovaneho == ANO)) { fnrefbuff[fnref_index] = '\0'; if (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_FOOTNOTES)) { if (EXPORT_FOOTNOTES) { Export(HTML_A_HREF_BEGIN "\"#fn"); } DetailLog("\trest == %s\n", rest); DetailLog("\tfnrefrest == %s\n", fnrefrest); if (/* (fnrefrest != NULL) && */!(equals(fnrefrest, STR_EMPTY))) { if (EXPORT_FOOTNOTES) { Export("%s", convert_nonbreaking_spaces(fnrefrest)); } } if (EXPORT_FOOTNOTES) { Export("%s\" " HTML_CLASS_WITHOUT_BORDER ">", fnrefbuff); Export(HTML_SUP_BEGIN "%s" HTML_SUP_END, fnrefbuff); Export(HTML_A_END); } } vnutri_footnote_ref = NIE; if (EXPORT_FOOTNOTES) { write = ANO; } strcpy(fnrefrest, STR_EMPTY); }// zobraziť a upraviť footnote referencie na hyperlinky -- PARAM_FOOTNOTE_REF_END // footnotes (footnote text) // upraviť footnotes na aname if (equals(strbuff, PARAM_FOOTNOTE_BEGIN) && (vnutri_inkludovaneho == ANO)) { vnutri_footnote = ANO; write = NIE; fn_index = 0; if (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_FOOTNOTES)) { /* if (rest != NULL) */ mystrcpy(fnrest, rest, MAX_BUFFER); DetailLog("\trest == %s\n", rest); DetailLog("\tfnrest == %s\n", fnrest); } }// upraviť footnotes na aname -- PARAM_FOOTNOTE_BEGIN if (equals(strbuff, PARAM_FOOTNOTE_END) && (vnutri_inkludovaneho == ANO)) { fnbuff[fn_index] = '\0'; if (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_FOOTNOTES) && (write == NIE)) { // podmienka na write kvôli tomu, že write mohlo byť na ANO nastavené napr. vnorenou biblickou referenciou DetailLog("\trest == %s\n", rest); DetailLog("\tfnrest == %s\n", fnrest); DetailLog("\tfnbuff == %s\n", fnbuff); if (!(equals(fnrest, STR_EMPTY))) { if (EXPORT_FOOTNOTES) { Export(HTML_A_NAME_BEGIN"\"fn%s\">", fnrest); Export(HTML_A_END); Export(HTML_SUP_BEGIN "%s" HTML_SUP_END, fnrest); ExportNonbreakingSpace(); } } if (EXPORT_FOOTNOTES) { Export("%s", convert_nonbreaking_spaces(fnbuff)); } } vnutri_footnote = NIE; if (EXPORT_FOOTNOTES) { write = ANO; } strcpy(fnrest, STR_EMPTY); }// zobraziť a upraviť footnotes na aname -- PARAM_FOOTNOTE_END // notes (note text) // notes in parentheses if (equals(strbuff, PARAM_NOTE_BEGIN) && (vnutri_inkludovaneho == ANO)) { if (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_FOOTNOTES)) { Export(" "); Export("<" HTML_SPAN_TEXTNOTE ">"); Export("("); } else { write = NIE; } vnutri_note = ANO; fn_index = 0; if (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_FOOTNOTES)) { /* if (rest != NULL) */ mystrcpy(fnrest, rest, MAX_BUFFER); DetailLog("\trest == %s\n", rest); DetailLog("\tfnrest == %s\n", fnrest); } }// upraviť notes -- PARAM_NOTE_BEGIN if (equals(strbuff, PARAM_NOTE_END) && (vnutri_inkludovaneho == ANO)) { fnbuff[fn_index] = '\0'; if (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_FOOTNOTES) && (write == NIE)) { // podmienka na write kvôli tomu, že write mohlo byť na ANO nastavené napr. vnorenou biblickou referenciou DetailLog("\trest == %s\n", rest); DetailLog("\tfnrest == %s\n", fnrest); DetailLog("\tfnbuff == %s\n", fnbuff); if (EXPORT_FOOTNOTES) { if (!(equals(fnrest, STR_EMPTY))) { Export("%s ", fnrest); } Export("%s", convert_nonbreaking_spaces(fnbuff)); } } vnutri_note = NIE; if (EXPORT_FOOTNOTES) { write = ANO; } strcpy(fnrest, STR_EMPTY); if (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_FOOTNOTES)) { Export(")"); Export(HTML_SPAN_END); } }// zobraziť a upraviť notes -- PARAM_NOTE_END // full text of psalms if ((equals(strbuff, PARAM_PSALM_FULL_TEXT_BEGIN) || equals(strbuff, PARAM_PSALM_FULL_TEXT_SOFT_BEGIN)) && (vnutri_inkludovaneho == ANO)) { vnutri_full_text = ANO; write = write && (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_ZALMY_FULL_TEXT)); if (write && equals(strbuff, PARAM_PSALM_FULL_TEXT_BEGIN)) { Export("<" HTML_DIV_PSALM_INDENT ">"); } } if ((equals(strbuff, PARAM_PSALM_FULL_TEXT_END) || equals(strbuff, PARAM_PSALM_FULL_TEXT_SOFT_END)) && (vnutri_inkludovaneho == ANO)) { if (write && equals(strbuff, PARAM_PSALM_FULL_TEXT_END)) { Export(HTML_DIV_END); } vnutri_full_text = NIE; write = ANO; strcpy(fnrest, STR_EMPTY); } // full text of other text [e.g. readings] if (equals(strbuff, PARAM_PSALM_FULL_TEXT_TXT_BEGIN) && (vnutri_inkludovaneho == ANO)) { vnutri_full_text = ANO; write = write && (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_ZALMY_FULL_TEXT)); if (write && equals(strbuff, PARAM_PSALM_FULL_TEXT_TXT_BEGIN)) { Export("<" HTML_SPAN_SMALL ">"); } } if (equals(strbuff, PARAM_PSALM_FULL_TEXT_TXT_END) && (vnutri_inkludovaneho == ANO)) { if (write) { Export(HTML_SPAN_END); } vnutri_full_text = NIE; write = ANO; strcpy(fnrest, STR_EMPTY); } // biblical references // upraviť referencie na hyperlinky if (equals(strbuff, PARAM_REFERENCIA_BEGIN) && (vnutri_inkludovaneho == ANO)) { // spracujeme prípadný buffer, ak to bolo vnorené v rámci footnote alebo note if (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_FOOTNOTES) && EXPORT_FOOTNOTES && ((vnutri_footnote == ANO) || (vnutri_note == ANO))) { DetailLog("\tfnbuff == %s\n", fnbuff); if (!(equals(fnrest, STR_EMPTY))) { if (vnutri_footnote == ANO) { Export(HTML_A_NAME_BEGIN "\"fn%s\">", fnrest); Export(HTML_A_END); Export(HTML_SUP_BEGIN "%s" HTML_SUP_END, fnrest); ExportNonbreakingSpace(); } else if (vnutri_note == ANO) { Export("%s ", fnrest); } fnbuff[fn_index] = '\0'; Export("%s", convert_nonbreaking_spaces(fnbuff)); strcpy(fnrest, STR_EMPTY); strcpy(fnbuff, STR_EMPTY); fn_index = 0; } } vnutri_referencie = ANO; write = NIE; ref_index = 0; if (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_REFERENCIE)) { /* if (rest != NULL) */ mystrcpy(refrest, rest, MAX_BUFFER); DetailLog("\trest == %s\n", rest); DetailLog("\trefrest == %s\n", refrest); } }// upraviť referencie na hyperlinky -- PARAM_REFERENCIA_BEGIN if (equals(strbuff, PARAM_REFERENCIA_END) && (vnutri_inkludovaneho == ANO)) { refbuff[ref_index] = '\0'; if (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_REFERENCIE)) { if (EXPORT_REFERENCIA) { if (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_REF_BIBLE_COM)) { Export(HTML_A_HREF_BEGIN "\"%s", cfg_http_bible_com_references_default[_global_jazyk]); // add default version id Export("%s" STR_SLASH, cfg_bible_com_version_id_default[_global_jazyk]); } else { Export(HTML_A_HREF_BEGIN "\"%s", cfg_http_bible_references_default[_global_jazyk]); } } DetailLog("\trest == %s\n", rest); DetailLog("\trefrest == %s\n", refrest); DetailLog("\trefbuff == %s\n", refbuff); // Example A: {r:Iz}6, 1-13{/r} // Example B: {r}Iz 6, 3{/r} // Example C: {r:Ž 102,}18{/r} // refrest: rest of the string within reference | A: "Iz" | B: empty | C: "Ž 102," // refbuff: buffer (inner content of reference) | A: "6, 1-13" | B: "Iz 6, 3" | C: "18" // first, clean reference strcpy(reference, STR_EMPTY); // second, copy refrest to the beginning of reference (if not empty) if (!(equals(refrest, STR_EMPTY))) { // [ToDo]: doplniť nevypisovanie refbuff, ak refrest obsahuje medzeru if (EXPORT_REFERENCIA) { mystrcpy(reference, refrest, MAX_BUFFER); strcat(reference, STR_SPACE); } } // third, append refbuff to the end of refrest to create full reference strcat(reference, refbuff); // now, the reference is complete (but it may contain diacritics and/or special characters (Unicode long dashes etc.) if (EXPORT_REFERENCIA) { if (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_REF_BIBLE_COM)) { Export("%s", mystr_bible_com(mystr_replace(reference, STR_EM_DASH, STR_EN_DASH).c_str())); // no need to remove diacritics for bible.com even on Android } else { #ifdef IO_ANDROID // diacritics removal left only for Android Export("%s", mystr_remove_diacritics(mystr_replace(reference, STR_EM_DASH, STR_EN_DASH).c_str())); #else // replace em-dash with en-dash Export("%s", mystr_replace(reference, STR_EM_DASH, STR_EN_DASH).c_str()); #endif } } if (EXPORT_REFERENCIA) { Export("\" " HTML_TARGET_BLANK " " HTML_CLASS_QUIET ">"); } } if (EXPORT_REFERENCIA) { Export("%s", convert_nonbreaking_spaces(refbuff)); } if (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_REFERENCIE)) { if (EXPORT_REFERENCIA) { Export(HTML_A_END); } } vnutri_referencie = NIE; if (EXPORT_REFERENCIA) { write = ANO; } strcpy(refrest, STR_EMPTY); strcpy(reference, STR_EMPTY); // cleanup // spracujeme prípadný buffer ak to bolo vnorené v rámci footnote alebo note if (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_FOOTNOTES) && EXPORT_FOOTNOTES && ((vnutri_footnote == ANO) || (vnutri_note == ANO))) { if (/* (fnrest != NULL) && */ !(equals(fnrest, STR_EMPTY))) { fnbuff[fn_index] = '\0'; strcpy(fnrest, STR_EMPTY); strcpy(fnbuff, STR_EMPTY); fn_index = 0; } } }// upraviť referencie na hyperlinky -- PARAM_REFERENCIA_END #if defined(BEHAVIOUR_WEB) // upraviť odkazy na katechézy (zatiaľ napojené na BIT_OPT_0_REFERENCIE a EXPORT_REFERENCIA ako referencie) if (equals(strbuff, PARAM_KATECHEZA_BEGIN) && (vnutri_inkludovaneho == 1)) { vnutri_katechezy = ANO; write = NIE; kat_index = 0; if (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_REFERENCIE)) { /* if (rest != NULL) */ mystrcpy(katrest, rest, MAX_BUFFER); DetailLog("\trest == %s\n", rest); DetailLog("\tkatrest == %s\n", katrest); } }// upraviť odkazy na katechézy na hyperlinky -- PARAM_KATECHEZA_BEGIN if (equals(strbuff, PARAM_KATECHEZA_END) && (vnutri_inkludovaneho == 1)) { katbuff[kat_index] = '\0'; if (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_REFERENCIE)) { // ToDo: časom dynamicky if (EXPORT_REFERENCIA) { Export(HTML_A_HREF_BEGIN "\"/include/"); } DetailLog("\trest == %s\n", rest); DetailLog("\tkatrest == %s\n", katrest); if (/* (katrest != NULL) && */ !(equals(katrest, STR_EMPTY))) { // [ToDo]: doplniť nevypisovanie katbuff, ak katrest obsahuje medzeru (prevzaté z časti pre referencie) if (EXPORT_REFERENCIA) { Export("%s", convert_nonbreaking_spaces(katrest)); } }// načítanie na začiatok referencie if (EXPORT_REFERENCIA) { Export("\" " HTML_TARGET_BLANK " " HTML_CLASS_QUIET ">"); } } if (EXPORT_REFERENCIA) { // nezlomiteľné medzery Export("%s", convert_nonbreaking_spaces(katbuff)); } if (isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_REFERENCIE)) { if (EXPORT_REFERENCIA) { Export(HTML_A_END); } } vnutri_katechezy = NIE; // prevzaté z časti pre referencie: 2011-05-02: doplnené kvôli referenciám, ktoré sú v rámci myšlienok, čo sa nemajú zobrazovať if (EXPORT_REFERENCIA) { write = ANO; } strcpy(katrest, STR_EMPTY); }// upraviť odkazy na katechézy na hyperlinky -- PARAM_KATECHEZA_END #endif // upraviť odkaz na žalm 95 (zatiaľ napojené na BEHAVIOUR_WEB) if (equals(strbuff, PARAM_LINK_ZALM95_BEGIN) && (vnutri_inkludovaneho == 1)) { vnutri_z95 = ANO; write = NIE; z95_index = 0; #ifdef BEHAVIOUR_WEB /* if (rest != NULL) */ mystrcpy(z95rest, rest, MAX_BUFFER); DetailLog("\trest == %s\n", rest); DetailLog("\tz95rest == %s\n", z95rest); #endif }// upraviť odkaz na žalm 95 na hyperlink -- PARAM_LINK_ZALM95_BEGIN if (equals(strbuff, PARAM_LINK_ZALM95_END) && (vnutri_inkludovaneho == 1)) { Log("(if (equals(strbuff, PARAM_LINK_ZALM95_END)): _global_opt[OPT_2_HTML_EXPORT] & BIT_OPT_2_ROZNE_MOZNOSTI == %ld: \n", _global_opt[OPT_2_HTML_EXPORT] & BIT_OPT_2_ROZNE_MOZNOSTI); char specific_string[SMALL]; mystrcpy(specific_string, HTML_P_BEGIN, SMALL); if (isGlobalOption(OPT_2_HTML_EXPORT, BIT_OPT_2_ROZNE_MOZNOSTI)) { // len ak je táto možnosť (zobrazovanie všeličoho) zvolená z95buff[z95_index] = '\0'; #ifdef BEHAVIOUR_WEB // najprv upravíme o1 _global_opt_1_casti_modlitby_orig = _global_opt[OPT_1_CASTI_MODLITBY]; // backup pôvodnej hodnoty // nastavenie parametra o1: pridáme bit pre alternatívnu psalmódiu if (!isGlobalOption(OPT_1_CASTI_MODLITBY, BIT_OPT_1_ZALM95)) { Log("Pre option 1 odstraňujem bit pre ž95 (pôvodnú hodnotu som si zapamätal)\n"); _global_opt[OPT_1_CASTI_MODLITBY] += BIT_OPT_1_ZALM95; } else { Log("Pre option 1 pridávam bit pre ž95 (pôvodnú hodnotu som si zapamätal)\n"); _global_opt[OPT_1_CASTI_MODLITBY] -= BIT_OPT_1_ZALM95; } // prilepenie poradia svätca if (_global_poradie_svaty > 0) { sprintf(pom, HTML_AMPERSAND"%s=%d", STR_DALSI_SVATY, _global_poradie_svaty); }// _global_poradie_svaty > 0 else { mystrcpy(pom, STR_EMPTY, MAX_STR); }// !(_global_poradie_svaty > 0) // teraz vytvoríme reťazec s options prilep_request_options(pom, pompom); // v hyperlinku prilepíme aj #ZALM95 (do z95.htm a ostatných sme doplnili ) // napokon prilepíme #anchor sprintf(pompom, "#%s", PARAM_ZALM95); strcat(pom, pompom); // export hyperlinku if (query_type == PRM_DATUM) { Export("%s\n<" HTML_SPAN_RED_SMALL ">\n" HTML_A_HREF_BEGIN "\"%s?%s=%s" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%s%s\"", specific_string, script_name, STR_QUERY_TYPE, STR_PRM_DATUM, STR_DEN, _global_den.den, STR_MESIAC, _global_den.mesiac, STR_ROK, _global_den.rok, STR_MODLITBA, str_modlitby[_global_modlitba], pom); } else if (query_type == PRM_LIT_OBD) { Export("%s\n<" HTML_SPAN_RED_SMALL ">\n" HTML_A_HREF_BEGIN "\"%s?%s=%s" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%d" HTML_AMPERSAND "%s=%c" HTML_AMPERSAND "%s=%s%s\"", specific_string, script_name, STR_QUERY_TYPE, STR_PRM_LIT_OBD, STR_DEN_V_TYZDNI, _global_den.denvt, STR_TYZDEN, _global_den.tyzden, STR_LIT_OBD, _global_den.litobd, STR_LIT_ROK, _global_den.litrok, STR_MODLITBA, str_modlitby[_global_modlitba], pom); } // napokon o1 vrátime späť _global_opt[OPT_1_CASTI_MODLITBY] = _global_opt_1_casti_modlitby_orig; // restore pôvodnej hodnoty Export(" " HTML_CLASS_QUIET ">"); #endif Export("%s", convert_nonbreaking_spaces(z95buff)); #ifdef BEHAVIOUR_WEB Export(HTML_A_END); Export(HTML_SPAN_END"\n"); #endif } else { #if defined(EXPORT_HTML_SPECIALS) ExportHtmlComment(PARAM_LINK_ZALM95_BEGIN); #endif } vnutri_z95 = NIE; write = ANO; strcpy(z95rest, STR_EMPTY); }// upraviť odkaz na žalm 95 na hyperlink -- PARAM_LINK_ZALM95_END // zobraziť/nezobraziť zalomenie veršov podľa tlačenej LH | ignore this switch (as if it would OFF) for mobile OS (Android, iOS) and voice output if (equals(strbuff, PARAM_ZALOMENIE) && (vnutri_inkludovaneho == 1)) { #if defined(EXPORT_HTML_SPECIALS) if (!write) { // kvôli vnutri_full_text == ANO Export(HTML_COMMENT_BEGIN); } Export("[%s:%s|rest=%s]", strbuff, modlparam, rest); #endif if (useWhenGlobalOption(OPT_2_HTML_EXPORT, BIT_OPT_2_TEXT_WRAP) && (isMobileOS == 0) && EXPORT_FULL_TEXT) { // MAX_BUFFER bol zvýšený, lebo strbuff bol v tomto prípade veľmi dlhý Export("zalomenie-->%s"); #endif Log(" ruším writing to export file, kvôli PARAM_ITALICS_COND_BEGIN...\n"); } }// zobraziť/nezobraziť text kurzívou if (equals(strbuff, PARAM_ITALICS_COND_END) && (vnutri_inkludovaneho == 1)) { if (useWhenGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_ITALICS_CONDITIONAL)) { Export(""); } else { #if defined(EXPORT_HTML_SPECIALS) // Export(""); #endif Log(" opäť writing to export file, PARAM_ITALICS_COND_END...\n"); } }// zobraziť/nezobraziť číslovanie veršov if ((isGlobalOption(OPT_0_SPECIALNE, BIT_OPT_0_VOICE_OUTPUT)) && (equals(rest, PARAM_HIDE_FOR_VOICE_OUTPUT))) { if (equals(strbuff, INCLUDE_BEGIN) && (vnutri_inkludovaneho == 1)) { _global_skip_in_prayer += ANO; // increment write = NIE; #if defined(EXPORT_HTML_SPECIALS) Export("(stop)hide-for-voice-output"); #endif Log(" rusim writing to export file, kvoli hide-for-voice-output...\n"); } else if (equals(strbuff, INCLUDE_END) && (vnutri_inkludovaneho == 1)) { #if defined(EXPORT_HTML_SPECIALS) Export("hide-for-voice-output(start)"); #endif write = ANO; _global_skip_in_prayer -= ANO; // decrement Log(" opat writing to export file, end of hide-for-voice-output.\n"); } }// hide passage for voice output if ((!(je_velka_noc)) && (equals(rest, PARAM_ALELUJA_VO_VELKONOCNOM))) { if (equals(strbuff, INCLUDE_BEGIN) && (vnutri_inkludovaneho == 1)) { write = NIE; #if defined(EXPORT_HTML_SPECIALS) Export("(stop)nie je v.o."); #endif Log(" rusim writing to export file, kvoli V.O. Aleluja...\n"); } else if (equals(strbuff, INCLUDE_END) && (vnutri_inkludovaneho == 1)) { #if defined(EXPORT_HTML_SPECIALS) Export("nie je v.o.(start)"); #endif write = ANO; Log(" opat writing to export file, end of V.O. Aleluja.\n"); } }// aleluja vo veľkonočnom období // aleluja mimo pôstneho obdobia - doteraz fungovala len pre templáty -- interpretParameter() if ((je_post) && (equals(rest, PARAM_ALELUJA_NIE_V_POSTE))) { if (equals(strbuff, INCLUDE_BEGIN) && (vnutri_inkludovaneho == 1)) { write = NIE; #if defined(EXPORT_HTML_SPECIALS) Export("(stop)je post"); #endif Log(" rusim writing to export file, kvoli Aleluja...\n"); } else if (equals(strbuff, INCLUDE_END) && (vnutri_inkludovaneho == 1)) { #if defined(EXPORT_HTML_SPECIALS) Export("nie je post(start)"); #endif write = ANO; Log(" opat writing to export file, end of Aleluja.\n"); } }// aleluja mimo pôstneho obdobia // plné responzórium... if ((equals(rest, PARAM_PLNE_RESP)) || (equals(rest, PARAM_PLNE_RESP_BODKA))) { if (equals(strbuff, INCLUDE_BEGIN) && (vnutri_inkludovaneho == 1)) { #if defined(EXPORT_HTML_SPECIALS) Export("(start)dlhe-resp."); #endif if (useWhenGlobalOption(OPT_1_CASTI_MODLITBY, BIT_OPT_1_PLNE_RESP)) { ; } else { write = NIE; Log(" ruším writing to export file, kvôli PARAM_PLNE_RESP...\n"); } }// INCLUDE_BEGIN else if (equals(strbuff, INCLUDE_END) && (vnutri_inkludovaneho == 1)) { #if defined(EXPORT_HTML_SPECIALS) Export("dlhe-resp.(stop)"); #endif if (useWhenGlobalOption(OPT_1_CASTI_MODLITBY, BIT_OPT_1_PLNE_RESP)) { ; } else { write = ANO; Log(" opäť writing to export file, PARAM_PLNE_RESP...\n"); // ak končí iným znakom ako bodkou (napr. ?!), pri skrátenom výpise (indikovaný iným parametrom) je treba vypísať bodku if (equals(rest, PARAM_PLNE_RESP_BODKA)) { Export("-->.2\n"); fprintf(batch_html_file, "\n"); fprintf(batch_html_file, "\n"); } fprintf(batch_html_file, "\n"); fprintf(batch_html_file, "

"); if (_global_opt_batch_monthly == ANO) { fprintf(batch_html_file, "%s", (char *)html_text_batch_Zoznam1m[_global_jazyk]); } else { fprintf(batch_html_file, "%s", (char *)html_text_batch_Zoznam1[_global_jazyk]); } fprintf(batch_html_file, "

\n"); if (_global_opt_batch_monthly == ANO) { fprintf(batch_html_file, "

"); if (_global_jazyk == JAZYK_HU) { fprintf(batch_html_file, (const char*)html_text_batch_obdobie1m[_global_jazyk], r_from, nazov_mesiaca_gen(m_from), d_from, r_to, nazov_mesiaca_gen(m_to), d_to); } else { fprintf(batch_html_file, (const char*)html_text_batch_obdobie1m[_global_jazyk], d_from, nazov_mesiaca_gen(m_from), r_from, d_to, nazov_mesiaca_gen(m_to), r_to); } fprintf(batch_html_file, "

\n"); } fprintf(batch_html_file, "
    \n"); LOG_ciara; Log("batch mode: teraz začínam prechádzať celé zadané obdobie...\n"); // 1. ak r_from < r_to: // (i) od poradie(d_from, m_from, r_from) do poradie(31, MES_DEC, r_from); // (ii) pre roky i = (r_from + 1) do (r_to - 1): // od poradie(1, MES_JAN, i) do poradie(31, MES_DEC, i); // (iii) pre posledny rok: od poradie(1, MES_JAN, r_to) do poradie(d_to, m_to, r_to); // 2. ak je to r_from == r_to, tak len // pre poradie(d_from, m_from, r_from) do poradie(d_to, m_to, r_from==r_to) // // co sa tam vlastne bude robit? // 1. analyzuj_rok() daneho roku (r_from, i, r_to) -- ale len 1x! // 2. pre vsetky potrebne dni: rozbor_dna() -- ale printovat to nie Exportom do `export.htm', ale printf(name_batch_file)! // 3. that's all // // popritom pri prepínači _global_opt_batch_monthly == ANO je potrebné vždy vytvoriť adresár pre daný mesiac, // prepnúť sa doňho a následne (pre ďalší nový mesiac) z neho vyjsť a zas vytvoriť adresár (2009-08-02) // _global_string vyuzijeme na to, aby sme si medzi jednotlivymi dnami posielali nazov suboru v pripade, ze chce vsetky modlitby do 1 suboru (pouzil "-a1" = append) if (_global_opt_append == YES) { mystrcpy(_global_string, STR_EMPTY, MAX_GLOBAL_STR); // inicializacia mystrcpy(_global_string_modlitba, STR_EMPTY, SMALL); mystrcpy(_global_string_podnadpis, STR_EMPTY, SMALL); mystrcpy(_global_string_spol_cast, STR_EMPTY, MAX_GLOBAL_STR2); mystrcpy(_global_string_spol_cast_full, STR_EMPTY, MAX_GLOBAL_STR); if (_global_opt_export_date_format == EXPORT_DATE_SIMPLE) { sprintf(_global_string, FILENAME_EXPORT_DATE_SIMPLE "_" FILENAME_EXPORT_DATE_SIMPLE, r_from % 100, m_from + 1, d_from, r_to % 100, m_to + 1, d_to); } else { // EXPORT_DATE_FULL sprintf(_global_string, FILENAME_EXPORT_DATE_FULL "_" FILENAME_EXPORT_DATE_FULL, r_from, m_from + 1, d_from, r_to, m_to + 1, d_to); } // m_to resp. m_from: sú hodnoty 0--11, resp. VSETKY_MESIACE resp. UNKNOWN_MESIAC } export_month_zaciatok = ANO; export_month_nova_modlitba = ANO; Log("podľa týchto dvoch sa bude rozhodovať o type exportu...\n"); Log("_global_opt_batch_monthly == %d\n", _global_opt_batch_monthly); Log("export_monthly_druh == %d\n", export_monthly_druh); // nový druh exportu po mesiacoch -- aby jednotlivé mesiace mali sekcie podľa modlitieb; deň je len číslo if ((_global_opt_batch_monthly == ANO) && (export_monthly_druh >= 1)) { Log("batch mode: iný druh exportu pre mesiace\n"); if (export_monthly_druh < 2) { Log("\tv rámci jednoho mesiaca pôjdeme v hlavnom cykle po modlitbách, nie po dňoch\n"); } // iný druh exportu pre mesiace; v rámci jednoho mesiaca pôjdeme v hlavnom cykle po modlitbách, nie po dňoch for (r = r_from; r <= r_to; r++) { Log("batch mode: rok %d...\n", r); analyzuj_rok(r); // m je 0--11 čiže MES_JAN až MES_DEC for (m = (r == r_from ? m_from : MES_JAN); m <= (r == r_to ? m_to : MES_DEC); m++) { Log("batch mode: rok %d, mesiac %d [%s]...\n", r, m + 1, nazov_mesiaca_asci(m)); // 2012-12-12: nie pre append (netreba vytvárať adresáre [mkdir] ani po nich chodiť [cd]) if (_global_opt_append != YES) { if (som_dnu == ANO) { fprintf(batch_file, "cd ..\n"); Log("cd ..\n"); som_dnu = NIE; } if (/* r != r_from && m != m_from && */ index_pre_mesiac_otvoreny == ANO) { fprintf(batch_month_file, "
\n"); patka(batch_month_file); fclose(batch_month_file); Log("batch mode: export pre mesiac `%d' skončený, súbor %s zatvorený.\n", m, name_batch_month_file); index_pre_mesiac_otvoreny = NIE; } // názov executable resp. include dir sme zmenili hneď v getArgv() (lebo budeme meniť adresár) if (_global_opt_export_date_format == EXPORT_DATE_SIMPLE) { sprintf(dir_name, DIRNAME_EXPORT_MONTH_SIMPLE, r % 100, m + 1, nazov_mes[m]); } else { // EXPORT_DATE_FULL sprintf(dir_name, DIRNAME_EXPORT_MONTH_FULL, r, m + 1, nazov_mesiaca_asci(m)); } sprintf(system_command, CMD_MKDIR" \"%s\"\n", dir_name); Log(CMD_MKDIR" \"%s\"\n", dir_name); // fprintf(batch_file, system_command); system(system_command); fprintf(batch_file, "cd \"%s\"\n", dir_name); Log("cd \"%s\"\n", dir_name); }// if (_global_opt_append != YES) -- nie pre append som_dnu = ANO; if (export_monthly_druh >= 2) { Log("rozbor mesiaca pre export (%s %d)...\n", nazov_mesiaca(m), r); // bez ohľadu na to, čo pre tento typ exportu bolo nastavené, použije sa z mesiaca vytvorený súbor; až teraz, keď je vygenerovaný príkaz pre vytvorenie mesiaca if (_global_opt_export_date_format == EXPORT_DATE_SIMPLE) { sprintf(_global_export_navig_hore_month, FILENAME_EXPORT_MONTH_SIMPLE".htm", r % 100, m + 1); } else { // EXPORT_DATE_FULL sprintf(_global_export_navig_hore_month, FILENAME_EXPORT_MONTH_FULL".htm", r, m + 1); } _export_rozbor_dna_mesiaca_batch(VSETKY_DNI, m + 1, r); // vytvorenie názvu súboru pre mesiac mystrcpy(name_batch_month_file, dir_name, MAX_STR); strcat(name_batch_month_file, STR_PATH_SEPARATOR); strcat(name_batch_month_file, _global_export_navig_hore_month); Log("rozbor mesiaca pre export (súbor %s)...\n", name_batch_month_file); }// if (export_monthly_druh >= 2) else { // vytvorenie názvu súboru pre mesiac mystrcpy(name_batch_month_file, dir_name, MAX_STR); strcat(name_batch_month_file, STR_PATH_SEPARATOR); strcat(name_batch_month_file, _global_export_navig_hore /* DEFAULT_MONTH_EXPORT */); // otvorím aj súbor pre jednotlivý mesiac batch_month_file = fopen(name_batch_month_file, "wt"); if (batch_month_file != NULL) { Log("batch mode: File `%s' opened for writing... (batch_month_file/1)\n", name_batch_month_file); // môžeme upraviť názov tak, ako ho budeme printovať do dokumentov -- aby obsahoval STR_PATH_SEPARATOR_HTML namiesto STR_PATH_SEPARATOR // pre použitie vo funkcii execute_batch_command() mystrcpy(name_batch_month_file, dir_name, MAX_STR); strcat(name_batch_month_file, STR_PATH_SEPARATOR_HTML); strcat(name_batch_month_file, _global_export_navig_hore /* DEFAULT_MONTH_EXPORT */); Log("batch mode: názov súboru upravený na '%s' (súbor je už otvorený)...\n", name_batch_month_file); _batch_mode_header(m, r_from); // začiatok zoznamu fprintf(batch_month_file, "
    \n"); index_pre_mesiac_otvoreny = ANO; } }// else if (export_monthly_druh >= 2) if (export_monthly_druh >= 2) { // v rámci daného mesiaca ideme podľa dní, vnútri podľa modlitieb // d je číslo 1 až max d_a_m.mesiac = m + 1; // totiž _struct_den_mesiac má mesiace 1--12, zatiaľ čo m je 0--11 pocet_dni_v_mes = pocet_dni[m]; if (prestupny(r) && m == MES_FEB) pocet_dni_v_mes = 29; for (d = ((r == r_from && m == m_from) ? d_from : 1); d <= ((r == r_to && m == m_to) ? d_to : pocet_dni_v_mes); d++) { d_a_m.den = d; Log("batch mode: rok %d, mesiac %d [%s], den %d...\n", r, m + 1, nazov_mesiaca_asci(m), d); // bez ohľadu na to, čo pre tento typ exportu bolo nastavené, použije sa zo dňa a mesiaca vytvorený súbor; až teraz, keď je vygenerovaný príkaz pre vytvorenie dňa if (_global_opt_export_date_format == EXPORT_DATE_SIMPLE) { sprintf(_global_export_navig_hore_day, FILENAME_EXPORT_DATE_SIMPLE".htm", r % 100, m + 1, d); } else { // EXPORT_DATE_FULL sprintf(_global_export_navig_hore_day, FILENAME_EXPORT_DATE_FULL".htm", r, m + 1, d); } _export_rozbor_dna_mesiaca_batch(d, m + 1, r); _rozbor_dna(d_a_m, r); max_modlitba = MODL_KOMPLETORIUM; // ToDo: this condition should be more precise if ((_global_den.denvt == DEN_NEDELA) || (_global_den.typslav == SLAV_SLAVNOST)) { max_modlitba = MODL_PRVE_VESPERY; } for (p = MODL_INVITATORIUM; p <= max_modlitba; p++) { if (p == MODL_NEURCENA) { continue; } Log("batch mode: rok %d, mesiac %d [%s], modlitba %s (%d), den %d...\n", r, m + 1, nazov_mesiaca_asci(m), nazov_modlitby(p), p, d); _export_rozbor_dna_batch(EXPORT_DNA_JEDEN_DEN, p, (r == r_from && m == m_from && d == d_from) ? 1 : 0); } // for p }// for d }// if (export_monthly_druh >= 2) else { // v rámci daného mesiaca ideme podľa modlitieb, až vnútri podľa dní for (p = MODL_INVITATORIUM; p <= MODL_PRVE_VESPERY; p++) { if (p == MODL_NEURCENA) { continue; } Log("batch mode: rok %d, mesiac %d [%s], modlitba %s (%d)...\n", r, m + 1, nazov_mesiaca_asci(m), nazov_modlitby(p), p); export_month_nova_modlitba = ANO; // toto je potrebné kvôli zmene podmienky vo funkcii execute_batch_command() // d je číslo 1 až max d_a_m.mesiac = m + 1; // totiž _struct_den_mesiac má mesiace 1--12, zatiaľ čo m je 0--11 pocet_dni_v_mes = pocet_dni[m]; if (prestupny(r) && m == MES_FEB) { pocet_dni_v_mes = 29; } for (d = ((r == r_from && m == m_from) ? d_from : 1); d <= ((r == r_to && m == m_to) ? d_to : pocet_dni_v_mes); d++) { d_a_m.den = d; Log("batch mode: rok %d, mesiac %d [%s], modlitba %s (%d), den %d...\n", r, m + 1, nazov_mesiaca_asci(m), nazov_modlitby(p), p, d); _rozbor_dna(d_a_m, r); // ToDo: this condition should be more precise if ((p < MODL_NEURCENA) || ((_global_den.denvt == DEN_NEDELA) || (_global_den.typslav == SLAV_SLAVNOST))) { _export_rozbor_dna_batch(EXPORT_DNA_JEDEN_DEN, p, (r == r_from && m == m_from && d == d_from) ? 1 : 0); } }// for d } }// else if (export_monthly_druh >= 2) }// for m }// for r Log("batch mode: iný druh exportu pre mesiace: koniec\n"); }// if (_global_opt_batch_monthly == ANO && export_monthly_druh >= 1) else { Log("batch mode: klasický export 'zaradom' alebo po mesiacoch s tým, že hlavný cyklus ide po dňoch (čo deň, to riadok s odkazom na modlitby)\n"); // klasický export 'zaradom' alebo po mesiacoch s tým, že hlavný cyklus ide po dňoch (čo deň, to riadok s odkazom na modlitby) // exportovanie do adresárov po mesiacoch if (_global_opt_batch_monthly == ANO) { // nie pre append (netreba vytvárať adresáre [mkdir] ani po nich chodiť [cd]) if (_global_opt_append != YES) { // názov executable resp. include dir sme zmenili hneď v getArgv() (lebo budeme meniť adresár) if (_global_opt_export_date_format == EXPORT_DATE_SIMPLE) { sprintf(dir_name, DIRNAME_EXPORT_MONTH_SIMPLE, r_from % 100, m_from + 1, nazov_mes[m_from]); } else { // EXPORT_DATE_FULL sprintf(dir_name, DIRNAME_EXPORT_MONTH_FULL, r_from, m_from + 1, nazov_mesiaca_asci(m_from)); } // m_to resp. m_from: sú hodnoty 0--11, resp. VSETKY_MESIACE resp. UNKNOWN_MESIAC Log("začínam pre adresár %s...\n", dir_name); sprintf(system_command, CMD_MKDIR" \"%s\"\n", dir_name); Log(CMD_MKDIR" \"%s\"\n", dir_name); // fprintf(batch_file, system_command); system(system_command); fprintf(batch_file, "cd \"%s\"\n", dir_name); Log("cd \"%s\"\n", dir_name); }// if (_global_opt_append != YES) -- nie pre append som_dnu = ANO; // ak je začiatok obdobia prvého v mesiaci, nastavím if (d_from == 1) { prveho_v_mesiaci = ANO; } // otvorím aj súbor pre jednotlivý mesiac mystrcpy(name_batch_month_file, dir_name, MAX_STR); strcat(name_batch_month_file, STR_PATH_SEPARATOR); strcat(name_batch_month_file, _global_export_navig_hore /* DEFAULT_MONTH_EXPORT */); batch_month_file = fopen(name_batch_month_file, "wt"); if (batch_month_file != NULL) { Log("batch mode: File `%s' opened for writing... (batch_month_file/2)\n", name_batch_month_file); _batch_mode_header(m_from, r_from); // začiatok zoznamu fprintf(batch_month_file, "
      \n"); index_pre_mesiac_otvoreny = ANO; } } if (r_from < r_to) { Log("batch mode: viacero rokov (%d-%d)...\n", r_from, r_to); // analyzujem prvy rok (r_from). potom pre jednotlive dni az do konca roka robim: _rozbor_dna a _export_rozbor_dna_batch Log("rok %d...\n", r_from); analyzuj_rok(r_from); for (i = poradie(d_from, m_from + 1, r_from); i <= poradie(31, MES_DEC + 1, r_from); i++) { Log("%d. den v roku %d...\n", i, r_from); // doplnenie nastavenia premenných kvôli tomu, že v batch móde používame viackrát Log("setting _global_opt[OPT_3_SPOLOCNA_CAST]...\n"); _global_opt[OPT_3_SPOLOCNA_CAST] = MODL_SPOL_CAST_NEURCENA; d_a_m = por_den_mesiac(i, r_from); d = d_a_m.den; m = d_a_m.mesiac; if (_global_opt_batch_monthly == ANO && d == 1) { // ak je prvého, treba vytvoriť nový adresár LOG_ciara; Log("batch mode (viacero rokov): nový mesiac -- %s %d...\n", nazov_mesiaca(m - 1), r_from); // nie pre append (netreba vytvárať adresáre [mkdir] ani po nich chodiť [cd]) if (_global_opt_append != YES) { // exportovanie do adresárov po mesiacoch if (som_dnu == ANO) { fprintf(batch_file, "cd ..\n"); Log("cd ..\n"); som_dnu = NIE; } // zatvorenie súboru (index.htm) pre jednotlivý mesiac if (index_pre_mesiac_otvoreny == ANO) { fprintf(batch_month_file, "
    \n"); patka(batch_month_file); fclose(batch_month_file); Log("batch mode: export pre predošlý mesiac skončený, súbor %s zatvorený.\n", name_batch_month_file); index_pre_mesiac_otvoreny = NIE; } // názov executable resp. include dir sme zmenili hneď v getArgv() (lebo budeme meniť adresár) if (_global_opt_export_date_format == EXPORT_DATE_SIMPLE) { sprintf(dir_name, DIRNAME_EXPORT_MONTH_SIMPLE, r_from % 100, m, nazov_mes[m - 1]); } else { // EXPORT_DATE_FULL sprintf(dir_name, DIRNAME_EXPORT_MONTH_FULL, r_from, m, nazov_mesiaca_asci(m - 1)); } sprintf(system_command, CMD_MKDIR" \"%s\"\n", dir_name); Log(CMD_MKDIR" \"%s\"\n", dir_name); // fprintf(batch_file, system_command); system(system_command); fprintf(batch_file, "cd \"%s\"\n", dir_name); Log("cd \"%s\"\n", dir_name); }// if (_global_opt_append != YES) -- nie pre append som_dnu = ANO; // otvorím aj súbor pre jednotlivý mesiac mystrcpy(name_batch_month_file, dir_name, MAX_STR); strcat(name_batch_month_file, STR_PATH_SEPARATOR); strcat(name_batch_month_file, _global_export_navig_hore /* DEFAULT_MONTH_EXPORT */); batch_month_file = fopen(name_batch_month_file, "wt"); if (batch_month_file != NULL) { Log("batch mode: File `%s' opened for writing... (batch_month_file/3)\n", name_batch_month_file); _batch_mode_header(m - 1, r_from); // začiatok zoznamu fprintf(batch_month_file, "
      \n"); index_pre_mesiac_otvoreny = ANO; } }// if (_global_opt_batch_monthly == ANO && d == 1) _rozbor_dna(d_a_m, r_from); // _struct_den_mesiac je typ, ktory vrati _rozbor_dna(); _export_rozbor_dna_batch(EXPORT_DNA_JEDEN_DEN); }// for i // teraz pre roky (r_from + 1) az (r_to - 1) robim to, co predtym, cize analyzujem rok a pre vsetky dni - tentokrat pre cele roky, // od 1.1. do 31.12. - robim _rozbor_dna a _export_rozbor_dna_batch for (short int y = (r_from + 1); y < r_to; y++) { Log("rok %d...\n", y); analyzuj_rok(y); for (i = poradie(1, MES_JAN + 1, y); i <= poradie(31, MES_DEC + 1, y); i++) { Log("%d. den v roku %d...\n", i, y); // doplnenie nastavenia premenných kvôli tomu, že v batch móde používame viackrát Log("setting _global_opt[OPT_3_SPOLOCNA_CAST]...\n"); _global_opt[OPT_3_SPOLOCNA_CAST] = MODL_SPOL_CAST_NEURCENA; d_a_m = por_den_mesiac(i, y); d = d_a_m.den; m = d_a_m.mesiac; if (_global_opt_batch_monthly == ANO && d == 1) { // ak je prvého, treba vytvoriť nový adresár LOG_ciara; Log("batch mode (vnútorné celé roky): nový mesiac -- %s %d...\n", nazov_mesiaca(m - 1), y); // nie pre append (netreba vytvárať adresáre [mkdir] ani po nich chodiť [cd]) if (_global_opt_append != YES) { // exportovanie do adresárov po mesiacoch if (som_dnu == ANO) { fprintf(batch_file, "cd ..\n"); Log("cd ..\n"); som_dnu = NIE; } // 2009-08-03: zatvorenie súboru (index.htm) pre jednotlivý mesiac if (index_pre_mesiac_otvoreny == ANO) { fprintf(batch_month_file, "
    \n"); patka(batch_month_file); fclose(batch_month_file); Log("batch mode: export pre predošlý mesiac skončený, súbor %s zatvorený.\n", name_batch_month_file); index_pre_mesiac_otvoreny = NIE; } // názov executable resp. include dir sme zmenili hneď v getArgv() (lebo budeme meniť adresár) if (_global_opt_export_date_format == EXPORT_DATE_SIMPLE) { sprintf(dir_name, DIRNAME_EXPORT_MONTH_SIMPLE, y % 100, m, nazov_mes[m - 1]); } else { // EXPORT_DATE_FULL sprintf(dir_name, DIRNAME_EXPORT_MONTH_FULL, y, m, nazov_mesiaca_asci(m - 1)); } sprintf(system_command, CMD_MKDIR" \"%s\"\n", dir_name); Log(CMD_MKDIR" \"%s\"\n", dir_name); // fprintf(batch_file, system_command); system(system_command); fprintf(batch_file, "cd \"%s\"\n", dir_name); Log("cd \"%s\"\n", dir_name); }// if (_global_opt_append != YES) -- nie pre append som_dnu = ANO; // otvorím aj súbor pre jednotlivý mesiac mystrcpy(name_batch_month_file, dir_name, MAX_STR); strcat(name_batch_month_file, STR_PATH_SEPARATOR); strcat(name_batch_month_file, _global_export_navig_hore /* DEFAULT_MONTH_EXPORT */); batch_month_file = fopen(name_batch_month_file, "wt"); if (batch_month_file != NULL) { Log("batch mode: File `%s' opened for writing... (batch_month_file/4)\n", name_batch_month_file); _batch_mode_header(m - 1, y); // začiatok zoznamu fprintf(batch_month_file, "
      \n"); index_pre_mesiac_otvoreny = ANO; } } _rozbor_dna(d_a_m, y); _export_rozbor_dna_batch(EXPORT_DNA_JEDEN_DEN); }// for i Log("...(rok %d) skoncil.\n", y); }// for y // napokon analyzujem posledny rok (r_to). pre jednotlive dni az do dna (d_to, m_to) robim: _rozbor_dna a _export_rozbor_dna_batch Log("rok %d...\n", r_to); analyzuj_rok(r_to); for (i = poradie(1, MES_JAN + 1, r_to); i <= poradie(d_to, m_to + 1, r_to); i++) { Log("%d. den v roku %d...\n", i, r_to); // doplnenie nastavenia premenných kvôli tomu, že v batch móde používame viackrát Log("setting _global_opt[OPT_3_SPOLOCNA_CAST]...\n"); _global_opt[OPT_3_SPOLOCNA_CAST] = MODL_SPOL_CAST_NEURCENA; d_a_m = por_den_mesiac(i, r_to); d = d_a_m.den; m = d_a_m.mesiac; if (_global_opt_batch_monthly == ANO && d == 1) { // ak je prvého, treba vytvoriť nový adresár LOG_ciara; Log("batch mode (od začiatku roka): nový mesiac -- %s %d...\n", nazov_mesiaca(m - 1), r_to); // nie pre append (netreba vytvárať adresáre [mkdir] ani po nich chodiť [cd]) if (_global_opt_append != YES) { // exportovanie do adresárov po mesiacoch if (som_dnu == ANO) { fprintf(batch_file, "cd ..\n"); Log("cd ..\n"); som_dnu = NIE; } // zatvorenie súboru (index.htm) pre jednotlivý mesiac if (index_pre_mesiac_otvoreny == ANO) { fprintf(batch_month_file, "
    \n"); patka(batch_month_file); fclose(batch_month_file); Log("batch mode: export pre predošlý mesiac skončený, súbor %s zatvorený.\n", name_batch_month_file); index_pre_mesiac_otvoreny = NIE; } // názov executable resp. include dir sme zmenili hneď v getArgv() (lebo budeme meniť adresár) if (_global_opt_export_date_format == EXPORT_DATE_SIMPLE) { sprintf(dir_name, DIRNAME_EXPORT_MONTH_SIMPLE, r_to % 100, m, nazov_mes[m - 1]); } else { // EXPORT_DATE_FULL sprintf(dir_name, DIRNAME_EXPORT_MONTH_FULL, r_to, m, nazov_mesiaca_asci(m - 1)); } sprintf(system_command, CMD_MKDIR" \"%s\"\n", dir_name); Log(CMD_MKDIR" \"%s\"\n", dir_name); // fprintf(batch_file, system_command); system(system_command); fprintf(batch_file, "cd \"%s\"\n", dir_name); Log("cd \"%s\"\n", dir_name); }// if (_global_opt_append != YES) -- nie pre append som_dnu = ANO; // otvorím aj súbor pre jednotlivý mesiac mystrcpy(name_batch_month_file, dir_name, MAX_STR); strcat(name_batch_month_file, STR_PATH_SEPARATOR); strcat(name_batch_month_file, DEFAULT_MONTH_EXPORT); batch_month_file = fopen(name_batch_month_file, "wt"); if (batch_month_file != NULL) { Log("batch mode: File `%s' opened for writing... (batch_month_file/5)\n", name_batch_month_file); _batch_mode_header(m - 1, r_to); // začiatok zoznamu fprintf(batch_month_file, "
      \n"); index_pre_mesiac_otvoreny = ANO; } } _rozbor_dna(d_a_m, r_to); _export_rozbor_dna_batch(EXPORT_DNA_JEDEN_DEN); }// for i }// r_from < r_to -- viacero rokov else { Log("batch mode: v rámci jedného roka (%d)...\n", r_from); // analyzujem ten jeden rok. potom pre jednotlive dni robim: _rozbor_dna a _export_rozbor_dna_batch analyzuj_rok(r_from); for (i = poradie(d_from, m_from + 1, r_from); i <= poradie(d_to, m_to + 1, r_to); i++) { Log("%d. den v roku %d...\n", i, r_from); // doplnenie nastavenia premenných kvôli tomu, že v batch móde používame viackrát Log("setting _global_opt[OPT_3_SPOLOCNA_CAST]...\n"); _global_opt[OPT_3_SPOLOCNA_CAST] = MODL_SPOL_CAST_NEURCENA; d_a_m = por_den_mesiac(i, r_from); d = d_a_m.den; m = d_a_m.mesiac; if (_global_opt_batch_monthly == ANO && d == 1 && prveho_v_mesiaci == NIE) { // ak je prvého, treba vytvoriť nový adresár; 2011-09-30: nevytvárame vtedy, ak už bol vyššie vytvorený LOG_ciara; Log("batch mode (v rámci jedného roka): nový mesiac -- %s %d...\n", nazov_mesiaca(m - 1), r_from /* == r_to */); // nie pre append (netreba vytvárať adresáre [mkdir] ani po nich chodiť [cd]) if (_global_opt_append != YES) { // exportovanie do adresárov po mesiacoch if (som_dnu == ANO) { fprintf(batch_file, "cd ..\n"); Log("cd ..\n"); som_dnu = NIE; } // zatvorenie súboru (index.htm) pre jednotlivý mesiac if (index_pre_mesiac_otvoreny == ANO) { fprintf(batch_month_file, "
    \n"); patka(batch_month_file); fclose(batch_month_file); Log("batch mode: export pre predošlý mesiac skončený, súbor %s zatvorený.\n", name_batch_month_file); index_pre_mesiac_otvoreny = NIE; } // názov executable resp. include dir sme zmenili hneď v getArgv() (lebo budeme meniť adresár) if (_global_opt_export_date_format == EXPORT_DATE_SIMPLE) { sprintf(dir_name, DIRNAME_EXPORT_MONTH_SIMPLE, r_from % 100, m, nazov_mes[m - 1]); } else { // EXPORT_DATE_FULL sprintf(dir_name, DIRNAME_EXPORT_MONTH_FULL, r_from, m, nazov_mesiaca_asci(m - 1)); } sprintf(system_command, CMD_MKDIR" \"%s\"\n", dir_name); Log(CMD_MKDIR" \"%s\"\n", dir_name); // fprintf(batch_file, system_command); system(system_command); fprintf(batch_file, "cd \"%s\"\n", dir_name); Log("cd \"%s\"\n", dir_name); }// if (_global_opt_append != YES) -- nie pre append som_dnu = ANO; // otvorím aj súbor pre jednotlivý mesiac mystrcpy(name_batch_month_file, dir_name, MAX_STR); strcat(name_batch_month_file, STR_PATH_SEPARATOR); strcat(name_batch_month_file, _global_export_navig_hore /* DEFAULT_MONTH_EXPORT */); batch_month_file = fopen(name_batch_month_file, "wt"); if (batch_month_file != NULL) { Log("batch mode: File `%s' opened for writing... (batch_month_file/6)\n", name_batch_month_file); _batch_mode_header(m - 1, r_from); // začiatok zoznamu fprintf(batch_month_file, "
      \n"); index_pre_mesiac_otvoreny = ANO; } }// _global_opt_batch_monthly == ANO && d == 1 && prveho_v_mesiaci == NIE prveho_v_mesiaci = NIE; _rozbor_dna(d_a_m, r_from); _export_rozbor_dna_batch(EXPORT_DNA_JEDEN_DEN); }// for i }// r_from == r_to }// else if (_global_opt_batch_monthly == ANO && export_monthly_druh >= 1) if (_global_opt_batch_monthly == ANO) { // zatvorenie súboru (index.htm) pre jednotlivý mesiac if (index_pre_mesiac_otvoreny == ANO) { fprintf(batch_month_file, "
    \n"); patka(batch_month_file); fclose(batch_month_file); Log("batch mode: export pre posledný mesiac skončený, súbor zatvorený; toto bol posledný súbor %s.\n", _global_export_navig_hore /* DEFAULT_MONTH_EXPORT */); index_pre_mesiac_otvoreny = NIE; } // nie pre append (netreba vytvárať adresáre [mkdir] ani po nich chodiť [cd]) if (_global_opt_append != YES) { // exportovanie do adresárov po mesiacoch -- vrátime sa späť if (som_dnu == ANO) { fprintf(batch_file, "cd ..\n"); Log("cd ..\n"); som_dnu = NIE; } }// if (_global_opt_append != YES) -- nie pre append }// if (_global_opt_batch_monthly == ANO) // koniec zoznamu fprintf(batch_html_file, "
\n"); // prilepenie pätky patka(batch_html_file); // zatvorenie súboru fclose(batch_html_file); Log("batch mode: ...celé zadané obdobie je spracované; súbor %s zatvorený.\n", name_batch_html_file); LOG_ciara; }// batch_html_file != NULL else { Export("Nemôžem písať do súboru `%s'.\n", name_batch_html_file); Log("batch mode: Cannot open file `%s' for writing.\n", name_batch_html_file); }// batch_html_file == NULL) // ...a sranda skoncila fclose(batch_file); }// ok, batch_file != NULL else { Export("Nemôžem písať do súboru `%s'.\n", name_batch_file); Log("Cannot open file `%s' for writing.\n", name_batch_file); }// batch_file == NULL }// name_batch_file != STR_EMPTY else { Export("Nezadané meno batch súboru (použite parameter `%s').\n", STR_PRM_BATCH_MODE); Log("Batch filename empty (use `%s' parameter).\n", STR_PRM_BATCH_MODE); } }// result == SUCCESS }// _main_batch_mode() #ifdef OS_linux extern char **environ; #endif void write(void) { short int i = 0; while (environ[i]) { // if (strstr(environ[i], "WWW_") != NULL) Log(HTML_P_BEGIN"%d: %s" HTML_LINE_BREAK "__________" HTML_LINE_BREAK, i, environ[i]); i++; } } // popis: zisti, ktory z parametrov je pouzity; ostatne sa zisti z WWW_... // vracia: on error, returns PRM_NONE or PRM_UNKNOWN // on success, returns PRM_DATUM, PRM_SVIATOK or PRM_CEZ_ROK | (09/02/2000A.D.: pridane PRM_DETAILY) | 2011-01-25: pridane PRM_LIT_OBD // return values #define'd in mydefs.h short int getQueryTypeFrom_QS(char *qs) { Log("getQueryTypeFrom_QS() -- begin\n"); Log(" qs == %s\n", qs); if (strstr(qs, STR_PRM_DATUM) != NULL) { // parameter STR_PRM_DATUM Log("getQueryTypeFrom_QS() -- end, returning PRM_DATUM\n"); return PRM_DATUM; } else if (strstr(qs, STR_PRM_DETAILY) != NULL) { // parameter STR_PRM_DETAILY Log("getQueryTypeFrom_QS() -- end, returning PRM_DETAILY\n"); return PRM_DETAILY; // pridane kvoli formularu 'Detaily...' } else if (strstr(qs, STR_PRM_CEZ_ROK) != NULL) { // parameter STR_PRM_CEZ_ROK Log("getQueryTypeFrom_QS() -- end, returning PRM_CEZ_ROK\n"); return PRM_CEZ_ROK; } else if (strstr(qs, STR_PRM_LIT_OBD) != NULL) { // parameter STR_PRM_LIT_OBD Log("getQueryTypeFrom_QS() -- end, returning PRM_LIT_OBD\n"); return PRM_LIT_OBD; } else if (strstr(qs, STR_PRM_SVIATOK) != NULL) { // parameter STR_PRM_SVIATOK Log("getQueryTypeFrom_QS() -- end, returning PRM_SVIATOK\n"); return PRM_SVIATOK; } else if (strstr(qs, STR_PRM_ANALYZA_ROKU) != NULL) { // parameter STR_PRM_ANALYZA_ROKU Log("getQueryTypeFrom_QS() -- end, returning PRM_ANALYZA_ROKU\n"); return PRM_ANALYZA_ROKU; } else if (strstr(qs, STR_PRM_DNES) != NULL) { // parameter STR_PRM_DNES Log("getQueryTypeFrom_QS() -- end, returning PRM_DNES\n"); return PRM_DNES; } else if (strstr(qs, STR_PRM_MESIAC_ROKA) != NULL) { // parameter STR_PRM_MESIAC_ROKA Log("getQueryTypeFrom_QS() -- end, returning PRM_MESIAC_ROKA\n"); return PRM_MESIAC_ROKA; } else if (strstr(qs, STR_PRM_TABULKA) != NULL) { // parameter STR_PRM_TABULKA Log("getQueryTypeFrom_QS() -- end, returning PRM_TABULKA\n"); return PRM_TABULKA; } else if (strstr(qs, STR_PRM_BATCH_MODE) != NULL) { // parameter STR_PRM_BATCH_MODE Log("getQueryTypeFrom_QS() -- end, returning PRM_BATCH_MODE\n"); return PRM_BATCH_MODE; } else if (strstr(qs, STR_PRM_STATIC_TEXT) != NULL) { // parameter STR_PRM_STATIC_TEXT Log("getQueryTypeFrom_QS() -- end, returning PRM_STATIC_TEXT\n"); return PRM_STATIC_TEXT; } else { Log("getQueryTypeFrom_QS() -- end, returning PRM_UNKNOWN\n"); return PRM_UNKNOWN; // argumenty neobsahuju STR_PRM_... } }// getQueryTypeFrom_QS() short int getQueryTypeFrom_WWW(void) { char *ptr; short int ret; Log("getQueryTypeFrom_WWW() -- begin\n"); ptr = getenv(ADD_WWW_PREFIX_(STR_QUERY_TYPE)); // zistim, ci je to z formulara if (ptr == NULL) { // nie, dotaz nie je spusteny z formulara Log("getQueryTypeFrom_WWW() -- end, returning PRM_NONE\n"); ret = PRM_NONE; // aj bez parametrov WWW_... } // v tomto pripade existuje premenna WWW_QUERY_TYPE else if (equals(ptr, STR_PRM_DATUM)) { Log("getQueryTypeFrom_WWW() -- end, returning PRM_DATUM\n"); ret = PRM_DATUM; } // toto tu nemusi byt, lebo PRM_DETAILY sa pouziva len pre tlacidlo 'Detaily...', aby sa dalo odlisit od uvodneho formulara // -- kedysi sa tam miesala modlitba (pole WWW_MODLITBA) z option 'PRM_CEZ_ROK', ktora sa aplikovala aj na option 'PRM_DATUM' else if (equals(ptr, STR_PRM_DETAILY)) { Log("getQueryTypeFrom_WWW() -- end, returning PRM_DETAILY\n"); ret = PRM_DETAILY; } else if (equals(ptr, STR_PRM_CEZ_ROK)) { Log("getQueryTypeFrom_WWW() -- end, returning PRM_CEZ_ROK\n"); ret = PRM_CEZ_ROK; } else if (equals(ptr, STR_PRM_LIT_OBD)) { Log("getQueryTypeFrom_WWW() -- end, returning PRM_LIT_OBD\n"); ret = PRM_LIT_OBD; } else if (equals(ptr, STR_PRM_SVIATOK)) { Log("getQueryTypeFrom_WWW() -- end, returning PRM_SVIATOK\n"); ret = PRM_SVIATOK; } else if (equals(ptr, STR_PRM_ANALYZA_ROKU)) { Log("getQueryTypeFrom_WWW() -- end, returning PRM_ANALYZA_ROKU\n"); ret = PRM_ANALYZA_ROKU; } else if (equals(ptr, STR_PRM_DNES)) { Log("getQueryTypeFrom_WWW() -- end, returning PRM_DNES\n"); ret = PRM_DNES; } else if (equals(ptr, STR_PRM_MESIAC_ROKA)) { Log("getQueryTypeFrom_WWW() -- end, returning PRM_MESIAC_ROKA\n"); ret = PRM_MESIAC_ROKA; } else if (equals(ptr, STR_PRM_TABULKA)) { Log("getQueryTypeFrom_WWW() -- end, returning PRM_TABULKA\n"); ret = PRM_TABULKA; } // nie je tu PRM_BATCH_MODE, pretoze batch mode nie je urceny pre web, 2003-07-04 else { Log("getQueryTypeFrom_WWW() -- end, returning PRM_UNKNOWN\n"); ret = PRM_UNKNOWN; // failure } return ret; }// getQueryTypeFrom_WWW(); // popis: naplni premenne pom_... hodnotami, ktore boli dodane ako sucast argumentu // napriklad "-q PRM_DATUM -1 7 -2 5 -3 1976" vrati query_type == PRM_DATUM; pom_DEN == 7; pom_MESIAC == 5; pom_ROK == 1976 // vracia: on success, returns SUCCESS // on error, returns FAILURE // popritom: nastavi do query_type to, co by malo byt po switchi -q short int getArgv(int argc, const char** argv) { short int c; optind = 0; // pokial tu toto nebolo, tak getopt sa neinicializovala pri dalsich volaniach char* option_string; char pom_name_binary_executable[MAX_STR] = STR_EMPTY; // 2009-08-02: doplnené pre prilepenie ..\ pred názov name_binary_executable char pom_include_dir[MAX_STR] = STR_EMPTY; // 2009-08-02: doplnené pre prilepenie ..\ pred názov include_dir Log("allocating memory for option_string...\n"); // allocate memory for string if ((option_string = (char*)malloc(MAX_STR)) == NULL) { Log("Not enough memory to allocate buffer, so returning FAILURE\n"); //printf("Not enough memory to allocate buffer (getArgv(), char *option_string)\n"); // exit(1); -- terminate program if out of memory return FAILURE; } // option_string obsahuje options (case sensitive) // 24/02/2000A.D.: odstranil som `e' switch -- sposoboval problemy; // pismeno `s' je pouzite na debuggovacie ucely pre zadanie uplneho query stringu; // 13/03/2000A.D.: znova som pridal `e' switch; tentokrat uz prirobene closeExport() a initExport(char*) v myexpt.[h|cpp] // 15/03/2000A.D.: pridal som parametre // `f' (rok from), `g' (rok to), `l' (hyperlinky) pre -qptab // 05/06/2000A.D.: pridany parameter `i' (include directory) // 2003-07-04: pridane nasledovne parametre: // `n' (name of binary executable) -> name_binary_executable // `b' (name of generated batch file, analogia exportu, `e') -> name_batch_file // 2003-07-08: pridany nasledovny parameter: // `a' (append) aby pri exportovani do suboru (-e) appendoval, nie prepisal subor // 2004-03-16: pridany nasledovny parameter: // `k' (hyperteKst) aby pri exportovani v batch mode pisal do HTML suboru zoznam modlitieb // 2010-08-04: význam parametra `k' zmenený; pre pôvodný význam sa používa `o' (Output) // 2006-07-12: pridaný nasledovný parameter: // `j' (Jazyk) jazyková mutácia, zatiaľ sk, cz // 2008-08-08: pridaný nasledovný parameter: // `c' (css) použité css // 2008-11-29: pridaný nasledovný parameter: // `u' (dátUm) spôsob zapisovania dátumu pre súbory v batch móde // 2009-08-02: pridaný nasledovný parameter: // `M' (Monthly) spôsob zapisovania v batch móde do adresárov po mesiacoch // 2010-08-04: pridaný nasledovný parameter: // `k' (Kalendár) špecifikácia prípadného lokálneho (rehoľného) kalendára, súvisí s parametrom 'j' (jazyk) // 2010-11-29: pridané nasledovné parametre: // `H' (header) špeciálne správanie pre 2. až predposledný súbor generovaný append režimom (-a1): includovanie hlavičky // `F' (footer) špeciálne správanie pre 2. až predposledný súbor generovaný append režimom (-a1): includovanie pätky // 2011-04-13: upravené (pridaná option 0 a odstránené od čísla 5 až po 9) // 2011-05-06: upravené (hodnota `F' ani `H' sa nepoužívali) // `F' (font): možnosť zvoliť font pre override CSS // 2012-09-07: 'H' (header) disables header and footer // 2021-07-13: 'T' (font size pT) force font size in pt // 2021-07-13: 'y', 'v' and 'w' are still available :) mystrcpy(option_string, "?q::d::m::r::p::x::s::t::0::1::2::3::4::5::a::h::e::f::g::l::i::\?::b::n::o::k::j::c::u::M::I::H::F::S::T::G::L::v::D::N", MAX_STR); // tie options, ktore maju za sebou : maju povinny argument; ak maju :: tak maju volitelny Log("-- getArgv(): begin\n"); DEBUG_GET_ARGV("argc == %d\n", argc); if (argc == 1) { // bud nie su zadane ziadne hodnoty alebo cerpam z premennych WWW_ // sem sa to nemalo dostat, pretoze najprv sme pouzili get_query_type() // keby sa to sem vsak predsalen dostalo, dame sem nasledujucu pasaz, aby sme mohli exportovat, pretoze pred pouzitim getArgv nie je otvoreny fajl FILE_EXPORT DEBUG_GET_ARGV("Nezadane ziadne argumenty (argc == 1).\n"); ALERT; Export("Obslužnému programu neboli zadané žiadne argumenty.\n"); Export(HTML_P_BEGIN"getArgv();\n"); return FAILURE; // nie su argumenty } else { Log("option_string == %s\n", option_string); for (c = 0; c < argc; c++) Log("argv[%d] == %s\n", c, argv[c]); // hodnoty su v dialogovom riadku // zistujeme ich cez standardne mygetopt.c while (1) { // this_option_optind = optind ? optind : 1; c = getopt(argc, argv, option_string); if (c == -1) // uz nie je option, vyskoc z while(1) break; switch (c) { case 'c': if (optarg != NULL) { mystrcpy(pom_THEME, optarg, SMALL); } Log("option %c with value `%s' -- `%s' used for theme/css\n", c, optarg, optarg); break; case 'D': if (optarg != NULL) { mystrcpy(pom_THEME_LIGHT_BACKGROUND_COLOR, optarg, SMALL); } Log("option %c with value `%s' -- `%s' used for light theme/background color override\n", c, optarg, optarg); break; case 'N': if (optarg != NULL) { mystrcpy(pom_THEME_DARK_BACKGROUND_COLOR, optarg, SMALL); } Log("option %c with value `%s' -- `%s' used for dark theme/background color override\n", c, optarg, optarg); break; case 'v': if (optarg != NULL) { mystrcpy(pom_SIDEMENU_LOCATION, optarg, SMALL); } Log("option %v with value `%s' -- `%s' used for sidemenu location\n", c, optarg, optarg); break; case 'j': if (optarg != NULL) { mystrcpy(pom_JAZYK, optarg, SMALL); } Log("option %c with value `%s' -- `%s' used for language mutation\n", c, optarg, optarg); break; case 'k': if (optarg != NULL) { mystrcpy(pom_KALENDAR, optarg, SMALL); } Log("option %c with value `%s' -- `%s' used for calendar mutation\n", c, optarg, optarg); break; case 'o': if (optarg != NULL) { mystrcpy(name_batch_html_file, optarg, SMALL); } Log("option %c with value `%s' -- batch file HTML name `%s' used for batch mode\n", c, optarg, optarg); break; case 'b': if (optarg != NULL) { mystrcpy(name_batch_file, optarg, SMALL); } Log("option %c with value `%s' -- batch file name `%s' used for batch mode\n", c, optarg, optarg); break; case 'n': if (optarg != NULL) { mystrcpy(name_binary_executable, optarg, SMALL); } Log("option %c with value `%s' -- binary executable name `%s' used for batch mode\n", c, optarg, optarg); break; case 'i': if (optarg != NULL) { mystrcpy(include_dir, optarg, MAX_STR); // 2012-09-08: This string can be quite long on iOS } Log("option %c with value `%s' -- including files from `%s'\n", c, optarg, optarg /* 2004-03-17 zapoznamkovane FILE_PATH */); break; case 'f': // tabulka - rok from; pre batch mode je to DEN DO if (optarg != NULL) { mystrcpy(pom_ROK_FROM, optarg, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case 'F': if (optarg != NULL) { mystrcpy(pom_FONT, optarg, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case 'S': if (optarg != NULL) { mystrcpy(pom_FONT_SIZE, optarg, VERY_SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case 'T': if (optarg != NULL) { mystrcpy(pom_FONT_SIZE_PT, optarg, VERY_SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case 'G': if (optarg != NULL) { mystrcpy(pom_STYLE_MARGIN, optarg, VERY_SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case 'L': if (optarg != NULL) { mystrcpy(pom_LINE_HEIGHT_PERC, optarg, VERY_SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case 'g': // tabulka - rok to; pre batch mode je to MESIAC DO if (optarg != NULL) { mystrcpy(pom_ROK_TO, optarg, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case 'l': // tabulka - [hyper]linky if (optarg != NULL) { mystrcpy(pom_LINKY, optarg, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case 'e': // export filename if (optarg != NULL) { mystrcpy(file_export, optarg, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case 's': // debuggovanie, query string if (optarg != NULL) { Log("--copying `%s' to query_string...", optarg); mystrcpy(query_string, optarg, MAX_QUERY_STR); // to mozeme urobit; predtym, ked sme este nealokovali pre query_string miesto, bolo by lepsie urobit nejaku lokalnu premennu, na ktoru by potom query_string ukazoval mystrcpy(pom_QUERY_TYPE, STR_PRM_SIMULACIA_QS, MAX_POM_QUERY_TYPE); query_type = PRM_SIMULACIA_QS; } Log("option %c with value `%s'\n", c, optarg); break; case 'd': if (optarg != NULL) { mystrcpy(pom_DEN, optarg, SMALL); } Log("option %c with value `%s' -- den\n", c, optarg); break; case 'm': case 't': if (optarg != NULL) { mystrcpy(pom_MESIAC, optarg, SMALL); } Log("option %c with value `%s' -- mesiac/tyzden\n", c, optarg); break; case 'r': if (optarg != NULL) { mystrcpy(pom_ROK, optarg, SMALL); } Log("option %c with value `%s' -- rok\n", c, optarg); break; case 'p': if (optarg != NULL) { mystrcpy(pom_MODLITBA, optarg, SMALL); } Log("option %c with value `%s' -- modlitba\n", c, optarg); break; case 'x': if (optarg != NULL) { mystrcpy(pom_DALSI_SVATY, optarg, SMALL); } Log("option %c with value `%s' -- poradie svateho\n", c, optarg); break; // OPT 0..5 case '0': if (optarg != NULL) { mystrcpy(pom_OPT[OPT_0_SPECIALNE], optarg, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case '1': if (optarg != NULL) { mystrcpy(pom_OPT[OPT_1_CASTI_MODLITBY], optarg, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case '2': if (optarg != NULL) { mystrcpy(pom_OPT[OPT_2_HTML_EXPORT], optarg, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case '3': if (optarg != NULL) { mystrcpy(pom_OPT[OPT_3_SPOLOCNA_CAST], optarg, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case '4': if (optarg != NULL) { mystrcpy(pom_OPT[OPT_4_OFFLINE_EXPORT], optarg, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case '5': if (optarg != NULL) { mystrcpy(pom_OPT[OPT_5_ALTERNATIVES], optarg, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case 'a': // OPT_APPEND if (optarg != NULL) { mystrcpy(pom_OPT_APPEND, optarg, SMALL); } if (equals(pom_OPT_APPEND, STR_ANO) || equals(pom_OPT_APPEND, STR_VALUE_TRUE)) { _global_opt_append = ANO; } else if (equals(pom_OPT_APPEND, STR_NIE) || equals(pom_OPT_APPEND, STR_VALUE_FALSE)) { _global_opt_append = NIE; } Log("opt_append == `%s' (%d)\n", pom_OPT_APPEND, _global_opt_append); Log("option %c with value `%s'\n", c, optarg); break; // parameter `u' (dátUm) spôsob zapisovania dátumu pre súbory v batch móde case 'u': // OPT_APPEND if (optarg != NULL) { mystrcpy(pom_OPT_DATE_FORMAT, optarg, SMALL); } if (equals(pom_OPT_DATE_FORMAT, STR_FULL) || equals(pom_OPT_DATE_FORMAT, STR_VALUE_TRUE)) { _global_opt_export_date_format = EXPORT_DATE_FULL; } else if (equals(pom_OPT_DATE_FORMAT, STR_SIMPLE) || equals(pom_OPT_DATE_FORMAT, STR_VALUE_FALSE)) { _global_opt_export_date_format = EXPORT_DATE_SIMPLE; } Log("opt_append == `%s' (%d)\n", pom_OPT_DATE_FORMAT, _global_opt_export_date_format); Log("option %c with value `%s'\n", c, optarg); break; case 'q': // QUERY_TYPE if (optarg != NULL) { mystrcpy(pom_QUERY_TYPE, optarg, MAX_POM_QUERY_TYPE); } Log("option %c with value `%s'\n", c, optarg); break; case 'M': // typ exportu pre batch mód if (optarg != NULL) { mystrcpy(pom_EXPORT_MONTHLY, optarg, SMALL); // premenná pom_EXPORT_MONTHLY sa parsuje priamo v _main() } _global_opt_batch_monthly = ANO; Log("option %c with value `%s'\n", c, optarg); break; case 'I': // odkaz "^ hore" / index.htm (pre batch mód) if (optarg != NULL) { mystrcpy(_global_export_navig_hore, optarg, SMALL); } else { mystrcpy(_global_export_navig_hore, DEFAULT_MONTH_EXPORT, SMALL); } Log("option %c with value `%s'\n", c, optarg); break; case 'H': _global_hlavicka_Export = 1; _global_patka_Export = 1; Log("option '%c'\n", c); break; case '?': case 'h': printf("\n"); printf("lh - command-line verzia on-line breviara (http://breviar.sk)\n"); printf("\tProgram vytvara stranky (HTML vystup) pre Liturgiu hodin.\n"); printf("\tBuild: %s\n", BUILD_DATE); printf("\t" TEXT_COPYRIGHT " <" TEXT_EMAIL ">\n"); printf("\n"); printf("\npouzitie:\n"); printf("\tlh [prepinac [hodnota]...]\n"); printf("\nprepinace:\n"); printf("\tq query type (napr. %s, %s, %s, %s, %s, %s...)\n", STR_PRM_DNES, STR_PRM_DATUM, STR_PRM_DETAILY, STR_PRM_TABULKA, STR_PRM_SIMULACIA_QS, STR_PRM_BATCH_MODE); printf("\ts query string (tak ako je na webe)\n"); printf("\td den (%s|%s) (1--31, po--ne)\n", STR_DEN, STR_DEN_V_TYZDNI); // printf("\ts SVIATOK \n"); printf("\tm mesiac (%s) (1--12, jan--dec)\n", STR_MESIAC); printf("\tt tyzden zaltara (1--4) \n"); printf("\tr rok (napr. 2000)\n"); printf("\tp modlitba (%s): %s, %s, %s, %s, %s, %s, %s, %s, %s...) \n", STR_MODLITBA, STR_MODL_RANNE_CHVALY, STR_MODL_VESPERY, STR_MODL_POSV_CITANIE, STR_MODL_PREDPOLUDNIM, STR_MODL_NAPOLUDNIE, STR_MODL_POPOLUDNI, STR_MODL_DETAILY, STR_MODL_INVITATORIUM, STR_MODL_KOMPLETORIUM); printf("\t\t resp. rok do pre davkove spracovanie\n"); printf("\tx dalsi svaty (%s): 1--%d resp. %d pre lubovolnu spomienku PM v sobotu\n", STR_DALSI_SVATY, MAX_POCET_SVATY, PORADIE_PM_SOBOTA); printf("\t0 specialne casti modlitby (verse, referencie)\n"); printf("\t1 prepinace pre zobrazovanie casti modlitby\n"); printf("\t2 prepinace pre html export\n"); printf("\t3 ktoru spolocnu cast brat, ak je ich viac (0, 1, 2, 3) \n"); printf("\t4 prepinace pre offline export\n"); printf("\tf rok from (resp. den do pre davkove spracovanie)\n"); printf("\tg rok to (resp. mesiac do pre davkove spracovanie)\n"); printf("\tl ci zobrazovat linky \n"); printf("\te export filename (default: export.htm)\n"); printf("\ti include folder\n"); printf("\tb batch mode (davkove spracovanie), nazov vystupneho davkoveho suboru\n"); printf("\tn nazov binarky (tohto suboru, napr. breviar.exe) pre batch mode\n"); printf("\to nazov (HTML) suboru pre vysledny zoznam modlitieb, batch mode\n"); printf("\ta (append) pri exportovani do suboru (-e) neprepisuje subor\n"); printf("\tj jazyk (jazykova mutacia), zatial: sk, cz\n"); printf("\tk kalendar (napr. reholny)\n"); printf("\tc theme (light = 0, dark = 1)\n"); printf("\tD light theme HEX code for background color override without # character\n"); printf("\tN light theme HEX code for background color override without # character\n"); printf("\tu batch mode dates in file name format (0 = simple, 1 = full)\n"); printf("\tM pre batch mode: jednotlive mesiace su v samostatnych suboroch\n"); printf("\t M0 = v mesiaci dni pod sebou, modlitby pre kazdy den v riadku\n"); printf("\t M1 = v mesiaci podla modlitieb su dni len ako cislice\n"); printf("\t M2 = generovanie funkcnej offline verzie (kopie) webu\n"); printf("\t M3 = ako M2, ale prisposobene pre mobilne zariadenia\n"); printf("\tI pre batch mode: subor, kam ma odkazovat link '^ hore'\n"); printf("\n\t pri prepinacoch ano = 1, nie = 0\n"); printf("\npriklady pouzitia:\n\n"); printf("breviar.exe -i..\\..\\..\\ -qpsqs -s\"qt=pdt&d=12&m=7&r=2003\"\n"); printf("breviar -qpdt -d30 -m4 -r2002 -pmrch -ic:\\temp\\breviar\\ -emoja.htm\n"); printf("breviar.exe -i..\\..\\..\\ -d28 -m6 -r2003 -qpdt -pmrch -x1\n"); printf("breviar -qpbm -d1 -m1 -r2000 -f2 -g2 -p2000 -ba.bat -nbrev.exe -ic:\\breviar\\\n"); printf("breviar.exe -qpbm -d1 -m8 -r2009 -f30 -g9 -p2009 -11 -brob.bat -jsk -nbreviar.exe -i..\\..\\www.breviar.sk\\include\\ -ufull -M3\n"); printf("\nviac informacii:\n"); printf("\thttp://breviar.sk - hlavna stranka\n"); printf("\thttp://breviar.sk/info/parametre.htm - o parametroch\n"); printf("\thttp://breviar.sk/info/batchmode.htm - o davkovom mode (batch mode)\n"); Log("option %c (without value)\n", c, optarg); break; default: // znamena option uvedenu v optionstringu, pre ktoru nebolo definovane case vyssie Log("?? getopt returned character `%c' ??\n", c); break; } // switch }// while if (optind < argc) { Log("non-option ARGV-elements: "); while (optind < argc) Log("%s ", argv[optind++]); Log("\n"); } // dokoncili sme parsovanie options (switchov apod), a teraz rozoberieme, co sme zistili // najprv nakopirujeme chybovu hlasku do bad_param_str if (equals(pom_QUERY_TYPE, STR_EMPTY)) { mystrcpy(bad_param_str, "<" HTML_SPAN_BOLD ">nijaký parameter PRM_..." HTML_SPAN_END, MAX_STR); } else { mystrcpy(bad_param_str, pom_QUERY_TYPE, MAX_STR); strcat(bad_param_str, " (switch <" HTML_SPAN_BOLD ">-q" HTML_SPAN_END ")"); } // a teraz vydolujeme typ dotazu // vynecham to v pripade, ze pom_QUERY_TYPE == STR_PRM_SIMULACIA_QS, t.j. query_type == PRM_SIMULACIA_QS if (query_type != PRM_SIMULACIA_QS) { Log("query_type != PRM_SIMULACIA_QS, so running getQueryTypeFrom_QS(%s)...\n", pom_QUERY_TYPE); query_type = getQueryTypeFrom_QS(pom_QUERY_TYPE); } // ak je query type OK, tak vymažeme chybový oznam if (query_type != PRM_UNKNOWN) { Log("query_type OK, čistím bad_param_str...\n"); mystrcpy(bad_param_str, STR_EMPTY, MAX_STR); } // pri exportovaní do adresárov po mesiacoch je potrebné upraviť name_binary_executable resp. include_dir, ale len v batch móde (teda nie pre jednotlivú generovanú modlitbu) -- preto presunuté až sem, za zistenie query_type if (query_type == PRM_BATCH_MODE && _global_opt_batch_monthly == ANO) { mystrcpy(pom_name_binary_executable, STR_EMPTY, MAX_STR); mystrcpy(pom_include_dir, STR_EMPTY, MAX_STR); // 2012-12-12: nie pre append (netreba vytvárať adresáre [mkdir] ani po nich chodiť [cd]) if (_global_opt_append != YES) { // musíme upraviť názov executable, lebo budeme meniť adresár v _main_batch_mode() mystrcpy(pom_name_binary_executable, ".." STR_PATH_SEPARATOR, MAX_STR); // musíme upraviť názov adresára s include, lebo budeme meniť adresár v _main_batch_mode() mystrcpy(pom_include_dir, ".." STR_PATH_SEPARATOR, MAX_STR); } strcat(pom_name_binary_executable, name_binary_executable); mystrcpy(name_binary_executable, pom_name_binary_executable, MAX_STR); strcat(pom_include_dir, include_dir); mystrcpy(include_dir, pom_include_dir, MAX_STR); }// len pre batch mód, mesačne }// else vetva podmienky if (argc == 1) Log("deallocating memory for option_string...\n"); free(option_string); Log("-- getArgv(): end, query_type == %d, query_string == %s, bad_param_str == %s\n", query_type, query_string, bad_param_str); return SUCCESS; }// getArgv(); // popis: naplni premenne pom_... hodnotami z environmentu, t.j. premennymi WWW_ ktore vrati uncgi.c // vracia: on success, returns SUCCESS // on error, returns FAILURE // 2005-03-30: Upravene. // Ak hodnoty su v pom_ premennych, nepotrebujem citat z WWW_ premennych. // V opacnom pripade to na linux::apache vypisovalo pre tlacidla (Dalsi den >>) ze nie su vytvorene premenne WWW_d a podobne, hoci boli v query stringu. // Mozno je to cele nejak dosachovane tym, ze som preniesol uncgi sem do kodu. Ale hlavne ze to chodi :)) short int getForm(void) { char *ptr; short int i = 0; char local_str[SMALL] = STR_EMPTY; short int ret; // návratová hodnota char errmsg[SMALL] = STR_EMPTY; Log("getForm(): begin\n"); ptr = getenv(ADD_WWW_PREFIX_(STR_JAZYK)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_JAZYK, ptr, SMALL); } } ptr = getenv(ADD_WWW_PREFIX_(STR_KALENDAR)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_KALENDAR, ptr, SMALL); } } ptr = getenv(ADD_WWW_PREFIX_(STR_THEME)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_THEME, ptr, SMALL); } } ptr = getenv(ADD_WWW_PREFIX_(STR_THEME_LIGHT_BACKGROUND_COLOR)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_THEME_LIGHT_BACKGROUND_COLOR, ptr, SMALL); } } ptr = getenv(ADD_WWW_PREFIX_(STR_THEME_DARK_BACKGROUND_COLOR)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_THEME_DARK_BACKGROUND_COLOR, ptr, SMALL); } } ptr = getenv(ADD_WWW_PREFIX_(STR_SIDEMENU_LOCATION)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_SIDEMENU_LOCATION, ptr, SMALL); } } ptr = getenv(ADD_WWW_PREFIX_(STR_FONT_NAME)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_FONT, ptr, SMALL); } } ptr = getenv(ADD_WWW_PREFIX_(STR_FONT_SIZE)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_FONT_SIZE, ptr, VERY_SMALL); } } ptr = getenv(ADD_WWW_PREFIX_(STR_FONT_SIZE_PT)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_FONT_SIZE_PT, ptr, VERY_SMALL); } } ptr = getenv(ADD_WWW_PREFIX_(STR_STYLE_MARGIN)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_STYLE_MARGIN, ptr, VERY_SMALL); } } ptr = getenv(ADD_WWW_PREFIX_(STR_LINE_HEIGHT_PERC)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_LINE_HEIGHT_PERC, ptr, VERY_SMALL); } } // options for (i = 0; i < POCET_GLOBAL_OPT; i++) { // premenná WWW_OPT_i mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, i, USE_STR_OPT); ptr = getenv(local_str); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_OPT[i], ptr, SMALL); } } }// for i // force options for (i = 0; i < POCET_GLOBAL_OPT; i++) { // premenná WWW_FORCE_OPT_i mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, i, USE_STR_FORCE_OPT); ptr = getenv(local_str); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_FORCE_OPT[i], ptr, SMALL); } } }// for i // force option 0 premenné -- jednotlivé bit-komponenty Log("force option %d, jednotlivé bit-komponenty...(getForm)\n", OPT_0_SPECIALNE); for (i = 0; i < POCET_OPT_0_SPECIALNE; i++) { // premenná WWW_FORCE_BIT_OPT_0_... mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, OPT_0_SPECIALNE, i); ptr = getenv(local_str); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_FORCE_OPT_0_SPECIALNE[i], ptr, SMALL); } } }// for i // force option 1 premenné -- jednotlivé bit-komponenty Log("force option %d, jednotlivé bit-komponenty...(getForm)\n", OPT_1_CASTI_MODLITBY); for (i = 0; i < POCET_OPT_1_CASTI_MODLITBY; i++) { // premenná WWW_FORCE_BIT_OPT_1_... mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, OPT_1_CASTI_MODLITBY, i); ptr = getenv(local_str); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_FORCE_OPT_1_CASTI_MODLITBY[i], ptr, SMALL); } } }// for i // force option 2, jednotlivé bit-komponenty Log("force option %d, jednotlivé bit-komponenty...(getForm)\n", OPT_2_HTML_EXPORT); for (i = 0; i < POCET_OPT_2_HTML_EXPORT; i++) { // premenná WWW_FORCE_BIT_OPT_2_... mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, OPT_2_HTML_EXPORT, i); ptr = getenv(local_str); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_FORCE_OPT_2_HTML_EXPORT[i], ptr, SMALL); } } }// for i // force option 5, jednotlivé bit-komponenty Log("force option %d, jednotlivé bit-komponenty...(getForm)\n", OPT_5_ALTERNATIVES); for (i = 0; i < POCET_OPT_5_ALTERNATIVES; i++) { // premenná WWW_FORCE_BIT_OPT_5_... mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, OPT_5_ALTERNATIVES, i); ptr = getenv(local_str); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_FORCE_OPT_5_ALTERNATIVES[i], ptr, SMALL); } } }// for i // force option 6, jednotlivé decimal-place-komponenty Log("force option %d, jednotlivé decimal-place-komponenty...(getForm)\n", OPT_6_ALTERNATIVES_MULTI); for (i = 0; i < POCET_OPT_6_ALTERNATIVES_MULTI; i++) { // premenná WWW_FORCE_PLACE_OPT_6_... mystrcpy(local_str, WWW_PREFIX, SMALL); strcat_str_opt_bit_order(local_str, OPT_6_ALTERNATIVES_MULTI, i); ptr = getenv(local_str); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_FORCE_OPT_6_ALTERNATIVES_MULTI[i], ptr, SMALL); } } }// for i // according to query_type, get params from forms using getenv() if ((query_type == PRM_DATUM) || (query_type == PRM_DETAILY) || (query_type == PRM_TXT) || (query_type == PRM_XML)) { Log("(query_type == PRM_DATUM) || (query_type == PRM_DETAILY) || (query_type == PRM_TXT) || (query_type == PRM_XML)...\n"); // datum: treba nacitat den, mesiac a rok // premenna WWW_DEN // ak je naplnena pom_DEN, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_DEN, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_DEN)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_DEN)); if (query_type != PRM_XML) { sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_DEN)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } else { mystrcpy(pom_DEN, STR_EMPTY, SMALL); } } else { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_DEN, ptr, SMALL); } } } else { Log("Premenná pom_DEN je už naplnená (%s). Nečítam z %s...\n", pom_DEN, ADD_WWW_PREFIX_(STR_DEN)); } // premenna WWW_MESIAC // ak je naplnena pom_MESIAC, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_MESIAC, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_MESIAC)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_MESIAC)); if (query_type != PRM_XML) { sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_MESIAC)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } else { mystrcpy(pom_MESIAC, STR_EMPTY, SMALL); } } else { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_MESIAC, ptr, SMALL); } } } else { Log("Premenná pom_MESIAC je už naplnená (%s). Nečítam z %s...\n", pom_MESIAC, ADD_WWW_PREFIX_(STR_MESIAC)); } // premenna WWW_ROK // ak je naplnena pom_ROK, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_ROK, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_ROK)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_ROK)); if (query_type != PRM_XML) { sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_ROK)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } else { mystrcpy(pom_ROK, STR_EMPTY, SMALL); } } else { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_ROK, ptr, SMALL); } } } else { Log("Premenná pom_ROK je už naplnená (%s). Nečítam z %s...\n", pom_ROK, ADD_WWW_PREFIX_(STR_ROK)); } // nasledujuce sa zistuju kvoli 'Detaily...', formular vytvorila funckia showDetails(); v normalnom formulari (vytvori ho _main_dnes();) nie su // premenna WWW_MODLITBA ptr = getenv(ADD_WWW_PREFIX_(STR_MODLITBA)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_MODLITBA, ptr, SMALL); } } // premenna WWW_MESIAC_ROKA -- len testovo, aby sme odlisili prvy od druheho formulara ptr = getenv(ADD_WWW_PREFIX_(STR_MESIAC_ROKA)); if (ptr != NULL) { // povodne if (query_type == PRM_DATUM) // nie je NULL, ide teda o prvy vstupny formular mystrcpy(pom_MODLITBA, STR_EMPTY, SMALL); } // premenna WWW_DALSI_SVATY ptr = getenv(ADD_WWW_PREFIX_(STR_DALSI_SVATY)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_DALSI_SVATY, ptr, SMALL); } } }// (query_type == PRM_DATUM) || (query_type == PRM_DETAILY) || (query_type == PRM_TXT) || (query_type == PRM_XML) else if (query_type == PRM_CEZ_ROK) { // cez rok: treba nacitat den v tyzdni a cislo tyzdna // premenna WWW_DEN_V_TYZDNI // ak je naplnena pom_DEN_V_TYZDNI, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_DEN_V_TYZDNI, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_DEN_V_TYZDNI)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_DEN_V_TYZDNI)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_DEN_V_TYZDNI)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_DEN_V_TYZDNI, ptr, SMALL); } } else { Log("Premenná pom_DEN_V_TYZDNI je už naplnená (%s). Nečítam z %s...\n", pom_DEN_V_TYZDNI, ADD_WWW_PREFIX_(STR_DEN_V_TYZDNI)); } // premenna WWW_TYZDEN // ak je naplnena pom_TYZDEN, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_TYZDEN, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_TYZDEN)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_TYZDEN)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_TYZDEN)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_TYZDEN, ptr, SMALL); } } else { Log("Premenná pom_TYZDEN je už naplnená (%s). Nečítam z %s...\n", pom_TYZDEN, ADD_WWW_PREFIX_(STR_TYZDEN)); } // premenna WWW_MODLITBA // ak je naplnena pom_MODLITBA, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_MODLITBA, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_MODLITBA)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_MODLITBA)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_MODLITBA)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_MODLITBA, ptr, SMALL); } } else { Log("Premenná pom_MODLITBA je už naplnená (%s). Nečítam z %s...\n", pom_MODLITBA, ADD_WWW_PREFIX_(STR_MODLITBA)); } }// query_type == PRM_CEZ_ROK else if (query_type == PRM_LIT_OBD) { // 2011-01-25: doplnené | liturgické obdobie: treba načítať liturgické obdobie, deň v týždni a číslo týždňa v danom liturgickom období // premenna WWW_DEN_V_TYZDNI // ak je naplnena pom_DEN_V_TYZDNI, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_DEN_V_TYZDNI, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_DEN_V_TYZDNI)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_DEN_V_TYZDNI)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_DEN_V_TYZDNI)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_DEN_V_TYZDNI, ptr, SMALL); } } else { Log("Premenná pom_DEN_V_TYZDNI je už naplnená (%s). Nečítam z %s...\n", pom_DEN_V_TYZDNI, ADD_WWW_PREFIX_(STR_DEN_V_TYZDNI)); } // premenna WWW_TYZDEN // ak je naplnena pom_TYZDEN, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_TYZDEN, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_TYZDEN)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_TYZDEN)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_TYZDEN)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_TYZDEN, ptr, SMALL); } } else { Log("Premenná pom_TYZDEN je už naplnená (%s). Nečítam z %s...\n", pom_TYZDEN, ADD_WWW_PREFIX_(STR_TYZDEN)); } // premenna WWW_MODLITBA // ak je naplnena pom_MODLITBA, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_MODLITBA, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_MODLITBA)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_MODLITBA)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_MODLITBA)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_MODLITBA, ptr, SMALL); } } else { Log("Premenná pom_MODLITBA je už naplnená (%s). Nečítam z %s...\n", pom_MODLITBA, ADD_WWW_PREFIX_(STR_MODLITBA)); } // premenna WWW_LIT_OBD // ak je naplnena pom_LIT_OBD, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_LIT_OBD, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_LIT_OBD)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_LIT_OBD)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_LIT_OBD)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_LIT_OBD, ptr, SMALL); } } else { Log("Premenná pom_LIT_OBD je už naplnená (%s). Nečítam z %s...\n", pom_LIT_OBD, ADD_WWW_PREFIX_(STR_LIT_OBD)); } // premenna WWW_LIT_ROK // ak je naplnena pom_LIT_ROK, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_LIT_ROK, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_LIT_ROK)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_LIT_ROK)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_LIT_ROK)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_LIT_ROK, ptr, SMALL); } } else { Log("Premenná pom_LIT_ROK je už naplnená (%s). Nečítam z %s...\n", pom_LIT_ROK, ADD_WWW_PREFIX_(STR_LIT_ROK)); } }// query_type == PRM_LIT_OBD else if (query_type == PRM_SVIATOK) { // cez rok: treba nacitat nazov sviatku // premenna WWW_NAZOV_SVIATOK // ak je naplnena pom_SVIATOK, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_SVIATOK, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_NAZOV_SVIATOK)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_NAZOV_SVIATOK)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_NAZOV_SVIATOK)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_SVIATOK, ptr, SMALL); } } else { Log("Premenná pom_SVIATOK je už naplnená (%s). Nečítam z %s...\n", pom_SVIATOK, ADD_WWW_PREFIX_(STR_NAZOV_SVIATOK)); } }// query_type == PRM_SVIATOK else if (query_type == PRM_STATIC_TEXT) { Log("getForm(): query_type == PRM_STATIC_TEXT...\n"); // premenna WWW_STATIC_TEXT // ak je naplnena pom_STATIC_TEXT, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_STATIC_TEXT, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_STATIC_TEXT)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_STATIC_TEXT)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_STATIC_TEXT)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_STATIC_TEXT, ptr, SMALL); } } else { Log("Premenná pom_STATIC_TEXT je už naplnená (%s). Nečítam z %s...\n", pom_STATIC_TEXT, ADD_WWW_PREFIX_(STR_STATIC_TEXT)); } // premenna WWW_MODL_ORDINARIUM // ak je naplnena MODL_ORDINARIUM, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_MODL_ORDINARIUM, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_MODL_ORDINARIUM)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_MODL_ORDINARIUM, ptr, SMALL); } } Log("getForm(): pom_MODL_ORDINARIUM == `%s'...\n", pom_MODL_ORDINARIUM); // if still empty, try to use STR_MODLITBA instead of STR_MODL_ORDINARIUM if (equals(pom_MODL_ORDINARIUM, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_MODLITBA)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_MODL_ORDINARIUM, ptr, SMALL); } } } Log("getForm(): pom_MODL_ORDINARIUM == `%s'...\n", pom_MODL_ORDINARIUM); } else { Log("Premenná pom_MODL_ORDINARIUM je už naplnená (%s). Nečítam z %s...\n", pom_MODL_ORDINARIUM, ADD_WWW_PREFIX_(STR_MODL_ORDINARIUM)); } }// query_type == PRM_STATIC_TEXT else if (query_type == PRM_ANALYZA_ROKU) { // cez rok: treba nacitat nazov sviatku // premenna WWW_ANALYZA_ROKU // ak je naplnena pom_ANALYZA_ROKU, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_ANALYZA_ROKU, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_ANALYZA_ROKU)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_ANALYZA_ROKU)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_ANALYZA_ROKU)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_ANALYZA_ROKU, ptr, SMALL); } } else { Log("Premenná pom_ANALYZA_ROKU je už naplnená (%s). Nečítam z %s...\n", pom_ANALYZA_ROKU, ADD_WWW_PREFIX_(STR_ANALYZA_ROKU)); } }// query_type == PRM_ANALYZA_ROKU else if (query_type == PRM_MESIAC_ROKA) { // 2005-03-21: novy typ exportu liturgickeho kalendara: // ak je hodnota premennej option "1" = 0 (default), tak klasicky pre web, inak rozlicny sposob vystupu ("1" = 1 pre www.kbs.sk liturgicky kalendar) // 2005-03-22: novy typ exportu liturgickeho kalendara: ak je hodnota premennej option "2" = 1 (default), tak datum ako ISO-8601, inak len datum // treba nacitat mesiac a rok // premenna WWW_MESIAC_ROKA // ak je naplnena pom_MESIAC (vynimocne nie pom_MESIAC_ROKA), znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_MESIAC, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_MESIAC_ROKA)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_MESIAC_ROKA)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_MESIAC_ROKA)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_MESIAC, ptr, SMALL); } } else { Log("Premenná pom_MESIAC je už naplnená (%s). Nečítam z %s...\n", pom_MESIAC, ADD_WWW_PREFIX_(STR_MESIAC_ROKA)); } // premenna WWW_ROK // ak je naplnena pom_ROK (vynimocne nie pom_ROK_ROKA), znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_ROK, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_ROK_ROKA)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_ROK_ROKA)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_ROK_ROKA)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_ROK, ptr, SMALL); } } else { Log("Premenná pom_ROK je už naplnená (%s). Nečítam z %s...\n", pom_ROK, ADD_WWW_PREFIX_(STR_ROK_ROKA)); } }// query_type == PRM_MESIAC_ROKA else if (query_type == PRM_TABULKA) { // PRM_TABULKA: treba nacitat from a to; ak chyba linka, tak automaticky == NIE // premenna WWW_ROK_FROM // ak je naplnena pom_ROK_FROM, znamena to, ze uz bola naplnena, preto nemusi existovat if (equals(pom_ROK_FROM, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_ROK_FROM)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_ROK_FROM)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_ROK_FROM)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_ROK_FROM, ptr, SMALL); } } else { Log("Premenná pom_ROK_FROM je už naplnená (%s). Nečítam z %s...\n", pom_ROK_FROM, ADD_WWW_PREFIX_(STR_ROK_FROM)); } // premenna WWW_ROK_TO // ak je naplnena pom_ROK_TO, znamena to, ze uz bola naplnena, preto nemusi existovat // 2005-05-24 Opravena copy-paste chyba: bolo mylne if (equals(pom_ROK_FROM, STR_EMPTY)) if (equals(pom_ROK_TO, STR_EMPTY)) { ptr = getenv(ADD_WWW_PREFIX_(STR_ROK_TO)); if (ptr == NULL) { DEBUG_GET_FORM("%s neexistuje.\n", ADD_WWW_PREFIX_(STR_ROK_TO)); sprintf(errmsg, "Nebola vytvorená systémová premenná %s.\n", ADD_WWW_PREFIX_(STR_ROK_TO)); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_ROK_TO, ptr, SMALL); } } else { Log("Premenná pom_ROK_TO je už naplnená (%s). Nečítam z %s...\n", pom_ROK_TO, ADD_WWW_PREFIX_(STR_ROK_TO)); } // premenna WWW_TABULKA_LINKY ptr = getenv(ADD_WWW_PREFIX_(STR_TABULKA_LINKY)); if (ptr != NULL) { if (strcmp(ptr, STR_EMPTY) != 0) { mystrcpy(pom_LINKY, ptr, SMALL); } } }// query_type == PRM_TABULKA else if (query_type == PRM_DNES) { // 2005-03-28: Pridane, aby nevracalo FAILURE Log("getForm(): no need to read anything :)\n"); } else { Log("getForm(): end, returning FAILURE (neznamy typ dotazu qt)\n"); sprintf(errmsg, "Neznámy typ dotazu (qt).\n"); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_getForm; } ret = SUCCESS; END_getForm: Log("getForm(): end, returning %d.\n", ret); return ret; }// getForm(); // popis: naplni premenne pom_... hodnotami z environmentu, t.j. premennymi zo stringu QUERY_STRING (systemova premenna) // napriklad retazec "QUERY_TYPE=PRM_DATUM&DEN=7&MESIAC=5&ROK=1976" // vracia: on success, returns SUCCESS // on error, returns FAILURE short int parseQueryString(void) { // totiz spustenie skriptu // /cgi-bin/script_name?QUERY_TYPE=PRM_DATUM&DEN=7&MESIAC=5&ROK=1976 // funguje tak, ze vytvori systemovu premennu QUERY_STRING takze vlastne treba simulovat uncgi (parsovanie QUERY_STRING systemovej premennej) // (keby sme to este prehnali cez uncgi, teda spustili /cgi-bin/uncgi.cgi/script_name?QUERY_TYPE=PRM_DATUM&DEN=7&MESIAC=5&ROK=1976 // tak to funguje ako POST hodnoty z formulara - urobi systemove premenne WWW_QUERY_TYPE=PRM_DATUM, WWW_DATUM, WWW_MESIAC, WWW_ROK) short int i, pocet, ok; char local_str[SMALL] = STR_EMPTY; short int j; // kvôli prilep_request_options short int ret = FAILURE; // návratová hodnota char errmsg[SMALL] = STR_EMPTY; Log("parseQueryString() -- begin\n"); if (query_string != NULL) { Log("query_string == %s, lenght == %d\n", query_string, strlen(query_string)); } else { Log("query_string is NULL, something is wrong...\n"); return ret; } #ifndef LOG_PARAMS Log("parseQueryString(): LOG_PARAMS is undefined, no LogParams() printed...\n"); #endif // get parameters i = 0; while ((strlen(query_string) > 0) && (i < MAX_VARIABLES)) { mystrcpy(param[i].name, STR_EMPTY, MAX_NAME_CGI_UTILS); mystrcpy(param[i].val, STR_EMPTY, MAX_VAL_CGI_UTILS); splitword(param[i].val, query_string, '&'); unescape_url(param[i].val); splitword(param[i].name, param[i].val, '='); LogParams("--- param[%d].name == %s, .val == %s\n", i, param[i].name, param[i].val); i++; } pocet = i; // od 0 po i - 1 LogParams("pocet == %d\n", pocet); // 2006-08-01: doplnená podmienka, aby nepretieklo napĺňanie premenných, ak je ich viac if ((strlen(query_string) > 0) && (pocet >= MAX_VARIABLES)) { ALERT; Export("Program nedokáže obslúžiť viac parametrov (maximum: %d). Ostatné budú ignorované.\n", MAX_VARIABLES); } // Pre POST query sa tam jazyk priliepa aj na začiatok (Ruby), aj sa číta z form-ulára (t. j. pri výbere z qt=pdnes), // preto čítam "odzadu", "zozadu" (backwards) // ak by sa nešlo smerom "dolu" (t. j. k prvému parametru od konca), nefungovalo by "override" z tabuľky "Voľby vybraných detailov", ak už v query stringu nejaká hodnota je // pôvodná poznámka pre while cyklus resp. inicializáciu i: param[0] by mal síce obsahovať typ akcie, ale radšej kontrolujeme aj 0 i = pocet; LogParams("pokúšam sa zistiť jazyk (od posledného parametra k prvému, t. j. odzadu)...\n"); while ((equalsi(pom_JAZYK, STR_EMPTY)) && (i > 0)) { --i; LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_JAZYK)) { // ide o parameter STR_JAZYK mystrcpy(pom_JAZYK, param[i].val, SMALL); LogParams("jazyk zistený (%s).\n", pom_JAZYK); } } // 2010-10-11: Pre POST query sa tam kalendár priliepa aj na začiatok, aj sa číta z form-ulára (t. j. pri výbere z qt=pdnes), // preto čítam "odzadu", "zozadu" (backwards) // ak by sa nešlo smerom "dolu" (t. j. k prvému parametru od konca), nefungovalo by "override" z tabuľky "Voľby vybraných detailov", ak už v query stringu nejaká hodnota je // 2011-04-07: keďže počet parametrov je "pocet", indexované sú 0 až pocet - 1, a preto opravené: najprv znížime --i; i = pocet; LogParams("pokúšam sa zistiť kalendár (od posledného parametra k prvému, t. j. odzadu)...\n"); while ((equalsi(pom_KALENDAR, STR_EMPTY)) && (i > 0)) { --i; LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_KALENDAR)) { // ide o parameter STR_KALENDAR mystrcpy(pom_KALENDAR, param[i].val, SMALL); LogParams("kalendár zistený (%s).\n", pom_KALENDAR); } } i = 0; // param[0] by mal síce obsahovať typ akcie, ale radšej kontrolujeme od 0 LogParams("pokúšam sa zistiť tému...\n"); while ((equalsi(pom_THEME, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_THEME)) { // ide o parameter STR_THEME mystrcpy(pom_THEME, param[i].val, SMALL); LogParams("téma zistená (%s).\n", pom_THEME); } i++; } if ((i >= pocet) && (equalsi(pom_THEME, STR_EMPTY))) { sprintf(pom_THEME, "%d", THEME_UNDEF); LogParams("téma nastavená (%s) (i >= pocet).\n", pom_THEME); } i = 0; // param[0] by mal síce obsahovať typ akcie, ale radšej kontrolujeme od 0 LogParams("pokúšam sa zistiť BG color pre light tému...\n"); while ((equalsi(pom_THEME_LIGHT_BACKGROUND_COLOR, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_THEME_LIGHT_BACKGROUND_COLOR)) { // ide o parameter STR_THEME_LIGHT_BACKGROUND_COLOR mystrcpy(pom_THEME_LIGHT_BACKGROUND_COLOR, param[i].val, SMALL); LogParams("BG color pre light tému zistená (%s).\n", pom_THEME_LIGHT_BACKGROUND_COLOR); } i++; } if ((i >= pocet) && (equalsi(pom_THEME_LIGHT_BACKGROUND_COLOR, STR_EMPTY))) { sprintf(pom_THEME_LIGHT_BACKGROUND_COLOR, "%s", THEME_BACKGROUND_COLOR_UNDEF); LogParams("BG color pre light tému nastavená (%s) (i >= pocet).\n", pom_THEME_LIGHT_BACKGROUND_COLOR); } i = 0; // param[0] by mal síce obsahovať typ akcie, ale radšej kontrolujeme od 0 LogParams("pokúšam sa zistiť BG color pre dark tému...\n"); while ((equalsi(pom_THEME_DARK_BACKGROUND_COLOR, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_THEME_DARK_BACKGROUND_COLOR)) { // ide o parameter STR_THEME_DARK_BACKGROUND_COLOR mystrcpy(pom_THEME_DARK_BACKGROUND_COLOR, param[i].val, SMALL); LogParams("BG color pre dark tému zistená (%s).\n", pom_THEME_DARK_BACKGROUND_COLOR); } i++; } if ((i >= pocet) && (equalsi(pom_THEME_DARK_BACKGROUND_COLOR, STR_EMPTY))) { sprintf(pom_THEME_DARK_BACKGROUND_COLOR, "%s", THEME_BACKGROUND_COLOR_UNDEF); LogParams("BG color pre dark tému nastavená (%s) (i >= pocet).\n", pom_THEME_DARK_BACKGROUND_COLOR); } i = pocet; LogParams("pokúšam sa zistiť sidemenu location (od posledného parametra k prvému, t. j. odzadu)...\n"); while ((equalsi(pom_SIDEMENU_LOCATION, STR_EMPTY)) && (i > 0)) { --i; LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_SIDEMENU_LOCATION)) { // ide o parameter STR_SIDEMENU_LOCATION mystrcpy(pom_SIDEMENU_LOCATION, param[i].val, SMALL); LogParams("sidemenu location zistená (%s).\n", pom_SIDEMENU_LOCATION); } } // Pre POST query sa tam font priliepa aj na začiatok (rovnako ako kalendár), aj sa číta z form-ulára (t. j. pri výbere z qt=pdnes), // preto čítam "odzadu", "zozadu" (backwards) (rovnako ako kalendár), ak by sa nešlo smerom "dolu" (t. j. k prvému parametru od konca), // nefungovalo by "override" z tabuľky "Voľby vybraných detailov", ak už v query stringu nejaká hodnota je i = pocet; LogParams("pokúšam sa zistiť font (od posledného parametra k prvému, t. j. odzadu)...\n"); while ((equalsi(pom_FONT, STR_EMPTY)) && (i > 0)) { --i; LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_FONT_NAME)) { // ide o parameter STR_FONT_NAME mystrcpy(pom_FONT, param[i].val, SMALL); LogParams("font zistený (%s).\n", pom_FONT); } } // Pre POST query sa tam font priliepa aj na začiatok (rovnako ako kalendár), aj sa číta z form-ulára (t. j. pri výbere z qt=pdnes), // preto čítam "odzadu", "zozadu" (backwards) (rovnako ako kalendár), ak by sa nešlo smerom "dolu" (t. j. k prvému parametru od konca), // nefungovalo by "override" z tabuľky "Voľby vybraných detailov", ak už v query stringu nejaká hodnota je i = pocet; LogParams("pokúšam sa zistiť font size (od posledného parametra k prvému, t. j. odzadu)...\n"); while ((equalsi(pom_FONT_SIZE, STR_EMPTY)) && (i > 0)) { --i; LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_FONT_SIZE)) { // ide o parameter STR_FONT_SIZE mystrcpy(pom_FONT_SIZE, param[i].val, VERY_SMALL); LogParams("font size zistená (%s).\n", pom_FONT_SIZE); } } i = pocet; LogParams("pokúšam sa zistiť font size pt (od posledného parametra k prvému, t. j. odzadu)...\n"); while ((equalsi(pom_FONT_SIZE_PT, STR_EMPTY)) && (i > 0)) { --i; LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_FONT_SIZE_PT)) { // ide o parameter STR_FONT_SIZE_PT mystrcpy(pom_FONT_SIZE_PT, param[i].val, VERY_SMALL); LogParams("font size pt zistená (%s).\n", pom_FONT_SIZE_PT); } } i = pocet; LogParams("pokúšam sa zistiť style margin (od posledného parametra k prvému, t. j. odzadu)...\n"); while ((equalsi(pom_STYLE_MARGIN, STR_EMPTY)) && (i > 0)) { --i; LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_STYLE_MARGIN)) { // ide o parameter STR_STYLE_MARGIN mystrcpy(pom_STYLE_MARGIN, param[i].val, VERY_SMALL); LogParams("style margin zistený (%s).\n", pom_STYLE_MARGIN); } } i = pocet; LogParams("pokúšam sa zistiť line height (od posledného parametra k prvému, t. j. odzadu)...\n"); while ((equalsi(pom_LINE_HEIGHT_PERC, STR_EMPTY)) && (i > 0)) { --i; LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_LINE_HEIGHT_PERC)) { // ide o parameter STR_LINE_HEIGHT_PERC mystrcpy(pom_LINE_HEIGHT_PERC, param[i].val, VERY_SMALL); LogParams("line height zistená (%s).\n", pom_LINE_HEIGHT_PERC); } } ok = NIE; query_type = PRM_UNKNOWN; i = 0; // od param[0] LogParams("pokúšam sa zistiť query type...\n"); while ((ok != ANO) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_QUERY_TYPE)) { // zistíme typ akcie, lebo ide o dobrý parameter if (equals(param[i].val, STR_PRM_DATUM)) { // ide o parameter STR_PRM_DATUM query_type = PRM_DATUM; } else if (equals(param[i].val, STR_PRM_TXT)) { // ide o parameter STR_PRM_TXT; pridané 2011-02-02 query_type = PRM_TXT; } else if (equals(param[i].val, STR_PRM_XML)) { // ide o parameter STR_PRM_XML; pridané 2012-10-16 query_type = PRM_XML; } else if (equals(param[i].val, STR_PRM_STATIC_TEXT)) { // ide o parameter STR_PRM_STATIC_TEXT; pridané 2014-10-09 query_type = PRM_STATIC_TEXT; } else if (equals(param[i].val, STR_PRM_DETAILY)) { // ide o parameter STR_PRM_DETAILY | alternativa k PRM_DATUM query_type = PRM_DETAILY; } else if (equals(param[i].val, STR_PRM_CEZ_ROK)) { // ide o parameter STR_PRM_CEZ_ROK query_type = PRM_CEZ_ROK; } else if (equals(param[i].val, STR_PRM_LIT_OBD)) { // ide o parameter STR_PRM_LIT_OBD query_type = PRM_LIT_OBD; } else if (equals(param[i].val, STR_PRM_SVIATOK)) { // ide o parameter STR_PRM_SVIATOK query_type = PRM_SVIATOK; } else if (equals(param[i].val, STR_PRM_DNES)) { // ide o parameter STR_PRM_DNES query_type = PRM_DNES; } else if (equals(param[i].val, STR_PRM_ANALYZA_ROKU)) { // ide o parameter STR_PRM_ANALYZA_ROKU query_type = PRM_ANALYZA_ROKU; } else if (equals(param[i].val, STR_PRM_MESIAC_ROKA)) { // ide o parameter STR_PRM_MESIAC_ROKA query_type = PRM_MESIAC_ROKA; } else if (equals(param[i].val, STR_PRM_TABULKA)) { // ide o parameter STR_PRM_TABULKA query_type = PRM_TABULKA; } else { // názov parametra je OK, ale neurčuje žiadnu správnu akciu Export("Chybná hodnota parametra %s: %s\n", param[i].name, param[i].val); query_type = PRM_UNKNOWN; } LogParams("query type parameter prítomný (%s), hodnota zistená (%s).\n", param[i].name, param[i].val); }// if (equals(param[i].name, STR_QUERY_TYPE)) if (query_type != PRM_UNKNOWN) ok = ANO; i++; }// while for (j = 0; j < POCET_GLOBAL_OPT; j++) { LogParams("j == %d...\n", j); mystrcpy(local_str, STR_EMPTY, SMALL); strcat_str_opt_bit_order(local_str, j, USE_STR_OPT); // premenná OPT_j (nepovinná), j = 0 až POCET_GLOBAL_OPT - 1 i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s... parseQueryString()\n", local_str); while ((equalsi(pom_OPT[j], STR_EMPTY)) && (i < pocet)) { // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, local_str)) { // ide o parameter STR_OPT_j mystrcpy(pom_OPT[j], param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", local_str, pom_OPT[j]); } i++; } if (equalsi(pom_OPT[j], STR_EMPTY)) { LogParams("Nebola zadaná premenná %s (nevadí).\n", local_str); } }// for j // FORCE options for (j = 0; j < POCET_GLOBAL_OPT; j++) { LogParams("j == %d...\n", j); mystrcpy(local_str, STR_EMPTY, SMALL); strcat_str_opt_bit_order(local_str, j, USE_STR_FORCE_OPT); // premenná FORCE_OPT_j (nepovinná) i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s... parseQueryString(), force\n", local_str); while ((equalsi(pom_FORCE_OPT[j], STR_EMPTY)) && (i < pocet)) { // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, local_str)) { // ide o parameter STR_FORCE_OPT_j mystrcpy(pom_FORCE_OPT[j], param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", local_str, pom_FORCE_OPT[j]); } i++; } if (equalsi(pom_FORCE_OPT[j], STR_EMPTY)) { LogParams("Nebola zadaná premenná %s (nevadí).\n", local_str); } }// for j // force option 0 premenné -- jednotlivé bit-komponenty // Pre POST query sa tam hodnota priliepa pre jednotlivý check-box zo začiatku (rovnako ako kalendár), aj sa číta z form-ulára (t. j. pri výbere z qt=pdnes), // preto čítam "odzadu", "zozadu" (backwards) (rovnako ako kalendár), ak by sa nešlo smerom "dolu" (t. j. k prvému parametru od konca), // nefungovalo by "override" z tabuľky "Voľby vybraných detailov", ak už v query stringu nejaká hodnota je LogParams("force option %d, jednotlivé bit-komponenty...(parseQuery)\n", OPT_0_SPECIALNE); for (j = 0; j < POCET_OPT_0_SPECIALNE; j++) { LogParams("j == %d...\n", j); mystrcpy(local_str, STR_EMPTY, SMALL); strcat_str_opt_bit_order(local_str, OPT_0_SPECIALNE, j); // premenná WWW_FORCE_BIT_OPT_0_... (nepovinná), j = 0 až POCET_OPT_0_SPECIALNE i = pocet; // backwards; param[0] by mal síce obsahovať query type, ale radšej kontrolujeme až po 0 LogParams("attempt to get value of param %s... parseQueryString(), force, bit-komponenty 0 / pom_FORCE_OPT_0_SPECIALNE[%d] = %s\n", local_str, j, pom_FORCE_OPT_0_SPECIALNE[j]); while ((equalsi(pom_FORCE_OPT_0_SPECIALNE[j], STR_EMPTY)) && (i > 0)) { --i; // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, local_str)) { // ide o parameter STR_FORCE_OPT_j mystrcpy(pom_FORCE_OPT_0_SPECIALNE[j], param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", local_str, pom_FORCE_OPT_0_SPECIALNE[j]); } } if (equalsi(pom_FORCE_OPT_0_SPECIALNE[j], STR_EMPTY)) { LogParams("Nebola zadaná premenná %s (nevadí).\n", local_str); } }// for j // force option 1 premenné -- jednotlivé bit-komponenty // Pre POST query sa tam hodnota priliepa pre jednotlivý check-box zo začiatku (rovnako ako kalendár), aj sa číta z form-ulára (t. j. pri výbere z qt=pdnes), // preto čítam "odzadu", "zozadu" (backwards) (rovnako ako kalendár), ak by sa nešlo smerom "dolu" (t. j. k prvému parametru od konca), // nefungovalo by "override" z tabuľky "Voľby vybraných detailov", ak už v query stringu nejaká hodnota je LogParams("force option %d, jednotlivé bit-komponenty...(parseQuery)\n", OPT_1_CASTI_MODLITBY); for (j = 0; j < POCET_OPT_1_CASTI_MODLITBY; j++) { LogParams("j == %d...\n", j); mystrcpy(local_str, STR_EMPTY, SMALL); strcat_str_opt_bit_order(local_str, OPT_1_CASTI_MODLITBY, j); // premenná WWW_FORCE_BIT_OPT_1_... (nepovinná), j = 0 až POCET_OPT_1_CASTI_MODLITBY i = pocet; // backwards; param[0] by mal síce obsahovať query type, ale radšej kontrolujeme až po 0 LogParams("attempt to get value of param %s... parseQueryString(), force, bit-komponenty 1 / pom_FORCE_OPT_1_CASTI_MODLITBY[%d] == %s\n", local_str, j, pom_FORCE_OPT_1_CASTI_MODLITBY[j]); while ((equalsi(pom_FORCE_OPT_1_CASTI_MODLITBY[j], STR_EMPTY)) && (i > 0)) { --i; // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, local_str)) { // ide o parameter STR_FORCE_OPT_j mystrcpy(pom_FORCE_OPT_1_CASTI_MODLITBY[j], param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", local_str, pom_FORCE_OPT_1_CASTI_MODLITBY[j]); } } if (equalsi(pom_FORCE_OPT_1_CASTI_MODLITBY[j], STR_EMPTY)) { LogParams("Nebola zadaná premenná %s (nevadí).\n", local_str); } }// for j // force option 2 premenné -- jednotlivé bit-komponenty // Pre POST query sa tam hodnota priliepa pre jednotlivý check-box zo začiatku (rovnako ako kalendár), aj sa číta z form-ulára (t. j. pri výbere z qt=pdnes), // preto čítam "odzadu", "zozadu" (backwards) (rovnako ako kalendár), ak by sa nešlo smerom "dolu" (t. j. k prvému parametru od konca), // nefungovalo by "override" z tabuľky "Voľby vybraných detailov", ak už v query stringu nejaká hodnota je LogParams("force option %d, jednotlivé bit-komponenty...(parseQuery)\n", OPT_2_HTML_EXPORT); for (j = 0; j < POCET_OPT_2_HTML_EXPORT; j++) { LogParams("j == %d...\n", j); mystrcpy(local_str, STR_EMPTY, SMALL); strcat_str_opt_bit_order(local_str, OPT_2_HTML_EXPORT, j); // premenná WWW_OPT_2_... (nepovinná), j = 0 až POCET_OPT_2_HTML_EXPORT i = pocet; // backwards; param[0] by mal síce obsahovať query type, ale radšej kontrolujeme až po 0 LogParams("attempt to get value of param %s... parseQueryString(), force, bit-komponenty 2 / pom_FORCE_OPT_2_HTML_EXPORT[%d] = %s\n", local_str, j, pom_FORCE_OPT_2_HTML_EXPORT[j]); while ((equalsi(pom_FORCE_OPT_2_HTML_EXPORT[j], STR_EMPTY)) && (i > 0)) { --i; // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, local_str)) { // ide o parameter STR_FORCE_OPT_j mystrcpy(pom_FORCE_OPT_2_HTML_EXPORT[j], param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", local_str, pom_FORCE_OPT_2_HTML_EXPORT[j]); } } if (equalsi(pom_FORCE_OPT_2_HTML_EXPORT[j], STR_EMPTY)) { LogParams("Nebola zadaná premenná %s (nevadí).\n", local_str); } }// for j // force option 5 premenné -- jednotlivé bit-komponenty // Pre POST query sa tam hodnota priliepa pre jednotlivý check-box zo začiatku (rovnako ako kalendár), aj sa číta z form-ulára (t. j. pri výbere z qt=pdnes), // preto čítam "odzadu", "zozadu" (backwards) (rovnako ako kalendár), ak by sa nešlo smerom "dolu" (t. j. k prvému parametru od konca), // nefungovalo by "override" z tabuľky "Voľby vybraných detailov", ak už v query stringu nejaká hodnota je LogParams("force option %d, jednotlivé bit-komponenty...(parseQuery)\n", OPT_5_ALTERNATIVES); for (j = 0; j < POCET_OPT_5_ALTERNATIVES; j++) { LogParams("j == %d...\n", j); mystrcpy(local_str, STR_EMPTY, SMALL); strcat_str_opt_bit_order(local_str, OPT_5_ALTERNATIVES, j); // premenná WWW_FORCE_BIT_OPT_5_... (nepovinná), j = 0 až POCET_OPT_5_ALTERNATIVES i = pocet; // backwards; param[0] by mal síce obsahovať query type, ale radšej kontrolujeme až po 0 LogParams("attempt to get value of param %s... parseQueryString(), force, bit-komponenty 5 / pom_FORCE_OPT_5_ALTERNATIVES[%d] = %s\n", local_str, j, pom_FORCE_OPT_5_ALTERNATIVES[j]); while ((equalsi(pom_FORCE_OPT_5_ALTERNATIVES[j], STR_EMPTY)) && (i > 0)) { --i; // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, local_str)) { // ide o parameter STR_FORCE_OPT_j mystrcpy(pom_FORCE_OPT_5_ALTERNATIVES[j], param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", local_str, pom_FORCE_OPT_5_ALTERNATIVES[j]); } } if (equalsi(pom_FORCE_OPT_5_ALTERNATIVES[j], STR_EMPTY)) { LogParams("Nebola zadaná premenná %s (nevadí).\n", local_str); } }// for j // force option 6 premenné -- jednotlivé decimal-place-komponenty LogParams("force option %d, jednotlivé decimal-place-komponenty...(parseQuery)\n", OPT_6_ALTERNATIVES_MULTI); for (j = 0; j < POCET_OPT_6_ALTERNATIVES_MULTI; j++) { LogParams("j == %d...\n", j); mystrcpy(local_str, STR_EMPTY, SMALL); strcat_str_opt_bit_order(local_str, OPT_6_ALTERNATIVES_MULTI, j); // premenná WWW_FORCE_PLACE_OPT_6_... (nepovinná), j = 0 až POCET_OPT_6_ALTERNATIVES_MULTI i = pocet; // backwards; param[0] by mal síce obsahovať query type, ale radšej kontrolujeme až po 0 LogParams("attempt to get value of param %s... parseQueryString(), force, bit-komponenty 6 / pom_FORCE_OPT_6_ALTERNATIVES_MULTI[%d] = %s\n", local_str, j, pom_FORCE_OPT_6_ALTERNATIVES_MULTI[j]); while ((equalsi(pom_FORCE_OPT_6_ALTERNATIVES_MULTI[j], STR_EMPTY)) && (i > 0)) { --i; // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, local_str)) { // ide o parameter STR_FORCE_OPT_j mystrcpy(pom_FORCE_OPT_6_ALTERNATIVES_MULTI[j], param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", local_str, pom_FORCE_OPT_6_ALTERNATIVES_MULTI[j]); } } if (equalsi(pom_FORCE_OPT_6_ALTERNATIVES_MULTI[j], STR_EMPTY)) { LogParams("Nebola zadaná premenná %s (nevadí).\n", local_str); } }// for j // presunuté sem spred parsovania option premenných if (ok != ANO) { // samotné vypísanie niečoho presunuté do hlavnej funkcie // ani jeden z parametrov neobsahuje query type alebo obsahuje neznámy qt if (i >= pocet) { mystrcpy(errmsg, "Chýbajúci parameter pre query type.\n", SMALL); } else { // síce bol query type parameter, ale hodnota je chybná sprintf(errmsg, "Chybný parameter: %s\n", param[i - 1].name); } strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } LogParams("\tswitch(query_type)...\n"); switch (query_type) { case PRM_DNES: { // doplnené kvôli tomu, aby aj pre PRM_DNES mohla byť modlitba resp. svätec LogParams("\tcase PRM_DNES...\n"); // nasledujúca pasáž prevzatá a upravená podľa PRM_DATUM; opätovne 2006-08-01 // premenná MODLITBA (nepovinná) i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_MODLITBA); while ((equalsi(pom_MODLITBA, STR_EMPTY)) && (i < pocet)) { // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_MODLITBA)) { // ide o parameter STR_MODLITBA mystrcpy(pom_MODLITBA, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_MODLITBA, pom_MODLITBA); } i++; } if (equalsi(pom_MODLITBA, STR_EMPTY)) { LogParams("Nebola zadaná premenná %s (nevadí).\n", STR_MODLITBA); } // premenná DALSI_SVATY (nepovinná) i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_DALSI_SVATY); while ((equalsi(pom_DALSI_SVATY, STR_EMPTY)) && (i < pocet)) { // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_DALSI_SVATY)) { // ide o parameter STR_DALSI_SVATY mystrcpy(pom_DALSI_SVATY, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_DALSI_SVATY, pom_DALSI_SVATY); } i++; } if (equalsi(pom_DALSI_SVATY, STR_EMPTY)) { LogParams("Nebola zadaná premenná %s (nevadí).\n", STR_DALSI_SVATY); } break; // case }// PRM_DNES case PRM_STATIC_TEXT: { // doplnené kvôli možnosti includovať statický text/ordinárium LogParams("\tcase PRM_STATIC_TEXT...\n"); // premenná STATIC_TEXT i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_STATIC_TEXT); while ((equalsi(pom_STATIC_TEXT, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_STATIC_TEXT)) { // ide o parameter STR_NAZOV_SVIATOK mystrcpy(pom_STATIC_TEXT, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_STATIC_TEXT, pom_STATIC_TEXT); } i++; } if (equalsi(pom_STATIC_TEXT, STR_EMPTY)) { // samotné vypísanie niečoho presunuté do hlavnej funkcie sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_STATIC_TEXT); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná MODL_ORDINARIUM (nepovinná) i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_MODL_ORDINARIUM); while ((equalsi(pom_MODL_ORDINARIUM, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_MODL_ORDINARIUM)) { // ide o parameter STR_NAZOV_SVIATOK mystrcpy(pom_MODL_ORDINARIUM, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_MODL_ORDINARIUM, pom_MODL_ORDINARIUM); } i++; } // if still empty, try to use STR_MODLITBA instead of STR_MODL_ORDINARIUM if (equalsi(pom_MODL_ORDINARIUM, STR_EMPTY)) { i = 0; LogParams("attempt to get value of param %s using %s...\n", STR_MODL_ORDINARIUM, STR_MODLITBA); while ((equalsi(pom_MODL_ORDINARIUM, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_MODLITBA)) { // ide o parameter STR_NAZOV_SVIATOK mystrcpy(pom_MODL_ORDINARIUM, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_MODLITBA, pom_MODL_ORDINARIUM); } i++; } } if (equalsi(pom_MODL_ORDINARIUM, STR_EMPTY)) { // 2013-07-31: samotné vypísanie niečoho presunuté do hlavnej funkcie sprintf(errmsg, "Nebola zadaná premenná %s (nevadí).\n", STR_MODL_ORDINARIUM); } break; // case }// PRM_STATIC_TEXT case PRM_DETAILY: // presne to iste co PRM_DATUM s jedinkym rozdielom: co sa tyka formularov, prvy (uvodny) formular pre PRM_DATUM vycisti modlitbu // (premenna pom_MODLITBA, ktora sa nacita zo systemovej premennej WWW_MODLITBA) -- pretoze z inej casti fomrulara sa tam nieco dostane... case PRM_TXT: // 2011-02-02: doplnené case PRM_XML: // 2012-10-16: doplnené case PRM_DATUM: { // pripad, ze ide o datum // treba dodrzat presne poradie v query stringu; // '()' znaci optional, // '[]' znaci vyssie uvedeny typ dotazu. // ---------------------------------------------- // 2005-03-22: pridane dalsie vyznamy opt_1 a opt_2 // ---------------------------------------------- // 0: [query type] // 1: den / rok from // 2: mesiac / rok to // 3: rok / (linky) -- tieto tri `alternativne' parametre pre typ dotazu case PRM_TABULKA:, vid nizsie // 4: (modlitba) // 5: (dalsi svaty) - poradie svateho // 6 a viac: options // --------------------------------------------- // 2006-02-10: pridané možnosti vymeneného poradia a nezadania niektorých options // ---------------------------------------------- // na základe dodania case-u pre PRM_DNES // --------------------------------------------- // 2006-08-01: dynamické zisťovanie hodnôt parametrov // ---------------------------------------------- // premenná DEN i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_DEN); while ((equalsi(pom_DEN, STR_EMPTY)) && (i < pocet)) { // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_DEN)) { // ide o parameter STR_DEN mystrcpy(pom_DEN, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_DEN, pom_DEN); } i++; } if (equalsi(pom_DEN, STR_EMPTY) && (query_type != PRM_XML)) { sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_DEN); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná MESIAC i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_MESIAC); while ((equalsi(pom_MESIAC, STR_EMPTY)) && (i < pocet)) { // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_MESIAC)) { // ide o parameter STR_MESIAC mystrcpy(pom_MESIAC, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_MESIAC, pom_MESIAC); } i++; } if (equalsi(pom_MESIAC, STR_EMPTY) && (query_type != PRM_XML)) { sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_MESIAC); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná ROK i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_ROK); while ((equalsi(pom_ROK, STR_EMPTY)) && (i < pocet)) { // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_ROK)) { // ide o parameter STR_ROK mystrcpy(pom_ROK, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_ROK, pom_ROK); } i++; } if (equalsi(pom_ROK, STR_EMPTY) && (query_type != PRM_XML)) { sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_ROK); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná MODLITBA (nepovinná) i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_MODLITBA); while ((equalsi(pom_MODLITBA, STR_EMPTY)) && (i < pocet)) { // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_MODLITBA)) { // ide o parameter STR_MODLITBA mystrcpy(pom_MODLITBA, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_MODLITBA, pom_MODLITBA); } i++; } if (equalsi(pom_MODLITBA, STR_EMPTY)) { Log("Nebola zadaná premenná %s (nevadí).\n", STR_MODLITBA); } // premenná DALSI_SVATY (nepovinná) i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_DALSI_SVATY); while ((equalsi(pom_DALSI_SVATY, STR_EMPTY)) && (i < pocet)) { // LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_DALSI_SVATY)) { // ide o parameter STR_DALSI_SVATY mystrcpy(pom_DALSI_SVATY, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_DALSI_SVATY, pom_DALSI_SVATY); } i++; } if (equalsi(pom_DALSI_SVATY, STR_EMPTY)) { LogParams("Nebola zadaná premenná %s (nevadí).\n", STR_DALSI_SVATY); } /* // if day, month and/or year is not supplied, for XML export use current timestamp if ((query_type == PRM_XML) && (equalsi(pom_DEN, STR_EMPTY) || equalsi(pom_MESIAC, STR_EMPTY) || equalsi(pom_ROK, STR_EMPTY))) { struct tm dnes = _get_dnes(); sprintf(pom_DEN, "%d", dnes.tm_mday); sprintf(pom_MESIAC, "%d", dnes.tm_mon); sprintf(pom_ROK, "%d", dnes.tm_year); } */ break; // case }// PRM_DETAILY | PRM_TXT | PRM_XML | PRM_DATUM case PRM_CEZ_ROK: { // pripad, ze ide o tyzden cez rok // premenná DEN_V_TYZDNI i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_DEN_V_TYZDNI); while ((equalsi(pom_DEN_V_TYZDNI, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_DEN_V_TYZDNI)) { // ide o parameter STR_DEN_V_TYZDNI mystrcpy(pom_DEN_V_TYZDNI, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_DEN_V_TYZDNI, pom_DEN_V_TYZDNI); } i++; } if (equalsi(pom_DEN_V_TYZDNI, STR_EMPTY)) { sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_DEN_V_TYZDNI); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná TYZDEN i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_TYZDEN); while ((equalsi(pom_TYZDEN, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_TYZDEN)) { // ide o parameter STR_TYZDEN mystrcpy(pom_TYZDEN, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_TYZDEN, pom_TYZDEN); } i++; } if (equalsi(pom_TYZDEN, STR_EMPTY)) { sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_TYZDEN); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná MODLITBA i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_MODLITBA); while ((equalsi(pom_MODLITBA, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_MODLITBA)) { // ide o parameter STR_MODLITBA mystrcpy(pom_MODLITBA, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_MODLITBA, pom_MODLITBA); } i++; } if (equalsi(pom_MODLITBA, STR_EMPTY)) { // 2013-07-31: samotné vypísanie niečoho presunuté do hlavnej funkcie sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_MODLITBA); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } break; // case }// PRM_CEZ_ROK case PRM_LIT_OBD: { // premenná DEN_V_TYZDNI i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_DEN_V_TYZDNI); while ((equalsi(pom_DEN_V_TYZDNI, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_DEN_V_TYZDNI)) { // ide o parameter STR_DEN_V_TYZDNI mystrcpy(pom_DEN_V_TYZDNI, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_DEN_V_TYZDNI, pom_DEN_V_TYZDNI); } i++; } if (equalsi(pom_DEN_V_TYZDNI, STR_EMPTY)) { sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_DEN_V_TYZDNI); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná TYZDEN i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_TYZDEN); while ((equalsi(pom_TYZDEN, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_TYZDEN)) { // ide o parameter STR_TYZDEN mystrcpy(pom_TYZDEN, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_TYZDEN, pom_TYZDEN); } i++; } if (equalsi(pom_TYZDEN, STR_EMPTY)) { sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_TYZDEN); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná MODLITBA i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_MODLITBA); while ((equalsi(pom_MODLITBA, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_MODLITBA)) { // ide o parameter STR_MODLITBA mystrcpy(pom_MODLITBA, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_MODLITBA, pom_MODLITBA); } i++; } if (equalsi(pom_MODLITBA, STR_EMPTY)) { // samotné vypísanie niečoho presunuté do hlavnej funkcie sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_MODLITBA); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná LIT_OBD i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_LIT_OBD); while ((equalsi(pom_LIT_OBD, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_LIT_OBD)) { // ide o parameter STR_LIT_OBD mystrcpy(pom_LIT_OBD, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_LIT_OBD, pom_LIT_OBD); } i++; } if (equalsi(pom_LIT_OBD, STR_EMPTY)) { // samotné vypísanie niečoho presunuté do hlavnej funkcie sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_LIT_OBD); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná LIT_ROK i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_LIT_ROK); while ((equalsi(pom_LIT_ROK, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_LIT_ROK)) { // ide o parameter STR_LIT_ROK mystrcpy(pom_LIT_ROK, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_LIT_ROK, pom_LIT_ROK); } i++; } if (equalsi(pom_LIT_ROK, STR_EMPTY)) { // samotné vypísanie niečoho presunuté do hlavnej funkcie sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_LIT_ROK); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } break; // case }// PRM_LIT_OBD case PRM_SVIATOK: { // premenná NAZOV_SVIATOK i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_NAZOV_SVIATOK); while ((equalsi(pom_SVIATOK, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_NAZOV_SVIATOK)) { // ide o parameter STR_NAZOV_SVIATOK mystrcpy(pom_SVIATOK, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_NAZOV_SVIATOK, pom_SVIATOK); } i++; } if (equalsi(pom_SVIATOK, STR_EMPTY)) { // samotné vypísanie niečoho presunuté do hlavnej funkcie sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_NAZOV_SVIATOK); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } break; // case }// PRM_SVIATOK case PRM_ANALYZA_ROKU: { // premenná ANALYZA_ROKU i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_ANALYZA_ROKU); while ((equalsi(pom_ANALYZA_ROKU, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_ANALYZA_ROKU)) { // ide o parameter STR_ANALYZA_ROKU mystrcpy(pom_ANALYZA_ROKU, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_ANALYZA_ROKU, pom_ANALYZA_ROKU); } i++; } if (equalsi(pom_ANALYZA_ROKU, STR_EMPTY)) { sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_ANALYZA_ROKU); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } break; // case }// PRM_ANALYZA_ROKU case PRM_MESIAC_ROKA: { // premenná MESIAC i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_MESIAC_ROKA); while ((equalsi(pom_MESIAC, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_MESIAC_ROKA)) { // ide o parameter STR_MESIAC_ROKA mystrcpy(pom_MESIAC, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_MESIAC_ROKA, pom_MESIAC); } i++; } if (equalsi(pom_MESIAC, STR_EMPTY)) { sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_MESIAC_ROKA); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná ROK i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_ROK_ROKA); while ((equalsi(pom_ROK, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_ROK_ROKA)) { // ide o parameter STR_ROK_ROKA mystrcpy(pom_ROK, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_ROK_ROKA, pom_ROK); } i++; } if (equalsi(pom_ROK, STR_EMPTY)) { sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_ROK_ROKA); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } break; // case }// PRM_MESIAC_ROKA case PRM_TABULKA: { // premenná ROK_FROM i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_ROK_FROM); while ((equalsi(pom_ROK_FROM, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_ROK_FROM)) { // ide o parameter STR_ROK_FROM mystrcpy(pom_ROK_FROM, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_ROK_FROM, pom_ROK_FROM); } i++; } if (equalsi(pom_ROK_FROM, STR_EMPTY)) { // samotné vypísanie niečoho presunuté do hlavnej funkcie sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_ROK_FROM); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná ROK_TO i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_ROK_TO); while ((equalsi(pom_ROK_TO, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_ROK_TO)) { // ide o parameter STR_ROK_TO mystrcpy(pom_ROK_TO, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_ROK_TO, pom_ROK_TO); } i++; } if (equalsi(pom_ROK_TO, STR_EMPTY)) { // 2013-07-31: samotné vypísanie niečoho presunuté do hlavnej funkcie sprintf(errmsg, "Nebola zadaná premenná %s.\n", STR_ROK_TO); strcat(bad_param_str, errmsg); ret = FAILURE; goto END_parseQueryString; } // premenná TABULKA_LINKY (nepovinná) i = 0; // param[0] by mal síce obsahovať query type, ale radšej kontrolujeme od 0 LogParams("attempt to get value of param %s...\n", STR_TABULKA_LINKY); while ((equalsi(pom_LINKY, STR_EMPTY)) && (i < pocet)) { LogParams("...parameter %d (meno: %s, hodnota: %s)\n", i, param[i].name, param[i].val); if (equals(param[i].name, STR_TABULKA_LINKY)) { // ide o parameter STR_TABULKA_LINKY mystrcpy(pom_LINKY, param[i].val, SMALL); LogParams("hodnota parametra %s je %s.\n", STR_TABULKA_LINKY, pom_LINKY); } i++; } if (equalsi(pom_LINKY, STR_EMPTY)) { LogParams("Nebola zadaná premenná %s (nevadí).\n", STR_TABULKA_LINKY); } break; // case }// PRM_TABULKA } ret = SUCCESS; END_parseQueryString: Log("parseQueryString() -- end, returning %d.\n", ret); return ret; }// parseQueryString(); #define _main_LOG_to_Export_PARAMS {\ _main_LOG_to_Export("\tparam1 == %s (pom_DEN/pom_SVIATOK/pom_DEN_V_TYZDNI), param1 == %s (pom_ROK_FROM resp. DEN DO pre batch mode)\n", pom_DEN, pom_ROK_FROM);\ _main_LOG_to_Export("\tparam2 == %s (pom_MESIAC/pom_TYZDEN), param2 == %s (pom_ROK_TO resp. MESIAC DO pre batch mode)\n", pom_MESIAC, pom_ROK_TO);\ _main_LOG_to_Export("\tparam3 == %s (pom_ROK/pom_ANALYZA_ROKU), param3 == %s (pom_LINKY)\n", pom_ROK, pom_LINKY);\ _main_LOG_to_Export("\tparam4 == %s (pom_MODLITBA resp. ROK DO pre batch mode)\n", pom_MODLITBA);\ _main_LOG_to_Export("\tparam5 == %s (pom_DALSI_SVATY)\n", pom_DALSI_SVATY);\ _main_LOG_to_Export("\tparam11== %s (pom_OPT_APPEND)\n", pom_OPT_APPEND);\ _main_LOG_to_Export("\tparam12== %s (pom_JAZYK)\n", pom_JAZYK);\ _main_LOG_to_Export("\tparam == %s (pom_KALENDAR)\n", pom_KALENDAR);\ _main_LOG_to_Export("\tparam == %s (pom_THEME)\n", pom_THEME);\ _main_LOG_to_Export("\tparam == %s (pom_THEME_LIGHT_BACKGROUND_COLOR)\n", pom_THEME_LIGHT_BACKGROUND_COLOR);\ _main_LOG_to_Export("\tparam == %s (pom_THEME_DARK_BACKGROUND_COLOR)\n", pom_THEME_DARK_BACKGROUND_COLOR);\ _main_LOG_to_Export("\tparam == %s (pom_SIDEMENU_LOCATION)\n", pom_SIDEMENU_LOCATION);\ _main_LOG_to_Export("\tparam == %s (pom_FONT)\n", pom_FONT);\ _main_LOG_to_Export("\tparam == %s (pom_FONT_SIZE)\n", pom_FONT_SIZE);\ _main_LOG_to_Export("\tparam == %s (pom_FONT_SIZE_PT)\n", pom_FONT_SIZE_PT);\ _main_LOG_to_Export("\tparam == %s (pom_STYLE_MARGIN)\n", pom_STYLE_MARGIN);\ _main_LOG_to_Export("\tparam == %s (pom_LINE_HEIGHT_PERC)\n", pom_LINE_HEIGHT_PERC);\ _main_LOG_to_Export("\tparam == %s (pom_OPT_DATE_FORMAT)\n", pom_OPT_DATE_FORMAT);\ _main_LOG_to_Export("\tparam == %s (pom_EXPORT_MONTHLY)\n", pom_EXPORT_MONTHLY);\ for(i = 0; i < POCET_GLOBAL_OPT; i++) {\ _main_LOG_to_Export("\tparam == %s (pom_OPT[%d])\n", pom_OPT[i], i);\ }\ for(i = 0; i < POCET_GLOBAL_OPT; i++) {\ _main_LOG_to_Export("\tparam == %s (pom_FORCE_OPT[%d])\n", pom_FORCE_OPT[i], i);\ }\ } short int counter_setConfigDefaults = 0; void setConfigDefaults(short int jazyk) { unsigned long long sk_default; short int i; counter_setConfigDefaults++; Log("setConfigDefaults(%d) -- začiatok (%d. volanie)...\n", jazyk, counter_setConfigDefaults); for (i = 0; i < POCET_GLOBAL_OPT; i++) { if (jazyk != JAZYK_SK) { sk_default = cfg_option_default[i][JAZYK_SK]; } else { sk_default = GLOBAL_OPTION_NULL; } if (cfg_option_default[i][jazyk] == GLOBAL_OPTION_NULL) { cfg_option_default[i][jazyk] = (sk_default == GLOBAL_OPTION_NULL) ? cfg_option_default_PROG[i] : sk_default; Log("keďže cfg_option_default[%d][%d] bolo GLOBAL_OPTION_NULL, nastavujem podľa program defaults na %ld...\n", i, jazyk, cfg_option_default[i][jazyk]); } }// for i setConfigDefaultsOther(_global_jazyk); Log("setConfigDefaults(%d) -- koniec (%d. volanie).\n", jazyk, counter_setConfigDefaults); }// setConfigDefaults() void init_global_string_as_html_title(short int den, short int mesiac, short int rok, short int modlitba) { Log("init_global_string_as_html_title(%d, %d, %d, %d): begin...\n", den, mesiac, rok, modlitba); mystrcpy(_global_string, STR_EMPTY, MAX_GLOBAL_STR); // inicializácia short int use_numbers_instead_month_names = NIE; char delimiter_dash[SMALL] = STR_EMPTY; char delimiter_bar[SMALL] = STR_EMPTY; mystrcpy(delimiter_dash, STR_EN_DASH_WITH_SPACES, SMALL); mystrcpy(delimiter_bar, STR_VERTICAL_BAR_WITH_SPACES, SMALL); struct tm dnes = _get_dnes(); Log("dnes/today: tm_mday == %d, tm_mon == %d, tm_year == %d [note: struct tm has tm_mon 1..12 while our constants are 0..11]...\n", dnes.tm_mday, dnes.tm_mon, dnes.tm_year); short int input_date_is_today = NIE; // whether input parameters form current timestamp's day if ((den == dnes.tm_mday) && (mesiac == dnes.tm_mon - 1) && (rok == dnes.tm_year)) { // note: struct tm has tm_mon 1..12 while our constants are 0..11 input_date_is_today = ANO; Log("chosen day is the same as current timestamp's day (today).\n"); } #if defined(IO_ANDROID) || defined (__APPLE__) // no prefix for mobile apps ["app name" as title will be added in special cases] // force using month numbers due to small space on action bar use_numbers_instead_month_names = ANO; mystrcpy(delimiter_dash, STR_VERTICAL_BAR_WITH_SPACES, SMALL); #elif defined(OS_Windows_Ruby) || defined(OS_Windows) // for debugging & testing: language + calendar shortcuts, e. g. "SK SVD | " or "CZ OFMCap. | " mystrcpy(_global_string, skratka_jazyka_title[_global_jazyk], MAX_STR); if ((_global_kalendar != default_kalendar[_global_jazyk]) && (strlen(nazov_kalendara_propria_only[_global_kalendar]) > 0)) { Log("_global_kalendar == %d (%s)...\n", _global_kalendar, nazov_kalendara_propria_only[_global_kalendar]); strcat(_global_string, STR_SPACE); strcat(_global_string, nazov_kalendara_propria_only[_global_kalendar]); } strcat(_global_string, delimiter_bar); #else // for web, add "website name" as title mystrcpy(_global_string, html_title[_global_jazyk], MAX_GLOBAL_STR); // inicializácia strcat(_global_string, delimiter_bar); #endif // add string/date for selected day, year, prayer (fits for most cases) if ((query_type == PRM_DNES) || (input_date_is_today == ANO)) { strcat(_global_string, html_button_Dnes[_global_jazyk]); } else if (query_type == PRM_STATIC_TEXT) { Log("init_global_string_as_html_title(): query_type == PRM_STATIC_TEXT, rok == %d...\n", rok); if ((rok <= STATIC_TEXT_UNDEF) || (rok > POCET_STATIC_TEXTOV)) { rok = STATIC_TEXT_INFO; } strcat(_global_string, html_title_static_text[rok][_global_jazyk]); } else if ((query_type == PRM_DATUM) || (query_type == PRM_TXT) || (query_type == PRM_ANALYZA_ROKU)) { strcat(_global_string, _vytvor_string_z_datumu_ext(den, mesiac + 1, rok, ((_global_jazyk == JAZYK_EN) || (_global_jazyk == JAZYK_ES)) ? CASE_Case : CASE_case, NIE, use_numbers_instead_month_names)); } // no additional text for Mary's antiphones & incorrect info text numbers if (query_type == PRM_STATIC_TEXT) { if (rok == STATIC_TEXT_MARIANSKE_ANTIFONY) { modlitba = MODL_NEURCENA; } if ((rok == STATIC_TEXT_INFO) && !((modlitba >= INFO_ABOUT) && (modlitba <= POCET_INFO_TEXTOV))) { modlitba = MODL_NEURCENA; } } if (modlitba != MODL_NEURCENA) { // if anything is in _global_string, add dashes + prayer name... if (strlen(_global_string) > 0) { strcat(_global_string, delimiter_dash); if ((query_type == PRM_STATIC_TEXT) && (rok == STATIC_TEXT_INFO)) { if ((modlitba >= INFO_ABOUT) && (modlitba <= POCET_INFO_TEXTOV)) { strcat(_global_string, html_subtitle_static_text_info[modlitba][_global_jazyk]); } // otherwise, nothing (eventhough delimiter_dash might be already exported) } else { // for query_type == PRM_STATIC_TEXT: case STATIC_TEXT_ORDINARIUM; all other values of query_type strcat(_global_string, nazov_modlitby(modlitba)); } } else { // ...otherwise, add prayer only... if (modlitba != MODL_NEURCENA) { strcat(_global_string, nazov_Modlitby(modlitba)); } else { // ...or just website/application name #if defined(IO_ANDROID) || defined (__APPLE__) mystrcpy(_global_string, html_app_name[_global_jazyk], MAX_GLOBAL_STR); #else mystrcpy(_global_string, html_title[_global_jazyk], MAX_GLOBAL_STR); #endif } } } Log("init_global_string_as_html_title(%d, %d, %d, %d): end.\n", den, mesiac, rok, modlitba); }// init_global_string_as_html_title() void normalize_calendar_for_language() { Log("normalize_calendar_for_language(): begin...\n"); // check whether desired calendar is possible for selected language _main_LOG_to_Export("kontrola kalendár (%s | %s) vs. jazyk (%s | %s)...\n", nazov_kalendara_short[_global_kalendar], skratka_kalendara[_global_kalendar], nazov_jazyka(_global_jazyk), skratka_jazyka[_global_jazyk]); #ifdef DEBUG // this special change is just for debugging reasons (for Czech language, behave as if CZ OP would be another calendar though it is not listed among supported_calendars[] for JAZYK_CZ if (_global_jazyk == JAZYK_CZ && _global_kalendar == KALENDAR_CZ_OP) { Log("normalize_calendar_for_language(): special case for CZ language and CZOP calendar...\n"); _global_jazyk = JAZYK_CZ_OP; } #endif short int c = 0; for (c = 0; c < supported_calendars_count[_global_jazyk]; c++) { if (supported_calendars(c) == _global_kalendar) { Log("...OK.\n"); break; } } if (c >= supported_calendars_count[_global_jazyk]) { _global_kalendar = default_kalendar[_global_jazyk]; Log("kalendár zmenený na default pre daný jazyk (%d teda %s | %s).", _global_kalendar, nazov_kalendara_short[_global_kalendar], skratka_kalendara[_global_kalendar]); } Log("normalize_calendar_for_language(): end.\n"); } // main int breviar_main(int argc, const char** argv) { short int i; short int local_den, local_mesiac, local_rok, local_modlitba; // naplnenie _global_system #if defined(OS_linux) _global_system = SYSTEM_LINUX; #elif defined(OS_Windows_Ruby) _global_system = SYSTEM_RUBY; #else _global_system = SYSTEM_WINDOWS; #endif #ifdef IO_ANDROID isAndroid = ANO; #else isAndroid = NIE; #endif // IO_ANDROID // pretoze pocas behu win32-release verzie on-line breviara sa spusta main() viackrat bez zrusenia programu, // je potrebne inicializovat globalne premenne pri kazdom pusteni jej behu // prerobenie čítania jazyka (skopírované ešte na jedno vyššie miesto); už by sa malo vypisovať pri generovaní inojazyčných modlitieb správne myhpage_init_globals(); // for _breviar_env, must be included within if-def #if defined(_BREVIAR_ENV) memset(_breviar_env, 0, sizeof(_breviar_env)); #endif /* _BREVIAR_ENV */ memset(_global_opt, 0, sizeof(_global_opt)); _global_opt[OPT_0_SPECIALNE] = GLOBAL_OPTION_NULL; _global_opt[OPT_1_CASTI_MODLITBY] = GLOBAL_OPTION_NULL; _global_opt[OPT_3_SPOLOCNA_CAST] = MODL_SPOL_CAST_NEURCENA; _global_opt[OPT_4_OFFLINE_EXPORT] = GLOBAL_OPTION_NULL; _global_opt[OPT_2_HTML_EXPORT] = GLOBAL_OPTION_NULL; counter_setConfigDefaults = 0; _global_opt_append = NIE; _global_opt_tedeum = NIE; _global_pocet_slava_otcu = 0; _global_ant_mcd_rovnake = NIE; _global_opt_export_date_format = EXPORT_DATE_SIMPLE; _global_opt_batch_monthly = NIE; _global_hlavicka_Export = 0; _global_patka_Export = 0; export_monthly_druh = 0; export_month_zaciatok = NIE; export_month_nova_modlitba = NIE; strcpy(pom_LIT_OBD, STR_EMPTY); strcpy(pom_LIT_ROK, STR_EMPTY); strcpy(pom_QUERY_TYPE, STR_EMPTY); strcpy(pom_DEN, STR_EMPTY); strcpy(pom_MESIAC, STR_EMPTY); strcpy(pom_ROK, STR_EMPTY); strcpy(pom_MODLITBA, STR_EMPTY); strcpy(pom_DALSI_SVATY, STR_EMPTY); strcpy(pom_ROK_FROM, STR_EMPTY); strcpy(pom_ROK_TO, STR_EMPTY); strcpy(pom_LINKY, STR_EMPTY); strcpy(pom_JAZYK, STR_EMPTY); strcpy(pom_THEME, STR_EMPTY); strcpy(pom_THEME_LIGHT_BACKGROUND_COLOR, STR_EMPTY); strcpy(pom_THEME_DARK_BACKGROUND_COLOR, STR_EMPTY); strcpy(pom_SIDEMENU_LOCATION, STR_EMPTY); strcpy(pom_FONT, STR_EMPTY); strcpy(pom_FONT_SIZE, STR_EMPTY); strcpy(pom_FONT_SIZE_PT, STR_EMPTY); strcpy(pom_STYLE_MARGIN, STR_EMPTY); strcpy(pom_LINE_HEIGHT_PERC, STR_EMPTY); strcpy(pom_OPT_DATE_FORMAT, STR_EMPTY); strcpy(pom_EXPORT_MONTHLY, STR_EMPTY); // 2009-08-03: Pridané kvôli rôznym spôsobom exportu po mesiacoch, prepínač -M _global_modlitba = MODL_NEURCENA; memset(_global_opt, 0, sizeof(_global_opt)); memset(_global_force_opt, 0, sizeof(_global_force_opt)); memset(_global_opt_0_specialne, 0, sizeof(_global_opt_0_specialne)); memset(_global_opt_1_casti_modlitby, 0, sizeof(_global_opt_1_casti_modlitby)); memset(_global_opt_2_html_export, 0, sizeof(_global_opt_2_html_export)); memset(_global_opt_4_offline_export, 0, sizeof(_global_opt_4_offline_export)); memset(_global_opt_5_alternatives, 0, sizeof(_global_opt_5_alternatives)); memset(_global_opt_6_alternatives_multi, 0, sizeof(_global_opt_6_alternatives_multi)); _global_jazyk = 0; _global_kalendar = 0; _global_ritus = 0; _global_theme = THEME_UNDEF; _global_sidemenu_location = SIDEMENU_LOCATION_UNDEF; _global_font = 0; _global_font_size = 0; _global_style_margin = DEF_STYLE_MARGIN; _global_line_height_perc = DEF_LINE_HEIGHT_PERC; _global_override_thin_nbsp = NIE; _global_pocet_navigacia = 0; _global_pocet_volani_interpretTemplate = 0; _global_pocet_zalmov_kompletorium = 0; strcpy(_global_export_navig_hore, DEFAULT_MONTH_EXPORT); strcpy(_global_export_navig_hore_month, DEFAULT_MONTH_EXPORT); strcpy(_global_export_navig_hore_day, DEFAULT_MONTH_EXPORT); strcpy(_global_css_font_family, DEFAULT_FONT_FAMILY_SERIF); strcpy(_global_css_font_size, STR_EMPTY); _global_skip_in_prayer = NIE; _global_skip_in_prayer_2 = NIE; _global_skip_in_prayer_vnpc = NIE; _global_som_vo_vigilii = NIE; params = 0; strcpy(pom_OPT_APPEND, STR_EMPTY); strcpy(pom_KALENDAR, STR_EMPTY); memset(pom_OPT, 0, sizeof(pom_OPT)); memset(pom_FORCE_OPT, 0, sizeof(pom_FORCE_OPT)); memset(pom_FORCE_OPT_0_SPECIALNE, 0, sizeof(pom_FORCE_OPT_0_SPECIALNE)); memset(pom_FORCE_OPT_1_CASTI_MODLITBY, 0, sizeof(pom_FORCE_OPT_1_CASTI_MODLITBY)); memset(pom_FORCE_OPT_2_HTML_EXPORT, 0, sizeof(pom_FORCE_OPT_2_HTML_EXPORT)); memset(pom_FORCE_OPT_4_OFFLINE_EXPORT, 0, sizeof(pom_FORCE_OPT_4_OFFLINE_EXPORT)); memset(pom_FORCE_OPT_5_ALTERNATIVES, 0, sizeof(pom_FORCE_OPT_5_ALTERNATIVES)); memset(pom_FORCE_OPT_6_ALTERNATIVES_MULTI, 0, sizeof(pom_FORCE_OPT_6_ALTERNATIVES_MULTI)); strcpy(bad_param_str, STR_EMPTY); strcpy(file_export, STR_EMPTY); strcpy(include_dir, STR_EMPTY); strcpy(name_binary_executable, STR_EMPTY); strcpy(name_batch_file, STR_EMPTY); strcpy(name_batch_html_file, STR_EMPTY); strcpy(dir_name, STR_EMPTY); strcpy(name_batch_month_file, STR_EMPTY); strcpy(system_command, STR_EMPTY); memset(param, 0, sizeof(param)); batch_file = NULL; batch_html_file = NULL; batch_month_file = NULL; index_pre_mesiac_otvoreny = NIE; _INIT_DM(_local_den); #if defined(BEHAVIOUR_WEB) _global_linky = 1; // zobrazovať linky (pre batch mód: použiť URL) #elif defined(BEHAVIOUR_CMDLINE) _global_linky = 0; // nezobrazovať linky (pre batch mód: použiť filenames) #else #error Unsupported behaviour (not defined in mysystem.h/mysysdef.h) #endif short int ret, ret_pom = FAILURE; // návratová hodnota long len; // dĺžka initLog(FILE_LOG); _main_LOG("Content-type: text/html\n"); _main_LOG("\n"); _main_LOG("-- log file programu pre Liturgiu hodín " TEXT_COPYRIGHT " --\n"); _main_LOG("inicializácia poľa pom_OPT[]...\n"); for (i = 0; i < POCET_GLOBAL_OPT; i++) { mystrcpy(pom_OPT[i], STR_EMPTY, SMALL); // _main_LOG("pom_OPT[%d] == `%s'...\n", i, pom_OPT[i]); }// nastavenie pom_OPT[i] _main_LOG("inicializácia poľa pom_FORCE_OPT[]...\n"); for (i = 0; i < POCET_GLOBAL_OPT; i++) { mystrcpy(pom_FORCE_OPT[i], STR_EMPTY, SMALL); // _main_LOG("pom_FORCE_OPT[%d] == `%s'...\n", i, pom_FORCE_OPT[i]); }// nastavenie pom_FORCE_OPT[i] // config _main_LOG("first, reading configuration (file %s)...\n", CONFIG_FILE); _main_LOG("spúšťam readConfig();...\n"); readConfig(); _main_LOG("spúšťam printConfig();...\n"); printConfig(); _main_LOG("spúšťam updateScriptName();...\n"); updateScriptName(); _main_LOG("script_name == %s\n", script_name); _main_LOG("spúšťam updateUnCGIName();...\n"); updateUnCGIName(); _main_LOG("uncgi_name == %s\n", uncgi_name); _main_LOG("spúšťam initExport();...\n"); initExport(); // basic check for MAX_POCET_OPT constant if ((MAX_POCET_OPT <= POCET_OPT_0_SPECIALNE) || (MAX_POCET_OPT <= POCET_OPT_1_CASTI_MODLITBY) || (MAX_POCET_OPT <= POCET_OPT_2_HTML_EXPORT) || (MAX_POCET_OPT <= POCET_OPT_4_OFFLINE_EXPORT) || (MAX_POCET_OPT <= POCET_OPT_5_ALTERNATIVES) || (MAX_POCET_OPT <= POCET_OPT_6_ALTERNATIVES_MULTI) ) { _main_LOG("Incorrect setting of value for `MAX_POCET_OPT'.\n"); goto _main_end; } // pre query_string musime alokovat pamat _main_LOG("/* pre query_string musime alokovat pamat */\n"); _main_LOG("now allocating memory (1)...\n"); // query_string if ((query_string = (char*)malloc(MAX_QUERY_STR)) == NULL) { _main_LOG(" Not enough memory to allocate buffer for `query_string'\n"); goto _main_end; } else { _main_LOG(" %d bytes for `query_string'\n", MAX_QUERY_STR); } _main_LOG("...done.\n"); // _global_buf if ((_global_buf = (char*)malloc(MAX_GLOBAL_STR)) == NULL) { Log(" Not enough memory to allocate buffer for `_global_buf'\n"); goto _main_end; } else { _main_LOG(" %d bytes for `_global_buf'\n", MAX_GLOBAL_STR); mystrcpy(_global_buf, STR_EMPTY, MAX_GLOBAL_STR); } // _global_buf2 if ((_global_buf2 = (char*)malloc(MAX_GLOBAL_STR)) == NULL) { Log(" Not enough memory to allocate buffer for `_global_buf2'\n"); goto _main_end; } else { _main_LOG(" %d bytes for `_global_buf2'\n", MAX_GLOBAL_STR); mystrcpy(_global_buf2, STR_EMPTY, MAX_GLOBAL_STR); } // _global_pom_str if ((_global_pom_str = (char*)malloc(MAX_STR)) == NULL) { Log(" Not enough memory to allocate buffer for `_global_pom_str'\n"); ret = FAILURE; } else { Log(" %d bytes for `_global_pom_str'\n", MAX_STR); mystrcpy(_global_pom_str, STR_UNDEF, MAX_STR); } _main_LOG("spustatm getSrciptParamFrom(argc == %d)...\n", argc); params = getSrciptParamFrom(argc); // vysledok je, ze sa do params nacita bud // SCRIPT_PARAM_FROM_FORM alebo // SCRIPT_PARAM_FROM_QS alebo // SCRIPT_PARAM_FROM_ARGV; // // ak vsak pouzivam aj query string, aj vysledky z formulara, vysledok bude predsa SCRIPT_PARAM_FROM_QS, lebo QS je neprazdny retazec; // taku strategiu umoznuje uncgi.c: // First, get the query string, wherever it is, and stick its component parts into the environment. // Allow combination GET and POST queries, even though that's a bit strange. // takze v pripade, ze query string je neprazdny, treba // 1. zistit systemove premenne WWW_... // 2. zistit (a rozparsovat) QUERY_STRING ret = NO_RESULT; ret_pom = FAILURE; switch (params) { // v tomto switch() naplnime premennu query_type a naviac (ak su) premenne pom_... case SCRIPT_PARAM_FROM_FORM: { _main_LOG_to_Export("params == SCRIPT_PARAM_FROM_FORM\n"); // neboli zadane ziadne parametre, teda citam z formulara query_type = getQueryTypeFrom_WWW(); // zistili sme, aky je typ dotazu if (query_type == PRM_NONE) { // spusteny bez parametrov _main_LOG_to_Export("query_type == PRM_NONE\n"); _main_LOG_to_Export("spustam _main_prazdny_formular();\n"); _main_prazdny_formular(); _main_LOG_to_Export("spat po skonceni _main_prazdny_formular()\n"); goto _main_end; } else { _main_LOG_to_Export("spustam getForm();\n"); ret_pom = ret = getForm(); _main_LOG_to_Export("spat po skonceni getForm()\n"); } break; }// SCRIPT_PARAM_FROM_FORM case SCRIPT_PARAM_FROM_ARGV: { _main_LOG("params == SCRIPT_PARAM_FROM_ARGV\n"); _main_LOG("spustam getArgv();\n"); // query_type sa nastavi priamo vovnutri ret_pom = ret = getArgv(argc, argv); if (ret == SUCCESS) { // parsovanie jazyka kvôli jazykovým mutáciám _main_LOG_to_Export("zisťujem jazyk (pom_JAZYK == %s)...\n", pom_JAZYK); _global_jazyk = atojazyk(pom_JAZYK); if (_global_jazyk == JAZYK_UNDEF) { _global_jazyk = JAZYK_SK; _main_LOG_to_Export("\t(vzhľadom k neurčenému jazyku používam default)\n"); } _main_LOG_to_Export("...jazyk (%s) = %d, teda %s (%s)\n", pom_JAZYK, _global_jazyk, nazov_jazyka(_global_jazyk), skratka_jazyka[_global_jazyk]); _main_LOG_to_Export("spúšťam setConfigDefaults()...\n"); setConfigDefaults(_global_jazyk); // 2011-04-13: doplnené Log("volám _rozparsuj_parametre_OPT()... | breviar_main(), case SCRIPT_PARAM_FROM_ARGV\n"); _rozparsuj_parametre_OPT(); // parsovanie jazyka kvôli jazykovým mutáciám -- kalendár, napr. rehoľný (dané aj nižše, ako jazyk) _main_LOG_to_Export("zisťujem kalendár (pom_KALENDAR == %s)...\n", pom_KALENDAR); _global_kalendar = atokalendar(pom_KALENDAR); if (_global_kalendar == KALENDAR_NEURCENY) { _global_kalendar = KALENDAR_VSEOBECNY; _main_LOG_to_Export("\t(vzhľadom k neurčenému kalendáru používam default -- všeobecný kalendár)\n"); } _main_LOG_to_Export("...kalendár (%s) = %d, teda %s (%s)\n", pom_KALENDAR, _global_kalendar, nazov_kalendara_short[_global_kalendar], skratka_kalendara[_global_kalendar]); normalize_calendar_for_language(); // načítanie názvu fontu kvôli rôznym fontom _main_LOG_to_Export("zisťujem font...\n"); _global_font = atofont(pom_FONT); _main_LOG_to_Export("...font (%s) = %d, teda %s\n", pom_FONT, _global_font, nazov_fontu[_global_font]); // for FONT_CUSTOM, we still use pom_FONT as global variable unless empty // načítanie veľkosti fontu _main_LOG_to_Export("zisťujem font size...\n"); _global_font_size = atofontsize(pom_FONT_SIZE); if (_global_font_size == FONT_SIZE_UNDEF) { _global_font_size = FONT_SIZE_CSS; _main_LOG_to_Export("\t(vzhľadom k neurčenej font size používam default -- brať font size z CSS)\n"); } _main_LOG_to_Export("...font size (%s) = %d, teda %s\n", pom_FONT_SIZE, _global_font_size, nazov_font_size(_global_font_size)); // načítanie veľkosti fontu v pt (override) _main_LOG_to_Export("zisťujem font size pt...\n"); _global_font_size_pt = atoi(pom_FONT_SIZE_PT); /* if (_global_font_size_pt == FONT_SIZE_UNDEF) { _global_font_size_pt = FONT_SIZE_PT_DEFAULT; _main_LOG_to_Export("\t(vzhľadom k neurčenej font size používam default)\n"); } */ _main_LOG_to_Export("...font size pt (%s) = %d\n", pom_FONT_SIZE_PT, _global_font_size_pt); // reading of style margin _main_LOG_to_Export("zisťujem style margin...\n"); _global_style_margin = atoi(pom_STYLE_MARGIN); if (_global_style_margin > MAX_STYLE_MARGIN) { _global_style_margin = MAX_STYLE_MARGIN; _main_LOG_to_Export("\t(more than max... style margin set to %d)\n", _global_style_margin); } if (_global_style_margin < MIN_STYLE_MARGIN) { _global_style_margin = MIN_STYLE_MARGIN; _main_LOG_to_Export("\t(less than min... style margin set to %d)\n", _global_style_margin); } _main_LOG_to_Export("...style margin (%s) = %d (interpreted in HTML/CSS as px)\n", pom_STYLE_MARGIN, _global_style_margin); // reading of line height _main_LOG_to_Export("zisťujem line height...\n"); _global_line_height_perc = atoi(pom_LINE_HEIGHT_PERC); if (_global_line_height_perc > MAX_LINE_HEIGHT_PERC) { _global_line_height_perc = MAX_LINE_HEIGHT_PERC; _main_LOG_to_Export("\t(more than max... line height set to %d)\n", _global_line_height_perc); } if (_global_line_height_perc < MIN_LINE_HEIGHT_PERC) { _global_line_height_perc = MIN_LINE_HEIGHT_PERC; _main_LOG_to_Export("\t(less than min... line height set to %d)\n", _global_line_height_perc); } _main_LOG_to_Export("...line height (%s) = %d (interpreted in HTML/CSS as percent)\n", pom_LINE_HEIGHT_PERC, _global_line_height_perc); // načítanie témy _main_LOG_to_Export("zisťujem tému...\n"); _global_theme = atoi(pom_THEME); if (!PODMIENKA_EXPORTOVAT_THEME) { // undef téma _global_theme = THEME_UNDEF; _main_LOG_to_Export("\t(vzhľadom k neexportovaniu (podmienka) používam THEME_UNDEF)\n"); } _main_LOG_to_Export("...téma (%s) = %d\n", pom_THEME, _global_theme); // načítanie background color pre light tému _main_LOG_to_Export("zisťujem background color pre light tému...\n"); if (isValidHexaCode(pom_THEME_LIGHT_BACKGROUND_COLOR)) { mystrcpy(_global_theme_light_background_color, pom_THEME_LIGHT_BACKGROUND_COLOR, SMALL); } else { mystrcpy(_global_theme_light_background_color, THEME_BACKGROUND_COLOR_UNDEF, SMALL); } if (!PODMIENKA_EXPORTOVAT_THEME_LIGHT_BACKGROUND_COLOR) { // undef BG color pre light tému mystrcpy(_global_theme_light_background_color, THEME_BACKGROUND_COLOR_UNDEF, SMALL); _main_LOG_to_Export("\t(vzhľadom k neexportovaniu (podmienka) používam THEME_BACKGROUND_COLOR_UNDEF)\n"); } _main_LOG_to_Export("...background color pre light tému (%s) = %s\n", pom_THEME_LIGHT_BACKGROUND_COLOR, _global_theme_light_background_color); // načítanie background color pre dark tému _main_LOG_to_Export("zisťujem background color pre dark tému...\n"); if (isValidHexaCode(pom_THEME_DARK_BACKGROUND_COLOR)) { mystrcpy(_global_theme_dark_background_color, pom_THEME_DARK_BACKGROUND_COLOR, SMALL); } else { mystrcpy(_global_theme_dark_background_color, THEME_BACKGROUND_COLOR_UNDEF, SMALL); } Log("_global_theme_dark_background_color == %s...\n", _global_theme_dark_background_color); if (!PODMIENKA_EXPORTOVAT_THEME_DARK_BACKGROUND_COLOR) { // undef BG color pre dark tému mystrcpy(_global_theme_dark_background_color, THEME_BACKGROUND_COLOR_UNDEF, SMALL); _main_LOG_to_Export("\t(vzhľadom k neexportovaniu (podmienka) používam THEME_BACKGROUND_COLOR_UNDEF)\n"); } _main_LOG_to_Export("...background color pre dark tému (%s) = %s\n", pom_THEME_DARK_BACKGROUND_COLOR, _global_theme_dark_background_color); // reading sidemenu location _main_LOG_to_Export("reading sidemenu location...\n"); _global_sidemenu_location = atoi(pom_SIDEMENU_LOCATION); if (!PODMIENKA_EXPORTOVAT_SIDEMENU_LOCATION) { // undef sidemenu location _global_sidemenu_location = SIDEMENU_LOCATION_UNDEF; _main_LOG_to_Export("\t(vzhľadom k neurčenej sidemenu location používam SIDEMENU_LOCATION_UNDEF)\n"); } _main_LOG_to_Export("...sidemenu location (%s) = %d\n", pom_SIDEMENU_LOCATION, _global_sidemenu_location); Log("file_export == `%s'...\n", file_export); if (equals(file_export, STR_EMPTY) || equals(file_export, "+")) { // "+" -- error, chce pridavat do nicoho Log("continuing to export in FILE_EXPORT (`%s')...\n", FILE_EXPORT); } else { // rozparsovanie parametra modlitba Log("volanie atomodlitba() z main()... [1]\n"); _global_modlitba = atomodlitba(pom_MODLITBA); if (_global_opt_append == YES) { // pridame na koniec nazvu suboru "+" aby to vedel initExport() strcat(file_export, "+"); Log("budem appendovat (_global_opt_append == YES)...\n"); } if (initExport(file_export) == SUCCESS) { Log("initExport(`%s'): success\n", file_export); _main_LOG_to_Export("_global_jazyk == %s\n", nazov_jazyka(_global_jazyk)); } else { Log("initExport(`%s'): failure, \n", file_export); Log("continuing to export into DEFAULT_FILE_EXPORT (`%s')\n", DEFAULT_FILE_EXPORT); initExport(DEFAULT_FILE_EXPORT); _main_LOG_to_Export("_global_jazyk == %s\n", nazov_jazyka(_global_jazyk)); } _main_LOG_to_Export("volám hlavicka(); ... [case SCRIPT_PARAM_FROM_ARGV]\n"); // hlavicka((char *)html_title[_global_jazyk]); } } _main_LOG("spat po skonceni getArgv(); exporting to file `%s'...\n", FILE_EXPORT); if (query_type == PRM_SIMULACIA_QS) { Log("jumping to _main_SIMULACIA_QS (query_string == %s)...\n", query_string); goto _main_SIMULACIA_QS; } break; }// SCRIPT_PARAM_FROM_ARGV case SCRIPT_PARAM_FROM_QS: { _main_LOG_to_Export("params == SCRIPT_PARAM_FROM_QS\n"); // nasledujuca pasaz je tu preto, ze mozno bolo pouzite kombinovane aj query string, aj formular (teda treba citat aj systemove premenne WWW_...) _main_SIMULACIA_QS: _main_LOG_to_Export("---getting query type from query string (query_string == %s):\n", query_string); query_type = getQueryTypeFrom_QS(query_string); _main_LOG_to_Export("---getting query type from query string: finished.\n"); _main_LOG_to_Export("---parsing query string:\n"); ret_pom = parseQueryString(); _main_LOG_to_Export("---parsing query string: finished.\n"); _main_LOG_to_Export("---query_type == %d\n", query_type); _main_LOG_to_Export("---scanning for system variables WWW_...: started...\n"); // historical note: to enable `mixed' queries (both GET & POST => both inputs from query string and form (system variables WWW_...), first read WWW_... variables and then parse query string // POST queries are handled above using 'uncgi' _main_LOG_to_Export("spustam setForm();\n"); ret = setForm(); _main_LOG_to_Export("spat po skonceni setForm()\n"); // query_type = getQueryTypeFrom_WWW(); // zistili sme, aky je typ dotazu podla formulara if ((ret == SUCCESS) && (query_type != PRM_NONE) && (query_type != PRM_UNKNOWN)) { // znamena to teda, ze existuje systemova premenna, oznacujuca typ dotazu ==> treba nacitat z formulara resp. systemovych premennych WWW_... _main_LOG_to_Export("spustam getForm();\n"); ret = getForm(); _main_LOG_to_Export("params from system variables WWW_...:\n"); _main_LOG_to_Export_PARAMS; _main_LOG_to_Export("spat po skonceni getForm()\n"); _main_LOG_to_Export("2006-12-14: pom_MODLITBA == `%s'\n", pom_MODLITBA); } _main_LOG_to_Export("---scanning for system variables WWW_...:finished.\n"); // Default jazyk chceme nastavit az po volani getForm, WWW_j sa pouziva na prepinanie jazyka v Androide. if (equalsi(pom_JAZYK, STR_EMPTY)) { mystrcpy(pom_JAZYK, nazov_jazyka(JAZYK_SK), SMALL); Log("default jazyk (%s).\n", pom_JAZYK); } break; }// SCRIPT_PARAM_FROM_QS } // switch(params) _main_LOG_to_Export("query_type == "); switch (query_type) { case PRM_UNKNOWN: _main_LOG_to_Export("PRM_UNKNOWN\n"); break; case PRM_TABULKA: _main_LOG_to_Export("PRM_TABULKA\n"); break; case PRM_TXT: _main_LOG_to_Export("PRM_TXT\n"); break; case PRM_XML: _main_LOG_to_Export("PRM_XML\n"); break; case PRM_STATIC_TEXT: _main_LOG_to_Export("PRM_STATIC_TEXT\n"); break; case PRM_NONE: _main_LOG_to_Export("PRM_NONE\n"); break; case PRM_DATUM: _main_LOG_to_Export("PRM_DATUM\n"); break; case PRM_DETAILY: _main_LOG_to_Export("PRM_DETAILY\n"); break; case PRM_CEZ_ROK: _main_LOG_to_Export("PRM_CEZ_ROK\n"); break; case PRM_LIT_OBD: _main_LOG_to_Export("PRM_LIT_OBD\n"); break; case PRM_ANALYZA_ROKU: _main_LOG_to_Export("PRM_ANALYZA_ROKU\n"); break; case PRM_SVIATOK: _main_LOG_to_Export("PRM_SVIATOK\n"); break; case PRM_MESIAC_ROKA: _main_LOG_to_Export("PRM_MESIAC_ROKA\n"); break; case PRM_DNES: _main_LOG_to_Export("PRM_DNES\n"); break; case PRM_BATCH_MODE: _main_LOG_to_Export("PRM_BATCH_MODE\n"); break; default: _main_LOG_to_Export("(sem by sa to nemalo dostať)\n"); break; } _main_LOG_to_Export("_main_LOG_to_Export_PARAMS...\n"); _main_LOG_to_Export_PARAMS; if (query_type == PRM_MESIAC_ROKA) { mystrcpy(pom_DEN, STR_VSETKY_DNI, SMALL); query_type = PRM_DATUM; } // parsovanie jazyka kvôli jazykovým mutáciám _main_LOG_to_Export("zisťujem jazyk (pom_JAZYK == %s)...\n", pom_JAZYK); _global_jazyk = atojazyk(pom_JAZYK); if (_global_jazyk == JAZYK_UNDEF) { _global_jazyk = JAZYK_SK; _main_LOG_to_Export("\t(vzhľadom k neurčenému jazyku používam default)\n"); } _main_LOG_to_Export("...jazyk (%s) = %d, teda %s (%s)\n", pom_JAZYK, _global_jazyk, nazov_jazyka(_global_jazyk), skratka_jazyka[_global_jazyk]); _global_ritus = ritus_jazyka[_global_jazyk]; _main_LOG_to_Export("spúšťam setConfigDefaults()...\n"); setConfigDefaults(_global_jazyk); Log("volám _rozparsuj_parametre_OPT() | breviar_main()...\n"); _rozparsuj_parametre_OPT(); // parsovanie jazyka kvôli jazykovým mutáciám -- kalendár, napr. rehoľný (dané aj vyššie, ako jazyk) _main_LOG_to_Export("zisťujem kalendár (pom_KALENDAR == %s)...\n", pom_KALENDAR); _global_kalendar = atokalendar(pom_KALENDAR); if (_global_kalendar == KALENDAR_NEURCENY) { _global_kalendar = KALENDAR_VSEOBECNY; _main_LOG_to_Export("\t(vzhľadom k neurčenému kalendáru používam default -- všeobecný kalendár)\n"); } _main_LOG_to_Export("...kalendár (%s) = %d, teda %s (%s)\n", pom_KALENDAR, _global_kalendar, nazov_kalendara_short[_global_kalendar], skratka_kalendara[_global_kalendar]); normalize_calendar_for_language(); // načítanie názvu fontu kvôli rôznym fontom _main_LOG_to_Export("zisťujem font...\n"); _global_font = atofont(pom_FONT); _main_LOG_to_Export("...font (%s) = %d, teda %s\n", pom_FONT, _global_font, nazov_fontu[_global_font]); // for FONT_CUSTOM, we still use pom_FONT as global variable unless empty // načítanie veľkosti fontu _main_LOG_to_Export("zisťujem font size...\n"); _global_font_size = atofontsize(pom_FONT_SIZE); if (_global_font_size == FONT_SIZE_UNDEF) { _global_font_size = FONT_SIZE_CSS; _main_LOG_to_Export("\t(vzhľadom k neurčenej font size používam default -- brať font size z CSS)\n"); } _main_LOG_to_Export("...font size (%s) = %d, teda %s\n", pom_FONT_SIZE, _global_font_size, nazov_font_size(_global_font_size)); // reading of font size in pt (override) _main_LOG_to_Export("zisťujem font size pt...\n"); _global_font_size_pt = atoi(pom_FONT_SIZE_PT); /* if (_global_font_size_pt == FONT_SIZE_UNDEF) { _global_font_size_pt = FONT_SIZE_PT_DEFAULT; _main_LOG_to_Export("\t(vzhľadom k neurčenej font size pt používam default)\n"); } */ _main_LOG_to_Export("...font size pt (%s) = %d\n", pom_FONT_SIZE_PT, _global_font_size_pt); // reading of style margin _main_LOG_to_Export("zisťujem style margin...\n"); _global_style_margin = atoi(pom_STYLE_MARGIN); if (_global_style_margin > MAX_STYLE_MARGIN) { _global_style_margin = MAX_STYLE_MARGIN; _main_LOG_to_Export("\t(more than max... style margin set to %d)\n", _global_style_margin); } if (_global_style_margin < MIN_STYLE_MARGIN) { _global_style_margin = MIN_STYLE_MARGIN; _main_LOG_to_Export("\t(less than min... style margin set to %d)\n", _global_style_margin); } _main_LOG_to_Export("...style margin (%s) = %d (interpreted in HTML/CSS as px)\n", pom_STYLE_MARGIN, _global_style_margin); // reading of line height _main_LOG_to_Export("zisťujem line height...\n"); _global_line_height_perc = atoi(pom_LINE_HEIGHT_PERC); if (_global_line_height_perc > MAX_LINE_HEIGHT_PERC) { _global_line_height_perc = MAX_LINE_HEIGHT_PERC; _main_LOG_to_Export("\t(more than max... line height set to %d)\n", _global_line_height_perc); } if (_global_line_height_perc < MIN_LINE_HEIGHT_PERC) { _global_line_height_perc = MIN_LINE_HEIGHT_PERC; _main_LOG_to_Export("\t(less than min... line height set to %d)\n", _global_line_height_perc); } _main_LOG_to_Export("...line height (%s) = %d (interpreted in HTML/CSS as percents)\n", pom_LINE_HEIGHT_PERC, _global_line_height_perc); // načítanie témy _main_LOG_to_Export("zisťujem tému...\n"); _global_theme = atoi(pom_THEME); if (!PODMIENKA_EXPORTOVAT_THEME) { // undef téma _global_theme = THEME_UNDEF; _main_LOG_to_Export("\t(vzhľadom k neexportovaniu (podmienka) používam THEME_UNDEF)\n"); } _main_LOG_to_Export("...téma (%s) = %d\n", pom_THEME, _global_theme); // načítanie background color pre light tému _main_LOG_to_Export("zisťujem background color pre light tému...\n"); if (isValidHexaCode(pom_THEME_LIGHT_BACKGROUND_COLOR)) { mystrcpy(_global_theme_light_background_color, pom_THEME_LIGHT_BACKGROUND_COLOR, SMALL); } else { mystrcpy(_global_theme_light_background_color, THEME_BACKGROUND_COLOR_UNDEF, SMALL); } if (!PODMIENKA_EXPORTOVAT_THEME_LIGHT_BACKGROUND_COLOR) { // undef BG color pre light tému mystrcpy(_global_theme_light_background_color, THEME_BACKGROUND_COLOR_UNDEF, SMALL); _main_LOG_to_Export("\t(vzhľadom k neexportovaniu (podmienka) používam THEME_BACKGROUND_COLOR_UNDEF)\n"); } _main_LOG_to_Export("...background color pre light tému (%s) = %s\n", pom_THEME_LIGHT_BACKGROUND_COLOR, _global_theme_light_background_color); // načítanie background color pre dark tému _main_LOG_to_Export("zisťujem background color pre dark tému...\n"); if (isValidHexaCode(pom_THEME_DARK_BACKGROUND_COLOR)) { mystrcpy(_global_theme_dark_background_color, pom_THEME_DARK_BACKGROUND_COLOR, SMALL); } else { mystrcpy(_global_theme_dark_background_color, THEME_BACKGROUND_COLOR_UNDEF, SMALL); } Log("_global_theme_dark_background_color == %s...\n", _global_theme_dark_background_color); if (!PODMIENKA_EXPORTOVAT_THEME_DARK_BACKGROUND_COLOR) { // undef BG color pre dark tému mystrcpy(_global_theme_dark_background_color, THEME_BACKGROUND_COLOR_UNDEF, SMALL); _main_LOG_to_Export("\t(vzhľadom k neexportovaniu (podmienka) používam THEME_BACKGROUND_COLOR_UNDEF)\n"); } _main_LOG_to_Export("...background color pre dark tému (%s) = %s\n", pom_THEME_DARK_BACKGROUND_COLOR, _global_theme_dark_background_color); // reading sidemenu location _main_LOG_to_Export("reading sidemenu location...\n"); _global_sidemenu_location = atoi(pom_SIDEMENU_LOCATION); if (!PODMIENKA_EXPORTOVAT_SIDEMENU_LOCATION) { // undef sidemenu location _global_sidemenu_location = SIDEMENU_LOCATION_UNDEF; _main_LOG_to_Export("\t(vzhľadom k neurčenej sidemenu location používam SIDEMENU_LOCATION_UNDEF)\n"); } _main_LOG_to_Export("...téma (%s) = %d\n", pom_SIDEMENU_LOCATION, _global_sidemenu_location); LOG_ciara; if (ret_pom != SUCCESS) { ALERT; Export("Neboli zadané vhodné parametre (1; params == %d).\n", params); Export(HTML_P_BEGIN"Chyba: %s\n", bad_param_str); } if (query_type != PRM_UNKNOWN) { if (ret == SUCCESS) { _main_LOG_to_Export("now allocating memory (2)...\n"); if (_allocate_global_var() == FAILURE) { goto _main_end; } LOG_ciara; // inicializácia _global_linky _main_LOG_to_Export("pom_LINKY == `%s'\n", pom_LINKY); #if defined(OS_linux) || defined(OS_Windows_Ruby) #if defined(BEHAVIOUR_WEB) _global_linky = 1; // zobrazovať linky (pre batch mód: použiť URL) #elif defined(BEHAVIOUR_CMDLINE) _global_linky = 0; // nezobrazovať linky (pre batch mód: použiť filenames) #else #error Unsupported behaviour (not defined in mysystem.h/mysysdef.h) #endif _main_LOG_to_Export("/* linux resp. Windows/Ruby: teraz som nastavil _global_linky == %d */\n", _global_linky); #elif defined(OS_Windows) || defined(OS_DOS) if ((pom_LINKY != NULL) && (!equals(pom_LINKY, STR_EMPTY))) { _global_linky = atoi(pom_LINKY); _main_LOG_to_Export("/* Windows resp. DOS: teraz som nastavil _global_linky == %d */\n", _global_linky); } #else #error Unsupported operating system (not defined in mysystem.h) #endif // inak ostane default hodnoty nastavene na zaciatku pre kazdy operacny system zvlast _main_LOG_to_Export("úprava include adresára...\n"); // dokončenie úpravy include adresára podľa jazyka // uprava ciest: cfg_INCLUDE_DIR_default a include_dir | tzv. miesto 2004-03-17_TUTOLA _main_LOG_to_Export("\tcfg_INCLUDE_DIR_default = `%s'\n\tinclude_dir = `%s'\n", cfg_INCLUDE_DIR_default, include_dir); if (strcmp(include_dir, STR_EMPTY) == 0) { _main_LOG_to_Export("\tberiem cfg_INCLUDE_DIR_default...\n"); mystrcpy(include_dir, cfg_INCLUDE_DIR_default, MAX_STR); } else { _main_LOG_to_Export("\tberiem include_dir...\n"); } // prvá kontrola, či include_dir končí na backslash resp. slash len = strlen(include_dir) - 1; _main_LOG_to_Export("prvá kontrola include adresára (či končí oddeľovačom `%c' [dĺžka %ld])...\n", PATH_SEPARATOR, len); if (include_dir[len] != (short int)PATH_SEPARATOR) { include_dir[len + 1] = PATH_SEPARATOR; len++; _main_LOG_to_Export("\tupravené (pridané na koniec reťazca): %s\n", include_dir); } else { _main_LOG_to_Export("\tok.\n"); } _main_LOG_to_Export("kontrola, či include adresár končí reťazcom `%s'...\n", postfix_jazyka[_global_jazyk]); // treba najskôr skontrolovať, či include dir už náhodou neobsahuje aj prilepený postfix jazyka; include_dir[len] alebo include_dir[len + 1] obsahuje PATH_SEPARATOR // teda znaky jeden a dva pred by mali obsahovať postfix_jazyka[_global_jazyk][0] a [1] | nemožno kontrolovať fixne 2 znaky, pretože postfix_jazyka môže byť dlhší (napr. pre "czop") char* include_dir_pom; long len_postfix_jazyka = strlen(postfix_jazyka[_global_jazyk]); short int kontrola_prilepenia_postfix_jazyka = NIE; include_dir_pom = strstr(include_dir, postfix_jazyka[_global_jazyk]); if (include_dir_pom != NULL) { _main_LOG_to_Export("len_postfix_jazyka = %ld; include_dir_pom = %s\n", len_postfix_jazyka, include_dir_pom); if (include_dir[len] == (short int)PATH_SEPARATOR) { _main_LOG_to_Export("include_dir[len] == (short int)PATH_SEPARATOR\n"); if ((short int)strlen(include_dir_pom) == len_postfix_jazyka + 1) { kontrola_prilepenia_postfix_jazyka = ANO; } } else if (include_dir[len + 1] == (short int)PATH_SEPARATOR) { _main_LOG_to_Export("include_dir[len + 1] == (short int)PATH_SEPARATOR\n"); if ((short int)strlen(include_dir_pom) == len_postfix_jazyka) { kontrola_prilepenia_postfix_jazyka = ANO; } } else _main_LOG_to_Export("include_dir[len/len + 1] != (short int)PATH_SEPARATOR\n"); }// if (include_dir_pom != NULL) else { _main_LOG_to_Export("include_dir_pom == NULL (teda include_dir[] neobsahuje postfix_jazyka (%s))\n", postfix_jazyka[_global_jazyk]); } if (kontrola_prilepenia_postfix_jazyka == ANO) { _main_LOG_to_Export("include adresár končí reťazcom `%s' - nie je potrebné pridávať\n", postfix_jazyka[_global_jazyk]); } else { _main_LOG_to_Export("include adresára NEkončí reťazcom `%s' - je potrebné pridávať (aktuálne include_dir == %s; lenght == %d; len == %ld): ", postfix_jazyka[_global_jazyk], include_dir, strlen(include_dir), len); // doplnenie jazyka kvôli jazykovým mutáciám _main_LOG_to_Export("upravujem include adresár podľa jazyka (%d - %s)...\n", _global_jazyk, nazov_jazyka(_global_jazyk)); // dokončenie úpravy include adresára podľa jazyka if (strlen(postfix_jazyka[_global_jazyk]) > 0) { // pôvodne sme uvažovali, že include_dir bude napr. include/cz, incluce/en; teraz bude radšej include_cz, include_en t.j. nahraď backslash resp. slash znakom underscore include_dir[len] = UNDERSCORE; strcat(include_dir, postfix_jazyka[_global_jazyk]); _main_LOG_to_Export("\tupravené (pridané na koniec reťazca): %s\n", include_dir); } } // druhá kontrola, či include_dir končí na backslash resp. slash len = strlen(include_dir) - 1; _main_LOG_to_Export("druhá kontrola include adresára (či končí oddeľovačom `%c' [dĺžka %d])...\n", PATH_SEPARATOR, len); if (include_dir[len] != (short int)PATH_SEPARATOR) { include_dir[len + 1] = PATH_SEPARATOR; _main_LOG_to_Export("\tupravené (pridané na koniec reťazca): %s\n", include_dir); } else { _main_LOG_to_Export("\tok.\n"); } _main_LOG_to_Export("include súbory budú z adresára include_dir = `%s'\n", include_dir); LOG_ciara; Log("_global_opt_batch_monthly == %d\n", _global_opt_batch_monthly); // rozparsovanie premennej pom_EXPORT_MONTHLY, nastavenej v getArgv() [pôvodne bolo až v _main_batch_mode()] if (_global_opt_batch_monthly == ANO) { // rozparsovanie premennej pom_EXPORT_MONTHLY, nastavenej v getArgv() Log("rozparsovanie premennej pom_EXPORT_MONTHLY, nastavenej v getArgv()\n"); export_monthly_druh = atoi(pom_EXPORT_MONTHLY); if (export_monthly_druh <= 0) { export_monthly_druh = 0; // možno ide o znakový reťazec nekonvertovateľný na číslo; berieme to ako default správanie } Log("export_monthly_druh == %d\n", export_monthly_druh); }// _global_opt_batch_monthly == ANO _main_LOG_to_Export("_global_jazyk == %s\n", nazov_jazyka(_global_jazyk)); // rozparsovanie parametra modlitba Log("volanie atomodlitba() z main()... [2]\n"); _global_modlitba = atomodlitba(pom_MODLITBA); // rozparsovanie parametrov opt...; v prípade nenastavenia sa nastaví hodnota GLOBAL_OPTION_NULL Log("volám _rozparsuj_parametre_OPT z main() | breviar_main()...\n"); _rozparsuj_parametre_OPT(); Log("_rozparsuj_parametre_OPT z main() | breviar_main(): hotovo.\n"); // setting global variable used for CZ hymns if (je_CZ_hymny_k_volnemu_vyberu) { sprintf(_special_anchor_prefix_CZ_hymnus, "%s", CZ_HYMNUS_PREFIX); sprintf(_special_anchor_postfix_CZ_hymnus_cezrok, "%s", CZ_HYMNUS_POSTFIX); } else { mystrcpy(_special_anchor_prefix_CZ_hymnus, STR_EMPTY, SMALL); mystrcpy(_special_anchor_postfix_CZ_hymnus_cezrok, STR_EMPTY, SMALL); } Log("_special_anchor_prefix_CZ_hymnus == %s\n", _special_anchor_prefix_CZ_hymnus); Log("_special_anchor_postfix_CZ_hymnus_cezrok == %s\n", _special_anchor_postfix_CZ_hymnus_cezrok); // setting gloval variable used for CZ alternative 2nd readings if (je_alternativne_2citanie) { sprintf(_special_anchor_prefix_CZ_hymnus_CZ_2cit, "%s", ALT_TEXT_PREFIX); } else { mystrcpy(_special_anchor_prefix_CZ_hymnus_CZ_2cit, STR_EMPTY, SMALL); } Log("_special_anchor_prefix_CZ_hymnus_CZ_2cit == %s\n", _special_anchor_prefix_CZ_hymnus_CZ_2cit); Log("export_monthly_druh == %d\n", export_monthly_druh); // setting global variable used for 1st & 2nd reading -- must be set AFTER the analysis of the year/day; currently multiple-times called in _apply_anchor_filename_changes_for_two_years_cycle() // rozparsovanie parametrov kvôli hlavičke _main_LOG_to_Export("volám _rozparsuj_parametre_DEN_MESIAC_ROK(); ...\n"); local_den = local_mesiac = local_rok = local_modlitba = 0; _rozparsuj_parametre_DEN_MESIAC_ROK(pom_DEN, pom_MESIAC, pom_ROK, pom_MODLITBA, local_den, local_mesiac, local_rok, local_modlitba); LOG_ciara; // nastavenie titulku pre hlavičku if (query_type != PRM_XML) { init_global_string_as_html_title(local_den, local_mesiac, local_rok, local_modlitba); } // export hlavičky _main_LOG_to_Export("[pred volaním _main_... funkcií v switch(query_type)]: "); if (query_type == PRM_XML) { _main_LOG_to_Export("volám xml_hlavicka(); ...\n"); xml_hlavicka(); } else { _main_LOG_to_Export("volám hlavicka(_global_string == `%s'); ...\n", _global_string); hlavicka(_global_string); } // main switch Log("export_monthly_druh == %d\n", export_monthly_druh); LOG_ciara; _main_LOG_to_Export("teraz nasleduje vykonanie jadra programu podla parametrov: switch podla query_type...\n"); switch (query_type) { case PRM_DETAILY: // presne to iste co PRM_DATUM s jedinkym rozdielom: co sa tyka formularov, prvy (uvodny) formular pre PRM_DATUM vycisti modlitbu // (premenna pom_MODLITBA, ktora sa nacita zo systemovej premennej WWW_MODLITBA) -- pretoze z inej casti fomrulara sa tam nieco dostane... case PRM_DATUM: _main_LOG_to_Export("spustam _main_rozbor_dna(d = %d, m = %d, r = %d, p = %d; stringy: pom_DEN = %s, pom_MESIAC = %s, pom_ROK = %s, pom_MODLITBA = %s, pom_DALSI_SVATY = %s);\n", local_den, local_mesiac, local_rok, local_modlitba, pom_DEN, pom_MESIAC, pom_ROK, pom_MODLITBA, pom_DALSI_SVATY); _main_rozbor_dna(query_type, local_den, local_mesiac, local_rok, local_modlitba, pom_DALSI_SVATY); _main_LOG_to_Export("po skonceni _main_rozbor_dna();\n"); break; case PRM_TXT: // export do TXT pre RKC case PRM_XML: // XML export _main_LOG_to_Export("spustam _main_rozbor_dna_txt_xml(typ == %d; d = %d, m = %d, r = %d; stringy: pom_DEN = %s, pom_MESIAC = %s, pom_ROK = %s, pom_MODLITBA = %s, pom_DALSI_SVATY = %s);\n", local_den, local_mesiac, local_rok, local_modlitba, pom_DEN, pom_MESIAC, pom_ROK, pom_MODLITBA, pom_DALSI_SVATY); _main_rozbor_dna_txt_xml(query_type, local_den, local_mesiac, local_rok, local_modlitba, pom_DALSI_SVATY); _main_LOG_to_Export("po skonceni _main_rozbor_dna_txt_xml();\n"); break; case PRM_STATIC_TEXT: // includovanie statického textu _main_LOG_to_Export("spustam _main_static_text(pom_STATIC_TEXT = %s, pom_MODL_ORDINARIUM = %s);\n", pom_STATIC_TEXT, pom_MODL_ORDINARIUM); _main_static_text(local_rok, local_modlitba); _main_LOG_to_Export("po skonceni _main_static_text();\n"); break; case PRM_CEZ_ROK: _main_LOG_to_Export("spustam _main_zaltar(%s, %s, %s);\n", pom_DEN_V_TYZDNI, pom_TYZDEN, pom_MODLITBA); _main_zaltar(pom_DEN_V_TYZDNI, pom_TYZDEN, pom_MODLITBA); _main_LOG_to_Export("po skonceni _main_zaltar();\n"); break; case PRM_LIT_OBD: // výber dňa v liturgickom období _main_LOG_to_Export("spustam _main_liturgicke_obdobie(%s, %s, %s, %s, %s);\n", pom_DEN_V_TYZDNI, pom_TYZDEN, pom_MODLITBA, pom_LIT_OBD, pom_LIT_ROK); _main_liturgicke_obdobie(pom_DEN_V_TYZDNI, pom_TYZDEN, pom_MODLITBA, pom_LIT_OBD, pom_LIT_ROK); _main_LOG_to_Export("po skonceni _main_liturgicke_obdobie();\n"); break; case PRM_SVIATOK: _main_LOG_to_Export("spustam sviatok(%s);\n", pom_SVIATOK); _main_sviatok(pom_SVIATOK); _main_LOG_to_Export("po skonceni sviatok();\n"); break; case PRM_ANALYZA_ROKU: _main_LOG_to_Export("spustam analyza_roku(%s);\n", pom_ANALYZA_ROKU); _main_analyza_roku(pom_ANALYZA_ROKU); _main_LOG_to_Export("po skonceni analyza_roku();\n"); break; case PRM_DNES: _main_LOG_to_Export("spustam _main_dnes(%s, %s);\n", pom_MODLITBA, pom_DALSI_SVATY); _main_dnes(pom_MODLITBA, pom_DALSI_SVATY); _main_LOG_to_Export("po skonceni _main_dnes();\n"); break; case PRM_TABULKA: _main_LOG_to_Export("spustam _main_tabulka();\n"); _main_tabulka(pom_ROK_FROM, pom_ROK_TO, pom_LINKY); _main_LOG_to_Export("po skonceni _main_tabulka();\n"); break; case PRM_BATCH_MODE: _main_LOG_to_Export("spustam _main_batch_mode();\n"); Export("<h2>Batch mode (dávkové použitie)</h2>\n"); // vyuzivam parametre, ktore boli nastavene _main_batch_mode(// vyuzite parametre sa sice volaju haluzne, ale sluzia pre den from (prve tri), den to (dalsie tri), este jedno mam reserved; 2003-07-04 pom_DEN, pom_MESIAC, pom_ROK, pom_ROK_FROM, pom_ROK_TO, pom_MODLITBA, pom_DALSI_SVATY, pom_LINKY); _main_LOG_to_Export("po skonceni _main_batch_mode();\n"); Export(HTML_P_BEGIN"Výsledný batch skript (dávkový súbor) sa nachádza v súbore " HTML_A_HREF_BEGIN "\"%s\">%s" HTML_A_END "." HTML_LINE_BREAK, name_batch_file, name_batch_file); Export("Po spustení tento skript vygeneruje modlitby pre dané obdobie \n"); Export("do súborov <span " HTML_CLASS_TT ">yyyy-mm-dd_xp.htm" HTML_SPAN_END ", kde význam \n"); Export("jednotlivých častí mena súboru je nasledovný:\n"); Export("<ul " HTML_CLASS_LEVEL1 ">\n"); Export("<li><" HTML_SPAN_PARAMETER ">yyyy" HTML_SPAN_END " | rok</li>\n"); Export("<li><" HTML_SPAN_PARAMETER ">mm" HTML_SPAN_END " | mesiac (napr. <" HTML_SPAN_VALUE ">05" HTML_SPAN_END " pre máj)</li>\n"); Export("<li><" HTML_SPAN_PARAMETER ">dd" HTML_SPAN_END " | deň (napr. <" HTML_SPAN_VALUE ">07" HTML_SPAN_END ")</li>\n"); Export("<li><" HTML_SPAN_PARAMETER ">x" HTML_SPAN_END " | poradie svätého (<" HTML_SPAN_VALUE ">0" HTML_SPAN_END " až <" HTML_SPAN_VALUE ">%d" HTML_SPAN_END ")</li>\n", PORADIE_PM_SOBOTA); Export("<li><" HTML_SPAN_PARAMETER ">p" HTML_SPAN_END " | modlitba (<" HTML_SPAN_VALUE ">r" HTML_SPAN_END " = ranné chvály, <" HTML_SPAN_VALUE ">v" HTML_SPAN_END " = vešpery)</li>\n"); Export("</ul>\n"); Export(HTML_P_BEGIN"V prípade, že je použitý parameter <" HTML_SPAN_PARAMETER ">a" HTML_SPAN_END " (append), \n"); Export("bude vytvorený iba jeden súbor s nasledovným menom:\n"); Export("<span " HTML_CLASS_TT ">yyyy-mm-dd_YYYY-MM-DD.htm" HTML_SPAN_END ", kde význam \n"); Export("jednotlivých častí mena súboru je nasledovný:\n"); Export("<ul " HTML_CLASS_LEVEL1 ">\n"); Export("<li><" HTML_SPAN_PARAMETER ">yyyy" HTML_SPAN_END " | rok počiatočného dátumu</li>\n"); Export("<li><" HTML_SPAN_PARAMETER ">mm" HTML_SPAN_END " | mesiac počiatočného dátumu</li>\n"); Export("<li><" HTML_SPAN_PARAMETER ">dd" HTML_SPAN_END " | deň počiatočného dátumu</li>\n"); Export("<li><" HTML_SPAN_PARAMETER ">YYYY" HTML_SPAN_END " | rok koncového dátumu</li>\n"); Export("<li><" HTML_SPAN_PARAMETER ">MM" HTML_SPAN_END " | mesiac koncového dátumu</li>\n"); Export("<li><" HTML_SPAN_PARAMETER ">DD" HTML_SPAN_END " | deň koncového dátumu</li>\n"); Export("</ul>\n"); break; default: ALERT; Export("Interná chyba programu.\n"); Export(HTML_LINE_BREAK"(switch(query_type); case == default)\n"); break; } // switch(query_type) _main_LOG_to_Export("volám patka(); ... [po volaní _main_... funkcií v switch(query_type)...]\n"); if (query_type == PRM_XML) { xml_patka(); } else { patka(); // doplnené (ešte pred dealokovanie premenných) } #ifndef MODEL_linux_citania _deallocate_global_var(); #endif }// if (ret == SUCCESS) else if (ret == FAILURE) { // uz sa vyriesilo vyssie, dufam :-) _main_LOG_to_Export("ret == FAILURE\n"); } else if (ret == NO_RESULT) { // vtedy, ked // - case SCRIPT_PARAM_FROM_FORM // - query_type == PRM_NONE // - historicka poznamka: povodne spustilo sa prazdny_formular(); // - v skutocnosti _main_prazdny_formular(); _main_LOG_to_Export("ret == NO_RESULT\n"); } }// if (query_type != PRM_UNKNOWN) else { if (ret_pom != SUCCESS) { ALERT; Export("Neboli zadané vhodné parametre (2; params == %d).\n", params); Export(HTML_P_BEGIN"Chyba: %s\n", bad_param_str); } // else: netreba vypisovať, lebo sa vypísalo už vyššie } _main_LOG_to_Export("Deallocating memory...\n"); _main_LOG_to_Export("query_string\n"); free(query_string); _main_LOG_to_Export("_global_buf\n"); free(_global_buf); _main_LOG_to_Export("_global_buf2\n"); free(_global_buf2); _main_LOG_to_Export("...done.\n"); _main_end: _main_LOG_to_Export("volám patka(); ... [_main_end:...]\n"); if (query_type == PRM_XML) { xml_patka(); } else { patka(); } if (closeExport() == EOF) { Log("closeExport(): error closing file (return == EOF)\n"); } else { Log("closeExport(): success.\n"); } closeLog(); return 0; }// breviar_main() #ifndef SKIP_MAIN int main(int argc, const char** argv) { int ret = breviar_main(argc, argv); #ifdef EXPORT_TO_STRING char* result = getExportedString(); int resultLength = strlen(result); fwrite(result, resultLength, 1, stdout); #endif return ret; } #endif #endif // __BREVIAR_CPP_