마법설명부분은 주석 제거하면 된다. 저 부분은 파택2에만 포함되어 있는 부분이다.
iconv가 아주 지랄같다.
bash에서 head -c 20 |iconv -f euc-kr -t 하면 아주 잘 된다.
그런데 glib에 있는 iconv를 불러서 사용하면 이 지랄이 난다.
뭔가 16bit나 32bit computer문제에 little, big-endian 문제가 섞인거 같기는 한데...
어디에서 생긴 문제인지를 모르겠다.
뭐 어쩌겠는가... 안 되면 어쩔 수 없는거지...
ps:헥스에디터로 자기 속성에 맞는 브레스 마법을 모든 캐릭에게 얹어주니 게임이 아주
빨리 진행되고 재미 있다.
/*!
* \file a.c
* \brief
*
* <+DETAILED+>
*
* \author KIM Hyeok (kh), ekh0324@gmail.com
*
* \internal
* Created: 2019년 03월 18일
* Revision: none
* Compiler: gcc
* Organization: Konkuk University
* Copyright: Copyright (c) 2019, KIM Hyeok
*
* This source code is released for free distribution under the terms of the
* GNU General Public License as published by the Free Software Foundation.
*/
#include
#include
#include
#include
#include
#include
extern int errno;
int main() {
/* iconv_t ic = iconv_open("UTF-8", "CP949");
*/
/* iconv_t ic = iconv_open("CP949", "UTF-8");
*/
// iconv_t ic = iconv_open("UTF8//IGNORE", "CP949");
iconv_t ic = iconv_open("UTF-8", "CP949");
// iconv_t ic = iconv_open("UTF-8//TRANSLIT//IGNORE", "CP949//TRANSLIT//IGNORE");
// iconv_t ic2 = iconv_open("utf-8", "cp949");
if (ic == (iconv_t)(-1))
{
perror("iconv_open");
return 1;
}
char buf[1000];
FILE * input = fopen("magic1.dat", "r");
char* strings = malloc(1000);
short level, mana, firewater, windearth, lightdark;
short min, max;
char* filename= malloc(25);
short sound, targettype, magictype,charactertype;
char* description = malloc(21);
char* outbuf= malloc(1000);
char* inbuf = malloc(100);
size_t insize,outsize;
size_t result;
// fread(inbuf, 1, 108, input);
while(!feof(input)) {
memset(inbuf, 0x00,100);
insize = 20;
outsize = 400;
memset(inbuf, 0x00,insize);
memset(strings, 0x00,1000);
memset(outbuf, 0x00,1000);
fread( inbuf, 1,insize, input);
insize = strlen(inbuf);
result = iconv(ic, &inbuf, &insize,& outbuf, &outsize);
if (result < 0)
{
int err = errno;
strerror_r(errno, buf, sizeof(buf) );
printf("result : %ld, errno : %d(%s)\n", result, errno,buf);
return(-1);
}
else
{
fprintf(stderr, "[%s][(%ld)\n",outbuf, outsize);
}
memcpy(strings,outbuf, 300 );
memset(strings+300, 0x00, 10);;
fread( &level, 2,1, input);
fread( &mana, 2,1, input);
fread( &firewater, 2,1, input);
fread( &windearth, 2,1, input);
fread( &lightdark, 2,1, input);
fread( &min, 2,1, input);
fread( &max, 2,1, input);
insize = 12;
fread( filename, 1,insize, input);
filename[24] = '\0';
fread( &sound, 2,1, input);
fread( &targettype, 2,1, input);
fread( &magictype, 2,1, input);
fread( &charactertype, 2,1, input);
outsize = insize = 12;
/* fread( inbuf, 1,insize, input);
* iconv(ic, &inbuf, &insize, &description, &outsize);
* description[20] = '\0';
*/
printf("name:%s\n", strings);
printf("배우는 레벨은 %d\n", level);
printf("사용하는 마나는 %d\n", mana);
if ( firewater>0 ) {
printf("불마법 (+%d)\n", firewater);
}else if (firewater <0 -firewater="" d="" if="" n="" printf="" windearth="">0 ) {
printf("대기마법 (+%d)\n", windearth);
}else if (windearth <0 -windearth="" d="" if="" lightdark="" n="" printf="">0 ) {
printf("빛마법 (+%d)\n", lightdark);
}else if (lightdark <0 -lightdark="" :="" d="" description="" filename="" max="" min="" n="" printf="" puts="" s="" span="">0>0>0>
댓글
댓글 쓰기