From fb345e983e644ed54dc16419dc86efb39afeaa1a Mon Sep 17 00:00:00 2001 From: bjarni Date: Wed, 22 Dec 2004 21:12:36 +0000 Subject: [PATCH] (svn r1236) MorphOS: added make release like in OSX (tokai) MorphOS: cleaned up the code telling the difference between AmigaOS and MorphOS (tokai) --- Makefile | 32 ++++++++++++++++ dedicated.c | 9 ++++- intro_gui.c | 2 +- misc.c | 14 +++---- network.c | 68 +++++++++++++++++++-------------- network_core.h | 16 ++++++-- os/morphos/icons/OpenTTD.info | Bin 0 -> 8110 bytes os/morphos/icons/docs.info | Bin 0 -> 5390 bytes os/morphos/icons/document.info | Bin 0 -> 4451 bytes os/morphos/icons/drawer.info | Bin 0 -> 5390 bytes stdafx.h | 23 ++++++++++- ttd.c | 11 +++++- unix.c | 5 +++ 13 files changed, 137 insertions(+), 43 deletions(-) create mode 100755 os/morphos/icons/OpenTTD.info create mode 100755 os/morphos/icons/docs.info create mode 100644 os/morphos/icons/document.info create mode 100755 os/morphos/icons/drawer.info diff --git a/Makefile b/Makefile index e974e4920a..e63ee0526f 100644 --- a/Makefile +++ b/Makefile @@ -748,6 +748,38 @@ lang/%.lng: lang/%.txt $(STRGEN) lang/english.txt winres.o: ttd.rc windres -o $@ $< +ifdef MORPHOS +release: all + @rm -fr "/t/openttd-$(RELEASE)-morphos.lha" + @mkdir -p "/t/" + @mkdir -p "/t/openttd-$(RELEASE)-morphos" + @mkdir -p "/t/openttd-$(RELEASE)-morphos/docs" + @mkdir -p "/t/openttd-$(RELEASE)-morphos/data" + @mkdir -p "/t/openttd-$(RELEASE)-morphos/lang" + @cp -R $(TTD) "/t/openttd-$(RELEASE)-morphos/" + @cp data/* "/t/openttd-$(RELEASE)-morphos/data/" + @cp lang/*.lng "/t/openttd-$(RELEASE)-morphos/lang/" + @cp readme.txt "/t/openttd-$(RELEASE)-morphos/docs/ReadMe" + @cp docs/console.txt "/t/openttd-$(RELEASE)-morphos/docs/Console" + @cp COPYING "/t/openttd-$(RELEASE)-morphos/docs/" + @cp changelog.txt "/t/openttd-$(RELEASE)-morphos/docs/ChangeLog" + @cp os/morphos/icons/openttd.info "/t/openttd-$(RELEASE)-morphos/$(TTD).info" + @cp os/morphos/icons/docs.info "/t/openttd-$(RELEASE)-morphos/docs.info" + @cp os/morphos/icons/drawer.info "/t/openttd-$(RELEASE)-morphos.info" + @cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/ReadMe.info" + @cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/Console.info" + @cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/COPYING.info" + @cp os/morphos/icons/document.info "/t/openttd-$(RELEASE)-morphos/docs/ChangeLog.info" + @strip --strip-all --strip-unneeded --remove-section .comment "/t/openttd-$(RELEASE)-morphos/$(TTD)" + @lha a -r "t:openttd-$(RELEASE)-morphos.lha" "t:openttd-$(RELEASE)-morphos" + @lha a "t:openttd-$(RELEASE)-morphos.lha" "t:openttd-$(RELEASE)-morphos.info" + @rm -fr "/t/openttd-$(RELEASE)-morphos" + @rm -fr "/t/openttd-$(RELEASE)-morphos.info" + @echo "Release archive can be found in RAM:t/ now." + +.PHONY: release +endif + ifdef OSX release: all @mkdir -p "OpenTTD $(RELEASE)" diff --git a/dedicated.c b/dedicated.c index 5197dd924c..051573bee7 100644 --- a/dedicated.c +++ b/dedicated.c @@ -20,6 +20,13 @@ # include # define STDIN 0 /* file descriptor for standard input */ #endif +#ifdef __MORPHOS__ +/* voids the fork, option will be disabled for morphos build anyway, because MorphOS + * doesn't support forking (could only implemented with lots of code changes here). + */ +int morphos_dummy_fork() { return -1; } +#define fork morphos_dummy_fork +#endif // This file handles all dedicated-server in- and outputs @@ -167,7 +174,7 @@ static int DedicatedVideoMainLoop() next_tick = (tim.tv_usec / 1000) + 30 + (tim.tv_sec * 1000); #endif - /* Siganl handlers */ + /* Signal handlers */ #ifdef UNIX signal(SIGTERM, DedicatedSignalHandler); signal(SIGINT, DedicatedSignalHandler); diff --git a/intro_gui.c b/intro_gui.c index 74716f0ca4..a4f77fcb03 100644 --- a/intro_gui.c +++ b/intro_gui.c @@ -198,7 +198,7 @@ static void AskAbandonGameWndProc(Window *w, WindowEvent *e) { SetDParam(0, STR_OSNAME_BEOS); #elif defined(__MORPHOS__) SetDParam(0, STR_OSNAME_MORPHOS); -#elif defined(__AMIGA__) /* note: __AMIGA__ is defined under MorphOS too, so it must be after __MORPHOS__. */ +#elif defined(__AMIGA__) SetDParam(0, STR_OSNAME_AMIGAOS); #else SetDParam(0, STR_0134_UNIX); diff --git a/misc.c b/misc.c index 8ce6e8ce01..dcb18656dc 100644 --- a/misc.c +++ b/misc.c @@ -107,14 +107,14 @@ void SetDate(uint date) // multi os compatible sleep function -#if defined(__AMIGA__) +#ifdef __AMIGA__ // usleep() implementation # include # include - static struct Device *TimerBase = NULL; - static struct MsgPort *TimerPort = NULL; - static struct timerequest *TimerRequest = NULL; + extern struct Device *TimerBase = NULL; + extern struct MsgPort *TimerPort = NULL; + extern struct timerequest *TimerRequest = NULL; #endif // __AMIGA__ void CSleep(int milliseconds) @@ -123,13 +123,13 @@ void CSleep(int milliseconds) Sleep(milliseconds); #endif #if defined(UNIX) - #if !defined(__BEOS__) && !defined(__AMIGAOS__) + #if !defined(__BEOS__) && !defined(__AMIGA__) usleep(milliseconds * 1000); #endif #ifdef __BEOS__ snooze(milliseconds * 1000); #endif - #if defined(__AMIGAOS__) && !defined(__MORPHOS__) + #if defined(__AMIGA__) { ULONG signals; ULONG TimerSigBit = 1 << TimerPort->mp_SigBit; @@ -145,7 +145,7 @@ void CSleep(int milliseconds) } WaitIO((struct IORequest *)TimerRequest); } - #endif // __AMIGAOS__ && !__MORPHOS__ + #endif // __AMIGA__ #endif } diff --git a/network.c b/network.c index 46f8dddb3c..3f2d1e9d4b 100644 --- a/network.c +++ b/network.c @@ -23,6 +23,11 @@ #include /* va_list */ #include "md5.h" +#ifdef __MORPHOS__ +// the library base is required here +struct Library *SocketBase = NULL; +#endif + // The listen socket for the server static SOCKET _listensocket; @@ -1255,7 +1260,39 @@ static void NetworkGenerateUniqueId(void) void NetworkStartUp(void) { DEBUG(net, 3) ("[NET][Core] Starting network..."); - // Network is available + + #if defined(__MORPHOS__) || defined(__AMIGA__) + /* + * IMPORTANT NOTE: SocketBase needs to be initialized before we use _any_ + * network related function, else: crash. + */ + { + DEBUG(misc,3) ("[NET][Core] Loading bsd socket library"); + if (!(SocketBase = OpenLibrary("bsdsocket.library", 4))) { + DEBUG(net, 0) ("[NET][Core] Error: couldn't open bsdsocket.library version 4. Network not available."); + _network_available = false; + return; + } + + #if defined(__AMIGA__) + // for usleep() implementation (only required for legacy AmigaOS builds) + if ( (TimerPort = CreateMsgPort()) ) { + if ( (TimerRequest = (struct timerequest *) CreateIORequest(TimerPort, sizeof(struct timerequest))) ) { + if ( OpenDevice("timer.device", UNIT_MICROHZ, (struct IORequest *) TimerRequest, 0) == 0 ) { + if ( !(TimerBase = TimerRequest->tr_node.io_Device) ) { + // free ressources... + DEBUG(net, 0) ("[NET][Core] Error: couldn't initialize timer. Network not available."); + _network_available = false; + return; + } + } + } + } + #endif // __AMIGA__ + } + #endif // __MORPHOS__ / __AMIGA__ + + // Network is available _network_available = true; _network_dedicated = false; _network_last_advertise_date = 0; @@ -1287,33 +1324,6 @@ void NetworkStartUp(void) return; } } - #else - #if defined(__MORPHOS__) || defined(__AMIGA__) - { - DEBUG(misc,3) ("[NET][Core] Loading bsd socket library"); - if (!(SocketBase = OpenLibrary("bsdsocket.library", 4))) { - DEBUG(net, 0) ("[NET][Core] Error: couldn't open bsdsocket.library version 4. Network not available."); - _network_available = false; - return; - } - - #if defined(__AMIGA__) - // for usleep() implementation (only required for legacy AmigaOS builds) - if ( (TimerPort = CreateMsgPort()) ) { - if ( (TimerRequest = (struct timerequest *) CreateIORequest(TimerPort, sizeof(struct timerequest))) ) { - if ( OpenDevice("timer.device", UNIT_MICROHZ, (struct IORequest *) TimerRequest, 0) == 0 ) { - if ( !(TimerBase = TimerRequest->tr_node.io_Device) ) { - // free ressources... - DEBUG(net, 0) ("[NET][Core] Error: couldn't initialize timer. Network not available."); - _network_available = false; - return; - } - } - } - } - #endif // __AMIGA__ - } - #endif // __MORPHOS__ / __AMIGA__ #endif // WIN32 NetworkInitialize(); @@ -1331,7 +1341,7 @@ void NetworkShutDown(void) #if defined(__MORPHOS__) || defined(__AMIGA__) { // free allocated ressources - #if !defined(__MORPHOS__) + #if defined(__AMIGA__) if (TimerBase) { CloseDevice((struct IORequest *) TimerRequest); } if (TimerRequest) { DeleteIORequest(TimerRequest); } if (TimerPort) { DeleteMsgPort(TimerPort); } diff --git a/network_core.h b/network_core.h index 37c51cd5d3..4eaea2d81d 100644 --- a/network_core.h +++ b/network_core.h @@ -52,7 +52,7 @@ typedef struct ifreq IFREQ; # include # include # include -# if !defined(SUNOS) +# if !defined(SUNOS) && !defined(__MORPHOS__) # include // If for any reason ifaddrs.h does not exist on a system, remove define below // and an other system will be used to fetch ips from the system @@ -71,7 +71,8 @@ typedef struct ifreq IFREQ; # include # include // required for Open/CloseLibrary() # if defined(__MORPHOS__) -# include // FION#? defines +# include // FIO* defines +# include // SIO* defines # else // __AMIGA__ # include # endif @@ -80,8 +81,17 @@ typedef struct ifreq IFREQ; # define closesocket(s) CloseSocket(s) # define GET_LAST_ERROR() Errno() # define ioctlsocket(s,request,status) IoctlSocket((LONG)s,(ULONG)request,(char*)status) +# define ioctl ioctlsocket - struct Library *SocketBase = NULL; + typedef unsigned int in_addr_t; + extern struct Library *SocketBase; + +# ifdef __AMIGA__ + // for usleep() implementation + extern struct Device *TimerBase; + extern struct MsgPort *TimerPort; + extern struct timerequest *TimerRequest; +# endif #endif // __MORPHOS__ || __AMIGA__ #endif // NETWORK_CORE_H diff --git a/os/morphos/icons/OpenTTD.info b/os/morphos/icons/OpenTTD.info new file mode 100755 index 0000000000000000000000000000000000000000..fd6cafa49a61bd03455e983d0041c6f1c558af51 GIT binary patch literal 8110 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 literal 0 HcmV?d00001 diff --git a/os/morphos/icons/document.info b/os/morphos/icons/document.info new file mode 100644 index 0000000000000000000000000000000000000000..877ea3575f767b3f10d68d4da0a28e559253cd91 GIT binary patch literal 4451 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 CQI^*L literal 0 HcmV?d00001 diff --git a/os/morphos/icons/drawer.info b/os/morphos/icons/drawer.info new file mode 100755 index 0000000000000000000000000000000000000000..149ef7e101f93210509c256b4794f3c3c2fd78fc GIT binary patch literal 5390 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 literal 0 HcmV?d00001 diff --git a/stdafx.h b/stdafx.h index 15a59c7a0e..30313085be 100644 --- a/stdafx.h +++ b/stdafx.h @@ -32,6 +32,27 @@ #include #endif +#ifdef __MORPHOS__ +// morphos defines certain amiga defines per default, we undefine them +// here to make the rest of source less messy and more clear what is +// required for morphos and what for amigaos +# ifdef amigaos +# undef amigaos +# endif +# ifdef __amigaos__ +# undef __amigaos__ +# endif +# ifdef __AMIGA__ +# undef __AMIGA__ +# endif +# ifdef AMIGA +# undef AMIGA +# endif +# ifdef amiga +# undef amiga +# endif +#endif /* __MORPHOS__ */ + #define BSWAP32(x) ((((x) >> 24) & 0xFF) | (((x) >> 8) & 0xFF00) | (((x) << 8) & 0xFF0000) | (((x) << 24) & 0xFF000000)) #define BSWAP16(x) ((x) >> 8 | (x) << 8) @@ -182,7 +203,7 @@ assert_compile(sizeof(uint8) == 1); #define CloseConnection OTTD_CloseConnection #endif -#if !(defined(__AMIGA__) && !defined(__MORPHOS__)) +#ifdef __AMIGA__ // it seems AmigaOS already have a Point declared #define Point OTTD_AMIGA_POINT #endif diff --git a/ttd.c b/ttd.c index b7fbbffc9a..c3647c2534 100644 --- a/ttd.c +++ b/ttd.c @@ -314,7 +314,9 @@ static void showhelp() " -G seed = Set random seed\n" " -n [ip#player:port] = Start networkgame\n" " -D = Start dedicated server\n" + #if !defined(__MORPHOS__) && !defined(__AMIGA__) " -f = Fork into the background (dedicated only)\n" + #endif " -i = Force to use the DOS palette (use this if you see a lot of pink)\n" " -p #player = Player as #player (deprecated) (network only)\n" ); @@ -526,6 +528,7 @@ int ttd_main(int argc, char* argv[]) bool network = false; char *network_conn = NULL; char *language = NULL; + char *optformat; char musicdriver[16], sounddriver[16], videodriver[16]; int resolution[2] = {0,0}; uint startdate = -1; @@ -541,7 +544,13 @@ int ttd_main(int argc, char* argv[]) // a letter means: it accepts that param (e.g.: -h) // a ':' behind it means: it need a param (e.g.: -m) // a '::' behind it means: it can optional have a param (e.g.: -d) - MyGetOptInit(&mgo, argc-1, argv+1, "m:s:v:hDfn::l:eit:d::r:g::G:p:"); + #if !defined(__MORPHOS__) && !defined(__AMIGA__) + optformat = "m:s:v:hDfn::l:eit:d::r:g::G:p:"; + #else + optformat = "m:s:v:hDn::l:eit:d::r:g::G:p:"; // no fork option + #endif + + MyGetOptInit(&mgo, argc-1, argv+1, optformat); while ((i = MyGetOpt(&mgo)) != -1) { switch(i) { case 'm': ttd_strlcpy(musicdriver, mgo.opt, sizeof(musicdriver)); break; diff --git a/unix.c b/unix.c index 6e43d28788..ca4d19c8bc 100644 --- a/unix.c +++ b/unix.c @@ -23,6 +23,11 @@ ULONG __stack = (1024*1024)*2; // maybe not that much is needed actually ;) #endif /* __MORPHOS__ */ +#ifdef __AMIGA__ +#warning add stack symbol to avoid that user needs to set stack manually (tokai) +// ULONG __stack = +#endif + static char *_fios_path; static char *_fios_save_path; static char *_fios_scn_path;