16 */ |
16 */ |
17 |
17 |
18 |
18 |
19 // INCLUDE FILES |
19 // INCLUDE FILES |
20 |
20 |
21 #include <stdlib.h> |
21 #include <sys/time.h> |
22 #include <string.h> |
22 #include <unistd.h> |
23 #include <windows.h> |
23 #include <cstdlib> |
|
24 #include <string> |
24 |
25 |
25 #include "SDCGlobals.h" |
26 #include "SDCGlobals.h" |
26 #include "SDCReader.h" |
27 #include "SDCReader.h" |
27 #include "SDCMBMOutput.h" |
28 #include "SDCMBMOutput.h" |
28 #include "SDCInlOutput.h" |
29 #include "SDCInlOutput.h" |
29 #include "SDCBinOutput.h" |
30 #include "SDCBinOutput.h" |
30 #include "SDCPkgOutput.h" |
31 #include "SDCPkgOutput.h" |
31 #include "SDCIIDConstants.h" |
32 #include "SDCIIDConstants.h" |
32 #include "SDCDebugOutput.h" |
33 #include "SDCDebugOutput.h" |
|
34 #include "SDCCompat.h" |
33 |
35 |
34 // LOCAL VARIABLES |
36 // LOCAL VARIABLES |
35 |
37 |
36 static char sourceFile[512]; |
38 static char sourceFile[512]; |
37 static char skinName[512]; |
39 static char skinName[512]; |
104 strcpy( iidFile, "" ); |
106 strcpy( iidFile, "" ); |
105 |
107 |
106 int fileParam = 0; |
108 int fileParam = 0; |
107 for( int i=1; i<argc; i++ ) |
109 for( int i=1; i<argc; i++ ) |
108 { |
110 { |
109 if( stricmp( "--drm", argv[i] ) == 0 ) |
111 if( sd_strcasecmp( "--drm", argv[i] ) == 0 ) |
110 { |
112 { |
111 drmEnabled = true; |
113 drmEnabled = true; |
112 } |
114 } |
113 else if( stricmp( "--forcesystem", argv[i] ) == 0 ) |
115 else if( sd_strcasecmp( "--forcesystem", argv[i] ) == 0 ) |
114 { |
116 { |
115 forceSystem = true; |
117 forceSystem = true; |
116 } |
118 } |
117 else if( stricmp( "--forcenormal", argv[i] ) == 0 ) |
119 else if( sd_strcasecmp( "--forcenormal", argv[i] ) == 0 ) |
118 { |
120 { |
119 forceNormal = true; |
121 forceNormal = true; |
120 } |
122 } |
121 else if( strnicmp( "-m", argv[i], 2 ) == 0 ) |
123 else if( sd_strncasecmp( "-m", argv[i], 2 ) == 0 ) |
122 { |
124 { |
123 strcpy( mbmPath, argv[i]+2 ); |
125 strcpy( mbmPath, argv[i]+2 ); |
124 AppendBackslash( mbmPath ); |
126 AppendBackslash( mbmPath ); |
125 } |
127 } |
126 else if( strnicmp( "-t", argv[i], 2 ) == 0 ) |
128 else if( sd_strncasecmp( "-t", argv[i], 2 ) == 0 ) |
127 { |
129 { |
128 strcpy( sknPath, argv[i]+2 ); |
130 strcpy( sknPath, argv[i]+2 ); |
129 AppendBackslash( sknPath ); |
131 AppendBackslash( sknPath ); |
130 } |
132 } |
131 else if( strnicmp( "-s", argv[i], 2 ) == 0 ) |
133 else if( sd_strncasecmp( "-s", argv[i], 2 ) == 0 ) |
132 { |
134 { |
133 strcpy( dllPath, argv[i]+2 ); |
135 strcpy( dllPath, argv[i]+2 ); |
134 AppendBackslash( dllPath ); |
136 AppendBackslash( dllPath ); |
135 } |
137 } |
136 else if( strnicmp( "-i", argv[i], 2 ) == 0 ) |
138 else if( sd_strncasecmp( "-i", argv[i], 2 ) == 0 ) |
137 { |
139 { |
138 strcpy( iidFile, argv[i]+2 ); |
140 strcpy( iidFile, argv[i]+2 ); |
139 } |
141 } |
140 else |
142 else |
141 { |
143 { |
160 // GeneratePID |
162 // GeneratePID |
161 ////////////////////////////////////////////////////////////////////// |
163 ////////////////////////////////////////////////////////////////////// |
162 |
164 |
163 void GeneratePID( CSDCData* data ) |
165 void GeneratePID( CSDCData* data ) |
164 { |
166 { |
165 SYSTEMTIME sysTime; |
167 struct timeval sysTime; |
166 GetSystemTime( &sysTime ); |
168 gettimeofday( &sysTime, NULL); |
167 FILETIME fileTime; |
169 // 100-nanosecond |
168 SystemTimeToFileTime( &sysTime, &fileTime ); |
170 unsigned long long currentTime; |
169 ULARGE_INTEGER currentTime; |
171 // get the 100-nanosecond number at time of UTC |
170 currentTime.LowPart = fileTime.dwLowDateTime; |
172 currentTime = ( sysTime.tv_usec + mktime(gmtime(&sysTime.tv_sec)) * SEC_TO_USEC ) * USEC_TO_100NANOSEC; |
171 currentTime.HighPart = fileTime.dwHighDateTime; |
173 |
172 |
174 struct tm startTime; |
173 sysTime.wYear = 2003; |
175 // initialize startTime |
174 sysTime.wMonth = 1; |
176 memset(&startTime,0,sizeof(startTime)); |
175 sysTime.wDay = 1; |
177 startTime.tm_year = 2003 - 1900; |
176 sysTime.wHour = 0; |
178 startTime.tm_mon = 0; |
177 sysTime.wMinute = 0; |
179 startTime.tm_mday = 1; |
178 sysTime.wSecond = 0; |
180 startTime.tm_hour = 0; |
179 sysTime.wMilliseconds = 0; |
181 startTime.tm_min = 0; |
180 SystemTimeToFileTime( &sysTime, &fileTime ); |
182 startTime.tm_sec = 0; |
181 ULARGE_INTEGER epochTime; |
183 time_t secTime = mktime( &startTime ); |
182 epochTime.LowPart = fileTime.dwLowDateTime; |
184 // 100-nanosecond |
183 epochTime.HighPart = fileTime.dwHighDateTime; |
185 unsigned long long epochTime; |
184 |
186 // get the 100-nanosecond number at time @20030101 00:00:00 |
185 ULARGE_INTEGER timeStamp; |
187 epochTime = ( secTime * SEC_TO_USEC ) * USEC_TO_100NANOSEC; |
186 timeStamp.QuadPart = currentTime.QuadPart - epochTime.QuadPart; |
188 |
187 timeStamp.QuadPart = timeStamp.QuadPart >> 20; |
189 unsigned long long timeStamp; |
188 |
190 timeStamp = currentTime - epochTime; |
189 srand( gInput.iHash ^ currentTime.HighPart ^ currentTime.LowPart ); |
191 timeStamp = timeStamp >> 20; |
190 |
192 |
191 // Timestamp |
193 unsigned int highPart = static_cast<unsigned int>((currentTime >> 32) ); |
192 data->iPid.iPID2 = timeStamp.LowPart; |
194 unsigned int lowPart = static_cast<unsigned int>( currentTime ); |
193 if( data->iPid.iPID2 == 0 ) data->iPid.iPID2 += 1; |
195 srand( gInput.iHash ^ highPart ^ lowPart ); |
194 |
196 |
195 // Random number |
197 // Timestamp |
196 data->iPid.iPID1 = rand(); |
198 data->iPid.iPID2 = static_cast<int>(timeStamp); |
197 data->iPid.iPID1 = data->iPid.iPID1 << 8; |
199 if( data->iPid.iPID2 == 0 ) data->iPid.iPID2 += 1; |
198 data->iPid.iPID1 ^= rand(); |
200 |
199 data->iPid.iPID1 = data->iPid.iPID1 << 8; |
201 // Random number |
200 data->iPid.iPID1 ^= rand(); |
202 data->iPid.iPID1 = rand(); |
201 data->iPid.iPID1 = data->iPid.iPID1 << 8; |
203 data->iPid.iPID1 = data->iPid.iPID1 << 8; |
202 data->iPid.iPID1 ^= rand(); |
204 data->iPid.iPID1 ^= rand(); |
|
205 data->iPid.iPID1 = data->iPid.iPID1 << 8; |
|
206 data->iPid.iPID1 ^= rand(); |
|
207 data->iPid.iPID1 = data->iPid.iPID1 << 8; |
|
208 data->iPid.iPID1 ^= rand(); |
|
209 |
203 } |
210 } |
204 |
211 |
205 ////////////////////////////////////////////////////////////////////// |
212 ////////////////////////////////////////////////////////////////////// |
206 // Main function |
213 // Main function |
207 ////////////////////////////////////////////////////////////////////// |
214 ////////////////////////////////////////////////////////////////////// |