Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[1376] Re:[질문] 그래픽 환경에서 한글 폰트로 작업 하고 싶습니다.
최준호.스페로 [sparrow] 1520 읽음    2002-10-18 11:39
안녕하세요 스페로 입니다.

아주 오래전에 자체 한글을 만든 적이 잇거덩요...

라이브러리를 쓰지 않고 .. 만든거죠.. 온리 C언어로만요..

지금 생각하면 생쑈라고 생각합니다..

아래 소스는 그때 만들었던걸 보존 시키고 잇는 건데요...

한글 1.x 버젼에 FNT확장자에 폰트 파일이 필요 합니다.

그럼 도움이 되시길...

그리고 그당시 제가 공부했던 책은 C프로그램이렇게 짠다 황희융저 입니다.

거기에보면 한글 라이브러리 만드는 쳅터가 방대한 분량으로 잇음다..

그런데 지금 생각하면 과거의 멋진 추억일뿐 쓸데 없는 일이 었음다...

아래 소스를 보시면 알겟지만 만만치 않은 노가다이고요..

저두 지금 보면 새록 새록하고 내가 어케 이런걸 했는지 놀랍습니다..

그럼 숙오하세요~






 
//Borland C++3.1 로 구현한 한글라이브러리
//베이직으로 구현했던 한글라이브러리를 컨버젼한것 입니다. 순수한 C언어로 구성된
//한글라이브러리 입니다. 키입력을 받아 화면에 글씨를 쓰는 사용자 함수 까지
//버젼업을 하였습니다.

//Borland C++3.1 Hangul Library
//--------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>
#include <graphics.h>
#include <conio.h>

#define TRUE     1
#define FALSE    0

//SPARROW SOFT Hangul Libary C version2.1
//Copyright 1994,95,96 Sparrow soft programmed by Choi Jun ho

void hangule_font_open(void);
void ascii_font_open(void);

void han_put(int x1,int y1,int h_number,int color);
void hangule_put(int x,int y,unsigned char *p,int color);
void hangule_put1(int x,int y,int f_code,int m_code,int l_code,int color);
void ascii_put(int x1, int y1, int A_number, int color);
void characters_put(int x,int y,unsigned char *p,int color);
void write_han(int x,int y,int color ,int bcolor,char *p);
void write_ascii(int x, int y);
void clear_char(int x,int y,int color,int size);


int hangul_f[470][32];
int ascii_f[127][16];


main()
{
    int r=DETECT,d;
    char Han_ascii[80];
    int i,x1=10;
    int color=1;

    hangule_font_open();
    ascii_font_open();

    initgraph(&r,&d,"");
    write_han(10,20,1,0,Han_ascii);
    characters_put(10,100,Han_ascii,1);
    getch();
    closegraph();
}

void hangule_font_open(void)
{
     FILE *fp;

     int j,i;

     if ((fp=fopen ("hangul.fnt","rb"))==NULL){
        printf("File not found \"hangul.fnt\"");
        exit(-1);
     }

     for (i=0;i<=470;i++)
      for (j=0;j<=31;j++) {
       hangul_f[i][j]=(int)fgetc(fp);
      }
     fclose(fp);
     for (i=0;i<=31;i++)
    hangul_f[0][i]=0;
}
void clear_char(int x,int y,int color,int size)
{
   int i,j;
   for (i=1;i<=16;i++)
      for ( j=1;j<=size;j++)
      putpixel(x+j,y+i,color);

}

void han_put(int x1,int y1,int h_number,int color)
{
  int j,i,b=0;
  int x=1,y=1;
  int hangul_b[32][8];

  for (i=0;i<=31;i++) {
       b=hangul_f[h_number][i];
      for (j=7;j>=0;j--) {
      hangul_b[i][j]=b%2;
      b=b/2;
      }

      for (j=0;j<=7;j++) {
      x++;
      if (hangul_b[i][j]==1)
          putpixel(x1+x,y1+y,color);
      if (h_number==0)
          putpixel(x1+x,y1+y,0);

      if (x==17){
      x=1;
      y++;
      if (y==17) y=1;
      }
      }
  }
}



void hangule_put(int x,int y,unsigned char *p,int color)
{
  int a,b,i,k,k1;
  int bin[16];
  int f_code=0,m_code=0,l_code=0;

  int f_index,m_index,l_index;

  a=(int)*p;
  b=(int)*(p+1);

  for (i=7;i>=0;i--) {
     k=a/2;
     k1=b/2;
     bin[i]=a%2;
     bin[8+i]=b%2;
     a=k;
     b=k1;
  }
  for (i=1;i<=15;i++) {
      if (i==1) k=bin[i]*16;
      if (i==2) k=bin[i]*8;
      if (i==3) k=bin[i]*4;
      if (i==4) k=bin[i]*2;
      if (i==5) k=bin[i]*1;
      f_code=f_code+k;
      k=0;
      if (i==6) k=bin[i]*16;
      if (i==7) k=bin[i]*8;
      if (i==8) k=bin[i]*4;
      if (i==9) k=bin[i]*2;
      if (i==10) k=bin[i]*1;
      m_code=m_code+k;
      k=0;
      if (i==11) k=bin[i]*16;
      if (i==12) k=bin[i]*8;
      if (i==13) k=bin[i]*4;
      if (i==14) k=bin[i]*2;
      if (i==15) k=bin[i]*1;
      l_code=l_code+k;
      k=0;

  }
  if (l_code==1){
     if (m_code >= 0 && m_code <= 12) f_index=0;
     if (m_code == 13) f_index=19;
     if (m_code >= 14 && m_code <= 15) f_index=57;
     if (m_code >= 16 && m_code <= 17) f_index=0;
     if (m_code == 18) f_index=57;
     if (m_code == 19) f_index=19;
     if (m_code == 20) f_index=38;
     if (m_code >= 21 && m_code <=23) f_index=76;
     if (m_code >= 24 && m_code <=25) f_index=0;
     if (m_code == 26 ) f_index=38;
     if (m_code == 27 ) f_index=19;
     if (m_code == 28 ) f_index=57;
     if (m_code >= 29 && m_code <=31) f_index=0;

     if (f_code >= 0 && f_code <= 2) m_index=190;
     if (f_code >= 3 && f_code <= 16) m_index=244;
     if (f_code == 17 ) m_index=190;
     if (f_code >= 18 && f_code <= 19) m_index=244;
     if (f_code == 20 ) m_index=217;
     if (f_code >= 21 && f_code <= 31) m_index=244;

     han_put (x,y,f_code-1+f_index,color);
     han_put (x,y,m_code-2+m_index,color);

  }
  else {
     if (m_code >= 0 && m_code <= 12) f_index=95;
     if (m_code == 13) f_index=114;
     if (m_code >= 14 && m_code <= 15) f_index=152;
     if (m_code >= 16 && m_code <= 17) f_index=95;
     if (m_code == 18) f_index=152;
     if (m_code == 19) f_index=114;
     if (m_code == 20) f_index=133;
     if (m_code >= 21 && m_code <=23) f_index=171;
     if (m_code >= 24 && m_code <=25) f_index=95;
     if (m_code == 26 ) f_index=133;
     if (m_code == 27 ) f_index=114;
     if (m_code == 28 ) f_index=152;
     if (m_code >= 29 && m_code <=31) f_index=95;

     if (f_code >= 0 && f_code <= 2) m_index=271;
     if (f_code >= 3 && f_code <= 16) m_index=325;
     if (f_code == 17 ) m_index=271;
     if (f_code >= 18 && f_code <= 19) m_index=325;
     if (f_code == 20 ) m_index=298;
     if (f_code >= 21 && f_code <= 31) m_index=325;

     if (m_code >= 0 && m_code <=3 ) l_index=352;
     if (m_code == 4 ) l_index=408;
     if (m_code == 5 ) l_index=352;
     if (m_code == 6 ) l_index=408;
     if (m_code == 7 ) l_index=380;
     if (m_code >= 8 && m_code <= 9) l_index=352;
     if (m_code == 10 ) l_index=408;
     if (m_code == 11 ) l_index=380;
     if (m_code == 12 ) l_index=408;
     if (m_code == 13 ) l_index=436;
     if (m_code == 14 ) l_index=380;
     if (m_code == 15 ) l_index=408;
     if (m_code >= 16 && m_code <= 17 ) l_index=352;
     if (m_code == 18 ) l_index=380;
     if (m_code >= 19 && m_code <= 20 ) l_index=436;
     if (m_code == 21 ) l_index=380;
     if (m_code == 22 ) l_index=408;
     if (m_code == 23 ) l_index=380;
     if (m_code >= 24 && m_code <= 25) l_index=352;
     if (m_code >= 26 && m_code <= 27) l_index=436;
     if (m_code == 28 ) l_index=380;
     if (m_code >= 29 && m_code <= 31) l_index=352;

     han_put (x,y,f_code-1+f_index,color);
     han_put (x,y,m_code-2+m_index,color);
     han_put (x,y,l_code-1+l_index,color);


  }

}

void ascii_font_open(void)
{
     FILE *fp;

     int j,i;

     if ((fp=fopen ("ascii.fnt","rb"))==NULL) {
           printf("File not found");
           exit(-1);
     }
     fseek(fp,32,SEEK_SET);
     for (i=0;i<=127;i++)
      for (j=0;j<=15;j++) {
       ascii_f[i][j]=fgetc(fp);
      }
     fclose(fp);
     for (i=0;i<=16;i++)
    ascii_f[0][i]=0;
}
void ascii_put(int x1,int y1,int A_number,int color)
{
  int j,i,b=0;
  int x=1,y=1;
  int ascii_b[16][8];

  for (i=0;i<=15;i++) {
       b=ascii_f[A_number][i];
      for (j=7;j>=0;j--) {
      ascii_b[i][j]=b%2;
          b=b/2;
      }

      for (j=0;j<=7;j++) {
      x++;
      if (ascii_b[i][j]==1)
              putpixel(x1+x,y1+y,color);
      if (A_number==0)
          putpixel(x1+x,y1+y,ascii_b[i][j]);

      if (x==9){
          x=1;
          y++;
          if (y==17) y=1;
      }
      }
  }
}
void write_ascii(int x, int y)
{
   int ch;
   int x1=x,y1=y;
   int A_number;
   while (1){
l1:
     ch=getch();
     if (ch==13)  {
    y1=y1+16;
    x1=10;
    goto l1;
     }
     if (ch==14)  A_number=14;    /*a*/
     if (ch==15)  A_number=15;   /*b*/
     if (ch==16)  A_number=16;   /*c*/
     if (ch==17)  A_number=17;  /*d*/
     if (ch==18)  A_number=18;   /*e*/
     if (ch==19)  A_number=19;   /*E*/
     if (ch==20)  A_number=20;   /*f*/
     if (ch==21)  A_number=21;   /*f*/
     if (ch==22)  A_number=22;   /*f*/
     if (ch==23)  A_number=23;  /*g*/
     if (ch==24)  A_number=24;  /*h*/
     if (ch==25)  A_number=25;   /*i*/
     if (ch==26)  A_number=26;   /*j*/
     if (ch==27)  break;
     if (ch==28)  A_number=28;  /*l*/
     if (ch==29)  A_number=29;  /*m*/
     if (ch==30)  A_number=30;   /*o*/
     if (ch==31)  A_number=31;   /*O*/
     if (ch==32)  A_number=32;  /*p*/
     if (ch==33)  A_number=33;  /*P*/
     if (ch==34)  A_number=34;   /*q*/
     if (ch==35)  A_number=35;  /*Q*/
     if (ch==36)  A_number=36;   /*r*/
     if (ch==37)  A_number=37;    /*R*/
     if (ch==38)  A_number=38;   /*s*/
     if (ch==39)  A_number=39;  /*t*/
     if (ch==40)  A_number=40;  /*T*/
     if (ch==41)  A_number=41;  /*u*/
     if (ch==42)  A_number=42;  /*v*/
     if (ch==43)  A_number=43;  /*w*/
     if (ch==44)  A_number=44;  /*W*/
     if (ch==45)  A_number=45;  /*x*/
     if (ch==46)  A_number=46;  /*y*/
     if (ch==47)  A_number=47;  /*z*/
     if (ch==48)  A_number=48;    /*a*/
     if (ch==49)  A_number=49;   /*b*/
     if (ch==50)  A_number=50;   /*c*/
     if (ch==51)  A_number=51;  /*d*/
     if (ch==52)  A_number=52;   /*e*/
     if (ch==53)  A_number=53;   /*E*/
     if (ch==54)  A_number=54;   /*f*/
     if (ch==55)  A_number=55;  /*g*/
     if (ch==56)  A_number=56;  /*h*/
     if (ch==57)  A_number=57;   /*i*/
     if (ch==58)  A_number=58;   /*j*/
     if (ch==59)  A_number=59;   /*k*/
     if (ch==60)  A_number=60;  /*l*/
     if (ch==61)  A_number=61;  /*m*/
     if (ch==62)  A_number=62;  /*n*/
     if (ch==63)  A_number=63;   /*o*/
     if (ch==64)  A_number=64;   /*O*/
     if (ch==65)  A_number=65;  /*p*/
     if (ch==66)  A_number=66;  /*P*/
     if (ch==67)  A_number=67;   /*q*/
     if (ch==68)  A_number=68;  /*Q*/
     if (ch==69)  A_number=69;   /*r*/
     if (ch==70)  A_number=70;    /*R*/
     if (ch==71)  A_number=71;   /*s*/
     if (ch==72)  A_number=72;  /*t*/
     if (ch==73)  A_number=73;  /*T*/
     if (ch==74)  A_number=74;  /*u*/
     if (ch==75)  A_number=75;  /*v*/
     if (ch==76)  A_number=76;  /*w*/
     if (ch==77)  A_number=77;  /*W*/
     if (ch==78)  A_number=78;  /*x*/
     if (ch==79)  A_number=79;  /*y*/
     if (ch==80)  A_number=80;  /*y*/
     if (ch==81)  A_number=81;  /*z*/
     if (ch==82)  A_number=82;  /*z*/
     if (ch==83)  A_number=83;  /*z*/
     if (ch==84)  A_number=84;  /*z*/
     if (ch==85)  A_number=85;  /*z*/
     if (ch==86)  A_number=86;  /*z*/
     if (ch==87)  A_number=87;  /*z*/
     if (ch==88)  A_number=88;  /*z*/
     if (ch==89)  A_number=89;  /*z*/
     if (ch==90)  A_number=90;  /*z*/
     if (ch==91)  A_number=91;  /*z*/
     if (ch==92)  A_number=92;  /*z*/
     if (ch==93)  A_number=93;  /*z*/
     if (ch==94)  A_number=94;  /*z*/
     if (ch==95)  A_number=95;  /*z*/
     if (ch==96)  A_number=96;  /*z*/
     if (ch==97)  A_number=97;    /*a*/
     if (ch==98)  A_number=98;   /*b*/
     if (ch==99)  A_number=99;   /*c*/
     if (ch==100) A_number=100;  /*d*/
     if (ch==101) A_number=101;   /*e*/
     if (ch==102) A_number=102;   /*f*/
     if (ch==103) A_number=103;  /*g*/
     if (ch==104) A_number=104;  /*h*/
     if (ch==105) A_number=105;   /*i*/
     if (ch==106) A_number=106;   /*j*/
     if (ch==107) A_number=107;   /*k*/
     if (ch==108) A_number=108;  /*l*/
     if (ch==109) A_number=109;  /*m*/
     if (ch==110) A_number=110;  /*n*/
     if (ch==111) A_number=111;   /*o*/
     if (ch==112) A_number=112;  /*p*/
     if (ch==113) A_number=113;   /*q*/
     if (ch==114) A_number=114;   /*r*/
     if (ch==115) A_number=115;   /*s*/
     if (ch==116) A_number=116;  /*t*/
     if (ch==117) A_number=117;  /*u*/
     if (ch==118) A_number=118;  /*v*/
     if (ch==119) A_number=119;  /*w*/
     if (ch==120) A_number=120;  /*x*/
     if (ch==121) A_number=121;  /*y*/
     if (ch==122) A_number=122;  /*z*/
     if (ch==123)  A_number=123;  /*y*/
     if (ch==124)  A_number=124;  /*y*/
     if (ch==125)  A_number=125;  /*y*/
     if (ch==126)  A_number=126;  /*y*/
     if (ch==127)  A_number=127;  /*y*/
     if (ch==128)  A_number=128;  /*y*/
     if (ch==129)  A_number=129;  /*y*/
     if (ch==130)  A_number=130;  /*y*/
     if (ch==131)  A_number=131;  /*y*/
     if (ch==132)  A_number=132;  /*y*/
     if (ch==133)  A_number=133;  /*y*/
     if (ch==134)  A_number=134;  /*y*/
     if (ch==135)  A_number=135;  /*y*/
     if (ch==136)  A_number=136;  /*y*/
     if (ch==137)  A_number=137;  /*y*/
     if (ch==138)  A_number=138;  /*y*/
     if (ch==139)  A_number=139;  /*y*/
     if (ch==140)  A_number=140;  /*y*/
     if (ch==141)  A_number=141;  /*y*/
     if (ch==142)  A_number=142;  /*y*/
     if (ch==143)  A_number=143;  /*y*/
     if (ch==144)  A_number=144;  /*y*/
     if (ch==145)  A_number=145;  /*y*/
     if (ch==146)  A_number=146;  /*y*/
     if (ch==147)  A_number=147;  /*y*/
     if (ch==148)  A_number=148;  /*y*/
     if (ch==149)  A_number=149;  /*y*/
     if (ch==150)  A_number=150;  /*y*/
     if (ch==151)  A_number=151;  /*y*/
     if (ch==152)  A_number=152;  /*y*/
     if (ch==153)  A_number=153;  /*y*/
     if (ch==154)  A_number=154;  /*y*/
     if (ch==155)  A_number=155;  /*y*/
     if (ch==156)  A_number=156;  /*y*/
     if (ch==157)  A_number=157;  /*y*/
     if (ch==158)  A_number=158;  /*y*/
     if (ch==159)  A_number=159;  /*y*/
     if (ch==160)  A_number=160;  /*y*/
     if (ch==161)  A_number=161;  /*y*/
     if (ch==162)  A_number=162;  /*y*/
     if (ch==163)  A_number=163;  /*y*/
     if (ch==164)  A_number=164;  /*y*/
     if (ch==165)  A_number=165;  /*y*/
     if (ch==166)  A_number=166;  /*y*/
     if (ch==167)  A_number=167;  /*y*/
     if (ch==168)  A_number=168;  /*y*/
     if (ch==169)  A_number=169;  /*y*/
     if (ch==170)  A_number=170;  /*y*/
     if (ch==171)  A_number=171;  /*y*/
     if (ch==172)  A_number=172;  /*y*/
     if (ch==173)  A_number=173;  /*y*/
     if (ch==174)  A_number=174;  /*y*/
     if (ch==175)  A_number=175;  /*y*/
     if (ch==176)  A_number=176;  /*y*/
     if (ch==177)  A_number=177;  /*y*/
     if (ch==178)  A_number=178;  /*y*/
     if (ch==179)  A_number=179;  /*y*/
     if (ch==180)  A_number=180;  /*y*/
     if (ch==181)  A_number=181;  /*y*/
     if (ch==182)  A_number=182;  /*y*/
     if (ch==183)  A_number=183;  /*y*/
     if (ch==184)  A_number=184;  /*y*/
     if (ch==185)  A_number=185;  /*y*/
     if (ch==186)  A_number=186;  /*y*/
     if (ch==187)  A_number=187;  /*y*/
     if (ch==188)  A_number=188;  /*y*/
     if (ch==189)  A_number=189;  /*y*/
     if (ch==190)  A_number=190;  /*y*/
     if (ch==191)  A_number=191;  /*y*/
     if (ch==192)  A_number=192;  /*y*/
     if (ch==193)  A_number=193;  /*y*/
     if (ch==194)  A_number=194;  /*y*/
     if (ch==195)  A_number=195;  /*y*/
     if (ch==196)  A_number=196;  /*y*/
     if (ch==197)  A_number=197;  /*y*/
     if (ch==198)  A_number=198;  /*y*/
     if (ch==199)  A_number=199;  /*y*/
     if (ch==200)  A_number=200;  /*y*/
     if (ch==201)  A_number=201;  /*y*/
     if (ch==202)  A_number=202;  /*y*/
     if (ch==203)  A_number=203;  /*y*/
     if (ch==204)  A_number=204;  /*y*/
     if (ch==205)  A_number=205;  /*y*/
     if (ch==206)  A_number=206;  /*y*/
     if (ch==207)  A_number=207;  /*y*/
     if (ch==208)  A_number=208;  /*y*/
     if (ch==209)  A_number=209;  /*y*/
     if (ch==210)  A_number=210;  /*y*/
     if (ch==211)  A_number=211;  /*y*/
     if (ch==212)  A_number=212;  /*y*/
     if (ch==213)  A_number=213;  /*y*/
     if (ch==214)  A_number=214;  /*y*/
     if (ch==215)  A_number=215;  /*y*/
     if (ch==216)  A_number=216;  /*y*/
     if (ch==217)  A_number=217;  /*y*/
     if (ch==218)  A_number=218;  /*y*/
     if (ch==219)  A_number=219;  /*y*/
     if (ch==220)  A_number=220;  /*y*/
     if (ch==221)  A_number=221;  /*y*/
     if (ch==222)  A_number=222;  /*y*/
     if (ch==223)  A_number=223;  /*y*/
     if (ch==224)  A_number=224;  /*y*/
     if (ch==225)  A_number=225;  /*y*/
     if (ch==226)  A_number=226;  /*y*/
     if (ch==227)  A_number=227;  /*y*/
     if (ch==228)  A_number=228;  /*y*/
     if (ch==229)  A_number=229;  /*y*/
     if (ch==230)  A_number=230;  /*y*/
     if (ch==231)  A_number=231;  /*y*/
     if (ch==232)  A_number=232;  /*y*/
     if (ch==233)  A_number=233;  /*y*/
     if (ch==234)  A_number=234;  /*y*/
     if (ch==235)  A_number=235;  /*y*/
     if (ch==236)  A_number=236;  /*y*/
     if (ch==237)  A_number=237;  /*y*/
     if (ch==238)  A_number=238;  /*y*/
     if (ch==239)  A_number=239;  /*y*/
     if (ch==240)  A_number=240;  /*y*/
     if (ch==241)  A_number=241;  /*y*/
     if (ch==242)  A_number=242;  /*y*/
     if (ch==243)  A_number=243;  /*y*/
     if (ch==244)  A_number=244;  /*y*/
     if (ch==245)  A_number=245;  /*y*/
     if (ch==246)  A_number=246;  /*y*/
     if (ch==247)  A_number=247;  /*y*/
     if (ch==248)  A_number=248;  /*y*/
     if (ch==249)  A_number=249;  /*y*/
     if (ch==250)  A_number=250;  /*y*/
     if (ch==251)  A_number=251;  /*y*/
     if (ch==252)  A_number=252;  /*y*/
     if (ch==253)  A_number=253;  /*y*/
     if (ch==254)  A_number=254;  /*y*/
     if (ch==255)  A_number=255;  /*y*/
     x1=x1+8;
     ascii_put( x1, y1, A_number, 1);
   }
}
void characters_put(int x,int y,unsigned char *p,int color)
{
    int k,last;
    int i;

    last=strlen(p);

    for (i=1;i<=last;i++){
    k=(int)*p;

    if ((int)*p>=128){
         hangule_put(x,y,p,color);
         x=x+16;
         p=p+2;
         i++;
    }
    else {
         ascii_put(x,y,k,1);
         x=x+8;
         p++;
    }
    }
}
void hangule_put1(int x,int y,int f_code,int m_code,int l_code,int color)
{
  int f_index,m_index,l_index;

  if (l_code==1){
     if (m_code >= 0 && m_code <= 12) f_index=0;
     if (m_code == 13) f_index=19;
     if (m_code >= 14 && m_code <= 15) f_index=57;
     if (m_code >= 16 && m_code <= 17) f_index=0;
     if (m_code == 18) f_index=57;
     if (m_code == 19) f_index=19;
     if (m_code == 20) f_index=38;
     if (m_code >= 21 && m_code <=23) f_index=76;
     if (m_code >= 24 && m_code <=25) f_index=0;
     if (m_code == 26 ) f_index=38;
     if (m_code == 27 ) f_index=19;
     if (m_code == 28 ) f_index=57;
     if (m_code >= 29 && m_code <=31) f_index=0;

     if (f_code >= 0 && f_code <= 2) m_index=190;
     if (f_code >= 3 && f_code <= 16) m_index=244;
     if (f_code == 17 ) m_index=190;
     if (f_code >= 18 && f_code <= 19) m_index=244;
     if (f_code == 20 ) m_index=217;
     if (f_code >= 21 && f_code <= 31) m_index=244;

     han_put (x,y,f_code-1+f_index,color);
     han_put (x,y,m_code-2+m_index,color);

  }
  else {
     if (m_code >= 0 && m_code <= 12) f_index=95;
     if (m_code == 13) f_index=114;
     if (m_code >= 14 && m_code <= 15) f_index=152;
     if (m_code >= 16 && m_code <= 17) f_index=95;
     if (m_code == 18) f_index=152;
     if (m_code == 19) f_index=114;
     if (m_code == 20) f_index=133;
     if (m_code >= 21 && m_code <=23) f_index=171;
     if (m_code >= 24 && m_code <=25) f_index=95;
     if (m_code == 26 ) f_index=133;
     if (m_code == 27 ) f_index=114;
     if (m_code == 28 ) f_index=152;
     if (m_code >= 29 && m_code <=31) f_index=95;

     if (f_code >= 0 && f_code <= 2) m_index=271;
     if (f_code >= 3 && f_code <= 16) m_index=325;
     if (f_code == 17 ) m_index=271;
     if (f_code >= 18 && f_code <= 19) m_index=325;
     if (f_code == 20 ) m_index=298;
     if (f_code >= 21 && f_code <= 31) m_index=325;

     if (m_code >= 0 && m_code <=3 ) l_index=352;
     if (m_code == 4 ) l_index=408;
     if (m_code == 5 ) l_index=352;
     if (m_code == 6 ) l_index=408;
     if (m_code == 7 ) l_index=380;
     if (m_code >= 8 && m_code <= 9) l_index=352;
     if (m_code == 10 ) l_index=408;
     if (m_code == 11 ) l_index=380;
     if (m_code == 12 ) l_index=408;
     if (m_code == 13 ) l_index=436;
     if (m_code == 14 ) l_index=380;
     if (m_code == 15 ) l_index=408;
     if (m_code >= 16 && m_code <= 17 ) l_index=352;
     if (m_code == 18 ) l_index=380;
     if (m_code >= 19 && m_code <= 20 ) l_index=436;
     if (m_code == 21 ) l_index=380;
     if (m_code == 22 ) l_index=408;
     if (m_code == 23 ) l_index=380;
     if (m_code >= 24 && m_code <= 25) l_index=352;
     if (m_code >= 26 && m_code <= 27) l_index=436;
     if (m_code == 28 ) l_index=380;
     if (m_code >= 29 && m_code <= 31) l_index=352;

     han_put (x,y,f_code-1+f_index,color);
     han_put (x,y,m_code-2+m_index,color);
     han_put (x,y,l_code-1+l_index,color);


  }

}

void write_han(int x, int y, int color, int bcolor, char *Han_ascii)
{
    int ch,prove=TRUE;
    int first,midle,last;
    int old_first,old_midle,old_last;
    int A_number;
    int sw=0,sw1=0,n=0,i,j,k,n1=0,t=0;
    int k1=0;

    int x1=x,y1=y,counter=0;
    int Han_code[240];
    int binary[16];

    int b[8]={1,2,4,8,16,32,64,128};
    binary[15]=1;

    for (i=0;i<=237;i+=3){
    Han_code[i]=1;
    Han_code[i+1]=24;
    Han_code[i+2]=1;
    }

    first=1,old_first=1;
    midle=24,old_midle=24;
    last=1,old_last=1;


    while (prove){
l1:

     ch=getch();
    gotoxy(10,10);
    printf("%d",k1);
    if (ch==32){
        n+=3;
        Han_code[n]=0;
        Han_code[n+1]=0;
        Han_code[n+2]=0;
        n+=3;
        counter=0;
        x1=x1+24;
        first=1;
        midle=24;
        last=1;
        goto l1;
    }
    if (ch==8){
        k1=k1+1;
        if (sw1==1) {
          k1=0;
        }
        Han_code[n]=1;
        Han_code[n+1]=24;
        Han_code[n+2]=1;

        first=1;
        midle=24;
        last=1;
        old_first=1;
        old_midle=24;
        old_last=1;
        if (k1>=1) {
           n=n-3;
           x1=x1-16;
        }
        clear_char(x1,y1,bcolor,16);
        counter=0;
        sw1=0;
        goto l1;

    }
    sw1=1;
    if (ch==13) {
       for (j=0;j<=n;j+=3){
          k=Han_code[j+2];
          if (Han_code[j]==0 && Han_code[j+1]==0 && Han_code[j+2]==0){

        Han_ascii[n1]=32;
        n1=n1+1;
        continue;
          }
          for (i=0;i<=14;i++){
        if (i==5) k=Han_code[j+1];
        if (i==10) k=Han_code[j];
        binary[i]=(k%2);
        k=k/2;
          }
          k=0;
          t=0;
          for (i=8;i<=15;i++){
          t=t+binary[i]*b[k];
          k=k+1;
          }
          Han_ascii[n1]=(char)t;
          k=0;
          t=0;
          n1=n1+1;
          for (i=0;i<=7;i++){
          t=t+binary[i]*b[k];
          k=k+1;
          }
          Han_ascii[n1]=(char)t;
          n1=n1+1;
       }
         Han_ascii[n1]='\0';
       break;
    }

    if (ch!=32) counter=counter+1;

    if (counter>3)  {
        old_first=first;
        old_midle=midle;

        if (sw==0) last=1;
        sw=0;
        first=1;
        midle=24;
        x1=x1+16;
    }
    if (counter==3) {
       if (ch==97)   {
           last=17;    /*a*/
           old_last=8;
       }
       if (ch==99){
           last=25;   /*c*/
           old_last=16;
       }
       if (ch==100){
           last=23;   /*d*/
           old_last=13;
       }
       if (ch==101){
           last=8;    /*e*/
           old_last=5;
       }
       if (ch==102){
           last=9;    /*f*/
           old_last=7;
       }
       if (ch==103){
           last=29;   /*g*/
           old_last=20;
       }
       if (ch==113){
           last=19;    /*q*/
           old_last=9;
       }
       if (ch==114){
           last=2;    /*r*/
           old_last=2;
       }
       if (ch==82){
           last=3;    /*R*/
           old_last=3;
       }
       if (ch==115){
           last=5;    /*s*/
           old_last=4;
       }
       if (ch==116){
           last=21;   /*t*/
           old_last=11;
       }
       if (ch==84) {
           last=22;   /*T*/
           old_last=12;
       }
       if (ch==118){
           last=28;   /*v*/
           old_last=19;
       }
       if (ch==119){
           last=24;   /*w*/
           old_last=14;
       }
       if (ch==120){
           last=27;   /*x*/
           old_last=18;
       }
       if (ch==122){
           last=26;   /*z*/
           old_last=17;
       }
       if ((ch>=106 && ch<=108) ||(ch>=111 && ch<=112)){
        if (ch==106)  old_midle=7;   /*j*/
        if (ch==107)  old_midle=3;   /*k*/
        if (ch==108)  old_midle=29;  /*l*/
        if (ch==111)  old_midle=4;   /*o*/
        if (ch==112)  old_midle=10;  /*p*/
        if (midle==13 && old_midle==3) midle=14;
        if (midle==13 && old_midle==4) midle=15;
        if (midle==13 && old_midle==29) midle=18;
        if (midle==20 && old_midle==7) midle=21;
        if (midle==20 && old_midle==10) midle=22;
        if (midle==20 && old_midle==29) midle=23;
        if (midle==27 && old_midle==29) midle=28;
        counter=2;
       }

       goto PUT_HAN;
    }

    if (ch==97)  first=8;    /*a*/
    if (ch==98)  midle=26;   /*b*/
    if (ch==99)  first=16;   /*c*/
    if (ch==100)  first=13;  /*d*/
    if (ch==101)  first=5;   /*e*/
    if (ch==69)   first=6;   /*E*/
    if (ch==102)  first=7;   /*f*/
    if (ch==103)  first=20;  /*g*/
    if (ch==104)  midle=13;  /*h*/
    if (ch==105)  midle=5;   /*i*/
    if (ch==106)  midle=7;   /*j*/
    if (ch==107)  midle=3;   /*k*/
    if (ch==108)  midle=29;  /*l*/
    if (ch==109)  midle=27;  /*m*/
    if (ch==110)  midle=20;  /*n*/
    if (ch==111)  midle=4;   /*o*/
    if (ch==79)   midle=6;   /*O*/
    if (ch==112)  midle=10;  /*p*/
    if (ch==80)   midle=12;  /*P*/
    if (ch==113)  first=9;   /*q*/
    if (ch==81)   first=10;  /*Q*/
    if (ch==114)  first=2;   /*r*/
    if (ch==82)   first=3;    /*R*/
    if (ch==115)  first=4;   /*s*/
    if (ch==116)  first=11;  /*t*/
    if (ch==84)   first=12;  /*T*/
    if (ch==117)  midle=11;  /*u*/
    if (ch==118)  first=19;  /*v*/
    if (ch==119)  first=14;  /*w*/
    if (ch==87)   first=15;  /*W*/
    if (ch==120)  first=18;  /*x*/
    if (ch==121)  midle=19;  /*y*/
    if (ch==122)  first=17;  /*z*/

    if (counter==1 && midle != 24 ) {
        Han_code[n+1]=midle;
        n+=3;
        clear_char(x1,y1,bcolor,16);
        hangule_put1(x1,y1,first,midle,last,color);
        x1=x1+16;
        counter=0;
        midle=24;
        goto l1;
    }
    if (counter==2 && midle ==24){
        n+=3;
        Han_code[n]=first;
        x1=x1+16;
        clear_char(x1,y1,bcolor,16);
        hangule_put1(x1,y1,first,midle,last,color);
        counter=1;
        goto l1;
    }

    if (counter==4){
        if (midle !=24){
        Han_code[n]=old_first;
        Han_code[n+1]=old_midle;
        Han_code[n+2]=last;
        n+=3;
        first=old_last;
        Han_code[n]=first;
        Han_code[n+1]=midle;

        clear_char(x1-16,y1,bcolor,16);
        hangule_put1(x1-16,y1,old_first,old_midle,last,color);
        clear_char(x1,y1,bcolor,16);
        hangule_put1(x1,y1,first,midle,1,color);
        counter=2;
        }
        else {
           if (old_last==9 && first==11){
           last=20;
           Han_code[n]=old_first;
           Han_code[n+1]=old_midle;
           Han_code[n+2]=last;

           counter=3;
           clear_char(x1-16,y1,bcolor,16);
           hangule_put1(x1-16,y1,old_first,old_midle,last,color);
           x1=x1-16;

           old_last=11;

           first=old_first;
           midle=old_midle;
           last=19;

           sw=1;

           goto l1;
           }
           if (old_last==4 && first==14){
           last=6;
           Han_code[n]=old_first;
           Han_code[n+1]=old_midle;
           Han_code[n+2]=last;
           counter=3;
           clear_char(x1-16,y1,bcolor,16);
           hangule_put1(x1-16,y1,old_first,old_midle,last,color);
           x1=x1-16;

           old_last=14;

           first=old_first;
           midle=old_midle;
           last=5;

           sw=1;

           goto l1;
           }
           if (old_last==4 && first==20){
           last=7;
           Han_code[n]=old_first;
           Han_code[n+1]=old_midle;
           Han_code[n+2]=last;
           counter=3;
           clear_char(x1-16,y1,bcolor,16);
           hangule_put1(x1-16,y1,old_first,old_midle,last,color);
           x1=x1-16;

           old_last=20;

           first=old_first;
           midle=old_midle;
           last=5;

           sw=1;
           goto l1;
           }
           if (old_last==7 && first==2){
           last=10;
           Han_code[n]=old_first;
           Han_code[n+1]=old_midle;
           Han_code[n+2]=last;
           counter=3;
           clear_char(x1-16,y1,bcolor,16);
           hangule_put1(x1-16,y1,old_first,old_midle,last,color);
           x1=x1-16;

           old_last=2;

           first=old_first;
           midle=old_midle;
           last=9;

           sw=1;
           goto l1;
           }
           if (old_last==7 && first==8){
           last=11;
           Han_code[n]=old_first;
           Han_code[n+1]=old_midle;
           Han_code[n+2]=last;
           counter=3;
           clear_char(x1-16,y1,bcolor,16);
           hangule_put1(x1-16,y1,old_first,old_midle,last,color);
           x1=x1-16;

           old_last=8;

           first=old_first;
           midle=old_midle;
           last=9;

           sw=1;
           goto l1;
           }
           if (old_last==7 && first==9){
           last=12;
           Han_code[n]=old_first;
           Han_code[n+1]=old_midle;
           Han_code[n+2]=last;
           counter=3;
           clear_char(x1-16,y1,bcolor,16);
           hangule_put1(x1-16,y1,old_first,old_midle,last,color);
           x1=x1-16;

           old_last=9;

           first=old_first;
           midle=old_midle;
           last=9;

           sw=1;
           goto l1;
           }
           if (old_last==7 && first==11){
           last=13;
           Han_code[n]=old_first;
           Han_code[n+1]=old_midle;
           Han_code[n+2]=last;
           counter=3;
           clear_char(x1-16,y1,bcolor,16);
           hangule_put1(x1-16,y1,old_first,old_midle,last,color);
           x1=x1-16;

           old_last=11;

           first=old_first;
           midle=old_midle;
           last=9;

           sw=1;
           goto l1;
           }
           if (old_last==7 && first==18){
           last=14;
           Han_code[n]=old_first;
           Han_code[n+1]=old_midle;
           Han_code[n+2]=last;
           counter=3;
           clear_char(x1-16,y1,bcolor,16);
           hangule_put1(x1-16,y1,old_first,old_midle,last,color);
           x1=x1-16;

           old_last=18;

           first=old_first;
           midle=old_midle;
           last=9;

           sw=1;
           goto l1;
           }
           if (old_last==7 && first==19){
           last=15;
           Han_code[n]=old_first;
           Han_code[n+1]=old_midle;
           Han_code[n+2]=last;
           counter=3;
           clear_char(x1-16,y1,bcolor,16);
           hangule_put1(x1-16,y1,old_first,old_midle,last,color);
           x1=x1-16;

           old_last=19;

           first=old_first;
           midle=old_midle;
           last=9;

           sw=1;
           goto l1;
           }
           if (old_last==7 && first==20){
           last=16;
           Han_code[n]=old_first;
           Han_code[n+1]=old_midle;
           Han_code[n+2]=last;
           counter=3;
           clear_char(x1-16,y1,bcolor,16);
           hangule_put1(x1-16,y1,old_first,old_midle,last,color);
           x1=x1-16;

           old_last=20;

           first=old_first;
           midle=old_midle;
           last=9;

           sw=1;
           goto l1;
           }
           n+=3;
           last=1;
           Han_code[n]=first;
           clear_char(x1,y1,bcolor,16);
           hangule_put1(x1,y1,first,24,1,color);
           counter=1;
        }
        goto l1;
    }


PUT_HAN:
     Han_code[n]=first;
     Han_code[n+1]=midle;
     Han_code[n+2]=last;
     clear_char(x1,y1,bcolor,16);
     hangule_put1(x1,y1,first,midle,last,color);

    }
}




     



+ -

관련 글 리스트
1372 [질문] 그래픽 환경에서 한글 폰트로 작업 하고 싶습니다. 박명성 1482 2002/10/18
1376     Re:[질문] 그래픽 환경에서 한글 폰트로 작업 하고 싶습니다. 최준호.스페로 1520 2002/10/18
1374     '한글 라이브러리'라는 걸 쓰면 되긴 합니다만.... 김백일 1641 2002/10/18
1373     Re:[질문] 그래픽 환경에서 한글 폰트로 작업 하고 싶습니다. 조준회 1455 2002/10/18
1375         한글 라이브러리 "한" 이영우 1995 2002/10/18
1386             [감사합니다]한글 라이브러리를 찾았습니다. 박명성 1593 2002/10/19
1387                 C++3.1 도스버전 라이브러리인 '한' 라이브러리에 대해서 물어볼 것이 있습니다. 경선 1639 2002/10/19
1388                     ANSI 라이브러리부터 먼저 공부하세요. 김백일 2070 2002/10/19
1390                         아..잘못말했습니다. 한라라이브러리4.x...에서 경선 1593 2002/10/20
1393                             제가 아는건 별루 없어요. 박명성 1577 2002/10/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.