#pragma option ia
#pragma option argc

// Различные константы, переменные и другие извраты ;)
#include "variable.inc"
// Раскладка клавы
#include "keys.h--"
// Процедурки для обработки коммандной строки
#include "cmdline.h--"
// Прерывания
#include "ints.h--"
// Набор процедурок для работы со строками
#include "strings.h--"

main()
{
 WRITESTR(Copyrites);

 // Собираем путь к конфигурационному файлу
 StrCpy(PARAMSTR(0),#CMDLine);
 FOR (; DSBYTE[DI]!=92; DI--);
 StrCpy(ConfigFileName,DI+1);

 if (byte PARAMCOUNT()!=1){
     // Преобразуем строку в верхний регистр
     StringUp(PARAMSTR(1));
     // Выгрузка
     if (StrCompare(PARAMSTR(1),"/U")) @UnLoadDinrus();
     // Хелп
     else IF (StrCompare(PARAMSTR(1),"/H"))||(StrCompare(PARAMSTR(1),"/?")) WRITESTR(HelpString);
     // Информация о Dinrus-е
     else IF (StrCompare(PARAMSTR(1),"/I")) @DinRusInfo();
     // Запись в конфиг цвета бордюра
     else IF (StrCompare(PARAMSTR(1),"/B")) @SetBorderColor();
     else IF (StrCompare(PARAMSTR(1),"/SW")) @SetHotKeyScanCode();
     ELSE IF (StrCompare(PARAMSTR(1),"/AC")) @ApplyChanges();
     ELSE WRITESTR("\nНеизвестный параметр");
     return;
 }

 //Проверка на повторный запуск программы
 AX=0E801h; int 2fh
 IF (AL==0){
    WRITESTR("\nПрограмма уже запущена");
    return;
 }

 //Установка временной задержки и скорости автоповтора клавиатуры
 AX=0305h; BL=TypematicRate; BH=Delay; int 16h

 // Открываем конфиг
 BX=FOPEN(#CMDLine,0);
  // Читаем конфиг
  FREAD(BX,#BorderColor,1);
  FREAD(BX,#sw,1);
  FREAD(BX,#ExtendedSwitch,1);
 // Закрываем конфиг
 FCLOSE(BX);

 // Узнаем какой это режим - графический или текстовый
 outp(06h,03CEh);
 VideoModeStatusByte=inp(3CFh);

 $push ES,FS,BP
  // Устанавливаем ES на сегмент данных для установки фонта
  ES=DS;
  // Если это графический...
  IF (VideoModeStatusByte&1){
     IF (VideoModeStatusByte&1100b!=1100b){
        // Устанавливаем графический фонт
        AX=1120h; $int 10h
        WRITESTR("\nУстановлен и активизирован графический видео фонт");
     }
  }ELSE{
     // Устанавливаем FS для адресации к данным биоса
     FS=40h;

     // Считываем количество байт в символе (высота символа)
     BH=FSBYTE[85h];

     // По количеству байт устанавливаем BP на адрес нужного фонта
     IF (BH==8) BP=#font8x8;
     ELSE IF (BH==14) BP=#font8x14;
     ELSE BP=#font8x16;

     // Устанавливаем и активизируем текстовый фонт
     AX=1110h; BL=0; CX=256; DX=0; int 10h

     WRITESTR("\nУстановлен и активизирован текстовый видео фонт");
  }
 $pop BP,ES,FS


 GETINTVECT(#OldKeyboardInterrupt,09h);
 SETINTVECT(,09h,CS,#KeyboardInterrupt);
 GETINTVECT(#OldInt16h,16h);
 SETINTVECT(,16h,CS,#Clicker);
 GETINTVECT(#OldInt10h,10h);
 SETINTVECT(,10h,CS,#VideoFont);
 GETINTVECT(#OldInt2fh,2fh);
 SETINTVECT(,2fh,CS,#AlreadyInstall);
 @KEEP(,,,#main+1);
}

