DataMuseum.dk

Presents historical artifacts from the history of:

RC3500

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

See our Wiki for more about RC3500

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦e4d365ece⟧ TextFileVerbose

    Length: 9216 (0x2400)
    Types: TextFileVerbose
    Names: »editpass4«

Derivation

└─⟦2c55ea56f⟧ Bits:30001844 SW-save af projekt 1000, Alarm-system
    └─⟦6b41451d2⟧ 
        └─⟦this⟧ »editpass4« 

TextFileVerbose

; editpass4
;(edit pass4text
;finis)


; 81.05.11   page 57     procedure inclusion
; 81.05.12   page 60     procedure actual
;            page 31     procedure std_name, niltype size 2
; 81.05.29               pool n; ok
;                        -channel stat i z80
;                        function^.field; ok
; 81.06.09               save current lix; ok
;                        var a:alfa:='abc';  ok
;                        #b10000000000000000; ok






; page 1

l./versionpass4 = /,   d1,   i/

versionpass4 = 400;  (* version this pass 4.00      *)
versionpass3 = 2;    (* pass 3 version must be 2.xx *)
/,  
p-1







; page 9


l./context_kind = /,
l./var_param,/,   r/value_param,/value_param,    return_param,/,


l./error_types = (/,
l./);/,  r/)/, error_channel)/,


; page 11

l./array_types, index_types,/,
r/a/direct_return, a/,

l./: boolean/,  r/ :/, param_list : /,

l./undef_nix,/,   i/
niltype_nix,
/,



; page 17

