static char* GetAppName() { #if defined(__LINUX__) || defined(__FREEBSD__) char *spot; char procfile[1024]; char linkfile[1024]; int linksize; #if defined(__LINUX__) SDL_snprintf(procfile, sizeof(procfile), "/proc/%d/exe", getpid()); #elif defined(__FREEBSD__) SDL_snprintf(procfile, sizeof(procfile), "/proc/%d/file", getpid()); #endif linksize = readlink(procfile, linkfile, sizeof(linkfile) - 1); if (linksize > 0) { linkfile[linksize] = '\0'; spot = SDL_strrchr(linkfile, '/'); if (spot) { return SDL_strdup(spot + 1); } else { return SDL_strdup(linkfile); } } #endif /* __LINUX__ || __FREEBSD__ */ return SDL_strdup("SDL_App"); }
/* Start up the SDL app */ int Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject array) { int i; int argc; int status; /* This interface could expand with ABI negotiation, callbacks, etc. */ SDL_Android_Init(env, cls); JavaVM *jvm; env->GetJavaVM(&jvm); loom_set_javavm((void *) jvm); SDL_SetMainReady(); /* Prepare the arguments. */ int len = env->GetArrayLength(static_cast<jarray>(array)); char* argv[1 + len + 1]; argc = 0; /* Use the name "app_process" so PHYSFS_platformCalcBaseDir() works. https://bitbucket.org/MartinFelis/love-android-sdl2/issue/23/release-build-crash-on-start */ argv[argc++] = SDL_strdup("app_process"); for (i = 0; i < len; ++i) { const char* utf; char* arg = NULL; jstring string = static_cast<jstring>(env->GetObjectArrayElement(static_cast<jobjectArray>(array), i)); if (string) { utf = env->GetStringUTFChars(string, 0); if (utf) { arg = SDL_strdup(utf); env->ReleaseStringUTFChars(string, utf); } env->DeleteLocalRef(string); } if (!arg) { arg = SDL_strdup(""); } argv[argc++] = arg; } argv[argc] = NULL; /* Run the application. */ status = SDL_main(argc, argv); /* Release the arguments. */ for (i = 0; i < argc; ++i) { SDL_free(argv[i]); } /* Do not issue an exit or the whole application will terminate instead of just the SDL thread */ /* exit(status); */ return status; }
SDL_bool SDL_SetHintWithPriority(const char *name, const char *value, SDL_HintPriority priority) { const char *env; SDL_Hint *hint; SDL_HintWatch *entry; if (!name || !value) { return SDL_FALSE; } env = SDL_getenv(name); if (env && priority < SDL_HINT_OVERRIDE) { return SDL_FALSE; } for (hint = SDL_hints; hint; hint = hint->next) { if (SDL_strcmp(name, hint->name) == 0) { if (priority < hint->priority) { return SDL_FALSE; } if (!hint->value || !value || SDL_strcmp(hint->value, value) != 0) { for (entry = hint->callbacks; entry; ) { /* Save the next entry in case this one is deleted */ SDL_HintWatch *next = entry->next; entry->callback(entry->userdata, name, hint->value, value); entry = next; } if (hint->value) { SDL_free(hint->value); } if (value) { hint->value = SDL_strdup(value); } else { hint->value = NULL; } } hint->priority = priority; return SDL_TRUE; } } /* Couldn't find the hint, add a new one */ hint = (SDL_Hint *)SDL_malloc(sizeof(*hint)); if (!hint) { return SDL_FALSE; } hint->name = SDL_strdup(name); hint->value = value ? SDL_strdup(value) : NULL; hint->priority = priority; hint->callbacks = NULL; hint->next = SDL_hints; SDL_hints = hint; return SDL_TRUE; }
static void initialize_data_path() { char *base_path = SDL_GetBasePath(); if (base_path) { data_path = SDL_strdup(base_path); SDL_free(base_path); } else data_path = SDL_strdup("./"); }
/* Find out what class name we should use * Based on src/video/x11/SDL_x11video.c */ static char * get_classname() { /* !!! FIXME: this is probably wrong, albeit harmless in many common cases. From protocol spec: "The surface class identifies the general class of applications to which the surface belongs. A common convention is to use the file name (or the full path if it is a non-standard location) of the application's .desktop file as the class." */ char *spot; #if defined(__LINUX__) || defined(__FREEBSD__) char procfile[1024]; char linkfile[1024]; int linksize; #endif /* First allow environment variable override */ spot = SDL_getenv("SDL_VIDEO_WAYLAND_WMCLASS"); if (spot) { return SDL_strdup(spot); } else { /* Fallback to the "old" envvar */ spot = SDL_getenv("SDL_VIDEO_X11_WMCLASS"); if (spot) { return SDL_strdup(spot); } } /* Next look at the application's executable name */ #if defined(__LINUX__) || defined(__FREEBSD__) #if defined(__LINUX__) SDL_snprintf(procfile, SDL_arraysize(procfile), "/proc/%d/exe", getpid()); #elif defined(__FREEBSD__) SDL_snprintf(procfile, SDL_arraysize(procfile), "/proc/%d/file", getpid()); #else #error Where can we find the executable name? #endif linksize = readlink(procfile, linkfile, sizeof(linkfile) - 1); if (linksize > 0) { linkfile[linksize] = '\0'; spot = SDL_strrchr(linkfile, '/'); if (spot) { return SDL_strdup(spot + 1); } else { return SDL_strdup(linkfile); } } #endif /* __LINUX__ || __FREEBSD__ */ /* Finally use the default we've used forever */ return SDL_strdup("SDL_App"); }
/* Start up the SDL app */ JNIEXPORT int JNICALL Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject array, jstring filesDir) { int i; int argc; int status; /* This interface could expand with ABI negotiation, callbacks, etc. */ SDL_Android_Init(env, cls, filesDir); SDL_SetMainReady(); /* Prepare the arguments. */ int len = (*env)->GetArrayLength(env, array); char* argv[len + 1]; argc = 0; // Urho3D: avoid hard-coding the "app_process" as the first argument for (i = 0; i < len; ++i) { const char* utf; char* arg = NULL; jstring string = (*env)->GetObjectArrayElement(env, array, i); if (string) { utf = (*env)->GetStringUTFChars(env, string, 0); if (utf) { arg = SDL_strdup(utf); (*env)->ReleaseStringUTFChars(env, string, utf); } (*env)->DeleteLocalRef(env, string); } if (!arg) { arg = SDL_strdup(""); } argv[argc++] = arg; } argv[argc] = NULL; /* Run the application. */ status = SDL_main(argc, argv); /* Release the arguments. */ for (i = 0; i < argc; ++i) { SDL_free(argv[i]); } /* Do not issue an exit or the whole application will terminate instead of just the SDL thread */ /* exit(status); */ return status; }
void video_set_driver( const char *driver_name ) { if ( video_options.driver != NULL ) { SDL_free( video_options.driver ); } video_options.driver = SDL_strdup( driver_name ); }
static int GetDisplayNumber() { const char *display = SDL_getenv("DISPLAY"); const char *p = NULL;; int number = 0; if (display == NULL) return 0; display = SDL_strchr(display, ':'); if (display == NULL) return 0; display++; p = SDL_strchr(display, '.'); if (p == NULL && display != NULL) { number = SDL_strtod(display, NULL); } else { char *buffer = SDL_strdup(display); buffer[p - display] = '\0'; number = SDL_strtod(buffer, NULL); SDL_free(buffer); } return number; }
int Android_AddHaptic(int device_id, const char *name) { SDL_hapticlist_item *item; item = (SDL_hapticlist_item *) SDL_calloc(1, sizeof (SDL_hapticlist_item)); if (item == NULL) { return -1; } item->device_id = device_id; item->name = SDL_strdup (name); if (item->name == NULL) { SDL_free (item); return -1; } if (SDL_hapticlist_tail == NULL) { SDL_hapticlist = SDL_hapticlist_tail = item; } else { SDL_hapticlist_tail->next = item; SDL_hapticlist_tail = item; } ++numhaptics; return numhaptics; }
SDL_bool SDL_IBus_Init(void) { SDL_bool result = SDL_FALSE; SDL_DBusContext *dbus = SDL_DBus_GetContext(); if(dbus){ char *addr_file = IBus_GetDBusAddressFilename(); if(!addr_file){ return SDL_FALSE; } ibus_addr_file = SDL_strdup(addr_file); char *addr = IBus_ReadAddressFromFile(addr_file); inotify_fd = inotify_init(); fcntl(inotify_fd, F_SETFL, O_NONBLOCK); char *addr_file_dir = SDL_strrchr(addr_file, '/'); if(addr_file_dir){ *addr_file_dir = 0; } inotify_add_watch(inotify_fd, addr_file, IN_CREATE | IN_MODIFY); SDL_free(addr_file); result = IBus_SetupConnection(dbus, addr); SDL_free(addr); } return result; }
static char * IBus_ReadAddressFromFile(const char *file_path) { char addr_buf[1024]; SDL_bool success = SDL_FALSE; FILE *addr_file; addr_file = fopen(file_path, "r"); if (!addr_file) { return NULL; } while (fgets(addr_buf, sizeof(addr_buf), addr_file)) { if (SDL_strncmp(addr_buf, "IBUS_ADDRESS=", sizeof("IBUS_ADDRESS=")-1) == 0) { size_t sz = SDL_strlen(addr_buf); if (addr_buf[sz-1] == '\n') addr_buf[sz-1] = 0; if (addr_buf[sz-2] == '\r') addr_buf[sz-2] = 0; success = SDL_TRUE; break; } } fclose(addr_file); if (success) { return SDL_strdup(addr_buf + (sizeof("IBUS_ADDRESS=") - 1)); } else { return NULL; } }
static void AddDrive(char *drive, struct stat *stbuf) { int i; if ( SDL_numcds < MAX_DRIVES ) { for ( i=0; i<SDL_numcds; ++i ) { if ( stbuf->st_rdev == SDL_cdmode[i] ) { #ifdef DEBUG_CDROM fprintf(stderr, "Duplicate drive detected: %s == %s\n", drive, SDL_cdlist[i]); #endif return; } } i = SDL_numcds; SDL_cdlist[i] = SDL_strdup(drive); if ( SDL_cdlist[i] == NULL ) { SDL_OutOfMemory(); return; } SDL_cdmode[i] = stbuf->st_rdev; ++SDL_numcds; #ifdef DEBUG_CDROM fprintf(stderr, "Added CD-ROM drive: %s\n", drive); #endif } }
int Windows::exec (const std::string& command, std::vector<std::string>& arguments) const { std::string cmd = command; if (!arguments.empty()) cmd.append(" "); for (const std::string& argument : arguments) { cmd.append(argument); cmd.append(" "); } STARTUPINFO startupInfo; PROCESS_INFORMATION processInfo; char* commandPtr = SDL_strdup(cmd.c_str()); if (!CreateProcess(nullptr, (LPSTR) commandPtr, nullptr, nullptr, FALSE, CREATE_NO_WINDOW, NULL, nullptr, &startupInfo, &processInfo)) { SDL_free(commandPtr); return -1; } SDL_free(commandPtr); WaitForSingleObject(processInfo.hProcess, INFINITE); CloseHandle(processInfo.hProcess); CloseHandle(processInfo.hThread); return 0; }
int Mix_EachSoundFont(int (*function)(const char*, void*), void *data) { char *context, *path, *paths; const char* cpaths = Mix_GetSoundFonts(); if (!cpaths) { Mix_SetError("No SoundFonts have been requested"); return 0; } if (!(paths = SDL_strdup(cpaths))) { Mix_SetError("Insufficient memory to iterate over SoundFonts"); return 0; } #if defined(__MINGW32__) || defined(__MINGW64__) for (path = strtok(paths, ";"); path; path = strtok(NULL, ";")) { #elif defined(_WIN32) for (path = strtok_s(paths, ";", &context); path; path = strtok_s(NULL, ";", &context)) { #else for (path = strtok_r(paths, ":;", &context); path; path = strtok_r(NULL, ":;", &context)) { #endif if (!function(path, data)) { SDL_free(paths); return 0; } } SDL_free(paths); return 1; }
char * WIN_GetClipboardText(_THIS) { char *text; text = NULL; if (IsClipboardFormatAvailable(TEXT_FORMAT) && OpenClipboard(GetWindowHandle(_this))) { HANDLE hMem; LPTSTR tstr; hMem = GetClipboardData(TEXT_FORMAT); if (hMem) { tstr = (LPTSTR)GlobalLock(hMem); text = WIN_StringToUTF8(tstr); GlobalUnlock(hMem); } else { WIN_SetError("Couldn't get clipboard data"); } CloseClipboard(); } if (!text) { text = SDL_strdup(""); } return text; }
int SDL_SYS_JoystickInit(void) { /* First see if the user specified one or more joysticks to use */ if (SDL_getenv("SDL_JOYSTICK_DEVICE") != NULL) { char *envcopy, *envpath, *delim; envcopy = SDL_strdup(SDL_getenv("SDL_JOYSTICK_DEVICE")); envpath = envcopy; while (envpath != NULL) { delim = SDL_strchr(envpath, ':'); if (delim != NULL) { *delim++ = '\0'; } MaybeAddDevice(envpath); envpath = delim; } SDL_free(envcopy); } SDL_InitSteamControllers(SteamControllerConnectedCallback, SteamControllerDisconnectedCallback); #if SDL_USE_LIBUDEV return JoystickInitWithUdev(); #else return JoystickInitWithoutUdev(); #endif }
/* Add a CD-ROM drive to our list of valid drives */ static void AddDrive(char *drive, struct stat *stbuf) { int i; if ( SDL_numcds < MAX_DRIVES ) { /* Check to make sure it's not already in our list. This can happen when we see a drive via symbolic link. */ for ( i=0; i<SDL_numcds; ++i ) { if ( stbuf->st_rdev == SDL_cdmode[i] ) { #ifdef DEBUG_CDROM fprintf(stderr, "Duplicate drive detected: %s == %s\n", drive, SDL_cdlist[i]); #endif return; } } /* Add this drive to our list */ i = SDL_numcds; SDL_cdlist[i] = SDL_strdup(drive); if ( SDL_cdlist[i] == NULL ) { SDL_OutOfMemory(); return; } SDL_cdmode[i] = stbuf->st_rdev; ++SDL_numcds; #ifdef DEBUG_CDROM fprintf(stderr, "Added CD-ROM drive: %s\n", drive); #endif } }
/* Add a CD-ROM drive to our list of valid drives */ static void AddDrive(char *drive, struct stat *stbuf) { int i; if (SDL_numcds < MAX_DRIVES) { /* Check to make sure it's not already in our list. This can happen when we see a drive via symbolic link. */ for (i=0; i<SDL_numcds; ++i) { if (stbuf->st_rdev == SDL_cdmode[i]) { return; } } /* Add this drive to our list */ i = SDL_numcds; SDL_cdlist[i] = SDL_strdup(drive); if (SDL_cdlist[i] == NULL) { SDL_OutOfMemory(); return; } SDL_cdmode[i] = stbuf->st_rdev; ++SDL_numcds; } }
int SDL_SYS_JoystickInit(void) { /* First see if the user specified one or more joysticks to use */ if (SDL_getenv("SDL_JOYSTICK_DEVICE") != NULL) { char *envcopy, *envpath, *delim; envcopy = SDL_strdup(SDL_getenv("SDL_JOYSTICK_DEVICE")); envpath = envcopy; while (envpath != NULL) { delim = SDL_strchr(envpath, ':'); if (delim != NULL) { *delim++ = '\0'; } MaybeAddDevice(envpath); envpath = delim; } SDL_free(envcopy); } #if SDL_USE_LIBUDEV if (LoadUDEVLibrary() == 0) { /* okay if this fails, FOR NOW. */ return JoystickInitWithUdev(); } #endif return JoystickInitWithoutUdev(); }
SDL_bool SDL_SetHintWithPriority(const char *name, const char *value, SDL_HintPriority priority) { const char *env; SDL_Hint *prev, *hint; if (!name || !value) { return SDL_FALSE; } env = SDL_getenv(name); if (env && priority < SDL_HINT_OVERRIDE) { return SDL_FALSE; } prev = NULL; for (hint = SDL_hints; hint; prev = hint, hint = hint->next) { if (SDL_strcmp(name, hint->name) == 0) { if (priority < hint->priority) { return SDL_FALSE; } if (SDL_strcmp(hint->value, value) != 0) { if (hint->callback != NULL) { (*hint->callback)(name, hint->value, value); } SDL_free(hint->value); hint->value = SDL_strdup(value); } hint->priority = priority; return SDL_TRUE; } } /* Couldn't find the hint, add a new one */ hint = (SDL_Hint *)SDL_malloc(sizeof(*hint)); if (!hint) { return SDL_FALSE; } hint->name = SDL_strdup(name); hint->value = SDL_strdup(value); hint->priority = priority; hint->callback = NULL; hint->next = SDL_hints; SDL_hints = hint; return SDL_TRUE; }
/* Find out what class name we should use * Based on src/video/x11/SDL_x11video.c */ static char * get_classname() { char *spot; #if defined(__LINUX__) || defined(__FREEBSD__) char procfile[1024]; char linkfile[1024]; int linksize; #endif /* First allow environment variable override */ spot = SDL_getenv("SDL_VIDEO_WAYLAND_WMCLASS"); if (spot) { return SDL_strdup(spot); } else { /* Fallback to the "old" envvar */ spot = SDL_getenv("SDL_VIDEO_X11_WMCLASS"); if (spot) { return SDL_strdup(spot); } } /* Next look at the application's executable name */ #if defined(__LINUX__) || defined(__FREEBSD__) #if defined(__LINUX__) SDL_snprintf(procfile, SDL_arraysize(procfile), "/proc/%d/exe", getpid()); #elif defined(__FREEBSD__) SDL_snprintf(procfile, SDL_arraysize(procfile), "/proc/%d/file", getpid()); #else #error Where can we find the executable name? #endif linksize = readlink(procfile, linkfile, sizeof(linkfile) - 1); if (linksize > 0) { linkfile[linksize] = '\0'; spot = SDL_strrchr(linkfile, '/'); if (spot) { return SDL_strdup(spot + 1); } else { return SDL_strdup(linkfile); } } #endif /* __LINUX__ || __FREEBSD__ */ /* Finally use the default we've used forever */ return SDL_strdup("SDL_App"); }
/* * Initializes the haptic subsystem by finding available devices. */ int SDL_SYS_HapticInit(void) { const char joydev_pattern[] = "/dev/input/event%d"; dev_t dev_nums[MAX_HAPTICS]; char path[PATH_MAX]; struct stat sb; int fd; int i, j, k; int duplicate; int numhaptics; numhaptics = 0; /* * Limit amount of checks to MAX_HAPTICS since we may or may not have * permission to some or all devices. */ i = 0; for (j = 0; j < MAX_HAPTICS; ++j) { snprintf(path, PATH_MAX, joydev_pattern, i++); /* check to see if file exists */ if (stat(path, &sb) != 0) break; /* check for duplicates */ duplicate = 0; for (k = 0; (k < numhaptics) && !duplicate; ++k) { if (sb.st_rdev == dev_nums[k]) { duplicate = 1; } } if (duplicate) { continue; } /* try to open */ fd = open(path, O_RDWR, 0); if (fd < 0) continue; #ifdef DEBUG_INPUT_EVENTS printf("Checking %s\n", path); #endif /* see if it works */ if (EV_IsHaptic(fd) > 0) { SDL_hapticlist[numhaptics].fname = SDL_strdup(path); SDL_hapticlist[numhaptics].haptic = NULL; dev_nums[numhaptics] = sb.st_rdev; ++numhaptics; } close(fd); } return numhaptics; }
static void SourceDeviceNameCallback(pa_context *c, const pa_source_info *i, int is_last, void *data) { if (i) { char **devname = (char **) data; *devname = SDL_strdup(i->name); } }
char * X11_GetClipboardText(_THIS) { SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata; Display *display = videodata->display; Atom format; Window window; Window owner; Atom selection; Atom seln_type; int seln_format; unsigned long nbytes; unsigned long overflow; unsigned char *src; char *text; text = NULL; /* Get the window that holds the selection */ window = GetWindow(_this); format = TEXT_FORMAT; owner = XGetSelectionOwner(display, XA_PRIMARY); if ((owner == None) || (owner == window)) { owner = DefaultRootWindow(display); selection = XA_CUT_BUFFER0; } else { /* Request that the selection owner copy the data to our window */ owner = window; selection = XInternAtom(display, "SDL_SELECTION", False); XConvertSelection(display, XA_PRIMARY, format, selection, owner, CurrentTime); /* FIXME: Should we have a timeout here? */ videodata->selection_waiting = SDL_TRUE; while (videodata->selection_waiting) { SDL_PumpEvents(); } } if (XGetWindowProperty(display, owner, selection, 0, INT_MAX/4, False, format, &seln_type, &seln_format, &nbytes, &overflow, &src) == Success) { if (seln_type == format) { text = (char *)SDL_malloc(nbytes+1); if (text) { SDL_memcpy(text, src, nbytes); text[nbytes] = '\0'; } } XFree(src); } if (!text) { text = SDL_strdup(""); } return text; }
static void video_initialize_default_configuration( ) { video_options.mode.driverdata = NULL; video_options.set_mode = 0; video_options.title = SDL_strdup( " " ); video_options.driver = SDL_strdup( SDL_GetVideoDriver(0) ); video_options.position.x = SDL_WINDOWPOS_UNDEFINED; video_options.position.y = SDL_WINDOWPOS_UNDEFINED; video_options.size.w = 640; video_options.size.h = 480; video_options.logical_size.w = 640; video_options.logical_size.h = 480; video_options.grab_input = 0; video_options.fullscreen = 0; video_options.brightness = 1; video_renderer = NULL; video_window = NULL; }
int Android_AddJoystick(int device_id, const char *name, const char *desc, SDL_bool is_accelerometer, int nbuttons, int naxes, int nhats, int nballs) { SDL_JoystickGUID guid; SDL_joylist_item *item; if(JoystickByDeviceId(device_id) != NULL || name == NULL) { return -1; } /* the GUID is just the first 16 chars of the name for now */ SDL_zero( guid ); SDL_memcpy( &guid, desc, SDL_min( sizeof(guid), SDL_strlen( desc) ) ); item = (SDL_joylist_item *) SDL_malloc(sizeof (SDL_joylist_item)); if (item == NULL) { return -1; } SDL_zerop(item); item->guid = guid; item->device_id = device_id; item->name = SDL_strdup(name); if ( item->name == NULL ) { SDL_free(item); return -1; } item->is_accelerometer = is_accelerometer; if (nbuttons > -1) { item->nbuttons = nbuttons; } else { item->nbuttons = ANDROID_MAX_NBUTTONS; } item->naxes = naxes; item->nhats = nhats; item->nballs = nballs; item->device_instance = instance_counter++; if (SDL_joylist_tail == NULL) { SDL_joylist = SDL_joylist_tail = item; } else { SDL_joylist_tail->next = item; SDL_joylist_tail = item; } /* Need to increment the joystick count before we post the event */ ++numjoysticks; SDL_PrivateJoystickAdded(numjoysticks - 1); #ifdef DEBUG_JOYSTICK SDL_Log("Added joystick %s with device_id %d", name, device_id); #endif return numjoysticks; }
/* Function to open a joystick for use. The joystick to open is specified by the device index. This should fill the nbuttons and naxes fields of the joystick structure. It returns 0, or -1 if there is an error. */ int SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) { SDL_joylist_item *item = JoystickByDevIndex(device_index); if (item == NULL) { return SDL_SetError("No such device"); } joystick->instance_id = item->device_instance; joystick->hwdata = (struct joystick_hwdata *) SDL_calloc(1, sizeof(*joystick->hwdata)); if (joystick->hwdata == NULL) { return SDL_OutOfMemory(); } joystick->hwdata->item = item; joystick->hwdata->guid = item->guid; joystick->hwdata->m_bSteamController = item->m_bSteamController; if (item->m_bSteamController) { joystick->hwdata->fd = -1; SDL_GetSteamControllerInputs(&joystick->nbuttons, &joystick->naxes, &joystick->nhats); } else { int fd = open(item->path, O_RDONLY, 0); if (fd < 0) { SDL_free(joystick->hwdata); joystick->hwdata = NULL; return SDL_SetError("Unable to open %s", item->path); } joystick->hwdata->fd = fd; joystick->hwdata->fname = SDL_strdup(item->path); if (joystick->hwdata->fname == NULL) { SDL_free(joystick->hwdata); joystick->hwdata = NULL; close(fd); return SDL_OutOfMemory(); } /* Set the joystick to non-blocking read mode */ fcntl(fd, F_SETFL, O_NONBLOCK); /* Get the number of buttons and axes on the joystick */ ConfigJoystick(joystick, fd); } SDL_assert(item->hwdata == NULL); item->hwdata = joystick->hwdata; /* mark joystick as fresh and ready */ joystick->hwdata->fresh = 1; return (0); }
extern "C" char* Android_JNI_GetClipboardText() { SETUP_CLIPBOARD(SDL_strdup("")) jmethodID mid = env->GetMethodID(env->GetObjectClass(clipboard), "getText", "()Ljava/lang/CharSequence;"); jobject sequence = env->CallObjectMethod(clipboard, mid); env->DeleteGlobalRef(clipboard); if (sequence) { mid = env->GetMethodID(env->GetObjectClass(sequence), "toString", "()Ljava/lang/String;"); jstring string = reinterpret_cast<jstring>(env->CallObjectMethod(sequence, mid)); const char* utf = env->GetStringUTFChars(string, 0); if (utf) { char* text = SDL_strdup(utf); env->ReleaseStringUTFChars(string, utf); return text; } } return SDL_strdup(""); }
void video_set_title( const char *title ) { if ( video_options.title != NULL ) { SDL_free( video_options.title ); } video_options.title = SDL_strdup( title ); if ( video_window != NULL ) { SDL_SetWindowTitle( video_window, title ); } }
static void video_discover_drivers( ) { int i; video_num_drivers = SDL_GetNumVideoDrivers( ); video_drivers = (char**)SDL_calloc( video_num_drivers, sizeof(char*) ); for ( i = 0; i < video_num_drivers; ++i ) { video_drivers[ i ] = SDL_strdup( SDL_GetVideoDriver(i) ); } }