From acc32ca66ddc058d645a89d672953f71a800eec1 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Fri, 8 May 2015 04:41:20 -0400 Subject: games/colem: Updated for version 3.3. --- games/colem/ColEm.html | 361 ------------------------------------------- games/colem/README | 8 +- games/colem/colem.1 | 215 -------------------------- games/colem/colem.6 | 2 +- games/colem/colem.SlackBuild | 29 +++- games/colem/colem.info | 6 +- games/colem/colem.pod | 19 ++- games/colem/rom_path.diff | 158 +++++++++---------- 8 files changed, 120 insertions(+), 678 deletions(-) delete mode 100644 games/colem/ColEm.html delete mode 100644 games/colem/colem.1 diff --git a/games/colem/ColEm.html b/games/colem/ColEm.html deleted file mode 100644 index 3a641ea82f30e..0000000000000 --- a/games/colem/ColEm.html +++ /dev/null @@ -1,361 +0,0 @@ - - -ColEm Documentation - - - - -
-

ColEm
version 2.5

-

by Marat Fayzullin

-
> - -

Contents

- - - -

New in This Version

-
- - - -

Introduction

-
-

- ColEm is a portable emulator of the old ColecoVision videogame console. -It should run most ColecoVision games and supports Coleco's SuperAction -controllers with spin wheels. You can always get the latest ColEm binaries, -source code, and support files from -

-

-http://fms.komkon.org/ColEm/ -

-

-There are versions of ColEm for many platforms, with Windows, MSDOS, Unix, -and Symbian ports being maintained by myself. All these ports are available -for free from the above website. -

-

-The ColEm-Symbian port works on the 3rd Edition Series60 phones from -Nokia and its licensees. You can download it, as well as my other -Symbian products, at -

-

-http://fms.komkon.org/EmuSymbian/ -

-

-ColEm is written in portable C and thus can be ported to any sufficiently -fast computing platform. The current ColEm source code distribution includes -portable core sources and platform-specific sources for Windows and MSDOS. -The ColEm-Unix sources are also available, for a slightly older version -of ColEm. -

-

-If you would like to port ColEm to another system or make changes in -ColEm's code, please, contact me by email or some other means. Be -aware that ColEm source code is freely distributable, but it is not -public domain and it is not released under GPL. You can not use it -for commercial purposes, distribute, or change it on your own, unless you -contact me to arrange the conditions of such use and get my permission. -Feel free to look at it though. -

- - -

Buttons

