|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 57600 (0xe100) Types: TextFile Names: »tdbcodes «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »tdbcodes «
(dbrecdecode=slang dbrecdecode dbreccreate dbrectransf initdbtable connectdb dbrecdescr) \f ; rc 76.10.04 dbcodes -1- ; segment 1: decodeinternal, dbrecdecode, dbreccreate, dbrectransf ; segment 2: initdbtable ; segment 3: isodate, connectdb, dbrecdescr ; segment 4: insert-constants (extension of dbreccreate) s. g22 w. d.p.<:fpnames:>,l. ; the procedures on segment 1 uses the dbtable, ; which is shown on segment 2 s. j30 h. g4: g3, g2 ; rel last point, rel abs word j1: 0, 1 ; own core byte basedbtable j4: 1<11o.3, 0 ; reference to segment 4 (dbreccreate extension) j7: 7, 0 ; rs end uv expr j12: 12, 0 ; rs uv j13: 13, 0 ; rs last used j21: 21, 0 ; rs general alarm j29: 29, 0 ; rs param alarm j30: 30, 0 ; rs saved last used g2=k-2-g4 ; kommentarer i koden bærer præg af at første param tidligere ; var en zone g3=k-2-g4 b. p0, c7 w. ; decodeinternal ; this subroutine is called from ; 1) the procedures dbrecdecode dbreccreate dbrectransf ; 2) implicitely from any cf-procedure which gets ; a new record ; ; the subroutine places a new value in the dbtable for: ; length of last decoded and ; type of last decoded ; and further assigns the relevant values to: ; all field variables connected to this zone (or array) and ; the indivclass variable. ; ; not found length error not used ok ; uv 0 tabvalue 0 tabvalue ; length last decoded 0 0 0 tabvalue ; indivclass -2 -1 0 tabvalue ; fieldvariables 0 0 0 tabvalue p0: ; procedure decodeinternal ; entry exit ; w0 indivtype destroyed ; w1 addr2 unchanged ; w2 z.indivlength *) unchanged ; w3 return addr destroyed ; *) stackref if called from create \f ; rc 79.04.20 dbcodes -2- b. m13 w. ds. w2 c6. ; save w1.w2 rs w0 x1 ; last decoded:=indivtype; rs. w3 c4. ; c4:=return addr al w2 x1 ; w2:=addr2 al w1 x1+14 ; w1:=addr of first indivtype m0: sh w0 (x1+0) ; loop: jl. m5. ; find indiv in dbtable sh w0 (x1+8) ; jl. m4. ; sh w0 (x1+16) ; jl. m3. ; sh w0 (x1+24) ; jl. m2. ; sh w0 (x1+32) ; jl. m1. ; al w1 x1+40 ; jl. m0. ; m1: am 8 ; m2: am 8 ; m3: am 8 ; m4: al w1 x1+8 ; m5: se w0 (x1) ; if not found then jl. m8. ; goto not found rs w1 x2+2 ; save addr of indivtype ; w2= addr2 ; w1=addr of indivtype rl w0 x1+4 ; rs w0 x2-2 ; length of last decoded:=indivlength; rs. w0 (j12.) ; uv:=indivlength; rl. w3 (j13.) ; se. w0 (c6.) ; if indivlength=reclength sn. w3 (c6.) ; or reclength=lastused jl. m13. ; then goto take_indiv_class ; perhaps variable record length, inspect keys. rl w3 x2+12 ; w3:= keys(addr2) sz w3 1<3 ; if -, varlength sl. w0 (c6.) ; or indivlength >= reclength jl. m9. ; then goto length_error m13: ; take_indiv_class: rl w3 x1+6 ; w3:=tabvalue; rs w3 (x2+8) ; indivclassvar:=w3 sh w3 0 ; if indivclass <= 0 then jl. m12. ; goto zero_set_indivclass rl w1 x1+2 ; w1:=addr4 sn w1 0 ; if not used then jl. m10. ; goto zeroset all fieldvar; rl w0 x2+10 ; w0:=endaddr rl w2 x2+6 ; w2:=addr3 m6: rl w3 x1 ; fieldvarloop: rs w3 (x2+4) ; fieldvar:=modif<12+reladdr sn w0 x2+4 ; jl. m7. ; rl w3 x1+2 ; rs w3 (x2+10) ; sn w0 x2+10 ; jl. m7. ; al w1 x1+4 ; al w2 x2+12 ; jl. m6. ; repeat for all field variables m7: dl. w2 c6. ; restore w1.w2 jl. (c4.) ; return \f ; rc 76.10.04 dbcodes -3- m8: se w0 -13 ; not found: am -2 ; indivclass:= m12: ; zero_set_indivclass: am +1 ; if not used then 0 m9: al w0 -1 ; else if not found then -2 rs w0 (x2+8) ; else if length error then -1; al w1 0 ; se w0 -1 ; if -,lengtherror then rs. w1 (j12.) ; uv:=0; rs w1 x2-2 ; length last decoded:=0; m10: rl w0 x2+10 ; zeroset all fieldvar: rl w2 x2+6 ; w0:=end adddr; w2:=addr3; sn w0 x2 ; if addr3=end addr jl. m7. ; then goto exit; m11: rs w1 (x2+4) ; all fieldvar:=0; sn w0 x2+4 ; jl. m7. ; rs w1 (x2+10) ; sn w0 x2+10 ; jl. m7. ; al w2 x2+12 ; jl. m11. ; e. ; dbrecdecode ; integer procedure dbrecdecode(z); ; array z; ; (zone record contains the record to be decoded) ; if type<>last decoded then call decodeinternal ; result:=indivlength from dbtable; ; ; dbreccreate ; integer procedure dbreccreate(z,indivtype,record); ; array z; integer indivtype; array record; ; (contents of zone record irrelevant) ; proceed as dbrecdecode and continue with: ; a.2:=indivlength; a.4:=0; ; a.6:=indivtype; a.8:=isodate; ; remaining part of record:= 0; ; insert standardvalues from the constanttable; ; ; dbrectransf ; integer procedure dbrectransf(z,indivtype,record); ; array z; integer indivtype; array record; ; (zone record contains the record to be transformed) ; proceed as dbreccreate and continue with: ; move fix part to record ; move reoccuring fieldgroups to record ; ; alarms: ; dbinitst 0 : dbtable not initialized ; dbinitst 1 : zone (or array) not in dbtable ; param : record param identical to zone param ; recsize <indivsize> : record too short for new indiv ; -create <registerno> : it is prohibited to create in this reg. ; -transf <registerno> : it is prohibited to transf in this reg. \f ; rc 79.04.20 dbcodes -4- b. a5, m12, e5 w. g6: am 2 ; dbrecdecode: type:=4; g7: am 1 ; dbreccreate: type:=2; g8: al w1 1 ; dbrectransf: type:=1; rs. w1 c0. ; save type; rl. w2 (j13.) ; w2:=last used ds. w3 (j30.) ; saved last used:=last used rl. w1 (j1.) ; w1:=basedbtable sn w1 0 ; if not initialized then jl. a0. ; alarm(<:dbinitst 0:>); rl w1 x1+10 ; w1:=addr1 m0: rl w0 x1+2 ; loopzones: sn w0 (x2+8) ; jl. m1. ; find similar zone addr sn w0 -1 ; jl. a1. ; if not found then al w1 x1+10 ; alarm(<:dbinitst 1:>); jl. m0. ; m1: rl w1 x1+8 ; found: w1:=addr2 ; w1=addr2 ; w2=last used rs. w1 c1. ; save addr2 rl w0 x1+12 ; w0:=keys la. w0 c0. ; leave relevant bit se w0 0 ; if something prohibited then jl. a2. ; goto alarm(-create or -transf) rl w3 (x2+8) ; w3:= recordbase(param1) rs. w3 c2. ; save recordbase rl w0 x1-2 ; rs. w0 (j12.) ; uv:=length last decoded. rl. w0 c0. ; sn w0 2 ; if type=dbreccreate then jl. m3. ; goto decodenew; rl w2 x3+2 ; w2:=z.indivlength; rl w0 x3+6 ; w0:=indivtype; sn w0 (x1) ; if indivtype<>lastdecoded se w2 (x1-2) ; or z.indivlength<>length last then jl. w3 p0. ; goto decodeinternal; rl w0 (x1+8) ; if indivclass<1 rl. w3 c0. ; or type=dbrecdecode se w3 4 ; then goto algol sh w0 0 ; jl. w3 (j7.) ; rl w0 x1+2 ; rs. w0 c7. ; c7:=addr of old indivtype; \f ; rc 79.04.20 dbcodes -5- ; continue if dbreccreate or dbrectransf rl. w2 (j13.) ; w2:=stack pointer rl w0 x2+8 ; sn w0 (x2+16) ; if param1=param3 jl. w3 (j29.) ; then alarm(<:param:>); m3: ; decodenew: rl w0 (x2+12) ; w0:=indivtype; rl w3 x1 ; if indivtype se w0 x3 ; <>last decoded then jl. w3 p0. ; decodeinternal; rl w3 (x1+8) ; w3:=indivclassvar; sh w3 0 ; if indivclass<1 jl. w3 (j7.) ; then goto algol; rl w0 x1-2 ; w0:=indivlength; al w1 1 ; w1:= 1 (first halfword of record) rl w3 x2+16 ; w3:= dope_address:= ba w3 x2+14 ; base_word_address + dope_rel sh w0 (x3-2) ; if indivlength > upper sh w1 (x3 ) ; or 1 <= lower - k jl. a4. ; then alarm(<:recsize:>,indivlength); rl w3 (x2+16) ; w3:=recordbase; rs. w3 c3. ; c3:=recordbase; al w1 0 ; record.2:=indivlength; ds w1 x3+4 ; record.4:=0; rl w1 (x2+12) ; rs w1 x3+6 ; record.6:=indivtype; rl. w1 (j1.) ; rl w1 x1+8 ; rs w1 x3+8 ; record.8:=isodate; rl. w2 (j12.) ; wa w2 6 ; w2:=addr record.last al w0 0 ; w0:=0; w1:=0; al w1 0 ; raf:=0; sl w2 x3+10 ; if last >= 10 then rs w0 x2 ; record.last:= 0 (see doubleword loop below) m4: sh w2 x3+12-1 ; loop: jl. m5. ; ds w1 x3+12 ; record.raf(3):=0; sh w2 x3+16-1 ; jl. m5. ; ds w1 x3+16 ; record.raf(4):=0; sh w2 x3+20-1 ; jl. m5. ; ds w1 x3+20 ; record.raf(5):=0; al w3 x3+12 ; raf:=raf+12; jl. m4. ; goto loop; m5: ; end_loop: \f ; rc 76.10.04 dbcodes -5a- ; ; prepare the insertion of constants. ; the insertion is done on segment 4, but this segment will ; stay in core. rl. w0 c3. ; w0:= record-base rl. w1 c1. ; w1:= addr2 rl. w2 (j1.) ; w2:= base_dbtable rl. w3 (j4.) ; goto jl w3 x3+g22 ; insert_constants (on segm. 4) rl. w0 c0. ; if type=dbreccreate sn w0 2 ; then jl. w3 (j7.) ; return to algol \f ; rc 79.04.20 dbcodes -6- ; continue if dbrectransf rl. w1 c7. ; rl w1 x1+2 ; w1:=old_addr4; rl. w2 c1. ; w2:=addr2; rl w3 x2+10 ; rs. w3 c6. ; c6:=addr of last field var al w3 7 ; base:=7; m8: al w3 x3+2 ; fixloop: base+2; sl w3 (x2+4) ; if base>fix then jl. m9. ; exit fixloop; am. (c2.) ; rl w0 x3+1 ; w0:=zone.base am. (c3.) ; rs w0 x3+1 ; record.base:=w0; jl. m8. ; goto fixloop; m9: rl w2 x2+6 ; w2:=addr3 m10: ; testmoveloop: sl. w2 (c6.) ; if addr3>addr last jl. w3 (j7.) ; then return to algol; bz w0 (x2+4) ; sn w0 0 ; if new rel=0 then jl. m12. ; goto next; wa. w0 c3. ; rs. w0 c5. ; c5:=record.newrel bz w0 x1 ; sn w0 0 ; if old rel=0 then jl. m12. ; goto next; wa. w0 c2. ; rs. w0 c4. ; c4:=zone.oldrel al w3 0 ; i:=0; m11: al w3 x3+2 ; moveloop: i:=i+2; am. (c4.) ; rl w0 x3 ; w0:=z.oldrel.i am. (c5.) ; rs w0 x3 ; record.newrel.i:=w0; se w3 (x2+2) ; if i<>length then jl. m11. ; goto moveloop; m12: al w2 x2+6 ; next: addr3:=addr3+6; al w1 x1+2 ; addr4:=addr4+2; jl. m10. ; goto testmoveloop; \f ; rc 79.04.20 dbcodes -7- ; alarms: a0: am -1 ; number:=0; a1: al w1 1 ; number:=1; al. w0 e2. ; text:=dbinitst jl. w3 (j21.) ; goto general alarm a2: ; -create or -transf se w0 1 ; skip if transf am e0 ; text:=-create al. w0 e4. ; text:=-transf rl w1 x1-4 ; number:=registerno jl. w3 (j21.) ; goto general alarm a4: al w1 (0) ; number:=indivlength; al. w0 e3. ; text:=recsize jl. w3 (j21.) ; goto general alarm e1: <:<10>-create:> ; e2: <:<10>dbinitst:> ; e3: <:<10>recsize:> ; e4: <:<10>-transf:> ; e0=e1-e4 g5: ; no.of externals, byte to be init, init value ; date, clock c0: 0 ; saved proceduretype c1: 2 ; 0 ; saved addr2 c2: 0 ; saved zonebase c3: s3 ; 0 ; saved recordbase c4: s4 ; saved z.field c5: 0 ; saved record.field c6: 0 ; saved addr of last fieldvar c7: 0 ; saved addr of old indivtype e. m. rc 76.10.04 decodeinternal m. dbrecdecode dbreccreate dbrectransf h.r.g4.+503 w. jl. p0. ; call from cf/procedures <:dbdecode<0><0>:> e. e. ; segment 1 \f ; rc 75.04.11 dbcodes -8- b. p1 s. j30 w. k=0 h. g10: g11, g12 ; rel last point, rel last abs word j0: 1<11o.1, 0 ; segm.table addr next segm j1: 0, 1 ; own core byte basedbtable j8: 8, 0 ; rs end addr expr j13: 13, 0 ; rs last used j21: 21, 0 ; rs general alarm j30: 30, 0 ; rs saved stack ref, saved w3 g11=k-2-g10 g12=k-2-g10 w. ; procedure initdbtable(dbtable,registerno,z,indivclassname, ; fieldgroupno,fieldvarname, ; ... ; ... ); ; zone dbtable; array z; ; integer registerno,indivclassname,fieldgroupno,fieldvarname; ; indivclassname and fieldvarname must not be constants ; or expressions. ; ; alarms: ; blockjam 0 : zone declared external to dbtable ; blockjam 1 : zone declared external to fieldvariable ; -dbfield <fieldgroupno> : fieldgroupno in dbtable was ; expected as parameter ; +initdb <registerno> : initialization of 2 dbtables attempted. ; param <paramno> : 1) param is not integer ; 2) param must not be a constant ; 3) too many param ; -startdb <registerno> : dbtable has not been started ; -regno <registerno> : register not found in dbtable ; +regno <registerno> : this register is already initialized ; +zone <old registerno>: this zone (or array) was earlier specified ; together with register <registerno>. ; z.state <zonestate> : cf-register is not opened. \f ; rc 76.10.04 dbcodes -9- ; the procedure is called after the algol procedure startdbtable, ; which sets the zone state to 25, recordlength to zero and leaves ; the following contents in dbtable: (addrn=byten+basedbtable) ; ; byte: ; (2) size of dbtable ; (4) 0 (changed by first call of initdbtable to basedbtable) ; (6) 0 (changed by first call of initdbtable to zone descr. ; addr. dbtable) ; (8) 0 (changed by first call of initdbtable to isodate) ; (10) byte1 (changed by first call of initdbtable to addr1) ; (12) constanttable, rel.to basedbtable, changed to abs base. ; (14) recdescrtable, rel.to basedbtable, changed to abs base. ; ... ; !------------!---------------!---!---------!--------------! ; (byte1) !registerno1 ! 0 ! -1!file type!byte2-byte1 ! ; ! !(changed by ! or! !(changed by ! ; ! !initdbtable to ! 0 ! !initdbtable to! ; ! !zone descr addr! ! !addr2) ! ; ! !reg. zone) ! ! ! ! ; ! ... ! ... ! !... !... ! ; !------------!---------------!---!---------!--------------! ; ! 8388607 ! -1 ! ; !------------!---------------! ; and for each register: ; !-----------------------! ; ! registernumber ! ; ! 0 ! (length of last decoded indiv) ; (byte2) ! 0 ! (last decoded indivtype) ; ! 0 ! (addr of last indivtype) ; ! length of fixed part ! ; ! byte3-byte2 (or 0) ! (changed by initdbtable to addr3) ; ! 0 ! (changed by initdbtable to addr ; ! ! of indivclass variable) ; ! no. of fieldgroups ! (changed by initdbtable to addr ; ! ! of last fieldvariable addr) ; ! regindex, keys ! ; !-------------!-----------------!--------------!----------------! ; ! indivtype1 ! byte4-byte2(or 0! length of ! indivclass ! ; ! ! (changed by ! indiv ! ! ; ! ! initdbtable to ! ! ! ; ! ! addr4) ! ! ! ; ! ... ! ... ! ... ! ... ! ; !-------------!-----------------!--------------!----------------! ; ! 8388607 ! -1 ! ; !-------------!-----------------! ; ; !-------------!--------------!----------------! ; (byte3) ! fieldgroupno! length ! 0 ! ; ! ! of fieldgr ! (changed by ! ; ! ! ! initdbtable to ! ; ! ! ! addr of field ! ; ! ! ! variable) ! ; ! ... ! ... ! ... ! ; !-------------!--------------!----------------! ; ! 8388607 ! ; !-------------! ; ; !---------------!---------------!---------------!-------- ; (byte4.1) ! modif<12+rel1 ! modif<12+rel2 ! modif<12+rel3 ! ..... ; (byte4.2) ! or 0 ! or 0 ! or 0 ! ... ; ! ... ! ... ! ... ! . ; !---------------!---------------!---------------!-- ; ; registernumbers, indivtypes and fieldgroupnumbers are sorted. \f ; rc 78.10.18 dbcodes -10- b. a12, b16, c6, e8, m16 w. g9: rl. w2 (j13.) ; w2:=last used ds. w3 (j30.) ; saved last used:=last used rl w3 x2+8 ; w3:=zone descr addr dbtable; rl w0 x3+h2+6 ; w0:=zone state rl w1 x3+h0+0 ; w1:= base dbtable sn w0 26 ; if w0 = 26 <* after init *> then jl. m0. ; goto check_base; se w0 25 ; if zonestate<>25 then jl. a0. ; alarm(-startdb); rl w0 x3+h3+4 ; w0:=dbreclength; se w0 0 ; if reclength<>0 then jl. a0. ; alarm(-startdb); al w0 26 ; zonestate:= 26; <* after init *> rs w0 x3+h2+6 ; ; initialize base_dbtable and the head of dbtable rs. w1 (j1.) ; basedbtable:=base dbtable rs w1 x1+4 ; dbtable(2):=basedbtable; rs w3 x1+6 ; dbtable(3):=zone descr addr dbtable rl. w3 (j0.) ; jl w3 x3+p0 ; get isodate al w0 x1 ; rl. w1 (j1.) ; restore w1 rl. w2 (j13.) ; restore w2 rl w3 x2+8 ; restore w3 rs w0 x1+8 ; dbtable(4):=isodate; al w0 x1 ; dbtable(5):=dbtable(5) wa w0 x1+10 ; +basedbtable; rs w0 x1+10 ; al w0 x1 ; add basedbtable to dbtable(6); wa w0 x1+12 ; rs w0 x1+12 ; al w0 x1 ; add basedbtable to dbtable(7) wa w0 x1+14 ; rs w0 x1+14 ; ; now the initilization is over. m0: rl. w0 (j1.) ; check_base: se w0 x1 ; if w1<>basedbtable then jl. a1. ; alarm(+initdb); rl w1 x1+10 ; w1:=addr1 rs. w1 c0. ; save addr1 rl w0 (x2+12) ; w0:=registerno m1: sh w0 (x1+0) ; loop: jl. m6. ; find regno in dbtable sh w0 (x1+10) ; jl. m5. ; sh w0 (x1+20) ; jl. m4. ; al w1 x1+30 ; jl. m1. ; m4: am 10 ; m5: al w1 x1+10 ; m6: se w0 (x1) ; if not found then jl. a2. ; alarm(<:-regno:>); rs. w1 c2. ; save found addr. \f ; rc 76.10.04 dbcodes -11- rl w0 x2+16 ; w0:=zone descr rl w1 x1+2 ; w1:=stored zone rl w3 (x2+12) ; w3:=regno se w1 0 ; if stored zone<>0 then jl. a3. ; alarm(+regno); rl. w3 c0. ; w3:=addr1; al w1 -1 ; w1:=end value; m8: sn w0 (x3+2) ; loopzones: if param= jl. a4. ; stored zone then alarm(+zone); al w3 x3+10 ; se w1 (x3+2) ; if not endvalue then jl. m8. ; goto loopzones; rl w0 x2+16 ; stored zone:=param m9: rl. w1 c2. ; w1:=found addr; rs w0 x1+2 ; store zone descr addr rl w3 (x2+16) ; w3:=base zonebuf rs. w3 c6. ; save zonebase sl w3 (x2+8) ; if zone declared external to jl. a5. ; dbtable then alarm(blockjam 0); rl w3 x1+8 ; wa. w3 c0. ; rs w3 x1+8 ; byte2:=addr2 rs. w3 c1. ; rl w0 x1+6 ; sh w0 4 ; if filetype=3 or sh w0 2 ; filetype=4 then jl. m10. ; begin bz w1 x2+15 ; if not zone se w1 23 ; then jl. m10. ; skip; rl w1 x2+16 ; comment cf; rl w0 x1+h2+6 ; w0:=zonestate; sl w0 15 ; if zonestate<15 or sl w0 25 ; or zonestate>25 then jl. a7. ; alarm(z.state); ; cf-names b1=0 b3=b1+4 b4=b3+6 b5=b4+4 b6=b5+2 b8=b6+2 b9=b8+2 b14=b9+2 b15=b14+2 b16=b15+2 rl w1 x1+h0+0 ; w1:=base buf; wa w1 x1+3 ; w1:=cf-buf-ref; rl w1 x1+b16 ; zbuffer:=addr2; rs w3 x1-2 ; end cf; \f ; rc 76.10.04 dbcodes -12- m10: rl w1 x3+6 ; se w1 0 ; wa. w1 c1. ; w1:=addr3; rs w1 x3+6 ; byte3:=addr3; rs. w1 c0. ; c0:=addr3 rl w1 x2+20 ; rs w1 x3+8 ; save addr of indivclass al w0 x2+6 ; ba w0 x2+4 ; upperlimit:=stackref+6+appetite; rs. w0 c4. ; c4:=upper limit; rs. w0 c2. ; c2:=upper limit; sl w0 x1 ; if indivclassvar=constant sh w1 x2+6 ; se w1 x1 ; jl. a10. ; then alarm(param 4); rl w1 x2+18 ; se w1 26 ; if not integer then jl. a10. ; alarm(param 4); al w0 0 ; set indivclass to zero; rs w0 (x3+8) ; rl w1 x3+10 ; sn w1 0 ; jl. m11. ; al w0 6 ; wm w1 0 ; number of fieldvar:= al w1 x1-2 ; addr of last wa w1 x3+6 ; rs w1 x3+10 ; m11: al w1 x3+14 ; w1:=addr first indivtype; m12: rl w3 x1+2 ; w3:=byte4; sn w3 -1 ; exit if -1 jl. m13. ; se w3 0 ; if byte4<>0 then wa. w3 c1. ; byte4:=addr4; rs w3 x1+2 ; al w1 x1+8 ; jl. m12. ; m13: al w3 x2+29-8 ; curparamadr:=stackref+29-8; rs. w3 c5. ; c5:=cur param m14: rl. w3 c5. ; paramloop: al w3 x3+8 ; curparamadr:=curparamadr+8; sl. w3 (c4.) ; if addr>=upper limit then jl. m16. ; goto test last fieldgr rs. w3 c5. ; save curparamaddr bl w1 x3-6 ; se w1 26 ; if first param not integer then jl. a11. ; goto param alarm bl w1 x3-2 ; se w1 26 ; if sec.param not integer then jl. a12. ; goto param alarm rl w1 x3-4 ; w1:=addr first param sl. w1 (c4.) ; if addr<upperlimit and jl. m15. ; addr>=first param addr then sl w1 x2+6 ; upperlimit:=addr; rs. w1 c4. ; \f ; rc 75.04.11 dbcodes -13- m15: rl w1 x3 ; sh. w1 (c2.) ; if constant then sh w1 x2+6 ; se w1 x1 ; jl. a12. ; param alarm rl. w1 c0. ; w1:=addr3 sn w1 0 ; if no param expected jl. a11. ; then alarm(param); rl w0 x1 ; if too many param sn. w0 (c3.) ; then alarm(param); jl. a11. ; rl w0 (x3-4) ; w0:=param fieldgrno se w0 (x1) ; if param<>field in table then jl. a8. ; alarm(-dbfield); al w1 x1+6 ; rs. w1 c0. ; addr3:=addr3+6; rl w0 x3 ; sh. w0 (c6.) ; if zone declared external to sh w0 x2+6 ; se w3 x3 ; jl. a6. ; fieldvar then alarm(blockjam 1); rs w0 x1+4-6 ; store fieldvar addr in dbtable al w0 0 ; rs w0 (x3) ; fieldvar:=0; jl. m14. ; m16: rl. w1 c0. ; if cur fieldgr in dbtable sn w1 0 ; exists and jl. w3 (j8.) ; rl w1 x1 ; sn. w1 (c3.) ; <>end value then jl. w3 (j8.) ; goto algol; jl. a9. ; else alarm(-dbfield); \f ; rc 76.10.04 dbcodes -14- e0: <:<10>-startdb:> ; e1: <:<10>+initdb :> ; e2: <:<10>-regno :> ; e3: <:<10>+regno :> ; e4: <:<10>+zone :> ; e5: <:<10>blockjam:> ; e6: <:<10>z.state :> ; e7: <:<10>-dbfield:> ; e8: <:<10>param :> ; a0: am e0-e1 ; text:=-startdb a1: am e1-e2 ; text:=+initdb a2: am e2-e3 ; text:=-regno a3: al. w0 e3. ; text:=+regno rl w1 (x2+12) ; number:=registerno jl. w3 (j21.) ; goto general alarm a4: rl w1 x3 ; number:=old regno al. w0 e4. ; text:=+zone jl. w3 (j21.) ; goto general alarm; a5: am -1 ; number:=0; a6: al w1 1 ; number:=1; al. w0 e5. ; text:=blockjam jl. w3 (j21.) ; goto general alarm; a7: al w1 (0) ; number:=zonestate al. w0 e6. ; text:=z.state jl. w3 (j21.) ; goto general alarm; a8: rl w1 x1 ; number:=field in dbtable; a9: al. w0 e7. ; text:=-dbfield jl. w3 (j21.) ; goto general alarm a10: al w3 x2+25 ; number:=4; a11: am -4 ; a12: al w1 x3-5 ; ws w1 4 ; ls w1 -2 ; al. w0 e8. ; text:=param jl. w3 (j21.) ; goto general alarm; c0: 0 ; addr1, addr3 c1: 0 ; addr2 c2: 0 ; found reg addr, upper limit c3: 8388607 ; last fieldgroup c4: 0 ; cur. upper limit c5: 0 ; cur. param c6: 0 ; zonebase e. m. rc 76.10.04 initdbtable 0, h.r.g10.+505 w. <:initdbtable<0>:> ; e. ; segment 2 \f ; rc 75.04.11 dbcodes -15- s. j30 w. k=0 h. g13: g15 , g14 ; rel.last point,rel abs word j1: 0 , 1 ; own dbtable j6: 6 , 0 ; rs end reg expr j7: 7 , 0 ; end uv expr j12: 12 , 0 ; uv j13: 13 , 0 ; rs last used j21: 21 , 0 ; general alarm j30: 30 , 0 ; rs saved last used g14=k-2-g13 g15=k-2-g13 w. g16: ; integer procedure isodate b. c8 w. rl. w2 (j13.) ; w2:=last used; rs. w3 (j30.) ; saved last used:=last used; rl. w3 j6. ; return:=end uv expr p1: ; entry from initdbtable: p0=p1-g13 rs. w3 c0. ; save return addr jd 1<11+36 ; w0w1:=get clock nd w1 3 ; float fd. w1 c8. ; div by 10000 bl w3 3 ; ad w1 x3-47 ; normalize wd. w1 c6. ; day:=sec//86400; ld w1 26 ; year:=(day*4 wa. w0 c7. ; +99111 al w3 0 ; //1461; wd. w0 c4. ; as w3 -2 ; day:=day*4+99111 mod 1461//4; wm. w3 c1. ; month:=day*5 al w3 x3+461 ; +461 wd. w3 c3. ; //153; al w1 x2+5 ; day:=(day*5+461) mod 153 + 5; sl w3 13 ; if month>13 then al w3 x3+88 ; month:=month-twelvemonth+oneyear; wm. w3 c2. ; month:=month*100; rx w2 0 ; wd. w1 c1. ; day:=day//5; wa w3 2 ; date:=day+month; wm. w2 c5. ; year:=year*10000; wa w3 4 ; date:=date+year; al w1 x3 ; w1:=date; jl. w3 (c0.) ; return c0: 0 ; return addr c1: 5 ; c2: 100 ; c3: 153 ; days in the 5 month march-july c4: 1461 ; days in 4 years c5: 10000 ; c6: 86400 ; seconds in 24 hours c7: 99111 ; to adjust for 1.1.68 being date 0 10000<9 ; 10000* c8: 4096+14-47 ; 2**(-47) as floating point number e. \f ; rc 75.04.11 dbcodes -16- ; connectdb ; integer procedure connectdb(connect,a,z); ; boolean connect; array a; zone z; ; ; connectdb (return value, integer) registernumber (see connect) ; ; connect (call value, boolean) ; true (connect) ; a is searched in the dbtable. ; connectdb:=registerno of a. ; if not found then alarm(dbinitst 1). ; a is replaced by z in the dbtable. ; a is saved for later check when deconnect. ; if a is described as connected to cfzone, ; then addr2 is stored in the zonebuffer ; false (deconnect) ; z is searched in the dbtable. ; connectdb:=registerno of z. ; if not found the alarm(dbinitst 1). ; a is restored in the dbtable ; false add 1 (only registernumber) ; a is searched in the dbtable ; connectdb:=registerno of a (or 0) ; false add 2 (only registerno) ; z is searched in the dbtable ; connectdb:=registerno of z (or 0) ; a (call value, array) array which is earlier used in a call ; of initdbtable ; z (call value, zone) zone which has a one to one relation to a, ; but which is for storage reasons declared ; in a later block. ; ; alarms: ; dbinitst 0 : dbtable is not initialized ; dbinitst 1 : array(connect) or zone(deconnect) not in dbtable ; array cannot be found if already connected ; -regno <registerno> : connect: a must not be connected ; deconnect: a is not connected to z ; +zone <registerno> : z is already connected to another register ; z.state <zonestate> : cfzone is not opened. ; \f ; rc 75.04.11 dbcodes -17- g17: b. a5, b16, c0, e4, m4 w. rl. w2 (j13.) ; w2:=last used; ds. w3 (j30.) ; saved last used:=last used; rl. w1 (j1.) ; w1:=basedbtable; sn w1 0 ; if not initialized then jl. a0. ; alarm(dbinitst 0); rl w1 x1+10 ; w1:=addr1 rs. w1 c0. ; save addr1 bl w0 (x2+8) ; w2:=connect rl w3 x2+12 ; w3:=a so w0 1 ; if connect=false or false add 2 rl w3 x2+16 ; then w3:=z; m0: rl w0 x1+2 ; loopzones: sn w0 x3 ; find similar zone jl. m2. ; sn w0 -1 ; jl. m1. ; al w1 x1+10 ; jl. m0. ; m1: al w0 0 ; if not found then se w1 x1 ; regno:=0 m2: rl w0 x1 ; else regno:=found; rs. w0 (j12.) ; uv:=regno; bl w0 (x2+8) ; if connect sl w0 1 ; =false add x jl. (j7.) ; then return to algol; rl. w3 (j12.) ; if regno=0 sn w3 0 ; then jl. a1. ; alarm(dbinitst 1); se w0 0 ; jl. m3. ; if deconnect then ; begin rl w3 x2+12 ; if dbtable(no,3)<>a se w3 (x1+4) ; then jl. a3. ; alarm(-regno); rs w3 x1+2 ; dbtable(no,2):=a; al w3 0 ; rs w3 x1+4 ; dbtable(no,3):=0; jl. (j7.) ; return to algol \f ; rc 75.04.11 dbcodes -18- m3: rl w3 x1+4 ; if dbtable(no,3) se w3 0 ; <>0 then jl. a3. ; alarm(-regno); rl. w3 c0. ; w3:=addr1; rs. w1 c0. ; store addr reg rl w0 x2+16 ; w0:=z; al w1 -1 ; m4: sn w0 (x3+2) ; search zone: jl. a4. ; if found then alarm(+zone); al w3 x3+10 ; se w1 (x3+2) ; jl. m4. ; rl. w1 c0. ; rs w0 x1+2 ; dbtable(no,2):=z; rl w0 x2+12 ; rs w0 x1+4 ; dbtable(no,3):=a; rl w0 x1+6 ; if filetype=3 or sh w0 4 ; filetype=4 sh w0 2 ; then jl. (j7.) ; begin rl w3 x2+16 ; comment cf; rl w0 x3+h2+6 ; w0:=zonestate; sl w0 15 ; if zonestate<15 or sl w0 25 ; zonestate>25 then jl. a5. ; alarm(z.state); ; cf-names b1=0 b3=b1+4 b4=b3+6 b5=b4+4 b6=b5+2 b8=b6+2 b9=b8+2 b14=b9+2 b15=b14+2 b16=b15+2 rl w3 x3+h0+0 ; w3:=base buffer wa w3 x3+3 ; w3:=cf-buf-ref; rl w3 x3+b16 ; rl w1 x1+8 ; w1:=addr2 rs w1 x3-2 ; z-cf-buffer:=addr2; jl. (j7.) ; end cf; c0: 0 ; addr1, addr regno \f ; rc 76.10.04 dbcodes -19- e0: <:<10>dbinitst<0>:> ; e1: <:<10>-regno:> ; e3: <:<10>+zone<0>:> ; e4: <:<10>z.state:> ; a0: am -1 ; no:=0 a1: al w1 1 ; no:=1 al. w0 e0. ; text:=dbinitst jl. w3 (j21.) ; goto general alarm; a3: al. w0 e1. ; text:=-regno rl w1 x1 ; no:=registerno jl. w3 (j21.) ; goto general alarm; a4: al. w0 e3. ; text:=+zone; rl w1 x3 ; no:=registerno jl. w3 (j21.) ; goto general alarm a5: rl w1 0 ; no:=zonestate al. w0 e4. ; text:=z.state jl. w3 (j21.) ; goto general alarm; e. \f ; rc 76.10.04 dbcodes -20- ; ; ; dbrecdescr ; integer procedure dbrecdescr(register, registerno, iclass); ; real array register ; ; integer registerno, iclass ; ; ; dbrecdescr(return value, integer) ; 1 ok, registerno and iclass corresponds to the ; last decoded record of register. ; if iclass (indivclass) > 0 then the zone ; record of dbtable points to the descripion ; of this recordtype. ; 2 dbtable does not contain the recorddescrip- ; tion table. ; registerno and iclass as for result 1. ; 3 register does not correspond to any register. ; registerno and iclass are both set to -999999. ; ; register (call value, real array or zone record) ; must be connected to dbtable as a register by ; either initdbtable or connectdb. ; it identifies the register. ; ; registerno(return value, integer) see above. ; ; iclass (return value, integer) indivclass, see above. ; ; alarms: ; dbinitst 0 : dbtable is not initialized. ; \f ; rc 76.10.04 dbcodes -21- ; ; the procedure accesses the decodetable to find the register. ; from the register entry it fetches the registernumber and the ; indivclass. ; if the indivclass is positive, it uses regindex and the address ; of the last decoded indivtype from the registerentry to access the ; recorddescription table. ; the structure of the recorddescription table is this: ; ; abs base of recorddescriptions = dbtable(7) ; ; !--------------------------------------! ; ! rel.base reg.descr.(regindex 2) ! ; ! rel.base reg.descr.(regindex 4) ! ; ! ... ! ; !--------------------------------------! ; ; abs base of recorddescriptions for one register = ; dbtable(7) + rel.base reg.descr. ; ; !--------------------------------------! ; ! rel.base recorddescr.(itypindex 2) ! ; ! rel.base recorddescr.(itypindex 4) ! ; ! ... ! ; !--------------------------------------! ; ; abs base of recorddescription of one recordtype (itype) = ; abs base for one register + rel.base recorddescr. ; ; !--------------------------------------! ; ! length of recorddescription ! ; ! field descriptions ! ; ! ... ! ; !--------------------------------------! ; ; the format of the field descriptions is irrelevant for this ; procedure, since it just selects the piece of table correspon- ; ding to the last decoded recordtype as zone record of dbtable. ; the use of the recorddescription is left for other systems, ; f.ex. dbrecprint, which is coded in algol. ; \f ; rc 76.10.04 dbcodes -22- ; g18: ; dbrecdescr: b. a0, c0, e0, m4 w. rl. w2 (j13.) ; w2:= last_used ds. w3 (j30.) ; saved last_used:= last_used rl. w1 (j1.) ; w1:= base_dbtable sn w1 0 ; if not_initialized then jl. a0. ; alarm(dbinitst 0) rl w3 x2+8 ; w3:= zone_addr (register) rl w1 x1+10 ; w1:= addr1:= dbtable(5); m0: ; loop_zones: rl w0 x1+2 ; w0:= zone_addr(x1) sn w0 x3 ; if addr_from_table = register then jl. m3. ; goto zone_found; al w1 x1+10 ; w1:= next_registertable_index se w0 -1 ; if last_zone_addr_in_table <> stop (-1) then jl. m0. ; goto loop_zones ; notfound: rl. w0 c0. ; rs w0 (x2+12) ; registerno:= -999999 rs w0 (x2+16) ; iclass := -999999 am 1 ; result_3: m2: al w1 2 ; result_2: jl. (j6.) ; end register expression c0: -999999 ; dummy registerno and iclass m3: ; zonefound: rl w0 x1 ; rs w0 (x2+12) ; registerno:= registerno(x1) rl w1 x1+8 ; w1:= addr2 rl w0 (x1+8) ; rs w0 (x2+16) ; iclass:= iclass(iclassvar(registerentry)) sh w0 0 ; if iclass <= 0 then jl. m4. ; goto result_1 (no change of zonerecord) \f ; rc 76.10.04 dbcodes -23- ; ; now find the recorddescription if the recdescr.table is present. rl. w2 (j1.) ; w2:= base_dbtable rl w3 x2+14 ; w3:= base_recdescrtable sh w3 x2 ; if base_recdescrtable <= base_dbtable then jl. m2. ; goto result_2 bz w2 x1+11 ; w2:= regindex(2, 4, 6, 8, ...) am x3 ; rl w2 x2 ; w2:= word(base_recdescrtable + regindex) wa w3 4 ; w3:= base_recdescr.table for this register ac w2 x1+14 ; w2:= itypeindex(0, 2, 4, 6, ...):= wa w2 x1+2 ; (addr_of_last_decoded_itype - addr_of_first) ls w2 -2 ; //4 am x3 ; rl w2 x2+2 ; w2:= word(base_recdescr.table_this_register ; + itypeindex + 2) wa w2 6 ; w2:= abs base of recorddescription. rl. w1 (j1.) ; w1:= base_dbtable rl w1 x1+6 ; w1:= zone_descr_addr_dbtable:= dbtable(3) rs w2 x1+h3+0 ; recordbase(dbtable):= base of recorddescription. rl w0 x2+2 ; rs w0 x1+h3+4 ; recordsize(dbtable):= word(recbase + 2) m4: ; result_1: al w1 1 ; jl. (j6.) ; end register expression a0: ; alarm(dbinitst 0): al w1 0 ; al. w0 e0. ; w0:= textaddress jl. w3 (j21.) ; general alarm e0: <:<10>dbinitst<0>:> e. m. rc 76.10.04 isodate connectdb dbrecdescr 0, h.r.g13.+505 w. <:connectdb<0>:> e. ; segment 3 \f ; rc 76.10.04 dbcodes -24- ; s. w. k=0 h. g19: g21 , g20 ; rel. last point, rel. last absword g20=k-2-g19 ; g21=k-2-g19 ; w. ; insert_constants ; this is an extension of dbreccreate on segment 1. ; it may not access other program segments. ; ; the extension accesses the constanttable in much the same way as ; the procedure dbrecdescr (on segment 3) accesses the record- ; description table. ; some of the initialization has of course been done by dbreccreate, ; but the structure of the accesstables on register- and recordtype- ; level is the same. ; the only difference here is that the table indexed by itypeindex ; is a byte-table and not a word-table, due to the expected more ; limited size of the constanttable. ; (one field will only occur one time, and only if it is associated ; with a standard value). ; an entry in the accesstables may hold a zero to indicate that ; there are no constants at all, either for the register or the ; recordtype. ; but if a nonzero address has been calculated, it will point to ; a constantlist, which is interpreted in the order of decreasing ; addresses. ; a constantlist consists of elements of at least one word, the ; headword: ; ; base_address < 13 + length < 3 + constanttype ; ; the base_address is relative to recordbase or to fieldgroupbase. ; the interpretation is controlled by the constanttype: ; ; 0 stop, ref. to fieldgroup or ref. to constantlist. ; the exact interpretation depends on the values of ; base_address and length: ; 0 0 stop ; 0 >0 jump to other list ; no return. ; >0 >0 jump to fieldgroup ; with this base_address. ; return to actual list. ; 1 0 end of fieldgroup. ; ; the entry to another constantlist or to a fieldgroup ; is found by using length as the index to the access- ; table earlier indexed by itypeindex. \f ; rc 76.10.04 dbcodes -25- ; ; constanttype: (continued) ; 1 immediate byte, length is stored at storebase + 1 ; 2 immediate word, length is stored at storebase + 2 ; 3 immediate long, length is stored at storebase + 4 ; 4 byte, the following word is stored as a byte at ; storebase + 1 ; 5 word array, the following word is stored as a word ; at storebase + 2, .... storebase + length. ; (it is stored at least once even if length = 0). ; 6 long array, the following long is stored as a long ; at storebase + 4, .... storebase + length. ; 7 words, the following length bytes of words, (still in ; decreasing address order) are stored at storebase + 2, ; ..... storebase + length. ; (i.e. the core is rotated on wordlevel). ; ; the storebase is the recordbase or the fieldgroupbase incremented ; with the base_address from the headword. \f ; rc 76.10.04 dbcodes -26- ; b. a1, c5, m71 w. c0: 0 ; return address c1: 0 ; abs storebase (c0 c1 = long) c2: 0 ; saved list address (c1 c2 = long) c3: 0 ; record base (c2 c3 = long) c4: 0 ; base of itype access table c5: 0 ; saved last store addr g22: ; insert_constants: ; entered from dbreccreate on segment 1 with: ; w0 = record base ; w1 = addr2 in dbtable ; w2 = basedbtable ; w3 = return address ; ds. w0 c1. ; save return address rs. w0 c3. ; save record base ; now find the start of the relevant constantlist. rl w3 x2+12 ; w3:= base constanttable:= dbtable(6) sh w3 x2 ; if dbtable(6) <= base_dbtable then jl. (c0.) ; goto return; bz w2 x1+11 ; w2:= regindex (0, 2, 4, ...) am x3 ; rl w2 x2 ; w2:= word(base constanttable + regindex) sh w2 0 ; if regentry <= 0 then jl. (c0.) ; goto return wa w3 4 ; w3:= base itype access table rs. w3 c4. ; save base itype access table ac w2 x1+14 ; w2:= itypeindex(0, 1, 2, ...):= wa w2 x1+2 ; (addr_last_decoded_itype ls w2 -3 ; - addr_first_itype)//8 am x3 ; bz w2 x2+1 ; w2:= byte(base_itype_access_table ; + itypeindex + 1) sn w2 0 ; if itypeentry = 0 then jl. (c0.) ; goto return wa w3 4 ; w3:= list_address:= base_itype_access_table ; + itypeentry \f ; rc 76.10.04 dbcodes -27- ; ; note that the constantlist is interpreted in the order of decreasing ; list address, so the list address is always decremented. ; ; w3 = list_addr a0: ; next_list_element: rl w2 x3 ; w2:= head_word al w3 x3-2 ; decrement list_addr al w1 2.111 ; w1:= constant_type:= la w1 4 ; head_word extract 3 ls w2 -3 ; w2:= head_word shift(-3) al w0 2.1111111111; w0:= length:= la w0 4 ; head_word shift(-3) extract 10 ls w2 -10 ; w2:= store_base:= wa. w2 c1. ; abs_store_base + head_word shift(-13) bz. w1 x1+a1. ; goto jl. x1+2 ; case constant_type of ; (m0, m10, m20, m30, m40, m50, m60, m70) ; w0 = length ; w2 = store_base ; w3 = list_addr ready for next element m0: ; jump: se. w2 (c1.) ; if base_address <> 0 then jl. m2. ; goto field_group ; stop or ref. to other constantlist: sn w0 0 ; if length = 0 then jl. (c0.) ; goto return m1: ; get_new_list_addr: wa. w0 c4. ; w3:= list_addr:= bz w3 (0) ; byte(length + base_itype_accesstable) wa. w3 c4. ; + base_itype_accesstable jl. a0. ; goto next_list_element m2: ; field_group: sn w0 0 ; if length = 0 then jl. m3. ; goto end_field_group ; jump to field_group: ds. w3 c2. ; save abs_store_base, list_addr jl. m1. ; goto get_new_list_addr m3: ; end_field_group: dl. w0 c3. ; w3:= saved_list_addr rs. w0 c1. ; abs_store_base:= record_base jl. a0. ; goto next_list_element \f ; rc 76.10.04 dbcodes -28- ; m10: ; immediate byte: hs w0 x2+1 ; jl. a0. ; m20: ; immediate word: rs w0 x2+2 ; jl. a0. ; m30: ; immediate long: al w1 0 ; rs w1 x2+2 ; rs w0 x2+4 ; jl. a0. ; m40: ; byte: rl w1 x3 ; byte(store_base + 1):= hs w1 x2+1 ; word(list_addr) al w3 x3-2 ; decrement list_addr jl. a0. ; m50: ; word array: wa w0 4 ; w0:= last_store_addr rl w1 x3 ; w1:= word(list_addr) al w3 x3-2 ; decrement list_addr m51: ; store_word: rs w1 x2+2 ; word(store_base + 2):= w1 sh w0 x2+2 ; if last_store_addr <= store_base + 2 then jl. a0. ; goto next_list_element al w2 x2+2 ; increment store_base jl. m51. ; goto store_word m60: ; long array: wa w0 4 ; rs. w0 c5. ; c5:= last_store_addr dl w1 x3 ; w0w1:= long(list_addr) al w3 x3-4 ; decrement list_addr m61: ; store_long: ds w1 x2+4 ; long(store_base + 4):= w0w1 al w2 x2+4 ; increment store-base sl. w2 (c5.) ; if store_base >= saved_last_store_addr then jl. a0. ; goto next_list_element jl. m61. ; goto store_long \f ; rc 76.10.04 dbcodes -29- ; m70: ; words: wa w0 4 ; w0:= last_store_addr m71: ; move_word: rl w1 x3 ; word(store_base + 2):= rs w1 x2+2 ; word(list_addr) al w3 x3-2 ; decrement list_addr sh w0 x2+2 ; if last_store_addr <= store_base + 2 then jl. a0. ; goto next_list_element al w2 x2+2 ; increment store_base jl. m71. ; goto move_word ; case table for the branching on constanttype a1: h. m0-m0, m10-m0, m20-m0, m30-m0, m40-m0, m50-m0, m60-m0, m70-m0 w. e. ; end insert_constants; m. rc 76.10.04 insert_constants 0, h.r.g19.+505 w. <:dbreccreate:> e. ; segment 4 e. \f ; rc 78.10.18 dbcodes -30- g0: 3 ; dbrecdecode entry description: 0, r.4 ; docname 1<23+g6-g4 ; entry point 3<18+26<12 ; integer proc, array param 0 ; param spec2 4<12+g5-g4 ; external list 4<12+2 ; code segm, own bytes 1<23+4 ; dbreccreate entry description: 0, r.4 ; docname 1<23+g7-g4 ; entry point 3<18+26<12+19<6+26 ; integer proc,array,integer,array 0 ; param spec2 4<12+g5-g4 ; external list 4<12+2 ; code segm, own bytes 1<23+4 ; dbrectransf entry description: 0, r.4 ; docname 1<23+g8-g4 ; entry point 3<18+26<12+19<6+26 ; integer proc,array,integer,array 0 ; param spec2 4<12+g5-g4 ; external list 4<12+2 ; code segm, own bytes 1<23+4 ; initdbtable entry description: 0, r.4 ; docname 1<23+1<12+g9-g10 ; entry point 1<18+40<12+26<6+19 ; no type proc,general,array,integer 8<18 ; param zone 4<12+g5-g4 ; external list 4<12+2 ; code segm. own bytes ; 1<23+4 ; isodate entry description ; 0, r.4 ; docname ; 1<23+2<12+g16-g13 ; entry point ; 3<18 ; integer proc ; 0 ; param spec 2 ; 4<12+g5-g4 ; external list ; 4<12+2 ; code segm, own bytes 1<23+4 ; connectdb entry description 0, r.4 ; docname 1<23+2<12+g17-g13 ; entry point 3<18+8<12+26<6+12 ; integer proc,zone,array,boolean 0 ; param spec2 4<12+g5-g4 ; external list 4<12+2 ; code segm, own bytes g1: 1<23+4 ; dbrecdescr entry description 0, r.4 ; docname 1<23+2<12+g18-g13 ; entrypoint 3<18+19<12+19<6+26 ; integer proc, int.addr, int.addr, array 0 ; paramspec. 2 4<12+g5-g4 ; external list 4<12+2 ; code segm, own bytes d. p.<:insertproc:> ▶EOF◀