home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 1
/
crawlyvol1.bin
/
program
/
compiler
/
nasm20b
/
nasm_src
/
libfix.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-01-19
|
3KB
|
114 lines
#include <stdio.h>
#include "defines.h"
#include "nasm.h"
#include OSBIND
#include "debug.h"
#include NMALLOC_H
#include "labels.h"
#include "object.h"
#include "code.h"
#include "lib.h"
#if VERSION == 2 || VERSION == 0
# define V1_SIGNIFICANT 8
# define V1_SIGNDIFF (SIGNIFICANT - V1_SIGNIFICANT)
# define V1_L_DIFF V1_SIGNDIFF
# define V1_GSIZE (sizeof( g_table) - V1_L_DIFF)
typedef struct
{
char name[ FSIGNIFICANT]; /* 32 Should be plenty for non-paths */
lword seek;
word bytes;
word time,
date;
} old_f_table;
#define V1_F_DIFF ( sizeof( f_table) - sizeof( old_f_table))
#define V1_FSIZE ( sizeof( old_f_table))
#endif
static char sorry[] = "Sorry, but that's a library version I can't handle";
void fix_lsizes( version, gsize, fsize)
lword *gsize, *fsize;
{
switch( version)
{
#if VERSION == 2 || VERSION == 0
case 1 :
*gsize = *gsize / V1_GSIZE * sizeof( g_table);
*fsize = *fsize / V1_FSIZE * sizeof( f_table);
break;
#endif
default :
nferror( sorry);
}
}
void fix_lversion( version, gbytes, globals, fbytes, files)
lword *gbytes, *fbytes;
g_table huge *globals;
f_table huge *files;
{
switch( version)
{
#if VERSION == 2 || VERSION == 0
case 1 :
{
register char huge *p;
g_table huge *q;
register word i, j;
register char huge *dst;
i = *gbytes /= V1_GSIZE; /* calc # symbols */
q = &globals[ i]; /* move to end of */
p = (char huge *) q - i * V1_L_DIFF;
while( p -= sizeof( word), --q, i--)
{
q->index = *(word *) p;
for( dst = &q->name[ j = SIGNIFICANT]; j-- > V1_SIGNIFICANT;)
*--dst = 0;
do
*--dst = *--p;
while( j--);
}
*gbytes *= sizeof( g_table);
}
{
old_f_table huge *p;
f_table huge *q;
register word i, j;
register char huge *src, *dst;
i = *fbytes /= sizeof( old_f_table); /* calc # symbols */
q = &files[ i]; /* move to end of */
p = (old_f_table huge *) ((char huge *) q - i * V1_F_DIFF);
while( --p, --q, i--)
{
q->date = p->date;
q->time = p->time;
q->bytes = p->bytes;
q->seek = p->seek;
dst = &q->name[ FSIGNIFICANT];
src = &p->name[ FSIGNIFICANT];
for( j = FSIGNIFICANT; j--; *--dst = *--src);
}
*fbytes *= sizeof( f_table);
}
#endif
default :
nferror( sorry);
}
}
/* #1# the V1_SIZE + sizeof( word) is added, so that in the loop we need
not sub with sizeof( word)!!
*/