-
- -
-All versions:
-  [ALT]          - Hold to switch to the second controller
-  [SPACE]        - FIRE-R button (also: [SHIFT],A,S,D,F,G,H,J,K,L)
-  [CONTROL]      - FIRE-L button (also: Z,X,C,V,B,N,M)
-  [Q]            - SuperAction PURPLE button (also: E,T,U,O)
-  [W]            - SuperAction BLUE button (also: R,Y,I,P)
-  [0]-[9]        - Digit buttons
-  [-]            - [*] button
-  [=]            - [#] button
-  [PGUP]         - Fast-forward emulation (also: [F9])
-  [ESC]          - Quit emulation (also: [F12])
-  [F2]           - Turn soundtrack log on/off
-  [F3]           - Toggle FIRE-R autofire on/off
-  [F4]           - Toggle FIRE-L autofire on/off
-  [F5]           - Invoke configuration menu
-  [F6]           - Load emulation state
-  [F7]           - Save emulation state
-  [F9]           - Fast-forward emulation (also: [PGUP])
-  [F11]          - Reset hardware
-  [F12]          - Quit emulation (also: [ESC])
-  [ALT]+[PGUP]   - Increase audio volume
-  [ALT]+[PGDOWN] - Decrease audio volume
-
-With #define DEBUG:
-  [F1]           - Go into the built-in debugger
-
-With #define GIFLIB:
-  [F10]          - Make a screen snapshot (SNAPxxxx.GIF)
-
-With #define WINDOWS:
-  [ALT]+[ENTER]  - Switch between full screen and window modes
-
-With #define MSDOS or UNIX:
-  [F8]           - Turn scanline simulation on/off
-  [CTRL]+[F8]    - Toggle screen softening on/off
-
-
- - -

Command Line Options

-
- -
-Usage: colem [-option1 [-option2...]] [filename]
-
-[filename] = Name of the file to load as a cartridge [CART.ROM]
-  This program will transparently uncompress singular GZIPped
-  and PKZIPped files.
-
-[-option] =
-  -verbose <level>    - Select debugging messages [5]
-                        0 - Silent       1 - Startup messages
-                        2 - VDP          4 - Illegal Z80 ops
-                                        16 - Sound
-  -skip <percent>     - Percentage of frames to skip [25]
-  -help               - Print this help page
-  -home <dirname>     - Set directory with system ROM files [off]
-  -pal/-ntsc          - Video system to use [-ntsc]
-  -adam/-cv           - Run in Adam/ColecoVision mode [-cv]
-  -allspr             - Show all sprites [off]
-  -autoa/-noautoa     - Autofire/No autofire for FIRE-R button [-noautoa]
-  -autob/-noautob     - Autofire/No autofire for FIRE-L button [-noautob]
-  -spin1x/-spin1y     - Mouse X/Y position as SuperAction spinner 1 [off]
-  -spin2x/-spin2y     - Mouse X/Y position as SuperAction spinner 2 [off]
-  -drums/-nodrums     - Hit/Don't hit MIDI drums on noise [-nodrums]
-  -logsnd <filename>  - Write soundtrack to a MIDI file [LOG.MID]
-  -palette <number>   - Use given color palette [0]
-                        0 - Scaled VDP colors   1 - Original VDP colors
-                        2 - Faded NTSC colors
-  -sound [<quality>]  - Sound emulation quality [22050]
-  -nosound            - Don't emulate sound [-nosound]
-
-With #define DEBUG:
-  -trap <address>     - Trap execution when PC reaches address [FFFFh]
-
-With #define UNIX or MSDOS:
-  -sync <frequency>   - Sync screen updates to <frequency> [-nosync]
-  -nosync             - Do not sync screen updates [-nosync]
-  -tv/-notv           - Simulate/Don't simulate scanlines [-notv]
-  -soft/-nosoft       - Scale screen up with softening [-nosoft]
-
-With #define MSDOS:
-  -vsync              - Sync screen updates to VGA VBlanks [-vsync]
-
-With #define UNIX:
-  -saver/-nosaver     - Save/don't save CPU when inactive [-saver]
-  -scale <factor>     - Scale window by <factor> [2]
-
-With #define MITSHM:
-  -shm/-noshm         - Use/don't use MIT SHM extensions for X [-shm]
-
-
- - -

Frequently Asked Questions

-
-
    -
  1. Why is the emulator so slow on my PC? -

    -Your computer may be too slow to run the emulator. On slow machines, try -speeding things up by skipping more frames (-skip command -line option or "Draw XX% frames" menu option). In ColEm-Windows, make -window smaller or switch to the full screen mode with -[Alt]+[Enter]. -

    -
  2. Emulator is too fast on my PC! -

    -If ColEm is too fast on your computer, you can slow it down by syncing it -to a timer (-sync in ColEm-Unix), VBlanks (-vsync -in ColEm-MSDOS), or by choosing "PAL Video"/"NTSC Video" menu option in -ColEm-Windows. -

    -
  3. I can't get some ROM images to work with the emulator. -

    -If you can't get ROM image to work, send it to me for analysis. -

    -
  4. Is it legal to spread cartridge ROMs? -

    -NO. Nobody seems to care though, mainly because there is no -profit to be made from ColecoVision software any longer. Nevertheless, be -aware of the fact that by using commercial software you haven't bought you -are commencing an act of piracy. -

    -
  5. When compiling ColEm-Unix, I get "undefined name" errors. -

    -This usually means that your linker cannot find the necessary libraries -(namely, libX11 and libXext) or some additional libraries (like libsocket -and libnsl) are required. Find these libraries in your system and modify -the Makefile so that the final invocation of the C compiler has --L<path_to_libs> options. If you have no libXext -library and the same functionality isn't provided in libX11, try -#undefining the MITSHM option. -

    -
  6. When starting ColEm-Unix, I get X_ShmAttach error. -

    -You are probably trying to run the emulator on a remote Xterminal while -it attempts to use shared memory for interfacing with X. Another reason -for this error may be the lack of MITSHM extension support in your -Xserver. Use -noshm option to disable the usage of shared -memory. -

    -
  7. When starting ColEm-Unix, I get X_PutImage error. -

    -Unix/X version of ColEm can currently be compiled for 8bit, 16bit, or -32bit Xterminals. Neither 1bit nor 4bit Xterminals will work with the -drivers included into official ColEm distribution. -

    -
- - -

History

-
-

New in ColEm 2.4

- -

New in ColEm 2.3

- -

New in ColEm 2.2

- -

New in ColEm 2.1

- -

New in ColEm 2.0

- -

New in ColEm 1.0

- - - -

Thanks to...

-
-

-Finally, I would like to thank Hans Guijt, Marcel de Kogel, John Stiles, -Neal Danner, Alan Steremberg, and all other people who helped me with -advice, information, ROM images, and encouragment. -

- -
- -© Copyright by -Marat Fayzullin -(marat [AT] komkon /DOT/ org) - - - diff --git a/games/colem/README b/games/colem/README index 93f7a565277cd..7ff796550c4a6 100644 --- a/games/colem/README +++ b/games/colem/README @@ -4,10 +4,10 @@ ColEm is a portable emulator of the old ColecoVision videogame console. It should run most ColecoVision games and supports Coleco's SuperAction controllers with spin wheels. -ColEm uses OSS for audio, so you'll have to either load the OSS -emulation modules (via /etc/rc.d/rc.alsa-oss), run it as "aoss colem" -from the command line, or launch it from your desktop by opening a .cv -or .col file. +ColEm uses OSS for audio, so you'll have to either load the OSS emulation +modules (via /etc/rc.d/rc.alsa-oss), run it as "aoss colem" from the +command line, or launch it from your desktop by opening a .cv or .col file +(which will use aoss automatically). In order to run ColecoVision games, you will need a copy of the system ROM image, but for copyright reasons, no ROM image is included. diff --git a/games/colem/colem.1 b/games/colem/colem.1 deleted file mode 100644 index e8d3c76029c56..0000000000000 --- a/games/colem/colem.1 +++ /dev/null @@ -1,215 +0,0 @@ -.TH COLEM "1" "January 2011" "SlackBuilds.org" "User Commands" -.SH NAME -colem \- Emulator for ColecoVision and Coleco Adam consoles -.SH SYNOPSIS -.B colem -[\fI-option1 \fR[\fI-option2\fR...]] [\fIfilename\fR] -.SH DESCRIPTION -ColEm is a portable emulator of the old ColecoVision videogame console. It should run most ColecoVision games and supports Coleco's SuperAction controllers with spin wheels. -.PP -You can always get the latest ColEm binaries, source code, and support files from -.B http://fms.komkon.org/ColEm/ -.SH OPTIONS -.TP -\fB[filename]\fR -Name of the file to load as a cartridge [default: CART.ROM] -.PP -This program will transparently uncompress singular GZIPped -and PKZIPped files. -.TP -\fB\-verbose\fR -Select debugging messages [bitmask, default: 5] -.br -0 \- Silent -.br -1 \- Startup messages -.br -2 \- VDP -.br -4 \- Illegal Z80 ops -.br -16 \- Sound -.TP -\fB\-pal\fR, \fB\-ntsc\fR -Video system to use [default: \-ntsc] -.TP -\fB\-skip\fR -Percentage of frames to skip [default: 25] -.TP -\fB\-help\fR -Print this help page -.TP -\fB\-home\fR -Set directory with system ROM files [default: see FILES, below] -.TP -\fB\-adam\fR, \fB\-cv\fR -Run in Adam/ColecoVision mode [default: \-cv] -.TP -\fB\-allspr\fR -Show all sprites [off] -.TP -\fB\-autoa\fR, \fB\-noautoa\fR -Autofire/No autofire for FIRE\-R button [default: \-noautoa] -.TP -\fB\-autob\fR, \fB\-noautob\fR -Autofire/No autofire for FIRE\-L button [default: \-noautob] -.TP -\fB\-spin1x\fR, \fB\-spin1y\fR -Mouse X/Y position as SuperAction spinner 1 [default: off] -.TP -\fB\-spin2x\fR, \fB\-spin2y\fR -Mouse X/Y position as SuperAction spinner 2 [default: off] -.TP -\fB\-drums\fR, \fB\-nodrums\fR -Hit/Don't hit MIDI drums on noise [default: \-nodrums] -.TP -\fB\-logsnd\fR -Write soundtrack to a MIDI file [default: LOG.MID] -.TP -\fB\-palette\fR -Use given color palette [default: 0] -.br -0 \- Scaled VDP colors -.br -1 \- Original VDP colors -.br -2 \- Faded NTSC colors -.TP -\fB\-sound\fR [] -Sound emulation quality [default: 22050] -.TP -\fB\-nosound\fR -Don't emulate sound [default: emulate sound] -.TP -\fB\-trap\fR
-Trap execution when PC reaches address [default: FFFFh] -.TP -\fB\-sync\fR -Sync screen updates to [default: 60] -.TP -\fB\-nosync\fR -Do not sync screen updates [default: \-nosync] -.TP -\fB\-tv\fR, \fB\-notv\fR -Simulate/Don't simulate scanlines [default: \-notv] -.TP -\fB\-soft\fR, \fB\-nosoft\fR -Scale screen up with softening [default: \-nosoft] -.TP -\fB\-saver\fR, \fB\-nosaver\fR -Save/don't save CPU when inactive [default: \-saver] -.TP -\fB\-shm\fR, \fB\-noshm\fR -Use/don't use MIT SHM extensions for X [default: \-shm] -.TP -\fB\-scale\fR -Scale window by [default: 2] -.SH "KEYBOARD BINDINGS" -.TP -\fB[ALT]\fR -Hold to switch to the second controller -.TP -\fB[SPACE]\fR -FIRE\-R button (also: [SHIFT],A,S,D,F,G,H,J,K,L) -.TP -\fB[CONTROL]\fR -FIRE\-L button (also: Z,X,C,V,B,N,M) -.TP -\fB[Q]\fR -SuperAction PURPLE button (also: E,T,U,O) -.TP -\fB[W]\fR -SuperAction BLUE button (also: R,Y,I,P) -.TP -\fB[0]\-[9]\fR -Digit buttons -.TP -\fB[\-]\fR -[*] button -.TP -\fB[=]\fR -[#] button -.TP -\fB[PGUP]\fR -Fast\-forward emulation (also: [F9]) -.TP -\fB[ESC]\fR -Quit emulation (also: [F12]) -.TP -\fB[F1]\fR -Go into the built\-in debugger -.TP -\fB[F2]\fR -Turn soundtrack log on/off -.TP -\fB[F3]\fR -Toggle FIRE\-R autofire on/off -.TP -\fB[F4]\fR -Toggle FIRE\-L autofire on/off -.TP -\fB[F5]\fR -Invoke configuration menu -.TP -\fB[F6]\fR -Load emulation state -.TP -\fB[F7]\fR -Save emulation state -.TP -\fB[F8]\fR -Turn scanline simulation on/off -.TP -\fB[ALT]+[F8]\fR -Toggle screen softening on/off -.TP -\fB[F9]\fR -Fast\-forward emulation (also: [PGUP]) -.TP -\fB[F11]\fR -Reset hardware -.TP -\fB[F12]\fR -Quit emulation (also: [ESC]) -.TP -\fB[ALT]+[PGUP]\fR -Increase audio volume -.TP -\fB[ALT]+[PGDOWN]\fR -Decrease audio volume -.SH FILES -.TP -\fBcoleco.rom\fR -ColecoVision BIOS ROM image (8192 bytes). This is the only ROM required -for playing ColecoVision games. -.TP -\fBwriter.rom\fR -SmartWriter ROM (32768 bytes), only required for emulating the Coleco ADAM system. -.TP -\fBeos.rom\fR -Extended OS ROM (8192 bytes), only required for emulating the Coleco ADAM system. -.PP -The above ROM images may be named in all\-lowercase or all\-uppercase, -and are searched for in: -.PP -1. The directory specified by \fB\-home\fR, or the current directory if \fB\-home\fR not given. -.br -2. \fI/usr/share/colem\fR -.br -3. \fI~/.colem\fR -.PP -The coleco.rom file will occasionally be found on websites with the names "os7.rom" -or "ColecoVision\ BIOS\ (1982).col". Its md5sum is one of: -.PP -2c66f5911e5b42b8ebe113403548eee7 (original version) -.br -00fd13b66d39c69706aa48eb84a78411 (hacked version, different font) -.br -47f7180592a00b9631c97a12ff0fdd3c (hacked version, no title screen delay) -.PP -ColEm works with any of the above ROM images. -.SH AUTHOR -ColEm is by Marat Fayzullin, (C)FMS 1994\-2010 -.PP -This man page is by B. Watson, for the SlackBuilds.org project (but may -be used by anyone for any purpose). diff --git a/games/colem/colem.6 b/games/colem/colem.6 index f3d8f8dd6d63d..648b6b4dbf870 100644 --- a/games/colem/colem.6 +++ b/games/colem/colem.6 @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "COLEM 6" -.TH COLEM 6 "2014-08-25" "2.9" "SlackBuilds.org" +.TH COLEM 6 "2015-05-06" "3.3" "SlackBuilds.org" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff --git a/games/colem/colem.SlackBuild b/games/colem/colem.SlackBuild index b5cf0e3548df9..5753180f5d01c 100644 --- a/games/colem/colem.SlackBuild +++ b/games/colem/colem.SlackBuild @@ -6,6 +6,13 @@ # Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details. +# 20150506 bkw: +# - updated for 3.3. Lots of little changes, meaning the script +# won't work for 2.9 any more. +# - stop the CRLF madness, extract with 'unzip -aa' and get rid of +# the carriage returns in rom_path.diff. +# - get rid of POD warnings when making man page. + # 20140825 bkw: # - updated for 2.9 # - include icon in slackbuild dir (upstream removed it from src tarball) @@ -27,7 +34,7 @@ # with OSS modules disabled by default. PRGNAM=colem -VERSION=${VERSION:-2.9} +VERSION=${VERSION:-3.3} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} @@ -78,7 +85,7 @@ cd $TMP rm -rf $PRGNAM-$VERSION mkdir $PRGNAM-$VERSION cd $PRGNAM-$VERSION -unzip $CWD/$ZIPNAME$ZIPVER-Source.zip +unzip -aa $CWD/$ZIPNAME$ZIPVER-Source.zip chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ @@ -102,13 +109,25 @@ cd $ZIPNAME/Unix # ColEm.html claims that -DGIFLIB makes the F10 key save a GIF snapshot, # but it's not actually implemented in ColEm-2.9. In 2.6 it was implemented # only for MS-DOS. -#sed -i "/^DEFINES/s/$/ -DGIFLIB/" Makefile +#sed -i "/^DEFINES/s,-DCOLEM,& -DGIFLIB," Makefile + +# I have no idea why 3.3 suddenly defaults to 16-bit colordepth. Does +# anyone still use less than 24-bit, this century? Getting rid of +# -DBPP32 gives us a binary that works in 16 and 32 bit depth. +sed -i "/^DEFINES/s,-DBPP..,," Makefile + +# If PNG support actually *did* anything, this is how we'd enable it: +#sed -i "/^DEFINES/s,-DCOLEM,& -DLIBPNG," Makefile +#sed -i "/^LIBS/s,=,& -lpng," ../../EMULib/Rules.gcc # Allow building on big-endian platforms (such as s390) if [ "${BIGENDIAN:-no}" != "no" ]; then sed -i "/^DEFINES/s/-DLSB_FIRST/-DMSB_FIRST/" Makefile fi +# Fix linking on ColEm-3.3 (same .o file given twice in link command) +sed -i '/^RECORD/d' ../../EMULib/Rules.gcc + make # no 'make install', do it manually. @@ -137,9 +156,9 @@ mkdir -p $PKG/usr/share/$PRGNAM # Look for zipped ROM images and unzip them. if [ -e $CWD/coleco.zip ]; then - unzip -o $CWD/coleco.zip + unzip -o $CWD/coleco.zip elif [ -e $CWD/COLECO.ZIP ]; then - unzip -o $CWD/COLECO.ZIP + unzip -o $CWD/COLECO.ZIP fi # Look for non-zipped ROM images, either unzipped above or in $CWD. diff --git a/games/colem/colem.info b/games/colem/colem.info index 19b803b630a07..d7a1c4828ea81 100644 --- a/games/colem/colem.info +++ b/games/colem/colem.info @@ -1,8 +1,8 @@ PRGNAM="colem" -VERSION="2.9" +VERSION="3.3" HOMEPAGE="http://fms.komkon.org/ColEm/" -DOWNLOAD="http://urchlay.naptime.net/~urchlay/src/ColEm29-Source.zip" -MD5SUM="a619dd9f5ddde76326b9278b13e6fac5" +DOWNLOAD="http://urchlay.naptime.net/~urchlay/src/ColEm33-Source.zip" +MD5SUM="90d38c6fa5a88a100a855b4ad9d28233" DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" diff --git a/games/colem/colem.pod b/games/colem/colem.pod index 02e3b8167c096..d5b0a8aa50634 100644 --- a/games/colem/colem.pod +++ b/games/colem/colem.pod @@ -1,6 +1,5 @@ # pod source for colem man page. convert with: -# pod2man --stderr -s6 -r2.9 -cSlackBuilds.org colem.pod > colem.6 -# ignore the 'Expected text after =item, not a number' warnings. +# pod2man --stderr -s6 -r3.3 -cSlackBuilds.org colem.pod > colem.6 =pod @@ -34,23 +33,23 @@ Select debugging messages [bitmask, default: 5] =over 4 -=item 0 +=item Z<>0 Silent -=item 1 +=item Z<>1 Startup messages -=item 2 +=item Z<>2 VDP -=item 4 +=item Z<>4 Illegal Z80 ops -=item 16 +=item Z<>16 Sound @@ -110,15 +109,15 @@ Use given color palette [default: 0] =over 4 -=item 0 +=item Z<>0 Scaled VDP colors -=item 1 +=item Z<>1 Original VDP colors -=item 2 +=item Z<>2 Faded NTSC colors diff --git a/games/colem/rom_path.diff b/games/colem/rom_path.diff index b2353f2190def..e788b8272d07c 100644 --- a/games/colem/rom_path.diff +++ b/games/colem/rom_path.diff @@ -2,86 +2,86 @@ diff -Naur a/ColEm/Coleco.c b/ColEm/Coleco.c --- a/ColEm/Coleco.c 2008-03-30 12:53:24.000000000 -0400 +++ b/ColEm/Coleco.c 2009-09-29 17:49:32.000000000 -0400 @@ -19,6 +19,9 @@ - #include - #include - #include -+#include -+#include -+#include - - #ifdef __WATCOMC__ - #include + #include + #include + #include ++#include ++#include ++#include + + #ifdef __WATCOMC__ + #include @@ -69,6 +72,46 @@ - #define fwrite(B,N,L,F) gzwrite(F,B,(L)*(N)) - #endif - -+/* 20090929 bkw: smart_fopen() searches for ROMs in various places -+ you might expect them to live, on a UNIXey system. Also searches -+ for both upper- and lower-case filenames. */ -+static FILE *smart_fopen(const char *path, const char *mode) { -+ FILE *fp; -+ char lowercase_path[20], filename[PATH_MAX + 1]; -+ const char *p = path; -+ char *lp = lowercase_path; -+ struct passwd *ent; -+ -+ while(*p) *lp++ = tolower(*p++); -+ *lp = '\0'; -+ -+ if( (fp = fopen(path, mode)) ) -+ return fp; -+ -+ if( (fp = fopen(lowercase_path, mode)) ) -+ return fp; -+ -+ sprintf(filename, "/usr/share/colem/%s", path); -+ if( (fp = fopen(filename, mode)) ) -+ return fp; -+ -+ sprintf(filename, "/usr/share/colem/%s", lowercase_path); -+ if( (fp = fopen(filename, mode)) ) -+ return fp; -+ -+ if( (ent = getpwuid(getuid())) && (ent->pw_dir) ) { -+ sprintf(filename, "%s/.colem/%s", ent->pw_dir, path); -+ if( (fp = fopen(filename, mode)) ) -+ return fp; -+ -+ sprintf(filename, "%s/.colem/%s", ent->pw_dir, lowercase_path); -+ if( (fp = fopen(filename, mode)) ) -+ return fp; -+ } -+ -+ return NULL; -+} -+ - /** StartColeco() ********************************************/ - /** Allocate memory, load ROM image, initialize hardware, **/ - /** CPU and start the emulation. This function returns 0 in **/ + #define fwrite(B,N,L,F) gzwrite(F,B,(L)*(N)) + #endif + ++/* 20090929 bkw: smart_fopen() searches for ROMs in various places ++ you might expect them to live, on a UNIXey system. Also searches ++ for both upper- and lower-case filenames. */ ++static FILE *smart_fopen(const char *path, const char *mode) { ++ FILE *fp; ++ char lowercase_path[20], filename[PATH_MAX + 1]; ++ const char *p = path; ++ char *lp = lowercase_path; ++ struct passwd *ent; ++ ++ while(*p) *lp++ = tolower(*p++); ++ *lp = '\0'; ++ ++ if( (fp = fopen(path, mode)) ) ++ return fp; ++ ++ if( (fp = fopen(lowercase_path, mode)) ) ++ return fp; ++ ++ sprintf(filename, "/usr/share/colem/%s", path); ++ if( (fp = fopen(filename, mode)) ) ++ return fp; ++ ++ sprintf(filename, "/usr/share/colem/%s", lowercase_path); ++ if( (fp = fopen(filename, mode)) ) ++ return fp; ++ ++ if( (ent = getpwuid(getuid())) && (ent->pw_dir) ) { ++ sprintf(filename, "%s/.colem/%s", ent->pw_dir, path); ++ if( (fp = fopen(filename, mode)) ) ++ return fp; ++ ++ sprintf(filename, "%s/.colem/%s", ent->pw_dir, lowercase_path); ++ if( (fp = fopen(filename, mode)) ) ++ return fp; ++ } ++ ++ return NULL; ++} ++ + /** StartColeco() ********************************************/ + /** Allocate memory, load ROM image, initialize hardware, **/ + /** CPU and start the emulation. This function returns 0 in **/ @@ -134,7 +177,7 @@ - - /* COLECO.ROM: OS7 (ColecoVision BIOS) */ - if(Verbose) printf(" Opening COLECO.ROM..."); -- if(!(F=fopen("COLECO.ROM","rb"))) P="NOT FOUND"; -+ if(!(F=smart_fopen("COLECO.ROM","rb"))) P="NOT FOUND"; - else - { - if(fread(ROM_BIOS,1,0x2000,F)!=0x2000) P="SHORT FILE"; + + /* COLECO.ROM: OS7 (ColecoVision BIOS) */ + if(Verbose) printf(" Opening COLECO.ROM..."); +- if(!(F=fopen("COLECO.ROM","rb"))) P="NOT FOUND"; ++ if(!(F=smart_fopen("COLECO.ROM","rb"))) P="NOT FOUND"; + else + { + if(fread(ROM_BIOS,1,0x2000,F)!=0x2000) P="SHORT FILE"; @@ -145,7 +188,7 @@ - if(!P) - { - if(Verbose) printf("OK\n Opening WRITER.ROM..."); -- if(F=fopen("WRITER.ROM","rb")) -+ if(F=smart_fopen("WRITER.ROM","rb")) - { - if(fread(ROM_WRITER,1,0x8000,F)==0x8000) ++AdamROMs; - fclose(F); + if(!P) + { + if(Verbose) printf("OK\n Opening WRITER.ROM..."); +- if(F=fopen("WRITER.ROM","rb")) ++ if(F=smart_fopen("WRITER.ROM","rb")) + { + if(fread(ROM_WRITER,1,0x8000,F)==0x8000) ++AdamROMs; + fclose(F); @@ -157,7 +200,7 @@ - if(!P&&AdamROMs) - { - if(Verbose) printf(" Opening EOS.ROM..."); -- if(F=fopen("EOS.ROM","rb")) -+ if(F=smart_fopen("EOS.ROM","rb")) - { - if(fread(ROM_EOS,1,0x2000,F)==0x2000) ++AdamROMs; - fclose(F); + if(!P&&AdamROMs) + { + if(Verbose) printf(" Opening EOS.ROM..."); +- if(F=fopen("EOS.ROM","rb")) ++ if(F=smart_fopen("EOS.ROM","rb")) + { + if(fread(ROM_EOS,1,0x2000,F)==0x2000) ++AdamROMs; + fclose(F); -- cgit v1.2.3