fontconv.cpp
上传用户:jnfxsk
上传日期:2022-06-16
资源大小:3675k
文件大小:5k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /*
  2. ** Haaf's Game Engine 1.8
  3. ** Copyright (C) 2003-2006, Relish Games
  4. ** hge.relishgames.com
  5. **
  6. ** HGE Font Description files 1.XX -> 1.6 converter
  7. */
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <windows.h>
  11. #include "....includehge.h"
  12. HGE *hge = 0;
  13. struct filelist
  14. {
  15. char filename[256];
  16. filelist* next;
  17. };
  18. filelist *files=0;
  19. bool convert(char *filename);
  20. char *_skip_token(char *szStr);
  21. int main(int argc, char* argv[])
  22. {
  23. HANDLE hSearch;
  24. WIN32_FIND_DATA SearchData;
  25. int nfiles=0;
  26. bool done=false;
  27. char *buf, filename[256];
  28. filelist *newFile, *nextFile;
  29. printf("nHGE Font 1.XX -> 1.6 converternCopyright (C) 2003-2006, Relish Gamesnn");
  30. if(argc!=2)
  31. {
  32. printf("Usage: FONTCONV.EXE <wildcard>nn");
  33. printf("All files found by the specified wildcard willn");
  34. printf("be automatically converted to newer format. Bitmap filesn");
  35. printf("should be available along with font description files.nn");
  36. return 0;
  37. }
  38. else
  39. {
  40. hSearch=FindFirstFile(argv[1], &SearchData);
  41. nextFile=0;
  42. for(;;)
  43. {
  44. if(hSearch==INVALID_HANDLE_VALUE || done)
  45. {
  46. FindClose(hSearch);
  47. break;
  48. }
  49. if(!(SearchData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
  50. {
  51. strcpy(filename, argv[1]);
  52. buf=strrchr(filename, '\');
  53. if(!buf) buf=filename; else buf++;
  54. strcpy(buf,SearchData.cFileName);
  55. newFile=new filelist;
  56. strcpy(newFile->filename,filename);
  57. newFile->next=0;
  58. if(nextFile) nextFile->next=newFile;
  59. else files=newFile;
  60. nextFile=newFile;
  61. }
  62. done=!FindNextFile(hSearch, &SearchData);
  63. }
  64. hge=hgeCreate(HGE_VERSION);
  65. hge->System_SetState(HGE_USESOUND, false);
  66. hge->System_SetState(HGE_WINDOWED, true);
  67. hge->System_SetState(HGE_SCREENWIDTH, 640);
  68. hge->System_SetState(HGE_SCREENHEIGHT, 480);
  69. if(!hge->System_Initiate())
  70. {
  71. hge->Release();
  72. printf("nCan't initiate HGE.nn",nfiles);
  73. return 0;
  74. }
  75. newFile=files;
  76. while(newFile)
  77. {
  78. if(convert(newFile->filename)) nfiles++;
  79. nextFile=newFile->next;
  80. delete newFile;
  81. newFile=nextFile;
  82. }
  83. hge->System_Shutdown();
  84. hge->Release();
  85. printf("n%d file(s) successfully converted.nn",nfiles);
  86. return 0;
  87. }
  88. }
  89. bool convert(char *filename)
  90. {
  91. static char signature1[]="[HGEFONT]";
  92. static char signature2[]="[hgefont]";
  93. static char tempfile[]="tmpfont.tmp";
  94. FILE *hf;
  95. char *desc, *pdesc, strbuf[256], texname[256], *pbuf;
  96. int intbuf, i, height, texx, texy, tex_width;
  97. long size;
  98. HTEXTURE htex;
  99. printf("%s - ",filename);
  100. hf=fopen(filename, "r");
  101. if(hf==NULL) { printf("Can't open filen"); return false; }
  102. fseek(hf, 0, SEEK_END);
  103. size=ftell(hf);
  104. rewind(hf);
  105. desc=(char *)malloc(size);
  106. if(desc==NULL) { printf("Can't allocate buffern"); fclose(hf); return false; }
  107. fread(desc, 1, size, hf);
  108. fclose(hf);
  109. if(!strncmp(desc,signature1,strlen(signature1)) ||
  110.    !strncmp(desc,signature2,strlen(signature2)) )
  111. { printf("Already convertedn"); return false; }
  112. pdesc=desc;
  113. hf=fopen(tempfile, "w");
  114. if(hf==NULL) { printf("Can't create temporary filen"); free(desc); return false; }
  115. fprintf(hf,"[HGEFONT]nn");
  116. sscanf(pdesc, " %s", strbuf);
  117. fprintf(hf,"Bitmap=%snn",strbuf);
  118. pdesc=_skip_token(pdesc);
  119. strcpy(texname,filename);
  120. pbuf=strrchr(texname,'\');
  121. if(!pbuf) pbuf=texname; else pbuf++;
  122. strcpy(pbuf, strbuf);
  123. htex=hge->Texture_Load(texname);
  124. if(!htex) { printf("Can't load bitmapn"); fclose(hf); free(desc); return false; }
  125. tex_width=hge->Texture_GetWidth(htex);
  126. printf("%s %dx%d - ",texname, tex_width, hge->Texture_GetWidth(htex));
  127. hge->Texture_Free(htex);
  128. texx=texy=0;
  129. sscanf(pdesc, " %d", &height);
  130. //fprintf(hf,"Height=%dn",height);
  131. pdesc=_skip_token(pdesc);
  132. for(i=0; i<256; i++)
  133. {
  134. intbuf=0;
  135. sscanf(pdesc, " %d", &intbuf);
  136. if(!intbuf) break;
  137. pdesc=_skip_token(pdesc);
  138. if(intbuf<0) i+=abs(intbuf)-1;
  139. else
  140. {
  141. if(texx+intbuf > tex_width) {texy+=height;texx=0;}
  142. if(i>=32 && i<=126) fprintf(hf,"Char="%c",%d,%d,%d,%d,0,0n", (char)i, texx, texy, intbuf, height);
  143. else fprintf(hf,"Char=%2X,%d,%d,%d,%dn", i, texx, texy, intbuf, height);
  144. texx+=intbuf;
  145. }
  146. }
  147. fclose(hf);
  148. free(desc);
  149. if(!DeleteFile(filename)) { printf("Can't replace filen"); return false; }
  150. if(!MoveFile(tempfile, filename)) { printf("Sorry! Due to system failure the file seems lostn"); return false; }
  151. printf("Okn");
  152. return true;
  153. }
  154. char *_skip_token(char *szStr)
  155. {
  156. while(*szStr && (*szStr==' ' || *szStr=='t' || *szStr=='n' || *szStr=='r')) szStr++;
  157. while(*szStr && (*szStr!=' ' && *szStr!='t' && *szStr!='n' && *szStr!='r')) szStr++;
  158. return szStr;
  159. }