[Scummvm-cvs-logs] CVS: scummvm/tools .cvsignore,NONE,1.1 convbdf.c,NONE,1.1 md5table.c,NONE,1.1 scumm-md5.txt,NONE,1.1 simon-md5.txt,NONE,1.1
Max Horn
fingolfin at users.sourceforge.net
Thu Dec 23 17:44:10 CET 2004
Update of /cvsroot/scummvm/scummvm/tools
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1251
Added Files:
.cvsignore convbdf.c md5table.c scumm-md5.txt simon-md5.txt
Log Message:
Moving convbdf and md5table into scummvm/tools/
--- NEW FILE: .cvsignore ---
.deps
convbdf
md5table
--- NEW FILE: convbdf.c ---
/*
* Convert BDF files to C++ source.
*
* Copyright (c) 2002 by Greg Haerr <greg at censoft.com>
*
* Originally writen for the Microwindows Project <http://microwindows.org>
*
* Greg then modified it for Rockbox <http://rockbox.haxx.se/>
*
* Max Horn took that version and changed it to work for ScummVM.
* Changes include: warning fixes, removed .FNT output, output C++ source,
* tweak code generator so that the generated code fits into ScummVM code base.
*
* What fun it is converting font data...
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Header: /cvsroot/scummvm/scummvm/tools/convbdf.c,v 1.1 2004/12/24 01:43:33 fingolfin Exp $
*
*/
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
/* BEGIN font.h*/
/* bitmap_t helper macros*/
#define BITMAP_WORDS(x) (((x)+15)/16) /* image size in words*/
#define BITMAP_BYTES(x) (BITMAP_WORDS(x)*sizeof(bitmap_t))
#define BITMAP_BITSPERIMAGE (sizeof(bitmap_t) * 8)
#define BITMAP_BITVALUE(n) ((bitmap_t) (((bitmap_t) 1) << (n)))
#define BITMAP_FIRSTBIT (BITMAP_BITVALUE(BITMAP_BITSPERIMAGE - 1))
#define BITMAP_TESTBIT(m) ((m) & BITMAP_FIRSTBIT)
#define BITMAP_SHIFTBIT(m) ((bitmap_t) ((m) << 1))
typedef unsigned short bitmap_t; /* bitmap image unit size*/
/* builtin C-based proportional/fixed font structure */
/* based on The Microwindows Project http://microwindows.org */
struct font {
char * name; /* font name*/
int maxwidth; /* max width in pixels*/
int height; /* height in pixels*/
int ascent; /* ascent (baseline) height*/
int firstchar; /* first character in bitmap*/
int size; /* font size in glyphs*/
bitmap_t* bits; /* 16-bit right-padded bitmap data*/
unsigned long* offset; /* offsets into bitmap data*/
unsigned char* width; /* character widths or NULL if fixed*/
int defaultchar; /* default char (not glyph index)*/
long bits_size; /* # words of bitmap_t bits*/
/* unused by runtime system, read in by convbdf*/
char * facename; /* facename of font*/
char * copyright; /* copyright info for loadable fonts*/
int pixel_size;
int descent;
int fbbw, fbbh, fbbx, fbby;
};
/* END font.h*/
#define isprefix(buf,str) (!strncmp(buf, str, strlen(str)))
#define strequal(s1,s2) (!strcmp(s1, s2))
#define EXTRA 300 /* # bytes extra allocation for buggy .bdf files*/
int gen_map = 1;
int start_char = 0;
int limit_char = 65535;
int oflag = 0;
char outfile[256];
void usage(void);
void getopts(int *pac, char ***pav);
int convbdf(char *path);
void free_font(struct font* pf);
struct font* bdf_read_font(char *path);
int bdf_read_header(FILE *fp, struct font* pf);
int bdf_read_bitmaps(FILE *fp, struct font* pf);
char * bdf_getline(FILE *fp, char *buf, int len);
bitmap_t bdf_hexval(unsigned char *buf, int ndx1, int ndx2);
int gen_c_source(struct font* pf, char *path);
void error(const char *s, ...) {
char buf[1024];
va_list va;
va_start(va, s);
vsprintf(buf, s, va);
va_end(va);
fprintf(stderr, "ERROR: %s!\n", buf);
exit(1);
}
void warning(const char *s, ...) {
char buf[1024];
va_list va;
va_start(va, s);
vsprintf(buf, s, va);
va_end(va);
fprintf(stderr, "WARNING: %s!\n", buf);
}
void
usage(void)
{
char help[] = {
"Usage: convbdf [options] [input-files]\n"
" convbdf [options] [-o output-file] [single-input-file]\n"
"Options:\n"
" -s N Start output at character encodings >= N\n"
" -l N Limit output to character encodings <= N\n"
" -n Don't generate bitmaps as comments in .c file\n"
};
fprintf(stderr, help);
}
/* parse command line options*/
void getopts(int *pac, char ***pav)
{
const char *p;
char **av;
int ac;
ac = *pac;
av = *pav;
while (ac > 0 && av[0][0] == '-') {
p = &av[0][1];
while( *p)
switch(*p++) {
case ' ': /* multiple -args on av[]*/
while( *p && *p == ' ')
p++;
if( *p++ != '-') /* next option must have dash*/
p = "";
break; /* proceed to next option*/
case 'n': /* don't gen bitmap comments*/
gen_map = 0;
break;
case 'o': /* set output file*/
oflag = 1;
if (*p) {
strcpy(outfile, p);
while (*p && *p != ' ')
p++;
}
else {
av++; ac--;
if (ac > 0)
strcpy(outfile, av[0]);
}
break;
case 'l': /* set encoding limit*/
if (*p) {
limit_char = atoi(p);
while (*p && *p != ' ')
p++;
}
else {
av++; ac--;
if (ac > 0)
limit_char = atoi(av[0]);
}
break;
case 's': /* set encoding start*/
if (*p) {
start_char = atoi(p);
while (*p && *p != ' ')
p++;
}
else {
av++; ac--;
if (ac > 0)
start_char = atoi(av[0]);
}
break;
default:
fprintf(stderr, "Unknown option ignored: %c\r\n", *(p-1));
}
++av; --ac;
}
*pac = ac;
*pav = av;
}
/* remove directory prefix and file suffix from full path*/
char *basename(char *path)
{
char *p, *b;
static char base[256];
/* remove prepended path and extension*/
b = path;
for (p=path; *p; ++p) {
if (*p == '/')
b = p + 1;
}
strcpy(base, b);
for (p=base; *p; ++p) {
if (*p == '.') {
*p = 0;
break;
}
}
return base;
}
int convbdf(char *path)
{
struct font* pf;
int ret = 0;
pf = bdf_read_font(path);
if (!pf)
exit(1);
if (!oflag) {
strcpy(outfile, basename(path));
strcat(outfile, ".cpp");
}
ret |= gen_c_source(pf, outfile);
free_font(pf);
return ret;
}
int main(int ac, char *av[])
{
int ret = 0;
++av; --ac; /* skip av[0]*/
getopts(&ac, &av); /* read command line options*/
if (ac < 1) {
usage();
exit(1);
}
if (oflag && ac > 1) {
usage();
exit(1);
}
while (ac > 0) {
ret |= convbdf(av[0]);
++av; --ac;
}
exit(ret);
}
/* free font structure*/
void free_font(struct font* pf)
{
if (!pf)
return;
free(pf->name);
free(pf->facename);
free(pf->bits);
free(pf->offset);
free(pf->width);
free(pf);
}
/* build incore structure from .bdf file*/
struct font* bdf_read_font(char *path)
{
FILE *fp;
struct font* pf;
fp = fopen(path, "rb");
if (!fp) {
fprintf(stderr, "Error opening file: %s\n", path);
return NULL;
}
pf = (struct font*)calloc(1, sizeof(struct font));
if (!pf)
goto errout;
pf->name = strdup(basename(path));
if (!bdf_read_header(fp, pf)) {
fprintf(stderr, "Error reading font header\n");
goto errout;
}
if (!bdf_read_bitmaps(fp, pf)) {
fprintf(stderr, "Error reading font bitmaps\n");
goto errout;
}
fclose(fp);
return pf;
errout:
fclose(fp);
free_font(pf);
return NULL;
}
/* read bdf font header information, return 0 on error*/
int bdf_read_header(FILE *fp, struct font* pf)
{
int encoding;
int nchars, maxwidth;
int firstchar = 65535;
int lastchar = -1;
char buf[256];
char facename[256];
char copyright[256];
/* set certain values to errors for later error checking*/
pf->defaultchar = -1;
pf->ascent = -1;
pf->descent = -1;
for (;;) {
if (!bdf_getline(fp, buf, sizeof(buf))) {
fprintf(stderr, "Error: EOF on file\n");
return 0;
}
if (isprefix(buf, "FONT ")) { /* not required*/
if (sscanf(buf, "FONT %[^\n]", facename) != 1) {
fprintf(stderr, "Error: bad 'FONT'\n");
return 0;
}
pf->facename = strdup(facename);
continue;
}
if (isprefix(buf, "COPYRIGHT ")) { /* not required*/
if (sscanf(buf, "COPYRIGHT \"%[^\"]", copyright) != 1) {
fprintf(stderr, "Error: bad 'COPYRIGHT'\n");
return 0;
}
pf->copyright = strdup(copyright);
continue;
}
if (isprefix(buf, "DEFAULT_CHAR ")) { /* not required*/
if (sscanf(buf, "DEFAULT_CHAR %d", &pf->defaultchar) != 1) {
fprintf(stderr, "Error: bad 'DEFAULT_CHAR'\n");
return 0;
}
}
if (isprefix(buf, "FONT_DESCENT ")) {
if (sscanf(buf, "FONT_DESCENT %d", &pf->descent) != 1) {
fprintf(stderr, "Error: bad 'FONT_DESCENT'\n");
return 0;
}
continue;
}
if (isprefix(buf, "FONT_ASCENT ")) {
if (sscanf(buf, "FONT_ASCENT %d", &pf->ascent) != 1) {
fprintf(stderr, "Error: bad 'FONT_ASCENT'\n");
return 0;
}
continue;
}
if (isprefix(buf, "FONTBOUNDINGBOX ")) {
if (sscanf(buf, "FONTBOUNDINGBOX %d %d %d %d",
&pf->fbbw, &pf->fbbh, &pf->fbbx, &pf->fbby) != 4) {
fprintf(stderr, "Error: bad 'FONTBOUNDINGBOX'\n");
return 0;
}
continue;
}
if (isprefix(buf, "CHARS ")) {
if (sscanf(buf, "CHARS %d", &nchars) != 1) {
fprintf(stderr, "Error: bad 'CHARS'\n");
return 0;
}
continue;
}
/*
* Reading ENCODING is necessary to get firstchar/lastchar
* which is needed to pre-calculate our offset and widths
* array sizes.
*/
if (isprefix(buf, "ENCODING ")) {
if (sscanf(buf, "ENCODING %d", &encoding) != 1) {
fprintf(stderr, "Error: bad 'ENCODING'\n");
return 0;
}
if (encoding >= 0 &&
encoding <= limit_char &&
encoding >= start_char) {
if (firstchar > encoding)
firstchar = encoding;
if (lastchar < encoding)
lastchar = encoding;
}
continue;
}
if (strequal(buf, "ENDFONT"))
break;
}
/* calc font height*/
if (pf->ascent < 0 || pf->descent < 0 || firstchar < 0) {
fprintf(stderr, "Error: Invalid BDF file, requires FONT_ASCENT/FONT_DESCENT/ENCODING\n");
return 0;
}
pf->height = pf->ascent + pf->descent;
/* calc default char*/
if (pf->defaultchar < 0 ||
pf->defaultchar < firstchar ||
pf->defaultchar > limit_char )
pf->defaultchar = firstchar;
/* calc font size (offset/width entries)*/
pf->firstchar = firstchar;
pf->size = lastchar - firstchar + 1;
/* use the font boundingbox to get initial maxwidth*/
/*maxwidth = pf->fbbw - pf->fbbx;*/
maxwidth = pf->fbbw;
/* initially use font maxwidth * height for bits allocation*/
pf->bits_size = nchars * BITMAP_WORDS(maxwidth) * pf->height;
/* allocate bits, offset, and width arrays*/
pf->bits = (bitmap_t *)malloc(pf->bits_size * sizeof(bitmap_t) + EXTRA);
pf->offset = (unsigned long *)malloc(pf->size * sizeof(unsigned long));
pf->width = (unsigned char *)malloc(pf->size * sizeof(unsigned char));
if (!pf->bits || !pf->offset || !pf->width) {
fprintf(stderr, "Error: no memory for font load\n");
return 0;
}
return 1;
}
/* read bdf font bitmaps, return 0 on error*/
int bdf_read_bitmaps(FILE *fp, struct font* pf)
{
long ofs = 0;
int maxwidth = 0;
int i, k, encoding, width;
int bbw, bbh, bbx, bby;
int proportional = 0;
int encodetable = 0;
long l;
char buf[256];
/* reset file pointer*/
fseek(fp, 0L, SEEK_SET);
/* initially mark offsets as not used*/
for (i=0; i<pf->size; ++i)
pf->offset[i] = -1;
for (;;) {
if (!bdf_getline(fp, buf, sizeof(buf))) {
fprintf(stderr, "Error: EOF on file\n");
return 0;
}
if (isprefix(buf, "STARTCHAR")) {
encoding = width = bbw = bbh = bbx = bby = -1;
continue;
}
if (isprefix(buf, "ENCODING ")) {
if (sscanf(buf, "ENCODING %d", &encoding) != 1) {
fprintf(stderr, "Error: bad 'ENCODING'\n");
return 0;
}
if (encoding < start_char || encoding > limit_char)
encoding = -1;
continue;
}
if (isprefix(buf, "DWIDTH ")) {
if (sscanf(buf, "DWIDTH %d", &width) != 1) {
fprintf(stderr, "Error: bad 'DWIDTH'\n");
return 0;
}
/* use font boundingbox width if DWIDTH <= 0*/
if (width <= 0)
width = pf->fbbw - pf->fbbx;
continue;
}
if (isprefix(buf, "BBX ")) {
if (sscanf(buf, "BBX %d %d %d %d", &bbw, &bbh, &bbx, &bby) != 4) {
fprintf(stderr, "Error: bad 'BBX'\n");
return 0;
}
continue;
}
if (strequal(buf, "BITMAP")) {
bitmap_t *ch_bitmap = pf->bits + ofs;
int ch_words;
if (encoding < 0)
continue;
/* set bits offset in encode map*/
if (pf->offset[encoding-pf->firstchar] != (unsigned long)-1) {
fprintf(stderr, "Error: duplicate encoding for character %d (0x%02x), ignoring duplicate\n",
encoding, encoding);
continue;
}
pf->offset[encoding-pf->firstchar] = ofs;
/* calc char width*/
if (bbx < 0) {
width -= bbx;
/*if (width > maxwidth)
width = maxwidth;*/
bbx = 0;
}
if (width > maxwidth)
maxwidth = width;
pf->width[encoding-pf->firstchar] = width;
/* clear bitmap*/
memset(ch_bitmap, 0, BITMAP_BYTES(width) * pf->height);
ch_words = BITMAP_WORDS(width);
#define BM(row,col) (*(ch_bitmap + ((row)*ch_words) + (col)))
#define BITMAP_NIBBLES (BITMAP_BITSPERIMAGE/4)
/* read bitmaps*/
for (i=0; ; ++i) {
int hexnibbles;
if (!bdf_getline(fp, buf, sizeof(buf))) {
fprintf(stderr, "Error: EOF reading BITMAP data\n");
return 0;
}
if (isprefix(buf, "ENDCHAR"))
break;
hexnibbles = strlen(buf);
for (k=0; k<ch_words; ++k) {
int ndx = k * BITMAP_NIBBLES;
int padnibbles = hexnibbles - ndx;
bitmap_t value;
if (padnibbles <= 0)
break;
if (padnibbles >= BITMAP_NIBBLES)
padnibbles = 0;
value = bdf_hexval((unsigned char *)buf,
ndx, ndx+BITMAP_NIBBLES-1-padnibbles);
value <<= padnibbles * BITMAP_NIBBLES;
BM(pf->height - pf->descent - bby - bbh + i, k) |=
value >> bbx;
/* handle overflow into next image word*/
if (bbx) {
BM(pf->height - pf->descent - bby - bbh + i, k+1) =
value << (BITMAP_BITSPERIMAGE - bbx);
}
}
}
ofs += BITMAP_WORDS(width) * pf->height;
continue;
}
if (strequal(buf, "ENDFONT"))
break;
}
/* set max width*/
pf->maxwidth = maxwidth;
/* change unused offset/width values to default char values*/
for (i=0; i<pf->size; ++i) {
int defchar = pf->defaultchar - pf->firstchar;
if (pf->offset[i] == (unsigned long)-1) {
pf->offset[i] = pf->offset[defchar];
pf->width[i] = pf->width[defchar];
}
}
/* determine whether font doesn't require encode table*/
l = 0;
for (i=0; i<pf->size; ++i) {
if (pf->offset[i] != l) {
encodetable = 1;
break;
}
l += BITMAP_WORDS(pf->width[i]) * pf->height;
}
if (!encodetable) {
free(pf->offset);
pf->offset = NULL;
}
/* determine whether font is fixed-width*/
for (i=0; i<pf->size; ++i) {
if (pf->width[i] != maxwidth) {
proportional = 1;
break;
}
}
if (!proportional) {
free(pf->width);
pf->width = NULL;
}
/* reallocate bits array to actual bits used*/
if (ofs < pf->bits_size) {
pf->bits = realloc(pf->bits, ofs * sizeof(bitmap_t));
pf->bits_size = ofs;
}
else {
if (ofs > pf->bits_size) {
fprintf(stderr, "Warning: DWIDTH spec > max FONTBOUNDINGBOX\n");
if (ofs > pf->bits_size+EXTRA) {
fprintf(stderr, "Error: Not enough bits initially allocated\n");
return 0;
}
pf->bits_size = ofs;
}
}
return 1;
}
/* read the next non-comment line, returns buf or NULL if EOF*/
char *bdf_getline(FILE *fp, char *buf, int len)
{
int c;
char *b;
for (;;) {
b = buf;
while ((c = getc(fp)) != EOF) {
if (c == '\r')
continue;
if (c == '\n')
break;
if (b - buf >= (len - 1))
break;
*b++ = c;
}
*b = '\0';
if (c == EOF && b == buf)
return NULL;
if (b != buf && !isprefix(buf, "COMMENT"))
break;
}
return buf;
}
/* return hex value of portion of buffer*/
bitmap_t bdf_hexval(unsigned char *buf, int ndx1, int ndx2)
{
bitmap_t val = 0;
int i, c;
for (i=ndx1; i<=ndx2; ++i) {
c = buf[i];
if (c >= '0' && c <= '9')
c -= '0';
else
if (c >= 'A' && c <= 'F')
c = c - 'A' + 10;
else
if (c >= 'a' && c <= 'f')
c = c - 'a' + 10;
else
c = 0;
val = (val << 4) | c;
}
return val;
}
/* generate C source from in-core font*/
int gen_c_source(struct font* pf, char *path)
{
FILE *ofp;
int i;
int did_defaultchar = 0;
int did_syncmsg = 0;
time_t t = time(0);
bitmap_t *ofs = pf->bits;
char buf[256];
char obuf[256];
char hdr1[] = {
"/* Generated by convbdf on %s. */\n"
"#include \"common/stdafx.h\"\n"
"#include \"graphics/font.h\"\n"
"\n"
"/* Font information:\n"
" name: %s\n"
" facename: %s\n"
" w x h: %dx%d\n"
" size: %d\n"
" ascent: %d\n"
" descent: %d\n"
" first char: %d (0x%02x)\n"
" last char: %d (0x%02x)\n"
" default char: %d (0x%02x)\n"
" proportional: %s\n"
" %s\n"
"*/\n"
"\n"
"namespace Graphics {\n"
"\n"
"/* Font character bitmap data. */\n"
"static const bitmap_t _font_bits[] = {\n"
};
ofp = fopen(path, "w");
if (!ofp) {
fprintf(stderr, "Can't create %s\n", path);
return 1;
}
strcpy(buf, ctime(&t));
buf[strlen(buf)-1] = 0;
fprintf(ofp, hdr1, buf,
pf->name,
pf->facename? pf->facename: "",
pf->maxwidth, pf->height,
pf->size,
pf->ascent, pf->descent,
pf->firstchar, pf->firstchar,
pf->firstchar+pf->size-1, pf->firstchar+pf->size-1,
pf->defaultchar, pf->defaultchar,
pf->width? "yes": "no",
pf->copyright? pf->copyright: "");
/* generate bitmaps*/
for (i=0; i<pf->size; ++i) {
int x;
int bitcount = 0;
int width = pf->width ? pf->width[i] : pf->maxwidth;
int height = pf->height;
bitmap_t *bits = pf->bits + (pf->offset? pf->offset[i]: (height * i));
bitmap_t bitvalue = 0;
/*
* Generate bitmap bits only if not this index isn't
* the default character in encode map, or the default
* character hasn't been generated yet.
*/
if (pf->offset &&
(pf->offset[i] == pf->offset[pf->defaultchar-pf->firstchar])) {
if (did_defaultchar)
continue;
did_defaultchar = 1;
}
fprintf(ofp, "\n/* Character %d (0x%02x):\n width %d",
i+pf->firstchar, i+pf->firstchar, width);
if (gen_map) {
fprintf(ofp, "\n +");
for (x=0; x<width; ++x) fprintf(ofp, "-");
fprintf(ofp, "+\n");
x = 0;
while (height > 0) {
if (x == 0) fprintf(ofp, " |");
if (bitcount <= 0) {
bitcount = BITMAP_BITSPERIMAGE;
bitvalue = *bits++;
}
fprintf(ofp, BITMAP_TESTBIT(bitvalue)? "*": " ");
bitvalue = BITMAP_SHIFTBIT(bitvalue);
--bitcount;
if (++x == width) {
fprintf(ofp, "|\n");
--height;
x = 0;
bitcount = 0;
}
}
fprintf(ofp, " +");
for (x=0; x<width; ++x)
fprintf(ofp, "-");
fprintf(ofp, "+\n*/\n");
} else
fprintf(ofp, "\n*/\n");
bits = pf->bits + (pf->offset? pf->offset[i]: (pf->height * i));
for (x=BITMAP_WORDS(width)*pf->height; x>0; --x) {
fprintf(ofp, "0x%04x,\n", *bits);
if (!did_syncmsg && *bits++ != *ofs++) {
fprintf(stderr, "Warning: found encoding values in non-sorted order (not an error).\n");
did_syncmsg = 1;
}
}
}
fprintf(ofp, "};\n\n");
if (pf->offset) {
/* output offset table*/
fprintf(ofp, "/* Character->glyph mapping. */\n"
"static const unsigned long _sysfont_offset[] = {\n");
for (i=0; i<pf->size; ++i)
fprintf(ofp, " %ld,\t/* (0x%02x) */\n",
pf->offset[i], i+pf->firstchar);
fprintf(ofp, "};\n\n");
}
/* output width table for proportional fonts*/
if (pf->width) {
fprintf(ofp, "/* Character width data. */\n"
"static const unsigned char _sysfont_width[] = {\n");
for (i=0; i<pf->size; ++i)
fprintf(ofp, " %d,\t/* (0x%02x) */\n",
pf->width[i], i+pf->firstchar);
fprintf(ofp, "};\n\n");
}
/* output struct font struct*/
if (pf->offset)
sprintf(obuf, "_sysfont_offset,");
else
sprintf(obuf, "0, /* no encode table*/");
if (pf->width)
sprintf(buf, "_sysfont_width,");
else
sprintf(buf, "0, /* fixed width*/");
fprintf(ofp,
"/* Exported structure definition. */\n"
"static const FontDesc desc = {\n"
"\t" "\"%s\",\n"
"\t" "%d,\n"
"\t" "%d,\n"
"\t" "%d,\n"
"\t" "%d,\n"
"\t" "%d,\n"
"\t" "_font_bits,\n"
"\t" "%s\n"
"\t" "%s\n"
"\t" "%d,\n"
"\t" "sizeof(_font_bits)/sizeof(bitmap_t)\n"
"};\n",
pf->name,
pf->maxwidth, pf->height,
pf->ascent,
pf->firstchar,
pf->size,
obuf,
buf,
pf->defaultchar);
fprintf(ofp, "\n" "extern const NewFont g_sysfont(desc);\n");
fprintf(ofp, "\n} // End of namespace Graphics\n");
return 0;
}
--- NEW FILE: md5table.c ---
/* md5table - Convert a MD5 table to either PHP or C++ code
* Copyright (C) 2002, 2003 The ScummVM Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Header: /cvsroot/scummvm/scummvm/tools/md5table.c,v 1.1 2004/12/24 01:43:33 fingolfin Exp $
*
*/
#include <assert.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void error(const char *s, ...) {
char buf[1024];
va_list va;
va_start(va, s);
vsprintf(buf, s, va);
va_end(va);
fprintf(stderr, "ERROR: %s!\n", buf);
exit(1);
}
void warning(const char *s, ...) {
char buf[1024];
va_list va;
va_start(va, s);
vsprintf(buf, s, va);
va_end(va);
fprintf(stderr, "WARNING: %s!\n", buf);
}
typedef struct {
const char *key;
const char *value;
} StringMap;
typedef struct {
const char *desc;
const char *platform;
const char *language;
const char *md5;
const char *target;
const char *infoSource;
} Entry;
/* Map MD5 table platform names to ScummVM constant names.
* Note: Currently not many constants are defined within ScummVM. However, more
* will probably be added eventually (see also commented out constants in
* common/util.h).
*/
static const StringMap platformMap[] = {
{ "3DO", "kPlatformUnknown" },
{ "Amiga", "kPlatformAmiga" },
{ "Atari", "kPlatformAtariST" },
{ "DOS", "kPlatformPC" },
{ "FM-TOWNS", "kPlatformFMTowns" },
{ "Mac", "kPlatformMacintosh" },
{ "SEGA", "kPlatformUnknown" },
{ "Windows", "kPlatformWindows" },
{ "All?", "kPlatformUnknown" },
{ "All", "kPlatformUnknown" },
{ 0, "kPlatformUnknown" }
};
static const StringMap langMap[] = {
{ "en", "EN_USA" },
{ "de", "DE_DEU" },
{ "fr", "FR_FRA" },
{ "it", "IT_ITA" },
{ "pt", "PT_BRA" },
{ "es", "ES_ESP" },
{ "jp", "JA_JPN" },
{ "zh", "ZH_TWN" },
{ "ko", "KO_KOR" },
{ "se", "SE_SWE" },
{ "en", "EN_GRB" },
{ "hb", "HB_ISR" },
{ "ru", "RU_RUS" },
{ "cz", "CZ_CZE" },
{ "nl", "NL_NLD" },
{ "All", "UNK_LANG" },
{ "All?", "UNK_LANG" },
{ 0, "UNK_LANG" }
};
static const char *php_header =
"<!--\n"
" This file was generated by the md5table tool on %s"
" DO NOT EDIT MANUALLY!\n"
" -->\n"
"\n";
static const char *c_header =
"/*\n"
" This file was generated by the md5table tool on %s"
" DO NOT EDIT MANUALLY!\n"
" */\n"
"\n"
"struct MD5Table {\n"
" const char *md5;\n"
" const char *target;\n"
" Common::Language language;\n"
" Common::Platform platform;\n"
"};\n"
"\n"
"static const MD5Table md5table[] = {\n";
static const char *c_footer =
" { 0, 0, Common::UNK_LANG, Common::kPlatformUnknown }\n"
"};\n";
static void parseEntry(Entry *entry, char *line) {
assert(entry);
assert(line);
/* Split at the tabs */
entry->desc = strtok(line, "\t\n\r");
entry->platform = strtok(NULL, "\t\n\r");
entry->language = strtok(NULL, "\t\n\r");
entry->md5 = strtok(NULL, "\t\n\r");
entry->target = strtok(NULL, "\t\n\r");
entry->infoSource = strtok(NULL, "\t\n\r");
}
static int isEmptyLine(const char *line) {
const char *whitespace = " \t\n\r";
while (*line) {
if (!strchr(whitespace, *line))
return 0;
line++;
}
return 1;
}
static const char *mapStr(const char *str, const StringMap *map) {
assert(str);
assert(map);
while (map->key) {
if (0 == strcmp(map->key, str))
return map->value;
map++;
}
warning("mapStr: unknown string '%s', defaulting to '%s'", str, map->value);
return map->value;
}
void showhelp(const char *exename)
{
printf("\nUsage: %s <params>\n", exename);
printf("\nParams:\n");
printf(" --c++ output C++ code for inclusion in ScummVM (default)\n");
printf(" --php output PHP code for the web site\n");
exit(2);
}
/* needed to call from qsort */
int strcmp_wrapper(const void *s1, const void *s2)
{
return strcmp((const char *)s1, (const char *)s2);
}
int main(int argc, char *argv[])
{
FILE *inFile = stdin;
FILE *outFile = stdout;
char buffer[1024];
char section[1024];
char *line;
int err;
int i;
time_t theTime;
const char *generationDate;
const int entrySize = 256;
int numEntries = 0, maxEntries = 1;
char *entriesBuffer = malloc(maxEntries * entrySize);
int phpOutput = 0;
if (argc != 2)
showhelp(argv[0]);
if (strcmp(argv[1], "--c++") == 0) {
phpOutput = 0;
} else if (strcmp(argv[1], "--php") == 0) {
phpOutput = 1;
} else {
showhelp(argv[0]);
}
time(&theTime);
generationDate = strdup(asctime(gmtime(&theTime)));
if (phpOutput)
fprintf(outFile, php_header, generationDate);
while ((line = fgets(buffer, sizeof(buffer), inFile))) {
/* Parse line */
if (line[0] == '#' || isEmptyLine(line))
continue; /* Skip comments & empty lines */
if (line[0] == '\t') {
Entry entry;
assert(section[0]);
parseEntry(&entry, line+1);
if (phpOutput) {
fprintf(outFile, "\t\t<?php addEntry(");
fprintf(outFile, "\"%s\", ", entry.desc);
fprintf(outFile, "\"%s\", ", entry.platform);
fprintf(outFile, "\"%s\", ", entry.language);
fprintf(outFile, "\"%s\", ", entry.md5);
fprintf(outFile, "\"%s\"", entry.target);
if (entry.infoSource)
fprintf(outFile, ", \"%s\"", entry.infoSource);
fprintf(outFile, "); ?>\n");
} else if (entry.md5) {
if (numEntries >= maxEntries) {
maxEntries *= 2;
entriesBuffer = realloc(entriesBuffer, maxEntries * entrySize);
}
snprintf(entriesBuffer + numEntries * entrySize, entrySize, "\t{ \"%s\", \"%s\", Common::%s, Common::%s },\n",
entry.md5, entry.target, mapStr(entry.language, langMap), mapStr(entry.platform, platformMap));
numEntries++;
}
} else {
for (i = 0; buffer[i] && buffer[i] != '\n'; ++i)
section[i] = buffer[i];
section[i] = 0;
if (phpOutput) {
fprintf(outFile, "\t<tr><td colspan='7'><strong>%s</strong></td></tr>\n", section);
}
}
}
err = ferror(inFile);
if (err)
error("Failed reading from input file, error %d", err);
if (!phpOutput) {
/* Printf header */
fprintf(outFile, c_header, generationDate);
/* Now sort the MD5 table (this allows for binary searches) */
qsort(entriesBuffer, numEntries, entrySize, strcmp_wrapper);
/* Output the table */
for (i = 0; i < numEntries; ++i)
fprintf(outFile, entriesBuffer + i * entrySize);
/* Finally, print the footer */
fprintf(outFile, c_footer);
}
free(entriesBuffer);
return 0;
}
--- NEW FILE: scumm-md5.txt ---
Maniac Mansion
V1 DOS en 7f45ddd6dbfbf8f80c0c0efea4c295bc maniac
V2 DOS en 624cdb93654667c869d204a64af7e57f maniac Kirben, Andrea Petrucci
V2 (alt?) DOS en b250d0f9cc83f80ced56fe11a4fb057c maniac Andrea Petrucci
V2 DOS de 183d7464902d40d00800e8ee1f04117c maniac
V2 DOS es 0d1b69471605201ef2fa9cec1f5f02d2 maniac abnog, Andrea Petrucci
V2 (DOTT) DOS it 87f6e8037b7cc996e13474b491a7a98e maniac Andrea Petrucci
V2 DOS fr 114acdc2659a273c220f86ee9edb24c1 maniac Nicolas Sauzède
V2 (DOTT) DOS fr 99a3699f80b8f776efae592b44b9b991 maniac Nicolas Sauzède, Andrea Petrucci
V2 (demo) DOS en 40564ec47da48a67787d1f9bd043902a maniac
V2 Amiga en e781230da44a44e2f0770edb2b3b3633 maniac dhewg, Andrea Petrucci
V2 Amiga de 9bc548e179cdb0767009401c094d0895 maniac Norbert Lange
V2 Amiga fr ce7733f185b838e248927c7ba1a04204 maniac Tobias Fleischer
V2 Atari en a570381b028972d891052ee1e51dc011 maniac Andreas Bylund
V2 Atari fr dd30a53035393baa5a5e222e716559af maniac Andreas Bylund
Zak McKracken and the Alien Mindbenders
V1 DOS en 7020931d5a2be0a49d68e7a1882363e4 zak
V1 (alt?) DOS en b23f7cd7c304d7dff08e92a96120d5b4 zak Andrea Petrucci
V2 Demo Atari en 8299d9b8a1b0e7b881bae7a9971dc5e2 zak
V2 DOS en 675d71151e9b5a968c8ce46d9fbf4cbf zak Kirben
V2 (alt?) DOS en debe337f73d660e951ece7c1f1c81add zak Andrea Petrucci
V2 (w/o copy protection) DOS de cdd760228cf1010c2903f37e788ea31c zak Max Horn
V2 (from 5\"25 floppies) DOS de d06fbe28818fef7bfc45c2cdf0c0849d zak Nicolas Sauzède, Andrea Petrucci
V2 DOS fr 52a4bae0746a11d7b1e8554e91a6645c zak Andrea Petrucci
V2 DOS it 75ba23fff4fd63fa446c02864f2a5a4b zak Antti Leimi, Andrea Petrucci
V2 (alt?) DOS it 1900e501a52fbf55bde6e4196f6d2aa6 zak Andrea Petrucci
V2 Amiga en e94c7cc3686fce406d3c91b5eae5a72d zak dhweg
V2 Amiga de 6027e9ca9c35746d95dee2068cec17e5 zak Norbert Lange
V2 Amiga fr 91469353f7be1b122fa88d23480a1320 zak Tobias Fleischer
V2 Amiga it 27b3a4224ad63d5b04627595c1c1a025 zak Andrea Petrucci
V2 Atari fr 613f64f78ea26c7353b2a5940eb61d6a zak Andreas Bylund
FM-TOWNS FM-TOWNS en 2d4536a56e01da4b02eb021e7770afa2 zakTowns
FM-TOWNS FM-TOWNS jp ce3edc99cd4f478c5b37104d70c68ca5 zakTowns khalek
FM-TOWNS (alt?) FM-TOWNS jp 1ca86e2cf9aaa2068738a1e5ba477e60 zakTowns Andrea Petrucci
Indiana Jones and the Last Crusade
EGA (1.0 7/09/89) DOS en 5fbe557049892eb4b709d90916ec97ca indy3EGA
EGA (1.3 8/14/89) DOS en 6b3ec67da214f558dc5ceaa2acd47453 indy3EGA tsuteiuQ, Andrea Petrucci
EGA DOS de 6f6ef668c608c7f534fea6e6d3878dde indy3EGA dhewg
EGA DOS fr 66236cd1aec24e1d4aff4c4cc93b7e18 indy3EGA Andrea Petrucci
EGA DOS it d62d248c3df6ec177405e2cb23d923b2 indy3EGA Andrea Petrucci
EGA DOS es ce7fd0c382389a6791fc3e199c117ef4 indy3EGA abnog
EGA (alt?) DOS es 86be8ada36371d4fdc35659d0e912a26 indy3EGA Andrea Petrucci
EGA Mac en 1dd7aa088e09f96d06818aa9a9deabe0 indy3EGA
EGA Amiga en 9c0fee288ad564a7d25ec3e841810d79 indy3EGA dhewg
EGA Amiga de 330f631502e381a4e199a3f7cb483c20 indy3EGA dhewg
EGA Amiga fr e689bdf67f98b1d760ce4487ec0e8d06 indy3EGA Gerald Vincent
EGA Amiga it df03ee021aa9b81d90cab9c26da07614 indy3EGA Andrea Petrucci
EGA Atari en 157367c3c21e0d03a0cba44361b4cf65 indy3EGA Andreas Bylund
EGA Atari fr 0f9c7a76657f0840b8f7ccb5bffeb9f4 indy3EGA Andreas Bylund
EGA Demo DOS en b597e0403cc0002f69170e6caba7edd9 indy3EGA
VGA DOS All 1875b90fade138c9253a8e967007031a indy3
VGA DOS de 399b217b0c8d65d0398076da486363a9 indy3
VGA DOS it 17b5d5e6af4ae89d62631641d66d5a05 indy3 Andrea Petrucci
FM-TOWNS FM-TOWNS en 04687cdf7f975a89d2474929f7b80946 indy3towns
FM-TOWNS FM-TOWNS jp 3a0c35f3c147b98a2bdf8d400cfc4ab5 indy3towns Paul Priest, Andrea Petrucci
Loom
Demo DOS en 5a35e36fd777e9c37a49c5b2faca52f9 loom
Floppy Mac en 6f0be328c64d689bb606d22a389e1b0f loom
Floppy v1.0 DOS en 28ef68ee3ed76d7e2ee8ee13c15fbd5b loom
Floppy v1.0 alternative DOS en 73e5ab7dbb9a8061cc6d25df02dbd1e7 loom Andrea Petrucci
Floppy (v1.1 16 Mar 90) DOS en 37f56ceb13e401a7ac7d9e6b37fecaf7 loom Kirben, Andrea Petrucci
Floppy (v1.1 29 Mar 90) DOS en 22f4ea88a09da12df9308ba30bcb7d0f loom James Grosbeck
Floppy DOS de fa127d7c4bb47d05bb1c33ddcaa9f767 loom
Floppy DOS fr b886b0a5d909c7158a914e1d7c1c6c65 loom Andrea Petrucci
Floppy DOS it c3df37df9d3b481b45f75283a9907c47 loom Andrea Petrucci
Floppy DOS es 2a208ffbcd0e83e86f4356e6f64aa6e1 loom abnog, Andrea Petrucci
Floppy DOS hb 187d315f6b5168f68680dfe8c3d76a3e loom
Floppy Amiga en 4dc780f1bc587a193ce8a97652791438 loom Antti Leimi, Andrea Petrucci
Floppy Amiga de 2fe369ad70f52a8cf7ad6077ee64f81a loom Norbert Lange
Floppy (same as IT?!?) Amiga fr 39cb9dec16fa16f38d79acd80effb059 loom Gerald Vincent
Floppy (same as FR?!?) Amiga it 39cb9dec16fa16f38d79acd80effb059 loom Andrea Petrucci
Floppy Atari de c24c490373aeb48fbd54caa8e7ae376d loom Andreas Bylund
Talkie/CD DOS en 5d88b9d6a88e6f8e90cded9d01b7f082 loomcd
FM-TOWNS FM-TOWNS en c5d10e190d4b4d59114b824f2fdbd00e loomTowns dhewg, Andrea Petrucci
FM-TOWNS FM-TOWNS jp 31b8fda4c8c7413fa6b39997e776eba4 loomTowns khalek, Andrea Petrucci
The Secret of Monkey Island
EGA (4 disk) DOS en 1d05cd189e4908f79b57e78a4402f292 monkeyega Andrea Petrucci
EGA (8 disk) DOS en 49210e124e4c2b30f1290a9ef6306301 monkeyega
EGA (8 disk) DOS de fc6b6148e80d67939d9a18697c0f626a monkeyega ghoostkilla
EGA (8 disk) DOS fr 1dd3c11ea4439adfe681e4e405b624e1 monkeyega Andrea Petrucci
EGA (4 disk) DOS it 477dbafbd66a53c98416dc01aef019ad monkeyega Andrea Petrucci
EGA (8 disk) DOS es 910e31cffb28226bd68c569668a0d6b4 monkeyega Andrea Petrucci
EGA Atari fr 9e5e0fb43bd22f4628719b7501adb717 monkeyega Andreas Bylund
EGA Demo DOS en 71523b539491527d9860f4407faf0411 monkeyega
EGA Demo DOS de 771bc18ec6f93837b839c992b211904b monkeyega khalek
VGA (4 disk) DOS en 15e03ffbfeddb9c2aebc13dcb2a4a8f4 monkeyvga
VGA (8 disk) DOS en c7890e038806df2bb5c0c8c6f1986ea2 monkeyvga Andrea Petrucci
VGA (4 disk) DOS de d0b531227a27c6662018d2bd05aac52a monkeyvga
VGA (4 disk) DOS es 45152f7cf2ba8f43cf8a8ea2e740ae09 monkeyvga
VGA (4 disk) DOS it 66fd5ff9a810dfeb6d6bdada18221140 monkeyvga Andrea Petrucci
VGA Amiga en 6c2bff0e327f2962e809c2e1a82d7309 monkeyvga dhweg
VGA Amiga de 319a4dde52c7960b5aae8a1ec348d918 monkeyvga ghoostkilla
VGA (alt?) Amiga de 0a212fa35fa8421f31c1f3961272caf0 monkeyvga Andreas Bylund
VGA Amiga es 870d1e3c86bc50846d808d14a36b4e08 monkeyvga Andreas Bylund
VGA Amiga fr 3433be9866ca4261b2d5d25374e3f243 monkeyvga Gerald Vincent
VGA Amiga it fb66aa42de21675116346213f176a366 monkeyvga Andrea Petrucci
VGA Demo Amiga en 54a936ad06161ff7bfefcb96200f7bff monkeyvga khalek
CD DOS en 2d1e891fe52df707c30185e52c50cd92 monkey
CD DOS de 305d3dd57c96c65b017bc70c8c7cfb5e monkey
CD DOS es f049e38c1f8302b5db6170f1872af89a monkey Andrej Sinicyn, Andrea Petrucci
CD DOS it da6269b18fcb08189c0aa9c95533cce2 monkey Andrej Sinicyn, Andrea Petrucci
CD DOS fr aa8a0cb65f3afbbe2c14c3f9f92775a3 monkey Andrej Sinicyn, Andrea Petrucci
- DOS fr aa8a0cb65f3afbbe2c14c3f9f92775a3 monkey1 Nicolas Sauzède
- Mac en 2ccd8891ce4d3f1a334d21bff6a88ca2 monkey1 Lars Næsbye Christensen
- SEGA en c13225cb1bbd3bc9fe578301696d8021 game
FM-TOWNS FM-TOWNS en 8eb84cee9b429314c7f0bdcf560723eb monkey Paul Priest, Andrea Petrucci
FM-TOWNS FM-TOWNS jp e17db1ddf91b39ca6bbc8ad3ed19e883 monkey Paul Priest, Andrea Petrucci
Misc demos
Passport to Adventure DOS en e6cd81b25ab1453a8a6d3482118c391e pass
indy/loom non-interactive FM-TOWNS en 2d388339d6050d8ccaa757b64633954e zakTowns khalek
zak/loom non-interactive FM-TOWNS en 77f5c9cc0986eb729c1a6b4c8823bbae zakTowns khalek
indy/zak non-interactive FM-TOWNS en 3938ee1aa4433fca9d9308c9891172b1 zakTowns khalek
Monkey Island 2: LeChuck's revenge
- Amiga en 132bff65e6367c09cc69318ce1b59333 monkey2
- Amiga de da669b20271b85182e9c17a2a37ea02e monkey2 Andreas Bylund, Norbert Lange
- Amiga es 6ea966b4d660c870b9ee790d1fbfc535 monkey2 Andreas Bylund
- Amiga fr c30ef068add4277104243c31ce46c12b monkey2 Andreas Bylund
- Amiga it 11ddf1fde76e3156eb3a38da213f484e monkey2 Andrea Petrucci
- Mac en 4cb9c3618f71668f8e4346c8f323fa82 monkey2
- (alt?) Mac en e246e02db9630533a40d99c9f54a8e01 monkey2 Lars Næsbye Christensen
- DOS en 3686cf8f89e102ececf4366e1d2c8126 monkey2
- DOS de 6886e5d08cee329b1f2e743ae2e3ceed monkey2
- DOS fr 8e4ee4db46954bfe2912e259a16fad82 monkey2 Nicolas Sauzède, Andrea Petrucci
CD DOS it 69ea626f1f87eecb78ea0d6c6b983a1d monkey2 Andrea Petrucci
Floppy DOS it bd126753de619a495f9f22adc951c8d5 monkey2 Andrea Petrucci
- DOS es 7974365d3dc0f43a2748c975f91ff042 monkey2 Andrea Petrucci
FM-TOWNS FM-TOWNS en da09e666fc8f5b78d7b0ac65d1a3b56e monkey2 dhewg, Andrea Petrucci
FM-TOWNS FM-TOWNS jp 430bc518017b6fac046f58bab6baad5d monkey2 Antti Leimi, Andrea Petrucci
Demo (non-interactive) DOS en 387a544b8b10b26912d8413bab63a853 mi2demo khalek
Indiana Jones and the Fate of Atlantis
Talkie DOS en 182344899c2e2998fca0bebcd82aa81a atlantis
Talkie Mac en 1a6e5ae2777a6a33f06ffc0226210934 atlantis Scott Summers
Non-Talkie DOS en c63ee46143ba65f9ce14cf539ca51bd7 atlantis Andrea Petrucci
Non-Talkie DOS de 1fbebd7b2b692df5297870447a80cfed atlantis
Non-Talkie DOS fr edfdb24a499d92c59f824c52987c0eec atlantis Nicolas Sauzède, Andrea Petrucci
Non-Talkie DOS es 9bd2a8f72613e715c199246dd511e10f atlantis abnog, Andrea Petrucci
Non-Talkie DOS it 8f3758ff98c9c5d78e5d635222cad026 atlantis Andrea Petrucci
Non-Talkie Amiga en 3a03dab514e4038df192d8a8de469788 atlantis dhewg
Non-Talkie Amiga de 4f267a901719623de7dde83e47d5b474 atlantis ghoostkilla
Non-Talkie Amiga de e534d29afb3c6e0ee9dc3d53c5956714 atlantis Tobias Fleischer
Non-Talkie Amiga it 5798972220cd458be2626d54c80f71d7 atlantis Andrea Petrucci
Non-Talkie Mac en d6dd0646404768a63e963891a96daadd atlantis Fingolfin
Non-Talkie Mac en 06b187468113f9ae5a400b148a847fac atlantis Lars N¾sbye Christensen
FM-TOWNS FM-TOWNS en c7be10f775404fd9785a8b92a06d240c indy4 dhewg, Andrea Petrucci
FM-TOWNS FM-TOWNS jp 4d34042713958b971cb139fba4658586 indy4 Andrea Petrucci
FM-TOWNS Demo FM-TOWNS jp 28d24a33448fab6795850bc9f159a4a2 indydemo khalek
Demo DOS en 035deab53b47bc43abc763560d0f8d4b playfate
Demo (non-interactive) DOS en 99b6f822b0b2612415407865438697d6 fate
Day Of The Tentacle
Floppy Version A ? All? en acad97ab1c6fc2a5b2d98abf6db4a190 tentacle
Floppy Version B ? DOS en 2723fea3dae0cb47768c424b145ae0e7 tentacle Andrej Sinicyn, Andrea Petrucci
Floppy DOS de 57b0d89af79befe1cabce3bece869e7f tentacle Andrej Sinicyn, Andrea Petrucci
Floppy DOS fr 92b078d9d6d9d751da9c26b8b3075779 tentacle Nicolas Sauzède, Andrea Petrucci
Floppy DOS it 50fcdc982a25063b78ad46bf389b8e8d tentacle Andrea Petrucci
Floppy DOS es ae94f110a14ce71fc515d5b648827a8f tentacle abnog, Andrea Petrucci
Talkie All? en 4167a92a1d46baa4f4127d918d561f88 tentacle
Talkie All? de 6e959d65358eedf9b68b81e304b97fa4 tentacle
Talkie ? All? fr 8aa05d3cdb0e795436043f0546af2da2 tentacle Andrea Petrucci
Talkie All? it 4fbbe9f64b8bc547503a379a301183ce tentacle Andrea Petrucci
Talkie All? es 883af4b0af4f77a92f1dcf1d0a283140 tentacle Andrea Petrucci
Demo DOS en c83079157ec765a28de445aec9768d60 dottdemo
Sam & Max
Non-Talkie DOS en a3036878840720fbefa41e6965fa4a0a samnmax Andrea Petrucci
Non-Talkie (alt?) DOS en 3b301b7892f883ce42ab4be6a274fea6 samnmax Andrea Petrucci
Non-Talkie DOS de f27b1ba0eadaf2a6617b2b58192d1dbf samnmax dhewg, Andrea Petrucci
Non-Talkie DOS fr ef347474f3c7be3b29584eaa133cca05 samnmax Nicolas Sauzède, Andrea Petrucci
Non-Talkie DOS it b289a2a8cbedbf45786e0b4ad2f510f1 samnmax Andrea Petrucci
Non-Talkie DOS es fc53ce0e5f6562b1c1e1b4b8203acafb samnmax Andrea Petrucci
Talkie All? en d917f311a448e3cc7239c31bddb00dd2 samnmax
Talkie All? de 0fb73eddfcf584c02ba097984df131ba samnmax
Talkie All? fr 7edd665bbede7ea8b7233f8e650be6f8 samnmax Andrea Petrucci
Talkie All? it 0f6f2e716ba896a44e5059bba1de7ca9 samnmax Andrea Petrucci
Talkie All? es 4ba7fb331296c283e73d8f5b2096e551 samnmax Andrea Petrucci
Demo DOS en d9d0dd93d16ab4dec55cabc2b86bbd17 samdemo
Demo Mac en 0425954a9db5c340861672892c3e678d samdemo
interactive Demo DOS en c3196c5349e53e387aaff1533d95e53a snmdemo
Interactive WIP Demo DOS en 0e4c5d54a0ad4b26132e78b5ea76642a snmidemo
Full Throttle
Version A All? en 09820417db26687bb7fe0c83cc4c553b ft
Version B All? en 60ba818dc3bede86d40357e3913f8505 ft sev
- All? de 8bdb0bf87b5e303dd35693afb9351215 ft dhewg
- All? es e72bb4c2b613db2cf50f89ff6350e70a ft
- All? ru 55e4cc866ff9046824e1c638ba2b8c7f ft sev
- All? it 55518cd73cf9c6d23ea29c51ee06bdfe ft delfino
- All? fr 4bedb49943df95a9c900a5a82ccbe9de ft cyx
Demo DOS en 32a433dea56b86a55b59e4ff7d755711 ftpcdemo
Demo Mac en 9d7b67be003fea60be4dcbd193611936 ftdemo
The Dig
- All All d8323015ecb8b10bf53474f6e6b0ae33 dig
- All ru d62047a6729349ab36f7ee065bf26509 dig sev
Demo All en 362c1d281fb9899254cda66ad246c66a digdemo
Curse of Monkey Island
- All All fe60d6b5ff51b0553ac59963123b5777 comi
Demo All All 8fec68383202d38c0d25e9e3b757c5df comidemo
Backyard Baseball 2001
Demo Windows en a194f15f51ee62badab74b9e7da97693 bb2demo khalek, sev
Backyard Football 2002
Demo Windows en 5bd335265a61caa3d78956ad9f88ba23 FOOTDEMO sev
Big Thinkers: Kindergarten
- Windows en 92fc0073a4cf259ff36070ecb8628ba8 thinkerk Kirben
Demo All en 695fe0b3963333b7e15b37514db3c745 kinddemo khalek, sev
Big Thinkers First Grade
Demo Windows en 0f5935bd5e88ba6f09e558d64459746d 1grademo khalek
Blue's ABC Time
Demo Windows en 7ddeaf52c8b9a50551ce0aa2ac811d07 BluesABCTimeDemo khalek, sev
Demo Windows en 810a9da887aefa597b0cf3c77d262897 BluesABCTimeDemo sev
Fatty Bears Birthday Surprise
Demo DOS en 47e75b1bdcb44c78cb94883d1731ccf8 fbdemo khalek
Demo Windows en 22c9eb04455440131ffc157aeb8d40a8 fbdemo khalek
Demo Mac en 6df20c50c1ab19799de9be7ae7716881 TODO khalek
- DOS en 3824e60cdf639d22f6df92a03dc4b131 fbear khalek
- Windows en 179879b6e35c1ead0d93aab26db0951b fbear khalek
- Mac en 3df6ead57930488bc61e6e41901d0e97 Fatty Bear khalek
Fatty Bears Fun Pack
- DOS hb f06e66fd45b2f8b0f4a2833ff4476050 fbpack
Freddi Fish 1: The Case of the Missing Kelp Seeds
- All en df047cc4792150f601290357566d36a6 freddi khalek
- Windows ru d4cccb5af88f3e77f370896e9ba8c5f9 freddi sev
Demo Windows en 084ed0fa98a6d1e9368d67fe9cfbd417 freddemo khalek
Demo Windows en 0855496dde35356b1a9691e22ba84cdc freddemo khalek
Demo Windows en 566165a7338fa11029e7c14d94fa70d0 freddemo khalek
Demo Mac en c8aac5e3e701874e2fa4117896f9e1b1 Freddi Demo khalek, sev
Freddi Fish 2: The Case of the Haunted Schoolhouse
- Windows en 51305e929e330e24a75a0351c8f9975e freddi2 Kirben
- Windows All 5057fb0e99e5aa29df1836329232f101 freddi2 sev
- Windows nl ac62d50e39492ee3738b4e83a5ac780f freddi2 joostp
Demo All en fc8d197a22146e74766e9cb0cfcaf1da ff2-demo khalek, sev
Demo Windows en d37c55388294b66e53e7ced3af88fa68 ffhsdemo khalek
Freddi Fish 3: The Case of the Stolen Conch Shell
- Windows All 8368f552b1e3eba559f8d559bcc4cadb freddi3 Kirben, sev
Demo All en cb1559e8405d17a5a278a6b5ad9338d1 f3-mdemo khalek, sev
Freddie Fish 4: The Case of the Hogfish Rustlers of Briny Gulch
- Windows All 4f580a021eee026f3b4589e17d130d78 freddi4 Kirben, sev
Demo Windows en 7c2e76087027eeee9c8f8985f93a1cc5 f4-demo khalek
Demo Windows en c25755b08a8d0d47695e05f1e2111bfc f4-demo sev
Demo Windows en ebd324dcf06a4c49e1ba5c231eee1060 f4-demo sev
Demo Windows nl 16effd200aa6b8abe9c569c3e578814d ff4demo joostp
Freddi Fish 5: The Case of the Creature of Coral Cave
- Windows en 590e6546aacd0d374b7f3a4f53013ab1 freddicove cyx
- Windows ru 21abe302e1b1e2b66d6f5c12e241ebfd freddicove sev
Demo Windows nl 6b257bb2827dd894b8109a50a1a18b5a FF5Demo Kirben
Freddi Fish and Luther's Water Worries
- Windows ru 2012f854d83d9cc6f73b2b544cd8bbf8 water sev
- Windows en 4ba37f835be11a59d969f90f272f575b water Kirben
Freddi Fish and Luther's Maze Madness
- Windows en 4f04b321a95d4315ce6d65f8e1dd0368 maze Kirben
Humongous Interactive Catalog
- Windows en 11e6e244078ff09b0f3832e35420e0a7 catalog khalek, sev
- Windows en 037385a953789190298494d92b89b3d0 catalog2 khalek, sev
Let's Explore the Farm with Buzzy
- Windows en a85856675429fe88051744f755b72f93 farm Kirben
- Mac en fbbbb38a81fc9d6a61d509278390a290 The Farm khalek
Demo Windows en 8d479e36f35e80257dfc102cf4b8a912 farmdemo khalek, sev
Demo Windows en bf8b52fdd9a69c67f34e8e9fec72661c farmdemo khalek, sev
Let's Explore the Airport with Buzzy
- Windows en 07433205acdca3bc553d0e731588b35f airport Kirben
Demo Windows en 86c9902b7bec1a17926d4dae85beaa45 airdemo khalek
Demo Windows en e144f5f49d9241d2a9dee2576b3d09cb airdemo khalek
Demo Windows en 8ffd618a776a4c0d8922bb28b09f8ce8 airdemo khalek
Demo Mac en 7ea2da67ebabea4ac20cee9f4f9d2934 Airport Demo khalek
Let's Explore the Jungle with Buzzy
- Windows en 8801fb4a1200b347f7a38523339526dd jungle Kirben
Pajama Sam 1: No Need to Hide When It's Dark Outside
- All en 672dec94b82f7f0877ebb5b5cf7f4bc1 pajama khalek
- Windows nl 4fa6870d9bc8c313b65d54b1da5a1891 pajama joostp
Demo All en f237bf8a5ef9af78b2a6a4f3901da341 pjs-demo khalek, sev
Demo Windows en d7ab7cd6105546016e6a0d46fb36b964 pjsamdemo khalek
Pajama Sam 2: Thunder and Lightning Aren't so Frightening
- Windows en d4e79c3d8645b8266cd78c325bc35154 pajama2 Kirben
Demo All en 36a6750e03fb505fc19fc2bf3e4dbe91 pj2demo sev
Pajama Sam 3: You Are What You Eat From Your Head to Your Feet
- Windows en f7711f9264d4d43c2a1518ec7c10a607 pajama3 Kirben
Demo Windows en a654fb60c3b67d6317a7894ffd9f25c5 pj3-demo sev
Demo Windows en a9f2f04b1ecaab9495b59befffe9bf88 pj3-demo sev
Demo Windows en cf90b4db5486ef798db78fe6fbf897e5 pj3-demo khalek
Demo Windows en d7ab7cd6105546016e6a0d46fb36b964 PjSamDemo khalek, sev
Demo All nl f08145577e4f13584cc90b3d6e9caa55 pj3demo joostp
Pajama Sam's Lost & Found
- Windows en ed361270102e355afe5236954216aba2 lost Kirben
Demo Windows en a2bb6aa0537402c1b3c2ea899ccef64b smaller Kirben
Pajama Sam's Sock Works
- Windows en 5e8fb66971a60e523e5afbc4c129c0e8 socks Kirben
Putt-Putt Enters the Race
- Windows en 981e1e1891f2be7e25a01f50ae55a5af puttrace
Demo All en 0ac41e2e3d2174e5a042a6b565328dba racedemo sev
Demo All nl aaa587701cde7e74692c68c1024b85eb racedemo joostp
Putt-Putt Goes To The Moon
Demo DOS en aa6a91b7f6f119d1b7b1f2a4c9e24d59 moondemo
Demo Windows en 9c143c5905055d5df7a0f014ab379aee moondemo khalek
Demo Mac en 4af4a6b248103c1fe9edef619677f540 moondemo khalek
- DOS en 780e4a0ae2ff17dc296f4a79543b44f8 puttmoon khalek
- Windows en 9c92eeaf517a31b7221ec2546ab669fd puttmoon khalek
- Mac en 9dc02577bf50d4cfaf3de3fbac06fbe2 Putt-Putt Moon khalek
Putt-Putt Joins the Circus
- All en ab0693e9324cfcf498fdcbb12acf8bb4 puttcircus sev
Demo All en a7cacad9c40c4dc9e1812abf6c8af9d5 circdemo Kirben, sev
Putt-Putt Joins The Parade
Demo DOS en 31aa57f460a3d12429f0552a46a90b39 puttdemo
Demo Windows en 37ff1b308999c4cca7319edfcc1280a0 puttdemo khalek
Demo Mac en f40a7f495f59188ca57a9d1d50301bb6 puttdemo khalek
- DOS en 9708cf716ed8bcc9ff3fcfc69413b746 puttputt khalek
- Windows en 6a30a07f353a75cdc602db27d73e1b42 puttputt khalek
- Mac en 684732efb5799c0f78804c99d8de9aba Putt-Putt Parade khalek
- 3DO en 7e151c17adf624f1966c8fc5827c95e9 puttputt khalek
Putt-Putt Saves the Zoo
- Windows en 1005456bfe351c1b679e1ff2dc2849e9 puttzoo khalek
- Windows en 92e7727e67f5cd979d8a1070e4eb8cb3 puttzoo cyx
- Windows nl c3b22fa4654bb580b20325ebf4174841 puttzoo joostp
- Mac en 58fdf4c7ad13540a734e18f8584cad89 Putt-Putt Saves the Zoo khalek
Demo Windows en 1005456bfe351c1b679e1ff2dc2849e9 puttzoo khalek
Demo Windows en f3d55aea441e260e9e9c7d2a187097e0 zoodemo khalek
Demo Windows en de4efb910210736813c9a1185384bace zoodemo khalek
Demo Mac en 3486ede0f904789267d4bcc5537a46d4 Puttzoo Demo khalek
Putt-Putt Travels Through Time
- All? en 2108d83dcf09f8adb4bc524669c8cf51 PuttTime
Demo All en 4e5867848ee61bc30d157e2c94eee9b4 timedemo khalek, sev
Demo Windows en 0ab19be9e2a3f6938226638b2a3744fe putttime-demo khalek
Putt-Putt and Pep's Balloon-O-Rama
- Windows en 08cc5c3eedaf72ebe12734eee94f7fa2 balloon Kirben
Putt-Putt and Pep's Dog on a Stick
- Windows en d4b8ee426b1afd3e53bc0cf020418cf6 dog sev
- Windows en eae95b2b3546d8ba86ae1d397c383253 dog Kirben
Putt-Putts Fun Pack
- DOS en 46b53fd430adcfbed791b48a0d4b079f funpack khalek
Spy Fox 1: Dry Cereal
- Windows en 3de99ef0523f8ca7958faa3afccd035a spyfox Kirben
- Windows en 6bf70eee5de3d24d2403e0dd3d267e8a spyfox khalek
- Windows nl 9bda5fee51d2fda5253d02c642016bf4 spyfox joostp
Demo All en 53e94115b55dd51d4b8ff0871aa1df1e foxdemo khalek, sev
Demo All en fbdd947d21e8f5bac6d6f7a316af1c5a spydemo sev
Demo Windows en 9d4ab3e0e1d1ebc6ba8a6a4c470ed184 spydemo khalek
Spy Fox 2: Some Assembly Required
- Windows en f79e60c17cca601e411f1f75e8ee9b5a spyfox2 Kirben
Demo Windows en 7222f260253f325c21fcfa68b5bfab67 sf2-demo Kirben
Demo All nl 1c792d28376d45e145cb916bca0400a2 sf2demo joostp
Spy Fox 3: Operation Ozone
- Windows en 600abd3e9f47e63e670188b7e4e86ac7 spyozon Kirben
Demo Windows en ebd0b2c8a387f18887282afe6cad894a sf3-demo Kirben
Spy Fox in Cheese Chase Game
- Windows en 589601b676c98b1c0c987bc031ab68b3 chase Kirben
Spy Fox in Hold the Mustard
- Windows en 225e18566e810c634bf7de63e7568e3e mustard Kirben
--- NEW FILE: simon-md5.txt ---
Simon the Sorcerer 1
- DOS en 465eed710cc242b2de7dc77edd467c4c simon1dos
- DOS en 48ce4ffda968cc7a38870c354571f92c simon1dos Kirben
- DOS fr bed9134804d96f72afa152b8ec5628c3 simon1dos
- DOS it c8f5b860a20dcc63915d94cf2bdcfa49 simon1dos
- DOS ru 3b22f3cc4ce9faa3f7830ab18235b04d simon1dos Kirben
- Windows en d22302abf44219f95d50f2faa807dd1a simon1talkie Kirben
- DOS de ecc01a02c9b97b49d0b4191a346b0940 simon1talkie SimSaw
- DOS en d545db8a0efae95a90b23da81aadb201 simon1talkie Kirben
- DOS fr 08bd7abefe9c44e43df396748640e531 simon1talkie jellby
- DOS hb 9d58f84988634d217c944cd4153a2a3b simon1talkie jellby
- DOS it 057eac98fc4d14dc7fd04341781b26b3 simon1talkie jellby
- DOS es e3712b3ed4429e736123a40276f533d7 simon1talkie jellby
- Amiga en ec5358680c117f29b128cbbb322111a4 simon1cd32 Kirben
AGA Amiga en 39e8f13ec29de1fcef98c81ca0a2ae57 simon1amiga
ECS Amiga en fa5651a5e5da0f3c89473dd62af095d8 simon1amiga
Demo DOS en 486f026593f894f5b6b346ef3984a7a0 simon1demo Kirben
Simon the Sorcerer 2
- DOS en 27c8e7feada80c75b70b9c2f6088d519 simon2dos
- Windows de 9e858b3bb189c134c3a5f34c3385a8d3 simon2talkie DhWz
- Windows en bd85a8b5135592ada9cbeae49160f1d3 simon2talkie Kirben
- DOS de 3bdf85dc57c1abff8f05416b4571198f simon2talkie SimSaw
- DOS en 078b04da0974a40645b92baffdf2781e simon2talkie Kirben
- DOS fr c8ddd48919aa75423dd2d3e5864909df simon2talkie SimSaw
- DOS hb a3cbdd3450f9fccb0a9d8d6dc28f66fe simon2talkie
- DOS es 79a9d9357c15153c8c502dba73c3eac6 simon2talkie Samuel Suárez
Demo DOS en 1e11ddbad80c408031ae44a0cbce46bb simon2talkie Kirben
Demo DOS de 028c6240c9c8e190d86188238505c5e5 simon2talkie Kirben
More information about the Scummvm-git-logs
mailing list