| Deutsch English Français Italiano |
|
<vl9bjp$eq3$1@reader2.panix.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder9.news.weretis.net!panix!.POSTED.spitfire.i.gajendra.net!not-for-mail
From: cross@spitfire.i.gajendra.net (Dan Cross)
Newsgroups: comp.os.vms
Subject: Re: VMS Pascal article
Date: Fri, 3 Jan 2025 18:51:37 -0000 (UTC)
Organization: PANIX Public Access Internet and UNIX, NYC
Message-ID: <vl9bjp$eq3$1@reader2.panix.com>
References: <vl3pi8$2r2sr$1@dont-email.me> <67781447$0$711$14726298@news.sunsite.dk> <vl99jl$rf6$1@reader2.panix.com> <vl9aln$o72$1@dont-email.me>
Injection-Date: Fri, 3 Jan 2025 18:51:37 -0000 (UTC)
Injection-Info: reader2.panix.com; posting-host="spitfire.i.gajendra.net:166.84.136.80";
logging-data="15171"; mail-complaints-to="abuse@panix.com"
X-Newsreader: trn 4.0-test77 (Sep 1, 2010)
Originator: cross@spitfire.i.gajendra.net (Dan Cross)
Bytes: 4431
Lines: 113
In article <vl9aln$o72$1@dont-email.me>, Arne Vajhøj <arne@vajhoej.dk> wrote:
>On 1/3/2025 1:17 PM, Dan Cross wrote:
>> In article <67781447$0$711$14726298@news.sunsite.dk>,
>> Arne Vajhøj <arne@vajhoej.dk> wrote:
>>> On 1/3/2025 10:11 AM, Dan Cross wrote:
>>>> `readln` and `fgets` are not similar in that `readln` strips the
>>>> line ending sequence, and `fgets` does not.
>>>
>>> Close enough for the purpose of this article.
>>
>> Perhaps. I may be worth an asterisk, as often C programmers
>> will want to write:
>>
>> while ((s = fgets(s, len, fp)) != NULL) {
>> char *nl = strchr(s, '\n');
>> if (nl != NULL)
>> *nl = '\0';
>> }
>>
>> Which is a bit more cumbersome than the Pascal equivalent. When
>> carriage returns get mixed in, it gets even nastier, so much so
>> that one may just write a helper function to deal with it.
>
>I think you are right. I have added a note.
>
>>>> `f = fopen,fnm "r");` is an obvious typo.
>>>> `while not eof(f)) do` is an obvious typo.
>>>
>>> Fixed.
>>
>> Fixed, but the comparison to C is slightly wrong:
>>
>> `while not(eof(f)) do` is not exactly the same as
>> `while(!feof(f))`. In particular, while in VSI Pascal `EOF(f)`
>> will be true on the first iteration of the loop if `f` is empty,
>> the same is not true for `feof` from stdio: in order for `feof`
>> to be true, stdio must observe the end-of-file condition of `f`
>> via some input operation. This leads to awkward code sequences
>> like this:
>>
>> ch = fgetc(fp);
>> while (!feof(fp)) {
>> /*
>> * Do something with `ch`
>> * ...
>> */
>> ch = fgetc(fp);
>> }
>
>C feof is a crap function.
>
>I think I will drop feof completely and add fgetc
>not returning EOF. I already have fgets not returning NULL.
>
>>>> The structure you present at the end as "equivalent" of a
>>>> varying character array is not correct. `integer16` is a signed
>>>> type, with a maximum value of 32,767. The length field for a
>>>> `varying [n] of char` is an integer subrange type with word
>>>> representation. That is, `length` is unsigned 0..max, where max
>>>> is <= 65,535.
>>>
>>> Ooops.
>>>
>>> You are right.
>>>
>>> I was sure that the limit was 32K but it is 64K.
>>>
>>> Fixed.
>>>
>>> And also fixed in the description of VARYING further up.
>>
>> You should seriously mention the STRING type, though.
>
>I think VARYING OF CHAR is what is used most in VMS Pascal.
Weird; I can't imagine why. Regardless, it may be worthwhile to
at least mention it, since you state explicitly that there are
three types for representing textual, string-like data, but
VSI's documentation makes it clear that there are actually four.
>> Also, it's a bit of a bummer that you didn't mention nested
>> functions/procedures, which are among the cooler aspects of the
>> language:
>>
>> $ type foo.pas
>> (* foo *)
>> program foo(output);
>> procedure hello;
>> procedure world(var who: String);
>> function punct: char;
>> begin
>> punct := '!'
>> end;
>> begin
>> who := 'World' + punct
>> end;
>> var
>> who: String (10);
>> begin
>> world(who);
>> writeln('Hello, ', who)
>> end;
>> begin
>> hello
>> end.
>
>There is already an example. fac is inside testfac.
>
>I will add a note about it.
Ah, I see it now; the lack of indentation makes it hard to spot.
- Dan C.