Корзина
(нет товаров)
 
(495) 500-7890
На главную Программаторы Панельки Загрузка ПО Магазин Поддержка Поиск панельки Карта сайта

Формат файла калькулятора

PreviousNext

Шестнадцатеричный код, представленный в редакторе, не всегда удобен для выполнения расчетов, пакетной обработки данных или правки считанного дампа под конкретное оборудование. Калькулятор позволяет выполнить над этими данными определенные действия и вывести их в виде стандартных элементов управления Windows. В диалоговом окне пользователь может изменить нужные ему параметры, после чего калькулятор обработает и сохранит их в исходном файле. Если вмешательство пользователя не требуется, то программа позволяет запускать калькулятор в фоновом режиме и автоматически вносить нужные изменения перед записью каждой микросхемы.

Файл калькулятора представляет собой обычный текстовый файл, содержащий С-подобный скрипт.


[Calculators\Dallas CRC]
Size(280,100);
Form{
  Group("Описание",5,5,270,50)
  {
    Label(lb1,"",5,20);
  }
}
OnShow{
  lb1 = Калькулятор для расчета 8-битной CRC;
}
OnApply{
  Var0 = 0;
  @Var0 = @Var0 + 1;
  if (@Var0 = 0){@0x1 = @0x1 + 1}
  CRC = 0;
  while (Var0 < 0x07) {
    inp = CRC ^ @Var0;
    CRC = 0;
    if((inp & 0x1) != 0)  { CRC = CRC ^ 0x5e; }
    if((inp & 0x2) != 0)  { CRC = CRC ^ 0xbc; }
    if((inp & 0x4) != 0)  { CRC = CRC ^ 0x61; }
    if((inp & 0x8) != 0)  { CRC = CRC ^ 0xc2; }
    if((inp & 0x10) != 0) { CRC = CRC ^ 0x9d; }
    if((inp & 0x20) != 0) { CRC = CRC ^ 0x23; }
    if((inp & 0x40) != 0) { CRC = CRC ^ 0x46; }
    if((inp & 0x80) != 0) { CRC = CRC ^ 0x8c; }
    Var0 = Var0 + 1;
  }
  lb1 = "Сумма = " + #b.crc;
  @Var0 = CRC;
}

Для совместимости с другими проектами, первая строка файла должна содержать название файла, заключенное в квадратные скобки. Название должно начинаться с начала строки, без ведущих или ведомых пробелов. Между квадратными скобками и первым и последним символом названия также не должно быть пробелов.

Далее указывается размер клиентской области окна: Size(280,100); (ширина, высота), в которой могут находиться элементы управления, описываемые в секции "Form".

Секция FORM содержит список элементов диалогового окна. Допустимо использовать только указанные названия компонентов. Регистр букв не важен. Другие компоненты не поддерживаются.


  GROUP("Caption",Left,Top,Width,Height) {...}
  LABEL(Name,"Caption",Left,Top);
  CHECKBOX(Name,"Caption",Left,Top);
  COMBOBOX(Name,"Caption",Left,Top,Width,"Items0","Items1",...);
  DIGIT(Name,"Caption",Left,Top,Width);
  HEXDIGIT(Name,"Caption",Left,Top,Width,MaxLength);
  PICTURE(Name,"FileName.bmp",Left,Top,0,0);

