LONG VAR SIZE_X
: DATWRROOT -1 OLS -1 OLS 0 OLS 4 OLS 0 OLS ;
: DATWRINT -1 OLS -1 OLS 4 OLS 4 OLS VALINT OLS ;
: DATWRSTR -1 OLS -1 OLS LENSTR OLS LENSTR OLS ADRSTR LENSTR DO DWS1 D ;
: DWS1 [A] C @B OBS 1+ ;
: NEWOBJ1 [] SIZE_ROOT ! SIZE_X NEWOBJ3 ;
: NEWOBJ3 '' DD_ROOT ! WRI_DATA
NEWID C ! OIDV SIZE_X C2 D.NEWOBJ [OID] ;
9 VALUE LCH
LCH LONG VCTR CLONEHDR VAR DATCH LONG VAR LENVMEM1
:: : CLONE [OID] C HIPRIO
C LOADOBJ FINDOID PrioQueNUM C PUSH 2 Channels !NCHAN 0 GOTO
CLONE1 []
'' CC_ROOT ! WRI_DATA NEWID C 0 ! CLONEHDR SZ_HDROBJ HSIZE+ C2 D.NEWOBJ
[OID] POP 3 Channels C ! DATCH !NCHAN LENVMEM C ! LENVMEM1
C2 [OID_NEW LEN OID_NEW] CLONE_DATA [OID_NEW] ;
: CLONE1
ILS 1 ! CLONEHDR [BHR] ILS 2 ! CLONEHDR [KH]
ILS 3 ! CLONEHDR [TRC] 0 4 ! CLONEHDR
SZ_HDROBJ 5 ! CLONEHDR -1 6 ! CLONEHDR
-1 7 ! CLONEHDR 0 8 ! CLONEHDR
0 9 ! CLONEHDR ;
: CCR1 [N] C CLONEHDR OLS 1+ ;
: CC_ROOT 0 LCH 1+ DO CCR1 D ;
: CLONE_DATA [LEN OID] '' COPY_DATA E2 NEWDREC [] ;
: COPY_DATA [] DATCH NCHAN LENVMEM1 DO_IOBSCC DD ;
:: 0 VALUE N_TRSC
[Запись новых данных, запись в журнал]
: NEWDREC [SIZED PROC OID] N_VAL N_TRSC C3 NEWJREC FINDOID
PrioQueNUM [SIZE PROC N] C PUSH
2 Channels !NCHAN
[SIZED PROC] ! WRI_DATA NEWVM1 G_VAL C OLS [ADR_DATA]
[перечитать канал данных]
GOTO POP 3 Channels LCTX [] ;
[новая запись в журнал. На вх: номер транз. и адрес из заголовка]
: NEWJREC [addr_hdr TRANS OID] C LOADOBJ FINDOID PrioQueNUM
[. TRANS N] C PUSH 4 Channels
!NCHAN JRECLEN UPSIZE OLS POP NCHAN PUSH 2 Channels !NCHAN
C GOTO ILS POP !NCHAN
E2 OWS OLS W_DATIME [] ;
B10
[Запись текущего времени]
: W_DATIME 1979 OWS 12 OBS 31 OBS TMGET TMS ;
: TMS [num] N2T GBR E2 GBR E2 GBR E2 OBS OBS OBS 100 * OWS ;
B16
[просмотр журнала объекта]
[Переключиться на журнал]
: OBJ.J [OID]
C LOADOBJ FINDOID PrioQueNUM 4 Channels !NCHAN ;
: JVIEW [oid] CR ."Updated data:"
OBJ.J LENVMEM JRECLEN / D 0 GOTO DO JVIEW1 ;
: JVIEW1 CR ."Trans= " ILS .D SP
IWS BR N_BHR ."Behav.=" N_VAL ."AddrVal=" N_KH ."Knowhow="
ELSE ."?????? =" ILS SP .D SP JDATAV1 ;
: JDATAV1 S( BASE@ ) B10 IWS IBS IBS 2 TON #. TOB 2 TON #. TOB 4 TON
SP SP #: POS2 #: POS2 #. POS2 # IWS 4 TON TOB ;
: POS2 [B] IBS 2 TON TOB ;
[Определить размер объекта в памяти = заголовок + данные]
: SIZEMEMOBJ [N] C PrioQueOID BR0 T0 SMEMO1 [0/size] ;
: SMEMO1 3 Channels !NCHAN LENVMEM HSIZE+ HSIZE+ SZ_HDROBJ + [size] ;