Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
soadpol
0 / 0 / 0
Регистрация: 19.09.2009
Сообщений: 16
#1

помощь(консультация) в написании прогр.на Си-текст.редактор - C++

19.09.2009, 04:12. Просмотров 1076. Ответов 1
Метки нет (Все метки)

Тут вот задали написать текстовой редактор на си,выдана программа-заготовка,она по идее якобы
тот же текст.ред.но урезанный,в общем беру эту прогу,пытаюсь компилировать,но -куча ошибок(чего
в принципе быть не должно), начинаю смотреть вид ошибок,понимаю что не подключены нек.библиотеки #include,кое-что узнаю,вношу,но остается все таки еще-

c:14: предупреждение: инициализация из несовместимого типа указателя .c:14: ошибка: элемент инциализатора является не константа .c:14: предупреждение: определение данных не имеет тип или класс памяти Выполнение завершено
вот текст проги-

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*Задание: Просмотр текстовых файлов с использованием стрелок и*/
/*         клавиш Page Up,Page Down,Home,End*/
/*---------------------w_edit.c------------------*/
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#include <dos.h>
char *rs[100];
far*p=(char far *)MK_FP(0xB800,0x0000) ;/*строка 14,здесь ошибка*/
int main(int argc,char *argv[])
{void wr_text(int xt,int yt,int xk,int yk);
 void pr_koor(int xt,int yt,int xk,int yk);
 FILE *f1;
 int i,j,c,yk,xk,xt,yt,kstr;
 if(argc!=2)
   {printf("неверные параметры"); getch();goto mret;}
   
/*Выделение памяти под указатели*/
 for(i=0;i<=100;i++)
  if((rs[i]=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=0;
 while(fgets(rs[i++],100,f1)!=NULL)
  if(i==100) break;
 kstr=i-2;
 printf("kstr=%d",i);
 c=getch();
 
 gotoxy(1,1);
 
/*Вывод sr на экран*/
 xt=0;yt=0;
 for(i=yt;i<=22;i++)
   for(j=xt;j<=79;j++)
    { if((*(rs[i]+j)==' ')|(*(rs[i]+j)=='\0')|(*(rs[i]+j)=='\n'))
       putchar(' ');
     else
       putchar(*(rs[i]+j));
    }
 xk=1;yk=1;
 pr_koor(xt,yt,xk,yk);
 gotoxy(1,1);
 while(1 )
 {
  c=getch();
  if(c=='\0') c=getch();
  yk=wherey();xk=wherex();
   switch(c)
     {
      case 72:{if( yk>1)/*Стрелка вверх*/
                {yk--;gotoxy(xk,yk);
                pr_koor(xt,yt,xk,yk);
                }
               else
                if(yt>0)
                 {yt--;wr_text(xt,yt,xk,yk);
                 }
               break;
              }
      case 119:{            /*Ctrl-Home*/
                 yt=0;xt=0;yk=1;xk=1;
                 wr_text(xt,yt,xk,yk);
                 break;
               }
      case 117:{            /*Ctrl-End*/
                 yt=kstr-21;
                 if(yt<0) yt=0;yk=kstr-yt+2;xk=1;
                 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);
                 }
              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);
                 }
 
               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);
                  }
                break;
               }
      case 73:{if( yt>22)       /*Page Up*/
                {yt-=23;wr_text(xt,yt,xk,yk);
                }
               else
                if(yt>0)
                 {yt=0;wr_text(xt,yt,xk,yk);
                 }
                else
                {yk=1;gotoxy(xk,yk);
                pr_koor(xt,yt,xk,yk);
                }
               break;
              }
      case 81:{if( yt<=55)       /*Page Down*/
                {yt+=23;wr_text(xt,yt,xk,yk);
                }
               else
                if(yt<77)
                 {yt=77;wr_text(xt,yt,xk,yk);
                 }
                else
                {yk=23;gotoxy(xk,yk);
                pr_koor(xt,yt,xk,yk);
                }
               break;
              }
      case 71:{ xt=0;xk=1;       /*Home*/
                wr_text(xt,yt,xk,yk);
                break;
              }
      case 79:{                /*End*/
               for(j=99;j>0;j--)
                {if(!((*(rs[yt+yk-1]+j)==' ')|(*(rs[yt+yk-1]+j)=='\0')|
                   (*(rs[yt+yk-1]+j)=='\n')))
                  break;
                }
               j++; /*Позиция за последним символом строки в файле памяти*/
               if(j<=xt+79)
                {xk=j-xt+1;gotoxy(xk,yk);pr_koor(xt,yt,xk,yk);}
               break;
              }
      case 27: goto mret;
