#!/usr/local/bin/basic 100 rem Pilot ToDoDB.pdb dump utility (for Chipmunk Basic) 110 rem Copyright 1997 Ronald H. Nicholson, Jr. 120 ' 130 ' pdb header 140 ' 0x000 : 0x022 cstr - DB name 150 ' 0x024 long - crdate, moddate, backupdate 154 ' 0x036 short - offset to category names 160 ' 0x03c long - type 170 ' 0x040 long - creator 180 ' 0x04c short - num records 190 ' 0x050 short - record 0 offset 192 ' 0x052 byte - record 0 category 200 ' 0x058 short - record 1 offset 210 ' 260 ' address record 270 ' 0x00 byte ? 280 ' 0x01 6 nibbles for phone category 290 ' 0x04 long - bit mask for entries 300 ' 0x08 byte ? 310 ' 0x09 cstrings * 20 340 ' 350 dim m%(65000) 352 dim cat$(16) 354 dim e$(20) 360 f$ = "AddressDB.pdb" 370 open f$ for data input as #1 else goto 550 : rem unix remove "data" 372 rem ** data keyword is only for Mac version ** 380 i = 0 390 p = varptr(m%(0)) 400 c = fgetbyte #1 410 while not eof(1) 420 m%(i) = c : i = i+1 430 c = fgetbyte #1 440 wend 450 mtop = i 460 close #1 470 rem 478 c2 = m%(val("0x36"))*256+m%(val("0x36")+1) 480 n2 = m%(val("0x4c"))*256+m%(val("0x4c")+1) 490 print n2,"records" 500 print "header info : "; 510 for i = 60 to 67 : print chr$(m%(i)); : next i : print 520 rem 530 gosub 2000 : rem get categories 540 for n = 0 to n2-1 : gosub 800 : next n 580 rem exit : rem ** For unix uncomment exit statement. ** 590 end 600 rem decode entry n 610 i = val("0x50")+(n*8) 620 p = m%(i)*256+m%(i+1) 640 category = m%(i+2) 660 w = int(m%(p+1)/16) 670 mask = m%(p+4) 672 mask = mask * 256 + m%(p+5) 674 mask = mask * 256 + m%(p+6) 676 mask = mask * 256 + m%(p+7) 690 i3 = p+9 : j3 = 0 700 while (j3 < 19) 710 m3 = int(2 ^ j3) 720 d$ = "" 722 if (m3 and mask) > 0 then 724 while (m%(i3) <> 0) 726 d$ = d$ + chr$(m%(i3)) : i3 = i3 + 1 728 wend 730 rem print "+++",i3,d$ 734 if m%(i3) = 0 then i3 = i3 + 1 740 endif 750 e$(j3) = d$ : rem print "##",j3,e$(j3) 770 j3 = j3 + 1 780 wend 790 return 800 rem print entry n 820 gosub 600 840 if category > 15 then category = 0 842 print "#";n,w,cat$(category) 844 rem print n,"0x";hex$(mask,8),w 900 for j3 = 0 to 18 910 if e$(j3) <> "" then print j3,e$(j3) 920 next j3 980 print 990 return 2000 rem get categories 2020 j = 0 2030 p = c2 + (j*16) + 2 2040 while 2050 t$ = "" : i3 = 0 2060 while (i3 < 32) and (m%(p+i3) > 31) 2070 t$ = t$+chr$(m%(p+i3)) : i3 = i3+1 2080 wend 2090 cat$(j) = t$ 2100 print str$(j,2);" : ";t$ 2110 j = j + 1 2120 p = c2 + (j*16) + 2 2160 wend (m%(p+2) = 0) 2190 return 9990 end