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



         

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


/* Вывести символ с указанными атрибутами */

void write_char(x, y, ch, attrib)

int x, y;

char ch;

int attrib;

register int i;

char far *v;

v = vid_mem;

v += (x*160) + y*2;

*v++ = ch;  /* записать символ */

*v = attrib;  /* записать атрибуты */

/* Сохранить область экрана */

void save_video(num)

int num;

register int i, j;

char *buf_ptr;

char far *v, far *t;

buf_ptr = frame[num].p;

v = vid_mem;

for(i=frame[num].starty; i<frame[num].endy+1; i++)

for(j=frame[num].startx; j<frame[num].endx+1; j++)

t = (v + (j*160) + i*2);

*buf_ptr++ = *t++;

*buf_ptr++ = *t;

*(t-1) = ' '; /* очистить окно */

/* Восстановить область экрана */

void restore_video(num)

int num;

register int i,j;

char far *v, far *t;

char *buf_ptr;

buf_ptr = frame[num].p;

v = vid_mem;

t = v;

for(i=frame[num].starty; i<frame[num].endy+1; i++)

for(j=frame[num].startx; j<frame[num].endx+1; j++)

v = t;

v += (j*160) + i*2;

*v++ = *buf_ptr++; /* записать симпол */

*v = *buf_ptr++;  /* записать атрибуты */

frame[num].active = 0;/* восстановить изображение */

/* Возвратить код текущего видеорежима */

video_mode()

union REGS r;

r.h.ah = 15;  /* получить код видеорежима */

return int86(0x10, &r, &r) & 255;

/****************************************************/

/* Функции всплывающих окон                                                                                */

/****************************************************/

#define MAX 100

int *p; /* указатель стека */

int *tos; /* указатель вершины стека */

int *bos; /* указатель дна стека */

int stack[MAX];

/* Стековый, с постфиксной записью калькулятор

с четырьмя функциями

*/

void calc()

int      answer;

int      a,b;

p =     stack;

tos     = p;

bos    = p+MAX-1;

window(1);

do

window_xy(1, 0, 0);

window_cleol(1);

window_puts(1, ": "); /* промптер калькулятора */

window_gets(1, in);




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