0% found this document useful (0 votes)
28 views9 pages

Foxpro App File Structure

Uploaded by

tawan chaichana
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
28 views9 pages

Foxpro App File Structure

Uploaded by

tawan chaichana
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

Welcome to VFP Documents http://www.baiyujia.com/vfpdocuments/f_vhfox.

asp

-----------------------------------------------
FOXPRO APP FILE STRUCTURE (UNDOCUMENTED)
January 2013
-----------------------------------------------
CCB

1. App head structure:

00000000: FE F2 FF 20-02 05 00 00-00 85 22 00-00 49 22 00 ................


00000010: 00 3C 00 00-00 00 00 00-00 00 00 00-00 00 00 00 ................
00000020: 00 00 00 00-00 00 00 F3-D1 .........

00-04 DB fox magic: FE F2 FF 20 02


05-06 DW number of files: 0x0005
07-08 DW main file order: 0x0000
09-0C DD offset of file size description: 0x00002285
0D-10 DD offset of file name description: 0x00002249
11-14 DD size of file name description: 0x0000003C
15-26 DB reserved: 0x12 dup (0x00)
27-28 DW checksum: 0xD1F3 (reference papp_sum.prg)

2. File name description:

00002240: 66 6F 78-2E 70 72 67 fox.prg


00002250: 00 63 3A 5C-74 65 6D 70-5C 00 66 6F-78 2E 66 78 c:\temp\ fox.fx
00002260: 70 00 2E 5C-00 66 6F 78-2E 73 63 78-00 66 6F 78 p .\ fox.scx fox
00002270: 2E 73 63 74-00 66 6F 78-2E 66 72 78-00 66 6F 78 .sct fox.frx fox
00002280: 2E 66 72 74-00 .frt

Relative file name description:

00000000: 66 6F 78 2E-70 72 67 00-63 3A 5C 74-65 6D 70 5C fox.prg c:\temp\


00000010: 00 66 6F 78-2E 66 78 70-00 2E 5C 00-66 6F 78 2E fox.fxp .\ fox.
00000020: 73 63 78 00-66 6F 78 2E-73 63 74 00-66 6F 78 2E scx fox.sct fox.
00000030: 66 72 78 00-66 6F 78 2E-66 72 74 00 frx fox.frt

00-07 DB "fox.prg",0
08-10 DB "c:\temp\",0
11-18 DB "fox.fxp",0
19-1B DB ".\",0
1C-23 DB "fox.scx",0
24-2B DB "fox.sct",0
2C-33 DB "fox.frx",0
34-3B DB "fox.frt",0

3. File type:

00: program file, include program file .PRG/.FXP, format file .FMT/.PRX,
screen file .SPR/.SPX, menu file .MPR/.MPX, query file .QPR/.QPX
02: table file, include database file .DBC, table file .DBF
03: memo file, include memo file .FPT, class memo file .VCT, form memo file .SCT,
report memo file .FRT, label memo file .LBT
04: compound index file .CDX
05: compact index file .IDX
06: text file .TXT
07: api library file .FLL
08: class file .VCX
09: form file .SCX
0A: report file .FRX
0B: label file .LBX

4. File size description:

Total 5 files:

00002280: 00 29 00-00 00 47 01-00 00 08 00 ................


00002290: 00 00 11 00-00 00 00 00-00 00 00 00-00 00 09 47 ................
000022A0: 01 00 00 04-07 00 00 19-00 00 00 1C-00 00 00 00 ................
000022B0: 00 00 00 00-00 00 00 03-04 07 00 00-5C 0A 00 00 ................
000022C0: 19 00 00 00-24 00 00 00-00 00 00 00-00 00 00 00 ................

1 จาก 9 24/06/2556 18:15


Welcome to VFP Documents http://www.baiyujia.com/vfpdocuments/f_vhfox.asp

000022D0: 0A 5C 0A 00-00 43 1A 00-00 19 00 00-00 2C 00 00 ................


000022E0: 00 00 00 00-00 00 00 00-00 03 43 1A-00 00 49 22 ................
000022F0: 00 00 19 00-00 00 34 00-00 00 00 00-00 00 00 00 ................
00002300: 00 00 ..

1) fox.fxp:

00002280: 00 29 00-00 00 47 01-00 00 08 00 ...........


00002290: 00 00 11 00-00 00 00 00-00 00 00 00-00 00 ..............

