С для профессиональных программистов



         

Прикладная часть TSR-программы - часть 5


return 1;

if(x>=frame[num].endx)

return 1;

if(ch=='\n')  /* символ перехода на новую строку */ x++;

y = frame[num].startx+1;

v = vid_mem;

v += (x+160) + y*2; /* вычислить адрес */ frame[num].curx++;  /* инкрементировать X */ frame[num].cury = 0; /* сбросить Y */

else

frame[num].cury++;

*v++ = ch;  /* вывести символ */

*v++ = NORM_VID; /* нормальные атрибуты символа */

window_xy(num, frame[num].curx, frame[num].cury);

return 1;

/* Установка курсора в заданную позицию окна.

Возвращает 0 при выходе за границу; не ноль в противном случае.

*/

window_xy(num, x, y)

int num, x, y;

if(x<0 || x+frame[num].startx>=frame[num].endx-1)

return 0;

if(y<0 || y+frame[num].starty>=frame[num].endy-1)

return 0;

frame[num].curx = x;

frame[num].cury = y;

return 1;

/* Считать строку из окна. */

void window_gets(num, s)

int num;

char *s;

char ch, *temp;

temp = s;

for(;;)

ch = window_getche(num);

switch(ch)

case '\r':  /* нажата клавиша ENTER */

*s='\0';

return;

case BKSP: /* возврат */

if(s>temp)

s--;

frame[num].cury--;

if(frame[num].cury<0) frame[num].cury = 0;

window_xy(num, frame[num].curx, frame[num].cury); write_char(frame[num].startx+ frame[num].curx+1,

frame[num].starty+frame[num].cury+1, ' ', NORM_VID);

break;

default:  *s = ch;

s++;

/* Ввод символа с клавиатуры в окно.

Возвращает полный 16-разрядный скан-код.

/*

window_getche(num)

int num;

union inkey

char ch[2];

int i;

 c;

if(!frame[num].active) return 0; /* window not active */

window_xy(num, frame[num].curx, frame[num].cury);

c.i = bioskey(0);                            /* обработать нажатие клавиши */

if(c.ch[0])

switch(c.ch[0])

case '\r': /* нажата клавиша ENTER */

break;

case BKSP: /* возврат */

break;

default:

if(frame[num].cury+frame[num].starty < frame[num].endy-1)

write char(frame[num].startx+ frame[num].curx+1,

frame[num].curx--;




Содержание  Назад  Вперед