ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page    1
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00001      0  0 [inherit( 'sys$library:starlet', 'pas$environment:nma' )]
00002      0  0 program ethernet_listener( input, output, recording_file );
00003      0  0  
00004   C  0  0 (*
00005   C  0  0 		Copyright (C) 1988, Arizona State Board of Regents
00006   C  0  0 			All rights reserved
00007   C  0  0 
00008   C  0  0 	Author:	Derwin Skipp
00009   C  0  0 	Computing Services Computer Center
00010   C  0  0 	Arizona State University
00011   C  0  0 	Tempe, Arizona  85287-0101
00012   C  0  0 	(602) 965-4574
00013   C  0  0 	BITNET: ICSDCS@ASUIC
00014   C  0  0 		KHDCS@ASUACAD
00015   C  0  0 
00016   C  0  0    Permission is granted to anyone to make or distribute copies
00017   C  0  0    of this software as received, in any medium, provided that the
00018   C  0  0    copyright notice and permission notice are preserved,
00019   C  0  0    and that the distributor grants the recipient permission
00020   C  0  0    for further redistribution as permitted by this notice.
00021   C  0  0 
00022   C  0  0 Program Description:
00023   C  0  0 
00024   C  0  0 	Ethernet Listener Program.
00025   C  0  0 
00026   C  0  0 Authors: 
00027   C  0  0  
00028   C  0  0 	DERWIN SKIPP
00029   C  0  0  
00030   C  0  0 Creation Date:	19-Feb-1988
00031   C  0  0  
00032   C  0  0  
00033   C  0  0 			C H A N G E   L O G
00034   C  0  0  
00035   C  0  0      Date     |   Name  | Description
00036   C  0  0 --------------+---------+-------------------------------------------------------
00037   C  0  0 19-Feb-88	KHDCS	 Original writting
00038   C  0  0 *)
00039      0  0 
00040      0  0 
00041      0  0 const
00042      0  0 	bell			= ''(7);
00043      0  0 	carriage_return		= ''(13);
00044      0  0 	esc			= ''(27);
00045      0  0 	line_feed		= ''(10);
00046      0  0 
00047      0  0         bells			= bell + bell + bell + bell;
00048      0  0 	control_z		= ''(26);
00049      0  0 	crlf			= carriage_return + line_feed;
00050      0  0 	ethernet_input_ef	= 40;
00051      0  0 	terminal_input_ef	= 41;
00052      0  0 	form_feed		= ''(12);
00053      0  0 	max_buffers		= 1000;
00054      0  0 	buffer_purge_factor	= 5;	(* 1/BPF of Buffers discarded if overflow *)
00055      0  0 	max_devices		= 1000;

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page    2
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00056      0  0 	max_string		= 512;
00057      0  0 	max_packet		= 1500;
00058      0  0 	max_protocol		= 200;
00059      0  0 	max_trace		= 60;
00060      0  0 	nul			= ''(0);
00061      0  0 	printable_chars			= '................................'
00062      0  0 					+ ' !"#$%&''()*+,-./0123456789:;<=>?'
00063      0  0 					+ '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'
00064      0  0 					+ '`abcdefghijklmnopqrstuvwxyz{|}~.'
00065      0  0 					+ '................................'
00066      0  0 					+ ' !"#$%&''()*+,-./0123456789:;<=>?'
00067      0  0 					+ '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'
00068      0  0 					+ '`abcdefghijklmnopqrstuvwxyz{|}~.';
00069      0  0 
00070   C  0  0 (*
00071   C  0  0 ***	Ethernet Protocols	
00072   C  0  0 *)
00073      0  0 	loopback_assistance_protocol	= ''(%x90) + ''(%x00);
00074      0  0 	dump_load_assistance_protocol	= ''(%x60) + ''(%x01);
00075      0  0 	remote_console_protocol		= ''(%x60) + ''(%x02);
00076      0  0 	routing_protocol		= ''(%x60) + ''(%x03);
00077      0  0 	lat_protocol			= ''(%x60) + ''(%x04);
00078      0  0 
00079      0  0 
00080   C  0  0 (*
00081   C  0  0 ***		Constants for Command Language Interpreter Routines	***
00082   C  0  0 *)
00083      0  0 
00084      0  0 	cli$_absent			= 229872;
00085      0  0 	cli$_defaulted			= 229872;
00086      0  0 	cli$_nocomd			= 229552;
00087      0  0 	cli$_normal			= 196609;
00088      0  0 	cli$_present			= 261401;
00089      0  0 
00090      0  0 
00091      0  0 type
00092      0  0 	$byte = [byte] -128..127;
00093      0  0 	$word = [word] -32768..32767;
00094      0  0 	$quad = [quad,unsafe] record
00095      0  0 		l0:unsigned; l1:integer; end;
00096      0  0 	$octa = [octa,unsafe] record
00097      0  0 		l0,l1,l2:unsigned; l3:integer; end;
00098      0  0 	$ubyte = [byte] 0..255;
00099      0  0 	$uword = [word] 0..65535;
00100      0  0 	$uquad = [quad,unsafe] record
00101      0  0 		l0,l1:unsigned; end;
00102      0  0 	$uocta = [octa,unsafe] record
00103      0  0 		l0,l1,l2,l3:unsigned; end;
00104      0  0 	$packed_dec = [bit(4),unsafe] 0..15;
00105      0  0 	$deftyp = [unsafe] integer;
00106      0  0 	$defptr = [unsafe] ^$deftyp;
00107      0  0 	$bool = [bit(1),unsafe] boolean;
00108      0  0 	$bit2 = [bit(2),unsafe] 0..3;
00109      0  0 	$bit3 = [bit(3),unsafe] 0..7;
00110      0  0 	$bit4 = [bit(4),unsafe] 0..15;

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page    3
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00111      0  0 	$bit5 = [bit(5),unsafe] 0..31;
00112      0  0 	$bit6 = [bit(6),unsafe] 0..63;
00113      0  0 	$bit7 = [bit(7),unsafe] 0..127;
00114      0  0 	$bit8 = [bit(8),unsafe] 0..255;
00115      0  0 	$bit9 = [bit(9),unsafe] 0..511;
00116      0  0 	$bit10 = [bit(10),unsafe] 0..1023;
00117      0  0 	$bit11 = [bit(11),unsafe] 0..2047;
00118      0  0 	$bit12 = [bit(12),unsafe] 0..4095;
00119      0  0 	$bit13 = [bit(13),unsafe] 0..8191;
00120      0  0 	$bit14 = [bit(14),unsafe] 0..16383;
00121      0  0 	$bit15 = [bit(15),unsafe] 0..32767;
00122      0  0 	$bit16 = [bit(16),unsafe] 0..65535;
00123      0  0 	$bit17 = [bit(17),unsafe] 0..131071;
00124      0  0 	$bit18 = [bit(18),unsafe] 0..262143;
00125      0  0 	$bit19 = [bit(19),unsafe] 0..524287;
00126      0  0 	$bit20 = [bit(20),unsafe] 0..1048575;
00127      0  0 	$bit21 = [bit(21),unsafe] 0..2097151;
00128      0  0 	$bit22 = [bit(22),unsafe] 0..4194303;
00129      0  0 	$bit23 = [bit(23),unsafe] 0..8388607;
00130      0  0 	$bit24 = [bit(24),unsafe] 0..16777215;
00131      0  0 	$bit25 = [bit(25),unsafe] 0..33554431;
00132      0  0 	$bit26 = [bit(26),unsafe] 0..67108863;
00133      0  0 	$bit27 = [bit(27),unsafe] 0..134217727;
00134      0  0 	$bit28 = [bit(28),unsafe] 0..268435455;
00135      0  0 	$bit29 = [bit(29),unsafe] 0..536870911;
00136      0  0 	$bit30 = [bit(30),unsafe] 0..1073741823;
00137      0  0 	$bit31 = [bit(31),unsafe] 0..2147483647;
00138      0  0 	$bit32 = [bit(32),unsafe] unsigned;
00139      0  0 
00140      0  0 	node_types		= ( terminal_server, host, unknown );
00141      0  0 	ethernet_packet		= varying[max_packet] of char;
00142      0  0 	io_status_block		= record
00143      0  0 				status		: $uword;
00144      0  0 				byte_count	: $uword;
00145      0  0 				error_summary	: unsigned;
00146      0  0 				end;
00147      0  0 	string			= varying[max_string] of char;
00148      0  0 	translation_table	= packed array [1..256] of char;
00149      0  0 	vt100_attributes	= ( bold, none );
00150      0  0 	counter_rec_type	= ( control, data );
00151      0  0 	counter			= record case record_type : counter_rec_type of
00152      0  0 				control : (
00153      0  0 					time_stamp	: $quad;
00154      0  0 					active		: integer;
00155      0  0 					counters	: integer
00156      0  0 					);
00157      0  0 				data : (
00158      0  0 					addrs		: packed array[1..14] of char;
00159      0  0 					packet_count	: integer;
00160      0  0 					byte_count	: integer
00161      0  0 					);
00162      0  0 				end;
00163      0  0 	
00164      0  0 
00165      0  0 var

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page    4
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00166      0  0 
00167   C  0  0 (*
00168   C  0  0 ***		Variables Global to Ethernet Monitor
00169   C  0  0 *)
00170      0  0 	active_counters		: integer;
00171      0  0 	counter_list		: array [1..10000] of counter;
00172      0  0 	counter_ptr		: integer;
00173      0  0 	counter_list_size	: integer;
00174      0  0 	column_number		: integer;
00175      0  0 	current_date		: packed array[1..11] of char;
00176      0  0 	current_time		: packed array[1..11] of char;
00177      0  0 	destination		: string;
00178      0  0 	destination_ptr		: integer;
00179      0  0 	device_name		: array[1..max_devices] of varying[12] of char;
00180      0  0 	device_type		: array[1..max_devices] of node_types;
00181      0  0 	display_attribute	: vt100_attributes;
00182      0  0 	display			: unsigned;
00183      0  0 	display_attributes	: unsigned;
00184      0  0 	display_columns		: integer;
00185      0  0 	display_rows		: integer;
00186      0  0 	event_flags		: unsigned;
00187      0  0 	grand_total_bytes	: integer;
00188      0  0 	highest_protocol	: integer;
00189      0  0 	i			: integer;
00190      0  0 	in_cols			: integer;
00191      0  0 	in_rows			: integer;
00192      0  0 	message			: string;
00193      0  0 	packet_buffer		: ethernet_packet;
00194      0  0 	pasteboard_column	: integer;
00195      0  0 	pasteboard_row		: integer;
00196      0  0 	previous_device_count	: integer;
00197      0  0 	previous_selected_address : integer;
00198      0  0 	previous_selected_protocol : integer;
00199      0  0 	protocol		: string;
00200      0  0 	protocol_type		: string;
00201      0  0 	protocol_ptr		: integer;
00202      0  0 	recording_file		: file of counter;
00203      0  0 	recording_record	: counter;
00204      0  0 	row_number		: integer;
00205      0  0 	setparam		: packed array[1..5] of record
00206      0  0 				parameter_id : $uword;
00207      0  0 				parameter_value : unsigned;
00208      0  0 				end;
00209      0  0 
00210      0  0 	setparamdsc		: record
00211      0  0 				  len : integer;
00212      0  0 				  address : integer;
00213      0  0 				  end;
00214      0  0 	source			: string;
00215      0  0 	source_ptr		: integer;
00216      0  0 	start_date		: packed array[1..11] of char;
00217      0  0 	start_time		: packed array[1..11] of char;
00218      0  0 	target_protocol		: string;
00219      0  0 	target_address		: string;
00220      0  0 	terminal_channel	: $uword;

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page    5
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00221      0  0 	terminal_iosb		: io_status_block;
00222      0  0 	time_stamp		: $quad;
00223      0  0 	trace_name		: packed array[1..max_trace] of string;
00224      0  0 	trace_address		: packed array[1..max_trace] of string;
00225      0  0 	trace_packets_in	: packed array[1..max_trace] of integer;
00226      0  0 	trace_packets_out	: packed array[1..max_trace] of integer;
00227      0  0 	trace_bytes_in		: packed array[1..max_trace] of integer;
00228      0  0 	trace_bytes_out		: packed array[1..max_trace] of integer;
00229      0  0 	trace_count		: integer;
00230      0  0 	trace_ptr		: integer;
00231      0  0 	xqdev			: string;
00232      0  0 	xedev			: string;
00233      0  0 	filler			: ethernet_packet;
00234   C  0  0 (*
00235   C  0  0 ***		Variables Global to Ethernet Monitor and AST routines
00236   C  0  0 *)
00237      0  0 	addrs			: [volatile] packed array [1..14] of char;
00238      0  0 	addrs_list		: [volatile] array[1..max_buffers] of packed array [1..14] of char;
00239      0  0 	buffer			: [volatile] array[1..max_buffers] of ethernet_packet;
00240      0  0 	buffer_timestamp	: [volatile] array[1..max_buffers] of $quad;
00241      0  0 	buffer_list_current	: [volatile] integer;
00242      0  0 	buffer_list_size	: [volatile] integer;
00243      0  0 	buffer_list_head	: [volatile] integer;
00244      0  0 	buffer_list_next	: [volatile] integer;
00245      0  0 	buffer_list_tail	: [volatile] integer;
00246      0  0 	chan			: [volatile] $uword;
00247      0  0         call_status		: [volatile] integer;
00248      0  0 	device_address		: [volatile] array[1..max_devices] of packed array [1..6] of char;
00249      0  0 	device_count		: [volatile] integer;
00250      0  0 	done			: [volatile] boolean;
00251      0  0 	event_ethernet		: [volatile] boolean;
00252      0  0 	event_terminal		: [volatile] boolean;
00253      0  0 	outfilename		: string;
00254      0  0 	iosb			: [volatile] io_status_block;
00255      0  0 	interval		: [volatile] string;
00256      0  0 	key_code		: [volatile] $uword;
00257      0  0 	keyboard		: [volatile] unsigned;
00258      0  0 	discarded_buffers	: [volatile] integer;
00259      0  0 	monitor_function	: [volatile] (
00260      0  0 					connect_node,
00261      0  0 					set_information,
00262      0  0 					map_ethernet,
00263      0  0 					protocol_display, 
00264      0  0 					device_trace,
00265      0  0 					clear_information,
00266      0  0 					dump_ethernet );
00267      0  0 	protocol_packet_type	: [volatile] array [1..max_protocol] of string;
00268      0  0 	protocol_type_name	: [volatile] array [1..max_protocol] of string;
00269      0  0 	protocol_packet_count	: [volatile] array [1..max_protocol] of integer;
00270      0  0 	protocol_packet_bytes	: [volatile] array [1..max_protocol] of integer;
00271      0  0 	protocol_packet_total_count	: [volatile] array [1..max_protocol] of integer;
00272      0  0 	protocol_packet_total_bytes	: [volatile] array [1..max_protocol] of integer;
00273      0  0 	protocol_packet_avg_size	: [volatile] array [1..max_protocol] of real;
00274      0  0 	protocol_packet_max_size	: [volatile] array [1..max_protocol] of real;
00275      0  0 	protocol_packet_min_size	: [volatile] array [1..max_protocol] of real;

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page    6
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00276      0  0 	protocol_count		: [volatile] integer;
00277      0  0 	screen			: [volatile] unsigned;
00278      0  0 	selected_address	: [volatile] integer;
00279      0  0 	selected_protocol	: [volatile] integer;
00280      0  0 	time_to_save_counters		: [volatile] boolean;
00281      0  0 	total_packets_received	: [volatile] integer;
00282      0  0 	total_packets_processed	: [volatile] integer;
00283      0  0 
00284      0  0 
00285   C  0  0 (*
00286   C  0  0 ***		External Routine Declaration Section
00287   C  0  0 ***		Run time library modules
00288   C  0  0 *)
00289      0  0 
00290      1  0 [asynchronous,external( cli$dcl_parse )] function cli$dcl_parse( 
00291      1  0 	%descr command_string	: string := %immed 0;
00292      1  0 	%ref table 		: integer := %immed 0;
00293      1  0 	%immed [unbound, asynchronous] procedure param_routine := %immed 0;
00294      1  0 	%immed [unbound, asynchronous] procedure prompt_routine := %immed 0;
00295      1  0 	%descr prompt_string	: string := %immed 0
00296      0  0 				) : integer; external;
00297      0  0 
00298      0  0 
00299      1  0 [asynchronous,external( cli$dispatch )] function cli$dispatch(
00300      1  0 	%immed userarg		: unsigned := %immed 0
00301      0  0 				) : integer; external;
00302      0  0 
00303      0  0 
00304      1  0 [asynchronous,external( cli$get_value )] function cli$get_value(
00305      1  0 	%descr entity_desc	: string;
00306      1  0 	%descr retdesc		: string;
00307      1  0 	%ref retlength		: $uword := 0
00308      0  0 				) : integer; external;
00309      0  0 
00310      0  0 
00311      1  0 [asynchronous,external( cli$present )] function cli$present(
00312      1  0 	%descr entity_desc	: string
00313      0  0 				) : integer; external;
00314      0  0 
00315      0  0 
00316      1  0 [asynchronous,external( lib$wait )] function lib$wait( 
00317      1  0 	var seconds		: [volatile] real
00318      0  0 				) : integer; external;
00319      0  0 
00320      0  0 
00321   C  0  0 (*
00322   C  0  0 ***		Global Functions and Procedures
00323   C  0  0 *)
00324      0  0 
00325      0  0 
00326      1  0 procedure determine_cli_environment;
00327      1  0 
00328      1  1     begin
00329      1  1     if cli$present( 'interval' ) = cli$_present then
00330      1  1 	call_status := cli$get_value( 'interval', interval )

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page    7
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00331      1  1     else
00332      1  1 	interval := '0 0:5:0.0';
00333      1  1     if cli$present( 'output' ) = cli$_present then
00334      1  1 	call_status := cli$get_value( 'output', outfilename )
00335      1  1     else
00336      1  1 	outfilename := '';
00337      0  0     end;
00338      0  0 
00339      0  0 
00340      1  0 [asynchronous, unbound] procedure init_context;
00341      1  0 
00342      1  0 
00343      1  0 var
00344      1  0 	i			: integer;
00345      1  0 
00346      1  1     begin
00347      1  1     total_packets_processed := 0;
00348      1  1     total_packets_received := 0;
00349      1  1     discarded_buffers := 0;
00350      1  1     buffer_list_size := 0;
00351      1  1     buffer_list_current := 0;
00352      1  1     buffer_list_head := 1;
00353      1  1     buffer_list_tail := 0;
00354      1  1     buffer_list_next := 1;
00355      1  1     for i := 1 to protocol_count do
00356      1  2 	begin
00357      1  2 	protocol_packet_count[i] := 0;
00358      1  2 	protocol_packet_bytes[i] := 0;
00359      1  2 	protocol_packet_total_count[i] := 0;
00360      1  2 	protocol_packet_total_bytes[i] := 0;
00361      1  2 	protocol_packet_avg_size[i] := 0;
00362      1  2 	protocol_packet_max_size[i] := 0;
00363      1  2 	protocol_packet_min_size[i] := 0;
00364      1  1 	end;
00365      0  0     end;
00366      0  0 
00367      0  0 
00368      1  0 [asynchronous, unbound] procedure read_ethernet;
00369      1  0 
00370      2  0     [asynchronous, unbound] procedure ethernet_read_ast;
00371      2  0 
00372      2  0     var
00373      2  0 	ef_check		: unsigned;
00374      2  0 	device_match		: boolean;
00375      2  0 	protocol_match		: boolean;
00376      2  0 	destination		: packed array[1..6] of char;
00377      2  0 	source			: packed array[1..6] of char;
00378      2  0 	protocol		: packed array[1..2] of char;
00379      2  0 
00380      2  1 	begin
00381   C  2  1 (*
00382   C  2  1 ***	Let's make sure that we haven't canned the IO request
00383   C  2  1 *)
00384      2  1 	if	( iosb.status <> ss$_abort )
00385      2  1 		and

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page    8
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00386      2  1 		( iosb.status <> ss$_cancel )
00387      2  1 	then
00388   C  2  1 (*
00389   C  2  1 ***	Ah Ha!  We have a packet.
00390   C  2  1 ***	Lets check to see if it matches our selection criteria.  First,
00391   C  2  1 ***	assume that we are not fussy then check if we are selecting by
00392   C  2  1 ***	protocol or address.
00393   C  2  1 *)
00394      2  2 	    begin
00395      2  2 	    device_match := true;
00396      2  2 	    protocol_match := true;
00397      2  2 	    if selected_address <> 0 then
00398      2  3 		begin
00399      2  3 		source := substr( addrs_list[buffer_list_next], 7, 6 );
00400      2  3 		destination := substr( addrs_list[buffer_list_next], 1, 6 );
00401      2  3 		if not ( source = device_address[selected_address] )
00402      2  3 		    and not ( destination = device_address[selected_address] ) then
00403      2  3 		    device_match := false;
00404      2  2 		end;
00405      2  2 	    if selected_protocol <> 0 then
00406      2  3 		begin
00407      2  3 		protocol := substr( addrs_list[buffer_list_next], 13, 2 );
00408      2  3 		if protocol <> protocol_packet_type[selected_protocol] then
00409      2  3 		    protocol_match := false;
00410      2  2 		end;
00411      2  2 	    if device_match and protocol_match then
00412      2  3 		begin
00413   C  2  3 (*
00414   C  2  3 ***		It's one that we have been waiting for ...
00415   C  2  3 ***		Lets declare the event and add to buffer list	
00416   C  2  3 *)
00417      2  3 		$readef( ethernet_input_ef, ef_check );
00418      2  3 		if uand( ef_check, ethernet_input_ef ) = 0 then
00419      2  3 		    $setef( ethernet_input_ef );
00420      2  3 		event_ethernet := true;
00421      2  3 		buffer[buffer_list_next].length := iosb.byte_count;
00422      2  3 		total_packets_received := total_packets_received + 1;
00423      2  3 
00424   C  2  3 (*
00425   C  2  3 ***		Let's time stamp it and adjust list pointers	
00426   C  2  3 *)
00427      2  3 		$gettim( buffer_timestamp[buffer_list_next] );
00428      2  3 		buffer_list_tail := buffer_list_next;
00429      2  3 		buffer_list_next := buffer_list_next + 1;
00430      2  3 		if buffer_list_next > max_buffers then
00431      2  3 		    buffer_list_next := 1;
00432      2  3 		buffer_list_size := buffer_list_size + 1;
00433   C  2  3 (*
00434   C  2  3 ***		If we're out of buffers, then throw some away.
00435   C  2  3 *)
00436      2  3 		if buffer_list_size = max_buffers then
00437      2  4 			begin
00438      2  4 			discarded_buffers := discarded_buffers + max_buffers div buffer_purge_factor;
00439      2  4 			buffer_list_size := buffer_list_size - max_buffers div buffer_purge_factor;
00440      2  4 			buffer_list_tail := buffer_list_tail - max_buffers div buffer_purge_factor;

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page    9
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00441      2  4 			if buffer_list_tail < 1 then
00442      2  4 			    buffer_list_tail := max_buffers + buffer_list_tail;
00443      2  4 			buffer_list_next := buffer_list_next - max_buffers div buffer_purge_factor;
00444      2  4 	   		if buffer_list_next < 1 then
00445      2  4 			    buffer_list_next := max_buffers + buffer_list_next;
00446      2  3 			end;
00447      2  2 		end;
00448      2  1 	    end;
00449      2  1 	read_ethernet;
00450      1  0 	end;
00451      1  0 
00452      1  0 
00453      1  1     begin
00454      1  1     call_status := $qio(
00455      1  1 	chan := chan,
00456      1  1 	func := io$_readvblk,
00457      1  1 	iosb := iosb,
00458      1  1 	astadr := ethernet_read_ast,
00459      1  1 	p1 := buffer[buffer_list_next].body,
00460      1  1 	p2 := max_packet,
00461      1  1 	p5 := iaddress( addrs_list[buffer_list_next] ));
00462      0  0     end;
00463      0  0 
00464      0  0 
00465      1  0 procedure report_error( id : integer; call_status : integer );
00466      1  0 
00467      1  0 var
00468      1  0 	message			: string;
00469      1  0 
00470      1  1     begin
00471      1  1     $getmsg( call_status, message.length, message.body );
00472      1  1     writeln( id : 2, ' Call status is ', call_status );
00473      1  1     writeln( message );
00474      0  0     end;
00475      0  0 
00476      0  0 
00477      1  0 procedure init;
00478      1  0 
00479      1  1     begin
00480      1  1     init_context;
00481      1  1     event_ethernet := false;
00482      1  1     event_terminal := false;
00483      1  1     time_to_save_counters := false;
00484      1  1     previous_selected_address := 0;
00485      1  1     previous_selected_protocol := 0;
00486      1  1     selected_address := 0;
00487      1  1     selected_protocol := 0;
00488      1  1     xqdev := 'XQA0';
00489      1  1     xedev := 'XEA0';
00490      1  1     call_status := $assign( xqdev, chan );
00491      1  1     if (call_status <> ss$_normal) then
00492      1  2 	begin
00493      1  2 	call_status := $assign( xedev, chan );
00494      1  2 	if (call_status <> ss$_normal ) then
00495      1  2 	    report_error( 1, call_status );

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   10
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00496      1  1 	end;
00497      1  1     monitor_function := map_ethernet;
00498      1  1     discarded_buffers := 0;
00499      1  1     grand_total_bytes := 0;
00500      1  1     total_packets_processed := 0;
00501      1  1     total_packets_received := 0;
00502      1  1     highest_protocol := 0;
00503      1  1     trace_count := 0;
00504      1  1     counter_list_size := 0;
00505      1  1     recording_record.active := 0;
00506      1  1     recording_record.counters := 0;
00507      0  0     end;
00508      0  0 
00509      0  0 
00510      1  0 procedure startup_ethernet_port;
00511      1  0 
00512      1  1     begin
00513      1  1     setparam[1].parameter_id	:= nma$c_pcli_prm;
00514      1  1     setparam[1].parameter_value	:= nma$c_state_on;
00515      1  1     setparam[2].parameter_id	:= nma$c_pcli_pty;
00516      1  1     setparam[2].parameter_value	:= %x'FFFF';
00517      1  1     setparam[3].parameter_id	:= nma$c_pcli_pad;
00518      1  1     setparam[3].parameter_value	:= nma$c_state_off;
00519      1  1     setparam[4].parameter_id	:= nma$c_pcli_pha;
00520      1  1     setparam[4].parameter_value	:= nma$c_linmc_clr * 2**16 + 2;
00521      1  1     setparam[5].parameter_id	:= nma$c_pcli_bus;
00522      1  1     setparam[5].parameter_value	:= max_packet;
00523      1  1     setparamdsc.len		:= 30;
00524      1  1     setparamdsc.address		:= iaddress( setparam );
00525      1  1     call_status := $qiow(
00526      1  1 	chan := chan,
00527      1  1 	func := io$_setmode + io$m_ctrl + io$m_startup,
00528      1  1 	iosb := iosb,
00529      1  1 	p2 := iaddress( setparamdsc ));
00530      1  1     if call_status <> ss$_normal then
00531      1  1 	report_error( 2, call_status );
00532      1  1     if iosb.status <> ss$_normal then
00533      1  2 	begin
00534      1  2 	if iosb.status = ss$_badparam then
00535      1  2 	    writeln( 'iosb = ', hex( iosb.status, 4,4 ), iosb.error_summary );
00536      1  2 	report_error( 3, iosb.status );
00537      1  1 	end;
00538      0  0     end;
00539      0  0 
00540      0  0 
00541      1  0 procedure update_totals( addrs : string; length : integer);
00542      1  0 
00543      1  0 var
00544      1  0 	counter_ptr		: integer;
00545      1  0 
00546      1  1     begin
00547      1  1     counter_ptr := 1;
00548      1  1     while ( counter_ptr <= counter_list_size )
00549      1  1 	and ( counter_list[counter_ptr].addrs <> addrs )
00550      1  1     do

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   11
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00551      1  1 	counter_ptr := counter_ptr + 1;
00552      1  1     if counter_ptr > counter_list_size then
00553      1  2 	begin
00554      1  2 	counter_list_size := counter_ptr;
00555      1  2 	counter_list[counter_ptr].addrs := addrs;
00556      1  2 	counter_list[counter_ptr].packet_count := 1;
00557      1  2 	counter_list[counter_ptr].byte_count := length;
00558      1  2 	end
00559      1  1     else
00560      1  2 	begin
00561      1  2 	counter_list[counter_ptr].packet_count :=
00562      1  2 	    counter_list[counter_ptr].packet_count + 1;
00563      1  2 	counter_list[counter_ptr].byte_count :=
00564      1  2 	    counter_list[counter_ptr].byte_count + length;
00565      1  2 	end
00566      0  0     end;
00567      0  0 
00568      0  0 
00569      1  0 [asynchronous, unbound] procedure reset_display_time;
00570      1  0 
00571      2  0     [asynchronous, unbound] procedure timer_ast;
00572      2  0 
00573      2  1 	begin
00574      2  1 	time_to_save_counters := true;
00575      2  1 	reset_display_time;
00576      1  0 	end;
00577      1  0 
00578      1  0 
00579      1  0 var
00580      1  0 	display_time		: $quad;
00581      1  0 
00582      1  1     begin
00583      1  1     $bintim( interval, display_time );
00584      1  1     $setimr( daytim := display_time, astadr := timer_ast );
00585      0  0     end;
00586      0  0 
00587      0  0 
00588   C  0  0 (*
00589   C  0  0 ***	P R O G R A M   M A I N
00590   C  0  0 *)
00591      0  0 
00592      0  1 begin
00593      0  1 determine_cli_environment;
00594      0  1 init;
00595      0  1 open(
00596      0  1 	file_variable	:= recording_file,
00597      0  1 	file_name	:= outfilename,
00598      0  1 	history		:= new,
00599      0  1 	sharing		:= readonly,
00600      0  1 	default		:= 'EMON$DIR:ETHERNET$COUNTS.DAT' );
00601      0  1 rewrite( recording_file );
00602      0  1 startup_ethernet_port;
00603   C  0  1 (*
00604   C  0  1 ***	Set up Ethernet Read AST
00605   C  0  1 *)

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   12
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00606      0  1 read_ethernet;
00607      0  1 date( start_date );
00608      0  1 time( start_time );
00609      0  1 reset_display_time;
00610      0  1 $gettim( time_stamp );
00611      0  1 writeln( 'Starting ethernet recording at ',
00612      0  1     start_date, ' ', start_time,
00613      0  1     ' with interval = ', interval );
00614      0  1 done := false;
00615      0  1 while not done do
00616      0  2     begin
00617      0  2     if buffer_list_current = buffer_list_tail then
00618      0  3 	begin
00619      0  3 	$clref( ethernet_input_ef );
00620      0  3 	$waitfr( ethernet_input_ef );
00621      0  2 	end;
00622      0  2     while buffer_list_current <> buffer_list_tail do
00623      0  3 	begin
00624   C  0  3 (*
00625   C  0  3 ***	Grab next packet off packet list
00626   C  0  3 *)
00627      0  3 	buffer_list_current := buffer_list_current + 1;
00628      0  3 	if buffer_list_current > max_buffers then
00629      0  3 	    buffer_list_current := 1;
00630      0  3 	buffer_list_size := buffer_list_size - 1;
00631      0  3 	buffer_list_head := buffer_list_current;
00632      0  3 	packet_buffer := buffer[buffer_list_current];
00633      0  3 	addrs := addrs_list[buffer_list_current];
00634   C  0  3 (*
00635   C  0  3 ***	Calculate total packets processed and total bytes transfered
00636   C  0  3 *)
00637      0  3 	total_packets_processed := total_packets_processed + 1;
00638      0  3 	grand_total_bytes := grand_total_bytes + length( packet_buffer );
00639      0  3 	update_totals( addrs, length( packet_buffer ));
00640   C  0  3 (*
00641   C  0  3 ***	If time to save counters then save counters
00642   C  0  3 *)
00643      0  3 	if time_to_save_counters then
00644      0  4 	    begin
00645      0  4 	    time_to_save_counters := false;
00646      0  4 	    recording_record.time_stamp := time_stamp;
00647      0  4 	    $gettim( time_stamp );
00648      0  4 	    recording_record.record_type := control;
00649      0  4 	    write( recording_file, recording_record );
00650      0  4 	    writeln( '  Count Current    Head    Tail    Next Discard Receive   Total' );
00651      0  4 	    writeln( buffer_list_size:7,
00652      0  4 		buffer_list_current:8,
00653      0  4 		buffer_list_head:8,
00654      0  4 		buffer_list_tail:8,
00655      0  4 		buffer_list_next:8,
00656      0  4 		discarded_buffers:8,
00657      0  4 		total_packets_received:8,
00658      0  4 		total_packets_processed:8
00659      0  4 		);
00660      0  4 	    date( current_date );

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   13
01                              Source Listing                  27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