00-00 DB file type: 0x00 (program file)


01-04 DD start offset of file: 0x00000029
05-08 DD end offset of file: 0x00000147
09-0C DD offset of file path: 0x00000008 (relative file name description) -> "c:\temp\",0
0D-10 DD offset of file name: 0x00000011 (relative file name description) -> "fox.fxp",0
11-14 DD reserved: 0x00000000
15-18 DD reserved: 0x00000000

00000020: 02 00 01-00 25 00 00 .......


00000030: 00 7E 00 00-00 AF 00 00-00 DE 00 00-00 0B 00 00 ................
00000040: 00 C8 00 00-00 5C 56 83-3A 00 00 00-00 85 16 00 ................
00000050: 0F 00 02 F8-03 01 FC D9-03 00 66 6F-78 FD FE 04 ..........fox...
00000060: 00 52 FE 03-00 55 00 00-17 00 10 00-54 F7 00 00 ................
00000070: 10 FC D9 03-00 66 6F 78-FD FE 04 00-52 FE 03 00 .....fox........
00000080: 55 01 00 02-00 58 31 18-00 11 00 54-F7 00 00 10 .....X1.........
00000090: FC D9 04 00-66 6F 78 32-FD FE 04 00-52 FE 03 00 ....fox2........
000000A0: 55 01 00 02-00 58 32 08-00 70 72 6F-63 5F 66 6F .....X2..proc_fo
000000B0: 78 3F 00 00-00 00 00 FF-FF 04 00 49-4E 49 54 5E x..........INIT.
000000C0: 00 00 00 01-00 00 00 0D-00 0A 00 A2-E9 00 02 00 ................
000000D0: 00 00 FE 03-00 55 00 00-09 00 63 6C-61 73 73 5F ..........class_
000000E0: 66 6F 78 06-00 43 55 53-54 4F 4D 9E-00 00 00 00 fox..CUSTOM......
000000F0: 00 F1 00 41-00 31 00 41-01 41 00 32-00 51 01 41 ................
00000100: 00 31 00 A1-00 33 00 00-00 00 00 00-00 00 00 00 ................
00000110: 00 00 00 00-00 00 00 03-00 00 00 1D-00 00 00 2E ................
00000120: 00 00 00 03-00 00 00 06-00 00 00 5D-00 00 00 6F ................
00000130: 00 00 00 07-00 00 00 09-00 00 00 52-00 00 00 6F ................
00000140: 00 00 00 06-00 00 00 .......

2) fox.scx:

00002290: 09 47 ..
000022A0: 01 00 00 04-07 00 00 19-00 00 00 1C-00 00 00 00 ................
000022B0: 00 00 00 00-00 00 00 .......

00-00 DB file type: 0x09 (form file)


01-04 DD start offset of file: 0x00000147
05-08 DD end offset of file: 0x00000704
09-0C DD offset of file path: 0x00000019 (relative file name description) -> ".\",0
0D-10 DD offset of file name: 0x0000001C (relative file name description) -> "fox.scx",0
11-14 DD reserved: 0x00000000
15-18 DD reserved: 0x00000000

00000140: 30-09 04 03 04-00 00 00 08 0.........


00000150: 04 6D 00 00-00 00 00 00-00 00 00 00-00 00 00 00 ................
00000160: 00 00 00 02-7A 00 00 50-4C 41 54 46-4F 52 4D 00 .......PLATFORM.
00000170: 00 00 43 01-00 00 00 08-00 00 00 00-00 00 00 00 ..C.............
00000180: 00 00 00 00-00 00 00 55-4E 49 51 55-45 49 44 00 .......UNIQUEID.
00000190: 00 00 43 09-00 00 00 0A-00 00 00 00-00 00 00 00 ..C.............
000001A0: 00 00 00 00-00 00 00 54-49 4D 45 53-54 41 4D 50 .......TIMESTAMP
000001B0: 00 00 4E 13-00 00 00 0A-00 00 00 00-00 00 00 00 ..N.............
............................................................................
000006E0: 00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00 ................
000006F0: 00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00 ................
00000700: 00 00 00 1A ....

3) fox.sct:

000022B0: 03-04 07 00 00-5C 0A 00 00 ................


000022C0: 19 00 00 00-24 00 00 00-00 00 00 00-00 00 00 00 ................

00-00 DB file type: 0x03 (memo file)


