aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/vm.cpp3
-rw-r--r--engines/sci/include/gfx_res_options.h6
-rw-r--r--engines/sci/include/sfx_pcm.h7
-rw-r--r--engines/sci/scicore/resource_map.cpp54
-rw-r--r--engines/sci/sfx/mixer.h10
5 files changed, 35 insertions, 45 deletions
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index c3cf243807..622fad8920 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -870,7 +870,8 @@ run_vm(state_t *s, int restoring) {
}
-
+ // TODO: Replace the following by an opcode table, and several methods for
+ // each opcode.
switch (opnumber) {
case 0x00: /* bnot */
diff --git a/engines/sci/include/gfx_res_options.h b/engines/sci/include/gfx_res_options.h
index ee008e03dd..f22989437d 100644
--- a/engines/sci/include/gfx_res_options.h
+++ b/engines/sci/include/gfx_res_options.h
@@ -35,12 +35,6 @@ typedef struct _gfx_res_pattern {
int min, max;
} gfx_res_pattern_t;
-typedef struct _gfx_res_pattern_list {
- gfx_res_pattern_t pattern;
- struct _gfx_res_pattern_list *next;
-} gfx_res_pattern_list_t;
-
-
/* GFX resource assignments */
typedef struct {
diff --git a/engines/sci/include/sfx_pcm.h b/engines/sci/include/sfx_pcm.h
index 02ebba7e99..f275fd3f03 100644
--- a/engines/sci/include/sfx_pcm.h
+++ b/engines/sci/include/sfx_pcm.h
@@ -64,13 +64,6 @@
typedef struct {
- int nom, den;
- int val;
-
- /* Total value: val + nom/den, where (nom < den) guaranteed. */
-} sfx_pcm_urat_t; /* Finitary unsigned rational numbers */
-
-typedef struct {
int rate; /* Sampling rate */
int stereo; /* The stereo mode used (SFX_PCM_MONO or SFX_PCM_STEREO_*) */
unsigned int format; /* Sample format (SFX_PCM_FORMAT_*) */
diff --git a/engines/sci/scicore/resource_map.cpp b/engines/sci/scicore/resource_map.cpp
index 7e033c05b2..c47d07a2f0 100644
--- a/engines/sci/scicore/resource_map.cpp
+++ b/engines/sci/scicore/resource_map.cpp
@@ -26,9 +26,9 @@
#include "sci/include/sci_memory.h"
#include "sci/include/sciresource.h"
#include "sci/include/resource.h"
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
+
+#include "common/file.h"
+
#define RESOURCE_MAP_FILENAME "resource.map"
@@ -37,13 +37,13 @@
#define SCI11_RESMAP_ENTRIES_SIZE 5
static int
-detect_odd_sci01(int fh) {
+detect_odd_sci01(Common::File &file) {
byte buf[6];
int files_ok = 1;
- int fsize, resources_nr, tempfh, read_ok;
+ int fsize, resources_nr, read_ok;
char filename[14];
- fsize = sci_fd_size(fh);
+ fsize = file.size();
if (fsize < 0) {
perror("Error occured while trying to get filesize of resource.map");
return SCI_ERROR_RESMAP_NOT_FOUND;
@@ -52,22 +52,21 @@ detect_odd_sci01(int fh) {
resources_nr = fsize / SCI0_RESMAP_ENTRIES_SIZE;
while (resources_nr-- > 1) {
- read_ok = read(fh, &buf, SCI0_RESMAP_ENTRIES_SIZE);
+ read_ok = file.read(&buf, SCI0_RESMAP_ENTRIES_SIZE);
if (read_ok) {
sprintf(filename, "resource.%03i", SCI0_RESFILE_GET_FILE(buf + 2));
- tempfh = sci_open(filename, O_RDONLY | O_BINARY);
-
- if (tempfh == SCI_INVALID_FD) {
+ Common::File temp;
+
+ // FIXME: Maybe better to use File::exists here?
+ if (!temp.open(filename)) {
files_ok = 0;
break;
}
-
- close(tempfh);
}
}
- lseek(fh, 0, SEEK_SET);
+ file.seek(0, SEEK_SET);
return files_ok;
}
@@ -148,10 +147,9 @@ int sci1_parse_header(int fd, int *types, int *lastrt) {
-int
-sci0_read_resource_map(resource_mgr_t *mgr, resource_source_t *map, resource_t **resource_p, int *resource_nr_p, int *sci_version) {
+int sci0_read_resource_map(resource_mgr_t *mgr, resource_source_t *map, resource_t **resource_p, int *resource_nr_p, int *sci_version) {
int fsize;
- int fd;
+ Common::File file;
resource_t *resources;
int resources_nr;
int resource_index = 0;
@@ -160,12 +158,11 @@ sci0_read_resource_map(resource_mgr_t *mgr, resource_source_t *map, resource_t *
int max_resfile_nr = 0;
byte buf[SCI0_RESMAP_ENTRIES_SIZE];
- fd = sci_open(map->location.file.name, O_RDONLY | O_BINARY);
- if (!IS_VALID_FD(fd))
+ if (!file.open(map->location.file.name))
return SCI_ERROR_RESMAP_NOT_FOUND;
- read(fd, &buf, 4);
+ file.read(&buf, 4);
/* Theory: An SCI1 map file begins with an index that allows us to seek quickly
to a particular resource type. The entries are three bytes long; one byte
@@ -186,13 +183,12 @@ sci0_read_resource_map(resource_mgr_t *mgr, resource_source_t *map, resource_t *
if ((buf[0] == 0x80) &&
(buf[1] % 3 == 0) &&
(buf[3] == 0x81)) {
- close(fd);
return SCI_ERROR_INVALID_RESMAP_ENTRY;
}
- lseek(fd, 0, SEEK_SET);
+ file.seek(0, SEEK_SET);
- switch (detect_odd_sci01(fd)) {
+ switch (detect_odd_sci01(file)) {
case 0 : /* Odd SCI01 */
if (*sci_version == SCI_VERSION_AUTODETECT)
*sci_version = SCI_VERSION_01_VGA_ODD;
@@ -205,7 +201,8 @@ sci0_read_resource_map(resource_mgr_t *mgr, resource_source_t *map, resource_t *
return SCI_ERROR_RESMAP_NOT_FOUND;
}
- if ((fsize = sci_fd_size(fd)) < 0) {
+ fsize = file.size();
+ if (fsize < 0) {
perror("Error occured while trying to get filesize of resource.map");
return SCI_ERROR_RESMAP_NOT_FOUND;
}
@@ -216,7 +213,7 @@ sci0_read_resource_map(resource_mgr_t *mgr, resource_source_t *map, resource_t *
/* Sets valid default values for most entries */
do {
- int read_ok = read(fd, &buf, SCI0_RESMAP_ENTRIES_SIZE);
+ int read_ok = file.read(&buf, SCI0_RESMAP_ENTRIES_SIZE);
next_entry = 1;
if (read_ok < 0) {
@@ -235,7 +232,6 @@ sci0_read_resource_map(resource_mgr_t *mgr, resource_source_t *map, resource_t *
if (sci_res_read_entry(mgr, map, buf, resources + resource_index, *sci_version)) {
free(resources);
- close(fd);
return SCI_ERROR_RESMAP_NOT_FOUND;
}
@@ -263,7 +259,7 @@ sci0_read_resource_map(resource_mgr_t *mgr, resource_source_t *map, resource_t *
} while (next_entry);
- close(fd);
+ file.close();
if (!resource_index) {
sciprintf("resource.map was empty!\n");
@@ -280,14 +276,12 @@ sci0_read_resource_map(resource_mgr_t *mgr, resource_source_t *map, resource_t *
/* Check whether the highest resfile used exists */
char filename_buf[14];
sprintf(filename_buf, "resource.%03d", max_resfile_nr);
- fd = sci_open(filename_buf, O_RDONLY);
- if (!IS_VALID_FD(fd)) {
+ if (!file.open(filename_buf) {
_scir_free_resources(resources, resources_nr);
sciprintf("'%s' requested by resource.map, but not found\n", filename_buf);
return SCI_ERROR_INVALID_RESMAP_ENTRY;
- } else
- close(fd);
+ }
#endif
}
diff --git a/engines/sci/sfx/mixer.h b/engines/sci/sfx/mixer.h
index 69580d4767..2dbff557bc 100644
--- a/engines/sci/sfx/mixer.h
+++ b/engines/sci/sfx/mixer.h
@@ -32,6 +32,14 @@
#define SFX_PCM_FEED_MODE_ALIVE 0
#define SFX_PCM_FEED_MODE_DEAD 1
+/** Finitary unsigned rational numbers */
+struct sfx_pcm_urat_t {
+ int nom, den;
+ int val;
+
+ /* Total value: val + nom/den, where (nom < den) guaranteed. */
+};
+
struct twochannel_data {
int left, right;
};
@@ -49,7 +57,7 @@ typedef struct {
int mode; /* Whether the feed is alive or pending destruction */
int pending_review; /* Timestamp needs to be checked for this stream */
- struct twochannel_data ch_old, ch_new; /* Intermediate results of output computation */
+ twochannel_data ch_old, ch_new; /* Intermediate results of output computation */
} sfx_pcm_feed_state_t;