%% options copyright owner = Dirk Krause copyright year = 2012-2014 license = bsd %% module #include "dk3all.h" #include "itadmin.h" $!trace-include /** Keywords used by the module. */ static char const * const itadmin_license_c8_kw[] = { $!string-table # # 0: Newline # \n # # 1: Space # # # 2: File name for license report # licenses.tex # # 3: File open mode: write # w # # 4: Opening a chapter # \\chapter{ # # 5: Ending a LaTeX command # } # # 6: Clearpage command # \\clearpage # # 7: End long table # \\\\\n\\end{longtable} # # 8: Section # \\section{ # # 9: Subsection # \\subsection{ # # 10: Subsubsection # \\subsubsection{ # # 11: # pdftitle={ # # 12: # pdfsubject={ # # 13: # pdfauthor={ # # 14: # pdfcreator={itadmin - http://dktools.sourceforge.net/} # # 15: # \\author{ # # 16: # \\title{ # # 17: Comma # , # # 18: Begin long table # \\begin{longtable}{lll} # # 19 # \\endfirsthead # # 20 # \\endhead # # 21 # \\endfoot # # 22 # \\endlastfoot # # 23 # \\\\[0.5em] # # 24 # & # # 25 # \\multicolumn{2}{l}{ # # 26 # \\\\* # # 27 # \\textit{ # # 28 # \\chapter[ # # 29 # ]{ # # 30 # \\section[ # # 31 # \\emph{ # # 32 # \\/} $!end }; /** Start of LaTeX source. */ static char const * const itadmin_license_file_start1a[] = { $!text \documentclass[titlepage,origlongtable]{scrbook} \KOMAoptions{paper=a4} \KOMAoptions{fontsize=12pt} $!end }; /** Start of LaTeX source. */ static char const * const itadmin_license_file_start1b[] = { $!text \documentclass[12pt]{book} $!end }; /** LaTeX packages after ngerman. */ static char const * const itadmin_license_file_start4[] = { $!text \usepackage{ifpdf} \usepackage[utf8]{inputenc} \usepackage{mathptmx} \usepackage[scaled=.92]{helvet} \usepackage{courier} \usepackage[T1]{fontenc} \usepackage{textcomp} \usepackage{latexsym} \usepackage{varioref} \usepackage{color} \usepackage{makeidx} \usepackage{longtable} \makeindex \ifpdf \usepackage[activate=normal]{pdfcprot} \pdfcompresslevel=9 \usepackage[ pdftex, colorlinks=true, pdfpagemode=UseNone, pdfstartview={XYZ 0 835 1.25}, bookmarksnumbered, $!end }; /** LaTeX package after hyperref options for title, subject, author. */ static char const * const itadmin_license_file_start2[] = { $!text ]{hyperref} \else \usepackage[dvips,colorlinks=true,linkcolor=black]{hyperref} \fi \parindent0cm $!end }; /** Renewcommand used only for koma-script. */ static char const * const itadmin_license_file_start3a[] = { $!text \renewcommand*{\sectfont}{\bfseries} $!end }; /** Final commands after title and author. */ static char const * const itadmin_license_file_start3[] = { $!text \setcounter{secnumdepth}{1} \begin{document} $!end }; /** LaTeX file end. */ static char const * const itadmin_license_file_end[] = { $!text \end{document} $!end }; /** Write data for one license. @param job Job structure. @param os Output stream. @param lic License to write. */ static void itadmin_license_write_license_type( itadmin_job *job, dk3_stream_t *os, itadmin_license *lic ) { char const *ltn; int ie; ltn = NULL; if(lic->ltype) { ltn = (lic->ltype)->sn; if((lic->ltype)->ln) { ltn = (lic->ltype)->ln; } } dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); if(ltn) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ltn); } else { ie = dk3app_get_encoding(job->app); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[53], ie); } dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); } /** Check whether we must write the license owner because the host owner differs from the license owner. @param user License owner. @param host Host on which the license is used. @return 1 if host and license owner differ, 0 if they match. */ static int itadmin_license_must_write_license_owner(itadmin_user *user, itadmin_host *host) { int back = 0; if(user) { if(user->us) { if(host) { if(host->un) { if((host->un)->us) { if(dk3str_c8_cmp(user->us, (host->un)->us)) { back = 1; } } } else { } } else { } } } return back; } /** Check whether we must write the host owner because the host owner differs from the license owner. @param user License owner. @param host Host on which the license is used. @return 1 if host and license owner differ, 0 if they match. */ static int itadmin_license_must_write_host_owner(itadmin_user *user, itadmin_host *host) { int back = 0; if(host) { if(host->un) { if(user) { if((host->un)->us) { if(user->us) { if(dk3str_c8_cmp((host->un)->us, user->us)) { back = 1; } } else { back = 1; } } } else { back = 1; } } } return back; } /** Write data for one license. @param job Job structure. @param os Output stream. @param lic License to write. @param pman Software manufacturuer name. @param pprod Software product name. @param mn Flag: Write software manufacturer name. @param pn Flag: Write software product name. @param un Flag: Write user name who owns the license. @param hn Flag: Write host name where license is used. @param ond On difference between license owner and host owner: 0=do nothing, 1=write host owner, 2=write license owner */ static void itadmin_license_write_license( itadmin_job *job, dk3_stream_t *os, itadmin_license *lic, char const *pman, char const *pprod, int mn, int pn, int un, int hn, int ond ) { char bu[128]; int ie; ie = dk3app_get_encoding(job->app); sprintf(bu, "%lu", lic->pk); dk3stream_c8_fputs(os, bu); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); if((mn) && (pman)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pman); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); if((pn) && (pprod)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); } dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); itadmin_license_write_license_type(job, os, lic); } else { if((pn) && (pprod)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); itadmin_license_write_license_type(job, os, lic); } else { itadmin_license_write_license_type(job, os, lic); } } if(lic->notes) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, lic->notes); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); } if(un) { if(lic->owner) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); itadmin_tool_write_user_latex_long(job, os, lic->owner); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); } } if(hn) { if(lic->host) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); if((lic->host)->sn) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (lic->host)->sn); } dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); if((lic->host)->co) { dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (lic->host)->co); } switch(ond) { case 1: { /* On difference write host owner. */ if(itadmin_license_must_write_host_owner(lic->owner, lic->host)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); if(mn) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[27]); } itadmin_tool_write_user_latex_long(job, os, (lic->host)->un); if(mn) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); } dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); } } break; case 2: { /* On difference write license owner. */ if(itadmin_license_must_write_license_owner(lic->owner, lic->host)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[27]); itadmin_tool_write_user_latex_long(job, os, lic->owner); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); } } break; } } } else { if((lic->host) && (lic->owner)) { switch(ond) { case 1: { if(itadmin_license_must_write_host_owner(lic->owner, lic->host)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[27]); itadmin_tool_write_user_latex_long(job, os, (lic->host)->un); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); } } break; case 2: { if(itadmin_license_must_write_license_owner(lic->owner, lic->host)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[27]); itadmin_tool_write_user_latex_long(job, os, lic->owner); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); } } break; } } } if(lic->order) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[54], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, lic->order); } if(((lic->d_del).d) && ((lic->d_del).m) && ((lic->d_del).y)) { if(job->gdate) { sprintf( bu, "%02d.%02d.%04d", (lic->d_del).d, (lic->d_del).m, (lic->d_del).y ); } else { sprintf( bu, "%04d-%02d-%02d", (lic->d_del).y, (lic->d_del).m, (lic->d_del).d ); } dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[55], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3stream_c8_fputs(os, bu); } if(lic->i_del) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[56], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, lic->i_del); } if(((lic->d_inv).d) && ((lic->d_inv).m) && ((lic->d_inv).y)) { if(job->gdate) { sprintf( bu, "%02d.%02d.%04d", (lic->d_inv).d, (lic->d_inv).m, (lic->d_inv).y ); } else { sprintf( bu, "%04d-%02d-%02d", (lic->d_inv).y, (lic->d_inv).m, (lic->d_inv).d ); } dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[57], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3stream_c8_fputs(os, bu); } if(lic->i_inv) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[58], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, lic->i_inv); } } /** Get software manufacturer name. @param li License @return Software manufacturer name on success, NULL on error. */ static char const * itadmin_license_get_manufacturer(itadmin_license *li) { char const *back = NULL; if(li->prod) { if((li->prod)->mn) { back = ((li->prod)->mn)->sn; if(((li->prod)->mn)->ln) { back = ((li->prod)->mn)->ln; } } } return back; } /** Get software product name. @param li License. @return Product name on success, NULL on error. */ static char const * itadmin_license_get_product(itadmin_license *li) { char const *back = NULL; if(li->prod) { back = (li->prod)->sn; if((li->prod)->ln) { back = (li->prod)->ln; } } return back; } /** Check whether manufacturer and/or product have changed. @param pman @param prev_man @param pprod @param prev_prod @return 0=no change, 1=product change, 2=manufacturer change. */ static int itadmin_license_change_level( char const *pman, char const *prev_man, char const *pprod, char const *prev_prod ) { int back = 0; $? "+ itadmin_license_change_level \"%s\"=\"%s\" \"%s\"=\"%s\"", TR_STR(pman), TR_STR(prev_man), TR_STR(pprod), TR_STR(prev_prod) if(pprod) { if(prev_prod) { if(dk3str_c8_cmp(pprod, prev_prod)) { back = 1; } } else { back = 1; } } else { if(prev_prod) { back = 1; } } if(pman) { if(prev_man) { if(dk3str_c8_cmp(pman, prev_man)) { back = 2; } } else { back = 2; } } else { if(prev_man) { back = 2; } } $? "- itadmin_license_change_level %d", back return back; } /** Start a longtable for the licenses. @param job Job structure. @param os Output stream. */ static void itadmin_license_start_longtable_for_licenses( itadmin_job *job, dk3_stream_t *os ) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[18]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[19]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[20]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[21]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[22]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } /** End a longtable for the licenses. @param job Job structure. @param os Output stream. */ static void itadmin_license_end_longtable_for_licenses( itadmin_job *job, dk3_stream_t *os ) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[7]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } /** Write available licenses. @param job Job structure. @param os Output stream. */ static void itadmin_license_write_available(itadmin_job *job, dk3_stream_t *os) { itadmin_license *li; /* Current license to print. */ char const *prev_man; /* Previous software manufacturer. */ char const *prev_prod; /* Previous software product. */ char const *pman; /* Current software manufacturer. */ char const *pprod; /* Current software product. */ int have_chap; /* Flag: Chapter was started. */ int have_tab; /* Flag: Table was started. */ int ie; /* Input encoding. */ $? "+ itadmin_license_write_available" ie = dk3app_get_encoding(job->app); have_chap = have_tab = 0; prev_man = NULL; prev_prod = NULL; dk3sto_it_reset(job->i_lf); while(NULL != (li = (itadmin_license *)dk3sto_it_next(job->i_lf))) { if(!(have_chap)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[4]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[48], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[49], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[50], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_chap = 1; pman = itadmin_license_get_manufacturer(li); $? ". pman = \"%s\"", TR_STR(pman) pprod = itadmin_license_get_product(li); $? ". pprod = \"%s\"", TR_STR(pprod) switch(itadmin_license_change_level(pman, prev_man, pprod, prev_prod)) { case 2: { /* Manufacturer changed. */ if(have_tab) { itadmin_license_end_longtable_for_licenses(job, os); dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } dk3stream_c8_fputs(os, itadmin_license_c8_kw[8]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pman); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[9]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); have_tab = 0; } break; case 1: { /* Product changed. */ if(have_tab) { itadmin_license_end_longtable_for_licenses(job, os); dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } dk3stream_c8_fputs(os, itadmin_license_c8_kw[9]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); have_tab = 0; } break; default: { /* No change. */ if(have_tab) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[23]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } } break; } if(!(have_tab)) { itadmin_license_start_longtable_for_licenses(job, os); have_tab = 1; } itadmin_license_write_license(job, os, li, pman, pprod, 0, 0, 0, 0, 0); prev_man = pman; prev_prod = pprod; } if(have_chap) { if(have_tab) { /* end{longtable} */ itadmin_license_end_longtable_for_licenses(job, os); } /* clearpage */ dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } $? "- itadmin_license_write_available" } /** Write license report per user/host. @param job Job structure. @param os Output stream. */ static void itadmin_license_write_user(itadmin_job *job, dk3_stream_t *os) { itadmin_user *us; itadmin_host *ho; itadmin_license *li; char const *pman; char const *pprod; char const *prev_man; char const *prev_prod; int have_chap; int have_sec; int have_subsec; int have_tab; int ie; $? "+ itadmin_license_write_user" ie = dk3app_get_encoding(job->app); dk3sto_it_reset(job->i_us); while(NULL != (us = (itadmin_user *)dk3sto_it_next(job->i_us))) { have_chap = 0; have_sec = 0; have_subsec = 0; have_tab = 0; /* Licenses on hosts */ if(us->i_ho) { dk3sto_it_reset(us->i_ho); while(NULL != (ho = (itadmin_host *)dk3sto_it_next(us->i_ho))) { have_sec = 0; have_subsec = 0; if(ho->i_li) { prev_man = NULL; prev_prod = NULL; have_tab = 0; dk3sto_it_reset(ho->i_li); while(NULL != (li = (itadmin_license *)dk3sto_it_next(ho->i_li))) { pman = itadmin_license_get_manufacturer(li); pprod = itadmin_license_get_product(li); switch(itadmin_license_change_level(pman,prev_man,pprod,prev_prod)) { case 2: { /* Manufacturer changed. */ if(have_tab) { itadmin_license_end_longtable_for_licenses(job, os); } have_tab = 0; if(!(have_chap)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[28]); itadmin_tool_write_user_latex_short(job, os, us); dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); itadmin_tool_write_user_latex_long(job, os, us); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_chap = 1; if(!(have_sec)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[8]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ho->sn); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_sec = 1; dk3stream_c8_fputs(os, itadmin_license_c8_kw[9]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pman); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } break; default: { /* Manufacturer unchanged. */ if(have_tab) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[23]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } } break; } if(!(have_tab)) { itadmin_license_start_longtable_for_licenses(job, os); have_tab = 1; } itadmin_license_write_license(job, os, li, pman, pprod, 0, 1, 0, 0, 2); prev_man = pman; prev_prod = pprod; } if(have_tab) { itadmin_license_end_longtable_for_licenses(job, os); } if(have_sec) { /* clearpage */ dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } } } } if(us->i_li) { /* Licenses not assigned to hosts */ have_sec = 0; have_tab = 0; dk3sto_it_reset(us->i_li); prev_man = NULL; prev_prod = NULL; while(NULL != (li = (itadmin_license *)dk3sto_it_next(us->i_li))) { if(!(li->host)) { pman = itadmin_license_get_manufacturer(li); pprod = itadmin_license_get_product(li); switch(itadmin_license_change_level(pman,prev_man,pprod,prev_prod)) { case 2: { /* Manufacturer changed */ if(have_tab) { itadmin_license_end_longtable_for_licenses(job, os); } have_tab = 0; if(!(have_chap)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[28]); itadmin_tool_write_user_latex_short(job, os, us); dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); itadmin_tool_write_user_latex_long(job, os, us); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_chap = 1; if(!(have_sec)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[30]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[60], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[61], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[64], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[65], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[66], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_sec = 1; dk3stream_c8_fputs(os, itadmin_license_c8_kw[9]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pman); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[10]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } break; case 1: { /* Product changed */ if(have_tab) { itadmin_license_end_longtable_for_licenses(job, os); } have_tab = 0; if(!(have_chap)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[28]); itadmin_tool_write_user_latex_short(job, os, us); dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); itadmin_tool_write_user_latex_long(job, os, us); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_chap = 1; if(!(have_sec)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[30]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[60], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[61], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[64], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[65], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[66], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_sec = 1; dk3stream_c8_fputs(os, itadmin_license_c8_kw[10]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } break; default: { if(have_tab) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[23]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } } break; } if(!(have_tab)) { itadmin_license_start_longtable_for_licenses(job, os); have_tab = 1; } itadmin_license_write_license(job, os, li, pman, pprod, 0, 0, 0, 0, 0); prev_man = pman; prev_prod = pprod; } } if(have_tab) { itadmin_license_end_longtable_for_licenses(job, os); } if(have_sec) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } /* Licenses used on other users computers */ have_sec = 0; have_tab = 0; dk3sto_it_reset(us->i_li); prev_man = NULL; prev_prod = NULL; while(NULL != (li = (itadmin_license *)dk3sto_it_next(us->i_li))) { if(li->host) { pman = itadmin_license_get_manufacturer(li); pprod = itadmin_license_get_product(li); switch(itadmin_license_change_level(pman,prev_man,pprod,prev_prod)) { case 2: { /* Manufacturer changed */ if(have_tab) { itadmin_license_end_longtable_for_licenses(job, os); } have_tab = 0; if(!(have_chap)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[28]); itadmin_tool_write_user_latex_short(job, os, us); dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); itadmin_tool_write_user_latex_long(job, os, us); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_chap = 1; if(!(have_sec)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[30]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[62], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[63], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[67], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[68], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[69], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[31]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[70], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[32]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[71], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[72], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[73], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[74], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[75], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_sec = 1; dk3stream_c8_fputs(os, itadmin_license_c8_kw[9]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pman); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[10]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } break; case 1: { /* Product changed */ if(have_tab) { itadmin_license_end_longtable_for_licenses(job, os); } have_tab = 0; if(!(have_chap)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[28]); itadmin_tool_write_user_latex_short(job, os, us); dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); itadmin_tool_write_user_latex_long(job, os, us); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_chap = 1; if(!(have_sec)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[30]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[62], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[63], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[67], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[68], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[69], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[31]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[70], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[32]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[71], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[72], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[73], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[74], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[75], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_sec = 1; dk3stream_c8_fputs(os, itadmin_license_c8_kw[10]); dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } break; default: { if(have_tab) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[23]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } } break; } if(!(have_tab)) { itadmin_license_start_longtable_for_licenses(job, os); have_tab = 1; } itadmin_license_write_license(job, os, li, pman, pprod, 0, 0, 0, 1, 1); prev_man = pman; prev_prod = pprod; } } if(have_tab) { itadmin_license_end_longtable_for_licenses(job, os); } if(have_sec) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } } } $? "- itadmin_license_write_user" } /** Write complete list of licenses. @param job Job structure. @param os Output stream. */ static void itadmin_license_write_complete_list(itadmin_job *job, dk3_stream_t *os) { itadmin_license *li; char const *pman; char const *pprod; int have_tab = 0; int ie; ie = dk3app_get_encoding(job->app); dk3sto_it_reset(job->i_lc); while(NULL != (li = (itadmin_license *)dk3sto_it_next(job->i_lc))) { if(!(have_tab)) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[4]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[59], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); itadmin_license_start_longtable_for_licenses(job, os); } else { dk3stream_c8_fputs(os, itadmin_license_c8_kw[23]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } have_tab = 1; pman = itadmin_license_get_manufacturer(li); pprod = itadmin_license_get_product(li); itadmin_license_write_license(job, os, li, pman, pprod, 1, 1, 1, 1, 1); } if(have_tab) { itadmin_license_end_longtable_for_licenses(job, os); } } /** Write license report to file. @param job Job structure. @param os Output stream. */ static void itadmin_license_write_file(itadmin_job *job, dk3_stream_t *os) { int ie; ie = dk3app_get_encoding(job->app); if(job->ukoma) { itadmin_tool_write_section(job, os, itadmin_license_file_start1a); } else { itadmin_tool_write_section(job, os, itadmin_license_file_start1b); } dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); dk3stream_strputs(os, (job->msg)[2], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); itadmin_tool_write_section(job, os, itadmin_license_file_start4); /* pdftitle */ dk3stream_c8_fputs(os, itadmin_license_c8_kw[11]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[51], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[17]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); /* pdfsubject */ dk3stream_c8_fputs(os, itadmin_license_c8_kw[12]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[52], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[17]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); /* pdfauthor */ if(job->admn) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[13]); dk3uc2lat_stputs(job->uc2l, os, job->admn, ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[17]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } /* pdfcreator */ dk3stream_c8_fputs(os, itadmin_license_c8_kw[14]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); itadmin_tool_write_section(job, os, itadmin_license_file_start2); /* author */ if(job->admn) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[15]); dk3uc2lat_stputs(job->uc2l, os, job->admn, ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); } /* title */ dk3stream_c8_fputs(os, itadmin_license_c8_kw[16]); dk3uc2lat_stputs(job->uc2l, os, (job->msg)[51], ie); dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); if(job->ukoma) { itadmin_tool_write_section(job, os, itadmin_license_file_start3a); } itadmin_tool_write_section(job, os, itadmin_license_file_start3); itadmin_license_write_available(job, os); itadmin_license_write_user(job, os); itadmin_license_write_complete_list(job, os); itadmin_tool_write_section(job, os, itadmin_license_file_end); } int itadmin_license_report(itadmin_job *job) { FILE *fipo; dk3_stream_t *os; int back = 0; $? "+ itadmin_license_report" fipo = dk3sf_c8_fopen_app( itadmin_license_c8_kw[2], itadmin_license_c8_kw[3], job->app ); if(fipo) { os = dk3stream_open_file_app(fipo, DK3_STREAM_FLAG_WRITE, job->app); if(os) { back = 1; itadmin_license_write_file(job, os); dk3stream_close(os); } #if DK3_CHAR_SIZE == 1 if(!dk3sf_fclose_fn_app(fipo, itadmin_license_c8_kw[2], job->app)) { back = 0; } #else if(!dk3sf_fclose_fn_app(fipo, NULL, job->app)) { back = 0; } #endif } $? "- itadmin_license_report %d", back return back; }