вторник, 22 сентября 2009 г.

Строение файлов SHA

Сегодня мне хотелось бы рассказать вам, читатели, об устройстве файла проекта HiAsm. В первом посте я говорил, что схемы (проекты) HiAsm сохраняются всего в одном текстовом файле. Файлы проектов HiAsm имеют расширение sha.

Сейчас я расскажу, как устроен этот текстовый формат. Возможно, вам эта информация не пригодится, но кому-то она может быть интересна.

Примерно такой код имеют файлы sha:

КОД (скопируйте его и вставьте на рабочее поле HiAsm)
Add(Button,14689163,126,154)
{
Left=25
Top=25
link(onClick,2967049:doMessage,[])
}
Add(Message,2967049,189,154)
{
}

Поскольку вы можете скопировать это и вставить в hiasm, то код проекта hiasm является чисто текстовым. Это значит, что его можно изменять в текстовом редакторе. Но вы ничего не пишете: hiasm сам составляет такой код.

Как вы видите, здесь два компонента: кнопка и сообщение (Button и Message). А в коде проекта дважды встречается слово "Add", после чего в скобках указывается название компонента. Первое число - это его уникальный идентификатор (т.е. такое число больше не имеет ни один компонент этой схемы).
Следующие два числа - это положение компонента на рабочем поле hiasm по оси X и по оси Y. А затем в фигурных скобках указываются все изменённые параметры и точи компонента, а также его связи.

У сообщения ничего не изменено, поэтому его фигурные скобки пусты.
У кнопки я изменил положение на форме (через редактор формы). А слово "link" означает связь между компонентами. Сначала пишется точка этого компонента, а через запятую указывается идентификатор элемента, с которым установлена связь, а ещё через двоеточие пишется точка, к которой подключается связь.

Вот и всё.

Конечно, это очень простой случай, в других могут быть свзяаны свойства и данные, могут быть также мультиэлементы. Но основной принцип таков, а с остальным несложно разобраться самостоятельно.

Что касается файлов проектов hiasm, то они содержат как раз такой код, только в самом начале файла добавляются три строчки:

Make(delphi)
ver(4.02 build 179)
Pos(85,0)

Первая строчка говорит о том, что это проект delphi (а точнее, приложение windows), вторая строчка указывает версию hiasm, в которой собиралась схема, а третья строчка указывает позицию схемы на рабочем поле hiasm.

Знание строения файлов проекта hiasm позволяет использовать это, по крайней мере, в декоративных целях, т.е. при составлении показательных (но, разумеется, не рабочих) схем. Например, такое никогда не реализовать на рабочем поле hiasm.

КОД (скопируйте его и вставьте на рабочее поле HiAsm)
Add(Button,14689163,126,154)
{
Left=25
Top=25
link(onClick,2967049:doMessage,[])
}
Add(Button,14689163,126,189)
{
Left=25
Top=25
link(onClick,2967049:doMessage,[])
}
Add(Button,14689163,126,224)
{
Left=25
Top=25
link(onClick,2967049:doMessage,[])
}
Add(Message,2967049,189,154)
{
}

Возможно, эта схема будет работать у вас, но гарантии дать никто не может.

Ну и, наконец, стоит отметить, что сжатие текстовых файлов гораздо более сильное, чем бинарных (в большинстве случаев).

2 комментария:

  1. Имхо, эта информация полезна всем, кто копирует кодовые тексты в буфер и вставляет в рабочее поле HiAsm. Гораздо приятнее понимать, с какими текстами работаешь, чем тупо копипастить абракадабру.
    Попутно приведу любопытное место из Справки, объясняющее, почему некоторые компоненты носят незавершенный характер. "Очень многие элементы не являются вылизанными до совершенства. Их можно было доводить и это было бы иное качество продукта. Но в этом случае мы не имели бы и половины сегодняшних фичей HiAsm. Более рациональным признана адресная доводка элементов, на основании опыта общения с пользователями. На форуме, например.
    Такой принцип функционирования, прежде всего, позволяет хоть как-то распараллелить процесс работы над пакетом. Кроме того, благодаря именно такому подходу не удалось сбыться мечтам противников визуального конструирования, которые утверждают, что на чистом энтузиазме такие проекты долго не протягивают. Это действительно так если заниматься каждым компонентом и ф-цией среды подробно и досконально. Например, реализовывать все методы StrList которые когда либо могут понадобиться и тестировать их...".

    ОтветитьУдалить
  2. Add(MainForm,2953706,77,168)
    {
    Width=363
    Height=304
    }
    Add(Edit,1111390,28,42)
    {
    Left=5
    Top=30
    Width=60
    Text=""
    link(onEnter,2953706:doCaption,[(72,55)(72,83)(9,83)(9,174)])
    }
    Add(GLabel,16399408,98,49)
    {
    Left=5
    Top=5
    Width=115
    Height=17
    Caption="заголовок этого окна"
    }
    Add(Message,13035514,196,112)
    {
    link(Message,9164498:Text,[(214,90)(487,82)(487,338)(153,338)])
    link(Caption,13084000:Text,[(333,39)(341,151)(388,417)(34,417)(34,27)(551,215)(344,245)(344,393)(36,393)])
    }
    Add(Edit,13084000,259,14)
    {
    Left=285
    Top=10
    }
    Add(Edit,9164498,147,35)
    {
    Left=285
    Top=45
    }
    Add(CheckBox,16193104,98,112)
    {
    Left=280
    Top=75
    Caption="вызов"
    link(onCheck,13035514:doMessage,[])
    }
    Add(GLabel,4394407,224,14)
    {
    Left=220
    Top=15
    Width=57
    Height=17
    Caption="заголовок"
    }
    Add(GLabel,13650340,210,63)
    {
    Left=235
    Top=50
    Width=32
    Height=17
    Caption="текст"
    }
    Add(GLabel,9814675,224,161)
    {
    Left=50
    Top=75
    Width=213
    Height=17
    Caption="создан георгием былицким в 2013 году"
    }

    ОтветитьУдалить