www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/10/26/07:49:16

Message-ID: <3BD8EBA0.6EEE9EE9@yahoo.com>
From: CBFalconer <cbfalconer AT yahoo DOT com>
Organization: Ched Research
X-Mailer: Mozilla 4.75 [en] (Win98; U)
X-Accept-Language: en
MIME-Version: 1.0
Newsgroups: comp.os.msdos.djgpp
Subject: Re: Errors and Standards, also RHIDE bug.
References: <01FD6EC775C6D4119CDF0090273F74A455A7B4 AT emwatent02 DOT meters DOT com DOT au> <3BD79C5D DOT 7A9E10AA AT yahoo DOT com> <200110260244 DOT EAA10378 AT goedel DOT fjf DOT gnu DOT de>
Lines: 155
Date: Fri, 26 Oct 2001 11:38:43 GMT
NNTP-Posting-Host: 12.90.173.144
X-Complaints-To: abuse AT worldnet DOT att DOT net
X-Trace: bgtnsc04-news.ops.worldnet.att.net 1004096323 12.90.173.144 (Fri, 26 Oct 2001 11:38:43 GMT)
NNTP-Posting-Date: Fri, 26 Oct 2001 11:38:43 GMT
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Frank Heckenbach wrote:
> 
> CBFalconer wrote:
> 
> > Aside - I prepared a text version of ISO10206 and sent it to Frank
> > a few days ago.  I have not heard anything back from him.  It
> > seems like a good thing to have around for instant searches, etc.
> > I wonder if he received it?
> 
> Yes, I did. However, are we allowed to distribute it at all? What is
> the copyright status of the document?

The following was in the original:

===========
This online copy of the Extended Pascal standard is provided only
as an aid
to standardization. In the case of differences between this online
version
and the printed version, the printed version takes precedence.

Do not modify this document. Do not include this document in
another
software product. You may print this document for personal use
only. Do not
sell this document.
===========

I have not modified it.  I take the above as permission to
promulgate it.  Even if I am wrong, the worst that could happen
would be for ISO to ask you to withdraw it.

> 
> > I consider the lack of range-checking to be the worst failing of
> > GPC.  The point of using Pascal is to have ones hand held and to
> > generate safe code.  Without range checks one might as well use C.
> 
> I thought so too when I came to GPC. However, in the years I've
> found that it was not that bad, at least for me (not meaning to
> justify GPC's failure, of course).
> 
> It is still one of the top-priority bugs. OTOH, there was recently
> quite some consensus on finishing a 2.1 release soon. Afterwards,
> range checking should be one of the next features implemented.

The standard says "It shall be an error ....".

In another newsgroup there was discussion of an algorithm
(comp.programming) and I generated the following.  I left the
"abs" out of the hash procedure, and things failed.  The system
was returning negative values used as indices, and I consider it a
minor miracle that there were no spectacular crashes.  This should
never have happened.

(Below is some further discussion about a rhide bug detected with
this)

PROGRAM On(input, output);
(* ISO standard Pascal *)

  LABEL 9;

  CONST
    tblsize        = 17;
    (* a suitable prime, larger than the maximum *)
    (* count of discrete entries to be read      *)

    criterion      = 5;   (* count of items needed to keep *)

  TYPE
    natural        = 1 .. tblsize;

  VAR
    item           : integer;
    i, h, h2, h0   : natural;
    hashtbl        : ARRAY[1..tblsize] OF RECORD
                       value  : integer;
                       count  : 0..criterion;
                       END;

  FUNCTION hash(n : integer) : natural;
  (* create these.  This is too simple for efficiency *)

    BEGIN (* hash *)
    hash := (abs(n) MOD tblsize) + 1;
    END; (* hash *)

  FUNCTION rehash(n : integer) : natural;
  (* This is also overly simple for efficiency *)

    BEGIN (* rehash *)
    rehash := 1;
    END; (* rehash *)

  BEGIN (* On *)
  FOR i := 1 TO tblsize DO hashtbl[i].count := 0;    (* init *)

  REPEAT
    readln(item);
    h := hash(item);
    IF hashtbl[h].count = 0 THEN BEGIN                (* new *)
      hashtbl[h].count := 1;
      hashtbl[h].value := item; END
    ELSE IF hashtbl[h].value = item THEN BEGIN      (* found *)
      IF hashtbl[h].count < criterion THEN
        hashtbl[h].count := hashtbl[h].count + 1; END
    ELSE BEGIN                          (* collision occured *)
      h0 := h;
      h2 := rehash(item); (* nonzero MOD tblsize *)
      REPEAT
        h := ((h + h2) MOD tblsize) + 1;
        IF h = h0 THEN BEGIN
          writeln('Full'); goto 9; END;
        IF hashtbl[h].count = 0 THEN BEGIN            (* new *)
          hashtbl[h].count := 1;
          hashtbl[h].value := item; END
        ELSE IF hashtbl[h].value = item THEN BEGIN  (* found *)
          IF hashtbl[h].count < criterion THEN
          hashtbl[h].count := hashtbl[h].count + 1; END
      UNTIL hashtbl[h].value = item;
    END;
  UNTIL eof;

9:
  (* dump results *)
  FOR i := 1 TO tblsize DO
    WITH hashtbl[i] DO
      IF count >= criterion THEN
        writeln(value, ' hash = ', i : 1, ' KEPT')
      ELSE IF count > 0 THEN
        writeln(value, ' count = ', count : 3, ' hash = ', i : 1);
  END. (* On *)

========= RHIDE bug under DJGPP - reason for cross post  ========

The input is terminated by an EOF.  Under rhide, having once
terminated a run, input was found to be permanently at EOF.  Doing
a program reset did not clear it.  The only way to loosen up the
system was to exit RHIDE completely, and restart it.  I have no
objection to the EOF sticking (in fact I approve), but a reset
should reset!

It was just as well in this case, because I am set up to create
further checking under command line use, which showed up the use
of extensions (i.e. halt and inc).

(To generate EOF enter a CTL-Z under DJGPP)

-- 
Chuck F (cbfalconer AT yahoo DOT com) (cbfalconer AT XXXXworldnet DOT att DOT net)
   Available for consulting/temporary embedded and systems.
   (Remove "XXXX" from reply address. yahoo works unmodified)
   mailto:uce AT ftc DOT gov  (for spambots to harvest)


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019