#!/usr/local/bin/basic 100 rem PalmPilot xpadDB.pdb dump utility (for Chipmunk Basic) 110 rem Copyright 1998 Ronald H. Nicholson, Jr. (ver 0.2) 120 ' 130 ' pdb header 140 ' 0x000 : 0x022 cstr - DB name 150 ' 0x024 long - crdate, moddate, backupdate 160 ' 0x03c long - type 170 ' 0x040 long - creator 180 ' 0x04c short - num records 190 ' 0x050 short - record 0 offset 200 ' 0x058 short - record 1 offset 210 ' 220 ' memo record 320 ' 0x00 cstr - event text (non repeat) 340 ' 350 dim m%(200000) 352 dim cat$(16) 354 dim bytes(8) 360 f$ = "xpadDB.pdb" 364 mn = val(field$(argv$,3)) 366 if len(field$(argv$,3)) = 0 then mn = -1 368 input "memo number?: ";m2 : rem remove for unix. 370 cls 372 input "password: ";pw$ 374 cls 376 gosub 3000 380 open f$ for data input as #1 else goto 550 : rem for unix remove "data" 382 rem *** "data" keyword is only for Mac version. *** 384 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%(76)*256+m%(76+1) 490 if mn < 0 then print n2,"records" 500 rem print "header info : "; 510 rem for i = 60 to 67 : print chr$(m%(i)); : next i : print 520 rem 530 gosub 2000 560 if mn >= 0 then n = mn : gosub 800 : goto 580 570 for n = 0 to n2-1 : gosub 800 : next n 580 rem exit : rem ** For unix, uncomment this exit statement. ** 590 end 600 rem decode entry n 604 m1 = 0 : m2 = 0 : flag = 0 610 i = val("0x50")+(n*8) 620 p = m%(i)*256+m%(i+1) 640 category = m%(i+2) 700 offset = 0 710 i3 = offset : d$ = "" 720 while (i3 < (4096+offset)) and (m%(p+i3) > 0) 730 j3 = m%(p+i3) : i3 = i3+1 732 if (j3 < 32) or (flag = 1) then flag = flag + 1 734 m3 = 0 740 if flag > 1 and mn < 0 then return 744 if flag > 1 then gosub 4000 : rem calc m3 750 j4 = 0x7f and (j3 xor m3) 754 if j4 <> 0 then j3 = j4 760 d$ = d$+chr$(j3) 770 wend 780 return 800 rem print entry n 810 gosub 600 820 m = instr(d$, chr$(10)) 830 if m > 32 then m = 32 832 if m < 1 then m = 1 890 t$ = chr$(34)+cat$(category) + chr$(34)+", " 900 while len(t$)<16 : t$ = t$+" " : wend 950 rem 960 if mn < 0 then print n, t$; mid$(d$,1,m-1) 970 if mn >= 0 then print d$ 980 return 990 end 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 rem print str$(j,2);" : ";t$ 2110 j = j + 1 2120 p = c2 + (j*16) + 2 2160 wend (m%(p+2) = 0) 2190 return 3000 rem password convert 3010 p1 = 0 : m1 = 0 : p2 = 0 : m2 = 0 3020 for i=0 to 7 3024 bytes(i) = 0 3030 t$ = mid$(pw$,i+1,1) 3040 if len(pw$) >= (i+1) then bytes(i) = asc(t$) 3050 next i 3100 for i = 0 to 3 3110 p1 = (256 * p1) + (0x7f and bytes(i)) 3120 next i 3130 for i = 2 to 5 3140 p2 = (256 * p2) + (0x7f and bytes(i)) 3150 next i 3160 rem print pw$,hex$(p1,8),hex$(p2,8) 3190 return 4000 rem decrypt (input = i3) 4010 rem print m1, m2, p1, p2 4020 if (m1 = 0) and (m2 = 0) then m1 = p1 : m2 = p2 : m3 = 2 4030 rem hex$(m1,8), hex$(m2,8), hex$(m3,2), "bug" 4100 rem m1 = ((1103515245 * m1) + 12345) and 0x7fffffff 4110 m1a = 0x0ffff and ((m1 / 32768) / 2) 4112 m1b = m1 and 0x0ffff 4120 m10 = 0x7fffffff and (m1a * 0x41c6) 4122 m11 = 0x00007fff and (m1a * 0x4e6d) 4124 m12 = 0x00007fff and (m1b * 0x41c6) 4126 m13 = 0x7fffffff and (m1b * 0x4e6d) 4128 if (m13 > 2147483647) then m13 = m13 - 2147483648 4130 m14 = 0x00007fff and (m11 + m12) 4132 m14 = 32768 * 2 * m14 + m13 + 12345 4140 if (m14 > 2147483647) then m14 = m14 - 2147483648 4160 rem print hex$(m1a),hex$(m1b),hex$(m10),hex$(m11),hex$(m12),hex$(m13) 4180 m1 = m14 4200 if (m2 > 2147483647) then m2 = m2 - 2147483648 4210 if (m2 and 0x08000000) 4214 m2b = (m2 + m2) : flag_m2 = 0 4216 if (m2b > 2147483647) then flag_m2 = 2147483648 4218 m2b = (m2b - flag_m2) xor 0x04c11db7 4220 m2 = m2b + flag_m2 4230 else 4234 m2 = m2 + m2 4240 endif 4300 m3 = (0xff and (m1 / 2048)) + (0xff and (m2 / 32)) + 0x55 4320 m3 = m3 and 0x7f 4352 rem hex$(m1,8), hex$(m2,8), hex$(m3,2) : input a$ : rem "bug" 4390 return 9990 end