l./procedure pass4error(e:/,
l./not_implemented:/,  l1,  i/
error_channel:          writeln('channel statement not implemented in z80');
/,

; page 20

l./procedure initialize;/,


; page 21

l./export:=false;/,   l1,  i/
param_list:=true;
/,


; page 22

l./array_types:=/,    i/
direct_return:=[int_type, char_type, bool_type, scalar_type, 
dyn_subrange, pointer_type];/,

; page 24





; page 31

l./procedure std_name(ty:/,
l./xniltype:/,
l./size:=/,   r/0/2/,
i/
niltype_nix:=nix;
/,





; page 32

l./procedure sub_def;/,


; page 33

l./size:=var_size(min,max);/,   i/
dynamic:=false;
/,
l./begin (*dynamic*)/,
l./offset:=alloc_var(/,  i/
word_allign;
/,

l./error(not_implemented)/,  l1,  i/
min:=0;  max:=1;
/,


; page 35

l./procedure array_def(pack/,

; page 36

l./offset:=alloc_var(array_template_size);/,
i/
word_allign;
/,


; page 40

l./procedure pool_def;/,
l./data_size:=size/,   i/
if stack[t] = niltype_nix then
data_size:=0
else
/,


; page 41

l./procedure formal_param(c:/,
i/

function alloc_process_param : integer;  (* return = param length *)
var type_nix, no, param_size, byte_displ, parameter_length : integer;
begin
for no:=param_number - 1 downto 0 do
with nametable[ stack[t-no] ] do begin
type_nix:=comp_type;
if context = value_param then
param_size:=nametable[type_nix].size
else
param_size:=pointer_length;
if nametable[type_nix].dynamic then begin
error(error_dyn);
param_size:=0;
end;
byte_displ:=0;
if (* **z80** *) versionz80 then begin
if param_size = byte_length then param_size:=word_length;
end
else
begin (* **lambda** *)
if nametable[type_nix].context in index_types then
if param_size = byte_length then byte_displ:=1;
if odd(param_size) then param_size:=param_size+1;
end;
niv:=current_niv;
offset:=alloc_var(param_size);
offset:=offset+byte_displ;
end; (* for .. with .. *)
if (* **z80** *) versionz80 then
parameter_length:=-current_offset
else
(* **lambda** *)
parameter_length:=current_offset + 1;
display[this_level].parameter_length:=parameter_length;
alloc_process_param:=parameter_length;
end;  (* alloc process param *)

function alloc_routine_param : integer;  (* return = param length *)
var q, no, parameter_offset, return_size, param_size,
parameter_length, byte_displ : integer;

function alloc_param(size : integer) : integer;
begin
if (* **z80** *) versionz80 then begin
(* parameter_offset >= 0 *)
alloc_param:=parameter_offset;
if top_address - parameter_offset >= size then
parameter_offset:=parameter_offset + size
else
error(address_overflow);
end
else
begin
(* **lambda** *)
(* parameter_offset <= 0 *)
if top_address + parameter_offset >= size then
parameter_offset:=parameter_offset - size
else
error(address_overflow);
alloc_param:=parameter_offset;
end;
end; (* alloc_param *)

begin (* alloc routine param *)
return_size:=0;
q:=param_number - 1;
if mode = func_mode then
with nametable[ stack[t-q] ] do begin
if nametable[comp_type].context in direct_return then begin
context:=return_param;
return_size:=nametable[comp_type].size;
if return_size=byte_length then return_size:=word_length;
end;
if nametable[comp_type].dynamic then error(error_dyn);
end;
if (* **z80** *) versionz80 then
parameter_offset:=0
else
(* **lambda** *)
parameter_offset:=-1;
parameter_length:=0;
for no:=0 to q do
with nametable[ stack[t-no] ] do begin
if context = var_param then
param_size:=pointer_length
else
(* value param and return param *)
with nametable[ comp_type] do begin
param_size:=size;
if dynamic then begin
error(error_dyn);
param_size:=0;
end;
end;
byte_displ:=0;
if (* **z80** *) versionz80 then begin
if param_size = byte_length then param_size:=word_length;
end
else
begin (* **lambda** *)
if nametable[comp_type].context in index_types then
if param_size = byte_length then byte_displ:=1;
if odd(param_size) then param_size:=param_size + 1;
end;
parameter_length:=parameter_length + param_size;
niv:=current_niv;
offset:=alloc_param(param_size);
offset:=offset + byte_displ;
end; (* for ... with .. *)
parameter_length:=parameter_length - return_size;
alloc_routine_param:=parameter_length;
end; (* alloc routine param *)
/,



l./procedure formal_param(c:/,
l./if c=value_param/,
d./if odd(parm_size) then/,  d,
l./niv:=current_niv;/,  d2,



; page 43

l./procedure new_block;/,
l./if (* **z80**/, 
d./display[this_level]./,
l./proc_mode, func_mode:/,   l2,  i/
if param_list then
parameter_length:=alloc_routine_param
else
parameter_length:=size;   (* routine previous defined *)
param_list:=true;
/,
l./size:=parameter/,  d,  i/
display[this_level].parameter_length:=parameter_length;
size:=parameter_length;
/,
l./put_arg1(/,  d,
l./process_mode:/,   l1,  i/
parameter_length:=alloc_process_param;
/,

l./t:=t-param_number-1;/,   i/
display[this_level].saved_lix:=current_lix;
/,


l./procedure external_;/,
l./if (* **z80/,  d4,  i/
size:=alloc_routine_param;
/,
l./pop_level;/,   i/
display[this_level].saved_lix:=current_lix;
/,


l./procedure forward_;/,
l./size:=/,  r/current_offset/alloc_routine_param/,
l1,   i/
display[this_level].saved_lix:=current_lix;
/,
l./current_offset:=nametable/,   d,  i/
param_list:=false;
/,







; page 45

l./procedure end_block;/,
l./if (* **z80/,   d6,   i/
if (* **lambda** *) not versionz80 then
var_length:=var_length+1;
if mode = process_mode then
var_length:=var_length - display[this_level].parameter_length
else
var_length:=var_length - activation_record_length;
/,



l./put1(zlength/,  r/)/, display[this_level].parameter_length)/,
r/1/2/,

; page 48

l./procedure init_values(nix/,
l./if ops[ot].context=lconst/,
l./put0(zinitialize/,  i/
if ops[ot].kind = array_type then begin
push;
ops[ot].size:=size;
adjust_string(os, ot);
pop;
end;
/,



; page 55

l./procedure equality(op:/,


; page 56
l./int_type,char_type,bool_type,scalar_type:/,
r/:/,dyn_subrange:/,




; page 57

l./procedure inclusion;/,
l./load_expr;/,  i/
get_pushed_consts;
/,







; page 58

l./procedure func_call;/,
l1,  r/;/;   via_stack : boolean;/,
l./put1(zextfunccall/,   r/1/2/,   r/)/, size)/,
l./else put2(zfunccall/,   r/)/, size)/,
r/2/3/,
l./result_size:=size;/,  l1,  i/
via_stack:=context in direct_return;
/,
l./context:=func_result;/,   l1,   i/
if not via_stack then begin
/,
l./offset:=q;/,  l1,  i/
end (* not via stack *)
else
alloc_size:=0;
/,
l./with ops/,   i/
via_stack:=via_stack or (std>0);
/,
l./func_value:=std=0/,  r/std=0/via_stack/,


l./procedure end_func_call;/,
l./if ops/,  r/if/if not/,
l./put0(zendfunccall/,   r/)/,ops[ot].size)/,
r/0/1/,


l./procedure proc_call;/,
l./put1(zextproccall/,   r/1/2/,   r/)/, size)/,
l./put2(zproccall/,  r/2/3/,  r/)/,size)/,



; page 60

l./procedure actual;/,
l1,  i/
var s : integer;
/,
l./ops[ot].size:=/,   l1,   i/
s:=ops[ot].size;
if s < word_length then s:=word_length;
/,
l./otherwise put_arg2(addr_typ/,  l2,  i/
return_param:  put1(zreturnparam, s);
/,



l./procedure end_actual;/,
l./var_param:/,   l1,  i/
return_param:  ;  (* no action *)
/,



; page 69

l./procedure var_;/,
l./with ops[ot]/,  i/
ops[ot].func_value:=false;
/,



l./procedure arrow;/,
l./begin/,  l1,  i/
if ops[ot].func_value then begin
type_ref;
with ops[ot] do begin
state:=addr;   context:=expr;
func_value:=false;
end;
end
else
begin
/,
l./end;/,  i/
end;
/,

; page 71

l./procedure literal;/,
l./num_const:/,
l./if val>max_int then val:=val + bit_0_8;/,
r/>/>=/,



; page 76

l./procedure end_struc;/,
l./dynamic:=false;/, i/
func_value:=false;
/,



; page 81

l./xchannel:put0(zchannel);/,
d,  i/
xchannel:     begin
if (* **z80** *) versionz80 then error(error_channel);
put0(zchannel);
end;
/,


f


«eof»