home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume18 / geneal / part01 / familyh.c < prev    next >
C/C++ Source or Header  |  1989-03-08  |  4KB  |  173 lines

  1. /* familyh.c - a more horizontal style of family page
  2.  *
  3.  *  4.Jan.88  jimmc  Initial definition
  4.  *  8.Jan.88  jimmc  Allow lists of families to be printed
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <ctype.h>
  9. #include <strings.h>
  10. #include "geneal.h"
  11.  
  12. #define TITLECOL 24
  13. #define NAMECOL 4
  14. #define COLFMT "    %-30s %-18s %s\n"
  15.  
  16. extern char *convertsdate();
  17.  
  18. int            /* 0 if OK */
  19. familyh(ac,av)
  20. int ac;
  21. int *av;
  22. {
  23.     int i,t;
  24.  
  25.     t = 0;
  26.     for (i=0; i<ac; i++) {
  27.         if (i>0) fprintf(outfp,sepstr);
  28.         t += familyh1(av[i]);
  29.     }
  30.     return t;
  31. }
  32.  
  33. int            /* 0 if OK */
  34. familyh1(famnum)
  35. int famnum;            /* the family to give info about */
  36. {
  37.     int rtype;
  38.     char *famname;
  39.     int addrnum;
  40.     char *addr, *phone, *gen;
  41.     char mbuf[200];
  42.     char *mdate, *mplace;
  43.     int i, cnum, clist[1000];
  44.  
  45.     rtype = fgtype(famnum);
  46.     if (rtype<=0) {
  47.         warning("no such record number %d", famnum);
  48.         return 1;
  49.     }
  50.     if (rtype!='F') {
  51.         warning("record %d is not a family", famnum);
  52.         return 1;
  53.     }
  54.  
  55.     famname = fglhname(famnum);
  56.     strup(famname);
  57.     printindented(TITLECOL,famname);
  58.     addrnum = fgnum(famnum,"ADDR");
  59.     if (Gflag['a'] && addrnum>0) {    /* print address if known */
  60.         addr = fgstr(addrnum,"ADDR");
  61.         printindented(TITLECOL,addr);
  62.         phone = fgstr(addrnum,"PHONE");
  63.         printindented(TITLECOL,phone);
  64.     }
  65.     fprintf(outfp,"\n\n\n");
  66.  
  67.     fprintf(outfp,COLFMT,"NAME","BIRTHDATE","BIRTHPLACE");
  68.     fprintf(outfp,COLFMT,"----","---------","----------");
  69.     fprintf(outfp,"\n");
  70.  
  71.     famhp(fgnum(famnum,"H"),"");    /* print info about husband */
  72.  
  73.     mdate = fgstr(famnum,"M");
  74.     mplace = fgstr(famnum,"MP");
  75.     strcpy(mbuf,"MARRIED ");
  76.     if (Gflag['n'])
  77.         sprintf(mbuf+strlen(mbuf),"[%d] ",famnum);
  78.     if (mdate && mdate[0])
  79.         sprintf(mbuf+strlen(mbuf),"%s ",convertsdate(mdate));
  80.     if (mplace && mplace[0])
  81.         sprintf(mbuf+strlen(mbuf),"at %s ",mplace);
  82.     strcat(mbuf,"to\n");
  83.     printindented(NAMECOL,mbuf);
  84.  
  85.     famhp(fgnum(famnum,"W"),"N");
  86.  
  87.     gen = fggen(famnum);
  88.     if (gen && gen[0]) {
  89.         printindented(NAMECOL,gen);
  90.         fprintf(outfp,"\n");
  91.     }
  92.  
  93.     fprintf(outfp,"\n");
  94.  
  95.     cnum = fgbclist(famnum,clist);
  96.     if (cnum==0) {
  97.         ;    /* do nothing here if no children */
  98.     }
  99.     else {
  100.         printindented(NAMECOL,"Born to this union:\n");
  101.         for (i=0; i<cnum; i++) {
  102.             famhp(clist[i],"S");
  103.             fprintf(outfp,"\n");
  104.         }
  105.     }
  106.     return 0;
  107. }
  108.  
  109. famhp(n,mflags)
  110. int n;            /* individual to print info about */
  111. char *mflags;        /* mode flags */
  112. {
  113.     char *name, *bdate, *bplace;
  114.     char *deathdate, *deathplace, *buried, *gen;
  115.     int scount, slist[1000];
  116.     int mnum, mgnum, spnum;
  117.     char *spname;
  118.     char *mdate, *mplace;
  119.     char sbuf[1000];
  120.  
  121.     if (index(mflags,'N'))    /* include last name */
  122.         name = fgbname(n);
  123.     else
  124.         name = fgtname(n);
  125.     bdate = fgstr(n,"B");
  126.     bplace = fgstr(n,"BP");
  127.     deathdate = fgstr(n,"D");
  128.     deathplace = fgstr(n,"DP");
  129.     buried = fgstr(n,"BUR");
  130.     gen = fggen(n);
  131.     fprintf(outfp,COLFMT,name,convertsdate(bdate),bplace);
  132.     if (index(mflags,'S')) {    /* do spouse info */
  133.         scount = fgbslist(n,slist);
  134.         for (mnum=0; mnum<scount; mnum++) {
  135.             mgnum = slist[mnum];
  136.             spnum = fgspouse(mgnum,n);
  137.             spname = fgbname(spnum);
  138.             if (!spname || !spname[0]) spname="??";
  139.             mdate = fgstr(mgnum,"M");
  140.             mplace = fgstr(mgnum,"MP");
  141.             strcpy(sbuf,"Married ");
  142.             if (Gflag['n'])
  143.                 sprintf(sbuf+strlen(sbuf),"[%d] ",mgnum);
  144.             if (mdate && mdate[0])
  145.                 sprintf(sbuf+strlen(sbuf),"%s ",
  146.                     convertsdate(mdate));
  147.             sprintf(sbuf+strlen(sbuf),"to %s",spname);
  148.             if (mplace && mplace[0])
  149.                 sprintf(sbuf+strlen(sbuf)," at %s",mplace);
  150.             strcat(sbuf,".");
  151.             printindented(NAMECOL,sbuf);
  152.         }
  153.     }
  154.     if ((deathdate&&deathdate[0])||(deathplace&&deathplace[0])) {
  155.         strcpy(sbuf,"Deceased ");
  156.         if (deathdate&&deathdate[0])
  157.             sprintf(sbuf+strlen(sbuf),"%s ",
  158.                 convertsdate(deathdate));
  159.         if (deathplace&&deathplace[0])
  160.             sprintf(sbuf+strlen(sbuf),"at %s",deathplace);
  161.         strcat(sbuf,".");
  162.         printindented(NAMECOL,sbuf);
  163.     }
  164.     if (buried && buried[0]) {
  165.         sprintf(sbuf,"Buried at %s.", buried);
  166.         printindented(NAMECOL,sbuf);
  167.     }
  168.     if (gen && gen[0]) printindented(NAMECOL,gen);
  169.     fprintf(outfp,"\n");
  170. }
  171.  
  172. /* end */
  173.