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



         

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


if(y>=frame[num].endy)

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;

char out[10];

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_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].starty+frame[num].cury+1, c.ch[0], NORM_VID);




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