Initial commit of Dink Smallwood HD source. See the "Programmer readme.txt" for information on how to set it up.
git-svn-id: svn://rtsoft.com/rtsvn/projects/RTDink@1469 353e56fe-9613-0410-8469-b96ad8e6f29c
This commit is contained in:
parent
dfbc2348a5
commit
d4f66a5d2e
115 changed files with 37737 additions and 0 deletions
355
source/dink/misc_util.cpp
Normal file
355
source/dink/misc_util.cpp
Normal file
|
@ -0,0 +1,355 @@
|
|||
#include "PlatformPrecomp.h"
|
||||
#include "misc_util.h"
|
||||
#include "util/MiscUtils.h"
|
||||
void strchar(char *string, char ch)
|
||||
/* This acts in the same way as strcat except it combines a string and
|
||||
a single character, updating the null at the end. */
|
||||
{
|
||||
int last;
|
||||
last=strlen(string);
|
||||
string[last]=ch;
|
||||
string[last+1]=0;
|
||||
}
|
||||
|
||||
|
||||
void dink_decompress( unsigned char *in, char * destBuf )
|
||||
{
|
||||
|
||||
const int stackSize = 2*1024;
|
||||
unsigned char stack[stackSize], pair[128][2];
|
||||
int c, top = 0;
|
||||
memset(stack, 0, stackSize);
|
||||
memset(pair, 0, 128*2);
|
||||
|
||||
int outputSize = 0;
|
||||
|
||||
c = *in; in++;
|
||||
|
||||
if (c > 127)
|
||||
{
|
||||
//read optional pair count and pair table
|
||||
int readCount = (c-128)*2;
|
||||
memcpy(&pair,in, readCount );
|
||||
in += readCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c == '\r') c = '\n';
|
||||
if (c == 9) c = ' ';
|
||||
|
||||
strchar(destBuf,c);
|
||||
}
|
||||
// putc(c,out);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
|
||||
/* Pop byte from stack or read byte from file */
|
||||
if (top)
|
||||
c = stack[--top];
|
||||
else
|
||||
{
|
||||
if ((c = *in) == 0) break;
|
||||
in++;
|
||||
}
|
||||
|
||||
/* Push pair on stack or output byte to file */
|
||||
if (c > 127)
|
||||
{
|
||||
if (top >= stackSize )
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
LogMsg("Malformed .d file, can't read it. Would overwrite random memory on the old Dink versions.");
|
||||
LogMsg("Decompressed to %d bytes", outputSize);
|
||||
#endif
|
||||
destBuf[outputSize] = 0;
|
||||
return;
|
||||
}
|
||||
stack[top++] = pair[c-128][1];
|
||||
stack[top++] = pair[c-128][0];
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c == '\r') c = '\n';
|
||||
if (c == 9) c = ' ';
|
||||
|
||||
strchar(destBuf,c);// putc(c,out);
|
||||
outputSize++;
|
||||
}
|
||||
}
|
||||
|
||||
destBuf[outputSize] = 0;
|
||||
#ifdef _DEBUG
|
||||
//LogMsg("Decompressed to %d bytes", outputSize);
|
||||
#endif
|
||||
}
|
||||
|
||||
//this legacy code is very stupid, but I'll leave it for now, it works, whatever
|
||||
void decompress_nocomp (byte *in, char destBuf[])
|
||||
{
|
||||
const int stackSize = 2*1024;
|
||||
unsigned char stack[stackSize], pair[128][2];
|
||||
|
||||
memset(stack, 0, stackSize);
|
||||
int c, top = 0;
|
||||
|
||||
int outputSize = 0;
|
||||
|
||||
c = *in; in++;
|
||||
|
||||
if (0)
|
||||
{
|
||||
//read optional pair count and pair table
|
||||
int readCount = (c-128)*2;
|
||||
memcpy(&pair,in, readCount );
|
||||
in += readCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c == '\r') c = '\n';
|
||||
if (c == 9) c = ' ';
|
||||
|
||||
strchar(destBuf,c);
|
||||
}
|
||||
// putc(c,out);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
|
||||
/* Pop byte from stack or read byte from file */
|
||||
if (top)
|
||||
c = stack[--top];
|
||||
else
|
||||
{
|
||||
if ((c = *in) == 0) break;
|
||||
in++;
|
||||
}
|
||||
|
||||
/* Push pair on stack or output byte to file */
|
||||
if (0)
|
||||
{
|
||||
if (top >= stackSize )
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
LogMsg("Malformed .c file, can't read it. Would overwrite random memory on the old Dink versions.");
|
||||
destBuf[outputSize] = 0;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
stack[top++] = pair[c-128][1];
|
||||
stack[top++] = pair[c-128][0];
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c == '\r') c = '\n';
|
||||
if (c == 9) c = ' ';
|
||||
|
||||
strchar(destBuf,c);// putc(c,out);
|
||||
outputSize++;
|
||||
}
|
||||
}
|
||||
|
||||
destBuf[outputSize] = 0;
|
||||
#ifdef _DEBUG
|
||||
//LogMsg("Decompressed to %d bytes", outputSize);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
void decompress (FILE *in, char destBuf[])
|
||||
{
|
||||
const int stackSize = 512*1024;
|
||||
unsigned char stack[stackSize], pair[128][2];
|
||||
int c, top = 0;
|
||||
|
||||
int outputSize = 0;
|
||||
|
||||
|
||||
if ((c = getc(in)) > 127)
|
||||
fread(pair,2,c-128,in);
|
||||
else
|
||||
{
|
||||
if (c == '\r') c = '\n';
|
||||
if (c == 9) c = ' ';
|
||||
|
||||
strchar(destBuf,c);
|
||||
}
|
||||
// putc(c,out);
|
||||
|
||||
for (;;) {
|
||||
|
||||
|
||||
if (top)
|
||||
c = stack[--top];
|
||||
else if ((c = getc(in)) == EOF)
|
||||
break;
|
||||
|
||||
|
||||
if (c > 127)
|
||||
{
|
||||
if (top >= stackSize )
|
||||
{
|
||||
LogMsg("Malformed .d file, can't read it. Would overwrite random memory on the old Dink versions.");
|
||||
destBuf[outputSize] = 0;
|
||||
return;
|
||||
}
|
||||
stack[top++] = pair[c-128][1];
|
||||
stack[top++] = pair[c-128][0];
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c == '\r') c = '\n';
|
||||
if (c == 9) c = ' ';
|
||||
|
||||
strchar(destBuf,c);// putc(c,out);
|
||||
outputSize++;
|
||||
}
|
||||
}
|
||||
|
||||
destBuf[outputSize] = 0;
|
||||
#ifdef _DEBUG
|
||||
//LogMsg("Decompressed to %d bytes", outputSize);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void decompress_nocomp (FILE *in, char destBuf[])
|
||||
{
|
||||
//let's do it, only this time decompile OUR style
|
||||
|
||||
unsigned char stack[16], pair[128][2];
|
||||
short c, top = 0;
|
||||
|
||||
if ((c = getc(in)) > 255)
|
||||
fread(pair,2,c-128,in);
|
||||
else
|
||||
{
|
||||
if (c == '\r') c = '\n';
|
||||
if (c == 9) c = ' ';
|
||||
|
||||
strchar(destBuf,c);
|
||||
}
|
||||
// putc(c,out);
|
||||
|
||||
for (;;) {
|
||||
|
||||
if (top)
|
||||
c = stack[--top];
|
||||
else if ((c = getc(in)) == EOF)
|
||||
break;
|
||||
|
||||
if (c > 255) {
|
||||
stack[top++] = pair[c-128][1];
|
||||
stack[top++] = pair[c-128][0];
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c == '\r') c = '\n';
|
||||
if (c == 9) c = ' ';
|
||||
|
||||
strchar(destBuf,c);// putc(c,out);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
void replace(const char *this1, char *that, char *line)
|
||||
{
|
||||
|
||||
char hold[500];
|
||||
char thisup[200],lineup[500];
|
||||
int u,i;
|
||||
int checker;
|
||||
|
||||
start:
|
||||
|
||||
strcpy(hold,"");
|
||||
strcpy(lineup,line);
|
||||
strcpy(thisup,this1);
|
||||
ToUpperCase(lineup);
|
||||
ToUpperCase(thisup);
|
||||
if (strstr(lineup,thisup) == NULL) return;
|
||||
checker = -1;
|
||||
strcpy(hold,"");
|
||||
for (u = 0; u < strlen(line); u++)
|
||||
{
|
||||
if (checker > -1)
|
||||
{
|
||||
if (toupper(line[u]) == toupper(this1[checker]))
|
||||
{
|
||||
if (checker+1 == strlen(this1))
|
||||
{
|
||||
doit:
|
||||
u = u - strlen(this1);
|
||||
u++;
|
||||
for (i = 0; i < u; i++) hold[i] = line[i];
|
||||
for (i = 0; i < strlen(that); i++) hold[(u)+i]=that[i];
|
||||
hold[strlen(that)+u] = 0;
|
||||
for (i = 0; i < (strlen(line)-u)-strlen(this1); i++)
|
||||
{
|
||||
hold[(u+strlen(that))+i] = line[(u+strlen(this1))+i];
|
||||
}
|
||||
hold[(strlen(line)-strlen(this1))+strlen(that)] = 0;
|
||||
strcpy(line,hold);
|
||||
goto start;
|
||||
}
|
||||
checker++;
|
||||
} else { checker = -1; }
|
||||
}
|
||||
if( checker == -1)
|
||||
{
|
||||
if (toupper(line[u]) == toupper(this1[0]))
|
||||
{
|
||||
checker = 1;
|
||||
if (strlen(this1) == 1) goto doit;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool separate_string (const char str[255], int num, char liney, char *return1)
|
||||
{
|
||||
int l;
|
||||
int k;
|
||||
l = 1;
|
||||
strcpy(return1 ,"");
|
||||
|
||||
for (k = 0; k <= strlen(str); k++)
|
||||
{
|
||||
|
||||
if (str[k] == liney)
|
||||
{
|
||||
l++;
|
||||
if (l == num+1)
|
||||
goto done;
|
||||
|
||||
if (k < strlen(str)) strcpy(return1,"");
|
||||
}
|
||||
if (str[k] != liney)
|
||||
sprintf(return1, "%s%c",return1 ,str[k]);
|
||||
}
|
||||
if (l < num) strcpy(return1,"");
|
||||
|
||||
replace("\n","",return1); //Take the /n off it.
|
||||
|
||||
/*
|
||||
char s[2];
|
||||
s[0] = 9; //tab
|
||||
s[1] = 0; //null
|
||||
replace(s,"",return1); //Take the /n off it.
|
||||
*/
|
||||
return(false);
|
||||
|
||||
done:
|
||||
|
||||
if (l < num) strcpy(return1,"");
|
||||
|
||||
replace("\n","",return1); //Take the /n off it.
|
||||
|
||||
//Msg("Took %s and turned it to %s.",str, return1);
|
||||
return(true);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue