1 |
|
---|
2 | /*
|
---|
3 | *@@sourcefile mapfile.h:
|
---|
4 | * header file for map_vac.c.
|
---|
5 | *
|
---|
6 | * Note: Version numbering in this file relates to XWorkplace version
|
---|
7 | * numbering.
|
---|
8 | *
|
---|
9 | *@@include #include <os2.h>
|
---|
10 | *@@include #include "helpers\linklist.h"
|
---|
11 | *@@include #include "helpers\mapfile.h"
|
---|
12 | */
|
---|
13 |
|
---|
14 | /* Copyright (C) 2002 Ulrich Mller.
|
---|
15 | * This file is part of the "XWorkplace helpers" source package.
|
---|
16 | * This is free software; you can redistribute it and/or modify
|
---|
17 | * it under the terms of the GNU General Public License as published
|
---|
18 | * by the Free Software Foundation, in version 2 as it comes in the
|
---|
19 | * "COPYING" file of the XWorkplace main distribution.
|
---|
20 | * This program is distributed in the hope that it will be useful,
|
---|
21 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
23 | * GNU General Public License for more details.
|
---|
24 | */
|
---|
25 |
|
---|
26 | #if __cplusplus
|
---|
27 | extern "C" {
|
---|
28 | #endif
|
---|
29 |
|
---|
30 | #ifndef MAPFILE_HEADER_INCLUDED
|
---|
31 | #define MAPFILE_HEADER_INCLUDED
|
---|
32 |
|
---|
33 | /* ******************************************************************
|
---|
34 | *
|
---|
35 | * Errors
|
---|
36 | *
|
---|
37 | ********************************************************************/
|
---|
38 |
|
---|
39 | #define MAPERROR_FIRST 10000
|
---|
40 | #define MAPERROR_NO_MODULE_NAME (MAPERROR_FIRST)
|
---|
41 | #define MAPERROR_SYNTAX_SEGMENTS_START (MAPERROR_FIRST + 1)
|
---|
42 | // cannot handle initial line in segments block;
|
---|
43 | // line must have format
|
---|
44 | // " 0001:00000000 000001630H FREQ_CODE1 CODE 32-bit"
|
---|
45 | #define MAPERROR_SYNTAX_SEGMENTS_NOSEGNAME (MAPERROR_FIRST + 2)
|
---|
46 | // cannot find segment name
|
---|
47 | #define MAPERROR_SYNTAX_SEGMENTS_SEGTYPE (MAPERROR_FIRST + 3)
|
---|
48 | // unknown segment type
|
---|
49 | #define MAPERROR_SYNTAX_SEGMENTS_OTHER (MAPERROR_FIRST + 4)
|
---|
50 |
|
---|
51 | #define MAPERROR_SYNTAX_EXPORTS_OBJOFS (MAPERROR_FIRST + 5)
|
---|
52 | #define MAPERROR_SYNTAX_EXPORTS_NAME1 (MAPERROR_FIRST + 6)
|
---|
53 | #define MAPERROR_SYNTAX_EXPORTS_OTHER (MAPERROR_FIRST + 7)
|
---|
54 |
|
---|
55 | #define MAPERROR_SYNTAX_PUBLICS_OBJOFS (MAPERROR_FIRST + 8)
|
---|
56 | #define MAPERROR_SYNTAX_PUBLICS_OTHER (MAPERROR_FIRST + 9)
|
---|
57 |
|
---|
58 | /* ******************************************************************
|
---|
59 | *
|
---|
60 | * Map definitions
|
---|
61 | *
|
---|
62 | ********************************************************************/
|
---|
63 |
|
---|
64 | /*
|
---|
65 | *@@ SEGMENT:
|
---|
66 | *
|
---|
67 | */
|
---|
68 |
|
---|
69 | typedef struct _SEGMENT
|
---|
70 | {
|
---|
71 | ULONG ulObjNo;
|
---|
72 | ULONG ulObjOfs;
|
---|
73 | ULONG cbSeg;
|
---|
74 | CHAR szSegName[30];
|
---|
75 | ULONG ulType;
|
---|
76 | #define SEGTYPE_CODE32 1 // CODE 32-bit
|
---|
77 | #define SEGTYPE_CODE16 2 // CODE 16-bit
|
---|
78 | #define SEGTYPE_CONST32 3 // CONST 32-bit
|
---|
79 | #define SEGTYPE_DATA16 4 // DATA16 16-bit
|
---|
80 | #define SEGTYPE_DATA32 5 // DATA 32-bit
|
---|
81 | #define SEGTYPE_EDC_CLASS32 6 // EDC_CLASS 32-bit
|
---|
82 | #define SEGTYPE_BSS32 7 // BSS 32-bit
|
---|
83 | #define SEGTYPE_STACK32 8 // STACK 32-bit
|
---|
84 |
|
---|
85 | } SEGMENT, *PSEGMENT;
|
---|
86 |
|
---|
87 | /*
|
---|
88 | *@@ EXPORT:
|
---|
89 | *
|
---|
90 | */
|
---|
91 |
|
---|
92 | typedef struct _EXPORT
|
---|
93 | {
|
---|
94 | ULONG ulObjNo;
|
---|
95 | ULONG ulObjOfs;
|
---|
96 |
|
---|
97 | ULONG ulName1Len,
|
---|
98 | ulName2Len;
|
---|
99 | CHAR szNames[1]; // ulName1Len chars, followed by \0,
|
---|
100 | // followed by ulName2Len chars, followed by \0
|
---|
101 | } EXPORT, *PEXPORT;
|
---|
102 |
|
---|
103 | /*
|
---|
104 | *@@ PUBLIC:
|
---|
105 | *
|
---|
106 | */
|
---|
107 |
|
---|
108 | typedef struct _PUBLIC
|
---|
109 | {
|
---|
110 | ULONG ulObjNo;
|
---|
111 | ULONG ulObjOfs;
|
---|
112 |
|
---|
113 | ULONG ulNameLen,
|
---|
114 | ulImportLen;
|
---|
115 |
|
---|
116 | ULONG ulImportIndex; // if ulImportLen != 0, the index from where
|
---|
117 | // the thing was imported
|
---|
118 |
|
---|
119 | CHAR szName[1]; // ulNameLen chars, followed by \0,
|
---|
120 | // and if ulImportLen != 0, followed
|
---|
121 | // by ulImportLen chars, followed by \0
|
---|
122 |
|
---|
123 | } PUBLIC, *PPUBLIC;
|
---|
124 |
|
---|
125 | /*
|
---|
126 | *@@ MAPFILE:
|
---|
127 | *
|
---|
128 | */
|
---|
129 |
|
---|
130 | typedef struct _MAPFILE
|
---|
131 | {
|
---|
132 | CHAR szModule[CCHMAXPATH];
|
---|
133 |
|
---|
134 | LINKLIST llSegments;
|
---|
135 | LINKLIST llExports;
|
---|
136 | LINKLIST llPublics;
|
---|
137 |
|
---|
138 | } MAPFILE, *PMAPFILE;
|
---|
139 |
|
---|
140 | /* ******************************************************************
|
---|
141 | *
|
---|
142 | * Prototypes
|
---|
143 | *
|
---|
144 | ********************************************************************/
|
---|
145 |
|
---|
146 | APIRET mapvRead(PCSZ pcszMapFilename,
|
---|
147 | PMAPFILE *ppMapFile,
|
---|
148 | PSZ pszLineBuf,
|
---|
149 | ULONG cbLineBuf,
|
---|
150 | PULONG pulLineError);
|
---|
151 |
|
---|
152 | APIRET mapvClose(PMAPFILE *ppMapFile);
|
---|
153 |
|
---|
154 | #endif
|
---|
155 |
|
---|
156 | #if __cplusplus
|
---|
157 | }
|
---|
158 | #endif
|
---|
159 |
|
---|