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

⟦471cbf423⟧ TextFileVerbose

    Length: 7680 (0x1e00)
    Types: TextFileVerbose
    Names: »em3502env«

Derivation

└─⟦041268bb6⟧ Bits:30003098 SW2001/2/3.02 RC3502 Operating System
    └─⟦6fc3bf78b⟧ 
        └─⟦this⟧ »em3502env« 

TextFileVerbose

em3502env;

(***********************************************************************)
(*                                                                     *)
(*                  entity management environment                      *)
(*                                                                     *)
(* description:                                                        *)
(* the em3502env defines the most common used constants and types      *)
(*     used by lcp's                                                   *)
(*                                                                     *)
(*   date    init   changes                                            *)
(*  -----------------------------------------------------------------  *)
(*   851128  oer    initial version                                    *)
(***********************************************************************)


const

time_lgt       =  12;      (* digits in time in supervisor message        *)
sp_head_lgt    =  17;      (* length of supervisor head (bytes)           *)
event_buf_size = 300;      (* no. of bytes in an event buffer             *)
sup_buf_size   = 300;      (* no. of bytes in a supervisor message buffer *)
sp_buf_lgt     = sup_buf_size;



type

(*********************************)
(****   supervisor messages   ****)
(*********************************)

lcp_ident_type = packed record
i: bit;
id: 0..32767;
end;

req_ans_type   = (req, ans);

mess_ev_type   = (mess, event);

ncp_cntr_type  = (no_ncp_cntr, ncp_cntr);

rep_func_type  = (start_rep, stop_rep);

rej_func_type  = (no_reject, reject);

stat_cntr_type = (no_reset_stat, reset_stat);

sp_type_type   = packed record
req_ans     : req_ans_type;
mess_ev     : mess_ev_type;
ncp_control : ncp_cntr_type;
rep_func    : rep_func_type;
rej_func    : rej_func_type;
stat_cntr   : stat_cntr_type;
?,?         : bit;
end;

basic_type  = (lcp_cntr,         (* lcp control operation *)
lcp_sense,        (* lcp sense operation *)
lcp_get_stat,     (* lcp get statistics operation *)
lcp_event);       (* lcp event operation *)

lcp_oper_type = packed record
modif  : 0..63;
basic  : basic_type;
end;

sp_status_bit = (sp_status_15,      (* module dependent status bit *)
sp_status_14,      (* module dependent status bit *)
sp_status_13,      (* module dependent status bit *)
sp_status_12,      (* module dependent status bit *)
sp_status_11,      (* module dependent status bit *)
sp_status_10,      (* module dependent status bit *)
ncp_status,        (* ncp originated status *)
rep_res_lack,      (* lack of repeat function resources *)
no_free_res,       (* no free resources available *)
dupl_func,         (* duplicate function *)
out_of_range,      (* out of range *)
illegal_state,     (* illegal state *)
data_error,        (* error found in supervisor data *)
lcp_unknown,       (* lcp with specified receiver_id not connected *)
ill_lcp_oper,      (* illegal lcp_oper *)
chain);            (* indicate chained supervisor messages *)

time_digit = 0..15;

sp_head_type = packed record
receiver_id  : lcp_ident_type;
sender_id    : lcp_ident_type;
seq_no       : byte;
sp_type      : sp_type_type;
lcp_oper     : lcp_oper_type;
status       : set of sp_status_bit;
time         : packed array(1..time_lgt) of time_digit;
bytecount    : integer;
end;
\f


const

(**********************************************)
(****   u1 values in messages to the ncp   ****)
(**********************************************)

connect_lcp    =  4;
disconnect_lcp =  8;
wait_message   = 12;       (* wait for a supervisor message    *)
req_event_buf  = 16;       (* get an event buffer, if any free *)
wait_event_buf = 20;       (* wait forever for an event buffer *)
exception_lcp  = 24;       (* exception in the connected lcp   *)



(************************************************)
(****   u1 values in messages from the ncp   ****)
(************************************************)

sup_mess_buf   = 12 + 3;   (* supervisor message buffer from the ncp *)
event_buf_req  = 16 + 3;   (* event buffer, when no wait             *)
event_buf_wait = 20 + 3;   (* event buffer, when waited forever      *)
\f



(**************************)
(****   lcp messages   ****)
(**************************)
type

lcp_conn_type = record     (* used in lcp connection *)
first,
last,
next       : integer;
lcp_ident  : lcp_ident_type;
end;

lcp_disc_type = lcp_conn_type;     (* used in lcp disconnection *)

lcp_exc_type = record     (* used in exception in lcp *)
first, last, next  : integer;
lcp_ident          : lcp_ident_type;
excode             : integer;
end;
\f



(*********************************)
(****   ncp procedure types   ****)
(*********************************)


em_zone_type = record
ncp_semp          : ! ^semaphore;
main              : ! ^semaphore;
event_spool       : semaphore;
event_buf_reqs    : semaphore;
?                 : pool 0;
?                 : reference;
lcp_id            : integer;
no_of_used_bytes  : integer;
no_of_free_bytes  : integer;
no_of_lost_events : integer;
?                 : integer;
end;

event_head_type = record
typ         : byte;
bytecount   : byte;
end;
\f



(*********************************)
(****   external procedures   ****)
(*********************************)


procedure em_initzone(
var  z           : em_zone_type; (* The lcp zone to be intiated            *)
sp_wait_heads    : integer;       (* The no of headers to wait for lcp mess *)
lcp_id           : integer;       (* The lcp_id of the lcp zone             *)
ncp              : ^semaphore;    (* The ncp semaphore pointer              *)
main             : ^semaphore;    (* The main sem pointer of the process    *)
event_stream     : byte;          (* The u4 val of the event request header *)
mess_stream      : byte);         (* The u4 val of the wait message headers *)
external;

procedure em_receive_request(
var z            : em_zone_type; (* The internal em_zone  *)
var msg          : reference;     (* The message received from the NCP *)
var basic_oper   : basic_type;    (* The basic lcp operation *)
var modif_oper   : integer ;      (* The modif of the lcp operation *)
var lower, upper : integer);      (* The lower and upper indexes of the *)
(*                                   sense and get statistics operations *)
external;

procedure em_pack_event(
var lcp_z    : em_zone_type;  (* The internal em_zone  *)
var event    : event_head_type);(* The event head of the event record *)
external;

procedure em_send_spooled_events(
var lcp_z   : em_zone_type;   (* The interna{ em_zone *)
var msg     : reference);      (* The event buffer received from the NCP*)
external;

procedure em_break(
var   z       : em_zone_type; (* The LCP zone of the module*)
exc_code      : integer);      (* The exception code*)
external;

procedure em_exclude(
var z : em_zone_type);
external;
(********************************************************************)
(*                                                                  *)
(*                  end of entity management environment            *)
(*                                                                  *)
(********************************************************************)
.
«eof»