-LINE-IDC-PL-SL-

00661      0  4 	    time( current_time );
00662      0  4 	    active_counters := 0;
00663      0  4 	    for counter_ptr := 1 to counter_list_size do
00664      0  5 		begin
00665      0  5 		if counter_list[counter_ptr].packet_count <> 0 then
00666      0  6 		    begin
00667      0  6 		    active_counters := active_counters + 1;
00668      0  6 		    recording_record.record_type := data;
00669      0  6 		    recording_record.addrs := counter_list[counter_ptr].addrs;
00670      0  6 		    recording_record.packet_count := counter_list[counter_ptr].packet_count;
00671      0  6 		    recording_record.byte_count := counter_list[counter_ptr].byte_count;
00672      0  6 		    write( recording_file, recording_record );
00673      0  6 		    counter_list[counter_ptr].packet_count := 0;
00674      0  6 		    counter_list[counter_ptr].byte_count := 0;
00675      0  5 		    end;
00676      0  4 		end;
00677      0  4 	    recording_record.active := active_counters;
00678      0  4 	    recording_record.counters :=  counter_list_size;
00679      0  4 	    writeln( buffer_list_size:7,
00680      0  4 		buffer_list_current:8,
00681      0  4 		buffer_list_head:8,
00682      0  4 		buffer_list_tail:8,
00683      0  4 		buffer_list_next:8,
00684      0  4 		discarded_buffers:8,
00685      0  4 		total_packets_received:8,
00686      0  4 		total_packets_processed:8
00687      0  4 		);
00688      0  4 	    writeln( 'Counter list size = ',
00689      0  4 		counter_list_size:1,
00690      0  4 		'    Active counters = ',
00691      0  4 		active_counters:1
00692      0  4 		);
00693      0  4 	    writeln;
00694      0  3 	    end;
00695      0  2 	end;
00696      0  1     end;
00697      0  1 $cancel( chan );
00698      0  1 close( recording_file );
00699      0  1 call_status := $qio(
00700      0  1 	chan := chan,
00701      0  1 	func := io$_setmode + io$m_ctrl + io$m_shutdown,
00702      0  1 	iosb := iosb );
00703      0  1 if call_status <> ss$_normal then
00704      0  1     report_error( 8, call_status );
00705      0  1 call_status := $dassgn( chan );
00706      0  0 end.

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   14
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

