Home » Archimedes archive » Archimedes World » AW-1991-09.adf » AWSept91 » !AWSep91/Goodies/Family/!Family/!RUNIMAGE

!AWSep91/Goodies/Family/!Family/!RUNIMAGE

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Archimedes World » AW-1991-09.adf » AWSept91
Filename: !AWSep91/Goodies/Family/!Family/!RUNIMAGE
Read OK:
File size: CF41 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >!FAMILY.!RUNIMAGE
   20:
   30f$=""
   40SYS "OS_GetEnv" TO EnvStr$
   50IF INSTR(EnvStr$," -quit ") THEN
   60 I%=INSTR(EnvStr$,"""")
   70 I%=INSTR(EnvStr$,"""",I%+1)
   80 REPEATI%+=1:UNTILMID$(EnvStr$,I%,1)<>" "
   90 f$=MID$(EnvStr$,I%)
  100ENDIF
  110:
  120:
  130ON ERROR PROCerror
  140PROCsetup
  150PROCloadfile(f$)
  160PROCmain
  170PROCfinish
  180END
  190:
  200DEFPROCsetup
  210alias$="<Family$Dir>"
  220treefile%=0:csvfile%=&CDE
  230nil%=&FFFFFFFF:root%=nil%:delete%=nil%
  240current_menu$=""
  250addstatus%=FALSE
  260addmenu$="":filesave%=-1
  270update%=FALSE:split$="/"
  280savestatus%=0:charspc%=4096*1.5
  290personnode%=nil%:spoused%=FALSE
  300overview%=FALSE:maxgen%=30:DIM column%(maxgen%)
  310dataview%=FALSE
  320DIM scale% 10:$scale%="1"
  330scaleover=1
  340DIM q% 100, block% 2000, menblk% 10000,checkdata% 100
  350DIMvdata% 30,au% 30,pur% 40,pname% 30,icw% 30
  360version$="2.40  <18.06.91>"
  370DIM iconblk% 200,findicon% 400, genpointers% 100
  380DIM fileicon% 400
  390DIM find_icon_num(6,6)
  400DIM file_dat% 255
  410 DIM datamask$(16),dataset$(16)
  420PROCdataviewinit
  430dataset$()=STRING$(60,CHR$(32))
  440titfcol%=7:titbcol%=2:fgcol%=7:bgcol%=0
  450scrbcol%=3:scrfcol%=1:high%=12
  460current_per%=root%
  470PROCoffsets
  480DIM persd% personlength%,fpersd% personlength%
  490findblk%=FNdimperson
  500$q%="TASK"
  510SYS "Wimp_Initialise",200,!q%,"Family" TO ,handle%
  520PROCsprites(alias$+".!Sprites")
  530iconh%=FNiconbar("!Family")
  540oldtree$="treefile"
  550olddraw$="drawfile"
  560oldcsv$="csvfile"
  570PROCwindows
  580datasx%=0:datasy%=0
  590datatx%=0:dataty%=0
  600ENDPROC
  610:
  620DEFPROCmain
  630REPEAT
  640PROCpoll(%10011111110110110011)
  650UNTIL (reason%=17 OR reason%=18) AND block%!16=0
  660ENDPROC
  670:
  680DEFFNiconbar(spname$)
  690!block%=-1
  700block%!4=0
  710block%!8=0
  720block%!12=63
  730block%!16=64
  740block%!20=&2102
  750DIM block%!24 (LENspname$+1)
  760$(block%!24)=spname$
  770block%!28=sprite%
  780block%!32=(LENspname$+1)
  790SYS "Wimp_CreateIcon",,block% TO icon%
  800=icon%
  810:
  820DEFPROCsprites(file$)
  830sp=OPENIN(file$)
  840dim%=EXT#sp+16
  850CLOSE#sp
  860DIM sprite% dim%
  870!sprite%=dim%
  880sprite%!4=0
  890sprite%!8=16
  900sprite%!12=16
  910SYS "OS_SpriteOp",256+10,sprite%,file$
  920ENDPROC
  930:
  940DEFPROCpoll(mask%)
  950!block%=mask%
  960SYS "Wimp_Poll",0,block% TO reason%
  970IF reason% PROCaction(reason%)
  980ENDPROC
  990:
 1000DEFPROCaction(reason%)
 1010CASE reason% OF
 1020WHEN 1 : PROCredrawwin(block%!0)
 1030WHEN 2 : PROCopen
 1040WHEN 3 : PROCclose
 1050WHEN 6 : PROCcheck_mouse(!block%,block%!4,block%!8,block%!12)
 1060WHEN 7 : PROCdragend
 1070WHEN 8 : PROCcharent
 1080WHEN 9 : PROCmenu_select
 1090WHEN 17,18 : PROCmessage(block%)
 1100ENDCASE
 1110ENDPROC
 1120:
 1130DEFPROCcheck_mouse(mx%,my%,but%,hnd%)
 1140CASE but% OF
 1150WHEN 2 : mx%-=64:CASE hnd% OF
 1160 WHEN -2 :PROCcreate_icon_menu(mx%,my%)
 1170 WHEN main% : PROCcreate_menu(mx%,my%)
 1180 WHEN over% : PROCcreate_over(mx%,my%)
 1190 WHEN datawindow% : PROCcreate_data(mx%,my%)
 1200ENDCASE
 1210WHEN 4 : CASE hnd% OF
 1220WHEN -2 : PROCcreate_window
 1230WHEN datawindow% : PROCputcaretintodata(mx%,my%)
 1240WHEN main% : addstatus%=FALSE:CASE block%!16 OF
 1250 WHEN ok% : addstatus%=TRUE:VDU7:IF root%=nil% THEN PROCnewtree ELSE PROCresortbranch
 1260 WHEN ileft% : PROCleftsib
 1270 WHEN iright% : PROCrightsib
 1280 WHEN idown% : PROCchild
 1290 WHEN iup% : PROCparent
 1300 WHEN ispouse% : PROCspouse
 1310 ENDCASE
 1320 IF block%!16<>-1 THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 1330WHEN check% : PROCdeleteperson(block%!16)
 1340WHEN findwind% : PROCfindclick
 1350WHEN over% : PROCgotoperson(mx%,my%)
 1360WHEN filewindow% : IF block%!16=fileok% THEN
 1370                    CASE filesave% OF
 1380                     WHEN 0 : o%=FNsave_tree($(fileicon%+44))
 1390                     WHEN 1 : PROCsavevertdraw($(fileicon%+44))
 1400                     WHEN 2 : PROCsavehoridraw($(fileicon%+44),TRUE)
 1410                     WHEN 3 : PROCsavecsv($(fileicon%+44))
 1420                    ENDCASE
 1430                    SYS "Wimp_CreateMenu",-1
 1440                   ENDIF
 1450ENDCASE
 1460WHEN 1 : CASE hnd% OF
 1470ENDCASE
 1480 WHEN 64 : PROCdragfile
 1490ENDCASE
 1500ENDPROC
 1510:
 1520DEFPROCset_version(pt%,H%,ver$)
 1530!q%=pt%
 1540q%!4=H%
 1550SYS "Wimp_GetIconState",,q%
 1560$q%!28=ver$
 1570q%!8=0
 1580q%!12=0
 1590SYS "Wimp_SetIconState",,q%
 1600ENDPROC
 1610:
 1620DEFPROCfinish
 1630SYS "Wimp_CloseDown",handle%,!q%
 1640END
 1650ENDPROC
 1660:
 1670DEFPROCerror
 1680SYS "Wimp_DragBox",,0
 1690!block%=ERR
 1700error=FALSE
 1710CASE ERR OF
 1720WHEN 222 : $(block%+4)="This file does not exist"+CHR$(0)
 1730WHEN 204 : $(block%+4)="Invalid Filename for Saving"+CHR$(0)
 1740OTHERWISE
 1750$(block%+4)="(Internal error code"+STR$(ERL)+") "+REPORT$+CHR$0
 1760ENDCASE
 1770flags=1
 1780SYS "Wimp_ReportError",block%,flags,"Family"
 1790IF error THEN PROCfinish ELSE PROCmain:END
 1800ENDPROC
 1810:
 1820DEFPROCcreate_window
 1830!block%=main%
 1840block%!4=300
 1850block%!12=1300
 1860block%!16=800
 1870block%!20=0
 1880block%!24=500
 1890block%!28=-1
 1900SYS "Wimp_OpenWindow",,block%
 1910ENDPROC
 1920:
 1930DEFPROCclose
 1940IF !block%=over% THEN overview%=FALSE
 1950IF !block%=datawindow% THEN dataview%=FALSE
 1960SYS "Wimp_CloseWindow",,block%
 1970ENDPROC
 1980:
 1990DEFPROCopen
 2000SYS "Wimp_OpenWindow",,block%
 2010ENDPROC
 2020:
 2030DEFFNfin
 2040PROCfinish
 2050=0
 2060:
 2070DEFFNcreatewindow(title$,flags%,fgcol%,bgcol%,maxX%,maxY%,waL%,waB%,waR%,waT%,filer%)
 2080LOCAL h%
 2090block%!0=waL%:block%!4=waB%
 2100block%!8=waR%:block%!12=waT%
 2110block%!16=0:block%!20=maxY%
 2120block%!24=-1:block%!28=flags%
 2130block%?32=titfcol%
 2140block%?33=titbcol%
 2150block%?34=fgcol%
 2160block%?35=bgcol%
 2170block%?36=scrbcol%
 2180block%?37=scrfcol%
 2190block%?38=high%
 2200CASE filer% OF
 2210 WHEN 1 : block%?35=1:block%?38=titbcol%
 2220 WHEN 2 : block%?27=&18
 2230ENDCASE
 2240block%?39=0
 2250block%!40=0
 2260block%!44=0
 2270block%!48=maxX%
 2280block%!52=maxY%
 2290block%!56=&2D
 2300block%!60=&3000
 2310block%!64=0
 2320block%!68=0
 2330$(block%+72)=LEFT$(title$,11)
 2340block%!84=0
 2350SYS "Wimp_CreateWindow",0,block% TO h%
 2360=h%
 2370:
 2380DEFPROCwindows
 2390main%=FNcreatewindow("Family Tree",&F,7,0,1000,500,0,0,500,500,0)
 2400over%=FNcreatewindow("Overview",&F,7,0,1279,1023,50,50,950,550,0)
 2410check%=FNcreatewindow("Delete",&91,7,0,900,400,150,250,1050,750,1)
 2420findwind%=FNcreatewindow("Find Person",&1F,7,0,1000,500,250,250,1250,740,0)
 2430filewindow%=FNcreatewindow("Save as:",131,7,0,250,160,0,0,600,160,1)
 2440infowindow%=FNcreatewindow("Information",131,7,0,625,250,0,0,700,500,1)
 2450datawindow%=FNcreatewindow("Person Data",&100F,7,0,16*60,16*32,0,0,500,500,2)
 2460REM datawindow is 40 x 16 characters
 2470PROCfilewinicons
 2480PROCinfoicons
 2490ileft%=FNplaceicon(main%,825,95,CHR$(136))
 2500ispouse%=FNplaceicon(main%,880,95,"S")
 2510iright%=FNplaceicon(main%,935,95,CHR$(137))
 2520iup%=FNplaceicon(main%,880,155,CHR$(139))
 2530idown%=FNplaceicon(main%,880,35,CHR$(138))
 2540PROCmainicons(TRUE,iconblk%)
 2550PROCmainicons(FALSE,findicon%)
 2560PROCfindicons
 2570PROCcheckicons
 2580ENDPROC
 2590
 2600:
 2610DEFPROCoffsets
 2620fname%=0
 2630surname%=40
 2640birthdate%=80
 2650deathdate%=84
 2660marriagedate%=88
 2670divorcedate%=92
 2680sibling%=96
 2690child%=100
 2700spouse%=104
 2710gen%=108
 2720col%=112
 2730row%=116
 2740sex%=120
 2750personlength%=200+16*65
 2760next%=0
 2770ENDPROC
 2780:
 2790DEFPROCredrawwin(h%)
 2800column%()=0
 2810IF addstatus% THEN PROCmaketree(root%,640,1023-40,0,0, current_per%, TRUE)
 2820addstatus%=FALSE
 2830SYS "Wimp_RedrawWindow",0,block% TO m%
 2840b%=block%+4
 2850x0%=b%!0-b%!16
 2860y0%=b%!12-b%!20
 2870WHILE m%
 2880ORIGIN x0%,y0%
 2890CASE !block% OF
 2900 WHEN main% : PROCredrawmain
 2910 WHEN over% : PROCredrawover
 2920 WHEN datawindow% : PROCredrawdata
 2930ENDCASE
 2940ORIGIN 0,0
 2950 SYS "Wimp_GetRectangle",0,block% TO m%
 2960ENDWHILE
 2970ENDPROC
 2980:
 2990DEFPROCredrawmain
 3000 SYS "Wimp_SetColour",7
 3010 RECTANGLE 815,25,175,185
 3020ENDPROC
 3030:
 3040DATA "First Names"
 3050DATA "Surname"
 3060DATA "Date of Birth"
 3070DATA "Date of Death"
 3080DATA "Marriage Date"
 3090DATA "Divorce Date"
 3100:
 3110DEFFNplaceicon(h%,x%,y%,a$)
 3120!block%=h%:block%!4=x%:block%!8=y%
 3130block%!12=x%+LEN(a$)*16+29:block%!16=y%+50
 3140block%!20=&C700403D
 3150$(block%+24)=a$
 3160SYS "Wimp_CreateIcon",0,block% TO h%
 3170 =h%
 3180:
 3190DEFPROCinfoicons
 3200LOCAL i%,Y%,a$,b$,a%
 3210RESTORE 3360
 3220FORY%=10 TO 190 STEP60
 3230READ a$,b$,a%
 3240IFY%=10 THEN b$=version$
 3250 i%=FNjusttexti(infowindow%,10,Y%,150,a$,&7000011,0)
 3260 i%=FNjusttexti(infowindow%,150,Y%,465,b$,&700013D,a%)
 3270NEXT
 3280ENDPROC
 3290:
 3300DEFFNjusttexti(h%,x%,y%,w%,a$,f%,a%)
 3310!block%=h%:block%!4=x%:block%!8=y%
 3320block%!12=x%+w%:block%!16=y%+50
 3330block%!20=f%
 3340IF a%=0 THEN $(block%+24)=a$ ELSE block%!24=a%:block%!28=-1:block%!32=LEN(a$)+1:$a%=a$
 3350SYS "Wimp_CreateIcon",0,block% TO h%
 3360DATA "Version:",version$,vdata%,"Author:","David Breakwell",au%,"Purpose:","Family Tree Program",pur%,"Name:","!FAMILY",pname%
 3370DATA "!FAMILY","Family Tree Program","David Breakwell",version$
 3380:
 3390DEFFNdimperson
 3400LOCAL person%
 3410IF HIMEM-END<personlength%+100 THEN END=HIMEM+1024
 3420IF delete%=nil% THEN DIM person% personlength% ELSE person%=delete%:delete%=delete%!next%
 3430=person%
 3440:
 3450DEFPROCmainicons(M%,mem%)
 3460LOCAL iconblk%
 3470iconblk%=mem%
 3480RESTORE 3040
 3490FORloop%=1 TO 6
 3500 IF M% THEN !block%=main% ELSE !block%=findwind%
 3510 block%!24=(iconblk%+(17*loop%)):block%!28=&FFFFFFFF
 3520 block%!20=&C7000125
 3530 READ $(iconblk%+(17*loop%)):block%!4=20:block%!8=390-(loop%*60)
 3540 block%!32=LEN$(iconblk%+(17*loop%))
 3550 block%!12=block%!4+270:block%!16=block%!8+50
 3560 SYS "Wimp_CreateIcon",0,block%
 3570 block%!4=300:block%!20=&700F125
 3580 CASE loop% OF
 3590  WHEN 1 : l%=0
 3600  WHEN 2 : l%=40
 3610  WHEN 3 : l%=80
 3620  WHEN 4 : l%=91
 3630  WHEN 5 : l%=102
 3640  WHEN 6 : l%=113
 3650 ENDCASE
 3660 IF M% THEN block%!24=persd%+l% ELSE block%!24=fpersd%+l%
 3670 IF loop%<3 THEN block%!32=41:$(block%!24)="" ELSE block%!32=12:!(block%!24)=0
 3680 block%!12=block%!4+(block%!32+1)*16
 3690 SYS "Wimp_CreateIcon",0,block% TO I%
 3700IFM% AND loop%=1 THEN mainbase%=I%
 3710IFNOTM% AND loop%=1 THEN findbase%=I%
 3720NEXT
 3730PROCclearperson
 3740block%!20=&C700013D:block%!4=20:block%!8=420
 3750block%!12=block%!4+960:block%!16=block%!8+50
 3760block%!24=(iconblk%+7*17)
 3770IF M% THEN
 3780 $(iconblk%+7*17)="Personal Data"
 3790ELSE
 3800 $(iconblk%+7*17)="Find Person"
 3810ENDIF
 3820SYS "Wimp_CreateIcon",0,block%
 3830block%!4=550:block%!20=&C700913D:block%!8=30
 3840block%!12=block%!4+200:block%!16=block%!8+50
 3850block%!24=(iconblk%+8*17):$(iconblk%+8*17)="OK":block%!32=2
 3860IF NOT(M%) THEN
 3870 block%!4=880:block%!8=30
 3880 block%!12=970:block%!16=260
 3890 SYS "Wimp_CreateIcon",0,block% TO fok%
 3900ELSE
 3910 SYS "Wimp_CreateIcon",0,block% TO ok%
 3920ENDIF
 3930IF M% THEN
 3940 !block%=main%
 3950 block%!4=550:block%!8=210
 3960 block%!12=650:block%!16=260
 3970 block%!20=&C700003D
 3980 $(block%+24)="Sex"
 3990 SYS "Wimp_CreateIcon",,block%
 4000 block%!4=670:block%!12=770
 4010 block%!20=%111000000001111000000111101
 4020 $(block%+24)=""
 4030 SYS "Wimp_CreateIcon",,block% TO personsex%
 4040ENDIF
 4050ENDPROC
 4060:
 4070DEFPROCcharent
 4080LOCAL f%
 4090IF !block%=datawindow% THEN PROCenterdata:ENDPROC
 4100IF !block% <>main% AND !block% <>findwind% THEN
 4110 SYS "Wimp_ProcessKey",block%!24
 4120 ENDPROC
 4130ENDIF
 4140CASE block%!24 OF
 4150 WHEN 13  : RESTORE 4410
 4160 WHEN 399 : RESTORE 4420
 4170 WHEN 398 : RESTORE 4410
 4180 OTHERWISE : SYS "Wimp_ProcessKey",block%!24
 4190ENDCASE
 4200f%=block%!24
 4210IF f%<>13 AND f%<>399 AND f%<>398 THEN ENDPROC
 4220SYS "Wimp_GetCaretPosition",,block%
 4230IF !block%=findwind% THEN block%!4=block%!4+5
 4240REPEAT
 4250 READ l%
 4260UNTIL block%!4=l%
 4270READ l%
 4280IF !block%=findwind% AND l%=20 THEN
 4290 IF f%=399 THEN l%=16 ELSE l%=6
 4300ENDIF
 4310IF !block%=findwind% THEN l%-=5
 4320SYS "Wimp_SetCaretPosition",!block%,l%,,,-1
 4330ENDPROC
 4340IF !block%=main% THEN
 4350 SYS "Wimp_SetCaretPosition",main%,mainbase%+((335-l%)/60)*2,b%,l%,&1000028,0
 4360ELSE
 4370 SYS "Wimp_SetCaretPosition",findwind%,findbase%+((335-l%)/60)*2,b%,l%,&1000028,0
 4380ENDIF
 4390ENDPROC
 4400:
 4410DATA 6,8,10,12,14,16,20,6
 4420DATA 6,20,16,14,12,10,8,6
 4430DEFFNconvstrdate(d$):LOCAL l%,d%,d1%,d2%
 4440IF d$=" " THEN =0
 4450d%=FNnumber(d$,1,l%)
 4460d1%=FNnumber(d$,l%+1,l%)
 4470d2%=FNnumber(d$,l%+1,l%)
 4480IF d%<1 OR d1%<1 OR d2%<0 THEN =0
 4490IF d%>31 OR d1%>12 THEN =0
 4500CASE d1% OF
 4510 WHEN 9,4,6,11 : l%=30
 4520 WHEN 2        : l%=28
 4530 OTHERWISE : l%=31
 4540ENDCASE
 4550IF d%>l% THEN =0
 4560=d%+(d1%<<8)+(d2%<<16)
 4570:
 4580DEFFNconvnumdate(d%)
 4590LOCALd$,l$
 4600d$="":l$=""
 4610IF d%=0 THEN=""
 4620d$=STR$(d% AND &FF):IFLENd$=1 THEN d$="0"+d$
 4630l$=STR$((d% AND &FF00)>>8):IF LENl$=1 THEN l$="0"+l$
 4640d$=d$+split$+l$
 4650l$=STR$((d% AND &FFFF0000)>>16):l$=STRING$(4-LENl$," ")+l$
 4660=d$+split$+l$
 4670:
 4680DEFPROCcopyto(h%)
 4690REM Copy h% TO persd%
 4700FOR o%=1 TO 7
 4710 CASE o% OF
 4720  WHEN 1 : $persd%=$h%
 4730  WHEN 2 :$(persd%+40)=$(h%+surname%)
 4740  WHEN 3 : $(persd%+80)=FNconvnumdate(h%!birthdate%)
 4750  WHEN 4 : $(persd%+91)=FNconvnumdate(h%!deathdate%)
 4760  WHEN 5 : $(persd%+102)=FNconvnumdate(h%!marriagedate%)
 4770  WHEN 6 : $(persd%+113)=FNconvnumdate(h%!divorcedate%)
 4780  WHEN 7 : !icw%=main%:icw%!4=personsex%:SYS "Wimp_GetIconState",,icw%:SYS "Wimp_DeleteIcon",,icw%:$(icw%+28)=CHR$(h%!sex%):icw%!4=!icw%:SYS "Wimp_CreateIcon",,icw%+4
 4790 ENDCASE
 4800NEXT
 4810FOR o%=0 TO 15
 4820 dataset$(o%)=$(h%+(personlength%-(16*65))+o%*65)
 4830NEXT
 4840ENDPROC
 4850:
 4860DEFPROCcopyfrom(h%,mem%)
 4870FOR o%=1 TO 7
 4880 CASE o% OF
 4890  WHEN 1 :$h%=$mem%
 4900  WHEN 2 : $(h%+surname%)=$(mem%+surname%)
 4910  WHEN 3 : !(h%+birthdate%)=FNconvstrdate($(mem%+80))
 4920  WHEN 4 : !(h%+deathdate%)=FNconvstrdate($(mem%+91))
 4930  WHEN 5 : !(h%+marriagedate%)=FNconvstrdate($(mem%+102))
 4940  WHEN 6 : !(h%+divorcedate%)=FNconvstrdate($(mem%+113))
 4950  WHEN 7 : !icw%=main%:icw%!4=personsex%:SYS "Wimp_GetIconState",,icw%: h%!sex%=ASC(LEFT$($(icw%+28),1))
 4960 ENDCASE
 4970NEXT
 4980FOR o%=0 TO 15
 4990 $(h%+(personlength%-(16*65))+o%*65)=dataset$(o%)
 5000NEXT
 5010ENDPROC
 5020:
 5030DEFFNnumber(d$,O%,RETURN O%)
 5040LOCAL n%,n$:n%=0:n$="0123456789"
 5050IF INSTR(n$,MID$(d$,O%,1))=0 THEN i%=i%+1:=-1
 5060WHILE INSTR(n$,MID$(d$,O%,1))<>0 AND O%<=LENd$
 5070 n%=n%*10+(INSTR(n$,MID$(d$,O%,1))-1)
 5080 O%=O%+1
 5090ENDWHILE
 5100=n%
 5110:
 5120DEFPROCnewtree
 5130root%=FNdimperson:PROCcopyfrom(root%,persd%):current_per%=root%
 5140root%!sibling%=nil%:root%!spouse%=nil%:root%!child%=nil%
 5150root%!gen%=0
 5160personnode%=root%
 5170ENDPROC
 5180:
 5190DEFFNnew_tree
 5200PROCcreate_window
 5210PROCnewtree
 5220=0
 5230:
 5240DEFFNadd_sib
 5250LOCAL g%
 5260PROCcopyfrom(current_per%,persd%)
 5270IF spoused% THEN current_per%=personnode%:spoused%=FALSE
 5280WHILE current_per%!sibling%<>nil%
 5290 current_per%=current_per%!sibling%
 5300ENDWHILE
 5310current_per%!sibling%=FNdimperson
 5320!(current_per%!sibling%+gen%)=current_per%!gen%
 5330g%=current_per%!gen%
 5340current_per%=current_per%!sibling%
 5350PROCnils(current_per%)
 5360PROCclearperson
 5370current_per%!gen%=g%
 5380SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
 5390IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 5400IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 5410=0
 5420:
 5430DEFPROCclearperson
 5440$(persd%)="":$(persd%+40)=""
 5450$(persd%+80)=FNconvnumdate(0):$(persd%+91)=$(persd%+80)
 5460$(persd%+102)=$(persd%+80):$(persd%+113)=$(persd%+80)
 5470persd%!sex%=32
 5480dataset$()=STRING$(60," ")
 5490ENDPROC
 5500:
 5510DEFPROCgenpointers(h%)
 5520LOCALsave%
 5530save%=TRUE:PROCtraverse(h%,root%)
 5540ENDPROC
 5550:
 5560DEFPROCtraverse(h%,troot%)
 5570IFtroot%=nil% THEN ENDPROC
 5580IF save% THEN genpointers%!((troot%!gen%)*4)=troot%
 5590IF troot%=h% THEN save%=FALSE
 5600PROCtraverse(h%,troot%!child%)
 5610IF save% THEN PROCtraverse(h%,troot%!sibling%)
 5620ENDPROC
 5630:
 5640DEFPROCleftsib
 5650IFroot%=nil% THEN ENDPROC
 5660 IF root%=current_per% THEN ENDPROC
 5670PROCcopyfrom(current_per%,persd%)
 5680IF spoused% THEN current_per%=personnode%:spoused%=FALSE:PROCcopyto(current_per%):SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
 5690PROCgenpointers(current_per%)
 5700IFcurrent_per%!gen%<>0 AND !(genpointers%!(((current_per%!gen%)-1)*4)+child%)=current_per% THEN ENDPROC
 5710IF current_per%!gen%=0 THEN
 5720 current_per%=FNfindprevsib(root%,current_per%)
 5730ELSE
 5740 current_per%=FNfindprevsib(!(genpointers%!(((current_per%!gen%)-1)*4)+child%),current_per%)
 5750ENDIF
 5760PROCcopyto(current_per%)
 5770SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
 5780IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 5790IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 5800ENDPROC
 5810:
 5820DEFFNfindprevsib(start%,comp%)
 5830IF comp%=start% THEN =comp%
 5840WHILE start%!sibling%<>comp%
 5850 start%=start%!sibling%
 5860ENDWHILE
 5870=start%
 5880:
 5890DEFPROCrightsib
 5900
 5910IFroot%=nil% THEN ENDPROC
 5920PROCcopyfrom(current_per%,persd%)
 5930IF spoused% THEN current_per%=personnode%:spoused%=FALSE:PROCcopyto(current_per%):SYS "Wimp_ForceRedraw",main%,0,0,1280,1023
 5940IF current_per%!sibling%=nil% THEN ENDPROC
 5950current_per%=current_per%!sibling%
 5960PROCcopyto(current_per%)
 5970SYS "Wimp_ForceRedraw",main%,0,0,1280,1023
 5980IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 5990IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 6000ENDPROC
 6010:
 6020DEFFNadd_parent
 6030PROCcopyfrom(current_per%,persd%)
 6040IF spoused% THEN current_per%=personnode%:spoused%=FALSE
 6050s%=FNdimperson
 6060PROCclearperson
 6070PROCnils(s%)
 6080s%!child%=root%
 6090s%!gen%=-1
 6100root%=s%
 6110PROCincgen(root%)
 6120current_per%=root%
 6130SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
 6140IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 6150IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 6160=0
 6170:
 6180DEFPROCincgen(root%)
 6190IF root%=nil% THEN ENDPROC
 6200root%!gen%+=1
 6210PROCincgen(root%!child%)
 6220PROCincgen(root%!sibling%)
 6230ENDPROC
 6240:
 6250DEFPROCnils(s%)
 6260s%!sibling%=nil%:s%!spouse%=nil%:s%!child%=nil%
 6270ENDPROC
 6280:
 6290DEFPROCparent
 6300PROCcopyfrom(current_per%,persd%)
 6310IF current_per%!gen%=0 THEN ENDPROC
 6320IF spoused% THEN current_per%=personnode%:spoused%=FALSE
 6330PROCgenpointers(current_per%)
 6340current_per%=genpointers%!(((current_per%!gen%)-1)*4)
 6350PROCcopyto(current_per%)
 6360SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
 6370IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 6380IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 6390ENDPROC
 6400:
 6410DEFPROCchild
 6420IFroot%=nil% THEN ENDPROC
 6430PROCcopyfrom(current_per%,persd%)
 6440IF spoused% THEN current_per%=personnode%:spoused%=FALSE:PROCcopyto(current_per%):SYS "Wimp_ForceRedraw",main%,0,0,1280,1023
 6450IF current_per%!child% = nil% THEN ENDPROC
 6460current_per%=current_per%!child%
 6470PROCcopyto(current_per%)
 6480SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
 6490IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 6500IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 6510ENDPROC
 6520:
 6530DEFPROCresortbranch
 6540LOCAL s%,p%,e%,c%
 6550PROCgenpointers(current_per%)
 6560c%=current_per%
 6570PROCcopyfrom(c%,persd%)
 6580IF spoused% THEN PROCsortspouse:ENDPROC
 6590IF c%=root% THEN
 6600 root%=c%!sibling%:s%=root%
 6610ELSE
 6620 IF c%!gen%=0 THEN
 6630  s%=root%:p%=nil%
 6640 ELSE
 6650  p%=(genpointers%!(((c%!gen%)-1)*4)):s%=p%!child%
 6660 ENDIF
 6670 IF p%<>nil% AND p%!child%=c% THEN
 6680  p%!child%=c%!sibling%:s%=c%!sibling%
 6690 ELSE
 6700  e%=FNfindprevsib(s%,c%)
 6710  e%!sibling%=c%!sibling%
 6720 ENDIF
 6730ENDIF
 6740IF root%=nil% THEN root%=c%:ENDPROC
 6750IF s%=nil% THEN p%!child%=c%:ENDPROC
 6760os%=s%
 6770WHILE s%!sibling%<>nil% AND !(s%!sibling%+birthdate%)<c%!birthdate%
 6780 s%=s%!sibling%
 6790ENDWHILE
 6800IF os%=s% AND s%!birthdate%>c%!birthdate% THEN
 6810 IF c%!gen%=0 THEN
 6820  c%!sibling%=root%:root%=c%
 6830 ELSE
 6840  c%!sibling%=p%!child%
 6850  p%!child%=c%
 6860 ENDIF
 6870ENDPROC
 6880ENDIF
 6890c%!sibling%=s%!sibling%
 6900s%!sibling%=c%
 6910ENDPROC
 6920:
 6930DEFFNadd_child
 6940PROCcopyfrom(current_per%,persd%)
 6950IFspoused% THEN current_per%=personnode%:spoused%=FALSE
 6960IF current_per%!child%=nil% THEN
 6970 current_per%!child%=FNdimperson
 6980 !(current_per%!child%+gen%)=current_per%!gen%+1
 6990 current_per%=current_per%!child%
 7000ELSE
 7010 current_per%=current_per%!child%
 7020 WHILE current_per%!sibling%<>nil%
 7030  current_per%=current_per%!sibling%
 7040 ENDWHILE
 7050 current_per%!sibling%=FNdimperson
 7060 !(current_per%!sibling%+gen%)=current_per%!gen%
 7070 current_per%=current_per%!sibling%
 7080ENDIF
 7090PROCclearperson
 7100PROCnils(current_per%)
 7110SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
 7120IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 7130IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 7140=0
 7150:
 7160DEFFNadd_spouse
 7170PROCcopyfrom(current_per%,persd%)
 7180IF NOTspoused% THEN spoused%=TRUE:personnode%=current_per%
 7190WHILE current_per%!spouse%<>nil%
 7200current_per%=current_per%!spouse%
 7210ENDWHILE
 7220current_per%!spouse%=FNdimperson
 7230!(current_per%!spouse%+gen%)=current_per%!gen%
 7240current_per%=current_per%!spouse%
 7250PROCclearperson
 7260PROCnils(current_per%)
 7270SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
 7280IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 7290IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 7300=0
 7310:
 7320DEFPROCspouse
 7330IFroot%=nil% THEN ENDPROC
 7340IF current_per%!spouse%=nil% AND NOT(spoused%) THEN ENDPROC
 7350IF current_per%!spouse%=nil% THEN
 7351current_per%=personnode%:spoused%=FALSE:PROCcopyto(current_per%)
 7352ELSE
 7360IF NOTspoused% THEN spoused%=TRUE:personnode%=current_per%
 7370current_per%=current_per%!spouse%
 7380PROCcopyto(current_per%)
 7381ENDIF
 7390SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
 7391IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 7392IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 7400ENDPROC
 7410
 7420 DEFPROCsortspouse
 7430 LOCAL s%,c%
 7440s%=personnode%!spouse%:c%=current_per%
 7450IFs%=c% AND c%!spouse%=nil% THEN ENDPROC
 7460WHILE s%!spouse%<>c%
 7470 s%=s%!spouse%
 7480ENDWHILE
 7490s%!spouse%=c%!spouse%
 7500s%=personnode%!spouse%
 7510IFs%!marriagedate%>c%!marriagedate% THEN c%!spouse%=s%:personnode%!spouse%=c%:ENDPROC
 7520WHILE s%!spouse%<>nil% AND !(s%!spouse%+marriagedate%)<c%!marriagedate%
 7530 s%=s%!spouse%
 7540ENDWHILE
 7550t%=s%!spouse%:s%!spouse%=c%
 7560c%!spouse%=t%:ENDPROC
 7570:
 7580DEFPROCcheckicons
 7590LOCALa$
 7600a$="Are You Sure You wish to Delete?"
 7610block%!0=check%
 7620block%!4=100:block%!8=50:block%!12=400:block%!16=100
 7630block%!20=&C700903D:$(block%+24)="YES"
 7640SYS "Wimp_CreateIcon",0,block% TO dok%
 7650block%!4=500:block%!12=800
 7660$(block%+24)="NO"
 7670SYS "Wimp_CreateIcon",0,block% TO dcancel%
 7680block%!20=&17000339
 7690block%!4=100:block%!8=300:block%!12=800:block%!16=400
 7700block%!24=checkdata%:block%!28=&FFFFFFFF
 7710block%!32=LEN(a$):$checkdata%=a$
 7720namedata%=checkdata%+LENa$+2
 7730SYS "Wimp_CreateIcon",0,block%
 7740$(checkdata%+LENa$+2)="David Peter Breakwell"
 7750block%!24=namedata%
 7760block%!32=LEN($(namedata%))
 7770block%!8=200:block%!16=300
 7780SYS "Wimp_CreateIcon",0,block%
 7790ENDPROC
 7800DEFFNdelete
 7810PROCcopyfrom(current_per%,persd%)
 7820IFroot%=nil% THEN =0
 7830$(namedata%)=$current_per%+" "+$(current_per%+surname%)
 7840IFabove% THEN $(namedata%)=$(namedata%)+"'s Parents"
 7850!block%=check%
 7860SYS "Wimp_GetWindowState",0,block%
 7870SYS "Wimp_OpenWindow",0,block%
 7880 MOUSE RECTANGLE block%!4,block%!8,block%!12-block%!4,block%!16-block%!8
 7890=0
 7900:
 7910DEFPROCdeleteperson(i%)
 7920LOCALs%,t%
 7930IF i%<>dcancel% AND above% THEN PROCdeleteparent:ENDPROC
 7940IF i%=dcancel% THEN
 7950ELSE
 7960 IF spoused% THEN
 7970  s%=personnode%
 7980  WHILE s%!spouse%<>current_per%
 7990   s%=s%!spouse%
 8000  ENDWHILE
 8010  s%!spouse%=current_per%!spouse%
 8020  PROCaddtolist(current_per%)
 8030  current_per%=personnode%
 8040  spoused%=FALSE
 8050 ELSE
 8060  WHILE current_per%!spouse%<>nil%
 8070   s%=!(current_per%!spouse%+spouse%)
 8080   PROCaddtolist(current_per%!spouse%)
 8090   current_per%!spouse%=s%
 8100  ENDWHILE
 8110  IF current_per%!gen%=0 THEN
 8120   PROCadjustroot
 8130    current_per%!sibling%=nil%
 8140    PROCdeletetree(current_per%)
 8150   current_per%=root%
 8160  ELSE
 8170   PROCadjustnorm
 8180   current_per%!sibling%=nil%
 8190   PROCdeletetree(current_per%)
 8200   current_per%=root%
 8210  ENDIF
 8220 ENDIF
 8230ENDIF
 8240PROCenddelete
 8250ENDPROC
 8260:
 8270DEFPROCenddelete
 8280!block%=check%
 8290SYS "Wimp_CloseWindow",0,block%
 8300 MOUSE RECTANGLE 0,0,1280,1024
 8310IF current_per%<>nil% THEN PROCcopyto(current_per%) ELSE PROCclearperson
 8320SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
 8330addstatus%=TRUE
 8340IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 8350IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 8360ENDPROC
 8370:
 8380DEFPROCaddtolist(d%)
 8390d%!next%=delete%
 8400delete%=d%
 8410ENDPROC
 8420:
 8430DEFPROCadjustroot
 8440IF current_per%=root% THEN
 8450 IF current_per%!sibling%<>nil% THEN
 8460  root%=current_per%!sibling%
 8470 ELSE
 8480  root%=current_per%!sibling%
 8490  IF root%<>nil% THEN PROCdecgen(root%)
 8500 ENDIF
 8510ELSE
 8520 s%=root%
 8530 WHILE s%!sibling%<>current_per%
 8540  s%=s%!sibling%
 8550 ENDWHILE
 8560 s%!sibling%=current_per%!sibling%
 8570ENDIF
 8580ENDPROC
 8590:
 8600DEFPROCadjustnorm
 8610PROCgenpointers(current_per%)
 8620p%=genpointers%!(((current_per%!gen%)-1)*4)
 8630IFp%!child%=current_per% THEN
 8640 p%!child%=current_per%!sibling%
 8650ELSE
 8660 p%=p%!child%
 8670 WHILEp%!sibling%<>current_per%
 8680  p%=p%!sibling%
 8690 ENDWHILE
 8700 p%!sibling%=current_per%!sibling%
 8710ENDIF
 8720ENDPROC
 8730:
 8740DEFPROCdecgen(oroot%)
 8750IF oroot%<>nil% THEN
 8760 oroot%!gen%-=1
 8770 PROCdecgen(oroot%!child%)
 8780 PROCdecgen(oroot%!sibling%)
 8790ENDIF
 8800ENDPROC
 8810:
 8820DEFPROCdeletetree(o%)
 8830 LOCAL t%
 8840IF o%<>nil% THEN
 8850 PROCdeletetree(o%!child%)
 8860 PROCdeletetree(o%!sibling%)
 8870 WHILE o%!spouse%<>nil%
 8880  t%=!(o%!spouse%+spouse%)
 8890  PROCaddtolist(o%!spouse%)
 8900  o%!spouse%=t%
 8910 ENDWHILE
 8920 PROCaddtolist(o%)
 8930ENDIF
 8940ENDPROC
 8950:
 8960DEFFNload_tree
 8970file$=$file_dat%
 8980spoused%=FALSE
 8990PROCloadfile(file$)
 9000=0
 9010:
 9020DEFPROCloadfile(file$)
 9030IF file$="" THEN ENDPROC
 9040oldtree$=file$
 9050F%=OPENIN(file$)
 9060T%=BGET#F%:PTR#F%=0
 9070IF root%<>nil% THEN PROCdeletetree(root%)
 9080root%=FNdimperson
 9090PROCload_recur(root%)
 9100CLOSE#F%
 9110PROCcopyto(root%):current_per%=root%
 9120SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
 9130addstatus%=TRUE
 9140IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
 9150IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 9160ENDPROC
 9170:
 9180DEFPROCload_recur(lroot%)
 9190PROCload_per(lroot%):T%=lroot%
 9200WHILE lroot%!spouse%<>nil%
 9210 lroot%!spouse%=FNdimperson
 9220 lroot%=lroot%!spouse%
 9230 PROCload_per(lroot%)
 9240ENDWHILE
 9250lroot%=T%
 9260IF lroot%!sibling%<>nil% THEN
 9270 lroot%!sibling%=FNdimperson
 9280 PROCload_recur(lroot%!sibling%)
 9290ENDIF
 9300IF lroot%!child%<>nil% THEN
 9310 lroot%!child%=FNdimperson
 9320 PROCload_recur(lroot%!child%)
 9330ENDIF
 9340ENDPROC
 9350:
 9360DEFPROCload_per(mem%)
 9370LOCAL o%
 9380INPUT#F%,$(mem%+fname%),$(mem%+surname%)
 9390INPUT#F%,mem%!birthdate%,mem%!deathdate%
 9400INPUT#F%,mem%!marriagedate%,mem%!divorcedate%
 9410INPUT#F%,mem%!sibling%,mem%!child%,mem%!spouse%
 9420INPUT#F%,mem%!gen%:INPUT#F%,mem%!sex%
 9430FOR o%=0 TO 15: INPUT#F%, $(mem%+(personlength%-16*65)+o%*65):NEXT
 9440ENDPROC
 9450:
 9460DEFPROCsave_per(mem%)
 9470LOCAL o%
 9480PRINT#F%,$(mem%+fname%),$(mem%+surname%)
 9490PRINT#F%,mem%!birthdate%,mem%!deathdate%
 9500PRINT#F%,mem%!marriagedate%,mem%!divorcedate%
 9510PRINT#F%,mem%!sibling%,mem%!child%,mem%!spouse%
 9520PRINT#F%,mem%!gen%:PRINT#F%,mem%!sex%
 9530FOR o%=0 TO 15: PRINT#F%,$(mem%+(personlength%-16*65)+o%*65):NEXT
 9540ENDPROC
 9550:
 9560DEFFNsave_tree(file$)
 9570IF root%=nil% THEN =0
 9580IF file$="" THEN =0
 9590oldtree$=file$
 9600 F%=OPENIN(file$):CLOSE#F%:IF F%<>0 THEN OSCLI("DELETE "+file$)
 9610F%=OPENOUT(file$)
 9620PROCsave_recur(root%)
 9630CLOSE#F%
 9640OSCLI("SETTYPE "+file$+" Familyfile")
 9650=0
 9660:
 9670DEFPROCsave_recur(lroot%)
 9680PROCsave_per(lroot%)
 9690T%=lroot%
 9700WHILE lroot%!spouse%<>nil%
 9710 PROCsave_per(lroot%!spouse%)
 9720 lroot%=lroot%!spouse%
 9730ENDWHILE
 9740lroot%=T%
 9750IF lroot%!sibling%<>nil% THEN
 9760 PROCsave_recur(lroot%!sibling%)
 9770ENDIF
 9780IF lroot%!child%<>nil% THEN
 9790 PROCsave_recur(lroot%!child%)
 9800ENDIF
 9810ENDPROC
 9820:
 9830DATA"=","<",">","<=",">=","<>"
 9840:
 9850DEFPROCfindicons
 9860LOCALi%,l%,loop%,inner%
 9870l%=17*7+20+findicon%
 9880!block%=findwind%
 9890FORloop%=1 TO 4
 9900RESTORE 9830
 9910FORinner%=1 TO 6
 9920block%!24=l%+inner%*3+loop%*20
 9930block%!28=&FFFFFFFF
 9940IF inner%=1 THEN block%!20=&C720312D ELSE block%!20=&C700312D
 9950READ $(block%!24):block%!4=520+((inner%-1)*60)
 9960block%!8=390-((loop%+2)*60)
 9970block%!32=LEN$(block%!24)
 9980block%!12=block%!4+50
 9990block%!16=block%!8+50
10000SYS "Wimp_CreateIcon",0,block% TO i%
10010find_icon_num(loop%,inner%)=i%
10020find_icon_num(loop%,0)=find_icon_num(loop%,1)
10030NEXT,
10040ENDPROC
10050:
10060DEFPROCfindclick
10070IF block%!16 = fok% THEN PROCfindperson:ENDPROC
10080FOR loop%=1 TO 4
10090FOR inner%=1 TO 6
10100IF block%!16=find_icon_num(loop%,inner%) THEN
10110 block%!20=findwind%
10120 block%!24=find_icon_num(loop%,0)
10130 find_icon_num(loop%,0)=block%!16
10140 block%!32=0
10150 block%!28=1<<21
10160 SYS "Wimp_SetIconState",0,block%+20
10170 block%!24=find_icon_num(loop%,0)
10180 find_icon_num(loop%,0)=block%!16
10190 block%!32=0
10200 block%!28=1<<21
10210 SYS "Wimp_SetIconState",0,block%+20
10220ENDIF
10230NEXT,
10240ENDPROC
10250:
10260DEFPROCfindperson
10270LOCAL find%
10280PROCcopyfrom(findblk%,fpersd%)
10290find%=nil%
10300PROCfindrecur(root%,find%)
10310IF find%<>nil% THEN
10320 spoused%=FALSE
10330 personnode%=nil%
10340 current_per%=find%
10350 PROCcopyto(current_per%)
10360ELSE
10370ENDIF
10380!block%=findwind%
10390SYS "Wimp_CloseWindow",,block%
10400SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
10410SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
10420ENDPROC
10430:
10440DEFPROCfindrecur(lroot%,RETURN find%)
10450IF find%<>nil% THEN ENDPROC
10460IF FNmatch(lroot%) THEN find%=lroot% :ENDPROC
10470T%=lroot%
10480WHILE lroot%!spouse%<>nil% AND find%=nil%
10490 IF FNmatch(lroot%!spouse%) THEN find%=lroot%
10500 lroot%=lroot%!spouse%
10510ENDWHILE
10520lroot%=T%
10530IF lroot%!sibling%<>nil% THEN PROCfindrecur(lroot%!sibling%,find%)
10540IF lroot%!child%<>nil% THEN PROCfindrecur(lroot%!child%,find%)
10550ENDPROC
10560:
10570DEFFNmatch(lroot%)
10580LOCAL m%
10590m%=TRUE
10600FOR loop%=1 TO 6
10610CASE loop% OF
10620 WHEN 1 : IF $(fpersd%)<>"" AND $(lroot%)<>"" THEN
10630           m%=INSTR($lroot%,$fpersd%)
10640          ENDIF
10650
10660          IF $(fpersd%) ="" THEN m%=TRUE
10670 WHEN 2 : IF $(fpersd%+surname%)<>"" AND $(lroot%+surname%)<>"" THEN
10680           m%=m% AND INSTR($(lroot%+surname%),$(fpersd%+surname%))
10690          ENDIF
10700
10710          IF $(fpersd%+surname%)="" THEN m%=m% AND TRUE
10720 WHEN 3 : IF findblk%!birthdate%<>0 THEN m%=m% AND FNdate(loop%,birthdate%,m%)
10730 WHEN 4 : IF findblk%!deathdate%<>0 THEN m%=m% AND FNdate(loop%,deathdate%,m%)
10740 WHEN 5 : IF findblk%!marriagedate%<>0 THEN
10750           m%=m% AND FNdate(loop%,marriagedate%,m%)
10760          ENDIF
10770 WHEN 6 : IF findblk%!divorcedate%<>0 THEN
10780           m%=m% AND FNdate(loop%,divorcedate%,m%)
10790          ENDIF
10800ENDCASE
10810NEXT
10820=m%
10830:
10840DEFFNdate(loop%,O%,m%)
10850LOCAL fdate%,cdate%
10860fdate%=findblk%!O%
10870cdate%=lroot%!O%
10880IF cdate%=0 AND fdate%<>0 THEN =FALSE ELSE IF cdate%=0 THEN =m%
10890CASE FNfindw(loop%-2) OF
10900 WHEN 1 : M%=fdate%=cdate%
10910 WHEN 2 : M%=cdate%<fdate%
10920 WHEN 3 : M%=cdate%>fdate%
10930 WHEN 4 : M%=cdate%<=fdate%
10940 WHEN 5 : M%=cdate%>=fdate%
10950 WHEN 6 : M%=cdate%<>fdate%
10960ENDCASE
10970=M%
10980:
10990DEFFNfindw(loop%)
11000LOCAL T%
11010T%=1
11020WHILE find_icon_num(loop%,T%)<>find_icon_num(loop%,0)
11030 T%=T%+1
11040ENDWHILE
11050=T%
11060:
11070DEFFNfind
11080!block%=findwind%
11090SYS "Wimp_GetWindowState",0,block%
11100SYS "Wimp_OpenWindow",0,block%
11110=0
11120:
11130DEFFNoverview
11140IF overview% THEN
11150 overview%=FALSE:!block%=over%
11160 SYS "Wimp_GetWindowState",0,block%
11170 SYS "Wimp_CloseWindow",0,block%
11180ELSE
11190 overview%=TRUE
11200 !block%=over%
11210 addstatus%=TRUE
11220 SYS "Wimp_GetWindowState",0,block%
11230 SYS "Wimp_OpenWindow",0,block%
11240ENDIF
11250=0
11260:
11270DEFPROCredrawover
11280 PROCdrawtree(root%)
11290ENDPROC
11300:
11310DEFPROCmaketree(lroot%,x%,y%,mx%,my%, RETURN c% , draw%)
11320LOCAL g%,ox%:r%=32*scaleover
11330IF lroot%=nil% THEN ENDPROC
11340lroot%!col%=x%
11350lroot%!row%=y%
11360column%(lroot%!gen%)=x%
11370IF NOT(draw%) THEN c%=FNcheck(x%,y%,r%,mx%,my%,c%,lroot%)
11380IF lroot%!child%<>nil% THEN
11390ox%=x%
11400 x%=x%-(r%*2.5)*INT(FNcen(lroot%)/2)
11410 IF column%(1+lroot%!gen%)>=x% THEN
11420  x%=column%(1+lroot%!gen%)+2.5*r%
11430  column%(1+lroot%!gen%)=x%
11440 ELSE
11450  column%(1+lroot%!gen%)=x%
11460 ENDIF
11470 PROCmaketree(lroot%!child%,x%,y%-r%*2.75,mx%,my%, c%,  draw%)
11480 x%=ox%
11490ENDIF
11500 PROCmaketree(lroot%!sibling%,x%+r%*2.5,y%,mx%,my%, c%,  draw%)
11510ENDPROC
11520:
11530DEFPROCdrawtree(lroot%)
11540LOCAL g%,r%:r%=32*scaleover
11550IF lroot%=nil% THEN ENDPROC
11560x%=lroot%!col%:y%=lroot%!row%
11570IF lroot%!gen%<>0 THEN MOVE x%,y%+r%:DRAW x%,y%+(r%*1.25)
11580IF lroot%!gen%=0 AND lroot%<>root% THEN MOVE x%,y%:DRAW x%-1.5*r%,y%
11590IF lroot%!sibling%<>nil% AND lroot%!gen%<>0 THEN
11600 MOVE x%,y%+r%*1.25
11610 DRAW x%+2.5*r%,y%+r%*1.25
11620ENDIF
11630IF lroot%=current_per% THEN g%=8 ELSE g%=12
11640IF spoused% AND personnode%=lroot% THEN g%=13
11650SYS "Wimp_SetColour",g%
11660CIRCLE FILL x%,y%,r%
11670SYS "Wimp_SetColour",7
11680CIRCLE x%,y%,r%
11690IF lroot%!child%<>nil% THEN
11700 MOVE x%,y%-r%:DRAW x%,y%-r%*1.25
11710 ox%=!(lroot%!child%+col%)
11720 n%=INT(FNcen(lroot%)/2)
11730 IF ox%=x% THEN n%=0
11740 DRAW ox%+n%*r%*2.5,y%-r%*1.25
11750 DRAW ox%+n%*r%*2.5,y%-r%*1.75
11760ENDIF
11770PROCdrawtree(lroot%!child%)
11780PROCdrawtree(lroot%!sibling%)
11790ENDPROC
11800:
11810DEFFNcheck(x%,y%,r%,mx%,my%,c%,lroot%)
11820IF mx%>=x%-r% AND mx%<=x%+r% THEN
11830 IF my%>=y%-r% AND my%<=y%+r% THEN c%=lroot%
11840ENDIF
11850=c%
11860:
11870DEFFNcen(lroot%)
11880LOCAL T%
11890lroot%=lroot%!child%
11900 IF lroot%!sibling%=nil% THEN =0
11910T%=0
11920WHILE lroot%<>nil%
11930 T%+=1
11940 lroot%=lroot%!sibling%
11950ENDWHILE
11960=T%
11970:
11980DEFPROCcreate_menu(menx%,meny%)
11990menu$="Main Menu|*@~Save Tree`filewindow%`|Browse<browsemenu$>|*Output<outputmenu$>|"
12000IF root%<>nil% THEN menu$=FNstripstar(menu$)
12010browsemenu$="Browse|*Find{find}|@^Overview{overview}|@^View Data{datawindow}|*Delete<deletemenu$>|*Add<addmenu$>|"
12020deletemenu$="Delete|*Parents{deleteabove}|Person{deletebelow}|"
12030IF root%<>nil% THEN browsemenu$=FNstripstar(browsemenu$)
12040IF current_per%!gen%<>0 THEN deletemenu$=FNstripstar(deletemenu$)
12050IFoverview% THEN MID$(browsemenu$,21,1)="#"
12060IFdataview% THEN MID$(browsemenu$,42,1)="#"
12070outputmenu$="Output|~Main Line`filewindow%`|~Full Tree`filewindow%`|~Export`filewindow%`|"
12080addmenu$="Add|Child{add_child}|Sibling{add_sib}|*Parent{add_parent}|Spouse{add_spouse}|"
12090IF root%<>nil% AND current_per%!gen%=0 THEN addmenu$=FNstripstar(addmenu$)
12100menu%=menblk%
12110PROCmakemenu(menu$,menu%)
12120SYS "Wimp_CreateMenu",,menblk%,menx%,meny%
12130current_menu$=menu$
12140ENDPROC
12150:
12160DEFPROCmakemenu(menu$, RETURN mem% )
12170LOCAL t$,loop%,stringtrace%,i%,memcopy%
12180t$=menu$:memcopy%=mem%
12190$mem%=LEFT$(t$,INSTR(t$,"|")-1)
12200t$=MID$(t$,INSTR(t$,"|")+1)
12210mem%?12=7
12220mem%?13=2
12230mem%?14=7
12240mem%?15=0
12250mem%!16=172
12260mem%!20=44
12270mem%!24=0
12280mem%!28=mem%+32
12290 mem%+=28
12300memcopy%=mem%
12310pre$="*@#%^~":post$="{[<|`"
12320REPEAT
12330 flags%=0:shade%=FALSE
12340 WHILE INSTR(pre$,LEFT$(t$,1))<>0
12350  CASE LEFT$(t$,1) OF
12360   WHEN "*" : shade%=TRUE
12370   WHEN "@" : flags%+=2
12380   WHEN "%" : flags%+=4
12390   WHEN "#" : flags%+=1
12400   WHEN "~" : flags%+=8
12410  ENDCASE
12420  t$=MID$(t$,2)
12430 ENDWHILE
12440 IF INSTR(t$,"|")=LEN(t$) THEN flags%+=&80
12450 mem%!0=flags%
12460 mem%!4=-1
12470 IF shade% THEN mem%!8=&7400021 ELSE mem%!8=&7000021
12480 IF (flags%AND4)<>4 THEN
12490  loop%=0:i%=1000
12500  REPEAT
12510   loop%+=1
12520   l%=INSTR(t$,MID$(post$,loop%,1))
12530   IF i%>l% AND l%<>0 THEN i%=l%
12540  UNTIL loop%=LEN(post$)
12550  $(mem%+12)=LEFT$(t$,i%-1)
12560  t$=MID$(t$,INSTR(t$,"|")+1)
12570 ELSE
12580  mem%!8=&7000F29
12590  !(mem%+16)=-1
12600  i%=INSTR(t$,"[")+1
12610  !(mem%+12)=EVAL(MID$(t$,i%,INSTR(t$,",")-i%))
12620  i%=INSTR(t$,",")+1
12630  !(mem%+20)=EVAL(MID$(t$,i%,INSTR(t$,"]")-i%))
12640  t$=MID$(t$,INSTR(t$,"|")+1)
12650 ENDIF
12660 mem%=mem%+24
12670UNTIL t$=""
12680t$=menu$
12690loop%=memcopy%:stringtrace%=INSTR(t$,"|")+1
12700REPEAT
12710REPEAT
12720 stringtrace%+=1
12730 i%=INSTR("|<`",MID$(t$,stringtrace%,1))
12740UNTIL i%<>0
12750IF i%=1 THEN loop%=loop%+24:stringtrace%+=1
12760IF i%=2 THEN
12770 !(loop%+4)=mem%
12780 s$=MID$(t$,stringtrace%+1,INSTR(t$,">",stringtrace%)-stringtrace%-1)
12790 PROCmakemenu(EVAL(s$),mem%)
12800 stringtrace%=INSTR(t$,">",stringtrace%)
12810ENDIF
12820IF i%=3 THEN
12830 s$=MID$(t$,stringtrace%+1,INSTR(t$,"`",stringtrace%)-stringtrace%-1)
12840 !(loop%+4)=EVAL(s$)
12850 stringtrace%=INSTR(t$,"`",stringtrace%+1)
12860ENDIF
12870UNTIL stringtrace%>=LEN(t$)
12880ENDPROC
12890:
12900DEFPROCcreate_icon_menu(menx%,meny%)
12910meny%=96+(3*44)
12920menu$="Family Tree|~Info`infowindow%`|New Tree{new_tree}|Quit{fin}|"
12930menu%=menblk%
12940PROCmakemenu(menu$,menu%)
12950SYS "Wimp_CreateMenu",,menblk%,menx%,meny%
12960current_menu$=menu$
12970ENDPROC
12980:
12990DEFPROCcreate_over(menx%,meny%)
13000 menu$="Overview|Scale<scalemenu$>|Default{defaultover}|Quit{overquit}|"
13010 scalemenu$="Scale|%1[scale%,9]{rescale_over}|"
13020 menu%=menblk%
13030 PROCmakemenu(menu$,menu%)
13040 SYS "Wimp_CreateMenu",,menblk%,menx%,meny%
13050 current_menu$=menu$
13060ENDPROC
13070:
13080DEFPROCcreate_data(mx%,my%)
13090menu$="Data|Print Data{printper}|"
13100 menu%=menblk%
13110 PROCmakemenu(menu$,menu%)
13120 SYS "Wimp_CreateMenu",,menblk%,mx%,my%
13130 current_menu$=menu$
13140ENDPROC
13150:
13160DEFFNprintper
13170PROCcopyfrom(current_per%,persd%)
13180VDU 2
13190PRINT"Printout for ";$(current_per%);" ";
13200PRINT$(current_per%+surname%);" (";
13210PRINTFNconvnumdate(current_per%!birthdate%);" - ";
13220PRINTFNconvnumdate(current_per%!deathdate%);")"
13230IF current_per%!spouse%<>nil% THEN
13240 PRINT"Married on ";FNconvnumdate(current_per%!marriagedate%);" to ";
13250 PRINT$(current_per%!spouse%);" ";$(surname%+current_per%!spouse%)
13260 PRINT"Divorced: ";FNconvnumdate(current_per%!divorcedate%)
13270ENDIF
13280IF current_per%!child%<>nil% THEN
13290 o%=1:l%=current_per%!child%
13291 PRINT"Children:"
13300 WHILE l%<>nil%
13310  PRINTFNconvnumdate(l%!birthdate%);": ";$(l%);" ";$(l%+surname%)
13320  l%=l%!sibling%
13330ENDWHILE
13340PRINT'"Personal Details"'
13350FOR o%=0 TO 15:FOR l%=1 TO 60
13360 IF MID$(dataset$(o%),l%,1)<>" " THEN PRINTMID$(dataset$(o%),l%,1); ELSE PRINTMID$(datamask$(o%),l%,1);
13370NEXT:PRINT:NEXT
13380VDU3
13390=0
13400DEFFNoverquit
13410 overview%=FALSE
13420 !block%=over%
13430 SYS "Wimp_CloseWindow",,block%
13440=0
13450:
13460DEFFNrescale_over
13470 scaleover=VAL($scale%)
13480 addstatus%=TRUE
13490 SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
13500=0
13510:
13520DEFFNdefaultover
13530$scale%="1"
13540=FNrescale_over
13550:
13560:
13570DEFPROCmenu_select
13580menu$=current_menu$
13590SYS "Wimp_GetPointerInfo",,q%
13600but%=q%!8
13610IFblock%!0<>-1 THEN PROCrec_decode(menu$,block%)
13620IF (but%AND1)=1 THEN
13630 PROCcreate_menu(menx%,meny%)
13640FORloop%=0TOmaxgen%:column%(loop%)=0:NEXT
13650ELSE
13660 current_menu$=""
13670ENDIF
13680ENDPROC
13690:
13700DEFPROCrec_decode(menu$,mem%)
13710LOCAL i%,l%
13720fn$=""
13730i%=1+!mem%:l%=1
13740REPEAT
13750 l%=INSTR(menu$,"|",l%+1)
13760 i%-=1
13770UNTIL i%=0
13780i%=INSTR(menu$,"{",l%)
13790IF mem%!4=-1 THEN
13800 IF i%<INSTR(menu$,"|",l%+1) AND i%<>0 THEN
13810  fn$=MID$(menu$,i%+1,INSTR(menu$,"}",i%)-i%-1)
13820 ENDIF
13830ELSE
13840 i%=INSTR(menu$,"<",l%)
13850 l%=INSTR(menu$,">",l%)
13860 PROCrec_decode(EVAL(MID$(menu$,i%+1,l%-i%-1)),mem%+4)
13870ENDIF
13880IFmenu$=addmenu$ THEN addstatus%=TRUE
13890IF fn$<>"" THEN i%=EVAL("FN"+fn$)
13900IFmenu$=addmenu$ THEN !block%=over%:SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
13910 fn$=""
13920ENDPROC
13930:
13940DEFFNstripstar(a$)
13950LOCAL l%
13960FORl%=1TOLENa$
13970 IF MID$(a$,l%,1)="*" THEN MID$(a$,l%,1)="^"
13980NEXT
13990=a$
14000:
14010DEFPROCgotoperson(mx%,my%)
14020IF POINT(mx%,my%)=0 THEN ENDPROC
14030!block%=over%
14040SYS "Wimp_GetWindowState",0,block%
14050b%=block%+4
14060x%=(b%!0-b%!16)
14070y%=(b%!12-b%!20)
14080column%()=0
14090r%=32*scaleover
14100PROCcopyfrom(current_per%,persd%)
14110personnode%=nil%:spoused%=FALSE
14120PROCfindp(root%,mx%-x%,my%-y%, current_per%)
14130PROCcopyto(current_per%)
14140addstatus%=FALSE
14150SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
14160SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
14170IF dataview% THEN SYS "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
14180ENDPROC
14190:
14200DEFPROCfindp(lroot%,mx%,my%, RETURN c%)
14210r%=32*scaleover
14220IF lroot%=nil% THEN ENDPROC
14230c%=FNcheck(lroot%!col%,lroot%!row%,r%,mx%,my%,c%,lroot%)
14240PROCfindp(lroot%!sibling%,mx%,my%,c%)
14250PROCfindp(lroot%!child%,mx%,my%, c%)
14260ENDPROC
14270:
14280DEFPROCmessage(mem%)
14290CASE block%!16 OF
14300 WHEN 3 : PROCloadfromfiler(block%)
14310 WHEN &400C0 : PROCfilesavewindow
14320 WHEN 2 : PROCsavetofiler(block%)
14330 WHEN 1 : PROCsavetoscrap
14340ENDCASE
14350ENDPROC
14360:
14370DEFPROCloadfromfiler(mem%)
14380LOCAL loop%,F%,a$
14390IF mem%!40<>treefile% THEN ENDPROC
14400a$=""
14410a$=FNzerostring(44+mem%)
14420$(fileicon%+44)=a$
14430F%=OPENIN(a$)
14440oldtree$=a$
14450IF root%<>nil% THEN PROCdeletetree(root%)
14460root%=FNdimperson
14470PROCload_recur(root%)
14480CLOSE#F%
14490PROCcopyto(root%):current_per%=root%
14500SYS "Wimp_ForceRedraw",main%,0,0,1280,1024
14510addstatus%=TRUE:spoused%=FALSE
14520IF overview% THEN SYS "Wimp_ForceRedraw",over%,0,0,1280,1024
14530IF mem%!12<>0 THEN END
14540mem%!16=4:mem%!12=1
14550SYS "Wimp_SendMessage",18,block%,block%!4
14560ENDPROC
14570:
14580DEFPROCfilewinicons
14590fileok%=FNplaceicon(filewindow%,180,10,"OK")
14600!fileicon%=filewindow%
14610fileicon%!4=10:fileicon%!8=10
14620fileicon%!12=170:fileicon%!16=60
14630fileicon%!20=&700F125
14640fileicon%!24=fileicon%+44
14650$(fileicon%+44)="treefile"
14660fileicon%!28=-1:fileicon%!32=255
14670SYS "Wimp_CreateIcon",,fileicon%
14680PROCplacefileicon(0)
14690ENDPROC
14700:
14710DEFPROCplacefileicon(N%)
14720fileblock%=fileicon%+300
14730!fileblock%=filewindow%
14740fileblock%!4=2
14750SYS "Wimp_DeleteIcon",,fileblock%
14760fileblock%!4=90:fileblock%!8=80
14770fileblock%!12=160:fileblock%!16=150
14780fileblock%!20=&700613A
14790fileblock%!24=fileblock%+40
14800fileblock%!28=1
14810CASE N% OF
14820 WHEN 0 : $(fileblock%+40)="file_000":$(fileicon%+44)=oldtree$
14830 WHEN 1 : $(fileblock%+40)="file_aff":$(fileicon%+44)=olddraw$
14840 WHEN 2 : $(fileblock%+40)="file_cde":$(fileicon%+44)=oldcsv$
14850ENDCASE
14860fileblock%!32=LEN($(fileblock%+40))
14870SYS "Wimp_CreateIcon",,fileblock% TO filetypeicon%
14880ENDPROC
14890:
14900DEFPROCdragfile
14910!block%=filewindow%
14920SYS "Wimp_GetWindowState",,block%
14930b%=block%+20
14940b%!0=0
14950b%!4=5:b%!8=block%!4+90
14960b%!12=block%!8+80
14970b%!16=b%!8+70
14980b%!20=b%!12+70
14990b%!24=0:b%!28=0:b%!32=1279:b%!36=1024:b%!40=0:b%!44=0:b%!48=0:b%!52=0
15000q%!0=11:q%!4=4:q%!8=-1
15010SYS "OS_ReadVduVariables",q%,q%
15020b%!32=(q%!0+1)<<(q%!4)
15030SYS "Wimp_DragBox",,b%
15040ENDPROC
15050:
15060DEFPROCfilesavewindow
15070CASE block%!32 OF
15080 WHEN 0 : PROCplacefileicon(0):filesave%=0
15090          SYS "Wimp_CreateSubMenu",,block%!20,block%!24,block%!28
15100 WHEN 2 : IF block%!36=2 THEN PROCplacefileicon(2) ELSE PROCplacefileicon(1)
15110          SYS "Wimp_CreateSubMenu",,block%!20,block%!24,block%!28
15120          filesave%=block%!36+1
15130          ENDCASE
15140ENDCASE
15150ENDPROC
15160:
15170DEFPROCdragend
15180SYS "Wimp_GetPointerInfo",,block%
15190IF block%!12=over% OR block%!12=filewindow% OR block%!12=main% OR block%!12=findwind% THEN ENDPROC
15200b%=block%+20
15210!b%=44+LEN($(fileicon%+44))
15220!b%+=4-(!b% MOD 4)
15230b%!4=0:b%!8=0
15240b%!12=0
15250b%!16=1
15260b%!20=block%!12
15270b%!24=block%!16
15280b%!28=block%!0
15290b%!32=block%!4
15300b%!36=2000
15310CASE filesave% OF
15320 WHEN 0 : b%!40=treefile%
15330 WHEN 3 : b%!40=csvfile%
15340 OTHERWISE  : b%!40=&AFF
15350ENDCASE
15360$(b%+44)=FNzerostring(fileicon%+44)
15370SYS "Wimp_SendMessage",17,b%,block%!12
15380IF block%!12=-2 THEN SYS "Wimp_SendMessage",17,b%,-2,block%!16
15390ENDPROC
15400:
15410DEFPROCsavetofiler(block%)
15420CASE filesave% OF
15430 WHEN 0 : o%=FNsave_tree(FNzerostring(block%+44))
15440          oldtree$=FNzerostring(block%+44)
15450 WHEN 1 : PROCsavevertdraw(FNzerostring(block%+44))
15460          olddraw$=FNzerostring(block%+44)
15470 WHEN 2 : PROCsavehoridraw(FNzerostring(block%+44),TRUE)
15480          olddraw$=FNzerostring(block%+44)
15490 WHEN 3 : PROCsavecsv(FNzerostring(block%+44))
15500          oldcsv$ =FNzerostring(block%+44)
15510ENDCASE
15520block%!16=3:SYS "Wimp_SendMessage",17,block%,block%!4
15530SYS "Wimp_CreateMenu",-1
15540filesave%=-1
15550ENDPROC
15560:
15570DEFFNzerostring(mem%)
15580LOCAL a$
15590WHILE ?mem%>31
15600 a$+=CHR$(?mem%)
15610 mem%+=1
15620ENDWHILE
15630=a$
15640:
15650DEFPROCsavetoscrap
15660$(block%+44)="<Wimp$Scrap>"
15670?(block%+44+LEN($(block%+44)))=0
15680block%!0=44+LEN($(block%+44))+1
15690block%!0+=4-(block%!0 MOD 4)
15700block%!16=2
15710block%!36=-1
15720block%!12=block%!8
15730SYS "Wimp_SendMessage",17,block%,block%!4
15740ENDPROC
15750:
15760DEFPROCsavevertdraw(file$)
15770F%=FNopendraw(file$)
15780PROCdrawvert(F%)
15790CLOSE#F%
15800OSCLI("SETTYPE "+file$+" &AFF")
15810addstatus%=TRUE
15820ENDPROC
15830:
15840DEFFNopendraw(file$)
15850F%=OPENOUT(file$)
15860 BPUT#F%,"Draw";
15870 PROCint(201)
15880 PROCint(0)
15890 BPUT#F%,"FAMILYTREE  ";
15900=F%
15910:
15920DEFFNmaxycalc
15930LOCAL l%,h%,h1%,h2%,loop%
15940loop%=genpointers%:h%=0
15950REPEAT
15960h2%=0
15970 h2%=charspc%*5
15980 l%=!loop%
15990 WHILE l%<>nil% AND l%!spouse%<>nil%
16000  h2%+=charspc%*7
16010  l%=l%!spouse%
16020 ENDWHILE
16030 h1%=0
16040 IF !(gen%+!loop%)=0 THEN l%=root% ELSE l%=!(!(loop%-4)+child%)
16050 WHILE l%!sibling%<>nil%
16060  h1%+=charspc%
16070 l%=l%!sibling%
16080ENDWHILE
16090 IF h1%>h2% THEN h2%=h1%
16100 h%+=h2%
16110 loop%+=4
16120UNTIL !(loop%-4)=current_per%
16130=h%
16140:
16150DEFPROCtypesimple(p%,xpos%,ypos%,F%)
16160LOCAL l%,l$
16170l$=$(p%)+" "+$(p%+surname%)+" ( "
16180IF p%!birthdate%<>0 THEN l$+=STR$INT((p%!birthdate% AND &FFFF0000)/&FFFF)
16190l$+=" - "
16200IF p%!deathdate%<>0 THEN l$+=STR$INT((p%!deathdate% AND &FFFF0000)/&FFFF)
16210l$+=" )"
16220PROCplacetext(l$,xpos%,ypos%,F%)
16230ENDPROC
16240:
16250DEFPROCplacetext(l$,xpos%,ypos%,F%)
16260LOCAL l%
16270l%=4-(LEN(l$)MOD4)
16280PROCint(1):PROCint(24+28+LEN(l$)+l%)
16290PROCint(xpos%):PROCint(ypos%):PROCint(xpos%+LEN(l$)*(charspc%/2))
16300PROCint(ypos%+charspc%):PROCint(0):PROCint(0):PROCint(0)
16310PROCint(charspc%/2):PROCint(charspc%):PROCint(xpos%)
16320PROCint(ypos%)
16330BPUT#F%,l$;
16340WHILE l%<>0
16350 BPUT#F%,0
16360 l%-=1
16370ENDWHILE
16380ENDPROC
16390:
16400DEFPROCint(I%)
16410BPUT#F%,I%
16420BPUT#F%,I%>>8
16430BPUT#F%,I%>>16
16440BPUT#F%,I%>>32
16450ENDPROC
16460:
16470DEFPROCdrawvert(F%)
16480LOCAL col%,spcol%,sibcol%,colspc%,yloop%,ynow%,firstchild%
16490col%=0:spcol%=charspc%*15:sibcol%=charspc%*30
16500colspc%=charspc%*15
16510PROCgenpointers(current_per%)
16520yloop%=FNmaxycalc:yparent%=yloop%
16530ynow%=yloop%
16540PROCint(0):PROCint(0):PROCint(charspc%*300):PROCint(yloop%)
16550ploop%=genpointers%
16560REPEAT
16570yparent%=ynow%
16580ynow%=yloop%
16590 person%=!ploop%
16600 IF person%!gen%=0 THEN
16610  firstchild%=root%
16620 ELSE
16630  firstchild%=!(!(ploop%-4)+child%)
16640 ENDIF
16650 y%=yloop%
16660 WHILE firstchild%<>nil%
16670  IF firstchild%<>person% THEN
16680   PROCtypesimple(firstchild%,sibcol%,y%,F%)
16690   y%-=charspc%
16700  ENDIF
16710  firstchild%=firstchild%!sibling%
16720 ENDWHILE
16730 yloop%=FNplaceperson(person%,col%,yloop%,spcol%,colspc%,person%!spouse%,F%,yparent%)
16740 person%=person%!spouse%
16750 WHILE person%!spouse%<>nil% AND person%<>nil%
16760  yloop%=FNplaceperson(nil%,col%,yloop%,spcol%,colspc%,person%!spouse%,F%,yparent%)
16770  person%=person%!spouse%
16780 ENDWHILE
16790 IF y%<yloop% THEN
16800  yloop%=y%
16810 ENDIF
16820 yloop%-=3*charspc%
16830 ploop%+=4
16840UNTIL !(ploop%-4)=current_per%
16850ENDPROC
16860:
16870DEFFNplaceperson(p%,xpos%,ypos%,spos%,colspc%,sp%,F%,yp%)
16880LOCAL xs%,ys%,xe%,ye%
16890IF p%<>nil% THEN
16900 PROCplacetext($p%,xpos%+(colspc%-((charspc%/2)*LEN$p%))/2,ypos%,F%)
16910 PROCplacetext($(p%+surname%),xpos%+(colspc%-((charspc%/2)*LEN$(p%+surname%)))/2,ypos%-charspc%,F%)
16920 PROCplacedate(p%,birthdate%,xpos%,ypos%-(2*charspc%),"Born: ",F%)
16930 PROCplacedate(p%,deathdate%,xpos%,ypos%-(3*charspc%),"Died: ",F%)
16940ENDIF
16950IF sp%<>nil% THEN
16960 PROCplacetext($sp%,spos%+(colspc%-(charspc%/2)*LEN$sp%)/2,ypos%,F%)
16970 PROCplacetext($(sp%+surname%),spos%+(colspc%-(charspc%/2)*LEN$(sp%+surname%))/2,ypos%-charspc%,F%)
16980 PROCplacedate(sp%,birthdate%,spos%,ypos%-(2*charspc%),"Born: ",F%)
16990 PROCplacedate(sp%,deathdate%,spos%,ypos%-(3*charspc%),"Died: ",F%)
17000 PROCplacedate(sp%,marriagedate%,spos%,ypos%-(4*charspc%),"Married: ",F%)
17010 PROCplacedate(sp%,divorcedate%,spos%,ypos%-(5*charspc%),"Divorced: ",F%)
17020ENDIF
17030IF p%<>nil% AND sp%<>nil% THEN
17040 xs%=xpos%+colspc%-(colspc%-((charspc%/2)*LEN$p%))/2
17050 ys%=ypos%+(charspc%/2):ye%=ys%
17060 xe%=spos%+(colspc%-(charspc%/2)*LEN$sp%)/2
17070 PROClineheader(1,xs%,ys%,ye%,ys%)
17080 PROClinecoord(2,xs%+charspc%/2,ys%):PROClinecoord(8,xe%-charspc%/2,ye%)
17090 PROClineend
17100 ELSE
17110  IF p%=nil% AND sp%<>nil% THEN
17120   xs%=spos%-(charspc%/2)*10
17130   xe%=spos%+(colspc%-(charspc%/2)*LEN$sp%)/2
17140   PROClineheader(2,xs%,ypos%,xe%,ypos%+5*charspc%)
17150   PROClinecoord(2,xe%-charspc%/2,ypos%+charspc%/2)
17160   PROClinecoord(8,xs%,ypos%+charspc%/2)
17170   PROClinecoord(8,xs%,ypos%+charspc%*5.5)
17180   PROClineend
17190  ENDIF
17200ENDIF
17210IF p%<>nil% AND p%!gen%<>0 THEN
17220 xs%=xpos%+colspc%/2
17230 xe%=xpos%+colspc%
17240 ys%=ypos%+1.5*charspc%
17250 ye%=yp%+charspc%/2
17260 PROClineheader(3,xs%,ys%,xe%,ye%)
17270 PROClinecoord(2,xs%,ys%):PROClinecoord(8,xs%,ys%+charspc%/2)
17280 PROClinecoord(8,xe%,ys%+charspc%/2):PROClinecoord(8,xe%,ye%)
17290 PROClineend
17300ENDIF
17310ypos%-=5*charspc%
17320IF sp%<>nil% THEN ypos%-=2*charspc%
17330=ypos%
17340:
17350DEFPROClineheader(n%,xs%,ys%,xe%,ye%)
17360PROCint(2)
17370PROCint(24+16+4+12+n%*12)
17380PROCint(xs%):PROCint(ys%)
17390PROCint(xe%):PROCint(ye%)
17400PROCint(-1):PROCint(0)
17410PROCint(0):PROCint(0)
17420ENDPROC
17430:
17440DEFPROClinecoord(n%,xs%,ys%)
17450PROCint(n%)
17460PROCint(xs%):PROCint(ys%)
17470ENDPROC
17480:
17490DEFPROClineend
17500PROCint(0)
17510ENDPROC
17520:
17530DEFPROCplacedate(p%,d%,xpos%,ypos%,add$,F%)
17540IF p%!d%<>0 THEN
17550 d$=add$+FNconvnumdate(p%!d%)
17560 PROCplacetext(d$,xpos%+(colspc%-(charspc%/2)*LENd$)/2,ypos%,F%)
17570ENDIF
17580ENDPROC
17590:
17600DEFPROCsavehoridraw(file$,full%)
17610F%=FNopendraw(file$)
17620PROCdrawhori(F%,full%)
17630CLOSE#F%
17640OSCLI("SETTYPE "+file$+" &AFF")
17650addstatus%=TRUE
17660ENDPROC
17670:
17680DEFPROCdrawhori(F%,full%)
17690LOCAL x%
17700mincol%=&FFFFFFF:maxcol%=0
17710column%()=-&FFFFFFF:maxg%=0
17720PROCsetcolumn(root%,200,mincol%,maxg%)
17730maxg%+=1
17740PROCadjustcolumn(root%,mincol%,maxcol%)
17750pcol%=15*charspc%
17760x%=pcol%*maxcol%
17770PROCint(0):PROCint(0)
17780PROCint(x%):PROCint(maxg%*10*charspc%)
17790PROCdrawhoritree(root%,maxg%*10*charspc%,pcol%,FALSE,F%)
17800ENDPROC
17810:
17820DEFPROCsetcolumn(root%,column%, RETURN mcol%, RETURN mg%)
17830LOCAL lroot%
17840IF root%=nil% THEN ENDPROC
17850IF root%!gen%>mg% THEN mg%=root%!gen%
17860IF column%<mcol% THEN mcol%=column%
17870IF column%<=column%(root%!gen%) THEN
17880 column%=column%(root%!gen%)+1
17890ENDIF
17900root%!col%=column%
17910n%=FNnoofchildren(root%)
17920PROCsetcolumn(root%!child%,column%+1-(n%/2),mcol%,mg%)
17930lroot%=root%!spouse%
17940WHILE lroot%<>nil%
17950 column%+=1
17960 lroot%!col%=column%
17970 lroot%=lroot%!spouse%
17980ENDWHILE
17990column%(root%!gen%)=column%
18000PROCsetcolumn(root%!sibling%,column%+1,mcol%,mg%)
18010ENDPROC
18020:
18030DEFPROCadjustcolumn(root%,mincol%, RETURN maxcol%)
18040LOCAL lroot%
18050IF root%=nil% THEN ENDPROC
18060root%!col%-=mincol%
18070IF root%!col%>maxcol% THEN maxcol%=root%!col%
18080lroot%=root%!spouse%
18090WHILE lroot%<>nil%
18100 lroot%!col%-=mincol%
18110 IF root%!col%>maxcol% THEN maxcol%=root%!col%
18120 lroot%=lroot%!spouse%
18130ENDWHILE
18140PROCadjustcolumn(root%!child%,mincol%,maxcol%)
18150PROCadjustcolumn(root%!sibling%,mincol%,maxcol%)
18160ENDPROC
18170:
18180DEFPROCdrawhoritree(p%,ypos%,colspc%,sp%,F%)
18190IFp%=nil% THEN ENDPROC
18200height%=ypos%-8*charspc%
18210xpos%=p%!col%*colspc%
18220IF NOTsp% THEN
18230PROCplacetext($p%,xpos%+(colspc%-((charspc%/2)*LEN$p%))/2,ypos%,F%)
18240PROCplacetext($(p%+surname%),xpos%+(colspc%-((charspc%/2)*LEN$(p%+surname%)))/2,ypos%-charspc%,F%)
18250PROCplacedate(p%,birthdate%,xpos%,ypos%-(2*charspc%),"Born: ",F%)
18260PROCplacedate(p%,deathdate%,xpos%,ypos%-(3*charspc%),"Died: ",F%)
18270ENDIF
18280IF sp% THEN
18290 PROCplacetext("And "+$p%,xpos%+(colspc%-((charspc%/2)*(LEN$p%+4)))/2,ypos%,F%)
18300 PROCplacetext($(p%+surname%),xpos%+(colspc%-((charspc%/2)*LEN$(p%+surname%)))/2,ypos%-charspc%,F%)
18310 PROCplacedate(p%,marriagedate%,xpos%,ypos%-5*charspc%,"Married:",F%)
18320 PROCplacedate(p%,birthdate%,xpos%,ypos%-(3*charspc%),"Born: ",F%)
18330 PROCplacedate(p%,deathdate%,xpos%,ypos%-(4*charspc%),"Died: ",F%)
18340 PROCplacedate(p%,divorcedate%,xpos%,ypos%-(6*charspc%),"Divorced: ",F%)
18350ENDIF
18360IF p%!gen%<>0 AND NOT(sp%) THEN
18370 xs%=xpos%+colspc%/2:xe%=xs%
18380 ys%=ypos%+charspc%+charspc%/4:ye%=ys%+charspc%/4
18390 PROClineheader(1,xs%,ys%,xe%,ye%)
18400 PROClinecoord(2,xs%,ys%):PROClinecoord(8,xe%,ye%)
18410 PROClineend
18420ENDIF
18430IF p%!spouse%<>nil% AND p%!child%<>nil% THEN
18440 xs%=xpos%+colspc%/2:xe%=xs%+colspc%
18450 ys%=ypos%-7*charspc%:ye%=ys%+charspc%/2
18460 IF !(p%!spouse%+divorcedate%)=0 THEN ye%+=charspc%:ys%+=charspc%
18470 IF !(p%!spouse%+marriagedate%)=0 AND ys%=ypos%-6*charspc% THEN ye%+=charspc%:ys%+=charspc%
18480 IF ys%=ypos%-5*charspc% THEN ye%+=charspc%/2
18490 PROClineheader(2,xs%,ys%,xe%,ye%)
18500 PROClinecoord(2,xs%,ys%):PROClinecoord(8,xe%,ys%)
18510 PROClinecoord(8,xe%,ye%):PROClineend
18520ENDIF
18530IF p%!spouse%<>nil% AND p%!child%=nil% THEN
18540 xs%=xpos%+colspc%-charspc%*3:xe%=xpos%+colspc%+charspc%*3
18550 ys%=ypos%+charspc%/2:ye%=ys%
18560 PROClineheader(1,xs%,ys%,xe%,ye%)
18570 PROClinecoord(2,xs%,ys%):PROClinecoord(8,xe%,ys%)
18580 PROClineend
18590ENDIF
18600IF sp% THEN ENDPROC
18610lp%=p%!spouse%
18620WHILE lp%<>nil%
18630 PROCdrawhoritree(lp%,ypos%,colspc%,TRUE,F%)
18640 lp%=lp%!spouse%
18650ENDWHILE
18660PROCdrawhoritree(p%!child%,ypos%-10*charspc%,colspc%,FALSE,F%)
18670PROCdrawhoritree(p%!sibling%,ypos%,colspc%,FALSE,F%)
18680IF p%!child%<>nil% THEN
18690 n%=FNlastchild(p%!child%)
18700 c%=!(p%!child%+col%)
18710 xs%=c%*colspc%+colspc%/2:xe%=(n%+.5)*colspc%
18720 ys%=ypos%-8.5*charspc%:ye%=ys%
18730 PROClineheader(1,xs%,ys%,xe%,ye%)
18740 PROClinecoord(2,xs%,ys%):PROClinecoord(8,xe%,ye%)
18750 PROClineend
18760 xs%=p%!col%*colspc%+(colspc%/2):ye%=ypos%-4*charspc%
18770 n%=n%/2
18780 xe%=(FNcolumn(p%!child%,p%!col%)+.5)*colspc%
18790 ys%=ypos%-8.5*charspc%
18800 IF xe%>xs% THEN
18810  PROClineheader(3,xs%,ys%,xe%,ye%)
18820 ELSE
18830  PROClineheader(3,xe%,ys%,xs%,ye%)
18840 ENDIF
18850 PROClinecoord(2,xs%,ye%):PROClinecoord(8,xs%,ys%+height%)
18860 PROClinecoord(8,xe%,ys%+height%):PROClinecoord(8,xe%,ys%)
18870 PROClineend
18880ENDIF
18890ENDPROC
18900:
18910DEFFNnoofchildren(root%)
18920LOCAL lroot%
18930root%=root%!child%
18940no%=0
18950WHILE root%<>nil%
18960 no%+=1
18970 lroot%=root%
18980 WHILE lroot%!spouse%<>nil%
18990  no%+=1
19000  lroot%=lroot%!spouse%
19010 ENDWHILE
19020 root%=root%!sibling%
19030ENDWHILE
19040=no%
19050:
19060DEFFNcolumn(p%,n%)
19070LOCAL c%,pl%
19080c%=-10
19090WHILE p%<>nil%
19100 IF ((p%!col%-n%)^2)<((c%-n%)^2) THEN c%=p%!col%
19110 pl%=p%
19120 WHILE pl%!spouse%<>nil%
19130  pl%=pl%!spouse%
19140  IF ((pl%!col%-n%)^2)<((c%-n%)^2) THEN c%=pl%!col%
19150 ENDWHILE
19160 p%=p%!sibling%
19170ENDWHILE
19180=c%
19190:
19200DEFFNlastchild(p%)
19210WHILE p%!sibling%<>nil%
19220 p%=p%!sibling%
19230ENDWHILE
19240=p%!col%
19250:
19260DEFFNdeleteabove
19270above%=TRUE:=FNdelete
19280:
19290DEFFNdeletebelow
19300above%=FALSE:=FNdelete
19310:
19320DEFPROCdeleteparent
19330PROCgenpointers(current_per%)
19340p%=genpointers%!(((current_per%!gen%)-1)*4)
19350troot%=p%!child%
19360p%!child%=nil%
19370PROCdeletetree(root%)
19380root%=troot%
19390WHILE root%!gen%<>0
19400 PROCdecgen(root%)
19410ENDWHILE
19420PROCenddelete
19430ENDPROC
19440:
19450DEFPROCsavecsv(file$)
19460LOCAL f%
19470f%=OPENOUT(file$)
19480PROCsavetreecsv(root%,f%)
19490CLOSE#f%
19500OSCLI("SETTYPE "+file$+" CSVFile")
19510ENDPROC
19520:
19530DEFPROCsavetreecsv(troot%,f%)
19540LOCAL lroot%
19550IF troot%<>nil% THEN
19560 PROCsavepersoncsv(troot%,f%,"M")
19570 lroot%=troot%!spouse%
19580 WHILE lroot%<>nil%
19590  PROCsavepersoncsv(lroot%,f%,"S")
19600  lroot%=lroot%!spouse%
19610 ENDWHILE
19620 PROCsavetreecsv(troot%!sibling%,f%)
19630 PROCsavetreecsv(troot%!child%,f%)
19640ENDIF
19650ENDPROC
19660:
19670DEFPROCsavepersoncsv(troot%,f%,t$)
19680LOCALa$,loop%,par%,point%
19690IF troot%=nil% THEN ENDPROC
19700a$=""
19710a$+=$(troot%)+","+$(troot%+surname%)+","
19720a$+=CHR$(troot%!sex%)+","
19730a$+=FNconvnumdate(troot%!birthdate%)+","
19740a$+=FNconvnumdate(troot%!deathdate%)+","
19750a$+=FNconvnumdate(troot%!marriagedate%)+","
19760a$+=FNconvnumdate(troot%!divorcedate%)+","
19770a$+=STR$(troot%!gen%)+","
19780PROCgenpointers(troot%)
19790IF troot%!gen%=0 OR t$="S" THEN
19800  a$+=","
19810ELSE
19820  par%=!(genpointers%+((troot%!gen%)-1)*4)
19830  loop%=1:point%=par%!child%
19840  WHILE point%<>troot%
19850   loop%+=1:point%=point%!sibling%
19860  ENDWHILE
19870  a$+=STR$(loop%)+FNending(loop%)+","
19880  a$+=$(par%)+" "+$(par%+surname%)
19890ENDIF
19900a$+=","+t$
19910BPUT#f%,a$
19911REM Datacard Data is held as strings in memory
19912REM at troot%+personlength%-(16*65)+l%*65 (l%= 0..15)
19920ENDPROC
19930:
19940DEFFNending(l%)
19950LOCALend$
19960IF l%>3 AND l%<21 THEN ="th"
19970CASE l%MOD 10 OF
19980WHEN 1 : end$="st"
19990WHEN 2 : end$="nd"
20000WHEN 3 : end$="rd"
20010OTHERWISE :end$="th"
20020ENDCASE
20030=end$
20040:
20050DEFFNdatawindow
20060IF dataview% THEN
20070 dataview%=FALSE:!block%=datawindow%
20080 SYS "Wimp_GetWindowState",0,block%
20090 SYS "Wimp_CloseWindow",0,block%
20100ELSE
20110 dataview%=TRUE:!block%=datawindow%
20120 SYS "Wimp_GetWindowState",0,block%
20130 SYS "Wimp_OpenWindow",0,block%
20140ENDIF
20150=0
20160:
20170DEFPROCdataviewinit
20180RESTORE 20240
20190FOR l%=1 TO 16
20200 READ datamask$(l%)
20210NEXT
20220ENDPROC
20230:
20240DATA "Location of Birth:"
20250DATA "         of Death:"
20260DATA "Occupation:"
20270DATA "Address:"
20280DATA "Address:"
20290DATA "Address:"
20300DATA "Reference:"
20310DATA ""
20320DATA ""
20330DATA "Comments:"
20340DATA ""
20350DATA ""
20360DATA ""
20370DATA "Nicknames:"
20380DATA ""
20390DATA ""
20400:
20410DEFPROCredrawdata
20420LOCAL loop%,w%,h%,ox%,oy%
20430h%=((block%!40+16)DIV 32)-((block%!32-16)DIV 32)
20440w%=((block%!36+8)DIV 16)-((block%!28-9)DIV 16)
20450ox%=(block%!28-(block%!4-block%!20))DIV 16
20460oy%=(block%!40-(block%!16-block%!24))DIV 32
20470IF ox%<=0 THEN ox%=0
20480IF oy%>15 THEN oy%=15
20490FOR loop%=oy%+1 TO  oy%-h%+1 STEP -1
20500IF loop%<=16 AND loop%>0 THEN
20510 SYS "Wimp_SetColour",11
20520 MOVE ox%*16,loop%*32-1
20530 PRINTMID$(datamask$(17-loop%),ox%+1,(ox%+w%+1))
20540 SYS "Wimp_SetColour",7
20550 MOVE ox%*16,loop%*32-1
20560 PRINTMID$(dataset$(17-loop%),ox%+1,(ox%+w%+1))
20570ENDIF
20580NEXT
20590ENDPROC
20600:
20610DEFPROCputcaretintodata(mx%,my%)
20620!block%=datawindow%
20630SYS "Wimp_GetWindowState",,block%
20640rx%=(mx%-block%!4)+block%!20
20650ry%=(my%-block%!8)+(block%!24-(block%!16-block%!8))
20660rx%=rx%DIV16
20670ry%=ry%DIV32
20680SYS "Wimp_SetCaretPosition",datawindow%,-1,rx%*16,(ry%*32),&1000020,0
20690datatx%=rx%:dataty%=ry%
20700datasx%=rx%*16:datasy%=32*ry%
20710ENDPROC
20720:
20730DEFPROCenterdata
20740CASE block%!24 OF
20750 WHEN &18C : datasx%-=16
20760 WHEN &18D : datasx%+=16
20770 WHEN &18E : datasy%-=32
20780 WHEN &18F : datasy%+=32
20790 OTHERWISE PROCchardata
20800ENDCASE
20810IF datasy%>15*32 THEN datasy%=0
20820IF datasy%<0 THEN datasy%=15*32
20830IF datasx%<0 THEN datasx%=60*16
20840IF datasx%>60*16 THEN datasx%=0
20850datatx%=datasx%/16
20860dataty%=datasy%/32
20870SYS "Wimp_SetCaretPosition",datawindow%,-1,datasx%,datasy%,&1000020,0
20880ENDPROC
20890:
20900DEFPROCchardata
20910mx%=datatx%
20920my%=16-dataty%
20930CASE block%!24 OF
20940 WHEN 8 : MID$(dataset$(my%),mx%)=MID$(dataset$(my%),mx%+1)
20950          MID$(dataset$(my%),60)=" "
20960          datasx%-=16
20970          SYS "Wimp_ForceRedraw",datawindow%,0,datasy%,60*16,datasy%+32
20980 WHEN&1CD:dataset$(my%)=LEFT$(dataset$(my%),mx%)+" "+MID$(dataset$(my%),mx%+1)
20990        dataset$(my%)=LEFT$(dataset$(my%),60)
21000        SYS "Wimp_ForceRedraw",datawindow%,0,datasy%,60*16,datasy%+32
21010 OTHERWISE IF block%!24<127 THEN
21020             MID$(dataset$(my%),mx%+1,1)=CHR$(block%!24)
21030             datasx%+=16
21040             SYS "Wimp_ForceRedraw",datawindow%,datasx%-16,datasy%,datasx%+16,datasy%+32
21050           ELSE
21060            SYS "Wimp_ProcessKey",block%!24
21070           ENDIF
21080ENDCASE
21090IF datasx%>=(60*16) THEN datasy%-=32:datasx%=0
21100ENDPROC

� >!FAMILY.!RUNIMAGE
:
	f$=""
(ș "OS_GetEnv" � EnvStr$
2� �EnvStr$," -quit ") �
< I%=�EnvStr$,"""")
F I%=�EnvStr$,"""",I%+1)
P  �I%+=1:��EnvStr$,I%,1)<>" "
Z f$=�EnvStr$,I%)
d�
n:
x:
�� � �error
�
�setup
��loadfile(f$)
�	�main
��finish
��
�:
���setup
�alias$="<Family$Dir>"
�treefile%=0:csvfile%=&CDE
�*nil%=&FFFFFFFF:root%=nil%:delete%=nil%
�current_menu$=""
�addstatus%=�
addmenu$="":filesave%=-1
update%=�:split$="/"
#savestatus%=0:charspc%=4096*1.5
"personnode%=nil%:spoused%=�
,-overview%=�:maxgen%=30:� column%(maxgen%)
6dataview%=�
@� scale% 10:$scale%="1"
Jscaleover=1
T7� q% 100, block% 2000, menblk% 10000,checkdata% 100
^/�vdata% 30,au% 30,pur% 40,pname% 30,icw% 30
hversion$="2.40  <18.06.91>"
r2� iconblk% 200,findicon% 400, genpointers% 100
|� fileicon% 400
�� find_icon_num(6,6)
�� file_dat% 255
�! � datamask$(16),dataset$(16)
��dataviewinit
�dataset$()=�60,�(32))
�+titfcol%=7:titbcol%=2:fgcol%=7:bgcol%=0
�"scrbcol%=3:scrfcol%=1:high%=12
�current_per%=root%
��offsets
�0� persd% personlength%,fpersd% personlength%
�findblk%=�dimperson
�$q%="TASK"
�4ș "Wimp_Initialise",200,!q%,"Family" � ,handle%
 �sprites(alias$+".!Sprites")
iconh%=�iconbar("!Family")
oldtree$="treefile"
&olddraw$="drawfile"
0oldcsv$="csvfile"
:�windows
Ddatasx%=0:datasy%=0
Ndatatx%=0:dataty%=0
X�
b:
l
��main
v�
� �poll(%10011111110110110011)
�-� (reason%=17 � reason%=18) � block%!16=0
��
�:
�ݤiconbar(spname$)
�!block%=-1
�block%!4=0
�block%!8=0
�block%!12=63
�block%!16=64
�block%!20=&2102
�� block%!24 (�spname$+1)
�$(block%!24)=spname$
block%!28=sprite%
block%!32=(�spname$+1)
(ș "Wimp_CreateIcon",,block% � icon%
 
=icon%
*:
4��sprites(file$)
>sp=�(file$)
Hdim%=�#sp+16
R�#sp
\� sprite% dim%
f!sprite%=dim%
psprite%!4=0
zsprite%!8=16
�sprite%!12=16
�)ș "OS_SpriteOp",256+10,sprite%,file$
��
�:
���poll(mask%)
�!block%=mask%
�%ș "Wimp_Poll",0,block% � reason%
�� reason% �action(reason%)
��
�:
���action(reason%)
�Ȏ reason% �
�� 1 : �redrawwin(block%!0)
� 2 : �open
� 3 : �close
;� 6 : �check_mouse(!block%,block%!4,block%!8,block%!12)
$� 7 : �dragend
.� 8 : �charent
8� 9 : �menu_select
B� 17,18 : �message(block%)
L�
V�
`:
j$��check_mouse(mx%,my%,but%,hnd%)
t
Ȏ but% �
~� 2 : mx%-=64:Ȏ hnd% �
�% � -2 :�create_icon_menu(mx%,my%)
�$ � main% : �create_menu(mx%,my%)
�$ � over% : �create_over(mx%,my%)
�* � datawindow% : �create_data(mx%,my%)
��
�� 4 : Ȏ hnd% �
�� -2 : �create_window
�.� datawindow% : �putcaretintodata(mx%,my%)
�)� main% : addstatus%=�:Ȏ block%!16 �
�D � ok% : addstatus%=�:�7:� root%=nil% � �newtree � �resortbranch
� � ileft% : �leftsib
� � iright% : �rightsib
 � idown% : �child

 � iup% : �parent
 � ispouse% : �spouse
 �
(@ � block%!16<>-1 � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
2'� check% : �deleteperson(block%!16)
<� findwind% : �findclick
F"� over% : �gotoperson(mx%,my%)
P)� filewindow% : � block%!16=fileok% �
Z&                    Ȏ filesave% �
d=                     � 0 : o%=�save_tree($(fileicon%+44))
n=                     � 1 : �savevertdraw($(fileicon%+44))
x?                     � 2 : �savehoridraw($(fileicon%+44),�)
�8                     � 3 : �savecsv($(fileicon%+44))
�                    �
�/                    ș "Wimp_CreateMenu",-1
�                   �
��
�� 1 : Ȏ hnd% �
��
� � 64 : �dragfile
��
��
�:
���set_version(pt%,H%,ver$)
�!q%=pt%
q%!4=H%
ș "Wimp_GetIconState",,q%
$q%!28=ver$
"
q%!8=0
,q%!12=0
6ș "Wimp_SetIconState",,q%
@�
J:
T��finish
^#ș "Wimp_CloseDown",handle%,!q%
h�
r�
|:
���error
�ș "Wimp_DragBox",,0
�
!block%=�
�error=�
�
Ȏ � �
�7� 222 : $(block%+4)="This file does not exist"+�(0)
�:� 204 : $(block%+4)="Invalid Filename for Saving"+�(0)
�
�6$(block%+4)="(Internal error code"+�(�)+") "+�$+�0
��
�flags=1
�/ș "Wimp_ReportError",block%,flags,"Family"
�� error � �finish � �main:�
�
:
��create_window
&!block%=main%
0block%!4=300
:block%!12=1300
Dblock%!16=800
Nblock%!20=0
Xblock%!24=500
bblock%!28=-1
l ș "Wimp_OpenWindow",,block%
v�
�:
���close
�!� !block%=over% � overview%=�
�'� !block%=datawindow% � dataview%=�
�!ș "Wimp_CloseWindow",,block%
��
�:
�
��open
� ș "Wimp_OpenWindow",,block%
��
�:
�	ݤfin
��finish
=0
:
Vݤcreatewindow(title$,flags%,fgcol%,bgcol%,maxX%,maxY%,waL%,waB%,waR%,waT%,filer%)
 � h%
*block%!0=waL%:block%!4=waB%
4 block%!8=waR%:block%!12=waT%
>block%!16=0:block%!20=maxY%
H!block%!24=-1:block%!28=flags%
Rblock%?32=titfcol%
\block%?33=titbcol%
fblock%?34=fgcol%
pblock%?35=bgcol%
zblock%?36=scrbcol%
�block%?37=scrfcol%
�block%?38=high%
�Ȏ filer% �
�) � 1 : block%?35=1:block%?38=titbcol%
� � 2 : block%?27=&18
��
�block%?39=0
�block%!40=0
�block%!44=0
�block%!48=maxX%
�block%!52=maxY%
�block%!56=&2D
�block%!60=&3000
	block%!64=0
	block%!68=0
	$(block%+72)=�title$,11)
	$block%!84=0
	.(ș "Wimp_CreateWindow",0,block% � h%
	8=h%
	B:
	L
��windows
	VDmain%=�createwindow("Family Tree",&F,7,0,1000,500,0,0,500,500,0)
	`Dover%=�createwindow("Overview",&F,7,0,1279,1023,50,50,950,550,0)
	jEcheck%=�createwindow("Delete",&91,7,0,900,400,150,250,1050,750,1)
	tNfindwind%=�createwindow("Find Person",&1F,7,0,1000,500,250,250,1250,740,0)
	~Gfilewindow%=�createwindow("Save as:",131,7,0,250,160,0,0,600,160,1)
	�Jinfowindow%=�createwindow("Information",131,7,0,625,250,0,0,700,500,1)
	�Pdatawindow%=�createwindow("Person Data",&100F,7,0,16*60,16*32,0,0,500,500,2)
	�&� datawindow is 40 x 16 characters
	��filewinicons
	��infoicons
	�*ileft%=�placeicon(main%,825,95,�(136))
	�)ispouse%=�placeicon(main%,880,95,"S")
	�+iright%=�placeicon(main%,935,95,�(137))
	�)iup%=�placeicon(main%,880,155,�(139))
	�*idown%=�placeicon(main%,880,35,�(138))
	��mainicons(�,iconblk%)
	��mainicons(�,findicon%)
�findicons

�checkicons
�

(:
2
��offsets
<fname%=0
Fsurname%=40
Pbirthdate%=80
Zdeathdate%=84
dmarriagedate%=88
ndivorcedate%=92
xsibling%=96
�child%=100
�spouse%=104
�gen%=108
�col%=112
�row%=116
�sex%=120
�personlength%=200+16*65
�next%=0
��
�:
���redrawwin(h%)
�column%()=0
�D� addstatus% � �maketree(root%,640,1023-40,0,0, current_per%, �)
addstatus%=�
(ș "Wimp_RedrawWindow",0,block% � m%
b%=block%+4
"x0%=b%!0-b%!16
,y0%=b%!12-b%!20
6	ȕ m%
@ȑ x0%,y0%
JȎ !block% �
T � main% : �redrawmain
^ � over% : �redrawover
h  � datawindow% : �redrawdata
r�
|
ȑ 0,0
�) ș "Wimp_GetRectangle",0,block% � m%
��
��
�:
���redrawmain
� ș "Wimp_SetColour",7
� ȓ 815,25,175,185
��
�:
�� "First Names"
�� "Surname"
�� "Date of Birth"
�� "Date of Death"
� "Marriage Date"
� "Divorce Date"
:
&ݤplaceicon(h%,x%,y%,a$)
0&!block%=h%:block%!4=x%:block%!8=y%
:,block%!12=x%+�(a$)*16+29:block%!16=y%+50
Dblock%!20=&C700403D
N$(block%+24)=a$
X&ș "Wimp_CreateIcon",0,block% � h%
b =h%
l:
v��infoicons
�� i%,Y%,a$,b$,a%
�
� �T`M
��Y%=10 � 190 �60
�� a$,b$,a%
��Y%=10 � b$=version$
�7 i%=�justtexti(infowindow%,10,Y%,150,a$,&7000011,0)
�9 i%=�justtexti(infowindow%,150,Y%,465,b$,&700013D,a%)
��
��
�:
�%ݤjusttexti(h%,x%,y%,w%,a$,f%,a%)
�&!block%=h%:block%!4=x%:block%!8=y%
�#block%!12=x%+w%:block%!16=y%+50

block%!20=f%

Q� a%=0 � $(block%+24)=a$ � block%!24=a%:block%!28=-1:block%!32=�(a$)+1:$a%=a$

&ș "Wimp_CreateIcon",0,block% � h%

 � "Version:",version$,vdata%,"Author:","David Breakwell",au%,"Purpose:","Family Tree Program",pur%,"Name:","!FAMILY",pname%

*@� "!FAMILY","Family Tree Program","David Breakwell",version$

4:

>ݤdimperson

H
� person%

R&� �-�<personlength%+100 � �=�+1024

\T� delete%=nil% � � person% personlength% � person%=delete%:delete%=delete%!next%

f=person%

p:

z��mainicons(M%,mem%)

�� iconblk%

�iconblk%=mem%

�
� �d`K

��loop%=1 � 6

�- � M% � !block%=main% � !block%=findwind%

�8 block%!24=(iconblk%+(17*loop%)):block%!28=&FFFFFFFF

� block%!20=&C7000125

�A � $(iconblk%+(17*loop%)):block%!4=20:block%!8=390-(loop%*60)

�& block%!32=�$(iconblk%+(17*loop%))

�1 block%!12=block%!4+270:block%!16=block%!8+50

�" ș "Wimp_CreateIcon",0,block%

�$ block%!4=300:block%!20=&700F125

� Ȏ loop% �
  � 1 : l%=0
  � 2 : l%=40
  � 3 : l%=80
$  � 4 : l%=91
.  � 5 : l%=102
8  � 6 : l%=113
B �
L6 � M% � block%!24=persd%+l% � block%!24=fpersd%+l%
VK � loop%<3 � block%!32=41:$(block%!24)="" � block%!32=12:!(block%!24)=0
`( block%!12=block%!4+(block%!32+1)*16
j' ș "Wimp_CreateIcon",0,block% � I%
t �M% � loop%=1 � mainbase%=I%
~!�M% � loop%=1 � findbase%=I%
��
��clearperson
�0block%!20=&C700013D:block%!4=20:block%!8=420
�0block%!12=block%!4+960:block%!16=block%!8+50
�block%!24=(iconblk%+7*17)
�
� M% �
�% $(iconblk%+7*17)="Personal Data"
��
�# $(iconblk%+7*17)="Find Person"
��
�!ș "Wimp_CreateIcon",0,block%
�0block%!4=550:block%!20=&C700913D:block%!8=30
0block%!12=block%!4+200:block%!16=block%!8+50

?block%!24=(iconblk%+8*17):$(iconblk%+8*17)="OK":block%!32=2

� �(M%) �
 block%!4=880:block%!8=30
(  block%!12=970:block%!16=260
2) ș "Wimp_CreateIcon",0,block% � fok%
<�
F( ș "Wimp_CreateIcon",0,block% � ok%
P�
Z
� M% �
d !block%=main%
n block%!4=550:block%!8=210
x  block%!12=650:block%!16=260
� block%!20=&C700003D
� $(block%+24)="Sex"
�! ș "Wimp_CreateIcon",,block%
� block%!4=670:block%!12=770
�+ block%!20=%111000000001111000000111101
� $(block%+24)=""
�. ș "Wimp_CreateIcon",,block% � personsex%
��
��
�:
�
��charent
�� f%
�(� !block%=datawindow% � �enterdata:�
-� !block% <>main% � !block% <>findwind% �
# ș "Wimp_ProcessKey",block%!24
 �
"�
,Ȏ block%!24 �
6 � 13  : � �TzQ
@ � 399 : � �DDQ
J � 398 : � �TzQ
T'  : ș "Wimp_ProcessKey",block%!24
^�
hf%=block%!24
r$� f%<>13 � f%<>399 � f%<>398 � �
|&ș "Wimp_GetCaretPosition",,block%
�-� !block%=findwind% � block%!4=block%!4+5
��
�	 � l%
�� block%!4=l%
�� l%
�!� !block%=findwind% � l%=20 �
� � f%=399 � l%=16 � l%=6
��
�� !block%=findwind% � l%-=5
�.ș "Wimp_SetCaretPosition",!block%,l%,,,-1
��
�� !block%=main% �
�P ș "Wimp_SetCaretPosition",main%,mainbase%+((335-l%)/60)*2,b%,l%,&1000028,0
�
T ș "Wimp_SetCaretPosition",findwind%,findbase%+((335-l%)/60)*2,b%,l%,&1000028,0
�
&�
0:
:� 6,8,10,12,14,16,20,6
D� 6,20,16,14,12,10,8,6
N%ݤconvstrdate(d$):� l%,d%,d1%,d2%
X� d$=" " � =0
bd%=�number(d$,1,l%)
ld1%=�number(d$,l%+1,l%)
vd2%=�number(d$,l%+1,l%)
�� d%<1 � d1%<1 � d2%<0 � =0
�� d%>31 � d1%>12 � =0
�Ȏ d1% �
� � 9,4,6,11 : l%=30
� � 2        : l%=28
�  : l%=31
��
�� d%>l% � =0
�=d%+(d1%<<8)+(d2%<<16)
�:
�ݤconvnumdate(d%)
�
�d$,l$
�d$="":l$=""
� d%=0 �=""
%d$=�(d% � &FF):�d$=1 � d$="0"+d$
-l$=�((d% � &FF00)>>8):� �l$=1 � l$="0"+l$
 d$=d$+split$+l$
*0l$=�((d% � &FFFF0000)>>16):l$=�4-�l$," ")+l$
4=d$+split$+l$
>:
H��copyto(h%)
R� Copy h% TO persd%
\� o%=1 � 7
f Ȏ o% �
p  � 1 : $persd%=$h%
z&  � 2 :$(persd%+40)=$(h%+surname%)
�4  � 3 : $(persd%+80)=�convnumdate(h%!birthdate%)
�4  � 4 : $(persd%+91)=�convnumdate(h%!deathdate%)
�8  � 5 : $(persd%+102)=�convnumdate(h%!marriagedate%)
�7  � 6 : $(persd%+113)=�convnumdate(h%!divorcedate%)
��  � 7 : !icw%=main%:icw%!4=personsex%:ș "Wimp_GetIconState",,icw%:ș "Wimp_DeleteIcon",,icw%:$(icw%+28)=�(h%!sex%):icw%!4=!icw%:ș "Wimp_CreateIcon",,icw%+4
� �
��
�� o%=0 � 15
�5 dataset$(o%)=$(h%+(personlength%-(16*65))+o%*65)
��
��
�:
���copyfrom(h%,mem%)
� o%=1 � 7
 Ȏ o% �
  � 1 :$h%=$mem%
$+  � 2 : $(h%+surname%)=$(mem%+surname%)
.5  � 3 : !(h%+birthdate%)=�convstrdate($(mem%+80))
85  � 4 : !(h%+deathdate%)=�convstrdate($(mem%+91))
B9  � 5 : !(h%+marriagedate%)=�convstrdate($(mem%+102))
L8  � 6 : !(h%+divorcedate%)=�convstrdate($(mem%+113))
Va  � 7 : !icw%=main%:icw%!4=personsex%:ș "Wimp_GetIconState",,icw%: h%!sex%=�(�$(icw%+28),1))
` �
j�
t� o%=0 � 15
~5 $(h%+(personlength%-(16*65))+o%*65)=dataset$(o%)
��
��
�:
�ݤnumber(d$,O%,� O%)
� � n%,n$:n%=0:n$="0123456789"
�$� �n$,�d$,O%,1))=0 � i%=i%+1:=-1
�"ȕ �n$,�d$,O%,1))<>0 � O%<=�d$
�  n%=n%*10+(�n$,�d$,O%,1))-1)
� O%=O%+1
��
�=n%
�:

��newtree

?root%=�dimperson:�copyfrom(root%,persd%):current_per%=root%
<root%!sibling%=nil%:root%!spouse%=nil%:root%!child%=nil%
root%!gen%=0
(personnode%=root%
2�
<:
Fݤnew_tree
P�create_window
Z�newtree
d=0
n:
x
ݤadd_sib
�� g%
�"�copyfrom(current_per%,persd%)
�4� spoused% � current_per%=personnode%:spoused%=�
�"ȕ current_per%!sibling%<>nil%
�' current_per%=current_per%!sibling%
��
�$current_per%!sibling%=�dimperson
�3!(current_per%!sibling%+gen%)=current_per%!gen%
�g%=current_per%!gen%
�&current_per%=current_per%!sibling%
��nils(current_per%)
��clearperson
�current_per%!gen%=g%
-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
A� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
"=0
,:
6��clearperson
@ $(persd%)="":$(persd%+40)=""
J:$(persd%+80)=�convnumdate(0):$(persd%+91)=$(persd%+80)
T9$(persd%+102)=$(persd%+80):$(persd%+113)=$(persd%+80)
^persd%!sex%=32
hdataset$()=�60," ")
r�
|:
���genpointers(h%)
�
�save%
�save%=�:�traverse(h%,root%)
��
�:
���traverse(h%,troot%)
��troot%=nil% � �
�3� save% � genpointers%!((troot%!gen%)*4)=troot%
�� troot%=h% � save%=�
��traverse(h%,troot%!child%)
�+� save% � �traverse(h%,troot%!sibling%)
��
�:

��leftsib
�root%=nil% � �
 � root%=current_per% � �
&"�copyfrom(current_per%,persd%)
0t� spoused% � current_per%=personnode%:spoused%=�:�copyto(current_per%):ș "Wimp_ForceRedraw",main%,0,0,1280,1024
:�genpointers(current_per%)
D_�current_per%!gen%<>0 � !(genpointers%!(((current_per%!gen%)-1)*4)+child%)=current_per% � �
N� current_per%!gen%=0 �
X2 current_per%=�findprevsib(root%,current_per%)
b�
l_ current_per%=�findprevsib(!(genpointers%!(((current_per%!gen%)-1)*4)+child%),current_per%)
v�
��copyto(current_per%)
�-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
�;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
�A� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
��
�:
�ݤfindprevsib(start%,comp%)
�� comp%=start% � =comp%
�ȕ start%!sibling%<>comp%
� start%=start%!sibling%
��
�=start%
�:
��rightsib

�root%=nil% � �
 "�copyfrom(current_per%,persd%)
*t� spoused% � current_per%=personnode%:spoused%=�:�copyto(current_per%):ș "Wimp_ForceRedraw",main%,0,0,1280,1023
4$� current_per%!sibling%=nil% � �
>&current_per%=current_per%!sibling%
H�copyto(current_per%)
R-ș "Wimp_ForceRedraw",main%,0,0,1280,1023
\;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
fA� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
p�
z:
�ݤadd_parent
�"�copyfrom(current_per%,persd%)
�4� spoused% � current_per%=personnode%:spoused%=�
�s%=�dimperson
��clearperson
�
�nils(s%)
�s%!child%=root%
�s%!gen%=-1
�root%=s%
��incgen(root%)
�current_per%=root%
�-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
�;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
A� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
=0
:
$��incgen(root%)
.� root%=nil% � �
8root%!gen%+=1
B�incgen(root%!child%)
L�incgen(root%!sibling%)
V�
`:
j��nils(s%)
t3s%!sibling%=nil%:s%!spouse%=nil%:s%!child%=nil%
~�
�:
���parent
�"�copyfrom(current_per%,persd%)
�� current_per%!gen%=0 � �
�4� spoused% � current_per%=personnode%:spoused%=�
��genpointers(current_per%)
�9current_per%=genpointers%!(((current_per%!gen%)-1)*4)
��copyto(current_per%)
�-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
�;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
�A� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
��
:

��child
�root%=nil% � �
"�copyfrom(current_per%,persd%)
(t� spoused% � current_per%=personnode%:spoused%=�:�copyto(current_per%):ș "Wimp_ForceRedraw",main%,0,0,1280,1023
2$� current_per%!child% = nil% � �
<$current_per%=current_per%!child%
F�copyto(current_per%)
P-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
Z;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
dA� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
n�
x:
���resortbranch
�� s%,p%,e%,c%
��genpointers(current_per%)
�c%=current_per%
��copyfrom(c%,persd%)
�� spoused% � �sortspouse:�
�� c%=root% �
� root%=c%!sibling%:s%=root%
��
� � c%!gen%=0 �
�  s%=root%:p%=nil%
� �
�6  p%=(genpointers%!(((c%!gen%)-1)*4)):s%=p%!child%
 �
  � p%<>nil% � p%!child%=c% �
*  p%!child%=c%!sibling%:s%=c%!sibling%
" �
,  e%=�findprevsib(s%,c%)
6  e%!sibling%=c%!sibling%
@ �
J�
T� root%=nil% � root%=c%:�
^� s%=nil% � p%!child%=c%:�
h
os%=s%
rBȕ s%!sibling%<>nil% � !(s%!sibling%+birthdate%)<c%!birthdate%
| s%=s%!sibling%
��
�,� os%=s% � s%!birthdate%>c%!birthdate% �
� � c%!gen%=0 �
�   c%!sibling%=root%:root%=c%
� �
�  c%!sibling%=p%!child%
�  p%!child%=c%
� �
��
��
�c%!sibling%=s%!sibling%
�s%!sibling%=c%
��
:
ݤadd_child
"�copyfrom(current_per%,persd%)
&3�spoused% � current_per%=personnode%:spoused%=�
0 � current_per%!child%=nil% �
:# current_per%!child%=�dimperson
D4 !(current_per%!child%+gen%)=current_per%!gen%+1
N% current_per%=current_per%!child%
X�
b% current_per%=current_per%!child%
l# ȕ current_per%!sibling%<>nil%
v(  current_per%=current_per%!sibling%
� �
�% current_per%!sibling%=�dimperson
�4 !(current_per%!sibling%+gen%)=current_per%!gen%
�' current_per%=current_per%!sibling%
��
��clearperson
��nils(current_per%)
�-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
�;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
�A� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
�=0
�:
�ݤadd_spouse
"�copyfrom(current_per%,persd%)
5� �spoused% � spoused%=�:personnode%=current_per%
!ȕ current_per%!spouse%<>nil%
 %current_per%=current_per%!spouse%
*�
4#current_per%!spouse%=�dimperson
>2!(current_per%!spouse%+gen%)=current_per%!gen%
H%current_per%=current_per%!spouse%
R�clearperson
\�nils(current_per%)
f-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
p;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
zA� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
�=0
�:
���spouse
��root%=nil% � �
�1� current_per%!spouse%=nil% � �(spoused%) � �
�!� current_per%!spouse%=nil% �
�=current_per%=personnode%:spoused%=�:�copyto(current_per%)
��
�5� �spoused% � spoused%=�:personnode%=current_per%
�%current_per%=current_per%!spouse%
��copyto(current_per%)
��
�-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
�;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
�A� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
��
�
� ��sortspouse
 � s%,c%
*s%=personnode%!spouse%:c%=current_per%
 �s%=c% � c%!spouse%=nil% � �
$ȕ s%!spouse%<>c%
. s%=s%!spouse%
8�
Bs%!spouse%=c%!spouse%
Ls%=personnode%!spouse%
VO�s%!marriagedate%>c%!marriagedate% � c%!spouse%=s%:personnode%!spouse%=c%:�
`Fȕ s%!spouse%<>nil% � !(s%!spouse%+marriagedate%)<c%!marriagedate%
j s%=s%!spouse%
t�
~t%=s%!spouse%:s%!spouse%=c%
�c%!spouse%=t%:�
�:
���checkicons
��a$
�)a$="Are You Sure You wish to Delete?"
�block%!0=check%
�8block%!4=100:block%!8=50:block%!12=400:block%!16=100
�*block%!20=&C700903D:$(block%+24)="YES"
�(ș "Wimp_CreateIcon",0,block% � dok%
�block%!4=500:block%!12=800
�$(block%+24)="NO"
�,ș "Wimp_CreateIcon",0,block% � dcancel%
block%!20=&17000339

9block%!4=100:block%!8=300:block%!12=800:block%!16=400
,block%!24=checkdata%:block%!28=&FFFFFFFF
"block%!32=�(a$):$checkdata%=a$
(namedata%=checkdata%+�a$+2
2!ș "Wimp_CreateIcon",0,block%
</$(checkdata%+�a$+2)="David Peter Breakwell"
Fblock%!24=namedata%
Pblock%!32=�($(namedata%))
Zblock%!8=200:block%!16=300
d!ș "Wimp_CreateIcon",0,block%
n�
xݤdelete
�"�copyfrom(current_per%,persd%)
��root%=nil% � =0
�;$(namedata%)=$current_per%+" "+$(current_per%+surname%)
�4�above% � $(namedata%)=$(namedata%)+"'s Parents"
�!block%=check%
�%ș "Wimp_GetWindowState",0,block%
�!ș "Wimp_OpenWindow",0,block%
�B ȗ ȓ block%!4,block%!8,block%!12-block%!4,block%!16-block%!8
�=0
�:
���deleteperson(i%)
�
�s%,t%
�-� i%<>dcancel% � above% � �deleteparent:�
� i%=dcancel% �
�
 � spoused% �
"  s%=personnode%
,!  ȕ s%!spouse%<>current_per%
6   s%=s%!spouse%
@  �
J%  s%!spouse%=current_per%!spouse%
T  �addtolist(current_per%)
^  current_per%=personnode%
h  spoused%=�
r �
|#  ȕ current_per%!spouse%<>nil%
�)   s%=!(current_per%!spouse%+spouse%)
�'   �addtolist(current_per%!spouse%)
�   current_per%!spouse%=s%
�  �
�  � current_per%!gen%=0 �
�   �adjustroot
�"    current_per%!sibling%=nil%
�!    �deletetree(current_per%)
�   current_per%=root%
�  �
�   �adjustnorm
�!   current_per%!sibling%=nil%
�    �deletetree(current_per%)
    current_per%=root%
   �
  �
 &�
 0�enddelete
 :�
 D:
 N��enddelete
 X!block%=check%
 b"ș "Wimp_CloseWindow",0,block%
 l ȗ ȓ 0,0,1280,1024
 v?� current_per%<>nil% � �copyto(current_per%) � �clearperson
 �-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
 �addstatus%=�
 �;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
 �A� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
 ��
 �:
 ���addtolist(d%)
 �d%!next%=delete%
 �delete%=d%
 ��
 �:
 ���adjustroot
 �� current_per%=root% �
!$ � current_per%!sibling%<>nil% �
!!  root%=current_per%!sibling%
! �
! !  root%=current_per%!sibling%
!*$  � root%<>nil% � �decgen(root%)
!4 �
!>�
!H
 s%=root%
!R! ȕ s%!sibling%<>current_per%
!\  s%=s%!sibling%
!f �
!p& s%!sibling%=current_per%!sibling%
!z�
!��
!�:
!���adjustnorm
!��genpointers(current_per%)
!�/p%=genpointers%!(((current_per%!gen%)-1)*4)
!��p%!child%=current_per% �
!�$ p%!child%=current_per%!sibling%
!��
!� p%=p%!child%
!�  ȕp%!sibling%<>current_per%
!�  p%=p%!sibling%
!� �
!�& p%!sibling%=current_per%!sibling%
"�
"�
":
"$��decgen(oroot%)
".� oroot%<>nil% �
"8 oroot%!gen%-=1
"B �decgen(oroot%!child%)
"L �decgen(oroot%!sibling%)
"V�
"`�
"j:
"t��deletetree(o%)
"~	 � t%
"�� o%<>nil% �
"� �deletetree(o%!child%)
"� �deletetree(o%!sibling%)
"� ȕ o%!spouse%<>nil%
"�  t%=!(o%!spouse%+spouse%)
"�  �addtolist(o%!spouse%)
"�  o%!spouse%=t%
"� �
"� �addtolist(o%)
"��
"��
"�:
#ݤload_tree
#
file$=$file_dat%
#spoused%=�
#�loadfile(file$)
#(=0
#2:
#<��loadfile(file$)
#F� file$="" � �
#Poldtree$=file$
#ZF%=�(file$)
#dT%=�#F%:�#F%=0
#n&� root%<>nil% � �deletetree(root%)
#xroot%=�dimperson
#��load_recur(root%)
#��#F%
#�%�copyto(root%):current_per%=root%
#�-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
#�addstatus%=�
#�;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
#�A� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
#��
#�:
#���load_recur(lroot%)
#��load_per(lroot%):T%=lroot%
#�ȕ lroot%!spouse%<>nil%
#� lroot%!spouse%=�dimperson
$ lroot%=lroot%!spouse%
$ �load_per(lroot%)
$�
$"
lroot%=T%
$,� lroot%!sibling%<>nil% �
$6 lroot%!sibling%=�dimperson
$@! �load_recur(lroot%!sibling%)
$J�
$T� lroot%!child%<>nil% �
$^ lroot%!child%=�dimperson
$h �load_recur(lroot%!child%)
$r�
$|�
$�:
$���load_per(mem%)
$�� o%
$�(�#F%,$(mem%+fname%),$(mem%+surname%)
$�(�#F%,mem%!birthdate%,mem%!deathdate%
$�-�#F%,mem%!marriagedate%,mem%!divorcedate%
$�/�#F%,mem%!sibling%,mem%!child%,mem%!spouse%
$�!�#F%,mem%!gen%:�#F%,mem%!sex%
$�<� o%=0 � 15: �#F%, $(mem%+(personlength%-16*65)+o%*65):�
$��
$�:
$���save_per(mem%)
$�� o%
%(�#F%,$(mem%+fname%),$(mem%+surname%)
%(�#F%,mem%!birthdate%,mem%!deathdate%
%-�#F%,mem%!marriagedate%,mem%!divorcedate%
%&/�#F%,mem%!sibling%,mem%!child%,mem%!spouse%
%0!�#F%,mem%!gen%:�#F%,mem%!sex%
%:;� o%=0 � 15: �#F%,$(mem%+(personlength%-16*65)+o%*65):�
%D�
%N:
%Xݤsave_tree(file$)
%b� root%=nil% � =0
%l� file$="" � =0
%voldtree$=file$
%�2 F%=�(file$):�#F%:� F%<>0 � �("DELETE "+file$)
%�F%=�(file$)
%��save_recur(root%)
%��#F%
%�%�("SETTYPE "+file$+" Familyfile")
%�=0
%�:
%���save_recur(lroot%)
%��save_per(lroot%)
%�
T%=lroot%
%�ȕ lroot%!spouse%<>nil%
%� �save_per(lroot%!spouse%)
%� lroot%=lroot%!spouse%
&�
&
lroot%=T%
&� lroot%!sibling%<>nil% �
& ! �save_recur(lroot%!sibling%)
&*�
&4� lroot%!child%<>nil% �
&> �save_recur(lroot%!child%)
&H�
&R�
&\:
&f�"=","<",">","<=",">=","<>"
&p:
&z��findicons
&��i%,l%,loop%,inner%
&�l%=17*7+20+findicon%
&�!block%=findwind%
&��loop%=1 � 4
&�
� �Dff
&��inner%=1 � 6
&�"block%!24=l%+inner%*3+loop%*20
&�block%!28=&FFFFFFFF
&�:� inner%=1 � block%!20=&C720312D � block%!20=&C700312D
&�/� $(block%!24):block%!4=520+((inner%-1)*60)
&�block%!8=390-((loop%+2)*60)
&�block%!32=�$(block%!24)
&�block%!12=block%!4+50
'block%!16=block%!8+50
'&ș "Wimp_CreateIcon",0,block% � i%
'"find_icon_num(loop%,inner%)=i%
'$1find_icon_num(loop%,0)=find_icon_num(loop%,1)
'.�,
'8�
'B:
'L��findclick
'V&� block%!16 = fok% � �findperson:�
'`� loop%=1 � 4
'j� inner%=1 � 6
't-� block%!16=find_icon_num(loop%,inner%) �
'~ block%!20=findwind%
'�% block%!24=find_icon_num(loop%,0)
'�% find_icon_num(loop%,0)=block%!16
'� block%!32=0
'� block%!28=1<<21
'�' ș "Wimp_SetIconState",0,block%+20
'�% block%!24=find_icon_num(loop%,0)
'�% find_icon_num(loop%,0)=block%!16
'� block%!32=0
'� block%!28=1<<21
'�' ș "Wimp_SetIconState",0,block%+20
'��
'��,
(�
(
:
(��findperson
(� find%
((�copyfrom(findblk%,fpersd%)
(2find%=nil%
(<�findrecur(root%,find%)
(F� find%<>nil% �
(P spoused%=�
(Z personnode%=nil%
(d current_per%=find%
(n �copyto(current_per%)
(x�
(��
(�!block%=findwind%
(�!ș "Wimp_CloseWindow",,block%
(�-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
(�-ș "Wimp_ForceRedraw",over%,0,0,1280,1024
(��
(�:
(���findrecur(lroot%,� find%)
(�� find%<>nil% � �
(�&� �match(lroot%) � find%=lroot% :�
(�
T%=lroot%
(�(ȕ lroot%!spouse%<>nil% � find%=nil%
(�, � �match(lroot%!spouse%) � find%=lroot%
) lroot%=lroot%!spouse%
)�
)
lroot%=T%
)"?� lroot%!sibling%<>nil% � �findrecur(lroot%!sibling%,find%)
),;� lroot%!child%<>nil% � �findrecur(lroot%!child%,find%)
)6�
)@:
)Jݤmatch(lroot%)
)T� m%
)^m%=�
)h� loop%=1 � 6
)rȎ loop% �
)|- � 1 : � $(fpersd%)<>"" � $(lroot%)<>"" �
)�$           m%=�$lroot%,$fpersd%)
)�          �
)�
)�%          � $(fpersd%) ="" � m%=�
)�? � 2 : � $(fpersd%+surname%)<>"" � $(lroot%+surname%)<>"" �
)�?           m%=m% � �$(lroot%+surname%),$(fpersd%+surname%))
)�          �
)�
)�2          � $(fpersd%+surname%)="" � m%=m% � �
)�H � 3 : � findblk%!birthdate%<>0 � m%=m% � �date(loop%,birthdate%,m%)
)�H � 4 : � findblk%!deathdate%<>0 � m%=m% � �date(loop%,deathdate%,m%)
)�( � 5 : � findblk%!marriagedate%<>0 �
)�4           m%=m% � �date(loop%,marriagedate%,m%)
*          �
*' � 6 : � findblk%!divorcedate%<>0 �
*3           m%=m% � �date(loop%,divorcedate%,m%)
*&          �
*0�
*:�
*D=m%
*N:
*Xݤdate(loop%,O%,m%)
*b� fdate%,cdate%
*lfdate%=findblk%!O%
*vcdate%=lroot%!O%
*�2� cdate%=0 � fdate%<>0 � =� � � cdate%=0 � =m%
*�Ȏ �findw(loop%-2) �
*� � 1 : M%=fdate%=cdate%
*� � 2 : M%=cdate%<fdate%
*� � 3 : M%=cdate%>fdate%
*� � 4 : M%=cdate%<=fdate%
*� � 5 : M%=cdate%>=fdate%
*� � 6 : M%=cdate%<>fdate%
*��
*�=M%
*�:
*�ݤfindw(loop%)
*�� T%
+T%=1
+6ȕ find_icon_num(loop%,T%)<>find_icon_num(loop%,0)
+ T%=T%+1
+ �
+*=T%
+4:
+>
ݤfind
+H!block%=findwind%
+R%ș "Wimp_GetWindowState",0,block%
+\!ș "Wimp_OpenWindow",0,block%
+f=0
+p:
+zݤoverview
+�� overview% �
+� overview%=�:!block%=over%
+�& ș "Wimp_GetWindowState",0,block%
+�# ș "Wimp_CloseWindow",0,block%
+��
+� overview%=�
+� !block%=over%
+� addstatus%=�
+�& ș "Wimp_GetWindowState",0,block%
+�" ș "Wimp_OpenWindow",0,block%
+��
+�=0
+�:
,��redrawover
, �drawtree(root%)
,�
,$:
,.2��maketree(lroot%,x%,y%,mx%,my%, � c% , draw%)
,8� g%,ox%:r%=32*scaleover
,B� lroot%=nil% � �
,Llroot%!col%=x%
,Vlroot%!row%=y%
,`column%(lroot%!gen%)=x%
,j6� �(draw%) � c%=�check(x%,y%,r%,mx%,my%,c%,lroot%)
,t� lroot%!child%<>nil% �
,~
ox%=x%
,�% x%=x%-(r%*2.5)*�(�cen(lroot%)/2)
,�# � column%(1+lroot%!gen%)>=x% �
,�&  x%=column%(1+lroot%!gen%)+2.5*r%
,�  column%(1+lroot%!gen%)=x%
,� �
,�  column%(1+lroot%!gen%)=x%
,� �
,�? �maketree(lroot%!child%,x%,y%-r%*2.75,mx%,my%, c%,  draw%)
,� x%=ox%
,��
,�@ �maketree(lroot%!sibling%,x%+r%*2.5,y%,mx%,my%, c%,  draw%)
,��
-:
-
��drawtree(lroot%)
-� g%,r%:r%=32*scaleover
-� lroot%=nil% � �
-(!x%=lroot%!col%:y%=lroot%!row%
-23� lroot%!gen%<>0 � � x%,y%+r%:� x%,y%+(r%*1.25)
-<<� lroot%!gen%=0 � lroot%<>root% � � x%,y%:� x%-1.5*r%,y%
-F.� lroot%!sibling%<>nil% � lroot%!gen%<>0 �
-P � x%,y%+r%*1.25
-Z � x%+2.5*r%,y%+r%*1.25
-d�
-n(� lroot%=current_per% � g%=8 � g%=12
-x+� spoused% � personnode%=lroot% � g%=13
-�ș "Wimp_SetColour",g%
-�ȏ Ȑ x%,y%,r%
-�ș "Wimp_SetColour",7
-�ȏ x%,y%,r%
-�� lroot%!child%<>nil% �
-� � x%,y%-r%:� x%,y%-r%*1.25
-� ox%=!(lroot%!child%+col%)
-� n%=�(�cen(lroot%)/2)
-� � ox%=x% � n%=0
-� � ox%+n%*r%*2.5,y%-r%*1.25
-� � ox%+n%*r%*2.5,y%-r%*1.75
-��
-��drawtree(lroot%!child%)
.�drawtree(lroot%!sibling%)
.�
.:
."'ݤcheck(x%,y%,r%,mx%,my%,c%,lroot%)
.,� mx%>=x%-r% � mx%<=x%+r% �
.6* � my%>=y%-r% � my%<=y%+r% � c%=lroot%
.@�
.J=c%
.T:
.^ݤcen(lroot%)
.h� T%
.rlroot%=lroot%!child%
.|  � lroot%!sibling%=nil% � =0
.�T%=0
.�ȕ lroot%<>nil%
.�
 T%+=1
.� lroot%=lroot%!sibling%
.��
.�=T%
.�:
.���create_menu(menx%,meny%)
.�Ymenu$="Main Menu|*@~Save Tree`filewindow%`|Browse<browsemenu$>|*Output<outputmenu$>|"
.�+� root%<>nil% � menu$=�stripstar(menu$)
.�vbrowsemenu$="Browse|*Find{find}|@^Overview{overview}|@^View Data{datawindow}|*Delete<deletemenu$>|*Add<addmenu$>|"
.�Cdeletemenu$="Delete|*Parents{deleteabove}|Person{deletebelow}|"
.�7� root%<>nil% � browsemenu$=�stripstar(browsemenu$)
/@� current_per%!gen%<>0 � deletemenu$=�stripstar(deletemenu$)
/'�overview% � �browsemenu$,21,1)="#"
/'�dataview% � �browsemenu$,42,1)="#"
/&^outputmenu$="Output|~Main Line`filewindow%`|~Full Tree`filewindow%`|~Export`filewindow%`|"
/0\addmenu$="Add|Child{add_child}|Sibling{add_sib}|*Parent{add_parent}|Spouse{add_spouse}|"
/:G� root%<>nil% � current_per%!gen%=0 � addmenu$=�stripstar(addmenu$)
/Dmenu%=menblk%
/N�makemenu(menu$,menu%)
/X-ș "Wimp_CreateMenu",,menblk%,menx%,meny%
/bcurrent_menu$=menu$
/l�
/v:
/���makemenu(menu$, � mem% )
/�'� t$,loop%,stringtrace%,i%,memcopy%
/�t$=menu$:memcopy%=mem%
/�$mem%=�t$,�t$,"|")-1)
/�t$=�t$,�t$,"|")+1)
/�
mem%?12=7
/�
mem%?13=2
/�
mem%?14=7
/�
mem%?15=0
/�mem%!16=172
/�mem%!20=44
/�
mem%!24=0
/�mem%!28=mem%+32
0
 mem%+=28
0memcopy%=mem%
0pre$="*@#%^~":post$="{[<|`"
0 �
0* flags%=0:shade%=�
04 ȕ �pre$,�t$,1))<>0
0>  Ȏ �t$,1) �
0H   � "*" : shade%=�
0R   � "@" : flags%+=2
0\   � "%" : flags%+=4
0f   � "#" : flags%+=1
0p   � "~" : flags%+=8
0z  �
0�  t$=�t$,2)
0� �
0�# � �t$,"|")=�(t$) � flags%+=&80
0� mem%!0=flags%
0� mem%!4=-1
0�1 � shade% � mem%!8=&7400021 � mem%!8=&7000021
0� � (flags%�4)<>4 �
0�  loop%=0:i%=1000
0�  �
0�   loop%+=1
0�   l%=�t$,�post$,loop%,1))
0�   � i%>l% � l%<>0 � i%=l%
0�  � loop%=�(post$)
1  $(mem%+12)=�t$,i%-1)
1  t$=�t$,�t$,"|")+1)
1 �
1$  mem%!8=&7000F29
1.  !(mem%+16)=-1
18  i%=�t$,"[")+1
1B'  !(mem%+12)=�(�t$,i%,�t$,",")-i%))
1L  i%=�t$,",")+1
1V'  !(mem%+20)=�(�t$,i%,�t$,"]")-i%))
1`  t$=�t$,�t$,"|")+1)
1j �
1t mem%=mem%+24
1~� t$=""
1�t$=menu$
1�*loop%=memcopy%:stringtrace%=�t$,"|")+1
1��
1��
1� stringtrace%+=1
1�# i%=�"|<`",�t$,stringtrace%,1))
1�� i%<>0
1�+� i%=1 � loop%=loop%+24:stringtrace%+=1
1�� i%=2 �
1� !(loop%+4)=mem%
1�@ s$=�t$,stringtrace%+1,�t$,">",stringtrace%)-stringtrace%-1)
1� �makemenu(�(s$),mem%)
2' stringtrace%=�t$,">",stringtrace%)
2
�
2� i%=3 �
2@ s$=�t$,stringtrace%+1,�t$,"`",stringtrace%)-stringtrace%-1)
2( !(loop%+4)=�(s$)
22) stringtrace%=�t$,"`",stringtrace%+1)
2<�
2F� stringtrace%>=�(t$)
2P�
2Z:
2d#��create_icon_menu(menx%,meny%)
2nmeny%=96+(3*44)
2xHmenu$="Family Tree|~Info`infowindow%`|New Tree{new_tree}|Quit{fin}|"
2�menu%=menblk%
2��makemenu(menu$,menu%)
2�-ș "Wimp_CreateMenu",,menblk%,menx%,meny%
2�current_menu$=menu$
2��
2�:
2���create_over(menx%,meny%)
2�L menu$="Overview|Scale<scalemenu$>|Default{defaultover}|Quit{overquit}|"
2�3 scalemenu$="Scale|%1[scale%,9]{rescale_over}|"
2� menu%=menblk%
2� �makemenu(menu$,menu%)
2�. ș "Wimp_CreateMenu",,menblk%,menx%,meny%
2� current_menu$=menu$
3�
3:
3��create_data(mx%,my%)
3"&menu$="Data|Print Data{printper}|"
3, menu%=menblk%
36 �makemenu(menu$,menu%)
3@* ș "Wimp_CreateMenu",,menblk%,mx%,my%
3J current_menu$=menu$
3T�
3^:
3hݤprintper
3r"�copyfrom(current_per%,persd%)
3|� 2
3�)�"Printout for ";$(current_per%);" ";
3�#�$(current_per%+surname%);" (";
3�1�convnumdate(current_per%!birthdate%);" - ";
3�.�convnumdate(current_per%!deathdate%);")"
3�"� current_per%!spouse%<>nil% �
3�D �"Married on ";�convnumdate(current_per%!marriagedate%);" to ";
3�B �$(current_per%!spouse%);" ";$(surname%+current_per%!spouse%)
3�: �"Divorced: ";�convnumdate(current_per%!divorcedate%)
3��
3�!� current_per%!child%<>nil% �
3�  o%=1:l%=current_per%!child%
3� �"Children:"
3� ȕ l%<>nil%
3�@  �convnumdate(l%!birthdate%);": ";$(l%);" ";$(l%+surname%)
4  l%=l%!sibling%
4�
4�'"Personal Details"'
4&� o%=0 � 15:� l%=1 � 60
40P � �dataset$(o%),l%,1)<>" " � �dataset$(o%),l%,1); � �datamask$(o%),l%,1);
4:	�:�:�
4D�3
4N=0
4Xݤoverquit
4b overview%=�
4l !block%=over%
4v" ș "Wimp_CloseWindow",,block%
4�=0
4�:
4�ݤrescale_over
4� scaleover=�($scale%)
4� addstatus%=�
4�. ș "Wimp_ForceRedraw",over%,0,0,1280,1024
4�=0
4�:
4�ݤdefaultover
4�$scale%="1"
4�=�rescale_over
4�:
4�:
5��menu_select
5menu$=current_menu$
5 ș "Wimp_GetPointerInfo",,q%
5 
but%=q%!8
5*-�block%!0<>-1 � �rec_decode(menu$,block%)
54� (but%�1)=1 �
5> �create_menu(menx%,meny%)
5H'�loop%=0�maxgen%:column%(loop%)=0:�
5R�
5\ current_menu$=""
5f�
5p�
5z:
5���rec_decode(menu$,mem%)
5�� i%,l%
5�
fn$=""
5�i%=1+!mem%:l%=1
5��
5� l%=�menu$,"|",l%+1)
5�
 i%-=1
5�
� i%=0
5�i%=�menu$,"{",l%)
5�� mem%!4=-1 �
5�$ � i%<�menu$,"|",l%+1) � i%<>0 �
5�*  fn$=�menu$,i%+1,�menu$,"}",i%)-i%-1)
5� �
6�
6 i%=�menu$,"<",l%)
6 l%=�menu$,">",l%)
6$0 �rec_decode(�(�menu$,i%+1,l%-i%-1)),mem%+4)
6.�
68"�menu$=addmenu$ � addstatus%=�
6B� fn$<>"" � i%=�("FN"+fn$)
6LM�menu$=addmenu$ � !block%=over%:ș "Wimp_ForceRedraw",over%,0,0,1280,1024
6V fn$=""
6`�
6j:
6tݤstripstar(a$)
6~� l%
6�
�l%=1��a$
6�$ � �a$,l%,1)="*" � �a$,l%,1)="^"
6��
6�=a$
6�:
6���gotoperson(mx%,my%)
6�� �mx%,my%)=0 � �
6�!block%=over%
6�%ș "Wimp_GetWindowState",0,block%
6�b%=block%+4
6�x%=(b%!0-b%!16)
6�y%=(b%!12-b%!20)
7column%()=0
7
r%=32*scaleover
7"�copyfrom(current_per%,persd%)
7personnode%=nil%:spoused%=�
7(-�findp(root%,mx%-x%,my%-y%, current_per%)
72�copyto(current_per%)
7<addstatus%=�
7F-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
7P-ș "Wimp_ForceRedraw",over%,0,0,1280,1024
7ZA� dataview% � ș "Wimp_ForceRedraw",datawindow%,0,0,1280,1024
7d�
7n:
7x!��findp(lroot%,mx%,my%, � c%)
7�r%=32*scaleover
7�� lroot%=nil% � �
7�;c%=�check(lroot%!col%,lroot%!row%,r%,mx%,my%,c%,lroot%)
7�&�findp(lroot%!sibling%,mx%,my%,c%)
7�%�findp(lroot%!child%,mx%,my%, c%)
7��
7�:
7���message(mem%)
7�Ȏ block%!16 �
7�! � 3 : �loadfromfiler(block%)
7� � &400C0 : �filesavewindow
7� � 2 : �savetofiler(block%)
7� � 1 : �savetoscrap
8�
8�
8:
8"��loadfromfiler(mem%)
8,� loop%,F%,a$
86� mem%!40<>treefile% � �
8@	a$=""
8Ja$=�zerostring(44+mem%)
8T$(fileicon%+44)=a$
8^F%=�(a$)
8holdtree$=a$
8r&� root%<>nil% � �deletetree(root%)
8|root%=�dimperson
8��load_recur(root%)
8��#F%
8�%�copyto(root%):current_per%=root%
8�-ș "Wimp_ForceRedraw",main%,0,0,1280,1024
8�addstatus%=�:spoused%=�
8�;� overview% � ș "Wimp_ForceRedraw",over%,0,0,1280,1024
8�� mem%!12<>0 � �
8�mem%!16=4:mem%!12=1
8�,ș "Wimp_SendMessage",18,block%,block%!4
8��
8�:
8���filewinicons
8�/fileok%=�placeicon(filewindow%,180,10,"OK")
9!fileicon%=filewindow%
9!fileicon%!4=10:fileicon%!8=10
9$fileicon%!12=170:fileicon%!16=60
9&fileicon%!20=&700F125
90fileicon%!24=fileicon%+44
9:$(fileicon%+44)="treefile"
9D$fileicon%!28=-1:fileicon%!32=255
9N#ș "Wimp_CreateIcon",,fileicon%
9X�placefileicon(0)
9b�
9l:
9v��placefileicon(N%)
9�fileblock%=fileicon%+300
9�!fileblock%=filewindow%
9�fileblock%!4=2
9�$ș "Wimp_DeleteIcon",,fileblock%
9�#fileblock%!4=90:fileblock%!8=80
9�'fileblock%!12=160:fileblock%!16=150
9�fileblock%!20=&700613A
9�fileblock%!24=fileblock%+40
9�fileblock%!28=1
9�Ȏ N% �
9�? � 0 : $(fileblock%+40)="file_000":$(fileicon%+44)=oldtree$
9�? � 1 : $(fileblock%+40)="file_aff":$(fileicon%+44)=olddraw$
9�> � 2 : $(fileblock%+40)="file_cde":$(fileicon%+44)=oldcsv$
:�
:%fileblock%!32=�($(fileblock%+40))
:4ș "Wimp_CreateIcon",,fileblock% � filetypeicon%
: �
:*:
:4��dragfile
:>!block%=filewindow%
:H$ș "Wimp_GetWindowState",,block%
:Rb%=block%+20
:\
b%!0=0
:fb%!4=5:b%!8=block%!4+90
:pb%!12=block%!8+80
:zb%!16=b%!8+70
:�b%!20=b%!12+70
:�Ib%!24=0:b%!28=0:b%!32=1279:b%!36=1024:b%!40=0:b%!44=0:b%!48=0:b%!52=0
:�q%!0=11:q%!4=4:q%!8=-1
:�"ș "OS_ReadVduVariables",q%,q%
:�b%!32=(q%!0+1)<<(q%!4)
:�ș "Wimp_DragBox",,b%
:��
:�:
:���filesavewindow
:�Ȏ block%!32 �
:�( � 0 : �placefileicon(0):filesave%=0
:�D          ș "Wimp_CreateSubMenu",,block%!20,block%!24,block%!28
:�@ � 2 : � block%!36=2 � �placefileicon(2) � �placefileicon(1)
;D          ș "Wimp_CreateSubMenu",,block%!20,block%!24,block%!28
;#          filesave%=block%!36+1
;          �
;$�
;.�
;8:
;B
��dragend
;L$ș "Wimp_GetPointerInfo",,block%
;VY� block%!12=over% � block%!12=filewindow% � block%!12=main% � block%!12=findwind% � �
;`b%=block%+20
;j!b%=44+�($(fileicon%+44))
;t!b%+=4-(!b% � 4)
;~b%!4=0:b%!8=0
;�b%!12=0
;�b%!16=1
;�b%!20=block%!12
;�b%!24=block%!16
;�b%!28=block%!0
;�b%!32=block%!4
;�b%!36=2000
;�Ȏ filesave% �
;� � 0 : b%!40=treefile%
;� � 3 : b%!40=csvfile%
;�   : b%!40=&AFF
;��
<&$(b%+44)=�zerostring(fileicon%+44)
<
)ș "Wimp_SendMessage",17,b%,block%!12
<=� block%!12=-2 � ș "Wimp_SendMessage",17,b%,-2,block%!16
<�
<(:
<2��savetofiler(block%)
<<Ȏ filesave% �
<F0 � 0 : o%=�save_tree(�zerostring(block%+44))
<P-          oldtree$=�zerostring(block%+44)
<Z0 � 1 : �savevertdraw(�zerostring(block%+44))
<d-          olddraw$=�zerostring(block%+44)
<n2 � 2 : �savehoridraw(�zerostring(block%+44),�)
<x-          olddraw$=�zerostring(block%+44)
<�+ � 3 : �savecsv(�zerostring(block%+44))
<�-          oldcsv$ =�zerostring(block%+44)
<��
<�8block%!16=3:ș "Wimp_SendMessage",17,block%,block%!4
<�ș "Wimp_CreateMenu",-1
<�filesave%=-1
<��
<�:
<�ݤzerostring(mem%)
<�� a$
<�ȕ ?mem%>31
<� a$+=�(?mem%)
<� mem%+=1
=�
==a$
=:
="��savetoscrap
=,$(block%+44)="<Wimp$Scrap>"
=6"?(block%+44+�($(block%+44)))=0
=@!block%!0=44+�($(block%+44))+1
=Jblock%!0+=4-(block%!0 � 4)
=Tblock%!16=2
=^block%!36=-1
=hblock%!12=block%!8
=r,ș "Wimp_SendMessage",17,block%,block%!4
=|�
=�:
=���savevertdraw(file$)
=�F%=�opendraw(file$)
=��drawvert(F%)
=��#F%
=��("SETTYPE "+file$+" &AFF")
=�addstatus%=�
=��
=�:
=�ݤopendraw(file$)
=�F%=�(file$)
=� �#F%,"Draw";
=� �int(201)
> �int(0)
> �#F%,"FAMILYTREE  ";
>=F%
>&:
>0ݤmaxycalc
>:� l%,h%,h1%,h2%,loop%
>Dloop%=genpointers%:h%=0
>N�
>X	h2%=0
>b h2%=charspc%*5
>l l%=!loop%
>v# ȕ l%<>nil% � l%!spouse%<>nil%
>�  h2%+=charspc%*7
>�  l%=l%!spouse%
>� �
>�
 h1%=0
>�< � !(gen%+!loop%)=0 � l%=root% � l%=!(!(loop%-4)+child%)
>� ȕ l%!sibling%<>nil%
>�  h1%+=charspc%
>� l%=l%!sibling%
>��
>� � h1%>h2% � h2%=h1%
>� h%+=h2%
>�
 loop%+=4
>�� !(loop%-4)=current_per%
?=h%
?:
?#��typesimple(p%,xpos%,ypos%,F%)
? � l%,l$
?*%l$=$(p%)+" "+$(p%+surname%)+" ( "
?4B� p%!birthdate%<>0 � l$+=è((p%!birthdate% � &FFFF0000)/&FFFF)
?>
l$+=" - "
?HB� p%!deathdate%<>0 � l$+=è((p%!deathdate% � &FFFF0000)/&FFFF)
?Rl$+=" )"
?\!�placetext(l$,xpos%,ypos%,F%)
?f�
?p:
?z"��placetext(l$,xpos%,ypos%,F%)
?�� l%
?�l%=4-(�(l$)�4)
?� �int(1):�int(24+28+�(l$)+l%)
?�:�int(xpos%):�int(ypos%):�int(xpos%+�(l$)*(charspc%/2))
?�0�int(ypos%+charspc%):�int(0):�int(0):�int(0)
?�/�int(charspc%/2):�int(charspc%):�int(xpos%)
?��int(ypos%)
?��#F%,l$;
?�ȕ l%<>0
?� �#F%,0
?�
 l%-=1
?��
?��
@:
@
��int(I%)
@�#F%,I%
@$�#F%,I%>>8
@.�#F%,I%>>16
@8�#F%,I%>>32
@B�
@L:
@V��drawvert(F%)
@`:� col%,spcol%,sibcol%,colspc%,yloop%,ynow%,firstchild%
@j1col%=0:spcol%=charspc%*15:sibcol%=charspc%*30
@tcolspc%=charspc%*15
@~�genpointers(current_per%)
@�$yloop%=�maxycalc:yparent%=yloop%
@�ynow%=yloop%
@�3�int(0):�int(0):�int(charspc%*300):�int(yloop%)
@�ploop%=genpointers%
@��
@�yparent%=ynow%
@�ynow%=yloop%
@� person%=!ploop%
@� � person%!gen%=0 �
@�  firstchild%=root%
@� �
@�'  firstchild%=!(!(ploop%-4)+child%)
A �
A
 y%=yloop%
A ȕ firstchild%<>nil%
A  � firstchild%<>person% �
A(-   �typesimple(firstchild%,sibcol%,y%,F%)
A2   y%-=charspc%
A<  �
AF&  firstchild%=firstchild%!sibling%
AP �
AZX yloop%=�placeperson(person%,col%,yloop%,spcol%,colspc%,person%!spouse%,F%,yparent%)
Ad person%=person%!spouse%
An- ȕ person%!spouse%<>nil% � person%<>nil%
AxV  yloop%=�placeperson(nil%,col%,yloop%,spcol%,colspc%,person%!spouse%,F%,yparent%)
A�  person%=person%!spouse%
A� �
A� � y%<yloop% �
A�  yloop%=y%
A� �
A� yloop%-=3*charspc%
A� ploop%+=4
A�� !(ploop%-4)=current_per%
A��
A�:
A�:ݤplaceperson(p%,xpos%,ypos%,spos%,colspc%,sp%,F%,yp%)
A�� xs%,ys%,xe%,ye%
A�� p%<>nil% �
BC �placetext($p%,xpos%+(colspc%-((charspc%/2)*�$p%))/2,ypos%,F%)
Bb �placetext($(p%+surname%),xpos%+(colspc%-((charspc%/2)*�$(p%+surname%)))/2,ypos%-charspc%,F%)
BC �placedate(p%,birthdate%,xpos%,ypos%-(2*charspc%),"Born: ",F%)
B"C �placedate(p%,deathdate%,xpos%,ypos%-(3*charspc%),"Died: ",F%)
B,�
B6� sp%<>nil% �
B@C �placetext($sp%,spos%+(colspc%-(charspc%/2)*�$sp%)/2,ypos%,F%)
BJb �placetext($(sp%+surname%),spos%+(colspc%-(charspc%/2)*�$(sp%+surname%))/2,ypos%-charspc%,F%)
BTD �placedate(sp%,birthdate%,spos%,ypos%-(2*charspc%),"Born: ",F%)
B^D �placedate(sp%,deathdate%,spos%,ypos%-(3*charspc%),"Died: ",F%)
BhJ �placedate(sp%,marriagedate%,spos%,ypos%-(4*charspc%),"Married: ",F%)
BrJ �placedate(sp%,divorcedate%,spos%,ypos%-(5*charspc%),"Divorced: ",F%)
B|�
B�� p%<>nil% � sp%<>nil% �
B�6 xs%=xpos%+colspc%-(colspc%-((charspc%/2)*�$p%))/2
B�# ys%=ypos%+(charspc%/2):ye%=ys%
B�- xe%=spos%+(colspc%-(charspc%/2)*�$sp%)/2
B�# �lineheader(1,xs%,ys%,ye%,ys%)
B�F �linecoord(2,xs%+charspc%/2,ys%):�linecoord(8,xe%-charspc%/2,ye%)
B�
 �lineend
B� �
B�  � p%=nil% � sp%<>nil% �
B�    xs%=spos%-(charspc%/2)*10
B�/   xe%=spos%+(colspc%-(charspc%/2)*�$sp%)/2
B�4   �lineheader(2,xs%,ypos%,xe%,ypos%+5*charspc%)
B�4   �linecoord(2,xe%-charspc%/2,ypos%+charspc%/2)
C)   �linecoord(8,xs%,ypos%+charspc%/2)
C+   �linecoord(8,xs%,ypos%+charspc%*5.5)
C   �lineend
C&  �
C0�
C:� p%<>nil% � p%!gen%<>0 �
CD xs%=xpos%+colspc%/2
CN xe%=xpos%+colspc%
CX ys%=ypos%+1.5*charspc%
Cb ye%=yp%+charspc%/2
Cl# �lineheader(3,xs%,ys%,xe%,ye%)
Cv; �linecoord(2,xs%,ys%):�linecoord(8,xs%,ys%+charspc%/2)
C�; �linecoord(8,xe%,ys%+charspc%/2):�linecoord(8,xe%,ye%)
C�
 �lineend
C��
C�ypos%-=5*charspc%
C�#� sp%<>nil% � ypos%-=2*charspc%
C�
=ypos%
C�:
C�$��lineheader(n%,xs%,ys%,xe%,ye%)
C��int(2)
C��int(24+16+4+12+n%*12)
C��int(xs%):�int(ys%)
C��int(xe%):�int(ye%)
C��int(-1):�int(0)
D�int(0):�int(0)
D�
D:
D ��linecoord(n%,xs%,ys%)
D*�int(n%)
D4�int(xs%):�int(ys%)
D>�
DH:
DR
��lineend
D\�int(0)
Df�
Dp:
Dz*��placedate(p%,d%,xpos%,ypos%,add$,F%)
D�� p%!d%<>0 �
D�  d$=add$+�convnumdate(p%!d%)
D�? �placetext(d$,xpos%+(colspc%-(charspc%/2)*�d$)/2,ypos%,F%)
D��
D��
D�:
D���savehoridraw(file$,full%)
D�F%=�opendraw(file$)
D��drawhori(F%,full%)
D��#F%
D��("SETTYPE "+file$+" &AFF")
D�addstatus%=�
D��
E:
E��drawhori(F%,full%)
E� x%
E$mincol%=&FFFFFFF:maxcol%=0
E.column%()=-&FFFFFFF:maxg%=0
E8'�setcolumn(root%,200,mincol%,maxg%)
EBmaxg%+=1
EL(�adjustcolumn(root%,mincol%,maxcol%)
EVpcol%=15*charspc%
E`x%=pcol%*maxcol%
Ej�int(0):�int(0)
Et$�int(x%):�int(maxg%*10*charspc%)
E~5�drawhoritree(root%,maxg%*10*charspc%,pcol%,�,F%)
E��
E�:
E�.��setcolumn(root%,column%, � mcol%, � mg%)
E�� lroot%
E�� root%=nil% � �
E�%� root%!gen%>mg% � mg%=root%!gen%
E�#� column%<mcol% � mcol%=column%
E�$� column%<=column%(root%!gen%) �
E�" column%=column%(root%!gen%)+1
E��
E�root%!col%=column%
E�n%=�noofchildren(root%)
F7�setcolumn(root%!child%,column%+1-(n%/2),mcol%,mg%)
F
lroot%=root%!spouse%
Fȕ lroot%<>nil%
F column%+=1
F( lroot%!col%=column%
F2 lroot%=lroot%!spouse%
F<�
FFcolumn%(root%!gen%)=column%
FP2�setcolumn(root%!sibling%,column%+1,mcol%,mg%)
FZ�
Fd:
Fn,��adjustcolumn(root%,mincol%, � maxcol%)
Fx� lroot%
F�� root%=nil% � �
F�root%!col%-=mincol%
F�-� root%!col%>maxcol% � maxcol%=root%!col%
F�lroot%=root%!spouse%
F�ȕ lroot%<>nil%
F� lroot%!col%-=mincol%
F�. � root%!col%>maxcol% � maxcol%=root%!col%
F� lroot%=lroot%!spouse%
F��
F�/�adjustcolumn(root%!child%,mincol%,maxcol%)
F�1�adjustcolumn(root%!sibling%,mincol%,maxcol%)
F��
F�:
G+��drawhoritree(p%,ypos%,colspc%,sp%,F%)
G�p%=nil% � �
Gheight%=ypos%-8*charspc%
G"xpos%=p%!col%*colspc%
G,� �sp% �
G6B�placetext($p%,xpos%+(colspc%-((charspc%/2)*�$p%))/2,ypos%,F%)
G@a�placetext($(p%+surname%),xpos%+(colspc%-((charspc%/2)*�$(p%+surname%)))/2,ypos%-charspc%,F%)
GJB�placedate(p%,birthdate%,xpos%,ypos%-(2*charspc%),"Born: ",F%)
GTB�placedate(p%,deathdate%,xpos%,ypos%-(3*charspc%),"Died: ",F%)
G^�
Gh� sp% �
GrN �placetext("And "+$p%,xpos%+(colspc%-((charspc%/2)*(�$p%+4)))/2,ypos%,F%)
G|b �placetext($(p%+surname%),xpos%+(colspc%-((charspc%/2)*�$(p%+surname%)))/2,ypos%-charspc%,F%)
G�F �placedate(p%,marriagedate%,xpos%,ypos%-5*charspc%,"Married:",F%)
G�C �placedate(p%,birthdate%,xpos%,ypos%-(3*charspc%),"Born: ",F%)
G�C �placedate(p%,deathdate%,xpos%,ypos%-(4*charspc%),"Died: ",F%)
G�I �placedate(p%,divorcedate%,xpos%,ypos%-(6*charspc%),"Divorced: ",F%)
G��
G�� p%!gen%<>0 � �(sp%) �
G�  xs%=xpos%+colspc%/2:xe%=xs%
G�5 ys%=ypos%+charspc%+charspc%/4:ye%=ys%+charspc%/4
G�# �lineheader(1,xs%,ys%,xe%,ye%)
G�0 �linecoord(2,xs%,ys%):�linecoord(8,xe%,ye%)
G�
 �lineend
G��
G�*� p%!spouse%<>nil% � p%!child%<>nil% �
H( xs%=xpos%+colspc%/2:xe%=xs%+colspc%
H, ys%=ypos%-7*charspc%:ye%=ys%+charspc%/2
HA � !(p%!spouse%+divorcedate%)=0 � ye%+=charspc%:ys%+=charspc%
H&Y � !(p%!spouse%+marriagedate%)=0 � ys%=ypos%-6*charspc% � ye%+=charspc%:ys%+=charspc%
H0- � ys%=ypos%-5*charspc% � ye%+=charspc%/2
H:# �lineheader(2,xs%,ys%,xe%,ye%)
HD0 �linecoord(2,xs%,ys%):�linecoord(8,xe%,ys%)
HN# �linecoord(8,xe%,ye%):�lineend
HX�
Hb)� p%!spouse%<>nil% � p%!child%=nil% �
Hl> xs%=xpos%+colspc%-charspc%*3:xe%=xpos%+colspc%+charspc%*3
Hv! ys%=ypos%+charspc%/2:ye%=ys%
H�# �lineheader(1,xs%,ys%,xe%,ye%)
H�0 �linecoord(2,xs%,ys%):�linecoord(8,xe%,ys%)
H�
 �lineend
H��
H�
� sp% � �
H�lp%=p%!spouse%
H�ȕ lp%<>nil%
H�* �drawhoritree(lp%,ypos%,colspc%,�,F%)
H� lp%=lp%!spouse%
H��
H�;�drawhoritree(p%!child%,ypos%-10*charspc%,colspc%,�,F%)
H�1�drawhoritree(p%!sibling%,ypos%,colspc%,�,F%)
H�� p%!child%<>nil% �
I n%=�lastchild(p%!child%)
I c%=!(p%!child%+col%)
I1 xs%=c%*colspc%+colspc%/2:xe%=(n%+.5)*colspc%
I # ys%=ypos%-8.5*charspc%:ye%=ys%
I*# �lineheader(1,xs%,ys%,xe%,ye%)
I40 �linecoord(2,xs%,ys%):�linecoord(8,xe%,ye%)
I>
 �lineend
IH9 xs%=p%!col%*colspc%+(colspc%/2):ye%=ypos%-4*charspc%
IR n%=n%/2
I\0 xe%=(�column(p%!child%,p%!col%)+.5)*colspc%
If ys%=ypos%-8.5*charspc%
Ip � xe%>xs% �
Iz$  �lineheader(3,xs%,ys%,xe%,ye%)
I� �
I�$  �lineheader(3,xe%,ys%,xs%,ye%)
I� �
I�8 �linecoord(2,xs%,ye%):�linecoord(8,xs%,ys%+height%)
I�8 �linecoord(8,xe%,ys%+height%):�linecoord(8,xe%,ys%)
I�
 �lineend
I��
I��
I�:
I�ݤnoofchildren(root%)
I�� lroot%
I�root%=root%!child%
I�	no%=0
Jȕ root%<>nil%
J no%+=1
J lroot%=root%
J$ ȕ lroot%!spouse%<>nil%
J.  no%+=1
J8  lroot%=lroot%!spouse%
JB �
JL root%=root%!sibling%
JV�
J`=no%
Jj:
Jtݤcolumn(p%,n%)
J~� c%,pl%
J�
c%=-10
J�ȕ p%<>nil%
J�0 � ((p%!col%-n%)^2)<((c%-n%)^2) � c%=p%!col%
J� pl%=p%
J� ȕ pl%!spouse%<>nil%
J�  pl%=pl%!spouse%
J�3  � ((pl%!col%-n%)^2)<((c%-n%)^2) � c%=pl%!col%
J� �
J� p%=p%!sibling%
J��
J�=c%
J�:
Kݤlastchild(p%)
K
ȕ p%!sibling%<>nil%
K p%=p%!sibling%
K�
K(=p%!col%
K2:
K<ݤdeleteabove
KFabove%=�:=�delete
KP:
KZݤdeletebelow
Kdabove%=�:=�delete
Kn:
Kx��deleteparent
K��genpointers(current_per%)
K�/p%=genpointers%!(((current_per%!gen%)-1)*4)
K�troot%=p%!child%
K�p%!child%=nil%
K��deletetree(root%)
K�root%=troot%
K�ȕ root%!gen%<>0
K� �decgen(root%)
K��
K��enddelete
K��
K�:
K���savecsv(file$)
L� f%
Lf%=�(file$)
L�savetreecsv(root%,f%)
L"�#f%
L,"�("SETTYPE "+file$+" CSVFile")
L6�
L@:
LJ��savetreecsv(troot%,f%)
LT� lroot%
L^� troot%<>nil% �
Lh" �savepersoncsv(troot%,f%,"M")
Lr lroot%=troot%!spouse%
L| ȕ lroot%<>nil%
L�#  �savepersoncsv(lroot%,f%,"S")
L�  lroot%=lroot%!spouse%
L� �
L�% �savetreecsv(troot%!sibling%,f%)
L�# �savetreecsv(troot%!child%,f%)
L��
L��
L�:
L�!��savepersoncsv(troot%,f%,t$)
L��a$,loop%,par%,point%
L�� troot%=nil% � �
L�	a$=""
L�,a$+=$(troot%)+","+$(troot%+surname%)+","
Ma$+=�(troot%!sex%)+","
M+a$+=�convnumdate(troot%!birthdate%)+","
M+a$+=�convnumdate(troot%!deathdate%)+","
M&.a$+=�convnumdate(troot%!marriagedate%)+","
M0-a$+=�convnumdate(troot%!divorcedate%)+","
M:a$+=�(troot%!gen%)+","
MD�genpointers(troot%)
MN� troot%!gen%=0 � t$="S" �
MX
  a$+=","
Mb�
Ml.  par%=!(genpointers%+((troot%!gen%)-1)*4)
Mv   loop%=1:point%=par%!child%
M�  ȕ point%<>troot%
M�&   loop%+=1:point%=point%!sibling%
M�  �
M�%  a$+=�(loop%)+�ending(loop%)+","
M�&  a$+=$(par%)+" "+$(par%+surname%)
M��
M�a$+=","+t$
M��#f%,a$
M�0� Datacard Data is held as strings in memory
M�7� at troot%+personlength%-(16*65)+l%*65 (l%= 0..15)
M��
M�:
M�ݤending(l%)
M�	�end$
M�� l%>3 � l%<21 � ="th"
NȎ l%� 10 �
N� 1 : end$="st"
N� 2 : end$="nd"
N � 3 : end$="rd"
N* :end$="th"
N4�
N>	=end$
NH:
NRݤdatawindow
N\� dataview% �
Nf$ dataview%=�:!block%=datawindow%
Np& ș "Wimp_GetWindowState",0,block%
Nz# ș "Wimp_CloseWindow",0,block%
N��
N�$ dataview%=�:!block%=datawindow%
N�& ș "Wimp_GetWindowState",0,block%
N�" ș "Wimp_OpenWindow",0,block%
N��
N�=0
N�:
N���dataviewinit
N�
� �PPO
N�� l%=1 � 16
N� � datamask$(l%)
N��
N��
O:
O� "Location of Birth:"
O� "         of Death:"
O$� "Occupation:"
O.� "Address:"
O8� "Address:"
OB� "Address:"
OL� "Reference:"
OV� ""
O`� ""
Oj� "Comments:"
Ot� ""
O~� ""
O�� ""
O�� "Nicknames:"
O�� ""
O�� ""
O�:
O���redrawdata
O�� loop%,w%,h%,ox%,oy%
O�0h%=((block%!40+16)� 32)-((block%!32-16)� 32)
O�.w%=((block%!36+8)� 16)-((block%!28-9)� 16)
O�,ox%=(block%!28-(block%!4-block%!20))� 16
O�-oy%=(block%!40-(block%!16-block%!24))� 32
O�� ox%<=0 � ox%=0
P� oy%>15 � oy%=15
P
"� loop%=oy%+1 �  oy%-h%+1 � -1
P� loop%<=16 � loop%>0 �
P ș "Wimp_SetColour",11
P( � ox%*16,loop%*32-1
P2, �datamask$(17-loop%),ox%+1,(ox%+w%+1))
P< ș "Wimp_SetColour",7
PF � ox%*16,loop%*32-1
PP+ �dataset$(17-loop%),ox%+1,(ox%+w%+1))
PZ�
Pd�
Pn�
Px:
P���putcaretintodata(mx%,my%)
P�!block%=datawindow%
P�$ș "Wimp_GetWindowState",,block%
P� rx%=(mx%-block%!4)+block%!20
P�7ry%=(my%-block%!8)+(block%!24-(block%!16-block%!8))
P�rx%=rx%�16
P�ry%=ry%�32
P�Hș "Wimp_SetCaretPosition",datawindow%,-1,rx%*16,(ry%*32),&1000020,0
P�datatx%=rx%:dataty%=ry%
P�!datasx%=rx%*16:datasy%=32*ry%
P��
P�:
P���enterdata
QȎ block%!24 �
Q � &18C : datasx%-=16
Q � &18D : datasx%+=16
Q" � &18E : datasy%-=32
Q, � &18F : datasy%+=32
Q6  �chardata
Q@�
QJ� datasy%>15*32 � datasy%=0
QT� datasy%<0 � datasy%=15*32
Q^� datasx%<0 � datasx%=60*16
Qh� datasx%>60*16 � datasx%=0
Qrdatatx%=datasx%/16
Q|dataty%=datasy%/32
Q�Hș "Wimp_SetCaretPosition",datawindow%,-1,datasx%,datasy%,&1000020,0
Q��
Q�:
Q���chardata
Q�mx%=datatx%
Q�my%=16-dataty%
Q�Ȏ block%!24 �
Q�4 � 8 : �dataset$(my%),mx%)=�dataset$(my%),mx%+1)
Q�$          �dataset$(my%),60)=" "
Q�          datasx%-=16
Q�J          ș "Wimp_ForceRedraw",datawindow%,0,datasy%,60*16,datasy%+32
Q�F �&1CD:dataset$(my%)=�dataset$(my%),mx%)+" "+�dataset$(my%),mx%+1)
Q�,        dataset$(my%)=�dataset$(my%),60)
RH        ș "Wimp_ForceRedraw",datawindow%,0,datasy%,60*16,datasy%+32
R  � block%!24<127 �
R5             �dataset$(my%),mx%+1,1)=�(block%!24)
R&             datasx%+=16
R0[             ș "Wimp_ForceRedraw",datawindow%,datasx%-16,datasy%,datasx%+16,datasy%+32
R:           �
RD.            ș "Wimp_ProcessKey",block%!24
RN           �
RX�
Rb.� datasx%>=(60*16) � datasy%-=32:datasx%=0
Rl�
�
00000000  0d 00 0a 18 f4 20 3e 21  46 41 4d 49 4c 59 2e 21  |..... >!FAMILY.!|
00000010  52 55 4e 49 4d 41 47 45  0d 00 14 05 3a 0d 00 1e  |RUNIMAGE....:...|
00000020  09 66 24 3d 22 22 0d 00  28 1c c8 99 20 22 4f 53  |.f$=""..(... "OS|
00000030  5f 47 65 74 45 6e 76 22  20 b8 20 45 6e 76 53 74  |_GetEnv" . EnvSt|
00000040  72 24 0d 00 32 1b e7 20  a7 45 6e 76 53 74 72 24  |r$..2.. .EnvStr$|
00000050  2c 22 20 2d 71 75 69 74  20 22 29 20 8c 0d 00 3c  |," -quit ") ...<|
00000060  16 20 49 25 3d a7 45 6e  76 53 74 72 24 2c 22 22  |. I%=.EnvStr$,""|
00000070  22 22 29 0d 00 46 1b 20  49 25 3d a7 45 6e 76 53  |"")..F. I%=.EnvS|
00000080  74 72 24 2c 22 22 22 22  2c 49 25 2b 31 29 0d 00  |tr$,"""",I%+1)..|
00000090  50 20 20 f5 49 25 2b 3d  31 3a fd c1 45 6e 76 53  |P  .I%+=1:..EnvS|
000000a0  74 72 24 2c 49 25 2c 31  29 3c 3e 22 20 22 0d 00  |tr$,I%,1)<>" "..|
000000b0  5a 14 20 66 24 3d c1 45  6e 76 53 74 72 24 2c 49  |Z. f$=.EnvStr$,I|
000000c0  25 29 0d 00 64 05 cd 0d  00 6e 05 3a 0d 00 78 05  |%)..d....n.:..x.|
000000d0  3a 0d 00 82 0e ee 20 85  20 f2 65 72 72 6f 72 0d  |:..... . .error.|
000000e0  00 8c 0a f2 73 65 74 75  70 0d 00 96 11 f2 6c 6f  |....setup.....lo|
000000f0  61 64 66 69 6c 65 28 66  24 29 0d 00 a0 09 f2 6d  |adfile(f$).....m|
00000100  61 69 6e 0d 00 aa 0b f2  66 69 6e 69 73 68 0d 00  |ain.....finish..|
00000110  b4 05 e0 0d 00 be 05 3a  0d 00 c8 0b dd f2 73 65  |.......:......se|
00000120  74 75 70 0d 00 d2 19 61  6c 69 61 73 24 3d 22 3c  |tup....alias$="<|
00000130  46 61 6d 69 6c 79 24 44  69 72 3e 22 0d 00 dc 1d  |Family$Dir>"....|
00000140  74 72 65 65 66 69 6c 65  25 3d 30 3a 63 73 76 66  |treefile%=0:csvf|
00000150  69 6c 65 25 3d 26 43 44  45 0d 00 e6 2a 6e 69 6c  |ile%=&CDE...*nil|
00000160  25 3d 26 46 46 46 46 46  46 46 46 3a 72 6f 6f 74  |%=&FFFFFFFF:root|
00000170  25 3d 6e 69 6c 25 3a 64  65 6c 65 74 65 25 3d 6e  |%=nil%:delete%=n|
00000180  69 6c 25 0d 00 f0 14 63  75 72 72 65 6e 74 5f 6d  |il%....current_m|
00000190  65 6e 75 24 3d 22 22 0d  00 fa 10 61 64 64 73 74  |enu$=""....addst|
000001a0  61 74 75 73 25 3d a3 0d  01 04 1c 61 64 64 6d 65  |atus%=.....addme|
000001b0  6e 75 24 3d 22 22 3a 66  69 6c 65 73 61 76 65 25  |nu$="":filesave%|
000001c0  3d 2d 31 0d 01 0e 18 75  70 64 61 74 65 25 3d a3  |=-1....update%=.|
000001d0  3a 73 70 6c 69 74 24 3d  22 2f 22 0d 01 18 23 73  |:split$="/"...#s|
000001e0  61 76 65 73 74 61 74 75  73 25 3d 30 3a 63 68 61  |avestatus%=0:cha|
000001f0  72 73 70 63 25 3d 34 30  39 36 2a 31 2e 35 0d 01  |rspc%=4096*1.5..|
00000200  22 1f 70 65 72 73 6f 6e  6e 6f 64 65 25 3d 6e 69  |".personnode%=ni|
00000210  6c 25 3a 73 70 6f 75 73  65 64 25 3d a3 0d 01 2c  |l%:spoused%=...,|
00000220  2d 6f 76 65 72 76 69 65  77 25 3d a3 3a 6d 61 78  |-overview%=.:max|
00000230  67 65 6e 25 3d 33 30 3a  de 20 63 6f 6c 75 6d 6e  |gen%=30:. column|
00000240  25 28 6d 61 78 67 65 6e  25 29 0d 01 36 0f 64 61  |%(maxgen%)..6.da|
00000250  74 61 76 69 65 77 25 3d  a3 0d 01 40 1b de 20 73  |taview%=...@.. s|
00000260  63 61 6c 65 25 20 31 30  3a 24 73 63 61 6c 65 25  |cale% 10:$scale%|
00000270  3d 22 31 22 0d 01 4a 0f  73 63 61 6c 65 6f 76 65  |="1"..J.scaleove|
00000280  72 3d 31 0d 01 54 37 de  20 71 25 20 31 30 30 2c  |r=1..T7. q% 100,|
00000290  20 62 6c 6f 63 6b 25 20  32 30 30 30 2c 20 6d 65  | block% 2000, me|
000002a0  6e 62 6c 6b 25 20 31 30  30 30 30 2c 63 68 65 63  |nblk% 10000,chec|
000002b0  6b 64 61 74 61 25 20 31  30 30 0d 01 5e 2f de 76  |kdata% 100..^/.v|
000002c0  64 61 74 61 25 20 33 30  2c 61 75 25 20 33 30 2c  |data% 30,au% 30,|
000002d0  70 75 72 25 20 34 30 2c  70 6e 61 6d 65 25 20 33  |pur% 40,pname% 3|
000002e0  30 2c 69 63 77 25 20 33  30 0d 01 68 1f 76 65 72  |0,icw% 30..h.ver|
000002f0  73 69 6f 6e 24 3d 22 32  2e 34 30 20 20 3c 31 38  |sion$="2.40  <18|
00000300  2e 30 36 2e 39 31 3e 22  0d 01 72 32 de 20 69 63  |.06.91>"..r2. ic|
00000310  6f 6e 62 6c 6b 25 20 32  30 30 2c 66 69 6e 64 69  |onblk% 200,findi|
00000320  63 6f 6e 25 20 34 30 30  2c 20 67 65 6e 70 6f 69  |con% 400, genpoi|
00000330  6e 74 65 72 73 25 20 31  30 30 0d 01 7c 13 de 20  |nters% 100..|.. |
00000340  66 69 6c 65 69 63 6f 6e  25 20 34 30 30 0d 01 86  |fileicon% 400...|
00000350  18 de 20 66 69 6e 64 5f  69 63 6f 6e 5f 6e 75 6d  |.. find_icon_num|
00000360  28 36 2c 36 29 0d 01 90  13 de 20 66 69 6c 65 5f  |(6,6)..... file_|
00000370  64 61 74 25 20 32 35 35  0d 01 9a 21 20 de 20 64  |dat% 255...! . d|
00000380  61 74 61 6d 61 73 6b 24  28 31 36 29 2c 64 61 74  |atamask$(16),dat|
00000390  61 73 65 74 24 28 31 36  29 0d 01 a4 11 f2 64 61  |aset$(16).....da|
000003a0  74 61 76 69 65 77 69 6e  69 74 0d 01 ae 19 64 61  |taviewinit....da|
000003b0  74 61 73 65 74 24 28 29  3d c4 36 30 2c bd 28 33  |taset$()=.60,.(3|
000003c0  32 29 29 0d 01 b8 2b 74  69 74 66 63 6f 6c 25 3d  |2))...+titfcol%=|
000003d0  37 3a 74 69 74 62 63 6f  6c 25 3d 32 3a 66 67 63  |7:titbcol%=2:fgc|
000003e0  6f 6c 25 3d 37 3a 62 67  63 6f 6c 25 3d 30 0d 01  |ol%=7:bgcol%=0..|
000003f0  c2 22 73 63 72 62 63 6f  6c 25 3d 33 3a 73 63 72  |."scrbcol%=3:scr|
00000400  66 63 6f 6c 25 3d 31 3a  68 69 67 68 25 3d 31 32  |fcol%=1:high%=12|
00000410  0d 01 cc 16 63 75 72 72  65 6e 74 5f 70 65 72 25  |....current_per%|
00000420  3d 72 6f 6f 74 25 0d 01  d6 0c f2 6f 66 66 73 65  |=root%.....offse|
00000430  74 73 0d 01 e0 30 de 20  70 65 72 73 64 25 20 70  |ts...0. persd% p|
00000440  65 72 73 6f 6e 6c 65 6e  67 74 68 25 2c 66 70 65  |ersonlength%,fpe|
00000450  72 73 64 25 20 70 65 72  73 6f 6e 6c 65 6e 67 74  |rsd% personlengt|
00000460  68 25 0d 01 ea 17 66 69  6e 64 62 6c 6b 25 3d a4  |h%....findblk%=.|
00000470  64 69 6d 70 65 72 73 6f  6e 0d 01 f4 0e 24 71 25  |dimperson....$q%|
00000480  3d 22 54 41 53 4b 22 0d  01 fe 34 c8 99 20 22 57  |="TASK"...4.. "W|
00000490  69 6d 70 5f 49 6e 69 74  69 61 6c 69 73 65 22 2c  |imp_Initialise",|
000004a0  32 30 30 2c 21 71 25 2c  22 46 61 6d 69 6c 79 22  |200,!q%,"Family"|
000004b0  20 b8 20 2c 68 61 6e 64  6c 65 25 0d 02 08 20 f2  | . ,handle%... .|
000004c0  73 70 72 69 74 65 73 28  61 6c 69 61 73 24 2b 22  |sprites(alias$+"|
000004d0  2e 21 53 70 72 69 74 65  73 22 29 0d 02 12 1e 69  |.!Sprites")....i|
000004e0  63 6f 6e 68 25 3d a4 69  63 6f 6e 62 61 72 28 22  |conh%=.iconbar("|
000004f0  21 46 61 6d 69 6c 79 22  29 0d 02 1c 17 6f 6c 64  |!Family")....old|
00000500  74 72 65 65 24 3d 22 74  72 65 65 66 69 6c 65 22  |tree$="treefile"|
00000510  0d 02 26 17 6f 6c 64 64  72 61 77 24 3d 22 64 72  |..&.olddraw$="dr|
00000520  61 77 66 69 6c 65 22 0d  02 30 15 6f 6c 64 63 73  |awfile"..0.oldcs|
00000530  76 24 3d 22 63 73 76 66  69 6c 65 22 0d 02 3a 0c  |v$="csvfile"..:.|
00000540  f2 77 69 6e 64 6f 77 73  0d 02 44 17 64 61 74 61  |.windows..D.data|
00000550  73 78 25 3d 30 3a 64 61  74 61 73 79 25 3d 30 0d  |sx%=0:datasy%=0.|
00000560  02 4e 17 64 61 74 61 74  78 25 3d 30 3a 64 61 74  |.N.datatx%=0:dat|
00000570  61 74 79 25 3d 30 0d 02  58 05 e1 0d 02 62 05 3a  |aty%=0..X....b.:|
00000580  0d 02 6c 0a dd f2 6d 61  69 6e 0d 02 76 05 f5 0d  |..l...main..v...|
00000590  02 80 20 f2 70 6f 6c 6c  28 25 31 30 30 31 31 31  |.. .poll(%100111|
000005a0  31 31 31 31 30 31 31 30  31 31 30 30 31 31 29 0d  |11110110110011).|
000005b0  02 8a 2d fd 20 28 72 65  61 73 6f 6e 25 3d 31 37  |..-. (reason%=17|
000005c0  20 84 20 72 65 61 73 6f  6e 25 3d 31 38 29 20 80  | . reason%=18) .|
000005d0  20 62 6c 6f 63 6b 25 21  31 36 3d 30 0d 02 94 05  | block%!16=0....|
000005e0  e1 0d 02 9e 05 3a 0d 02  a8 16 dd a4 69 63 6f 6e  |.....:......icon|
000005f0  62 61 72 28 73 70 6e 61  6d 65 24 29 0d 02 b2 0e  |bar(spname$)....|
00000600  21 62 6c 6f 63 6b 25 3d  2d 31 0d 02 bc 0e 62 6c  |!block%=-1....bl|
00000610  6f 63 6b 25 21 34 3d 30  0d 02 c6 0e 62 6c 6f 63  |ock%!4=0....bloc|
00000620  6b 25 21 38 3d 30 0d 02  d0 10 62 6c 6f 63 6b 25  |k%!8=0....block%|
00000630  21 31 32 3d 36 33 0d 02  da 10 62 6c 6f 63 6b 25  |!12=63....block%|
00000640  21 31 36 3d 36 34 0d 02  e4 13 62 6c 6f 63 6b 25  |!16=64....block%|
00000650  21 32 30 3d 26 32 31 30  32 0d 02 ee 1c de 20 62  |!20=&2102..... b|
00000660  6c 6f 63 6b 25 21 32 34  20 28 a9 73 70 6e 61 6d  |lock%!24 (.spnam|
00000670  65 24 2b 31 29 0d 02 f8  18 24 28 62 6c 6f 63 6b  |e$+1)....$(block|
00000680  25 21 32 34 29 3d 73 70  6e 61 6d 65 24 0d 03 02  |%!24)=spname$...|
00000690  15 62 6c 6f 63 6b 25 21  32 38 3d 73 70 72 69 74  |.block%!28=sprit|
000006a0  65 25 0d 03 0c 1a 62 6c  6f 63 6b 25 21 33 32 3d  |e%....block%!32=|
000006b0  28 a9 73 70 6e 61 6d 65  24 2b 31 29 0d 03 16 28  |(.spname$+1)...(|
000006c0  c8 99 20 22 57 69 6d 70  5f 43 72 65 61 74 65 49  |.. "Wimp_CreateI|
000006d0  63 6f 6e 22 2c 2c 62 6c  6f 63 6b 25 20 b8 20 69  |con",,block% . i|
000006e0  63 6f 6e 25 0d 03 20 0a  3d 69 63 6f 6e 25 0d 03  |con%.. .=icon%..|
000006f0  2a 05 3a 0d 03 34 14 dd  f2 73 70 72 69 74 65 73  |*.:..4...sprites|
00000700  28 66 69 6c 65 24 29 0d  03 3e 0f 73 70 3d 8e 28  |(file$)..>.sp=.(|
00000710  66 69 6c 65 24 29 0d 03  48 10 64 69 6d 25 3d a2  |file$)..H.dim%=.|
00000720  23 73 70 2b 31 36 0d 03  52 08 d9 23 73 70 0d 03  |#sp+16..R..#sp..|
00000730  5c 12 de 20 73 70 72 69  74 65 25 20 64 69 6d 25  |\.. sprite% dim%|
00000740  0d 03 66 11 21 73 70 72  69 74 65 25 3d 64 69 6d  |..f.!sprite%=dim|
00000750  25 0d 03 70 0f 73 70 72  69 74 65 25 21 34 3d 30  |%..p.sprite%!4=0|
00000760  0d 03 7a 10 73 70 72 69  74 65 25 21 38 3d 31 36  |..z.sprite%!8=16|
00000770  0d 03 84 11 73 70 72 69  74 65 25 21 31 32 3d 31  |....sprite%!12=1|
00000780  36 0d 03 8e 29 c8 99 20  22 4f 53 5f 53 70 72 69  |6...).. "OS_Spri|
00000790  74 65 4f 70 22 2c 32 35  36 2b 31 30 2c 73 70 72  |teOp",256+10,spr|
000007a0  69 74 65 25 2c 66 69 6c  65 24 0d 03 98 05 e1 0d  |ite%,file$......|
000007b0  03 a2 05 3a 0d 03 ac 11  dd f2 70 6f 6c 6c 28 6d  |...:......poll(m|
000007c0  61 73 6b 25 29 0d 03 b6  11 21 62 6c 6f 63 6b 25  |ask%)....!block%|
000007d0  3d 6d 61 73 6b 25 0d 03  c0 25 c8 99 20 22 57 69  |=mask%...%.. "Wi|
000007e0  6d 70 5f 50 6f 6c 6c 22  2c 30 2c 62 6c 6f 63 6b  |mp_Poll",0,block|
000007f0  25 20 b8 20 72 65 61 73  6f 6e 25 0d 03 ca 1e e7  |% . reason%.....|
00000800  20 72 65 61 73 6f 6e 25  20 f2 61 63 74 69 6f 6e  | reason% .action|
00000810  28 72 65 61 73 6f 6e 25  29 0d 03 d4 05 e1 0d 03  |(reason%).......|
00000820  de 05 3a 0d 03 e8 15 dd  f2 61 63 74 69 6f 6e 28  |..:......action(|
00000830  72 65 61 73 6f 6e 25 29  0d 03 f2 10 c8 8e 20 72  |reason%)...... r|
00000840  65 61 73 6f 6e 25 20 ca  0d 03 fc 1e c9 20 31 20  |eason% ...... 1 |
00000850  3a 20 f2 72 65 64 72 61  77 77 69 6e 28 62 6c 6f  |: .redrawwin(blo|
00000860  63 6b 25 21 30 29 0d 04  06 0f c9 20 32 20 3a 20  |ck%!0)..... 2 : |
00000870  f2 6f 70 65 6e 0d 04 10  10 c9 20 33 20 3a 20 f2  |.open..... 3 : .|
00000880  63 6c 6f 73 65 0d 04 1a  3b c9 20 36 20 3a 20 f2  |close...;. 6 : .|
00000890  63 68 65 63 6b 5f 6d 6f  75 73 65 28 21 62 6c 6f  |check_mouse(!blo|
000008a0  63 6b 25 2c 62 6c 6f 63  6b 25 21 34 2c 62 6c 6f  |ck%,block%!4,blo|
000008b0  63 6b 25 21 38 2c 62 6c  6f 63 6b 25 21 31 32 29  |ck%!8,block%!12)|
000008c0  0d 04 24 12 c9 20 37 20  3a 20 f2 64 72 61 67 65  |..$.. 7 : .drage|
000008d0  6e 64 0d 04 2e 12 c9 20  38 20 3a 20 f2 63 68 61  |nd..... 8 : .cha|
000008e0  72 65 6e 74 0d 04 38 16  c9 20 39 20 3a 20 f2 6d  |rent..8.. 9 : .m|
000008f0  65 6e 75 5f 73 65 6c 65  63 74 0d 04 42 1e c9 20  |enu_select..B.. |
00000900  31 37 2c 31 38 20 3a 20  f2 6d 65 73 73 61 67 65  |17,18 : .message|
00000910  28 62 6c 6f 63 6b 25 29  0d 04 4c 05 cb 0d 04 56  |(block%)..L....V|
00000920  05 e1 0d 04 60 05 3a 0d  04 6a 24 dd f2 63 68 65  |....`.:..j$..che|
00000930  63 6b 5f 6d 6f 75 73 65  28 6d 78 25 2c 6d 79 25  |ck_mouse(mx%,my%|
00000940  2c 62 75 74 25 2c 68 6e  64 25 29 0d 04 74 0d c8  |,but%,hnd%)..t..|
00000950  8e 20 62 75 74 25 20 ca  0d 04 7e 1b c9 20 32 20  |. but% ...~.. 2 |
00000960  3a 20 6d 78 25 2d 3d 36  34 3a c8 8e 20 68 6e 64  |: mx%-=64:.. hnd|
00000970  25 20 ca 0d 04 88 25 20  c9 20 2d 32 20 3a f2 63  |% ....% . -2 :.c|
00000980  72 65 61 74 65 5f 69 63  6f 6e 5f 6d 65 6e 75 28  |reate_icon_menu(|
00000990  6d 78 25 2c 6d 79 25 29  0d 04 92 24 20 c9 20 6d  |mx%,my%)...$ . m|
000009a0  61 69 6e 25 20 3a 20 f2  63 72 65 61 74 65 5f 6d  |ain% : .create_m|
000009b0  65 6e 75 28 6d 78 25 2c  6d 79 25 29 0d 04 9c 24  |enu(mx%,my%)...$|
000009c0  20 c9 20 6f 76 65 72 25  20 3a 20 f2 63 72 65 61  | . over% : .crea|
000009d0  74 65 5f 6f 76 65 72 28  6d 78 25 2c 6d 79 25 29  |te_over(mx%,my%)|
000009e0  0d 04 a6 2a 20 c9 20 64  61 74 61 77 69 6e 64 6f  |...* . datawindo|
000009f0  77 25 20 3a 20 f2 63 72  65 61 74 65 5f 64 61 74  |w% : .create_dat|
00000a00  61 28 6d 78 25 2c 6d 79  25 29 0d 04 b0 05 cb 0d  |a(mx%,my%)......|
00000a10  04 ba 13 c9 20 34 20 3a  20 c8 8e 20 68 6e 64 25  |.... 4 : .. hnd%|
00000a20  20 ca 0d 04 c4 19 c9 20  2d 32 20 3a 20 f2 63 72  | ...... -2 : .cr|
00000a30  65 61 74 65 5f 77 69 6e  64 6f 77 0d 04 ce 2e c9  |eate_window.....|
00000a40  20 64 61 74 61 77 69 6e  64 6f 77 25 20 3a 20 f2  | datawindow% : .|
00000a50  70 75 74 63 61 72 65 74  69 6e 74 6f 64 61 74 61  |putcaretintodata|
00000a60  28 6d 78 25 2c 6d 79 25  29 0d 04 d8 29 c9 20 6d  |(mx%,my%)...). m|
00000a70  61 69 6e 25 20 3a 20 61  64 64 73 74 61 74 75 73  |ain% : addstatus|
00000a80  25 3d a3 3a c8 8e 20 62  6c 6f 63 6b 25 21 31 36  |%=.:.. block%!16|
00000a90  20 ca 0d 04 e2 44 20 c9  20 6f 6b 25 20 3a 20 61  | ....D . ok% : a|
00000aa0  64 64 73 74 61 74 75 73  25 3d b9 3a ef 37 3a e7  |ddstatus%=.:.7:.|
00000ab0  20 72 6f 6f 74 25 3d 6e  69 6c 25 20 8c 20 f2 6e  | root%=nil% . .n|
00000ac0  65 77 74 72 65 65 20 8b  20 f2 72 65 73 6f 72 74  |ewtree . .resort|
00000ad0  62 72 61 6e 63 68 0d 04  ec 18 20 c9 20 69 6c 65  |branch.... . ile|
00000ae0  66 74 25 20 3a 20 f2 6c  65 66 74 73 69 62 0d 04  |ft% : .leftsib..|
00000af0  f6 1a 20 c9 20 69 72 69  67 68 74 25 20 3a 20 f2  |.. . iright% : .|
00000b00  72 69 67 68 74 73 69 62  0d 05 00 16 20 c9 20 69  |rightsib.... . i|
00000b10  64 6f 77 6e 25 20 3a 20  f2 63 68 69 6c 64 0d 05  |down% : .child..|
00000b20  0a 15 20 c9 20 69 75 70  25 20 3a 20 f2 70 61 72  |.. . iup% : .par|
00000b30  65 6e 74 0d 05 14 19 20  c9 20 69 73 70 6f 75 73  |ent.... . ispous|
00000b40  65 25 20 3a 20 f2 73 70  6f 75 73 65 0d 05 1e 06  |e% : .spouse....|
00000b50  20 cb 0d 05 28 40 20 e7  20 62 6c 6f 63 6b 25 21  | ...(@ . block%!|
00000b60  31 36 3c 3e 2d 31 20 8c  20 c8 99 20 22 57 69 6d  |16<>-1 . .. "Wim|
00000b70  70 5f 46 6f 72 63 65 52  65 64 72 61 77 22 2c 6f  |p_ForceRedraw",o|
00000b80  76 65 72 25 2c 30 2c 30  2c 31 32 38 30 2c 31 30  |ver%,0,0,1280,10|
00000b90  32 34 0d 05 32 27 c9 20  63 68 65 63 6b 25 20 3a  |24..2'. check% :|
00000ba0  20 f2 64 65 6c 65 74 65  70 65 72 73 6f 6e 28 62  | .deleteperson(b|
00000bb0  6c 6f 63 6b 25 21 31 36  29 0d 05 3c 1c c9 20 66  |lock%!16)..<.. f|
00000bc0  69 6e 64 77 69 6e 64 25  20 3a 20 f2 66 69 6e 64  |indwind% : .find|
00000bd0  63 6c 69 63 6b 0d 05 46  22 c9 20 6f 76 65 72 25  |click..F". over%|
00000be0  20 3a 20 f2 67 6f 74 6f  70 65 72 73 6f 6e 28 6d  | : .gotoperson(m|
00000bf0  78 25 2c 6d 79 25 29 0d  05 50 29 c9 20 66 69 6c  |x%,my%)..P). fil|
00000c00  65 77 69 6e 64 6f 77 25  20 3a 20 e7 20 62 6c 6f  |ewindow% : . blo|
00000c10  63 6b 25 21 31 36 3d 66  69 6c 65 6f 6b 25 20 8c  |ck%!16=fileok% .|
00000c20  0d 05 5a 26 20 20 20 20  20 20 20 20 20 20 20 20  |..Z&            |
00000c30  20 20 20 20 20 20 20 20  c8 8e 20 66 69 6c 65 73  |        .. files|
00000c40  61 76 65 25 20 ca 0d 05  64 3d 20 20 20 20 20 20  |ave% ...d=      |
00000c50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 c9  |               .|
00000c60  20 30 20 3a 20 6f 25 3d  a4 73 61 76 65 5f 74 72  | 0 : o%=.save_tr|
00000c70  65 65 28 24 28 66 69 6c  65 69 63 6f 6e 25 2b 34  |ee($(fileicon%+4|
00000c80  34 29 29 0d 05 6e 3d 20  20 20 20 20 20 20 20 20  |4))..n=         |
00000c90  20 20 20 20 20 20 20 20  20 20 20 20 c9 20 31 20  |            . 1 |
00000ca0  3a 20 f2 73 61 76 65 76  65 72 74 64 72 61 77 28  |: .savevertdraw(|
00000cb0  24 28 66 69 6c 65 69 63  6f 6e 25 2b 34 34 29 29  |$(fileicon%+44))|
00000cc0  0d 05 78 3f 20 20 20 20  20 20 20 20 20 20 20 20  |..x?            |
00000cd0  20 20 20 20 20 20 20 20  20 c9 20 32 20 3a 20 f2  |         . 2 : .|
00000ce0  73 61 76 65 68 6f 72 69  64 72 61 77 28 24 28 66  |savehoridraw($(f|
00000cf0  69 6c 65 69 63 6f 6e 25  2b 34 34 29 2c b9 29 0d  |ileicon%+44),.).|
00000d00  05 82 38 20 20 20 20 20  20 20 20 20 20 20 20 20  |..8             |
00000d10  20 20 20 20 20 20 20 20  c9 20 33 20 3a 20 f2 73  |        . 3 : .s|
00000d20  61 76 65 63 73 76 28 24  28 66 69 6c 65 69 63 6f  |avecsv($(fileico|
00000d30  6e 25 2b 34 34 29 29 0d  05 8c 19 20 20 20 20 20  |n%+44))....     |
00000d40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 cb  |               .|
00000d50  0d 05 96 2f 20 20 20 20  20 20 20 20 20 20 20 20  |.../            |
00000d60  20 20 20 20 20 20 20 20  c8 99 20 22 57 69 6d 70  |        .. "Wimp|
00000d70  5f 43 72 65 61 74 65 4d  65 6e 75 22 2c 2d 31 0d  |_CreateMenu",-1.|
00000d80  05 a0 18 20 20 20 20 20  20 20 20 20 20 20 20 20  |...             |
00000d90  20 20 20 20 20 20 cd 0d  05 aa 05 cb 0d 05 b4 13  |      ..........|
00000da0  c9 20 31 20 3a 20 c8 8e  20 68 6e 64 25 20 ca 0d  |. 1 : .. hnd% ..|
00000db0  05 be 05 cb 0d 05 c8 15  20 c9 20 36 34 20 3a 20  |........ . 64 : |
00000dc0  f2 64 72 61 67 66 69 6c  65 0d 05 d2 05 cb 0d 05  |.dragfile.......|
00000dd0  dc 05 e1 0d 05 e6 05 3a  0d 05 f0 1e dd f2 73 65  |.......:......se|
00000de0  74 5f 76 65 72 73 69 6f  6e 28 70 74 25 2c 48 25  |t_version(pt%,H%|
00000df0  2c 76 65 72 24 29 0d 05  fa 0b 21 71 25 3d 70 74  |,ver$)....!q%=pt|
00000e00  25 0d 06 04 0b 71 25 21  34 3d 48 25 0d 06 0e 1e  |%....q%!4=H%....|
00000e10  c8 99 20 22 57 69 6d 70  5f 47 65 74 49 63 6f 6e  |.. "Wimp_GetIcon|
00000e20  53 74 61 74 65 22 2c 2c  71 25 0d 06 18 0f 24 71  |State",,q%....$q|
00000e30  25 21 32 38 3d 76 65 72  24 0d 06 22 0a 71 25 21  |%!28=ver$..".q%!|
00000e40  38 3d 30 0d 06 2c 0b 71  25 21 31 32 3d 30 0d 06  |8=0..,.q%!12=0..|
00000e50  36 1e c8 99 20 22 57 69  6d 70 5f 53 65 74 49 63  |6... "Wimp_SetIc|
00000e60  6f 6e 53 74 61 74 65 22  2c 2c 71 25 0d 06 40 05  |onState",,q%..@.|
00000e70  e1 0d 06 4a 05 3a 0d 06  54 0c dd f2 66 69 6e 69  |...J.:..T...fini|
00000e80  73 68 0d 06 5e 23 c8 99  20 22 57 69 6d 70 5f 43  |sh..^#.. "Wimp_C|
00000e90  6c 6f 73 65 44 6f 77 6e  22 2c 68 61 6e 64 6c 65  |loseDown",handle|
00000ea0  25 2c 21 71 25 0d 06 68  05 e0 0d 06 72 05 e1 0d  |%,!q%..h....r...|
00000eb0  06 7c 05 3a 0d 06 86 0b  dd f2 65 72 72 6f 72 0d  |.|.:......error.|
00000ec0  06 90 18 c8 99 20 22 57  69 6d 70 5f 44 72 61 67  |..... "Wimp_Drag|
00000ed0  42 6f 78 22 2c 2c 30 0d  06 9a 0d 21 62 6c 6f 63  |Box",,0....!bloc|
00000ee0  6b 25 3d 9f 0d 06 a4 0b  65 72 72 6f 72 3d a3 0d  |k%=.....error=..|
00000ef0  06 ae 0a c8 8e 20 9f 20  ca 0d 06 b8 37 c9 20 32  |..... . ....7. 2|
00000f00  32 32 20 3a 20 24 28 62  6c 6f 63 6b 25 2b 34 29  |22 : $(block%+4)|
00000f10  3d 22 54 68 69 73 20 66  69 6c 65 20 64 6f 65 73  |="This file does|
00000f20  20 6e 6f 74 20 65 78 69  73 74 22 2b bd 28 30 29  | not exist"+.(0)|
00000f30  0d 06 c2 3a c9 20 32 30  34 20 3a 20 24 28 62 6c  |...:. 204 : $(bl|
00000f40  6f 63 6b 25 2b 34 29 3d  22 49 6e 76 61 6c 69 64  |ock%+4)="Invalid|
00000f50  20 46 69 6c 65 6e 61 6d  65 20 66 6f 72 20 53 61  | Filename for Sa|
00000f60  76 69 6e 67 22 2b bd 28  30 29 0d 06 cc 05 7f 0d  |ving"+.(0)......|
00000f70  06 d6 36 24 28 62 6c 6f  63 6b 25 2b 34 29 3d 22  |..6$(block%+4)="|
00000f80  28 49 6e 74 65 72 6e 61  6c 20 65 72 72 6f 72 20  |(Internal error |
00000f90  63 6f 64 65 22 2b c3 28  9e 29 2b 22 29 20 22 2b  |code"+.(.)+") "+|
00000fa0  f6 24 2b bd 30 0d 06 e0  05 cb 0d 06 ea 0b 66 6c  |.$+.0.........fl|
00000fb0  61 67 73 3d 31 0d 06 f4  2f c8 99 20 22 57 69 6d  |ags=1.../.. "Wim|
00000fc0  70 5f 52 65 70 6f 72 74  45 72 72 6f 72 22 2c 62  |p_ReportError",b|
00000fd0  6c 6f 63 6b 25 2c 66 6c  61 67 73 2c 22 46 61 6d  |lock%,flags,"Fam|
00000fe0  69 6c 79 22 0d 06 fe 1f  e7 20 65 72 72 6f 72 20  |ily"..... error |
00000ff0  8c 20 f2 66 69 6e 69 73  68 20 8b 20 f2 6d 61 69  |. .finish . .mai|
00001000  6e 3a e0 0d 07 08 05 e1  0d 07 12 05 3a 0d 07 1c  |n:..........:...|
00001010  13 dd f2 63 72 65 61 74  65 5f 77 69 6e 64 6f 77  |...create_window|
00001020  0d 07 26 11 21 62 6c 6f  63 6b 25 3d 6d 61 69 6e  |..&.!block%=main|
00001030  25 0d 07 30 10 62 6c 6f  63 6b 25 21 34 3d 33 30  |%..0.block%!4=30|
00001040  30 0d 07 3a 12 62 6c 6f  63 6b 25 21 31 32 3d 31  |0..:.block%!12=1|
00001050  33 30 30 0d 07 44 11 62  6c 6f 63 6b 25 21 31 36  |300..D.block%!16|
00001060  3d 38 30 30 0d 07 4e 0f  62 6c 6f 63 6b 25 21 32  |=800..N.block%!2|
00001070  30 3d 30 0d 07 58 11 62  6c 6f 63 6b 25 21 32 34  |0=0..X.block%!24|
00001080  3d 35 30 30 0d 07 62 10  62 6c 6f 63 6b 25 21 32  |=500..b.block%!2|
00001090  38 3d 2d 31 0d 07 6c 20  c8 99 20 22 57 69 6d 70  |8=-1..l .. "Wimp|
000010a0  5f 4f 70 65 6e 57 69 6e  64 6f 77 22 2c 2c 62 6c  |_OpenWindow",,bl|
000010b0  6f 63 6b 25 0d 07 76 05  e1 0d 07 80 05 3a 0d 07  |ock%..v......:..|
000010c0  8a 0b dd f2 63 6c 6f 73  65 0d 07 94 21 e7 20 21  |....close...!. !|
000010d0  62 6c 6f 63 6b 25 3d 6f  76 65 72 25 20 8c 20 6f  |block%=over% . o|
000010e0  76 65 72 76 69 65 77 25  3d a3 0d 07 9e 27 e7 20  |verview%=....'. |
000010f0  21 62 6c 6f 63 6b 25 3d  64 61 74 61 77 69 6e 64  |!block%=datawind|
00001100  6f 77 25 20 8c 20 64 61  74 61 76 69 65 77 25 3d  |ow% . dataview%=|
00001110  a3 0d 07 a8 21 c8 99 20  22 57 69 6d 70 5f 43 6c  |....!.. "Wimp_Cl|
00001120  6f 73 65 57 69 6e 64 6f  77 22 2c 2c 62 6c 6f 63  |oseWindow",,bloc|
00001130  6b 25 0d 07 b2 05 e1 0d  07 bc 05 3a 0d 07 c6 0a  |k%.........:....|
00001140  dd f2 6f 70 65 6e 0d 07  d0 20 c8 99 20 22 57 69  |..open... .. "Wi|
00001150  6d 70 5f 4f 70 65 6e 57  69 6e 64 6f 77 22 2c 2c  |mp_OpenWindow",,|
00001160  62 6c 6f 63 6b 25 0d 07  da 05 e1 0d 07 e4 05 3a  |block%.........:|
00001170  0d 07 ee 09 dd a4 66 69  6e 0d 07 f8 0b f2 66 69  |......fin.....fi|
00001180  6e 69 73 68 0d 08 02 06  3d 30 0d 08 0c 05 3a 0d  |nish....=0....:.|
00001190  08 16 56 dd a4 63 72 65  61 74 65 77 69 6e 64 6f  |..V..createwindo|
000011a0  77 28 74 69 74 6c 65 24  2c 66 6c 61 67 73 25 2c  |w(title$,flags%,|
000011b0  66 67 63 6f 6c 25 2c 62  67 63 6f 6c 25 2c 6d 61  |fgcol%,bgcol%,ma|
000011c0  78 58 25 2c 6d 61 78 59  25 2c 77 61 4c 25 2c 77  |xX%,maxY%,waL%,w|
000011d0  61 42 25 2c 77 61 52 25  2c 77 61 54 25 2c 66 69  |aB%,waR%,waT%,fi|
000011e0  6c 65 72 25 29 0d 08 20  08 ea 20 68 25 0d 08 2a  |ler%).. .. h%..*|
000011f0  1f 62 6c 6f 63 6b 25 21  30 3d 77 61 4c 25 3a 62  |.block%!0=waL%:b|
00001200  6c 6f 63 6b 25 21 34 3d  77 61 42 25 0d 08 34 20  |lock%!4=waB%..4 |
00001210  62 6c 6f 63 6b 25 21 38  3d 77 61 52 25 3a 62 6c  |block%!8=waR%:bl|
00001220  6f 63 6b 25 21 31 32 3d  77 61 54 25 0d 08 3e 1f  |ock%!12=waT%..>.|
00001230  62 6c 6f 63 6b 25 21 31  36 3d 30 3a 62 6c 6f 63  |block%!16=0:bloc|
00001240  6b 25 21 32 30 3d 6d 61  78 59 25 0d 08 48 21 62  |k%!20=maxY%..H!b|
00001250  6c 6f 63 6b 25 21 32 34  3d 2d 31 3a 62 6c 6f 63  |lock%!24=-1:bloc|
00001260  6b 25 21 32 38 3d 66 6c  61 67 73 25 0d 08 52 16  |k%!28=flags%..R.|
00001270  62 6c 6f 63 6b 25 3f 33  32 3d 74 69 74 66 63 6f  |block%?32=titfco|
00001280  6c 25 0d 08 5c 16 62 6c  6f 63 6b 25 3f 33 33 3d  |l%..\.block%?33=|
00001290  74 69 74 62 63 6f 6c 25  0d 08 66 14 62 6c 6f 63  |titbcol%..f.bloc|
000012a0  6b 25 3f 33 34 3d 66 67  63 6f 6c 25 0d 08 70 14  |k%?34=fgcol%..p.|
000012b0  62 6c 6f 63 6b 25 3f 33  35 3d 62 67 63 6f 6c 25  |block%?35=bgcol%|
000012c0  0d 08 7a 16 62 6c 6f 63  6b 25 3f 33 36 3d 73 63  |..z.block%?36=sc|
000012d0  72 62 63 6f 6c 25 0d 08  84 16 62 6c 6f 63 6b 25  |rbcol%....block%|
000012e0  3f 33 37 3d 73 63 72 66  63 6f 6c 25 0d 08 8e 13  |?37=scrfcol%....|
000012f0  62 6c 6f 63 6b 25 3f 33  38 3d 68 69 67 68 25 0d  |block%?38=high%.|
00001300  08 98 0f c8 8e 20 66 69  6c 65 72 25 20 ca 0d 08  |..... filer% ...|
00001310  a2 29 20 c9 20 31 20 3a  20 62 6c 6f 63 6b 25 3f  |.) . 1 : block%?|
00001320  33 35 3d 31 3a 62 6c 6f  63 6b 25 3f 33 38 3d 74  |35=1:block%?38=t|
00001330  69 74 62 63 6f 6c 25 0d  08 ac 18 20 c9 20 32 20  |itbcol%.... . 2 |
00001340  3a 20 62 6c 6f 63 6b 25  3f 32 37 3d 26 31 38 0d  |: block%?27=&18.|
00001350  08 b6 05 cb 0d 08 c0 0f  62 6c 6f 63 6b 25 3f 33  |........block%?3|
00001360  39 3d 30 0d 08 ca 0f 62  6c 6f 63 6b 25 21 34 30  |9=0....block%!40|
00001370  3d 30 0d 08 d4 0f 62 6c  6f 63 6b 25 21 34 34 3d  |=0....block%!44=|
00001380  30 0d 08 de 13 62 6c 6f  63 6b 25 21 34 38 3d 6d  |0....block%!48=m|
00001390  61 78 58 25 0d 08 e8 13  62 6c 6f 63 6b 25 21 35  |axX%....block%!5|
000013a0  32 3d 6d 61 78 59 25 0d  08 f2 11 62 6c 6f 63 6b  |2=maxY%....block|
000013b0  25 21 35 36 3d 26 32 44  0d 08 fc 13 62 6c 6f 63  |%!56=&2D....bloc|
000013c0  6b 25 21 36 30 3d 26 33  30 30 30 0d 09 06 0f 62  |k%!60=&3000....b|
000013d0  6c 6f 63 6b 25 21 36 34  3d 30 0d 09 10 0f 62 6c  |lock%!64=0....bl|
000013e0  6f 63 6b 25 21 36 38 3d  30 0d 09 1a 1c 24 28 62  |ock%!68=0....$(b|
000013f0  6c 6f 63 6b 25 2b 37 32  29 3d c0 74 69 74 6c 65  |lock%+72)=.title|
00001400  24 2c 31 31 29 0d 09 24  0f 62 6c 6f 63 6b 25 21  |$,11)..$.block%!|
00001410  38 34 3d 30 0d 09 2e 28  c8 99 20 22 57 69 6d 70  |84=0...(.. "Wimp|
00001420  5f 43 72 65 61 74 65 57  69 6e 64 6f 77 22 2c 30  |_CreateWindow",0|
00001430  2c 62 6c 6f 63 6b 25 20  b8 20 68 25 0d 09 38 07  |,block% . h%..8.|
00001440  3d 68 25 0d 09 42 05 3a  0d 09 4c 0d dd f2 77 69  |=h%..B.:..L...wi|
00001450  6e 64 6f 77 73 0d 09 56  44 6d 61 69 6e 25 3d a4  |ndows..VDmain%=.|
00001460  63 72 65 61 74 65 77 69  6e 64 6f 77 28 22 46 61  |createwindow("Fa|
00001470  6d 69 6c 79 20 54 72 65  65 22 2c 26 46 2c 37 2c  |mily Tree",&F,7,|
00001480  30 2c 31 30 30 30 2c 35  30 30 2c 30 2c 30 2c 35  |0,1000,500,0,0,5|
00001490  30 30 2c 35 30 30 2c 30  29 0d 09 60 44 6f 76 65  |00,500,0)..`Dove|
000014a0  72 25 3d a4 63 72 65 61  74 65 77 69 6e 64 6f 77  |r%=.createwindow|
000014b0  28 22 4f 76 65 72 76 69  65 77 22 2c 26 46 2c 37  |("Overview",&F,7|
000014c0  2c 30 2c 31 32 37 39 2c  31 30 32 33 2c 35 30 2c  |,0,1279,1023,50,|
000014d0  35 30 2c 39 35 30 2c 35  35 30 2c 30 29 0d 09 6a  |50,950,550,0)..j|
000014e0  45 63 68 65 63 6b 25 3d  a4 63 72 65 61 74 65 77  |Echeck%=.createw|
000014f0  69 6e 64 6f 77 28 22 44  65 6c 65 74 65 22 2c 26  |indow("Delete",&|
00001500  39 31 2c 37 2c 30 2c 39  30 30 2c 34 30 30 2c 31  |91,7,0,900,400,1|
00001510  35 30 2c 32 35 30 2c 31  30 35 30 2c 37 35 30 2c  |50,250,1050,750,|
00001520  31 29 0d 09 74 4e 66 69  6e 64 77 69 6e 64 25 3d  |1)..tNfindwind%=|
00001530  a4 63 72 65 61 74 65 77  69 6e 64 6f 77 28 22 46  |.createwindow("F|
00001540  69 6e 64 20 50 65 72 73  6f 6e 22 2c 26 31 46 2c  |ind Person",&1F,|
00001550  37 2c 30 2c 31 30 30 30  2c 35 30 30 2c 32 35 30  |7,0,1000,500,250|
00001560  2c 32 35 30 2c 31 32 35  30 2c 37 34 30 2c 30 29  |,250,1250,740,0)|
00001570  0d 09 7e 47 66 69 6c 65  77 69 6e 64 6f 77 25 3d  |..~Gfilewindow%=|
00001580  a4 63 72 65 61 74 65 77  69 6e 64 6f 77 28 22 53  |.createwindow("S|
00001590  61 76 65 20 61 73 3a 22  2c 31 33 31 2c 37 2c 30  |ave as:",131,7,0|
000015a0  2c 32 35 30 2c 31 36 30  2c 30 2c 30 2c 36 30 30  |,250,160,0,0,600|
000015b0  2c 31 36 30 2c 31 29 0d  09 88 4a 69 6e 66 6f 77  |,160,1)...Jinfow|
000015c0  69 6e 64 6f 77 25 3d a4  63 72 65 61 74 65 77 69  |indow%=.createwi|
000015d0  6e 64 6f 77 28 22 49 6e  66 6f 72 6d 61 74 69 6f  |ndow("Informatio|
000015e0  6e 22 2c 31 33 31 2c 37  2c 30 2c 36 32 35 2c 32  |n",131,7,0,625,2|
000015f0  35 30 2c 30 2c 30 2c 37  30 30 2c 35 30 30 2c 31  |50,0,0,700,500,1|
00001600  29 0d 09 92 50 64 61 74  61 77 69 6e 64 6f 77 25  |)...Pdatawindow%|
00001610  3d a4 63 72 65 61 74 65  77 69 6e 64 6f 77 28 22  |=.createwindow("|
00001620  50 65 72 73 6f 6e 20 44  61 74 61 22 2c 26 31 30  |Person Data",&10|
00001630  30 46 2c 37 2c 30 2c 31  36 2a 36 30 2c 31 36 2a  |0F,7,0,16*60,16*|
00001640  33 32 2c 30 2c 30 2c 35  30 30 2c 35 30 30 2c 32  |32,0,0,500,500,2|
00001650  29 0d 09 9c 26 f4 20 64  61 74 61 77 69 6e 64 6f  |)...&. datawindo|
00001660  77 20 69 73 20 34 30 20  78 20 31 36 20 63 68 61  |w is 40 x 16 cha|
00001670  72 61 63 74 65 72 73 0d  09 a6 11 f2 66 69 6c 65  |racters.....file|
00001680  77 69 6e 69 63 6f 6e 73  0d 09 b0 0e f2 69 6e 66  |winicons.....inf|
00001690  6f 69 63 6f 6e 73 0d 09  ba 2a 69 6c 65 66 74 25  |oicons...*ileft%|
000016a0  3d a4 70 6c 61 63 65 69  63 6f 6e 28 6d 61 69 6e  |=.placeicon(main|
000016b0  25 2c 38 32 35 2c 39 35  2c bd 28 31 33 36 29 29  |%,825,95,.(136))|
000016c0  0d 09 c4 29 69 73 70 6f  75 73 65 25 3d a4 70 6c  |...)ispouse%=.pl|
000016d0  61 63 65 69 63 6f 6e 28  6d 61 69 6e 25 2c 38 38  |aceicon(main%,88|
000016e0  30 2c 39 35 2c 22 53 22  29 0d 09 ce 2b 69 72 69  |0,95,"S")...+iri|
000016f0  67 68 74 25 3d a4 70 6c  61 63 65 69 63 6f 6e 28  |ght%=.placeicon(|
00001700  6d 61 69 6e 25 2c 39 33  35 2c 39 35 2c bd 28 31  |main%,935,95,.(1|
00001710  33 37 29 29 0d 09 d8 29  69 75 70 25 3d a4 70 6c  |37))...)iup%=.pl|
00001720  61 63 65 69 63 6f 6e 28  6d 61 69 6e 25 2c 38 38  |aceicon(main%,88|
00001730  30 2c 31 35 35 2c bd 28  31 33 39 29 29 0d 09 e2  |0,155,.(139))...|
00001740  2a 69 64 6f 77 6e 25 3d  a4 70 6c 61 63 65 69 63  |*idown%=.placeic|
00001750  6f 6e 28 6d 61 69 6e 25  2c 38 38 30 2c 33 35 2c  |on(main%,880,35,|
00001760  bd 28 31 33 38 29 29 0d  09 ec 1a f2 6d 61 69 6e  |.(138)).....main|
00001770  69 63 6f 6e 73 28 b9 2c  69 63 6f 6e 62 6c 6b 25  |icons(.,iconblk%|
00001780  29 0d 09 f6 1b f2 6d 61  69 6e 69 63 6f 6e 73 28  |).....mainicons(|
00001790  a3 2c 66 69 6e 64 69 63  6f 6e 25 29 0d 0a 00 0e  |.,findicon%)....|
000017a0  f2 66 69 6e 64 69 63 6f  6e 73 0d 0a 0a 0f f2 63  |.findicons.....c|
000017b0  68 65 63 6b 69 63 6f 6e  73 0d 0a 14 05 e1 0d 0a  |heckicons.......|
000017c0  1e 04 0d 0a 28 05 3a 0d  0a 32 0d dd f2 6f 66 66  |....(.:..2...off|
000017d0  73 65 74 73 0d 0a 3c 0c  66 6e 61 6d 65 25 3d 30  |sets..<.fname%=0|
000017e0  0d 0a 46 0f 73 75 72 6e  61 6d 65 25 3d 34 30 0d  |..F.surname%=40.|
000017f0  0a 50 11 62 69 72 74 68  64 61 74 65 25 3d 38 30  |.P.birthdate%=80|
00001800  0d 0a 5a 11 64 65 61 74  68 64 61 74 65 25 3d 38  |..Z.deathdate%=8|
00001810  34 0d 0a 64 14 6d 61 72  72 69 61 67 65 64 61 74  |4..d.marriagedat|
00001820  65 25 3d 38 38 0d 0a 6e  13 64 69 76 6f 72 63 65  |e%=88..n.divorce|
00001830  64 61 74 65 25 3d 39 32  0d 0a 78 0f 73 69 62 6c  |date%=92..x.sibl|
00001840  69 6e 67 25 3d 39 36 0d  0a 82 0e 63 68 69 6c 64  |ing%=96....child|
00001850  25 3d 31 30 30 0d 0a 8c  0f 73 70 6f 75 73 65 25  |%=100....spouse%|
00001860  3d 31 30 34 0d 0a 96 0c  67 65 6e 25 3d 31 30 38  |=104....gen%=108|
00001870  0d 0a a0 0c 63 6f 6c 25  3d 31 31 32 0d 0a aa 0c  |....col%=112....|
00001880  72 6f 77 25 3d 31 31 36  0d 0a b4 0c 73 65 78 25  |row%=116....sex%|
00001890  3d 31 32 30 0d 0a be 1b  70 65 72 73 6f 6e 6c 65  |=120....personle|
000018a0  6e 67 74 68 25 3d 32 30  30 2b 31 36 2a 36 35 0d  |ngth%=200+16*65.|
000018b0  0a c8 0b 6e 65 78 74 25  3d 30 0d 0a d2 05 e1 0d  |...next%=0......|
000018c0  0a dc 05 3a 0d 0a e6 13  dd f2 72 65 64 72 61 77  |...:......redraw|
000018d0  77 69 6e 28 68 25 29 0d  0a f0 0f 63 6f 6c 75 6d  |win(h%)....colum|
000018e0  6e 25 28 29 3d 30 0d 0a  fa 44 e7 20 61 64 64 73  |n%()=0...D. adds|
000018f0  74 61 74 75 73 25 20 8c  20 f2 6d 61 6b 65 74 72  |tatus% . .maketr|
00001900  65 65 28 72 6f 6f 74 25  2c 36 34 30 2c 31 30 32  |ee(root%,640,102|
00001910  33 2d 34 30 2c 30 2c 30  2c 20 63 75 72 72 65 6e  |3-40,0,0, curren|
00001920  74 5f 70 65 72 25 2c 20  b9 29 0d 0b 04 10 61 64  |t_per%, .)....ad|
00001930  64 73 74 61 74 75 73 25  3d a3 0d 0b 0e 28 c8 99  |dstatus%=....(..|
00001940  20 22 57 69 6d 70 5f 52  65 64 72 61 77 57 69 6e  | "Wimp_RedrawWin|
00001950  64 6f 77 22 2c 30 2c 62  6c 6f 63 6b 25 20 b8 20  |dow",0,block% . |
00001960  6d 25 0d 0b 18 0f 62 25  3d 62 6c 6f 63 6b 25 2b  |m%....b%=block%+|
00001970  34 0d 0b 22 12 78 30 25  3d 62 25 21 30 2d 62 25  |4..".x0%=b%!0-b%|
00001980  21 31 36 0d 0b 2c 13 79  30 25 3d 62 25 21 31 32  |!16..,.y0%=b%!12|
00001990  2d 62 25 21 32 30 0d 0b  36 09 c8 95 20 6d 25 0d  |-b%!20..6... m%.|
000019a0  0b 40 0e c8 91 20 78 30  25 2c 79 30 25 0d 0b 4a  |.@... x0%,y0%..J|
000019b0  10 c8 8e 20 21 62 6c 6f  63 6b 25 20 ca 0d 0b 54  |... !block% ...T|
000019c0  1a 20 c9 20 6d 61 69 6e  25 20 3a 20 f2 72 65 64  |. . main% : .red|
000019d0  72 61 77 6d 61 69 6e 0d  0b 5e 1a 20 c9 20 6f 76  |rawmain..^. . ov|
000019e0  65 72 25 20 3a 20 f2 72  65 64 72 61 77 6f 76 65  |er% : .redrawove|
000019f0  72 0d 0b 68 20 20 c9 20  64 61 74 61 77 69 6e 64  |r..h  . datawind|
00001a00  6f 77 25 20 3a 20 f2 72  65 64 72 61 77 64 61 74  |ow% : .redrawdat|
00001a10  61 0d 0b 72 05 cb 0d 0b  7c 0a c8 91 20 30 2c 30  |a..r....|... 0,0|
00001a20  0d 0b 86 29 20 c8 99 20  22 57 69 6d 70 5f 47 65  |...) .. "Wimp_Ge|
00001a30  74 52 65 63 74 61 6e 67  6c 65 22 2c 30 2c 62 6c  |tRectangle",0,bl|
00001a40  6f 63 6b 25 20 b8 20 6d  25 0d 0b 90 05 ce 0d 0b  |ock% . m%.......|
00001a50  9a 05 e1 0d 0b a4 05 3a  0d 0b ae 10 dd f2 72 65  |.......:......re|
00001a60  64 72 61 77 6d 61 69 6e  0d 0b b8 1a 20 c8 99 20  |drawmain.... .. |
00001a70  22 57 69 6d 70 5f 53 65  74 43 6f 6c 6f 75 72 22  |"Wimp_SetColour"|
00001a80  2c 37 0d 0b c2 16 20 c8  93 20 38 31 35 2c 32 35  |,7.... .. 815,25|
00001a90  2c 31 37 35 2c 31 38 35  0d 0b cc 05 e1 0d 0b d6  |,175,185........|
00001aa0  05 3a 0d 0b e0 13 dc 20  22 46 69 72 73 74 20 4e  |.:..... "First N|
00001ab0  61 6d 65 73 22 0d 0b ea  0f dc 20 22 53 75 72 6e  |ames"..... "Surn|
00001ac0  61 6d 65 22 0d 0b f4 15  dc 20 22 44 61 74 65 20  |ame"..... "Date |
00001ad0  6f 66 20 42 69 72 74 68  22 0d 0b fe 15 dc 20 22  |of Birth"..... "|
00001ae0  44 61 74 65 20 6f 66 20  44 65 61 74 68 22 0d 0c  |Date of Death"..|
00001af0  08 15 dc 20 22 4d 61 72  72 69 61 67 65 20 44 61  |... "Marriage Da|
00001b00  74 65 22 0d 0c 12 14 dc  20 22 44 69 76 6f 72 63  |te"..... "Divorc|
00001b10  65 20 44 61 74 65 22 0d  0c 1c 05 3a 0d 0c 26 1c  |e Date"....:..&.|
00001b20  dd a4 70 6c 61 63 65 69  63 6f 6e 28 68 25 2c 78  |..placeicon(h%,x|
00001b30  25 2c 79 25 2c 61 24 29  0d 0c 30 26 21 62 6c 6f  |%,y%,a$)..0&!blo|
00001b40  63 6b 25 3d 68 25 3a 62  6c 6f 63 6b 25 21 34 3d  |ck%=h%:block%!4=|
00001b50  78 25 3a 62 6c 6f 63 6b  25 21 38 3d 79 25 0d 0c  |x%:block%!8=y%..|
00001b60  3a 2c 62 6c 6f 63 6b 25  21 31 32 3d 78 25 2b a9  |:,block%!12=x%+.|
00001b70  28 61 24 29 2a 31 36 2b  32 39 3a 62 6c 6f 63 6b  |(a$)*16+29:block|
00001b80  25 21 31 36 3d 79 25 2b  35 30 0d 0c 44 17 62 6c  |%!16=y%+50..D.bl|
00001b90  6f 63 6b 25 21 32 30 3d  26 43 37 30 30 34 30 33  |ock%!20=&C700403|
00001ba0  44 0d 0c 4e 13 24 28 62  6c 6f 63 6b 25 2b 32 34  |D..N.$(block%+24|
00001bb0  29 3d 61 24 0d 0c 58 26  c8 99 20 22 57 69 6d 70  |)=a$..X&.. "Wimp|
00001bc0  5f 43 72 65 61 74 65 49  63 6f 6e 22 2c 30 2c 62  |_CreateIcon",0,b|
00001bd0  6c 6f 63 6b 25 20 b8 20  68 25 0d 0c 62 08 20 3d  |lock% . h%..b. =|
00001be0  68 25 0d 0c 6c 05 3a 0d  0c 76 0f dd f2 69 6e 66  |h%..l.:..v...inf|
00001bf0  6f 69 63 6f 6e 73 0d 0c  80 14 ea 20 69 25 2c 59  |oicons..... i%,Y|
00001c00  25 2c 61 24 2c 62 24 2c  61 25 0d 0c 8a 0a f7 20  |%,a$,b$,a%..... |
00001c10  8d 54 60 4d 0d 0c 94 14  e3 59 25 3d 31 30 20 b8  |.T`M.....Y%=10 .|
00001c20  20 31 39 30 20 88 36 30  0d 0c 9e 0e f3 20 61 24  | 190 .60..... a$|
00001c30  2c 62 24 2c 61 25 0d 0c  a8 18 e7 59 25 3d 31 30  |,b$,a%.....Y%=10|
00001c40  20 8c 20 62 24 3d 76 65  72 73 69 6f 6e 24 0d 0c  | . b$=version$..|
00001c50  b2 37 20 69 25 3d a4 6a  75 73 74 74 65 78 74 69  |.7 i%=.justtexti|
00001c60  28 69 6e 66 6f 77 69 6e  64 6f 77 25 2c 31 30 2c  |(infowindow%,10,|
00001c70  59 25 2c 31 35 30 2c 61  24 2c 26 37 30 30 30 30  |Y%,150,a$,&70000|
00001c80  31 31 2c 30 29 0d 0c bc  39 20 69 25 3d a4 6a 75  |11,0)...9 i%=.ju|
00001c90  73 74 74 65 78 74 69 28  69 6e 66 6f 77 69 6e 64  |sttexti(infowind|
00001ca0  6f 77 25 2c 31 35 30 2c  59 25 2c 34 36 35 2c 62  |ow%,150,Y%,465,b|
00001cb0  24 2c 26 37 30 30 30 31  33 44 2c 61 25 29 0d 0c  |$,&700013D,a%)..|
00001cc0  c6 05 ed 0d 0c d0 05 e1  0d 0c da 05 3a 0d 0c e4  |............:...|
00001cd0  25 dd a4 6a 75 73 74 74  65 78 74 69 28 68 25 2c  |%..justtexti(h%,|
00001ce0  78 25 2c 79 25 2c 77 25  2c 61 24 2c 66 25 2c 61  |x%,y%,w%,a$,f%,a|
00001cf0  25 29 0d 0c ee 26 21 62  6c 6f 63 6b 25 3d 68 25  |%)...&!block%=h%|
00001d00  3a 62 6c 6f 63 6b 25 21  34 3d 78 25 3a 62 6c 6f  |:block%!4=x%:blo|
00001d10  63 6b 25 21 38 3d 79 25  0d 0c f8 23 62 6c 6f 63  |ck%!8=y%...#bloc|
00001d20  6b 25 21 31 32 3d 78 25  2b 77 25 3a 62 6c 6f 63  |k%!12=x%+w%:bloc|
00001d30  6b 25 21 31 36 3d 79 25  2b 35 30 0d 0d 02 10 62  |k%!16=y%+50....b|
00001d40  6c 6f 63 6b 25 21 32 30  3d 66 25 0d 0d 0c 51 e7  |lock%!20=f%...Q.|
00001d50  20 61 25 3d 30 20 8c 20  24 28 62 6c 6f 63 6b 25  | a%=0 . $(block%|
00001d60  2b 32 34 29 3d 61 24 20  8b 20 62 6c 6f 63 6b 25  |+24)=a$ . block%|
00001d70  21 32 34 3d 61 25 3a 62  6c 6f 63 6b 25 21 32 38  |!24=a%:block%!28|
00001d80  3d 2d 31 3a 62 6c 6f 63  6b 25 21 33 32 3d a9 28  |=-1:block%!32=.(|
00001d90  61 24 29 2b 31 3a 24 61  25 3d 61 24 0d 0d 16 26  |a$)+1:$a%=a$...&|
00001da0  c8 99 20 22 57 69 6d 70  5f 43 72 65 61 74 65 49  |.. "Wimp_CreateI|
00001db0  63 6f 6e 22 2c 30 2c 62  6c 6f 63 6b 25 20 b8 20  |con",0,block% . |
00001dc0  68 25 0d 0d 20 7f dc 20  22 56 65 72 73 69 6f 6e  |h%.. .. "Version|
00001dd0  3a 22 2c 76 65 72 73 69  6f 6e 24 2c 76 64 61 74  |:",version$,vdat|
00001de0  61 25 2c 22 41 75 74 68  6f 72 3a 22 2c 22 44 61  |a%,"Author:","Da|
00001df0  76 69 64 20 42 72 65 61  6b 77 65 6c 6c 22 2c 61  |vid Breakwell",a|
00001e00  75 25 2c 22 50 75 72 70  6f 73 65 3a 22 2c 22 46  |u%,"Purpose:","F|
00001e10  61 6d 69 6c 79 20 54 72  65 65 20 50 72 6f 67 72  |amily Tree Progr|
00001e20  61 6d 22 2c 70 75 72 25  2c 22 4e 61 6d 65 3a 22  |am",pur%,"Name:"|
00001e30  2c 22 21 46 41 4d 49 4c  59 22 2c 70 6e 61 6d 65  |,"!FAMILY",pname|
00001e40  25 0d 0d 2a 40 dc 20 22  21 46 41 4d 49 4c 59 22  |%..*@. "!FAMILY"|
00001e50  2c 22 46 61 6d 69 6c 79  20 54 72 65 65 20 50 72  |,"Family Tree Pr|
00001e60  6f 67 72 61 6d 22 2c 22  44 61 76 69 64 20 42 72  |ogram","David Br|
00001e70  65 61 6b 77 65 6c 6c 22  2c 76 65 72 73 69 6f 6e  |eakwell",version|
00001e80  24 0d 0d 34 05 3a 0d 0d  3e 0f dd a4 64 69 6d 70  |$..4.:..>...dimp|
00001e90  65 72 73 6f 6e 0d 0d 48  0d ea 20 70 65 72 73 6f  |erson..H.. perso|
00001ea0  6e 25 0d 0d 52 26 e7 20  93 2d e0 3c 70 65 72 73  |n%..R&. .-.<pers|
00001eb0  6f 6e 6c 65 6e 67 74 68  25 2b 31 30 30 20 8c 20  |onlength%+100 . |
00001ec0  e0 3d 93 2b 31 30 32 34  0d 0d 5c 54 e7 20 64 65  |.=.+1024..\T. de|
00001ed0  6c 65 74 65 25 3d 6e 69  6c 25 20 8c 20 de 20 70  |lete%=nil% . . p|
00001ee0  65 72 73 6f 6e 25 20 70  65 72 73 6f 6e 6c 65 6e  |erson% personlen|
00001ef0  67 74 68 25 20 8b 20 70  65 72 73 6f 6e 25 3d 64  |gth% . person%=d|
00001f00  65 6c 65 74 65 25 3a 64  65 6c 65 74 65 25 3d 64  |elete%:delete%=d|
00001f10  65 6c 65 74 65 25 21 6e  65 78 74 25 0d 0d 66 0c  |elete%!next%..f.|
00001f20  3d 70 65 72 73 6f 6e 25  0d 0d 70 05 3a 0d 0d 7a  |=person%..p.:..z|
00001f30  18 dd f2 6d 61 69 6e 69  63 6f 6e 73 28 4d 25 2c  |...mainicons(M%,|
00001f40  6d 65 6d 25 29 0d 0d 84  0e ea 20 69 63 6f 6e 62  |mem%)..... iconb|
00001f50  6c 6b 25 0d 0d 8e 11 69  63 6f 6e 62 6c 6b 25 3d  |lk%....iconblk%=|
00001f60  6d 65 6d 25 0d 0d 98 0a  f7 20 8d 64 60 4b 0d 0d  |mem%..... .d`K..|
00001f70  a2 10 e3 6c 6f 6f 70 25  3d 31 20 b8 20 36 0d 0d  |...loop%=1 . 6..|
00001f80  ac 2d 20 e7 20 4d 25 20  8c 20 21 62 6c 6f 63 6b  |.- . M% . !block|
00001f90  25 3d 6d 61 69 6e 25 20  8b 20 21 62 6c 6f 63 6b  |%=main% . !block|
00001fa0  25 3d 66 69 6e 64 77 69  6e 64 25 0d 0d b6 38 20  |%=findwind%...8 |
00001fb0  62 6c 6f 63 6b 25 21 32  34 3d 28 69 63 6f 6e 62  |block%!24=(iconb|
00001fc0  6c 6b 25 2b 28 31 37 2a  6c 6f 6f 70 25 29 29 3a  |lk%+(17*loop%)):|
00001fd0  62 6c 6f 63 6b 25 21 32  38 3d 26 46 46 46 46 46  |block%!28=&FFFFF|
00001fe0  46 46 46 0d 0d c0 18 20  62 6c 6f 63 6b 25 21 32  |FFF.... block%!2|
00001ff0  30 3d 26 43 37 30 30 30  31 32 35 0d 0d ca 41 20  |0=&C7000125...A |
00002000  f3 20 24 28 69 63 6f 6e  62 6c 6b 25 2b 28 31 37  |. $(iconblk%+(17|
00002010  2a 6c 6f 6f 70 25 29 29  3a 62 6c 6f 63 6b 25 21  |*loop%)):block%!|
00002020  34 3d 32 30 3a 62 6c 6f  63 6b 25 21 38 3d 33 39  |4=20:block%!8=39|
00002030  30 2d 28 6c 6f 6f 70 25  2a 36 30 29 0d 0d d4 26  |0-(loop%*60)...&|
00002040  20 62 6c 6f 63 6b 25 21  33 32 3d a9 24 28 69 63  | block%!32=.$(ic|
00002050  6f 6e 62 6c 6b 25 2b 28  31 37 2a 6c 6f 6f 70 25  |onblk%+(17*loop%|
00002060  29 29 0d 0d de 31 20 62  6c 6f 63 6b 25 21 31 32  |))...1 block%!12|
00002070  3d 62 6c 6f 63 6b 25 21  34 2b 32 37 30 3a 62 6c  |=block%!4+270:bl|
00002080  6f 63 6b 25 21 31 36 3d  62 6c 6f 63 6b 25 21 38  |ock%!16=block%!8|
00002090  2b 35 30 0d 0d e8 22 20  c8 99 20 22 57 69 6d 70  |+50..." .. "Wimp|
000020a0  5f 43 72 65 61 74 65 49  63 6f 6e 22 2c 30 2c 62  |_CreateIcon",0,b|
000020b0  6c 6f 63 6b 25 0d 0d f2  24 20 62 6c 6f 63 6b 25  |lock%...$ block%|
000020c0  21 34 3d 33 30 30 3a 62  6c 6f 63 6b 25 21 32 30  |!4=300:block%!20|
000020d0  3d 26 37 30 30 46 31 32  35 0d 0d fc 0f 20 c8 8e  |=&700F125.... ..|
000020e0  20 6c 6f 6f 70 25 20 ca  0d 0e 06 10 20 20 c9 20  | loop% .....  . |
000020f0  31 20 3a 20 6c 25 3d 30  0d 0e 10 11 20 20 c9 20  |1 : l%=0....  . |
00002100  32 20 3a 20 6c 25 3d 34  30 0d 0e 1a 11 20 20 c9  |2 : l%=40....  .|
00002110  20 33 20 3a 20 6c 25 3d  38 30 0d 0e 24 11 20 20  | 3 : l%=80..$.  |
00002120  c9 20 34 20 3a 20 6c 25  3d 39 31 0d 0e 2e 12 20  |. 4 : l%=91.... |
00002130  20 c9 20 35 20 3a 20 6c  25 3d 31 30 32 0d 0e 38  | . 5 : l%=102..8|
00002140  12 20 20 c9 20 36 20 3a  20 6c 25 3d 31 31 33 0d  |.  . 6 : l%=113.|
00002150  0e 42 06 20 cb 0d 0e 4c  36 20 e7 20 4d 25 20 8c  |.B. ...L6 . M% .|
00002160  20 62 6c 6f 63 6b 25 21  32 34 3d 70 65 72 73 64  | block%!24=persd|
00002170  25 2b 6c 25 20 8b 20 62  6c 6f 63 6b 25 21 32 34  |%+l% . block%!24|
00002180  3d 66 70 65 72 73 64 25  2b 6c 25 0d 0e 56 4b 20  |=fpersd%+l%..VK |
00002190  e7 20 6c 6f 6f 70 25 3c  33 20 8c 20 62 6c 6f 63  |. loop%<3 . bloc|
000021a0  6b 25 21 33 32 3d 34 31  3a 24 28 62 6c 6f 63 6b  |k%!32=41:$(block|
000021b0  25 21 32 34 29 3d 22 22  20 8b 20 62 6c 6f 63 6b  |%!24)="" . block|
000021c0  25 21 33 32 3d 31 32 3a  21 28 62 6c 6f 63 6b 25  |%!32=12:!(block%|
000021d0  21 32 34 29 3d 30 0d 0e  60 28 20 62 6c 6f 63 6b  |!24)=0..`( block|
000021e0  25 21 31 32 3d 62 6c 6f  63 6b 25 21 34 2b 28 62  |%!12=block%!4+(b|
000021f0  6c 6f 63 6b 25 21 33 32  2b 31 29 2a 31 36 0d 0e  |lock%!32+1)*16..|
00002200  6a 27 20 c8 99 20 22 57  69 6d 70 5f 43 72 65 61  |j' .. "Wimp_Crea|
00002210  74 65 49 63 6f 6e 22 2c  30 2c 62 6c 6f 63 6b 25  |teIcon",0,block%|
00002220  20 b8 20 49 25 0d 0e 74  20 e7 4d 25 20 80 20 6c  | . I%..t .M% . l|
00002230  6f 6f 70 25 3d 31 20 8c  20 6d 61 69 6e 62 61 73  |oop%=1 . mainbas|
00002240  65 25 3d 49 25 0d 0e 7e  21 e7 ac 4d 25 20 80 20  |e%=I%..~!..M% . |
00002250  6c 6f 6f 70 25 3d 31 20  8c 20 66 69 6e 64 62 61  |loop%=1 . findba|
00002260  73 65 25 3d 49 25 0d 0e  88 05 ed 0d 0e 92 10 f2  |se%=I%..........|
00002270  63 6c 65 61 72 70 65 72  73 6f 6e 0d 0e 9c 30 62  |clearperson...0b|
00002280  6c 6f 63 6b 25 21 32 30  3d 26 43 37 30 30 30 31  |lock%!20=&C70001|
00002290  33 44 3a 62 6c 6f 63 6b  25 21 34 3d 32 30 3a 62  |3D:block%!4=20:b|
000022a0  6c 6f 63 6b 25 21 38 3d  34 32 30 0d 0e a6 30 62  |lock%!8=420...0b|
000022b0  6c 6f 63 6b 25 21 31 32  3d 62 6c 6f 63 6b 25 21  |lock%!12=block%!|
000022c0  34 2b 39 36 30 3a 62 6c  6f 63 6b 25 21 31 36 3d  |4+960:block%!16=|
000022d0  62 6c 6f 63 6b 25 21 38  2b 35 30 0d 0e b0 1d 62  |block%!8+50....b|
000022e0  6c 6f 63 6b 25 21 32 34  3d 28 69 63 6f 6e 62 6c  |lock%!24=(iconbl|
000022f0  6b 25 2b 37 2a 31 37 29  0d 0e ba 0a e7 20 4d 25  |k%+7*17)..... M%|
00002300  20 8c 0d 0e c4 25 20 24  28 69 63 6f 6e 62 6c 6b  | ....% $(iconblk|
00002310  25 2b 37 2a 31 37 29 3d  22 50 65 72 73 6f 6e 61  |%+7*17)="Persona|
00002320  6c 20 44 61 74 61 22 0d  0e ce 05 cc 0d 0e d8 23  |l Data"........#|
00002330  20 24 28 69 63 6f 6e 62  6c 6b 25 2b 37 2a 31 37  | $(iconblk%+7*17|
00002340  29 3d 22 46 69 6e 64 20  50 65 72 73 6f 6e 22 0d  |)="Find Person".|
00002350  0e e2 05 cd 0d 0e ec 21  c8 99 20 22 57 69 6d 70  |.......!.. "Wimp|
00002360  5f 43 72 65 61 74 65 49  63 6f 6e 22 2c 30 2c 62  |_CreateIcon",0,b|
00002370  6c 6f 63 6b 25 0d 0e f6  30 62 6c 6f 63 6b 25 21  |lock%...0block%!|
00002380  34 3d 35 35 30 3a 62 6c  6f 63 6b 25 21 32 30 3d  |4=550:block%!20=|
00002390  26 43 37 30 30 39 31 33  44 3a 62 6c 6f 63 6b 25  |&C700913D:block%|
000023a0  21 38 3d 33 30 0d 0f 00  30 62 6c 6f 63 6b 25 21  |!8=30...0block%!|
000023b0  31 32 3d 62 6c 6f 63 6b  25 21 34 2b 32 30 30 3a  |12=block%!4+200:|
000023c0  62 6c 6f 63 6b 25 21 31  36 3d 62 6c 6f 63 6b 25  |block%!16=block%|
000023d0  21 38 2b 35 30 0d 0f 0a  3f 62 6c 6f 63 6b 25 21  |!8+50...?block%!|
000023e0  32 34 3d 28 69 63 6f 6e  62 6c 6b 25 2b 38 2a 31  |24=(iconblk%+8*1|
000023f0  37 29 3a 24 28 69 63 6f  6e 62 6c 6b 25 2b 38 2a  |7):$(iconblk%+8*|
00002400  31 37 29 3d 22 4f 4b 22  3a 62 6c 6f 63 6b 25 21  |17)="OK":block%!|
00002410  33 32 3d 32 0d 0f 14 0d  e7 20 ac 28 4d 25 29 20  |32=2..... .(M%) |
00002420  8c 0d 0f 1e 1d 20 62 6c  6f 63 6b 25 21 34 3d 38  |..... block%!4=8|
00002430  38 30 3a 62 6c 6f 63 6b  25 21 38 3d 33 30 0d 0f  |80:block%!8=30..|
00002440  28 20 20 62 6c 6f 63 6b  25 21 31 32 3d 39 37 30  |(  block%!12=970|
00002450  3a 62 6c 6f 63 6b 25 21  31 36 3d 32 36 30 0d 0f  |:block%!16=260..|
00002460  32 29 20 c8 99 20 22 57  69 6d 70 5f 43 72 65 61  |2) .. "Wimp_Crea|
00002470  74 65 49 63 6f 6e 22 2c  30 2c 62 6c 6f 63 6b 25  |teIcon",0,block%|
00002480  20 b8 20 66 6f 6b 25 0d  0f 3c 05 cc 0d 0f 46 28  | . fok%..<....F(|
00002490  20 c8 99 20 22 57 69 6d  70 5f 43 72 65 61 74 65  | .. "Wimp_Create|
000024a0  49 63 6f 6e 22 2c 30 2c  62 6c 6f 63 6b 25 20 b8  |Icon",0,block% .|
000024b0  20 6f 6b 25 0d 0f 50 05  cd 0d 0f 5a 0a e7 20 4d  | ok%..P....Z.. M|
000024c0  25 20 8c 0d 0f 64 12 20  21 62 6c 6f 63 6b 25 3d  |% ...d. !block%=|
000024d0  6d 61 69 6e 25 0d 0f 6e  1e 20 62 6c 6f 63 6b 25  |main%..n. block%|
000024e0  21 34 3d 35 35 30 3a 62  6c 6f 63 6b 25 21 38 3d  |!4=550:block%!8=|
000024f0  32 31 30 0d 0f 78 20 20  62 6c 6f 63 6b 25 21 31  |210..x  block%!1|
00002500  32 3d 36 35 30 3a 62 6c  6f 63 6b 25 21 31 36 3d  |2=650:block%!16=|
00002510  32 36 30 0d 0f 82 18 20  62 6c 6f 63 6b 25 21 32  |260.... block%!2|
00002520  30 3d 26 43 37 30 30 30  30 33 44 0d 0f 8c 17 20  |0=&C700003D.... |
00002530  24 28 62 6c 6f 63 6b 25  2b 32 34 29 3d 22 53 65  |$(block%+24)="Se|
00002540  78 22 0d 0f 96 21 20 c8  99 20 22 57 69 6d 70 5f  |x"...! .. "Wimp_|
00002550  43 72 65 61 74 65 49 63  6f 6e 22 2c 2c 62 6c 6f  |CreateIcon",,blo|
00002560  63 6b 25 0d 0f a0 1f 20  62 6c 6f 63 6b 25 21 34  |ck%.... block%!4|
00002570  3d 36 37 30 3a 62 6c 6f  63 6b 25 21 31 32 3d 37  |=670:block%!12=7|
00002580  37 30 0d 0f aa 2b 20 62  6c 6f 63 6b 25 21 32 30  |70...+ block%!20|
00002590  3d 25 31 31 31 30 30 30  30 30 30 30 30 31 31 31  |=%11100000000111|
000025a0  31 30 30 30 30 30 30 31  31 31 31 30 31 0d 0f b4  |1000000111101...|
000025b0  14 20 24 28 62 6c 6f 63  6b 25 2b 32 34 29 3d 22  |. $(block%+24)="|
000025c0  22 0d 0f be 2e 20 c8 99  20 22 57 69 6d 70 5f 43  |".... .. "Wimp_C|
000025d0  72 65 61 74 65 49 63 6f  6e 22 2c 2c 62 6c 6f 63  |reateIcon",,bloc|
000025e0  6b 25 20 b8 20 70 65 72  73 6f 6e 73 65 78 25 0d  |k% . personsex%.|
000025f0  0f c8 05 cd 0d 0f d2 05  e1 0d 0f dc 05 3a 0d 0f  |.............:..|
00002600  e6 0d dd f2 63 68 61 72  65 6e 74 0d 0f f0 08 ea  |....charent.....|
00002610  20 66 25 0d 0f fa 28 e7  20 21 62 6c 6f 63 6b 25  | f%...(. !block%|
00002620  3d 64 61 74 61 77 69 6e  64 6f 77 25 20 8c 20 f2  |=datawindow% . .|
00002630  65 6e 74 65 72 64 61 74  61 3a e1 0d 10 04 2d e7  |enterdata:....-.|
00002640  20 21 62 6c 6f 63 6b 25  20 3c 3e 6d 61 69 6e 25  | !block% <>main%|
00002650  20 80 20 21 62 6c 6f 63  6b 25 20 3c 3e 66 69 6e  | . !block% <>fin|
00002660  64 77 69 6e 64 25 20 8c  0d 10 0e 23 20 c8 99 20  |dwind% ....# .. |
00002670  22 57 69 6d 70 5f 50 72  6f 63 65 73 73 4b 65 79  |"Wimp_ProcessKey|
00002680  22 2c 62 6c 6f 63 6b 25  21 32 34 0d 10 18 06 20  |",block%!24.... |
00002690  e1 0d 10 22 05 cd 0d 10  2c 12 c8 8e 20 62 6c 6f  |..."....,... blo|
000026a0  63 6b 25 21 32 34 20 ca  0d 10 36 13 20 c9 20 31  |ck%!24 ...6. . 1|
000026b0  33 20 20 3a 20 f7 20 8d  54 7a 51 0d 10 40 13 20  |3  : . .TzQ..@. |
000026c0  c9 20 33 39 39 20 3a 20  f7 20 8d 44 44 51 0d 10  |. 399 : . .DDQ..|
000026d0  4a 13 20 c9 20 33 39 38  20 3a 20 f7 20 8d 54 7a  |J. . 398 : . .Tz|
000026e0  51 0d 10 54 27 20 7f 20  3a 20 c8 99 20 22 57 69  |Q..T' . : .. "Wi|
000026f0  6d 70 5f 50 72 6f 63 65  73 73 4b 65 79 22 2c 62  |mp_ProcessKey",b|
00002700  6c 6f 63 6b 25 21 32 34  0d 10 5e 05 cb 0d 10 68  |lock%!24..^....h|
00002710  10 66 25 3d 62 6c 6f 63  6b 25 21 32 34 0d 10 72  |.f%=block%!24..r|
00002720  24 e7 20 66 25 3c 3e 31  33 20 80 20 66 25 3c 3e  |$. f%<>13 . f%<>|
00002730  33 39 39 20 80 20 66 25  3c 3e 33 39 38 20 8c 20  |399 . f%<>398 . |
00002740  e1 0d 10 7c 26 c8 99 20  22 57 69 6d 70 5f 47 65  |...|&.. "Wimp_Ge|
00002750  74 43 61 72 65 74 50 6f  73 69 74 69 6f 6e 22 2c  |tCaretPosition",|
00002760  2c 62 6c 6f 63 6b 25 0d  10 86 2d e7 20 21 62 6c  |,block%...-. !bl|
00002770  6f 63 6b 25 3d 66 69 6e  64 77 69 6e 64 25 20 8c  |ock%=findwind% .|
00002780  20 62 6c 6f 63 6b 25 21  34 3d 62 6c 6f 63 6b 25  | block%!4=block%|
00002790  21 34 2b 35 0d 10 90 05  f5 0d 10 9a 09 20 f3 20  |!4+5......... . |
000027a0  6c 25 0d 10 a4 11 fd 20  62 6c 6f 63 6b 25 21 34  |l%..... block%!4|
000027b0  3d 6c 25 0d 10 ae 08 f3  20 6c 25 0d 10 b8 21 e7  |=l%..... l%...!.|
000027c0  20 21 62 6c 6f 63 6b 25  3d 66 69 6e 64 77 69 6e  | !block%=findwin|
000027d0  64 25 20 80 20 6c 25 3d  32 30 20 8c 0d 10 c2 1c  |d% . l%=20 .....|
000027e0  20 e7 20 66 25 3d 33 39  39 20 8c 20 6c 25 3d 31  | . f%=399 . l%=1|
000027f0  36 20 8b 20 6c 25 3d 36  0d 10 cc 05 cd 0d 10 d6  |6 . l%=6........|
00002800  1f e7 20 21 62 6c 6f 63  6b 25 3d 66 69 6e 64 77  |.. !block%=findw|
00002810  69 6e 64 25 20 8c 20 6c  25 2d 3d 35 0d 10 e0 2e  |ind% . l%-=5....|
00002820  c8 99 20 22 57 69 6d 70  5f 53 65 74 43 61 72 65  |.. "Wimp_SetCare|
00002830  74 50 6f 73 69 74 69 6f  6e 22 2c 21 62 6c 6f 63  |tPosition",!bloc|
00002840  6b 25 2c 6c 25 2c 2c 2c  2d 31 0d 10 ea 05 e1 0d  |k%,l%,,,-1......|
00002850  10 f4 15 e7 20 21 62 6c  6f 63 6b 25 3d 6d 61 69  |.... !block%=mai|
00002860  6e 25 20 8c 0d 10 fe 50  20 c8 99 20 22 57 69 6d  |n% ....P .. "Wim|
00002870  70 5f 53 65 74 43 61 72  65 74 50 6f 73 69 74 69  |p_SetCaretPositi|
00002880  6f 6e 22 2c 6d 61 69 6e  25 2c 6d 61 69 6e 62 61  |on",main%,mainba|
00002890  73 65 25 2b 28 28 33 33  35 2d 6c 25 29 2f 36 30  |se%+((335-l%)/60|
000028a0  29 2a 32 2c 62 25 2c 6c  25 2c 26 31 30 30 30 30  |)*2,b%,l%,&10000|
000028b0  32 38 2c 30 0d 11 08 05  cc 0d 11 12 54 20 c8 99  |28,0........T ..|
000028c0  20 22 57 69 6d 70 5f 53  65 74 43 61 72 65 74 50  | "Wimp_SetCaretP|
000028d0  6f 73 69 74 69 6f 6e 22  2c 66 69 6e 64 77 69 6e  |osition",findwin|
000028e0  64 25 2c 66 69 6e 64 62  61 73 65 25 2b 28 28 33  |d%,findbase%+((3|
000028f0  33 35 2d 6c 25 29 2f 36  30 29 2a 32 2c 62 25 2c  |35-l%)/60)*2,b%,|
00002900  6c 25 2c 26 31 30 30 30  30 32 38 2c 30 0d 11 1c  |l%,&1000028,0...|
00002910  05 cd 0d 11 26 05 e1 0d  11 30 05 3a 0d 11 3a 1a  |....&....0.:..:.|
00002920  dc 20 36 2c 38 2c 31 30  2c 31 32 2c 31 34 2c 31  |. 6,8,10,12,14,1|
00002930  36 2c 32 30 2c 36 0d 11  44 1a dc 20 36 2c 32 30  |6,20,6..D.. 6,20|
00002940  2c 31 36 2c 31 34 2c 31  32 2c 31 30 2c 38 2c 36  |,16,14,12,10,8,6|
00002950  0d 11 4e 25 dd a4 63 6f  6e 76 73 74 72 64 61 74  |..N%..convstrdat|
00002960  65 28 64 24 29 3a ea 20  6c 25 2c 64 25 2c 64 31  |e(d$):. l%,d%,d1|
00002970  25 2c 64 32 25 0d 11 58  11 e7 20 64 24 3d 22 20  |%,d2%..X.. d$=" |
00002980  22 20 8c 20 3d 30 0d 11  62 17 64 25 3d a4 6e 75  |" . =0..b.d%=.nu|
00002990  6d 62 65 72 28 64 24 2c  31 2c 6c 25 29 0d 11 6c  |mber(d$,1,l%)..l|
000029a0  1b 64 31 25 3d a4 6e 75  6d 62 65 72 28 64 24 2c  |.d1%=.number(d$,|
000029b0  6c 25 2b 31 2c 6c 25 29  0d 11 76 1b 64 32 25 3d  |l%+1,l%)..v.d2%=|
000029c0  a4 6e 75 6d 62 65 72 28  64 24 2c 6c 25 2b 31 2c  |.number(d$,l%+1,|
000029d0  6c 25 29 0d 11 80 1f e7  20 64 25 3c 31 20 84 20  |l%)..... d%<1 . |
000029e0  64 31 25 3c 31 20 84 20  64 32 25 3c 30 20 8c 20  |d1%<1 . d2%<0 . |
000029f0  3d 30 0d 11 8a 19 e7 20  64 25 3e 33 31 20 84 20  |=0..... d%>31 . |
00002a00  64 31 25 3e 31 32 20 8c  20 3d 30 0d 11 94 0c c8  |d1%>12 . =0.....|
00002a10  8e 20 64 31 25 20 ca 0d  11 9e 17 20 c9 20 39 2c  |. d1% ..... . 9,|
00002a20  34 2c 36 2c 31 31 20 3a  20 6c 25 3d 33 30 0d 11  |4,6,11 : l%=30..|
00002a30  a8 17 20 c9 20 32 20 20  20 20 20 20 20 20 3a 20  |.. . 2        : |
00002a40  6c 25 3d 32 38 0d 11 b2  0e 20 7f 20 3a 20 6c 25  |l%=28.... . : l%|
00002a50  3d 33 31 0d 11 bc 05 cb  0d 11 c6 10 e7 20 64 25  |=31.......... d%|
00002a60  3e 6c 25 20 8c 20 3d 30  0d 11 d0 1a 3d 64 25 2b  |>l% . =0....=d%+|
00002a70  28 64 31 25 3c 3c 38 29  2b 28 64 32 25 3c 3c 31  |(d1%<<8)+(d2%<<1|
00002a80  36 29 0d 11 da 05 3a 0d  11 e4 15 dd a4 63 6f 6e  |6)....:......con|
00002a90  76 6e 75 6d 64 61 74 65  28 64 25 29 0d 11 ee 0a  |vnumdate(d%)....|
00002aa0  ea 64 24 2c 6c 24 0d 11  f8 0f 64 24 3d 22 22 3a  |.d$,l$....d$="":|
00002ab0  6c 24 3d 22 22 0d 12 02  0f e7 20 64 25 3d 30 20  |l$=""..... d%=0 |
00002ac0  8c 3d 22 22 0d 12 0c 25  64 24 3d c3 28 64 25 20  |.=""...%d$=.(d% |
00002ad0  80 20 26 46 46 29 3a e7  a9 64 24 3d 31 20 8c 20  |. &FF):..d$=1 . |
00002ae0  64 24 3d 22 30 22 2b 64  24 0d 12 16 2d 6c 24 3d  |d$="0"+d$...-l$=|
00002af0  c3 28 28 64 25 20 80 20  26 46 46 30 30 29 3e 3e  |.((d% . &FF00)>>|
00002b00  38 29 3a e7 20 a9 6c 24  3d 31 20 8c 20 6c 24 3d  |8):. .l$=1 . l$=|
00002b10  22 30 22 2b 6c 24 0d 12  20 13 64 24 3d 64 24 2b  |"0"+l$.. .d$=d$+|
00002b20  73 70 6c 69 74 24 2b 6c  24 0d 12 2a 30 6c 24 3d  |split$+l$..*0l$=|
00002b30  c3 28 28 64 25 20 80 20  26 46 46 46 46 30 30 30  |.((d% . &FFFF000|
00002b40  30 29 3e 3e 31 36 29 3a  6c 24 3d c4 34 2d a9 6c  |0)>>16):l$=.4-.l|
00002b50  24 2c 22 20 22 29 2b 6c  24 0d 12 34 11 3d 64 24  |$," ")+l$..4.=d$|
00002b60  2b 73 70 6c 69 74 24 2b  6c 24 0d 12 3e 05 3a 0d  |+split$+l$..>.:.|
00002b70  12 48 10 dd f2 63 6f 70  79 74 6f 28 68 25 29 0d  |.H...copyto(h%).|
00002b80  12 52 17 f4 20 43 6f 70  79 20 68 25 20 54 4f 20  |.R.. Copy h% TO |
00002b90  70 65 72 73 64 25 0d 12  5c 0e e3 20 6f 25 3d 31  |persd%..\.. o%=1|
00002ba0  20 b8 20 37 0d 12 66 0c  20 c8 8e 20 6f 25 20 ca  | . 7..f. .. o% .|
00002bb0  0d 12 70 17 20 20 c9 20  31 20 3a 20 24 70 65 72  |..p.  . 1 : $per|
00002bc0  73 64 25 3d 24 68 25 0d  12 7a 26 20 20 c9 20 32  |sd%=$h%..z&  . 2|
00002bd0  20 3a 24 28 70 65 72 73  64 25 2b 34 30 29 3d 24  | :$(persd%+40)=$|
00002be0  28 68 25 2b 73 75 72 6e  61 6d 65 25 29 0d 12 84  |(h%+surname%)...|
00002bf0  34 20 20 c9 20 33 20 3a  20 24 28 70 65 72 73 64  |4  . 3 : $(persd|
00002c00  25 2b 38 30 29 3d a4 63  6f 6e 76 6e 75 6d 64 61  |%+80)=.convnumda|
00002c10  74 65 28 68 25 21 62 69  72 74 68 64 61 74 65 25  |te(h%!birthdate%|
00002c20  29 0d 12 8e 34 20 20 c9  20 34 20 3a 20 24 28 70  |)...4  . 4 : $(p|
00002c30  65 72 73 64 25 2b 39 31  29 3d a4 63 6f 6e 76 6e  |ersd%+91)=.convn|
00002c40  75 6d 64 61 74 65 28 68  25 21 64 65 61 74 68 64  |umdate(h%!deathd|
00002c50  61 74 65 25 29 0d 12 98  38 20 20 c9 20 35 20 3a  |ate%)...8  . 5 :|
00002c60  20 24 28 70 65 72 73 64  25 2b 31 30 32 29 3d a4  | $(persd%+102)=.|
00002c70  63 6f 6e 76 6e 75 6d 64  61 74 65 28 68 25 21 6d  |convnumdate(h%!m|
00002c80  61 72 72 69 61 67 65 64  61 74 65 25 29 0d 12 a2  |arriagedate%)...|
00002c90  37 20 20 c9 20 36 20 3a  20 24 28 70 65 72 73 64  |7  . 6 : $(persd|
00002ca0  25 2b 31 31 33 29 3d a4  63 6f 6e 76 6e 75 6d 64  |%+113)=.convnumd|
00002cb0  61 74 65 28 68 25 21 64  69 76 6f 72 63 65 64 61  |ate(h%!divorceda|
00002cc0  74 65 25 29 0d 12 ac a1  20 20 c9 20 37 20 3a 20  |te%)....  . 7 : |
00002cd0  21 69 63 77 25 3d 6d 61  69 6e 25 3a 69 63 77 25  |!icw%=main%:icw%|
00002ce0  21 34 3d 70 65 72 73 6f  6e 73 65 78 25 3a c8 99  |!4=personsex%:..|
00002cf0  20 22 57 69 6d 70 5f 47  65 74 49 63 6f 6e 53 74  | "Wimp_GetIconSt|
00002d00  61 74 65 22 2c 2c 69 63  77 25 3a c8 99 20 22 57  |ate",,icw%:.. "W|
00002d10  69 6d 70 5f 44 65 6c 65  74 65 49 63 6f 6e 22 2c  |imp_DeleteIcon",|
00002d20  2c 69 63 77 25 3a 24 28  69 63 77 25 2b 32 38 29  |,icw%:$(icw%+28)|
00002d30  3d bd 28 68 25 21 73 65  78 25 29 3a 69 63 77 25  |=.(h%!sex%):icw%|
00002d40  21 34 3d 21 69 63 77 25  3a c8 99 20 22 57 69 6d  |!4=!icw%:.. "Wim|
00002d50  70 5f 43 72 65 61 74 65  49 63 6f 6e 22 2c 2c 69  |p_CreateIcon",,i|
00002d60  63 77 25 2b 34 0d 12 b6  06 20 cb 0d 12 c0 05 ed  |cw%+4.... ......|
00002d70  0d 12 ca 0f e3 20 6f 25  3d 30 20 b8 20 31 35 0d  |..... o%=0 . 15.|
00002d80  12 d4 35 20 64 61 74 61  73 65 74 24 28 6f 25 29  |..5 dataset$(o%)|
00002d90  3d 24 28 68 25 2b 28 70  65 72 73 6f 6e 6c 65 6e  |=$(h%+(personlen|
00002da0  67 74 68 25 2d 28 31 36  2a 36 35 29 29 2b 6f 25  |gth%-(16*65))+o%|
00002db0  2a 36 35 29 0d 12 de 05  ed 0d 12 e8 05 e1 0d 12  |*65)............|
00002dc0  f2 05 3a 0d 12 fc 17 dd  f2 63 6f 70 79 66 72 6f  |..:......copyfro|
00002dd0  6d 28 68 25 2c 6d 65 6d  25 29 0d 13 06 0e e3 20  |m(h%,mem%)..... |
00002de0  6f 25 3d 31 20 b8 20 37  0d 13 10 0c 20 c8 8e 20  |o%=1 . 7.... .. |
00002df0  6f 25 20 ca 0d 13 1a 14  20 20 c9 20 31 20 3a 24  |o% .....  . 1 :$|
00002e00  68 25 3d 24 6d 65 6d 25  0d 13 24 2b 20 20 c9 20  |h%=$mem%..$+  . |
00002e10  32 20 3a 20 24 28 68 25  2b 73 75 72 6e 61 6d 65  |2 : $(h%+surname|
00002e20  25 29 3d 24 28 6d 65 6d  25 2b 73 75 72 6e 61 6d  |%)=$(mem%+surnam|
00002e30  65 25 29 0d 13 2e 35 20  20 c9 20 33 20 3a 20 21  |e%)...5  . 3 : !|
00002e40  28 68 25 2b 62 69 72 74  68 64 61 74 65 25 29 3d  |(h%+birthdate%)=|
00002e50  a4 63 6f 6e 76 73 74 72  64 61 74 65 28 24 28 6d  |.convstrdate($(m|
00002e60  65 6d 25 2b 38 30 29 29  0d 13 38 35 20 20 c9 20  |em%+80))..85  . |
00002e70  34 20 3a 20 21 28 68 25  2b 64 65 61 74 68 64 61  |4 : !(h%+deathda|
00002e80  74 65 25 29 3d a4 63 6f  6e 76 73 74 72 64 61 74  |te%)=.convstrdat|
00002e90  65 28 24 28 6d 65 6d 25  2b 39 31 29 29 0d 13 42  |e($(mem%+91))..B|
00002ea0  39 20 20 c9 20 35 20 3a  20 21 28 68 25 2b 6d 61  |9  . 5 : !(h%+ma|
00002eb0  72 72 69 61 67 65 64 61  74 65 25 29 3d a4 63 6f  |rriagedate%)=.co|
00002ec0  6e 76 73 74 72 64 61 74  65 28 24 28 6d 65 6d 25  |nvstrdate($(mem%|
00002ed0  2b 31 30 32 29 29 0d 13  4c 38 20 20 c9 20 36 20  |+102))..L8  . 6 |
00002ee0  3a 20 21 28 68 25 2b 64  69 76 6f 72 63 65 64 61  |: !(h%+divorceda|
00002ef0  74 65 25 29 3d a4 63 6f  6e 76 73 74 72 64 61 74  |te%)=.convstrdat|
00002f00  65 28 24 28 6d 65 6d 25  2b 31 31 33 29 29 0d 13  |e($(mem%+113))..|
00002f10  56 61 20 20 c9 20 37 20  3a 20 21 69 63 77 25 3d  |Va  . 7 : !icw%=|
00002f20  6d 61 69 6e 25 3a 69 63  77 25 21 34 3d 70 65 72  |main%:icw%!4=per|
00002f30  73 6f 6e 73 65 78 25 3a  c8 99 20 22 57 69 6d 70  |sonsex%:.. "Wimp|
00002f40  5f 47 65 74 49 63 6f 6e  53 74 61 74 65 22 2c 2c  |_GetIconState",,|
00002f50  69 63 77 25 3a 20 68 25  21 73 65 78 25 3d 97 28  |icw%: h%!sex%=.(|
00002f60  c0 24 28 69 63 77 25 2b  32 38 29 2c 31 29 29 0d  |.$(icw%+28),1)).|
00002f70  13 60 06 20 cb 0d 13 6a  05 ed 0d 13 74 0f e3 20  |.`. ...j....t.. |
00002f80  6f 25 3d 30 20 b8 20 31  35 0d 13 7e 35 20 24 28  |o%=0 . 15..~5 $(|
00002f90  68 25 2b 28 70 65 72 73  6f 6e 6c 65 6e 67 74 68  |h%+(personlength|
00002fa0  25 2d 28 31 36 2a 36 35  29 29 2b 6f 25 2a 36 35  |%-(16*65))+o%*65|
00002fb0  29 3d 64 61 74 61 73 65  74 24 28 6f 25 29 0d 13  |)=dataset$(o%)..|
00002fc0  88 05 ed 0d 13 92 05 e1  0d 13 9c 05 3a 0d 13 a6  |............:...|
00002fd0  18 dd a4 6e 75 6d 62 65  72 28 64 24 2c 4f 25 2c  |...number(d$,O%,|
00002fe0  f8 20 4f 25 29 0d 13 b0  20 ea 20 6e 25 2c 6e 24  |. O%)... . n%,n$|
00002ff0  3a 6e 25 3d 30 3a 6e 24  3d 22 30 31 32 33 34 35  |:n%=0:n$="012345|
00003000  36 37 38 39 22 0d 13 ba  24 e7 20 a7 6e 24 2c c1  |6789"...$. .n$,.|
00003010  64 24 2c 4f 25 2c 31 29  29 3d 30 20 8c 20 69 25  |d$,O%,1))=0 . i%|
00003020  3d 69 25 2b 31 3a 3d 2d  31 0d 13 c4 22 c8 95 20  |=i%+1:=-1...".. |
00003030  a7 6e 24 2c c1 64 24 2c  4f 25 2c 31 29 29 3c 3e  |.n$,.d$,O%,1))<>|
00003040  30 20 80 20 4f 25 3c 3d  a9 64 24 0d 13 ce 20 20  |0 . O%<=.d$...  |
00003050  6e 25 3d 6e 25 2a 31 30  2b 28 a7 6e 24 2c c1 64  |n%=n%*10+(.n$,.d|
00003060  24 2c 4f 25 2c 31 29 29  2d 31 29 0d 13 d8 0c 20  |$,O%,1))-1).... |
00003070  4f 25 3d 4f 25 2b 31 0d  13 e2 05 ce 0d 13 ec 07  |O%=O%+1.........|
00003080  3d 6e 25 0d 13 f6 05 3a  0d 14 00 0d dd f2 6e 65  |=n%....:......ne|
00003090  77 74 72 65 65 0d 14 0a  3f 72 6f 6f 74 25 3d a4  |wtree...?root%=.|
000030a0  64 69 6d 70 65 72 73 6f  6e 3a f2 63 6f 70 79 66  |dimperson:.copyf|
000030b0  72 6f 6d 28 72 6f 6f 74  25 2c 70 65 72 73 64 25  |rom(root%,persd%|
000030c0  29 3a 63 75 72 72 65 6e  74 5f 70 65 72 25 3d 72  |):current_per%=r|
000030d0  6f 6f 74 25 0d 14 14 3c  72 6f 6f 74 25 21 73 69  |oot%...<root%!si|
000030e0  62 6c 69 6e 67 25 3d 6e  69 6c 25 3a 72 6f 6f 74  |bling%=nil%:root|
000030f0  25 21 73 70 6f 75 73 65  25 3d 6e 69 6c 25 3a 72  |%!spouse%=nil%:r|
00003100  6f 6f 74 25 21 63 68 69  6c 64 25 3d 6e 69 6c 25  |oot%!child%=nil%|
00003110  0d 14 1e 10 72 6f 6f 74  25 21 67 65 6e 25 3d 30  |....root%!gen%=0|
00003120  0d 14 28 15 70 65 72 73  6f 6e 6e 6f 64 65 25 3d  |..(.personnode%=|
00003130  72 6f 6f 74 25 0d 14 32  05 e1 0d 14 3c 05 3a 0d  |root%..2....<.:.|
00003140  14 46 0e dd a4 6e 65 77  5f 74 72 65 65 0d 14 50  |.F...new_tree..P|
00003150  12 f2 63 72 65 61 74 65  5f 77 69 6e 64 6f 77 0d  |..create_window.|
00003160  14 5a 0c f2 6e 65 77 74  72 65 65 0d 14 64 06 3d  |.Z..newtree..d.=|
00003170  30 0d 14 6e 05 3a 0d 14  78 0d dd a4 61 64 64 5f  |0..n.:..x...add_|
00003180  73 69 62 0d 14 82 08 ea  20 67 25 0d 14 8c 22 f2  |sib..... g%...".|
00003190  63 6f 70 79 66 72 6f 6d  28 63 75 72 72 65 6e 74  |copyfrom(current|
000031a0  5f 70 65 72 25 2c 70 65  72 73 64 25 29 0d 14 96  |_per%,persd%)...|
000031b0  34 e7 20 73 70 6f 75 73  65 64 25 20 8c 20 63 75  |4. spoused% . cu|
000031c0  72 72 65 6e 74 5f 70 65  72 25 3d 70 65 72 73 6f  |rrent_per%=perso|
000031d0  6e 6e 6f 64 65 25 3a 73  70 6f 75 73 65 64 25 3d  |nnode%:spoused%=|
000031e0  a3 0d 14 a0 22 c8 95 20  63 75 72 72 65 6e 74 5f  |....".. current_|
000031f0  70 65 72 25 21 73 69 62  6c 69 6e 67 25 3c 3e 6e  |per%!sibling%<>n|
00003200  69 6c 25 0d 14 aa 27 20  63 75 72 72 65 6e 74 5f  |il%...' current_|
00003210  70 65 72 25 3d 63 75 72  72 65 6e 74 5f 70 65 72  |per%=current_per|
00003220  25 21 73 69 62 6c 69 6e  67 25 0d 14 b4 05 ce 0d  |%!sibling%......|
00003230  14 be 24 63 75 72 72 65  6e 74 5f 70 65 72 25 21  |..$current_per%!|
00003240  73 69 62 6c 69 6e 67 25  3d a4 64 69 6d 70 65 72  |sibling%=.dimper|
00003250  73 6f 6e 0d 14 c8 33 21  28 63 75 72 72 65 6e 74  |son...3!(current|
00003260  5f 70 65 72 25 21 73 69  62 6c 69 6e 67 25 2b 67  |_per%!sibling%+g|
00003270  65 6e 25 29 3d 63 75 72  72 65 6e 74 5f 70 65 72  |en%)=current_per|
00003280  25 21 67 65 6e 25 0d 14  d2 18 67 25 3d 63 75 72  |%!gen%....g%=cur|
00003290  72 65 6e 74 5f 70 65 72  25 21 67 65 6e 25 0d 14  |rent_per%!gen%..|
000032a0  dc 26 63 75 72 72 65 6e  74 5f 70 65 72 25 3d 63  |.&current_per%=c|
000032b0  75 72 72 65 6e 74 5f 70  65 72 25 21 73 69 62 6c  |urrent_per%!sibl|
000032c0  69 6e 67 25 0d 14 e6 17  f2 6e 69 6c 73 28 63 75  |ing%.....nils(cu|
000032d0  72 72 65 6e 74 5f 70 65  72 25 29 0d 14 f0 10 f2  |rrent_per%).....|
000032e0  63 6c 65 61 72 70 65 72  73 6f 6e 0d 14 fa 18 63  |clearperson....c|
000032f0  75 72 72 65 6e 74 5f 70  65 72 25 21 67 65 6e 25  |urrent_per%!gen%|
00003300  3d 67 25 0d 15 04 2d c8  99 20 22 57 69 6d 70 5f  |=g%...-.. "Wimp_|
00003310  46 6f 72 63 65 52 65 64  72 61 77 22 2c 6d 61 69  |ForceRedraw",mai|
00003320  6e 25 2c 30 2c 30 2c 31  32 38 30 2c 31 30 32 34  |n%,0,0,1280,1024|
00003330  0d 15 0e 3b e7 20 6f 76  65 72 76 69 65 77 25 20  |...;. overview% |
00003340  8c 20 c8 99 20 22 57 69  6d 70 5f 46 6f 72 63 65  |. .. "Wimp_Force|
00003350  52 65 64 72 61 77 22 2c  6f 76 65 72 25 2c 30 2c  |Redraw",over%,0,|
00003360  30 2c 31 32 38 30 2c 31  30 32 34 0d 15 18 41 e7  |0,1280,1024...A.|
00003370  20 64 61 74 61 76 69 65  77 25 20 8c 20 c8 99 20  | dataview% . .. |
00003380  22 57 69 6d 70 5f 46 6f  72 63 65 52 65 64 72 61  |"Wimp_ForceRedra|
00003390  77 22 2c 64 61 74 61 77  69 6e 64 6f 77 25 2c 30  |w",datawindow%,0|
000033a0  2c 30 2c 31 32 38 30 2c  31 30 32 34 0d 15 22 06  |,0,1280,1024..".|
000033b0  3d 30 0d 15 2c 05 3a 0d  15 36 11 dd f2 63 6c 65  |=0..,.:..6...cle|
000033c0  61 72 70 65 72 73 6f 6e  0d 15 40 20 24 28 70 65  |arperson..@ $(pe|
000033d0  72 73 64 25 29 3d 22 22  3a 24 28 70 65 72 73 64  |rsd%)="":$(persd|
000033e0  25 2b 34 30 29 3d 22 22  0d 15 4a 3a 24 28 70 65  |%+40)=""..J:$(pe|
000033f0  72 73 64 25 2b 38 30 29  3d a4 63 6f 6e 76 6e 75  |rsd%+80)=.convnu|
00003400  6d 64 61 74 65 28 30 29  3a 24 28 70 65 72 73 64  |mdate(0):$(persd|
00003410  25 2b 39 31 29 3d 24 28  70 65 72 73 64 25 2b 38  |%+91)=$(persd%+8|
00003420  30 29 0d 15 54 39 24 28  70 65 72 73 64 25 2b 31  |0)..T9$(persd%+1|
00003430  30 32 29 3d 24 28 70 65  72 73 64 25 2b 38 30 29  |02)=$(persd%+80)|
00003440  3a 24 28 70 65 72 73 64  25 2b 31 31 33 29 3d 24  |:$(persd%+113)=$|
00003450  28 70 65 72 73 64 25 2b  38 30 29 0d 15 5e 12 70  |(persd%+80)..^.p|
00003460  65 72 73 64 25 21 73 65  78 25 3d 33 32 0d 15 68  |ersd%!sex%=32..h|
00003470  17 64 61 74 61 73 65 74  24 28 29 3d c4 36 30 2c  |.dataset$()=.60,|
00003480  22 20 22 29 0d 15 72 05  e1 0d 15 7c 05 3a 0d 15  |" ")..r....|.:..|
00003490  86 15 dd f2 67 65 6e 70  6f 69 6e 74 65 72 73 28  |....genpointers(|
000034a0  68 25 29 0d 15 90 0a ea  73 61 76 65 25 0d 15 9a  |h%).....save%...|
000034b0  1f 73 61 76 65 25 3d b9  3a f2 74 72 61 76 65 72  |.save%=.:.traver|
000034c0  73 65 28 68 25 2c 72 6f  6f 74 25 29 0d 15 a4 05  |se(h%,root%)....|
000034d0  e1 0d 15 ae 05 3a 0d 15  b8 19 dd f2 74 72 61 76  |.....:......trav|
000034e0  65 72 73 65 28 68 25 2c  74 72 6f 6f 74 25 29 0d  |erse(h%,troot%).|
000034f0  15 c2 14 e7 74 72 6f 6f  74 25 3d 6e 69 6c 25 20  |....troot%=nil% |
00003500  8c 20 e1 0d 15 cc 33 e7  20 73 61 76 65 25 20 8c  |. ....3. save% .|
00003510  20 67 65 6e 70 6f 69 6e  74 65 72 73 25 21 28 28  | genpointers%!((|
00003520  74 72 6f 6f 74 25 21 67  65 6e 25 29 2a 34 29 3d  |troot%!gen%)*4)=|
00003530  74 72 6f 6f 74 25 0d 15  d6 19 e7 20 74 72 6f 6f  |troot%..... troo|
00003540  74 25 3d 68 25 20 8c 20  73 61 76 65 25 3d a3 0d  |t%=h% . save%=..|
00003550  15 e0 1f f2 74 72 61 76  65 72 73 65 28 68 25 2c  |....traverse(h%,|
00003560  74 72 6f 6f 74 25 21 63  68 69 6c 64 25 29 0d 15  |troot%!child%)..|
00003570  ea 2b e7 20 73 61 76 65  25 20 8c 20 f2 74 72 61  |.+. save% . .tra|
00003580  76 65 72 73 65 28 68 25  2c 74 72 6f 6f 74 25 21  |verse(h%,troot%!|
00003590  73 69 62 6c 69 6e 67 25  29 0d 15 f4 05 e1 0d 15  |sibling%).......|
000035a0  fe 05 3a 0d 16 08 0d dd  f2 6c 65 66 74 73 69 62  |..:......leftsib|
000035b0  0d 16 12 13 e7 72 6f 6f  74 25 3d 6e 69 6c 25 20  |.....root%=nil% |
000035c0  8c 20 e1 0d 16 1c 1d 20  e7 20 72 6f 6f 74 25 3d  |. ..... . root%=|
000035d0  63 75 72 72 65 6e 74 5f  70 65 72 25 20 8c 20 e1  |current_per% . .|
000035e0  0d 16 26 22 f2 63 6f 70  79 66 72 6f 6d 28 63 75  |..&".copyfrom(cu|
000035f0  72 72 65 6e 74 5f 70 65  72 25 2c 70 65 72 73 64  |rrent_per%,persd|
00003600  25 29 0d 16 30 74 e7 20  73 70 6f 75 73 65 64 25  |%)..0t. spoused%|
00003610  20 8c 20 63 75 72 72 65  6e 74 5f 70 65 72 25 3d  | . current_per%=|
00003620  70 65 72 73 6f 6e 6e 6f  64 65 25 3a 73 70 6f 75  |personnode%:spou|
00003630  73 65 64 25 3d a3 3a f2  63 6f 70 79 74 6f 28 63  |sed%=.:.copyto(c|
00003640  75 72 72 65 6e 74 5f 70  65 72 25 29 3a c8 99 20  |urrent_per%):.. |
00003650  22 57 69 6d 70 5f 46 6f  72 63 65 52 65 64 72 61  |"Wimp_ForceRedra|
00003660  77 22 2c 6d 61 69 6e 25  2c 30 2c 30 2c 31 32 38  |w",main%,0,0,128|
00003670  30 2c 31 30 32 34 0d 16  3a 1e f2 67 65 6e 70 6f  |0,1024..:..genpo|
00003680  69 6e 74 65 72 73 28 63  75 72 72 65 6e 74 5f 70  |inters(current_p|
00003690  65 72 25 29 0d 16 44 5f  e7 63 75 72 72 65 6e 74  |er%)..D_.current|
000036a0  5f 70 65 72 25 21 67 65  6e 25 3c 3e 30 20 80 20  |_per%!gen%<>0 . |
000036b0  21 28 67 65 6e 70 6f 69  6e 74 65 72 73 25 21 28  |!(genpointers%!(|
000036c0  28 28 63 75 72 72 65 6e  74 5f 70 65 72 25 21 67  |((current_per%!g|
000036d0  65 6e 25 29 2d 31 29 2a  34 29 2b 63 68 69 6c 64  |en%)-1)*4)+child|
000036e0  25 29 3d 63 75 72 72 65  6e 74 5f 70 65 72 25 20  |%)=current_per% |
000036f0  8c 20 e1 0d 16 4e 1b e7  20 63 75 72 72 65 6e 74  |. ...N.. current|
00003700  5f 70 65 72 25 21 67 65  6e 25 3d 30 20 8c 0d 16  |_per%!gen%=0 ...|
00003710  58 32 20 63 75 72 72 65  6e 74 5f 70 65 72 25 3d  |X2 current_per%=|
00003720  a4 66 69 6e 64 70 72 65  76 73 69 62 28 72 6f 6f  |.findprevsib(roo|
00003730  74 25 2c 63 75 72 72 65  6e 74 5f 70 65 72 25 29  |t%,current_per%)|
00003740  0d 16 62 05 cc 0d 16 6c  5f 20 63 75 72 72 65 6e  |..b....l_ curren|
00003750  74 5f 70 65 72 25 3d a4  66 69 6e 64 70 72 65 76  |t_per%=.findprev|
00003760  73 69 62 28 21 28 67 65  6e 70 6f 69 6e 74 65 72  |sib(!(genpointer|
00003770  73 25 21 28 28 28 63 75  72 72 65 6e 74 5f 70 65  |s%!(((current_pe|
00003780  72 25 21 67 65 6e 25 29  2d 31 29 2a 34 29 2b 63  |r%!gen%)-1)*4)+c|
00003790  68 69 6c 64 25 29 2c 63  75 72 72 65 6e 74 5f 70  |hild%),current_p|
000037a0  65 72 25 29 0d 16 76 05  cd 0d 16 80 19 f2 63 6f  |er%)..v.......co|
000037b0  70 79 74 6f 28 63 75 72  72 65 6e 74 5f 70 65 72  |pyto(current_per|
000037c0  25 29 0d 16 8a 2d c8 99  20 22 57 69 6d 70 5f 46  |%)...-.. "Wimp_F|
000037d0  6f 72 63 65 52 65 64 72  61 77 22 2c 6d 61 69 6e  |orceRedraw",main|
000037e0  25 2c 30 2c 30 2c 31 32  38 30 2c 31 30 32 34 0d  |%,0,0,1280,1024.|
000037f0  16 94 3b e7 20 6f 76 65  72 76 69 65 77 25 20 8c  |..;. overview% .|
00003800  20 c8 99 20 22 57 69 6d  70 5f 46 6f 72 63 65 52  | .. "Wimp_ForceR|
00003810  65 64 72 61 77 22 2c 6f  76 65 72 25 2c 30 2c 30  |edraw",over%,0,0|
00003820  2c 31 32 38 30 2c 31 30  32 34 0d 16 9e 41 e7 20  |,1280,1024...A. |
00003830  64 61 74 61 76 69 65 77  25 20 8c 20 c8 99 20 22  |dataview% . .. "|
00003840  57 69 6d 70 5f 46 6f 72  63 65 52 65 64 72 61 77  |Wimp_ForceRedraw|
00003850  22 2c 64 61 74 61 77 69  6e 64 6f 77 25 2c 30 2c  |",datawindow%,0,|
00003860  30 2c 31 32 38 30 2c 31  30 32 34 0d 16 a8 05 e1  |0,1280,1024.....|
00003870  0d 16 b2 05 3a 0d 16 bc  1f dd a4 66 69 6e 64 70  |....:......findp|
00003880  72 65 76 73 69 62 28 73  74 61 72 74 25 2c 63 6f  |revsib(start%,co|
00003890  6d 70 25 29 0d 16 c6 1b  e7 20 63 6f 6d 70 25 3d  |mp%)..... comp%=|
000038a0  73 74 61 72 74 25 20 8c  20 3d 63 6f 6d 70 25 0d  |start% . =comp%.|
000038b0  16 d0 1d c8 95 20 73 74  61 72 74 25 21 73 69 62  |..... start%!sib|
000038c0  6c 69 6e 67 25 3c 3e 63  6f 6d 70 25 0d 16 da 1b  |ling%<>comp%....|
000038d0  20 73 74 61 72 74 25 3d  73 74 61 72 74 25 21 73  | start%=start%!s|
000038e0  69 62 6c 69 6e 67 25 0d  16 e4 05 ce 0d 16 ee 0b  |ibling%.........|
000038f0  3d 73 74 61 72 74 25 0d  16 f8 05 3a 0d 17 02 0e  |=start%....:....|
00003900  dd f2 72 69 67 68 74 73  69 62 0d 17 0c 04 0d 17  |..rightsib......|
00003910  16 13 e7 72 6f 6f 74 25  3d 6e 69 6c 25 20 8c 20  |...root%=nil% . |
00003920  e1 0d 17 20 22 f2 63 6f  70 79 66 72 6f 6d 28 63  |... ".copyfrom(c|
00003930  75 72 72 65 6e 74 5f 70  65 72 25 2c 70 65 72 73  |urrent_per%,pers|
00003940  64 25 29 0d 17 2a 74 e7  20 73 70 6f 75 73 65 64  |d%)..*t. spoused|
00003950  25 20 8c 20 63 75 72 72  65 6e 74 5f 70 65 72 25  |% . current_per%|
00003960  3d 70 65 72 73 6f 6e 6e  6f 64 65 25 3a 73 70 6f  |=personnode%:spo|
00003970  75 73 65 64 25 3d a3 3a  f2 63 6f 70 79 74 6f 28  |used%=.:.copyto(|
00003980  63 75 72 72 65 6e 74 5f  70 65 72 25 29 3a c8 99  |current_per%):..|
00003990  20 22 57 69 6d 70 5f 46  6f 72 63 65 52 65 64 72  | "Wimp_ForceRedr|
000039a0  61 77 22 2c 6d 61 69 6e  25 2c 30 2c 30 2c 31 32  |aw",main%,0,0,12|
000039b0  38 30 2c 31 30 32 33 0d  17 34 24 e7 20 63 75 72  |80,1023..4$. cur|
000039c0  72 65 6e 74 5f 70 65 72  25 21 73 69 62 6c 69 6e  |rent_per%!siblin|
000039d0  67 25 3d 6e 69 6c 25 20  8c 20 e1 0d 17 3e 26 63  |g%=nil% . ...>&c|
000039e0  75 72 72 65 6e 74 5f 70  65 72 25 3d 63 75 72 72  |urrent_per%=curr|
000039f0  65 6e 74 5f 70 65 72 25  21 73 69 62 6c 69 6e 67  |ent_per%!sibling|
00003a00  25 0d 17 48 19 f2 63 6f  70 79 74 6f 28 63 75 72  |%..H..copyto(cur|
00003a10  72 65 6e 74 5f 70 65 72  25 29 0d 17 52 2d c8 99  |rent_per%)..R-..|
00003a20  20 22 57 69 6d 70 5f 46  6f 72 63 65 52 65 64 72  | "Wimp_ForceRedr|
00003a30  61 77 22 2c 6d 61 69 6e  25 2c 30 2c 30 2c 31 32  |aw",main%,0,0,12|
00003a40  38 30 2c 31 30 32 33 0d  17 5c 3b e7 20 6f 76 65  |80,1023..\;. ove|
00003a50  72 76 69 65 77 25 20 8c  20 c8 99 20 22 57 69 6d  |rview% . .. "Wim|
00003a60  70 5f 46 6f 72 63 65 52  65 64 72 61 77 22 2c 6f  |p_ForceRedraw",o|
00003a70  76 65 72 25 2c 30 2c 30  2c 31 32 38 30 2c 31 30  |ver%,0,0,1280,10|
00003a80  32 34 0d 17 66 41 e7 20  64 61 74 61 76 69 65 77  |24..fA. dataview|
00003a90  25 20 8c 20 c8 99 20 22  57 69 6d 70 5f 46 6f 72  |% . .. "Wimp_For|
00003aa0  63 65 52 65 64 72 61 77  22 2c 64 61 74 61 77 69  |ceRedraw",datawi|
00003ab0  6e 64 6f 77 25 2c 30 2c  30 2c 31 32 38 30 2c 31  |ndow%,0,0,1280,1|
00003ac0  30 32 34 0d 17 70 05 e1  0d 17 7a 05 3a 0d 17 84  |024..p....z.:...|
00003ad0  10 dd a4 61 64 64 5f 70  61 72 65 6e 74 0d 17 8e  |...add_parent...|
00003ae0  22 f2 63 6f 70 79 66 72  6f 6d 28 63 75 72 72 65  |".copyfrom(curre|
00003af0  6e 74 5f 70 65 72 25 2c  70 65 72 73 64 25 29 0d  |nt_per%,persd%).|
00003b00  17 98 34 e7 20 73 70 6f  75 73 65 64 25 20 8c 20  |..4. spoused% . |
00003b10  63 75 72 72 65 6e 74 5f  70 65 72 25 3d 70 65 72  |current_per%=per|
00003b20  73 6f 6e 6e 6f 64 65 25  3a 73 70 6f 75 73 65 64  |sonnode%:spoused|
00003b30  25 3d a3 0d 17 a2 11 73  25 3d a4 64 69 6d 70 65  |%=.....s%=.dimpe|
00003b40  72 73 6f 6e 0d 17 ac 10  f2 63 6c 65 61 72 70 65  |rson.....clearpe|
00003b50  72 73 6f 6e 0d 17 b6 0d  f2 6e 69 6c 73 28 73 25  |rson.....nils(s%|
00003b60  29 0d 17 c0 13 73 25 21  63 68 69 6c 64 25 3d 72  |)....s%!child%=r|
00003b70  6f 6f 74 25 0d 17 ca 0e  73 25 21 67 65 6e 25 3d  |oot%....s%!gen%=|
00003b80  2d 31 0d 17 d4 0c 72 6f  6f 74 25 3d 73 25 0d 17  |-1....root%=s%..|
00003b90  de 12 f2 69 6e 63 67 65  6e 28 72 6f 6f 74 25 29  |...incgen(root%)|
00003ba0  0d 17 e8 16 63 75 72 72  65 6e 74 5f 70 65 72 25  |....current_per%|
00003bb0  3d 72 6f 6f 74 25 0d 17  f2 2d c8 99 20 22 57 69  |=root%...-.. "Wi|
00003bc0  6d 70 5f 46 6f 72 63 65  52 65 64 72 61 77 22 2c  |mp_ForceRedraw",|
00003bd0  6d 61 69 6e 25 2c 30 2c  30 2c 31 32 38 30 2c 31  |main%,0,0,1280,1|
00003be0  30 32 34 0d 17 fc 3b e7  20 6f 76 65 72 76 69 65  |024...;. overvie|
00003bf0  77 25 20 8c 20 c8 99 20  22 57 69 6d 70 5f 46 6f  |w% . .. "Wimp_Fo|
00003c00  72 63 65 52 65 64 72 61  77 22 2c 6f 76 65 72 25  |rceRedraw",over%|
00003c10  2c 30 2c 30 2c 31 32 38  30 2c 31 30 32 34 0d 18  |,0,0,1280,1024..|
00003c20  06 41 e7 20 64 61 74 61  76 69 65 77 25 20 8c 20  |.A. dataview% . |
00003c30  c8 99 20 22 57 69 6d 70  5f 46 6f 72 63 65 52 65  |.. "Wimp_ForceRe|
00003c40  64 72 61 77 22 2c 64 61  74 61 77 69 6e 64 6f 77  |draw",datawindow|
00003c50  25 2c 30 2c 30 2c 31 32  38 30 2c 31 30 32 34 0d  |%,0,0,1280,1024.|
00003c60  18 10 06 3d 30 0d 18 1a  05 3a 0d 18 24 13 dd f2  |...=0....:..$...|
00003c70  69 6e 63 67 65 6e 28 72  6f 6f 74 25 29 0d 18 2e  |incgen(root%)...|
00003c80  14 e7 20 72 6f 6f 74 25  3d 6e 69 6c 25 20 8c 20  |.. root%=nil% . |
00003c90  e1 0d 18 38 11 72 6f 6f  74 25 21 67 65 6e 25 2b  |...8.root%!gen%+|
00003ca0  3d 31 0d 18 42 19 f2 69  6e 63 67 65 6e 28 72 6f  |=1..B..incgen(ro|
00003cb0  6f 74 25 21 63 68 69 6c  64 25 29 0d 18 4c 1b f2  |ot%!child%)..L..|
00003cc0  69 6e 63 67 65 6e 28 72  6f 6f 74 25 21 73 69 62  |incgen(root%!sib|
00003cd0  6c 69 6e 67 25 29 0d 18  56 05 e1 0d 18 60 05 3a  |ling%)..V....`.:|
00003ce0  0d 18 6a 0e dd f2 6e 69  6c 73 28 73 25 29 0d 18  |..j...nils(s%)..|
00003cf0  74 33 73 25 21 73 69 62  6c 69 6e 67 25 3d 6e 69  |t3s%!sibling%=ni|
00003d00  6c 25 3a 73 25 21 73 70  6f 75 73 65 25 3d 6e 69  |l%:s%!spouse%=ni|
00003d10  6c 25 3a 73 25 21 63 68  69 6c 64 25 3d 6e 69 6c  |l%:s%!child%=nil|
00003d20  25 0d 18 7e 05 e1 0d 18  88 05 3a 0d 18 92 0c dd  |%..~......:.....|
00003d30  f2 70 61 72 65 6e 74 0d  18 9c 22 f2 63 6f 70 79  |.parent...".copy|
00003d40  66 72 6f 6d 28 63 75 72  72 65 6e 74 5f 70 65 72  |from(current_per|
00003d50  25 2c 70 65 72 73 64 25  29 0d 18 a6 1d e7 20 63  |%,persd%)..... c|
00003d60  75 72 72 65 6e 74 5f 70  65 72 25 21 67 65 6e 25  |urrent_per%!gen%|
00003d70  3d 30 20 8c 20 e1 0d 18  b0 34 e7 20 73 70 6f 75  |=0 . ....4. spou|
00003d80  73 65 64 25 20 8c 20 63  75 72 72 65 6e 74 5f 70  |sed% . current_p|
00003d90  65 72 25 3d 70 65 72 73  6f 6e 6e 6f 64 65 25 3a  |er%=personnode%:|
00003da0  73 70 6f 75 73 65 64 25  3d a3 0d 18 ba 1e f2 67  |spoused%=......g|
00003db0  65 6e 70 6f 69 6e 74 65  72 73 28 63 75 72 72 65  |enpointers(curre|
00003dc0  6e 74 5f 70 65 72 25 29  0d 18 c4 39 63 75 72 72  |nt_per%)...9curr|
00003dd0  65 6e 74 5f 70 65 72 25  3d 67 65 6e 70 6f 69 6e  |ent_per%=genpoin|
00003de0  74 65 72 73 25 21 28 28  28 63 75 72 72 65 6e 74  |ters%!(((current|
00003df0  5f 70 65 72 25 21 67 65  6e 25 29 2d 31 29 2a 34  |_per%!gen%)-1)*4|
00003e00  29 0d 18 ce 19 f2 63 6f  70 79 74 6f 28 63 75 72  |).....copyto(cur|
00003e10  72 65 6e 74 5f 70 65 72  25 29 0d 18 d8 2d c8 99  |rent_per%)...-..|
00003e20  20 22 57 69 6d 70 5f 46  6f 72 63 65 52 65 64 72  | "Wimp_ForceRedr|
00003e30  61 77 22 2c 6d 61 69 6e  25 2c 30 2c 30 2c 31 32  |aw",main%,0,0,12|
00003e40  38 30 2c 31 30 32 34 0d  18 e2 3b e7 20 6f 76 65  |80,1024...;. ove|
00003e50  72 76 69 65 77 25 20 8c  20 c8 99 20 22 57 69 6d  |rview% . .. "Wim|
00003e60  70 5f 46 6f 72 63 65 52  65 64 72 61 77 22 2c 6f  |p_ForceRedraw",o|
00003e70  76 65 72 25 2c 30 2c 30  2c 31 32 38 30 2c 31 30  |ver%,0,0,1280,10|
00003e80  32 34 0d 18 ec 41 e7 20  64 61 74 61 76 69 65 77  |24...A. dataview|
00003e90  25 20 8c 20 c8 99 20 22  57 69 6d 70 5f 46 6f 72  |% . .. "Wimp_For|
00003ea0  63 65 52 65 64 72 61 77  22 2c 64 61 74 61 77 69  |ceRedraw",datawi|
00003eb0  6e 64 6f 77 25 2c 30 2c  30 2c 31 32 38 30 2c 31  |ndow%,0,0,1280,1|
00003ec0  30 32 34 0d 18 f6 05 e1  0d 19 00 05 3a 0d 19 0a  |024.........:...|
00003ed0  0b dd f2 63 68 69 6c 64  0d 19 14 13 e7 72 6f 6f  |...child.....roo|
00003ee0  74 25 3d 6e 69 6c 25 20  8c 20 e1 0d 19 1e 22 f2  |t%=nil% . ....".|
00003ef0  63 6f 70 79 66 72 6f 6d  28 63 75 72 72 65 6e 74  |copyfrom(current|
00003f00  5f 70 65 72 25 2c 70 65  72 73 64 25 29 0d 19 28  |_per%,persd%)..(|
00003f10  74 e7 20 73 70 6f 75 73  65 64 25 20 8c 20 63 75  |t. spoused% . cu|
00003f20  72 72 65 6e 74 5f 70 65  72 25 3d 70 65 72 73 6f  |rrent_per%=perso|
00003f30  6e 6e 6f 64 65 25 3a 73  70 6f 75 73 65 64 25 3d  |nnode%:spoused%=|
00003f40  a3 3a f2 63 6f 70 79 74  6f 28 63 75 72 72 65 6e  |.:.copyto(curren|
00003f50  74 5f 70 65 72 25 29 3a  c8 99 20 22 57 69 6d 70  |t_per%):.. "Wimp|
00003f60  5f 46 6f 72 63 65 52 65  64 72 61 77 22 2c 6d 61  |_ForceRedraw",ma|
00003f70  69 6e 25 2c 30 2c 30 2c  31 32 38 30 2c 31 30 32  |in%,0,0,1280,102|
00003f80  33 0d 19 32 24 e7 20 63  75 72 72 65 6e 74 5f 70  |3..2$. current_p|
00003f90  65 72 25 21 63 68 69 6c  64 25 20 3d 20 6e 69 6c  |er%!child% = nil|
00003fa0  25 20 8c 20 e1 0d 19 3c  24 63 75 72 72 65 6e 74  |% . ...<$current|
00003fb0  5f 70 65 72 25 3d 63 75  72 72 65 6e 74 5f 70 65  |_per%=current_pe|
00003fc0  72 25 21 63 68 69 6c 64  25 0d 19 46 19 f2 63 6f  |r%!child%..F..co|
00003fd0  70 79 74 6f 28 63 75 72  72 65 6e 74 5f 70 65 72  |pyto(current_per|
00003fe0  25 29 0d 19 50 2d c8 99  20 22 57 69 6d 70 5f 46  |%)..P-.. "Wimp_F|
00003ff0  6f 72 63 65 52 65 64 72  61 77 22 2c 6d 61 69 6e  |orceRedraw",main|
00004000  25 2c 30 2c 30 2c 31 32  38 30 2c 31 30 32 34 0d  |%,0,0,1280,1024.|
00004010  19 5a 3b e7 20 6f 76 65  72 76 69 65 77 25 20 8c  |.Z;. overview% .|
00004020  20 c8 99 20 22 57 69 6d  70 5f 46 6f 72 63 65 52  | .. "Wimp_ForceR|
00004030  65 64 72 61 77 22 2c 6f  76 65 72 25 2c 30 2c 30  |edraw",over%,0,0|
00004040  2c 31 32 38 30 2c 31 30  32 34 0d 19 64 41 e7 20  |,1280,1024..dA. |
00004050  64 61 74 61 76 69 65 77  25 20 8c 20 c8 99 20 22  |dataview% . .. "|
00004060  57 69 6d 70 5f 46 6f 72  63 65 52 65 64 72 61 77  |Wimp_ForceRedraw|
00004070  22 2c 64 61 74 61 77 69  6e 64 6f 77 25 2c 30 2c  |",datawindow%,0,|
00004080  30 2c 31 32 38 30 2c 31  30 32 34 0d 19 6e 05 e1  |0,1280,1024..n..|
00004090  0d 19 78 05 3a 0d 19 82  12 dd f2 72 65 73 6f 72  |..x.:......resor|
000040a0  74 62 72 61 6e 63 68 0d  19 8c 11 ea 20 73 25 2c  |tbranch..... s%,|
000040b0  70 25 2c 65 25 2c 63 25  0d 19 96 1e f2 67 65 6e  |p%,e%,c%.....gen|
000040c0  70 6f 69 6e 74 65 72 73  28 63 75 72 72 65 6e 74  |pointers(current|
000040d0  5f 70 65 72 25 29 0d 19  a0 13 63 25 3d 63 75 72  |_per%)....c%=cur|
000040e0  72 65 6e 74 5f 70 65 72  25 0d 19 aa 18 f2 63 6f  |rent_per%.....co|
000040f0  70 79 66 72 6f 6d 28 63  25 2c 70 65 72 73 64 25  |pyfrom(c%,persd%|
00004100  29 0d 19 b4 1e e7 20 73  70 6f 75 73 65 64 25 20  |)..... spoused% |
00004110  8c 20 f2 73 6f 72 74 73  70 6f 75 73 65 3a e1 0d  |. .sortspouse:..|
00004120  19 be 10 e7 20 63 25 3d  72 6f 6f 74 25 20 8c 0d  |.... c%=root% ..|
00004130  19 c8 1f 20 72 6f 6f 74  25 3d 63 25 21 73 69 62  |... root%=c%!sib|
00004140  6c 69 6e 67 25 3a 73 25  3d 72 6f 6f 74 25 0d 19  |ling%:s%=root%..|
00004150  d2 05 cc 0d 19 dc 12 20  e7 20 63 25 21 67 65 6e  |....... . c%!gen|
00004160  25 3d 30 20 8c 0d 19 e6  16 20 20 73 25 3d 72 6f  |%=0 .....  s%=ro|
00004170  6f 74 25 3a 70 25 3d 6e  69 6c 25 0d 19 f0 06 20  |ot%:p%=nil%.... |
00004180  cc 0d 19 fa 36 20 20 70  25 3d 28 67 65 6e 70 6f  |....6  p%=(genpo|
00004190  69 6e 74 65 72 73 25 21  28 28 28 63 25 21 67 65  |inters%!(((c%!ge|
000041a0  6e 25 29 2d 31 29 2a 34  29 29 3a 73 25 3d 70 25  |n%)-1)*4)):s%=p%|
000041b0  21 63 68 69 6c 64 25 0d  1a 04 06 20 cd 0d 1a 0e  |!child%.... ....|
000041c0  20 20 e7 20 70 25 3c 3e  6e 69 6c 25 20 80 20 70  |  . p%<>nil% . p|
000041d0  25 21 63 68 69 6c 64 25  3d 63 25 20 8c 0d 1a 18  |%!child%=c% ....|
000041e0  2a 20 20 70 25 21 63 68  69 6c 64 25 3d 63 25 21  |*  p%!child%=c%!|
000041f0  73 69 62 6c 69 6e 67 25  3a 73 25 3d 63 25 21 73  |sibling%:s%=c%!s|
00004200  69 62 6c 69 6e 67 25 0d  1a 22 06 20 cc 0d 1a 2c  |ibling%..". ...,|
00004210  1c 20 20 65 25 3d a4 66  69 6e 64 70 72 65 76 73  |.  e%=.findprevs|
00004220  69 62 28 73 25 2c 63 25  29 0d 1a 36 1d 20 20 65  |ib(s%,c%)..6.  e|
00004230  25 21 73 69 62 6c 69 6e  67 25 3d 63 25 21 73 69  |%!sibling%=c%!si|
00004240  62 6c 69 6e 67 25 0d 1a  40 06 20 cd 0d 1a 4a 05  |bling%..@. ...J.|
00004250  cd 0d 1a 54 1d e7 20 72  6f 6f 74 25 3d 6e 69 6c  |...T.. root%=nil|
00004260  25 20 8c 20 72 6f 6f 74  25 3d 63 25 3a e1 0d 1a  |% . root%=c%:...|
00004270  5e 1e e7 20 73 25 3d 6e  69 6c 25 20 8c 20 70 25  |^.. s%=nil% . p%|
00004280  21 63 68 69 6c 64 25 3d  63 25 3a e1 0d 1a 68 0a  |!child%=c%:...h.|
00004290  6f 73 25 3d 73 25 0d 1a  72 42 c8 95 20 73 25 21  |os%=s%..rB.. s%!|
000042a0  73 69 62 6c 69 6e 67 25  3c 3e 6e 69 6c 25 20 80  |sibling%<>nil% .|
000042b0  20 21 28 73 25 21 73 69  62 6c 69 6e 67 25 2b 62  | !(s%!sibling%+b|
000042c0  69 72 74 68 64 61 74 65  25 29 3c 63 25 21 62 69  |irthdate%)<c%!bi|
000042d0  72 74 68 64 61 74 65 25  0d 1a 7c 13 20 73 25 3d  |rthdate%..|. s%=|
000042e0  73 25 21 73 69 62 6c 69  6e 67 25 0d 1a 86 05 ce  |s%!sibling%.....|
000042f0  0d 1a 90 2c e7 20 6f 73  25 3d 73 25 20 80 20 73  |...,. os%=s% . s|
00004300  25 21 62 69 72 74 68 64  61 74 65 25 3e 63 25 21  |%!birthdate%>c%!|
00004310  62 69 72 74 68 64 61 74  65 25 20 8c 0d 1a 9a 12  |birthdate% .....|
00004320  20 e7 20 63 25 21 67 65  6e 25 3d 30 20 8c 0d 1a  | . c%!gen%=0 ...|
00004330  a4 20 20 20 63 25 21 73  69 62 6c 69 6e 67 25 3d  |.   c%!sibling%=|
00004340  72 6f 6f 74 25 3a 72 6f  6f 74 25 3d 63 25 0d 1a  |root%:root%=c%..|
00004350  ae 06 20 cc 0d 1a b8 1b  20 20 63 25 21 73 69 62  |.. .....  c%!sib|
00004360  6c 69 6e 67 25 3d 70 25  21 63 68 69 6c 64 25 0d  |ling%=p%!child%.|
00004370  1a c2 12 20 20 70 25 21  63 68 69 6c 64 25 3d 63  |...  p%!child%=c|
00004380  25 0d 1a cc 06 20 cd 0d  1a d6 05 e1 0d 1a e0 05  |%.... ..........|
00004390  cd 0d 1a ea 1b 63 25 21  73 69 62 6c 69 6e 67 25  |.....c%!sibling%|
000043a0  3d 73 25 21 73 69 62 6c  69 6e 67 25 0d 1a f4 12  |=s%!sibling%....|
000043b0  73 25 21 73 69 62 6c 69  6e 67 25 3d 63 25 0d 1a  |s%!sibling%=c%..|
000043c0  fe 05 e1 0d 1b 08 05 3a  0d 1b 12 0f dd a4 61 64  |.......:......ad|
000043d0  64 5f 63 68 69 6c 64 0d  1b 1c 22 f2 63 6f 70 79  |d_child...".copy|
000043e0  66 72 6f 6d 28 63 75 72  72 65 6e 74 5f 70 65 72  |from(current_per|
000043f0  25 2c 70 65 72 73 64 25  29 0d 1b 26 33 e7 73 70  |%,persd%)..&3.sp|
00004400  6f 75 73 65 64 25 20 8c  20 63 75 72 72 65 6e 74  |oused% . current|
00004410  5f 70 65 72 25 3d 70 65  72 73 6f 6e 6e 6f 64 65  |_per%=personnode|
00004420  25 3a 73 70 6f 75 73 65  64 25 3d a3 0d 1b 30 20  |%:spoused%=...0 |
00004430  e7 20 63 75 72 72 65 6e  74 5f 70 65 72 25 21 63  |. current_per%!c|
00004440  68 69 6c 64 25 3d 6e 69  6c 25 20 8c 0d 1b 3a 23  |hild%=nil% ...:#|
00004450  20 63 75 72 72 65 6e 74  5f 70 65 72 25 21 63 68  | current_per%!ch|
00004460  69 6c 64 25 3d a4 64 69  6d 70 65 72 73 6f 6e 0d  |ild%=.dimperson.|
00004470  1b 44 34 20 21 28 63 75  72 72 65 6e 74 5f 70 65  |.D4 !(current_pe|
00004480  72 25 21 63 68 69 6c 64  25 2b 67 65 6e 25 29 3d  |r%!child%+gen%)=|
00004490  63 75 72 72 65 6e 74 5f  70 65 72 25 21 67 65 6e  |current_per%!gen|
000044a0  25 2b 31 0d 1b 4e 25 20  63 75 72 72 65 6e 74 5f  |%+1..N% current_|
000044b0  70 65 72 25 3d 63 75 72  72 65 6e 74 5f 70 65 72  |per%=current_per|
000044c0  25 21 63 68 69 6c 64 25  0d 1b 58 05 cc 0d 1b 62  |%!child%..X....b|
000044d0  25 20 63 75 72 72 65 6e  74 5f 70 65 72 25 3d 63  |% current_per%=c|
000044e0  75 72 72 65 6e 74 5f 70  65 72 25 21 63 68 69 6c  |urrent_per%!chil|
000044f0  64 25 0d 1b 6c 23 20 c8  95 20 63 75 72 72 65 6e  |d%..l# .. curren|
00004500  74 5f 70 65 72 25 21 73  69 62 6c 69 6e 67 25 3c  |t_per%!sibling%<|
00004510  3e 6e 69 6c 25 0d 1b 76  28 20 20 63 75 72 72 65  |>nil%..v(  curre|
00004520  6e 74 5f 70 65 72 25 3d  63 75 72 72 65 6e 74 5f  |nt_per%=current_|
00004530  70 65 72 25 21 73 69 62  6c 69 6e 67 25 0d 1b 80  |per%!sibling%...|
00004540  06 20 ce 0d 1b 8a 25 20  63 75 72 72 65 6e 74 5f  |. ....% current_|
00004550  70 65 72 25 21 73 69 62  6c 69 6e 67 25 3d a4 64  |per%!sibling%=.d|
00004560  69 6d 70 65 72 73 6f 6e  0d 1b 94 34 20 21 28 63  |imperson...4 !(c|
00004570  75 72 72 65 6e 74 5f 70  65 72 25 21 73 69 62 6c  |urrent_per%!sibl|
00004580  69 6e 67 25 2b 67 65 6e  25 29 3d 63 75 72 72 65  |ing%+gen%)=curre|
00004590  6e 74 5f 70 65 72 25 21  67 65 6e 25 0d 1b 9e 27  |nt_per%!gen%...'|
000045a0  20 63 75 72 72 65 6e 74  5f 70 65 72 25 3d 63 75  | current_per%=cu|
000045b0  72 72 65 6e 74 5f 70 65  72 25 21 73 69 62 6c 69  |rrent_per%!sibli|
000045c0  6e 67 25 0d 1b a8 05 cd  0d 1b b2 10 f2 63 6c 65  |ng%..........cle|
000045d0  61 72 70 65 72 73 6f 6e  0d 1b bc 17 f2 6e 69 6c  |arperson.....nil|
000045e0  73 28 63 75 72 72 65 6e  74 5f 70 65 72 25 29 0d  |s(current_per%).|
000045f0  1b c6 2d c8 99 20 22 57  69 6d 70 5f 46 6f 72 63  |..-.. "Wimp_Forc|
00004600  65 52 65 64 72 61 77 22  2c 6d 61 69 6e 25 2c 30  |eRedraw",main%,0|
00004610  2c 30 2c 31 32 38 30 2c  31 30 32 34 0d 1b d0 3b  |,0,1280,1024...;|
00004620  e7 20 6f 76 65 72 76 69  65 77 25 20 8c 20 c8 99  |. overview% . ..|
00004630  20 22 57 69 6d 70 5f 46  6f 72 63 65 52 65 64 72  | "Wimp_ForceRedr|
00004640  61 77 22 2c 6f 76 65 72  25 2c 30 2c 30 2c 31 32  |aw",over%,0,0,12|
00004650  38 30 2c 31 30 32 34 0d  1b da 41 e7 20 64 61 74  |80,1024...A. dat|
00004660  61 76 69 65 77 25 20 8c  20 c8 99 20 22 57 69 6d  |aview% . .. "Wim|
00004670  70 5f 46 6f 72 63 65 52  65 64 72 61 77 22 2c 64  |p_ForceRedraw",d|
00004680  61 74 61 77 69 6e 64 6f  77 25 2c 30 2c 30 2c 31  |atawindow%,0,0,1|
00004690  32 38 30 2c 31 30 32 34  0d 1b e4 06 3d 30 0d 1b  |280,1024....=0..|
000046a0  ee 05 3a 0d 1b f8 10 dd  a4 61 64 64 5f 73 70 6f  |..:......add_spo|
000046b0  75 73 65 0d 1c 02 22 f2  63 6f 70 79 66 72 6f 6d  |use...".copyfrom|
000046c0  28 63 75 72 72 65 6e 74  5f 70 65 72 25 2c 70 65  |(current_per%,pe|
000046d0  72 73 64 25 29 0d 1c 0c  35 e7 20 ac 73 70 6f 75  |rsd%)...5. .spou|
000046e0  73 65 64 25 20 8c 20 73  70 6f 75 73 65 64 25 3d  |sed% . spoused%=|
000046f0  b9 3a 70 65 72 73 6f 6e  6e 6f 64 65 25 3d 63 75  |.:personnode%=cu|
00004700  72 72 65 6e 74 5f 70 65  72 25 0d 1c 16 21 c8 95  |rrent_per%...!..|
00004710  20 63 75 72 72 65 6e 74  5f 70 65 72 25 21 73 70  | current_per%!sp|
00004720  6f 75 73 65 25 3c 3e 6e  69 6c 25 0d 1c 20 25 63  |ouse%<>nil%.. %c|
00004730  75 72 72 65 6e 74 5f 70  65 72 25 3d 63 75 72 72  |urrent_per%=curr|
00004740  65 6e 74 5f 70 65 72 25  21 73 70 6f 75 73 65 25  |ent_per%!spouse%|
00004750  0d 1c 2a 05 ce 0d 1c 34  23 63 75 72 72 65 6e 74  |..*....4#current|
00004760  5f 70 65 72 25 21 73 70  6f 75 73 65 25 3d a4 64  |_per%!spouse%=.d|
00004770  69 6d 70 65 72 73 6f 6e  0d 1c 3e 32 21 28 63 75  |imperson..>2!(cu|
00004780  72 72 65 6e 74 5f 70 65  72 25 21 73 70 6f 75 73  |rrent_per%!spous|
00004790  65 25 2b 67 65 6e 25 29  3d 63 75 72 72 65 6e 74  |e%+gen%)=current|
000047a0  5f 70 65 72 25 21 67 65  6e 25 0d 1c 48 25 63 75  |_per%!gen%..H%cu|
000047b0  72 72 65 6e 74 5f 70 65  72 25 3d 63 75 72 72 65  |rrent_per%=curre|
000047c0  6e 74 5f 70 65 72 25 21  73 70 6f 75 73 65 25 0d  |nt_per%!spouse%.|
000047d0  1c 52 10 f2 63 6c 65 61  72 70 65 72 73 6f 6e 0d  |.R..clearperson.|
000047e0  1c 5c 17 f2 6e 69 6c 73  28 63 75 72 72 65 6e 74  |.\..nils(current|
000047f0  5f 70 65 72 25 29 0d 1c  66 2d c8 99 20 22 57 69  |_per%)..f-.. "Wi|
00004800  6d 70 5f 46 6f 72 63 65  52 65 64 72 61 77 22 2c  |mp_ForceRedraw",|
00004810  6d 61 69 6e 25 2c 30 2c  30 2c 31 32 38 30 2c 31  |main%,0,0,1280,1|
00004820  30 32 34 0d 1c 70 3b e7  20 6f 76 65 72 76 69 65  |024..p;. overvie|
00004830  77 25 20 8c 20 c8 99 20  22 57 69 6d 70 5f 46 6f  |w% . .. "Wimp_Fo|
00004840  72 63 65 52 65 64 72 61  77 22 2c 6f 76 65 72 25  |rceRedraw",over%|
00004850  2c 30 2c 30 2c 31 32 38  30 2c 31 30 32 34 0d 1c  |,0,0,1280,1024..|
00004860  7a 41 e7 20 64 61 74 61  76 69 65 77 25 20 8c 20  |zA. dataview% . |
00004870  c8 99 20 22 57 69 6d 70  5f 46 6f 72 63 65 52 65  |.. "Wimp_ForceRe|
00004880  64 72 61 77 22 2c 64 61  74 61 77 69 6e 64 6f 77  |draw",datawindow|
00004890  25 2c 30 2c 30 2c 31 32  38 30 2c 31 30 32 34 0d  |%,0,0,1280,1024.|
000048a0  1c 84 06 3d 30 0d 1c 8e  05 3a 0d 1c 98 0c dd f2  |...=0....:......|
000048b0  73 70 6f 75 73 65 0d 1c  a2 13 e7 72 6f 6f 74 25  |spouse.....root%|
000048c0  3d 6e 69 6c 25 20 8c 20  e1 0d 1c ac 31 e7 20 63  |=nil% . ....1. c|
000048d0  75 72 72 65 6e 74 5f 70  65 72 25 21 73 70 6f 75  |urrent_per%!spou|
000048e0  73 65 25 3d 6e 69 6c 25  20 80 20 ac 28 73 70 6f  |se%=nil% . .(spo|
000048f0  75 73 65 64 25 29 20 8c  20 e1 0d 1c b6 21 e7 20  |used%) . ....!. |
00004900  63 75 72 72 65 6e 74 5f  70 65 72 25 21 73 70 6f  |current_per%!spo|
00004910  75 73 65 25 3d 6e 69 6c  25 20 8c 0d 1c b7 3d 63  |use%=nil% ....=c|
00004920  75 72 72 65 6e 74 5f 70  65 72 25 3d 70 65 72 73  |urrent_per%=pers|
00004930  6f 6e 6e 6f 64 65 25 3a  73 70 6f 75 73 65 64 25  |onnode%:spoused%|
00004940  3d a3 3a f2 63 6f 70 79  74 6f 28 63 75 72 72 65  |=.:.copyto(curre|
00004950  6e 74 5f 70 65 72 25 29  0d 1c b8 05 cc 0d 1c c0  |nt_per%)........|
00004960  35 e7 20 ac 73 70 6f 75  73 65 64 25 20 8c 20 73  |5. .spoused% . s|
00004970  70 6f 75 73 65 64 25 3d  b9 3a 70 65 72 73 6f 6e  |poused%=.:person|
00004980  6e 6f 64 65 25 3d 63 75  72 72 65 6e 74 5f 70 65  |node%=current_pe|
00004990  72 25 0d 1c ca 25 63 75  72 72 65 6e 74 5f 70 65  |r%...%current_pe|
000049a0  72 25 3d 63 75 72 72 65  6e 74 5f 70 65 72 25 21  |r%=current_per%!|
000049b0  73 70 6f 75 73 65 25 0d  1c d4 19 f2 63 6f 70 79  |spouse%.....copy|
000049c0  74 6f 28 63 75 72 72 65  6e 74 5f 70 65 72 25 29  |to(current_per%)|
000049d0  0d 1c d5 05 cd 0d 1c de  2d c8 99 20 22 57 69 6d  |........-.. "Wim|
000049e0  70 5f 46 6f 72 63 65 52  65 64 72 61 77 22 2c 6d  |p_ForceRedraw",m|
000049f0  61 69 6e 25 2c 30 2c 30  2c 31 32 38 30 2c 31 30  |ain%,0,0,1280,10|
00004a00  32 34 0d 1c df 3b e7 20  6f 76 65 72 76 69 65 77  |24...;. overview|
00004a10  25 20 8c 20 c8 99 20 22  57 69 6d 70 5f 46 6f 72  |% . .. "Wimp_For|
00004a20  63 65 52 65 64 72 61 77  22 2c 6f 76 65 72 25 2c  |ceRedraw",over%,|
00004a30  30 2c 30 2c 31 32 38 30  2c 31 30 32 34 0d 1c e0  |0,0,1280,1024...|
00004a40  41 e7 20 64 61 74 61 76  69 65 77 25 20 8c 20 c8  |A. dataview% . .|
00004a50  99 20 22 57 69 6d 70 5f  46 6f 72 63 65 52 65 64  |. "Wimp_ForceRed|
00004a60  72 61 77 22 2c 64 61 74  61 77 69 6e 64 6f 77 25  |raw",datawindow%|
00004a70  2c 30 2c 30 2c 31 32 38  30 2c 31 30 32 34 0d 1c  |,0,0,1280,1024..|
00004a80  e8 05 e1 0d 1c f2 04 0d  1c fc 11 20 dd f2 73 6f  |........... ..so|
00004a90  72 74 73 70 6f 75 73 65  0d 1d 06 0c 20 ea 20 73  |rtspouse.... . s|
00004aa0  25 2c 63 25 0d 1d 10 2a  73 25 3d 70 65 72 73 6f  |%,c%...*s%=perso|
00004ab0  6e 6e 6f 64 65 25 21 73  70 6f 75 73 65 25 3a 63  |nnode%!spouse%:c|
00004ac0  25 3d 63 75 72 72 65 6e  74 5f 70 65 72 25 0d 1d  |%=current_per%..|
00004ad0  1a 20 e7 73 25 3d 63 25  20 80 20 63 25 21 73 70  |. .s%=c% . c%!sp|
00004ae0  6f 75 73 65 25 3d 6e 69  6c 25 20 8c 20 e1 0d 1d  |ouse%=nil% . ...|
00004af0  24 15 c8 95 20 73 25 21  73 70 6f 75 73 65 25 3c  |$... s%!spouse%<|
00004b00  3e 63 25 0d 1d 2e 12 20  73 25 3d 73 25 21 73 70  |>c%.... s%=s%!sp|
00004b10  6f 75 73 65 25 0d 1d 38  05 ce 0d 1d 42 19 73 25  |ouse%..8....B.s%|
00004b20  21 73 70 6f 75 73 65 25  3d 63 25 21 73 70 6f 75  |!spouse%=c%!spou|
00004b30  73 65 25 0d 1d 4c 1a 73  25 3d 70 65 72 73 6f 6e  |se%..L.s%=person|
00004b40  6e 6f 64 65 25 21 73 70  6f 75 73 65 25 0d 1d 56  |node%!spouse%..V|
00004b50  4f e7 73 25 21 6d 61 72  72 69 61 67 65 64 61 74  |O.s%!marriagedat|
00004b60  65 25 3e 63 25 21 6d 61  72 72 69 61 67 65 64 61  |e%>c%!marriageda|
00004b70  74 65 25 20 8c 20 63 25  21 73 70 6f 75 73 65 25  |te% . c%!spouse%|
00004b80  3d 73 25 3a 70 65 72 73  6f 6e 6e 6f 64 65 25 21  |=s%:personnode%!|
00004b90  73 70 6f 75 73 65 25 3d  63 25 3a e1 0d 1d 60 46  |spouse%=c%:...`F|
00004ba0  c8 95 20 73 25 21 73 70  6f 75 73 65 25 3c 3e 6e  |.. s%!spouse%<>n|
00004bb0  69 6c 25 20 80 20 21 28  73 25 21 73 70 6f 75 73  |il% . !(s%!spous|
00004bc0  65 25 2b 6d 61 72 72 69  61 67 65 64 61 74 65 25  |e%+marriagedate%|
00004bd0  29 3c 63 25 21 6d 61 72  72 69 61 67 65 64 61 74  |)<c%!marriagedat|
00004be0  65 25 0d 1d 6a 12 20 73  25 3d 73 25 21 73 70 6f  |e%..j. s%=s%!spo|
00004bf0  75 73 65 25 0d 1d 74 05  ce 0d 1d 7e 1f 74 25 3d  |use%..t....~.t%=|
00004c00  73 25 21 73 70 6f 75 73  65 25 3a 73 25 21 73 70  |s%!spouse%:s%!sp|
00004c10  6f 75 73 65 25 3d 63 25  0d 1d 88 13 63 25 21 73  |ouse%=c%....c%!s|
00004c20  70 6f 75 73 65 25 3d 74  25 3a e1 0d 1d 92 05 3a  |pouse%=t%:.....:|
00004c30  0d 1d 9c 10 dd f2 63 68  65 63 6b 69 63 6f 6e 73  |......checkicons|
00004c40  0d 1d a6 07 ea 61 24 0d  1d b0 29 61 24 3d 22 41  |.....a$...)a$="A|
00004c50  72 65 20 59 6f 75 20 53  75 72 65 20 59 6f 75 20  |re You Sure You |
00004c60  77 69 73 68 20 74 6f 20  44 65 6c 65 74 65 3f 22  |wish to Delete?"|
00004c70  0d 1d ba 13 62 6c 6f 63  6b 25 21 30 3d 63 68 65  |....block%!0=che|
00004c80  63 6b 25 0d 1d c4 38 62  6c 6f 63 6b 25 21 34 3d  |ck%...8block%!4=|
00004c90  31 30 30 3a 62 6c 6f 63  6b 25 21 38 3d 35 30 3a  |100:block%!8=50:|
00004ca0  62 6c 6f 63 6b 25 21 31  32 3d 34 30 30 3a 62 6c  |block%!12=400:bl|
00004cb0  6f 63 6b 25 21 31 36 3d  31 30 30 0d 1d ce 2a 62  |ock%!16=100...*b|
00004cc0  6c 6f 63 6b 25 21 32 30  3d 26 43 37 30 30 39 30  |lock%!20=&C70090|
00004cd0  33 44 3a 24 28 62 6c 6f  63 6b 25 2b 32 34 29 3d  |3D:$(block%+24)=|
00004ce0  22 59 45 53 22 0d 1d d8  28 c8 99 20 22 57 69 6d  |"YES"...(.. "Wim|
00004cf0  70 5f 43 72 65 61 74 65  49 63 6f 6e 22 2c 30 2c  |p_CreateIcon",0,|
00004d00  62 6c 6f 63 6b 25 20 b8  20 64 6f 6b 25 0d 1d e2  |block% . dok%...|
00004d10  1e 62 6c 6f 63 6b 25 21  34 3d 35 30 30 3a 62 6c  |.block%!4=500:bl|
00004d20  6f 63 6b 25 21 31 32 3d  38 30 30 0d 1d ec 15 24  |ock%!12=800....$|
00004d30  28 62 6c 6f 63 6b 25 2b  32 34 29 3d 22 4e 4f 22  |(block%+24)="NO"|
00004d40  0d 1d f6 2c c8 99 20 22  57 69 6d 70 5f 43 72 65  |...,.. "Wimp_Cre|
00004d50  61 74 65 49 63 6f 6e 22  2c 30 2c 62 6c 6f 63 6b  |ateIcon",0,block|
00004d60  25 20 b8 20 64 63 61 6e  63 65 6c 25 0d 1e 00 17  |% . dcancel%....|
00004d70  62 6c 6f 63 6b 25 21 32  30 3d 26 31 37 30 30 30  |block%!20=&17000|
00004d80  33 33 39 0d 1e 0a 39 62  6c 6f 63 6b 25 21 34 3d  |339...9block%!4=|
00004d90  31 30 30 3a 62 6c 6f 63  6b 25 21 38 3d 33 30 30  |100:block%!8=300|
00004da0  3a 62 6c 6f 63 6b 25 21  31 32 3d 38 30 30 3a 62  |:block%!12=800:b|
00004db0  6c 6f 63 6b 25 21 31 36  3d 34 30 30 0d 1e 14 2c  |lock%!16=400...,|
00004dc0  62 6c 6f 63 6b 25 21 32  34 3d 63 68 65 63 6b 64  |block%!24=checkd|
00004dd0  61 74 61 25 3a 62 6c 6f  63 6b 25 21 32 38 3d 26  |ata%:block%!28=&|
00004de0  46 46 46 46 46 46 46 46  0d 1e 1e 22 62 6c 6f 63  |FFFFFFFF..."bloc|
00004df0  6b 25 21 33 32 3d a9 28  61 24 29 3a 24 63 68 65  |k%!32=.(a$):$che|
00004e00  63 6b 64 61 74 61 25 3d  61 24 0d 1e 28 1e 6e 61  |ckdata%=a$..(.na|
00004e10  6d 65 64 61 74 61 25 3d  63 68 65 63 6b 64 61 74  |medata%=checkdat|
00004e20  61 25 2b a9 61 24 2b 32  0d 1e 32 21 c8 99 20 22  |a%+.a$+2..2!.. "|
00004e30  57 69 6d 70 5f 43 72 65  61 74 65 49 63 6f 6e 22  |Wimp_CreateIcon"|
00004e40  2c 30 2c 62 6c 6f 63 6b  25 0d 1e 3c 2f 24 28 63  |,0,block%..</$(c|
00004e50  68 65 63 6b 64 61 74 61  25 2b a9 61 24 2b 32 29  |heckdata%+.a$+2)|
00004e60  3d 22 44 61 76 69 64 20  50 65 74 65 72 20 42 72  |="David Peter Br|
00004e70  65 61 6b 77 65 6c 6c 22  0d 1e 46 17 62 6c 6f 63  |eakwell"..F.bloc|
00004e80  6b 25 21 32 34 3d 6e 61  6d 65 64 61 74 61 25 0d  |k%!24=namedata%.|
00004e90  1e 50 1d 62 6c 6f 63 6b  25 21 33 32 3d a9 28 24  |.P.block%!32=.($|
00004ea0  28 6e 61 6d 65 64 61 74  61 25 29 29 0d 1e 5a 1e  |(namedata%))..Z.|
00004eb0  62 6c 6f 63 6b 25 21 38  3d 32 30 30 3a 62 6c 6f  |block%!8=200:blo|
00004ec0  63 6b 25 21 31 36 3d 33  30 30 0d 1e 64 21 c8 99  |ck%!16=300..d!..|
00004ed0  20 22 57 69 6d 70 5f 43  72 65 61 74 65 49 63 6f  | "Wimp_CreateIco|
00004ee0  6e 22 2c 30 2c 62 6c 6f  63 6b 25 0d 1e 6e 05 e1  |n",0,block%..n..|
00004ef0  0d 1e 78 0c dd a4 64 65  6c 65 74 65 0d 1e 82 22  |..x...delete..."|
00004f00  f2 63 6f 70 79 66 72 6f  6d 28 63 75 72 72 65 6e  |.copyfrom(curren|
00004f10  74 5f 70 65 72 25 2c 70  65 72 73 64 25 29 0d 1e  |t_per%,persd%)..|
00004f20  8c 14 e7 72 6f 6f 74 25  3d 6e 69 6c 25 20 8c 20  |...root%=nil% . |
00004f30  3d 30 0d 1e 96 3b 24 28  6e 61 6d 65 64 61 74 61  |=0...;$(namedata|
00004f40  25 29 3d 24 63 75 72 72  65 6e 74 5f 70 65 72 25  |%)=$current_per%|
00004f50  2b 22 20 22 2b 24 28 63  75 72 72 65 6e 74 5f 70  |+" "+$(current_p|
00004f60  65 72 25 2b 73 75 72 6e  61 6d 65 25 29 0d 1e a0  |er%+surname%)...|
00004f70  34 e7 61 62 6f 76 65 25  20 8c 20 24 28 6e 61 6d  |4.above% . $(nam|
00004f80  65 64 61 74 61 25 29 3d  24 28 6e 61 6d 65 64 61  |edata%)=$(nameda|
00004f90  74 61 25 29 2b 22 27 73  20 50 61 72 65 6e 74 73  |ta%)+"'s Parents|
00004fa0  22 0d 1e aa 12 21 62 6c  6f 63 6b 25 3d 63 68 65  |"....!block%=che|
00004fb0  63 6b 25 0d 1e b4 25 c8  99 20 22 57 69 6d 70 5f  |ck%...%.. "Wimp_|
00004fc0  47 65 74 57 69 6e 64 6f  77 53 74 61 74 65 22 2c  |GetWindowState",|
00004fd0  30 2c 62 6c 6f 63 6b 25  0d 1e be 21 c8 99 20 22  |0,block%...!.. "|
00004fe0  57 69 6d 70 5f 4f 70 65  6e 57 69 6e 64 6f 77 22  |Wimp_OpenWindow"|
00004ff0  2c 30 2c 62 6c 6f 63 6b  25 0d 1e c8 42 20 c8 97  |,0,block%...B ..|
00005000  20 c8 93 20 62 6c 6f 63  6b 25 21 34 2c 62 6c 6f  | .. block%!4,blo|
00005010  63 6b 25 21 38 2c 62 6c  6f 63 6b 25 21 31 32 2d  |ck%!8,block%!12-|
00005020  62 6c 6f 63 6b 25 21 34  2c 62 6c 6f 63 6b 25 21  |block%!4,block%!|
00005030  31 36 2d 62 6c 6f 63 6b  25 21 38 0d 1e d2 06 3d  |16-block%!8....=|
00005040  30 0d 1e dc 05 3a 0d 1e  e6 16 dd f2 64 65 6c 65  |0....:......dele|
00005050  74 65 70 65 72 73 6f 6e  28 69 25 29 0d 1e f0 0a  |teperson(i%)....|
00005060  ea 73 25 2c 74 25 0d 1e  fa 2d e7 20 69 25 3c 3e  |.s%,t%...-. i%<>|
00005070  64 63 61 6e 63 65 6c 25  20 80 20 61 62 6f 76 65  |dcancel% . above|
00005080  25 20 8c 20 f2 64 65 6c  65 74 65 70 61 72 65 6e  |% . .deleteparen|
00005090  74 3a e1 0d 1f 04 13 e7  20 69 25 3d 64 63 61 6e  |t:...... i%=dcan|
000050a0  63 65 6c 25 20 8c 0d 1f  0e 05 cc 0d 1f 18 11 20  |cel% .......... |
000050b0  e7 20 73 70 6f 75 73 65  64 25 20 8c 0d 1f 22 14  |. spoused% ...".|
000050c0  20 20 73 25 3d 70 65 72  73 6f 6e 6e 6f 64 65 25  |  s%=personnode%|
000050d0  0d 1f 2c 21 20 20 c8 95  20 73 25 21 73 70 6f 75  |..,!  .. s%!spou|
000050e0  73 65 25 3c 3e 63 75 72  72 65 6e 74 5f 70 65 72  |se%<>current_per|
000050f0  25 0d 1f 36 14 20 20 20  73 25 3d 73 25 21 73 70  |%..6.   s%=s%!sp|
00005100  6f 75 73 65 25 0d 1f 40  07 20 20 ce 0d 1f 4a 25  |ouse%..@.  ...J%|
00005110  20 20 73 25 21 73 70 6f  75 73 65 25 3d 63 75 72  |  s%!spouse%=cur|
00005120  72 65 6e 74 5f 70 65 72  25 21 73 70 6f 75 73 65  |rent_per%!spouse|
00005130  25 0d 1f 54 1e 20 20 f2  61 64 64 74 6f 6c 69 73  |%..T.  .addtolis|
00005140  74 28 63 75 72 72 65 6e  74 5f 70 65 72 25 29 0d  |t(current_per%).|
00005150  1f 5e 1e 20 20 63 75 72  72 65 6e 74 5f 70 65 72  |.^.  current_per|
00005160  25 3d 70 65 72 73 6f 6e  6e 6f 64 65 25 0d 1f 68  |%=personnode%..h|
00005170  10 20 20 73 70 6f 75 73  65 64 25 3d a3 0d 1f 72  |.  spoused%=...r|
00005180  06 20 cc 0d 1f 7c 23 20  20 c8 95 20 63 75 72 72  |. ...|#  .. curr|
00005190  65 6e 74 5f 70 65 72 25  21 73 70 6f 75 73 65 25  |ent_per%!spouse%|
000051a0  3c 3e 6e 69 6c 25 0d 1f  86 29 20 20 20 73 25 3d  |<>nil%...)   s%=|
000051b0  21 28 63 75 72 72 65 6e  74 5f 70 65 72 25 21 73  |!(current_per%!s|
000051c0  70 6f 75 73 65 25 2b 73  70 6f 75 73 65 25 29 0d  |pouse%+spouse%).|
000051d0  1f 90 27 20 20 20 f2 61  64 64 74 6f 6c 69 73 74  |..'   .addtolist|
000051e0  28 63 75 72 72 65 6e 74  5f 70 65 72 25 21 73 70  |(current_per%!sp|
000051f0  6f 75 73 65 25 29 0d 1f  9a 1e 20 20 20 63 75 72  |ouse%)....   cur|
00005200  72 65 6e 74 5f 70 65 72  25 21 73 70 6f 75 73 65  |rent_per%!spouse|
00005210  25 3d 73 25 0d 1f a4 07  20 20 ce 0d 1f ae 1d 20  |%=s%....  ..... |
00005220  20 e7 20 63 75 72 72 65  6e 74 5f 70 65 72 25 21  | . current_per%!|
00005230  67 65 6e 25 3d 30 20 8c  0d 1f b8 12 20 20 20 f2  |gen%=0 .....   .|
00005240  61 64 6a 75 73 74 72 6f  6f 74 0d 1f c2 22 20 20  |adjustroot..."  |
00005250  20 20 63 75 72 72 65 6e  74 5f 70 65 72 25 21 73  |  current_per%!s|
00005260  69 62 6c 69 6e 67 25 3d  6e 69 6c 25 0d 1f cc 21  |ibling%=nil%...!|
00005270  20 20 20 20 f2 64 65 6c  65 74 65 74 72 65 65 28  |    .deletetree(|
00005280  63 75 72 72 65 6e 74 5f  70 65 72 25 29 0d 1f d6  |current_per%)...|
00005290  19 20 20 20 63 75 72 72  65 6e 74 5f 70 65 72 25  |.   current_per%|
000052a0  3d 72 6f 6f 74 25 0d 1f  e0 07 20 20 cc 0d 1f ea  |=root%....  ....|
000052b0  12 20 20 20 f2 61 64 6a  75 73 74 6e 6f 72 6d 0d  |.   .adjustnorm.|
000052c0  1f f4 21 20 20 20 63 75  72 72 65 6e 74 5f 70 65  |..!   current_pe|
000052d0  72 25 21 73 69 62 6c 69  6e 67 25 3d 6e 69 6c 25  |r%!sibling%=nil%|
000052e0  0d 1f fe 20 20 20 20 f2  64 65 6c 65 74 65 74 72  |...    .deletetr|
000052f0  65 65 28 63 75 72 72 65  6e 74 5f 70 65 72 25 29  |ee(current_per%)|
00005300  0d 20 08 19 20 20 20 63  75 72 72 65 6e 74 5f 70  |. ..   current_p|
00005310  65 72 25 3d 72 6f 6f 74  25 0d 20 12 07 20 20 cd  |er%=root%. ..  .|
00005320  0d 20 1c 06 20 cd 0d 20  26 05 cd 0d 20 30 0e f2  |. .. .. &... 0..|
00005330  65 6e 64 64 65 6c 65 74  65 0d 20 3a 05 e1 0d 20  |enddelete. :... |
00005340  44 05 3a 0d 20 4e 0f dd  f2 65 6e 64 64 65 6c 65  |D.:. N...enddele|
00005350  74 65 0d 20 58 12 21 62  6c 6f 63 6b 25 3d 63 68  |te. X.!block%=ch|
00005360  65 63 6b 25 0d 20 62 22  c8 99 20 22 57 69 6d 70  |eck%. b".. "Wimp|
00005370  5f 43 6c 6f 73 65 57 69  6e 64 6f 77 22 2c 30 2c  |_CloseWindow",0,|
00005380  62 6c 6f 63 6b 25 0d 20  6c 18 20 c8 97 20 c8 93  |block%. l. .. ..|
00005390  20 30 2c 30 2c 31 32 38  30 2c 31 30 32 34 0d 20  | 0,0,1280,1024. |
000053a0  76 3f e7 20 63 75 72 72  65 6e 74 5f 70 65 72 25  |v?. current_per%|
000053b0  3c 3e 6e 69 6c 25 20 8c  20 f2 63 6f 70 79 74 6f  |<>nil% . .copyto|
000053c0  28 63 75 72 72 65 6e 74  5f 70 65 72 25 29 20 8b  |(current_per%) .|
000053d0  20 f2 63 6c 65 61 72 70  65 72 73 6f 6e 0d 20 80  | .clearperson. .|
000053e0  2d c8 99 20 22 57 69 6d  70 5f 46 6f 72 63 65 52  |-.. "Wimp_ForceR|
000053f0  65 64 72 61 77 22 2c 6d  61 69 6e 25 2c 30 2c 30  |edraw",main%,0,0|
00005400  2c 31 32 38 30 2c 31 30  32 34 0d 20 8a 10 61 64  |,1280,1024. ..ad|
00005410  64 73 74 61 74 75 73 25  3d b9 0d 20 94 3b e7 20  |dstatus%=.. .;. |
00005420  6f 76 65 72 76 69 65 77  25 20 8c 20 c8 99 20 22  |overview% . .. "|
00005430  57 69 6d 70 5f 46 6f 72  63 65 52 65 64 72 61 77  |Wimp_ForceRedraw|
00005440  22 2c 6f 76 65 72 25 2c  30 2c 30 2c 31 32 38 30  |",over%,0,0,1280|
00005450  2c 31 30 32 34 0d 20 9e  41 e7 20 64 61 74 61 76  |,1024. .A. datav|
00005460  69 65 77 25 20 8c 20 c8  99 20 22 57 69 6d 70 5f  |iew% . .. "Wimp_|
00005470  46 6f 72 63 65 52 65 64  72 61 77 22 2c 64 61 74  |ForceRedraw",dat|
00005480  61 77 69 6e 64 6f 77 25  2c 30 2c 30 2c 31 32 38  |awindow%,0,0,128|
00005490  30 2c 31 30 32 34 0d 20  a8 05 e1 0d 20 b2 05 3a  |0,1024. .... ..:|
000054a0  0d 20 bc 13 dd f2 61 64  64 74 6f 6c 69 73 74 28  |. ....addtolist(|
000054b0  64 25 29 0d 20 c6 14 64  25 21 6e 65 78 74 25 3d  |d%). ..d%!next%=|
000054c0  64 65 6c 65 74 65 25 0d  20 d0 0e 64 65 6c 65 74  |delete%. ..delet|
000054d0  65 25 3d 64 25 0d 20 da  05 e1 0d 20 e4 05 3a 0d  |e%=d%. .... ..:.|
000054e0  20 ee 10 dd f2 61 64 6a  75 73 74 72 6f 6f 74 0d  | ....adjustroot.|
000054f0  20 f8 1a e7 20 63 75 72  72 65 6e 74 5f 70 65 72  | ... current_per|
00005500  25 3d 72 6f 6f 74 25 20  8c 0d 21 02 24 20 e7 20  |%=root% ..!.$ . |
00005510  63 75 72 72 65 6e 74 5f  70 65 72 25 21 73 69 62  |current_per%!sib|
00005520  6c 69 6e 67 25 3c 3e 6e  69 6c 25 20 8c 0d 21 0c  |ling%<>nil% ..!.|
00005530  21 20 20 72 6f 6f 74 25  3d 63 75 72 72 65 6e 74  |!  root%=current|
00005540  5f 70 65 72 25 21 73 69  62 6c 69 6e 67 25 0d 21  |_per%!sibling%.!|
00005550  16 06 20 cc 0d 21 20 21  20 20 72 6f 6f 74 25 3d  |.. ..! !  root%=|
00005560  63 75 72 72 65 6e 74 5f  70 65 72 25 21 73 69 62  |current_per%!sib|
00005570  6c 69 6e 67 25 0d 21 2a  24 20 20 e7 20 72 6f 6f  |ling%.!*$  . roo|
00005580  74 25 3c 3e 6e 69 6c 25  20 8c 20 f2 64 65 63 67  |t%<>nil% . .decg|
00005590  65 6e 28 72 6f 6f 74 25  29 0d 21 34 06 20 cd 0d  |en(root%).!4. ..|
000055a0  21 3e 05 cc 0d 21 48 0d  20 73 25 3d 72 6f 6f 74  |!>...!H. s%=root|
000055b0  25 0d 21 52 21 20 c8 95  20 73 25 21 73 69 62 6c  |%.!R! .. s%!sibl|
000055c0  69 6e 67 25 3c 3e 63 75  72 72 65 6e 74 5f 70 65  |ing%<>current_pe|
000055d0  72 25 0d 21 5c 14 20 20  73 25 3d 73 25 21 73 69  |r%.!\.  s%=s%!si|
000055e0  62 6c 69 6e 67 25 0d 21  66 06 20 ce 0d 21 70 26  |bling%.!f. ..!p&|
000055f0  20 73 25 21 73 69 62 6c  69 6e 67 25 3d 63 75 72  | s%!sibling%=cur|
00005600  72 65 6e 74 5f 70 65 72  25 21 73 69 62 6c 69 6e  |rent_per%!siblin|
00005610  67 25 0d 21 7a 05 cd 0d  21 84 05 e1 0d 21 8e 05  |g%.!z...!....!..|
00005620  3a 0d 21 98 10 dd f2 61  64 6a 75 73 74 6e 6f 72  |:.!....adjustnor|
00005630  6d 0d 21 a2 1e f2 67 65  6e 70 6f 69 6e 74 65 72  |m.!...genpointer|
00005640  73 28 63 75 72 72 65 6e  74 5f 70 65 72 25 29 0d  |s(current_per%).|
00005650  21 ac 2f 70 25 3d 67 65  6e 70 6f 69 6e 74 65 72  |!./p%=genpointer|
00005660  73 25 21 28 28 28 63 75  72 72 65 6e 74 5f 70 65  |s%!(((current_pe|
00005670  72 25 21 67 65 6e 25 29  2d 31 29 2a 34 29 0d 21  |r%!gen%)-1)*4).!|
00005680  b6 1d e7 70 25 21 63 68  69 6c 64 25 3d 63 75 72  |...p%!child%=cur|
00005690  72 65 6e 74 5f 70 65 72  25 20 8c 0d 21 c0 24 20  |rent_per% ..!.$ |
000056a0  70 25 21 63 68 69 6c 64  25 3d 63 75 72 72 65 6e  |p%!child%=curren|
000056b0  74 5f 70 65 72 25 21 73  69 62 6c 69 6e 67 25 0d  |t_per%!sibling%.|
000056c0  21 ca 05 cc 0d 21 d4 11  20 70 25 3d 70 25 21 63  |!....!.. p%=p%!c|
000056d0  68 69 6c 64 25 0d 21 de  20 20 c8 95 70 25 21 73  |hild%.!.  ..p%!s|
000056e0  69 62 6c 69 6e 67 25 3c  3e 63 75 72 72 65 6e 74  |ibling%<>current|
000056f0  5f 70 65 72 25 0d 21 e8  14 20 20 70 25 3d 70 25  |_per%.!..  p%=p%|
00005700  21 73 69 62 6c 69 6e 67  25 0d 21 f2 06 20 ce 0d  |!sibling%.!.. ..|
00005710  21 fc 26 20 70 25 21 73  69 62 6c 69 6e 67 25 3d  |!.& p%!sibling%=|
00005720  63 75 72 72 65 6e 74 5f  70 65 72 25 21 73 69 62  |current_per%!sib|
00005730  6c 69 6e 67 25 0d 22 06  05 cd 0d 22 10 05 e1 0d  |ling%."...."....|
00005740  22 1a 05 3a 0d 22 24 14  dd f2 64 65 63 67 65 6e  |"..:."$...decgen|
00005750  28 6f 72 6f 6f 74 25 29  0d 22 2e 14 e7 20 6f 72  |(oroot%)."... or|
00005760  6f 6f 74 25 3c 3e 6e 69  6c 25 20 8c 0d 22 38 13  |oot%<>nil% .."8.|
00005770  20 6f 72 6f 6f 74 25 21  67 65 6e 25 2d 3d 31 0d  | oroot%!gen%-=1.|
00005780  22 42 1b 20 f2 64 65 63  67 65 6e 28 6f 72 6f 6f  |"B. .decgen(oroo|
00005790  74 25 21 63 68 69 6c 64  25 29 0d 22 4c 1d 20 f2  |t%!child%)."L. .|
000057a0  64 65 63 67 65 6e 28 6f  72 6f 6f 74 25 21 73 69  |decgen(oroot%!si|
000057b0  62 6c 69 6e 67 25 29 0d  22 56 05 cd 0d 22 60 05  |bling%)."V..."`.|
000057c0  e1 0d 22 6a 05 3a 0d 22  74 14 dd f2 64 65 6c 65  |.."j.:."t...dele|
000057d0  74 65 74 72 65 65 28 6f  25 29 0d 22 7e 09 20 ea  |tetree(o%)."~. .|
000057e0  20 74 25 0d 22 88 10 e7  20 6f 25 3c 3e 6e 69 6c  | t%."... o%<>nil|
000057f0  25 20 8c 0d 22 92 1b 20  f2 64 65 6c 65 74 65 74  |% ..".. .deletet|
00005800  72 65 65 28 6f 25 21 63  68 69 6c 64 25 29 0d 22  |ree(o%!child%)."|
00005810  9c 1d 20 f2 64 65 6c 65  74 65 74 72 65 65 28 6f  |.. .deletetree(o|
00005820  25 21 73 69 62 6c 69 6e  67 25 29 0d 22 a6 18 20  |%!sibling%).".. |
00005830  c8 95 20 6f 25 21 73 70  6f 75 73 65 25 3c 3e 6e  |.. o%!spouse%<>n|
00005840  69 6c 25 0d 22 b0 1e 20  20 74 25 3d 21 28 6f 25  |il%."..  t%=!(o%|
00005850  21 73 70 6f 75 73 65 25  2b 73 70 6f 75 73 65 25  |!spouse%+spouse%|
00005860  29 0d 22 ba 1c 20 20 f2  61 64 64 74 6f 6c 69 73  |)."..  .addtolis|
00005870  74 28 6f 25 21 73 70 6f  75 73 65 25 29 0d 22 c4  |t(o%!spouse%).".|
00005880  13 20 20 6f 25 21 73 70  6f 75 73 65 25 3d 74 25  |.  o%!spouse%=t%|
00005890  0d 22 ce 06 20 ce 0d 22  d8 13 20 f2 61 64 64 74  |.".. ..".. .addt|
000058a0  6f 6c 69 73 74 28 6f 25  29 0d 22 e2 05 cd 0d 22  |olist(o%)."...."|
000058b0  ec 05 e1 0d 22 f6 05 3a  0d 23 00 0f dd a4 6c 6f  |...."..:.#....lo|
000058c0  61 64 5f 74 72 65 65 0d  23 0a 14 66 69 6c 65 24  |ad_tree.#..file$|
000058d0  3d 24 66 69 6c 65 5f 64  61 74 25 0d 23 14 0e 73  |=$file_dat%.#..s|
000058e0  70 6f 75 73 65 64 25 3d  a3 0d 23 1e 14 f2 6c 6f  |poused%=..#...lo|
000058f0  61 64 66 69 6c 65 28 66  69 6c 65 24 29 0d 23 28  |adfile(file$).#(|
00005900  06 3d 30 0d 23 32 05 3a  0d 23 3c 15 dd f2 6c 6f  |.=0.#2.:.#<...lo|
00005910  61 64 66 69 6c 65 28 66  69 6c 65 24 29 0d 23 46  |adfile(file$).#F|
00005920  12 e7 20 66 69 6c 65 24  3d 22 22 20 8c 20 e1 0d  |.. file$="" . ..|
00005930  23 50 12 6f 6c 64 74 72  65 65 24 3d 66 69 6c 65  |#P.oldtree$=file|
00005940  24 0d 23 5a 0f 46 25 3d  8e 28 66 69 6c 65 24 29  |$.#Z.F%=.(file$)|
00005950  0d 23 64 12 54 25 3d 9a  23 46 25 3a cf 23 46 25  |.#d.T%=.#F%:.#F%|
00005960  3d 30 0d 23 6e 26 e7 20  72 6f 6f 74 25 3c 3e 6e  |=0.#n&. root%<>n|
00005970  69 6c 25 20 8c 20 f2 64  65 6c 65 74 65 74 72 65  |il% . .deletetre|
00005980  65 28 72 6f 6f 74 25 29  0d 23 78 14 72 6f 6f 74  |e(root%).#x.root|
00005990  25 3d a4 64 69 6d 70 65  72 73 6f 6e 0d 23 82 16  |%=.dimperson.#..|
000059a0  f2 6c 6f 61 64 5f 72 65  63 75 72 28 72 6f 6f 74  |.load_recur(root|
000059b0  25 29 0d 23 8c 08 d9 23  46 25 0d 23 96 25 f2 63  |%).#...#F%.#.%.c|
000059c0  6f 70 79 74 6f 28 72 6f  6f 74 25 29 3a 63 75 72  |opyto(root%):cur|
000059d0  72 65 6e 74 5f 70 65 72  25 3d 72 6f 6f 74 25 0d  |rent_per%=root%.|
000059e0  23 a0 2d c8 99 20 22 57  69 6d 70 5f 46 6f 72 63  |#.-.. "Wimp_Forc|
000059f0  65 52 65 64 72 61 77 22  2c 6d 61 69 6e 25 2c 30  |eRedraw",main%,0|
00005a00  2c 30 2c 31 32 38 30 2c  31 30 32 34 0d 23 aa 10  |,0,1280,1024.#..|
00005a10  61 64 64 73 74 61 74 75  73 25 3d b9 0d 23 b4 3b  |addstatus%=..#.;|
00005a20  e7 20 6f 76 65 72 76 69  65 77 25 20 8c 20 c8 99  |. overview% . ..|
00005a30  20 22 57 69 6d 70 5f 46  6f 72 63 65 52 65 64 72  | "Wimp_ForceRedr|
00005a40  61 77 22 2c 6f 76 65 72  25 2c 30 2c 30 2c 31 32  |aw",over%,0,0,12|
00005a50  38 30 2c 31 30 32 34 0d  23 be 41 e7 20 64 61 74  |80,1024.#.A. dat|
00005a60  61 76 69 65 77 25 20 8c  20 c8 99 20 22 57 69 6d  |aview% . .. "Wim|
00005a70  70 5f 46 6f 72 63 65 52  65 64 72 61 77 22 2c 64  |p_ForceRedraw",d|
00005a80  61 74 61 77 69 6e 64 6f  77 25 2c 30 2c 30 2c 31  |atawindow%,0,0,1|
00005a90  32 38 30 2c 31 30 32 34  0d 23 c8 05 e1 0d 23 d2  |280,1024.#....#.|
00005aa0  05 3a 0d 23 dc 18 dd f2  6c 6f 61 64 5f 72 65 63  |.:.#....load_rec|
00005ab0  75 72 28 6c 72 6f 6f 74  25 29 0d 23 e6 1f f2 6c  |ur(lroot%).#...l|
00005ac0  6f 61 64 5f 70 65 72 28  6c 72 6f 6f 74 25 29 3a  |oad_per(lroot%):|
00005ad0  54 25 3d 6c 72 6f 6f 74  25 0d 23 f0 1b c8 95 20  |T%=lroot%.#.... |
00005ae0  6c 72 6f 6f 74 25 21 73  70 6f 75 73 65 25 3c 3e  |lroot%!spouse%<>|
00005af0  6e 69 6c 25 0d 23 fa 1e  20 6c 72 6f 6f 74 25 21  |nil%.#.. lroot%!|
00005b00  73 70 6f 75 73 65 25 3d  a4 64 69 6d 70 65 72 73  |spouse%=.dimpers|
00005b10  6f 6e 0d 24 04 1a 20 6c  72 6f 6f 74 25 3d 6c 72  |on.$.. lroot%=lr|
00005b20  6f 6f 74 25 21 73 70 6f  75 73 65 25 0d 24 0e 16  |oot%!spouse%.$..|
00005b30  20 f2 6c 6f 61 64 5f 70  65 72 28 6c 72 6f 6f 74  | .load_per(lroot|
00005b40  25 29 0d 24 18 05 ce 0d  24 22 0d 6c 72 6f 6f 74  |%).$....$".lroot|
00005b50  25 3d 54 25 0d 24 2c 1d  e7 20 6c 72 6f 6f 74 25  |%=T%.$,.. lroot%|
00005b60  21 73 69 62 6c 69 6e 67  25 3c 3e 6e 69 6c 25 20  |!sibling%<>nil% |
00005b70  8c 0d 24 36 1f 20 6c 72  6f 6f 74 25 21 73 69 62  |..$6. lroot%!sib|
00005b80  6c 69 6e 67 25 3d a4 64  69 6d 70 65 72 73 6f 6e  |ling%=.dimperson|
00005b90  0d 24 40 21 20 f2 6c 6f  61 64 5f 72 65 63 75 72  |.$@! .load_recur|
00005ba0  28 6c 72 6f 6f 74 25 21  73 69 62 6c 69 6e 67 25  |(lroot%!sibling%|
00005bb0  29 0d 24 4a 05 cd 0d 24  54 1b e7 20 6c 72 6f 6f  |).$J...$T.. lroo|
00005bc0  74 25 21 63 68 69 6c 64  25 3c 3e 6e 69 6c 25 20  |t%!child%<>nil% |
00005bd0  8c 0d 24 5e 1d 20 6c 72  6f 6f 74 25 21 63 68 69  |..$^. lroot%!chi|
00005be0  6c 64 25 3d a4 64 69 6d  70 65 72 73 6f 6e 0d 24  |ld%=.dimperson.$|
00005bf0  68 1f 20 f2 6c 6f 61 64  5f 72 65 63 75 72 28 6c  |h. .load_recur(l|
00005c00  72 6f 6f 74 25 21 63 68  69 6c 64 25 29 0d 24 72  |root%!child%).$r|
00005c10  05 cd 0d 24 7c 05 e1 0d  24 86 05 3a 0d 24 90 14  |...$|...$..:.$..|
00005c20  dd f2 6c 6f 61 64 5f 70  65 72 28 6d 65 6d 25 29  |..load_per(mem%)|
00005c30  0d 24 9a 08 ea 20 6f 25  0d 24 a4 28 e8 23 46 25  |.$... o%.$.(.#F%|
00005c40  2c 24 28 6d 65 6d 25 2b  66 6e 61 6d 65 25 29 2c  |,$(mem%+fname%),|
00005c50  24 28 6d 65 6d 25 2b 73  75 72 6e 61 6d 65 25 29  |$(mem%+surname%)|
00005c60  0d 24 ae 28 e8 23 46 25  2c 6d 65 6d 25 21 62 69  |.$.(.#F%,mem%!bi|
00005c70  72 74 68 64 61 74 65 25  2c 6d 65 6d 25 21 64 65  |rthdate%,mem%!de|
00005c80  61 74 68 64 61 74 65 25  0d 24 b8 2d e8 23 46 25  |athdate%.$.-.#F%|
00005c90  2c 6d 65 6d 25 21 6d 61  72 72 69 61 67 65 64 61  |,mem%!marriageda|
00005ca0  74 65 25 2c 6d 65 6d 25  21 64 69 76 6f 72 63 65  |te%,mem%!divorce|
00005cb0  64 61 74 65 25 0d 24 c2  2f e8 23 46 25 2c 6d 65  |date%.$./.#F%,me|
00005cc0  6d 25 21 73 69 62 6c 69  6e 67 25 2c 6d 65 6d 25  |m%!sibling%,mem%|
00005cd0  21 63 68 69 6c 64 25 2c  6d 65 6d 25 21 73 70 6f  |!child%,mem%!spo|
00005ce0  75 73 65 25 0d 24 cc 21  e8 23 46 25 2c 6d 65 6d  |use%.$.!.#F%,mem|
00005cf0  25 21 67 65 6e 25 3a e8  23 46 25 2c 6d 65 6d 25  |%!gen%:.#F%,mem%|
00005d00  21 73 65 78 25 0d 24 d6  3c e3 20 6f 25 3d 30 20  |!sex%.$.<. o%=0 |
00005d10  b8 20 31 35 3a 20 e8 23  46 25 2c 20 24 28 6d 65  |. 15: .#F%, $(me|
00005d20  6d 25 2b 28 70 65 72 73  6f 6e 6c 65 6e 67 74 68  |m%+(personlength|
00005d30  25 2d 31 36 2a 36 35 29  2b 6f 25 2a 36 35 29 3a  |%-16*65)+o%*65):|
00005d40  ed 0d 24 e0 05 e1 0d 24  ea 05 3a 0d 24 f4 14 dd  |..$....$..:.$...|
00005d50  f2 73 61 76 65 5f 70 65  72 28 6d 65 6d 25 29 0d  |.save_per(mem%).|
00005d60  24 fe 08 ea 20 6f 25 0d  25 08 28 f1 23 46 25 2c  |$... o%.%.(.#F%,|
00005d70  24 28 6d 65 6d 25 2b 66  6e 61 6d 65 25 29 2c 24  |$(mem%+fname%),$|
00005d80  28 6d 65 6d 25 2b 73 75  72 6e 61 6d 65 25 29 0d  |(mem%+surname%).|
00005d90  25 12 28 f1 23 46 25 2c  6d 65 6d 25 21 62 69 72  |%.(.#F%,mem%!bir|
00005da0  74 68 64 61 74 65 25 2c  6d 65 6d 25 21 64 65 61  |thdate%,mem%!dea|
00005db0  74 68 64 61 74 65 25 0d  25 1c 2d f1 23 46 25 2c  |thdate%.%.-.#F%,|
00005dc0  6d 65 6d 25 21 6d 61 72  72 69 61 67 65 64 61 74  |mem%!marriagedat|
00005dd0  65 25 2c 6d 65 6d 25 21  64 69 76 6f 72 63 65 64  |e%,mem%!divorced|
00005de0  61 74 65 25 0d 25 26 2f  f1 23 46 25 2c 6d 65 6d  |ate%.%&/.#F%,mem|
00005df0  25 21 73 69 62 6c 69 6e  67 25 2c 6d 65 6d 25 21  |%!sibling%,mem%!|
00005e00  63 68 69 6c 64 25 2c 6d  65 6d 25 21 73 70 6f 75  |child%,mem%!spou|
00005e10  73 65 25 0d 25 30 21 f1  23 46 25 2c 6d 65 6d 25  |se%.%0!.#F%,mem%|
00005e20  21 67 65 6e 25 3a f1 23  46 25 2c 6d 65 6d 25 21  |!gen%:.#F%,mem%!|
00005e30  73 65 78 25 0d 25 3a 3b  e3 20 6f 25 3d 30 20 b8  |sex%.%:;. o%=0 .|
00005e40  20 31 35 3a 20 f1 23 46  25 2c 24 28 6d 65 6d 25  | 15: .#F%,$(mem%|
00005e50  2b 28 70 65 72 73 6f 6e  6c 65 6e 67 74 68 25 2d  |+(personlength%-|
00005e60  31 36 2a 36 35 29 2b 6f  25 2a 36 35 29 3a ed 0d  |16*65)+o%*65):..|
00005e70  25 44 05 e1 0d 25 4e 05  3a 0d 25 58 16 dd a4 73  |%D...%N.:.%X...s|
00005e80  61 76 65 5f 74 72 65 65  28 66 69 6c 65 24 29 0d  |ave_tree(file$).|
00005e90  25 62 15 e7 20 72 6f 6f  74 25 3d 6e 69 6c 25 20  |%b.. root%=nil% |
00005ea0  8c 20 3d 30 0d 25 6c 13  e7 20 66 69 6c 65 24 3d  |. =0.%l.. file$=|
00005eb0  22 22 20 8c 20 3d 30 0d  25 76 12 6f 6c 64 74 72  |"" . =0.%v.oldtr|
00005ec0  65 65 24 3d 66 69 6c 65  24 0d 25 80 32 20 46 25  |ee$=file$.%.2 F%|
00005ed0  3d 8e 28 66 69 6c 65 24  29 3a d9 23 46 25 3a e7  |=.(file$):.#F%:.|
00005ee0  20 46 25 3c 3e 30 20 8c  20 ff 28 22 44 45 4c 45  | F%<>0 . .("DELE|
00005ef0  54 45 20 22 2b 66 69 6c  65 24 29 0d 25 8a 0f 46  |TE "+file$).%..F|
00005f00  25 3d ae 28 66 69 6c 65  24 29 0d 25 94 16 f2 73  |%=.(file$).%...s|
00005f10  61 76 65 5f 72 65 63 75  72 28 72 6f 6f 74 25 29  |ave_recur(root%)|
00005f20  0d 25 9e 08 d9 23 46 25  0d 25 a8 25 ff 28 22 53  |.%...#F%.%.%.("S|
00005f30  45 54 54 59 50 45 20 22  2b 66 69 6c 65 24 2b 22  |ETTYPE "+file$+"|
00005f40  20 46 61 6d 69 6c 79 66  69 6c 65 22 29 0d 25 b2  | Familyfile").%.|
00005f50  06 3d 30 0d 25 bc 05 3a  0d 25 c6 18 dd f2 73 61  |.=0.%..:.%....sa|
00005f60  76 65 5f 72 65 63 75 72  28 6c 72 6f 6f 74 25 29  |ve_recur(lroot%)|
00005f70  0d 25 d0 15 f2 73 61 76  65 5f 70 65 72 28 6c 72  |.%...save_per(lr|
00005f80  6f 6f 74 25 29 0d 25 da  0d 54 25 3d 6c 72 6f 6f  |oot%).%..T%=lroo|
00005f90  74 25 0d 25 e4 1b c8 95  20 6c 72 6f 6f 74 25 21  |t%.%.... lroot%!|
00005fa0  73 70 6f 75 73 65 25 3c  3e 6e 69 6c 25 0d 25 ee  |spouse%<>nil%.%.|
00005fb0  1e 20 f2 73 61 76 65 5f  70 65 72 28 6c 72 6f 6f  |. .save_per(lroo|
00005fc0  74 25 21 73 70 6f 75 73  65 25 29 0d 25 f8 1a 20  |t%!spouse%).%.. |
00005fd0  6c 72 6f 6f 74 25 3d 6c  72 6f 6f 74 25 21 73 70  |lroot%=lroot%!sp|
00005fe0  6f 75 73 65 25 0d 26 02  05 ce 0d 26 0c 0d 6c 72  |ouse%.&....&..lr|
00005ff0  6f 6f 74 25 3d 54 25 0d  26 16 1d e7 20 6c 72 6f  |oot%=T%.&... lro|
00006000  6f 74 25 21 73 69 62 6c  69 6e 67 25 3c 3e 6e 69  |ot%!sibling%<>ni|
00006010  6c 25 20 8c 0d 26 20 21  20 f2 73 61 76 65 5f 72  |l% ..& ! .save_r|
00006020  65 63 75 72 28 6c 72 6f  6f 74 25 21 73 69 62 6c  |ecur(lroot%!sibl|
00006030  69 6e 67 25 29 0d 26 2a  05 cd 0d 26 34 1b e7 20  |ing%).&*...&4.. |
00006040  6c 72 6f 6f 74 25 21 63  68 69 6c 64 25 3c 3e 6e  |lroot%!child%<>n|
00006050  69 6c 25 20 8c 0d 26 3e  1f 20 f2 73 61 76 65 5f  |il% ..&>. .save_|
00006060  72 65 63 75 72 28 6c 72  6f 6f 74 25 21 63 68 69  |recur(lroot%!chi|
00006070  6c 64 25 29 0d 26 48 05  cd 0d 26 52 05 e1 0d 26  |ld%).&H...&R...&|
00006080  5c 05 3a 0d 26 66 1f dc  22 3d 22 2c 22 3c 22 2c  |\.:.&f.."=","<",|
00006090  22 3e 22 2c 22 3c 3d 22  2c 22 3e 3d 22 2c 22 3c  |">","<=",">=","<|
000060a0  3e 22 0d 26 70 05 3a 0d  26 7a 0f dd f2 66 69 6e  |>".&p.:.&z...fin|
000060b0  64 69 63 6f 6e 73 0d 26  84 17 ea 69 25 2c 6c 25  |dicons.&...i%,l%|
000060c0  2c 6c 6f 6f 70 25 2c 69  6e 6e 65 72 25 0d 26 8e  |,loop%,inner%.&.|
000060d0  18 6c 25 3d 31 37 2a 37  2b 32 30 2b 66 69 6e 64  |.l%=17*7+20+find|
000060e0  69 63 6f 6e 25 0d 26 98  15 21 62 6c 6f 63 6b 25  |icon%.&..!block%|
000060f0  3d 66 69 6e 64 77 69 6e  64 25 0d 26 a2 10 e3 6c  |=findwind%.&...l|
00006100  6f 6f 70 25 3d 31 20 b8  20 34 0d 26 ac 0a f7 20  |oop%=1 . 4.&... |
00006110  8d 44 66 66 0d 26 b6 11  e3 69 6e 6e 65 72 25 3d  |.Dff.&...inner%=|
00006120  31 20 b8 20 36 0d 26 c0  22 62 6c 6f 63 6b 25 21  |1 . 6.&."block%!|
00006130  32 34 3d 6c 25 2b 69 6e  6e 65 72 25 2a 33 2b 6c  |24=l%+inner%*3+l|
00006140  6f 6f 70 25 2a 32 30 0d  26 ca 17 62 6c 6f 63 6b  |oop%*20.&..block|
00006150  25 21 32 38 3d 26 46 46  46 46 46 46 46 46 0d 26  |%!28=&FFFFFFFF.&|
00006160  d4 3a e7 20 69 6e 6e 65  72 25 3d 31 20 8c 20 62  |.:. inner%=1 . b|
00006170  6c 6f 63 6b 25 21 32 30  3d 26 43 37 32 30 33 31  |lock%!20=&C72031|
00006180  32 44 20 8b 20 62 6c 6f  63 6b 25 21 32 30 3d 26  |2D . block%!20=&|
00006190  43 37 30 30 33 31 32 44  0d 26 de 2f f3 20 24 28  |C700312D.&./. $(|
000061a0  62 6c 6f 63 6b 25 21 32  34 29 3a 62 6c 6f 63 6b  |block%!24):block|
000061b0  25 21 34 3d 35 32 30 2b  28 28 69 6e 6e 65 72 25  |%!4=520+((inner%|
000061c0  2d 31 29 2a 36 30 29 0d  26 e8 1f 62 6c 6f 63 6b  |-1)*60).&..block|
000061d0  25 21 38 3d 33 39 30 2d  28 28 6c 6f 6f 70 25 2b  |%!8=390-((loop%+|
000061e0  32 29 2a 36 30 29 0d 26  f2 1b 62 6c 6f 63 6b 25  |2)*60).&..block%|
000061f0  21 33 32 3d a9 24 28 62  6c 6f 63 6b 25 21 32 34  |!32=.$(block%!24|
00006200  29 0d 26 fc 19 62 6c 6f  63 6b 25 21 31 32 3d 62  |).&..block%!12=b|
00006210  6c 6f 63 6b 25 21 34 2b  35 30 0d 27 06 19 62 6c  |lock%!4+50.'..bl|
00006220  6f 63 6b 25 21 31 36 3d  62 6c 6f 63 6b 25 21 38  |ock%!16=block%!8|
00006230  2b 35 30 0d 27 10 26 c8  99 20 22 57 69 6d 70 5f  |+50.'.&.. "Wimp_|
00006240  43 72 65 61 74 65 49 63  6f 6e 22 2c 30 2c 62 6c  |CreateIcon",0,bl|
00006250  6f 63 6b 25 20 b8 20 69  25 0d 27 1a 22 66 69 6e  |ock% . i%.'."fin|
00006260  64 5f 69 63 6f 6e 5f 6e  75 6d 28 6c 6f 6f 70 25  |d_icon_num(loop%|
00006270  2c 69 6e 6e 65 72 25 29  3d 69 25 0d 27 24 31 66  |,inner%)=i%.'$1f|
00006280  69 6e 64 5f 69 63 6f 6e  5f 6e 75 6d 28 6c 6f 6f  |ind_icon_num(loo|
00006290  70 25 2c 30 29 3d 66 69  6e 64 5f 69 63 6f 6e 5f  |p%,0)=find_icon_|
000062a0  6e 75 6d 28 6c 6f 6f 70  25 2c 31 29 0d 27 2e 06  |num(loop%,1).'..|
000062b0  ed 2c 0d 27 38 05 e1 0d  27 42 05 3a 0d 27 4c 0f  |.,.'8...'B.:.'L.|
000062c0  dd f2 66 69 6e 64 63 6c  69 63 6b 0d 27 56 26 e7  |..findclick.'V&.|
000062d0  20 62 6c 6f 63 6b 25 21  31 36 20 3d 20 66 6f 6b  | block%!16 = fok|
000062e0  25 20 8c 20 f2 66 69 6e  64 70 65 72 73 6f 6e 3a  |% . .findperson:|
000062f0  e1 0d 27 60 11 e3 20 6c  6f 6f 70 25 3d 31 20 b8  |..'`.. loop%=1 .|
00006300  20 34 0d 27 6a 12 e3 20  69 6e 6e 65 72 25 3d 31  | 4.'j.. inner%=1|
00006310  20 b8 20 36 0d 27 74 2d  e7 20 62 6c 6f 63 6b 25  | . 6.'t-. block%|
00006320  21 31 36 3d 66 69 6e 64  5f 69 63 6f 6e 5f 6e 75  |!16=find_icon_nu|
00006330  6d 28 6c 6f 6f 70 25 2c  69 6e 6e 65 72 25 29 20  |m(loop%,inner%) |
00006340  8c 0d 27 7e 18 20 62 6c  6f 63 6b 25 21 32 30 3d  |..'~. block%!20=|
00006350  66 69 6e 64 77 69 6e 64  25 0d 27 88 25 20 62 6c  |findwind%.'.% bl|
00006360  6f 63 6b 25 21 32 34 3d  66 69 6e 64 5f 69 63 6f  |ock%!24=find_ico|
00006370  6e 5f 6e 75 6d 28 6c 6f  6f 70 25 2c 30 29 0d 27  |n_num(loop%,0).'|
00006380  92 25 20 66 69 6e 64 5f  69 63 6f 6e 5f 6e 75 6d  |.% find_icon_num|
00006390  28 6c 6f 6f 70 25 2c 30  29 3d 62 6c 6f 63 6b 25  |(loop%,0)=block%|
000063a0  21 31 36 0d 27 9c 10 20  62 6c 6f 63 6b 25 21 33  |!16.'.. block%!3|
000063b0  32 3d 30 0d 27 a6 14 20  62 6c 6f 63 6b 25 21 32  |2=0.'.. block%!2|
000063c0  38 3d 31 3c 3c 32 31 0d  27 b0 27 20 c8 99 20 22  |8=1<<21.'.' .. "|
000063d0  57 69 6d 70 5f 53 65 74  49 63 6f 6e 53 74 61 74  |Wimp_SetIconStat|
000063e0  65 22 2c 30 2c 62 6c 6f  63 6b 25 2b 32 30 0d 27  |e",0,block%+20.'|
000063f0  ba 25 20 62 6c 6f 63 6b  25 21 32 34 3d 66 69 6e  |.% block%!24=fin|
00006400  64 5f 69 63 6f 6e 5f 6e  75 6d 28 6c 6f 6f 70 25  |d_icon_num(loop%|
00006410  2c 30 29 0d 27 c4 25 20  66 69 6e 64 5f 69 63 6f  |,0).'.% find_ico|
00006420  6e 5f 6e 75 6d 28 6c 6f  6f 70 25 2c 30 29 3d 62  |n_num(loop%,0)=b|
00006430  6c 6f 63 6b 25 21 31 36  0d 27 ce 10 20 62 6c 6f  |lock%!16.'.. blo|
00006440  63 6b 25 21 33 32 3d 30  0d 27 d8 14 20 62 6c 6f  |ck%!32=0.'.. blo|
00006450  63 6b 25 21 32 38 3d 31  3c 3c 32 31 0d 27 e2 27  |ck%!28=1<<21.'.'|
00006460  20 c8 99 20 22 57 69 6d  70 5f 53 65 74 49 63 6f  | .. "Wimp_SetIco|
00006470  6e 53 74 61 74 65 22 2c  30 2c 62 6c 6f 63 6b 25  |nState",0,block%|
00006480  2b 32 30 0d 27 ec 05 cd  0d 27 f6 06 ed 2c 0d 28  |+20.'....'...,.(|
00006490  00 05 e1 0d 28 0a 05 3a  0d 28 14 10 dd f2 66 69  |....(..:.(....fi|
000064a0  6e 64 70 65 72 73 6f 6e  0d 28 1e 0b ea 20 66 69  |ndperson.(... fi|
000064b0  6e 64 25 0d 28 28 1f f2  63 6f 70 79 66 72 6f 6d  |nd%.((..copyfrom|
000064c0  28 66 69 6e 64 62 6c 6b  25 2c 66 70 65 72 73 64  |(findblk%,fpersd|
000064d0  25 29 0d 28 32 0e 66 69  6e 64 25 3d 6e 69 6c 25  |%).(2.find%=nil%|
000064e0  0d 28 3c 1b f2 66 69 6e  64 72 65 63 75 72 28 72  |.(<..findrecur(r|
000064f0  6f 6f 74 25 2c 66 69 6e  64 25 29 0d 28 46 13 e7  |oot%,find%).(F..|
00006500  20 66 69 6e 64 25 3c 3e  6e 69 6c 25 20 8c 0d 28  | find%<>nil% ..(|
00006510  50 0f 20 73 70 6f 75 73  65 64 25 3d a3 0d 28 5a  |P. spoused%=..(Z|
00006520  15 20 70 65 72 73 6f 6e  6e 6f 64 65 25 3d 6e 69  |. personnode%=ni|
00006530  6c 25 0d 28 64 17 20 63  75 72 72 65 6e 74 5f 70  |l%.(d. current_p|
00006540  65 72 25 3d 66 69 6e 64  25 0d 28 6e 1a 20 f2 63  |er%=find%.(n. .c|
00006550  6f 70 79 74 6f 28 63 75  72 72 65 6e 74 5f 70 65  |opyto(current_pe|
00006560  72 25 29 0d 28 78 05 cc  0d 28 82 05 cd 0d 28 8c  |r%).(x...(....(.|
00006570  15 21 62 6c 6f 63 6b 25  3d 66 69 6e 64 77 69 6e  |.!block%=findwin|
00006580  64 25 0d 28 96 21 c8 99  20 22 57 69 6d 70 5f 43  |d%.(.!.. "Wimp_C|
00006590  6c 6f 73 65 57 69 6e 64  6f 77 22 2c 2c 62 6c 6f  |loseWindow",,blo|
000065a0  63 6b 25 0d 28 a0 2d c8  99 20 22 57 69 6d 70 5f  |ck%.(.-.. "Wimp_|
000065b0  46 6f 72 63 65 52 65 64  72 61 77 22 2c 6d 61 69  |ForceRedraw",mai|
000065c0  6e 25 2c 30 2c 30 2c 31  32 38 30 2c 31 30 32 34  |n%,0,0,1280,1024|
000065d0  0d 28 aa 2d c8 99 20 22  57 69 6d 70 5f 46 6f 72  |.(.-.. "Wimp_For|
000065e0  63 65 52 65 64 72 61 77  22 2c 6f 76 65 72 25 2c  |ceRedraw",over%,|
000065f0  30 2c 30 2c 31 32 38 30  2c 31 30 32 34 0d 28 b4  |0,0,1280,1024.(.|
00006600  05 e1 0d 28 be 05 3a 0d  28 c8 1f dd f2 66 69 6e  |...(..:.(....fin|
00006610  64 72 65 63 75 72 28 6c  72 6f 6f 74 25 2c f8 20  |drecur(lroot%,. |
00006620  66 69 6e 64 25 29 0d 28  d2 15 e7 20 66 69 6e 64  |find%).(... find|
00006630  25 3c 3e 6e 69 6c 25 20  8c 20 e1 0d 28 dc 26 e7  |%<>nil% . ..(.&.|
00006640  20 a4 6d 61 74 63 68 28  6c 72 6f 6f 74 25 29 20  | .match(lroot%) |
00006650  8c 20 66 69 6e 64 25 3d  6c 72 6f 6f 74 25 20 3a  |. find%=lroot% :|
00006660  e1 0d 28 e6 0d 54 25 3d  6c 72 6f 6f 74 25 0d 28  |..(..T%=lroot%.(|
00006670  f0 28 c8 95 20 6c 72 6f  6f 74 25 21 73 70 6f 75  |.(.. lroot%!spou|
00006680  73 65 25 3c 3e 6e 69 6c  25 20 80 20 66 69 6e 64  |se%<>nil% . find|
00006690  25 3d 6e 69 6c 25 0d 28  fa 2c 20 e7 20 a4 6d 61  |%=nil%.(., . .ma|
000066a0  74 63 68 28 6c 72 6f 6f  74 25 21 73 70 6f 75 73  |tch(lroot%!spous|
000066b0  65 25 29 20 8c 20 66 69  6e 64 25 3d 6c 72 6f 6f  |e%) . find%=lroo|
000066c0  74 25 0d 29 04 1a 20 6c  72 6f 6f 74 25 3d 6c 72  |t%.).. lroot%=lr|
000066d0  6f 6f 74 25 21 73 70 6f  75 73 65 25 0d 29 0e 05  |oot%!spouse%.)..|
000066e0  ce 0d 29 18 0d 6c 72 6f  6f 74 25 3d 54 25 0d 29  |..)..lroot%=T%.)|
000066f0  22 3f e7 20 6c 72 6f 6f  74 25 21 73 69 62 6c 69  |"?. lroot%!sibli|
00006700  6e 67 25 3c 3e 6e 69 6c  25 20 8c 20 f2 66 69 6e  |ng%<>nil% . .fin|
00006710  64 72 65 63 75 72 28 6c  72 6f 6f 74 25 21 73 69  |drecur(lroot%!si|
00006720  62 6c 69 6e 67 25 2c 66  69 6e 64 25 29 0d 29 2c  |bling%,find%).),|
00006730  3b e7 20 6c 72 6f 6f 74  25 21 63 68 69 6c 64 25  |;. lroot%!child%|
00006740  3c 3e 6e 69 6c 25 20 8c  20 f2 66 69 6e 64 72 65  |<>nil% . .findre|
00006750  63 75 72 28 6c 72 6f 6f  74 25 21 63 68 69 6c 64  |cur(lroot%!child|
00006760  25 2c 66 69 6e 64 25 29  0d 29 36 05 e1 0d 29 40  |%,find%).)6...)@|
00006770  05 3a 0d 29 4a 13 dd a4  6d 61 74 63 68 28 6c 72  |.:.)J...match(lr|
00006780  6f 6f 74 25 29 0d 29 54  08 ea 20 6d 25 0d 29 5e  |oot%).)T.. m%.)^|
00006790  08 6d 25 3d b9 0d 29 68  11 e3 20 6c 6f 6f 70 25  |.m%=..)h.. loop%|
000067a0  3d 31 20 b8 20 36 0d 29  72 0e c8 8e 20 6c 6f 6f  |=1 . 6.)r... loo|
000067b0  70 25 20 ca 0d 29 7c 2d  20 c9 20 31 20 3a 20 e7  |p% ..)|- . 1 : .|
000067c0  20 24 28 66 70 65 72 73  64 25 29 3c 3e 22 22 20  | $(fpersd%)<>"" |
000067d0  80 20 24 28 6c 72 6f 6f  74 25 29 3c 3e 22 22 20  |. $(lroot%)<>"" |
000067e0  8c 0d 29 86 24 20 20 20  20 20 20 20 20 20 20 20  |..).$           |
000067f0  6d 25 3d a7 24 6c 72 6f  6f 74 25 2c 24 66 70 65  |m%=.$lroot%,$fpe|
00006800  72 73 64 25 29 0d 29 90  0f 20 20 20 20 20 20 20  |rsd%).)..       |
00006810  20 20 20 cd 0d 29 9a 04  0d 29 a4 25 20 20 20 20  |   ..)...).%    |
00006820  20 20 20 20 20 20 e7 20  24 28 66 70 65 72 73 64  |      . $(fpersd|
00006830  25 29 20 3d 22 22 20 8c  20 6d 25 3d b9 0d 29 ae  |%) ="" . m%=..).|
00006840  3f 20 c9 20 32 20 3a 20  e7 20 24 28 66 70 65 72  |? . 2 : . $(fper|
00006850  73 64 25 2b 73 75 72 6e  61 6d 65 25 29 3c 3e 22  |sd%+surname%)<>"|
00006860  22 20 80 20 24 28 6c 72  6f 6f 74 25 2b 73 75 72  |" . $(lroot%+sur|
00006870  6e 61 6d 65 25 29 3c 3e  22 22 20 8c 0d 29 b8 3f  |name%)<>"" ..).?|
00006880  20 20 20 20 20 20 20 20  20 20 20 6d 25 3d 6d 25  |           m%=m%|
00006890  20 80 20 a7 24 28 6c 72  6f 6f 74 25 2b 73 75 72  | . .$(lroot%+sur|
000068a0  6e 61 6d 65 25 29 2c 24  28 66 70 65 72 73 64 25  |name%),$(fpersd%|
000068b0  2b 73 75 72 6e 61 6d 65  25 29 29 0d 29 c2 0f 20  |+surname%)).).. |
000068c0  20 20 20 20 20 20 20 20  20 cd 0d 29 cc 04 0d 29  |         ..)...)|
000068d0  d6 32 20 20 20 20 20 20  20 20 20 20 e7 20 24 28  |.2          . $(|
000068e0  66 70 65 72 73 64 25 2b  73 75 72 6e 61 6d 65 25  |fpersd%+surname%|
000068f0  29 3d 22 22 20 8c 20 6d  25 3d 6d 25 20 80 20 b9  |)="" . m%=m% . .|
00006900  0d 29 e0 48 20 c9 20 33  20 3a 20 e7 20 66 69 6e  |.).H . 3 : . fin|
00006910  64 62 6c 6b 25 21 62 69  72 74 68 64 61 74 65 25  |dblk%!birthdate%|
00006920  3c 3e 30 20 8c 20 6d 25  3d 6d 25 20 80 20 a4 64  |<>0 . m%=m% . .d|
00006930  61 74 65 28 6c 6f 6f 70  25 2c 62 69 72 74 68 64  |ate(loop%,birthd|
00006940  61 74 65 25 2c 6d 25 29  0d 29 ea 48 20 c9 20 34  |ate%,m%).).H . 4|
00006950  20 3a 20 e7 20 66 69 6e  64 62 6c 6b 25 21 64 65  | : . findblk%!de|
00006960  61 74 68 64 61 74 65 25  3c 3e 30 20 8c 20 6d 25  |athdate%<>0 . m%|
00006970  3d 6d 25 20 80 20 a4 64  61 74 65 28 6c 6f 6f 70  |=m% . .date(loop|
00006980  25 2c 64 65 61 74 68 64  61 74 65 25 2c 6d 25 29  |%,deathdate%,m%)|
00006990  0d 29 f4 28 20 c9 20 35  20 3a 20 e7 20 66 69 6e  |.).( . 5 : . fin|
000069a0  64 62 6c 6b 25 21 6d 61  72 72 69 61 67 65 64 61  |dblk%!marriageda|
000069b0  74 65 25 3c 3e 30 20 8c  0d 29 fe 34 20 20 20 20  |te%<>0 ..).4    |
000069c0  20 20 20 20 20 20 20 6d  25 3d 6d 25 20 80 20 a4  |       m%=m% . .|
000069d0  64 61 74 65 28 6c 6f 6f  70 25 2c 6d 61 72 72 69  |date(loop%,marri|
000069e0  61 67 65 64 61 74 65 25  2c 6d 25 29 0d 2a 08 0f  |agedate%,m%).*..|
000069f0  20 20 20 20 20 20 20 20  20 20 cd 0d 2a 12 27 20  |          ..*.' |
00006a00  c9 20 36 20 3a 20 e7 20  66 69 6e 64 62 6c 6b 25  |. 6 : . findblk%|
00006a10  21 64 69 76 6f 72 63 65  64 61 74 65 25 3c 3e 30  |!divorcedate%<>0|
00006a20  20 8c 0d 2a 1c 33 20 20  20 20 20 20 20 20 20 20  | ..*.3          |
00006a30  20 6d 25 3d 6d 25 20 80  20 a4 64 61 74 65 28 6c  | m%=m% . .date(l|
00006a40  6f 6f 70 25 2c 64 69 76  6f 72 63 65 64 61 74 65  |oop%,divorcedate|
00006a50  25 2c 6d 25 29 0d 2a 26  0f 20 20 20 20 20 20 20  |%,m%).*&.       |
00006a60  20 20 20 cd 0d 2a 30 05  cb 0d 2a 3a 05 ed 0d 2a  |   ..*0...*:...*|
00006a70  44 07 3d 6d 25 0d 2a 4e  05 3a 0d 2a 58 17 dd a4  |D.=m%.*N.:.*X...|
00006a80  64 61 74 65 28 6c 6f 6f  70 25 2c 4f 25 2c 6d 25  |date(loop%,O%,m%|
00006a90  29 0d 2a 62 13 ea 20 66  64 61 74 65 25 2c 63 64  |).*b.. fdate%,cd|
00006aa0  61 74 65 25 0d 2a 6c 16  66 64 61 74 65 25 3d 66  |ate%.*l.fdate%=f|
00006ab0  69 6e 64 62 6c 6b 25 21  4f 25 0d 2a 76 14 63 64  |indblk%!O%.*v.cd|
00006ac0  61 74 65 25 3d 6c 72 6f  6f 74 25 21 4f 25 0d 2a  |ate%=lroot%!O%.*|
00006ad0  80 32 e7 20 63 64 61 74  65 25 3d 30 20 80 20 66  |.2. cdate%=0 . f|
00006ae0  64 61 74 65 25 3c 3e 30  20 8c 20 3d a3 20 8b 20  |date%<>0 . =. . |
00006af0  e7 20 63 64 61 74 65 25  3d 30 20 8c 20 3d 6d 25  |. cdate%=0 . =m%|
00006b00  0d 2a 8a 18 c8 8e 20 a4  66 69 6e 64 77 28 6c 6f  |.*.... .findw(lo|
00006b10  6f 70 25 2d 32 29 20 ca  0d 2a 94 1b 20 c9 20 31  |op%-2) ..*.. . 1|
00006b20  20 3a 20 4d 25 3d 66 64  61 74 65 25 3d 63 64 61  | : M%=fdate%=cda|
00006b30  74 65 25 0d 2a 9e 1b 20  c9 20 32 20 3a 20 4d 25  |te%.*.. . 2 : M%|
00006b40  3d 63 64 61 74 65 25 3c  66 64 61 74 65 25 0d 2a  |=cdate%<fdate%.*|
00006b50  a8 1b 20 c9 20 33 20 3a  20 4d 25 3d 63 64 61 74  |.. . 3 : M%=cdat|
00006b60  65 25 3e 66 64 61 74 65  25 0d 2a b2 1c 20 c9 20  |e%>fdate%.*.. . |
00006b70  34 20 3a 20 4d 25 3d 63  64 61 74 65 25 3c 3d 66  |4 : M%=cdate%<=f|
00006b80  64 61 74 65 25 0d 2a bc  1c 20 c9 20 35 20 3a 20  |date%.*.. . 5 : |
00006b90  4d 25 3d 63 64 61 74 65  25 3e 3d 66 64 61 74 65  |M%=cdate%>=fdate|
00006ba0  25 0d 2a c6 1c 20 c9 20  36 20 3a 20 4d 25 3d 63  |%.*.. . 6 : M%=c|
00006bb0  64 61 74 65 25 3c 3e 66  64 61 74 65 25 0d 2a d0  |date%<>fdate%.*.|
00006bc0  05 cb 0d 2a da 07 3d 4d  25 0d 2a e4 05 3a 0d 2a  |...*..=M%.*..:.*|
00006bd0  ee 12 dd a4 66 69 6e 64  77 28 6c 6f 6f 70 25 29  |....findw(loop%)|
00006be0  0d 2a f8 08 ea 20 54 25  0d 2b 02 08 54 25 3d 31  |.*... T%.+..T%=1|
00006bf0  0d 2b 0c 36 c8 95 20 66  69 6e 64 5f 69 63 6f 6e  |.+.6.. find_icon|
00006c00  5f 6e 75 6d 28 6c 6f 6f  70 25 2c 54 25 29 3c 3e  |_num(loop%,T%)<>|
00006c10  66 69 6e 64 5f 69 63 6f  6e 5f 6e 75 6d 28 6c 6f  |find_icon_num(lo|
00006c20  6f 70 25 2c 30 29 0d 2b  16 0c 20 54 25 3d 54 25  |op%,0).+.. T%=T%|
00006c30  2b 31 0d 2b 20 05 ce 0d  2b 2a 07 3d 54 25 0d 2b  |+1.+ ...+*.=T%.+|
00006c40  34 05 3a 0d 2b 3e 0a dd  a4 66 69 6e 64 0d 2b 48  |4.:.+>...find.+H|
00006c50  15 21 62 6c 6f 63 6b 25  3d 66 69 6e 64 77 69 6e  |.!block%=findwin|
00006c60  64 25 0d 2b 52 25 c8 99  20 22 57 69 6d 70 5f 47  |d%.+R%.. "Wimp_G|
00006c70  65 74 57 69 6e 64 6f 77  53 74 61 74 65 22 2c 30  |etWindowState",0|
00006c80  2c 62 6c 6f 63 6b 25 0d  2b 5c 21 c8 99 20 22 57  |,block%.+\!.. "W|
00006c90  69 6d 70 5f 4f 70 65 6e  57 69 6e 64 6f 77 22 2c  |imp_OpenWindow",|
00006ca0  30 2c 62 6c 6f 63 6b 25  0d 2b 66 06 3d 30 0d 2b  |0,block%.+f.=0.+|
00006cb0  70 05 3a 0d 2b 7a 0e dd  a4 6f 76 65 72 76 69 65  |p.:.+z...overvie|
00006cc0  77 0d 2b 84 11 e7 20 6f  76 65 72 76 69 65 77 25  |w.+... overview%|
00006cd0  20 8c 0d 2b 8e 1e 20 6f  76 65 72 76 69 65 77 25  | ..+.. overview%|
00006ce0  3d a3 3a 21 62 6c 6f 63  6b 25 3d 6f 76 65 72 25  |=.:!block%=over%|
00006cf0  0d 2b 98 26 20 c8 99 20  22 57 69 6d 70 5f 47 65  |.+.& .. "Wimp_Ge|
00006d00  74 57 69 6e 64 6f 77 53  74 61 74 65 22 2c 30 2c  |tWindowState",0,|
00006d10  62 6c 6f 63 6b 25 0d 2b  a2 23 20 c8 99 20 22 57  |block%.+.# .. "W|
00006d20  69 6d 70 5f 43 6c 6f 73  65 57 69 6e 64 6f 77 22  |imp_CloseWindow"|
00006d30  2c 30 2c 62 6c 6f 63 6b  25 0d 2b ac 05 cc 0d 2b  |,0,block%.+....+|
00006d40  b6 10 20 6f 76 65 72 76  69 65 77 25 3d b9 0d 2b  |.. overview%=..+|
00006d50  c0 12 20 21 62 6c 6f 63  6b 25 3d 6f 76 65 72 25  |.. !block%=over%|
00006d60  0d 2b ca 11 20 61 64 64  73 74 61 74 75 73 25 3d  |.+.. addstatus%=|
00006d70  b9 0d 2b d4 26 20 c8 99  20 22 57 69 6d 70 5f 47  |..+.& .. "Wimp_G|
00006d80  65 74 57 69 6e 64 6f 77  53 74 61 74 65 22 2c 30  |etWindowState",0|
00006d90  2c 62 6c 6f 63 6b 25 0d  2b de 22 20 c8 99 20 22  |,block%.+." .. "|
00006da0  57 69 6d 70 5f 4f 70 65  6e 57 69 6e 64 6f 77 22  |Wimp_OpenWindow"|
00006db0  2c 30 2c 62 6c 6f 63 6b  25 0d 2b e8 05 cd 0d 2b  |,0,block%.+....+|
00006dc0  f2 06 3d 30 0d 2b fc 05  3a 0d 2c 06 10 dd f2 72  |..=0.+..:.,....r|
00006dd0  65 64 72 61 77 6f 76 65  72 0d 2c 10 15 20 f2 64  |edrawover.,.. .d|
00006de0  72 61 77 74 72 65 65 28  72 6f 6f 74 25 29 0d 2c  |rawtree(root%).,|
00006df0  1a 05 e1 0d 2c 24 05 3a  0d 2c 2e 32 dd f2 6d 61  |....,$.:.,.2..ma|
00006e00  6b 65 74 72 65 65 28 6c  72 6f 6f 74 25 2c 78 25  |ketree(lroot%,x%|
00006e10  2c 79 25 2c 6d 78 25 2c  6d 79 25 2c 20 f8 20 63  |,y%,mx%,my%, . c|
00006e20  25 20 2c 20 64 72 61 77  25 29 0d 2c 38 1c ea 20  |% , draw%).,8.. |
00006e30  67 25 2c 6f 78 25 3a 72  25 3d 33 32 2a 73 63 61  |g%,ox%:r%=32*sca|
00006e40  6c 65 6f 76 65 72 0d 2c  42 15 e7 20 6c 72 6f 6f  |leover.,B.. lroo|
00006e50  74 25 3d 6e 69 6c 25 20  8c 20 e1 0d 2c 4c 12 6c  |t%=nil% . ..,L.l|
00006e60  72 6f 6f 74 25 21 63 6f  6c 25 3d 78 25 0d 2c 56  |root%!col%=x%.,V|
00006e70  12 6c 72 6f 6f 74 25 21  72 6f 77 25 3d 79 25 0d  |.lroot%!row%=y%.|
00006e80  2c 60 1b 63 6f 6c 75 6d  6e 25 28 6c 72 6f 6f 74  |,`.column%(lroot|
00006e90  25 21 67 65 6e 25 29 3d  78 25 0d 2c 6a 36 e7 20  |%!gen%)=x%.,j6. |
00006ea0  ac 28 64 72 61 77 25 29  20 8c 20 63 25 3d a4 63  |.(draw%) . c%=.c|
00006eb0  68 65 63 6b 28 78 25 2c  79 25 2c 72 25 2c 6d 78  |heck(x%,y%,r%,mx|
00006ec0  25 2c 6d 79 25 2c 63 25  2c 6c 72 6f 6f 74 25 29  |%,my%,c%,lroot%)|
00006ed0  0d 2c 74 1b e7 20 6c 72  6f 6f 74 25 21 63 68 69  |.,t.. lroot%!chi|
00006ee0  6c 64 25 3c 3e 6e 69 6c  25 20 8c 0d 2c 7e 0a 6f  |ld%<>nil% ..,~.o|
00006ef0  78 25 3d 78 25 0d 2c 88  25 20 78 25 3d 78 25 2d  |x%=x%.,.% x%=x%-|
00006f00  28 72 25 2a 32 2e 35 29  2a a8 28 a4 63 65 6e 28  |(r%*2.5)*.(.cen(|
00006f10  6c 72 6f 6f 74 25 29 2f  32 29 0d 2c 92 23 20 e7  |lroot%)/2).,.# .|
00006f20  20 63 6f 6c 75 6d 6e 25  28 31 2b 6c 72 6f 6f 74  | column%(1+lroot|
00006f30  25 21 67 65 6e 25 29 3e  3d 78 25 20 8c 0d 2c 9c  |%!gen%)>=x% ..,.|
00006f40  26 20 20 78 25 3d 63 6f  6c 75 6d 6e 25 28 31 2b  |&  x%=column%(1+|
00006f50  6c 72 6f 6f 74 25 21 67  65 6e 25 29 2b 32 2e 35  |lroot%!gen%)+2.5|
00006f60  2a 72 25 0d 2c a6 1f 20  20 63 6f 6c 75 6d 6e 25  |*r%.,..  column%|
00006f70  28 31 2b 6c 72 6f 6f 74  25 21 67 65 6e 25 29 3d  |(1+lroot%!gen%)=|
00006f80  78 25 0d 2c b0 06 20 cc  0d 2c ba 1f 20 20 63 6f  |x%.,.. ..,..  co|
00006f90  6c 75 6d 6e 25 28 31 2b  6c 72 6f 6f 74 25 21 67  |lumn%(1+lroot%!g|
00006fa0  65 6e 25 29 3d 78 25 0d  2c c4 06 20 cd 0d 2c ce  |en%)=x%.,.. ..,.|
00006fb0  3f 20 f2 6d 61 6b 65 74  72 65 65 28 6c 72 6f 6f  |? .maketree(lroo|
00006fc0  74 25 21 63 68 69 6c 64  25 2c 78 25 2c 79 25 2d  |t%!child%,x%,y%-|
00006fd0  72 25 2a 32 2e 37 35 2c  6d 78 25 2c 6d 79 25 2c  |r%*2.75,mx%,my%,|
00006fe0  20 63 25 2c 20 20 64 72  61 77 25 29 0d 2c d8 0b  | c%,  draw%).,..|
00006ff0  20 78 25 3d 6f 78 25 0d  2c e2 05 cd 0d 2c ec 40  | x%=ox%.,....,.@|
00007000  20 f2 6d 61 6b 65 74 72  65 65 28 6c 72 6f 6f 74  | .maketree(lroot|
00007010  25 21 73 69 62 6c 69 6e  67 25 2c 78 25 2b 72 25  |%!sibling%,x%+r%|
00007020  2a 32 2e 35 2c 79 25 2c  6d 78 25 2c 6d 79 25 2c  |*2.5,y%,mx%,my%,|
00007030  20 63 25 2c 20 20 64 72  61 77 25 29 0d 2c f6 05  | c%,  draw%).,..|
00007040  e1 0d 2d 00 05 3a 0d 2d  0a 16 dd f2 64 72 61 77  |..-..:.-....draw|
00007050  74 72 65 65 28 6c 72 6f  6f 74 25 29 0d 2d 14 1b  |tree(lroot%).-..|
00007060  ea 20 67 25 2c 72 25 3a  72 25 3d 33 32 2a 73 63  |. g%,r%:r%=32*sc|
00007070  61 6c 65 6f 76 65 72 0d  2d 1e 15 e7 20 6c 72 6f  |aleover.-... lro|
00007080  6f 74 25 3d 6e 69 6c 25  20 8c 20 e1 0d 2d 28 21  |ot%=nil% . ..-(!|
00007090  78 25 3d 6c 72 6f 6f 74  25 21 63 6f 6c 25 3a 79  |x%=lroot%!col%:y|
000070a0  25 3d 6c 72 6f 6f 74 25  21 72 6f 77 25 0d 2d 32  |%=lroot%!row%.-2|
000070b0  33 e7 20 6c 72 6f 6f 74  25 21 67 65 6e 25 3c 3e  |3. lroot%!gen%<>|
000070c0  30 20 8c 20 ec 20 78 25  2c 79 25 2b 72 25 3a df  |0 . . x%,y%+r%:.|
000070d0  20 78 25 2c 79 25 2b 28  72 25 2a 31 2e 32 35 29  | x%,y%+(r%*1.25)|
000070e0  0d 2d 3c 3c e7 20 6c 72  6f 6f 74 25 21 67 65 6e  |.-<<. lroot%!gen|
000070f0  25 3d 30 20 80 20 6c 72  6f 6f 74 25 3c 3e 72 6f  |%=0 . lroot%<>ro|
00007100  6f 74 25 20 8c 20 ec 20  78 25 2c 79 25 3a df 20  |ot% . . x%,y%:. |
00007110  78 25 2d 31 2e 35 2a 72  25 2c 79 25 0d 2d 46 2e  |x%-1.5*r%,y%.-F.|
00007120  e7 20 6c 72 6f 6f 74 25  21 73 69 62 6c 69 6e 67  |. lroot%!sibling|
00007130  25 3c 3e 6e 69 6c 25 20  80 20 6c 72 6f 6f 74 25  |%<>nil% . lroot%|
00007140  21 67 65 6e 25 3c 3e 30  20 8c 0d 2d 50 14 20 ec  |!gen%<>0 ..-P. .|
00007150  20 78 25 2c 79 25 2b 72  25 2a 31 2e 32 35 0d 2d  | x%,y%+r%*1.25.-|
00007160  5a 1b 20 df 20 78 25 2b  32 2e 35 2a 72 25 2c 79  |Z. . x%+2.5*r%,y|
00007170  25 2b 72 25 2a 31 2e 32  35 0d 2d 64 05 cd 0d 2d  |%+r%*1.25.-d...-|
00007180  6e 28 e7 20 6c 72 6f 6f  74 25 3d 63 75 72 72 65  |n(. lroot%=curre|
00007190  6e 74 5f 70 65 72 25 20  8c 20 67 25 3d 38 20 8b  |nt_per% . g%=8 .|
000071a0  20 67 25 3d 31 32 0d 2d  78 2b e7 20 73 70 6f 75  | g%=12.-x+. spou|
000071b0  73 65 64 25 20 80 20 70  65 72 73 6f 6e 6e 6f 64  |sed% . personnod|
000071c0  65 25 3d 6c 72 6f 6f 74  25 20 8c 20 67 25 3d 31  |e%=lroot% . g%=1|
000071d0  33 0d 2d 82 1a c8 99 20  22 57 69 6d 70 5f 53 65  |3.-.... "Wimp_Se|
000071e0  74 43 6f 6c 6f 75 72 22  2c 67 25 0d 2d 8c 12 c8  |tColour",g%.-...|
000071f0  8f 20 c8 90 20 78 25 2c  79 25 2c 72 25 0d 2d 96  |. .. x%,y%,r%.-.|
00007200  19 c8 99 20 22 57 69 6d  70 5f 53 65 74 43 6f 6c  |... "Wimp_SetCol|
00007210  6f 75 72 22 2c 37 0d 2d  a0 0f c8 8f 20 78 25 2c  |our",7.-.... x%,|
00007220  79 25 2c 72 25 0d 2d aa  1b e7 20 6c 72 6f 6f 74  |y%,r%.-... lroot|
00007230  25 21 63 68 69 6c 64 25  3c 3e 6e 69 6c 25 20 8c  |%!child%<>nil% .|
00007240  0d 2d b4 1f 20 ec 20 78  25 2c 79 25 2d 72 25 3a  |.-.. . x%,y%-r%:|
00007250  df 20 78 25 2c 79 25 2d  72 25 2a 31 2e 32 35 0d  |. x%,y%-r%*1.25.|
00007260  2d be 1e 20 6f 78 25 3d  21 28 6c 72 6f 6f 74 25  |-.. ox%=!(lroot%|
00007270  21 63 68 69 6c 64 25 2b  63 6f 6c 25 29 0d 2d c8  |!child%+col%).-.|
00007280  19 20 6e 25 3d a8 28 a4  63 65 6e 28 6c 72 6f 6f  |. n%=.(.cen(lroo|
00007290  74 25 29 2f 32 29 0d 2d  d2 14 20 e7 20 6f 78 25  |t%)/2).-.. . ox%|
000072a0  3d 78 25 20 8c 20 6e 25  3d 30 0d 2d dc 1f 20 df  |=x% . n%=0.-.. .|
000072b0  20 6f 78 25 2b 6e 25 2a  72 25 2a 32 2e 35 2c 79  | ox%+n%*r%*2.5,y|
000072c0  25 2d 72 25 2a 31 2e 32  35 0d 2d e6 1f 20 df 20  |%-r%*1.25.-.. . |
000072d0  6f 78 25 2b 6e 25 2a 72  25 2a 32 2e 35 2c 79 25  |ox%+n%*r%*2.5,y%|
000072e0  2d 72 25 2a 31 2e 37 35  0d 2d f0 05 cd 0d 2d fa  |-r%*1.75.-....-.|
000072f0  1c f2 64 72 61 77 74 72  65 65 28 6c 72 6f 6f 74  |..drawtree(lroot|
00007300  25 21 63 68 69 6c 64 25  29 0d 2e 04 1e f2 64 72  |%!child%).....dr|
00007310  61 77 74 72 65 65 28 6c  72 6f 6f 74 25 21 73 69  |awtree(lroot%!si|
00007320  62 6c 69 6e 67 25 29 0d  2e 0e 05 e1 0d 2e 18 05  |bling%).........|
00007330  3a 0d 2e 22 27 dd a4 63  68 65 63 6b 28 78 25 2c  |:.."'..check(x%,|
00007340  79 25 2c 72 25 2c 6d 78  25 2c 6d 79 25 2c 63 25  |y%,r%,mx%,my%,c%|
00007350  2c 6c 72 6f 6f 74 25 29  0d 2e 2c 1f e7 20 6d 78  |,lroot%)..,.. mx|
00007360  25 3e 3d 78 25 2d 72 25  20 80 20 6d 78 25 3c 3d  |%>=x%-r% . mx%<=|
00007370  78 25 2b 72 25 20 8c 0d  2e 36 2a 20 e7 20 6d 79  |x%+r% ...6* . my|
00007380  25 3e 3d 79 25 2d 72 25  20 80 20 6d 79 25 3c 3d  |%>=y%-r% . my%<=|
00007390  79 25 2b 72 25 20 8c 20  63 25 3d 6c 72 6f 6f 74  |y%+r% . c%=lroot|
000073a0  25 0d 2e 40 05 cd 0d 2e  4a 07 3d 63 25 0d 2e 54  |%..@....J.=c%..T|
000073b0  05 3a 0d 2e 5e 11 dd a4  63 65 6e 28 6c 72 6f 6f  |.:..^...cen(lroo|
000073c0  74 25 29 0d 2e 68 08 ea  20 54 25 0d 2e 72 18 6c  |t%)..h.. T%..r.l|
000073d0  72 6f 6f 74 25 3d 6c 72  6f 6f 74 25 21 63 68 69  |root%=lroot%!chi|
000073e0  6c 64 25 0d 2e 7c 20 20  e7 20 6c 72 6f 6f 74 25  |ld%..|  . lroot%|
000073f0  21 73 69 62 6c 69 6e 67  25 3d 6e 69 6c 25 20 8c  |!sibling%=nil% .|
00007400  20 3d 30 0d 2e 86 08 54  25 3d 30 0d 2e 90 13 c8  | =0....T%=0.....|
00007410  95 20 6c 72 6f 6f 74 25  3c 3e 6e 69 6c 25 0d 2e  |. lroot%<>nil%..|
00007420  9a 0a 20 54 25 2b 3d 31  0d 2e a4 1b 20 6c 72 6f  |.. T%+=1.... lro|
00007430  6f 74 25 3d 6c 72 6f 6f  74 25 21 73 69 62 6c 69  |ot%=lroot%!sibli|
00007440  6e 67 25 0d 2e ae 05 ce  0d 2e b8 07 3d 54 25 0d  |ng%.........=T%.|
00007450  2e c2 05 3a 0d 2e cc 1e  dd f2 63 72 65 61 74 65  |...:......create|
00007460  5f 6d 65 6e 75 28 6d 65  6e 78 25 2c 6d 65 6e 79  |_menu(menx%,meny|
00007470  25 29 0d 2e d6 59 6d 65  6e 75 24 3d 22 4d 61 69  |%)...Ymenu$="Mai|
00007480  6e 20 4d 65 6e 75 7c 2a  40 7e 53 61 76 65 20 54  |n Menu|*@~Save T|
00007490  72 65 65 60 66 69 6c 65  77 69 6e 64 6f 77 25 60  |ree`filewindow%`|
000074a0  7c 42 72 6f 77 73 65 3c  62 72 6f 77 73 65 6d 65  ||Browse<browseme|
000074b0  6e 75 24 3e 7c 2a 4f 75  74 70 75 74 3c 6f 75 74  |nu$>|*Output<out|
000074c0  70 75 74 6d 65 6e 75 24  3e 7c 22 0d 2e e0 2b e7  |putmenu$>|"...+.|
000074d0  20 72 6f 6f 74 25 3c 3e  6e 69 6c 25 20 8c 20 6d  | root%<>nil% . m|
000074e0  65 6e 75 24 3d a4 73 74  72 69 70 73 74 61 72 28  |enu$=.stripstar(|
000074f0  6d 65 6e 75 24 29 0d 2e  ea 76 62 72 6f 77 73 65  |menu$)...vbrowse|
00007500  6d 65 6e 75 24 3d 22 42  72 6f 77 73 65 7c 2a 46  |menu$="Browse|*F|
00007510  69 6e 64 7b 66 69 6e 64  7d 7c 40 5e 4f 76 65 72  |ind{find}|@^Over|
00007520  76 69 65 77 7b 6f 76 65  72 76 69 65 77 7d 7c 40  |view{overview}|@|
00007530  5e 56 69 65 77 20 44 61  74 61 7b 64 61 74 61 77  |^View Data{dataw|
00007540  69 6e 64 6f 77 7d 7c 2a  44 65 6c 65 74 65 3c 64  |indow}|*Delete<d|
00007550  65 6c 65 74 65 6d 65 6e  75 24 3e 7c 2a 41 64 64  |eletemenu$>|*Add|
00007560  3c 61 64 64 6d 65 6e 75  24 3e 7c 22 0d 2e f4 43  |<addmenu$>|"...C|
00007570  64 65 6c 65 74 65 6d 65  6e 75 24 3d 22 44 65 6c  |deletemenu$="Del|
00007580  65 74 65 7c 2a 50 61 72  65 6e 74 73 7b 64 65 6c  |ete|*Parents{del|
00007590  65 74 65 61 62 6f 76 65  7d 7c 50 65 72 73 6f 6e  |eteabove}|Person|
000075a0  7b 64 65 6c 65 74 65 62  65 6c 6f 77 7d 7c 22 0d  |{deletebelow}|".|
000075b0  2e fe 37 e7 20 72 6f 6f  74 25 3c 3e 6e 69 6c 25  |..7. root%<>nil%|
000075c0  20 8c 20 62 72 6f 77 73  65 6d 65 6e 75 24 3d a4  | . browsemenu$=.|
000075d0  73 74 72 69 70 73 74 61  72 28 62 72 6f 77 73 65  |stripstar(browse|
000075e0  6d 65 6e 75 24 29 0d 2f  08 40 e7 20 63 75 72 72  |menu$)./.@. curr|
000075f0  65 6e 74 5f 70 65 72 25  21 67 65 6e 25 3c 3e 30  |ent_per%!gen%<>0|
00007600  20 8c 20 64 65 6c 65 74  65 6d 65 6e 75 24 3d a4  | . deletemenu$=.|
00007610  73 74 72 69 70 73 74 61  72 28 64 65 6c 65 74 65  |stripstar(delete|
00007620  6d 65 6e 75 24 29 0d 2f  12 27 e7 6f 76 65 72 76  |menu$)./.'.overv|
00007630  69 65 77 25 20 8c 20 c1  62 72 6f 77 73 65 6d 65  |iew% . .browseme|
00007640  6e 75 24 2c 32 31 2c 31  29 3d 22 23 22 0d 2f 1c  |nu$,21,1)="#"./.|
00007650  27 e7 64 61 74 61 76 69  65 77 25 20 8c 20 c1 62  |'.dataview% . .b|
00007660  72 6f 77 73 65 6d 65 6e  75 24 2c 34 32 2c 31 29  |rowsemenu$,42,1)|
00007670  3d 22 23 22 0d 2f 26 5e  6f 75 74 70 75 74 6d 65  |="#"./&^outputme|
00007680  6e 75 24 3d 22 4f 75 74  70 75 74 7c 7e 4d 61 69  |nu$="Output|~Mai|
00007690  6e 20 4c 69 6e 65 60 66  69 6c 65 77 69 6e 64 6f  |n Line`filewindo|
000076a0  77 25 60 7c 7e 46 75 6c  6c 20 54 72 65 65 60 66  |w%`|~Full Tree`f|
000076b0  69 6c 65 77 69 6e 64 6f  77 25 60 7c 7e 45 78 70  |ilewindow%`|~Exp|
000076c0  6f 72 74 60 66 69 6c 65  77 69 6e 64 6f 77 25 60  |ort`filewindow%`|
000076d0  7c 22 0d 2f 30 5c 61 64  64 6d 65 6e 75 24 3d 22  ||"./0\addmenu$="|
000076e0  41 64 64 7c 43 68 69 6c  64 7b 61 64 64 5f 63 68  |Add|Child{add_ch|
000076f0  69 6c 64 7d 7c 53 69 62  6c 69 6e 67 7b 61 64 64  |ild}|Sibling{add|
00007700  5f 73 69 62 7d 7c 2a 50  61 72 65 6e 74 7b 61 64  |_sib}|*Parent{ad|
00007710  64 5f 70 61 72 65 6e 74  7d 7c 53 70 6f 75 73 65  |d_parent}|Spouse|
00007720  7b 61 64 64 5f 73 70 6f  75 73 65 7d 7c 22 0d 2f  |{add_spouse}|"./|
00007730  3a 47 e7 20 72 6f 6f 74  25 3c 3e 6e 69 6c 25 20  |:G. root%<>nil% |
00007740  80 20 63 75 72 72 65 6e  74 5f 70 65 72 25 21 67  |. current_per%!g|
00007750  65 6e 25 3d 30 20 8c 20  61 64 64 6d 65 6e 75 24  |en%=0 . addmenu$|
00007760  3d a4 73 74 72 69 70 73  74 61 72 28 61 64 64 6d  |=.stripstar(addm|
00007770  65 6e 75 24 29 0d 2f 44  11 6d 65 6e 75 25 3d 6d  |enu$)./D.menu%=m|
00007780  65 6e 62 6c 6b 25 0d 2f  4e 1a f2 6d 61 6b 65 6d  |enblk%./N..makem|
00007790  65 6e 75 28 6d 65 6e 75  24 2c 6d 65 6e 75 25 29  |enu(menu$,menu%)|
000077a0  0d 2f 58 2d c8 99 20 22  57 69 6d 70 5f 43 72 65  |./X-.. "Wimp_Cre|
000077b0  61 74 65 4d 65 6e 75 22  2c 2c 6d 65 6e 62 6c 6b  |ateMenu",,menblk|
000077c0  25 2c 6d 65 6e 78 25 2c  6d 65 6e 79 25 0d 2f 62  |%,menx%,meny%./b|
000077d0  17 63 75 72 72 65 6e 74  5f 6d 65 6e 75 24 3d 6d  |.current_menu$=m|
000077e0  65 6e 75 24 0d 2f 6c 05  e1 0d 2f 76 05 3a 0d 2f  |enu$./l.../v.:./|
000077f0  80 1e dd f2 6d 61 6b 65  6d 65 6e 75 28 6d 65 6e  |....makemenu(men|
00007800  75 24 2c 20 f8 20 6d 65  6d 25 20 29 0d 2f 8a 27  |u$, . mem% )./.'|
00007810  ea 20 74 24 2c 6c 6f 6f  70 25 2c 73 74 72 69 6e  |. t$,loop%,strin|
00007820  67 74 72 61 63 65 25 2c  69 25 2c 6d 65 6d 63 6f  |gtrace%,i%,memco|
00007830  70 79 25 0d 2f 94 1a 74  24 3d 6d 65 6e 75 24 3a  |py%./..t$=menu$:|
00007840  6d 65 6d 63 6f 70 79 25  3d 6d 65 6d 25 0d 2f 9e  |memcopy%=mem%./.|
00007850  19 24 6d 65 6d 25 3d c0  74 24 2c a7 74 24 2c 22  |.$mem%=.t$,.t$,"|
00007860  7c 22 29 2d 31 29 0d 2f  a8 16 74 24 3d c1 74 24  ||")-1)./..t$=.t$|
00007870  2c a7 74 24 2c 22 7c 22  29 2b 31 29 0d 2f b2 0d  |,.t$,"|")+1)./..|
00007880  6d 65 6d 25 3f 31 32 3d  37 0d 2f bc 0d 6d 65 6d  |mem%?12=7./..mem|
00007890  25 3f 31 33 3d 32 0d 2f  c6 0d 6d 65 6d 25 3f 31  |%?13=2./..mem%?1|
000078a0  34 3d 37 0d 2f d0 0d 6d  65 6d 25 3f 31 35 3d 30  |4=7./..mem%?15=0|
000078b0  0d 2f da 0f 6d 65 6d 25  21 31 36 3d 31 37 32 0d  |./..mem%!16=172.|
000078c0  2f e4 0e 6d 65 6d 25 21  32 30 3d 34 34 0d 2f ee  |/..mem%!20=44./.|
000078d0  0d 6d 65 6d 25 21 32 34  3d 30 0d 2f f8 13 6d 65  |.mem%!24=0./..me|
000078e0  6d 25 21 32 38 3d 6d 65  6d 25 2b 33 32 0d 30 02  |m%!28=mem%+32.0.|
000078f0  0d 20 6d 65 6d 25 2b 3d  32 38 0d 30 0c 11 6d 65  |. mem%+=28.0..me|
00007900  6d 63 6f 70 79 25 3d 6d  65 6d 25 0d 30 16 1f 70  |mcopy%=mem%.0..p|
00007910  72 65 24 3d 22 2a 40 23  25 5e 7e 22 3a 70 6f 73  |re$="*@#%^~":pos|
00007920  74 24 3d 22 7b 5b 3c 7c  60 22 0d 30 20 05 f5 0d  |t$="{[<|`".0 ...|
00007930  30 2a 16 20 66 6c 61 67  73 25 3d 30 3a 73 68 61  |0*. flags%=0:sha|
00007940  64 65 25 3d a3 0d 30 34  18 20 c8 95 20 a7 70 72  |de%=..04. .. .pr|
00007950  65 24 2c c0 74 24 2c 31  29 29 3c 3e 30 0d 30 3e  |e$,.t$,1))<>0.0>|
00007960  11 20 20 c8 8e 20 c0 74  24 2c 31 29 20 ca 0d 30  |.  .. .t$,1) ..0|
00007970  48 17 20 20 20 c9 20 22  2a 22 20 3a 20 73 68 61  |H.   . "*" : sha|
00007980  64 65 25 3d b9 0d 30 52  18 20 20 20 c9 20 22 40  |de%=..0R.   . "@|
00007990  22 20 3a 20 66 6c 61 67  73 25 2b 3d 32 0d 30 5c  |" : flags%+=2.0\|
000079a0  18 20 20 20 c9 20 22 25  22 20 3a 20 66 6c 61 67  |.   . "%" : flag|
000079b0  73 25 2b 3d 34 0d 30 66  18 20 20 20 c9 20 22 23  |s%+=4.0f.   . "#|
000079c0  22 20 3a 20 66 6c 61 67  73 25 2b 3d 31 0d 30 70  |" : flags%+=1.0p|
000079d0  18 20 20 20 c9 20 22 7e  22 20 3a 20 66 6c 61 67  |.   . "~" : flag|
000079e0  73 25 2b 3d 38 0d 30 7a  07 20 20 cb 0d 30 84 0f  |s%+=8.0z.  ..0..|
000079f0  20 20 74 24 3d c1 74 24  2c 32 29 0d 30 8e 06 20  |  t$=.t$,2).0.. |
00007a00  ce 0d 30 98 23 20 e7 20  a7 74 24 2c 22 7c 22 29  |..0.# . .t$,"|")|
00007a10  3d a9 28 74 24 29 20 8c  20 66 6c 61 67 73 25 2b  |=.(t$) . flags%+|
00007a20  3d 26 38 30 0d 30 a2 12  20 6d 65 6d 25 21 30 3d  |=&80.0.. mem%!0=|
00007a30  66 6c 61 67 73 25 0d 30  ac 0e 20 6d 65 6d 25 21  |flags%.0.. mem%!|
00007a40  34 3d 2d 31 0d 30 b6 31  20 e7 20 73 68 61 64 65  |4=-1.0.1 . shade|
00007a50  25 20 8c 20 6d 65 6d 25  21 38 3d 26 37 34 30 30  |% . mem%!8=&7400|
00007a60  30 32 31 20 8b 20 6d 65  6d 25 21 38 3d 26 37 30  |021 . mem%!8=&70|
00007a70  30 30 30 32 31 0d 30 c0  16 20 e7 20 28 66 6c 61  |00021.0.. . (fla|
00007a80  67 73 25 80 34 29 3c 3e  34 20 8c 0d 30 ca 15 20  |gs%.4)<>4 ..0.. |
00007a90  20 6c 6f 6f 70 25 3d 30  3a 69 25 3d 31 30 30 30  | loop%=0:i%=1000|
00007aa0  0d 30 d4 07 20 20 f5 0d  30 de 0f 20 20 20 6c 6f  |.0..  ..0..   lo|
00007ab0  6f 70 25 2b 3d 31 0d 30  e8 1e 20 20 20 6c 25 3d  |op%+=1.0..   l%=|
00007ac0  a7 74 24 2c c1 70 6f 73  74 24 2c 6c 6f 6f 70 25  |.t$,.post$,loop%|
00007ad0  2c 31 29 29 0d 30 f2 1e  20 20 20 e7 20 69 25 3e  |,1)).0..   . i%>|
00007ae0  6c 25 20 80 20 6c 25 3c  3e 30 20 8c 20 69 25 3d  |l% . l%<>0 . i%=|
00007af0  6c 25 0d 30 fc 16 20 20  fd 20 6c 6f 6f 70 25 3d  |l%.0..  . loop%=|
00007b00  a9 28 70 6f 73 74 24 29  0d 31 06 1a 20 20 24 28  |.(post$).1..  $(|
00007b10  6d 65 6d 25 2b 31 32 29  3d c0 74 24 2c 69 25 2d  |mem%+12)=.t$,i%-|
00007b20  31 29 0d 31 10 18 20 20  74 24 3d c1 74 24 2c a7  |1).1..  t$=.t$,.|
00007b30  74 24 2c 22 7c 22 29 2b  31 29 0d 31 1a 06 20 cc  |t$,"|")+1).1.. .|
00007b40  0d 31 24 15 20 20 6d 65  6d 25 21 38 3d 26 37 30  |.1$.  mem%!8=&70|
00007b50  30 30 46 32 39 0d 31 2e  13 20 20 21 28 6d 65 6d  |00F29.1..  !(mem|
00007b60  25 2b 31 36 29 3d 2d 31  0d 31 38 13 20 20 69 25  |%+16)=-1.18.  i%|
00007b70  3d a7 74 24 2c 22 5b 22  29 2b 31 0d 31 42 27 20  |=.t$,"[")+1.1B' |
00007b80  20 21 28 6d 65 6d 25 2b  31 32 29 3d a0 28 c1 74  | !(mem%+12)=.(.t|
00007b90  24 2c 69 25 2c a7 74 24  2c 22 2c 22 29 2d 69 25  |$,i%,.t$,",")-i%|
00007ba0  29 29 0d 31 4c 13 20 20  69 25 3d a7 74 24 2c 22  |)).1L.  i%=.t$,"|
00007bb0  2c 22 29 2b 31 0d 31 56  27 20 20 21 28 6d 65 6d  |,")+1.1V'  !(mem|
00007bc0  25 2b 32 30 29 3d a0 28  c1 74 24 2c 69 25 2c a7  |%+20)=.(.t$,i%,.|
00007bd0  74 24 2c 22 5d 22 29 2d  69 25 29 29 0d 31 60 18  |t$,"]")-i%)).1`.|
00007be0  20 20 74 24 3d c1 74 24  2c a7 74 24 2c 22 7c 22  |  t$=.t$,.t$,"|"|
00007bf0  29 2b 31 29 0d 31 6a 06  20 cd 0d 31 74 11 20 6d  |)+1).1j. ..1t. m|
00007c00  65 6d 25 3d 6d 65 6d 25  2b 32 34 0d 31 7e 0b fd  |em%=mem%+24.1~..|
00007c10  20 74 24 3d 22 22 0d 31  88 0c 74 24 3d 6d 65 6e  | t$="".1..t$=men|
00007c20  75 24 0d 31 92 2a 6c 6f  6f 70 25 3d 6d 65 6d 63  |u$.1.*loop%=memc|
00007c30  6f 70 79 25 3a 73 74 72  69 6e 67 74 72 61 63 65  |opy%:stringtrace|
00007c40  25 3d a7 74 24 2c 22 7c  22 29 2b 31 0d 31 9c 05  |%=.t$,"|")+1.1..|
00007c50  f5 0d 31 a6 05 f5 0d 31  b0 14 20 73 74 72 69 6e  |..1....1.. strin|
00007c60  67 74 72 61 63 65 25 2b  3d 31 0d 31 ba 23 20 69  |gtrace%+=1.1.# i|
00007c70  25 3d a7 22 7c 3c 60 22  2c c1 74 24 2c 73 74 72  |%=."|<`",.t$,str|
00007c80  69 6e 67 74 72 61 63 65  25 2c 31 29 29 0d 31 c4  |ingtrace%,1)).1.|
00007c90  0b fd 20 69 25 3c 3e 30  0d 31 ce 2b e7 20 69 25  |.. i%<>0.1.+. i%|
00007ca0  3d 31 20 8c 20 6c 6f 6f  70 25 3d 6c 6f 6f 70 25  |=1 . loop%=loop%|
00007cb0  2b 32 34 3a 73 74 72 69  6e 67 74 72 61 63 65 25  |+24:stringtrace%|
00007cc0  2b 3d 31 0d 31 d8 0c e7  20 69 25 3d 32 20 8c 0d  |+=1.1... i%=2 ..|
00007cd0  31 e2 14 20 21 28 6c 6f  6f 70 25 2b 34 29 3d 6d  |1.. !(loop%+4)=m|
00007ce0  65 6d 25 0d 31 ec 40 20  73 24 3d c1 74 24 2c 73  |em%.1.@ s$=.t$,s|
00007cf0  74 72 69 6e 67 74 72 61  63 65 25 2b 31 2c a7 74  |tringtrace%+1,.t|
00007d00  24 2c 22 3e 22 2c 73 74  72 69 6e 67 74 72 61 63  |$,">",stringtrac|
00007d10  65 25 29 2d 73 74 72 69  6e 67 74 72 61 63 65 25  |e%)-stringtrace%|
00007d20  2d 31 29 0d 31 f6 1a 20  f2 6d 61 6b 65 6d 65 6e  |-1).1.. .makemen|
00007d30  75 28 a0 28 73 24 29 2c  6d 65 6d 25 29 0d 32 00  |u(.(s$),mem%).2.|
00007d40  27 20 73 74 72 69 6e 67  74 72 61 63 65 25 3d a7  |' stringtrace%=.|
00007d50  74 24 2c 22 3e 22 2c 73  74 72 69 6e 67 74 72 61  |t$,">",stringtra|
00007d60  63 65 25 29 0d 32 0a 05  cd 0d 32 14 0c e7 20 69  |ce%).2....2... i|
00007d70  25 3d 33 20 8c 0d 32 1e  40 20 73 24 3d c1 74 24  |%=3 ..2.@ s$=.t$|
00007d80  2c 73 74 72 69 6e 67 74  72 61 63 65 25 2b 31 2c  |,stringtrace%+1,|
00007d90  a7 74 24 2c 22 60 22 2c  73 74 72 69 6e 67 74 72  |.t$,"`",stringtr|
00007da0  61 63 65 25 29 2d 73 74  72 69 6e 67 74 72 61 63  |ace%)-stringtrac|
00007db0  65 25 2d 31 29 0d 32 28  15 20 21 28 6c 6f 6f 70  |e%-1).2(. !(loop|
00007dc0  25 2b 34 29 3d a0 28 73  24 29 0d 32 32 29 20 73  |%+4)=.(s$).22) s|
00007dd0  74 72 69 6e 67 74 72 61  63 65 25 3d a7 74 24 2c  |tringtrace%=.t$,|
00007de0  22 60 22 2c 73 74 72 69  6e 67 74 72 61 63 65 25  |"`",stringtrace%|
00007df0  2b 31 29 0d 32 3c 05 cd  0d 32 46 19 fd 20 73 74  |+1).2<...2F.. st|
00007e00  72 69 6e 67 74 72 61 63  65 25 3e 3d a9 28 74 24  |ringtrace%>=.(t$|
00007e10  29 0d 32 50 05 e1 0d 32  5a 05 3a 0d 32 64 23 dd  |).2P...2Z.:.2d#.|
00007e20  f2 63 72 65 61 74 65 5f  69 63 6f 6e 5f 6d 65 6e  |.create_icon_men|
00007e30  75 28 6d 65 6e 78 25 2c  6d 65 6e 79 25 29 0d 32  |u(menx%,meny%).2|
00007e40  6e 13 6d 65 6e 79 25 3d  39 36 2b 28 33 2a 34 34  |n.meny%=96+(3*44|
00007e50  29 0d 32 78 48 6d 65 6e  75 24 3d 22 46 61 6d 69  |).2xHmenu$="Fami|
00007e60  6c 79 20 54 72 65 65 7c  7e 49 6e 66 6f 60 69 6e  |ly Tree|~Info`in|
00007e70  66 6f 77 69 6e 64 6f 77  25 60 7c 4e 65 77 20 54  |fowindow%`|New T|
00007e80  72 65 65 7b 6e 65 77 5f  74 72 65 65 7d 7c 51 75  |ree{new_tree}|Qu|
00007e90  69 74 7b 66 69 6e 7d 7c  22 0d 32 82 11 6d 65 6e  |it{fin}|".2..men|
00007ea0  75 25 3d 6d 65 6e 62 6c  6b 25 0d 32 8c 1a f2 6d  |u%=menblk%.2...m|
00007eb0  61 6b 65 6d 65 6e 75 28  6d 65 6e 75 24 2c 6d 65  |akemenu(menu$,me|
00007ec0  6e 75 25 29 0d 32 96 2d  c8 99 20 22 57 69 6d 70  |nu%).2.-.. "Wimp|
00007ed0  5f 43 72 65 61 74 65 4d  65 6e 75 22 2c 2c 6d 65  |_CreateMenu",,me|
00007ee0  6e 62 6c 6b 25 2c 6d 65  6e 78 25 2c 6d 65 6e 79  |nblk%,menx%,meny|
00007ef0  25 0d 32 a0 17 63 75 72  72 65 6e 74 5f 6d 65 6e  |%.2..current_men|
00007f00  75 24 3d 6d 65 6e 75 24  0d 32 aa 05 e1 0d 32 b4  |u$=menu$.2....2.|
00007f10  05 3a 0d 32 be 1e dd f2  63 72 65 61 74 65 5f 6f  |.:.2....create_o|
00007f20  76 65 72 28 6d 65 6e 78  25 2c 6d 65 6e 79 25 29  |ver(menx%,meny%)|
00007f30  0d 32 c8 4c 20 6d 65 6e  75 24 3d 22 4f 76 65 72  |.2.L menu$="Over|
00007f40  76 69 65 77 7c 53 63 61  6c 65 3c 73 63 61 6c 65  |view|Scale<scale|
00007f50  6d 65 6e 75 24 3e 7c 44  65 66 61 75 6c 74 7b 64  |menu$>|Default{d|
00007f60  65 66 61 75 6c 74 6f 76  65 72 7d 7c 51 75 69 74  |efaultover}|Quit|
00007f70  7b 6f 76 65 72 71 75 69  74 7d 7c 22 0d 32 d2 33  |{overquit}|".2.3|
00007f80  20 73 63 61 6c 65 6d 65  6e 75 24 3d 22 53 63 61  | scalemenu$="Sca|
00007f90  6c 65 7c 25 31 5b 73 63  61 6c 65 25 2c 39 5d 7b  |le|%1[scale%,9]{|
00007fa0  72 65 73 63 61 6c 65 5f  6f 76 65 72 7d 7c 22 0d  |rescale_over}|".|
00007fb0  32 dc 12 20 6d 65 6e 75  25 3d 6d 65 6e 62 6c 6b  |2.. menu%=menblk|
00007fc0  25 0d 32 e6 1b 20 f2 6d  61 6b 65 6d 65 6e 75 28  |%.2.. .makemenu(|
00007fd0  6d 65 6e 75 24 2c 6d 65  6e 75 25 29 0d 32 f0 2e  |menu$,menu%).2..|
00007fe0  20 c8 99 20 22 57 69 6d  70 5f 43 72 65 61 74 65  | .. "Wimp_Create|
00007ff0  4d 65 6e 75 22 2c 2c 6d  65 6e 62 6c 6b 25 2c 6d  |Menu",,menblk%,m|
00008000  65 6e 78 25 2c 6d 65 6e  79 25 0d 32 fa 18 20 63  |enx%,meny%.2.. c|
00008010  75 72 72 65 6e 74 5f 6d  65 6e 75 24 3d 6d 65 6e  |urrent_menu$=men|
00008020  75 24 0d 33 04 05 e1 0d  33 0e 05 3a 0d 33 18 1a  |u$.3....3..:.3..|
00008030  dd f2 63 72 65 61 74 65  5f 64 61 74 61 28 6d 78  |..create_data(mx|
00008040  25 2c 6d 79 25 29 0d 33  22 26 6d 65 6e 75 24 3d  |%,my%).3"&menu$=|
00008050  22 44 61 74 61 7c 50 72  69 6e 74 20 44 61 74 61  |"Data|Print Data|
00008060  7b 70 72 69 6e 74 70 65  72 7d 7c 22 0d 33 2c 12  |{printper}|".3,.|
00008070  20 6d 65 6e 75 25 3d 6d  65 6e 62 6c 6b 25 0d 33  | menu%=menblk%.3|
00008080  36 1b 20 f2 6d 61 6b 65  6d 65 6e 75 28 6d 65 6e  |6. .makemenu(men|
00008090  75 24 2c 6d 65 6e 75 25  29 0d 33 40 2a 20 c8 99  |u$,menu%).3@* ..|
000080a0  20 22 57 69 6d 70 5f 43  72 65 61 74 65 4d 65 6e  | "Wimp_CreateMen|
000080b0  75 22 2c 2c 6d 65 6e 62  6c 6b 25 2c 6d 78 25 2c  |u",,menblk%,mx%,|
000080c0  6d 79 25 0d 33 4a 18 20  63 75 72 72 65 6e 74 5f  |my%.3J. current_|
000080d0  6d 65 6e 75 24 3d 6d 65  6e 75 24 0d 33 54 05 e1  |menu$=menu$.3T..|
000080e0  0d 33 5e 05 3a 0d 33 68  0e dd a4 70 72 69 6e 74  |.3^.:.3h...print|
000080f0  70 65 72 0d 33 72 22 f2  63 6f 70 79 66 72 6f 6d  |per.3r".copyfrom|
00008100  28 63 75 72 72 65 6e 74  5f 70 65 72 25 2c 70 65  |(current_per%,pe|
00008110  72 73 64 25 29 0d 33 7c  07 ef 20 32 0d 33 86 29  |rsd%).3|.. 2.3.)|
00008120  f1 22 50 72 69 6e 74 6f  75 74 20 66 6f 72 20 22  |."Printout for "|
00008130  3b 24 28 63 75 72 72 65  6e 74 5f 70 65 72 25 29  |;$(current_per%)|
00008140  3b 22 20 22 3b 0d 33 90  23 f1 24 28 63 75 72 72  |;" ";.3.#.$(curr|
00008150  65 6e 74 5f 70 65 72 25  2b 73 75 72 6e 61 6d 65  |ent_per%+surname|
00008160  25 29 3b 22 20 28 22 3b  0d 33 9a 31 f1 a4 63 6f  |%);" (";.3.1..co|
00008170  6e 76 6e 75 6d 64 61 74  65 28 63 75 72 72 65 6e  |nvnumdate(curren|
00008180  74 5f 70 65 72 25 21 62  69 72 74 68 64 61 74 65  |t_per%!birthdate|
00008190  25 29 3b 22 20 2d 20 22  3b 0d 33 a4 2e f1 a4 63  |%);" - ";.3....c|
000081a0  6f 6e 76 6e 75 6d 64 61  74 65 28 63 75 72 72 65  |onvnumdate(curre|
000081b0  6e 74 5f 70 65 72 25 21  64 65 61 74 68 64 61 74  |nt_per%!deathdat|
000081c0  65 25 29 3b 22 29 22 0d  33 ae 22 e7 20 63 75 72  |e%);")".3.". cur|
000081d0  72 65 6e 74 5f 70 65 72  25 21 73 70 6f 75 73 65  |rent_per%!spouse|
000081e0  25 3c 3e 6e 69 6c 25 20  8c 0d 33 b8 44 20 f1 22  |%<>nil% ..3.D ."|
000081f0  4d 61 72 72 69 65 64 20  6f 6e 20 22 3b a4 63 6f  |Married on ";.co|
00008200  6e 76 6e 75 6d 64 61 74  65 28 63 75 72 72 65 6e  |nvnumdate(curren|
00008210  74 5f 70 65 72 25 21 6d  61 72 72 69 61 67 65 64  |t_per%!marriaged|
00008220  61 74 65 25 29 3b 22 20  74 6f 20 22 3b 0d 33 c2  |ate%);" to ";.3.|
00008230  42 20 f1 24 28 63 75 72  72 65 6e 74 5f 70 65 72  |B .$(current_per|
00008240  25 21 73 70 6f 75 73 65  25 29 3b 22 20 22 3b 24  |%!spouse%);" ";$|
00008250  28 73 75 72 6e 61 6d 65  25 2b 63 75 72 72 65 6e  |(surname%+curren|
00008260  74 5f 70 65 72 25 21 73  70 6f 75 73 65 25 29 0d  |t_per%!spouse%).|
00008270  33 cc 3a 20 f1 22 44 69  76 6f 72 63 65 64 3a 20  |3.: ."Divorced: |
00008280  22 3b a4 63 6f 6e 76 6e  75 6d 64 61 74 65 28 63  |";.convnumdate(c|
00008290  75 72 72 65 6e 74 5f 70  65 72 25 21 64 69 76 6f  |urrent_per%!divo|
000082a0  72 63 65 64 61 74 65 25  29 0d 33 d6 05 cd 0d 33  |rcedate%).3....3|
000082b0  e0 21 e7 20 63 75 72 72  65 6e 74 5f 70 65 72 25  |.!. current_per%|
000082c0  21 63 68 69 6c 64 25 3c  3e 6e 69 6c 25 20 8c 0d  |!child%<>nil% ..|
000082d0  33 ea 20 20 6f 25 3d 31  3a 6c 25 3d 63 75 72 72  |3.  o%=1:l%=curr|
000082e0  65 6e 74 5f 70 65 72 25  21 63 68 69 6c 64 25 0d  |ent_per%!child%.|
000082f0  33 eb 11 20 f1 22 43 68  69 6c 64 72 65 6e 3a 22  |3.. ."Children:"|
00008300  0d 33 f4 10 20 c8 95 20  6c 25 3c 3e 6e 69 6c 25  |.3.. .. l%<>nil%|
00008310  0d 33 fe 40 20 20 f1 a4  63 6f 6e 76 6e 75 6d 64  |.3.@  ..convnumd|
00008320  61 74 65 28 6c 25 21 62  69 72 74 68 64 61 74 65  |ate(l%!birthdate|
00008330  25 29 3b 22 3a 20 22 3b  24 28 6c 25 29 3b 22 20  |%);": ";$(l%);" |
00008340  22 3b 24 28 6c 25 2b 73  75 72 6e 61 6d 65 25 29  |";$(l%+surname%)|
00008350  0d 34 08 14 20 20 6c 25  3d 6c 25 21 73 69 62 6c  |.4..  l%=l%!sibl|
00008360  69 6e 67 25 0d 34 12 05  ce 0d 34 1c 19 f1 27 22  |ing%.4....4...'"|
00008370  50 65 72 73 6f 6e 61 6c  20 44 65 74 61 69 6c 73  |Personal Details|
00008380  22 27 0d 34 26 1b e3 20  6f 25 3d 30 20 b8 20 31  |"'.4&.. o%=0 . 1|
00008390  35 3a e3 20 6c 25 3d 31  20 b8 20 36 30 0d 34 30  |5:. l%=1 . 60.40|
000083a0  50 20 e7 20 c1 64 61 74  61 73 65 74 24 28 6f 25  |P . .dataset$(o%|
000083b0  29 2c 6c 25 2c 31 29 3c  3e 22 20 22 20 8c 20 f1  |),l%,1)<>" " . .|
000083c0  c1 64 61 74 61 73 65 74  24 28 6f 25 29 2c 6c 25  |.dataset$(o%),l%|
000083d0  2c 31 29 3b 20 8b 20 f1  c1 64 61 74 61 6d 61 73  |,1); . ..datamas|
000083e0  6b 24 28 6f 25 29 2c 6c  25 2c 31 29 3b 0d 34 3a  |k$(o%),l%,1);.4:|
000083f0  09 ed 3a f1 3a ed 0d 34  44 06 ef 33 0d 34 4e 06  |..:.:..4D..3.4N.|
00008400  3d 30 0d 34 58 0e dd a4  6f 76 65 72 71 75 69 74  |=0.4X...overquit|
00008410  0d 34 62 10 20 6f 76 65  72 76 69 65 77 25 3d a3  |.4b. overview%=.|
00008420  0d 34 6c 12 20 21 62 6c  6f 63 6b 25 3d 6f 76 65  |.4l. !block%=ove|
00008430  72 25 0d 34 76 22 20 c8  99 20 22 57 69 6d 70 5f  |r%.4v" .. "Wimp_|
00008440  43 6c 6f 73 65 57 69 6e  64 6f 77 22 2c 2c 62 6c  |CloseWindow",,bl|
00008450  6f 63 6b 25 0d 34 80 06  3d 30 0d 34 8a 05 3a 0d  |ock%.4..=0.4..:.|
00008460  34 94 12 dd a4 72 65 73  63 61 6c 65 5f 6f 76 65  |4....rescale_ove|
00008470  72 0d 34 9e 19 20 73 63  61 6c 65 6f 76 65 72 3d  |r.4.. scaleover=|
00008480  bb 28 24 73 63 61 6c 65  25 29 0d 34 a8 11 20 61  |.($scale%).4.. a|
00008490  64 64 73 74 61 74 75 73  25 3d b9 0d 34 b2 2e 20  |ddstatus%=..4.. |
000084a0  c8 99 20 22 57 69 6d 70  5f 46 6f 72 63 65 52 65  |.. "Wimp_ForceRe|
000084b0  64 72 61 77 22 2c 6f 76  65 72 25 2c 30 2c 30 2c  |draw",over%,0,0,|
000084c0  31 32 38 30 2c 31 30 32  34 0d 34 bc 06 3d 30 0d  |1280,1024.4..=0.|
000084d0  34 c6 05 3a 0d 34 d0 11  dd a4 64 65 66 61 75 6c  |4..:.4....defaul|
000084e0  74 6f 76 65 72 0d 34 da  0f 24 73 63 61 6c 65 25  |tover.4..$scale%|
000084f0  3d 22 31 22 0d 34 e4 12  3d a4 72 65 73 63 61 6c  |="1".4..=.rescal|
00008500  65 5f 6f 76 65 72 0d 34  ee 05 3a 0d 34 f8 05 3a  |e_over.4..:.4..:|
00008510  0d 35 02 11 dd f2 6d 65  6e 75 5f 73 65 6c 65 63  |.5....menu_selec|
00008520  74 0d 35 0c 17 6d 65 6e  75 24 3d 63 75 72 72 65  |t.5..menu$=curre|
00008530  6e 74 5f 6d 65 6e 75 24  0d 35 16 20 c8 99 20 22  |nt_menu$.5. .. "|
00008540  57 69 6d 70 5f 47 65 74  50 6f 69 6e 74 65 72 49  |Wimp_GetPointerI|
00008550  6e 66 6f 22 2c 2c 71 25  0d 35 20 0d 62 75 74 25  |nfo",,q%.5 .but%|
00008560  3d 71 25 21 38 0d 35 2a  2d e7 62 6c 6f 63 6b 25  |=q%!8.5*-.block%|
00008570  21 30 3c 3e 2d 31 20 8c  20 f2 72 65 63 5f 64 65  |!0<>-1 . .rec_de|
00008580  63 6f 64 65 28 6d 65 6e  75 24 2c 62 6c 6f 63 6b  |code(menu$,block|
00008590  25 29 0d 35 34 12 e7 20  28 62 75 74 25 80 31 29  |%).54.. (but%.1)|
000085a0  3d 31 20 8c 0d 35 3e 1e  20 f2 63 72 65 61 74 65  |=1 ..5>. .create|
000085b0  5f 6d 65 6e 75 28 6d 65  6e 78 25 2c 6d 65 6e 79  |_menu(menx%,meny|
000085c0  25 29 0d 35 48 27 e3 6c  6f 6f 70 25 3d 30 b8 6d  |%).5H'.loop%=0.m|
000085d0  61 78 67 65 6e 25 3a 63  6f 6c 75 6d 6e 25 28 6c  |axgen%:column%(l|
000085e0  6f 6f 70 25 29 3d 30 3a  ed 0d 35 52 05 cc 0d 35  |oop%)=0:..5R...5|
000085f0  5c 15 20 63 75 72 72 65  6e 74 5f 6d 65 6e 75 24  |\. current_menu$|
00008600  3d 22 22 0d 35 66 05 cd  0d 35 70 05 e1 0d 35 7a  |="".5f...5p...5z|
00008610  05 3a 0d 35 84 1c dd f2  72 65 63 5f 64 65 63 6f  |.:.5....rec_deco|
00008620  64 65 28 6d 65 6e 75 24  2c 6d 65 6d 25 29 0d 35  |de(menu$,mem%).5|
00008630  8e 0b ea 20 69 25 2c 6c  25 0d 35 98 0a 66 6e 24  |... i%,l%.5..fn$|
00008640  3d 22 22 0d 35 a2 13 69  25 3d 31 2b 21 6d 65 6d  |="".5..i%=1+!mem|
00008650  25 3a 6c 25 3d 31 0d 35  ac 05 f5 0d 35 b6 18 20  |%:l%=1.5....5.. |
00008660  6c 25 3d a7 6d 65 6e 75  24 2c 22 7c 22 2c 6c 25  |l%=.menu$,"|",l%|
00008670  2b 31 29 0d 35 c0 0a 20  69 25 2d 3d 31 0d 35 ca  |+1).5.. i%-=1.5.|
00008680  0a fd 20 69 25 3d 30 0d  35 d4 15 69 25 3d a7 6d  |.. i%=0.5..i%=.m|
00008690  65 6e 75 24 2c 22 7b 22  2c 6c 25 29 0d 35 de 11  |enu$,"{",l%).5..|
000086a0  e7 20 6d 65 6d 25 21 34  3d 2d 31 20 8c 0d 35 e8  |. mem%!4=-1 ..5.|
000086b0  24 20 e7 20 69 25 3c a7  6d 65 6e 75 24 2c 22 7c  |$ . i%<.menu$,"||
000086c0  22 2c 6c 25 2b 31 29 20  80 20 69 25 3c 3e 30 20  |",l%+1) . i%<>0 |
000086d0  8c 0d 35 f2 2a 20 20 66  6e 24 3d c1 6d 65 6e 75  |..5.*  fn$=.menu|
000086e0  24 2c 69 25 2b 31 2c a7  6d 65 6e 75 24 2c 22 7d  |$,i%+1,.menu$,"}|
000086f0  22 2c 69 25 29 2d 69 25  2d 31 29 0d 35 fc 06 20  |",i%)-i%-1).5.. |
00008700  cd 0d 36 06 05 cc 0d 36  10 16 20 69 25 3d a7 6d  |..6....6.. i%=.m|
00008710  65 6e 75 24 2c 22 3c 22  2c 6c 25 29 0d 36 1a 16  |enu$,"<",l%).6..|
00008720  20 6c 25 3d a7 6d 65 6e  75 24 2c 22 3e 22 2c 6c  | l%=.menu$,">",l|
00008730  25 29 0d 36 24 30 20 f2  72 65 63 5f 64 65 63 6f  |%).6$0 .rec_deco|
00008740  64 65 28 a0 28 c1 6d 65  6e 75 24 2c 69 25 2b 31  |de(.(.menu$,i%+1|
00008750  2c 6c 25 2d 69 25 2d 31  29 29 2c 6d 65 6d 25 2b  |,l%-i%-1)),mem%+|
00008760  34 29 0d 36 2e 05 cd 0d  36 38 22 e7 6d 65 6e 75  |4).6....68".menu|
00008770  24 3d 61 64 64 6d 65 6e  75 24 20 8c 20 61 64 64  |$=addmenu$ . add|
00008780  73 74 61 74 75 73 25 3d  b9 0d 36 42 1e e7 20 66  |status%=..6B.. f|
00008790  6e 24 3c 3e 22 22 20 8c  20 69 25 3d a0 28 22 46  |n$<>"" . i%=.("F|
000087a0  4e 22 2b 66 6e 24 29 0d  36 4c 4d e7 6d 65 6e 75  |N"+fn$).6LM.menu|
000087b0  24 3d 61 64 64 6d 65 6e  75 24 20 8c 20 21 62 6c  |$=addmenu$ . !bl|
000087c0  6f 63 6b 25 3d 6f 76 65  72 25 3a c8 99 20 22 57  |ock%=over%:.. "W|
000087d0  69 6d 70 5f 46 6f 72 63  65 52 65 64 72 61 77 22  |imp_ForceRedraw"|
000087e0  2c 6f 76 65 72 25 2c 30  2c 30 2c 31 32 38 30 2c  |,over%,0,0,1280,|
000087f0  31 30 32 34 0d 36 56 0b  20 66 6e 24 3d 22 22 0d  |1024.6V. fn$="".|
00008800  36 60 05 e1 0d 36 6a 05  3a 0d 36 74 13 dd a4 73  |6`...6j.:.6t...s|
00008810  74 72 69 70 73 74 61 72  28 61 24 29 0d 36 7e 08  |tripstar(a$).6~.|
00008820  ea 20 6c 25 0d 36 88 0d  e3 6c 25 3d 31 b8 a9 61  |. l%.6...l%=1..a|
00008830  24 0d 36 92 24 20 e7 20  c1 61 24 2c 6c 25 2c 31  |$.6.$ . .a$,l%,1|
00008840  29 3d 22 2a 22 20 8c 20  c1 61 24 2c 6c 25 2c 31  |)="*" . .a$,l%,1|
00008850  29 3d 22 5e 22 0d 36 9c  05 ed 0d 36 a6 07 3d 61  |)="^".6....6..=a|
00008860  24 0d 36 b0 05 3a 0d 36  ba 19 dd f2 67 6f 74 6f  |$.6..:.6....goto|
00008870  70 65 72 73 6f 6e 28 6d  78 25 2c 6d 79 25 29 0d  |person(mx%,my%).|
00008880  36 c4 15 e7 20 b0 6d 78  25 2c 6d 79 25 29 3d 30  |6... .mx%,my%)=0|
00008890  20 8c 20 e1 0d 36 ce 11  21 62 6c 6f 63 6b 25 3d  | . ..6..!block%=|
000088a0  6f 76 65 72 25 0d 36 d8  25 c8 99 20 22 57 69 6d  |over%.6.%.. "Wim|
000088b0  70 5f 47 65 74 57 69 6e  64 6f 77 53 74 61 74 65  |p_GetWindowState|
000088c0  22 2c 30 2c 62 6c 6f 63  6b 25 0d 36 e2 0f 62 25  |",0,block%.6..b%|
000088d0  3d 62 6c 6f 63 6b 25 2b  34 0d 36 ec 13 78 25 3d  |=block%+4.6..x%=|
000088e0  28 62 25 21 30 2d 62 25  21 31 36 29 0d 36 f6 14  |(b%!0-b%!16).6..|
000088f0  79 25 3d 28 62 25 21 31  32 2d 62 25 21 32 30 29  |y%=(b%!12-b%!20)|
00008900  0d 37 00 0f 63 6f 6c 75  6d 6e 25 28 29 3d 30 0d  |.7..column%()=0.|
00008910  37 0a 13 72 25 3d 33 32  2a 73 63 61 6c 65 6f 76  |7..r%=32*scaleov|
00008920  65 72 0d 37 14 22 f2 63  6f 70 79 66 72 6f 6d 28  |er.7.".copyfrom(|
00008930  63 75 72 72 65 6e 74 5f  70 65 72 25 2c 70 65 72  |current_per%,per|
00008940  73 64 25 29 0d 37 1e 1f  70 65 72 73 6f 6e 6e 6f  |sd%).7..personno|
00008950  64 65 25 3d 6e 69 6c 25  3a 73 70 6f 75 73 65 64  |de%=nil%:spoused|
00008960  25 3d a3 0d 37 28 2d f2  66 69 6e 64 70 28 72 6f  |%=..7(-.findp(ro|
00008970  6f 74 25 2c 6d 78 25 2d  78 25 2c 6d 79 25 2d 79  |ot%,mx%-x%,my%-y|
00008980  25 2c 20 63 75 72 72 65  6e 74 5f 70 65 72 25 29  |%, current_per%)|
00008990  0d 37 32 19 f2 63 6f 70  79 74 6f 28 63 75 72 72  |.72..copyto(curr|
000089a0  65 6e 74 5f 70 65 72 25  29 0d 37 3c 10 61 64 64  |ent_per%).7<.add|
000089b0  73 74 61 74 75 73 25 3d  a3 0d 37 46 2d c8 99 20  |status%=..7F-.. |
000089c0  22 57 69 6d 70 5f 46 6f  72 63 65 52 65 64 72 61  |"Wimp_ForceRedra|
000089d0  77 22 2c 6d 61 69 6e 25  2c 30 2c 30 2c 31 32 38  |w",main%,0,0,128|
000089e0  30 2c 31 30 32 34 0d 37  50 2d c8 99 20 22 57 69  |0,1024.7P-.. "Wi|
000089f0  6d 70 5f 46 6f 72 63 65  52 65 64 72 61 77 22 2c  |mp_ForceRedraw",|
00008a00  6f 76 65 72 25 2c 30 2c  30 2c 31 32 38 30 2c 31  |over%,0,0,1280,1|
00008a10  30 32 34 0d 37 5a 41 e7  20 64 61 74 61 76 69 65  |024.7ZA. datavie|
00008a20  77 25 20 8c 20 c8 99 20  22 57 69 6d 70 5f 46 6f  |w% . .. "Wimp_Fo|
00008a30  72 63 65 52 65 64 72 61  77 22 2c 64 61 74 61 77  |rceRedraw",dataw|
00008a40  69 6e 64 6f 77 25 2c 30  2c 30 2c 31 32 38 30 2c  |indow%,0,0,1280,|
00008a50  31 30 32 34 0d 37 64 05  e1 0d 37 6e 05 3a 0d 37  |1024.7d...7n.:.7|
00008a60  78 21 dd f2 66 69 6e 64  70 28 6c 72 6f 6f 74 25  |x!..findp(lroot%|
00008a70  2c 6d 78 25 2c 6d 79 25  2c 20 f8 20 63 25 29 0d  |,mx%,my%, . c%).|
00008a80  37 82 13 72 25 3d 33 32  2a 73 63 61 6c 65 6f 76  |7..r%=32*scaleov|
00008a90  65 72 0d 37 8c 15 e7 20  6c 72 6f 6f 74 25 3d 6e  |er.7... lroot%=n|
00008aa0  69 6c 25 20 8c 20 e1 0d  37 96 3b 63 25 3d a4 63  |il% . ..7.;c%=.c|
00008ab0  68 65 63 6b 28 6c 72 6f  6f 74 25 21 63 6f 6c 25  |heck(lroot%!col%|
00008ac0  2c 6c 72 6f 6f 74 25 21  72 6f 77 25 2c 72 25 2c  |,lroot%!row%,r%,|
00008ad0  6d 78 25 2c 6d 79 25 2c  63 25 2c 6c 72 6f 6f 74  |mx%,my%,c%,lroot|
00008ae0  25 29 0d 37 a0 26 f2 66  69 6e 64 70 28 6c 72 6f  |%).7.&.findp(lro|
00008af0  6f 74 25 21 73 69 62 6c  69 6e 67 25 2c 6d 78 25  |ot%!sibling%,mx%|
00008b00  2c 6d 79 25 2c 63 25 29  0d 37 aa 25 f2 66 69 6e  |,my%,c%).7.%.fin|
00008b10  64 70 28 6c 72 6f 6f 74  25 21 63 68 69 6c 64 25  |dp(lroot%!child%|
00008b20  2c 6d 78 25 2c 6d 79 25  2c 20 63 25 29 0d 37 b4  |,mx%,my%, c%).7.|
00008b30  05 e1 0d 37 be 05 3a 0d  37 c8 13 dd f2 6d 65 73  |...7..:.7....mes|
00008b40  73 61 67 65 28 6d 65 6d  25 29 0d 37 d2 12 c8 8e  |sage(mem%).7....|
00008b50  20 62 6c 6f 63 6b 25 21  31 36 20 ca 0d 37 dc 21  | block%!16 ..7.!|
00008b60  20 c9 20 33 20 3a 20 f2  6c 6f 61 64 66 72 6f 6d  | . 3 : .loadfrom|
00008b70  66 69 6c 65 72 28 62 6c  6f 63 6b 25 29 0d 37 e6  |filer(block%).7.|
00008b80  1f 20 c9 20 26 34 30 30  43 30 20 3a 20 f2 66 69  |. . &400C0 : .fi|
00008b90  6c 65 73 61 76 65 77 69  6e 64 6f 77 0d 37 f0 1f  |lesavewindow.7..|
00008ba0  20 c9 20 32 20 3a 20 f2  73 61 76 65 74 6f 66 69  | . 2 : .savetofi|
00008bb0  6c 65 72 28 62 6c 6f 63  6b 25 29 0d 37 fa 17 20  |ler(block%).7.. |
00008bc0  c9 20 31 20 3a 20 f2 73  61 76 65 74 6f 73 63 72  |. 1 : .savetoscr|
00008bd0  61 70 0d 38 04 05 cb 0d  38 0e 05 e1 0d 38 18 05  |ap.8....8....8..|
00008be0  3a 0d 38 22 19 dd f2 6c  6f 61 64 66 72 6f 6d 66  |:.8"...loadfromf|
00008bf0  69 6c 65 72 28 6d 65 6d  25 29 0d 38 2c 11 ea 20  |iler(mem%).8,.. |
00008c00  6c 6f 6f 70 25 2c 46 25  2c 61 24 0d 38 36 1c e7  |loop%,F%,a$.86..|
00008c10  20 6d 65 6d 25 21 34 30  3c 3e 74 72 65 65 66 69  | mem%!40<>treefi|
00008c20  6c 65 25 20 8c 20 e1 0d  38 40 09 61 24 3d 22 22  |le% . ..8@.a$=""|
00008c30  0d 38 4a 1b 61 24 3d a4  7a 65 72 6f 73 74 72 69  |.8J.a$=.zerostri|
00008c40  6e 67 28 34 34 2b 6d 65  6d 25 29 0d 38 54 16 24  |ng(44+mem%).8T.$|
00008c50  28 66 69 6c 65 69 63 6f  6e 25 2b 34 34 29 3d 61  |(fileicon%+44)=a|
00008c60  24 0d 38 5e 0c 46 25 3d  8e 28 61 24 29 0d 38 68  |$.8^.F%=.(a$).8h|
00008c70  0f 6f 6c 64 74 72 65 65  24 3d 61 24 0d 38 72 26  |.oldtree$=a$.8r&|
00008c80  e7 20 72 6f 6f 74 25 3c  3e 6e 69 6c 25 20 8c 20  |. root%<>nil% . |
00008c90  f2 64 65 6c 65 74 65 74  72 65 65 28 72 6f 6f 74  |.deletetree(root|
00008ca0  25 29 0d 38 7c 14 72 6f  6f 74 25 3d a4 64 69 6d  |%).8|.root%=.dim|
00008cb0  70 65 72 73 6f 6e 0d 38  86 16 f2 6c 6f 61 64 5f  |person.8...load_|
00008cc0  72 65 63 75 72 28 72 6f  6f 74 25 29 0d 38 90 08  |recur(root%).8..|
00008cd0  d9 23 46 25 0d 38 9a 25  f2 63 6f 70 79 74 6f 28  |.#F%.8.%.copyto(|
00008ce0  72 6f 6f 74 25 29 3a 63  75 72 72 65 6e 74 5f 70  |root%):current_p|
00008cf0  65 72 25 3d 72 6f 6f 74  25 0d 38 a4 2d c8 99 20  |er%=root%.8.-.. |
00008d00  22 57 69 6d 70 5f 46 6f  72 63 65 52 65 64 72 61  |"Wimp_ForceRedra|
00008d10  77 22 2c 6d 61 69 6e 25  2c 30 2c 30 2c 31 32 38  |w",main%,0,0,128|
00008d20  30 2c 31 30 32 34 0d 38  ae 1b 61 64 64 73 74 61  |0,1024.8..addsta|
00008d30  74 75 73 25 3d b9 3a 73  70 6f 75 73 65 64 25 3d  |tus%=.:spoused%=|
00008d40  a3 0d 38 b8 3b e7 20 6f  76 65 72 76 69 65 77 25  |..8.;. overview%|
00008d50  20 8c 20 c8 99 20 22 57  69 6d 70 5f 46 6f 72 63  | . .. "Wimp_Forc|
00008d60  65 52 65 64 72 61 77 22  2c 6f 76 65 72 25 2c 30  |eRedraw",over%,0|
00008d70  2c 30 2c 31 32 38 30 2c  31 30 32 34 0d 38 c2 14  |,0,1280,1024.8..|
00008d80  e7 20 6d 65 6d 25 21 31  32 3c 3e 30 20 8c 20 e0  |. mem%!12<>0 . .|
00008d90  0d 38 cc 17 6d 65 6d 25  21 31 36 3d 34 3a 6d 65  |.8..mem%!16=4:me|
00008da0  6d 25 21 31 32 3d 31 0d  38 d6 2c c8 99 20 22 57  |m%!12=1.8.,.. "W|
00008db0  69 6d 70 5f 53 65 6e 64  4d 65 73 73 61 67 65 22  |imp_SendMessage"|
00008dc0  2c 31 38 2c 62 6c 6f 63  6b 25 2c 62 6c 6f 63 6b  |,18,block%,block|
00008dd0  25 21 34 0d 38 e0 05 e1  0d 38 ea 05 3a 0d 38 f4  |%!4.8....8..:.8.|
00008de0  12 dd f2 66 69 6c 65 77  69 6e 69 63 6f 6e 73 0d  |...filewinicons.|
00008df0  38 fe 2f 66 69 6c 65 6f  6b 25 3d a4 70 6c 61 63  |8./fileok%=.plac|
00008e00  65 69 63 6f 6e 28 66 69  6c 65 77 69 6e 64 6f 77  |eicon(filewindow|
00008e10  25 2c 31 38 30 2c 31 30  2c 22 4f 4b 22 29 0d 39  |%,180,10,"OK").9|
00008e20  08 1a 21 66 69 6c 65 69  63 6f 6e 25 3d 66 69 6c  |..!fileicon%=fil|
00008e30  65 77 69 6e 64 6f 77 25  0d 39 12 21 66 69 6c 65  |ewindow%.9.!file|
00008e40  69 63 6f 6e 25 21 34 3d  31 30 3a 66 69 6c 65 69  |icon%!4=10:filei|
00008e50  63 6f 6e 25 21 38 3d 31  30 0d 39 1c 24 66 69 6c  |con%!8=10.9.$fil|
00008e60  65 69 63 6f 6e 25 21 31  32 3d 31 37 30 3a 66 69  |eicon%!12=170:fi|
00008e70  6c 65 69 63 6f 6e 25 21  31 36 3d 36 30 0d 39 26  |leicon%!16=60.9&|
00008e80  19 66 69 6c 65 69 63 6f  6e 25 21 32 30 3d 26 37  |.fileicon%!20=&7|
00008e90  30 30 46 31 32 35 0d 39  30 1d 66 69 6c 65 69 63  |00F125.90.fileic|
00008ea0  6f 6e 25 21 32 34 3d 66  69 6c 65 69 63 6f 6e 25  |on%!24=fileicon%|
00008eb0  2b 34 34 0d 39 3a 1e 24  28 66 69 6c 65 69 63 6f  |+44.9:.$(fileico|
00008ec0  6e 25 2b 34 34 29 3d 22  74 72 65 65 66 69 6c 65  |n%+44)="treefile|
00008ed0  22 0d 39 44 24 66 69 6c  65 69 63 6f 6e 25 21 32  |".9D$fileicon%!2|
00008ee0  38 3d 2d 31 3a 66 69 6c  65 69 63 6f 6e 25 21 33  |8=-1:fileicon%!3|
00008ef0  32 3d 32 35 35 0d 39 4e  23 c8 99 20 22 57 69 6d  |2=255.9N#.. "Wim|
00008f00  70 5f 43 72 65 61 74 65  49 63 6f 6e 22 2c 2c 66  |p_CreateIcon",,f|
00008f10  69 6c 65 69 63 6f 6e 25  0d 39 58 15 f2 70 6c 61  |ileicon%.9X..pla|
00008f20  63 65 66 69 6c 65 69 63  6f 6e 28 30 29 0d 39 62  |cefileicon(0).9b|
00008f30  05 e1 0d 39 6c 05 3a 0d  39 76 17 dd f2 70 6c 61  |...9l.:.9v...pla|
00008f40  63 65 66 69 6c 65 69 63  6f 6e 28 4e 25 29 0d 39  |cefileicon(N%).9|
00008f50  80 1c 66 69 6c 65 62 6c  6f 63 6b 25 3d 66 69 6c  |..fileblock%=fil|
00008f60  65 69 63 6f 6e 25 2b 33  30 30 0d 39 8a 1b 21 66  |eicon%+300.9..!f|
00008f70  69 6c 65 62 6c 6f 63 6b  25 3d 66 69 6c 65 77 69  |ileblock%=filewi|
00008f80  6e 64 6f 77 25 0d 39 94  12 66 69 6c 65 62 6c 6f  |ndow%.9..fileblo|
00008f90  63 6b 25 21 34 3d 32 0d  39 9e 24 c8 99 20 22 57  |ck%!4=2.9.$.. "W|
00008fa0  69 6d 70 5f 44 65 6c 65  74 65 49 63 6f 6e 22 2c  |imp_DeleteIcon",|
00008fb0  2c 66 69 6c 65 62 6c 6f  63 6b 25 0d 39 a8 23 66  |,fileblock%.9.#f|
00008fc0  69 6c 65 62 6c 6f 63 6b  25 21 34 3d 39 30 3a 66  |ileblock%!4=90:f|
00008fd0  69 6c 65 62 6c 6f 63 6b  25 21 38 3d 38 30 0d 39  |ileblock%!8=80.9|
00008fe0  b2 27 66 69 6c 65 62 6c  6f 63 6b 25 21 31 32 3d  |.'fileblock%!12=|
00008ff0  31 36 30 3a 66 69 6c 65  62 6c 6f 63 6b 25 21 31  |160:fileblock%!1|
00009000  36 3d 31 35 30 0d 39 bc  1a 66 69 6c 65 62 6c 6f  |6=150.9..fileblo|
00009010  63 6b 25 21 32 30 3d 26  37 30 30 36 31 33 41 0d  |ck%!20=&700613A.|
00009020  39 c6 1f 66 69 6c 65 62  6c 6f 63 6b 25 21 32 34  |9..fileblock%!24|
00009030  3d 66 69 6c 65 62 6c 6f  63 6b 25 2b 34 30 0d 39  |=fileblock%+40.9|
00009040  d0 13 66 69 6c 65 62 6c  6f 63 6b 25 21 32 38 3d  |..fileblock%!28=|
00009050  31 0d 39 da 0b c8 8e 20  4e 25 20 ca 0d 39 e4 3f  |1.9.... N% ..9.?|
00009060  20 c9 20 30 20 3a 20 24  28 66 69 6c 65 62 6c 6f  | . 0 : $(fileblo|
00009070  63 6b 25 2b 34 30 29 3d  22 66 69 6c 65 5f 30 30  |ck%+40)="file_00|
00009080  30 22 3a 24 28 66 69 6c  65 69 63 6f 6e 25 2b 34  |0":$(fileicon%+4|
00009090  34 29 3d 6f 6c 64 74 72  65 65 24 0d 39 ee 3f 20  |4)=oldtree$.9.? |
000090a0  c9 20 31 20 3a 20 24 28  66 69 6c 65 62 6c 6f 63  |. 1 : $(filebloc|
000090b0  6b 25 2b 34 30 29 3d 22  66 69 6c 65 5f 61 66 66  |k%+40)="file_aff|
000090c0  22 3a 24 28 66 69 6c 65  69 63 6f 6e 25 2b 34 34  |":$(fileicon%+44|
000090d0  29 3d 6f 6c 64 64 72 61  77 24 0d 39 f8 3e 20 c9  |)=olddraw$.9.> .|
000090e0  20 32 20 3a 20 24 28 66  69 6c 65 62 6c 6f 63 6b  | 2 : $(fileblock|
000090f0  25 2b 34 30 29 3d 22 66  69 6c 65 5f 63 64 65 22  |%+40)="file_cde"|
00009100  3a 24 28 66 69 6c 65 69  63 6f 6e 25 2b 34 34 29  |:$(fileicon%+44)|
00009110  3d 6f 6c 64 63 73 76 24  0d 3a 02 05 cb 0d 3a 0c  |=oldcsv$.:....:.|
00009120  25 66 69 6c 65 62 6c 6f  63 6b 25 21 33 32 3d a9  |%fileblock%!32=.|
00009130  28 24 28 66 69 6c 65 62  6c 6f 63 6b 25 2b 34 30  |($(fileblock%+40|
00009140  29 29 0d 3a 16 34 c8 99  20 22 57 69 6d 70 5f 43  |)).:.4.. "Wimp_C|
00009150  72 65 61 74 65 49 63 6f  6e 22 2c 2c 66 69 6c 65  |reateIcon",,file|
00009160  62 6c 6f 63 6b 25 20 b8  20 66 69 6c 65 74 79 70  |block% . filetyp|
00009170  65 69 63 6f 6e 25 0d 3a  20 05 e1 0d 3a 2a 05 3a  |eicon%.: ...:*.:|
00009180  0d 3a 34 0e dd f2 64 72  61 67 66 69 6c 65 0d 3a  |.:4...dragfile.:|
00009190  3e 17 21 62 6c 6f 63 6b  25 3d 66 69 6c 65 77 69  |>.!block%=filewi|
000091a0  6e 64 6f 77 25 0d 3a 48  24 c8 99 20 22 57 69 6d  |ndow%.:H$.. "Wim|
000091b0  70 5f 47 65 74 57 69 6e  64 6f 77 53 74 61 74 65  |p_GetWindowState|
000091c0  22 2c 2c 62 6c 6f 63 6b  25 0d 3a 52 10 62 25 3d  |",,block%.:R.b%=|
000091d0  62 6c 6f 63 6b 25 2b 32  30 0d 3a 5c 0a 62 25 21  |block%+20.:\.b%!|
000091e0  30 3d 30 0d 3a 66 1b 62  25 21 34 3d 35 3a 62 25  |0=0.:f.b%!4=5:b%|
000091f0  21 38 3d 62 6c 6f 63 6b  25 21 34 2b 39 30 0d 3a  |!8=block%!4+90.:|
00009200  70 15 62 25 21 31 32 3d  62 6c 6f 63 6b 25 21 38  |p.b%!12=block%!8|
00009210  2b 38 30 0d 3a 7a 11 62  25 21 31 36 3d 62 25 21  |+80.:z.b%!16=b%!|
00009220  38 2b 37 30 0d 3a 84 12  62 25 21 32 30 3d 62 25  |8+70.:..b%!20=b%|
00009230  21 31 32 2b 37 30 0d 3a  8e 49 62 25 21 32 34 3d  |!12+70.:.Ib%!24=|
00009240  30 3a 62 25 21 32 38 3d  30 3a 62 25 21 33 32 3d  |0:b%!28=0:b%!32=|
00009250  31 32 37 39 3a 62 25 21  33 36 3d 31 30 32 34 3a  |1279:b%!36=1024:|
00009260  62 25 21 34 30 3d 30 3a  62 25 21 34 34 3d 30 3a  |b%!40=0:b%!44=0:|
00009270  62 25 21 34 38 3d 30 3a  62 25 21 35 32 3d 30 0d  |b%!48=0:b%!52=0.|
00009280  3a 98 1a 71 25 21 30 3d  31 31 3a 71 25 21 34 3d  |:..q%!0=11:q%!4=|
00009290  34 3a 71 25 21 38 3d 2d  31 0d 3a a2 22 c8 99 20  |4:q%!8=-1.:.".. |
000092a0  22 4f 53 5f 52 65 61 64  56 64 75 56 61 72 69 61  |"OS_ReadVduVaria|
000092b0  62 6c 65 73 22 2c 71 25  2c 71 25 0d 3a ac 1a 62  |bles",q%,q%.:..b|
000092c0  25 21 33 32 3d 28 71 25  21 30 2b 31 29 3c 3c 28  |%!32=(q%!0+1)<<(|
000092d0  71 25 21 34 29 0d 3a b6  19 c8 99 20 22 57 69 6d  |q%!4).:.... "Wim|
000092e0  70 5f 44 72 61 67 42 6f  78 22 2c 2c 62 25 0d 3a  |p_DragBox",,b%.:|
000092f0  c0 05 e1 0d 3a ca 05 3a  0d 3a d4 14 dd f2 66 69  |....:..:.:....fi|
00009300  6c 65 73 61 76 65 77 69  6e 64 6f 77 0d 3a de 12  |lesavewindow.:..|
00009310  c8 8e 20 62 6c 6f 63 6b  25 21 33 32 20 ca 0d 3a  |.. block%!32 ..:|
00009320  e8 28 20 c9 20 30 20 3a  20 f2 70 6c 61 63 65 66  |.( . 0 : .placef|
00009330  69 6c 65 69 63 6f 6e 28  30 29 3a 66 69 6c 65 73  |ileicon(0):files|
00009340  61 76 65 25 3d 30 0d 3a  f2 44 20 20 20 20 20 20  |ave%=0.:.D      |
00009350  20 20 20 20 c8 99 20 22  57 69 6d 70 5f 43 72 65  |    .. "Wimp_Cre|
00009360  61 74 65 53 75 62 4d 65  6e 75 22 2c 2c 62 6c 6f  |ateSubMenu",,blo|
00009370  63 6b 25 21 32 30 2c 62  6c 6f 63 6b 25 21 32 34  |ck%!20,block%!24|
00009380  2c 62 6c 6f 63 6b 25 21  32 38 0d 3a fc 40 20 c9  |,block%!28.:.@ .|
00009390  20 32 20 3a 20 e7 20 62  6c 6f 63 6b 25 21 33 36  | 2 : . block%!36|
000093a0  3d 32 20 8c 20 f2 70 6c  61 63 65 66 69 6c 65 69  |=2 . .placefilei|
000093b0  63 6f 6e 28 32 29 20 8b  20 f2 70 6c 61 63 65 66  |con(2) . .placef|
000093c0  69 6c 65 69 63 6f 6e 28  31 29 0d 3b 06 44 20 20  |ileicon(1).;.D  |
000093d0  20 20 20 20 20 20 20 20  c8 99 20 22 57 69 6d 70  |        .. "Wimp|
000093e0  5f 43 72 65 61 74 65 53  75 62 4d 65 6e 75 22 2c  |_CreateSubMenu",|
000093f0  2c 62 6c 6f 63 6b 25 21  32 30 2c 62 6c 6f 63 6b  |,block%!20,block|
00009400  25 21 32 34 2c 62 6c 6f  63 6b 25 21 32 38 0d 3b  |%!24,block%!28.;|
00009410  10 23 20 20 20 20 20 20  20 20 20 20 66 69 6c 65  |.#          file|
00009420  73 61 76 65 25 3d 62 6c  6f 63 6b 25 21 33 36 2b  |save%=block%!36+|
00009430  31 0d 3b 1a 0f 20 20 20  20 20 20 20 20 20 20 cb  |1.;..          .|
00009440  0d 3b 24 05 cb 0d 3b 2e  05 e1 0d 3b 38 05 3a 0d  |.;$...;....;8.:.|
00009450  3b 42 0d dd f2 64 72 61  67 65 6e 64 0d 3b 4c 24  |;B...dragend.;L$|
00009460  c8 99 20 22 57 69 6d 70  5f 47 65 74 50 6f 69 6e  |.. "Wimp_GetPoin|
00009470  74 65 72 49 6e 66 6f 22  2c 2c 62 6c 6f 63 6b 25  |terInfo",,block%|
00009480  0d 3b 56 59 e7 20 62 6c  6f 63 6b 25 21 31 32 3d  |.;VY. block%!12=|
00009490  6f 76 65 72 25 20 84 20  62 6c 6f 63 6b 25 21 31  |over% . block%!1|
000094a0  32 3d 66 69 6c 65 77 69  6e 64 6f 77 25 20 84 20  |2=filewindow% . |
000094b0  62 6c 6f 63 6b 25 21 31  32 3d 6d 61 69 6e 25 20  |block%!12=main% |
000094c0  84 20 62 6c 6f 63 6b 25  21 31 32 3d 66 69 6e 64  |. block%!12=find|
000094d0  77 69 6e 64 25 20 8c 20  e1 0d 3b 60 10 62 25 3d  |wind% . ..;`.b%=|
000094e0  62 6c 6f 63 6b 25 2b 32  30 0d 3b 6a 1d 21 62 25  |block%+20.;j.!b%|
000094f0  3d 34 34 2b a9 28 24 28  66 69 6c 65 69 63 6f 6e  |=44+.($(fileicon|
00009500  25 2b 34 34 29 29 0d 3b  74 14 21 62 25 2b 3d 34  |%+44)).;t.!b%+=4|
00009510  2d 28 21 62 25 20 83 20  34 29 0d 3b 7e 11 62 25  |-(!b% . 4).;~.b%|
00009520  21 34 3d 30 3a 62 25 21  38 3d 30 0d 3b 88 0b 62  |!4=0:b%!8=0.;..b|
00009530  25 21 31 32 3d 30 0d 3b  92 0b 62 25 21 31 36 3d  |%!12=0.;..b%!16=|
00009540  31 0d 3b 9c 13 62 25 21  32 30 3d 62 6c 6f 63 6b  |1.;..b%!20=block|
00009550  25 21 31 32 0d 3b a6 13  62 25 21 32 34 3d 62 6c  |%!12.;..b%!24=bl|
00009560  6f 63 6b 25 21 31 36 0d  3b b0 12 62 25 21 32 38  |ock%!16.;..b%!28|
00009570  3d 62 6c 6f 63 6b 25 21  30 0d 3b ba 12 62 25 21  |=block%!0.;..b%!|
00009580  33 32 3d 62 6c 6f 63 6b  25 21 34 0d 3b c4 0e 62  |32=block%!4.;..b|
00009590  25 21 33 36 3d 32 30 30  30 0d 3b ce 12 c8 8e 20  |%!36=2000.;.... |
000095a0  66 69 6c 65 73 61 76 65  25 20 ca 0d 3b d8 1a 20  |filesave% ..;.. |
000095b0  c9 20 30 20 3a 20 62 25  21 34 30 3d 74 72 65 65  |. 0 : b%!40=tree|
000095c0  66 69 6c 65 25 0d 3b e2  19 20 c9 20 33 20 3a 20  |file%.;.. . 3 : |
000095d0  62 25 21 34 30 3d 63 73  76 66 69 6c 65 25 0d 3b  |b%!40=csvfile%.;|
000095e0  ec 14 20 7f 20 20 3a 20  62 25 21 34 30 3d 26 41  |.. .  : b%!40=&A|
000095f0  46 46 0d 3b f6 05 cb 0d  3c 00 26 24 28 62 25 2b  |FF.;....<.&$(b%+|
00009600  34 34 29 3d a4 7a 65 72  6f 73 74 72 69 6e 67 28  |44)=.zerostring(|
00009610  66 69 6c 65 69 63 6f 6e  25 2b 34 34 29 0d 3c 0a  |fileicon%+44).<.|
00009620  29 c8 99 20 22 57 69 6d  70 5f 53 65 6e 64 4d 65  |).. "Wimp_SendMe|
00009630  73 73 61 67 65 22 2c 31  37 2c 62 25 2c 62 6c 6f  |ssage",17,b%,blo|
00009640  63 6b 25 21 31 32 0d 3c  14 3d e7 20 62 6c 6f 63  |ck%!12.<.=. bloc|
00009650  6b 25 21 31 32 3d 2d 32  20 8c 20 c8 99 20 22 57  |k%!12=-2 . .. "W|
00009660  69 6d 70 5f 53 65 6e 64  4d 65 73 73 61 67 65 22  |imp_SendMessage"|
00009670  2c 31 37 2c 62 25 2c 2d  32 2c 62 6c 6f 63 6b 25  |,17,b%,-2,block%|
00009680  21 31 36 0d 3c 1e 05 e1  0d 3c 28 05 3a 0d 3c 32  |!16.<....<(.:.<2|
00009690  19 dd f2 73 61 76 65 74  6f 66 69 6c 65 72 28 62  |...savetofiler(b|
000096a0  6c 6f 63 6b 25 29 0d 3c  3c 12 c8 8e 20 66 69 6c  |lock%).<<... fil|
000096b0  65 73 61 76 65 25 20 ca  0d 3c 46 30 20 c9 20 30  |esave% ..<F0 . 0|
000096c0  20 3a 20 6f 25 3d a4 73  61 76 65 5f 74 72 65 65  | : o%=.save_tree|
000096d0  28 a4 7a 65 72 6f 73 74  72 69 6e 67 28 62 6c 6f  |(.zerostring(blo|
000096e0  63 6b 25 2b 34 34 29 29  0d 3c 50 2d 20 20 20 20  |ck%+44)).<P-    |
000096f0  20 20 20 20 20 20 6f 6c  64 74 72 65 65 24 3d a4  |      oldtree$=.|
00009700  7a 65 72 6f 73 74 72 69  6e 67 28 62 6c 6f 63 6b  |zerostring(block|
00009710  25 2b 34 34 29 0d 3c 5a  30 20 c9 20 31 20 3a 20  |%+44).<Z0 . 1 : |
00009720  f2 73 61 76 65 76 65 72  74 64 72 61 77 28 a4 7a  |.savevertdraw(.z|
00009730  65 72 6f 73 74 72 69 6e  67 28 62 6c 6f 63 6b 25  |erostring(block%|
00009740  2b 34 34 29 29 0d 3c 64  2d 20 20 20 20 20 20 20  |+44)).<d-       |
00009750  20 20 20 6f 6c 64 64 72  61 77 24 3d a4 7a 65 72  |   olddraw$=.zer|
00009760  6f 73 74 72 69 6e 67 28  62 6c 6f 63 6b 25 2b 34  |ostring(block%+4|
00009770  34 29 0d 3c 6e 32 20 c9  20 32 20 3a 20 f2 73 61  |4).<n2 . 2 : .sa|
00009780  76 65 68 6f 72 69 64 72  61 77 28 a4 7a 65 72 6f  |vehoridraw(.zero|
00009790  73 74 72 69 6e 67 28 62  6c 6f 63 6b 25 2b 34 34  |string(block%+44|
000097a0  29 2c b9 29 0d 3c 78 2d  20 20 20 20 20 20 20 20  |),.).<x-        |
000097b0  20 20 6f 6c 64 64 72 61  77 24 3d a4 7a 65 72 6f  |  olddraw$=.zero|
000097c0  73 74 72 69 6e 67 28 62  6c 6f 63 6b 25 2b 34 34  |string(block%+44|
000097d0  29 0d 3c 82 2b 20 c9 20  33 20 3a 20 f2 73 61 76  |).<.+ . 3 : .sav|
000097e0  65 63 73 76 28 a4 7a 65  72 6f 73 74 72 69 6e 67  |ecsv(.zerostring|
000097f0  28 62 6c 6f 63 6b 25 2b  34 34 29 29 0d 3c 8c 2d  |(block%+44)).<.-|
00009800  20 20 20 20 20 20 20 20  20 20 6f 6c 64 63 73 76  |          oldcsv|
00009810  24 20 3d a4 7a 65 72 6f  73 74 72 69 6e 67 28 62  |$ =.zerostring(b|
00009820  6c 6f 63 6b 25 2b 34 34  29 0d 3c 96 05 cb 0d 3c  |lock%+44).<....<|
00009830  a0 38 62 6c 6f 63 6b 25  21 31 36 3d 33 3a c8 99  |.8block%!16=3:..|
00009840  20 22 57 69 6d 70 5f 53  65 6e 64 4d 65 73 73 61  | "Wimp_SendMessa|
00009850  67 65 22 2c 31 37 2c 62  6c 6f 63 6b 25 2c 62 6c  |ge",17,block%,bl|
00009860  6f 63 6b 25 21 34 0d 3c  aa 1b c8 99 20 22 57 69  |ock%!4.<.... "Wi|
00009870  6d 70 5f 43 72 65 61 74  65 4d 65 6e 75 22 2c 2d  |mp_CreateMenu",-|
00009880  31 0d 3c b4 10 66 69 6c  65 73 61 76 65 25 3d 2d  |1.<..filesave%=-|
00009890  31 0d 3c be 05 e1 0d 3c  c8 05 3a 0d 3c d2 16 dd  |1.<....<..:.<...|
000098a0  a4 7a 65 72 6f 73 74 72  69 6e 67 28 6d 65 6d 25  |.zerostring(mem%|
000098b0  29 0d 3c dc 08 ea 20 61  24 0d 3c e6 0f c8 95 20  |).<... a$.<.... |
000098c0  3f 6d 65 6d 25 3e 33 31  0d 3c f0 11 20 61 24 2b  |?mem%>31.<.. a$+|
000098d0  3d bd 28 3f 6d 65 6d 25  29 0d 3c fa 0c 20 6d 65  |=.(?mem%).<.. me|
000098e0  6d 25 2b 3d 31 0d 3d 04  05 ce 0d 3d 0e 07 3d 61  |m%+=1.=....=..=a|
000098f0  24 0d 3d 18 05 3a 0d 3d  22 11 dd f2 73 61 76 65  |$.=..:.="...save|
00009900  74 6f 73 63 72 61 70 0d  3d 2c 1f 24 28 62 6c 6f  |toscrap.=,.$(blo|
00009910  63 6b 25 2b 34 34 29 3d  22 3c 57 69 6d 70 24 53  |ck%+44)="<Wimp$S|
00009920  63 72 61 70 3e 22 0d 3d  36 22 3f 28 62 6c 6f 63  |crap>".=6"?(bloc|
00009930  6b 25 2b 34 34 2b a9 28  24 28 62 6c 6f 63 6b 25  |k%+44+.($(block%|
00009940  2b 34 34 29 29 29 3d 30  0d 3d 40 21 62 6c 6f 63  |+44)))=0.=@!bloc|
00009950  6b 25 21 30 3d 34 34 2b  a9 28 24 28 62 6c 6f 63  |k%!0=44+.($(bloc|
00009960  6b 25 2b 34 34 29 29 2b  31 0d 3d 4a 1e 62 6c 6f  |k%+44))+1.=J.blo|
00009970  63 6b 25 21 30 2b 3d 34  2d 28 62 6c 6f 63 6b 25  |ck%!0+=4-(block%|
00009980  21 30 20 83 20 34 29 0d  3d 54 0f 62 6c 6f 63 6b  |!0 . 4).=T.block|
00009990  25 21 31 36 3d 32 0d 3d  5e 10 62 6c 6f 63 6b 25  |%!16=2.=^.block%|
000099a0  21 33 36 3d 2d 31 0d 3d  68 16 62 6c 6f 63 6b 25  |!36=-1.=h.block%|
000099b0  21 31 32 3d 62 6c 6f 63  6b 25 21 38 0d 3d 72 2c  |!12=block%!8.=r,|
000099c0  c8 99 20 22 57 69 6d 70  5f 53 65 6e 64 4d 65 73  |.. "Wimp_SendMes|
000099d0  73 61 67 65 22 2c 31 37  2c 62 6c 6f 63 6b 25 2c  |sage",17,block%,|
000099e0  62 6c 6f 63 6b 25 21 34  0d 3d 7c 05 e1 0d 3d 86  |block%!4.=|...=.|
000099f0  05 3a 0d 3d 90 19 dd f2  73 61 76 65 76 65 72 74  |.:.=....savevert|
00009a00  64 72 61 77 28 66 69 6c  65 24 29 0d 3d 9a 17 46  |draw(file$).=..F|
00009a10  25 3d a4 6f 70 65 6e 64  72 61 77 28 66 69 6c 65  |%=.opendraw(file|
00009a20  24 29 0d 3d a4 11 f2 64  72 61 77 76 65 72 74 28  |$).=...drawvert(|
00009a30  46 25 29 0d 3d ae 08 d9  23 46 25 0d 3d b8 1f ff  |F%).=...#F%.=...|
00009a40  28 22 53 45 54 54 59 50  45 20 22 2b 66 69 6c 65  |("SETTYPE "+file|
00009a50  24 2b 22 20 26 41 46 46  22 29 0d 3d c2 10 61 64  |$+" &AFF").=..ad|
00009a60  64 73 74 61 74 75 73 25  3d b9 0d 3d cc 05 e1 0d  |dstatus%=..=....|
00009a70  3d d6 05 3a 0d 3d e0 15  dd a4 6f 70 65 6e 64 72  |=..:.=....opendr|
00009a80  61 77 28 66 69 6c 65 24  29 0d 3d ea 0f 46 25 3d  |aw(file$).=..F%=|
00009a90  ae 28 66 69 6c 65 24 29  0d 3d f4 11 20 d5 23 46  |.(file$).=.. .#F|
00009aa0  25 2c 22 44 72 61 77 22  3b 0d 3d fe 0e 20 f2 69  |%,"Draw";.=.. .i|
00009ab0  6e 74 28 32 30 31 29 0d  3e 08 0c 20 f2 69 6e 74  |nt(201).>.. .int|
00009ac0  28 30 29 0d 3e 12 19 20  d5 23 46 25 2c 22 46 41  |(0).>.. .#F%,"FA|
00009ad0  4d 49 4c 59 54 52 45 45  20 20 22 3b 0d 3e 1c 07  |MILYTREE  ";.>..|
00009ae0  3d 46 25 0d 3e 26 05 3a  0d 3e 30 0e dd a4 6d 61  |=F%.>&.:.>0...ma|
00009af0  78 79 63 61 6c 63 0d 3e  3a 19 ea 20 6c 25 2c 68  |xycalc.>:.. l%,h|
00009b00  25 2c 68 31 25 2c 68 32  25 2c 6c 6f 6f 70 25 0d  |%,h1%,h2%,loop%.|
00009b10  3e 44 1b 6c 6f 6f 70 25  3d 67 65 6e 70 6f 69 6e  |>D.loop%=genpoin|
00009b20  74 65 72 73 25 3a 68 25  3d 30 0d 3e 4e 05 f5 0d  |ters%:h%=0.>N...|
00009b30  3e 58 09 68 32 25 3d 30  0d 3e 62 13 20 68 32 25  |>X.h2%=0.>b. h2%|
00009b40  3d 63 68 61 72 73 70 63  25 2a 35 0d 3e 6c 0e 20  |=charspc%*5.>l. |
00009b50  6c 25 3d 21 6c 6f 6f 70  25 0d 3e 76 23 20 c8 95  |l%=!loop%.>v# ..|
00009b60  20 6c 25 3c 3e 6e 69 6c  25 20 80 20 6c 25 21 73  | l%<>nil% . l%!s|
00009b70  70 6f 75 73 65 25 3c 3e  6e 69 6c 25 0d 3e 80 15  |pouse%<>nil%.>..|
00009b80  20 20 68 32 25 2b 3d 63  68 61 72 73 70 63 25 2a  |  h2%+=charspc%*|
00009b90  37 0d 3e 8a 13 20 20 6c  25 3d 6c 25 21 73 70 6f  |7.>..  l%=l%!spo|
00009ba0  75 73 65 25 0d 3e 94 06  20 ce 0d 3e 9e 0a 20 68  |use%.>.. ..>.. h|
00009bb0  31 25 3d 30 0d 3e a8 3c  20 e7 20 21 28 67 65 6e  |1%=0.>.< . !(gen|
00009bc0  25 2b 21 6c 6f 6f 70 25  29 3d 30 20 8c 20 6c 25  |%+!loop%)=0 . l%|
00009bd0  3d 72 6f 6f 74 25 20 8b  20 6c 25 3d 21 28 21 28  |=root% . l%=!(!(|
00009be0  6c 6f 6f 70 25 2d 34 29  2b 63 68 69 6c 64 25 29  |loop%-4)+child%)|
00009bf0  0d 3e b2 19 20 c8 95 20  6c 25 21 73 69 62 6c 69  |.>.. .. l%!sibli|
00009c00  6e 67 25 3c 3e 6e 69 6c  25 0d 3e bc 13 20 20 68  |ng%<>nil%.>..  h|
00009c10  31 25 2b 3d 63 68 61 72  73 70 63 25 0d 3e c6 13  |1%+=charspc%.>..|
00009c20  20 6c 25 3d 6c 25 21 73  69 62 6c 69 6e 67 25 0d  | l%=l%!sibling%.|
00009c30  3e d0 05 ce 0d 3e da 18  20 e7 20 68 31 25 3e 68  |>....>.. . h1%>h|
00009c40  32 25 20 8c 20 68 32 25  3d 68 31 25 0d 3e e4 0c  |2% . h2%=h1%.>..|
00009c50  20 68 25 2b 3d 68 32 25  0d 3e ee 0d 20 6c 6f 6f  | h%+=h2%.>.. loo|
00009c60  70 25 2b 3d 34 0d 3e f8  1d fd 20 21 28 6c 6f 6f  |p%+=4.>... !(loo|
00009c70  70 25 2d 34 29 3d 63 75  72 72 65 6e 74 5f 70 65  |p%-4)=current_pe|
00009c80  72 25 0d 3f 02 07 3d 68  25 0d 3f 0c 05 3a 0d 3f  |r%.?..=h%.?..:.?|
00009c90  16 23 dd f2 74 79 70 65  73 69 6d 70 6c 65 28 70  |.#..typesimple(p|
00009ca0  25 2c 78 70 6f 73 25 2c  79 70 6f 73 25 2c 46 25  |%,xpos%,ypos%,F%|
00009cb0  29 0d 3f 20 0b ea 20 6c  25 2c 6c 24 0d 3f 2a 25  |).? .. l%,l$.?*%|
00009cc0  6c 24 3d 24 28 70 25 29  2b 22 20 22 2b 24 28 70  |l$=$(p%)+" "+$(p|
00009cd0  25 2b 73 75 72 6e 61 6d  65 25 29 2b 22 20 28 20  |%+surname%)+" ( |
00009ce0  22 0d 3f 34 42 e7 20 70  25 21 62 69 72 74 68 64  |".?4B. p%!birthd|
00009cf0  61 74 65 25 3c 3e 30 20  8c 20 6c 24 2b 3d c3 a8  |ate%<>0 . l$+=..|
00009d00  28 28 70 25 21 62 69 72  74 68 64 61 74 65 25 20  |((p%!birthdate% |
00009d10  80 20 26 46 46 46 46 30  30 30 30 29 2f 26 46 46  |. &FFFF0000)/&FF|
00009d20  46 46 29 0d 3f 3e 0d 6c  24 2b 3d 22 20 2d 20 22  |FF).?>.l$+=" - "|
00009d30  0d 3f 48 42 e7 20 70 25  21 64 65 61 74 68 64 61  |.?HB. p%!deathda|
00009d40  74 65 25 3c 3e 30 20 8c  20 6c 24 2b 3d c3 a8 28  |te%<>0 . l$+=..(|
00009d50  28 70 25 21 64 65 61 74  68 64 61 74 65 25 20 80  |(p%!deathdate% .|
00009d60  20 26 46 46 46 46 30 30  30 30 29 2f 26 46 46 46  | &FFFF0000)/&FFF|
00009d70  46 29 0d 3f 52 0c 6c 24  2b 3d 22 20 29 22 0d 3f  |F).?R.l$+=" )".?|
00009d80  5c 21 f2 70 6c 61 63 65  74 65 78 74 28 6c 24 2c  |\!.placetext(l$,|
00009d90  78 70 6f 73 25 2c 79 70  6f 73 25 2c 46 25 29 0d  |xpos%,ypos%,F%).|
00009da0  3f 66 05 e1 0d 3f 70 05  3a 0d 3f 7a 22 dd f2 70  |?f...?p.:.?z"..p|
00009db0  6c 61 63 65 74 65 78 74  28 6c 24 2c 78 70 6f 73  |lacetext(l$,xpos|
00009dc0  25 2c 79 70 6f 73 25 2c  46 25 29 0d 3f 84 08 ea  |%,ypos%,F%).?...|
00009dd0  20 6c 25 0d 3f 8e 12 6c  25 3d 34 2d 28 a9 28 6c  | l%.?..l%=4-(.(l|
00009de0  24 29 83 34 29 0d 3f 98  20 f2 69 6e 74 28 31 29  |$).4).?. .int(1)|
00009df0  3a f2 69 6e 74 28 32 34  2b 32 38 2b a9 28 6c 24  |:.int(24+28+.(l$|
00009e00  29 2b 6c 25 29 0d 3f a2  3a f2 69 6e 74 28 78 70  |)+l%).?.:.int(xp|
00009e10  6f 73 25 29 3a f2 69 6e  74 28 79 70 6f 73 25 29  |os%):.int(ypos%)|
00009e20  3a f2 69 6e 74 28 78 70  6f 73 25 2b a9 28 6c 24  |:.int(xpos%+.(l$|
00009e30  29 2a 28 63 68 61 72 73  70 63 25 2f 32 29 29 0d  |)*(charspc%/2)).|
00009e40  3f ac 30 f2 69 6e 74 28  79 70 6f 73 25 2b 63 68  |?.0.int(ypos%+ch|
00009e50  61 72 73 70 63 25 29 3a  f2 69 6e 74 28 30 29 3a  |arspc%):.int(0):|
00009e60  f2 69 6e 74 28 30 29 3a  f2 69 6e 74 28 30 29 0d  |.int(0):.int(0).|
00009e70  3f b6 2f f2 69 6e 74 28  63 68 61 72 73 70 63 25  |?./.int(charspc%|
00009e80  2f 32 29 3a f2 69 6e 74  28 63 68 61 72 73 70 63  |/2):.int(charspc|
00009e90  25 29 3a f2 69 6e 74 28  78 70 6f 73 25 29 0d 3f  |%):.int(xpos%).?|
00009ea0  c0 0f f2 69 6e 74 28 79  70 6f 73 25 29 0d 3f ca  |...int(ypos%).?.|
00009eb0  0c d5 23 46 25 2c 6c 24  3b 0d 3f d4 0c c8 95 20  |..#F%,l$;.?.... |
00009ec0  6c 25 3c 3e 30 0d 3f de  0b 20 d5 23 46 25 2c 30  |l%<>0.?.. .#F%,0|
00009ed0  0d 3f e8 0a 20 6c 25 2d  3d 31 0d 3f f2 05 ce 0d  |.?.. l%-=1.?....|
00009ee0  3f fc 05 e1 0d 40 06 05  3a 0d 40 10 0d dd f2 69  |?....@..:.@....i|
00009ef0  6e 74 28 49 25 29 0d 40  1a 0b d5 23 46 25 2c 49  |nt(I%).@...#F%,I|
00009f00  25 0d 40 24 0e d5 23 46  25 2c 49 25 3e 3e 38 0d  |%.@$..#F%,I%>>8.|
00009f10  40 2e 0f d5 23 46 25 2c  49 25 3e 3e 31 36 0d 40  |@...#F%,I%>>16.@|
00009f20  38 0f d5 23 46 25 2c 49  25 3e 3e 33 32 0d 40 42  |8..#F%,I%>>32.@B|
00009f30  05 e1 0d 40 4c 05 3a 0d  40 56 12 dd f2 64 72 61  |...@L.:.@V...dra|
00009f40  77 76 65 72 74 28 46 25  29 0d 40 60 3a ea 20 63  |wvert(F%).@`:. c|
00009f50  6f 6c 25 2c 73 70 63 6f  6c 25 2c 73 69 62 63 6f  |ol%,spcol%,sibco|
00009f60  6c 25 2c 63 6f 6c 73 70  63 25 2c 79 6c 6f 6f 70  |l%,colspc%,yloop|
00009f70  25 2c 79 6e 6f 77 25 2c  66 69 72 73 74 63 68 69  |%,ynow%,firstchi|
00009f80  6c 64 25 0d 40 6a 31 63  6f 6c 25 3d 30 3a 73 70  |ld%.@j1col%=0:sp|
00009f90  63 6f 6c 25 3d 63 68 61  72 73 70 63 25 2a 31 35  |col%=charspc%*15|
00009fa0  3a 73 69 62 63 6f 6c 25  3d 63 68 61 72 73 70 63  |:sibcol%=charspc|
00009fb0  25 2a 33 30 0d 40 74 17  63 6f 6c 73 70 63 25 3d  |%*30.@t.colspc%=|
00009fc0  63 68 61 72 73 70 63 25  2a 31 35 0d 40 7e 1e f2  |charspc%*15.@~..|
00009fd0  67 65 6e 70 6f 69 6e 74  65 72 73 28 63 75 72 72  |genpointers(curr|
00009fe0  65 6e 74 5f 70 65 72 25  29 0d 40 88 24 79 6c 6f  |ent_per%).@.$ylo|
00009ff0  6f 70 25 3d a4 6d 61 78  79 63 61 6c 63 3a 79 70  |op%=.maxycalc:yp|
0000a000  61 72 65 6e 74 25 3d 79  6c 6f 6f 70 25 0d 40 92  |arent%=yloop%.@.|
0000a010  10 79 6e 6f 77 25 3d 79  6c 6f 6f 70 25 0d 40 9c  |.ynow%=yloop%.@.|
0000a020  33 f2 69 6e 74 28 30 29  3a f2 69 6e 74 28 30 29  |3.int(0):.int(0)|
0000a030  3a f2 69 6e 74 28 63 68  61 72 73 70 63 25 2a 33  |:.int(charspc%*3|
0000a040  30 30 29 3a f2 69 6e 74  28 79 6c 6f 6f 70 25 29  |00):.int(yloop%)|
0000a050  0d 40 a6 17 70 6c 6f 6f  70 25 3d 67 65 6e 70 6f  |.@..ploop%=genpo|
0000a060  69 6e 74 65 72 73 25 0d  40 b0 05 f5 0d 40 ba 12  |inters%.@....@..|
0000a070  79 70 61 72 65 6e 74 25  3d 79 6e 6f 77 25 0d 40  |yparent%=ynow%.@|
0000a080  c4 10 79 6e 6f 77 25 3d  79 6c 6f 6f 70 25 0d 40  |..ynow%=yloop%.@|
0000a090  ce 14 20 70 65 72 73 6f  6e 25 3d 21 70 6c 6f 6f  |.. person%=!ploo|
0000a0a0  70 25 0d 40 d8 17 20 e7  20 70 65 72 73 6f 6e 25  |p%.@.. . person%|
0000a0b0  21 67 65 6e 25 3d 30 20  8c 0d 40 e2 17 20 20 66  |!gen%=0 ..@..  f|
0000a0c0  69 72 73 74 63 68 69 6c  64 25 3d 72 6f 6f 74 25  |irstchild%=root%|
0000a0d0  0d 40 ec 06 20 cc 0d 40  f6 27 20 20 66 69 72 73  |.@.. ..@.'  firs|
0000a0e0  74 63 68 69 6c 64 25 3d  21 28 21 28 70 6c 6f 6f  |tchild%=!(!(ploo|
0000a0f0  70 25 2d 34 29 2b 63 68  69 6c 64 25 29 0d 41 00  |p%-4)+child%).A.|
0000a100  06 20 cd 0d 41 0a 0e 20  79 25 3d 79 6c 6f 6f 70  |. ..A.. y%=yloop|
0000a110  25 0d 41 14 19 20 c8 95  20 66 69 72 73 74 63 68  |%.A.. .. firstch|
0000a120  69 6c 64 25 3c 3e 6e 69  6c 25 0d 41 1e 1e 20 20  |ild%<>nil%.A..  |
0000a130  e7 20 66 69 72 73 74 63  68 69 6c 64 25 3c 3e 70  |. firstchild%<>p|
0000a140  65 72 73 6f 6e 25 20 8c  0d 41 28 2d 20 20 20 f2  |erson% ..A(-   .|
0000a150  74 79 70 65 73 69 6d 70  6c 65 28 66 69 72 73 74  |typesimple(first|
0000a160  63 68 69 6c 64 25 2c 73  69 62 63 6f 6c 25 2c 79  |child%,sibcol%,y|
0000a170  25 2c 46 25 29 0d 41 32  13 20 20 20 79 25 2d 3d  |%,F%).A2.   y%-=|
0000a180  63 68 61 72 73 70 63 25  0d 41 3c 07 20 20 cd 0d  |charspc%.A<.  ..|
0000a190  41 46 26 20 20 66 69 72  73 74 63 68 69 6c 64 25  |AF&  firstchild%|
0000a1a0  3d 66 69 72 73 74 63 68  69 6c 64 25 21 73 69 62  |=firstchild%!sib|
0000a1b0  6c 69 6e 67 25 0d 41 50  06 20 ce 0d 41 5a 58 20  |ling%.AP. ..AZX |
0000a1c0  79 6c 6f 6f 70 25 3d a4  70 6c 61 63 65 70 65 72  |yloop%=.placeper|
0000a1d0  73 6f 6e 28 70 65 72 73  6f 6e 25 2c 63 6f 6c 25  |son(person%,col%|
0000a1e0  2c 79 6c 6f 6f 70 25 2c  73 70 63 6f 6c 25 2c 63  |,yloop%,spcol%,c|
0000a1f0  6f 6c 73 70 63 25 2c 70  65 72 73 6f 6e 25 21 73  |olspc%,person%!s|
0000a200  70 6f 75 73 65 25 2c 46  25 2c 79 70 61 72 65 6e  |pouse%,F%,yparen|
0000a210  74 25 29 0d 41 64 1c 20  70 65 72 73 6f 6e 25 3d  |t%).Ad. person%=|
0000a220  70 65 72 73 6f 6e 25 21  73 70 6f 75 73 65 25 0d  |person%!spouse%.|
0000a230  41 6e 2d 20 c8 95 20 70  65 72 73 6f 6e 25 21 73  |An- .. person%!s|
0000a240  70 6f 75 73 65 25 3c 3e  6e 69 6c 25 20 80 20 70  |pouse%<>nil% . p|
0000a250  65 72 73 6f 6e 25 3c 3e  6e 69 6c 25 0d 41 78 56  |erson%<>nil%.AxV|
0000a260  20 20 79 6c 6f 6f 70 25  3d a4 70 6c 61 63 65 70  |  yloop%=.placep|
0000a270  65 72 73 6f 6e 28 6e 69  6c 25 2c 63 6f 6c 25 2c  |erson(nil%,col%,|
0000a280  79 6c 6f 6f 70 25 2c 73  70 63 6f 6c 25 2c 63 6f  |yloop%,spcol%,co|
0000a290  6c 73 70 63 25 2c 70 65  72 73 6f 6e 25 21 73 70  |lspc%,person%!sp|
0000a2a0  6f 75 73 65 25 2c 46 25  2c 79 70 61 72 65 6e 74  |ouse%,F%,yparent|
0000a2b0  25 29 0d 41 82 1d 20 20  70 65 72 73 6f 6e 25 3d  |%).A..  person%=|
0000a2c0  70 65 72 73 6f 6e 25 21  73 70 6f 75 73 65 25 0d  |person%!spouse%.|
0000a2d0  41 8c 06 20 ce 0d 41 96  12 20 e7 20 79 25 3c 79  |A.. ..A.. . y%<y|
0000a2e0  6c 6f 6f 70 25 20 8c 0d  41 a0 0f 20 20 79 6c 6f  |loop% ..A..  ylo|
0000a2f0  6f 70 25 3d 79 25 0d 41  aa 06 20 cd 0d 41 b4 17  |op%=y%.A.. ..A..|
0000a300  20 79 6c 6f 6f 70 25 2d  3d 33 2a 63 68 61 72 73  | yloop%-=3*chars|
0000a310  70 63 25 0d 41 be 0e 20  70 6c 6f 6f 70 25 2b 3d  |pc%.A.. ploop%+=|
0000a320  34 0d 41 c8 1e fd 20 21  28 70 6c 6f 6f 70 25 2d  |4.A... !(ploop%-|
0000a330  34 29 3d 63 75 72 72 65  6e 74 5f 70 65 72 25 0d  |4)=current_per%.|
0000a340  41 d2 05 e1 0d 41 dc 05  3a 0d 41 e6 3a dd a4 70  |A....A..:.A.:..p|
0000a350  6c 61 63 65 70 65 72 73  6f 6e 28 70 25 2c 78 70  |laceperson(p%,xp|
0000a360  6f 73 25 2c 79 70 6f 73  25 2c 73 70 6f 73 25 2c  |os%,ypos%,spos%,|
0000a370  63 6f 6c 73 70 63 25 2c  73 70 25 2c 46 25 2c 79  |colspc%,sp%,F%,y|
0000a380  70 25 29 0d 41 f0 15 ea  20 78 73 25 2c 79 73 25  |p%).A... xs%,ys%|
0000a390  2c 78 65 25 2c 79 65 25  0d 41 fa 10 e7 20 70 25  |,xe%,ye%.A... p%|
0000a3a0  3c 3e 6e 69 6c 25 20 8c  0d 42 04 43 20 f2 70 6c  |<>nil% ..B.C .pl|
0000a3b0  61 63 65 74 65 78 74 28  24 70 25 2c 78 70 6f 73  |acetext($p%,xpos|
0000a3c0  25 2b 28 63 6f 6c 73 70  63 25 2d 28 28 63 68 61  |%+(colspc%-((cha|
0000a3d0  72 73 70 63 25 2f 32 29  2a a9 24 70 25 29 29 2f  |rspc%/2)*.$p%))/|
0000a3e0  32 2c 79 70 6f 73 25 2c  46 25 29 0d 42 0e 62 20  |2,ypos%,F%).B.b |
0000a3f0  f2 70 6c 61 63 65 74 65  78 74 28 24 28 70 25 2b  |.placetext($(p%+|
0000a400  73 75 72 6e 61 6d 65 25  29 2c 78 70 6f 73 25 2b  |surname%),xpos%+|
0000a410  28 63 6f 6c 73 70 63 25  2d 28 28 63 68 61 72 73  |(colspc%-((chars|
0000a420  70 63 25 2f 32 29 2a a9  24 28 70 25 2b 73 75 72  |pc%/2)*.$(p%+sur|
0000a430  6e 61 6d 65 25 29 29 29  2f 32 2c 79 70 6f 73 25  |name%)))/2,ypos%|
0000a440  2d 63 68 61 72 73 70 63  25 2c 46 25 29 0d 42 18  |-charspc%,F%).B.|
0000a450  43 20 f2 70 6c 61 63 65  64 61 74 65 28 70 25 2c  |C .placedate(p%,|
0000a460  62 69 72 74 68 64 61 74  65 25 2c 78 70 6f 73 25  |birthdate%,xpos%|
0000a470  2c 79 70 6f 73 25 2d 28  32 2a 63 68 61 72 73 70  |,ypos%-(2*charsp|
0000a480  63 25 29 2c 22 42 6f 72  6e 3a 20 22 2c 46 25 29  |c%),"Born: ",F%)|
0000a490  0d 42 22 43 20 f2 70 6c  61 63 65 64 61 74 65 28  |.B"C .placedate(|
0000a4a0  70 25 2c 64 65 61 74 68  64 61 74 65 25 2c 78 70  |p%,deathdate%,xp|
0000a4b0  6f 73 25 2c 79 70 6f 73  25 2d 28 33 2a 63 68 61  |os%,ypos%-(3*cha|
0000a4c0  72 73 70 63 25 29 2c 22  44 69 65 64 3a 20 22 2c  |rspc%),"Died: ",|
0000a4d0  46 25 29 0d 42 2c 05 cd  0d 42 36 11 e7 20 73 70  |F%).B,...B6.. sp|
0000a4e0  25 3c 3e 6e 69 6c 25 20  8c 0d 42 40 43 20 f2 70  |%<>nil% ..B@C .p|
0000a4f0  6c 61 63 65 74 65 78 74  28 24 73 70 25 2c 73 70  |lacetext($sp%,sp|
0000a500  6f 73 25 2b 28 63 6f 6c  73 70 63 25 2d 28 63 68  |os%+(colspc%-(ch|
0000a510  61 72 73 70 63 25 2f 32  29 2a a9 24 73 70 25 29  |arspc%/2)*.$sp%)|
0000a520  2f 32 2c 79 70 6f 73 25  2c 46 25 29 0d 42 4a 62  |/2,ypos%,F%).BJb|
0000a530  20 f2 70 6c 61 63 65 74  65 78 74 28 24 28 73 70  | .placetext($(sp|
0000a540  25 2b 73 75 72 6e 61 6d  65 25 29 2c 73 70 6f 73  |%+surname%),spos|
0000a550  25 2b 28 63 6f 6c 73 70  63 25 2d 28 63 68 61 72  |%+(colspc%-(char|
0000a560  73 70 63 25 2f 32 29 2a  a9 24 28 73 70 25 2b 73  |spc%/2)*.$(sp%+s|
0000a570  75 72 6e 61 6d 65 25 29  29 2f 32 2c 79 70 6f 73  |urname%))/2,ypos|
0000a580  25 2d 63 68 61 72 73 70  63 25 2c 46 25 29 0d 42  |%-charspc%,F%).B|
0000a590  54 44 20 f2 70 6c 61 63  65 64 61 74 65 28 73 70  |TD .placedate(sp|
0000a5a0  25 2c 62 69 72 74 68 64  61 74 65 25 2c 73 70 6f  |%,birthdate%,spo|
0000a5b0  73 25 2c 79 70 6f 73 25  2d 28 32 2a 63 68 61 72  |s%,ypos%-(2*char|
0000a5c0  73 70 63 25 29 2c 22 42  6f 72 6e 3a 20 22 2c 46  |spc%),"Born: ",F|
0000a5d0  25 29 0d 42 5e 44 20 f2  70 6c 61 63 65 64 61 74  |%).B^D .placedat|
0000a5e0  65 28 73 70 25 2c 64 65  61 74 68 64 61 74 65 25  |e(sp%,deathdate%|
0000a5f0  2c 73 70 6f 73 25 2c 79  70 6f 73 25 2d 28 33 2a  |,spos%,ypos%-(3*|
0000a600  63 68 61 72 73 70 63 25  29 2c 22 44 69 65 64 3a  |charspc%),"Died:|
0000a610  20 22 2c 46 25 29 0d 42  68 4a 20 f2 70 6c 61 63  | ",F%).BhJ .plac|
0000a620  65 64 61 74 65 28 73 70  25 2c 6d 61 72 72 69 61  |edate(sp%,marria|
0000a630  67 65 64 61 74 65 25 2c  73 70 6f 73 25 2c 79 70  |gedate%,spos%,yp|
0000a640  6f 73 25 2d 28 34 2a 63  68 61 72 73 70 63 25 29  |os%-(4*charspc%)|
0000a650  2c 22 4d 61 72 72 69 65  64 3a 20 22 2c 46 25 29  |,"Married: ",F%)|
0000a660  0d 42 72 4a 20 f2 70 6c  61 63 65 64 61 74 65 28  |.BrJ .placedate(|
0000a670  73 70 25 2c 64 69 76 6f  72 63 65 64 61 74 65 25  |sp%,divorcedate%|
0000a680  2c 73 70 6f 73 25 2c 79  70 6f 73 25 2d 28 35 2a  |,spos%,ypos%-(5*|
0000a690  63 68 61 72 73 70 63 25  29 2c 22 44 69 76 6f 72  |charspc%),"Divor|
0000a6a0  63 65 64 3a 20 22 2c 46  25 29 0d 42 7c 05 cd 0d  |ced: ",F%).B|...|
0000a6b0  42 86 1c e7 20 70 25 3c  3e 6e 69 6c 25 20 80 20  |B... p%<>nil% . |
0000a6c0  73 70 25 3c 3e 6e 69 6c  25 20 8c 0d 42 90 36 20  |sp%<>nil% ..B.6 |
0000a6d0  78 73 25 3d 78 70 6f 73  25 2b 63 6f 6c 73 70 63  |xs%=xpos%+colspc|
0000a6e0  25 2d 28 63 6f 6c 73 70  63 25 2d 28 28 63 68 61  |%-(colspc%-((cha|
0000a6f0  72 73 70 63 25 2f 32 29  2a a9 24 70 25 29 29 2f  |rspc%/2)*.$p%))/|
0000a700  32 0d 42 9a 23 20 79 73  25 3d 79 70 6f 73 25 2b  |2.B.# ys%=ypos%+|
0000a710  28 63 68 61 72 73 70 63  25 2f 32 29 3a 79 65 25  |(charspc%/2):ye%|
0000a720  3d 79 73 25 0d 42 a4 2d  20 78 65 25 3d 73 70 6f  |=ys%.B.- xe%=spo|
0000a730  73 25 2b 28 63 6f 6c 73  70 63 25 2d 28 63 68 61  |s%+(colspc%-(cha|
0000a740  72 73 70 63 25 2f 32 29  2a a9 24 73 70 25 29 2f  |rspc%/2)*.$sp%)/|
0000a750  32 0d 42 ae 23 20 f2 6c  69 6e 65 68 65 61 64 65  |2.B.# .lineheade|
0000a760  72 28 31 2c 78 73 25 2c  79 73 25 2c 79 65 25 2c  |r(1,xs%,ys%,ye%,|
0000a770  79 73 25 29 0d 42 b8 46  20 f2 6c 69 6e 65 63 6f  |ys%).B.F .lineco|
0000a780  6f 72 64 28 32 2c 78 73  25 2b 63 68 61 72 73 70  |ord(2,xs%+charsp|
0000a790  63 25 2f 32 2c 79 73 25  29 3a f2 6c 69 6e 65 63  |c%/2,ys%):.linec|
0000a7a0  6f 6f 72 64 28 38 2c 78  65 25 2d 63 68 61 72 73  |oord(8,xe%-chars|
0000a7b0  70 63 25 2f 32 2c 79 65  25 29 0d 42 c2 0d 20 f2  |pc%/2,ye%).B.. .|
0000a7c0  6c 69 6e 65 65 6e 64 0d  42 cc 06 20 cc 0d 42 d6  |lineend.B.. ..B.|
0000a7d0  1d 20 20 e7 20 70 25 3d  6e 69 6c 25 20 80 20 73  |.  . p%=nil% . s|
0000a7e0  70 25 3c 3e 6e 69 6c 25  20 8c 0d 42 e0 20 20 20  |p%<>nil% ..B.   |
0000a7f0  20 78 73 25 3d 73 70 6f  73 25 2d 28 63 68 61 72  | xs%=spos%-(char|
0000a800  73 70 63 25 2f 32 29 2a  31 30 0d 42 ea 2f 20 20  |spc%/2)*10.B./  |
0000a810  20 78 65 25 3d 73 70 6f  73 25 2b 28 63 6f 6c 73  | xe%=spos%+(cols|
0000a820  70 63 25 2d 28 63 68 61  72 73 70 63 25 2f 32 29  |pc%-(charspc%/2)|
0000a830  2a a9 24 73 70 25 29 2f  32 0d 42 f4 34 20 20 20  |*.$sp%)/2.B.4   |
0000a840  f2 6c 69 6e 65 68 65 61  64 65 72 28 32 2c 78 73  |.lineheader(2,xs|
0000a850  25 2c 79 70 6f 73 25 2c  78 65 25 2c 79 70 6f 73  |%,ypos%,xe%,ypos|
0000a860  25 2b 35 2a 63 68 61 72  73 70 63 25 29 0d 42 fe  |%+5*charspc%).B.|
0000a870  34 20 20 20 f2 6c 69 6e  65 63 6f 6f 72 64 28 32  |4   .linecoord(2|
0000a880  2c 78 65 25 2d 63 68 61  72 73 70 63 25 2f 32 2c  |,xe%-charspc%/2,|
0000a890  79 70 6f 73 25 2b 63 68  61 72 73 70 63 25 2f 32  |ypos%+charspc%/2|
0000a8a0  29 0d 43 08 29 20 20 20  f2 6c 69 6e 65 63 6f 6f  |).C.)   .linecoo|
0000a8b0  72 64 28 38 2c 78 73 25  2c 79 70 6f 73 25 2b 63  |rd(8,xs%,ypos%+c|
0000a8c0  68 61 72 73 70 63 25 2f  32 29 0d 43 12 2b 20 20  |harspc%/2).C.+  |
0000a8d0  20 f2 6c 69 6e 65 63 6f  6f 72 64 28 38 2c 78 73  | .linecoord(8,xs|
0000a8e0  25 2c 79 70 6f 73 25 2b  63 68 61 72 73 70 63 25  |%,ypos%+charspc%|
0000a8f0  2a 35 2e 35 29 0d 43 1c  0f 20 20 20 f2 6c 69 6e  |*5.5).C..   .lin|
0000a900  65 65 6e 64 0d 43 26 07  20 20 cd 0d 43 30 05 cd  |eend.C&.  ..C0..|
0000a910  0d 43 3a 1d e7 20 70 25  3c 3e 6e 69 6c 25 20 80  |.C:.. p%<>nil% .|
0000a920  20 70 25 21 67 65 6e 25  3c 3e 30 20 8c 0d 43 44  | p%!gen%<>0 ..CD|
0000a930  18 20 78 73 25 3d 78 70  6f 73 25 2b 63 6f 6c 73  |. xs%=xpos%+cols|
0000a940  70 63 25 2f 32 0d 43 4e  16 20 78 65 25 3d 78 70  |pc%/2.CN. xe%=xp|
0000a950  6f 73 25 2b 63 6f 6c 73  70 63 25 0d 43 58 1b 20  |os%+colspc%.CX. |
0000a960  79 73 25 3d 79 70 6f 73  25 2b 31 2e 35 2a 63 68  |ys%=ypos%+1.5*ch|
0000a970  61 72 73 70 63 25 0d 43  62 17 20 79 65 25 3d 79  |arspc%.Cb. ye%=y|
0000a980  70 25 2b 63 68 61 72 73  70 63 25 2f 32 0d 43 6c  |p%+charspc%/2.Cl|
0000a990  23 20 f2 6c 69 6e 65 68  65 61 64 65 72 28 33 2c  |# .lineheader(3,|
0000a9a0  78 73 25 2c 79 73 25 2c  78 65 25 2c 79 65 25 29  |xs%,ys%,xe%,ye%)|
0000a9b0  0d 43 76 3b 20 f2 6c 69  6e 65 63 6f 6f 72 64 28  |.Cv; .linecoord(|
0000a9c0  32 2c 78 73 25 2c 79 73  25 29 3a f2 6c 69 6e 65  |2,xs%,ys%):.line|
0000a9d0  63 6f 6f 72 64 28 38 2c  78 73 25 2c 79 73 25 2b  |coord(8,xs%,ys%+|
0000a9e0  63 68 61 72 73 70 63 25  2f 32 29 0d 43 80 3b 20  |charspc%/2).C.; |
0000a9f0  f2 6c 69 6e 65 63 6f 6f  72 64 28 38 2c 78 65 25  |.linecoord(8,xe%|
0000aa00  2c 79 73 25 2b 63 68 61  72 73 70 63 25 2f 32 29  |,ys%+charspc%/2)|
0000aa10  3a f2 6c 69 6e 65 63 6f  6f 72 64 28 38 2c 78 65  |:.linecoord(8,xe|
0000aa20  25 2c 79 65 25 29 0d 43  8a 0d 20 f2 6c 69 6e 65  |%,ye%).C.. .line|
0000aa30  65 6e 64 0d 43 94 05 cd  0d 43 9e 15 79 70 6f 73  |end.C....C..ypos|
0000aa40  25 2d 3d 35 2a 63 68 61  72 73 70 63 25 0d 43 a8  |%-=5*charspc%.C.|
0000aa50  23 e7 20 73 70 25 3c 3e  6e 69 6c 25 20 8c 20 79  |#. sp%<>nil% . y|
0000aa60  70 6f 73 25 2d 3d 32 2a  63 68 61 72 73 70 63 25  |pos%-=2*charspc%|
0000aa70  0d 43 b2 0a 3d 79 70 6f  73 25 0d 43 bc 05 3a 0d  |.C..=ypos%.C..:.|
0000aa80  43 c6 24 dd f2 6c 69 6e  65 68 65 61 64 65 72 28  |C.$..lineheader(|
0000aa90  6e 25 2c 78 73 25 2c 79  73 25 2c 78 65 25 2c 79  |n%,xs%,ys%,xe%,y|
0000aaa0  65 25 29 0d 43 d0 0b f2  69 6e 74 28 32 29 0d 43  |e%).C...int(2).C|
0000aab0  da 1a f2 69 6e 74 28 32  34 2b 31 36 2b 34 2b 31  |...int(24+16+4+1|
0000aac0  32 2b 6e 25 2a 31 32 29  0d 43 e4 17 f2 69 6e 74  |2+n%*12).C...int|
0000aad0  28 78 73 25 29 3a f2 69  6e 74 28 79 73 25 29 0d  |(xs%):.int(ys%).|
0000aae0  43 ee 17 f2 69 6e 74 28  78 65 25 29 3a f2 69 6e  |C...int(xe%):.in|
0000aaf0  74 28 79 65 25 29 0d 43  f8 14 f2 69 6e 74 28 2d  |t(ye%).C...int(-|
0000ab00  31 29 3a f2 69 6e 74 28  30 29 0d 44 02 13 f2 69  |1):.int(0).D...i|
0000ab10  6e 74 28 30 29 3a f2 69  6e 74 28 30 29 0d 44 0c  |nt(0):.int(0).D.|
0000ab20  05 e1 0d 44 16 05 3a 0d  44 20 1b dd f2 6c 69 6e  |...D..:.D ...lin|
0000ab30  65 63 6f 6f 72 64 28 6e  25 2c 78 73 25 2c 79 73  |ecoord(n%,xs%,ys|
0000ab40  25 29 0d 44 2a 0c f2 69  6e 74 28 6e 25 29 0d 44  |%).D*..int(n%).D|
0000ab50  34 17 f2 69 6e 74 28 78  73 25 29 3a f2 69 6e 74  |4..int(xs%):.int|
0000ab60  28 79 73 25 29 0d 44 3e  05 e1 0d 44 48 05 3a 0d  |(ys%).D>...DH.:.|
0000ab70  44 52 0d dd f2 6c 69 6e  65 65 6e 64 0d 44 5c 0b  |DR...lineend.D\.|
0000ab80  f2 69 6e 74 28 30 29 0d  44 66 05 e1 0d 44 70 05  |.int(0).Df...Dp.|
0000ab90  3a 0d 44 7a 2a dd f2 70  6c 61 63 65 64 61 74 65  |:.Dz*..placedate|
0000aba0  28 70 25 2c 64 25 2c 78  70 6f 73 25 2c 79 70 6f  |(p%,d%,xpos%,ypo|
0000abb0  73 25 2c 61 64 64 24 2c  46 25 29 0d 44 84 10 e7  |s%,add$,F%).D...|
0000abc0  20 70 25 21 64 25 3c 3e  30 20 8c 0d 44 8e 20 20  | p%!d%<>0 ..D.  |
0000abd0  64 24 3d 61 64 64 24 2b  a4 63 6f 6e 76 6e 75 6d  |d$=add$+.convnum|
0000abe0  64 61 74 65 28 70 25 21  64 25 29 0d 44 98 3f 20  |date(p%!d%).D.? |
0000abf0  f2 70 6c 61 63 65 74 65  78 74 28 64 24 2c 78 70  |.placetext(d$,xp|
0000ac00  6f 73 25 2b 28 63 6f 6c  73 70 63 25 2d 28 63 68  |os%+(colspc%-(ch|
0000ac10  61 72 73 70 63 25 2f 32  29 2a a9 64 24 29 2f 32  |arspc%/2)*.d$)/2|
0000ac20  2c 79 70 6f 73 25 2c 46  25 29 0d 44 a2 05 cd 0d  |,ypos%,F%).D....|
0000ac30  44 ac 05 e1 0d 44 b6 05  3a 0d 44 c0 1f dd f2 73  |D....D..:.D....s|
0000ac40  61 76 65 68 6f 72 69 64  72 61 77 28 66 69 6c 65  |avehoridraw(file|
0000ac50  24 2c 66 75 6c 6c 25 29  0d 44 ca 17 46 25 3d a4  |$,full%).D..F%=.|
0000ac60  6f 70 65 6e 64 72 61 77  28 66 69 6c 65 24 29 0d  |opendraw(file$).|
0000ac70  44 d4 17 f2 64 72 61 77  68 6f 72 69 28 46 25 2c  |D...drawhori(F%,|
0000ac80  66 75 6c 6c 25 29 0d 44  de 08 d9 23 46 25 0d 44  |full%).D...#F%.D|
0000ac90  e8 1f ff 28 22 53 45 54  54 59 50 45 20 22 2b 66  |...("SETTYPE "+f|
0000aca0  69 6c 65 24 2b 22 20 26  41 46 46 22 29 0d 44 f2  |ile$+" &AFF").D.|
0000acb0  10 61 64 64 73 74 61 74  75 73 25 3d b9 0d 44 fc  |.addstatus%=..D.|
0000acc0  05 e1 0d 45 06 05 3a 0d  45 10 18 dd f2 64 72 61  |...E..:.E....dra|
0000acd0  77 68 6f 72 69 28 46 25  2c 66 75 6c 6c 25 29 0d  |whori(F%,full%).|
0000ace0  45 1a 08 ea 20 78 25 0d  45 24 1e 6d 69 6e 63 6f  |E... x%.E$.minco|
0000acf0  6c 25 3d 26 46 46 46 46  46 46 46 3a 6d 61 78 63  |l%=&FFFFFFF:maxc|
0000ad00  6f 6c 25 3d 30 0d 45 2e  1f 63 6f 6c 75 6d 6e 25  |ol%=0.E..column%|
0000ad10  28 29 3d 2d 26 46 46 46  46 46 46 46 3a 6d 61 78  |()=-&FFFFFFF:max|
0000ad20  67 25 3d 30 0d 45 38 27  f2 73 65 74 63 6f 6c 75  |g%=0.E8'.setcolu|
0000ad30  6d 6e 28 72 6f 6f 74 25  2c 32 30 30 2c 6d 69 6e  |mn(root%,200,min|
0000ad40  63 6f 6c 25 2c 6d 61 78  67 25 29 0d 45 42 0c 6d  |col%,maxg%).EB.m|
0000ad50  61 78 67 25 2b 3d 31 0d  45 4c 28 f2 61 64 6a 75  |axg%+=1.EL(.adju|
0000ad60  73 74 63 6f 6c 75 6d 6e  28 72 6f 6f 74 25 2c 6d  |stcolumn(root%,m|
0000ad70  69 6e 63 6f 6c 25 2c 6d  61 78 63 6f 6c 25 29 0d  |incol%,maxcol%).|
0000ad80  45 56 15 70 63 6f 6c 25  3d 31 35 2a 63 68 61 72  |EV.pcol%=15*char|
0000ad90  73 70 63 25 0d 45 60 14  78 25 3d 70 63 6f 6c 25  |spc%.E`.x%=pcol%|
0000ada0  2a 6d 61 78 63 6f 6c 25  0d 45 6a 13 f2 69 6e 74  |*maxcol%.Ej..int|
0000adb0  28 30 29 3a f2 69 6e 74  28 30 29 0d 45 74 24 f2  |(0):.int(0).Et$.|
0000adc0  69 6e 74 28 78 25 29 3a  f2 69 6e 74 28 6d 61 78  |int(x%):.int(max|
0000add0  67 25 2a 31 30 2a 63 68  61 72 73 70 63 25 29 0d  |g%*10*charspc%).|
0000ade0  45 7e 35 f2 64 72 61 77  68 6f 72 69 74 72 65 65  |E~5.drawhoritree|
0000adf0  28 72 6f 6f 74 25 2c 6d  61 78 67 25 2a 31 30 2a  |(root%,maxg%*10*|
0000ae00  63 68 61 72 73 70 63 25  2c 70 63 6f 6c 25 2c a3  |charspc%,pcol%,.|
0000ae10  2c 46 25 29 0d 45 88 05  e1 0d 45 92 05 3a 0d 45  |,F%).E....E..:.E|
0000ae20  9c 2e dd f2 73 65 74 63  6f 6c 75 6d 6e 28 72 6f  |....setcolumn(ro|
0000ae30  6f 74 25 2c 63 6f 6c 75  6d 6e 25 2c 20 f8 20 6d  |ot%,column%, . m|
0000ae40  63 6f 6c 25 2c 20 f8 20  6d 67 25 29 0d 45 a6 0c  |col%, . mg%).E..|
0000ae50  ea 20 6c 72 6f 6f 74 25  0d 45 b0 14 e7 20 72 6f  |. lroot%.E... ro|
0000ae60  6f 74 25 3d 6e 69 6c 25  20 8c 20 e1 0d 45 ba 25  |ot%=nil% . ..E.%|
0000ae70  e7 20 72 6f 6f 74 25 21  67 65 6e 25 3e 6d 67 25  |. root%!gen%>mg%|
0000ae80  20 8c 20 6d 67 25 3d 72  6f 6f 74 25 21 67 65 6e  | . mg%=root%!gen|
0000ae90  25 0d 45 c4 23 e7 20 63  6f 6c 75 6d 6e 25 3c 6d  |%.E.#. column%<m|
0000aea0  63 6f 6c 25 20 8c 20 6d  63 6f 6c 25 3d 63 6f 6c  |col% . mcol%=col|
0000aeb0  75 6d 6e 25 0d 45 ce 24  e7 20 63 6f 6c 75 6d 6e  |umn%.E.$. column|
0000aec0  25 3c 3d 63 6f 6c 75 6d  6e 25 28 72 6f 6f 74 25  |%<=column%(root%|
0000aed0  21 67 65 6e 25 29 20 8c  0d 45 d8 22 20 63 6f 6c  |!gen%) ..E." col|
0000aee0  75 6d 6e 25 3d 63 6f 6c  75 6d 6e 25 28 72 6f 6f  |umn%=column%(roo|
0000aef0  74 25 21 67 65 6e 25 29  2b 31 0d 45 e2 05 cd 0d  |t%!gen%)+1.E....|
0000af00  45 ec 16 72 6f 6f 74 25  21 63 6f 6c 25 3d 63 6f  |E..root%!col%=co|
0000af10  6c 75 6d 6e 25 0d 45 f6  1b 6e 25 3d a4 6e 6f 6f  |lumn%.E..n%=.noo|
0000af20  66 63 68 69 6c 64 72 65  6e 28 72 6f 6f 74 25 29  |fchildren(root%)|
0000af30  0d 46 00 37 f2 73 65 74  63 6f 6c 75 6d 6e 28 72  |.F.7.setcolumn(r|
0000af40  6f 6f 74 25 21 63 68 69  6c 64 25 2c 63 6f 6c 75  |oot%!child%,colu|
0000af50  6d 6e 25 2b 31 2d 28 6e  25 2f 32 29 2c 6d 63 6f  |mn%+1-(n%/2),mco|
0000af60  6c 25 2c 6d 67 25 29 0d  46 0a 18 6c 72 6f 6f 74  |l%,mg%).F..lroot|
0000af70  25 3d 72 6f 6f 74 25 21  73 70 6f 75 73 65 25 0d  |%=root%!spouse%.|
0000af80  46 14 13 c8 95 20 6c 72  6f 6f 74 25 3c 3e 6e 69  |F.... lroot%<>ni|
0000af90  6c 25 0d 46 1e 0f 20 63  6f 6c 75 6d 6e 25 2b 3d  |l%.F.. column%+=|
0000afa0  31 0d 46 28 18 20 6c 72  6f 6f 74 25 21 63 6f 6c  |1.F(. lroot%!col|
0000afb0  25 3d 63 6f 6c 75 6d 6e  25 0d 46 32 1a 20 6c 72  |%=column%.F2. lr|
0000afc0  6f 6f 74 25 3d 6c 72 6f  6f 74 25 21 73 70 6f 75  |oot%=lroot%!spou|
0000afd0  73 65 25 0d 46 3c 05 ce  0d 46 46 1f 63 6f 6c 75  |se%.F<...FF.colu|
0000afe0  6d 6e 25 28 72 6f 6f 74  25 21 67 65 6e 25 29 3d  |mn%(root%!gen%)=|
0000aff0  63 6f 6c 75 6d 6e 25 0d  46 50 32 f2 73 65 74 63  |column%.FP2.setc|
0000b000  6f 6c 75 6d 6e 28 72 6f  6f 74 25 21 73 69 62 6c  |olumn(root%!sibl|
0000b010  69 6e 67 25 2c 63 6f 6c  75 6d 6e 25 2b 31 2c 6d  |ing%,column%+1,m|
0000b020  63 6f 6c 25 2c 6d 67 25  29 0d 46 5a 05 e1 0d 46  |col%,mg%).FZ...F|
0000b030  64 05 3a 0d 46 6e 2c dd  f2 61 64 6a 75 73 74 63  |d.:.Fn,..adjustc|
0000b040  6f 6c 75 6d 6e 28 72 6f  6f 74 25 2c 6d 69 6e 63  |olumn(root%,minc|
0000b050  6f 6c 25 2c 20 f8 20 6d  61 78 63 6f 6c 25 29 0d  |ol%, . maxcol%).|
0000b060  46 78 0c ea 20 6c 72 6f  6f 74 25 0d 46 82 14 e7  |Fx.. lroot%.F...|
0000b070  20 72 6f 6f 74 25 3d 6e  69 6c 25 20 8c 20 e1 0d  | root%=nil% . ..|
0000b080  46 8c 17 72 6f 6f 74 25  21 63 6f 6c 25 2d 3d 6d  |F..root%!col%-=m|
0000b090  69 6e 63 6f 6c 25 0d 46  96 2d e7 20 72 6f 6f 74  |incol%.F.-. root|
0000b0a0  25 21 63 6f 6c 25 3e 6d  61 78 63 6f 6c 25 20 8c  |%!col%>maxcol% .|
0000b0b0  20 6d 61 78 63 6f 6c 25  3d 72 6f 6f 74 25 21 63  | maxcol%=root%!c|
0000b0c0  6f 6c 25 0d 46 a0 18 6c  72 6f 6f 74 25 3d 72 6f  |ol%.F..lroot%=ro|
0000b0d0  6f 74 25 21 73 70 6f 75  73 65 25 0d 46 aa 13 c8  |ot%!spouse%.F...|
0000b0e0  95 20 6c 72 6f 6f 74 25  3c 3e 6e 69 6c 25 0d 46  |. lroot%<>nil%.F|
0000b0f0  b4 19 20 6c 72 6f 6f 74  25 21 63 6f 6c 25 2d 3d  |.. lroot%!col%-=|
0000b100  6d 69 6e 63 6f 6c 25 0d  46 be 2e 20 e7 20 72 6f  |mincol%.F.. . ro|
0000b110  6f 74 25 21 63 6f 6c 25  3e 6d 61 78 63 6f 6c 25  |ot%!col%>maxcol%|
0000b120  20 8c 20 6d 61 78 63 6f  6c 25 3d 72 6f 6f 74 25  | . maxcol%=root%|
0000b130  21 63 6f 6c 25 0d 46 c8  1a 20 6c 72 6f 6f 74 25  |!col%.F.. lroot%|
0000b140  3d 6c 72 6f 6f 74 25 21  73 70 6f 75 73 65 25 0d  |=lroot%!spouse%.|
0000b150  46 d2 05 ce 0d 46 dc 2f  f2 61 64 6a 75 73 74 63  |F....F./.adjustc|
0000b160  6f 6c 75 6d 6e 28 72 6f  6f 74 25 21 63 68 69 6c  |olumn(root%!chil|
0000b170  64 25 2c 6d 69 6e 63 6f  6c 25 2c 6d 61 78 63 6f  |d%,mincol%,maxco|
0000b180  6c 25 29 0d 46 e6 31 f2  61 64 6a 75 73 74 63 6f  |l%).F.1.adjustco|
0000b190  6c 75 6d 6e 28 72 6f 6f  74 25 21 73 69 62 6c 69  |lumn(root%!sibli|
0000b1a0  6e 67 25 2c 6d 69 6e 63  6f 6c 25 2c 6d 61 78 63  |ng%,mincol%,maxc|
0000b1b0  6f 6c 25 29 0d 46 f0 05  e1 0d 46 fa 05 3a 0d 47  |ol%).F....F..:.G|
0000b1c0  04 2b dd f2 64 72 61 77  68 6f 72 69 74 72 65 65  |.+..drawhoritree|
0000b1d0  28 70 25 2c 79 70 6f 73  25 2c 63 6f 6c 73 70 63  |(p%,ypos%,colspc|
0000b1e0  25 2c 73 70 25 2c 46 25  29 0d 47 0e 10 e7 70 25  |%,sp%,F%).G...p%|
0000b1f0  3d 6e 69 6c 25 20 8c 20  e1 0d 47 18 1c 68 65 69  |=nil% . ..G..hei|
0000b200  67 68 74 25 3d 79 70 6f  73 25 2d 38 2a 63 68 61  |ght%=ypos%-8*cha|
0000b210  72 73 70 63 25 0d 47 22  19 78 70 6f 73 25 3d 70  |rspc%.G".xpos%=p|
0000b220  25 21 63 6f 6c 25 2a 63  6f 6c 73 70 63 25 0d 47  |%!col%*colspc%.G|
0000b230  2c 0c e7 20 ac 73 70 25  20 8c 0d 47 36 42 f2 70  |,.. .sp% ..G6B.p|
0000b240  6c 61 63 65 74 65 78 74  28 24 70 25 2c 78 70 6f  |lacetext($p%,xpo|
0000b250  73 25 2b 28 63 6f 6c 73  70 63 25 2d 28 28 63 68  |s%+(colspc%-((ch|
0000b260  61 72 73 70 63 25 2f 32  29 2a a9 24 70 25 29 29  |arspc%/2)*.$p%))|
0000b270  2f 32 2c 79 70 6f 73 25  2c 46 25 29 0d 47 40 61  |/2,ypos%,F%).G@a|
0000b280  f2 70 6c 61 63 65 74 65  78 74 28 24 28 70 25 2b  |.placetext($(p%+|
0000b290  73 75 72 6e 61 6d 65 25  29 2c 78 70 6f 73 25 2b  |surname%),xpos%+|
0000b2a0  28 63 6f 6c 73 70 63 25  2d 28 28 63 68 61 72 73  |(colspc%-((chars|
0000b2b0  70 63 25 2f 32 29 2a a9  24 28 70 25 2b 73 75 72  |pc%/2)*.$(p%+sur|
0000b2c0  6e 61 6d 65 25 29 29 29  2f 32 2c 79 70 6f 73 25  |name%)))/2,ypos%|
0000b2d0  2d 63 68 61 72 73 70 63  25 2c 46 25 29 0d 47 4a  |-charspc%,F%).GJ|
0000b2e0  42 f2 70 6c 61 63 65 64  61 74 65 28 70 25 2c 62  |B.placedate(p%,b|
0000b2f0  69 72 74 68 64 61 74 65  25 2c 78 70 6f 73 25 2c  |irthdate%,xpos%,|
0000b300  79 70 6f 73 25 2d 28 32  2a 63 68 61 72 73 70 63  |ypos%-(2*charspc|
0000b310  25 29 2c 22 42 6f 72 6e  3a 20 22 2c 46 25 29 0d  |%),"Born: ",F%).|
0000b320  47 54 42 f2 70 6c 61 63  65 64 61 74 65 28 70 25  |GTB.placedate(p%|
0000b330  2c 64 65 61 74 68 64 61  74 65 25 2c 78 70 6f 73  |,deathdate%,xpos|
0000b340  25 2c 79 70 6f 73 25 2d  28 33 2a 63 68 61 72 73  |%,ypos%-(3*chars|
0000b350  70 63 25 29 2c 22 44 69  65 64 3a 20 22 2c 46 25  |pc%),"Died: ",F%|
0000b360  29 0d 47 5e 05 cd 0d 47  68 0b e7 20 73 70 25 20  |).G^...Gh.. sp% |
0000b370  8c 0d 47 72 4e 20 f2 70  6c 61 63 65 74 65 78 74  |..GrN .placetext|
0000b380  28 22 41 6e 64 20 22 2b  24 70 25 2c 78 70 6f 73  |("And "+$p%,xpos|
0000b390  25 2b 28 63 6f 6c 73 70  63 25 2d 28 28 63 68 61  |%+(colspc%-((cha|
0000b3a0  72 73 70 63 25 2f 32 29  2a 28 a9 24 70 25 2b 34  |rspc%/2)*(.$p%+4|
0000b3b0  29 29 29 2f 32 2c 79 70  6f 73 25 2c 46 25 29 0d  |)))/2,ypos%,F%).|
0000b3c0  47 7c 62 20 f2 70 6c 61  63 65 74 65 78 74 28 24  |G|b .placetext($|
0000b3d0  28 70 25 2b 73 75 72 6e  61 6d 65 25 29 2c 78 70  |(p%+surname%),xp|
0000b3e0  6f 73 25 2b 28 63 6f 6c  73 70 63 25 2d 28 28 63  |os%+(colspc%-((c|
0000b3f0  68 61 72 73 70 63 25 2f  32 29 2a a9 24 28 70 25  |harspc%/2)*.$(p%|
0000b400  2b 73 75 72 6e 61 6d 65  25 29 29 29 2f 32 2c 79  |+surname%)))/2,y|
0000b410  70 6f 73 25 2d 63 68 61  72 73 70 63 25 2c 46 25  |pos%-charspc%,F%|
0000b420  29 0d 47 86 46 20 f2 70  6c 61 63 65 64 61 74 65  |).G.F .placedate|
0000b430  28 70 25 2c 6d 61 72 72  69 61 67 65 64 61 74 65  |(p%,marriagedate|
0000b440  25 2c 78 70 6f 73 25 2c  79 70 6f 73 25 2d 35 2a  |%,xpos%,ypos%-5*|
0000b450  63 68 61 72 73 70 63 25  2c 22 4d 61 72 72 69 65  |charspc%,"Marrie|
0000b460  64 3a 22 2c 46 25 29 0d  47 90 43 20 f2 70 6c 61  |d:",F%).G.C .pla|
0000b470  63 65 64 61 74 65 28 70  25 2c 62 69 72 74 68 64  |cedate(p%,birthd|
0000b480  61 74 65 25 2c 78 70 6f  73 25 2c 79 70 6f 73 25  |ate%,xpos%,ypos%|
0000b490  2d 28 33 2a 63 68 61 72  73 70 63 25 29 2c 22 42  |-(3*charspc%),"B|
0000b4a0  6f 72 6e 3a 20 22 2c 46  25 29 0d 47 9a 43 20 f2  |orn: ",F%).G.C .|
0000b4b0  70 6c 61 63 65 64 61 74  65 28 70 25 2c 64 65 61  |placedate(p%,dea|
0000b4c0  74 68 64 61 74 65 25 2c  78 70 6f 73 25 2c 79 70  |thdate%,xpos%,yp|
0000b4d0  6f 73 25 2d 28 34 2a 63  68 61 72 73 70 63 25 29  |os%-(4*charspc%)|
0000b4e0  2c 22 44 69 65 64 3a 20  22 2c 46 25 29 0d 47 a4  |,"Died: ",F%).G.|
0000b4f0  49 20 f2 70 6c 61 63 65  64 61 74 65 28 70 25 2c  |I .placedate(p%,|
0000b500  64 69 76 6f 72 63 65 64  61 74 65 25 2c 78 70 6f  |divorcedate%,xpo|
0000b510  73 25 2c 79 70 6f 73 25  2d 28 36 2a 63 68 61 72  |s%,ypos%-(6*char|
0000b520  73 70 63 25 29 2c 22 44  69 76 6f 72 63 65 64 3a  |spc%),"Divorced:|
0000b530  20 22 2c 46 25 29 0d 47  ae 05 cd 0d 47 b8 1b e7  | ",F%).G....G...|
0000b540  20 70 25 21 67 65 6e 25  3c 3e 30 20 80 20 ac 28  | p%!gen%<>0 . .(|
0000b550  73 70 25 29 20 8c 0d 47  c2 20 20 78 73 25 3d 78  |sp%) ..G.  xs%=x|
0000b560  70 6f 73 25 2b 63 6f 6c  73 70 63 25 2f 32 3a 78  |pos%+colspc%/2:x|
0000b570  65 25 3d 78 73 25 0d 47  cc 35 20 79 73 25 3d 79  |e%=xs%.G.5 ys%=y|
0000b580  70 6f 73 25 2b 63 68 61  72 73 70 63 25 2b 63 68  |pos%+charspc%+ch|
0000b590  61 72 73 70 63 25 2f 34  3a 79 65 25 3d 79 73 25  |arspc%/4:ye%=ys%|
0000b5a0  2b 63 68 61 72 73 70 63  25 2f 34 0d 47 d6 23 20  |+charspc%/4.G.# |
0000b5b0  f2 6c 69 6e 65 68 65 61  64 65 72 28 31 2c 78 73  |.lineheader(1,xs|
0000b5c0  25 2c 79 73 25 2c 78 65  25 2c 79 65 25 29 0d 47  |%,ys%,xe%,ye%).G|
0000b5d0  e0 30 20 f2 6c 69 6e 65  63 6f 6f 72 64 28 32 2c  |.0 .linecoord(2,|
0000b5e0  78 73 25 2c 79 73 25 29  3a f2 6c 69 6e 65 63 6f  |xs%,ys%):.lineco|
0000b5f0  6f 72 64 28 38 2c 78 65  25 2c 79 65 25 29 0d 47  |ord(8,xe%,ye%).G|
0000b600  ea 0d 20 f2 6c 69 6e 65  65 6e 64 0d 47 f4 05 cd  |.. .lineend.G...|
0000b610  0d 47 fe 2a e7 20 70 25  21 73 70 6f 75 73 65 25  |.G.*. p%!spouse%|
0000b620  3c 3e 6e 69 6c 25 20 80  20 70 25 21 63 68 69 6c  |<>nil% . p%!chil|
0000b630  64 25 3c 3e 6e 69 6c 25  20 8c 0d 48 08 28 20 78  |d%<>nil% ..H.( x|
0000b640  73 25 3d 78 70 6f 73 25  2b 63 6f 6c 73 70 63 25  |s%=xpos%+colspc%|
0000b650  2f 32 3a 78 65 25 3d 78  73 25 2b 63 6f 6c 73 70  |/2:xe%=xs%+colsp|
0000b660  63 25 0d 48 12 2c 20 79  73 25 3d 79 70 6f 73 25  |c%.H., ys%=ypos%|
0000b670  2d 37 2a 63 68 61 72 73  70 63 25 3a 79 65 25 3d  |-7*charspc%:ye%=|
0000b680  79 73 25 2b 63 68 61 72  73 70 63 25 2f 32 0d 48  |ys%+charspc%/2.H|
0000b690  1c 41 20 e7 20 21 28 70  25 21 73 70 6f 75 73 65  |.A . !(p%!spouse|
0000b6a0  25 2b 64 69 76 6f 72 63  65 64 61 74 65 25 29 3d  |%+divorcedate%)=|
0000b6b0  30 20 8c 20 79 65 25 2b  3d 63 68 61 72 73 70 63  |0 . ye%+=charspc|
0000b6c0  25 3a 79 73 25 2b 3d 63  68 61 72 73 70 63 25 0d  |%:ys%+=charspc%.|
0000b6d0  48 26 59 20 e7 20 21 28  70 25 21 73 70 6f 75 73  |H&Y . !(p%!spous|
0000b6e0  65 25 2b 6d 61 72 72 69  61 67 65 64 61 74 65 25  |e%+marriagedate%|
0000b6f0  29 3d 30 20 80 20 79 73  25 3d 79 70 6f 73 25 2d  |)=0 . ys%=ypos%-|
0000b700  36 2a 63 68 61 72 73 70  63 25 20 8c 20 79 65 25  |6*charspc% . ye%|
0000b710  2b 3d 63 68 61 72 73 70  63 25 3a 79 73 25 2b 3d  |+=charspc%:ys%+=|
0000b720  63 68 61 72 73 70 63 25  0d 48 30 2d 20 e7 20 79  |charspc%.H0- . y|
0000b730  73 25 3d 79 70 6f 73 25  2d 35 2a 63 68 61 72 73  |s%=ypos%-5*chars|
0000b740  70 63 25 20 8c 20 79 65  25 2b 3d 63 68 61 72 73  |pc% . ye%+=chars|
0000b750  70 63 25 2f 32 0d 48 3a  23 20 f2 6c 69 6e 65 68  |pc%/2.H:# .lineh|
0000b760  65 61 64 65 72 28 32 2c  78 73 25 2c 79 73 25 2c  |eader(2,xs%,ys%,|
0000b770  78 65 25 2c 79 65 25 29  0d 48 44 30 20 f2 6c 69  |xe%,ye%).HD0 .li|
0000b780  6e 65 63 6f 6f 72 64 28  32 2c 78 73 25 2c 79 73  |necoord(2,xs%,ys|
0000b790  25 29 3a f2 6c 69 6e 65  63 6f 6f 72 64 28 38 2c  |%):.linecoord(8,|
0000b7a0  78 65 25 2c 79 73 25 29  0d 48 4e 23 20 f2 6c 69  |xe%,ys%).HN# .li|
0000b7b0  6e 65 63 6f 6f 72 64 28  38 2c 78 65 25 2c 79 65  |necoord(8,xe%,ye|
0000b7c0  25 29 3a f2 6c 69 6e 65  65 6e 64 0d 48 58 05 cd  |%):.lineend.HX..|
0000b7d0  0d 48 62 29 e7 20 70 25  21 73 70 6f 75 73 65 25  |.Hb). p%!spouse%|
0000b7e0  3c 3e 6e 69 6c 25 20 80  20 70 25 21 63 68 69 6c  |<>nil% . p%!chil|
0000b7f0  64 25 3d 6e 69 6c 25 20  8c 0d 48 6c 3e 20 78 73  |d%=nil% ..Hl> xs|
0000b800  25 3d 78 70 6f 73 25 2b  63 6f 6c 73 70 63 25 2d  |%=xpos%+colspc%-|
0000b810  63 68 61 72 73 70 63 25  2a 33 3a 78 65 25 3d 78  |charspc%*3:xe%=x|
0000b820  70 6f 73 25 2b 63 6f 6c  73 70 63 25 2b 63 68 61  |pos%+colspc%+cha|
0000b830  72 73 70 63 25 2a 33 0d  48 76 21 20 79 73 25 3d  |rspc%*3.Hv! ys%=|
0000b840  79 70 6f 73 25 2b 63 68  61 72 73 70 63 25 2f 32  |ypos%+charspc%/2|
0000b850  3a 79 65 25 3d 79 73 25  0d 48 80 23 20 f2 6c 69  |:ye%=ys%.H.# .li|
0000b860  6e 65 68 65 61 64 65 72  28 31 2c 78 73 25 2c 79  |neheader(1,xs%,y|
0000b870  73 25 2c 78 65 25 2c 79  65 25 29 0d 48 8a 30 20  |s%,xe%,ye%).H.0 |
0000b880  f2 6c 69 6e 65 63 6f 6f  72 64 28 32 2c 78 73 25  |.linecoord(2,xs%|
0000b890  2c 79 73 25 29 3a f2 6c  69 6e 65 63 6f 6f 72 64  |,ys%):.linecoord|
0000b8a0  28 38 2c 78 65 25 2c 79  73 25 29 0d 48 94 0d 20  |(8,xe%,ys%).H.. |
0000b8b0  f2 6c 69 6e 65 65 6e 64  0d 48 9e 05 cd 0d 48 a8  |.lineend.H....H.|
0000b8c0  0d e7 20 73 70 25 20 8c  20 e1 0d 48 b2 12 6c 70  |.. sp% . ..H..lp|
0000b8d0  25 3d 70 25 21 73 70 6f  75 73 65 25 0d 48 bc 10  |%=p%!spouse%.H..|
0000b8e0  c8 95 20 6c 70 25 3c 3e  6e 69 6c 25 0d 48 c6 2a  |.. lp%<>nil%.H.*|
0000b8f0  20 f2 64 72 61 77 68 6f  72 69 74 72 65 65 28 6c  | .drawhoritree(l|
0000b900  70 25 2c 79 70 6f 73 25  2c 63 6f 6c 73 70 63 25  |p%,ypos%,colspc%|
0000b910  2c b9 2c 46 25 29 0d 48  d0 14 20 6c 70 25 3d 6c  |,.,F%).H.. lp%=l|
0000b920  70 25 21 73 70 6f 75 73  65 25 0d 48 da 05 ce 0d  |p%!spouse%.H....|
0000b930  48 e4 3b f2 64 72 61 77  68 6f 72 69 74 72 65 65  |H.;.drawhoritree|
0000b940  28 70 25 21 63 68 69 6c  64 25 2c 79 70 6f 73 25  |(p%!child%,ypos%|
0000b950  2d 31 30 2a 63 68 61 72  73 70 63 25 2c 63 6f 6c  |-10*charspc%,col|
0000b960  73 70 63 25 2c a3 2c 46  25 29 0d 48 ee 31 f2 64  |spc%,.,F%).H.1.d|
0000b970  72 61 77 68 6f 72 69 74  72 65 65 28 70 25 21 73  |rawhoritree(p%!s|
0000b980  69 62 6c 69 6e 67 25 2c  79 70 6f 73 25 2c 63 6f  |ibling%,ypos%,co|
0000b990  6c 73 70 63 25 2c a3 2c  46 25 29 0d 48 f8 17 e7  |lspc%,.,F%).H...|
0000b9a0  20 70 25 21 63 68 69 6c  64 25 3c 3e 6e 69 6c 25  | p%!child%<>nil%|
0000b9b0  20 8c 0d 49 02 1d 20 6e  25 3d a4 6c 61 73 74 63  | ..I.. n%=.lastc|
0000b9c0  68 69 6c 64 28 70 25 21  63 68 69 6c 64 25 29 0d  |hild(p%!child%).|
0000b9d0  49 0c 19 20 63 25 3d 21  28 70 25 21 63 68 69 6c  |I.. c%=!(p%!chil|
0000b9e0  64 25 2b 63 6f 6c 25 29  0d 49 16 31 20 78 73 25  |d%+col%).I.1 xs%|
0000b9f0  3d 63 25 2a 63 6f 6c 73  70 63 25 2b 63 6f 6c 73  |=c%*colspc%+cols|
0000ba00  70 63 25 2f 32 3a 78 65  25 3d 28 6e 25 2b 2e 35  |pc%/2:xe%=(n%+.5|
0000ba10  29 2a 63 6f 6c 73 70 63  25 0d 49 20 23 20 79 73  |)*colspc%.I # ys|
0000ba20  25 3d 79 70 6f 73 25 2d  38 2e 35 2a 63 68 61 72  |%=ypos%-8.5*char|
0000ba30  73 70 63 25 3a 79 65 25  3d 79 73 25 0d 49 2a 23  |spc%:ye%=ys%.I*#|
0000ba40  20 f2 6c 69 6e 65 68 65  61 64 65 72 28 31 2c 78  | .lineheader(1,x|
0000ba50  73 25 2c 79 73 25 2c 78  65 25 2c 79 65 25 29 0d  |s%,ys%,xe%,ye%).|
0000ba60  49 34 30 20 f2 6c 69 6e  65 63 6f 6f 72 64 28 32  |I40 .linecoord(2|
0000ba70  2c 78 73 25 2c 79 73 25  29 3a f2 6c 69 6e 65 63  |,xs%,ys%):.linec|
0000ba80  6f 6f 72 64 28 38 2c 78  65 25 2c 79 65 25 29 0d  |oord(8,xe%,ye%).|
0000ba90  49 3e 0d 20 f2 6c 69 6e  65 65 6e 64 0d 49 48 39  |I>. .lineend.IH9|
0000baa0  20 78 73 25 3d 70 25 21  63 6f 6c 25 2a 63 6f 6c  | xs%=p%!col%*col|
0000bab0  73 70 63 25 2b 28 63 6f  6c 73 70 63 25 2f 32 29  |spc%+(colspc%/2)|
0000bac0  3a 79 65 25 3d 79 70 6f  73 25 2d 34 2a 63 68 61  |:ye%=ypos%-4*cha|
0000bad0  72 73 70 63 25 0d 49 52  0c 20 6e 25 3d 6e 25 2f  |rspc%.IR. n%=n%/|
0000bae0  32 0d 49 5c 30 20 78 65  25 3d 28 a4 63 6f 6c 75  |2.I\0 xe%=(.colu|
0000baf0  6d 6e 28 70 25 21 63 68  69 6c 64 25 2c 70 25 21  |mn(p%!child%,p%!|
0000bb00  63 6f 6c 25 29 2b 2e 35  29 2a 63 6f 6c 73 70 63  |col%)+.5)*colspc|
0000bb10  25 0d 49 66 1b 20 79 73  25 3d 79 70 6f 73 25 2d  |%.If. ys%=ypos%-|
0000bb20  38 2e 35 2a 63 68 61 72  73 70 63 25 0d 49 70 10  |8.5*charspc%.Ip.|
0000bb30  20 e7 20 78 65 25 3e 78  73 25 20 8c 0d 49 7a 24  | . xe%>xs% ..Iz$|
0000bb40  20 20 f2 6c 69 6e 65 68  65 61 64 65 72 28 33 2c  |  .lineheader(3,|
0000bb50  78 73 25 2c 79 73 25 2c  78 65 25 2c 79 65 25 29  |xs%,ys%,xe%,ye%)|
0000bb60  0d 49 84 06 20 cc 0d 49  8e 24 20 20 f2 6c 69 6e  |.I.. ..I.$  .lin|
0000bb70  65 68 65 61 64 65 72 28  33 2c 78 65 25 2c 79 73  |eheader(3,xe%,ys|
0000bb80  25 2c 78 73 25 2c 79 65  25 29 0d 49 98 06 20 cd  |%,xs%,ye%).I.. .|
0000bb90  0d 49 a2 38 20 f2 6c 69  6e 65 63 6f 6f 72 64 28  |.I.8 .linecoord(|
0000bba0  32 2c 78 73 25 2c 79 65  25 29 3a f2 6c 69 6e 65  |2,xs%,ye%):.line|
0000bbb0  63 6f 6f 72 64 28 38 2c  78 73 25 2c 79 73 25 2b  |coord(8,xs%,ys%+|
0000bbc0  68 65 69 67 68 74 25 29  0d 49 ac 38 20 f2 6c 69  |height%).I.8 .li|
0000bbd0  6e 65 63 6f 6f 72 64 28  38 2c 78 65 25 2c 79 73  |necoord(8,xe%,ys|
0000bbe0  25 2b 68 65 69 67 68 74  25 29 3a f2 6c 69 6e 65  |%+height%):.line|
0000bbf0  63 6f 6f 72 64 28 38 2c  78 65 25 2c 79 73 25 29  |coord(8,xe%,ys%)|
0000bc00  0d 49 b6 0d 20 f2 6c 69  6e 65 65 6e 64 0d 49 c0  |.I.. .lineend.I.|
0000bc10  05 cd 0d 49 ca 05 e1 0d  49 d4 05 3a 0d 49 de 19  |...I....I..:.I..|
0000bc20  dd a4 6e 6f 6f 66 63 68  69 6c 64 72 65 6e 28 72  |..noofchildren(r|
0000bc30  6f 6f 74 25 29 0d 49 e8  0c ea 20 6c 72 6f 6f 74  |oot%).I... lroot|
0000bc40  25 0d 49 f2 16 72 6f 6f  74 25 3d 72 6f 6f 74 25  |%.I..root%=root%|
0000bc50  21 63 68 69 6c 64 25 0d  49 fc 09 6e 6f 25 3d 30  |!child%.I..no%=0|
0000bc60  0d 4a 06 12 c8 95 20 72  6f 6f 74 25 3c 3e 6e 69  |.J.... root%<>ni|
0000bc70  6c 25 0d 4a 10 0b 20 6e  6f 25 2b 3d 31 0d 4a 1a  |l%.J.. no%+=1.J.|
0000bc80  11 20 6c 72 6f 6f 74 25  3d 72 6f 6f 74 25 0d 4a  |. lroot%=root%.J|
0000bc90  24 1c 20 c8 95 20 6c 72  6f 6f 74 25 21 73 70 6f  |$. .. lroot%!spo|
0000bca0  75 73 65 25 3c 3e 6e 69  6c 25 0d 4a 2e 0c 20 20  |use%<>nil%.J..  |
0000bcb0  6e 6f 25 2b 3d 31 0d 4a  38 1b 20 20 6c 72 6f 6f  |no%+=1.J8.  lroo|
0000bcc0  74 25 3d 6c 72 6f 6f 74  25 21 73 70 6f 75 73 65  |t%=lroot%!spouse|
0000bcd0  25 0d 4a 42 06 20 ce 0d  4a 4c 19 20 72 6f 6f 74  |%.JB. ..JL. root|
0000bce0  25 3d 72 6f 6f 74 25 21  73 69 62 6c 69 6e 67 25  |%=root%!sibling%|
0000bcf0  0d 4a 56 05 ce 0d 4a 60  08 3d 6e 6f 25 0d 4a 6a  |.JV...J`.=no%.Jj|
0000bd00  05 3a 0d 4a 74 13 dd a4  63 6f 6c 75 6d 6e 28 70  |.:.Jt...column(p|
0000bd10  25 2c 6e 25 29 0d 4a 7e  0c ea 20 63 25 2c 70 6c  |%,n%).J~.. c%,pl|
0000bd20  25 0d 4a 88 0a 63 25 3d  2d 31 30 0d 4a 92 0f c8  |%.J..c%=-10.J...|
0000bd30  95 20 70 25 3c 3e 6e 69  6c 25 0d 4a 9c 30 20 e7  |. p%<>nil%.J.0 .|
0000bd40  20 28 28 70 25 21 63 6f  6c 25 2d 6e 25 29 5e 32  | ((p%!col%-n%)^2|
0000bd50  29 3c 28 28 63 25 2d 6e  25 29 5e 32 29 20 8c 20  |)<((c%-n%)^2) . |
0000bd60  63 25 3d 70 25 21 63 6f  6c 25 0d 4a a6 0b 20 70  |c%=p%!col%.J.. p|
0000bd70  6c 25 3d 70 25 0d 4a b0  19 20 c8 95 20 70 6c 25  |l%=p%.J.. .. pl%|
0000bd80  21 73 70 6f 75 73 65 25  3c 3e 6e 69 6c 25 0d 4a  |!spouse%<>nil%.J|
0000bd90  ba 15 20 20 70 6c 25 3d  70 6c 25 21 73 70 6f 75  |..  pl%=pl%!spou|
0000bda0  73 65 25 0d 4a c4 33 20  20 e7 20 28 28 70 6c 25  |se%.J.3  . ((pl%|
0000bdb0  21 63 6f 6c 25 2d 6e 25  29 5e 32 29 3c 28 28 63  |!col%-n%)^2)<((c|
0000bdc0  25 2d 6e 25 29 5e 32 29  20 8c 20 63 25 3d 70 6c  |%-n%)^2) . c%=pl|
0000bdd0  25 21 63 6f 6c 25 0d 4a  ce 06 20 ce 0d 4a d8 13  |%!col%.J.. ..J..|
0000bde0  20 70 25 3d 70 25 21 73  69 62 6c 69 6e 67 25 0d  | p%=p%!sibling%.|
0000bdf0  4a e2 05 ce 0d 4a ec 07  3d 63 25 0d 4a f6 05 3a  |J....J..=c%.J..:|
0000be00  0d 4b 00 13 dd a4 6c 61  73 74 63 68 69 6c 64 28  |.K....lastchild(|
0000be10  70 25 29 0d 4b 0a 18 c8  95 20 70 25 21 73 69 62  |p%).K.... p%!sib|
0000be20  6c 69 6e 67 25 3c 3e 6e  69 6c 25 0d 4b 14 13 20  |ling%<>nil%.K.. |
0000be30  70 25 3d 70 25 21 73 69  62 6c 69 6e 67 25 0d 4b  |p%=p%!sibling%.K|
0000be40  1e 05 ce 0d 4b 28 0c 3d  70 25 21 63 6f 6c 25 0d  |....K(.=p%!col%.|
0000be50  4b 32 05 3a 0d 4b 3c 11  dd a4 64 65 6c 65 74 65  |K2.:.K<...delete|
0000be60  61 62 6f 76 65 0d 4b 46  15 61 62 6f 76 65 25 3d  |above.KF.above%=|
0000be70  b9 3a 3d a4 64 65 6c 65  74 65 0d 4b 50 05 3a 0d  |.:=.delete.KP.:.|
0000be80  4b 5a 11 dd a4 64 65 6c  65 74 65 62 65 6c 6f 77  |KZ...deletebelow|
0000be90  0d 4b 64 15 61 62 6f 76  65 25 3d a3 3a 3d a4 64  |.Kd.above%=.:=.d|
0000bea0  65 6c 65 74 65 0d 4b 6e  05 3a 0d 4b 78 12 dd f2  |elete.Kn.:.Kx...|
0000beb0  64 65 6c 65 74 65 70 61  72 65 6e 74 0d 4b 82 1e  |deleteparent.K..|
0000bec0  f2 67 65 6e 70 6f 69 6e  74 65 72 73 28 63 75 72  |.genpointers(cur|
0000bed0  72 65 6e 74 5f 70 65 72  25 29 0d 4b 8c 2f 70 25  |rent_per%).K./p%|
0000bee0  3d 67 65 6e 70 6f 69 6e  74 65 72 73 25 21 28 28  |=genpointers%!((|
0000bef0  28 63 75 72 72 65 6e 74  5f 70 65 72 25 21 67 65  |(current_per%!ge|
0000bf00  6e 25 29 2d 31 29 2a 34  29 0d 4b 96 14 74 72 6f  |n%)-1)*4).K..tro|
0000bf10  6f 74 25 3d 70 25 21 63  68 69 6c 64 25 0d 4b a0  |ot%=p%!child%.K.|
0000bf20  12 70 25 21 63 68 69 6c  64 25 3d 6e 69 6c 25 0d  |.p%!child%=nil%.|
0000bf30  4b aa 16 f2 64 65 6c 65  74 65 74 72 65 65 28 72  |K...deletetree(r|
0000bf40  6f 6f 74 25 29 0d 4b b4  10 72 6f 6f 74 25 3d 74  |oot%).K..root%=t|
0000bf50  72 6f 6f 74 25 0d 4b be  14 c8 95 20 72 6f 6f 74  |root%.K.... root|
0000bf60  25 21 67 65 6e 25 3c 3e  30 0d 4b c8 13 20 f2 64  |%!gen%<>0.K.. .d|
0000bf70  65 63 67 65 6e 28 72 6f  6f 74 25 29 0d 4b d2 05  |ecgen(root%).K..|
0000bf80  ce 0d 4b dc 0e f2 65 6e  64 64 65 6c 65 74 65 0d  |..K...enddelete.|
0000bf90  4b e6 05 e1 0d 4b f0 05  3a 0d 4b fa 14 dd f2 73  |K....K..:.K....s|
0000bfa0  61 76 65 63 73 76 28 66  69 6c 65 24 29 0d 4c 04  |avecsv(file$).L.|
0000bfb0  08 ea 20 66 25 0d 4c 0e  0f 66 25 3d ae 28 66 69  |.. f%.L..f%=.(fi|
0000bfc0  6c 65 24 29 0d 4c 18 1a  f2 73 61 76 65 74 72 65  |le$).L...savetre|
0000bfd0  65 63 73 76 28 72 6f 6f  74 25 2c 66 25 29 0d 4c  |ecsv(root%,f%).L|
0000bfe0  22 08 d9 23 66 25 0d 4c  2c 22 ff 28 22 53 45 54  |"..#f%.L,".("SET|
0000bff0  54 59 50 45 20 22 2b 66  69 6c 65 24 2b 22 20 43  |TYPE "+file$+" C|
0000c000  53 56 46 69 6c 65 22 29  0d 4c 36 05 e1 0d 4c 40  |SVFile").L6...L@|
0000c010  05 3a 0d 4c 4a 1c dd f2  73 61 76 65 74 72 65 65  |.:.LJ...savetree|
0000c020  63 73 76 28 74 72 6f 6f  74 25 2c 66 25 29 0d 4c  |csv(troot%,f%).L|
0000c030  54 0c ea 20 6c 72 6f 6f  74 25 0d 4c 5e 14 e7 20  |T.. lroot%.L^.. |
0000c040  74 72 6f 6f 74 25 3c 3e  6e 69 6c 25 20 8c 0d 4c  |troot%<>nil% ..L|
0000c050  68 22 20 f2 73 61 76 65  70 65 72 73 6f 6e 63 73  |h" .savepersoncs|
0000c060  76 28 74 72 6f 6f 74 25  2c 66 25 2c 22 4d 22 29  |v(troot%,f%,"M")|
0000c070  0d 4c 72 1a 20 6c 72 6f  6f 74 25 3d 74 72 6f 6f  |.Lr. lroot%=troo|
0000c080  74 25 21 73 70 6f 75 73  65 25 0d 4c 7c 14 20 c8  |t%!spouse%.L|. .|
0000c090  95 20 6c 72 6f 6f 74 25  3c 3e 6e 69 6c 25 0d 4c  |. lroot%<>nil%.L|
0000c0a0  86 23 20 20 f2 73 61 76  65 70 65 72 73 6f 6e 63  |.#  .savepersonc|
0000c0b0  73 76 28 6c 72 6f 6f 74  25 2c 66 25 2c 22 53 22  |sv(lroot%,f%,"S"|
0000c0c0  29 0d 4c 90 1b 20 20 6c  72 6f 6f 74 25 3d 6c 72  |).L..  lroot%=lr|
0000c0d0  6f 6f 74 25 21 73 70 6f  75 73 65 25 0d 4c 9a 06  |oot%!spouse%.L..|
0000c0e0  20 ce 0d 4c a4 25 20 f2  73 61 76 65 74 72 65 65  | ..L.% .savetree|
0000c0f0  63 73 76 28 74 72 6f 6f  74 25 21 73 69 62 6c 69  |csv(troot%!sibli|
0000c100  6e 67 25 2c 66 25 29 0d  4c ae 23 20 f2 73 61 76  |ng%,f%).L.# .sav|
0000c110  65 74 72 65 65 63 73 76  28 74 72 6f 6f 74 25 21  |etreecsv(troot%!|
0000c120  63 68 69 6c 64 25 2c 66  25 29 0d 4c b8 05 cd 0d  |child%,f%).L....|
0000c130  4c c2 05 e1 0d 4c cc 05  3a 0d 4c d6 21 dd f2 73  |L....L..:.L.!..s|
0000c140  61 76 65 70 65 72 73 6f  6e 63 73 76 28 74 72 6f  |avepersoncsv(tro|
0000c150  6f 74 25 2c 66 25 2c 74  24 29 0d 4c e0 19 ea 61  |ot%,f%,t$).L...a|
0000c160  24 2c 6c 6f 6f 70 25 2c  70 61 72 25 2c 70 6f 69  |$,loop%,par%,poi|
0000c170  6e 74 25 0d 4c ea 15 e7  20 74 72 6f 6f 74 25 3d  |nt%.L... troot%=|
0000c180  6e 69 6c 25 20 8c 20 e1  0d 4c f4 09 61 24 3d 22  |nil% . ..L..a$="|
0000c190  22 0d 4c fe 2c 61 24 2b  3d 24 28 74 72 6f 6f 74  |".L.,a$+=$(troot|
0000c1a0  25 29 2b 22 2c 22 2b 24  28 74 72 6f 6f 74 25 2b  |%)+","+$(troot%+|
0000c1b0  73 75 72 6e 61 6d 65 25  29 2b 22 2c 22 0d 4d 08  |surname%)+",".M.|
0000c1c0  1a 61 24 2b 3d bd 28 74  72 6f 6f 74 25 21 73 65  |.a$+=.(troot%!se|
0000c1d0  78 25 29 2b 22 2c 22 0d  4d 12 2b 61 24 2b 3d a4  |x%)+",".M.+a$+=.|
0000c1e0  63 6f 6e 76 6e 75 6d 64  61 74 65 28 74 72 6f 6f  |convnumdate(troo|
0000c1f0  74 25 21 62 69 72 74 68  64 61 74 65 25 29 2b 22  |t%!birthdate%)+"|
0000c200  2c 22 0d 4d 1c 2b 61 24  2b 3d a4 63 6f 6e 76 6e  |,".M.+a$+=.convn|
0000c210  75 6d 64 61 74 65 28 74  72 6f 6f 74 25 21 64 65  |umdate(troot%!de|
0000c220  61 74 68 64 61 74 65 25  29 2b 22 2c 22 0d 4d 26  |athdate%)+",".M&|
0000c230  2e 61 24 2b 3d a4 63 6f  6e 76 6e 75 6d 64 61 74  |.a$+=.convnumdat|
0000c240  65 28 74 72 6f 6f 74 25  21 6d 61 72 72 69 61 67  |e(troot%!marriag|
0000c250  65 64 61 74 65 25 29 2b  22 2c 22 0d 4d 30 2d 61  |edate%)+",".M0-a|
0000c260  24 2b 3d a4 63 6f 6e 76  6e 75 6d 64 61 74 65 28  |$+=.convnumdate(|
0000c270  74 72 6f 6f 74 25 21 64  69 76 6f 72 63 65 64 61  |troot%!divorceda|
0000c280  74 65 25 29 2b 22 2c 22  0d 4d 3a 1a 61 24 2b 3d  |te%)+",".M:.a$+=|
0000c290  c3 28 74 72 6f 6f 74 25  21 67 65 6e 25 29 2b 22  |.(troot%!gen%)+"|
0000c2a0  2c 22 0d 4d 44 18 f2 67  65 6e 70 6f 69 6e 74 65  |,".MD..genpointe|
0000c2b0  72 73 28 74 72 6f 6f 74  25 29 0d 4d 4e 1e e7 20  |rs(troot%).MN.. |
0000c2c0  74 72 6f 6f 74 25 21 67  65 6e 25 3d 30 20 84 20  |troot%!gen%=0 . |
0000c2d0  74 24 3d 22 53 22 20 8c  0d 4d 58 0d 20 20 61 24  |t$="S" ..MX.  a$|
0000c2e0  2b 3d 22 2c 22 0d 4d 62  05 cc 0d 4d 6c 2e 20 20  |+=",".Mb...Ml.  |
0000c2f0  70 61 72 25 3d 21 28 67  65 6e 70 6f 69 6e 74 65  |par%=!(genpointe|
0000c300  72 73 25 2b 28 28 74 72  6f 6f 74 25 21 67 65 6e  |rs%+((troot%!gen|
0000c310  25 29 2d 31 29 2a 34 29  0d 4d 76 20 20 20 6c 6f  |%)-1)*4).Mv   lo|
0000c320  6f 70 25 3d 31 3a 70 6f  69 6e 74 25 3d 70 61 72  |op%=1:point%=par|
0000c330  25 21 63 68 69 6c 64 25  0d 4d 80 17 20 20 c8 95  |%!child%.M..  ..|
0000c340  20 70 6f 69 6e 74 25 3c  3e 74 72 6f 6f 74 25 0d  | point%<>troot%.|
0000c350  4d 8a 26 20 20 20 6c 6f  6f 70 25 2b 3d 31 3a 70  |M.&   loop%+=1:p|
0000c360  6f 69 6e 74 25 3d 70 6f  69 6e 74 25 21 73 69 62  |oint%=point%!sib|
0000c370  6c 69 6e 67 25 0d 4d 94  07 20 20 ce 0d 4d 9e 25  |ling%.M..  ..M.%|
0000c380  20 20 61 24 2b 3d c3 28  6c 6f 6f 70 25 29 2b a4  |  a$+=.(loop%)+.|
0000c390  65 6e 64 69 6e 67 28 6c  6f 6f 70 25 29 2b 22 2c  |ending(loop%)+",|
0000c3a0  22 0d 4d a8 26 20 20 61  24 2b 3d 24 28 70 61 72  |".M.&  a$+=$(par|
0000c3b0  25 29 2b 22 20 22 2b 24  28 70 61 72 25 2b 73 75  |%)+" "+$(par%+su|
0000c3c0  72 6e 61 6d 65 25 29 0d  4d b2 05 cd 0d 4d bc 0e  |rname%).M....M..|
0000c3d0  61 24 2b 3d 22 2c 22 2b  74 24 0d 4d c6 0b d5 23  |a$+=","+t$.M...#|
0000c3e0  66 25 2c 61 24 0d 4d c7  30 f4 20 44 61 74 61 63  |f%,a$.M.0. Datac|
0000c3f0  61 72 64 20 44 61 74 61  20 69 73 20 68 65 6c 64  |ard Data is held|
0000c400  20 61 73 20 73 74 72 69  6e 67 73 20 69 6e 20 6d  | as strings in m|
0000c410  65 6d 6f 72 79 0d 4d c8  37 f4 20 61 74 20 74 72  |emory.M.7. at tr|
0000c420  6f 6f 74 25 2b 70 65 72  73 6f 6e 6c 65 6e 67 74  |oot%+personlengt|
0000c430  68 25 2d 28 31 36 2a 36  35 29 2b 6c 25 2a 36 35  |h%-(16*65)+l%*65|
0000c440  20 28 6c 25 3d 20 30 2e  2e 31 35 29 0d 4d d0 05  | (l%= 0..15).M..|
0000c450  e1 0d 4d da 05 3a 0d 4d  e4 10 dd a4 65 6e 64 69  |..M..:.M....endi|
0000c460  6e 67 28 6c 25 29 0d 4d  ee 09 ea 65 6e 64 24 0d  |ng(l%).M...end$.|
0000c470  4d f8 1a e7 20 6c 25 3e  33 20 80 20 6c 25 3c 32  |M... l%>3 . l%<2|
0000c480  31 20 8c 20 3d 22 74 68  22 0d 4e 02 0f c8 8e 20  |1 . ="th".N.... |
0000c490  6c 25 83 20 31 30 20 ca  0d 4e 0c 13 c9 20 31 20  |l%. 10 ..N... 1 |
0000c4a0  3a 20 65 6e 64 24 3d 22  73 74 22 0d 4e 16 13 c9  |: end$="st".N...|
0000c4b0  20 32 20 3a 20 65 6e 64  24 3d 22 6e 64 22 0d 4e  | 2 : end$="nd".N|
0000c4c0  20 13 c9 20 33 20 3a 20  65 6e 64 24 3d 22 72 64  | .. 3 : end$="rd|
0000c4d0  22 0d 4e 2a 10 7f 20 3a  65 6e 64 24 3d 22 74 68  |".N*.. :end$="th|
0000c4e0  22 0d 4e 34 05 cb 0d 4e  3e 09 3d 65 6e 64 24 0d  |".N4...N>.=end$.|
0000c4f0  4e 48 05 3a 0d 4e 52 10  dd a4 64 61 74 61 77 69  |NH.:.NR...datawi|
0000c500  6e 64 6f 77 0d 4e 5c 11  e7 20 64 61 74 61 76 69  |ndow.N\.. datavi|
0000c510  65 77 25 20 8c 0d 4e 66  24 20 64 61 74 61 76 69  |ew% ..Nf$ datavi|
0000c520  65 77 25 3d a3 3a 21 62  6c 6f 63 6b 25 3d 64 61  |ew%=.:!block%=da|
0000c530  74 61 77 69 6e 64 6f 77  25 0d 4e 70 26 20 c8 99  |tawindow%.Np& ..|
0000c540  20 22 57 69 6d 70 5f 47  65 74 57 69 6e 64 6f 77  | "Wimp_GetWindow|
0000c550  53 74 61 74 65 22 2c 30  2c 62 6c 6f 63 6b 25 0d  |State",0,block%.|
0000c560  4e 7a 23 20 c8 99 20 22  57 69 6d 70 5f 43 6c 6f  |Nz# .. "Wimp_Clo|
0000c570  73 65 57 69 6e 64 6f 77  22 2c 30 2c 62 6c 6f 63  |seWindow",0,bloc|
0000c580  6b 25 0d 4e 84 05 cc 0d  4e 8e 24 20 64 61 74 61  |k%.N....N.$ data|
0000c590  76 69 65 77 25 3d b9 3a  21 62 6c 6f 63 6b 25 3d  |view%=.:!block%=|
0000c5a0  64 61 74 61 77 69 6e 64  6f 77 25 0d 4e 98 26 20  |datawindow%.N.& |
0000c5b0  c8 99 20 22 57 69 6d 70  5f 47 65 74 57 69 6e 64  |.. "Wimp_GetWind|
0000c5c0  6f 77 53 74 61 74 65 22  2c 30 2c 62 6c 6f 63 6b  |owState",0,block|
0000c5d0  25 0d 4e a2 22 20 c8 99  20 22 57 69 6d 70 5f 4f  |%.N." .. "Wimp_O|
0000c5e0  70 65 6e 57 69 6e 64 6f  77 22 2c 30 2c 62 6c 6f  |penWindow",0,blo|
0000c5f0  63 6b 25 0d 4e ac 05 cd  0d 4e b6 06 3d 30 0d 4e  |ck%.N....N..=0.N|
0000c600  c0 05 3a 0d 4e ca 12 dd  f2 64 61 74 61 76 69 65  |..:.N....datavie|
0000c610  77 69 6e 69 74 0d 4e d4  0a f7 20 8d 50 50 4f 0d  |winit.N... .PPO.|
0000c620  4e de 0f e3 20 6c 25 3d  31 20 b8 20 31 36 0d 4e  |N... l%=1 . 16.N|
0000c630  e8 14 20 f3 20 64 61 74  61 6d 61 73 6b 24 28 6c  |.. . datamask$(l|
0000c640  25 29 0d 4e f2 05 ed 0d  4e fc 05 e1 0d 4f 06 05  |%).N....N....O..|
0000c650  3a 0d 4f 10 1a dc 20 22  4c 6f 63 61 74 69 6f 6e  |:.O... "Location|
0000c660  20 6f 66 20 42 69 72 74  68 3a 22 0d 4f 1a 1a dc  | of Birth:".O...|
0000c670  20 22 20 20 20 20 20 20  20 20 20 6f 66 20 44 65  | "         of De|
0000c680  61 74 68 3a 22 0d 4f 24  13 dc 20 22 4f 63 63 75  |ath:".O$.. "Occu|
0000c690  70 61 74 69 6f 6e 3a 22  0d 4f 2e 10 dc 20 22 41  |pation:".O... "A|
0000c6a0  64 64 72 65 73 73 3a 22  0d 4f 38 10 dc 20 22 41  |ddress:".O8.. "A|
0000c6b0  64 64 72 65 73 73 3a 22  0d 4f 42 10 dc 20 22 41  |ddress:".OB.. "A|
0000c6c0  64 64 72 65 73 73 3a 22  0d 4f 4c 12 dc 20 22 52  |ddress:".OL.. "R|
0000c6d0  65 66 65 72 65 6e 63 65  3a 22 0d 4f 56 08 dc 20  |eference:".OV.. |
0000c6e0  22 22 0d 4f 60 08 dc 20  22 22 0d 4f 6a 11 dc 20  |"".O`.. "".Oj.. |
0000c6f0  22 43 6f 6d 6d 65 6e 74  73 3a 22 0d 4f 74 08 dc  |"Comments:".Ot..|
0000c700  20 22 22 0d 4f 7e 08 dc  20 22 22 0d 4f 88 08 dc  | "".O~.. "".O...|
0000c710  20 22 22 0d 4f 92 12 dc  20 22 4e 69 63 6b 6e 61  | "".O... "Nickna|
0000c720  6d 65 73 3a 22 0d 4f 9c  08 dc 20 22 22 0d 4f a6  |mes:".O... "".O.|
0000c730  08 dc 20 22 22 0d 4f b0  05 3a 0d 4f ba 10 dd f2  |.. "".O..:.O....|
0000c740  72 65 64 72 61 77 64 61  74 61 0d 4f c4 19 ea 20  |redrawdata.O... |
0000c750  6c 6f 6f 70 25 2c 77 25  2c 68 25 2c 6f 78 25 2c  |loop%,w%,h%,ox%,|
0000c760  6f 79 25 0d 4f ce 30 68  25 3d 28 28 62 6c 6f 63  |oy%.O.0h%=((bloc|
0000c770  6b 25 21 34 30 2b 31 36  29 81 20 33 32 29 2d 28  |k%!40+16). 32)-(|
0000c780  28 62 6c 6f 63 6b 25 21  33 32 2d 31 36 29 81 20  |(block%!32-16). |
0000c790  33 32 29 0d 4f d8 2e 77  25 3d 28 28 62 6c 6f 63  |32).O..w%=((bloc|
0000c7a0  6b 25 21 33 36 2b 38 29  81 20 31 36 29 2d 28 28  |k%!36+8). 16)-((|
0000c7b0  62 6c 6f 63 6b 25 21 32  38 2d 39 29 81 20 31 36  |block%!28-9). 16|
0000c7c0  29 0d 4f e2 2c 6f 78 25  3d 28 62 6c 6f 63 6b 25  |).O.,ox%=(block%|
0000c7d0  21 32 38 2d 28 62 6c 6f  63 6b 25 21 34 2d 62 6c  |!28-(block%!4-bl|
0000c7e0  6f 63 6b 25 21 32 30 29  29 81 20 31 36 0d 4f ec  |ock%!20)). 16.O.|
0000c7f0  2d 6f 79 25 3d 28 62 6c  6f 63 6b 25 21 34 30 2d  |-oy%=(block%!40-|
0000c800  28 62 6c 6f 63 6b 25 21  31 36 2d 62 6c 6f 63 6b  |(block%!16-block|
0000c810  25 21 32 34 29 29 81 20  33 32 0d 4f f6 14 e7 20  |%!24)). 32.O... |
0000c820  6f 78 25 3c 3d 30 20 8c  20 6f 78 25 3d 30 0d 50  |ox%<=0 . ox%=0.P|
0000c830  00 15 e7 20 6f 79 25 3e  31 35 20 8c 20 6f 79 25  |... oy%>15 . oy%|
0000c840  3d 31 35 0d 50 0a 22 e3  20 6c 6f 6f 70 25 3d 6f  |=15.P.". loop%=o|
0000c850  79 25 2b 31 20 b8 20 20  6f 79 25 2d 68 25 2b 31  |y%+1 .  oy%-h%+1|
0000c860  20 88 20 2d 31 0d 50 14  1b e7 20 6c 6f 6f 70 25  | . -1.P... loop%|
0000c870  3c 3d 31 36 20 80 20 6c  6f 6f 70 25 3e 30 20 8c  |<=16 . loop%>0 .|
0000c880  0d 50 1e 1b 20 c8 99 20  22 57 69 6d 70 5f 53 65  |.P.. .. "Wimp_Se|
0000c890  74 43 6f 6c 6f 75 72 22  2c 31 31 0d 50 28 18 20  |tColour",11.P(. |
0000c8a0  ec 20 6f 78 25 2a 31 36  2c 6c 6f 6f 70 25 2a 33  |. ox%*16,loop%*3|
0000c8b0  32 2d 31 0d 50 32 2c 20  f1 c1 64 61 74 61 6d 61  |2-1.P2, ..datama|
0000c8c0  73 6b 24 28 31 37 2d 6c  6f 6f 70 25 29 2c 6f 78  |sk$(17-loop%),ox|
0000c8d0  25 2b 31 2c 28 6f 78 25  2b 77 25 2b 31 29 29 0d  |%+1,(ox%+w%+1)).|
0000c8e0  50 3c 1a 20 c8 99 20 22  57 69 6d 70 5f 53 65 74  |P<. .. "Wimp_Set|
0000c8f0  43 6f 6c 6f 75 72 22 2c  37 0d 50 46 18 20 ec 20  |Colour",7.PF. . |
0000c900  6f 78 25 2a 31 36 2c 6c  6f 6f 70 25 2a 33 32 2d  |ox%*16,loop%*32-|
0000c910  31 0d 50 50 2b 20 f1 c1  64 61 74 61 73 65 74 24  |1.PP+ ..dataset$|
0000c920  28 31 37 2d 6c 6f 6f 70  25 29 2c 6f 78 25 2b 31  |(17-loop%),ox%+1|
0000c930  2c 28 6f 78 25 2b 77 25  2b 31 29 29 0d 50 5a 05  |,(ox%+w%+1)).PZ.|
0000c940  cd 0d 50 64 05 ed 0d 50  6e 05 e1 0d 50 78 05 3a  |..Pd...Pn...Px.:|
0000c950  0d 50 82 1f dd f2 70 75  74 63 61 72 65 74 69 6e  |.P....putcaretin|
0000c960  74 6f 64 61 74 61 28 6d  78 25 2c 6d 79 25 29 0d  |todata(mx%,my%).|
0000c970  50 8c 17 21 62 6c 6f 63  6b 25 3d 64 61 74 61 77  |P..!block%=dataw|
0000c980  69 6e 64 6f 77 25 0d 50  96 24 c8 99 20 22 57 69  |indow%.P.$.. "Wi|
0000c990  6d 70 5f 47 65 74 57 69  6e 64 6f 77 53 74 61 74  |mp_GetWindowStat|
0000c9a0  65 22 2c 2c 62 6c 6f 63  6b 25 0d 50 a0 20 72 78  |e",,block%.P. rx|
0000c9b0  25 3d 28 6d 78 25 2d 62  6c 6f 63 6b 25 21 34 29  |%=(mx%-block%!4)|
0000c9c0  2b 62 6c 6f 63 6b 25 21  32 30 0d 50 aa 37 72 79  |+block%!20.P.7ry|
0000c9d0  25 3d 28 6d 79 25 2d 62  6c 6f 63 6b 25 21 38 29  |%=(my%-block%!8)|
0000c9e0  2b 28 62 6c 6f 63 6b 25  21 32 34 2d 28 62 6c 6f  |+(block%!24-(blo|
0000c9f0  63 6b 25 21 31 36 2d 62  6c 6f 63 6b 25 21 38 29  |ck%!16-block%!8)|
0000ca00  29 0d 50 b4 0e 72 78 25  3d 72 78 25 81 31 36 0d  |).P..rx%=rx%.16.|
0000ca10  50 be 0e 72 79 25 3d 72  79 25 81 33 32 0d 50 c8  |P..ry%=ry%.32.P.|
0000ca20  48 c8 99 20 22 57 69 6d  70 5f 53 65 74 43 61 72  |H.. "Wimp_SetCar|
0000ca30  65 74 50 6f 73 69 74 69  6f 6e 22 2c 64 61 74 61  |etPosition",data|
0000ca40  77 69 6e 64 6f 77 25 2c  2d 31 2c 72 78 25 2a 31  |window%,-1,rx%*1|
0000ca50  36 2c 28 72 79 25 2a 33  32 29 2c 26 31 30 30 30  |6,(ry%*32),&1000|
0000ca60  30 32 30 2c 30 0d 50 d2  1b 64 61 74 61 74 78 25  |020,0.P..datatx%|
0000ca70  3d 72 78 25 3a 64 61 74  61 74 79 25 3d 72 79 25  |=rx%:dataty%=ry%|
0000ca80  0d 50 dc 21 64 61 74 61  73 78 25 3d 72 78 25 2a  |.P.!datasx%=rx%*|
0000ca90  31 36 3a 64 61 74 61 73  79 25 3d 33 32 2a 72 79  |16:datasy%=32*ry|
0000caa0  25 0d 50 e6 05 e1 0d 50  f0 05 3a 0d 50 fa 0f dd  |%.P....P..:.P...|
0000cab0  f2 65 6e 74 65 72 64 61  74 61 0d 51 04 12 c8 8e  |.enterdata.Q....|
0000cac0  20 62 6c 6f 63 6b 25 21  32 34 20 ca 0d 51 0e 19  | block%!24 ..Q..|
0000cad0  20 c9 20 26 31 38 43 20  3a 20 64 61 74 61 73 78  | . &18C : datasx|
0000cae0  25 2d 3d 31 36 0d 51 18  19 20 c9 20 26 31 38 44  |%-=16.Q.. . &18D|
0000caf0  20 3a 20 64 61 74 61 73  78 25 2b 3d 31 36 0d 51  | : datasx%+=16.Q|
0000cb00  22 19 20 c9 20 26 31 38  45 20 3a 20 64 61 74 61  |". . &18E : data|
0000cb10  73 79 25 2d 3d 33 32 0d  51 2c 19 20 c9 20 26 31  |sy%-=32.Q,. . &1|
0000cb20  38 46 20 3a 20 64 61 74  61 73 79 25 2b 3d 33 32  |8F : datasy%+=32|
0000cb30  0d 51 36 10 20 7f 20 f2  63 68 61 72 64 61 74 61  |.Q6. . .chardata|
0000cb40  0d 51 40 05 cb 0d 51 4a  1f e7 20 64 61 74 61 73  |.Q@...QJ.. datas|
0000cb50  79 25 3e 31 35 2a 33 32  20 8c 20 64 61 74 61 73  |y%>15*32 . datas|
0000cb60  79 25 3d 30 0d 51 54 1f  e7 20 64 61 74 61 73 79  |y%=0.QT.. datasy|
0000cb70  25 3c 30 20 8c 20 64 61  74 61 73 79 25 3d 31 35  |%<0 . datasy%=15|
0000cb80  2a 33 32 0d 51 5e 1f e7  20 64 61 74 61 73 78 25  |*32.Q^.. datasx%|
0000cb90  3c 30 20 8c 20 64 61 74  61 73 78 25 3d 36 30 2a  |<0 . datasx%=60*|
0000cba0  31 36 0d 51 68 1f e7 20  64 61 74 61 73 78 25 3e  |16.Qh.. datasx%>|
0000cbb0  36 30 2a 31 36 20 8c 20  64 61 74 61 73 78 25 3d  |60*16 . datasx%=|
0000cbc0  30 0d 51 72 16 64 61 74  61 74 78 25 3d 64 61 74  |0.Qr.datatx%=dat|
0000cbd0  61 73 78 25 2f 31 36 0d  51 7c 16 64 61 74 61 74  |asx%/16.Q|.datat|
0000cbe0  79 25 3d 64 61 74 61 73  79 25 2f 33 32 0d 51 86  |y%=datasy%/32.Q.|
0000cbf0  48 c8 99 20 22 57 69 6d  70 5f 53 65 74 43 61 72  |H.. "Wimp_SetCar|
0000cc00  65 74 50 6f 73 69 74 69  6f 6e 22 2c 64 61 74 61  |etPosition",data|
0000cc10  77 69 6e 64 6f 77 25 2c  2d 31 2c 64 61 74 61 73  |window%,-1,datas|
0000cc20  78 25 2c 64 61 74 61 73  79 25 2c 26 31 30 30 30  |x%,datasy%,&1000|
0000cc30  30 32 30 2c 30 0d 51 90  05 e1 0d 51 9a 05 3a 0d  |020,0.Q....Q..:.|
0000cc40  51 a4 0e dd f2 63 68 61  72 64 61 74 61 0d 51 ae  |Q....chardata.Q.|
0000cc50  0f 6d 78 25 3d 64 61 74  61 74 78 25 0d 51 b8 12  |.mx%=datatx%.Q..|
0000cc60  6d 79 25 3d 31 36 2d 64  61 74 61 74 79 25 0d 51  |my%=16-dataty%.Q|
0000cc70  c2 12 c8 8e 20 62 6c 6f  63 6b 25 21 32 34 20 ca  |.... block%!24 .|
0000cc80  0d 51 cc 34 20 c9 20 38  20 3a 20 c1 64 61 74 61  |.Q.4 . 8 : .data|
0000cc90  73 65 74 24 28 6d 79 25  29 2c 6d 78 25 29 3d c1  |set$(my%),mx%)=.|
0000cca0  64 61 74 61 73 65 74 24  28 6d 79 25 29 2c 6d 78  |dataset$(my%),mx|
0000ccb0  25 2b 31 29 0d 51 d6 24  20 20 20 20 20 20 20 20  |%+1).Q.$        |
0000ccc0  20 20 c1 64 61 74 61 73  65 74 24 28 6d 79 25 29  |  .dataset$(my%)|
0000ccd0  2c 36 30 29 3d 22 20 22  0d 51 e0 19 20 20 20 20  |,60)=" ".Q..    |
0000cce0  20 20 20 20 20 20 64 61  74 61 73 78 25 2d 3d 31  |      datasx%-=1|
0000ccf0  36 0d 51 ea 4a 20 20 20  20 20 20 20 20 20 20 c8  |6.Q.J          .|
0000cd00  99 20 22 57 69 6d 70 5f  46 6f 72 63 65 52 65 64  |. "Wimp_ForceRed|
0000cd10  72 61 77 22 2c 64 61 74  61 77 69 6e 64 6f 77 25  |raw",datawindow%|
0000cd20  2c 30 2c 64 61 74 61 73  79 25 2c 36 30 2a 31 36  |,0,datasy%,60*16|
0000cd30  2c 64 61 74 61 73 79 25  2b 33 32 0d 51 f4 46 20  |,datasy%+32.Q.F |
0000cd40  c9 26 31 43 44 3a 64 61  74 61 73 65 74 24 28 6d  |.&1CD:dataset$(m|
0000cd50  79 25 29 3d c0 64 61 74  61 73 65 74 24 28 6d 79  |y%)=.dataset$(my|
0000cd60  25 29 2c 6d 78 25 29 2b  22 20 22 2b c1 64 61 74  |%),mx%)+" "+.dat|
0000cd70  61 73 65 74 24 28 6d 79  25 29 2c 6d 78 25 2b 31  |aset$(my%),mx%+1|
0000cd80  29 0d 51 fe 2c 20 20 20  20 20 20 20 20 64 61 74  |).Q.,        dat|
0000cd90  61 73 65 74 24 28 6d 79  25 29 3d c0 64 61 74 61  |aset$(my%)=.data|
0000cda0  73 65 74 24 28 6d 79 25  29 2c 36 30 29 0d 52 08  |set$(my%),60).R.|
0000cdb0  48 20 20 20 20 20 20 20  20 c8 99 20 22 57 69 6d  |H        .. "Wim|
0000cdc0  70 5f 46 6f 72 63 65 52  65 64 72 61 77 22 2c 64  |p_ForceRedraw",d|
0000cdd0  61 74 61 77 69 6e 64 6f  77 25 2c 30 2c 64 61 74  |atawindow%,0,dat|
0000cde0  61 73 79 25 2c 36 30 2a  31 36 2c 64 61 74 61 73  |asy%,60*16,datas|
0000cdf0  79 25 2b 33 32 0d 52 12  18 20 7f 20 e7 20 62 6c  |y%+32.R.. . . bl|
0000ce00  6f 63 6b 25 21 32 34 3c  31 32 37 20 8c 0d 52 1c  |ock%!24<127 ..R.|
0000ce10  35 20 20 20 20 20 20 20  20 20 20 20 20 20 c1 64  |5             .d|
0000ce20  61 74 61 73 65 74 24 28  6d 79 25 29 2c 6d 78 25  |ataset$(my%),mx%|
0000ce30  2b 31 2c 31 29 3d bd 28  62 6c 6f 63 6b 25 21 32  |+1,1)=.(block%!2|
0000ce40  34 29 0d 52 26 1c 20 20  20 20 20 20 20 20 20 20  |4).R&.          |
0000ce50  20 20 20 64 61 74 61 73  78 25 2b 3d 31 36 0d 52  |   datasx%+=16.R|
0000ce60  30 5b 20 20 20 20 20 20  20 20 20 20 20 20 20 c8  |0[             .|
0000ce70  99 20 22 57 69 6d 70 5f  46 6f 72 63 65 52 65 64  |. "Wimp_ForceRed|
0000ce80  72 61 77 22 2c 64 61 74  61 77 69 6e 64 6f 77 25  |raw",datawindow%|
0000ce90  2c 64 61 74 61 73 78 25  2d 31 36 2c 64 61 74 61  |,datasx%-16,data|
0000cea0  73 79 25 2c 64 61 74 61  73 78 25 2b 31 36 2c 64  |sy%,datasx%+16,d|
0000ceb0  61 74 61 73 79 25 2b 33  32 0d 52 3a 10 20 20 20  |atasy%+32.R:.   |
0000cec0  20 20 20 20 20 20 20 20  cc 0d 52 44 2e 20 20 20  |        ..RD.   |
0000ced0  20 20 20 20 20 20 20 20  20 c8 99 20 22 57 69 6d  |         .. "Wim|
0000cee0  70 5f 50 72 6f 63 65 73  73 4b 65 79 22 2c 62 6c  |p_ProcessKey",bl|
0000cef0  6f 63 6b 25 21 32 34 0d  52 4e 10 20 20 20 20 20  |ock%!24.RN.     |
0000cf00  20 20 20 20 20 20 cd 0d  52 58 05 cb 0d 52 62 2e  |      ..RX...Rb.|
0000cf10  e7 20 64 61 74 61 73 78  25 3e 3d 28 36 30 2a 31  |. datasx%>=(60*1|
0000cf20  36 29 20 8c 20 64 61 74  61 73 79 25 2d 3d 33 32  |6) . datasy%-=32|
0000cf30  3a 64 61 74 61 73 78 25  3d 30 0d 52 6c 05 e1 0d  |:datasx%=0.Rl...|
0000cf40  ff                                                |.|
0000cf41