void boot_init(int* argc, char** argv) { int error; fail_if(glfwInit() == false); // OpenGL version 3 glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 0); // No window resize glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, true); // 400% gameboy scale, 5 bit rgb with 1 bit alpha, 8 bit z buffer fail_if(glfwOpenWindow(160 * 4, 144 * 4, 5, 5, 5, 1, 8, 0, GLFW_WINDOW) == false); glfwSetWindowTitle(""); glfwEnable(GLFW_AUTO_POLL_EVENTS); // Automatically poll input on swap glfwSwapInterval(1); // 0: vsync off, 1: vsync on printf("Renderer: %s\n", glGetString(GL_RENDERER)); printf("GL Version: %s\n", glGetString(GL_VERSION)); printf("Using GLSL: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); error = glewInit(); if (error != GLEW_OK) { fprintf(stderr, "GLEW error: %s\n", glewGetErrorString(error)); } printf("GL Extension Wrangler: %s\n", glewGetString(GLEW_VERSION)); // Load audio fail_if(alutInit(argc, argv) == false); glClearColor(206.0/255.0, 230.0/255.0, 165.0/255.0, 1.0f); glEnable(GL_SCISSOR_TEST); // For geom culling // transparency glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // z-buffer glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); // Set up perspective glOrtho(0, 160, 144, 0, -1.0, 1.0); glDepthRange(-1.0f, 1.0f); glViewport(0, 0, 160 * 4, 144 * 4); // This is where Ill put the logo thing unsigned logo = bitmap_load("bmp/logo.bmp"); unsigned logo_vbo; float t0, t1, dt; float logo_x = 16, logo_y = -80; float logo_v[] = { 0, 0, 0, 1.0 - 0, 0, 128, 0, 1.0 - 1, 128, 128, 1, 1.0 - 1, 128, 0, 1, 1.0 - 0, }; glGenBuffers(1, &logo_vbo); glBindBuffer(GL_ARRAY_BUFFER, logo_vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(logo_v)*sizeof(float), logo_v, GL_STATIC_DRAW); Pipeline* logo_program = pipeline_new( shader_new(SHADER_VERTEX, "shader/logo.vert"), shader_new(SHADER_FRAGMENT, "shader/logo.frag")); pipeline_attribute(logo_program, "coord", 0); pipeline_attribute(logo_program, "st", 1); pipeline_uniform(logo_program, "pos", 0); pipeline_uniform(logo_program, "tex", 1); glUseProgram(logo_program->id); // Bind the logo to texture 0 glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, logo); glUniform1i(logo_program->uniform[1], 0); // Bind logo vbo glBindBuffer(GL_ARRAY_BUFFER, logo_vbo); glEnableVertexAttribArray(logo_program->attribute[0]); glVertexAttribPointer(logo_program->attribute[0], 2, GL_FLOAT, false, 4*sizeof(float), (void*)0); glEnableVertexAttribArray(logo_program->attribute[1]); glVertexAttribPointer(logo_program->attribute[1], 2, GL_FLOAT, false, 4*sizeof(float), (void*)(2 * sizeof(float))); // load sound unsigned sound_source; alGenSources(1, &sound_source); Sound* ding = sound_load("sound/ding.ogg"); alSourcei(sound_source, AL_BUFFER, ding->buffer); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glfwSwapBuffers(); sleep(1); t0 = glfwGetTime(); while (logo_y < 8) { t1 = glfwGetTime(); dt = t1 - t0; t0 = t1; logo_y += 50 * dt; glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glUniform2f(logo_program->uniform[0], roundf(logo_x), roundf(logo_y)); // Render logo glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glfwSwapBuffers(); } alSourcePlay(sound_source); glDisableVertexAttribArray(logo_program->attribute[0]); glDisableVertexAttribArray(logo_program->attribute[1]); sleep(1); }
static void xchat_init (void) { char buf[3068]; const char *cs = NULL; #ifdef WIN32 WSADATA wsadata; #ifdef USE_IPV6 if (WSAStartup (0x0202, &wsadata) != 0) { MessageBox (NULL, "Cannot find winsock 2.2+", "Error", MB_OK); exit (0); } #else WSAStartup (0x0101, &wsadata); #endif /* !USE_IPV6 */ #endif /* !WIN32 */ #ifdef USE_SIGACTION struct sigaction act; /* ignore SIGPIPE's */ act.sa_handler = SIG_IGN; act.sa_flags = 0; sigemptyset (&act.sa_mask); sigaction (SIGPIPE, &act, NULL); /* Deal with SIGUSR1's & SIGUSR2's */ act.sa_sigaction = sigusr1_handler; act.sa_flags = 0; sigemptyset (&act.sa_mask); sigaction (SIGUSR1, &act, NULL); act.sa_sigaction = sigusr2_handler; act.sa_flags = 0; sigemptyset (&act.sa_mask); sigaction (SIGUSR2, &act, NULL); #else #ifndef WIN32 /* good enough for these old systems */ signal (SIGPIPE, SIG_IGN); #endif #endif if (g_get_charset (&cs)) prefs.utf8_locale = TRUE; load_text_events (); sound_load (); notify_load (); ignore_load (); snprintf (buf, sizeof (buf), "NAME %s~%s~\n" "CMD query %%s\n\n" "NAME %s~%s~\n" "CMD send %%s\n\n" "NAME %s~%s~\n" "CMD whois %%s %%s\n\n" "NAME %s~%s~\n" "CMD notify -n ASK %%s\n\n" "NAME SUB\n" "CMD %s\n\n" "NAME %s\n" "CMD op %%a\n\n" "NAME %s\n" "CMD deop %%a\n\n" "NAME SEP\n" "CMD \n\n" "NAME %s\n" "CMD voice %%a\n\n" "NAME %s\n" "CMD devoice %%a\n" "NAME SEP\n" "CMD \n\n" "NAME SUB\n" "CMD %s\n\n" "NAME %s\n" "CMD kick %%s\n\n" "NAME %s\n" "CMD ban %%s\n\n" "NAME SEP\n" "CMD \n\n" "NAME %s *!*@*.host\n" "CMD ban %%s 0\n\n" "NAME %s *!*@domain\n" "CMD ban %%s 1\n\n" "NAME %s *!*user@*.host\n" "CMD ban %%s 2\n\n" "NAME %s *!*user@domain\n" "CMD ban %%s 3\n\n" "NAME SEP\n" "CMD \n\n" "NAME %s *!*@*.host\n" "CMD kickban %%s 0\n\n" "NAME %s *!*@domain\n" "CMD kickban %%s 1\n\n" "NAME %s *!*user@*.host\n" "CMD kickban %%s 2\n\n" "NAME %s *!*user@domain\n" "CMD kickban %%s 3\n\n" "NAME ENDSUB\n" "CMD \n\n" "NAME ENDSUB\n" "CMD \n\n", _("_Open Dialog Window"), "xchat-dialog", _("_Send a File"), "gtk-floppy", _("_User Info (WhoIs)"), "gtk-info", _("_Add to Friends List"), "gtk-add", _("O_perator Actions"), _("Give Ops"), _("Take Ops"), _("Give Voice"), _("Take Voice"), _("Kick/Ban"), _("Kick"), _("Ban"), _("Ban"), _("Ban"), _("Ban"), _("Ban"), _("KickBan"), _("KickBan"), _("KickBan"), _("KickBan")); list_loadconf ("popup.conf", &popup_list, buf); snprintf (buf, sizeof (buf), "NAME %s\n" "CMD part\n\n" "NAME %s\n" "CMD getstr # join \"%s\"\n\n" "NAME %s\n" "CMD quote LINKS\n\n" "NAME %s\n" "CMD ping\n\n" "NAME TOGGLE %s\n" "CMD irc_hide_version\n\n", _("Leave Channel"), _("Join Channel..."), _("Enter Channel to Join:"), _("Server Links"), _("Ping Server"), _("Hide Version")); list_loadconf ("usermenu.conf", &usermenu_list, buf); snprintf (buf, sizeof (buf), "NAME %s\n" "CMD op %%a\n\n" "NAME %s\n" "CMD deop %%a\n\n" "NAME %s\n" "CMD ban %%s\n\n" "NAME %s\n" "CMD getstr \"%s\" \"kick %%s\" \"%s\"\n\n" "NAME %s\n" "CMD send %%s\n\n" "NAME %s\n" "CMD query %%s\n\n", _("Op"), _("DeOp"), _("Ban"), _("Kick"), _("bye"), _("Enter reason to kick %s:"), _("Sendfile"), _("Dialog")); list_loadconf ("buttons.conf", &button_list, buf); snprintf (buf, sizeof (buf), "NAME %s\n" "CMD whois %%s %%s\n\n" "NAME %s\n" "CMD send %%s\n\n" "NAME %s\n" "CMD dcc chat %%s\n\n" "NAME %s\n" "CMD clear\n\n" "NAME %s\n" "CMD ping %%s\n\n", _("WhoIs"), _("Send"), _("Chat"), _("Clear"), _("Ping")); list_loadconf ("dlgbuttons.conf", &dlgbutton_list, buf); list_loadconf ("tabmenu.conf", &tabmenu_list, NULL); list_loadconf ("ctcpreply.conf", &ctcp_list, defaultconf_ctcp); list_loadconf ("commands.conf", &command_list, defaultconf_commands); list_loadconf ("replace.conf", &replace_list, defaultconf_replace); list_loadconf ("urlhandlers.conf", &urlhandler_list, defaultconf_urlhandlers); servlist_init (); /* load server list */ /* if we got a URL, don't open the server list GUI */ if (!prefs.slist_skip && !arg_url) fe_serverlist_open (NULL); /* turned OFF via -a arg */ if (!arg_dont_autoconnect) { /* do any auto connects */ if (!servlist_have_auto ()) /* if no new windows open .. */ { /* and no serverlist gui ... */ if (prefs.slist_skip || arg_url) /* we'll have to open one. */ new_ircwindow (NULL, NULL, SESS_SERVER, 0); } else { fe_idle_add (xchat_auto_connect, NULL); } } else { if (prefs.slist_skip || arg_url) new_ircwindow (NULL, NULL, SESS_SERVER, 0); } }
/** * @brief Makes the list of available sounds. */ static int sound_makeList (void) { char** files; uint32_t nfiles,i; char path[PATH_MAX]; char tmp[64]; int len, suflen, flen; int mem; if (sound_disabled) return 0; /* get the file list */ files = ndata_list( SOUND_PREFIX, &nfiles ); /* load the profiles */ mem = 0; suflen = strlen(SOUND_SUFFIX_WAV); for (i=0; i<nfiles; i++) { flen = strlen(files[i]); /* Must be longer than suffix. */ if (flen < suflen) { free(files[i]); continue; } /* Make sure is wav or ogg. */ if ((strncmp( &files[i][flen - suflen], SOUND_SUFFIX_WAV, suflen)!=0) && (strncmp( &files[i][flen - suflen], SOUND_SUFFIX_OGG, suflen)!=0)) { free(files[i]); continue; } /* grow the selection size */ sound_nlist++; if (sound_nlist > mem) { /* we must grow */ mem += 32; /* we'll overallocate most likely */ sound_list = realloc( sound_list, mem*sizeof(alSound)); } /* remove the suffix */ len = flen - suflen; strncpy( tmp, files[i], len ); tmp[len] = '\0'; /* Load the sound. */ sound_list[sound_nlist-1].name = strdup(tmp); snprintf( path, PATH_MAX, SOUND_PREFIX"%s", files[i] ); if (sound_load( &sound_list[sound_nlist-1], path )) { sound_nlist--; /* Song not actually added. */ } /* Clean up. */ free(files[i]); } /* shrink to minimum ram usage */ sound_list = realloc( sound_list, sound_nlist*sizeof(alSound)); DEBUG("Loaded %d sound%s", sound_nlist, (sound_nlist==1)?"":"s"); /* More clean up. */ free(files); return 0; }