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

       

Система управления хранением объектов


PROGRAM $SOMS

B16

[СИСТЕМА УПРАВЛЕНИЯ ХРАНЕНИЕМ ОБЪЕКТОВ]

FIX LONG VAR MAXID

1 ! MAXID

: NEWID MAXID !1+ MAXID ;

: DEFMAXID 6 EL_MAX 1+ ! MAXID ;

[5 КАНАЛ = ОПЕРАТИВНАЯ ПАМЯТЬ; 6 КАНАЛ = ДИСКОВАЯ ПАМЯТЬ]

: L_SUHO 0 !NCHAN 0 GOTO 5 LCTX  1 !NCHAN 0 GOTO 6 LCTX ;

[создание структуры СУХО для ОП]

[9 -- Размер, занимаемый элементом списка]

LONG VAR SIZE_EL 8 ! SIZE_EL

[создать новый объект]



ACT VAR WRI_DATA

: M.NEWOBJ [SIZE OID] 0 E2 8 5 X.NEWOBJ [] ;

: D.NEWOBJ [SIZE OID] 1 E2 8 6 X.NEWOBJ [] ;

: X.NEWOBJ [SIZE LOWCH OID SIZE_EL DIR_CHAN] C PUSH S( NCHAN ) !NCHAN UPSIZE

        [.. OID] OLS [basechan] !NCHAN NEWVM1 [SYNCADDR] POP !NCHAN OLS [] ;

:: : M.VIEW 5 !NCHAN CR ."RAM:" VIEW.OBJ' ;

:: : D.VIEW 6 !NCHAN CR ."HDD:" VIEW.OBJ' ;

:: : A.VIEW M.VIEW D.VIEW ;

: IC.VIEW [A L] SHR SHR E2 GOTO DO IC1.V ;

  : IC1.V TEKADR CR .D #> TOB SP SP ILS .D ;

: VIEW.OBJ' 0 GOTO ILS D [Пропустили длину элемента]

  CR ."  OID      ADDRESS" RP SHOWPAROBJ ;

: SHOWPAROBJ END? EX+ ILS C BR0 SPO1 SPO2 ;

    : SPO1 D ILS D ;

    : SPO2 CR .D SP ILS .D SP ;

: M.DEL [OID] 5 X.DEL ;  : D.DEL [OID] 6 X.DEL ;

: A.DEL [OID] C M.DEL D.DEL ;

ACT VAR EL_AVAR

:: : X.DEL [OID NCHAN] EL_FIND [OID 1/0] IF+ EL_DEL D ;

     [найти элемент в списке по ID и встать на след. за OID слово]

   : EL_DEL -4 @GOTO 0 OLS ;

:: : EL_FIND [OID NCHAN] '' EL_COMPAR ! EL_AVAR EL_PEREBOR ;

   : EL_PEREBOR  !NCHAN 0 GOTO ILS D  RP EL_FIND0 [OID 1/0] ;

   : EL_FIND0 END? 0 E2 EX+ D ILS C BR0 D EL_AVAR ILS D ;

   : EL_COMPAR [OUR_OID TEK_OID]  C2 = C EX+ D ;

:: : EL_MAX [DIR-NCHAN] 0 E2 '' MAX ! EL_AVAR EL_PEREBOR D [OID] ;

:: : DB.NEW !1 MAXID WOPEN DATACH

      -1 OL DATACH -1 OL DATACH 14 OL DATACH 14 OL DATACH

      -1 OL DATACH -1 OL DATACH 4 OL DATACH 4 OL DATACH

            8 OL DATACH CLOSE DATACH

[      WOPEN JOURCH

      -1 OL JOURCH -1 OL JOURCH 14 OL JOURCH 14 OL JOURCH

      -1 OL JOURCH -1 OL JOURCH  4 OL JOURCH  4 OL JOURCH

            8 OL JOURCH CLOSE JOURCH ]

 DB.OPEN ;

: DB.CLOSE CLOSE DATACH [CLOSE JOURCH] ;

: DB.OPEN -1 !!! CHDATA

 [DATA]

 OPEN DATACH 1 !NCHAN 0 !TEKADR 0 !TEKADR0 1 !LOWCH

  IL DATACH  !PREDADDR IL DATACH !NEXTADDR 0 !SYNCADDR

  IL DATACH  !BUSYLEN  IL DATACH !LEN  6 LCTX

 [RAM]

 0 !NCHAN 0 !LOWCH 0 !TEKADR 0 !BUSYLEN

 TOTMEMLEN !LEN 0 !TEKADR0 0 !SYNCADDR -1 !NEXTADDR -1 !PREDADDR

 '' WRI_8OLS ! WRI_DATA [длина элемента каталога]

 4 [<can more...] NEWVM1

    [SYNCADR] GOTO 5 LCTX [4 UPSIZE 8 OLS] DEFMAXID

 CHMS.INIT ;

: WRI_8OLS 8 OLS ;



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