01-04 DD start offset of file: 0x00000704
05-08 DD end offset of file: 0x00000A5C
09-0C DD offset of file path: 0x00000019 (relative file name description) -> ".\",0
0D-10 DD offset of file name: 0x00000024 (relative file name description) -> "fox.sct",0
11-14 DD reserved: 0x00000000
15-18 DD reserved: 0x00000000

2 จาก 9 24/06/2556 18:15


Welcome to VFP Documents http://www.baiyujia.com/vfpdocuments/f_vhfox.asp

00000700: 00 00 03 58-00 00 00 01-00 00 00 00 ............


00000710: 00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00 ................
00000720: 00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00 ................
............................................................................
00000A00: 33 44 6F 43-72 65 61 74-65 20 3D 20-2E 54 2E 0D 3DoCreate = .T..
00000A10: 0A 43 61 70-74 69 6F 6E-20 3D 20 22-46 6F 72 6D .Caption = "Form
00000A20: 31 22 0D 0A-4E 61 6D 65-20 3D 20 22-46 6F 72 6D 1"..Name = "Form
00000A30: 31 22 0D 0A-00 00 00 01-00 00 00 20-CB CE CC E5 1"..............
00000A40: 2C 20 30 2C-20 39 2C 20-36 2C 20 31-34 2C 20 31 , 0, 9, 6, 14, 1
00000A50: 30 2C 20 31-32 2C 20 32-2C 20 32 0A 0, 12, 2, 2.

4) fox.frx:

000022D0: 0A 5C 0A 00-00 43 1A 00-00 19 00 00-00 2C 00 00 ................


000022E0: 00 00 00 00-00 00 00 00-00 .........

00-00 DB file type: 0x0A (report file)


01-04 DD start offset of file: 0x00000A5C
05-08 DD end offset of file: 0x00001A43
09-0C DD offset of file path: 0x00000019 (relative file name description) -> ".\",0
0D-10 DD offset of file name: 0x0000002C (relative file name description) -> "fox.frx",0
11-14 DD reserved: 0x00000000
15-18 DD reserved: 0x00000000

00000A50: 30 09 04 03 ............0...
00000A60: 06 00 00 00-88 0A E5 00-00 00 00 00-00 00 00 00 ................
00000A70: 00 00 00 00-00 00 00 00-02 7A 00 00-50 4C 41 54 ............PLAT
00000A80: 46 4F 52 4D-00 00 00 43-01 00 00 00-08 00 00 00 FORM...C........
00000A90: 00 00 00 00-00 00 00 00-00 00 00 00-55 4E 49 51 ............UNIQ
00000AA0: 55 45 49 44-00 00 00 43-09 00 00 00-0A 00 00 00 UEID...C........
00000AB0: 00 00 00 00-00 00 00 00-00 00 00 00-54 49 4D 45 ............TIME
00000AC0: 53 54 41 4D-50 00 00 4E-13 00 00 00-0A 00 00 00 STAMP..N........
............................................................................
00001A20: 20 20 20 20-20 20 20 20-20 20 20 20-20 20 20 20 ................
00001A30: 20 20 20 20-20 20 20 20-20 20 00 00-00 00 00 00 ................
00001A40: 00 00 1A ...

5) fox.frt:

000022E0: 03 43 1A-00 00 49 22 ................


000022F0: 00 00 19 00-00 00 34 00-00 00 00 00-00 00 00 00 ................
00002300: 00 00 ..

00-00 DB file type: 0x03 (memo file)


01-04 DD start offset of file: 0x00001A43
05-08 DD end offset of file: 0x00002249
09-0C DD offset of file path: 0x00000019 (relative file name description) -> ".\",0
0D-10 DD offset of file name: 0x00000034 (relative file name description) -> "fox.frt",0
11-14 DD reserved: 0x00000000
15-18 DD reserved: 0x00000000

00001A40: 00-00 00 3E 00-00 00 21 00-00 00 00 00 .............


00001A50: 00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00 ................
00001A60: 00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00 ................
............................................................................
00002200: 20 30 0D 0A-48 65 69 67-68 74 20 3D-20 30 0D 0A 0..Height = 0..
00002210: 44 61 74 61-53 6F 75 72-63 65 20 3D-20 2E 4E 55 DataSource = .NU
00002220: 4C 4C 2E 0D-0A 4E 61 6D-65 20 3D 20-22 44 61 74 LL...Name = "Dat
00002230: 61 65 6E 76-69 72 6F 6E-6D 65 6E 74-22 0D 0A 00 aenvironment"...
00002240: 00 00 00 00-01 00 00 00-00 .........

