DSM/Mitsubishi CAPS
This details from my work on digital archaeology on the Mitsubishi CAPS (Computerized Automatic Part Searching System) software developed by or for Mitsubishi Motors Corporation.
Subpages
Known Versions
Here are a list of Mitsubishi CAPS
CAPS (MS-DOS)
Version | Date |
---|---|
? | 1996/08/01 |
WINCAPS (Windows CAPS)
Version | Year |
---|---|
2.66 | 1997 |
3.41 |
DOSCAPS
Pretty sure there is a DOS CAPS, or at least DOS access layer to database given the two strings in
?\WINCAPS\CAPS\CAPS.exe
seg048:0008 0000002C C C Library - (C)Copyright Microsoft Corp 1986 seg048:3693 0000002B C \r\nerror 2004: DOS 2.0 or later required\r\n$
File Formats
VIN Lookup
SHARYO.IDX Lookup:
Read start | Bytes read |
---|---|
0 | 2048 |
4096 | 2048 |
229376 | 2048 |
229376 | 4096 |
21,833,728 | 2048 |
21,831,680 | 4096 |
SHARYO.DAT Lookup:
Read start | Bytes read |
---|---|
35,073,568 | 2048 |
35,069,952 | 8192 |
IDX - Index
Index files are broken up into 2048 byte chunks, which I will refer to as "pages". Index file must be at least 1 page in size, meaning the smallest IDX file will be 2048 bytes, filled mostly with null bytes(00h) if it has 1 or 2 indexes (there are 60 indexes per page in SHARYO.IDX for example).
Header
The first 32 bytes of each page is the "header". The header's first 8 bytes contain the filename, if the filename is less than 8 bytes the remaining bytes will be padded with 20h. After the name is "IDX", followed by 00h as a seperator.
Byte 13 (14th byte) is the "page number", starting with 01h and incrementing each page.
Bytes 14-32 appear to be other informational flags which have yet to be understood.
Byte # | Description |
---|---|
0-7 | Uppercase ASCII, matches file name, if name < 8 bytes it is padded with 20h |
8-10 | 49h 44h 58h, literal: "IDX", Uppercase ASCII |
11 | Always 00h, separator or null byte for the string? |
12 | Always the same in all headers that are in the same file, often seen: 09h 11h, is this multiplier or record length? |
13 | The "page" count, starts at 01h increments by 1 every "header" |
14-31 | Other flags |
15 | 00h or 01h or 02h, always set with byte 16? Always the same as byte 16? |
16 | 00h or 01h or 02h, always set with byte 15? Always the same as byte 15? |
18 | Secondary counter, starts at 01h and increments by 01h, always used with bytes 15 and 16 set? |
22 | Number of records on this page |
index entry
Byte # | Description |
---|
Examples
NU = NULL BYTE (00h) PA = PADDING (20h)
SEIBI.IDX - 2048 bytes
Byte : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Hex : 53 45 49 42 49 20 20 20 49 44 58 00 09 01 00 00 00 00 00 00 01 00 01 00 00 00 00 00 00 00 00 00 39 39 39 39 39 39 39 39 39 01 ASCII: S E I B I I D X 9 9 9 9 9 9 9 9 9
UNKATA.IDX - 2048 bytes
Byte : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Hex : 55 4E 4B 41 54 41 20 20 49 44 58 00 09 01 00 00 00 00 00 00 01 00 01 00 00 00 00 00 00 00 00 00 39 39 39 39 39 39 39 39 39 01 ASCII: U N K A T A I D X 9 9 9 9 9 9 9 9 9
SHARYO.IDX - bytes
#Header - 32 bytes: \/ Page (1) \/ Number of records Byte : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Hex : 53 48 41 52 59 4F 20 20 49 44 58 00 11 01 00 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 ASCII: S H A R Y O I D X Data : PA PA NU 11 1 6 #VIN (02) - 21 bytes \/-- Count Column (2) { 17 bytes } Byte : 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 Hex : 34 41 33 41 43 38 34 4C 33 59 45 30 35 31 32 36 31 02 00 00 00 ASCII: 4 A 3 A C 8 4 L 3 Y E 0 5 1 2 6 1 Data : 2 NU NU NU #VIN (03) - 21 bytes Hex : 34 41 33 43 53 34 34 54 58 4D 45 30 30 36 31 30 36 03 00 00 00 ASCII: 4 A 3 C S 4 4 T X M E 0 0 6 1 0 6 Data : 3 NU NU NU #VIN (04) - 21 bytes Hex : 4A 41 33 41 4D 36 34 4A 37 52 59 30 30 35 33 35 33 04 00 00 00 ASCII: J A 3 A M 6 4 J 7 R Y 0 0 5 3 5 3 Data : 4 NU NU NU #VIN (05) - 21 bytes Hex : 4A 41 34 47 4A 33 31 53 31 4D 4A 30 31 33 39 31 34 05 00 00 00 ASCII: J A 4 G J 3 1 S 1 M J 0 1 3 9 1 4 Data : 5 NU NU NU #VIN (06) - 21 bytes Hex : 4A 41 37 4C 53 32 31 47 34 52 50 30 31 32 37 33 34 06 00 00 00 ASCII: J A 7 L S 2 1 G 4 R P 0 1 2 7 3 4 Data : 6 NU NU NU #??? (07) - 18 bytes Hex : 5A 31 36 41 57 59 30 59 30 30 31 36 39 37 20 20 20 07 ... \ ASCII: Z 1 6 A W Y 0 Y 0 0 1 6 9 7 ... + 1893 Null Bytes (2048 byte total header space) Data : PA PA PA 7 ... /
| Always 11?? #Header 2 (Start at 2048 Bytes) - 32 Bytes \/ \/Page (2) \/ Number of records Byte : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Hex : 53 48 41 52 59 4F 20 20 49 44 58 00 11 02 00 01 01 00 01 00 00 00 60 00 00 00 00 00 00 00 00 00 ASCII: S H A R Y O I D X ' Data : PA PA NU 11 2 1 1 1 60 #Indexes from page 2 { 17 bytes } \/-- Count Column (8) Hex : 32 36 41 58 4E 20 20 45 30 38 37 35 34 31 20 20 20 08 00 00 00 ASCII: 2 6 A X N E 0 8 7 5 4 1 Data : PA PA PA PA PA 8 NU NU NU Hex : 33 34 42 31 52 20 20 45 30 39 35 37 37 32 20 20 20 09 00 00 00 ASCII: 3 4 B 1 R E 0 9 5 7 7 2 Data : PA PA PA PA PA 9 NU NU NU Hex : 33 34 42 33 52 20 20 45 30 38 32 30 37 30 20 20 20 0A 00 00 00 ASCII: 3 4 B 3 R E 0 8 2 0 7 0 Data : PA PA PA PA PA 10 NU NU NU
#Header 3 Byte : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Hex : 53 48 41 52 59 4F 20 20 49 44 58 00 11 03 00 01 01 00 02 00 00 00 60 00 00 00 00 00 00 00 00 00 ASCII: S H A R Y O I D X ' Data : PA PA NU 11 3 1 1 2 60 #Indexes from page 3 \/-- Count Column (68) Hex : 34 41 33 41 43 38 34 4C 39 59 45 30 31 38 33 37 36 68 00 00 00 ASCII: 4 A 3 A C 8 4 L 9 Y E 0 1 8 3 7 6 h Data : 68 NU NU NU Hex : 34 41 33 41 45 34 35 47 31 33 45 31 33 38 36 34 30 69 00 00 00 ASCII: 4 A 3 A E 4 5 G 1 3 E 1 3 8 6 4 0 i Data : 69 NU NU NU Hex : 34 41 33 41 45 34 35 47 36 31 45 30 33 30 33 32 30 6A 00 00 00 ASCII: 4 A 3 A E 4 5 G 6 1 E 0 3 0 3 2 0 j Data : 6A NU NU NU Hex: ASCII: Data: