Spectrum Progress #02
19 января 1997

Записи программиста - Основы программирования под API Домен ОС.

<b>Записи программиста</b> - Основы программирования под API Домен ОС.
  (C) Максим Ганнутин, 1997.
      
      
      

   Основы программирования под API Домен ОС

  Введем понятия:

  Объект - это логически выделенная часть кода,
имеющая возможность получать и посылать сообще-
ния, представленная на экране избражением и об-
ъявленная системе. Фактически, речь идет об об-
ъектах интерфейса пользователя.

  Сообщение  - логическое обозначение процесса,
заключаещегося в вызове объекта (call,jp) с со-
держащимся  в регистре A номером команды, кото-
рую  объект должен выполнить, а в остальных ре-
гистрах параметры.

  Объект.

  Объект состоит из трех разделов:
Диспетчер - код, проверяющий содержимое регист-
            ра A и вызывающий соответственный
            метод.
Методы    - коды, определющие реакцию на то или
            иное сообщение.
Данные    - данные, которыми оперирует объект.

  Пример:
 EXMPLobject
   cp 1             ;диспетчер
   jr z,EXMPLopen
   cp 22
   jr z,EXMPLlight
   cp 23
   jr z,EXMPLshadow
   cp 24
   jr z,EXMPLselect
   ld a,57          ; сообщение не принято
   ret
 EXMPLopen          ;метод для сообщения open
   ...
   xor a
   ret
 EXMPLlight         ;метод для сообщения light
   ...
   xor a
   ret
   ...
 EXMPLdstruct       ;данные
   defs 20

  Сообщения.

 20 init    инициализация
 21 close   закрыть
 22 light   курсор перешел на объект
 23 shadow  курсор покинул объект
 24 select  пользователь кликнул объект
 25 parsel  объекту пришла посылка (drag&drop):
            d=тип посылки
            b,c данные (см.drag&drop)
            Если посылка принята, то объект
            должен вернуть в регистре A=33.
 26 char    сообщение от клавиатуры:
             d,e,b,c (см.проц.FKEYBOARD)

  Для объявления объекта необходимо:

1. Выведем на экран изображение объекта.
2. Объявим объект системе:
   ld e,координата x
   ld d,координата y
   ld c,len
   ld b,hgt
   ld h,class
   ld l,object
   ld a,90          ;процедура CONSTRUCTOR
   call 23403

  Стереть объект:

1. Стереть изображение на экране
2. Уберем объект
    ld de,координаты
    ld bc,размеры
    ld a,91         :процедура DESTRUCTOR
    call 23403

  Процедуры и функции.
  Дисковая подсистема.

  Термины:
           ^ - указатель на ...
root    : корневой каталог
name    : ^поле (11 байт)  'filenameext'
          можно использовать "?"
шаблон  : аналогично name
handle  : заголовок файла (32 байта)
attrib  : 11-ый байт заголовка
FP      : файловый указатель
          указывает смещение от начала файла,
          начиная с которого, читается или
          пишется информация
FM      : файловый манипулятор
          +0 filenameext (11)
         +11 attrib
         +12 размер записи (2)
         +16 FP (3)
         +22 время
         +24 дата
         +28 длина файла (3)
BSIZE   : файлы размером свыше 65 килобайт,
          DSS логически разбивает на блоки
          по 65535 байт, которые и называются
          BSIZE.

 Вызов :     ld a,номер_функции
             ld hl,параметры
             ld de,параметры
             ld bc,параметры
             call 23403
             cp 0
             jr nz,error

 1 CREAT    Создание файла

  in: hl,name
       e,attrib
 out:  a=24,26

 2 OPEN     Открыть файл

 Создается файловый  манипулятор (FM)
 для работы процедур 3,4,5,6,7,8.
  in: hl,name
      bc,размер записи ( функ. GET и PUT)
 out: e,номер FM
      a=29

 3 CLOSE    Закрыть файл

 FM освобождается. В handle заносится  новое
 значение размера файла.
  in: e,FM
 out: a=29

 4 READ     Последовательное чтение из файла.

 FP  увеличивается на значение bc.
  in: e,FM
      hl,куда
      bc,сколько
 out: a=29

 5 GET      Произвольное чтение

  in: e,FM
      hl.куда
      d,номер записи
 out: a=29

 6 WRITE    Последовательная запись в файл

  in: e,FM
      hl,откуда
      bc,сколько
 out: a=26,27,29


 7 PUT      Произвольная запись в файл

  in: e,FM
      hl,откуда
      d,номер записи
 out: a=26,27,29

 8 MOVEFP   Изменение FP

  in: e,FM
      hl,смещение
      d=0 от начала файла
      d=1 от тенкущей позиции
      d=2 от конца файла
      d=3 перейти на следующий BSIZE
      d=4 вернуться на предыдущий BSIZE
 out; a=23,29,36

 9 FINDFIST  Поиск первого имени файла
             совпадающего с шаблоном

  in: hl,шаблон
 out: hl,^handle
       a=21

