This repository has been archived by the owner on Nov 8, 2024. It is now read-only.
forked from RWS-Studios/POSTAL-SourceCode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
MemFileFest.cpp
126 lines (106 loc) · 4.35 KB
/
MemFileFest.cpp
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
////////////////////////////////////////////////////////////////////////////////
//
// Copyright 2016 RWS Inc, All Rights Reserved
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of version 2 of the GNU General Public License as published by
// the Free Software Foundation
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
// MemFileFest.cpp
// Project: Nostril (aka Postal)
//
// History:
// 09/12/97 JMI Started.
//
// 09/12/97 JMI Added SHAREWARE_RELEASE files.
//
// 09/12/97 JMI Now only the end of the requested resource name has to
// match the full embedded file's name.
//
// 09/17/97 MJR Renamed to the more-correct ONLINE_DEMO_RELEASE.
//
// 06/24/01 MJR Got rid of alternate CompUSA level.
//
//////////////////////////////////////////////////////////////////////////////
//
// Manages a group of memory resources that represent disk files. Currently
// used for .RLM files to limit the usefulness of crippleware demos.
//
//////////////////////////////////////////////////////////////////////////////
#include "RSPiX.h"
#include "CompileOptions.h"
#include "MemFileFest.h"
//////////////////////////////////////////////////////////////////////////////
// Macros.
//////////////////////////////////////////////////////////////////////////////
#define NUM_ELEMENTS(a) (sizeof(a) / sizeof(a[0]) )
//////////////////////////////////////////////////////////////////////////////
// Typedefs.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Variables.
//////////////////////////////////////////////////////////////////////////////
// Only compile this hefty chunk of shit if we're only allowing specific realm
#if defined(ENABLE_PLAY_SPECIFIC_REALMS_ONLY)
#include "GConsite.h"
#include "EConsite.h"
#include "MConsite.h"
#include "HConsite.h"
#include "PConsite.h"
FATEntry ms_memdisk[] =
{
{ pszCheckPtGConsite, au8CheckPtGConsite, sizeof(au8CheckPtGConsite), },
{ pszEConsite, au8EConsite, sizeof(au8EConsite), },
{ pszMConsite, au8MConsite, sizeof(au8MConsite), },
{ pszHConsite, au8HConsite, sizeof(au8HConsite), },
{ pszPConsite, au8PConsite, sizeof(au8PConsite), },
};
//////////////////////////////////////////////////////////////////////////////
// Functions.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Given a filename, open an RFile to the corresponding resource data.
//////////////////////////////////////////////////////////////////////////////
extern short GetMemFileResource( // Returns 0 on successful open.
const char* pszResName, // In: Res filename.
RFile::Endian endian, // In: Endian nature for RFile.
RFile* pfile) // In: File to open with.
{
short sRes = 1; // Assume failure for simplicity.
ASSERT(pfile);
ASSERT(pszResName);
short sIndex;
bool bFound;
long lReqResNameLen = strlen(pszResName);
for (sIndex = 0, bFound = false; sIndex < NUM_ELEMENTS(ms_memdisk) && bFound == false; sIndex++)
{
long lEmbeddedResNameLen = strlen(ms_memdisk[sIndex].pszResName);
// If the requested name is long enough . . .
if (lReqResNameLen >= lEmbeddedResNameLen)
{
// If this is the specified res name (the specified name only has to
// match from the end back lEmbeddedResNameLen characters) . . .
if (rspStricmp(pszResName + lReqResNameLen - lEmbeddedResNameLen, ms_memdisk[sIndex].pszResName) == 0)
{
// Found it.
bFound = true;
// Open the resource data . . .
sRes = pfile->Open(ms_memdisk[sIndex].pau8Res, ms_memdisk[sIndex].lResSize, endian);
}
}
}
return sRes;
}
#endif // ENABLE_PLAY_SPECIFIC_REALMS_ONLY
//////////////////////////////////////////////////////////////////////////////
// EOF
//////////////////////////////////////////////////////////////////////////////