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 + -
显示快捷键?