10 FINDNEXT  Поиск следующего совпадающего
             файла

 out: hl,^handle
      a=21

11 LOAD       Загрузка файла

  in: hl,name
      de,куда   (de=0 параметр берется из
                 handle файла)
      bc,сколько(bc=0 параметр берется из
                 handle файла)
 out: a=21,23

12 SAVE       Запись файла

   in: hl,name
       de,откуда
       bc,сколько
  out: a=24,25,26

13 DELETE     Удалить файл

  in: hl,name
 out: a=21,27

14 RENAME     Переименовать файл

  in: hl,oldname
      de,newname
 out: a=21,27

15 MOVE       Переместить файл из текущего
              каталога в другой
  in: hl,name
      bc,первый кластер нового каталога
         ( bc=0 root )
 out: a=21

16 ATTRIB    Атрибута файла

  in: d=0 чтение
      d=1 запись
      hl,name
      e,attrib
 out: a=21
      e=attrib

17 TIME       Время файла

  in: hl,name
      d=0/1
      b;c;e=час;минута;секунда
 out: a=21
      b;c;e

18 DATE       Дата файла

  in: hl,name
      d=0/1
      b;c;e=год;месяц;день
 out: a=21
      b;c;e

19 MKDIR      Создать подкаталог

  in: hl,name
 out: a=24,26

20 RMDIR      Стереть подкаталог

  in: hl,name
 out: a=21,30

21 CHDIR         Смена каталога

  in: hl,^string
 out: a=22
     bc,первый кластер нового текущего
        каталога

 string: defm "subdir1subdir2"
               ^символ ""-начинать с root
                иначе-с текущего
         defb 0

22 CHNDISK       Смена диска

  in: e=0..4
 out: a=1

23 VERSION DSS    Версия DSS

 out: de=version

24 CALL_BIOS      Вызов функций BIOS

  in,out см. руководство по bios

25 DSSVARS       Системные переменные DSS

  in: e,номер переменной
      d=1/2
        c=содержимое
 out: e,содержимое

26 VEKTORS        Векторы DSS

  in: e,номер вектора
      d=0/1
        hl=новое значение
 out: hl=значение

27 VERIFY          Проверка правильности
                   записи файла
  in: см. LOAD
 out: a=32

28 CACHE            Кэш диска

  in: d=1 инициализаци кэша
      d=2 отключить кэш
      d=3 информация о кэше (таблица)
        hl,куда
   таблица : 8 записей с  defb sec,trk
                          defw ^буфер

29 RAMDISK     Электронный диск

  in: d=1 загрузка таблици банков в DSS
       hl,откуда
       e,сколько банков
      d=2 выгрузка таблицы
       hl,куда
      d=3 создать RAMD

30 FREESPACE   Свободное пространство на диске

  out: bc,кол-во килобайт (по 1024 байт)

33 MASKCREAT   Создать шаблон

  in: hl,^string
      de,^буфер
  string:  defm "filename.ext"
            defb "."
            можно использовать "?" и "*"

  Сообщения об ошибках

 1 нет готовности
 2 запись на защищенную дискету
 3 нажата клавиша 'BREAK'
 4 ошибка чтения/записи
 5,6 ошибка  позиционирования
 8 несоответствие типов дискеты и дисковода
 9 неформатированная дискета
21 файл не найден
22 неверный путь
23 невозможный параметр
24 файл с таким именем уже существует
25 переполненние root
26 переполнение диска
27 файл 'read only'
28 нет свободного FM
29 нереальный номер FM
30 в подкаталоге есть файлы
31 несуществующая функция
32 ошибка при verify
33 не тот диск
34 незапланированное событие
35 в TR-DOS операция невозможна
36 BSIZE уже на нуле

   Векторы DSS

 1 Обработчик функций
 2 BIOS
 3 Обращение к клипбоарду


            Функции и процедуры API

  Сокращения и термины:

  len    длина
  hgt    высота
  char   символ
  class  см."Программирование"
  object там-же
  method метод API, в скобках обрабатываемые
         сообщения

  Так-как  в  большенстве  процедур есть только
входные параметры, слово "in" не указывется.

  Когда  встречаются  регистры  d, e, b, c  без
описания, это значит: e,координата по x
                      d,координата по y
                      c,len
                      b,hgt

40 PUTCHAR  Вывести символ
   Домен ОС понимает все служебные символы
   Spectrum OS.

   b=char
   ix,^desc

  desc(стандартный текстовый дескриптор):
       defb x,y,len,hgt   ;8*8
       defb 0
       defb цвет
       defb флаги
       defb x,y       ;курсор
       defb "_"       ;char курсора
       defb x         ;в размерах символа
       defb 0

       флаги
       0 выводить курсор
       1 изменять аттрибуты для каждого символа
       3 запрет скролла
       4 ножницы
       5 запрет вывода
       6 при скролле не трогать аттрибуты
       7 перед выводом символа очищать позицию

47 PUTIMAGE  Вывести изображение
   d,e,b,c
   hl,^bitmap

    bitmap: defb len,hgt
            defs len*hgt*8  ;пиксели построчно
            defs len*hgt    ;аттрибуты

48 GETIMAGE  Взять с экрана изображение
   d,e,b,c
   hl=buffer

51 FONT
   d=1 перенос фонта в систему
   e,ширина симвлов
   hl,откуда

52 CPIFUNC  Кодовая таблица
   in: d=1  загрузка CPI
        hl,откуда
       d=2  информация о текущем CPI
  out: при d=2 b=тип
                  1 alt_a
                  2 alt_b (основная)
                  3 tlw2

53 TOERRWINDOW  Вывод сообщения в окно ошибок ОС
     hl,^string

56 VIRTWINDOW  Управление виртуальным окном (VW)
   in: h=1 VW во весь экран
       h=2    во все окно приложения
       h=3 создать VW с  d,e,b,c в текцущем VW
       h=4 восстановить предыдущее VW (только
           после h=3)
  out: при h=3
           e,d,c,b физические координаты
           a=23 (для d,e)

59 WALLPAPER  Очистка экрана от окна приложения
   d,e,b,c
   h=1 в поле приложений
   h=2 в поле иконок

     Далее идут графические процедуры в VW

60 VWPUTLINE  Вывод стринга
   hl=^string
   ix=^desc

   string: defm "text"
           defb 0

61 VWPUTCHAR  Вывод символа
   b=char
   ix=^desc

62 VWSCROLL   Скроллинг

63 VWCLEAR    Очистка окна

64 VWDRAW     Линия

65 VWBOX

66 VWIMAGE

67 VWVALFUNCTION

68 VWATTR

69 VWGETIMAGE  Взять изображение
   d,e,b,c
   hl=^buffer

70 SELCUR  Выбор образа курсора
   b=номер
      1 стрелка
      2 песочные часы
      3 перекрестие
      4 зарезервировано

71 PUTCUR   Вывод курсора
   h=x_coord
   l=y_coord

73 DELTCUR  Стереть курсор

74 CURSOR  Работа с курсором
   out: d,e (8*8)
        h,l (pix)
        c,флаги направления
         бит
          0 right
          1 left
          2 down
          3 up
          4 fire

76 IMGCURSOR  Загрузка образа в текущий курсор
   hl= ^образ

   образ:  defb pix_1,mask_1
           defb pix_2,mask_2
           ...
           defb pix_16,mask_16

77 HANDPORT  Чтение флагов направления
   out: c,флаги
       h,l

80 FKEYBOARD  Чтение клавиатуры
   out: e,char
        d,флаги модификаторов
         бит  0  1
          0 lat rus
          1 ovr ins
          2     capslock
         с,физический код клавиши (caps)
         b,флаги управляющих клавиш
          бит
           0 caps shift
           1 symbol shift

82 GETABLE  Загрузка таблицы раскладки
            клавиатуры
  hl,^таблица

87 BEEP  Звуковой сигнал (для AY)

88 SERVICE  Некоторые функции
  in: d=2 управление выводом VWDRAW
       e=0 чтение текущего режима
       e=1 or
       e=2 xor
       e=3 and
  out: e=режим

90 CONSTRUCTOR  Объявление объекта
   d,e,b,c
   hl=object

91 DESTRUCTOR  Стереть объект
    d,e,b,c

95 SESSION  Передать управление системе

96 SENDMESSAGE  Послать сообщение (drag&drop)
   in: hl,^образ курсора
       d,номер сообщения
       bc,передоваемая информация
  out: a=59

100 EXECUTE  Запуск приложения
  in:d,e координаты основного окна
         запускаемого приложения
     hl,name
     ix,^prefix
     b=1 загрузить и раскрыть
     b=2 загрузить в иконку
 out: b,номер дескриптора приложения

 prefix: defs 64 ; любая информация,
                  передоваемая приложению

101 TUNEEXE  настройка адресов
    ix,^таблица адресов
    hl,адрес куда настраивать

   таблица: defb флаги (#01)
            defb кол-во адресов
            defw адрес начала кода, в котором
                 настраиваются адреса
                 (при компиляции)
            defw addr1,addr2 ...

102 TERMINATE  Закончить выполнение приложения
    in: b,номер приложения

103 FARRUN  Запуск приложения из приложения
    Работа FURRUN: приложение, вызвавшое эту
    функцию, свопируется, выполняется EXECUTE,
    после чего управление возвращается исход-
    ному приложению.

    in,out: аналогично EXECUTE

110 READVAR  Системные переменные
    in: b,номер
        d=1 чтение
        d=2 запись
         e,содержимое
    out: e,содержимое

112 SETVEKTORS  Векторы системы
    in: d,номер вектора
        e=1 читать
        e=2 писать
         hl,вектор
    out: hl,вектор

  Вектора: 1 APIVEKTOR процедуры api
           2 KEMPORT устройство управ.курсором
           3 KEYBOARD драйвер клавиатуры
           4 WALLPAPER обои
           5 EXEC процедура EXECUTE
           6 CLOSE процедура TERMINATE

120 QUERYRESIDENT  Запрос на установку ресидента
   in: d=1 PNT резидент
       d=2 IM2 резидент
       e=1 запрос на выделение памяти
       e=2 запрос на выделение памяти
           по определенному адресу
           hl,адрес
       bc,длина резидента
    out: hl,искомый адрес
         b,банк
         a=53,54

121 SETRESIDENT  Установить резидент
   in: ix,дескриптор резидента
       de,^тело резидента
       b,банк куда
       hl,адрес куда
  out: b,номер резидента
       a=55
 дескриптор резидента:
  defb 0
  defb тип                  * 1-PNT 2-IM2
  defm "resiname"           * имя  резидента
  defw длина резидента      *
  defw кол-во тактов (для IM2)*
  defw адрес доступа
  defb банк
  defw адрес точки входа
  defb флаги

    * поля, которые надо заполнять вручную

122 DELRESIDENT  Удалить резидент
   in: b,номер резидента
       d,тип резидента

200 VSB_INIT  Полоска скроллинга вертикальная
       d,e
       b,hgt
       h,class

201 VSB_MOVE method(24)
   in: d,e
       b,кол-во пунктов
       h,общее кол-во строк
       c,текущая строка
       l=3 вверх
       l=4 вниз
   out: c,новая текущая строка

202 HSB_INIT Полоска скроллинга горизонтальная
        d,e
        b,len
        h,class

203 HSB_MOVE method(24)
    in: d,e
        b,кол-во пунктов
        h,общее кол-во столбцов
        c,текущий столбец
        l=7 влево
        l=8 вправо
   out: c,новый столбец

204 LISTBOX  Окно просмотра
  d,e,c,b
  h,class
  l,флаги
     0 кнопка close
     1 рамка для заголовка
     2 кнопка home
     3 VSB
     4 HSB
     5 кнопка end
     6 очистка окна

205 IBOX_INIT Окно клавиатурного ввода
  e,d,c
  h,class
  ix,^buffer
  l,флаги
     0 кнопка рус/лат
     2 очистка окна

  buffer:
   +0  defs 12    стандартный дескриптор окна
   +12 defs  4
   +16 defs  ?    вводимая строка

206 IBOX_WORK method(24)
   e,d
   ix,^buffer

208 AWIN_INIT Основное окно приложения
   e,d,c,b
   h,class
   l,флаги
     0 max
     1 min
     2 очистка окна

209 HMNU_INIT Горизонтальное меню
   d,e
   h,class
   l=1
    ix,^desc

  desc:
   +0  defs 12 ;cтандарт.деск.окна
   +12 defs 2
   +14 defb n  ;кол-во пунктов
   +15 defb x_1,len_1,x_2,len_2,...,x_n,len_n
   +m  defm "file edit ..."
       defb 0

210 HMNU_INSERT method(22,23)
   ix,^desk
   l,object

212 VMNU_INIT Вертикальное меню
    ix,^desk
    h,class
    l=1
    b,флаги
      0 очистка окна

    desk:
      +0  defs 12    ;станд.деск.окна
      +12 defs 2
      +14 defb n     ;кол-во пунктов
      +15 defb y1,y2,...,yn
      +m  defm "load"
          defb 13
          defm "save"
          ...
          defb 0

213 VMNU_INSERT method(22,23)
    ix,^desk
    l,object

218 BUTN_INIT Кнопки выбора
   ix,^desk
   h,class
   l=1
   с=1 радиокнопки
   c=2 независимая фиксация
   b,флаги
      0 очистка окна

   desk:
     +0 defb флаги кнопок        ; бит
     +1 defs x  ;desk верт.меню     0 1 кнопка
                                    1 2 кнопка
                                    ...

219 BUTN_PRESS method(24)
    in: ix,^desk
   out: b,флаги кнопок

220 BUTN_INSERT method(22,23)
    ix,^desk
    c=1 или c=2
    l,object

222 KEY_INIT Иконки
    d,e
    hl,object
    c,номер

  с= 1 close
     2 home
     3 up
     4 down
     5 lift
     7 left
     8 right
    10 end
    11 rus
    12 lat
    13 zero
    15 system
    16 min
    17 max
    18 radio_on button
    19 radio_off buttonop
    20 nonfixed_on button
    21 nonfixed_off button
    22 "O'K"
    23 "ОТКАЗ"

225 VWCOLORS Системные цвета
   in: c,номер цвета
       d=1 чтение
       d=2 запись
         е,цвет
  out: e,цвет

  номера цветов:
   3 LBOX
   4 IBOX
   5 AWIN
   6 MENU
   7 DBOX

228 WINMANIPULATIONS Управление окном
  in: e,d,c,b
      h=1 перемещение
      h=2 размеры по горизонтали
      h=3         по вертикали
      h=5    h=2 + h=3
 out: d,e или c,b


              Библиотека классов   
           DOMEN FOUNDATION CLASSES

  const - это значит, что указанные метки прог-
раммист определяет сам, и они содержат данные.
  uses  - для работы класса требуется указанный
класс.

  SYSMES Обработка сообщений приложению

  Обработка всех системных сообщений, адресо-
ванных приложению. Некоторые сообщения он об-
рабатывает и передает управление методу, опре-
деленному программистом.
  Вот их список:
 1 open     APP_OPEN
 2 start_a  APP_ASTART
10 exit     APP_EXIT
11 help     APP_HELP
12 maximize APP_MAXIMIZE
14 reopen   APP_REOPEN
  Даже  если  метод  программист не определяет,
метка должна присутствовать.

В ячейке SYSMNOMER находится номер сообщения

 Для работы SYSMES требуется:

  APPdstruct
    defb 0
    defb X_pos,Y_pos,len,hgt
    defb класс объектов AWIN
    defb флаги1,флаги2
    defb 0

    флаги1   флаги2 (изменение размера)
     0 max     0
     1 min     1 горизонтальный
               2 вертикальный

const APPstart     EQU ^начала appbitmap
      APPlenght    EQU длина appbitmap
      APPacess     EQU ^точка входа
   APPtitlename    defm "Имя приложения"
                   defb 0
   APPiconimage    defb 3,3
                   defs 81 ; иконка приложения

  Вызов:  ld iy,APPdstruct
          call SYSMES
          ret nz

  ERRW  Окно сообщений о системных ошибках

ERRWopen Открыть окно с сообщением об ошибке

  in: a,номер ошибки
      d,e
      h,class

ERRWwork method(24,26) Обработка сообщений


  MENU  Меню

MENUinit инициализация
   вставить в APP_ASTART

MENUopen рисуем горизонтальное меню
   вставить в APP_OPEN

MENUwork method(22,23,24,25,26)

const MENUdstruct
   ; основное меню
      +0 defb x,y
      +2 defb кол-во пунктов(<6), класс
      +4 defb длины пунктов
      +9 defm "file edit ..."
         defb 0
    ; первое подменю
     +n1 defb кол-во пунктов,ширина окна
         defw (адреса методов,вызываемых
               при выборе пунктов меню.
               сколько пунктов,столько адресов.
               Методу передается: a,сообщение
                    l,номер выбранного пункта)
         defm "open"
         defb 13
         defm "run"
         ...
         defb 0

MENUbuffer defs 160

  SDBOX Простое диалоговое окно

SDBOXopen
  in: l,номер окна
  Окна выводятся в середине окна приложения


SDBOXwork method(24,26)

  SDBOXspecial
  in: hl,^название окна
      b,c
      a,class

const SDBOXdstruct
      defb len,hgt,class
   ;первое окно
      defm "название первого окна"
      defb 0
      defw метод при нажатии кнопки О'К
           передается в l номер окна
   ;второе окно1

 sdboxkeys defb флаги клавиш
                 0 О'К
                 1 Отказ

  BUTN  Панель выбора установок

uses SDBOX

BUTNopen
 in: l,номер окна
     h,биты кнопок

BUTNwork method(22,23,24)

   Методу, вызываемому при O'K в d передаются
   новые биты кнопок.

const BUTNdstruct
     +0 defb len,hgt,class
 ; Первая панель
  +3 defb тип кнопок ; 1-радиокнопки 2-независ.
     defb (метод при О'К)
     defm "имя окна 1"
     defb 0
     defm "пункт 1"
     defb 13
     defm "пункт 2"
     ...
     defb 0  ; кол-во пунктов <9
 ; Вторая панель
   ....

BUTNbuffer  defs 160

  DLGF  Окно ввода строки

uses SDBOX

DLGFopen
 in: l,номер окна, описанного в SDBOXdstruct
     de,^метод при клике
     Внимание! В поле SDBOXdstruct адрес можно
     указать DLGFclick, тогда при клике на О'К
     метод DLGFGclick проверит правильность
     ввода имени файла и вызовет метод по de,
     иначе О'К проигнорирует

DLGFwork method(22,23,24)

const DLGFbuffer defs 32


          Программирование приложений 

  Сообщения посылаемые приложению:

 1 OPEN     раскрыть окно приложения
 2 START A  стартовые процендуры
            in: hl,^prefix
                de,координаты расккрытия окна
                c,номер дескриптора приложения
           out: hl,^диспетчера приложения
                de,^bitmap приложени
                bc,длина приложения

                Если приложение не хочет
              стартовать (например, если
              это приложение-резидент),
              то a=100.

 3 START B
           out: d,e,b,c окна приложения

 4 CLOSE  Закрыть окно приложения
          in: e,d куда вывести иконку

 5 LIGHT   приложение стало активным

 6 SHADOW  приложение стало неактивным

10 EXIT  закончить выполнение приложения

11 HELP  вывести контекстную подскзку

12 MINIMIZE свернуть окно приложения в иконку
            in: e,d куда вывести икон

13 MAXIMIZE Развернуть окно на максимальный
             размер
            out: b,c

14 REOPEN   перерисовать окно

15 MOVE  переместить окно
         out: d,e

16 SIZE   изменить размеры
         out: b,c


             Структура приложения 

  Диспетчер
  Классы + объекты приложения
  Данные приложения

  Классы  DFC  (нет  смысла программисту самому
определять  системные  сообщения  1-19, поэтому
используйте класс SYSMES)

  Диспетчер

 ld iy,APPdstruct
 call SYSMES      ;см.описание DFC

 ld a,h           ; a=class
 cp 10
 jr z,CLASS1work
 cp 11
 jr z,CLASS2work
 ...
 ld a,57          ; сообщение не принято
 ret

  Классы и объекты

CLASS1work
 ld a,l           ; a=object
 cp 1
 jr z,OBJ11work
 cp 2
 jr z,OBJ12work
 ...
 ld a,37
 ret

OBJ11work
 ld a,(SYSMNOMER) ; a=message
 cp 23
 jr z,OBJ11shadow
 cp 24
 jr z,OBJ11select
 ...
 ret
OBJ11select
 ...
 xor a
 ret
 ...
 ...

CLASS2work
 ld a,l
 ...
 ld a,57
 ret

  Данные

APPdstruct
 defb 0,0,32,19
 defs 64

 Классы DFC

*F 1:SYSMES()
*F 1:MENU()
 ...

  Теперь добавим в начало ассемблерного текста
метку APPS, а в конец APPE.
  Определим методы класса SYSMES:
APP_OPEN
   call MENUopen ;Выводим основное меню
   ...
   xor a
   ret
APP_REOPEN
   call SYSM01 ; Выполним open
   ...         ; а далее дополнительные
               ; действия
   xor a
   ret
APP_HELP   ;Остальные методы не определяем
APP_ASTART
APP_EXIT
   ld a,37
   ret


 Стиль программирования приложений в ДОМЕН ОС

1 Объекты и классы

  Латинскме заглавные.
  Например: BUTN

2 Методы

  Лат.заглав. имя объекта, к которому метод от-
носится, затем название метод.
  Например: BUTNopen, BUTNwork
           call BUTNopen

3 Данные объекта или класса

  Имя объекта + dstruct
  Например: BUTNdstruct
            ld ix,BUTNdstruct

4 Метки перехода в коде объекта

  имя объекта + два знака цифр
  Например: butn01, butn02
            jr butn01, djnz butn02

5 Подпрограммы в коде объекта

  Имя объекта + два знака цифр
  Например: BUTN10, BUTN11
            call BUTN10

6 Локальные переменные

  имя объекта + d + цифра
  Например: butnd1, butnd2
            ld a,(butnd1), ld (butnd2),hl

 Кроме того, существуют правила для оформления
меток, относящихся к классам DFC.

7 MENU

  Имена методов, вставляемые в MENUdstruct
Menu + цифра порядкового номера пункта
горизонтального меню + цифра номера в соответ-
ствующем вертикальном меню.

                     ─────



Другие статьи номера:

От редакции - Шпаргалка - информация об управлении в журнале.

От редакции - авторы работавшие над вторым номером журнала Spectrum Progress.

Инструментарий - Статья о новой операционной системе ДОМЕН ОС.

Инструментарий - Статья о инструментальной системе для СПЕКТРУМА "THE GRAPHIC ADVENTURE CREATOR".

Инструментарий - Статья о том, как работать в системе для разработки Адвентюрных игр "THE GRAPHIC ADVENTURE CREATOR".

Инструментарий - Инструкция по эксплуатации программы "XPLAYER 78".

Инструментарий - Инструкция по пользованию пакетом программ "ZX-WINWORD", предназначенных для подготовки иллюстрированных текстов.

Игротека - Новелла к новой отечественной игре "RETURN TO HOME 4".

Игротека - краткая характеристика новой отечественной игры "RETURN TO HOME 4".

Игротека - Новелла и описание игры "DEMON'S REVENGE".

Записи программиста - программирование музыкального процессора AY-8912/10.

Записи программиста - Основы программирования под API Домен ОС.

Железяка - "SPRINTER-97": технические характеристики.

Железяка - "SPRINTER-97": Видеосистема.

Железяка - "SPRINTER-97": графический ускоритель.

Конкурс - Конкурс на лучшее название нового компьютера ф."ПЕТЕРС".

Новости - Информация о игре "RETURN TO HOME 5" (Смертельные миры, вторжение Торостоидов) игра является продолжением "RETURN TO HOME 4".

Новости - информация о новом текстовом редакторе "TEXTWRITER" demo.

Новости - впечатления о провалившемся ENLIGHT'97.

Водолей - Программисты... с точки зрения подхода к работе.

Форум - Информация о компьютерной сети SPbZXNet в Питере.

Форум - анкетирование, проведенное Алексеем Лебедевым (CONDOR SOFT) среди пользователей ZX Spectrum в 1997 г.

Форум - Интервью с известным ярославским программистом Романовым Р. (NICODIM).

Форум - Интервью с Николаем Носковым и Иваном Макарченко, создателями фирмы "ПЕТЕРС".

Реклама - бесплатная реклама и объявления...


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Разборочка - Описание игры ОПЕРАЦИЯ Р.Р.
Интервью - Старые знакомые: Рассказ Славы Медноногова о своей деятельности как программиста
Презентация - PKUNZIP для ZX

В этот день...   5 декабря