/*      case 0..255:{rs[xt+xk]+[yt+yk]
      for (i=100,i>xt+xk-1,i--)
         {rs[i]+[yt+yk]:=rs[i-1]+[yt+yk];}
          rs[xt+xk]+[yt+yk]:=c;}*/
 
 
     }
  }
 mret:;
}
void wr_text(int xt,int yt,int xk,int yk)
{
 int i,j;
 
 gotoxy(1,1);
 for(i=0;i<=22;i++)
  for(j=0;j<=79;j++)
       { if((*(rs[i+yt]+j+xt)==' ')|(*(rs[i+yt]+j+xt)=='\0')|
       (*(rs[i+yt]+j+xt)=='\n'))
       *(p+i*160+j*2)=' ';
     else
       *(p+i*160+j*2)=*(rs[i+yt]+j+xt);
    }
 gotoxy(35,25);
 printf("line %2d,pos %2d (xk=%2d,yk=%2d,xt=%2d,yt=%2d)",yk+yt,xk+xt,xk,yk,xt,yt);
 gotoxy(xk,yk);
}
хотелось бы узнать что означает far*p=(char far *)MK_FP(0xB800,0x0000)
это что-то вроде резервирует память?какая нужна #include
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2009, 04:12     помощь(консультация) в написании прогр.на Си-текст.редактор
Посмотрите здесь:

нужна помощь в написании программки - C++ Builder
Добрый день! задача такая: есть 2 поля memo1 и memo2 в них в столбец заполнены данные, не обходима парно брать строки из одного и...

Помощь в написании программы, производящей вычисления и заносящей их в табличку - C++
Здравствуйте! Собственно, проблема такая... Нужно написать программу для ВТОРОГО ЗАДАНИЯ из лабораторной работы (первое уже сделано,...

Немогу никак разобраться в массивах, срочно нужна помощь в написании консольных программ - Visual C++
Немогу некак разобраться в масивах, срочно нужна помощь в написании консльных программ, если можно то с объеснением работы масивов в них. ...

Текстовый редактор. Зашифровать текст. - C++
подскажите пожалуйста не пойму что надо сделать??? &quot;файл должен храниться в зашифрованном виде: над каждым симво-лом файла произвести...

Однострочный редактор текста Edit не редактирует текст. И несколько вопр-сов от начинающего по CreateWindowEx - C++ WinAPI
Здравствуйте. Задача: создать в приложении редактор Edit, считывать из него в буффер, а из буффера помещать в ListBox. Приложение...

Не работает прогр. Ошибки! - C++
Помогите исправить ошибки.

Реализация разбиения числа с Динам. Прогр - C++
Доброго времени суток. Нужна помощь: как с помощью динамического программирования реализовать решение такой вот задачи: &quot;найти...

В чем опасность Double-Checked Locking (параллельное прогр-е) - C++
В учебнике Энтони Уильямса &quot;Параллельное программирование на C++&quot; описана проблема при использовании блокировки с двойной проверкой...

Сложности в написании кодов - C++
Помогите выполнить задачки,желательно с комментариями типа: cout&lt;&lt;&quot;vvedite chislo :&quot;; в билдере с++ 1.Вводится строка произвольного...

Помогите в написании программы (C++) - C++
За каждый ход генерируется случай n-ое число от 0 до 6 (моделируется выпадание игрального кубика). На основании полученного числа...

Правильность в написании формулы - C++
Всем привет, ребят сегодня открыл для себя с++, мне нужно записать и решить эту формулу. Вот как я записал : u = (pow(e, y-1) + 3) /...

консультация - C++
Здравствуйте!у меня просто вопрос!как можно понять быстрее программирование литературой или рассматривать готовые программы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
19.09.2009, 13:40     помощь(консультация) в написании прогр.на Си-текст.редактор #2
Какой компилятор?
Вот это: far*p=(char far *)MK_FP(0xB800,0x0000) ;/*строка 14,здесь ошибка*/ было актуально в давным-давно ушедшую эпоху MS DOS, мир праху ее.... Так конструировался указатель на экранный буфер.
Боюсь, что этот исходник подлежит сдаче в музей на почетное хранение. Даже если ты его скомпилируешь, при выполнении наверняка вылезет ошибка типа "Программа выполнила недопустимую операцию и будет закрыта."

Попытайся, тем не менее, извлечь из него пользу:
1. попытайся понять, как он работает, не забывая, что тут, видимо, реалии MS DOS,
2. поняв, перепиши все для твоего компилятора.
Yandex
Объявления
19.09.2009, 13:40     помощь(консультация) в написании прогр.на Си-текст.редактор
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru