DSM/Mitsubishi CAPS

From Jane Hacker Wiki
Revision as of 20:23, 26 April 2023 by WikiSysop (talk | contribs) (Example)
Jump to navigation Jump to search

This entry details my data archaeology work on the Mitsubishi WINCAPS/CAPS (Computerized Automatic Part Searching System) software developed by and/or for Mitsubishi Motors Corporation.

Subpages

External Links

Known Versions

Here are lists of Mitsubishi CAPS/WINCAPS versions

CAPS (MS-DOS)

Version Date
C:\WINCAPS\CAPS\CAPS.EXE
? 1996/08/01

WINCAPS (Windows CAPS)

Version Year in About Dialog Year in splash screen
C:\WINCAPS\CAPS.EXE
2.66 1997 1994
3.41 1997 1994

DOSCAPS

Pretty sure there is a DOS CAPS, or at least DOS access layer to database given the two strings in

C:\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 files must be at least one page in size, meaning the smallest IDX file will be 2048 bytes, filled mostly with null bytes(00h) if it only has a couple of "records" (there are 96 records per page in some pages in SHARYO.IDX for example).

Header

The first 32 bytes of each page is the "header".

Example

SHARYO.IDX - First page header example

#Header - 32 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
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 17 1                          6
*in decimal
Byte Breakdown
Byte # Name Description
0-7 Filename/Table name (Usually) matches file name, if filename < 8 bytes it is padded with 20h bytes, Uppercase ASCII
8-10 File extension Always 49h 44h 58h, literal: "IDX", Uppercase ASCII
11 Null byte Always 00h, separator or null byte for a string
12 Record length The length of records included in the page, in bytes, appears to remain the same throughout the entire index file
13 Page low The page count, low-byte, starts at 01h increments by 1 every page
14 Page high The page count, high-byte, byte 13 will overflow into this byte at FFh
15 Depth Tree depth, starts at 00h (root), max is 3?
16 Node low Node in the tree depth, starts at 00h, resets when depth increases
17 Node high Node in the tree depth, byte 16 will overflow into this byte at FFh
18 Entry Entry in the node, node per page I believe?
19 Entry high? Overflow for byte 18?
20 isLeaf Marks the page as containing records the contain the byte offset to read from the DAT file,

depth will not increase past the first page once set

21 ? Unknown/unobserved
22 Record count The number of records contained on this page
23-31 ? Unknown/unobserved

Index Entry

Byte Breakdown
Byte # Name Description
0-(n-1) Data bytes This is a record's data bytes, n = byte 12 in the page's header
n, n+1, n+2 Pointer bytes Non-leaf nodes will point to a page offset, that offset being in the next depth of the tree

isLeaf nodes will contain the byte offset pointing to the data record of interest

More 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:

DAT - Data