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

  1. /* browse.c - functions to simplify browsing through the tree
  2.  *
  3.  * 18.Aug.87  jimmc  Initial definition
  4.  *  8.Jan.88  jimmc  Lint cleanup
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include "geneal.h"
  9.  
  10. int CurrentID;
  11.  
  12. static
  13. printandfree(s)
  14. char *s;
  15. {
  16.     printf("%s\n",s);
  17.     freestr(s);
  18. }
  19.  
  20. static
  21. printIndiv(id)
  22. int id;
  23. {
  24. int cnt, *slist;
  25. int i;
  26.  
  27.     printandfree(fgbname(id));
  28.     printandfree(fgbrtdeath(id));
  29.     cnt = fgslist(id,&slist);
  30.     if (cnt>0) printf("Marriages:\n");
  31.     for (i=0; i<cnt; i++) {
  32.         printf("[%d] ",slist[i]);
  33.         printandfree(fgmarriage(slist[i]));
  34.     }
  35.     if (cnt) free((char *)slist);
  36. }
  37.  
  38. static
  39. printFamily(id)
  40. int id;
  41. {
  42. int hid,wid;
  43. int cnt, *clist;
  44. int i;
  45.  
  46.     printf("Family [%d] ",id);
  47.     printandfree(fgmarriage(id));
  48.     hid = fgnum(id,"H");
  49.     if (hid>0) printandfree(fgbname(hid));
  50.     wid = fgnum(id,"W");
  51.     if (wid>0) printandfree(fgbname(wid));
  52.     cnt = fgclist(id,&clist);
  53.     if (cnt>0) printf("Children:\n");
  54.     for (i=0; i<cnt; i++) {
  55.         printf("  ");
  56.         printandfree(fgbname(clist[i]));
  57.     }
  58.     if (cnt) free((char *)clist);
  59. }
  60.  
  61. static
  62. printCurrent(id)
  63. int id;
  64. {
  65. int oldflag;
  66.  
  67.     CurrentID = id;
  68.     oldflag = Gflag['n'];
  69.     Gflag['n'] = 1;
  70.     switch (fgtype(id)) {
  71.     case 'I':
  72.         printIndiv(id);
  73.         break;
  74.     case 'F':
  75.         printFamily(id);
  76.         break;
  77.     default:
  78.         printf("bad type code for record %d\n",id);
  79.         break;
  80.     }
  81.     Gflag['n'] = oldflag;
  82. }
  83.  
  84. TCurrent(id)
  85. int id;
  86. {
  87.     if (id<=0) id=CurrentID;
  88.     if (id<=0) return 0;
  89.     printCurrent(id);
  90.     return id;
  91. }
  92.  
  93. TFamily(id)
  94. int id;
  95. {
  96. int t;
  97.  
  98.     if (id<=0) id=CurrentID;
  99.     t = fgnum(id,"P");    /* get parent record */
  100.     if (t<=0) return 0;
  101.     printCurrent(t);
  102.     return t;
  103. }
  104.  
  105. TFather(id)
  106. int id;
  107. {
  108. int t;
  109.  
  110.     if (id<=0) id=CurrentID;
  111.     if (fgtype(id)=='I') id=fgnum(id,"P");
  112.     if (id<=0) return 0;
  113.     t = fgnum(id,"H");
  114.     if (t<=0) return 0;
  115.     printCurrent(t);
  116.     return t;
  117. }
  118.  
  119. TMother(id)
  120. int id;
  121. {
  122. int t;
  123.  
  124.     if (id<=0) id=CurrentID;
  125.     if (fgtype(id)=='I') id=fgnum(id,"P");
  126.     if (id<=0) return 0;
  127.     t = fgnum(id,"W");
  128.     if (t<=0) return 0;
  129.     printCurrent(t);
  130.     return t;
  131. }
  132.  
  133. /* end */
  134.