|
안녕하세요 스페로 입니다.
아주 오래전에 자체 한글을 만든 적이 잇거덩요...
라이브러리를 쓰지 않고 .. 만든거죠.. 온리 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);
}
}
|