DataMuseum.dk

Presents historical artifacts from the history of:

DANOSI

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DANOSI

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦93a5ec83d⟧ TextFile

    Length: 3644 (0xe3c)
    Types: TextFile
    Names: »P3ADDR.PAS«

Derivation

└─⟦02956c927⟧ Bits:30010510 DVBS1.SW2114.src.2.14-1 SW2114 REAL #1/4 TIME PASCAL SOURCE REL 2.14
    └─⟦this⟧ »RTP\P3ADDR.PAS« 
└─⟦4f587ad96⟧ Bits:30010518 DVBS1.SW2114.src.2.7-1 SW2114 1/4 Real Time Pascal 2.7 92.06.16
    └─⟦this⟧ »RTP\P3ADDR.PAS« 
└─⟦a2a9e188c⟧ Bits:30010526 DVBS1.SW2114.src.2.6-4 RTP Compiler Source SW2104+SW2114 Disk 1 92.02.03 HEJ HHA
    └─⟦this⟧ »RTP\P3ADDR.PAS« 
└─⟦b607d6035⟧ Bits:30010532 RTP compiler Source 1 2.14 26/9(?)-92 DVBS1.SW2114.src.2.14-8
    └─⟦this⟧ »P3ADDR.PAS« 
└─⟦fd2665794⟧ Bits:30010523 DVBS1.SW2114.src.2.6-1 RTP compiler source SW2104+SW2114 Disk#1 30/1-92 HHA
    └─⟦this⟧ »RTP\P3ADDR.PAS« 

TextFile

{$O+,F+}\r
unit p3addr;\r
interface\r
uses pscplm,sthunit,sthcom,sthp34,mpaunit,p3cmmn,p3math;\r
\r
\r
PROCEDURE address_gf\r
(\r
VAR\r
current_offset,\r
object_offset: WORD;\r
object_size: WORD\r
);\r
\r
PROCEDURE address_lf\r
(\r
VAR\r
current_offset,\r
object_offset: WORD;\r
object_size: WORD\r
);\r
\r
PROCEDURE packed_array_offset\r
(\r
array_base : INTEGER;\r
array_offset : LONGINT;\r
byte_size : WORD;\r
bit_size : BYTE;\r
VAR\r
byte_offset, bit_offset: WORD\r
);\r
\r
\r
\r
implementation\r
\r
(* ------------------------------------------------------------------------\r
Error Messages and Warnings:\r
e_param_appetite\r
e_frame_size\r
-.\r
External Dependencies:\r
-.\r
External Effects:\r
-.\r
Comments:\r
-.\r
Outstanding:\r
-.\r
------------------------------------------------------------------------ *)\r
\r
(* $SUBTITLE('------------ PROCEDURE address_gf')*)\r
PROCEDURE address_gf\r
(\r
VAR\r
current_offset ,\r
object_offset : WORD;\r
object_size : WORD\r
);\r
\r
BEGIN\r
\r
object_offset:= current_offset;\r
\r
IF wadd_ovflw(current_offset, object_size) THEN\r
errormsg(this_pass, e_frame_size);\r
\r
IF Computer = RC5000 THEN\r
BEGIN\r
  (* Word allign *)\r
  current_offset :=  ((Current_offset + (WordSize-1))DIV WordSize)*WordSize;\r
END;\r
\r
END (* - PROCEDURE address_gf - *);\r
\r
(* $SUBTITLE('------------ PROCEDURE address_lf') *)\r
PROCEDURE address_lf\r
(\r
VAR\r
current_offset ,\r
object_offset  : WORD;\r
object_size : WORD\r
);\r
\r
BEGIN\r
IF Computer = RC3502 THEN address_gf(Current_offset,Object_Offset,Object_size)\r
ELSE\r
BEGIN\r
  IF (object_size <= current_offset) THEN\r
  BEGIN\r
  IF (Current_Offset = $FFFF) AND\r
     (Object_size <> 0) THEN Current_Offset := 0;\r
  current_offset:= current_offset - object_size;\r
\r
  IF Computer = RC5000 THEN\r
  BEGIN\r
    (* Word allign *)\r
    current_offset :=  Current_offset - (current_offset MOD WordSize);\r
  END;\r
  object_offset:= current_offset;\r
\r
  END\r
  ELSE\r
\r
  errormsg(this_pass, e_frame_size)\r
END;\r
END (* - PROCEDURE address_lf - *);\r
\r
(* $SUBTITLE('------------ PROCEDURE packed_array_offset') *)\r
PROCEDURE packed_array_offset\r
(\r
array_base : INTEGER;\r
array_offset : LONGINT;\r
byte_size : WORD;\r
bit_size : BYTE;\r
VAR\r
byte_offset, bit_offset: WORD\r
);\r
var\r
abs_bit_offset: longint;\r
\r
BEGIN\r
\r
array_offset:= array_offset - array_base;\r
\r
CASE bit_size OF\r
\r
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12:\r
BEGIN\r
IF ( (Computer = RC3502) AND ( (bit_Size = 3) or (bit_Size = 5))) THEN\r
BEGIN\r
  IF (bit_Size = 3) THEN\r
    BEGIN\r
      Byte_Offset := (Array_Offset DIV 5) * 2;\r
      Bit_Offset := (Array_Offset MOD 5) * Bit_Size;\r
    END\r
  ELSE\r
    BEGIN\r
      Byte_Offset := (Array_Offset DIV 3) * 2;\r
      Bit_Offset := (Array_Offset MOD 3) * Bit_Size;\r
    END;\r
   IF Bit_Offset > 7 THEN\r
      BEGIN\r
        Byte_Offset := Byte_Offset + 1;\r
        Bit_Offset := Bit_Offset - 8;\r
      END;\r
END\r
ELSE\r
BEGIN\r
abs_bit_offset:= bit_size*array_offset;\r
if abs_bit_offset>max_word then\r
begin\r
errormsg(this_pass, e_array_size);\r
byte_offset:= 0;\r
end\r
else\r
byte_offset:= abs_bit_offset DIV 8;\r
bit_offset:= abs_bit_offset MOD 8\r
END;\r
END;\r
\r
11:\r
BEGIN\r
abs_bit_offset:= (bit_size+1)*array_offset;\r
if abs_bit_offset>max_word then\r
begin\r
errormsg(this_pass, e_array_size);\r
byte_offset:= 0;\r
end\r
else\r
byte_offset:= abs_bit_offset DIV 8;\r
\r
IF ODD(array_offset) THEN\r
bit_offset:= 3\r
ELSE\r
bit_offset:= 0\r
END;\r
\r
(* OTHERWISE *) ELSE\r
BEGIN\r
\r
abs_bit_offset:= byte_size*array_offset;\r
if abs_bit_offset>max_word then\r
begin\r
errormsg(this_pass, e_array_size);\r
byte_offset:= 0;\r
end\r
else\r
byte_offset:= abs_bit_offset;\r
bit_offset:= 0;\r
END;\r
END; (* case *)\r
\r
END (* - PROCEDURE packed_array_offset - *);\r
END.\r
«eof»