Воспоминания, Turbo C 01.06.2024
Продолжим разговор про программирования на Си. Но прежде чем начнём, пару слов об одном форумчане на Казахстанском форуме. Хоть мы были по разную сторону когда я сидел в Казахстанском форуме, т.е. он за Россию, а я за Украину, но вообще он в политику невмешивался, но меня не любил из-за того что я не за Россию, а за Украину, и из-за того что выяснял отношения с другими пользователями. Ну так вот, он несколько дней назад сгорел в Алматы, и ещё погиб его брат. У него не было женщин и детей, был инвалидом как я из-за инсульта, и сидел в форуме ночью, потому-что после инсульта проблемы были якобы со сном. Он многое сделал для Казахстанского форума, был очень добрым, без него бы Казахстанский форум бы загнулся, и администратор Казахстанского форума должен поставить ему золотой памятник за большую заслугу. Вместо заслуги, у него стоит теперь статус в профиле RIP. А так тот форум в Казахстане потихоньку вымерает, т.к. за любую ерунду там можно получить вечный бан, после закрытия vse.kz, многие перебрались в другие русскоязычные форумы, а некоторые сюда. Короче пусть земля будет пухом и покойся с миром.
Ладно давайте дальше программировать. Короче я час назад сделал программу, для отображения помощи или подсказки. Позже я постараюсь закончить.
#include <stdio.h> #include <conio.h> #define LINK_BEGIN 0x01 /* Начало ссылки */ #define LINK_END 0x02 /* Конец ссылки */ #define SET_BKCOLOR 0x03 /* Установить цвет фона и цвет текста */ #define GOTOXY 0x04 /* Перейти на X,Y координату */ #define BEGIN_OF_TOPIC 0x10 /* Начало помощи */ #define END_OF_TOPIC 0x11 /* Конец помощи */ typedef struct { unsigned char x; unsigned char y; unsigned char current_page; int sz; unsigned char jump_to; } LINK_POS; int main(void) { FILE *f; LINK_POS links[4096]; int link_count = 0; int status = 0; unsigned char ch; unsigned char current_topic = 0; unsigned char fg, bg; unsigned char x, y; textattr(BLACK * 0x10 + LIGHTGRAY); clrscr(); f = fopen("test.hlp", "r+b"); if(f != NULL) { while(1) { if(feof(f)) break; ch = fgetc(f); if(ch == BEGIN_OF_TOPIC) { current_topic = fgetc(f); printf("Current topic:%d ", current_topic); while(1) { if(feof(f)) break; ch = fgetc(f); if(ch == END_OF_TOPIC) { fclose(f); return 0; } else if(ch == GOTOXY) { x = fgetc(f); y = fgetc(f); gotoxy(x, y); } else if(ch == SET_BKCOLOR) { fg = fgetc(f); bg = fgetc(f); textattr(bg * 0x10 + fg); } else if(ch == LINK_BEGIN) { links[link_count].x = wherex(); links[link_count].y = wherey(); links[link_count].sz = 0; links[link_count].current_page = current_topic; ch = fgetc(f); links[link_count].jump_to = ch; while(1) { if(feof(f)) break; ch = fgetc(f); if(ch == LINK_END) break; else cprintf("%c", ch); } } else if(ch == LINK_END) links[link_count].sz = wherey(); else cprintf("%c", ch); } } } } fclose(f); return 0; }
Справка, ну или подсказка будет примерно такой: