misc.c
来自「ANFY特效」· C语言 代码 · 共 1,430 行 · 第 1/3 页
C
1,430 行
//// Misc. functions//#include <gtk/gtk.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include "main.h"#include "jpeg.h"#include "support.h"#include "misc.h"#include "custom.h"#define _ttoi(s) strtol(s, NULL, 10)#define MAX_SCROLLTEXT_SIZE 32767#define HTML_HELP_ROOT "/helproot.html"void restore_dialog_data (int usedefault);int validate_fields (GtkWidget *dlg);void save_dialog_data ();void file_browse (char* caption, char** filename);char* convert_old_var (char* old);gboolean SetAppletProject(const int applet);// =========================================================char* strupr(char* string){ char *cp; for (cp=string; *cp; ++cp) { if ('a' <= *cp && *cp <= 'z') *cp += 'A' - 'a'; } return string;}int SaveProject(){ char *strOutputFile, *tmp, *ptr, buf[256]; FILE *file, *rc; file_browse ("Save", &strOutputFile); if (strOutputFile == NULL) return 0; if (!validate_fields(main_dlg)) { g_free(strOutputFile); return 0; } save_dialog_data(); file = fopen (strOutputFile, "w"); g_free (strOutputFile); if (file == NULL) return 0; tmp = get_rc_path (); rc = fopen (tmp, "rt"); g_free (tmp); while (fgets (buf, 256, rc) != 0) { if (buf[0] != '[') continue; strupr (buf); ptr = strchr (buf, ']'); *ptr = '\0'; if (strcmp (&buf[1], applet_info[current_applet].name) != 0) continue; fprintf (file, "[%s]\nVersion = 145\n", applet_info[current_applet].name); while (fgets (buf, 256, rc) != 0) { ptr = strchr (buf, '='); if (ptr == NULL) break; *ptr = '\0'; tmp = ptr+2; while (strchr (ptr+1, '\"')) ptr = strchr (ptr+1, '\"'); *ptr = '\0'; fprintf (file, "%s = %s\n", convert_old_var (buf), tmp); } break; } fclose (rc); fclose (file); return 1;}char* convert_new_var (char* np);int DoOpenProject(FILE* file){ char buf[256], *ptr, *var; int i; while (fgets (buf, 256, file) != 0) { if (buf[0] != '[') continue; strupr (buf); ptr = strchr (buf, ']'); *ptr = '\0'; for (i = 0; i < NUMAPPLETS; i++) if (strcmp (applet_info[i].name, &buf[1]) == 0) break; if (i == NUMAPPLETS) return -1; if (current_dialog != DLG_STEP0) { if (current_applet != i) return 0; } current_applet = i; while (fgets (buf, 256, file) != 0) { ptr = strchr (buf, '='); if (ptr == NULL) continue; *ptr = 0; ptr++; g_strstrip (ptr); g_strstrip (buf); var = convert_new_var (buf); { char a[256]; strcpy (a, buf); strupr (a); if (strcmp (a, "VERSION") == 0) continue; } SaveVar(applet_info[current_applet].name, var, ptr); } } return 1;}#define PRJ_FILE_HEADER_14 "A J P 1 4"int OpenProject14 (FILE* file){ typedef struct _RegistryEntry { char name[128]; guint32 type; char value[512]; guint32 valueSize; char filler[64]; } RegistryEntry; int iRet = 0; RegistryEntry RegEntry; guint32 nBytesRead = sizeof (RegistryEntry); memset(&RegEntry, 0, sizeof (RegistryEntry)); fread (&RegEntry, nBytesRead, 1, file); if (current_dialog == DLG_STEP0) { int i; for (i = 0; i < NUMAPPLETS; i++) if (strcmp (applet_info[i].name, RegEntry.value) == 0) { current_applet = i; break; } } if (strcmp(RegEntry.value, applet_info[current_applet].name) == 0) { while (fread (&RegEntry, nBytesRead, 1, file) == 1) { SaveVar(applet_info[current_applet].name, RegEntry.name, RegEntry.value); } iRet = 1; } else iRet = 0; message_box(_("Warning ! The project file is in an old format, a resaving with the 'Save project' function is recommended"), 0); return iRet;}int OpenProject(char* a_pstrPathName){ char* strPathName; int iRet = 0; FILE* file; if (a_pstrPathName == NULL) { file_browse ("Open", &strPathName); if (strPathName == NULL) return -1; } else strPathName = g_strdup (a_pstrPathName); file = fopen (strPathName, "r"); g_free (strPathName); if (file != NULL) { char head[10]; fread (head, 1, 10, file); rewind (file); if (strcmp (head, PRJ_FILE_HEADER_14) == 0) iRet = OpenProject14 (file); else iRet = DoOpenProject (file); fclose (file); } switch (iRet) { case -1: message_box(_("Problems during the project opening, verify file format"), 0); break; case 0: message_box(_("Problems during the project opening, verify that the file project is referred to the applet selected at the moment"), 0); break; case 1: if (current_dialog == DLG_STEP0) { if (SetAppletProject(current_applet)) { /* m_pStepDlg->UpdateData(FALSE); SendMessage( WM_COMMAND, MAKEWPARAM( IDC_NEXT, BN_CLICKED ), MAKELPARAM(GetDlgItem(IDC_NEXT)->m_hWnd,0) ); */ } else iRet=0; } restore_dialog_data(0); break; } return iRet;}void FindInArray (const char** aszArray, char* strItemPos){ int i; for (i = 0; aszArray[i] != NULL; i++) { if (strcmp (strItemPos, aszArray[i]) == 0) { sprintf (strItemPos,"%d",i); return; } }}char* PathFromFile(char* szFilePath, char* szPath){ int i, len; strcpy(szPath, szFilePath); len = strlen(szPath); for (i=len; i>=0; i--) { if (szPath[i]=='/') { szPath[i]='\0'; break; } } return szPath;}char* FileFromPath(char* szFilePath, char* szFile){ char szTMP[1024]; int i; strcpy(szTMP, szFilePath); g_strreverse(szTMP); for(i=0; ;i++) { if(szTMP[i] == '/') break; else szFile[i]=szTMP[i]; } szFile[i]='\0'; g_strreverse(szFile); return szFile;}int CopyFile (char *s, char* d){ FILE *src, *dst; void* buf; int l; src = fopen (s, "rb"); if (!src) return 0; dst = fopen (d, "wb"); if (!dst) { fclose (src); return 0; } fseek (src, 0, SEEK_END); l = ftell (src); rewind (src); buf = g_malloc (l); fread (buf, l, 1, src); fwrite (buf, l, 1, dst); g_free (buf); fclose (src); fclose (dst); return 1;}int MyCopyFile(char* szDirOri, char* szDirDest, char* szFileName){ char strOldFile[1024], strNewFile[1024]; strcpy (strOldFile, szDirOri); strcat (strOldFile, "/"); strcat (strOldFile, szFileName); strcpy (strNewFile, szDirDest); strcat (strNewFile, "/"); strcat (strNewFile, szFileName); if (strcmp (strNewFile, strOldFile) != 0) { if( !CopyFile(strOldFile,strNewFile) ) { /* ShowSystemError();//#ifdef _DEBUG CString strMessage; strMessage = "Pathfile origine :"; strMessage += strOldFile; strMessage += "\n"; strMessage += "Pathfile destinazione"; strMessage += strNewFile; strMessage += "\n"; AfxMessageBox(strMessage);//#endif */ return 0; } } /* SetFileAttributes(strNewFile, FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_NORMAL ); */ return 1;}#define LM_to_uint(a,b) (((b)<<8)|(a))int GetFormatAndSize(char* strPathFileName, char* szImgFormat, unsigned int* uiWidth, unsigned int* uiHeight){ FILE* f; int ret = 0; szImgFormat[0]='\0'; f = fopen (strPathFileName, "rb"); if (f != NULL) { unsigned char buf[255]; if (fread (buf, 1, 6, f) == 6) { if (strncmp((char*)buf, "GIF", 3) == 0) { char version[4]; strncpy(version, (char *)buf + 3, 3); version[3] = '\0'; if( strcmp(version,"87a")==0 || strcmp(version,"89a")==0 ) { fread(buf,1,7,f); strcpy(szImgFormat,".gif"); *uiWidth = LM_to_uint(buf[0],buf[1]); *uiHeight = LM_to_uint(buf[2],buf[3]); ret=1; } } } fclose (f); } if (!ret) { if( GetJPEGSize(strPathFileName, uiWidth, uiHeight ) == 0) ret=0; else { strcpy(szImgFormat,".jpg"); ret=1; } } /* if (!ret) message_box(IDS_ERR_IMAGE_FORMAT, MB_OK | MB_ICONEXCLAMATION ); */ return ret;}char* GetScrollTextFile (int applet){ switch (applet) { case APPLET_ANFYBUMP: return "bumpscr.txt"; case APPLET_ANFLAG: return "flagscr.txt"; case APPLET_ANFRACT: return "fracscr.txt"; case APPLET_ANLAKE: return "lakescr.txt"; case APPLET_BLOBS: return "blobscr.txt"; case APPLET_CUBEMENU : return "cbmescr.txt"; case APPLET_DEFORM: return "defscr.txt"; case APPLET_FIRE: return "firescr.txt"; case APPLET_FLOZOIDS: return "flozscr.txt"; case APPLET_FLUID: return "fluidscr.txt"; case APPLET_HUEROT: return "huerscr.txt"; case APPLET_LIFE2D: return "lifescr.txt"; case APPLET_ROTATE: return "rotscr.txt"; case APPLET_PLASMA: return "plasmscr.txt"; case APPLET_ANTUNNEL:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?