rs@uunet.UU.NET (Rich Salz) (07/28/87)
Submitted-by: Per Bergsten <mcvax!enea!chalmers!holtec!perb> Posting-number: Volume 10, Issue 65 Archive-name: ptoc/Part01 [ This program translates monolithic Pascal programs into monolithic C programs. To compile either the .c or the .p version, you will first have to join all the ptc.c.[1-7] or ptc.p.[1-5] parts together first. The manpage and ptc.doc will also be usefl. --r$ ] #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 12)." # Contents: MANIFEST README makefile ptc.c.7 ptc.man PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'MANIFEST' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MANIFEST'\" else echo shar: Extracting \"'MANIFEST'\" \(594 characters\) sed "s/^X//" >'MANIFEST' <<'END_OF_FILE' X File Name Archive # Description X----------------------------------------------------------- X MANIFEST 1 This shipping list X README 1 X makefile 1 X ptc.c.1 3 X ptc.c.2 4 X ptc.c.3 2 X ptc.c.4 6 X ptc.c.5 7 X ptc.c.6 8 X ptc.c.7 1 X ptc.man 1 X ptc.p.1 12 X ptc.p.2 10 X ptc.p.3 9 X ptc.p.4 11 X ptoc.doc 5 END_OF_FILE if test 594 -ne `wc -c <'MANIFEST'`; then echo shar: \"'MANIFEST'\" unpacked with wrong size! fi # end of 'MANIFEST' fi if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(1473 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' XSetting up the Pascal to C translator. X XThe translator is a single huge Pascal program. If you are working on a UNIX Xsystem that has a Pascal compiler what you need to do is to unpack and Xconcatenate the four parts forming the translator sourcecode, "ptc.p", Xunpack the "makefile", say "make ptc" and take a break. X XIf you are on a non-UNIX system proceed with discretion. X XIf compilation fails due to the program size you may consider attacking the C Xversion, "ptc.c", if this too is too large to compile you may as well give up. XIf it fails to compile or run for other reasons you may try to contact me. X XWhen/if the ptc program is created you may try saying "make tests", this should Xnot produce any output at all. If it does it means that ptc obtained from ptc.p Xdiffered in behaviour from cptc obtained from ptc.c obtained from ptc.p. In that Xcase your Pascal and/or C compilers depart seriously from the ones availible to Xthe author, this may imply a bug in ptc. X XRead the section "Tuning" in the implementation notes and do what you believe Xis appropriate for your installation; recompile and install binary and man-page Xas necessary. X XSend vitriolic comments to /dev/null; Xchecks, constructive critisism and bug-reports to the address below. X X XSincerely, X X Per Bergsten X XEmail: perb%holtec.uucp@chalmers.csnet X ... mcvax!enea!chalmers!holtec!perb Xaka: bergsten@chalmers X XSmail: Holistic Technology AB X Grona Gatan 59 X 414 54 Gothenburg X Sweden X XFax: +46 31 247456 X END_OF_FILE if test 1473 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' fi if test -f 'makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'makefile'\" else echo shar: Extracting \"'makefile'\" \(974 characters\) sed "s/^X//" >'makefile' <<'END_OF_FILE' X# X# @(#)Makefile 1.5 Date 87/05/09 X# XCFLAGS = -O XPFLAGS = -O XFILES = makefile ptc.p ptc.c ptc doc.ms doc.out ptc.man man.out XPAGELEN = -rP70 XDEV = /dev/rst8 XBLK = 126 X X.DEFAULT: X $(GET) -p -s SCCS/s.$@ > $@ X X# default version XS = p Xptc: ptc.$S X $Sc -O -o ptc ptc.$S X X# translated version Xcptc: cptc.c X cc -O -o cptc cptc.c X Xcptc.c: ptc.p ptc X ptc < ptc.p > cptc.c X Xtests: test0 X X X# X# Perform a simple test translating the source with the compiled X# translator and the compairing its own source against its X# translation of its own source. They should be exactly equal. X# Xtest0: ptc cptc.c cptc FRC X cptc < ptc.p > tmp.c X cmp cptc.c tmp.c && rm tmp.c X X XFRC: X X# X# Documentation. X# Xdoc.out: doc.ms X tbl doc.ms | nroff -T$(TERM) $(PAGELEN) -ms - > doc.out X Xman.out: ptc.man X nroff -T$(TERM) $(PAGELEN) -man ptc.man > man.out X X X# X# Maintenance X# Xcleanup: X rm -f cptc cptc.c tmp.c out X Xclean:: cleanup X X Xclobber:: cleanup X X Xtape: $(FILES) X tar cvfb $(DEV) $(BLK) $(FILES) END_OF_FILE if test 974 -ne `wc -c <'makefile'`; then echo shar: \"'makefile'\" unpacked with wrong size! fi # end of 'makefile' fi if test -f 'ptc.c.7' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'ptc.c.7'\" else echo shar: Extracting \"'ptc.c.7'\" \(28856 characters\) sed "s/^X//" >'ptc.c.7' <<'END_OF_FILE' X void Xdefmach(lo, hi, str) X integer lo, hi; X machdefstr str; X{ X register toknidx i; X toknbuf w; X X { register int _j, _i = 1 - 1; X for (_j = 0; _j < 16; ) X w.A[_i++] = str.A[_j++]; X } X if (w.A[machdeflen - 1] != space) X error(ebadmach); X { X toknidx B74 = machdeflen - 1, X B75 = 1; X X if (B74 >= B75) X for (i = B74; ; i--) { X if (w.A[i - 1] != space) { X w.A[i + 1 - 1] = null; X goto L999; X } X if (i == B75) break; X } X } X error(ebadmach); XL999: X if (nmachdefs >= maxmachdefs) X error(emanymachs); X nmachdefs = nmachdefs + 1; X { X register struct S193 *W76 = &machdefs.A[nmachdefs - 1]; X X W76->lolim = lo; X W76->hilim = hi; X W76->typstr = savestr(&w); X } X} X X void Xinitstrstore() X{ X register strbcnt i; X X { X strbcnt B77 = 1, X B78 = maxblkcnt; X X if (B77 <= B78) X for (i = B77; ; i++) { X strstor.A[i] = (strblk *)NIL; X if (i == B78) break; X } X } X strstor.A[0] = (strblk *)malloc((unsigned)(sizeof(*strstor.A[0]))); X strstor.A[0]->A[0] = null; X strfree = 1; X strleft = maxstrblk; X} X X X void Xinitialize() X{ X register hashtyp s; X register pretyps t; X register predefs d; X X lineno = 1; X colno = 0; X initstrstore(); X setlst = (struct S61 *)NIL; X setcnt = 0; X (void)strncpy(hexdig.A, "0123456789ABCDEF", sizeof(hexdig.A)); X symtab = (struct S60 *)NIL; X statlvl = 0; X maxlevel = -1; X enterscope((declptr)NIL); X varno = 0; X usenilp = false; X usesets = false; X useunion = false; X usediff = false; X usemksub = false; X useintr = false; X usesge = false; X usesle = false; X usesne = false; X useseq = false; X usememb = false; X useins = false; X usescpy = false; X usefopn = false; X usescan = false; X usegetl = false; X usecase = false; X usejmps = false; X usebool = false; X usecomp = false; X usemax = false; X { X hashtyp B79 = 0, X B80 = hashmax; X X if (B79 <= B80) X for (s = B79; ; s++) { X idtab.A[s] = (struct S59 *)NIL; X if (s == B80) break; X } X } X { X predefs B81 = dabs, X B82 = dztring; X X if ((int)(B81) <= (int)(B82)) X for (d = B81; ; d = (predefs)((int)(d)+1)) { X deftab.A[(int)(d)] = (struct S61 *)NIL; X defnams.A[(int)(d)] = (struct S62 *)NIL; X if (d == B82) break; X } X } X defkey(sand, *((keyword *)"and ")); X defkey(sarray, *((keyword *)"array ")); X defkey(sbegin, *((keyword *)"begin ")); X defkey(scase, *((keyword *)"case ")); X defkey(sconst, *((keyword *)"const ")); X defkey(sdiv, *((keyword *)"div ")); X defkey(sdo, *((keyword *)"do ")); X defkey(sdownto, *((keyword *)"downto ")); X defkey(selse, *((keyword *)"else ")); X defkey(send, *((keyword *)"end ")); X defkey(sextern, *((keyword *)externsym)); X defkey(sfile, *((keyword *)"file ")); X defkey(sfor, *((keyword *)"for ")); X defkey(sforward, *((keyword *)"forward ")); X defkey(sfunc, *((keyword *)"function ")); X defkey(sgoto, *((keyword *)"goto ")); X defkey(sif, *((keyword *)"if ")); X defkey(sinn, *((keyword *)"in ")); X defkey(slabel, *((keyword *)"label ")); X defkey(smod, *((keyword *)"mod ")); X defkey(snil, *((keyword *)"nil ")); X defkey(snot, *((keyword *)"not ")); X defkey(sof, *((keyword *)"of ")); X defkey(sor, *((keyword *)"or ")); X defkey(sother, *((keyword *)othersym)); X defkey(spacked, *((keyword *)"packed ")); X defkey(sproc, *((keyword *)"procedure ")); X defkey(spgm, *((keyword *)"program ")); X defkey(srecord, *((keyword *)"record ")); X defkey(srepeat, *((keyword *)"repeat ")); X defkey(sset, *((keyword *)"set ")); X defkey(sthen, *((keyword *)"then ")); X defkey(sto, *((keyword *)"to ")); X defkey(stype, *((keyword *)"type ")); X defkey(suntil, *((keyword *)"until ")); X defkey(svar, *((keyword *)"var ")); X defkey(swhile, *((keyword *)"while ")); X defkey(swith, *((keyword *)"with ")); X defkey(seof, *((keyword *)dummysym)); X cprio.A[(int)(nformat) - (int)(nassign)] = 0; X cprio.A[(int)(nrange) - (int)(nassign)] = 0; X cprio.A[(int)(nin) - (int)(nassign)] = 0; X cprio.A[(int)(nset) - (int)(nassign)] = 0; X cprio.A[(int)(nassign) - (int)(nassign)] = 0; X cprio.A[(int)(nor) - (int)(nassign)] = 1; X cprio.A[(int)(nand) - (int)(nassign)] = 2; X cprio.A[(int)(neq) - (int)(nassign)] = 3; X cprio.A[(int)(nne) - (int)(nassign)] = 3; X cprio.A[(int)(nlt) - (int)(nassign)] = 3; X cprio.A[(int)(nle) - (int)(nassign)] = 3; X cprio.A[(int)(ngt) - (int)(nassign)] = 3; X cprio.A[(int)(nge) - (int)(nassign)] = 3; X cprio.A[(int)(nplus) - (int)(nassign)] = 4; X cprio.A[(int)(nminus) - (int)(nassign)] = 4; X cprio.A[(int)(nmul) - (int)(nassign)] = 5; X cprio.A[(int)(ndiv) - (int)(nassign)] = 5; X cprio.A[(int)(nmod) - (int)(nassign)] = 5; X cprio.A[(int)(nquot) - (int)(nassign)] = 5; X cprio.A[(int)(nnot) - (int)(nassign)] = 6; X cprio.A[(int)(numinus) - (int)(nassign)] = 6; X cprio.A[(int)(nuplus) - (int)(nassign)] = 7; X cprio.A[(int)(nindex) - (int)(nassign)] = 7; X cprio.A[(int)(nselect) - (int)(nassign)] = 7; X cprio.A[(int)(nderef) - (int)(nassign)] = 7; X cprio.A[(int)(ncall) - (int)(nassign)] = 7; X cprio.A[(int)(nid) - (int)(nassign)] = 7; X cprio.A[(int)(nchar) - (int)(nassign)] = 7; X cprio.A[(int)(ninteger) - (int)(nassign)] = 7; X cprio.A[(int)(nreal) - (int)(nassign)] = 7; X cprio.A[(int)(nstring) - (int)(nassign)] = 7; X cprio.A[(int)(nnil) - (int)(nassign)] = 7; X pprio.A[(int)(nassign) - (int)(nassign)] = 0; X pprio.A[(int)(nformat) - (int)(nassign)] = 0; X pprio.A[(int)(nrange) - (int)(nassign)] = 1; X pprio.A[(int)(nin) - (int)(nassign)] = 1; X pprio.A[(int)(neq) - (int)(nassign)] = 1; X pprio.A[(int)(nne) - (int)(nassign)] = 1; X pprio.A[(int)(nlt) - (int)(nassign)] = 1; X pprio.A[(int)(nle) - (int)(nassign)] = 1; X pprio.A[(int)(ngt) - (int)(nassign)] = 1; X pprio.A[(int)(nge) - (int)(nassign)] = 1; X pprio.A[(int)(nor) - (int)(nassign)] = 2; X pprio.A[(int)(nplus) - (int)(nassign)] = 2; X pprio.A[(int)(nminus) - (int)(nassign)] = 2; X pprio.A[(int)(nand) - (int)(nassign)] = 3; X pprio.A[(int)(nmul) - (int)(nassign)] = 3; X pprio.A[(int)(ndiv) - (int)(nassign)] = 3; X pprio.A[(int)(nmod) - (int)(nassign)] = 3; X pprio.A[(int)(nquot) - (int)(nassign)] = 3; X pprio.A[(int)(nnot) - (int)(nassign)] = 4; X pprio.A[(int)(numinus) - (int)(nassign)] = 4; X pprio.A[(int)(nuplus) - (int)(nassign)] = 5; X pprio.A[(int)(nset) - (int)(nassign)] = 6; X pprio.A[(int)(nindex) - (int)(nassign)] = 6; X pprio.A[(int)(nselect) - (int)(nassign)] = 6; X pprio.A[(int)(nderef) - (int)(nassign)] = 6; X pprio.A[(int)(ncall) - (int)(nassign)] = 6; X pprio.A[(int)(nid) - (int)(nassign)] = 6; X pprio.A[(int)(nchar) - (int)(nassign)] = 6; X pprio.A[(int)(ninteger) - (int)(nassign)] = 6; X pprio.A[(int)(nreal) - (int)(nassign)] = 6; X pprio.A[(int)(nstring) - (int)(nassign)] = 6; X pprio.A[(int)(nnil) - (int)(nassign)] = 6; X defname(cabort, *((keyword *)"abort ")); X defname(cbreak, *((keyword *)"break ")); X defname(ccontinue, *((keyword *)"continue ")); X defname(cdefine, *((keyword *)"define ")); X defname(cdefault, *((keyword *)"default ")); X defname(cdouble, *((keyword *)"double ")); X defname(cedata, *((keyword *)"edata ")); X defname(cenum, *((keyword *)"enum ")); X defname(cetext, *((keyword *)"etext ")); X defname(cextern, *((keyword *)"extern ")); X defname(cfclose, *((keyword *)"fclose ")); X defname(cfflush, *((keyword *)"fflush ")); X defname(cfgetc, *((keyword *)"fgetc ")); X defname(cfloat, *((keyword *)"float ")); X defname(cfloor, *((keyword *)"floor ")); X defname(cfprintf, *((keyword *)"fprintf ")); X defname(cfputc, *((keyword *)"fputc ")); X defname(cfread, *((keyword *)"fread ")); X defname(cfscanf, *((keyword *)"fscanf ")); X defname(cfwrite, *((keyword *)"fwrite ")); X defname(cgetc, *((keyword *)"getc ")); X defname(cgetpid, *((keyword *)"getpid ")); X defname(cint, *((keyword *)"int ")); X defname(cinclude, *((keyword *)"include ")); X defname(clong, *((keyword *)"long ")); X defname(clog, *((keyword *)"log ")); X defname(cmain, *((keyword *)"main ")); X defname(cmalloc, *((keyword *)"malloc ")); X defname(cprintf, *((keyword *)"printf ")); X defname(cpower, *((keyword *)"pow ")); X defname(cputc, *((keyword *)"putc ")); X defname(cread, *((keyword *)"read ")); X defname(creturn, *((keyword *)"return ")); X defname(cregister, *((keyword *)"register ")); X defname(crewind, *((keyword *)"rewind ")); X defname(cscanf, *((keyword *)"scanf ")); X defname(csetbits, *((keyword *)"setbits ")); X defname(csetword, *((keyword *)"setword ")); X defname(csetptr, *((keyword *)"setptr ")); X defname(cshort, *((keyword *)"short ")); X defname(csigned, *((keyword *)"signed ")); X defname(csizeof, *((keyword *)"sizeof ")); X defname(csprintf, *((keyword *)"sprintf ")); X defname(cstatic, *((keyword *)"static ")); X defname(cstdin, *((keyword *)"stdin ")); X defname(cstdout, *((keyword *)"stdout ")); X defname(cstderr, *((keyword *)"stderr ")); X defname(cstrncmp, *((keyword *)"strncmp ")); X defname(cstrncpy, *((keyword *)"strncpy ")); X defname(cstruct, *((keyword *)"struct ")); X defname(cswitch, *((keyword *)"switch ")); X defname(ctypedef, *((keyword *)"typedef ")); X defname(cundef, *((keyword *)"undef ")); X defname(cungetc, *((keyword *)"ungetc ")); X defname(cunion, *((keyword *)"union ")); X defname(cunlink, *((keyword *)"unlink ")); X defname(cunsigned, *((keyword *)"unsigned ")); X defname(cwrite, *((keyword *)"write ")); X defid(nfunc, dabs, *((keyword *)"abs ")); X defid(nfunc, darctan, *((keyword *)"arctan ")); X defid(nvar, dargc, *((keyword *)"argc ")); X defid(nproc, dargv, *((keyword *)"argv ")); X defid(nscalar, dboolean, *((keyword *)"boolean ")); X defid(ntype, dchar, *((keyword *)"char ")); X defid(nfunc, dchr, *((keyword *)"chr ")); X defid(nproc, dclose, *((keyword *)"close ")); X defid(nfunc, dcos, *((keyword *)"cos ")); X defid(nproc, ddispose, *((keyword *)"dispose ")); X defid(nid, dfalse, *((keyword *)"false ")); X defid(nfunc, deof, *((keyword *)"eof ")); X defid(nfunc, deoln, *((keyword *)"eoln ")); X defid(nproc, dexit, *((keyword *)"exit ")); X defid(nfunc, dexp, *((keyword *)"exp ")); X defid(nproc, dflush, *((keyword *)"flush ")); X defid(nproc, dget, *((keyword *)"get ")); X defid(nproc, dhalt, *((keyword *)"halt ")); X defid(nvar, dinput, *((keyword *)"input ")); X defid(ntype, dinteger, *((keyword *)"integer ")); X defid(nfunc, dln, *((keyword *)"ln ")); X defid(nconst, dmaxint, *((keyword *)"maxint ")); X defid(nproc, dmessage, *((keyword *)"message ")); X defid(nproc, dnew, *((keyword *)"new ")); X defid(nfunc, dodd, *((keyword *)"odd ")); X defid(nfunc, dord, *((keyword *)"ord ")); X defid(nvar, doutput, *((keyword *)"output ")); X defid(nproc, dpack, *((keyword *)"pack ")); X defid(nproc, dpage, *((keyword *)"page ")); X defid(nfunc, dpred, *((keyword *)"pred ")); X defid(nproc, dput, *((keyword *)"put ")); X defid(nproc, dread, *((keyword *)"read ")); X defid(nproc, dreadln, *((keyword *)"readln ")); X defid(ntype, dreal, *((keyword *)"real ")); X defid(nproc, dreset, *((keyword *)"reset ")); X defid(nproc, drewrite, *((keyword *)"rewrite ")); X defid(nfunc, dround, *((keyword *)"round ")); X defid(nfunc, dsin, *((keyword *)"sin ")); X defid(nfunc, dsqr, *((keyword *)"sqr ")); X defid(nfunc, dsqrt, *((keyword *)"sqrt ")); X defid(nfunc, dsucc, *((keyword *)"succ ")); X defid(ntype, dtext, *((keyword *)"text ")); X defid(nid, dtrue, *((keyword *)"true ")); X defid(nfunc, dtrunc, *((keyword *)"trunc ")); X defid(nfunc, dtan, *((keyword *)"tan ")); X defid(nproc, dunpack, *((keyword *)"unpack ")); X defid(nproc, dwrite, *((keyword *)"write ")); X defid(nproc, dwriteln, *((keyword *)"writeln ")); X defid(nfield, dzinit, *((keyword *)"$nit ")); X defid(ntype, dztring, *((keyword *)"$ztring ")); X deftab.A[(int)(dboolean)]->U.V14.tbind->U.V17.tscalid = deftab.A[(int)(dfalse)]; X deftab.A[(int)(dfalse)]->tnext = deftab.A[(int)(dtrue)]; X currsym.st = sinteger; X currsym.U.V3.vint = maxint; X deftab.A[(int)(dmaxint)]->U.V14.tbind = mklit(); X deftab.A[(int)(dargc)]->U.V14.tbind = deftab.A[(int)(dinteger)]->U.V14.tbind; X deftab.A[(int)(dinput)]->U.V14.tbind = deftab.A[(int)(dtext)]->U.V14.tbind; X deftab.A[(int)(doutput)]->U.V14.tbind = deftab.A[(int)(dtext)]->U.V14.tbind; X { X pretyps B83 = tnone, X B84 = terror; X X if ((int)(B83) <= (int)(B84)) X for (t = B83; ; t = (pretyps)((int)(t)+1)) { X switch (t) { X case tboolean: X typnods.A[(int)(t)] = deftab.A[(int)(dboolean)]; X break ; X case tchar: X typnods.A[(int)(t)] = deftab.A[(int)(dchar)]->U.V14.tbind; X break ; X case tinteger: X typnods.A[(int)(t)] = deftab.A[(int)(dinteger)]->U.V14.tbind; X break ; X case treal: X typnods.A[(int)(t)] = deftab.A[(int)(dreal)]->U.V14.tbind; X break ; X case ttext: X typnods.A[(int)(t)] = deftab.A[(int)(dtext)]->U.V14.tbind; X break ; X case tstring: X typnods.A[(int)(t)] = deftab.A[(int)(dztring)]->U.V14.tbind; X break ; X case tnil: case tset: case tpoly: case tnone: X typnods.A[(int)(t)] = mknode(npredef); X break ; X case terror: X break ; X default: X Caseerror(Line); X } X if (Member((unsigned)(t), Conset[163])) X typnods.A[(int)(t)]->U.V12.tobtyp = t; X if (t == B84) break; X } X } X fixinit(defnams.A[(int)(dzinit)]->U.V6.lid->istr); X deftab.A[(int)(dzinit)]->U.V14.tbind = deftab.A[(int)(dinteger)]->U.V14.tbind; X { X predefs B85 = dabs, X B86 = dztring; X X if ((int)(B85) <= (int)(B86)) X for (d = B85; ; d = (predefs)((int)(d)+1)) { X linkup((treeptr)NIL, deftab.A[(int)(d)]); X if (d == B86) break; X } X } X deftab.A[(int)(dchr)]->U.V13.tfuntyp = typnods.A[(int)(tchar)]; X deftab.A[(int)(deof)]->U.V13.tfuntyp = typnods.A[(int)(tboolean)]; X deftab.A[(int)(deoln)]->U.V13.tfuntyp = typnods.A[(int)(tboolean)]; X deftab.A[(int)(dodd)]->U.V13.tfuntyp = typnods.A[(int)(tboolean)]; X deftab.A[(int)(dord)]->U.V13.tfuntyp = typnods.A[(int)(tinteger)]; X deftab.A[(int)(dround)]->U.V13.tfuntyp = typnods.A[(int)(tinteger)]; X deftab.A[(int)(dtrunc)]->U.V13.tfuntyp = typnods.A[(int)(tinteger)]; X deftab.A[(int)(darctan)]->U.V13.tfuntyp = typnods.A[(int)(treal)]; X deftab.A[(int)(dcos)]->U.V13.tfuntyp = typnods.A[(int)(treal)]; X deftab.A[(int)(dsin)]->U.V13.tfuntyp = typnods.A[(int)(treal)]; X deftab.A[(int)(dtan)]->U.V13.tfuntyp = typnods.A[(int)(treal)]; X deftab.A[(int)(dsqrt)]->U.V13.tfuntyp = typnods.A[(int)(treal)]; X deftab.A[(int)(dexp)]->U.V13.tfuntyp = typnods.A[(int)(treal)]; X deftab.A[(int)(dln)]->U.V13.tfuntyp = typnods.A[(int)(treal)]; X deftab.A[(int)(dsqr)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)]; X deftab.A[(int)(dabs)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)]; X deftab.A[(int)(dpred)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)]; X deftab.A[(int)(dsucc)]->U.V13.tfuntyp = typnods.A[(int)(tpoly)]; X deftab.A[(int)(dargv)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(ddispose)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dexit)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dget)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dhalt)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dnew)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dpack)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dput)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dread)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dreadln)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dreset)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(drewrite)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dwrite)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dwriteln)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dmessage)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X deftab.A[(int)(dunpack)]->U.V13.tfuntyp = typnods.A[(int)(tnone)]; X nmachdefs = 0; X defmach(0, 255, *((machdefstr *)"unsigned char ")); X defmach(-128, 127, *((machdefstr *)"char ")); X defmach(0, 65535, *((machdefstr *)"unsigned short ")); X defmach(-32768, 32767, *((machdefstr *)"short ")); X defmach(-2147483647, 2147483647, *((machdefstr *)"long ")); X} X Xextern void exit(); X X void Xerror(m) X errors m; X{ X prtmsg(m); X exit(1); X longjmp(J[0].jb, 9999); X} X X void Xfatal(m) X errors m; X{ X prtmsg(m); X abort(); X} X X/* X** Start of program code X*/ Xmain() X{ X if (setjmp(J[0].jb)) X goto L9999; X initialize(); X if (echo) X (void)fprintf(output.fp, "# ifdef PASCAL\n"), Putl(output, 1); X parse(); X if (echo) X (void)fprintf(output.fp, "# else\n"), Putl(output, 1); X lineno = 0; X lastline = 0; X transform(); X emit(); X if (echo) X (void)fprintf(output.fp, "# endif\n"), Putl(output, 1); XL9999: X ; X exit(0); X} X/* X** End of program code X*/ Xstatic setword Q0[] = { X 1, X 0x03FD X}; Xstatic setword Q1[] = { X 1, X 0x004C X}; Xstatic setword Q2[] = { X 1, X 0x0000 X}; Xstatic setword Q3[] = { X 2, X 0x000E, 0x5210 X}; Xstatic setword Q4[] = { X 2, X 0x000E, 0x1210 X}; Xstatic setword Q5[] = { X 1, X 0x0C00 X}; Xstatic setword Q6[] = { X 1, X 0x000C X}; Xstatic setword Q7[] = { X 2, X 0x000E, 0x0210 X}; Xstatic setword Q8[] = { X 3, X 0x0000, 0x0000, 0x0060 X}; Xstatic setword Q9[] = { X 4, X 0x0002, 0x0000, 0x0064, 0x0800 X}; Xstatic setword Q10[] = { X 1, X 0x0C00 X}; Xstatic setword Q11[] = { X 1, X 0x000C X}; Xstatic setword Q12[] = { X 4, X 0x0000, 0x0000, 0x4FF0, 0x0008 X}; Xstatic setword Q13[] = { X 3, X 0x0000, 0x0000, 0x0780 X}; Xstatic setword Q14[] = { X 3, X 0x0000, 0x0000, 0x0780 X}; Xstatic setword Q15[] = { X 5, X 0x0000, 0x0001, 0x0000, 0x0000, 0x0001 X}; Xstatic setword Q16[] = { X 3, X 0x0000, 0x0000, 0x07E0 X}; Xstatic setword Q17[] = { X 3, X 0x0000, 0x0000, 0xB000 X}; Xstatic setword Q18[] = { X 4, X 0x0000, 0x0008, 0x0000, 0x0040 X}; Xstatic setword Q19[] = { X 3, X 0x0000, 0x0000, 0xB560 X}; Xstatic setword Q20[] = { X 4, X 0x0000, 0x0000, 0x4FF0, 0x0008 X}; Xstatic setword Q21[] = { X 1, X 0x0C00 X}; Xstatic setword Q22[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1700 X}; Xstatic setword Q23[] = { X 2, X 0x0000, 0x0003 X}; Xstatic setword Q24[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1700 X}; Xstatic setword Q25[] = { X 3, X 0x0000, 0x0040, 0x4000 X}; Xstatic setword Q26[] = { X 1, X 0x000E X}; Xstatic setword Q27[] = { X 1, X 0x000E X}; Xstatic setword Q28[] = { X 1, X 0x000C X}; Xstatic setword Q29[] = { X 1, X 0x000E X}; Xstatic setword Q30[] = { X 1, X 0x000E X}; Xstatic setword Q31[] = { X 2, X 0x8000, 0x0045 X}; Xstatic setword Q32[] = { X 1, X 0x000E X}; Xstatic setword Q33[] = { X 1, X 0x000E X}; Xstatic setword Q34[] = { X 3, X 0x0000, 0x0000, 0x0040 X}; Xstatic setword Q35[] = { X 3, X 0x4010, 0x0C00, 0x000A X}; Xstatic setword Q36[] = { X 5, X 0x0300, 0x0000, 0x0004, 0x2000, 0x0001 X}; Xstatic setword Q37[] = { X 4, X 0x0300, 0x0000, 0x0004, 0x2000 X}; Xstatic setword Q38[] = { X 3, X 0x0000, 0x0000, 0x0080 X}; Xstatic setword Q39[] = { X 4, X 0x0040, 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q40[] = { X 1, X 0x0040 X}; Xstatic setword Q41[] = { X 3, X 0x0080, 0x0000, 0x0001 X}; Xstatic setword Q42[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x4000 X}; Xstatic setword Q43[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q44[] = { X 4, X 0x0000, 0x0000, 0x0004, 0x2000 X}; Xstatic setword Q45[] = { X 1, X 0x0040 X}; Xstatic setword Q46[] = { X 2, X 0x0000, 0x8000 X}; Xstatic setword Q47[] = { X 4, X 0x0300, 0x0000, 0x0004, 0x2000 X}; Xstatic setword Q48[] = { X 4, X 0x930C, 0x2001, 0x0834, 0x2000 X}; Xstatic setword Q49[] = { X 4, X 0x930C, 0x2001, 0x0834, 0x3000 X}; Xstatic setword Q50[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1800 X}; Xstatic setword Q51[] = { X 2, X 0x0200, 0x0100 X}; Xstatic setword Q52[] = { X 3, X 0x0200, 0x0100, 0x3C80 X}; Xstatic setword Q53[] = { X 2, X 0x0000, 0x0040 X}; Xstatic setword Q54[] = { X 4, X 0x0000, 0x0000, 0x4FF0, 0x0008 X}; Xstatic setword Q55[] = { X 4, X 0x03E1, 0x80CA, 0xF005, 0xBFFE X}; Xstatic setword Q56[] = { X 4, X 0x0000, 0x0030, 0x3F80, 0x001A X}; Xstatic setword Q57[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0478 X}; Xstatic setword Q58[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0478 X}; Xstatic setword Q59[] = { X 1, X 0x0C0C X}; Xstatic setword Q60[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q61[] = { X 5, X 0x0000, 0x0000, 0x0000, 0x000B, 0x0001 X}; Xstatic setword Q62[] = { X 5, X 0x03E1, 0x80CA, 0xF005, 0xFFFF, 0x0001 X}; Xstatic setword Q63[] = { X 4, X 0x930C, 0x2001, 0x0834, 0x2000 X}; Xstatic setword Q64[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1000 X}; Xstatic setword Q65[] = { X 4, X 0x930C, 0x2001, 0x08B4, 0x2000 X}; Xstatic setword Q66[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2004 X}; Xstatic setword Q67[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q68[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1000 X}; Xstatic setword Q69[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1002 X}; Xstatic setword Q70[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2004 X}; Xstatic setword Q71[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2006 X}; Xstatic setword Q72[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2004 X}; Xstatic setword Q73[] = { X 3, X 0x0002, 0x0000, 0x0800 X}; Xstatic setword Q74[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q75[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1000 X}; Xstatic setword Q76[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q77[] = { X 3, X 0x4000, 0x0400, 0x0808 X}; Xstatic setword Q78[] = { X 3, X 0x0002, 0x0000, 0x0800 X}; Xstatic setword Q79[] = { X 2, X 0x0000, 0x0040 X}; Xstatic setword Q80[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2010 X}; Xstatic setword Q81[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q82[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2010 X}; Xstatic setword Q83[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q84[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0008 X}; Xstatic setword Q85[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1000 X}; Xstatic setword Q86[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q87[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x8000 X}; Xstatic setword Q88[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q89[] = { X 3, X 0x4004, 0x0400, 0x0040 X}; Xstatic setword Q90[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2000 X}; Xstatic setword Q91[] = { X 1, X 0x2400 X}; Xstatic setword Q92[] = { X 3, X 0x4014, 0x0404, 0x000A X}; Xstatic setword Q93[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2000 X}; Xstatic setword Q94[] = { X 3, X 0x6414, 0x0404, 0x000A X}; Xstatic setword Q95[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2000 X}; Xstatic setword Q96[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q97[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q98[] = { X 3, X 0x4004, 0x0400, 0x0840 X}; Xstatic setword Q99[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1800 X}; Xstatic setword Q100[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q101[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1800 X}; Xstatic setword Q102[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q103[] = { X 3, X 0x4004, 0x0400, 0x0848 X}; Xstatic setword Q104[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0020 X}; Xstatic setword Q105[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q106[] = { X 2, X 0x0000, 0x0040 X}; Xstatic setword Q107[] = { X 2, X 0x0000, 0x0040 X}; Xstatic setword Q108[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0010 X}; Xstatic setword Q109[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0008 X}; Xstatic setword Q110[] = { X 4, X 0x0200, 0x0000, 0x0000, 0x2004 X}; Xstatic setword Q111[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q112[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0004 X}; Xstatic setword Q113[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q114[] = { X 3, X 0x0000, 0x0000, 0x3C80 X}; Xstatic setword Q115[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x8000 X}; Xstatic setword Q116[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x8000 X}; Xstatic setword Q117[] = { X 4, X 0x0200, 0x0000, 0x0000, 0x2814 X}; Xstatic setword Q118[] = { X 2, X 0x0802, 0x5000 X}; Xstatic setword Q119[] = { X 4, X 0x0802, 0x5200, 0x3C80, 0x0003 X}; Xstatic setword Q120[] = { X 4, X 0x0200, 0x0000, 0x0000, 0x2004 X}; Xstatic setword Q121[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0002 X}; Xstatic setword Q122[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1800 X}; Xstatic setword Q123[] = { X 3, X 0x0000, 0x0000, 0x3C80 X}; Xstatic setword Q124[] = { X 2, X 0x0000, 0x0040 X}; Xstatic setword Q125[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q126[] = { X 4, X 0x0000, 0x0040, 0x0000, 0x1000 X}; Xstatic setword Q127[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q128[] = { X 3, X 0x0008, 0x0000, 0x0800 X}; Xstatic setword Q129[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1000 X}; Xstatic setword Q130[] = { X 3, X 0x0008, 0x0000, 0x0800 X}; Xstatic setword Q131[] = { X 3, X 0x0000, 0x0000, 0x0880 X}; Xstatic setword Q132[] = { X 3, X 0x0000, 0x0000, 0x0980 X}; Xstatic setword Q133[] = { X 3, X 0x0000, 0x0000, 0x3000 X}; Xstatic setword Q134[] = { X 3, X 0x4004, 0x0400, 0x084A X}; Xstatic setword Q135[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2000 X}; Xstatic setword Q136[] = { X 3, X 0x0000, 0x0000, 0x3F80 X}; Xstatic setword Q137[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0020 X}; Xstatic setword Q138[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q139[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1824 X}; Xstatic setword Q140[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q141[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x1824 X}; Xstatic setword Q142[] = { X 3, X 0x4014, 0x0400, 0x000A X}; Xstatic setword Q143[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2800 X}; Xstatic setword Q144[] = { X 3, X 0x0000, 0x0000, 0x0080 X}; Xstatic setword Q145[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2000 X}; Xstatic setword Q146[] = { X 5, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0001 X}; Xstatic setword Q147[] = { X 3, X 0x4014, 0x0404, 0x000A X}; Xstatic setword Q148[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2000 X}; Xstatic setword Q149[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q150[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x2002 X}; Xstatic setword Q151[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q152[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0804 X}; Xstatic setword Q153[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q154[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0804 X}; Xstatic setword Q155[] = { X 3, X 0x0000, 0x0000, 0x0800 X}; Xstatic setword Q156[] = { X 4, X 0x0000, 0x0000, 0x0000, 0x0804 X}; Xstatic setword Q157[] = { X 3, X 0x0004, 0x0000, 0x0040 X}; Xstatic setword Q158[] = { X 1, X 0x0018 X}; Xstatic setword Q159[] = { X 1, X 0x00C0 X}; Xstatic setword Q160[] = { X 1, X 0x001A X}; Xstatic setword Q161[] = { X 1, X 0x001E X}; Xstatic setword Q162[] = { X 1, X 0x001F X}; Xstatic setword Q163[] = { X 1, X 0x1FE7 X}; Xstatic setword *Conset[] = { X Q163, Q162, Q161, X Q160, Q159, Q158, Q157, Q156, Q155, X Q154, Q153, Q152, Q151, Q150, Q149, X Q148, Q147, Q146, Q145, Q144, Q143, X Q142, Q141, Q140, Q139, Q138, Q137, X Q136, Q135, Q134, Q133, Q132, Q131, X Q130, Q129, Q128, Q127, Q126, Q125, X Q124, Q123, Q122, Q121, Q120, Q119, X Q118, Q117, Q116, Q115, Q114, Q113, X Q112, Q111, Q110, Q109, Q108, Q107, X Q106, Q105, Q104, Q103, Q102, Q101, X Q100, Q99, Q98, Q97, Q96, Q95, X Q94, Q93, Q92, Q91, Q90, Q89, X Q88, Q87, Q86, Q85, Q84, Q83, X Q82, Q81, Q80, Q79, Q78, Q77, X Q76, Q75, Q74, Q73, Q72, Q71, X Q70, Q69, Q68, Q67, Q66, Q65, X Q64, Q63, Q62, Q61, Q60, Q59, X Q58, Q57, Q56, Q55, Q54, Q53, X Q52, Q51, Q50, Q49, Q48, Q47, X Q46, Q45, Q44, Q43, Q42, Q41, X Q40, Q39, Q38, Q37, Q36, Q35, X Q34, Q33, Q32, Q31, Q30, Q29, X Q28, Q27, Q26, Q25, Q24, Q23, X Q22, Q21, Q20, Q19, Q18, Q17, X Q16, Q15, Q14, Q13, Q12, Q11, X Q10, Q9, Q8, Q7, Q6, Q5, X Q4, Q3, Q2, Q1, Q0 X}; X Xstatic setptr XUnion(p1, p2) X register setptr p1, p2; X{ X register int i, j, k; X register setptr sp = Newset(), X p3 = sp; X X j = *p1; X *p3 = j; X if (j > *p2) X j = *p2; X else X *p3 = *p2; X k = *p1 - *p2; X p1++, p2++, p3++; X for (i = 0; i < j; i++) X *p3++ = (*p1++ | *p2++); X while (k > 0) { X *p3++ = *p1++; X k--; X } X while (k < 0) { X *p3++ = *p2++; X k++; X } X return (Saveset(sp)); X} X Xstatic boolean XMember(m, sp) X register unsigned int m; X register setptr sp; X{ X register unsigned int i = m / (setbits+1) + 1; X X if ((i <= *sp) && (sp[i] & (1 << (m % (setbits+1))))) X return (true); X return (false); X} X Xstatic setptr XInsmem(m, sp) X register unsigned int m; X register setptr sp; X{ X register int i, X j = m / (setbits+1) + 1; X X if (*sp < j) X for (i = *sp + 1, *sp = j; i <= *sp; i++) X sp[i] = 0; X sp[j] |= (1 << (m % (setbits+1))); X return (sp); X} X X# ifndef SETSPACE X# define SETSPACE 256 X# endif Xstatic setptr XCurrset(n,sp) X int n; X setptr sp; X{ X static setword Space[SETSPACE]; X static setptr Top = Space; X X switch (n) { X case 0: X Top = Space; X return (0); X case 1: X if (&Space[SETSPACE] - Top <= 15) { X (void)fprintf(stderr, "Set-space exhausted\n"); X exit(1); X } X *Top = 0; X return (Top); X case 2: X if (Top <= &sp[*sp]) X Top = &sp[*sp + 1]; X return (sp); X } X /* NOTREACHED */ X} X Xstatic void XSetncpy(S1, S2, N) X register setptr S1, S2; X register unsigned int N; X{ X register unsigned int m; X X N /= sizeof(setword); X *S1++ = --N; X m = *S2++; X while (m != 0 && N != 0) { X *S1++ = *S2++; X --N; X --m; X } X while (N-- != 0) X *S1++ = 0; X} X Xstatic void XCaseerror(n) X int n; X{ X (void)fprintf(stderr, "Missing case limb: line %d\n", n); X exit(1); X} X END_OF_FILE if test 28856 -ne `wc -c <'ptc.c.7'`; then echo shar: \"'ptc.c.7'\" unpacked with wrong size! fi # end of 'ptc.c.7' fi if test -f 'ptc.man' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'ptc.man'\" else echo shar: Extracting \"'ptc.man'\" \(2583 characters\) sed "s/^X//" >'ptc.man' <<'END_OF_FILE' XFrom enea!holtec!perb Sat May 9 17:47:50 1987 XReceived: by mirror.TMC.COM; Sat, 9 May 87 17:47:37 edt XReceived: from enea.UUCP by seismo.CSS.GOV (5.54/1.14) with UUCP X id AA12891; Sat, 9 May 87 16:51:27 EDT XReceived: by enea.se (5.51/1.33) X id AA18863; Sat, 9 May 87 22:36:30 +0200 (MET) XReceived: by chalmers.UUCP id AA22220; Sat, 9 May 87 22:08:11 -0200 XReceived: by holtec.uucp (2.0/SMI-2.0) X id AA12513; Sat, 9 May 87 21:24:27 -0200 XDate: Sat, 9 May 87 21:24:27 -0200 XFrom: enea!holtec!perb (Per Bergsten) XMessage-Id: <8705091924.AA12513@holtec.uucp> XTo: mirror!sources XStatus: R X XSubject: ptc.man X.\" @(#)ptc.man 1.3 Date 87/05/09 X.if \nP .pl \nP X.TH PTC 1 X.SH NAME Xptc \- Pascal to C translator X.SH SYNOPSIS X.B ptc X< pascal\ source > c\ source X.SH DESCRIPTION X.I Ptc Xreads a correct Pascal program and prints a C program with Xthe same behaviour. XIt is intended as a tool for transporting finished applications to Xenvironments that lack Pascal compilers, Xit is X.I not Xintended for program development. X.PP XThe input should comply with the ISO level 0 Pascal definition. XTwo common Pascal extensions are also recognized: the keyword X.B otherwise Xmay be used for default entries in case-statements, Xthe keyword X.B external Xmay be used in place of the forward directive to signify that Xa procedure or function is defined in a library. XFurthermore, Xthe translator does not require a complete Pascal program, Xa consistent subset of declarations can be translated. XThus a primitive module concept is supported. X.SH "SEE ALSO" XPtc implementation notes. X.SH CAVEATS XThe quality of an object program is of course highly dependent on the XC compiler that processes the translated code. XArithmetic operations are sometimes implemented in a way that is incompatible Xwith the Pascal definition. XFor example, the translator assumes that: X.sp X.nf X a := b mod c X.fi X.sp Xcan be accurately translated into X.sp X.nf X a = b % c X.fi X.sp Xbut that may not be true if c is negative. XA check on the characteristics of integer and float arithmetic is Xstrongly recommended. X.PP XSome Pascal constructs are impossible to express in C. XThe translator will not object to: X.sp X.nf X type ptr = ^ ptr; X.fi X.sp Xbut a C-compiler may balk at the resulting: X.sp X.nf X typedef ptr * ptr; X.fi X.sp X.SH BUGS XThe program can't translate comments from Pascal to C. X.sp XThe translator does not do complete typechecking so Xa Pascal program that isn't formally correct may cause malfunction. X.sp XPassing a procedure as parameter to an enclosing recursive procedure Xmay produce erroneous code (see the implementation notes). X END_OF_FILE if test 2583 -ne `wc -c <'ptc.man'`; then echo shar: \"'ptc.man'\" unpacked with wrong size! fi # end of 'ptc.man' fi echo shar: End of archive 1 \(of 12\). cp /dev/null ark1isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 12 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Rich $alz "Anger is an energy" Cronus Project, BBN Labs rsalz@bbn.com Moderator, comp.sources.unix sources@uunet.uu.net