Разработка прототипа системы управления объектно-ориентированной базой данных

       

Заголовочный модуль для каналов


PROGRAM $M0

B16

1000 VALUE TOTMEMLEN

TOTMEMLEN BYTE VCTR MEMORY

: T-1 D -1 ;

: *4 SHL SHL ;

: &0FF 0FF & ;

: <= 1+ < ;

: >= 1- > ;

[20 WORD VCTR CHAN] [каналы. Начиная с 5-го]

VAR NCHAN [Номер текущего канала]

: !NCHAN ! NCHAN ;

5 VALUE NBASECH [Первый не базовый канал]



: GETDATA NCHAN 10 * + CHDATA ;

: PUTDATA NCHAN 10 * + ! CHDATA ;

[Размер заголовка блока в байтах]

FIX VAR HSIZE 10 ! HSIZE

: HSIZE+ HSIZE + ;

[Pred, Next, BusyLen, Len]

1 *4 VALUE ctfPREDADDR

[$M4] [как самодостаточный]

0 VALUE ctLOWCH   [Нижний канал.]

                  [0=Оперативная/1=Дисковая память/2=Журнал/-1=свободен]

1 VALUE ctTEKADR  [Логический адрес внутри участка (по данным)]

2 VALUE ctBUSYLEN [Длина фрагмента, занятая данными]

3 VALUE ctLEN     [Максимальная допустимая длина данных фрагмента]

4 VALUE ctTEKADR0  [=TEKADR, когда TEKADR стоит на нулевом байте данных фрагм]

5 VALUE ctNEXTADDR  [Адрес начала заголовка следующего фрагмента (пф)]

6 VALUE ctPREDADDR  [Адрес начала заголовка предыдущего фрагмента (пф)]

7 VALUE ctSYNCADDR  [Адрес начала заголовка фрагмента (пф)]

8 VALUE ctCHGCTX    [признак изменения контекста]

9 VALUE ct1STLONG   [Первое число в канале]

[в начальном блоке в начальном слове данных лежит адрес начала данных]

: LOWCH  ctLOWCH GETDATA ;  : !LOWCH ctLOWCH PUTDATA ;

: TEKADR ctTEKADR GETDATA ;    : !TEKADR ctTEKADR PUTDATA ;

: TEKADR0 ctTEKADR0 GETDATA ;    : !TEKADR0 ctTEKADR0 PUTDATA ;

: TEKADR++ TEKADR 1+ !TEKADR ; : !+TEKADR TEKADR + !TEKADR ;

: BUSYLEN ctBUSYLEN GETDATA ; : !BUSYLEN ctBUSYLEN PUTDATA ;

: LEN    ctLEN GETDATA ; : !LEN ctLEN PUTDATA ;

: NEXTADDR ctNEXTADDR GETDATA ;  : !NEXTADDR ctNEXTADDR PUTDATA ;

: PREDADDR ctPREDADDR GETDATA ;  : !PREDADDR ctPREDADDR PUTDATA ;

: SYNCADDR ctSYNCADDR GETDATA ;  : !SYNCADDR ctSYNCADDR PUTDATA ;

: CHGCTX ctCHGCTX GETDATA ;  : !CHGCTX ctCHGCTX PUTDATA ;

: FSTLONG ct1STLONG GETDATA ; : !FSTLONG ct1STLONG PUTDATA ;


TRAP NOMEMORY NOMEMORY#

: NOMEMORY# ."

No free memory" ;

TRAP OUTDATA OUTDATA#

: OUTDATA# ."

Out of data. " ;

TRAP OUTMEM OUTMEM#

: OUTMEM# ."

Out of memory. " ;

TRAP UNKCH UNKCH#

: UNKCH# ."

Unknown primitive channel:" NCHAN .D CR ;

TRAP O_NOTFND NOTFND#

: NOTFND# ."

Object not found. OID=" . CR ;

[*** Информация по каналу ***]

: IC CR

 ."   NCHAN=" NCHAN .D SP    ."   LOWCH=" LOWCH .D CR

 ."SYNCADDR=" SYNCADDR .D SP    ."PREDADDR=" PREDADDR .D SP ."NEXTADDR="

NEXTADDR .D CR

 ." BUSYLEN=" BUSYLEN .D SP  ."     LEN=" LEN .D CR

 ." TEKADR0=" TEKADR0 .D SP ."  TEKADR=" TEKADR .D CR ;

CHANNEL DATACH "DATA."    CONNECT DATACH


Содержание раздела