Deutsch

Воспоминания, Turbo C 01.06.2024

04.06.24 19:00
Re: Воспоминания, Turbo C 01.06.2024
 
uscheswoi_82 коренной житель

Продолжим разговор про программирования на Си. Но прежде чем начнём, пару слов об одном форумчане на Казахстанском форуме. Хоть мы были по разную сторону когда я сидел в Казахстанском форуме, т.е. он за Россию, а я за Украину, но вообще он в политику невмешивался, но меня не любил из-за того что я не за Россию, а за Украину, и из-за того что выяснял отношения с другими пользователями. Ну так вот, он несколько дней назад сгорел в Алматы, и ещё погиб его брат. У него не было женщин и детей, был инвалидом как я из-за инсульта, и сидел в форуме ночью, потому-что после инсульта проблемы были якобы со сном. Он многое сделал для Казахстанского форума, был очень добрым, без него бы Казахстанский форум бы загнулся, и администратор Казахстанского форума должен поставить ему золотой памятник за большую заслугу. Вместо заслуги, у него стоит теперь статус в профиле 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;
}


Справка, ну или подсказка будет примерно такой:


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
 

Перейти на