From d83a1a98c08e985de38dd9a13a2b80b52f012c4e Mon Sep 17 00:00:00 2001 From: array-in-a-matrix Date: Fri, 16 Sep 2022 21:12:44 -0400 Subject: [PATCH] this shit pisses me off so much --- pc-outro.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 6 deletions(-) diff --git a/pc-outro.c b/pc-outro.c index b8f7c1f..669f525 100644 --- a/pc-outro.c +++ b/pc-outro.c @@ -1,12 +1,11 @@ #include -#include "portaudio.h" - +#include +#include void shutdown(int os); void main (void){ int os; - #ifdef _WIN32 os = 1; #elif TARGET_OS_MAC @@ -19,15 +18,69 @@ void main (void){ os = 0; #endif - printf("%d", os); - + mpg123_handle *mh; + unsigned char *buffer; + size_t buffer_size; + size_t done; + int err; + + int driver; + ao_device *dev; + + ao_sample_format format; + int channels, encoding; + long rate; + + /* initializations */ + ao_initialize(); + driver = ao_default_driver_id(); + mpg123_init(); + mh = mpg123_new(NULL, &err); + buffer_size = mpg123_outblock(mh); + buffer = (unsigned char*) malloc(buffer_size * sizeof(unsigned char)); + + /* open the file and get the decoding format */ + mpg123_open(mh, "outro.mp3"); + mpg123_getformat(mh, &rate, &channels, &encoding); + + /* set the output format and open the output device */ + format.bits = mpg123_encsize(encoding) * 8; + format.rate = rate; + format.channels = channels; + format.byte_format = AO_FMT_NATIVE; + format.matrix = 0; + dev = ao_open_live(driver, &format, NULL); + + /* decode and play */ + while (mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK){ + ao_play(dev, buffer, done); + } + + /* clean up */ + free(buffer); + ao_close(dev); + mpg123_close(mh); + mpg123_delete(mh); + mpg123_exit(); + ao_shutdown(); + + + printf("Shutting down, goodbye friend!"); + shutdown(os); }; void shutdown(int os){ switch(os){ + case 1: + system("c:\\windows\\system32\\shutdown /i"); + break; + case 2: + case 4: + system("shutdown -h now"); + break; case 3: - // TODO: check init system; https://unix.stackexchange.com/questions/18209/detect-init-system-using-the-shell system("shutdown -P now"); + break; default: printf("Error: Could not determine OS"); }