[Simh] anyone know how to convert/translate turbo pascal to vax pascal?

Johnny Billquist bqt at softjar.se
Thu Feb 8 17:33:05 EST 2018


Like I said, you cannot just replace "assign" with "open". The number, 
types, and exact arguments are not the same between assign in 
Turbo-Pascal and open in VMS Pascal. You need to read the manual!

   Johnny

On 2018-02-08 21:18, Dan Gahlinger wrote:
> So I tried this but the output file is empty. first.txt contains "text' 
> and second.txt contains "not test":
> 
> Program fcomp(input,output);
> var
>    f, g, h : text;
>    s, t, u : varying [255] of char;
>    c, d : char;
>    i : integer;
> begin
>    s := 'first.txt';
>    t := 'second.txt';
>    u := 'output.txt';
>    i := 0;
>    open(f,s,old);
>    open(g,t,old);
>    open(h,u,new);
>    while (not(eof(f))) do
>      begin
>        read(f,c);
>        read(g,d);
>        i := i + 1;
>        if (c <> d) then
>          writeln(h,i,' = 1:[',c,']/',ord(c),' 2:[',d,']/',ord(d));
>      end;
>    close(f);
>    close(g);
>    close(h);
> end.
> 
> ------------------------------------------------------------------------
> *From:* Clem Cole <clemc at ccc.com>
> *Sent:* February 8, 2018 12:44 PM
> *To:* Dan Gahlinger
> *Cc:* Gary Lee Phillips; Tim Shoppa; simh at trailing-edge.com
> *Subject:* Re: [Simh] anyone know how to convert/translate turbo pascal 
> to vax pascal?
> Yup - traditional Pascal (lack of) portability due to the report having 
> been silent.   Associating files with file descriptors could never be 
> agreed so ISO never defined how to do.  Every OS does it differently.  
> Since Wirth was silent on it, if they picked one scheme over another the 
> Pascal committee was favoring that implementation [Kernighan may have 
> even pointed this out in his paper they wrote after writing the software 
> tools in Pascal - Why Pascal is Not My Favorite Programming Language 
> <http://wiki.lazarus.freepascal.org/Why_Pascal_is_Not_My_Favorite_Programming_Language> ].**
> 
> Go google the two document I mentioned previously and it should be a 
> fairly simply change.  Look up file I/O and then read how VMS 
> implemented the association of  name.
> 
> I'm now going by memory, but a number of Pascal's did that in the 
> reset() function.   A number created a new function as Turbo did 
> (assign() in this case, but I think open() was used by a couple of other 
> Pascals. I think a couple of other pass it in via the Program function 
> and style other that supported separate libraries (usually called units) 
> did it other ways still.
> 
> For grins, in the late 1970s at an HP/Tektronix  'Hatfield/McCoy' style 
> party - in those days HP in particular was Basic happy and Tek was 
> mostly Pascal.   We counted over 25 different incompatible 'HP Basic' 
> implementations, and over 10 different Tek Pascals.
> 
> These are just the sorts of things you need the Turbo Pascal manual in 
> one had if that is were you are coming from and in this case the VMS 
> Pascal manual in the other.  Look up assign() in the first and the read 
> how perform the same action in the other.
> 
> Good Luck,
> Clem
> 
> ** IMHO: This is a good example of where C 'beat' Pascal - the I/O was 
> defined by UNIX and when it came time to create a standard, C mostly 
> kept the UNIX semantics and was able to keep many/most of the OS-ism 
> from other systems out.
>> 
> On Thu, Feb 8, 2018 at 12:21 PM, Dan Gahlinger <dgahling at hotmail.com 
> <mailto:dgahling at hotmail.com>> wrote:
> 
>     so here you go, a simple file compare I wrote using "freepascal"
>     (freepascal.org <http://freepascal.org>) and I've done what I can to
>     convert it to vms pascal
>     but it doesn't compile.
> 
>     code:
>     Program fcomp(input,output);
>     var
>        f, g, h : text;
>        s, t, u : varying [255] of char;
>        c, d : char;
>        i : integer;
>     begin
>        s := 'first.txt';
>        t := 'second.txt';
>        u := 'output.txt';
>        i := 0;
>        assign(f,s);
>        reset(f);
>        assign(g,t);
>        reset(g);
>        assign(h,u);
>        rewrite(h);
>        while (not(eof(f))) do
>          begin
>            read(f,c);
>            read(g,d);
>            i := i + 1;
>            if (c <> d) then
>              writeln(h,i,' = 1:[',c,']/',ord(c),' 2:[',d,']/',ord(d));
>          end;
>        close(f);
>        close(g);
>        close(h);
>     end.
> 
>     errors:
>       pas fcomp.pas
>     00016      0  1   assign(f,s);
>                        1
>     %PASCAL-E-UNDECLID, (1) Undeclared identifier ASSIGN
>     at line number 16 in file DUA1:[DAN]FCOMP.PAS;4
>     %PASCAL-E-ENDDIAGS, PASCAL completed with 1 diagnostic
> 
>     ------------------------------------------------------------------------
>     *From:* Clem Cole <clemc at ccc.com <mailto:clemc at ccc.com>>
>     *Sent:* February 8, 2018 10:58 AM
>     *To:* Dan Gahlinger
>     *Cc:* Gary Lee Phillips; Tim Shoppa; simh at trailing-edge.com
>     <mailto:simh at trailing-edge.com>
>     *Subject:* Re: [Simh] anyone know how to convert/translate turbo
>     pascal to vax pascal?
>     Dan,
> 
>     As others have said something smells wrong here.  It's true the
>     original '71 report from Wirth did not defined I/O and '72 revised
>     report only defined write.  By the time of the Jensen & Wirth book
>     from Springer-Verlag in the mid-late '70s writeln is there.  And by
>     the time of the first standard efforts @ IEEE and ANSI it very much
>     in the language. I do have an old copy ANSI/IEEE770X3.97-1983
>     "American National Standard Pascal Computer Programming Language"
>     which on page 93 (Section 6.9.3) defines the required standard
>     Pascal function writeln:
> 
>         *6.9.4 The Procedure Writeln.*
> 
>             The syntax of the parameter list of writeln shall be:
> 
>                 writeln-parameter-list = [ "(" ( file-variable |
>                 write-parameter )
>                                                | "," write-parameter |
>                 ")" ] .
> 
>             *Writeln*shall only be applied to textfiles. If the
>             file-variable or the writeln-parameter-list is omitted, the
>             procedure shall be applied to the required textfile output.
> 
> 
>      From a quick search on the HP web site
>     (http://h41379.www4.hpe.com/commercial/pascal/pascal_index.html
>     <http://h41379.www4.hpe.com/commercial/pascal/pascal_index.html> )I
>     found reference to the SPD and the site says: :
> 
>         HP Pascal (formerly known as Compaq Pascal and DEC Pascal) runs
>         on OpenVMS for VAX systems, OpenVMS for AlphaServer systems, and
>         OpenVMS for Integrity servers. With HP Pascal, your source code
>         investment is not only protected, it is extended.
> 
>         HP Pascal supports code compatible with either level of the ISO
>         specification, meets Federal Information Processing Standard
>         Publications (FIPS-109) requirements, and supports many features
>         from the Extended Pascal Standard. HP Pascal has a solid
>         reputation as a robust, production-quality, high-performance
>         compiler. It is a full compiler, not an interpretive one.
>         Tightly integrated wit
> 
>     While I do not have FIPS 109 on my system, FIPS was based on
>     ANSI/IEEE770X3.97, and I do have a copy of the an old DEC pascal
>     manual so I'm 100% sure writeln is there.  I also believe that Turbo
>     Pascal was developed after the ANSI/IEEE770X3.97 was published so
>     the Turbo extension to writeln and any VMS ones should be able to
>     puzzled out.
> 
>     Here is a pointer to Pascal for OpenVMS - User Manual Order Number:
>     AA-PXSND-TK
>     <https://support.hpe.com/hpsc/doc/public/display?docId=emr_na-c04619822> 
>       This may give you hints.
> 
>     That said, I have a PDF of the VMS Pascal Reference, but lord knows
>     where it came from; probably my time at DEC.   I have to believe its
>     on bitsavers or the like.   But when I look on page 9-67, Section
>     9.8.26 defines the WRITELN procedure as defined in the standard with
>     the one DEC extension of supporting that last optional parameter to
>     be: [,ERROR := error-recovery] where error-recovery  is defined as
>     the action to be taken when an error occurs.
> 
>       As other have said maybe its something silly from file format
>     conversion like <CR><LF> processing as VMS record oriented I/O is
>     different than DOS/Windows. But I suspect you are running into a
>     difference in how I/O is declared and bound to files on the disk. 
>       My experience with a number of different Pascal compilers 'back in
>     the day' was this was an area for wide variation.   This is what I
>     would look up in the HP/Compaq/DEC user manuals I just pointed you
>     too.  I suspect that the 'VMS Pascal Language' manual should help
>     you through the DEC variant, so google is your friend to try find a
>     PDF.  With that open and a Turbo Pascal manual I think you'll be
>     fine (and if you cannot find a Turbo manual, I have to believe the
>     freepascal.org <http://freepascal.org> docs will get you a long way
>     since they claim to be 100% Turbo Pascal and Delphi compatible).
> 
>     BTW:  One other though/place where Pascal I/O can differ is
>     character sets, although I don't think it a problem because PCs and
>     Vaxen never had this issue, if you read any the reports or "Jensen
>     and Wirth" you will notice that Pascal was defined for a 6-bit byte
>     on a CDC-6600 system (SCOPE was the OS IIRC).    As I have said
>     elsewhere, a 6-bit character was not unusual on earlier systems ->
>     today, we can thank Fred Brooks for the 8-bit byte (Gene Amdahl
>     wanted it to be 6 bits but Brooks kicked him out of his office until
>     he had something that could easily be handled by SW - /i.e/. a power
>     of 2, which Amdahl thought was wasteful for the HW).
> 
>     Anyway, characters can be an issue when moving Pascal code because
>     original Pascal was defined with some CDC isms and in those days,
>     CDC had as number of different character sets. I note that if look
>     at the ANSI standard you'll noted the definition of all identifiers
>     is just the lower case [english] chars a-zfor letters, the
>     traditional digits 0-9and very limited number of special-symbols ( +
>     - * / = < > [ ] . , : ' | ( ) ).  They do say:
> 
>         The representation of any letter (upper-case or lower-case,
>         differences of font, /etc/.) occurring anywhere outside of a
>         character-string (see 6.1.7) shall be insignificant in that
>         occurrence to the meaning of the program.
> 
>     Because of the '6-bit ness' of some systems, the standard even
>     provides for alternative tokens to do things like square braces to
>     (.and .)or vertical bar to @[and I think may allow ^to be used for
>     same IIRC].
> 
>     Also remember that DEC manuals tended to show the identifiers in
>     upper case (go figure).  And since both Vaxen and Intel processors
>     (/i.e. /VMS Pascal and Turbo Pascal) support at least 7-bit ASCII
>     fitting into an 8 bit character, and DEC added support for other
>     special symbols such as dollar $, but I have to believe the problem
>     is not in character set.
> 
>     Best wishes,
>     Clem
> 
>> 
> 
> 
> 
> _______________________________________________
> Simh mailing list
> Simh at trailing-edge.com
> http://mailman.trailing-edge.com/mailman/listinfo/simh
> 

-- 
Johnny Billquist                  || "I'm on a bus
                                   ||  on a psychedelic trip
email: bqt at softjar.se             ||  Reading murder books
pdp is alive!                     ||  tryin' to stay hip" - B. Idol


More information about the Simh mailing list