//============================================================ // // output.c - Generic implementation of MAME output routines // // Copyright Nicola Salmoria and the MAME Team. // Visit http://mamedev.org for licensing and usage restrictions. // //============================================================ #if !defined(SDLMAME_WIN32) #include #include #include // MAME headers #include "emu.h" // MAMEOS headers #include "output.h" //============================================================ // CONSTANTS //============================================================ #define SDLMAME_OUTPUT "/tmp/sdlmame_out" /* * Using long/int should be sufficient on all * architectures. */ #ifdef PTR64 #define PID_FMT "%ld" #define PID_CAST long #else #define PID_FMT "%d" #define PID_CAST int #endif //============================================================ // TYPEDEFS //============================================================ //============================================================ // PRIVATE VARIABLES //============================================================ static FILE *output; //============================================================ // FUNCTION PROTOTYPES //============================================================ static void sdloutput_exit(running_machine &machine); static void notifier_callback(const char *outname, INT32 value, void *param); //============================================================ // osd_get_pid //============================================================ PID_CAST osd_getpid(void) { return (PID_CAST) getpid(); } //============================================================ // sdloutput_init //============================================================ void sdloutput_init(running_machine &machine) { int fildes; machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(sdloutput_exit), &machine)); fildes = open(SDLMAME_OUTPUT, O_RDWR | O_NONBLOCK); if (fildes < 0) { output = NULL; mame_printf_verbose("output: unable to open output notifier file %s\n", SDLMAME_OUTPUT); } else { output = fdopen(fildes, "w"); mame_printf_verbose("output: opened output notifier file %s\n", SDLMAME_OUTPUT); fprintf(output, "MAME " PID_FMT " START %s\n", osd_getpid(), machine.system().name); fflush(output); } output_set_notifier(NULL, notifier_callback, NULL); } //============================================================ // winoutput_exit //============================================================ static void sdloutput_exit(running_machine &machine) { if (output != NULL) { fprintf(output, "MAME " PID_FMT " STOP %s\n", osd_getpid(), machine.system().name); fflush(output); fclose(output); output = NULL; mame_printf_verbose("output: closed output notifier file\n"); } } //============================================================ // notifier_callback //============================================================ static void notifier_callback(const char *outname, INT32 value, void *param) { if (output != NULL) { fprintf(output, "OUT " PID_FMT " %s %d\n", osd_getpid(), outname, value); fflush(output); } } #else /* SDLMAME_WIN32 */ #include "emucore.h" //============================================================ // Stub for win32 //============================================================ void sdloutput_init(running_machine &machine) { } #endif /* SDLMAME_WIN32 */