song::song(char const * filename) { data = NULL; Name = strdup(filename); song_id = 0; rw = NULL; music = NULL; char realname[255]; strcpy(realname, get_filename_prefix()); strcat(realname, filename); uint32_t data_size; data = load_hmi(realname, data_size); if (!data) { printf("Sound: ERROR - could not load %s\n", realname); return; } rw = SDL_RWFromMem(data, data_size); music = Mix_LoadMUS_RW(rw, 0); if (!music) { printf("Sound: ERROR - %s while loading %s\n", Mix_GetError(), realname); return; } }
// // sound_init() // Initialise audio // int sound_init( int argc, char **argv ) { char *sfxdir, *datadir; // Disable sound if requested. if( flags.nosound ) { // User requested that sound be disabled printf( "Sound: Disabled (-nosound)\n" ); return 0; } // Check for the sfx directory, disable sound if we can't find it. datadir = get_filename_prefix(); sfxdir = (char *)malloc( strlen( datadir ) + 5 + 1 ); sprintf( sfxdir, "%ssfx", datadir ); #ifdef WIN32 // Attempting to fopen a directory under Windows will fail, and // opendir does not exist. Use GetFileAttributes instead. if( GetFileAttributes( sfxdir ) == INVALID_FILE_ATTRIBUTES ) #else FILE *fd = NULL; if( (fd = fopen( sfxdir,"r" )) == NULL ) #endif { // Didn't find the directory, so disable sound. printf( "Sound: Disabled (couldn't find the sfx directory %s)\n", sfxdir ); return 0; } free( sfxdir ); if (Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 1024) < 0) { printf( "Sound: Unable to open audio - %s\nSound: Disabled (error)\n", SDL_GetError() ); return 0; } Mix_AllocateChannels(50); int tempChannels = 0; Mix_QuerySpec(&audioObtained.freq, &audioObtained.format, &tempChannels); audioObtained.channels = tempChannels & 0xFF; sound_enabled = SFX_INITIALIZED | MUSIC_INITIALIZED; printf( "Sound: Enabled\n" ); // It's all good return sound_enabled; }
int file_manager::rf_open_file(char const *&filename, char const *mode) { net_address *fs_server_addr = NULL; if (filename[0] == '/' && filename[1] == '/') // passive server file reference? { filename += 2; fs_server_addr = prot->get_node_address(filename, DEFAULT_COMM_PORT, 0); if (!fs_server_addr) { printf("couldn not get address for %s\n", filename); return -1; } } else if (default_fs) fs_server_addr = default_fs->copy(); if (fs_server_addr) { net_socket *sock = proto->connect_to_server(fs_server_addr, net_socket::SOCKET_SECURE); delete fs_server_addr; if (!sock) { fprintf(stderr, "unable to connect\n"); return -1; } remote_file *rf = new remote_file(sock, filename, mode, remote_list); if (rf->open_failure()) { delete rf; return -1; } else { remote_list = rf; return rf->sock->get_fd(); } } // FIXME: AK - Should we keep this? // secure_filename(filename,mode); if (filename[0] == 0) return -1; int flags = 0; while (*mode) { if (*mode == 'w') flags |= O_CREAT | O_RDWR; else if (*mode == 'r') flags |= O_RDONLY; mode++; } char tmp_name[200]; if (get_filename_prefix() && filename[0] != '/') sprintf(tmp_name, "%s%s", get_filename_prefix(), filename); else strcpy(tmp_name, filename); int f = open(tmp_name, flags, S_IRWXU | S_IRWXG | S_IRWXO); if (f >= 0) { close(f); return -2; } return -1; }