1%% options 2 3copyright owner = Dirk Krause 4copyright year = 2012-xxxx 5SPDX-License-Identifier: BSD-3-Clause 6 7 8%% module 9 10#include <libdk3c/dk3all.h> 11#include <itadmin/itadmin.h> 12 13 14 15$!trace-include 16 17 18 19/** Keywords used by the module. 20*/ 21static char const * const itadmin_license_c8_kw[] = { 22$!string-table 23# 24# 0: Newline 25# 26\n 27# 28# 1: Space 29# 30 31# 32# 2: File name for license report 33# 34licenses.tex 35# 36# 3: File open mode: write 37# 38w 39# 40# 4: Opening a chapter 41# 42\\chapter{ 43# 44# 5: Ending a LaTeX command 45# 46} 47# 48# 6: Clearpage command 49# 50\\clearpage 51# 52# 7: End long table 53# 54\\\\\n\\end{longtable} 55# 56# 8: Section 57# 58\\section{ 59# 60# 9: Subsection 61# 62\\subsection{ 63# 64# 10: Subsubsection 65# 66\\subsubsection{ 67# 68# 11: 69# 70pdftitle={ 71# 72# 12: 73# 74pdfsubject={ 75# 76# 13: 77# 78pdfauthor={ 79# 80# 14: 81# 82pdfcreator={itadmin - http://sourceforge.net/p/dktools/wiki/itadmin/} 83# 84# 15: 85# 86\\author{ 87# 88# 16: 89# 90\\title{ 91# 92# 17: Comma 93# 94, 95# 96# 18: Begin long table 97# 98\\begin{longtable}{lll} 99# 100# 19 101# 102\\endfirsthead 103# 104# 20 105# 106\\endhead 107# 108# 21 109# 110\\endfoot 111# 112# 22 113# 114\\endlastfoot 115# 116# 23 117# 118\\\\[0.5em] 119# 120# 24 121# 122& 123# 124# 25 125# 126\\multicolumn{2}{l}{ 127# 128# 26 129# 130\\\\* 131# 132# 27 133# 134\\textit{ 135# 136# 28 137# 138\\chapter[ 139# 140# 29 141# 142]{ 143# 144# 30 145# 146\\section[ 147# 148# 31 149# 150\\emph{ 151# 152# 32 153# 154\\/} 155$!end 156}; 157 158 159 160/** Start of LaTeX source. 161*/ 162static char const * const itadmin_license_file_start1a[] = { 163$!text 164\documentclass[titlepage,origlongtable]{scrbook} 165\KOMAoptions{paper=a4} 166\KOMAoptions{fontsize=12pt} 167$!end 168}; 169 170 171 172/** Start of LaTeX source. 173*/ 174static char const * const itadmin_license_file_start1b[] = { 175$!text 176\documentclass[12pt]{book} 177$!end 178}; 179 180 181/** LaTeX packages after ngerman. 182*/ 183static char const * const itadmin_license_file_start4[] = { 184$!text 185\usepackage{ifpdf} 186\usepackage[utf8]{inputenc} 187\usepackage{mathptmx} 188\usepackage[scaled=.92]{helvet} 189\usepackage{courier} 190\usepackage[T1]{fontenc} 191\usepackage{textcomp} 192\usepackage{latexsym} 193\usepackage{varioref} 194\usepackage{color} 195\usepackage{makeidx} 196\usepackage{longtable} 197\makeindex 198\ifpdf 199\usepackage{microtype} 200\pdfcompresslevel=9 201\usepackage[ 202pdftex, 203colorlinks=true, 204pdfpagemode=UseNone, 205pdfstartview={XYZ 0 835 1.25}, 206bookmarksnumbered, 207$!end 208}; 209 210 211 212/** LaTeX package after hyperref options for title, subject, author. 213*/ 214static char const * const itadmin_license_file_start2[] = { 215$!text 216]{hyperref} 217\else 218\usepackage[dvips,colorlinks=true,linkcolor=black]{hyperref} 219\fi 220\parindent0cm 221$!end 222}; 223 224 225 226/** Renewcommand used only for koma-script. 227*/ 228static char const * const itadmin_license_file_start3a[] = { 229$!text 230\renewcommand*{\sectfont}{\bfseries} 231$!end 232}; 233 234 235 236/** Final commands after title and author. 237*/ 238static char const * const itadmin_license_file_start3[] = { 239$!text 240\setcounter{secnumdepth}{1} 241\begin{document} 242$!end 243}; 244 245 246 247/** LaTeX file end. 248*/ 249static char const * const itadmin_license_file_end[] = { 250$!text 251\end{document} 252$!end 253}; 254 255 256 257/** Write data for one license. 258 @param job Job structure. 259 @param os Output stream. 260 @param lic License to write. 261*/ 262static 263void 264itadmin_license_write_license_type( 265 itadmin_job *job, 266 dk3_stream_t *os, 267 itadmin_license *lic 268) 269{ 270 char const *ltn; 271 int ie; 272 ltn = NULL; 273 if(lic->ltype) { 274 ltn = (lic->ltype)->sn; 275 if((lic->ltype)->ln) { 276 ltn = (lic->ltype)->ln; 277 } 278 } 279 dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); 280 if(ltn) { 281 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ltn); 282 } else { 283 ie = dk3app_get_encoding(job->app); 284 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[53], ie); 285 } 286 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 287} 288 289 290 291/** Check whether we must write the license owner because the host owner 292 differs from the license owner. 293 @param user License owner. 294 @param host Host on which the license is used. 295 @return 1 if host and license owner differ, 0 if they match. 296*/ 297static 298int 299itadmin_license_must_write_license_owner(itadmin_user *user, itadmin_host *host) 300{ 301 int back = 0; 302 if(user) { 303 if(user->us) { 304 if(host) { 305 if(host->un) { 306 if((host->un)->us) { 307 if(dk3str_c8_cmp(user->us, (host->un)->us)) { 308 back = 1; 309 } 310 } 311 } else { 312 } 313 } else { 314 } 315 } 316 } 317 return back; 318} 319 320 321 322/** Check whether we must write the host owner because the host owner 323 differs from the license owner. 324 @param user License owner. 325 @param host Host on which the license is used. 326 @return 1 if host and license owner differ, 0 if they match. 327*/ 328static 329int 330itadmin_license_must_write_host_owner(itadmin_user *user, itadmin_host *host) 331{ 332 int back = 0; 333 if(host) { 334 if(host->un) { 335 if(user) { 336 if((host->un)->us) { 337 if(user->us) { 338 if(dk3str_c8_cmp((host->un)->us, user->us)) { 339 back = 1; 340 } 341 } else { 342 back = 1; 343 } 344 } 345 } else { 346 back = 1; 347 } 348 } 349 } 350 return back; 351} 352 353 354 355/** Write data for one license. 356 @param job Job structure. 357 @param os Output stream. 358 @param lic License to write. 359 @param pman Software manufacturuer name. 360 @param pprod Software product name. 361 @param mn Flag: Write software manufacturer name. 362 @param pn Flag: Write software product name. 363 @param un Flag: Write user name who owns the license. 364 @param hn Flag: Write host name where license is used. 365 @param ond On difference between license owner and host owner: 366 0=do nothing, 1=write host owner, 2=write license owner 367*/ 368static 369void 370itadmin_license_write_license( 371 itadmin_job *job, 372 dk3_stream_t *os, 373 itadmin_license *lic, 374 char const *pman, 375 char const *pprod, 376 int mn, 377 int pn, 378 int un, 379 int hn, 380 int ond 381) 382{ 383 char bu[128]; 384 int ie; 385 ie = dk3app_get_encoding(job->app); 386 sprintf(bu, "%lu", lic->pk); 387 dk3stream_c8_fputs(os, bu); 388 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 389 if((mn) && (pman)) { 390 dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); 391 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pman); 392 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 393 if((pn) && (pprod)) { 394 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 395 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 396 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 397 dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); 398 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); 399 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 400 } 401 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 402 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 403 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 404 itadmin_license_write_license_type(job, os, lic); 405 } else { 406 if((pn) && (pprod)) { 407 dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); 408 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); 409 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 410 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 411 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 412 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 413 itadmin_license_write_license_type(job, os, lic); 414 } else { 415 itadmin_license_write_license_type(job, os, lic); 416 } 417 } 418 if(lic->notes) { 419 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 420 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 421 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 422 dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); 423 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, lic->notes); 424 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 425 } 426 if(un) { 427 if(lic->owner) { 428 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 429 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 430 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 431 dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); 432 itadmin_tool_write_user_latex_long(job, os, lic->owner); 433 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 434 } 435 } 436 if(hn) { 437 if(lic->host) { 438 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 439 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 440 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 441 if((lic->host)->sn) { 442 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (lic->host)->sn); 443 } 444 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 445 if((lic->host)->co) { 446 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, (lic->host)->co); 447 } 448 switch(ond) { 449 case 1: { /* On difference write host owner. */ 450 if(itadmin_license_must_write_host_owner(lic->owner, lic->host)) { 451 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 452 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 453 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 454 dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); 455 if(mn) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[27]); } 456 itadmin_tool_write_user_latex_long(job, os, (lic->host)->un); 457 if(mn) { dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); } 458 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 459 } 460 } break; 461 case 2: { /* On difference write license owner. */ 462 if(itadmin_license_must_write_license_owner(lic->owner, lic->host)) { 463 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 464 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 465 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 466 dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); 467 dk3stream_c8_fputs(os, itadmin_license_c8_kw[27]); 468 itadmin_tool_write_user_latex_long(job, os, lic->owner); 469 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 470 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 471 } 472 } break; 473 } 474 } 475 } else { 476 if((lic->host) && (lic->owner)) { 477 switch(ond) { 478 case 1: { 479 if(itadmin_license_must_write_host_owner(lic->owner, lic->host)) { 480 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 481 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 482 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 483 dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); 484 dk3stream_c8_fputs(os, itadmin_license_c8_kw[27]); 485 itadmin_tool_write_user_latex_long(job, os, (lic->host)->un); 486 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 487 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 488 } 489 } break; 490 case 2: { 491 if(itadmin_license_must_write_license_owner(lic->owner, lic->host)) { 492 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 493 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 494 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 495 dk3stream_c8_fputs(os, itadmin_license_c8_kw[25]); 496 dk3stream_c8_fputs(os, itadmin_license_c8_kw[27]); 497 itadmin_tool_write_user_latex_long(job, os, lic->owner); 498 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 499 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 500 } 501 } break; 502 } 503 } 504 } 505 if(lic->order) { 506 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 507 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 508 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 509 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[54], ie); 510 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 511 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, lic->order); 512 } 513 if(((lic->d_del).d) && ((lic->d_del).m) && ((lic->d_del).y)) { 514 if(job->gdate) { 515 sprintf( 516 bu, "%02d.%02d.%04d", (lic->d_del).d, (lic->d_del).m, (lic->d_del).y 517 ); 518 } else { 519 sprintf( 520 bu, "%04d-%02d-%02d", (lic->d_del).y, (lic->d_del).m, (lic->d_del).d 521 ); 522 } 523 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 524 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 525 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 526 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[55], ie); 527 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 528 dk3stream_c8_fputs(os, bu); 529 } 530 if(lic->i_del) { 531 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 532 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 533 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 534 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[56], ie); 535 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 536 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, lic->i_del); 537 } 538 if(((lic->d_inv).d) && ((lic->d_inv).m) && ((lic->d_inv).y)) { 539 if(job->gdate) { 540 sprintf( 541 bu, "%02d.%02d.%04d", (lic->d_inv).d, (lic->d_inv).m, (lic->d_inv).y 542 ); 543 } else { 544 sprintf( 545 bu, "%04d-%02d-%02d", (lic->d_inv).y, (lic->d_inv).m, (lic->d_inv).d 546 ); 547 } 548 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 549 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 550 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 551 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[57], ie); 552 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 553 dk3stream_c8_fputs(os, bu); 554 } 555 if(lic->i_inv) { 556 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 557 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 558 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 559 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[58], ie); 560 dk3stream_c8_fputs(os, itadmin_license_c8_kw[24]); 561 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, lic->i_inv); 562 } 563} 564 565 566 567/** Get software manufacturer name. 568 @param li License 569 @return Software manufacturer name on success, NULL on error. 570*/ 571static 572char const * 573itadmin_license_get_manufacturer(itadmin_license *li) 574{ 575 char const *back = NULL; 576 if(li->prod) { 577 if((li->prod)->mn) { 578 back = ((li->prod)->mn)->sn; 579 if(((li->prod)->mn)->ln) { 580 back = ((li->prod)->mn)->ln; 581 } 582 } 583 } 584 return back; 585} 586 587 588 589/** Get software product name. 590 @param li License. 591 @return Product name on success, NULL on error. 592*/ 593static 594char const * 595itadmin_license_get_product(itadmin_license *li) 596{ 597 char const *back = NULL; 598 if(li->prod) { 599 back = (li->prod)->sn; 600 if((li->prod)->ln) { 601 back = (li->prod)->ln; 602 } 603 } 604 return back; 605} 606 607 608 609/** Check whether manufacturer and/or product have changed. 610 @param pman 611 @param prev_man 612 @param pprod 613 @param prev_prod 614 @return 0=no change, 1=product change, 2=manufacturer change. 615*/ 616static 617int 618itadmin_license_change_level( 619 char const *pman, 620 char const *prev_man, 621 char const *pprod, 622 char const *prev_prod 623) 624{ 625 int back = 0; 626 $? "+ itadmin_license_change_level \"%!8s\"=\"%!8s\" \"%!8s\"=\"%!8s\"", TR_8STR(pman), TR_8STR(prev_man), TR_8STR(pprod), TR_8STR(prev_prod) 627 if(pprod) { 628 if(prev_prod) { 629 if(dk3str_c8_cmp(pprod, prev_prod)) { 630 back = 1; 631 } 632 } else { back = 1; } 633 } else { 634 if(prev_prod) { back = 1; } 635 } 636 if(pman) { 637 if(prev_man) { 638 if(dk3str_c8_cmp(pman, prev_man)) { 639 back = 2; 640 } 641 } else { back = 2; } 642 } else { 643 if(prev_man) { back = 2; } 644 } $? "- itadmin_license_change_level %d", back 645 return back; 646} 647 648 649 650/** Start a longtable for the licenses. 651 @param os Output stream. 652*/ 653static 654void 655itadmin_license_start_longtable_for_licenses( 656 dk3_stream_t *os 657) 658{ 659 dk3stream_c8_fputs(os, itadmin_license_c8_kw[18]); 660 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 661 dk3stream_c8_fputs(os, itadmin_license_c8_kw[19]); 662 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 663 dk3stream_c8_fputs(os, itadmin_license_c8_kw[20]); 664 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 665 dk3stream_c8_fputs(os, itadmin_license_c8_kw[21]); 666 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 667 dk3stream_c8_fputs(os, itadmin_license_c8_kw[22]); 668 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 669} 670 671 672 673/** End a longtable for the licenses. 674 @param os Output stream. 675*/ 676static 677void 678itadmin_license_end_longtable_for_licenses( 679 dk3_stream_t *os 680) 681{ 682 dk3stream_c8_fputs(os, itadmin_license_c8_kw[7]); 683 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 684} 685 686 687 688/** Write available licenses. 689 @param job Job structure. 690 @param os Output stream. 691*/ 692static 693void 694itadmin_license_write_available(itadmin_job *job, dk3_stream_t *os) 695{ 696 itadmin_license *li; /* Current license to print. */ 697 char const *prev_man; /* Previous software manufacturer. */ 698 char const *prev_prod; /* Previous software product. */ 699 char const *pman; /* Current software manufacturer. */ 700 char const *pprod; /* Current software product. */ 701 int have_chap; /* Flag: Chapter was started. */ 702 int have_tab; /* Flag: Table was started. */ 703 int ie; /* Input encoding. */ 704 $? "+ itadmin_license_write_available" 705 ie = dk3app_get_encoding(job->app); 706 have_chap = have_tab = 0; 707 prev_man = NULL; prev_prod = NULL; 708 dk3sto_it_reset(job->i_lf); 709 while(NULL != (li = (itadmin_license *)dk3sto_it_next(job->i_lf))) { 710 if(!(have_chap)) { 711 dk3stream_c8_fputs(os, itadmin_license_c8_kw[4]); 712 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[48], ie); 713 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 714 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 715 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[49], ie); 716 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 717 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[50], ie); 718 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 719 } have_chap = 1; 720 pman = itadmin_license_get_manufacturer(li); $? ". pman = \"%!8s\"", TR_8STR(pman) 721 pprod = itadmin_license_get_product(li); $? ". pprod = \"%!8s\"", TR_8STR(pprod) 722 switch(itadmin_license_change_level(pman, prev_man, pprod, prev_prod)) { 723 case 2: { /* Manufacturer changed. */ 724 if(have_tab) { 725 itadmin_license_end_longtable_for_licenses(os); 726 dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); 727 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 728 } 729 dk3stream_c8_fputs(os, itadmin_license_c8_kw[8]); 730 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pman); 731 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 732 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 733 dk3stream_c8_fputs(os, itadmin_license_c8_kw[9]); 734 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); 735 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 736 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 737 have_tab = 0; 738 } break; 739 case 1: { /* Product changed. */ 740 if(have_tab) { 741 itadmin_license_end_longtable_for_licenses(os); 742 dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); 743 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 744 } 745 dk3stream_c8_fputs(os, itadmin_license_c8_kw[9]); 746 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); 747 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 748 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 749 have_tab = 0; 750 } break; 751 default: { /* No change. */ 752 if(have_tab) { 753 dk3stream_c8_fputs(os, itadmin_license_c8_kw[23]); 754 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 755 } 756 } break; 757 } 758 if(!(have_tab)) { 759 itadmin_license_start_longtable_for_licenses(os); 760 have_tab = 1; 761 } 762 itadmin_license_write_license(job, os, li, pman, pprod, 0, 0, 0, 0, 0); 763 prev_man = pman; prev_prod = pprod; 764 } 765 if(have_chap) { 766 if(have_tab) { 767 /* end{longtable} */ 768 itadmin_license_end_longtable_for_licenses(os); 769 } 770 /* clearpage */ 771 dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); 772 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 773 } $? "- itadmin_license_write_available" 774} 775 776 777 778/** Write license report per user/host. 779 @param job Job structure. 780 @param os Output stream. 781*/ 782static 783void 784itadmin_license_write_user(itadmin_job *job, dk3_stream_t *os) 785{ 786 itadmin_user *us; 787 itadmin_host *ho; 788 itadmin_license *li; 789 char const *pman; 790 char const *pprod; 791 char const *prev_man; 792 char const *prev_prod; 793 int have_chap; 794 int have_sec; 795#if VERSION_BEFORE_20150821 796 int have_subsec; 797#endif 798 int have_tab; 799 int ie; 800 $? "+ itadmin_license_write_user" 801 ie = dk3app_get_encoding(job->app); 802 dk3sto_it_reset(job->i_us); 803 while(NULL != (us = (itadmin_user *)dk3sto_it_next(job->i_us))) { 804 have_chap = 0; 805#if VERSION_BEFORE_20150821 806 have_sec = 0; 807#endif 808#if VERSION_BEFORE_20150821 809 have_subsec = 0; 810#endif 811#if VERSION_BEFORE_20150821 812 have_tab = 0; 813#endif 814 /* 815 Licenses on hosts 816 */ 817 if(us->i_ho) { 818 dk3sto_it_reset(us->i_ho); 819 while(NULL != (ho = (itadmin_host *)dk3sto_it_next(us->i_ho))) { 820 have_sec = 0; 821#if VERSION_BEFORE_20150821 822 have_subsec = 0; 823#endif 824 if(ho->i_li) { 825 prev_man = NULL; 826 prev_prod = NULL; 827 have_tab = 0; 828 dk3sto_it_reset(ho->i_li); 829 while(NULL != (li = (itadmin_license *)dk3sto_it_next(ho->i_li))) { 830 pman = itadmin_license_get_manufacturer(li); 831 pprod = itadmin_license_get_product(li); 832 switch(itadmin_license_change_level(pman,prev_man,pprod,prev_prod)) 833 { 834 case 2: { /* Manufacturer changed. */ 835 if(have_tab) { 836 itadmin_license_end_longtable_for_licenses(os); 837 } have_tab = 0; 838 if(!(have_chap)) { 839 dk3stream_c8_fputs(os, itadmin_license_c8_kw[28]); 840 itadmin_tool_write_user_latex_short(job, os, us); 841 dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); 842 itadmin_tool_write_user_latex_long(job, os, us); 843 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 844 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 845 } have_chap = 1; 846 if(!(have_sec)) { 847 dk3stream_c8_fputs(os, itadmin_license_c8_kw[8]); 848 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, ho->sn); 849 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 850 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 851 } have_sec = 1; 852 dk3stream_c8_fputs(os, itadmin_license_c8_kw[9]); 853 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pman); 854 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 855 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 856 } break; 857 default: { /* Manufacturer unchanged. */ 858 if(have_tab) { 859 dk3stream_c8_fputs(os, itadmin_license_c8_kw[23]); 860 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 861 } 862 } break; 863 } 864 if(!(have_tab)) { 865 itadmin_license_start_longtable_for_licenses(os); 866 have_tab = 1; 867 } 868 itadmin_license_write_license(job, os, li, pman, pprod, 0, 1, 0, 0, 2); 869 prev_man = pman; prev_prod = pprod; 870 } 871 if(have_tab) { 872 itadmin_license_end_longtable_for_licenses(os); 873 } 874 if(have_sec) { 875 /* clearpage */ 876 dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); 877 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 878 } 879 } 880 } 881 } 882 if(us->i_li) { 883 /* 884 Licenses not assigned to hosts 885 */ 886 have_sec = 0; have_tab = 0; 887 dk3sto_it_reset(us->i_li); 888 prev_man = NULL; prev_prod = NULL; 889 while(NULL != (li = (itadmin_license *)dk3sto_it_next(us->i_li))) { 890 if(!(li->host)) { 891 pman = itadmin_license_get_manufacturer(li); 892 pprod = itadmin_license_get_product(li); 893 switch(itadmin_license_change_level(pman,prev_man,pprod,prev_prod)) 894 { 895 case 2: { /* Manufacturer changed */ 896 if(have_tab) { 897 itadmin_license_end_longtable_for_licenses(os); 898 } have_tab = 0; 899 if(!(have_chap)) { 900 dk3stream_c8_fputs(os, itadmin_license_c8_kw[28]); 901 itadmin_tool_write_user_latex_short(job, os, us); 902 dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); 903 itadmin_tool_write_user_latex_long(job, os, us); 904 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 905 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 906 } have_chap = 1; 907 if(!(have_sec)) { 908 dk3stream_c8_fputs(os, itadmin_license_c8_kw[30]); 909 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[60], ie); 910 dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); 911 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[61], ie); 912 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 913 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 914 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[64], ie); 915 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 916 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[65], ie); 917 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 918 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[66], ie); 919 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 920 } have_sec = 1; 921 dk3stream_c8_fputs(os, itadmin_license_c8_kw[9]); 922 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pman); 923 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 924 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 925 dk3stream_c8_fputs(os, itadmin_license_c8_kw[10]); 926 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); 927 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 928 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 929 } break; 930 case 1: { /* Product changed */ 931 if(have_tab) { 932 itadmin_license_end_longtable_for_licenses(os); 933 } have_tab = 0; 934 if(!(have_chap)) { 935 dk3stream_c8_fputs(os, itadmin_license_c8_kw[28]); 936 itadmin_tool_write_user_latex_short(job, os, us); 937 dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); 938 itadmin_tool_write_user_latex_long(job, os, us); 939 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 940 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 941 } have_chap = 1; 942 if(!(have_sec)) { 943 dk3stream_c8_fputs(os, itadmin_license_c8_kw[30]); 944 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[60], ie); 945 dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); 946 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[61], ie); 947 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 948 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 949 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[64], ie); 950 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 951 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[65], ie); 952 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 953 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[66], ie); 954 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 955 } have_sec = 1; 956 dk3stream_c8_fputs(os, itadmin_license_c8_kw[10]); 957 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); 958 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 959 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 960 } break; 961 default: { 962 if(have_tab) { 963 dk3stream_c8_fputs(os, itadmin_license_c8_kw[23]); 964 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 965 } 966 } break; 967 } 968 if(!(have_tab)) { 969 itadmin_license_start_longtable_for_licenses(os); 970 have_tab = 1; 971 } 972 itadmin_license_write_license(job, os, li, pman, pprod, 0, 0, 0, 0, 0); 973 prev_man = pman; prev_prod = pprod; 974 } 975 } 976 if(have_tab) { 977 itadmin_license_end_longtable_for_licenses(os); 978 } 979 if(have_sec) { 980 dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); 981 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 982 } 983 /* 984 Licenses used on other users computers 985 */ 986 have_sec = 0; have_tab = 0; 987 dk3sto_it_reset(us->i_li); 988 prev_man = NULL; prev_prod = NULL; 989 while(NULL != (li = (itadmin_license *)dk3sto_it_next(us->i_li))) { 990 if(li->host) { 991 pman = itadmin_license_get_manufacturer(li); 992 pprod = itadmin_license_get_product(li); 993 switch(itadmin_license_change_level(pman,prev_man,pprod,prev_prod)) 994 { 995 case 2: { /* Manufacturer changed */ 996 if(have_tab) { 997 itadmin_license_end_longtable_for_licenses(os); 998 } have_tab = 0; 999 if(!(have_chap)) { 1000 dk3stream_c8_fputs(os, itadmin_license_c8_kw[28]); 1001 itadmin_tool_write_user_latex_short(job, os, us); 1002 dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); 1003 itadmin_tool_write_user_latex_long(job, os, us); 1004 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1005 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1006 } have_chap = 1; 1007 if(!(have_sec)) { 1008 dk3stream_c8_fputs(os, itadmin_license_c8_kw[30]); 1009 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[62], ie); 1010 dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); 1011 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[63], ie); 1012 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1013 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1014 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[67], ie); 1015 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1016 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[68], ie); 1017 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1018 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[69], ie); 1019 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 1020 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1021 dk3stream_c8_fputs(os, itadmin_license_c8_kw[31]); 1022 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[70], ie); 1023 dk3stream_c8_fputs(os, itadmin_license_c8_kw[32]); 1024 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[71], ie); 1025 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1026 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[72], ie); 1027 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1028 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[73], ie); 1029 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1030 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[74], ie); 1031 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1032 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[75], ie); 1033 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1034 } have_sec = 1; 1035 dk3stream_c8_fputs(os, itadmin_license_c8_kw[9]); 1036 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pman); 1037 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1038 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1039 dk3stream_c8_fputs(os, itadmin_license_c8_kw[10]); 1040 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); 1041 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1042 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1043 } break; 1044 case 1: { /* Product changed */ 1045 if(have_tab) { 1046 itadmin_license_end_longtable_for_licenses(os); 1047 } have_tab = 0; 1048 if(!(have_chap)) { 1049 dk3stream_c8_fputs(os, itadmin_license_c8_kw[28]); 1050 itadmin_tool_write_user_latex_short(job, os, us); 1051 dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); 1052 itadmin_tool_write_user_latex_long(job, os, us); 1053 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1054 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1055 } have_chap = 1; 1056 if(!(have_sec)) { 1057 dk3stream_c8_fputs(os, itadmin_license_c8_kw[30]); 1058 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[62], ie); 1059 dk3stream_c8_fputs(os, itadmin_license_c8_kw[29]); 1060 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[63], ie); 1061 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1062 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1063 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[67], ie); 1064 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1065 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[68], ie); 1066 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1067 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[69], ie); 1068 dk3stream_c8_fputs(os, itadmin_license_c8_kw[26]); 1069 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1070 dk3stream_c8_fputs(os, itadmin_license_c8_kw[31]); 1071 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[70], ie); 1072 dk3stream_c8_fputs(os, itadmin_license_c8_kw[32]); 1073 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[71], ie); 1074 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1075 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[72], ie); 1076 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1077 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[73], ie); 1078 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1079 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[74], ie); 1080 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1081 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[75], ie); 1082 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1083 } have_sec = 1; 1084 dk3stream_c8_fputs(os, itadmin_license_c8_kw[10]); 1085 dk3uc2lat_c8_utf8_stputs(job->uc2l, os, pprod); 1086 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1087 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1088 } break; 1089 default: { 1090 if(have_tab) { 1091 dk3stream_c8_fputs(os, itadmin_license_c8_kw[23]); 1092 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1093 } 1094 } break; 1095 } 1096 if(!(have_tab)) { 1097 itadmin_license_start_longtable_for_licenses(os); 1098 have_tab = 1; 1099 } 1100 itadmin_license_write_license(job, os, li, pman, pprod, 0, 0, 0, 1, 1); 1101 prev_man = pman; prev_prod = pprod; 1102 } 1103 } 1104 if(have_tab) { 1105 itadmin_license_end_longtable_for_licenses(os); 1106 } 1107 if(have_sec) { 1108 dk3stream_c8_fputs(os, itadmin_license_c8_kw[6]); 1109 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1110 } 1111 } 1112 } $? "- itadmin_license_write_user" 1113} 1114 1115 1116 1117/** Write complete list of licenses. 1118 @param job Job structure. 1119 @param os Output stream. 1120*/ 1121static 1122void 1123itadmin_license_write_complete_list(itadmin_job *job, dk3_stream_t *os) 1124{ 1125 itadmin_license *li; 1126 char const *pman; 1127 char const *pprod; 1128 int have_tab = 0; 1129 int ie; 1130 ie = dk3app_get_encoding(job->app); 1131 dk3sto_it_reset(job->i_lc); 1132 while(NULL != (li = (itadmin_license *)dk3sto_it_next(job->i_lc))) { 1133 if(!(have_tab)) { 1134 dk3stream_c8_fputs(os, itadmin_license_c8_kw[4]); 1135 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[59], ie); 1136 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1137 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1138 itadmin_license_start_longtable_for_licenses(os); 1139 } else { 1140 dk3stream_c8_fputs(os, itadmin_license_c8_kw[23]); 1141 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1142 } 1143 have_tab = 1; 1144 pman = itadmin_license_get_manufacturer(li); 1145 pprod = itadmin_license_get_product(li); 1146 itadmin_license_write_license(job, os, li, pman, pprod, 1, 1, 1, 1, 1); 1147 } 1148 if(have_tab) { 1149 itadmin_license_end_longtable_for_licenses(os); 1150 } 1151} 1152 1153 1154 1155/** Write license report to file. 1156 @param job Job structure. 1157 @param os Output stream. 1158*/ 1159static 1160void 1161itadmin_license_write_file(itadmin_job *job, dk3_stream_t *os) 1162{ 1163 int ie; 1164 ie = dk3app_get_encoding(job->app); 1165 if(job->ukoma) { 1166 itadmin_tool_write_section(os, itadmin_license_file_start1a); 1167 } else { 1168 itadmin_tool_write_section(os, itadmin_license_file_start1b); 1169 } 1170 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1171 dk3stream_strputs(os, (job->msg)[2], ie); 1172 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1173 itadmin_tool_write_section(os, itadmin_license_file_start4); 1174 /* pdftitle */ 1175 dk3stream_c8_fputs(os, itadmin_license_c8_kw[11]); 1176 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[51], ie); 1177 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1178 dk3stream_c8_fputs(os, itadmin_license_c8_kw[17]); 1179 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1180 /* pdfsubject */ 1181 dk3stream_c8_fputs(os, itadmin_license_c8_kw[12]); 1182 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[52], ie); 1183 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1184 dk3stream_c8_fputs(os, itadmin_license_c8_kw[17]); 1185 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1186 /* pdfauthor */ 1187 if(job->admn) { 1188 dk3stream_c8_fputs(os, itadmin_license_c8_kw[13]); 1189 dk3uc2lat_stputs(job->uc2l, os, job->admn, ie); 1190 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1191 dk3stream_c8_fputs(os, itadmin_license_c8_kw[17]); 1192 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1193 } 1194 /* pdfcreator */ 1195 dk3stream_c8_fputs(os, itadmin_license_c8_kw[14]); 1196 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1197 itadmin_tool_write_section(os, itadmin_license_file_start2); 1198 /* author */ 1199 if(job->admn) { 1200 dk3stream_c8_fputs(os, itadmin_license_c8_kw[15]); 1201 dk3uc2lat_stputs(job->uc2l, os, job->admn, ie); 1202 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1203 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1204 } 1205 /* title */ 1206 dk3stream_c8_fputs(os, itadmin_license_c8_kw[16]); 1207 dk3uc2lat_stputs(job->uc2l, os, (job->msg)[51], ie); 1208 dk3stream_c8_fputs(os, itadmin_license_c8_kw[5]); 1209 dk3stream_c8_fputs(os, itadmin_license_c8_kw[0]); 1210 if(job->ukoma) { 1211 itadmin_tool_write_section(os, itadmin_license_file_start3a); 1212 } 1213 itadmin_tool_write_section(os, itadmin_license_file_start3); 1214 itadmin_license_write_available(job, os); 1215 itadmin_license_write_user(job, os); 1216 itadmin_license_write_complete_list(job, os); 1217 dk3uc2lat_final_report(job->uc2l, os); 1218 itadmin_tool_write_section(os, itadmin_license_file_end); 1219} 1220 1221 1222 1223int 1224itadmin_license_report(itadmin_job *job) 1225{ 1226 FILE *fipo; 1227 dk3_stream_t *os; 1228 int back = 0; 1229 $? "+ itadmin_license_report" 1230 fipo = dk3sf_c8_fopen_app( 1231 itadmin_license_c8_kw[2], 1232 itadmin_license_c8_kw[3], 1233 job->app 1234 ); 1235 if(fipo) { 1236 os = dk3stream_open_file_app(fipo, DK3_STREAM_FLAG_WRITE, job->app); 1237 if(os) { 1238 back = 1; 1239 itadmin_license_write_file(job, os); 1240 dk3stream_close(os); 1241 } 1242#if DK3_CHAR_SIZE == 1 1243 if(!dk3sf_fclose_fn_app(fipo, itadmin_license_c8_kw[2], job->app)) { 1244 back = 0; 1245 } 1246#else 1247 if(!dk3sf_fclose_fn_app(fipo, NULL, job->app)) { 1248 back = 0; 1249 } 1250#endif 1251 } 1252 $? "- itadmin_license_report %d", back 1253 return back; 1254} 1255 1256 1257