$ASSIGN				FUNC  [HIDDEN, EXTERNAL(SYS$ASSIGN), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      490      493    
$BINTIM				FUNC  [HIDDEN, EXTERNAL(SYS$BINTIM), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      583    
$BIT10				TYPE  [BIT(10), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  116    
$BIT11				TYPE  [BIT(11), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  117    
$BIT12				TYPE  [BIT(12), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  118    
$BIT13				TYPE  [BIT(13), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  119    
$BIT14				TYPE  [BIT(14), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  120    
$BIT15				TYPE  [BIT(15), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  121    
$BIT16				TYPE  [WORD, UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  122    
$BIT17				TYPE  [BIT(17), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  123    
$BIT18				TYPE  [BIT(18), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  124    
$BIT19				TYPE  [BIT(19), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  125    
$BIT2				TYPE  [BIT(2), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  108    
$BIT20				TYPE  [BIT(20), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  126    
$BIT21				TYPE  [BIT(21), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  127    
$BIT22				TYPE  [BIT(22), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  128    
$BIT23				TYPE  [BIT(23), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  129    
$BIT24				TYPE  [BYTE(3), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  130    
$BIT25				TYPE  [BIT(25), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  131    
$BIT26				TYPE  [BIT(26), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  132    
$BIT27				TYPE  [BIT(27), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  133    
$BIT28				TYPE  [BIT(28), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  134    
$BIT29				TYPE  [BIT(29), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  135    
$BIT3				TYPE  [BIT(3), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  109    
$BIT30				TYPE  [BIT(30), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  136    
$BIT31				TYPE  [BIT(31), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  137    
$BIT32				TYPE  [LONG, UNSAFE] UNSIGNED { IN PROGRAM ETHERNET_LISTENER }
					  138    
$BIT4				TYPE  [BIT(4), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  110    
$BIT5				TYPE  [BIT(5), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   15
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

					  111    
$BIT6				TYPE  [BIT(6), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  112    
$BIT7				TYPE  [BIT(7), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  113    
$BIT8				TYPE  [BYTE, UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  114    
$BIT9				TYPE  [BIT(9), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  115    
$BOOL				TYPE  [BIT, UNSAFE] BOOLEAN { IN PROGRAM ETHERNET_LISTENER }
					  107    
$BYTE				TYPE  [BYTE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					   92    
$CANCEL				FUNC  [HIDDEN, EXTERNAL(SYS$CANCEL), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      697    
$CLREF				FUNC  [HIDDEN, EXTERNAL(SYS$CLREF), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      619    
$DASSGN				FUNC  [HIDDEN, EXTERNAL(SYS$DASSGN), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      705    
$DEFPTR				TYPE  [UNSAFE] POINTER TO INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  106    
$DEFTYP				TYPE  [UNSAFE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  105      106    
$GETMSG				FUNC  [HIDDEN, EXTERNAL(SYS$GETMSG), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      471    
$GETTIM				FUNC  [HIDDEN, EXTERNAL(SYS$GETTIM), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      427      610      647    
$OCTA				TYPE  [OCTA, UNSAFE] RECORD { IN PROGRAM ETHERNET_LISTENER }
					   96    
$PACKED_DEC			TYPE  [BIT(4), UNSAFE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  104    
$QIO				FUNC  [HIDDEN, EXTERNAL(SYS$QIO), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      454      699    
$QIOW				FUNC  [HIDDEN, EXTERNAL(SYS$QIOW), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      525    
$QUAD				TYPE  [QUAD, UNSAFE] RECORD { IN PROGRAM ETHERNET_LISTENER }
					   94      153      222      240      580    
$READEF				FUNC  [HIDDEN, EXTERNAL(SYS$READEF), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      417    
$SETEF				FUNC  [HIDDEN, EXTERNAL(SYS$SETEF), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      419    
$SETIMR				FUNC  [HIDDEN, EXTERNAL(SYS$SETIMR), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      584    
$UBYTE				TYPE  [BYTE] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					   98    
$UOCTA				TYPE  [OCTA, UNSAFE] RECORD { IN PROGRAM ETHERNET_LISTENER }
					  102    
$UQUAD				TYPE  [QUAD, UNSAFE] RECORD { IN PROGRAM ETHERNET_LISTENER }
					  100    
$UWORD				TYPE  [WORD] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					   99      143      144      206      220      246      256      307    
$WAITFR				FUNC  [HIDDEN, EXTERNAL(SYS$WAITFR), UNBOUND, ASYNCHRONOUS] : INTEGER { FROM ENVIRONMENT #1 }
					    *      620    
$WORD				TYPE  [WORD] SUBRANGE OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					   93    
ACTIVE				FIELD { IN COUNTER } INTEGER
					  154      505 =    677 =  

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   16
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

ACTIVE_COUNTERS			VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  170      662 =    667 =    667      677      691    
ADDRESS				FIELD INTEGER
					  212      524 =  
ADDRS				FIELD { IN COUNTER } ARRAY OF CHAR
					  158      549      555 =    669 =    669    
ADDRS				VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF CHAR { IN PROGRAM ETHERNET_LISTENER }
					  237      633 =    639    
ADDRS				PARM  STRING { IN PROCEDURE UPDATE_TOTALS }
					  541      549      555    
ADDRS_LIST			VAR   [PSECT($LOCAL), VOLATILE] ARRAY { IN PROGRAM ETHERNET_LISTENER }
					  238      399      400      407      461 A    633    
ASTADR				PARM  [EXTERNAL, UNBOUND, ASYNCHRONOUS] PROCEDURE 
					    *      458    
ASTADR				PARM  [EXTERNAL, UNBOUND, ASYNCHRONOUS] PROCEDURE 
					    *      584    
BELL				CONST ''(7) { IN PROGRAM ETHERNET_LISTENER }
					   42       47       47       47       47    
BELLS				CONST ''(7,7,7,7) { IN PROGRAM ETHERNET_LISTENER }
					   47    
BOLD				CONST 'BOLD = 0' { IN PROGRAM ETHERNET_LISTENER }
					  149    
BOOLEAN				TYPE  
					    *      107      250      251      252      280      374      375    
BUFFER				VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF ETHERNET_PACKET { IN PROGRAM ETHERNET_LISTENER }
					  239      421 =    459 P    632    
BUFFER_LIST_CURRENT		VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  241      351 =    617      622      627 =    627      628      629 =    631      632    
					  633      652      680    
BUFFER_LIST_HEAD		VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  243      352 =    631 =    653      681    
BUFFER_LIST_NEXT		VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  244      354 =    399      400      407      421      427      428      429 =    429    
					  430      431 =    443 =    443      444      445 =    445      459      461      655    
					  683    
BUFFER_LIST_SIZE		VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  242      350 =    432 =    432      436      439 =    439      630 =    630      651    
					  679    
BUFFER_LIST_TAIL		VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  245      353 =    428 =    440 =    440      441      442 =    442      617      622    
					  654      682    
BUFFER_PURGE_FACTOR		CONST 5 { IN PROGRAM ETHERNET_LISTENER }
					   54      438      439      440      443    
BUFFER_TIMESTAMP		VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF $QUAD { IN PROGRAM ETHERNET_LISTENER }
					  240      427 P  
BYTE_COUNT			FIELD { IN IO_STATUS_BLOCK } $UWORD
					  144      421    
BYTE_COUNT			FIELD { IN COUNTER } INTEGER
					  160      557 =    563 =    564      671 =    671      674 =  
CALL_STATUS			VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  247      330 =    334 =    454 =    490 =    491      493 =    494      495      525 =  
					  530      531      699 =    703      704      705 =  
CALL_STATUS			PARM  INTEGER { IN PROCEDURE REPORT_ERROR }
					  465      471      472    
CARRIAGE_RETURN			CONST ''(13) { IN PROGRAM ETHERNET_LISTENER }
					   43       49    
CHAN				PARM  INTEGER

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   17
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

					    *      526    
CHAN				PARM  INTEGER
					    *      455      700    
CHAN				VAR   [PSECT($LOCAL), WORD, VOLATILE] $UWORD { IN PROGRAM ETHERNET_LISTENER }
					  246      455      490 P    493 P    526      697      700      705    
CHAR				TYPE  
					    *      141      147      148      158      175      176      179      216      217    
					  237      238      248      376      377      378    
CLEAR_INFORMATION		CONST 'CLEAR_INFORMATION = 5' { IN PROGRAM ETHERNET_LISTENER }
					  265    
CLI$DCL_PARSE			FUNC  [EXTERNAL, UNBOUND, ASYNCHRONOUS] : INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  290    
CLI$DISPATCH			FUNC  [EXTERNAL, UNBOUND, ASYNCHRONOUS] : INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  299    
CLI$GET_VALUE			FUNC  [EXTERNAL, UNBOUND, ASYNCHRONOUS] : INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  304      330      334    
CLI$PRESENT			FUNC  [EXTERNAL, UNBOUND, ASYNCHRONOUS] : INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  311      329      333    
CLI$_ABSENT			CONST 229872 { IN PROGRAM ETHERNET_LISTENER }
					   84    
CLI$_DEFAULTED			CONST 229872 { IN PROGRAM ETHERNET_LISTENER }
					   85    
CLI$_NOCOMD			CONST 229552 { IN PROGRAM ETHERNET_LISTENER }
					   86    
CLI$_NORMAL			CONST 196609 { IN PROGRAM ETHERNET_LISTENER }
					   87    
CLI$_PRESENT			CONST 261401 { IN PROGRAM ETHERNET_LISTENER }
					   88      329      333    
CLOSE				PROC  { BUILTIN } 
					    *      698    
COLUMN_NUMBER			VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  174    
COMMAND_STRING			PARM  STRING { IN FUNCTION CLI$DCL_PARSE }
					  291    
CONNECT_NODE			CONST 'CONNECT_NODE = 0' { IN PROGRAM ETHERNET_LISTENER }
					  260    
CONTROL				CONST 'CONTROL = 0' { IN PROGRAM ETHERNET_LISTENER }
					  150      152      648    
CONTROL_Z			CONST ''(26) { IN PROGRAM ETHERNET_LISTENER }
					   48    
COUNTER				TYPE  RECORD { IN PROGRAM ETHERNET_LISTENER }
					  151      171      202      203    
COUNTERS			FIELD { IN COUNTER } INTEGER
					  155      506 =    678 =  
COUNTER_LIST			VAR   [PSECT($LOCAL)] ARRAY OF COUNTER { IN PROGRAM ETHERNET_LISTENER }
					  171      549      555      556      557      561      562      563      564      665    
					  669      670      671      673      674    
COUNTER_LIST_SIZE		VAR   [PSECT($LOCAL)] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  173      504 =    548      552      554 =    663      678      689    
COUNTER_PTR			VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  172      663 =    665      669      670      671      673      674    
COUNTER_PTR			VAR   INTEGER { IN PROCEDURE UPDATE_TOTALS }
					  544      547 =    548      549      551 =    551      552      554      555      556    
					  557      561      562      563      564    
COUNTER_REC_TYPE		TYPE  ENUMERATION { IN PROGRAM ETHERNET_LISTENER }
					  150      151    
CRLF				CONST ''(13,10) { IN PROGRAM ETHERNET_LISTENER }

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   18
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

					   49    
CURRENT_DATE			VAR   ARRAY OF CHAR { IN PROGRAM ETHERNET_LISTENER }
					  175      660 P  
CURRENT_TIME			VAR   ARRAY OF CHAR { IN PROGRAM ETHERNET_LISTENER }
					  176      661 P  
DATA				CONST 'DATA = 1' { IN PROGRAM ETHERNET_LISTENER }
					  150      157      668    
DATE				PROC  { BUILTIN } 
					    *      607      660    
DAYTIM				PARM  [QUAD, UNSAFE] RECORD
					    *      584    
DESTINATION			VAR   STRING { IN PROGRAM ETHERNET_LISTENER }
					  177    
DESTINATION			VAR   ARRAY OF CHAR { IN PROCEDURE ETHERNET_READ_AST }
					  376      400 =    402    
DESTINATION_PTR			VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  178    
DETERMINE_CLI_ENVIRONMENT	PROC  [PSECT($CODE), UNBOUND]  { IN PROGRAM ETHERNET_LISTENER }
					  326      593    
DEVICE_ADDRESS			VAR   [PSECT($LOCAL), VOLATILE] ARRAY { IN PROGRAM ETHERNET_LISTENER }
					  248      401      402    
DEVICE_COUNT			VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  249    
DEVICE_MATCH			VAR   BOOLEAN { IN PROCEDURE ETHERNET_READ_AST }
					  374      395 =    403 =    411    
DEVICE_NAME			VAR   ARRAY { IN PROGRAM ETHERNET_LISTENER }
					  179    
DEVICE_TRACE			CONST 'DEVICE_TRACE = 4' { IN PROGRAM ETHERNET_LISTENER }
					  264    
DEVICE_TYPE			VAR   ARRAY OF NODE_TYPES { IN PROGRAM ETHERNET_LISTENER }
					  180    
DISCARDED_BUFFERS		VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  258      349 =    438 =    438      498 =    656      684    
DISPLAY				VAR   UNSIGNED { IN PROGRAM ETHERNET_LISTENER }
					  182    
DISPLAY_ATTRIBUTE		VAR   VT100_ATTRIBUTES { IN PROGRAM ETHERNET_LISTENER }
					  181    
DISPLAY_ATTRIBUTES		VAR   UNSIGNED { IN PROGRAM ETHERNET_LISTENER }
					  183    
DISPLAY_COLUMNS			VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  184    
DISPLAY_ROWS			VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  185    
DISPLAY_TIME			VAR   [QUAD, UNSAFE] $QUAD { IN PROCEDURE RESET_DISPLAY_TIME }
					  580      583 P    584    
DONE				VAR   [PSECT($LOCAL), VOLATILE] BOOLEAN { IN PROGRAM ETHERNET_LISTENER }
					  250      614 =    615    
DUMP_ETHERNET			CONST 'DUMP_ETHERNET = 6' { IN PROGRAM ETHERNET_LISTENER }
					  266    
DUMP_LOAD_ASSISTANCE_PROTOCOL	CONST '`'(1) { IN PROGRAM ETHERNET_LISTENER }
					   74    
EF_CHECK			VAR   UNSIGNED { IN PROCEDURE ETHERNET_READ_AST }
					  373      417 P    418    
ENTITY_DESC			PARM  STRING { IN FUNCTION CLI$GET_VALUE }
					  305    
ENTITY_DESC			PARM  STRING { IN FUNCTION CLI$PRESENT }
					  312    

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   19
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

ERROR_SUMMARY			FIELD { IN IO_STATUS_BLOCK } UNSIGNED
					  145      535    
ESC				CONST ''(27) { IN PROGRAM ETHERNET_LISTENER }
					   44    
ETHERNET_INPUT_EF		CONST 40 { IN PROGRAM ETHERNET_LISTENER }
					   50      417      418      419      619      620    
ETHERNET_LISTENER		PROG  [PSECT($CODE)] 
					    2    
ETHERNET_PACKET			TYPE  VARYING OF CHAR { IN PROGRAM ETHERNET_LISTENER }
					  141      193      233      239    
ETHERNET_READ_AST		PROC  [PSECT($CODE), UNBOUND, ASYNCHRONOUS]  { IN PROCEDURE READ_ETHERNET }
					  370      458 P  
EVENT_ETHERNET			VAR   [PSECT($LOCAL), VOLATILE] BOOLEAN { IN PROGRAM ETHERNET_LISTENER }
					  251      420 =    481 =  
EVENT_FLAGS			VAR   UNSIGNED { IN PROGRAM ETHERNET_LISTENER }
					  186    
EVENT_TERMINAL			VAR   [PSECT($LOCAL), VOLATILE] BOOLEAN { IN PROGRAM ETHERNET_LISTENER }
					  252      482 =  
FALSE				CONST 'FALSE = 0'
					    *      403      409      481      482      483      614      645    
FILLER				VAR   ETHERNET_PACKET { IN PROGRAM ETHERNET_LISTENER }
					  233    
FORM_FEED			CONST ''(12) { IN PROGRAM ETHERNET_LISTENER }
					   52    
FUNC				PARM  INTEGER
					    *      456      701    
FUNC				PARM  INTEGER
					    *      527    
GRAND_TOTAL_BYTES		VAR   [PSECT($LOCAL)] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  187      499 =    638 =    638    
HEX				FUNC  { BUILTIN } 
					    *      535    
HIGHEST_PROTOCOL		VAR   [PSECT($LOCAL)] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  188      502 =  
HOST				CONST 'HOST = 1' { IN PROGRAM ETHERNET_LISTENER }
					  140    
I				VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  189    
I				VAR   INTEGER { IN PROCEDURE INIT_CONTEXT }
					  344      355 =    357      358      359      360      361      362      363    
IADDRESS			FUNC  { BUILTIN } 
					    *      461      524      529    
ID				PARM  INTEGER { IN PROCEDURE REPORT_ERROR }
					  465      472    
INIT				PROC  [PSECT($CODE), UNBOUND]  { IN PROGRAM ETHERNET_LISTENER }
					  477      594    
INIT_CONTEXT			PROC  [PSECT($CODE), UNBOUND, ASYNCHRONOUS]  { IN PROGRAM ETHERNET_LISTENER }
					  340      480    
INPUT				VAR   [EXTERNAL(PAS$FV_INPUT)] TEXT { IN PROGRAM ETHERNET_LISTENER }
					    *        2    
INTEGER				TYPE  
					    *       95       97      105      154      155      159      160      170      172    
					  173      174      178      184      185      187      188      189      190      191    
					  194      195      196      197      198      201      204      211      212      215    
					  225      226      227      228      229      230      241      242      243      244    
					  245      247      249      258      269      270      271      272      276      278    
					  279      281      282      292      296      301      308      313      318      344    

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   20
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

					  465      465      541      544    
INTERVAL			VAR   [PSECT($LOCAL), VOLATILE] STRING { IN PROGRAM ETHERNET_LISTENER }
					  255      330 P    332 =    583      613    
IN_COLS				VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  190    
IN_ROWS				VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  191    
IO$M_CTRL			CONST 512 { FROM ENVIRONMENT #1 }
					    *      527      701    
IO$M_SHUTDOWN			CONST 128 { FROM ENVIRONMENT #1 }
					    *      701    
IO$M_STARTUP			CONST 64 { FROM ENVIRONMENT #1 }
					    *      527    
IO$_READVBLK			CONST 49 { FROM ENVIRONMENT #1 }
					    *      456    
IO$_SETMODE			CONST 35 { FROM ENVIRONMENT #1 }
					    *      527      701    
IOSB				PARM  [QUAD, VOLATILE, UNSAFE] RECORD
					    *      457      702    
IOSB				PARM  [QUAD, VOLATILE, UNSAFE] RECORD
					    *      528    
IOSB				VAR   [PSECT($LOCAL), VOLATILE] IO_STATUS_BLOCK { IN PROGRAM ETHERNET_LISTENER }
					  254      384      386      421      457 P    528 P    532      534      535      535    
					  536      702 P  
IO_STATUS_BLOCK			TYPE  RECORD { IN PROGRAM ETHERNET_LISTENER }
					  142      221      254    
KEYBOARD			VAR   [PSECT($LOCAL), VOLATILE] UNSIGNED { IN PROGRAM ETHERNET_LISTENER }
					  257    
KEY_CODE			VAR   [PSECT($LOCAL), WORD, VOLATILE] $UWORD { IN PROGRAM ETHERNET_LISTENER }
					  256    
L0				FIELD { IN $QUAD } UNSIGNED
					   95    
L0				FIELD { IN $OCTA } UNSIGNED
					   97    
L0				FIELD { IN $UQUAD } UNSIGNED
					  101    
L0				FIELD { IN $UOCTA } UNSIGNED
					  103    
L1				FIELD { IN $QUAD } INTEGER
					   95    
L1				FIELD { IN $OCTA } UNSIGNED
					   97    
L1				FIELD { IN $UQUAD } UNSIGNED
					  101    
L1				FIELD { IN $UOCTA } UNSIGNED
					  103    
L2				FIELD { IN $OCTA } UNSIGNED
					   97    
L2				FIELD { IN $UOCTA } UNSIGNED
					  103    
L3				FIELD { IN $OCTA } INTEGER
					   97    
L3				FIELD { IN $UOCTA } UNSIGNED
					  103    
LAT_PROTOCOL			CONST '`'(4) { IN PROGRAM ETHERNET_LISTENER }
					   77    
LEN				FIELD INTEGER

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   21
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

					  211      523 =  
LENGTH				FUNC  { BUILTIN } : INTEGER
					    *      638      639    
LENGTH				PARM  INTEGER { IN PROCEDURE UPDATE_TOTALS }
					  541      557      564    
LIB$WAIT			FUNC  [EXTERNAL, UNBOUND, ASYNCHRONOUS] : INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  316    
LINE_FEED			CONST ''(10) { IN PROGRAM ETHERNET_LISTENER }
					   45       49    
LOOPBACK_ASSISTANCE_PROTOCOL	CONST ''(144,0) { IN PROGRAM ETHERNET_LISTENER }
					   73    
MAP_ETHERNET			CONST 'MAP_ETHERNET = 2' { IN PROGRAM ETHERNET_LISTENER }
					  262      497    
MAX_BUFFERS			CONST 1000 { IN PROGRAM ETHERNET_LISTENER }
					   53      238      239      240      430      436      438      439      440      442    
					  443      445      628    
MAX_DEVICES			CONST 1000 { IN PROGRAM ETHERNET_LISTENER }
					   55      179      180      248    
MAX_PACKET			CONST 1500 { IN PROGRAM ETHERNET_LISTENER }
					   57      141      460      522    
MAX_PROTOCOL			CONST 200 { IN PROGRAM ETHERNET_LISTENER }
					   58      267      268      269      270      271      272      273      274      275    
MAX_STRING			CONST 512 { IN PROGRAM ETHERNET_LISTENER }
					   56      147    
MAX_TRACE			CONST 60 { IN PROGRAM ETHERNET_LISTENER }
					   59      223      224      225      226      227      228    
MESSAGE				VAR   STRING { IN PROGRAM ETHERNET_LISTENER }
					  192    
MESSAGE				VAR   STRING { IN PROCEDURE REPORT_ERROR }
					  468      471 P    471 P    473    
MONITOR_FUNCTION		VAR   [PSECT($LOCAL), VOLATILE] ENUMERATION { IN PROGRAM ETHERNET_LISTENER }
					  259      497 =  
NMA$C_LINMC_CLR			CONST 2 { FROM ENVIRONMENT #2 }
					    *      520    
NMA$C_PCLI_BUS			CONST 2801 { FROM ENVIRONMENT #2 }
					    *      521    
NMA$C_PCLI_PAD			CONST 2842 { FROM ENVIRONMENT #2 }
					    *      517    
NMA$C_PCLI_PHA			CONST 2820 { FROM ENVIRONMENT #2 }
					    *      519    
NMA$C_PCLI_PRM			CONST 2840 { FROM ENVIRONMENT #2 }
					    *      513    
NMA$C_PCLI_PTY			CONST 2830 { FROM ENVIRONMENT #2 }
					    *      515    
NMA$C_STATE_OFF			CONST 1 { FROM ENVIRONMENT #2 }
					    *      518    
NMA$C_STATE_ON			CONST 0 { FROM ENVIRONMENT #2 }
					    *      514    
NODE_TYPES			TYPE  ENUMERATION { IN PROGRAM ETHERNET_LISTENER }
					  140      180    
NONE				CONST 'NONE = 1' { IN PROGRAM ETHERNET_LISTENER }
					  149    
NUL				CONST ''(0) { IN PROGRAM ETHERNET_LISTENER }
					   60    
OPEN				PROC  { BUILTIN } 
					    *      595    
OUTFILENAME			VAR   [PSECT($LOCAL)] STRING { IN PROGRAM ETHERNET_LISTENER }

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   22
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

					  253      334 P    336 =    597    
OUTPUT				VAR   [EXTERNAL(PAS$FV_OUTPUT)] TEXT { IN PROGRAM ETHERNET_LISTENER }
					    *        2      472      473      535      611      650      651      679      688    
					  693    
P1				PARM  [UNSAFE] CONFORMANT ARRAY
					    *      459    
P2				PARM  INTEGER
					    *      529    
P2				PARM  INTEGER
					    *      460    
P5				PARM  INTEGER
					    *      461    
PACKET_BUFFER			VAR   ETHERNET_PACKET { IN PROGRAM ETHERNET_LISTENER }
					  193      632 =    638      639    
PACKET_COUNT			FIELD { IN COUNTER } INTEGER
					  159      556 =    561 =    562      665      670 =    670      673 =  
PARAMETER_ID			FIELD $UWORD
					  206      513 =    515 =    517 =    519 =    521 =  
PARAMETER_VALUE			FIELD UNSIGNED
					  207      514 =    516 =    518 =    520 =    522 =  
PARAM_ROUTINE			PARM  [EXTERNAL, UNBOUND, ASYNCHRONOUS] PROCEDURE  { IN FUNCTION CLI$DCL_PARSE }
					    *      293    
PASTEBOARD_COLUMN		VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  194    
PASTEBOARD_ROW			VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  195    
PREVIOUS_DEVICE_COUNT		VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  196    
PREVIOUS_SELECTED_ADDRESS	VAR   [PSECT($LOCAL)] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  197      484 =  
PREVIOUS_SELECTED_PROTOCOL	VAR   [PSECT($LOCAL)] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  198      485 =  
PRINTABLE_CHARS			CONST '................................ !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~................................. !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc
					   61    
PROMPT_ROUTINE			PARM  [EXTERNAL, UNBOUND, ASYNCHRONOUS] PROCEDURE  { IN FUNCTION CLI$DCL_PARSE }
					    *      294    
PROMPT_STRING			PARM  STRING { IN FUNCTION CLI$DCL_PARSE }
					  295    
PROTOCOL			VAR   STRING { IN PROGRAM ETHERNET_LISTENER }
					  199    
PROTOCOL			VAR   ARRAY OF CHAR { IN PROCEDURE ETHERNET_READ_AST }
					  378      407 =    408    
PROTOCOL_COUNT			VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  276      355    
PROTOCOL_DISPLAY		CONST 'PROTOCOL_DISPLAY = 3' { IN PROGRAM ETHERNET_LISTENER }
					  263    
PROTOCOL_MATCH			VAR   BOOLEAN { IN PROCEDURE ETHERNET_READ_AST }
					  375      396 =    409 =    411    
PROTOCOL_PACKET_AVG_SIZE	VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF SINGLE { IN PROGRAM ETHERNET_LISTENER }
					  273      361 =  
PROTOCOL_PACKET_BYTES		VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  270      358 =  
PROTOCOL_PACKET_COUNT		VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  269      357 =  
PROTOCOL_PACKET_MAX_SIZE	VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF SINGLE { IN PROGRAM ETHERNET_LISTENER }
					  274      362 =  

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   23
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

PROTOCOL_PACKET_MIN_SIZE	VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF SINGLE { IN PROGRAM ETHERNET_LISTENER }
					  275      363 =  
PROTOCOL_PACKET_TOTAL_BYTES	VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  272      360 =  
PROTOCOL_PACKET_TOTAL_COUNT	VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  271      359 =  
PROTOCOL_PACKET_TYPE		VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF STRING { IN PROGRAM ETHERNET_LISTENER }
					  267      408    
PROTOCOL_PTR			VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  201    
PROTOCOL_TYPE			VAR   STRING { IN PROGRAM ETHERNET_LISTENER }
					  200    
PROTOCOL_TYPE_NAME		VAR   [PSECT($LOCAL), VOLATILE] ARRAY OF STRING { IN PROGRAM ETHERNET_LISTENER }
					  268    
READ_ETHERNET			PROC  [PSECT($CODE), UNBOUND, ASYNCHRONOUS]  { IN PROGRAM ETHERNET_LISTENER }
					  368      449      606    
REAL				TYPE  SINGLE
					    *      273      274      275      317    
RECORDING_FILE			VAR   FILE OF COUNTER { IN PROGRAM ETHERNET_LISTENER }
					  202        2      596      601      649      672      698    
RECORDING_RECORD		VAR   [PSECT($LOCAL)] COUNTER { IN PROGRAM ETHERNET_LISTENER }
					  203      505      506      646      648      649      668      669      670      671    
					  672      677      678    
RECORD_TYPE			FIELD { IN COUNTER } COUNTER_REC_TYPE
					  151      648 =    668 =  
REMOTE_CONSOLE_PROTOCOL		CONST '`'(2) { IN PROGRAM ETHERNET_LISTENER }
					   75    
REPORT_ERROR			PROC  [PSECT($CODE), UNBOUND]  { IN PROGRAM ETHERNET_LISTENER }
					  465      495      531      536      704    
RESET_DISPLAY_TIME		PROC  [PSECT($CODE), UNBOUND, ASYNCHRONOUS]  { IN PROGRAM ETHERNET_LISTENER }
					  569      575      609    
RETDESC				PARM  STRING { IN FUNCTION CLI$GET_VALUE }
					  306    
RETLENGTH			PARM  [WORD] $UWORD { IN FUNCTION CLI$GET_VALUE }
					  307    
REWRITE				PROC  { BUILTIN } 
					    *      601    
ROUTING_PROTOCOL		CONST '`'(3) { IN PROGRAM ETHERNET_LISTENER }
					   76    
ROW_NUMBER			VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  204    
SCREEN				VAR   [PSECT($LOCAL), VOLATILE] UNSIGNED { IN PROGRAM ETHERNET_LISTENER }
					  277    
SECONDS				PARM  [VOLATILE] SINGLE { IN FUNCTION LIB$WAIT }
					  317    
SELECTED_ADDRESS		VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  278      397      401      402      486 =  
SELECTED_PROTOCOL		VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  279      405      408      487 =  
SETPARAM			VAR   [PSECT($LOCAL)] ARRAY { IN PROGRAM ETHERNET_LISTENER }
					  205      513      514      515      516      517      518      519      520      521    
					  522      524 A  
SETPARAMDSC			VAR   [PSECT($LOCAL)] RECORD { IN PROGRAM ETHERNET_LISTENER }
					  210      523      524      529 A  
SET_INFORMATION			CONST 'SET_INFORMATION = 1' { IN PROGRAM ETHERNET_LISTENER }
					  261    
SOURCE				VAR   STRING { IN PROGRAM ETHERNET_LISTENER }

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   24
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

					  214    
SOURCE				VAR   ARRAY OF CHAR { IN PROCEDURE ETHERNET_READ_AST }
					  377      399 =    401    
SOURCE_PTR			VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  215    
SS$_ABORT			CONST 44 { FROM ENVIRONMENT #1 }
					    *      384    
SS$_BADPARAM			CONST 20 { FROM ENVIRONMENT #1 }
					    *      534    
SS$_CANCEL			CONST 2096 { FROM ENVIRONMENT #1 }
					    *      386    
SS$_NORMAL			CONST 1 { FROM ENVIRONMENT #1 }
					    *      491      494      530      532      703    
STARTUP_ETHERNET_PORT		PROC  [PSECT($CODE), UNBOUND]  { IN PROGRAM ETHERNET_LISTENER }
					  510      602    
START_DATE			VAR   ARRAY OF CHAR { IN PROGRAM ETHERNET_LISTENER }
					  216      607 P    612    
START_TIME			VAR   ARRAY OF CHAR { IN PROGRAM ETHERNET_LISTENER }
					  217      608 P    612    
STATUS				FIELD { IN IO_STATUS_BLOCK } $UWORD
					  143      384      386      532      534      535      536    
STRING				TYPE  VARYING OF CHAR { IN PROGRAM ETHERNET_LISTENER }
					  147      177      192      199      200      214      218      219      223      224    
					  231      232      253      255      267      268      291      295      305      306    
					  312      468      541    
SUBSTR				FUNC  { BUILTIN } 
					    *      399      400      407    
TABLE				PARM  INTEGER { IN FUNCTION CLI$DCL_PARSE }
					  292    
TARGET_ADDRESS			VAR   STRING { IN PROGRAM ETHERNET_LISTENER }
					  219    
TARGET_PROTOCOL			VAR   STRING { IN PROGRAM ETHERNET_LISTENER }
					  218    
TERMINAL_CHANNEL		VAR   [WORD] $UWORD { IN PROGRAM ETHERNET_LISTENER }
					  220    
TERMINAL_INPUT_EF		CONST 41 { IN PROGRAM ETHERNET_LISTENER }
					   51    
TERMINAL_IOSB			VAR   IO_STATUS_BLOCK { IN PROGRAM ETHERNET_LISTENER }
					  221    
TERMINAL_SERVER			CONST 'TERMINAL_SERVER = 0' { IN PROGRAM ETHERNET_LISTENER }
					  140    
TIME				PROC  { BUILTIN } 
					    *      608      661    
TIMER_AST			PROC  [PSECT($CODE), UNBOUND, ASYNCHRONOUS]  { IN PROCEDURE RESET_DISPLAY_TIME }
					  571      584 P  
TIME_STAMP			FIELD { IN COUNTER } $QUAD
					  153      646 =  
TIME_STAMP			VAR   [QUAD, UNSAFE] $QUAD { IN PROGRAM ETHERNET_LISTENER }
					  222      610 P    646      647 P  
TIME_TO_SAVE_COUNTERS		VAR   [PSECT($LOCAL), VOLATILE] BOOLEAN { IN PROGRAM ETHERNET_LISTENER }
					  280      483 =    574 =    643      645 =  
TOTAL_PACKETS_PROCESSED		VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  282      347 =    500 =    637 =    637      658      686    
TOTAL_PACKETS_RECEIVED		VAR   [PSECT($LOCAL), VOLATILE] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  281      348 =    422 =    422      501 =    657      685    
TRACE_ADDRESS			VAR   ARRAY OF STRING { IN PROGRAM ETHERNET_LISTENER }
					  224    

ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   25
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

TRACE_BYTES_IN			VAR   ARRAY OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  227    
TRACE_BYTES_OUT			VAR   ARRAY OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  228    
TRACE_COUNT			VAR   [PSECT($LOCAL)] INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  229      503 =  
TRACE_NAME			VAR   ARRAY OF STRING { IN PROGRAM ETHERNET_LISTENER }
					  223    
TRACE_PACKETS_IN		VAR   ARRAY OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  225    
TRACE_PACKETS_OUT		VAR   ARRAY OF INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  226    
TRACE_PTR			VAR   INTEGER { IN PROGRAM ETHERNET_LISTENER }
					  230    
TRANSLATION_TABLE		TYPE  ARRAY OF CHAR { IN PROGRAM ETHERNET_LISTENER }
					  148    
TRUE				CONST 'TRUE = 1'
					    *      395      396      420      574    
UAND				FUNC  { BUILTIN } : UNSIGNED
					    *      418    
UNKNOWN				CONST 'UNKNOWN = 2' { IN PROGRAM ETHERNET_LISTENER }
					  140    
UNSIGNED			TYPE  
					    *       95       97      101      103      138      145      182      183      186    
					  207      257      277      300      373    
UPDATE_TOTALS			PROC  [PSECT($CODE), UNBOUND]  { IN PROGRAM ETHERNET_LISTENER }
					  541      639    
USERARG				PARM  UNSIGNED { IN FUNCTION CLI$DISPATCH }
					  300    
VT100_ATTRIBUTES		TYPE  ENUMERATION { IN PROGRAM ETHERNET_LISTENER }
					  149      181    
WRITE				PROC  { BUILTIN } 
					    *      649      672    
WRITELN				PROC  { BUILTIN } 
					    *      472      473      535      611      650      651      679      688      693    
XEDEV				VAR   [PSECT($LOCAL)] STRING { IN PROGRAM ETHERNET_LISTENER }
					  232      489 =    493    
XQDEV				VAR   [PSECT($LOCAL)] STRING { IN PROGRAM ETHERNET_LISTENER }
					  231      488 =    490    


ENVIRONMENT FILE SUMMARY
------------------------
 #1       SYS$COMMON:[SYSLIB]STARLET.PEN;1
 #2       DISK1:[SYSTEMS.KHDCS.PASCAL.ENVIRONMENT]NMA.PEN;1


ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   26
01                              Cross Reference Listing         27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)



+-----------------------------------------------------------------------+
|  KEY TO REFERENCE FLAGS:                                              |
|                                                                       |
|        *  predeclared                                                 |
|        =  modified                                                    |
|        A  address of                                                  |
|        F  forward declared procedure or function                      |
|        L  label defining reference                                    |
|        P  passed as a parameter, possibly modified or called          |
|        R  READ operation done                                         |
|        W  used in a WITH statement                                    |
+-----------------------------------------------------------------------+


ETHERNET_LISTENER                                               21-Jul-1988 11:00:06    VAX Pascal V3.6-225                Page   27
01                              Pascal Compilation Statistics   27-Apr-1988 08:52:09    ETHERNET_LISTENER.PAS;1 (1)

ENVIRONMENT STATISTICS

                                                       -------- Symbols --------
        File                                           Total    Loaded   Percent

SYS$COMMON:[SYSLIB]STARLET.PEN;1                       20538       134         1
DISK1:[SYSTEMS.KHDCS.PASCAL.ENVIRONMENT]NMA.PEN;1       1922        16         1


COMMAND QUALIFIERS

  PASCAL/LIST/CROSS/NOOBJ ETHERNET_LISTENER

  /CHECK=(BOUNDS,NOCASE_SELECTORS,NOOVERFLOW,NOPOINTERS,NOSUBRANGE)
  /DEBUG=(NOSYMBOLS,TRACEBACK)
  /SHOW=(DICTIONARY,INCLUDE,NOINLINE,HEADER,SOURCE,STATISTICS,TABLE_OF_CONTENTS)
  /OPTIMIZE
  /STANDARD=NONE
  /TERMINAL=(NOFILE_NAME,NOROUTINE_NAME,NOSTATISTICS)
  /USAGE=(NOUNUSED,UNINITIALIZED,NOUNCERTAIN)
  /NOANALYSIS_DATA
  /NOENVIRONMENT
  /LIST=DISK1:[SYSTEMS.SOURCE.EMON]ETHERNET_LISTENER.LIS;1
  /NOOBJECT
  /CROSS_REFERENCE /ERROR_LIMIT=30 /NOG_FLOATING /NOMACHINE_CODE /NOOLD_VERSION /WARNINGS


COMPILER INTERNAL TIMING

  Phase                 Faults       CPU Time      Elapsed Time
  Initialization           99        00:00.1          00:00.3
  Source Analysis        1087        00:01.6          00:08.0
  Source Listing           41        00:00.6          00:03.4
  Tree Construction       138        00:00.2          00:00.2
  Flow Analysis            57        00:00.1          00:00.1
  Value Propagation        11        00:00.0          00:00.0
  Profit Analysis          24        00:00.1          00:00.1
  Context Analysis        300        00:00.9          00:00.9
  Name Packing              5        00:00.0          00:00.0
  Code Selection          156        00:00.2          00:00.2
  Final                    43        00:00.2          00:00.2
  TOTAL                  1965        00:04.0          00:13.5


COMPILATION STATISTICS

  CPU Time:       00:04.0         (10590 Lines/Minute)
  Elapsed Time:   00:13.5
  Page Faults:    1965
  Pages Used:     2302
  Compilation Complete
