
Шустрый

Профиль
Группа: Участник
Сообщений: 56
Регистрация: 22.3.2009
Где: Украна, Донецк
Репутация: нет Всего: нет
|
| Код | #include <stdio.h> #include <string.h> #include <stdlib.h> #include <alloc.h> #include <conio.h> #include <dos.h> unsigned char *rs[100]; unsigned int far *p=(unsigned int far *)MK_FP(0xB800,0x0000); int x1,y1,x2,y2,x3,x4,y3,y4,x6,x7,x8,y7,y8,Alt=0,xl,yl,xr,yr,u,k,xl2,yl2,xr2,yr2,xl3,yl3,xr3,yr3,xr4,yl4,xl4,yr4,xr5,yl5,xl5,yr5,kstr; char *name; void wr_text(int xt,int yt,int xk,int yk); void pr_koor(int xt,int yt,int xk,int yk); void main(int argc,char *argv[]) {FILE *f1; int i,j,c,yk,xk,xt,yt,m,d,l,s1,s2,f; char file[50]; clrscr(); if(argc!=2) {printf("Неверные параметры"); getch();goto mret;} /*Выделение памяти под указатели*/ for(i=0;i<=100;i++) if((rs[i]=(char*)malloc(100))==NULL) {printf("Недостаточно памяти");goto mret;} if ((f1=fopen(argv[1],"r"))==NULL) {printf("Файл %s не открывается",argv[1]); goto mret;} for(i=0;i<=100;i++) for(j=0;j<=100;j++) *(rs[i]+j)=' '; /*Формирование файла в памяти;*/ i=1; x1=y1=x2=y2=x3=x4=y3=y4=x6=x7=x8=y7=y8=-1; while(fgets(rs[i++],100,f1)!=NULL) if(i==100) break; kstr=i-2; printf("Имя файла - %s\nКоличество строк в файле - %d", argv[1],kstr); name=argv[1]; c=getch(); clrscr(); gotoxy(1,1); /*Вывод sr на экран*/ xt=0;yt=0; xk=1;yk=2; wr_text(xt,yt,xk,yk); gotoxy(1,2); while(1 ) { c=getch(); if(c=='\0') c=getch(); yk=wherey();xk=wherex(); switch(c) { case 72:{if( yk>2) /*Стрелка вверх*/ {yk--;gotoxy(xk,yk); pr_koor(xt,yt,xk,yk); } else if(yt>0) {yt--;wr_text(xt,yt,xk,yk); } if(Alt==1) {x1=y1=x2=y2=x3=x4=y3=y4=x6=x7=x8=y7=y8=-1;Alt=0; u=0;k=0; wr_text(xt,yt,xk,yk);}
break; } case 80:{if( yk<=22) /*Стрелка вниз*/ {yk++;gotoxy(xk,yk); pr_koor(xt,yt,xk,yk); } else if(yt<77) {yt++;wr_text(xt,yt,xk,yk); } if(Alt==1) {x1=y1=x2=y2=x3=x4=y3=y4=x6=x7=x8=y7=y8=-1;Alt=0;u=0;k=0; wr_text(xt,yt,xk,yk);} break; } case 75:{if( xk>1) /*Стрелка влево*/ {xk--;gotoxy(xk,yk); pr_koor(xt,yt,xk,yk); } else if(xt>0) {xt--;wr_text(xt,yt,xk,yk); } if(Alt==1) {x1=y1=x2=y2=x3=x4=y3=y4=x6=x7=x8=y7=y8=-1;Alt=0;u=0;k=0; wr_text(xt,yt,xk,yk);}
break; } case 77:{if( xk<80) /*Стрелка вправо*/ {xk++;gotoxy(xk,yk); pr_koor(xt,yt,xk,yk); } else if(xt<20) { xt++;wr_text(xt,yt,xk,yk); }if(Alt==1) {x1=y1=x2=y2=x3=x4=y3=y4=x6=y7=y8=-1;;Alt=0;u=0; wr_text(xt,yt,xk,yk);} break; } case 147:{ /*Ctrl-Del*/ i=xk+xt; m=0; while((*(rs[yt+yk-1]+i)==' ')|(*(rs[yt+yk-1]+i)=='\n')|(*(rs[yt+yk-1]+i)=='\0'))i++; while((*(rs[yt+yk-1]+i)!=' ')&&(*(rs[yt+yk-1]+i)!='\n')&&(*(rs[yt+yk-1]+i)!='\0')&&(i<100)) i++, m++; if ((m==0)&(xk==1)) /*если строка пуста, то поднимаем вверх */ { for(d=1;d<100;d++) {for (i=0;i<100;i++) *(rs[(yt+(d-1))+yk-1]+i)=*(rs[(yt+d)+yk-1]+i);} } else {xk=i-xt; l=i-xt; for (i=xt+xk-1;i<100;i++) *(rs[yt+yk-1]+(i-m))=*(rs[yt+yk-1]+i+1); for (i=100-m;i<100;i++) *(rs[yt+yk-1]+i)='\0'; xk=l-m;} wr_text(xt,yt,xk,yk); break; } case 27: goto mret; case 116: /*Ctrl+'Стрелка вправо'*/ { i=xk+xt+1; while((*(rs[yt+yk-1]+i)==' ')|(*(rs[yt+yk-1]+i)=='\n')|(*(rs[yt+yk-1]+i)=='\0'))i++; while((*(rs[yt+yk-1]+i)!=' ')&&(*(rs[yt+yk-1]+i)!='\n')&&(*(rs[yt+yk-1]+i)!='\0')&&(i<100)) i++; if (i>=100) { if(*(rs[yt+yk-1]+99)!='\0') i=100; else break; } if((i>xt)&&(i<xt+80)) { xk=i-xt; } else { if (i>(xt+80)) { xt=i-80; xk=80; } } wr_text(xt,yt,xk,yk); break; } case 115: /*Ctrl+'Стрелка влево'*/ { i=xk+xt-2; while((*(rs[yt+yk-1]+i)==' ')|(*(rs[yt+yk-1]+i)=='\n')|(*(rs[yt+yk-1]+i)=='\0'))i--; while((*(rs[yt+yk-1]+i)!=' ')&&(*(rs[yt+yk-1]+i)!='\n')&&(*(rs[yt+yk-1]+i)!='\0')&&(i>0)) i--; if (i<=0) { if(*(rs[yt+yk-1])!=' ') i=0; else break; } if((i>xt)&&(i<=xt+80)) { xk=i-xt+2; } else { { xt=i; xk=1; } } wr_text(xt,yt,xk,yk); break; } case 83: /*Del*/ { for (i=xt+xk-1;i<100;i++) *(rs[yt+yk-1]+i)=*(rs[yt+yk-1]+i+1); *(rs[yt+yk-1]+i)='\0'; wr_text(xt,yt,xk,yk); break; } case 152: /*Alt+'Стрелка вверх'*/ { if(Alt==0) { Alt=1; } if( yk>1) { yk--; gotoxy(xk,yk);
} else if(yt>0) { yt--; } if(y1==-1) y1=yt+yk; y2=yt+yk; if(y3==-1) y3=yt+yk-1; y4=yt+yk-1; if(x1<=x2) {if(x2==-1) x2=xt+xk-1; x1=0;} if(x1>x2) {if(x1==-1) x1=xt+xk-1; x2=0;} if(x3==-1) x3=xt+xk-1; x4=100; if(y1!=y2) {if(y1<y2) {y7=y3+1; y8=y4; x7=0; x8=100; } else {y7=y1-1; y8=y2; x7=0; x8=100;}} u=1; wr_text(xt,yt,xk,yk); break; } case 160: /*Alt+'Стрелка вниз'*/ { if(Alt==0) { Alt=1; } if( yk<=22) { yk++; gotoxy(xk,yk); } else if(yt<77) { yt++; } if(y1==-1) y1=yt+yk-1; y2=yt+yk-1; if(y3==-1) y3=yt+yk-2; y4=yt+yk-2; if(x1<=x2) {if(x2==-1) x2=xt+xk-1; x1=0;} if(x1>x2) {if(x1==-1) x1=xt+xk-1; x2=0;} if(x3==-1) x3=xt+xk-1; x4=100; if(y1!=y2) {if(y1>y2) {y7=y1-1; y8=y2; x7=0; x8=100; } else {y7=y3+1; y8=y4; x7=0; x8=100;}} wr_text(xt,yt,xk,yk); k=1; break; } case 155: /*Alt+'Стрелка влево'*/
{ if(Alt==0) { Alt=1; } if( xk>1) { xk--; gotoxy(xk,yk); } else if(xt>0) { xt--; } if(u==1) {x3=xk+xt-1; x6=xk+xt-1;} else {if(x1==-1) x1=xk+xt; x2=xk+xt-1;} if(y1==-1) y1=y2=yt+yk-1; wr_text(xt,yt,xk,yk); break; } case 157: /*Alt+'Стрелка вправо'*/ { if(Alt==0) { Alt=1; } if( xk<80) { xk++; gotoxy(xk,yk); } else if(xt<20) { xt++; } if(u==1) {x3=xk+xt-1; x6=xk+xt-1;} else {if(x1==-1) x1=xk+xt-2; x2=xk+xt-1;} if(y1==-1) y1=y2=yt+yk-1; wr_text(xt,yt,xk,yk); break; } case 21: /*Ctrl+U*/ { x1=y1=x2=y2=x3=x4=y3=y4=x6=y7=y8=-1;;Alt=0;u=0;k=0;Alt=0; wr_text(xt,yt,xk,yk); break; } case 68: /*Shift-D*/ { if(Alt) { if(y3<y4) {d=y4-y3; s1=y3; s2=y2;} if(y3>y4) {d=y3-y4; s1=y4; s2=y1;} if(y3==y4) {s1=y4; s2=y1;} if(y3!=y4) { for(j=1;j<=d;j++) {for(i=0;i<100;i++) *(rs[(s1+(j))]+i)='\0';} } for (i=x3;i<100;i++) *(rs[s1]+i)='\0'; for (i=0;i<x2+1;i++) *(rs[s2]+i)='\0'; s1=s1+1; if(y3!=y4) {for(f=1;f<=d;f++) {for(j=1;j<100;j++) {for (i=0;i<100;i++) *(rs[(s1+(j-1))]+i)=*(rs[(s1+(j))]+i);}} if(y3<y4) yk=yk-d;} x1=y1=x2=y2=x3=x4=y3=y4=x6=y7=y8=-1;;Alt=0;u=0;k=0; wr_text(xt,yt,xk,yk); } break; } case 59: /*F1*/ { clrscr(); printf("Вариант 25. \n 1. Функции перемещения курсора\n\n5. Ctrl-Left - перемещение курсора на предыдущее слово текущей строки \n6. Ctrl - Right - перемещение курсора на следующее слово текущей строки \n\n 2. Функции удаления\n\n1. Del - Удаляет символ справа от курсора\n4. Ctrl-Del - Удаляет слово справа от курсора\n\n 3. Функции работы с блоками\n\n2. Alt-Cursor key - выделить блок\n4. Ctrl-U - снять выделение блока\n9. Shift-D - Удалить блок\n\n 4. Другие операции\n\n1. F1 - показать HELP, Esc- отмена\n2. F2 - сохранить файл\n3. Shift-F2 - сохранить файл под новым именем\n8. Esc - выход"); while (getch()!=27); wr_text(xt,yt,xk,yk); break; } case 60: /*F2*/ { remove(argv[1]); f1=fopen(argv[1],"w"); for (i=0;i<100;i++) { fputs(rs[i],f1); } fclose(f1); break; } case 85: /*Shift-F2*/ { clrscr(); printf("Имя нового файла: "); scanf("%s",&file); remove(file); f1=fopen(file,"w"); for (i=0;i<100;i++) { fputs(rs[i],f1); } fclose(f1); wr_text(xt,yt,xk,yk); break; }
} } mret: *(p)=0x0F20;
} void wr_text(int xt,int yt,int xk,int yk) { int i,j; clrscr(); pr_koor(xt,yt,xk,yk); if (x1>x2){ xr=x1; xl=x2;} else{ xr=x2; xl=x1;} if (y1>y2){ yr=y1; yl=y2;} else{ yr=y2; yl=y1;} if (x3>x4){ xr=x3; xl=x4;} else{ xr2=x4; xl2=x3;} if (y3>y4){ yr2=y3; yl2=y4;} else{ yr2=y4; yl2=y3;} if (x3>x6){ xr3=x3; xl3=x6;} else{ xr3=x6; xl3=x3;} if (x7>x8){ xr4=x7; xl4=x8;} else{ xr4=x8; xl4=x7;} if (y7>y8){ yr4=y7; yl4=y8;} else{ yr4=y8; yl4=y7;} for(i=1;i<=22;i++) for(j=0;j<=79;j++) { if(((xl<=(j+xt))&&(xr>=(j+xt))&&(yl<=(i+yt))&&(yr>=(i+yt)))|((xl2<=(j+xt))&&(xr2>=(j+xt))&&(yl2<=(i+yt))&&(yr2>=(i+yt))) |((xl3<=(j+xt))&&(xr3>=(j+xt))&&(yl3<=(i+yt))&&(yr3>=(i+yt)))|((xl4<=(j+xt))&&(xr4>=(j+xt))&&(yl4<=(i+yt))&&(yr4>=(i+yt)))) { if((*(rs[i+yt]+j+xt)==' ')|(*(rs[i+yt]+j+xt)=='\0')|(*(rs[i+yt]+j+xt)=='\n')) *(p+i*80+j)=0x3F20; else *(p+i*80+j)=(0x3000+(*(rs[i+yt]+j+xt))); } else { if((*(rs[i+yt]+j+xt)==' ')|(*(rs[i+yt]+j+xt)=='\0')|(*(rs[i+yt]+j+xt)=='\n')) *(p+i*80+j)=0x1B20; else *(p+i*80+j)=(0x1B00+(*(rs[i+yt]+j+xt))); } } }
void pr_koor(int xt,int yt,int xk,int yk) { gotoxy(1,1); printf("File:data.txt\t\t\tLine %2d/100\t\t\tPosition %d ", yk+yt-1, xk+xt); gotoxy(1,24); printf("1|Help | 2|Save| Esc|Exit|"); gotoxy(xk,yk); }
|
Как сделать вместо Alt- +(стрелки курсора вверх,вниз,вправо и влево) поставить Shift + (стрелки курсора)? (выделение текста) Добавлено через 3 минуты и 15 секундИ подскажите для case номера клавиш для редактирования?
|