###############################################################################
#
#	File:     checksigs.den1.inc.icn
#
#	Subject:  russell language support procedures - include segment
#
#	Author:   Dennis J Darland
#
#	Date:     October - Novmber, 2015
#
###############################################################################
#
# Copyright 1986-1989 Hans-Juergen Boehm, Alan J. Demers, Kumar Srikantan,
# Vernon Lee, and Lucy Hederman.
# Copyright Digital Equipment Corporation & INRIA 1988, 1989.
# Copyright (c) 1990-1993 by Xerox Corporation.  All rights reserved.
#
# This material is provided as is, with no warranty expressed or implied.
# Any use is at your own risk.
# 
# Permission is hereby granted to copy this compiler for any non-commercial
# purpose, provided the above notices are retained on all copies.  Further
# restrictions apply to the DEC/INRIA BigNum package.  These are stated in
# the file runtime/BigNum/doc/bnbody.tex.
#
# This work uses the BigNum package developed jointly by INRIA and
# Digital PRL.  It has been modified by Hans-J. Boehm in August 1990
# and February 1993 at Xerox PARC.  When you receive this software,
# please send mail to librarian@prl.dec.com to inform them that you
# have a copy of the package.
###############################################################################
#
#   NOTE From Dennis J. Darland (11/2/2015)
#
#   I obtained the "c" language source code for "russell" copyrighted above
#   in the 1990's. I have made efforts to get it to work over the years, but
#   always failed. It has many hardware and OS dependancies. Now (October 2015
#   forward, I am tring to port to the language "Unicon". Practically every
#   line of code will need to be changed, as someing as simple as the
#   assignment operator is different. Also I will not use the BigNum package
#   mentioned above. Also I am doing this not for profit, and am sharing
#   freely. I am not at all confident that I will get it working well, but
#   believe in open source, so am sharing my work as I make progress.
#   Unicon is also much more portable.
#
###############################################################################

$ifdef NOT_NOT
procedure fool_emacs()
    $endif
    {
	temp := p.lh_first
	while \temp do {
	    q := temp.cn_hd_field
	    checksigs(q . ge_guard, FALSE);
	    checksigs(q . ge_element, knd==LOOPDENOTATION || dont_coerce);
	    temp := temp.cn_tl_field
	}
	tl_findsig(p,dont_coerce);
	# check that all guards have Boolean signature
	temp := p.gl_list.lh_first
	while \temp do {
	    q := temp.lh_hd_field
	    if (q . ge_guard . signature ~= ERR_SIG & comp_st(q . ge_guard . signature, val_Boolean, NIL,NIL) ~= 0) then { 
			    rpt_err("Guard has inappropriate signature")
#			    unparse_file = stderr;
#			    fprintf(stderr, "\tGuard signature:\n\t");
#			    unparse(q . ge_guard . signature);
#			    fprintf(stderr, "\n");
			}
	    
	    
	    temp := temp.cn_tl_field
	}
	if(dont_coerce = FALSE & knd = GUARDEDLIST &
	        p. signature ~= ERR_SIG) then {
		# Signatures should all be the same - make sure they are
		   temp := p.g_list.lh_first
		   while \temp do {
		       q := temp.cn_hd_field
		       
		       if (q . ge_element . signature ~= ERR_SIG &
 			    comp_st(q . ge_element . signature, p . signature, NIL, NIL) != 0) then {
					  rpt_err("Guarded expression has incorrect signature:")
#					  unparse_file = stderr;
#					  fprintf(stderr, "\t");
#					  unparse(q . ge_element . signature);
#					  fprintf(stderr, "\n\tShould be:\n\t");
#					  unparse(p . signature);
#					  fprintf(stderr, "\n");
				      }
		       
		       temp := temp.cn_tl_fild
		   }
		   
	       }
    }
$ifdef NOT_NOT
end
$endif