Элементы представляют собой обычные оконные компоненты Windows и не нуждаются в особом описании.

  • Name - уникальный идентификатор, позволяющей обращаться к элементу из других секций.
  • "Caption" - выводимый в элементе текст.
  • Left, Top - координаты левого верхнего угла элемента.
  • Width, Height - ширина и высота элемента.
  • "Items*" - содержимое списка элемента COMBOBOX.
  • MaxLength - количество символов выводимое в шестнадцатеричном редакторе.

    Секция OnShow содержит код, который будет исполняться в момент вывода диалога на экран. Секция OnApply содержит код, который будет исполняться при нажатии пользователем кнопки Ok. Содержимое этих секций представляет собой сильно упрощенный синтаксис языка си. В отличие от других проектов, программа не накладывает ограничения на имена переменных и на использование в выражениях оконных переменных, не привязывает тип переменной к ее имени, понимает отрицательный результат операции, позволяет выполнять операции непосредственно с дампом памяти и идентификаторами компонентов. Также имеет расширенные команды форматирования строки.

    Компилятор поддерживает только два оператора:

  • IF - if(True){выполняется блок А}else{нет, блок Б}.
  • WHILE - while(True){повторяется блок}.

    Доступны следующие арифметические и логические операторы:

     +  -  *  /  %  &  |  ^  <<  >> 
    Операции сравнения:
     =  !=  <=  >=  <  > 

    Приоритет операций задается только скобками. Оператор "@" позволяет обратиться к содержимому буфера.

    
      Var1 = 12;                            //Данные можно вводить в десятичном 
      Var2 = 0x0B;                          // или в шестнадцатеричном формате
      adr1 = @0x0010;                       //Прямое обращение к дампу памяти
      @Var1 = @Var2 + adr1 - 1;             //Косвенное, через адрес, содержащийся в Var1
      lb1 = Var1;                           //Стандартный вывод данных на экран.
      lb1 = Var1 + " = " + #b.@Var1;        //А можно и так. (в других проектах работать не будет)
      ... 
      lb1 = "Текст";                        //Оформление текстовых сообщений:
      lb1.bold = 1;                         // жирный шрифт
      lb1.color = 0xFF0000;                 // цвет шрифта
      ...
      lb1 = #b.D1 + " = " + #i.D1;          //Команды форматирования строки:
      lb1 = #b.D1 + " = " + #c.D1;          // i=256; c="я";
      lb1 = "WORD = " + #h.D1;              // b=FF; h=00FF; d=000000FF;
    

    В дополнение к "штатным" функциям тритоновский компилятор поддерживает вызов скоростных подпрограмм для работы с блоками данных.

    
      BlockCopy(Begin, Length, Dest);
      BlockMask(Begin, Length, Mode, Mask);
      BlockDelete(Begin, Length);
      BlockInsert(Begin, Length, Fill);
    

    В качестве параметров могут выступать как константы, так и переменные, включая имена оконных компонентов.

  • Begin - Начальный адрес блока.
  • Length - Длина блока.
  • Dest - Адрес назначения.
  • Fill - Байт для заливки (0x00..0xFF).
  • Mask - Маска для выполнения логических операций или заливки. Длина от 1 до 4 байт.
  • Mode - Режим работы (0..19):
    • 0 - AND. Логическое И.
    • 1 - OR. Логическое ИЛИ.
    • 2 - XOR. Логическое исключающее ИЛИ.
    • 3 - SHR. Сдвиг всего блока на 1 бит вправо. 0 бит предыдущего байта записывается в 7 бит следующего.
    • 4 - SHL. Сдвиг всего блока на 1 бит влево. 7 бит следующего байта записывается в 0 бит предыдущего.
    • 5 - NAND. Логическое И-НЕ.
    • 6 - NOR. Логическое ИЛИ-НЕ.
    • 7 - XNOR. Логическое исключающее ИЛИ-НЕ.
    • 8 - ROTR. Циклический сдвиг каждого байта вправо.
    • 9 - ROTL. Циклический сдвиг каждого байта влево.
    • 10 - NOT. Иверсия данных.
    • 11 - FILL. Циклическая заливка блока значениями "Mask".
    • 12 - SWAP NIBLE. Перестановка местами тетрад в каждом байте.
    • 13 - SWAP BYTE. Перестановка местами четных и нечетных байт в блоке.
    • 14 - SWAP WORD. Перестановка местами 16-битных слов в блоке.
    • 15 - COMPARE. Сравнение блока со значениями "Mask".
    • 16 - RANDOM. Заполнение блока случайными значениями.
    • 17 - REVERSE. Изменение порядка бит в байте. 0 -> 7, 1 -> 6, ..., 7 -> 0.
    • 18 - ADD. Сложение.
    • 19 - SUB. Вычитание.

    Чтобы упростить процесс разработки, в программе имеется визуальный конструктор оконных форм калькулятора. Вход в режим редактирования и выход из него находятся в системном меню окна калькулятора. Редактор позволяет добавлять и удалять компоненты, выравнивать, менять положение и размеры, редактировать текст. При выходе из режима редактирования, данные сохраняются в текстовом виде в Буфере обмена для последующей вставки в файл калькулятора.

    Для добавления компонента, установите курсор в нужное место, нажмите правую кнопку мыши и выберите нужный компонент из списка. Перемещение компонента осуществляется с помощью мыши. Для изменения размера используется правый нижний угол компонента. Клик левой кнопкой мышки на компоненте, позволяет изменить в нем текст. Для удаления текста используется клавиша BACKSPACE. Клик правой кнопкой мыши позволяет удалить, выровнять по сетке или добавить новый компонент.

    Компонент GROUP является контейнером для размещенных в нем компонентов. При выравнивании или удалении этого компонента, данное действие будет применено ко всем находящимся в нем компонентам. Программа поддерживает многоуровневые вложения компонента GROUP.

  • ООО «ТЦ ТРИТОН»   (495) 500-7890