skip to main
|
skip to sidebar
my c programs
Saturday, August 2, 2008
new texeditor using c
/* <br />/* <br /> ########################################## <br /> # TEXT EDITOR PROGRAM ( for TEF files) # <br /> # tested in Turbo C++,version 3.0 # <br /> ################15/2/2008################# <br />*/ <br /> <br /> <br /> <br />#include<dos.h> <br />#include<dir.h> <br />#include<conio.h> <br />#include<ctype.h> <br />#include<stdio.h> <br />#include<stdlib.h> <br />#include<string.h> <br /> <br /> <br />#define ROW 21 <br />#define COL 78 <br />#define NOCOLS 999 <br />#define NOLINES 9999 <br />#define MAXFILES 10 <br />#define FRAMEBG BLUE <br />#define FRAMEFG GREEN <br />#define SPACESTOTAB 6 <br />#define CX frm[fI].cX <br />#define CY frm[fI].cY <br />#define SC frm[fI].sC <br />#define SL frm[fI].sL <br />#define SX1 frm[fI].sX1 <br />#define SY1 frm[fI].sY1 <br />#define SX2 frm[fI].sX2 <br />#define SY2 frm[fI].sY2 <br />#define SELECTIONFG BLUE <br />#define SELECTIONBG CYAN <br />#define NOL frm[fI].noOfLines <br />#define MOC frm[fI].maxOfCols <br />#define LINELEN frm[fI].ln[CY].len <br />#define LINEDATA frm[fI].ln[CY].data <br /> <br /> <br />void Time(); <br />void FExit(); <br />void WPrevious(); <br />void OkDialogBox(char[],char[]); <br /> <br /> <br />char fR[4][64]; /* findReplace */ <br />int cmdXY[]={6,15,25,35,44,55,65},mx,my,mb; /* mouse x,y and button */ <br />int fI,BG,FG,mouseSelecting, flag,hL; /* highlight, frame Index*/ <br />int NoOfFrame,CMenabl,advice=1,fileNo; /* Clear Menu enabled */ <br />int buffer[20][40][2],bufferX1,bufferX2,bufferY1,bufferY2; <br /> <br /> <br />struct menuCommands <br />{ <br /> char cmd[13][16]; <br /> int enabl[13], NoOfCmd; <br />}mC[7]= <br />{ <br /> { <br /> { <br /> " New ", <br /> " Open ", <br /> " Save ", <br /> " save As ", <br /> " Close ", <br /> "ÄÄÄÄÄÄÄÄÄÄ", <br /> " Exit " <br /> }, { 0, 0, 0, 0, 0, -1, 1 }, { 7 } <br /> }, <br /> { <br /> { <br /> " cuT ", <br /> " Copy ", <br /> " Paste ", <br /> " cLear " <br /> }, { 0, 0, 1 }, { 4 } <br /> }, <br /> { <br /> { <br /> " Find ", <br /> " Next Ins", <br /> " Replace " <br /> }, { 0 }, { 3 } <br /> }, <br /> { <br /> { <br /> " Upper ", <br /> " Lower " <br /> }, { 0 }, { 2 } <br /> }, <br /> { <br /> { <br /> " Single ", <br /> " Double ", <br /> " sNgl-Dbl ", <br /> " dBl-sngl " <br /> }, { 0 }, { 4 } <br /> }, <br /> { <br /> { <br /> " next ", <br /> " previous ", <br /> "ÄÄÄÄÄÄÄÄÄÄ", <br /> }, { 0, 0, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 3 } <br /> }, <br /> { <br /> { <br /> " Controls ", <br /> " About ", <br /> " Dedicate " <br /> }, { 1, 1, 1 }, { 3 } <br /> } <br />}; <br /> <br /> <br />struct line <br />{ <br /> char *data; <br /> long len; <br />} copyStr; <br /> <br /> <br />struct frame <br />{ <br /> struct line *ln; /* all lines */ <br /> char fileName[64]; <br /> int cX, cY, /* current curser X and Y */ <br /> sX1, sX2, sY1, sY2, /* selection parameters */ <br /> sL, sC, /* starting line and column on the screen */ <br /> SHP, SVP, /* scrolling horizontal and vertical pointer */ <br /> noOfLines, maxOfCols, /* max no.of lines and columns */ <br /> saved; <br />} frm[MAXFILES]; <br /> <br /> <br /> <br /> <br />/******************* Mouse ********************/ <br /> <br /> <br /> <br />void InitMouse() <br />{ <br /> union REGS r; <br /> r.x.ax=0x0, int86(0x33, &r, &r); <br />} <br /> <br /> <br /> <br />void SetMouse(int x, int y) <br />{ <br /> union REGS r; <br /> r.x.ax = 0x4, r.x.cx =x*8, r.x.dx = y*8, int86(0x33, &r, &r); <br />} <br /> <br /> <br /> <br />void ShowMouse() <br />{ <br /> union REGS r; <br /> r.x.ax = 0x1, int86(0x33, &r, &r); <br />} <br /> <br /> <br /> <br />void HideMouse() <br />{ <br /> union REGS r; <br /> r.x.ax =0x2, int86(0x33, &r, &r); <br />} <br /> <br /> <br /> <br />int ReadMouse() <br />{ <br /> union REGS r; <br /> Time(); <br /> r.x.ax=0x3, int86(0x33,&r,&r); <br /> mx=(int)r.x.cx/8, my=(int)r.x.dx/8, mb=(int)r.x.bx; <br /> return mb; <br />} <br /> <br /> <br /> <br />void Color(int fg, int bg) <br />{ <br /> if(fg!=-1) <br /> textcolor(FG=fg); <br /> if(bg!=-1) <br /> textbackground(BG=bg); <br />} <br /> <br /> <br /> <br />void Put(int x, int y, char str[]) <br />{ <br /> gotoxy(x,y), HideMouse(), cprintf(str), ShowMouse(); <br />} <br /> <br /> <br /> <br />void Time() <br />{ <br /> int x,y; <br /> static struct time t,tmp={61,61,0,61}; <br /> gettime(&t); <br /> if(t.ti_sec!=tmp.ti_sec) <br /> { <br /> x=wherex(), y=wherey(); <br /> textcolor(RED), textbackground(GREEN); <br /> if(t.ti_sec%2) <br /> Put(73,25, ":"); <br /> else <br /> Put(73,25, " "); <br /> if(t.ti_min!=tmp.ti_min) <br /> { <br /> HideMouse(); <br /> gotoxy(74,25),cprintf("%02d",t.ti_min); <br /> if(t.ti_hour!=tmp.ti_hour) <br /> { <br /> gotoxy(71,25); <br /> if(t.ti_hour>12) <br /> cprintf("%2d",t.ti_hour-12), Put(77,25,"pm"); <br /> else <br /> cprintf("%2d",(t.ti_hour==0)?12:t.ti_hour), Put(77,25,"am"); <br /> } <br /> ShowMouse(); <br /> } <br /> gotoxy(x,y); <br /> tmp=t; <br /> textcolor(FG), textbackground(BG); <br /> } <br />} <br /> <br /> <br /> <br />void HideCurser() <br />{ <br /> gotoxy(1,1); <br />} <br /> <br /> <br /> <br />int LinLen(int ix) <br />{ <br /> int i=0; <br /> while(frm[fI].ln[ix].data[i]!='\0' && frm[fI].ln[ix].data[i]!='\n') <br /> i++; <br /> return i; <br />} <br /> <br /> <br /> <br />void PutLine(int ln) <br />{ <br /> int i; <br /> char lnStr[COL+1]; <br /> Color(FRAMEFG,FRAMEBG); <br /> for(i=SC;i<COL+SC && i<LinLen(ln);i++) <br /> lnStr[i-SC]=frm[fI].ln[ln].data[i]; <br /> for(;i<COL+SC;i++) <br /> lnStr[i-SC]=' '; <br /> lnStr[COL]='\0'; <br /> gotoxy(2,3+ln-SL); <br /> HideMouse(), cprintf("%s",lnStr), ShowMouse(); <br />} <br /> <br /> <br /> <br />void LackOfMemory() <br />{ <br /> OkDialogBox("ERROR","Memory allocation failed."); <br />stop: <br /> FExit(); <br /> goto stop; <br />} <br /> <br /> <br /> <br />void InitNewFile() <br />{ <br /> fI=NoOfFrame++; <br /> CX= CY= SX1= SY1= SX2= SY2= SL= SC=0; <br /> frm[fI].saved= MOC= NOL=1; <br /> frm[fI].ln=(struct line *)malloc(sizeof(struct line)); <br /> if(!frm[fI].ln) <br /> LackOfMemory(); <br /> LINEDATA=(char *)malloc(sizeof(char)); <br /> if(!LINEDATA) <br /> LackOfMemory(); <br /> LINEDATA[0]='\0'; <br /> LINELEN=1; <br />} <br /> <br /> <br /> <br />void DrawButton(int x,int y,char str[],int active) <br />{ <br /> int strLen=strlen(str),i; <br /> Color(WHITE,GREEN); <br /> HideMouse(); <br /> if(active==1) <br /> { <br /> SetMouse(mx+1,my); <br /> Put(x+1,y,str); <br /> ShowMouse(); <br /> Color(-1,RED); <br /> Put(x,y," "); <br /> gotoxy(x+1,y+1); <br /> for(i=0;i<strLen;i++) <br /> cprintf(" "); <br /> HideCurser(); <br /> while(ReadMouse()); <br /> } <br /> else <br /> { <br /> Put(x,y,str); <br /> Color(BLACK,RED); <br /> Put(x+strLen,y,"Ü"); <br /> gotoxy(x+1,y+1); <br /> for(i=0;i<strLen;i++) <br /> cprintf("ß"); <br /> ShowMouse(); <br /> HideCurser(); <br /> } <br />} <br /> <br /> <br /> <br />void GotoXY() <br />{ <br /> Color(WHITE,GREEN); <br /> gotoxy(4,25); <br /> HideMouse(), cprintf("%6d:%-5d",CY+1,CX+1), ShowMouse(); <br /> gotoxy(CX-SC+2,CY-SL+3); <br />} <br /> <br /> <br /> <br />void ClearMenu() <br />{ <br /> int i,j; <br /> if(!CMenabl) <br /> return; <br /> HideMouse(); <br /> for(i=bufferY1;i<=bufferY2;i++) <br /> for(j=bufferX1;j<=bufferX2;j++) <br /> { <br /> textattr(buffer[i-bufferY1][j-bufferX1][0]), <br /> gotoxy(j,i), cprintf("%c",buffer[i-bufferY1][j-bufferX1][1]); <br /> } <br /> ShowMouse(); <br /> CMenabl=0; <br /> HideCurser(); <br /> flag|=2; <br />} <br /> <br /> <br /> <br /> <br />void DrawCanvas(int x1,int y1,int x2,int y2,char title[]) <br />{ <br /> int i,j; <br /> union REGS r; <br /> char *ptr,str[][10]={ {"ÚÄ¿³ÀÙ"}, {"ÉÍ»ºÈ¼"} }; <br /> if(CMenabl) <br /> ClearMenu(); <br /> HideMouse(); <br /> for(i=y1;i<=y2+1;i++) <br /> { <br /> for(j=x1;j<=x2+2;j++) <br /> { <br /> gotoxy(j,i); <br /> r.h.ah=0x8, r.x.bx=0x0, int86(0x10,&r,&r); <br /> buffer[i-y1][j-x1][0]=r.h.ah, buffer[i-y1][j-x1][1]=r.h.al; <br /> } <br /> } <br /> bufferX1=x1, bufferX2=x2+2, bufferY1=y1, bufferY2=y2+1; <br /> Color(DARKGRAY,BLACK); <br /> gotoxy(x1+2,y2+1); <br /> for(i=x1;i<=x2;i++) <br /> cprintf("%c",buffer[y2+1-y1][i+2-x1][1]); <br /> for(i=y1+1;i<=y2;i++) <br /> gotoxy(x2+1,i), cprintf("%c%c",buffer[i-y1][x2+1-x1][1], buffer[i-y1][x2+2-x1][1]); <br /> Color(WHITE,RED); <br /> ptr=(strcmp(title,"")==0) ? str[0] : str[1] ; <br /> gotoxy(x1,y1), cprintf("%c",ptr[0]); <br /> for(i=x1+1;i<x2;i++) <br /> cprintf("%c",ptr[1]); <br /> cprintf("%c",ptr[2]); <br /> for(j=y1+1;j<y2;j++) <br /> { <br /> gotoxy(x1,j), cprintf("%c",ptr[3]); <br /> for(i=x1+1;i<x2;i++) <br /> cprintf(" "); <br /> cprintf("%c",ptr[3]); <br /> } <br /> gotoxy(x1,y2), cprintf("%c",ptr[4]); <br /> for(i=x1+1;i<x2;i++) <br /> cprintf("%c",ptr[1]); <br /> cprintf("%c",ptr[5]); <br /> if(strcmp(title,"")!=0) <br /> { <br /> i=strlen(title); <br /> gotoxy((x2+x1-i-1)/2,y1); <br /> cprintf(" %s ",title); <br /> } <br /> ShowMouse(); <br /> CMenabl=1; <br />} <br /> <br /> <br /> <br />void PutVScroll() <br />{ <br /> int i; <br /> Color(MAGENTA,BLUE); <br /> for(i=4;i<=77;i++) <br /> Put(i,24,"±"); <br /> Color(WHITE,BLACK), Put(4+frm[fI].SVP,24,""); <br />} <br /> <br /> <br /> <br />void PutHScroll() <br />{ <br /> int i; <br /> Color(MAGENTA,BLUE); <br /> for(i=4;i<=22;i++) <br /> Put(80,i,"±"); <br /> Color(WHITE,BLACK), Put(80,4+frm[fI].SHP,""); <br />} <br /> <br /> <br /> <br />int ShiftKeyHit() <br />{ <br /> union REGS r; <br /> r.h.ah=0x2, int86(0x16,&r,&r); <br /> if(r.h.al&2) <br /> return 1; <br /> else <br /> return 0; <br />} <br /> <br /> <br /> <br />void SetCurser(int X,int Y) <br />{ <br /> int tmp, x=CX, y=CY; <br /> CY+=Y; <br /> if(CY<0) <br /> CY=0; <br /> else if(CY>=NOL) <br /> CY=NOL-1; <br /> CX+=X; <br /> if(CX<0) <br /> CX=0; <br /> else if(CX>LinLen(CY)) <br /> CX=LinLen(CY); <br /> if(SC>CX || CX-SC>=COL) <br /> { <br /> if(SC==CX+1) <br /> SC=CX; <br /> else if(SC+COL==CX) <br /> SC++ ; <br /> else if( !(SC<=CX && SC+COL>=CX)) <br /> SC=(CX/COL)*COL; <br /> flag|=16; <br /> } <br /> if(MOC>1 && frm[fI].SVP!=(int)(73.*SC/(MOC-1))) <br /> frm[fI].SVP=73.*SC/(MOC-1), flag|=64; <br /> if(SL>CY||CY-SL>=ROW) <br /> { <br /> if(SL==CY+1||SL==CY+2) <br /> SL=CY; <br /> else if( SL+ROW==CY) <br /> SL++; <br /> else if( SL+ROW+1==CY) <br /> SL+=2; <br /> else if(!(SL<=CY&&SL+ROW>=CY)) <br /> SL=(CY/ROW)*ROW; <br /> flag|=16; <br /> } <br /> if(NOL>1&&frm[fI].SHP!=(int)18.*SL/(NOL-1)) <br /> frm[fI].SHP=18.*SL/(NOL-1), flag|=32; <br /> <br /> if(ShiftKeyHit() || mouseSelecting) <br /> { <br /> if(x==SX2&&y==SY2) <br /> { <br /> if(y==CY&&x>CX||y>CY) <br /> flag|=16; <br /> else <br /> flag|=8; <br /> SX2=CX, SY2=CY; <br /> } <br /> else if(x==SX1&&y==SY1) <br /> { <br /> if(y==CY&&x<CX||y<CY) <br /> flag|=16; <br /> else <br /> flag|=8; <br /> SX1=CX, SY1=CY; <br /> } <br /> else <br /> { <br /> flag|=16; <br /> SX1=x, SX2=CX, SY1=y, SY2=CY; <br /> } <br /> if( SY1>SY2 || SY1==SY2&&SX1>SX2 ) <br /> { <br /> tmp=SX1, SX1=SX2, SX2=tmp; <br /> tmp=SY1, SY1=SY2, SY2=tmp; <br /> } <br /> } <br /> flag|=2; <br />} <br /> <br /> <br /> <br />void PutSelection() <br />{ <br /> int i,j,ln; <br /> char lnStr[COL+1]; <br /> HideMouse(); <br /> Color(SELECTIONFG,-1); <br /> for(ln=(SL>SY1)?SL:SY1+1; ln<SY2 && ln<SL+ROW ;ln++) <br /> { <br /> Color(-1,SELECTIONBG); <br /> for(i=SC; i<COL+SC && i<LinLen(ln) ;i++) <br /> lnStr[i-SC]=frm[fI].ln[ln].data[i]; <br /> lnStr[i-SC]='\0'; <br /> gotoxy(2,3+ln-SL), cprintf("%s",lnStr); <br /> for(j=i; j<COL+SC ;j++) <br /> lnStr[j-i]=' '; <br /> lnStr[j-i]='\0'; <br /> Color(-1,FRAMEBG), cprintf("%s",lnStr); <br /> } <br /> Color(-1,SELECTIONBG); <br /> if(SL<=SY1&&SY1<SL+ROW) <br /> { <br /> j=(SX1>SC)?SX1:SC; <br /> for(i=j; ((SY1==SY2)?i<SX2:1) && i<LinLen(SY1) && i<SC+COL ;i++) <br /> lnStr[i-j]=frm[fI].ln[SY1].data[i]; <br /> lnStr[i-j]='\0'; <br /> if( SC<=SX1 && SX1<SC+COL ) <br /> gotoxy(SX1+2-SC,SY1+3-SL); <br /> else <br /> gotoxy(2,SY1+3-SL); <br /> cprintf("%s",lnStr); <br /> } <br /> if(SL<=SY2&&SY2<SL+ROW&&SY1!=SY2) <br /> { <br /> for(i=SC;i<LinLen(SY2)&&i<SC+COL&&i<SX2;i++) <br /> lnStr[i-SC]=frm[fI].ln[SY2].data[i]; <br /> lnStr[i-SC]='\0'; <br /> gotoxy(2,SY2+3-SL), cprintf("%s",lnStr); <br /> } <br /> ShowMouse(); <br />} <br /> <br /> <br /> <br />void PutData() <br />{ <br /> int i,j; <br /> char lnstr[COL+1]; <br /> for(i=SL; i<NOL && i<SL+ROW ;i++) <br /> if(i<=SY1||SY2<=i) <br /> PutLine(i); <br /> for(j=0;j<COL;j++) <br /> lnstr[j]=' '; <br /> lnstr[j]='\0'; <br /> HideMouse(); <br /> for(;i<SL+ROW;i++) <br /> gotoxy(2,i+3-SL), cprintf("%s",lnstr); <br /> ShowMouse(); <br /> PutSelection(); <br />} <br /> <br /> <br /> <br />void Scroll() <br />{ <br /> int i,SOx=CX,SOy=CY; <br /> while(1) <br /> { <br /> if( mx==79 && NOL>1 ) <br /> { <br /> if( my==2 && SL!=0 ) <br /> { <br /> SL--; <br /> if(frm[fI].SHP!=(int)18.*SL/(NOL-1)) <br /> frm[fI].SHP= 18.*SL/(NOL-1); <br /> } <br /> else if( my==22 && SL!=NOL-1 ) <br /> { <br /> SL++; <br /> if(frm[fI].SHP!=(int)18.*SL/(NOL-1)) <br /> frm[fI].SHP= 18.*SL/(NOL-1); <br /> } <br /> else if( 2<my&&my<22 ) <br /> SL= (NOL-1)*(my-3)/18., frm[fI].SHP= (my-3); <br /> else <br /> break; <br /> PutHScroll(), PutData(); <br /> } <br /> else if( my==23 && MOC>1 ) <br /> { <br /> if( mx==2 && SC!=0 ) <br /> { <br /> SC--; <br /> if(frm[fI].SVP!=(int)73.*SC/(MOC-1)) <br /> frm[fI].SVP= 73.*SC/(MOC-1); <br /> } <br /> else if( mx==77 && MOC>SC ) <br /> { <br /> SC++; <br /> if(frm[fI].SVP!=(int)73.*SC/(MOC-1)) <br /> frm[fI].SVP= 73.*SC/(MOC-1); <br /> } <br /> else if( 2<mx&&mx<77 ) <br /> SC= (mx-3)/73.*(MOC-1), frm[fI].SVP= (mx-3); <br /> else <br /> break; <br /> PutVScroll(), PutData(); <br /> } <br /> else <br /> break; <br /> if( SC<=CX && SC+COL>CX && SL<=CY && SL+ROW>CY ) <br /> GotoXY(); <br /> else <br /> HideCurser(); <br /> delay(99); <br /> while(1) <br /> { <br /> if(ReadMouse()) <br /> { <br /> if(mb==1) <br /> break; <br /> else <br /> { <br /> CX=SOx,CY=SOy, flag|=32|64; <br /> SetCurser(0,0); <br /> return; <br /> } <br /> } <br /> if(kbhit()) <br /> { <br /> CX=SOx,CY=SOy, flag|=32|64; <br /> SetCurser(0,0); <br /> return; <br /> } <br /> } <br /> } <br />} <br /> <br /> <br /> <br />void DisplayData() <br />{ <br /> if(flag&16) <br /> PutData(); <br /> if(flag&32) <br /> PutHScroll(); <br /> if(flag&64) <br /> PutVScroll(); <br /> if(flag&4) <br /> PutLine(CY); <br /> if(flag&8) <br /> PutSelection(); <br /> GotoXY(); <br /> flag=0; <br />} <br /> <br /> <br /> <br />void SetFrame() <br />{ <br /> int i,len; <br /> if(NoOfFrame==0) <br /> { <br /> Color(BLACK,LIGHTGRAY); <br /> gotoxy(1,2); <br /> HideMouse(); <br /> for(i=0;i<80*23;i++) <br /> cputs("°"); <br /> Color(GREEN,GREEN); <br /> Put(6,25," "); <br /> ShowMouse(); <br /> HideCurser(); <br /> } <br /> else <br /> { <br /> Color(WHITE,BLUE); <br /> HideMouse(); <br /> for(i=3;i<=23;i++) <br /> Put(1,i,"º"); <br /> Put(1,2,"ÉÍ[X]"); <br /> len=strlen(frm[fI].fileName); <br /> for(i=6;i<(40-len/2-1);i++) <br /> cprintf("Í"); <br /> cprintf(" %s ",frm[fI].fileName); <br /> for(i+=len+2;i<=79;i++) <br /> cprintf("Í"); <br /> cprintf("»"); <br /> Put(1,24,"ÈÍ"); <br /> Put(79,24,"ͼ"); <br /> Color(BLUE,MAGENTA); <br /> gotoxy(3,24), cprintf(""); <br /> for(i=4;i<=77;i++) <br /> cprintf("±"); <br /> cprintf("%c",26); <br /> gotoxy(80,3), cprintf(""); <br /> for(i=4;i<=22;i++) <br /> gotoxy(80,i), cprintf("±"); <br /> gotoxy(80,23), cprintf(""); <br /> ShowMouse(); <br /> flag|=64|32|16; <br /> SetCurser(0,0); <br /> DisplayData(); <br /> } <br /> CMenabl=0; <br />} <br /> <br /> <br /> <br />void HGetOk(int bY) <br />{ <br /> char ch; <br /> DrawButton(37,bY," Ok ",0); <br /> HideCurser(); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> ch=getch(); <br /> if(ch==27||ch=='\r'||ch=='o'||ch=='O') <br /> return; <br /> } <br /> if(ReadMouse()==1) <br /> { <br /> if( my==bY-1 && 35<mx&&mx<44 ) <br /> { <br /> DrawButton(37,bY," Ok ",1); <br /> if( my==bY-1 && 36<mx&&mx<45 ) <br /> return; <br /> DrawButton(37,bY," Ok ",0); <br /> } <br /> } <br /> } <br />} <br /> <br /> <br /> <br />void OkDialogBox(char title[],char msg[]) <br />{ <br /> DrawCanvas(39-strlen(msg)/2,10,43+strlen(msg)/2,16,title); <br /> Put(41-strlen(msg)/2,12,msg); <br /> HGetOk(14); <br /> ClearMenu(); <br />} <br /> <br /> <br /> <br />void AddChar(char ch) <br />{ <br /> int i,j,k,l; <br /> if( LINELEN+(CY+1==NOL)>NOCOLS && ch!='\r' ) <br /> { <br /> OkDialogBox("ERROR","Line,too long,truncted"); <br /> if(CX<NOCOLS/2) <br /> AddChar('\r'), CY--, CX=LinLen(CY); <br /> else <br /> AddChar('\r'); <br /> AddChar(ch); <br /> return; <br /> } <br /> LINELEN+=1; <br /> if(SX1||SX2||SY2||SY1) <br /> SX1= SY1= SX2= SY2=0, flag|=16; <br /> if(LINELEN>MOC) <br /> MOC=LINELEN; <br /> LINEDATA=(char *)realloc(LINEDATA,sizeof(char)*LINELEN); <br /> if(!LINEDATA) <br /> LackOfMemory(); <br /> for(i=strlen(LINEDATA);i>=CX;i--) <br /> LINEDATA[i+1]=LINEDATA[i]; <br /> if(ch=='\r') <br /> LINEDATA[i+1]='\n', flag|=16; <br /> else <br /> LINEDATA[i+1]=ch, flag|=4; <br /> CX++; <br /> if(ch=='\r') <br /> { <br /> NOL+=1; <br /> if(NOL>=NOLINES) <br /> LackOfMemory(); <br /> frm[fI].ln=(struct line*)realloc(frm[fI].ln,NOL*sizeof(struct line)); <br /> if(!frm[fI].ln) <br /> LackOfMemory(); <br /> CY++; <br /> for(i=NOL-1;i>CY;i--) <br /> frm[fI].ln[i]=frm[fI].ln[i-1]; <br /> LINEDATA=(char *)malloc(sizeof(char)); <br /> if(!LINEDATA) <br /> LackOfMemory(); <br /> LINEDATA[0]='\0', LINELEN=1; <br /> l=k=CX; <br /> CX=0; <br /> for(;frm[fI].ln[CY-1].data[k]!='\0';k++) <br /> AddChar(frm[fI].ln[CY-1].data[k]); <br /> CX=0; <br /> frm[fI].ln[CY-1].data[l]='\0'; <br /> frm[fI].ln[CY-1].len=l+1; <br /> frm[fI].ln[CY-1].data=(char *)realloc(frm[fI].ln[CY-1].data,l+1); <br /> for(MOC=1,i=0;i<NOL;i++) <br /> if(frm[fI].ln[i].len>MOC) <br /> MOC=LinLen(i); <br /> } <br /> frm[fI].saved=0; <br /> SetCurser(0,0); <br />} <br /> <br /> <br /> <br />void DelChar() <br />{ <br /> int i,tmp; <br /> if( CY==NOL-1 && LINEDATA[CX]=='\0' ) <br /> return; <br /> if(LINEDATA[CX]=='\n'&&LINELEN+frm[fI].ln[CY+1].len+(CY==NOL-2)>NOCOLS+3) <br /> { <br /> OkDialogBox("ERROR","The line is too long"); <br /> return; <br /> } <br /> if(SX1||SX2||SY2||SY1) <br /> SX1= SY1= SX2= SY2=0, flag|=16; <br /> if(LINEDATA[CX]=='\n') <br /> { <br /> tmp=CX; <br /> for(i=0; i<LinLen(CY+1);i++) <br /> AddChar(frm[fI].ln[CY+1].data[i]); <br /> free(frm[fI].ln[CY+1].data); <br /> for(i=CY+2;i<NOL;i++) <br /> frm[fI].ln[i-1]=frm[fI].ln[i]; <br /> NOL--; <br /> frm[fI].ln=(struct line*)realloc(frm[fI].ln,NOL*sizeof(struct line)); <br /> if(!frm[fI].ln) <br /> LackOfMemory(); <br /> CX=tmp; <br /> flag|=16; <br /> } <br /> else <br /> { <br /> for(i=CX;i<strlen(LINEDATA);i++) <br /> LINEDATA[i]=LINEDATA[i+1]; <br /> LINELEN-=1; <br /> LINEDATA=(char *)realloc(LINEDATA,LINELEN*sizeof(char)); <br /> if(!LINEDATA) <br /> LackOfMemory(); <br /> flag|=4; <br /> } <br /> if(LINELEN+1==MOC) <br /> { <br /> MOC=LINELEN; <br /> for(i=0;i<NOL;i++) <br /> if(frm[fI].ln[i].len>MOC) <br /> { <br /> MOC++; <br /> break; <br /> } <br /> } <br /> SetCurser(0,0); <br />} <br /> <br /> <br /> <br />void AddBksp() <br />{ <br /> if(CY==0&&CX==0) <br /> return; <br /> if(CX==0&&LINELEN+frm[fI].ln[CY-1].len+(CY==NOL-1)>NOCOLS+3) <br /> { <br /> OkDialogBox("ERROR","The line is too long"); <br /> return; <br /> } <br /> if(CX==0) <br /> CY--, CX=LinLen(CY); <br /> else <br /> CX--; <br /> DelChar(); <br />} <br /> <br /> <br /> <br />int get(int ix) /* index */ <br />{ <br /> int i; <br /> char ch; <br /> int lcx[]={0,0,0,0}, lsc[]={0,0,0,0}; /* last curser x, y. */ <br /> int lcy[]={12,10,12,12}, lmy[]={13,13,13,13}; /* last mouse x, y. */ <br /> DrawButton(32,lmy[ix]+1," Ok ",0); <br /> DrawButton(42,lmy[ix]+1," Cancel ",0); <br /> gotoxy(37+lcx[ix],lcy[ix]); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> ch=getch(); <br /> if( ch==0 ) <br /> { <br /> ch=getch(); <br /> switch(ch) <br /> { <br /> case 83: <br /> if(lcx[ix]!=strlen(fR[ix])) <br /> for(i=lcx[ix];i<strlen(fR[ix]);i++) <br /> fR[ix][i]=fR[ix][i+1]; break; <br /> case 77: <br /> if(lcx[ix]!=strlen(fR[ix])) <br /> lcx[ix]++; break; <br /> case 75: <br /> if(lcx[ix]!=0) <br /> lcx[ix]--; break; <br /> case 71: lcx[ix]=0; break; <br /> case 79: lcx[ix]=strlen(fR[ix]); break; <br /> } <br /> } <br /> else if(ch==27) <br /> return 0; <br /> else if(ch=='\t') <br /> { <br /> if( ix==1 ) <br /> ix=2; <br /> else if( ix==2 ) <br /> ix=1; <br /> } <br /> else if(ch=='\r') <br /> { <br /> if(ix!=1&&ix!=2&&fR[ix][0]!=0) <br /> return 1; <br /> else if( ix==1 || ix==2 ) <br /> { <br /> if(fR[1][0]!=0) <br /> return 1; <br /> else <br /> ix=1; <br /> } <br /> } <br /> else if( ch==8 && lcx[ix]!=0 ) <br /> { <br /> for(i=--lcx[ix];i<strlen(fR[ix]);i++) <br /> fR[ix][i]=fR[ix][i+1]; <br /> } <br /> else if(strlen(fR[ix])<59&& ' '<=ch&&ch<='~' ) <br /> { <br /> for(i=strlen(fR[ix]);i>=lcx[ix];i--) <br /> fR[ix][i+1]=fR[ix][i]; <br /> fR[ix][lcx[ix]++]=ch; <br /> } <br /> Color(WHITE,BLUE); <br /> gotoxy(37,lcy[ix]); <br /> if(lcx[ix]-lsc[ix]>15||lcx[ix]<lsc[ix]) <br /> lsc[ix]=(lcx[ix]/15-1)*15+lcx[ix]%15; <br /> if(lsc[ix]<0) <br /> lsc[ix]=0; <br /> HideMouse(); <br /> for(i=lsc[ix];fR[ix][i]!='\0'&&i<lsc[ix]+16;i++) <br /> cprintf("%c",fR[ix][i]); <br /> for(;i<lsc[ix]+16;i++) <br /> cprintf(" "); <br /> ShowMouse(); <br /> gotoxy(37+lcx[ix]-lsc[ix],lcy[ix]); <br /> } <br /> if(ReadMouse()==1) <br /> { <br /> if( my==lmy[ix] && 30<mx&&mx<39 ) <br /> { <br /> DrawButton(32,lmy[ix]+1," Ok ",1); <br /> if( my==lmy[ix] && 31<mx&&mx<40 ) <br /> { <br /> if((ix==0||ix==3)&&fR[ix][0]!=0) <br /> return 1; <br /> else if(ix==1||ix==2) <br /> { <br /> if(fR[1][0]!=0) <br /> return 1; <br /> else <br /> ix=1; <br /> } <br /> } <br /> DrawButton(32,lmy[ix]+1," Ok ",0); <br /> gotoxy(37+lcx[ix]-lsc[ix],lcy[ix]); <br /> } <br /> else if(my==lmy[ix]&&mx>40&&mx<49) <br /> { <br /> DrawButton(42,lmy[ix]+1," Cancel ",1); <br /> if(my==lmy[ix]&&mx>41&&mx<50) <br /> return 0; <br /> DrawButton(42,lmy[ix]+1," Cancel ",0); <br /> gotoxy(37+lcx[ix]-lsc[ix],lcy[ix]); <br /> } <br /> } <br /> } <br />} <br /> <br /> <br /> <br /> <br />/******************* File *******************/ <br /> <br /> <br /> <br />void FNew() <br />{ <br /> ClearMenu(); <br /> InitNewFile(); <br /> sprintf(frm[fI].fileName,"File:%02d",fileNo++); <br /> SetFrame(); <br />} <br /> <br /> <br /> <br />void FileName(char *file,char *path) <br />{ <br /> fnsplit(path,NULL,NULL,file,NULL); <br /> file[8]='\0'; <br />} <br /> <br /> <br /> <br />void FOpen(char *file) <br />{ <br /> char ch; <br /> FILE *fp; <br /> int i,validFile=1,lines=1,cols=1; <br /> if(!strcmp(file,"")) <br /> { <br /> strcpy(fR[3],""); <br /> DrawCanvas(26,10,55,16,"Open"); <br /> Color(WHITE,RED); <br /> Put(29,12,"File"); <br /> Color(-1,BLUE); <br /> Put(37,12," "); <br /> if(get(3)==0) <br /> { <br /> ClearMenu(); <br /> return; <br /> } <br /> ClearMenu(); <br /> strcat(fR[3],".tef"); <br /> } <br /> else <br /> strcpy(fR[3],file); <br /> fp=fopen(fR[3],"r"); <br /> if(!fp) <br /> { <br /> OkDialogBox("ERROR","File Could not be opened"); <br /> return; <br /> } <br /> while(validFile) <br /> { <br /> ch=fgetc(fp); <br /> if(ch==EOF) <br /> break; <br /> if(ch=='\n') <br /> { <br /> lines++; <br /> if(lines>NOLINES) <br /> validFile=0; <br /> else <br /> cols=1; <br /> } <br /> else if( ' '<=ch&&ch<='~' || '³'<=ch&&ch<='Ú' ) <br /> { <br /> if(cols>NOCOLS) <br /> validFile=0; <br /> else <br /> cols++; <br /> } <br /> else <br /> validFile=0; <br /> } <br /> if(!validFile) <br /> { <br /> fclose(fp); <br /> OkDialogBox("ERROR","Invalid *.tef file"); <br /> return; <br /> } <br /> rewind(fp); <br /> InitNewFile(); <br /> strcpy(frm[fI].fileName,fR[3]); <br /> while(1) <br /> { <br /> ch=fgetc(fp); <br /> frm[fI].saved=1; <br /> if(ch==EOF) <br /> break; <br /> else if(ch=='\n') <br /> AddChar('\r'); <br /> else <br /> AddChar(ch); <br /> } <br /> fclose(fp); <br /> frm[fI].saved=1; <br /> SetCurser(-CX,-CY); <br /> SetFrame(); <br />} <br /> <br /> <br /> <br />int FSave(int as) <br />{ <br /> char ch; <br /> int i,j; <br /> FILE *fp; <br /> ClearMenu(); <br /> if(as==1) <br /> { <br /> strcpy(fR[3],""); <br /> DrawCanvas(26,10,55,16,"Save As"); <br /> Color(WHITE,RED); <br /> Put(29,12,"File"); <br /> Color(-1,BLUE); <br /> Put(37,12," "); <br /> if(get(3)==0) <br /> { <br /> ClearMenu(); <br /> return 0; <br /> } <br /> ClearMenu(); <br /> strcat(fR[3],".tef"); <br /> fp=fopen(fR[3],"r"); <br /> if(fp) <br /> { <br /> fclose(fp); <br /> DrawCanvas(26,10,55,16,"ERROR"); <br /> Put(29,12,"Overwrite the file ?"); <br /> DrawButton(32,14," Ok ",0); <br /> DrawButton(42,14," Cancel ",0); <br /> HideCurser(); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> ch=getch(); <br /> if(ch==27) <br /> { <br /> ClearMenu(); <br /> return 0; <br /> } <br /> else if(ch=='\r') <br /> break; <br /> } <br /> if(ReadMouse()==1 && my==13) <br /> { <br /> if( 30<mx&&mx<39 ) <br /> { <br /> DrawButton(32,14," Ok ",1); <br /> if( my==13 && 31<mx&&mx<40 ) <br /> break; <br /> DrawButton(32,14," Ok ",0); <br /> } <br /> else if( 40<mx&&mx<49 ) <br /> { <br /> DrawButton(42,14," Cancel ",1); <br /> if( my==13 && mx>41&&mx<50 ) <br /> { <br /> ClearMenu(); <br /> return 0; <br /> } <br /> DrawButton(42,14," Cancel ",0); <br /> } <br /> } <br /> } <br /> ClearMenu(); <br /> } <br /> fclose(fp); <br /> strcpy(frm[fI].fileName,fR[3]); <br /> } <br /> fp=fopen(frm[fI].fileName,"w"); <br /> if(!fp) <br /> { <br /> OkDialogBox("ERROR","Saving Failed"); <br /> return 0; <br /> } <br /> for(i=0;i<NOL;i++) <br /> for(j=0;j<strlen(frm[fI].ln[i].data);j++) <br /> fputc(frm[fI].ln[i].data[j],fp); <br /> fclose(fp); <br /> frm[fI].saved=1; <br /> SetFrame(); <br /> return 1; <br />} <br /> <br /> <br /> <br />int FClose() <br />{ <br /> int i; <br /> char tmpfn[MAXFILE],ch; <br /> ClearMenu(); <br /> if(!frm[fI].saved) <br /> { <br /> DrawCanvas(24,10,57,16,"Save"); <br /> Color(WHITE,RED); <br /> FileName(tmpfn,frm[fI].fileName); <br /> gotoxy(28,12), cprintf("%s not saved. save ?",tmpfn); <br /> DrawButton(27,14," Yes ",0); <br /> DrawButton(37,14," No ",0); <br /> DrawButton(47,14," Cancel ",0); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> ch=getch(); <br /> if( ch=='\r' || ch=='y'||ch=='Y' ) <br /> { <br /> if(strncmp(frm[fI].fileName,"File:",5)==0) <br /> { <br /> if(FSave(1)==0) <br /> return 0; <br /> } <br /> else <br /> FSave(0); <br /> break; <br /> } <br /> else if(ch=='n'||ch=='N') <br /> break; <br /> else if( ch==27 || ch=='c'||ch=='C' ) <br /> { <br /> ClearMenu(); <br /> return 0; <br /> } <br /> } <br /> if(ReadMouse()==1&&my==13) <br /> { <br /> if(25<mx&&mx<34) <br /> { <br /> DrawButton(27,14," Yes ",1); <br /> if( my==13 && 26<mx&&mx<35 ) <br /> { <br /> if(strncmp(frm[fI].fileName,"File:",5)==0) <br /> { <br /> if(FSave(1)==0) <br /> return 0; <br /> } <br /> else <br /> FSave(0); <br /> break; <br /> } <br /> DrawButton(27,14," Yes ",0); <br /> } <br /> else if(35<mx&&mx<44) <br /> { <br /> DrawButton(37,14," No ",1); <br /> if( my==13 && 36<mx&&mx<45 ) <br /> break; <br /> DrawButton(37,14," No ",0); <br /> } <br /> else if(45<mx&&mx<54) <br /> { <br /> DrawButton(47,14," Cancel ",1); <br /> if( my==13 && 46<mx&&mx<54 ) <br /> { <br /> ClearMenu(); <br /> return 0; <br /> } <br /> DrawButton(47,14," Cancel ",0); <br /> } <br /> } <br /> } <br /> } <br /> ClearMenu(); <br /> for(i=0;i<NOL;i++) <br /> free(frm[fI].ln[i].data); <br /> free(frm[fI].ln), NoOfFrame--; <br /> for(i=fI;i<NoOfFrame;i++) <br /> frm[i]=frm[i+1]; <br /> fI--; <br /> SetFrame(); <br /> return 1; <br />} <br /> <br /> <br /> <br />void FExit() <br />{ <br /> int i; <br /> ClearMenu(); <br /> while(NoOfFrame) <br /> if(!FClose()) <br /> return; <br /> free(copyStr.data); <br /> exit(0); <br />} <br /> <br /> <br /> <br /> <br />/******************** Edit ********************/ <br /> <br /> <br /> <br />void ECopy() <br />{ <br /> int i,j,k=0; <br /> if(SX1==SX2&&SY1==SY2) <br /> return; <br /> copyStr.len=1; <br /> copyStr.data=(char*)realloc(copyStr.data,copyStr.len); <br /> if(!copyStr.data) <br /> LackOfMemory(); <br /> for(i=SY1;i<=SY2;i++) <br /> { <br /> for(j=0;frm[fI].ln[i].data[j]!='\0';j++) <br /> { <br /> if(i==SY1&&j==0) <br /> j=SX1; <br /> if(i==SY2&&j==SX2) <br /> break; <br /> copyStr.data[k++]=(frm[fI].ln[i].data[j]=='\n')?'\r':frm[fI].ln[i].data[j]; <br /> copyStr.data=(char*)realloc(copyStr.data,++copyStr.len); <br /> if(!copyStr.data) <br /> LackOfMemory(); <br /> } <br /> } <br /> copyStr.data[k]='\0'; <br />} <br /> <br /> <br /> <br />void EClear() <br />{ <br /> int i,j,l; <br /> int sX1=SX1, sY1=SY1, sX2=SX2, sY2=SY2; <br /> if( SX1==SX2 && SY1==SY2 ) <br /> return; <br /> CY=sY1, CX=sX1;; <br /> if(sY1==sY2) <br /> { <br /> for(i=sX1;i<sX2;i++) <br /> DelChar(); <br /> } <br /> else <br /> { <br /> while(LINEDATA[sX1]!='\n') <br /> DelChar(); <br /> for(i=sY1+1;i<sY2;i++) <br /> { <br /> CY++; <br /> for(CX=0;LINEDATA[0]!='\n';) <br /> DelChar(); <br /> } <br /> CY++; <br /> for(i=0;i<sX2;i++) <br /> DelChar(); <br /> CY=sY1, CX=LinLen(CY); <br /> for(i=sY1;i<sY2;i++) <br /> DelChar(); <br /> } <br />} <br /> <br /> <br /> <br />void ECut() <br />{ <br /> ECopy(); <br /> EClear(); <br />} <br /> <br /> <br /> <br />void EPaste() <br />{ <br /> int i; <br /> for(i=0;copyStr.data[i]!='\0';i++) <br /> AddChar(copyStr.data[i]); <br />} <br /> <br /> <br /> <br /> <br />/******************** Search ********************/ <br /> <br /> <br /> <br />int SFindALG(char find[],int sx,int sy) <br />{ <br /> int i,j,k; <br /> for(i=sy;i<NOL;i++) <br /> { <br /> for(j=0;frm[fI].ln[i].data[j]!='\0';j++) <br /> { <br /> if(i==sy&&j==0) <br /> j=sx; <br /> if(tolower(frm[fI].ln[i].data[j])==tolower(find[0])&&(j==0||!isalpha(frm[fI].ln[i].data[j-1]))) <br /> { <br /> for(k=1;find[k]!='\0';k++) <br /> if(tolower(frm[fI].ln[i].data[j+k])!=tolower(find[k])) <br /> break; <br /> if(find[k]=='\0'&&!isalpha(frm[fI].ln[i].data[j+k])) <br /> { <br /> SX1=j, SX2=j+k, SY1=SY2=i; <br /> return 1; <br /> } <br /> } <br /> } <br /> } <br /> return 0; <br />} <br /> <br /> <br /> <br />void SFind() <br />{ <br /> strcpy(fR[0],""); <br /> DrawCanvas(26,10,55,16,"Find"); <br /> Color(WHITE,RED); <br /> Put(29,12,"Word"); <br /> Color(-1,BLUE); <br /> Put(37,12," "); <br /> if(get(0)==0) <br /> { <br /> ClearMenu(); <br /> return; <br /> } <br /> ClearMenu(); <br /> if(SFindALG(fR[0],0,0)) <br /> { <br /> SetCurser(SX2-CX,SY2-CY); <br /> flag|=16; <br /> } <br /> else <br /> OkDialogBox("Not Found","The word not found"); <br />} <br /> <br /> <br /> <br />void SNext() <br />{ <br /> ClearMenu(); <br /> if(!strcmp(fR[0],"")) <br /> return; <br /> if(SFindALG(fR[0],CX,CY)) <br /> { <br /> SetCurser(SX2-CX,SY2-CY); <br /> flag|=16; <br /> } <br /> else <br /> OkDialogBox("Not Found","The word not found"); <br />} <br /> <br /> <br /> <br />void SReplace() <br />{ <br /> char *tmp; <br /> DrawCanvas(26,8,55,17,"Replace"); <br /> strcpy(fR[1],""), strcpy(fR[2],""); <br /> Color(WHITE,RED); <br /> Put(29,10,"Word :"), Put(29,12,"Replace:"); <br /> Color(-1,BLUE); <br /> Put(37,10," "), Put(37,12," "); <br /> Color(BLACK,RED); <br /> Put(29,16," [Tab to change fields.]"); <br /> if(get(1)==0) <br /> { <br /> ClearMenu(); <br /> return; <br /> } <br /> ClearMenu(); <br /> tmp=(char*)malloc(sizeof(char)*copyStr.len); <br /> strcpy(tmp,copyStr.data), strcpy(copyStr.data,fR[2]); <br /> if(SFindALG(fR[1],0,0)) <br /> { <br /> while(1) <br /> { <br /> EClear(), EPaste(); <br /> if(!SFindALG(fR[1],SX2,SY2)) <br /> break; <br /> } <br /> } <br /> else <br /> OkDialogBox("Not Found","The word not found"); <br /> strcpy(copyStr.data,tmp), free(tmp); <br />} <br /> <br /> <br /> <br /> <br />/******************** Case ********************/ <br /> <br /> <br /> <br />void CUpperLower(int upper) <br />{ <br /> int i,j; <br /> for(i=SY1;i<=SY2;i++) <br /> { <br /> if(i==SY1) <br /> j=SX1; <br /> else <br /> j=0; <br /> for(;j<LinLen(i);j++) <br /> { <br /> if(i==SY2&&j==SX2) <br /> break; <br /> frm[fI].ln[i].data[j]=(upper)?toupper(frm[fI].ln[i].data[j]):tolower(frm[fI].ln[i].data[j]); <br /> } <br /> } <br /> frm[fI].saved=0; <br /> flag|=8; <br />} <br /> <br /> <br /> <br /> <br />/******************* Table *******************/ <br /> <br /> <br />void TSDW(int index) <br />{ <br /> char ch; <br /> int i,j,hL=10; <br /> char *title[]={"Single", "Double", "SnglDbl", "DblSngl"}; <br /> char *icon[]={"Ú¿ÃÅ´ÀÁÙ³Ä","ÉË»ÌιÈʼºÍ","ÖÒ·Ç×¶ÓнºÄ","ÕÑ¸ÆØµÔϾ³Í"}; <br /> DrawCanvas(28,7,52,19,title[index]); <br /> DrawButton(31,17," Ok ",0), DrawButton(42,17," Cancel ",0); <br /> Color(WHITE,BLUE); <br /> HideMouse(); <br /> for(i=0;i<=2;i++) <br /> { <br /> gotoxy(33,10+i*2); <br /> for(j=0;j<=14;j++) <br /> cprintf(" "); <br /> } <br /> for(i=0;i<11;i++) <br /> gotoxy(33+i%3*5,9+i/3*2), cprintf(" %c ",icon[index][i]); <br /> Color(-1,MAGENTA); <br /> gotoxy(34+hL%3*5,9+hL/3*2), cprintf(" %c ",icon[index][hL]); <br /> ShowMouse(); <br /> HideCurser(); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> ch=getch(); <br /> if(ch==0) <br /> { <br /> ch=getch(); <br /> Color(-1,BLUE); <br /> HideMouse(); <br /> gotoxy(34+hL%3*5,9+hL/3*2), cprintf(" %c ",icon[index][hL]); <br /> switch(ch) <br /> { <br /> case 72: if( hL/3!=0 ) hL-=3; break; <br /> case 75: if( hL%3!=0 ) hL-=1; break; <br /> case 77: if( hL%3!=2 && hL!=10 ) hL+=1; break; <br /> case 80: if( hL/3!=3 && hL!=8 ) hL+=3; break; <br /> } <br /> Color(-1,MAGENTA); <br /> gotoxy( 34+hL%3*5, 9+hL/3*2 ), cprintf(" %c ",icon[index][hL]); <br /> ShowMouse(); <br /> HideCurser(); <br /> } <br /> else if( ch=='\r' || ch=='o'|| ch=='O' ) <br /> { <br /> AddChar(icon[index][hL]); <br /> goto end; <br /> } <br /> else if( ch==27 || ch=='c' || ch=='C' ) <br /> goto end; <br /> } <br /> if(ReadMouse()==1) <br /> { <br /> if( 7<my&&my<15 && 32<mx&&mx<46 ) <br /> { <br /> if( ( my!=14 || mx<43 ) && (mx-33)%5<3 && (my-8)%2<1 ) <br /> { <br /> Color(-1,BLUE); <br /> gotoxy(34+hL%3*5,9+hL/3*2); <br /> HideMouse(); <br /> cprintf(" %c ",icon[index][hL]); <br /> hL=(my-8)/2*3+(mx-33)/5; <br /> Color(-1,GREEN); <br /> gotoxy(34+hL%3*5,9+hL/3*2), cprintf(" %c ",icon[index][hL]); <br /> ShowMouse(); <br /> HideCurser(); <br /> while(ReadMouse()); <br /> if( 7<my&&my<15 && 32<mx&&mx<46 && (my!=14||mx<43) ) <br /> if( (mx-33)%5<3 && (my-8)%2<1 && hL==(my-8)/2*3+(mx-33)/5 ) <br /> { <br /> AddChar(icon[index][hL]); <br /> goto end; <br /> } <br /> Color(WHITE,MAGENTA), gotoxy( 34+hL%3*5, 9+hL/3*2 ); <br /> HideMouse(), cprintf(" %c ",icon[index][hL]), ShowMouse(); <br /> HideCurser(); <br /> } <br /> } <br /> else if(my==16) <br /> { <br /> if(29<mx&&mx<38) <br /> { <br /> DrawButton(31,17," Ok ",1); <br /> if( my==16 && 30<mx&&mx<37 ) <br /> { <br /> AddChar(icon[index][hL]); <br /> goto end; <br /> } <br /> DrawButton(31,17," Ok ",0); <br /> } <br /> else if(40<mx&&mx<49) <br /> { <br /> DrawButton(42,17," Cancel ",1); <br /> if( my==16 && 41<mx&&mx<50 ) <br /> goto end; <br /> DrawButton(42,17," Cancel ",0); <br /> } <br /> } <br /> } <br /> } <br />end: ClearMenu(); <br />} <br /> <br /> <br /> <br /> <br />/******************* Window *******************/ <br /> <br /> <br /> <br />void WListAll(int frmIndex) <br />{ <br /> int i; <br /> struct frame tmp=frm[frmIndex]; <br /> ClearMenu(); <br /> for(i=frmIndex;i<NoOfFrame-1;i++) <br /> frm[i]=frm[i+1]; <br /> for(;i>fI+1;i--) <br /> frm[i]=frm[i-1]; <br /> frm[i]=tmp; <br /> fI=i; <br /> SetFrame(); <br />} <br /> <br /> <br /> <br /> <br />/******************* Help *******************/ <br /> <br /> <br /> <br />void HAbout() <br />{ <br /> DrawCanvas(28,8,53,18,"About"); <br /> Color(WHITE,RED); <br /> Put(34,10," Text Editor"); <br /> Put(34,11," vertion 1.0"); <br /> Put(34,12," By"); <br /> Put(34,13,"Yassar,"); <br /> Put(34,14," MCA student."); <br /> HGetOk(16); <br />} <br /> <br /> <br /> <br />void HControls() <br />{ <br /> DrawCanvas(25,4,56,21,"Controls"); <br /> Color(YELLOW,RED); <br /> Put(27, 6,"EDIT KEYS"); <br /> Put(27,12,"CURSER KEYS"); <br /> Put(27,15,"SELECTION METHODS"); <br /> Color(WHITE,-1); <br /> Put(29, 7,"Shift+Del [Cut]"); <br /> Put(29, 8,"Ctrl+Ins [Copy]"); <br /> Put(29, 9,"Shift+Ins [Paste]"); <br /> Put(29,10,"Ctrl+Del [Clear]"); <br /> Put(29,11,"Bksp,Del,Tab,Enter."); <br /> Put(29,13,"Arrow keys,Home,End,PgUp,"); <br /> Put(29,14,"PgDn,Ctrl+PgUp,ctrl+PgDn."); <br /> Put(29,16,"Shift+curser keys,"); <br /> Put(29,17,"Ctrl+mouse click,dragging."); <br /> HGetOk(19); <br />} <br /> <br /> <br /> <br />void HDedication() <br />{ <br /> DrawCanvas(26,9,55,18,"Dedicate To"); <br /> Color(WHITE,RED); <br /> Put(27,11," RAJKUMAR sir."); <br /> Put(27,12," ^^^^^^^^^^^^^"); <br /> Put(29,13,"He helps me to understand"); <br /> Put(29,14,"the power of C."); <br /> HGetOk(16); <br />} <br /> <br /> <br /> <br />void DrawCmd(int pos) <br />{ <br /> int i; <br /> for(i=0;i<mC[pos].NoOfCmd;i++) <br /> { <br /> if(!mC[pos].enabl[i]) <br /> Color(BLACK,RED); <br /> else if(i==hL) <br /> Color(WHITE,GREEN); <br /> else <br /> Color(WHITE,RED); <br /> Put(cmdXY[pos],3+i,mC[pos].cmd[i]); <br /> } <br /> HideCurser(); <br /> while(ReadMouse()); <br />} <br /> <br /> <br /> <br />void HighlightCmd(int pos) <br />{ <br /> int i; <br /> char ch; <br /> ch=getch(); <br /> if(hL==-1) <br /> return; <br /> Color(WHITE,RED), Put(cmdXY[pos],3+hL,mC[pos].cmd[hL]); <br /> if(ch==72) <br /> { <br /> for(i=hL-1;i>=0;i--) <br /> if(mC[pos].enabl[i]==1) <br /> { <br /> hL=i; <br /> break; <br /> } <br /> } <br /> else if(ch==80) <br /> { <br /> for(i=hL+1;i<mC[pos].NoOfCmd;i++) <br /> if(mC[pos].enabl[i]==1) <br /> { <br /> hL=i; <br /> break; <br /> } <br /> } <br /> Color(-1,GREEN), Put(cmdXY[pos],3+hL,mC[pos].cmd[hL]); <br /> HideCurser(); <br />} <br /> <br /> <br /> <br /> <br />/******************** Menu ********************/ <br /> <br /> <br /> <br />void File() <br />{ <br /> char ch; <br /> DrawCanvas(4,2,17,10,""); <br /> hL=6; <br /> if(NoOfFrame==0) <br /> mC[0].enabl[3]= mC[0].enabl[4]=0; <br /> else <br /> mC[0].enabl[3]=mC[0].enabl[4]=1, hL=3; <br /> if( NoOfFrame && strncmp(frm[fI].fileName,"File:",5) && frm[fI].saved==0 ) <br /> mC[0].enabl[2]=1, hL=2; <br /> else <br /> mC[0].enabl[2]=0; <br /> if(NoOfFrame==MAXFILES) <br /> mC[0].enabl[0]= mC[0].enabl[1]=0; <br /> else <br /> mC[0].enabl[0]= mC[0].enabl[1]=1, hL=0; <br /> DrawCmd(0); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> if((ch=getch())==27) <br /> goto end; <br /> else if(ch=='\r') <br /> { <br /> switch(hL) <br /> { <br /> case 0: FNew(); goto end; <br /> case 1: FOpen(""); goto end; <br /> case 2: FSave(0); goto end; <br /> case 3: FSave(1); goto end; <br /> case 4: FClose(); goto end; <br /> case 6: FExit(); goto end; <br /> } <br /> } <br /> else if(ch==0) <br /> HighlightCmd(0); <br /> else <br /> { <br /> switch(ch) <br /> { <br /> case 'n': <br /> case 'N': if(mC[0].enabl[0]) FNew(); goto end; <br /> case 'o': <br /> case 'O': if(mC[0].enabl[1]) FOpen(""); goto end; <br /> case 's': <br /> case 'S': if(mC[0].enabl[2]) FSave(0); goto end; <br /> case 'a': <br /> case 'A': if(mC[0].enabl[3]) FSave(1); goto end; <br /> case 'c': <br /> case 'C': if(mC[0].enabl[4]) FClose(); goto end; <br /> case 'e': <br /> case 'E': if(mC[0].enabl[6]) FExit(); goto end; <br /> default : goto end; <br /> } <br /> } <br /> } <br /> if(ReadMouse()==1) <br /> { <br /> if( 2<mx&&mx<17 && 0<my&&my<10 ) <br /> while(ReadMouse()); <br /> if( 4<mx&&mx<15 ) <br /> { <br /> switch(my) <br /> { <br /> case 2 : if(mC[0].enabl[0]) FNew(); goto end; <br /> case 3 : if(mC[0].enabl[1]) FOpen(""); goto end; <br /> case 4 : if(mC[0].enabl[2]) FSave(0); goto end; <br /> case 5 : if(mC[0].enabl[3]) FSave(1); goto end; <br /> case 6 : if(mC[0].enabl[4]) FClose(); goto end; <br /> case 8 : if(mC[0].enabl[6]) FExit(); goto end; <br /> default: goto end; <br /> } <br /> } <br /> else <br /> goto end; <br /> } <br /> if(mb==2) <br /> goto end; <br /> } <br />end: ClearMenu(); <br />} <br /> <br /> <br /> <br />void Edit() <br />{ <br /> char ch; <br /> DrawCanvas(13,2,26,7,""); <br /> hL=-1; <br /> if(NoOfFrame==0) <br /> mC[1].enabl[2]=0; <br /> else <br /> mC[1].enabl[2]=1, hL=2; <br /> if( NoOfFrame==0 || SX1==SX2&&SY1==SY2 ) <br /> mC[1].enabl[0]= mC[1].enabl[1]= mC[1].enabl[3]=0; <br /> else <br /> mC[1].enabl[0]= mC[1].enabl[1]= mC[1].enabl[3]=1, hL=0; <br /> DrawCmd(1); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> if((ch=getch())==27) <br /> goto end; <br /> else if(ch==0) <br /> HighlightCmd(1); <br /> else if(ch=='\r') <br /> { <br /> switch(hL) <br /> { <br /> case 0 : ECut(); goto end; <br /> case 1 : ECopy(); goto end; <br /> case 2 : EPaste(); goto end; <br /> case 3 : EClear(); goto end; <br /> default: goto end; <br /> } <br /> } <br /> else <br /> { <br /> switch(ch) <br /> { <br /> case 't': <br /> case 'T': if(mC[1].enabl[0]) ECut(); goto end; <br /> case 'c': <br /> case 'C': if(mC[1].enabl[1]) ECopy(); goto end; <br /> case 'p': <br /> case 'P': if(mC[1].enabl[2]) EPaste(); goto end; <br /> case 'l': <br /> case 'L': if(mC[1].enabl[3]) EClear(); goto end; <br /> default : goto end; <br /> } <br /> } <br /> } <br /> if(ReadMouse()==1) <br /> { <br /> if( 11<mx&&mx<26 && 0<my&&my<7 ) <br /> while(ReadMouse()); <br /> if( 13<mx&&mx<24 ) <br /> { <br /> switch(my) <br /> { <br /> case 2 : if(mC[1].enabl[0]) ECut(); goto end; <br /> case 3 : if(mC[1].enabl[1]) ECopy(); goto end; <br /> case 4 : if(mC[1].enabl[2]) EPaste(); goto end; <br /> case 5 : if(mC[1].enabl[3]) EClear(); goto end; <br /> default: goto end; <br /> } <br /> } <br /> else <br /> goto end; <br /> } <br /> if(mb==2) <br /> goto end; <br /> } <br />end: ClearMenu(); <br />} <br /> <br /> <br /> <br />void Search() <br />{ <br /> char ch; <br /> DrawCanvas(23,2,36,6,""); <br /> if(NoOfFrame>0) <br /> mC[2].enabl[0]=mC[2].enabl[2]=1, hL=0; <br /> else <br /> mC[2].enabl[0]=mC[2].enabl[2]=0, hL=-1; <br /> if(NoOfFrame>0 && fR[0][0]!='\0') <br /> mC[2].enabl[1]=1; <br /> else <br /> mC[2].enabl[1]=0; <br /> DrawCmd(2); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> if((ch=getch())==27) <br /> goto end; <br /> else if(ch==0) <br /> HighlightCmd(2); <br /> else if(ch=='\r') <br /> { <br /> switch(hL) <br /> { <br /> case 0 : SFind(); goto end; <br /> case 1 : SNext(); goto end; <br /> case 2 : SReplace(); goto end; <br /> default: goto end; <br /> } <br /> } <br /> else <br /> { <br /> switch(ch) <br /> { <br /> case 'f': <br /> case 'F': if(mC[2].enabl[0]) SFind(); goto end; <br /> case 'n': <br /> case 'N': if(mC[2].enabl[1]) SNext(); goto end; <br /> case 'r': <br /> case 'R': if(mC[2].enabl[2]) SReplace(); goto end; <br /> default : goto end; <br /> } <br /> } <br /> } <br /> if(ReadMouse()==1) <br /> { <br /> if( 21<mx&&mx<36 && 0<my&&my<6 ) <br /> while(ReadMouse()); <br /> if(23<mx&&mx<34) <br /> { <br /> switch(my) <br /> { <br /> case 2 : if(mC[2].enabl[0]) SFind(); goto end; <br /> case 3 : if(mC[2].enabl[1]) SNext(); goto end; <br /> case 4 : if(mC[2].enabl[2]) SReplace(); goto end; <br /> default: goto end; <br /> } <br /> } <br /> else <br /> goto end; <br /> } <br /> if(mb==2) <br /> goto end; <br /> } <br />end: ClearMenu(); <br />} <br /> <br /> <br /> <br />void Case() <br />{ <br /> char ch; <br /> DrawCanvas(33,2,46,5,""); <br /> if( NoOfFrame==0 || SX1==SX2&&SY1==SY2 ) <br /> mC[3].enabl[0]= mC[3].enabl[1]=0, hL=-1; <br /> else <br /> mC[3].enabl[0]= mC[3].enabl[1]=1, hL=0; <br /> DrawCmd(3); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> if((ch=getch())==27) <br /> goto end; <br /> else if(ch==0) <br /> HighlightCmd(3); <br /> else if(ch=='\r') <br /> { <br /> switch(hL) <br /> { <br /> case 0 : if(mC[3].enabl[0]) CUpperLower(1); goto end; <br /> case 1 : if(mC[3].enabl[1]) CUpperLower(0); goto end; <br /> default: goto end; <br /> } <br /> } <br /> else <br /> { <br /> switch(ch) <br /> { <br /> case 'u': <br /> case 'U': if(mC[3].enabl[0]) CUpperLower(1); goto end; <br /> case 'l': <br /> case 'L': if(mC[3].enabl[1]) CUpperLower(0); goto end; <br /> default : goto end; <br /> } <br /> } <br /> } <br /> if(ReadMouse()==1) <br /> { <br /> if( 31<mx&&mx<46 && 0<my&&my<5 ) <br /> while(ReadMouse()); <br /> if(33<mx&&mx<44) <br /> { <br /> switch(my) <br /> { <br /> case 2 : if(mC[3].enabl[0]) CUpperLower(1); goto end; <br /> case 3 : if(mC[3].enabl[1]) CUpperLower(0); goto end; <br /> default: goto end; <br /> } <br /> } <br /> else <br /> goto end; <br /> } <br /> else if(mb==2) <br /> goto end; <br /> } <br />end: ClearMenu(); <br />} <br /> <br /> <br /> <br />void Table() <br />{ <br /> char ch; <br /> DrawCanvas(42,2,55,7,""); <br /> if(NoOfFrame>0) <br /> mC[4].enabl[0]= mC[4].enabl[1]= mC[4].enabl[2]= mC[4].enabl[3]=1, hL=0; <br /> else <br /> mC[4].enabl[0]= mC[4].enabl[1]= mC[4].enabl[2]= mC[4].enabl[3]=0, hL=-1; <br /> DrawCmd(4); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> if((ch=getch())==27) <br /> goto end; <br /> else if(ch==0) <br /> HighlightCmd(4); <br /> else if(ch=='\r') <br /> { <br /> switch(hL) <br /> { <br /> case 0 : if(mC[4].enabl[0]) TSDW(0); goto end; <br /> case 1 : if(mC[4].enabl[1]) TSDW(1); goto end; <br /> case 2 : if(mC[4].enabl[2]) TSDW(2); goto end; <br /> case 3 : if(mC[4].enabl[3]) TSDW(3); goto end; <br /> default: goto end; <br /> } <br /> } <br /> else <br /> { <br /> switch(ch) <br /> { <br /> case 's': <br /> case 'S': if(mC[4].enabl[0]) TSDW(0); goto end; <br /> case 'd': <br /> case 'D': if(mC[4].enabl[1]) TSDW(1); goto end; <br /> case 'n': <br /> case 'N': if(mC[4].enabl[2]) TSDW(2); goto end; <br /> case 'b': <br /> case 'B': if(mC[4].enabl[3]) TSDW(3); goto end; <br /> default : goto end; <br /> } <br /> } <br /> } <br /> if(ReadMouse()==1) <br /> { <br /> if( 40<mx&&mx<55 && 0<my&&my<7 ) <br /> while(ReadMouse()); <br /> if(42<mx&&mx<53) <br /> { <br /> switch(my) <br /> { <br /> case 2 : if(mC[4].enabl[0]) TSDW(0); goto end; <br /> case 3 : if(mC[4].enabl[1]) TSDW(1); goto end; <br /> case 4 : if(mC[4].enabl[2]) TSDW(2); goto end; <br /> case 5 : if(mC[4].enabl[3]) TSDW(3); goto end; <br /> default: goto end; <br /> } <br /> } <br /> else <br /> goto end; <br /> } <br /> if(mb==2) <br /> goto end; <br /> } <br />end: ClearMenu(); <br />} <br /> <br /> <br /> <br />void Window() <br />{ <br /> int i; <br /> char fn[MAXFILE],ch; <br /> DrawCanvas(53,2,66,6+NoOfFrame,""); <br /> mC[5].NoOfCmd=3; <br /> for(i=0;i<NoOfFrame;i++) <br /> { <br /> FileName(fn,frm[i].fileName); <br /> sprintf(mC[5].cmd[mC[5].NoOfCmd]," %-8s ",fn); <br /> mC[5].NoOfCmd++; <br /> } <br /> if(NoOfFrame==0) <br /> mC[5].enabl[0]=mC[5].enabl[1]=0, hL=-1; <br /> else if(NoOfFrame==1) <br /> mC[5].enabl[0]=mC[5].enabl[1]=0, hL=3; <br /> else <br /> mC[5].enabl[0]=mC[5].enabl[1]=1, hL=0; <br /> DrawCmd(5); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> if((ch=getch())==27) <br /> goto end; <br /> else if(ch==0) <br /> HighlightCmd(5); <br /> else if(ch=='\r') <br /> { <br /> switch(hL) <br /> { <br /> case 0 : WListAll(0); goto end; <br /> case 1 : WListAll(fI-1); goto end; <br /> default: if(hL!=-1) <br /> WListAll(hL-3); goto end; <br /> } <br /> } <br /> else <br /> { <br /> switch(ch) <br /> { <br /> case 'n': <br /> case 'N': if(mC[5].enabl[0]) <br /> WListAll(0); goto end; <br /> case 'p': <br /> case 'P': if(mC[5].enabl[1]) <br /> WListAll(fI-1); goto end; <br /> default : goto end; <br /> } <br /> } <br /> } <br /> if(ReadMouse()==1) <br /> { <br /> if( 51<mx&&mx<66 && 0<my&&my<6+NoOfFrame) <br /> while(ReadMouse()); <br /> if(53<mx&&mx<64) <br /> { <br /> switch(my) <br /> { <br /> case 2 : if(mC[5].enabl[0]) <br /> WListAll(0); goto end; <br /> case 3 : if(mC[5].enabl[1]) <br /> WListAll(fI-1); goto end; <br /> default: if(4<my&&my<NoOfFrame+5) <br /> WListAll(my-5); goto end; <br /> } <br /> } <br /> else <br /> goto end; <br /> } <br /> if(mb==2) <br /> goto end; <br /> } <br />end: ClearMenu(); <br />} <br /> <br /> <br /> <br />void Help() <br />{ <br /> char ch; <br /> DrawCanvas(63,2,76,6,""); <br /> hL=0; <br /> DrawCmd(6); <br /> while(1) <br /> { <br /> if(kbhit()) <br /> { <br /> if((ch=getch())==27) <br /> goto end; <br /> else if(ch==0) <br /> HighlightCmd(6); <br /> else if(ch=='\r') <br /> { <br /> switch(hL) <br /> { <br /> case 0: HControls(); goto end; <br /> case 1: HAbout(); goto end; <br /> case 2: HDedication(); goto end; <br /> } <br /> } <br /> else <br /> { <br /> switch(ch) <br /> { <br /> case 'c': <br /> case 'C': HControls(); goto end; <br /> case 'a': <br /> case 'A': HAbout(); goto end; <br /> case 'd': <br /> case 'D': HDedication(); goto end; <br /> default : goto end; <br /> } <br /> } <br /> } <br /> if(ReadMouse()==1) <br /> { <br /> if( 61<mx&&mx<76 && 0<my&&my<6 ) <br /> while(ReadMouse()); <br /> if(63<mx&&mx<74) <br /> { <br /> switch(my) <br /> { <br /> case 2 : HControls(); goto end; <br /> case 3 : HAbout(); goto end; <br /> case 4 : HDedication(); goto end; <br /> default: goto end; <br /> } <br /> } <br /> else <br /> goto end; <br /> } <br /> if(mb==2) <br /> goto end; <br /> } <br />end: ClearMenu(); <br />} <br /> <br /> <br />/**********************************************************/ <br /> <br /> <br /> <br />void GetKey() <br />{ <br /> int i; <br /> char ch=getch(); <br /> if(ch==0) <br /> { <br /> ch=getch(); <br /> switch(ch) <br /> { <br /> case 33: File(); return; <br /> case 18: Edit(); return; <br /> case 31: Search(); return; <br /> case 46: Case(); return; <br /> case 20: Table(); return; <br /> case 17: Window(); return; <br /> case 35: Help(); return; <br /> default: if(NoOfFrame>0) <br /> { <br /> switch(ch) <br /> { <br /> case 82: if(ShiftKeyHit()) <br /> EPaste(); // Shift+Ins <br /> else <br /> SNext(); return; // Ins <br /> case 83: if(ShiftKeyHit()) <br /> ECut(); // Shift+Del <br /> else <br /> DelChar(); return; // Del <br /> case 71: SetCurser(-CX,0); return; // Home <br /> case 72: SetCurser(0,-1); return; // up <br /> case 75: SetCurser(-1,0); return; // left <br /> case 77: SetCurser(1,0); return; // right <br /> case 79: SetCurser(LinLen(CY)-CX,0); return; // End <br /> case 80: SetCurser(0,1); return; // down <br /> case 73: // PgUp <br /> { <br /> i=CY-SL; <br /> SL-=ROW; <br /> flag|=16; <br /> if(SL<0) <br /> SL=0; <br /> SetCurser(0,SL+i-CY); <br /> } return; <br /> case 81: // PgDn <br /> { <br /> i=CY-SL; <br /> SL+=ROW; <br /> flag|=16; <br /> if(SL>=NOL) <br /> SL-=ROW; <br /> SetCurser(0,SL+i-CY); <br /> } return; <br /> case-110: ECopy(); return; // Shift+I <br /> case-109: EClear(); return; // Ctrl+Del <br /> case-124: SetCurser(-CX,-CY); return; // Ctrl+PgUp <br /> case 118: SetCurser(LinLen(NOL-1)-CX,NOL-1-CY); <br /> return; // Ctrl+PgDn <br /> } <br /> } <br /> } <br /> } <br /> else if(NoOfFrame>0) <br /> { <br /> switch(ch) <br /> { <br /> case 8: AddBksp(); return; // Backspace <br /> case 9: for(i=0;i<SPACESTOTAB;i++) <br /> AddChar(' '); return; //Tab <br /> default: if( ' '<=ch&&ch<='~' || ch=='\r' ) <br /> AddChar(ch); <br /> } <br /> } <br />} <br /> <br /> <br /> <br />void PopupMenu() <br />{ <br /> int sx,sy,i; /* store mx ,my. popupmenu */ <br /> char *pm[]= { " Cut ", " Copy ", " Paste ", " Clear " }; <br /> if(mx==0||mx==79||my<2||my>22) <br /> return; <br /> if(mx==1) <br /> mx=2; <br /> else if(mx>68) <br /> mx=68; <br /> if(my==2) <br /> my=3; <br /> else if(my>16) <br /> my=16; <br /> sx=mx+1, sy=my+1; <br /> DrawCanvas(sx,sy,sx+8,sy+5,""); <br /> hL=-1; <br /> mC[1].enabl[2]=1; <br /> if(SX1==SX2&&SY1==SY2) <br /> mC[1].enabl[0]= mC[1].enabl[1]= mC[1].enabl[3]=0; <br /> else <br /> mC[1].enabl[0]= mC[1].enabl[1]= mC[1].enabl[3]=1; <br /> for(i=0;i<=3;i++) <br /> { <br /> if(mC[1].enabl[i]) <br /> Color(WHITE,RED); <br /> else <br /> Color(BLACK,RED); <br /> Put(sx+1,sy+1+i,pm[i]); <br /> } <br /> Color(WHITE,-1); <br /> while(ReadMouse()); <br /> while(1) <br /> { <br /> ReadMouse(); <br /> if(mb||kbhit()) <br /> { <br /> if( sx<mx&&mx<sx+8 && sy<=my&&my<=sy+3 && mb==1 ) <br /> { <br /> switch(my-sy) <br /> { <br /> case 0: if(mC[1].enabl[0]) ECut(); break; <br /> case 1: if(mC[1].enabl[1]) ECopy(); break; <br /> case 2: if(mC[1].enabl[2]) EPaste(); break; <br /> case 3: if(mC[1].enabl[3]) EClear(); break; <br /> } <br /> while(ReadMouse()); <br /> } <br /> ClearMenu(); <br /> return; <br /> } <br /> else <br /> { <br /> if( hL!=-1 && ( !(my>=sy&&my<=sy+3&&sx<mx&&mx<sx+8) || hL!=my-sy) ) <br /> Color(-1,RED), Put(sx+1,sy+1+hL,pm[hL]), hL=-1; <br /> if(sy<=my&&my<=sy+3 && sx<mx&&mx<sx+8 && hL!=my-sy && mC[1].enabl[my-sy]) <br /> hL=my-sy, Color(-1,GREEN), Put(sx+1,sy+1+hL,pm[hL]); <br /> HideCurser(); <br /> } <br /> } <br />} <br /> <br /> <br /> <br />void MouseSelection() <br />{ <br /> int oldMX=mx,oldMY=my; <br /> if(ShiftKeyHit()) <br /> { <br /> SetCurser(mx-1+SC-CX,my-2+SL-CY); <br /> while(ReadMouse()); <br /> return; <br /> } <br /> SX1= SX2= CX, SY1= SY2= CY; <br /> PutData(); <br /> SetCurser(mx-1+SC-CX,my-2+SL-CY); <br /> GotoXY(); <br /> mouseSelecting=1; <br /> while(1) <br /> { <br /> if(ReadMouse()!=1) <br /> break; <br /> if( mx==0&&CX!=0 || mx==79&&CX<LinLen(CY) || <br /> oldMX!=mx || oldMY!=my || my>22&&CY<NOL-1 || my<2&&CY!=0 ) <br /> { <br /> oldMX=mx, oldMY=my; <br /> SetCurser(mx-1+SC-CX,my-2+SL-CY); <br /> DisplayData(); <br /> delay(99); <br /> } <br /> } <br /> mouseSelecting=0; <br />} <br /> <br /> <br />void InitProgram() <br />{ <br /> textmode(C80); <br /> InitMouse(); <br /> Color(RED,GREEN); <br /> clrscr(); <br /> Put(9,1,"File Edit Search Case Table Window Help"); <br /> Color(GREEN,-1); <br /> Put(1,1," "); // for mouse hidding <br /> Color(BLACK,-1); <br /> Put(24,25,"http://mischiefprogramer.googlepages.com/my cprograms"); <br /> ShowMouse(); <br /> copyStr.len=strlen("<http://http://mischiefprogramer.googlepages.com/my cprograms>")+1; <br /> copyStr.data=(char*)malloc(copyStr.len); <br /> strcpy(copyStr.data,"<http://mischiefprogramer.googlepages.com/my cprograms>"); <br /> SetFrame(); <br />} <br /> <br /> <br /> <br /> <br /> <br />void main( int argc, char *argv[] ) <br />{ <br /> int i; <br /> char ext[MAXEXT]; <br /> InitProgram(); <br /> HideCurser(); <br /> if(argc>1) <br /> { <br /> fnsplit(argv[1],NULL,NULL,NULL,ext); <br /> if(strcmpi(ext,".tef")) <br /> OkDialogBox("ERROR","Invalid file extention"); <br /> else if( strlen(argv[1])>62 ) <br /> OkDialogBox("ERROR","The path is too long"); <br /> else <br /> FOpen(argv[1]); <br /> } <br /> while(1) <br /> { <br /> if(kbhit()) <br /> GetKey(); <br /> ReadMouse(); <br /> if(mb==1) <br /> { <br /> if(my==0) <br /> { <br /> if(5<mx&&mx<14) <br /> File(); <br /> else if(14<mx&&mx<23) <br /> { <br /> if( advice && NoOfFrame>0 ) <br /> OkDialogBox("Advice"," Use popupmenu"), advice=0; <br /> else <br /> Edit(); <br /> } <br /> else if(23<mx&&mx<34) <br /> Search(); <br /> else if(34<mx&&mx<43) <br /> Case(); <br /> else if(43<mx&&mx<53) <br /> Table(); <br /> else if(53<mx&&mx<64) <br /> Window(); <br /> else if(64<mx&&mx<73) <br /> Help(); <br /> } <br /> else if(NoOfFrame>0) <br /> { <br /> if( my==1 && 1<mx&&mx<5 ) <br /> { <br /> FClose(); <br /> while(ReadMouse()); <br /> } <br /> else if( mx==79 || my==23 ) <br /> Scroll(); <br /> else if( 0<my&&my<23 && 0<mx&&mx<79 ) <br /> MouseSelection(); <br /> } <br /> } <br /> else if( mb==2 && NoOfFrame>0 ) <br /> PopupMenu(); <br /> if( flag && NoOfFrame>0 ) <br /> DisplayData(); <br /> } <br />} <br />
No comments:
Post a Comment
Newer Post
Older Post
Home
Subscribe to:
Post Comments (Atom)
Pages
Home
can you guess what would be the facebook's awsome...
Blog Archive
►
2011
(1)
►
July
(1)
▼
2008
(4)
▼
August
(4)
if you dont want to become mad.. dont open the pro...
math expression evaluater
new texeditor using c
The number you choose
No comments:
Post a Comment