5. Fxp head structure:

00000020: 02 00 01-00 25 00 00 .......


00000030: 00 7E 00 00-00 AF 00 00-00 DE 00 00-00 0B 00 00 ................
00000040: 00 C8 00 00-00 5C 56 83-3A 00 00 00-00 85 ..............

Relative fxp head:

00000000: 02 00 01 00-25 00 00 00-7E 00 00 00-AF 00 00 00 ................


00000010: DE 00 00 00-0B 00 00 00-C8 00 00 00-5C 56 83-3A ................
00000020: 00 00 00 00-85 .....

00-01 DW number of procedures: 0x0002


02-03 DW number of classes: 0x0001

3 จาก 9 24/06/2556 18:15


Welcome to VFP Documents http://www.baiyujia.com/vfpdocuments/f_vhfox.asp

04-07 DD start offset of fxp file: 0x00000025


08-0B DD offset of procedure name description: 0x0000007E
0C-0F DD offset of class name description: 0x000000AF
10-13 DD offset of procedures/classes description (debug info): 0x000000DE
14-17 DD lines (debug info): 0x0000000B
18-1B DD offset of lineno description (debug info): 0x000000C8
1C-1F DD timestamp: 0x3A833F57 = 2009/04/03 07:58:46 (reference ftimestamp2datetime.prg)
20-23 DD offset of the source file name (relative file name description)
24-24 DB codepage: 0x85(936GBK), 0x87(950BIG5)

6. Procedure name description:

0) fox.fxp:

00000020: 16 00 0F-00 02 F8 03-01 FC D9 03 ...........


00000030: 00 66 6F 78-FD FE 04 00-52 FE 03 00-55 00 00 .fox...........

25-26: size of procedure: 0x0016


27-28: size of first line p-code: 0x000F
29-35: first line p-code: ?"fox"
36-37: size of 2nd line p-code: 0x0004
38-39: 2nd line p-code: WAIT
3A-3B: size of 3th line p-code: 0x0003
3C-3C: 3th line p-code: END

3D-3E: number of names (variable etc.): 0x0000

Total 2 procedures:

00000070: 08 00 ..
00000080: 70 72 6F 63-5F 66 6F 78-3F 00 00 00-00 00 FF FF proc_fox........
00000090: 04 00 49 4E-49 54 5E 00-00 00 01 00-00 00 ..INIT........

1) procedure proc_fox:

00000070: 08 00 ..
00000080: 70 72 6F 63-5F 66 6F 78-3F 00 00 00-00 00 FF FF proc_fox........

00------01 DW size of procedure name=N


02------02+N-1 DB procedure name: "proc_fox"
02+N----02+N+3 DD start offset of procedure (relative fxp head): 0x0000003F
02+N+4--02+N+5 DW class flag: 0x0000
02+N+6--02+N+7 DW class order: 0xFFFF

00000030: 17 .fox............
00000040: 00 10 00 54-F7 00 00 10-FC D9 03 00-66 6F 78 FD ............fox.
00000050: FE 04 00 52-FE 03 00 55-01 00 02 00-58 31 ............X1

3F-40: size of procedure: 0x0017


41-42: size of first line p-code: 0x0010
43-50: first line p-code: X1="fox"
51-52: size of 2nd line p-code: 0x0004
53-54: 2nd line p-code: WAIT
55-56: size of 3th line p-code: 0x0003
57-57: 3th line p-code: END

58-59: number of names (variable etc.): 0x0001


5A-5B: size of first name (variable etc.): 0x0002
5C-5D: first name (variable etc.): "X1"

2) procedure INIT:

00000090: 04 00 49 4E-49 54 5E 00-00 00 01 00-00 00 ..INIT........

00------01 DW size of procedure name=N


02------02+N-1 DB procedure name: "INIT"
02+N----02+N+3 DD start offset of procedure name (relative fxp head): 0x0000005E
02+N+4--02+N+5 DW class flag: 0x0001
02+N+6--02+N+7 DW class order: 0x0000

00000050: 18 00 ................
00000060: 11 00 54 F7-00 00 10 FC-D9 04 00 66-6F 78 32 FD ................
00000070: FE 04 00 52-FE 03 00 55-01 00 02 00-58 32 ............X2

