diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-11-17 19:43:59 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-11-17 19:43:59 (GMT) |
| commit | e3594aba9e05c6865d396418c028049cda92c2f3 (patch) | |
| tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /src/misc.c | |
| parent | fb43f7d23e99765ae093fc45608901cb5907d1d8 (diff) | |
| download | powder-e3594aba9e05c6865d396418c028049cda92c2f3.zip powder-e3594aba9e05c6865d396418c028049cda92c2f3.tar.gz | |
Remove old code
Diffstat (limited to 'src/misc.c')
| -rw-r--r-- | src/misc.c | 1005 |
1 files changed, 0 insertions, 1005 deletions
diff --git a/src/misc.c b/src/misc.c deleted file mode 100644 index 322a56a..0000000 --- a/src/misc.c +++ /dev/null @@ -1,1005 +0,0 @@ -/** - * Powder Toy - miscellaneous functions - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <regex.h> -#include <sys/types.h> -#include <math.h> -#include "misc.h" -#include "defines.h" -#include "interface.h" -#include "graphics.h" -#include "powder.h" -#include "gravity.h" -#include <icondoc.h> -#include <update.h> -#if defined WIN32 -#include <shlobj.h> -#include <shlwapi.h> -#include <windows.h> -#else -#include <unistd.h> -#endif -#ifdef MACOSX -#include <ApplicationServices/ApplicationServices.h> -#endif -#include "cJSON.h" - -char *clipboard_text = NULL; - -//Signum function -#if defined(WIN32) && !defined(__GNUC__) -int isign(float i) -#else -inline int isign(float i) -#endif -{ - if (i<0) - return -1; - if (i>0) - return 1; - return 0; -} - -#if defined(WIN32) && !defined(__GNUC__) -unsigned clamp_flt(float f, float min, float max) -#else -inline unsigned clamp_flt(float f, float min, float max) -#endif -{ - if (f<min) - return 0; - if (f>max) - return 255; - return (int)(255.0f*(f-min)/(max-min)); -} - -#if defined(WIN32) && !defined(__GNUC__) -float restrict_flt(float f, float min, float max) -#else -inline float restrict_flt(float f, float min, float max) -#endif -{ - if (f<min) - return min; - if (f>max) - return max; - return f; -} - -char *mystrdup(char *s) -{ - char *x; - if (s) - { - x = (char*)malloc(strlen(s)+1); - strcpy(x, s); - return x; - } - return s; -} - -void strlist_add(struct strlist **list, char *str) -{ - struct strlist *item = malloc(sizeof(struct strlist)); - item->str = mystrdup(str); - item->next = *list; - *list = item; -} - -int strlist_find(struct strlist **list, char *str) -{ - struct strlist *item; - for (item=*list; item; item=item->next) - if (!strcmp(item->str, str)) - return 1; - return 0; -} - -void strlist_free(struct strlist **list) -{ - struct strlist *item; - while (*list) - { - item = *list; - *list = (*list)->next; - free(item); - } -} - -void clean_text(char *text, int vwidth) -{ - int i = 0; - if(textwidth(text) > vwidth){ - text[textwidthx(text, vwidth)] = 0; - } - for(i = 0; i < strlen(text); i++){ - if(! (text[i]>=' ' && text[i]<127)){ - text[i] = ' '; - } - } -} - -void draw_bframe() -{ - int i; - for(i=0; i<(XRES/CELL); i++) - { - bmap[0][i]=WL_WALL; - bmap[YRES/CELL-1][i]=WL_WALL; - } - for(i=1; i<((YRES/CELL)-1); i++) - { - bmap[i][0]=WL_WALL; - bmap[i][XRES/CELL-1]=WL_WALL; - } -} - -void erase_bframe() -{ - int i; - for(i=0; i<(XRES/CELL); i++) - { - bmap[0][i]=0; - bmap[YRES/CELL-1][i]=0; - } - for(i=1; i<((YRES/CELL)-1); i++) - { - bmap[i][0]=0; - bmap[i][XRES/CELL-1]=0; - } -} - -void save_presets(int do_update) -{ - char * outputdata; - int count, i; - cJSON *root, *userobj, *versionobj, *graphicsobj; - FILE* f; - - root = cJSON_CreateObject(); - - cJSON_AddStringToObject(root, "Powder Toy Preferences", "Don't modify this file unless you know what you're doing. P.S: editing the admin/mod fields in your user info doesn't give you magical powers"); - - //User Info - if(svf_login){ - cJSON_AddItemToObject(root, "user", userobj=cJSON_CreateObject()); - cJSON_AddStringToObject(userobj, "name", svf_user); - cJSON_AddStringToObject(userobj, "id", svf_user_id); - cJSON_AddStringToObject(userobj, "session_id", svf_session_id); - if(svf_admin){ - cJSON_AddTrueToObject(userobj, "admin"); - cJSON_AddFalseToObject(userobj, "mod"); - } else if(svf_mod){ - cJSON_AddFalseToObject(userobj, "admin"); - cJSON_AddTrueToObject(userobj, "mod"); - } else { - cJSON_AddFalseToObject(userobj, "admin"); - cJSON_AddFalseToObject(userobj, "mod"); - } - } - - //Version Info - cJSON_AddItemToObject(root, "version", versionobj=cJSON_CreateObject()); - cJSON_AddNumberToObject(versionobj, "major", SAVE_VERSION); - cJSON_AddNumberToObject(versionobj, "minor", MINOR_VERSION); - cJSON_AddNumberToObject(versionobj, "build", BUILD_NUM); - if(do_update){ - cJSON_AddTrueToObject(versionobj, "update"); - } else { - cJSON_AddFalseToObject(versionobj, "update"); - } - - //Display settings - cJSON_AddItemToObject(root, "graphics", graphicsobj=cJSON_CreateObject()); - cJSON_AddNumberToObject(graphicsobj, "colour", colour_mode); - count = 0; i = 0; while(display_modes[i++]){ count++; } - cJSON_AddItemToObject(graphicsobj, "display", cJSON_CreateIntArray(display_modes, count)); - count = 0; i = 0; while(render_modes[i++]){ count++; } - cJSON_AddItemToObject(graphicsobj, "render", cJSON_CreateIntArray(render_modes, count)); - - //General settings - cJSON_AddStringToObject(root, "proxy", http_proxy_string); - cJSON_AddNumberToObject(root, "scale", sdl_scale); - cJSON_AddNumberToObject(root, "bframe", bframe); - cJSON_AddNumberToObject(root, "Debug mode", DEBUG_MODE); - cJSON_AddNumberToObject(root, "decorations_enable", decorations_enable); - cJSON_AddNumberToObject(root, "ngrav_enable", ngrav_enable); - cJSON_AddNumberToObject(root, "kiosk_enable", kiosk_enable); - cJSON_AddNumberToObject(root, "drawgrav_enable", drawgrav_enable); - - outputdata = cJSON_Print(root); - cJSON_Delete(root); - - f = fopen("powder.pref", "wb"); - if(!f) - return; - fwrite(outputdata, 1, strlen(outputdata), f); - fclose(f); - free(outputdata); - //Old format, here for reference only - /*FILE *f=fopen("powder.def", "wb"); - unsigned char sig[4] = {0x50, 0x44, 0x65, 0x68}; - unsigned char tmp = sdl_scale; - if (!f) - return; - fwrite(sig, 1, 4, f); - save_string(f, svf_user); - //save_string(f, svf_pass); - save_string(f, svf_user_id); - save_string(f, svf_session_id); - fwrite(&tmp, 1, 1, f); - tmp = cmode; - fwrite(&tmp, 1, 1, f); - tmp = svf_admin; - fwrite(&tmp, 1, 1, f); - tmp = svf_mod; - fwrite(&tmp, 1, 1, f); - save_string(f, http_proxy_string); - tmp = SAVE_VERSION; - fwrite(&tmp, 1, 1, f); - tmp = MINOR_VERSION; - fwrite(&tmp, 1, 1, f); - tmp = BUILD_NUM; - fwrite(&tmp, 1, 1, f); - tmp = do_update; - fwrite(&tmp, 1, 1, f); - fclose(f);*/ -} - -int sregexp(const char *str, char *pattern) -{ - int result; - regex_t patternc; - if (regcomp(&patternc, pattern, 0)!=0) - return 1; - result = regexec(&patternc, str, 0, NULL, 0); - regfree(&patternc); - return result; -} - -void load_presets(void) -{ - int prefdatasize = 0, i, count; - char * prefdata = file_load("powder.pref", &prefdatasize); - cJSON *root; - if(prefdata && (root = cJSON_Parse(prefdata))) - { - cJSON *userobj, *versionobj, *tmpobj, *graphicsobj, *tmparray; - - //Read user data - userobj = cJSON_GetObjectItem(root, "user"); - if(userobj){ - svf_login = 1; - if((tmpobj = cJSON_GetObjectItem(userobj, "name")) && tmpobj->type == cJSON_String) strncpy(svf_user, tmpobj->valuestring, 63); else svf_user[0] = 0; - if((tmpobj = cJSON_GetObjectItem(userobj, "id")) && tmpobj->type == cJSON_String) strncpy(svf_user_id, tmpobj->valuestring, 63); else svf_user_id[0] = 0; - if((tmpobj = cJSON_GetObjectItem(userobj, "session_id")) && tmpobj->type == cJSON_String) strncpy(svf_session_id, tmpobj->valuestring, 63); else svf_session_id[0] = 0; - if((tmpobj = cJSON_GetObjectItem(userobj, "admin")) && tmpobj->type == cJSON_True) { - svf_admin = 1; - svf_mod = 0; - } else if((tmpobj = cJSON_GetObjectItem(userobj, "mod")) && tmpobj->type == cJSON_True) { - svf_mod = 1; - svf_admin = 0; - } else { - svf_admin = 0; - svf_mod = 0; - } - } else { - svf_login = 0; - svf_user[0] = 0; - svf_user_id[0] = 0; - svf_session_id[0] = 0; - svf_admin = 0; - svf_mod = 0; - } - - //Read version data - versionobj = cJSON_GetObjectItem(root, "version"); - if(versionobj){ - if(tmpobj = cJSON_GetObjectItem(versionobj, "major")) last_major = tmpobj->valueint; - if(tmpobj = cJSON_GetObjectItem(versionobj, "minor")) last_minor = tmpobj->valueint; - if(tmpobj = cJSON_GetObjectItem(versionobj, "build")) last_build = tmpobj->valueint; - if((tmpobj = cJSON_GetObjectItem(versionobj, "update")) && tmpobj->type == cJSON_True) - update_flag = 1; - else - update_flag = 0; - } else { - last_major = 0; - last_minor = 0; - last_build = 0; - update_flag = 0; - } - - //Read display settings - graphicsobj = cJSON_GetObjectItem(root, "graphics"); - if(graphicsobj) - { - if(tmpobj = cJSON_GetObjectItem(graphicsobj, "colour")) colour_mode = tmpobj->valueint; - if(tmpobj = cJSON_GetObjectItem(graphicsobj, "display")) - { - count = cJSON_GetArraySize(tmpobj); - free(display_modes); - display_mode = 0; - display_modes = calloc(count+1, sizeof(unsigned int)); - for(i = 0; i < count; i++) - { - display_mode |= cJSON_GetArrayItem(tmpobj, i)->valueint; - display_modes[i] = cJSON_GetArrayItem(tmpobj, i)->valueint; - } - } - if(tmpobj = cJSON_GetObjectItem(graphicsobj, "render")) - { - count = cJSON_GetArraySize(tmpobj); - free(render_modes); - render_mode = 0; - render_modes = calloc(count+1, sizeof(unsigned int)); - for(i = 0; i < count; i++) - { - render_mode |= cJSON_GetArrayItem(tmpobj, i)->valueint; - render_modes[i] = cJSON_GetArrayItem(tmpobj, i)->valueint; - } - } - } - - //Read general settings - if((tmpobj = cJSON_GetObjectItem(root, "proxy")) && tmpobj->type == cJSON_String) strncpy(http_proxy_string, tmpobj->valuestring, 255); else http_proxy_string[0] = 0; - //TODO: Translate old cmode value into new *_mode values - if(tmpobj = cJSON_GetObjectItem(root, "scale")) sdl_scale = tmpobj->valueint; - if(tmpobj = cJSON_GetObjectItem(root, "bframe")) bframe = tmpobj->valueint; - if(tmpobj = cJSON_GetObjectItem(root, "Debug mode")) DEBUG_MODE = tmpobj->valueint; - if(tmpobj = cJSON_GetObjectItem(root, "decorations_enable")) decorations_enable = tmpobj->valueint; - if(tmpobj = cJSON_GetObjectItem(root, "ngrav_enable")) { if (tmpobj->valueint) start_grav_async(); }; - if(tmpobj = cJSON_GetObjectItem(root, "kiosk_enable")) { kiosk_enable = tmpobj->valueint; if (kiosk_enable) set_scale(sdl_scale, kiosk_enable); } - if(tmpobj = cJSON_GetObjectItem(root, "drawgrav_enable")) drawgrav_enable = tmpobj->valueint; - - cJSON_Delete(root); - free(prefdata); - } else { //Fallback and read from old def file - FILE *f=fopen("powder.def", "rb"); - unsigned char sig[4], tmp; - if (!f) - return; - fread(sig, 1, 4, f); - if (sig[0]!=0x50 || sig[1]!=0x44 || sig[2]!=0x65) - { - if (sig[0]==0x4D && sig[1]==0x6F && sig[2]==0x46 && sig[3]==0x6F) - { - if (fseek(f, -3, SEEK_END)) - { - remove("powder.def"); - return; - } - if (fread(sig, 1, 3, f) != 3) - { - remove("powder.def"); - goto fail; - } - //last_major = sig[0]; - //last_minor = sig[1]; - last_build = 0; - update_flag = sig[2]; - } - fclose(f); - remove("powder.def"); - return; - } - if (sig[3]==0x66) { - if (load_string(f, svf_user, 63)) - goto fail; - if (load_string(f, svf_pass, 63)) - goto fail; - } else { - if (load_string(f, svf_user, 63)) - goto fail; - if (load_string(f, svf_user_id, 63)) - goto fail; - if (load_string(f, svf_session_id, 63)) - goto fail; - } - svf_login = !!svf_session_id[0]; - if (fread(&tmp, 1, 1, f) != 1) - goto fail; - sdl_scale = (tmp == 2) ? 2 : 1; - if (fread(&tmp, 1, 1, f) != 1) - goto fail; - //TODO: Translate old cmode value into new *_mode values - //cmode = tmp%CM_COUNT; - if (fread(&tmp, 1, 1, f) != 1) - goto fail; - svf_admin = tmp; - if (fread(&tmp, 1, 1, f) != 1) - goto fail; - svf_mod = tmp; - if (load_string(f, http_proxy_string, 255)) - goto fail; - - if (sig[3]!=0x68) { //Pre v64 format - if (fread(sig, 1, 3, f) != 3) - goto fail; - last_build = 0; - } else { - if (fread(sig, 1, 4, f) != 4) - goto fail; - last_build = sig[3]; - } - last_major = sig[0]; - last_minor = sig[1]; - update_flag = sig[2]; - fail: - fclose(f); - } -} - -void save_string(FILE *f, char *str) -{ - int li = strlen(str); - unsigned char lb[2]; - lb[0] = li; - lb[1] = li >> 8; - fwrite(lb, 2, 1, f); - fwrite(str, li, 1, f); -} - -int load_string(FILE *f, char *str, int max) -{ - int li; - unsigned char lb[2]; - fread(lb, 2, 1, f); - li = lb[0] | (lb[1] << 8); - if (li > max) - { - str[0] = 0; - return 1; - } - fread(str, li, 1, f); - str[li] = 0; - return 0; -} - -void strcaturl(char *dst, char *src) -{ - char *d; - unsigned char *s; - - for (d=dst; *d; d++) ; - - for (s=(unsigned char *)src; *s; s++) - { - if ((*s>='0' && *s<='9') || - (*s>='a' && *s<='z') || - (*s>='A' && *s<='Z')) - *(d++) = *s; - else - { - *(d++) = '%'; - *(d++) = hex[*s>>4]; - *(d++) = hex[*s&15]; - } - } - *d = 0; -} - -void strappend(char *dst, char *src) -{ - char *d; - unsigned char *s; - - for (d=dst; *d; d++) ; - - for (s=(unsigned char *)src; *s; s++) - { - *(d++) = *s; - } - *d = 0; -} - -void *file_load(char *fn, int *size) -{ - FILE *f = fopen(fn, "rb"); - void *s; - - if (!f) - return NULL; - fseek(f, 0, SEEK_END); - *size = ftell(f); - fseek(f, 0, SEEK_SET); - s = malloc(*size); - if (!s) - { - fclose(f); - return NULL; - } - fread(s, *size, 1, f); - fclose(f); - return s; -} - -int cpu_check(void) -{ -#ifdef MACOSX - return 0; -#else -#ifdef X86 - unsigned af,bf,cf,df; - x86_cpuid(0, af, bf, cf, df); - if (bf==0x68747541 && cf==0x444D4163 && df==0x69746E65) - amd = 1; - x86_cpuid(1, af, bf, cf, df); -#ifdef X86_SSE - if (!(df&(1<<25))) - return 1; -#endif -#ifdef X86_SSE2 - if (!(df&(1<<26))) - return 1; -#endif -#ifdef X86_SSE3 - if (!(cf&1)) - return 1; -#endif -#endif -#endif - return 0; -} - -matrix2d m2d_multiply_m2d(matrix2d m1, matrix2d m2) -{ - matrix2d result = { - m1.a*m2.a+m1.b*m2.c, m1.a*m2.b+m1.b*m2.d, - m1.c*m2.a+m1.d*m2.c, m1.c*m2.b+m1.d*m2.d - }; - return result; -} -vector2d m2d_multiply_v2d(matrix2d m, vector2d v) -{ - vector2d result = { - m.a*v.x+m.b*v.y, - m.c*v.x+m.d*v.y - }; - return result; -} -matrix2d m2d_multiply_float(matrix2d m, float s) -{ - matrix2d result = { - m.a*s, m.b*s, - m.c*s, m.d*s, - }; - return result; -} - -vector2d v2d_multiply_float(vector2d v, float s) -{ - vector2d result = { - v.x*s, - v.y*s - }; - return result; -} - -vector2d v2d_add(vector2d v1, vector2d v2) -{ - vector2d result = { - v1.x+v2.x, - v1.y+v2.y - }; - return result; -} -vector2d v2d_sub(vector2d v1, vector2d v2) -{ - vector2d result = { - v1.x-v2.x, - v1.y-v2.y - }; - return result; -} - -matrix2d m2d_new(float me0, float me1, float me2, float me3) -{ - matrix2d result = {me0,me1,me2,me3}; - return result; -} -vector2d v2d_new(float x, float y) -{ - vector2d result = {x, y}; - return result; -} - -void clipboard_push_text(char * text) -{ -#ifdef MACOSX - PasteboardRef newclipboard; - - if (PasteboardCreate(kPasteboardClipboard, &newclipboard)!=noErr) return; - if (PasteboardClear(newclipboard)!=noErr) return; - PasteboardSynchronize(newclipboard); - - CFDataRef data = CFDataCreate(kCFAllocatorDefault, text, strlen(text)); - PasteboardPutItemFlavor(newclipboard, (PasteboardItemID)1, CFSTR("com.apple.traditional-mac-plain-text"), data, 0); -#elif defined WIN32 - if (OpenClipboard(NULL)) - { - HGLOBAL cbuffer; - char * glbuffer; - - EmptyClipboard(); - - cbuffer = GlobalAlloc(GMEM_DDESHARE, strlen(text)+1); - glbuffer = (char*)GlobalLock(cbuffer); - - strcpy(glbuffer, text); - - GlobalUnlock(cbuffer); - SetClipboardData(CF_TEXT, cbuffer); - CloseClipboard(); - } -#elif (defined(LIN32) || defined(LIN64)) && defined(SDL_VIDEO_DRIVER_X11) - if (clipboard_text!=NULL) { - free(clipboard_text); - clipboard_text = NULL; - } - clipboard_text = mystrdup(text); - sdl_wminfo.info.x11.lock_func(); - XSetSelectionOwner(sdl_wminfo.info.x11.display, XA_CLIPBOARD, sdl_wminfo.info.x11.window, CurrentTime); - XFlush(sdl_wminfo.info.x11.display); - sdl_wminfo.info.x11.unlock_func(); -#else - printf("Not implemented: put text on clipboard \"%s\"\n", text); -#endif -} - -char * clipboard_pull_text() -{ -#ifdef MACOSX - printf("Not implemented: get text from clipboard\n"); -#elif defined WIN32 - if (OpenClipboard(NULL)) - { - HANDLE cbuffer; - char * glbuffer; - - cbuffer = GetClipboardData(CF_TEXT); - glbuffer = (char*)GlobalLock(cbuffer); - GlobalUnlock(cbuffer); - CloseClipboard(); - if(glbuffer!=NULL){ - return mystrdup(glbuffer); - } else { - return ""; - } - } -#elif (defined(LIN32) || defined(LIN64)) && defined(SDL_VIDEO_DRIVER_X11) - printf("Not implemented: get text from clipboard\n"); -#else - printf("Not implemented: get text from clipboard\n"); -#endif - return ""; -} - -int register_extension() -{ -#if defined WIN32 - int returnval; - LONG rresult; - HKEY newkey; - char *currentfilename = exe_name(); - char *iconname = NULL; - char *opencommand = NULL; - char *protocolcommand = NULL; - //char AppDataPath[MAX_PATH]; - char *AppDataPath = NULL; - iconname = malloc(strlen(currentfilename)+6); - sprintf(iconname, "%s,-102", currentfilename); - - //Create Roaming application data folder - /*if(!SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA|CSIDL_FLAG_CREATE, NULL, 0, AppDataPath))) - { - returnval = 0; - goto finalise; - }*/ - - AppDataPath = _getcwd(NULL, 0); - - //Move Game executable into application data folder - //TODO: Implement - - opencommand = malloc(strlen(currentfilename)+53+strlen(AppDataPath)); - protocolcommand = malloc(strlen(currentfilename)+55+strlen(AppDataPath)); - /*if((strlen(AppDataPath)+strlen(APPDATA_SUBDIR "\\Powder Toy"))<MAX_PATH) - { - strappend(AppDataPath, APPDATA_SUBDIR); - _mkdir(AppDataPath); - strappend(AppDataPath, "\\Powder Toy"); - _mkdir(AppDataPath); - } else { - returnval = 0; - goto finalise; - }*/ - sprintf(opencommand, "\"%s\" open \"%%1\" ddir \"%s\"", currentfilename, AppDataPath); - sprintf(protocolcommand, "\"%s\" ddir \"%s\" ptsave \"%%1\"", currentfilename, AppDataPath); - - //Create protocol entry - rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\ptsave", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); - if (rresult != ERROR_SUCCESS) { - returnval = 0; - goto finalise; - } - rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)"Powder Toy Save", strlen("Powder Toy Save")+1); - if (rresult != ERROR_SUCCESS) { - RegCloseKey(newkey); - returnval = 0; - goto finalise; - } - rresult = RegSetValueEx(newkey, (LPBYTE)"URL Protocol", 0, REG_SZ, (LPBYTE)"", strlen("")+1); - if (rresult != ERROR_SUCCESS) { - RegCloseKey(newkey); - returnval = 0; - goto finalise; - } - RegCloseKey(newkey); - - - //Set Protocol DefaultIcon - rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\ptsave\\DefaultIcon", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); - if (rresult != ERROR_SUCCESS) { - returnval = 0; - goto finalise; - } - rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)iconname, strlen(iconname)+1); - if (rresult != ERROR_SUCCESS) { - RegCloseKey(newkey); - returnval = 0; - goto finalise; - } - RegCloseKey(newkey); - - //Set Protocol Launch command - rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\ptsave\\shell\\open\\command", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); - if (rresult != ERROR_SUCCESS) { - returnval = 0; - goto finalise; - } - rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)protocolcommand, strlen(protocolcommand)+1); - if (rresult != ERROR_SUCCESS) { - RegCloseKey(newkey); - returnval = 0; - goto finalise; - } - RegCloseKey(newkey); - - //Create extension entry - rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\.cps", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); - if (rresult != ERROR_SUCCESS) { - returnval = 0; - goto finalise; - } - rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)"PowderToySave", strlen("PowderToySave")+1); - if (rresult != ERROR_SUCCESS) { - RegCloseKey(newkey); - returnval = 0; - goto finalise; - } - RegCloseKey(newkey); - - rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\.stm", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); - if (rresult != ERROR_SUCCESS) { - returnval = 0; - goto finalise; - } - rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)"PowderToySave", strlen("PowderToySave")+1); - if (rresult != ERROR_SUCCESS) { - RegCloseKey(newkey); - returnval = 0; - goto finalise; - } - RegCloseKey(newkey); - - //Create program entry - rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); - if (rresult != ERROR_SUCCESS) { - returnval = 0; - goto finalise; - } - rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)"Powder Toy Save", strlen("Powder Toy Save")+1); - if (rresult != ERROR_SUCCESS) { - RegCloseKey(newkey); - returnval = 0; - goto finalise; - } - RegCloseKey(newkey); - - //Set DefaultIcon - rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave\\DefaultIcon", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); - if (rresult != ERROR_SUCCESS) { - returnval = 0; - goto finalise; - } - rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)iconname, strlen(iconname)+1); - if (rresult != ERROR_SUCCESS) { - RegCloseKey(newkey); - returnval = 0; - goto finalise; - } - RegCloseKey(newkey); - - //Set Launch command - rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave\\shell\\open\\command", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL); - if (rresult != ERROR_SUCCESS) { - returnval = 0; - goto finalise; - } - rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)opencommand, strlen(opencommand)+1); - if (rresult != ERROR_SUCCESS) { - RegCloseKey(newkey); - returnval = 0; - goto finalise; - } - RegCloseKey(newkey); - - returnval = 1; - finalise: - - if(iconname) free(iconname); - if(opencommand) free(opencommand); - if(currentfilename) free(currentfilename); - if(protocolcommand) free(protocolcommand); - - return returnval; -#elif defined(LIN32) || defined(LIN64) - char *currentfilename = exe_name(); - FILE *f; - char *mimedata = -"<?xml version=\"1.0\"?>\n" -" <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>\n" -" <mime-type type=\"application/vnd.powdertoy.save\">\n" -" <comment>Powder Toy save</comment>\n" -" <glob pattern=\"*.cps\"/>\n" -" <glob pattern=\"*.stm\"/>\n" -" </mime-type>\n" -"</mime-info>\n"; - f = fopen("powdertoy-save.xml", "wb"); - if (!f) - return 0; - fwrite(mimedata, 1, strlen(mimedata), f); - fclose(f); - - char *desktopfiledata_tmp = -"[Desktop Entry]\n" -"Type=Application\n" -"Name=Powder Toy\n" -"Comment=Physics sandbox game\n" -"MimeType=application/vnd.powdertoy.save;\n" -"NoDisplay=true\n"; - char *desktopfiledata = malloc(strlen(desktopfiledata_tmp)+strlen(currentfilename)+100); - strcpy(desktopfiledata, desktopfiledata_tmp); - strappend(desktopfiledata, "Exec="); - strappend(desktopfiledata, currentfilename); - strappend(desktopfiledata, " open %f\n"); - f = fopen("powdertoy-tpt.desktop", "wb"); - if (!f) - return 0; - fwrite(desktopfiledata, 1, strlen(desktopfiledata), f); - fclose(f); - system("xdg-mime install powdertoy-save.xml"); - system("xdg-desktop-menu install powdertoy-tpt.desktop"); - f = fopen("powdertoy-save-32.png", "wb"); - if (!f) - return 0; - fwrite(icon_doc_32_png, 1, sizeof(icon_doc_32_png), f); - fclose(f); - f = fopen("powdertoy-save-16.png", "wb"); - if (!f) - return 0; - fwrite(icon_doc_16_png, 1, sizeof(icon_doc_16_png), f); - fclose(f); - system("xdg-icon-resource install --noupdate --context mimetypes --size 32 powdertoy-save-32.png application-vnd.powdertoy.save"); - system("xdg-icon-resource install --noupdate --context mimetypes --size 16 powdertoy-save-16.png application-vnd.powdertoy.save"); - system("xdg-icon-resource forceupdate"); - system("xdg-mime default powdertoy-tpt.desktop application/vnd.powdertoy.save"); - unlink("powdertoy-save-32.png"); - unlink("powdertoy-save-16.png"); - unlink("powdertoy-save.xml"); - unlink("powdertoy-tpt.desktop"); - return 1; -#elif defined MACOSX - return 0; -#endif -} - -void HSV_to_RGB(int h,int s,int v,int *r,int *g,int *b)//convert 0-255(0-360 for H) HSV values to 0-255 RGB -{ - float hh, ss, vv, c, x; - int m; - hh = h/60.0f;//normalize values - ss = s/255.0f; - vv = v/255.0f; - c = vv * ss; - x = c * ( 1 - fabs(fmod(hh,2.0) -1) ); - if(hh<1){ - *r = (int)(c*255.0); - *g = (int)(x*255.0); - *b = 0; - } - else if(hh<2){ - *r = (int)(x*255.0); - *g = (int)(c*255.0); - *b = 0; - } - else if(hh<3){ - *r = 0; - *g = (int)(c*255.0); - *b = (int)(x*255.0); - } - else if(hh<4){ - *r = 0; - *g = (int)(x*255.0); - *b = (int)(c*255.0); - } - else if(hh<5){ - *r = (int)(x*255.0); - *g = 0; - *b = (int)(c*255.0); - } - else if(hh<6){ - *r = (int)(c*255.0); - *g = 0; - *b = (int)(x*255.0); - } - m = (int)((vv-c)*255.0); - *r += m; - *g += m; - *b += m; -} - -void RGB_to_HSV(int r,int g,int b,int *h,int *s,int *v)//convert 0-255 RGB values to 0-255(0-360 for H) HSV -{ - float rr, gg, bb, a,x,c,d; - rr = r/255.0f;//normalize values - gg = g/255.0f; - bb = b/255.0f; - a = fmin(rr,gg); - a = fmin(a,bb); - x = fmax(rr,gg); - x = fmax(x,bb); - if (a==x)//greyscale - { - *h = 0; - *s = 0; - *v = (int)(a*255.0); - } - else - { - c = (rr==a) ? gg-bb : ((bb==a) ? rr-gg : bb-rr); - d = (rr==a) ? 3 : ((bb==a) ? 1 : 5); - *h = (int)(60.0*(d - c/(x - a))); - *s = (int)(255.0*((x - a)/x)); - *v = (int)(255.0*x); - } -} - -void membwand(void * destv, void * srcv, size_t destsize, size_t srcsize) -{ - size_t i; - unsigned char * dest = destv; - unsigned char * src = srcv; - for(i = 0; i < destsize; i++){ - dest[i] = dest[i] & src[i%srcsize]; - } -} -vector2d v2d_zero = {0,0}; -matrix2d m2d_identity = {1,0,0,1}; |
