siema, mam do zrobienia program, ktory ma wczytywac tekst z pliku do ramki i przesuwać go Pg downem( o jeden wiersz) i spacją(o cały ekran ramki). mam juz troche kodu, ale coś mi ucina tekst znajdujący się poza ramką, tzn, jak przewijam to juz go nie ma, a powinien być. co moze byc nie tak?
#include <stdio.h>
#include "stdafx.h"
#include "console.h"
#define FileWindowXOffset 12 //ramka w poziomie
#define FileWindowYOffset 8 // ramka w pionie
#define FileWindowXSize 50 //szerokosc ramki
#define FileWindowYSize 35 //dlugosc ramki
/********************************************************************/
void write() // rysowanie ramki
{
gotoXY(FileWindowXOffset+1,FileWindowYOffset);
for (int i=0; i<FileWindowXSize;i++)
write("-");
gotoXY(FileWindowXOffset+1,FileWindowYOffset+FileWindowYSize+1);
for (int i=0; i<FileWindowXSize;i++)
write("-");
for (int i=1; i<=FileWindowYSize;i++)
{
gotoXY(FileWindowXOffset,FileWindowYOffset+i);
write('|');
gotoXY(FileWindowXOffset+FileWindowXSize+1, FileWindowYOffset+i);
write('|');
}
}
void clear() \\czyszczenie
{
int a, b;
for (a=0; a<FileWindowXSize-1; a++)
{
for (b=0; b<FileWindowYSize-1; b++)
{
gotoxy(FileWindowXOffset+a+1, FileWindowYOffset+b+1);
putchar (32);
}
}
}
/******************************************************************************************/
int main()
{
initConsole();
FILE *fp;
int znak;
int n=0;
char file[1000];
int key;
printf ("Nazwa pliku:\t");
scanf ("%s", &file);
fp = fopen(file, "r"); //wczytywanie pliku
if (fp==NULL)
{
perror ("Nie ma takiego pliku!");
getchar();
return 0;
}
while(true) // wypełnienie tekstem
{
int y=0;
int x=0;
while ((znak = fgetc(fp)) != EOF)
{
if(znak == '\n')
{
++y;
x=0;
continue;
}
if(y<n)
continue;
if(x==FileWindowXSize-2) // znaki które sie nie mieszczą mają być zaznaczone znakiem ">"
{
gotoXY(x+FileWindowXOffset+1,y+FileWindowYOffset+1-n);
write(">");
x++;
continue;
}
if(x>FileWindowXSize-2)
continue;
if(y>FileWindowYSize-2)
break;
gotoXY(x+FileWindowXOffset+1,y+FileWindowYOffset+1-n);
write(znak);
x++;
}
fclose(fp);
printf ("ESC - wyjscie z programu\n");
printf ("strzalka w dol - przesuniecie tekstu o jeden wiersz\n");
printf ("spacja - przesuniecie tekstu o caly ekran\n");
write();
//-------------------------------------------<sup> WYPELNIENIE </sup> ----------------------------------------------
//obsluga klawiszy
key = getVKey();
switch (key)
{
case VK_DOWN : clear();
n++; // dodaje nowy wiersz
fopen(file, "r");
break;
case VK_SPACE : clear();
n=n+FileWindowYSize-1; // dodaje nowe wiersze w nowym oknie
fopen(file, "r");
break;
case VK_ESCAPE: return 0;
}
}
}