5E-5F: size of procedure: 0x0018


60-61: size of first line p-code: 0x0011

4 จาก 9 24/06/2556 18:15


Welcome to VFP Documents http://www.baiyujia.com/vfpdocuments/f_vhfox.asp

62-70: first line p-code: X2="fox2"


71-72: size of 2nd line p-code: 0x0004
73-74: 2nd line p-code: WAIT
75-76: size of 3th line p-code: 0x0003
77-77: 3th line p-code: END

78-79: number of names (variable etc.): 0x0001


7A-7B: size of first name (variable etc.): 0x0002
7C-7D: first name (variable etc.): "X2"

3) vfp9 procedure size >64K format

Before vfp9, procedure size <64K, use one WORD can save the size of procedure:
00-01 DW size of procedure

In vfp9, procedure size >64K possible, use one WORD and one DWORD to save the size of procedure:
00-01 DW 0
02-05 DD size of procedure

7. Class name description:

Total 1 class:

000000A0: 09 .
000000B0: 00 63 6C 61-73 73 5F 66-6F 78 06 00-43 55 53 54 .class_fox..CUST
000000C0: 4F 4D 9E 00-00 00 00 00 OM.......

00-----------01 DW size of class name=N


02-----------02+N-1 DB class name: "class_fox"
02+N---------02+N+01 DW size of parent class name=M
02+N+02------02+N+02+M-1 DB parent class name: "CUSTOM"
02+N+02+M----02+N+02+M+3 DD start offset of class (relative fxp head): 0x0000009E
02+N+02+M+4--02+N+02+M+5 DW reserved: 0x0000

00000090: 0D 00 ..
000000A0: 0A 00 A2 E9-00 02 00 00-00 FE 03 00-55 00 00 ...............

9E-9F: size of procedure: 0x000D


A0-A1: size of first line p-code: 0x000A
A2-A9: first line p-code: DEFINE CLASS class_fox AS CUSTOM
AA-AB: size of 2nd line p-code: 0x0003
AC-AC: 2nd line p-code: END

AD-AE: number of names (variable etc.): 0x0000

8. Lineno description (debug info):

Total 0x0000000B WORDs, one WORD for per lines.

000000C0: F1 00 41 00-31 00 01 01 ........


000000D0: 41 00 32 00-11 01 41 00-31 00 A1 00-33 00 ..............

9. Procedures/classes description (debug info):

Total (1+2+1)*4 DWORDs, four DWORDs for per fxp, procedures, classes.

000000D0: 00 00 ..
000000E0: 00 00 00 00-00 00 00 00-00 00 00 00-00 00 03 00 ................
000000F0: 00 00 1D 00-00 00 2B 00-00 00 03 00-00 00 06 00 ................
00000100: 00 00 5A 00-00 00 69 00-00 00 07 00-00 00 09 00 ................
00000110: 00 00 4F 00-00 00 69 00-00 00 06 00-00 00 ..............

10. Summary of fox.app:

0000-0028 app head


0029-004D fxp head
004E-0067 fox.fxp
0068-0086 procedure proc_fox
0087-00A6 procedure INIT
00A7-00C6 procedure name description
00C7-00D7 DEFINE CLASS class_fox AS CUSTOM
00D8-00F0 class name description
00F1-0106 lineno description (debug info)

5 จาก 9 24/06/2556 18:15


Welcome to VFP Documents http://www.baiyujia.com/vfpdocuments/f_vhfox.asp

0107-0146 procedures/classes description (debug info)


0147-0703 fox.scx
0704-0A5B fox.sct
0A5C-1A42 fox.frx
1A43-2248 fox.frt
2249-2284 file name description
2285-2301 file size description

This is a STANDARD-FORMAT app file.

To make a non-STANDARD-FORMAT app file,


we can change the order of the parts and/or insert some un-used data into parts,
then the app file can run, but it can not be decompiled with some decompile software.

11. Reference 1: papp_sum.prg

*PROC papp_sum

PARAMETER m.q_str

* m.q_str =

* PARAMETER: String
* RETURN: Checksum

PRIVATE m.q_nn
PRIVATE m.q_sum
PRIVATE m.q_suma
PRIVATE m.q_suma1
PRIVATE m.q_suma2
PRIVATE m.q_sumb
PRIVATE m.q_sumb1
PRIVATE m.q_sumb2
PRIVATE m.q_sumc
PRIVATE m.q_sumc1
PRIVATE m.q_sumc2
PRIVATE m.q_sumd
PRIVATE m.q_sumd1
PRIVATE m.q_sumd2
PRIVATE m.q_sume
PRIVATE m.q_sumf

*
* FoxPro Application File (.APP) Checksum
* 1998.05.01 Write by CCB
*
* Crack with Soft-ice
*
* ASM CODE:
*
* code segment
*
* assume cs:code,ds:code,es:code
*
* org 100h
*
* start:
*
* jmp begin
*
* head_25 db 0feh,0f2h,0ffh,0ffh,0ch,02h
* head_30 db 0feh,0f2h,0ffh,1bh,02h
* head_50 db 0feh,0f2h,0ffh,1fh,02h
*
* head db 0feh,0f2h,0ffh,0ffh,0ch,02h
* dw 00a0h
* dw 0001h
* dd 1430h
* dd 0430h
* dd 1000h
* db 18 dup(0)
* head_len = $ - (offset head)
* head_sum dw ? ; 71f6h / 8d11h / ddc7h
*
* begin:
*

6 จาก 9 24/06/2556 18:15


Welcome to VFP Documents http://www.baiyujia.com/vfpdocuments/f_vhfox.asp

* push cs
* pop ds
*
* mov ah,byte ptr head[0]
* mov al,byte ptr head[1]
*
* mov si,0
*
* mov bx,head_len-2
*
* s_loop:
*
* cmp bx,0
* jz s_save
*
* mov dl,ah
* mov dh,al
* mov al,byte ptr head[si]
* xor ah,ah
* xor ax,dx
* mov dx,ax
* mov cl,4
* xor dh,ah
* shr dx,cl
* xor ax,dx
* mov dx,ax
* xor dh,ah
* xor cl,cl
* mov ch,al
* mov di,0
* add di,cx
* mov cl,4
* shl di,cl
* mov cl,5
* xor ax,di
* shl dx,cl
* xor ax,dx
* inc si
* dec bx
* jmp s_loop
*
* s_save:
*
* mov head_sum,ax
*
* mov ax,4c00h
* int 21h
*
* code ends
*
* end start
*
*
* AX head[si]
* ----------------- ---------
* | a | b | c | d | | e | f |
* ----------------- ---------
*
* AX DX
* ------------------ -----------------
* | c | d | a | a | | 0 | a | a | 0 |
* | a | | e | b | | | e | b | |
* | b | | | e | | | | e | |
* | e | | | f | | | | f | |
* | f | | | | | | | | |
* --|-------|---|--- ------|---|------
* XOR XOR XOR XOR XOR
*
* (AX) = (AX) XOR (DX)*2
*
* FOXPRO CODE:
*

m.q_sum=ASC(SUBS(m.q_str,1,1))*256+ASC(SUBS(m.q_str,2,1))
m.q_suma=INT(MOD(m.q_sum,16^4)/16^3)
m.q_sumb=INT(MOD(m.q_sum,16^3)/16^2)
m.q_sumc=INT(MOD(m.q_sum,16^2)/16^1)

7 จาก 9 24/06/2556 18:15


Welcome to VFP Documents http://www.baiyujia.com/vfpdocuments/f_vhfox.asp

m.q_sumd=INT(MOD(m.q_sum,16^1)/16^0)

m.q_nn=1

DO WHILE m.q_nn<=LEN(m.q_str)-2

m.q_sum=ASC(SUBS(m.q_str,m.q_nn,1))
m.q_sume=INT(MOD(m.q_sum,16^2)/16^1)
m.q_sumf=INT(MOD(m.q_sum,16^1)/16^0)

m.q_suma2=0
m.q_sumb2=fbin_xor(m.q_suma,m.q_sume)
m.q_sumc2=fbin_xor(fbin_xor(fbin_xor(m.q_suma,m.q_sumb),m.q_sume),m.q_sumf)
m.q_sumd2=0

m.q_sum=m.q_suma2*16^3+m.q_sumb2*16^2+m.q_sumc2*16^1+m.q_sumd2*16^0
m.q_sum=m.q_sum*2
m.q_suma2=INT(MOD(m.q_sum,16^4)/16^3)
m.q_sumb2=INT(MOD(m.q_sum,16^3)/16^2)
m.q_sumc2=INT(MOD(m.q_sum,16^2)/16^1)
m.q_sumd2=INT(MOD(m.q_sum,16^1)/16^0)

m.q_suma1=fbin_xor(fbin_xor(fbin_xor(fbin_xor(m.q_sumc,m.q_suma),m.q_sumb),m.q_sume),m.q_sumf)
m.q_sumb1=m.q_sumd
m.q_sumc1=fbin_xor(m.q_suma,m.q_sume)
m.q_sumd1=fbin_xor(fbin_xor(fbin_xor(m.q_suma,m.q_sumb),m.q_sume),m.q_sumf)

m.q_suma=fbin_xor(m.q_suma1,m.q_suma2)
m.q_sumb=fbin_xor(m.q_sumb1,m.q_sumb2)
m.q_sumc=fbin_xor(m.q_sumc1,m.q_sumc2)
m.q_sumd=fbin_xor(m.q_sumd1,m.q_sumd2)

m.q_nn=m.q_nn+1

ENDDO

RETU CHR(m.q_sumc*16+m.q_sumd)+CHR(m.q_suma*16+m.q_sumb)

FUNCTION fbin_xor

PARAMETER m.q_a,m.q_b

* m.q_a =
* m.q_b =

RETU IIF(INT(MOD(m.q_a,16)/8)#INT(MOD(m.q_b,16)/8),1,0)*8+;
IIF(INT(MOD(m.q_a,8)/4)#INT(MOD(m.q_b,8)/4),1,0)*4+;
IIF(INT(MOD(m.q_a,4)/2)#INT(MOD(m.q_b,4)/2),1,0)*2+;
IIF(INT(MOD(m.q_a,2)/1)#INT(MOD(m.q_b,2)/1),1,0)*1

* END OF FUNCTION FBIN_XOR.

* END OF PROC PAPP_SUM.

12. Reference 2: ftimestamp2datetime.prg

*PROC ftimestamp2datetime

PARAMETER m.q_timestamp

* m.q_timestamp =

* PARAMETER: TIMESTAMP
* RETURN: Datetime

IF TYPE("m.q_timestamp")#"N"
m.q_timestamp=0
ENDI

m.q_timestamp=ABS(INT(m.q_timestamp))

PRIVATE m.q_year
m.q_year=1980+INT(m.q_timestamp/2^25) && bits 31-25

PRIVATE m.q_month
m.q_month=INT(MOD(m.q_timestamp,2^25)/2^21) && bits 24-21

8 จาก 9 24/06/2556 18:15


Welcome to VFP Documents http://www.baiyujia.com/vfpdocuments/f_vhfox.asp

PRIVATE m.q_day
m.q_day=INT(MOD(m.q_timestamp,2^21)/2^16) && bits 20-16

PRIVATE m.q_hour
m.q_hour=INT(MOD(m.q_timestamp,2^16)/2^11) && bits 15-11

PRIVATE m.q_minute
m.q_minute=INT(MOD(m.q_timestamp,2^11)/2^5) && bits 10-5

PRIVATE m.q_second
m.q_second=INT(MOD(m.q_timestamp,2^5)/2^0)*2 && bits 4-0 (two-second increments)

IF m.q_year<1
m.q_year=1
ENDI
IF m.q_year>9999
m.q_year=9999
ENDI

IF m.q_month<1
m.q_month=1
ENDI
IF m.q_month>12
m.q_month=12
ENDI

PRIVATE m.q_daymin
m.q_daymin=1

PRIVATE m.q_daymax
m.q_daymax=DAY(GOMONTH(DATE(m.q_year,m.q_month,1),+1)-1)

IF m.q_day< m.q_daymin
m.q_day=m.q_daymin
ENDI
IF m.q_day>m.q_daymax
m.q_day=m.q_daymax
ENDI

IF m.q_hour<0
m.q_hour=0
ENDI
IF m.q_hour>23
m.q_hour=23
ENDI

IF m.q_minute<0
m.q_minute=0
ENDI
IF m.q_minute>59
m.q_minute=59
ENDI

IF m.q_second<0
m.q_second=0
ENDI
IF m.q_second>59
m.q_second=59
ENDI

RETU datetime(m.q_year,m.q_month,m.q_day,m.q_hour,m.q_minute,m.q_second)

* END OF PROC FTIMESTAMP2DATETIME.

13. Other

For reference only, there is no guarantees.

Any questions or suggestions, please e-mail to [email protected].

9 จาก 9 24/06/2556 18:15

You might also like