Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Текстовый редактор, Небольшой текстовый редактор 
:(
    Опции темы
antonkonikov
Дата 25.5.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 22.3.2009
Где: Украна, Донецк

Репутация: нет
Всего: нет



Нужен исходник текстового редактора написанного на Си. (не висуал и не ++). Может у кого-то есть??
Буду весьма благодарен)))
PM MAIL WWW ICQ   Вверх
bsa
Дата 25.5.2010, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



PM   Вверх
antonkonikov
Дата 25.5.2010, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 22.3.2009
Где: Украна, Донецк

Репутация: нет
Всего: нет



Для Windows (DOS)
PM MAIL WWW ICQ   Вверх
bsa
Дата 25.5.2010, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



antonkonikov, я дал ссылки на кроссплатформенные редакторы. Если бы внимательно смотрел, то бы увидел, что есть сборки под Windows.
PM   Вверх
antonkonikov
  Дата 28.5.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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 номера клавиш для редактирования?
PM MAIL WWW ICQ   Вверх
bsa
Дата 28.5.2010, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



что такое "номера клавиш для редактирования"? ASCII коды? Например, 'a'.
Чтобы полноценно отрабатывать Shift/Alt/Ctrl, необходимо использовать более низкоуровневые функции. подозреваю, что в DOS они доступны только через ассемблер.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.