home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume21 / p2c / part03 < prev    next >
Text File  |  1990-04-05  |  52KB  |  1,989 lines

  1. Subject:  v21i048:  Pascal to C translator, Part03/32
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: 015b3e95 44ab8f6b fa8e469b dbeb8707
  5.  
  6. Submitted-by: Dave Gillespie <daveg@csvax.caltech.edu>
  7. Posting-number: Volume 21, Issue 48
  8. Archive-name: p2c/part03
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 3 (of 32)."
  17. # Contents:  HP/include/sysglobals.h src/comment.c src/p2c.h
  18. #   src/pexpr.c.3 src/turbo.imp
  19. # Wrapped by rsalz@litchi.bbn.com on Mon Mar 26 14:29:27 1990
  20. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  21. if test -f 'HP/include/sysglobals.h' -a "${1}" != "-c" ; then 
  22.   echo shar: Will not clobber existing file \"'HP/include/sysglobals.h'\"
  23. else
  24. echo shar: Extracting \"'HP/include/sysglobals.h'\" \(8748 characters\)
  25. sed "s/^X//" >'HP/include/sysglobals.h' <<'END_OF_FILE'
  26. X/* Header for module sysglobals, generated by p2c */
  27. X#ifndef SYSGLOBALS_H
  28. X#define SYSGLOBALS_H
  29. X
  30. X
  31. X
  32. X#ifdef SYSGLOBALS_G
  33. X# define vextern
  34. X#else
  35. X# define vextern extern
  36. X#endif
  37. X
  38. X
  39. X
  40. Xtypedef Char fsidctype[20];
  41. X
  42. X
  43. X
  44. X#define fsidc           "Rev.  3.1  18-Jul-85"
  45. X
  46. X/*20 CHARS: VERSION,DATE,TIME OF FILE SYS*/
  47. X#define mminint         (-32768L)
  48. X
  49. X/*MINIMUM SHORT INTEGER VALUE*/
  50. X#define mmaxint         32767
  51. X
  52. X/*MAXIMUM SHORT INTEGER VALUE*/
  53. X#define maxunit         50
  54. X
  55. X/*MAXIMUM PHYSICAL UNIT NUMBER*/
  56. X#define passleng        16
  57. X
  58. X/*NUMBER OF CHARS IN A PASSWORD*/
  59. X#define vidleng         16
  60. X
  61. X/*NUMBER OF CHARS IN A VOLUME NAME*/
  62. X#define tidleng         16
  63. X
  64. X/*NUMBER OF CHARS IN A FILE TITLE*/
  65. X#define fidleng         120
  66. X
  67. X/*NUMBER OF CHARS IN FILE NAME*/
  68. X#define fblksize        512
  69. X
  70. X/*STANDARD FILE BUFFER LENGTH*/
  71. X#define maxsc           63
  72. X
  73. X/*LARGEST SELECT CODE */
  74. X#define minlevel        1
  75. X
  76. X/*LOWEST INTERRUPT LEVEL*/
  77. X#define maxlevel        6
  78. X/* p2c: Note: Field width for FKIND assumes enum filekind has 16 elements (from sysglobals.imp, line 81) */
  79. X
  80. X
  81. X
  82. X/*LARGEST MASKABLE INTERRUPT LEVEL*/
  83. X/*directory entry*/
  84. X/*bad blocks*/
  85. X/*executable or linkable*/
  86. X/*UCSD format text with editor environment*/
  87. X/*L.I.F. ASCII format text strings*/
  88. X/*file of  <data type, e.g. char, integer,etc.>*/
  89. X/*system (BOOT) file*/
  90. X/*reserved for future expansion*/
  91. X/*FILE INFORMATION*/
  92. X/*BUFFER VARIABLE...F^ */
  93. X/* LIST OF OPEN FILES */
  94. X/*declaration and type information*/
  95. X/* SIZE OF ONE LOGICAL RECORD */
  96. X/* EXTERNAL FILE TYPE */
  97. X/* FILE KIND */
  98. X/* FILE IS LINE FORMATTED */
  99. X/* HAS 512 BYTE BLOCK BUFFER */
  100. X/* FILE HAS NO NAME */
  101. X/* WAS CREATED THIS ASSOCIATION */
  102. X/* FILE ACCESS RIGHTS */
  103. X/*state information*/
  104. X/*F^ AND LOOKAHEAD STATES */
  105. X/* F^ IS AN END OF LINE */
  106. X/* TRIED TO READ PAST END OF FILE */
  107. X/* FILE HAS CHANGED SIZE */
  108. X/* BUFFER NEEDS TO BE WRITTEN */
  109. X/*file size and position*/
  110. X/* FILE POINTER, CURRENT FILE POSITION */
  111. X/*LOGICAL END OF FILE, CURRENT FILE SIZE */
  112. X/*PHYSICAL END OF FILE, MAXIMUM FILE SIZE */
  113. X/*buffering and low level formatting information*/
  114. X/* FILE POSITION OF BUFFER */
  115. X/* SPACE COMPRESSION COUNT */
  116. X/*BUFFER METHOD MODULE */
  117. X/*file association info*/
  118. X/*EXECUTION ADDRESS IN BOOT FILE */
  119. X/* VOLUME NAME */
  120. X/* FILE PASSWORD */
  121. X/* FILE NAME */
  122. X/* ADDITIONAL SYSTEM DEPENDENT INFORMATION */
  123. X/* TEMP FILE IDENTIFIER */
  124. X/* OPTIONAL STRING PARAM */
  125. X/*byte block transfer information*/
  126. X/* START BYTE OF FILE, OR OTHER IDENTIFICATION */
  127. X/* FOR FUTURE EXPANSION */
  128. X/*TRUE IF NO SRM TEMP FILE CREATED */
  129. X/*TRUE IF SRM SHOULD WAIT FOR LOCK */
  130. X/*TRUE IF OLD SRM LINK IS TO BE PURGED */
  131. X/*TRUE IF OPENED WITH OVERWRITE */
  132. X/*TRUE IF PATHID NOT UNIQUE TO FILEID */
  133. X/*TRUE IF FILE OPENED AS LOCKABLE */
  134. X/*TRUE IF FILE IS LOCKED */
  135. X/*TRUE IF DRIVER IS ACTIVE */
  136. X/*PHYSICAL UNIT NUMBER */
  137. X/*CALLED WHEN TRANSFER COMPLETES */
  138. X/* X POSITION FOR  GOTOXY */
  139. X/* Y POSITION FOR  GOTOXY */
  140. X/* FILEID FOR OLD SRM FILE ON REWRITE */
  141. X/*for future expansion*/
  142. X/*large miscellaneous fields sometimes present*/
  143. X/*minimal FIB ends here*/
  144. X/* FILE NAME, EXCEPT VOLUME AND SIZE */
  145. X/*FIB*/
  146. X/*unitable entry definition*/
  147. X/*directory access method*/
  148. X/*byte block transfer method*/
  149. X/*select code*/
  150. X/*bus address*/
  151. X/*disc unit*/
  152. X/*disc volume*/
  153. X/*physical starting byte of volume*/
  154. X/*identifier (Amigo identify sequence)*/
  155. X/*volume id*/
  156. X/*temp for driver use only; init to 0!*/
  157. X/*temp for driver use only; init to 0!*/
  158. X/*device specifier letter*/
  159. X/*unit absent or down flag*/
  160. X/*user can edit input*/
  161. X/*medium not changed since last access*/
  162. X/*volume name must be uppercased*/
  163. X/*fixed/removeable media flag*/
  164. X/*driver mode: report/ignore media change*/
  165. X/*   (bit not used yet)  */
  166. X/*blocked volume flag*/
  167. X/*volume size in bytes */
  168. X/*unitentry*/
  169. X/*0 NOT USED*/
  170. X/* *note* the ioresult enumerations have been partitioned into two */
  171. X/*               mutually-exclusive groups: those beginning with 'z' are reserved */
  172. X/*               for the low-level drivers , and those beginning */
  173. X/*               with 'i' are reserved for the higher-level routines.*/
  174. X/*end marker*/
  175. X/*isr information block*/
  176. X/*interrupt register address*/
  177. X/*interrupt register mask*/
  178. X/*interrupt register target value after masking*/
  179. X/*chaining flag*/
  180. X/*isr*/
  181. X/*pointer to next isrib in linked list*/
  182. X/*100 IS TEMP DISK FLAG*/
  183. X/*DAY OF MONTH*/
  184. X/*0 ==> DATE NOT MEANINGFUL*/
  185. X
  186. Xtypedef enum {
  187. X    untypedfile, badfile, codefile, textfile, asciifile, datafile, sysfile,
  188. X    fkind7, fkind8, fkind9, fkind10, fkind11, fkind12, fkind13, fkind14,
  189. X    lastfkind
  190. X} filekind;
  191. X
  192. Xtypedef Char window[];
  193. X
  194. Xtypedef enum {
  195. X    readbytes, writebytes, flush, writeeol, readtoeol, clearunit, setcursor,
  196. X    getcursor, startread, startwrite, unitstatus, seekeof
  197. X} amrequesttype;
  198. X
  199. Xtypedef struct fib {
  200. X    Char *fwindow;
  201. X    struct fib *flistptr;
  202. X    long frecsize;
  203. X    short feft;
  204. X    unsigned fkind : 4, fistextvar : 1, fbuffered : 1, fanonymous : 1,
  205. X         fisnew : 1, freadable : 1, fwriteable : 1, freadmode : 1,
  206. X         fbufvalid : 1, feoln : 1, feof_ : 1, fmodified : 1,
  207. X         fbufchanged : 1;
  208. X    long fpos, fleof, fpeof, flastpos;
  209. X    short freptcnt;
  210. X    _PROCEDURE am;
  211. X    long fstartaddress;
  212. X    Char fvid[vidleng + 1];
  213. X    Char ffpw[passleng + 1];
  214. X    Char ftid[tidleng + 1];
  215. X    long pathid;
  216. X    short fanonctr;
  217. X    Char *foptstring;
  218. X    long fileid;
  219. X    unsigned fb0 : 1, fb1 : 1, fnosrmtemp : 1, fwaitonlock : 1,
  220. X         fpurgeoldlink : 1, foverwritten : 1, fsavepathid : 1,
  221. X         flockable : 1, flocked : 1, fbusy : 1, funit : 6;
  222. X    _PROCEDURE feot;
  223. X    long fxpos, fypos, foldfileid;
  224. X    long fextra[3];
  225. X    short fextra2;
  226. X    union {
  227. X    Char ftitle[fidleng + 1];
  228. X    Char fbuffer[fblksize];
  229. X    } UU;
  230. X} fib;
  231. X
  232. Xtypedef enum {
  233. X    getvolumename, setvolumename, getvolumedate, setvolumedate, changename,
  234. X    purgename, openfile, createfile, overwritefile, closefile, purgefile,
  235. X    stretchit, makedirectory, crunch, opendirectory, closedirectory, catalog,
  236. X    stripname, setunitprefix, openvolume, duplicatelink, openparentdir,
  237. X    catpasswords, setpasswords, lockfile, unlockfile, openunit
  238. X} damrequesttype;
  239. X
  240. Xtypedef struct unitentry {
  241. X    _PROCEDURE dam;
  242. X    _PROCEDURE tm;
  243. X    uchar sc, ba, du, dv;
  244. X    long byteoffset, devid;
  245. X    Char uvid[vidleng + 1];
  246. X    long dvrtemp;
  247. X    short dvrtemp2;
  248. X    Char letter;
  249. X    unsigned offline : 1, uisinteractive : 1, umediavalid : 1, uuppercase : 1,
  250. X         uisfixed : 1, ureportchange : 1, pad : 1, uisblkd : 1;
  251. X    union {
  252. X    long umaxbytes;
  253. X    } UU;
  254. X} unitentry;
  255. X
  256. Xtypedef unitentry unitabletype[maxunit + 1];
  257. X
  258. Xtypedef _PROCEDURE amtabletype[16];
  259. X
  260. Xtypedef Char suftabletype[16][6];
  261. X
  262. Xtypedef short efttabletype[16];
  263. X
  264. Xtypedef enum {
  265. X    inoerror, zbadblock, ibadunit, zbadmode, ztimeout, ilostunit, ilostfile,
  266. X    ibadtitle, inoroom, inounit, inofile, idupfile, inotclosed, inotopen,
  267. X    ibadformat, znosuchblk, znodevice, zinitfail, zprotected, zstrangei,
  268. X    zbadhardware, zcatchall, zbaddma, inotvalidsize, inotreadable,
  269. X    inotwriteable, inotdirect, idirfull, istrovfl, ibadclose, ieof,
  270. X    zuninitialized, znoblock, znotready, znomedium, inodirectory,
  271. X    ibadfiletype, ibadvalue, icantstretch, ibadrequest, inotlockable,
  272. X    ifilelocked, ifileunlocked, idirnotempty, itoomanyopen, inoaccess,
  273. X    ibadpass, ifilenotdir, inotondir, ineedtempdir, isrmcatchall,
  274. X    zmediumchanged, endioerrs
  275. X} iorsltwd;
  276. X
  277. Xtypedef struct isrib {
  278. X    Char *intregaddr;
  279. X    uchar intregmask, intregvalue;
  280. X    unsigned chainflag : 1;
  281. X    _PROCEDURE proc;
  282. X    struct isrib *link;
  283. X} isrib;
  284. X
  285. Xtypedef isrib *inttabletype[7];
  286. X
  287. Xtypedef struct daterec {
  288. X    char year;
  289. X    unsigned day : 5, month : 4;
  290. X} daterec;
  291. X
  292. Xtypedef struct timerec {
  293. X    unsigned hour : 5, minute : 6, centisecond : 13;
  294. X} timerec;
  295. X
  296. Xtypedef struct datetimerec {
  297. X    daterec date;
  298. X    timerec time;
  299. X} datetimerec;
  300. X
  301. X
  302. X
  303. Xvextern short sysescapecode;
  304. Xvextern Anyptr *openfileptr, *recoverblock, *heapmax, *heapbase;
  305. Xvextern long sysioresult, hardwarestatus, locklevel;
  306. Xvextern unitentry *unitable;
  307. Xvextern inttabletype interrupttable;
  308. Xvextern long endisrhook, actionspending;
  309. Xvextern FILE **gfiles[6];
  310. Xvextern _PROCEDURE *amtable;
  311. Xvextern Char (*suffixtable)[6];
  312. Xvextern short *efttable;
  313. Xvextern long sysunit;
  314. Xvextern Char syvid[vidleng + 1], dkvid[vidleng + 1];
  315. Xvextern Char syslibrary[fidleng + 1];
  316. Xvextern _PROCEDURE debugger;
  317. Xvextern _PROCEDURE cleariohook;
  318. Xvextern inttabletype perminttable;
  319. Xvextern _PROCEDURE deferredaction[10];
  320. Xvextern _PROCEDURE serialtextamhook;
  321. Xvextern Char sysname[10];
  322. Xvextern struct {
  323. X    unsigned reserved1 : 1, reserved2 : 1, nointhpib : 1, crtconfigreg : 1,
  324. X         nokeyboard : 1, highlightsxorbiggraphics : 1, biggraphics : 1,
  325. X         alpha50 : 1;
  326. X} sysflag;
  327. Xvextern struct {
  328. X    char pad7to1;
  329. X    unsigned prompresent : 1;
  330. X} sysflag2;
  331. Xvextern short endsysvars;
  332. X
  333. X
  334. X
  335. X#undef vextern
  336. X
  337. X#endif /*SYSGLOBALS_H*/
  338. X
  339. X/* End. */
  340. X
  341. END_OF_FILE
  342. if test 8748 -ne `wc -c <'HP/include/sysglobals.h'`; then
  343.     echo shar: \"'HP/include/sysglobals.h'\" unpacked with wrong size!
  344. fi
  345. # end of 'HP/include/sysglobals.h'
  346. fi
  347. if test -f 'src/comment.c' -a "${1}" != "-c" ; then 
  348.   echo shar: Will not clobber existing file \"'src/comment.c'\"
  349. else
  350. echo shar: Extracting \"'src/comment.c'\" \(9566 characters\)
  351. sed "s/^X//" >'src/comment.c' <<'END_OF_FILE'
  352. X/* "p2c", a Pascal to C translator.
  353. X   Copyright (C) 1989 David Gillespie.
  354. X   Author's address: daveg@csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
  355. X
  356. XThis program is free software; you can redistribute it and/or modify
  357. Xit under the terms of the GNU General Public License as published by
  358. Xthe Free Software Foundation (any version).
  359. X
  360. XThis program is distributed in the hope that it will be useful,
  361. Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
  362. XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  363. XGNU General Public License for more details.
  364. X
  365. XYou should have received a copy of the GNU General Public License
  366. Xalong with this program; see the file COPYING.  If not, write to
  367. Xthe Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
  368. X
  369. X
  370. X
  371. X#define PROTO_COMMENT_C
  372. X#include "trans.h"
  373. X
  374. X
  375. X
  376. XStatic int cmttablesize;
  377. XStatic uchar *cmttable;
  378. X
  379. XStatic int grabbed_comment;
  380. X
  381. X
  382. X
  383. X
  384. X/* Special comment forms:
  385. X
  386. X   \001\001\001...      Blank line(s), one \001 char per blank line
  387. X   \002text...          Additional line for previous comment
  388. X   \003text...          Additional comment line, absolutely indented
  389. X   \004text...        Note or warning line, unindented
  390. X
  391. X*/
  392. X
  393. X
  394. X
  395. X
  396. Xvoid setup_comment()
  397. X{
  398. X    curcomments = NULL;
  399. X    cmttablesize = 200;
  400. X    cmttable = ALLOC(cmttablesize, uchar, misc);
  401. X    grabbed_comment = 0;
  402. X}
  403. X
  404. X
  405. X
  406. X
  407. X
  408. Xint commentlen(cmt)
  409. XStrlist *cmt;
  410. X{
  411. X    if (cmt)
  412. X    if (*(cmt->s))
  413. X        return strlen(cmt->s) + 4;
  414. X    else
  415. X        return 5;
  416. X    else
  417. X    return 0;
  418. X}
  419. X
  420. X
  421. Xint commentvisible(cmt)
  422. XStrlist *cmt;
  423. X{
  424. X    return (cmt &&
  425. X        getcommentkind(cmt) != CMT_DONE &&
  426. X        eatcomments != 1 && eatcomments != 2);
  427. X}
  428. X
  429. X
  430. X
  431. X
  432. X
  433. X
  434. X/* If preceding statement's POST comments include blank lines,
  435. X   steal all comments after longest stretch of blank lines as
  436. X   PRE comments for the next statement. */
  437. X
  438. Xvoid steal_comments(olds, news, always)
  439. Xlong olds, news;
  440. Xint always;
  441. X{
  442. X    Strlist *cmt, *cmtfirst = NULL, *cmtblank = NULL;
  443. X    int len, longest;
  444. X
  445. X    for (cmt = curcomments; cmt; cmt = cmt->next) {
  446. X    if ((cmt->value & CMT_MASK) == olds &&
  447. X        getcommentkind(cmt) == CMT_POST) {
  448. X        if (!cmtfirst)
  449. X        cmtfirst = cmt;
  450. X    } else {
  451. X        cmtfirst = NULL;
  452. X    }
  453. X    }
  454. X    if (cmtfirst) {
  455. X    if (!always) {
  456. X        longest = 0;
  457. X        for (cmt = cmtfirst; cmt; cmt = cmt->next) {
  458. X        if (cmt->s[0] == '\001') {   /* blank line(s) */
  459. X            len = strlen(cmt->s);
  460. X            if (len > longest) {
  461. X            longest = len;
  462. X            cmtblank = cmt;
  463. X            }
  464. X        }
  465. X        }
  466. X        if (longest > 0) {
  467. X        if (blankafter)
  468. X            cmtfirst = cmtblank->next;
  469. X        else
  470. X            cmtfirst = cmtblank;
  471. X        } else if (commentafter == 1)
  472. X        cmtfirst = NULL;
  473. X    }
  474. X    changecomments(cmtfirst, CMT_POST, olds, CMT_PRE, news);
  475. X    }
  476. X}
  477. X
  478. X
  479. X
  480. XStrlist *fixbeginendcomment(cmt)
  481. XStrlist *cmt;
  482. X{
  483. X    char *cp, *cp2;
  484. X
  485. X    if (!cmt)
  486. X    return NULL;
  487. X    cp = cmt->s;
  488. X    while (isspace(*cp))
  489. X    cp++;
  490. X    if (!strcincmp(cp, "procedure ", 10)) {    /* remove "PROCEDURE" keyword */
  491. X    strcpy(cp, cp+10);
  492. X    } else if (!strcincmp(cp, "function ", 9)) {
  493. X    strcpy(cp, cp+9);
  494. X    }
  495. X    while (isspace(*cp))
  496. X    cp++;
  497. X    if (!*cp)
  498. X    return NULL;
  499. X    if (getcommentkind(cmt) == CMT_ONBEGIN) {
  500. X    cp2 = curctx->sym->name;
  501. X    while (*cp2) {
  502. X        if (toupper(*cp2++) != toupper(*cp++))
  503. X        break;
  504. X    }
  505. X    while (isspace(*cp))
  506. X        cp++;
  507. X    if (!*cp2 && !*cp)
  508. X        return NULL;     /* eliminate function-begin comment */
  509. X    }
  510. X    return cmt;
  511. X}
  512. X
  513. X
  514. X
  515. X
  516. XStatic void attach_mark(sp)
  517. XStmt *sp;
  518. X{
  519. X    long serial;
  520. X
  521. X    while (sp) {
  522. X    serial = sp->serial;
  523. X    if (serial >= 0 && serial < cmttablesize) {
  524. X        cmttable[serial]++;
  525. X        if (sp->kind == SK_IF && serial+1 < cmttablesize)
  526. X        cmttable[serial+1]++;   /* the "else" branch */
  527. X    }
  528. X    attach_mark(sp->stm1);
  529. X    attach_mark(sp->stm2);
  530. X    sp = sp->next;
  531. X    }
  532. X}
  533. X
  534. X
  535. X
  536. Xvoid attach_comments(sbase)
  537. XStmt *sbase;
  538. X{
  539. X    Strlist *cmt;
  540. X    long serial, i, j;
  541. X    int kind;
  542. X
  543. X    if (spitorphancomments)
  544. X    return;
  545. X    if (serialcount >= cmttablesize) {
  546. X    cmttablesize = serialcount + 100;
  547. X    cmttable = REALLOC(cmttable, cmttablesize, uchar);
  548. X    }
  549. X    for (i = 0; i < cmttablesize; i++)
  550. X    cmttable[i] = 0;
  551. X    attach_mark(sbase);
  552. X    for (cmt = curcomments; cmt; cmt = cmt->next) {
  553. X    serial = cmt->value & CMT_MASK;
  554. X    kind = getcommentkind(cmt);
  555. X    if (serial < 0 || serial >= cmttablesize || cmttable[serial])
  556. X        continue;
  557. X    i = 0;
  558. X    j = 0;
  559. X    do {
  560. X        if (commentafter == 1) {
  561. X        j++;
  562. X        if (j % 3 == 0)
  563. X            i++;
  564. X        } else if (commentafter == 0) {
  565. X        i++;
  566. X        if (i % 3 == 0)
  567. X            j++;
  568. X        } else {
  569. X        i++;
  570. X        j++;
  571. X        }
  572. X        if (serial+i < cmttablesize && cmttable[serial+i]) {
  573. X        setcommentkind(cmt, CMT_PRE);
  574. X        cmt->value += i;
  575. X        break;
  576. X        }
  577. X        if (serial-j > 0 && cmttable[serial-j]) {
  578. X        setcommentkind(cmt, CMT_POST);
  579. X        cmt->value -= j;
  580. X        break;
  581. X        }
  582. X    } while (serial+i < cmttablesize || serial-j > 0);
  583. X    }
  584. X}
  585. X
  586. X
  587. X
  588. X
  589. Xvoid setcommentkind(cmt, kind)
  590. XStrlist *cmt;
  591. Xint kind;
  592. X{
  593. X    cmt->value = (cmt->value & CMT_MASK) | (kind << CMT_SHIFT);
  594. X}
  595. X
  596. X
  597. X
  598. Xvoid commentline(kind)
  599. Xint kind;
  600. X{
  601. X    char *cp;
  602. X    Strlist *sl;
  603. X
  604. X    if (grabbed_comment) {
  605. X    grabbed_comment = 0;
  606. X    return;
  607. X    }
  608. X    if (blockkind == TOK_IMPORT || skipping_module)
  609. X    return;
  610. X    if (eatcomments == 1)
  611. X    return;
  612. X    for (cp = curtokbuf; (cp = my_strchr(cp, '*')) != NULL; ) {
  613. X    if (*++cp == '/') {
  614. X        cp[-1] = '%';
  615. X        note("Changed \"* /\" to \"% /\" in comment [140]");
  616. X    }
  617. X    }
  618. X    sl = strlist_append(&curcomments, curtokbuf);
  619. X    sl->value = curserial;
  620. X    setcommentkind(sl, kind);
  621. X}
  622. X
  623. X
  624. X
  625. Xvoid addnote(msg, serial)
  626. Xchar *msg;
  627. Xlong serial;
  628. X{
  629. X    int len1, len2, xextra, extra;
  630. X    int defer = (notephase > 0 && spitcomments == 0);
  631. X    Strlist *sl, *base = NULL, **pbase = (defer) ? &curcomments : &base;
  632. X    char *prefix;
  633. X
  634. X    if (defer && (outf != stdout || !quietmode))
  635. X    printf("%s, line %d: %s\n", infname, inf_lnum, msg);
  636. X    else if (outf != stdout)
  637. X    printf("%s, line %d/%d: %s\n", infname, inf_lnum, outf_lnum, msg);
  638. X    if (verbose)
  639. X    fprintf(logf, "%s, %d/%d: %s\n", infname, inf_lnum, outf_lnum, msg);
  640. X    if (notephase == 2 || regression)
  641. X    prefix = format_s("\004 p2c: %s:", infname);
  642. X    else
  643. X    prefix = format_sd("\004 p2c: %s, line %d:", infname, inf_lnum);
  644. X    len1 = strlen(prefix);
  645. X    len2 = strlen(msg) + 2;
  646. X    if (len1 + len2 < linewidth-4) {
  647. X    msg = format_ss("%s %s ", prefix, msg);
  648. X    } else {
  649. X    extra = xextra = 0;
  650. X    while (len2 - extra > linewidth-6) {
  651. X        while (extra < len2 && !isspace(msg[extra]))
  652. X        extra++;
  653. X        xextra = extra;
  654. X        while (extra < len2 && isspace(msg[extra]))
  655. X        extra++;
  656. X    }
  657. X    prefix = format_sds("%s %.*s", prefix, xextra, msg);
  658. X    msg += extra;
  659. X    sl = strlist_append(pbase, prefix);
  660. X    sl->value = serial;
  661. X    setcommentkind(sl, CMT_POST);
  662. X    msg = format_s("\003 * %s ", msg);
  663. X    }
  664. X    sl = strlist_append(pbase, msg);
  665. X    sl->value = serial;
  666. X    setcommentkind(sl, CMT_POST);
  667. X    outputmode++;
  668. X    outcomments(base);
  669. X    outputmode--;
  670. X}
  671. X
  672. X
  673. X
  674. X
  675. X
  676. X/* Grab a comment off the end of the current line */
  677. XStrlist *grabcomment(kind)
  678. Xint kind;
  679. X{
  680. X    char *cp, *cp2;
  681. X    Strlist *cmt, *savecmt;
  682. X
  683. X    if (grabbed_comment || spitcomments == 1)
  684. X    return NULL;
  685. X    cp = inbufptr;
  686. X    while (isspace(*cp))
  687. X    cp++;
  688. X    if (*cp == ';' || *cp == ',' || *cp == '.')
  689. X    cp++;
  690. X    while (isspace(*cp))
  691. X    cp++;
  692. X    cp2 = curtokbuf;
  693. X    if (*cp == '{') {
  694. X    cp++;
  695. X    while (*cp && *cp != '}')
  696. X        *cp2++ = *cp++;
  697. X    if (!*cp)
  698. X        return NULL;
  699. X    cp++;
  700. X    } else if (*cp == '(' && cp[1] == '*') {
  701. X    cp += 2;
  702. X    while (*cp && (*cp != '*' || cp[1] != ')'))
  703. X        *cp2++ = *cp++;
  704. X    if (!*cp)
  705. X        return NULL;
  706. X    cp += 2;
  707. X    } else
  708. X    return NULL;
  709. X    while (isspace(*cp))
  710. X    cp++;
  711. X    if (*cp)
  712. X    return NULL;
  713. X    *cp2 = 0;
  714. X    savecmt = curcomments;
  715. X    curcomments = NULL;
  716. X    commentline(kind);
  717. X    cmt = curcomments;
  718. X    curcomments = savecmt;
  719. X    grabbed_comment = 1;
  720. X    if (cmtdebug > 1)
  721. X    fprintf(outf, "Grabbed comment [%d] \"%s\"\n", cmt->value & CMT_MASK, cmt->s);
  722. X    return cmt;
  723. X}
  724. X
  725. X
  726. X
  727. Xint matchcomment(cmt, kind, stamp)
  728. XStrlist *cmt;
  729. Xint kind, stamp;
  730. X{
  731. X    if (spitcomments == 1 && (cmt->value & CMT_MASK) != 10000 &&
  732. X    *cmt->s != '\001' && (kind >= 0 || stamp >= 0))
  733. X    return 0;
  734. X    if (!cmt || getcommentkind(cmt) == CMT_DONE)
  735. X    return 0;
  736. X    if (stamp >= 0 && (cmt->value & CMT_MASK) != stamp)
  737. X    return 0;
  738. X    if (kind >= 0) {
  739. X    if (kind & CMT_NOT) {
  740. X        if (getcommentkind(cmt) == kind - CMT_NOT)
  741. X        return 0;
  742. X    } else {
  743. X        if (getcommentkind(cmt) != kind)
  744. X        return 0;
  745. X    }
  746. X    }
  747. X    return 1;
  748. X}
  749. X
  750. X
  751. X
  752. XStrlist *findcomment(cmt, kind, stamp)
  753. XStrlist *cmt;
  754. Xint kind, stamp;
  755. X{
  756. X    while (cmt && !matchcomment(cmt, kind, stamp))
  757. X    cmt = cmt->next;
  758. X    if (cmt && cmtdebug > 1)
  759. X    fprintf(outf, "Found comment [%d] \"%s\"\n", cmt->value & CMT_MASK, cmt->s);
  760. X    return cmt;
  761. X}
  762. X
  763. X
  764. X
  765. XStrlist *extractcomment(cmt, kind, stamp)
  766. XStrlist **cmt;
  767. Xint kind, stamp;
  768. X{
  769. X    Strlist *base, **last, *sl;
  770. X
  771. X    last = &base;
  772. X    while ((sl = *cmt)) {
  773. X    if (matchcomment(sl, kind, stamp)) {
  774. X        if (cmtdebug > 1)
  775. X        fprintf(outf, "Extracted comment [%d] \"%s\"\n",
  776. X                sl->value & CMT_MASK, sl->s);
  777. X        *cmt = sl->next;
  778. X        *last = sl;
  779. X        last = &sl->next;
  780. X    } else
  781. X        cmt = &sl->next;
  782. X    }
  783. X    *last = NULL;
  784. X    return base;
  785. X}
  786. X
  787. X
  788. Xvoid changecomments(cmt, okind, ostamp, kind, stamp)
  789. XStrlist *cmt;
  790. Xint okind, ostamp, kind, stamp;
  791. X{
  792. X    while (cmt) {
  793. X    if (matchcomment(cmt, okind, ostamp)) {
  794. X        if (cmtdebug > 1)
  795. X        fprintf(outf, "Changed comment [%s:%d] \"%s\" ",
  796. X            CMT_NAMES[getcommentkind(cmt)],
  797. X            cmt->value & CMT_MASK, cmt->s);
  798. X        if (kind >= 0)
  799. X        setcommentkind(cmt, kind);
  800. X        if (stamp >= 0)
  801. X        cmt->value = (cmt->value & ~CMT_MASK) | stamp;
  802. X        if (cmtdebug > 1)
  803. X        fprintf(outf, " to [%s:%d]\n",
  804. X            CMT_NAMES[getcommentkind(cmt)], cmt->value & CMT_MASK);
  805. X    }
  806. X    cmt = cmt->next;
  807. X    }
  808. X}
  809. X
  810. X
  811. X
  812. X
  813. X
  814. X
  815. X/* End. */
  816. X
  817. END_OF_FILE
  818. if test 9566 -ne `wc -c <'src/comment.c'`; then
  819.     echo shar: \"'src/comment.c'\" unpacked with wrong size!
  820. fi
  821. # end of 'src/comment.c'
  822. fi
  823. if test -f 'src/p2c.h' -a "${1}" != "-c" ; then 
  824.   echo shar: Will not clobber existing file \"'src/p2c.h'\"
  825. else
  826. echo shar: Extracting \"'src/p2c.h'\" \(11081 characters\)
  827. sed "s/^X//" >'src/p2c.h' <<'END_OF_FILE'
  828. X#ifndef P2C_H
  829. X#define P2C_H
  830. X
  831. X
  832. X/* Header file for code generated by "p2c", the Pascal-to-C translator */
  833. X
  834. X/* "p2c"  Copyright (C) 1989 Dave Gillespie, version 1.14.
  835. X * This file may be copied, modified, etc. in any way.  It is not restricted
  836. X * by the licence agreement accompanying p2c itself.
  837. X */
  838. X
  839. X
  840. X#include <stdio.h>
  841. X
  842. X
  843. X
  844. X/* If the following heuristic fails, compile -DBSD=0 for non-BSD systems,
  845. X   or -DBSD=1 for BSD systems. */
  846. X
  847. X#ifdef M_XENIX
  848. X# define BSD 0
  849. X#endif
  850. X
  851. X#ifdef FILE       /* a #define in BSD, a typedef in SYSV (hp-ux, at least) */
  852. X# ifndef BSD      /*  (a convenient, but horrible kludge!) */
  853. X#  define BSD 1
  854. X# endif
  855. X#endif
  856. X
  857. X#ifdef BSD
  858. X# if !BSD
  859. X#  undef BSD
  860. X# endif
  861. X#endif
  862. X
  863. X
  864. X#ifdef __STDC__
  865. X# include <stddef.h>
  866. X# include <stdlib.h>
  867. X# define HAS_STDLIB
  868. X# define __CAT__(a,b)a##b
  869. X#else
  870. X# ifndef BSD
  871. X#  include <memory.h>
  872. X# endif
  873. X# include <sys/types.h>
  874. X# define __ID__(a)a
  875. X# define __CAT__(a,b)__ID__(a)b
  876. X#endif
  877. X
  878. X
  879. X#ifdef BSD
  880. X# include <strings.h>
  881. X# define memcpy(a,b,n) (bcopy(b,a,n),a)
  882. X# define memcmp(a,b,n) bcmp(a,b,n)
  883. X# define strchr(s,c) index(s,c)
  884. X# define strrchr(s,c) rindex(s,c)
  885. X#else
  886. X# include <string.h>
  887. X#endif
  888. X
  889. X#include <ctype.h>
  890. X#include <math.h>
  891. X#include <setjmp.h>
  892. X#include <assert.h>
  893. X
  894. X
  895. Xtypedef struct __p2c_jmp_buf {
  896. X    struct __p2c_jmp_buf *next;
  897. X    jmp_buf jbuf;
  898. X} __p2c_jmp_buf;
  899. X
  900. X
  901. X/* Warning: The following will not work if setjmp is used simultaneously.
  902. X   This also violates the ANSI restriction about using vars after longjmp,
  903. X   but a typical implementation of longjmp will get it right anyway. */
  904. X
  905. X#ifndef FAKE_TRY
  906. X# define TRY(x)         do { __p2c_jmp_buf __try_jb;  \
  907. X                 __try_jb.next = __top_jb;  \
  908. X                 if (!setjmp((__top_jb = &__try_jb)->jbuf)) {
  909. X# define RECOVER(x)    __top_jb = __try_jb.next; } else {
  910. X# define RECOVER2(x,L)  __top_jb = __try_jb.next; } else {  \
  911. X                 if (0) { L: __top_jb = __try_jb.next; }
  912. X# define ENDTRY(x)      } } while (0) 
  913. X#else
  914. X# define TRY(x)         if (1) {
  915. X# define RECOVER(x)     } else do {
  916. X# define RECOVER2(x,L)  } else do { L: ;
  917. X# define ENDTRY(x)      } while (0)
  918. X#endif
  919. X
  920. X
  921. X
  922. X#ifdef M_XENIX  /* avoid compiler bug */
  923. X# define SHORT_MAX  (32767)
  924. X# define SHORT_MIN  (-32768)
  925. X#endif
  926. X
  927. X
  928. X/* The following definitions work only on twos-complement machines */
  929. X#ifndef SHORT_MAX
  930. X# define SHORT_MAX  (((unsigned short) -1) >> 1)
  931. X# define SHORT_MIN  (~SHORT_MAX)
  932. X#endif
  933. X
  934. X#ifndef INT_MAX
  935. X# define INT_MAX    (((unsigned int) -1) >> 1)
  936. X# define INT_MIN    (~INT_MAX)
  937. X#endif
  938. X
  939. X#ifndef LONG_MAX
  940. X# define LONG_MAX   (((unsigned long) -1) >> 1)
  941. X# define LONG_MIN   (~LONG_MAX)
  942. X#endif
  943. X
  944. X#ifndef SEEK_SET
  945. X# define SEEK_SET   0
  946. X# define SEEK_CUR   1
  947. X# define SEEK_END   2
  948. X#endif
  949. X
  950. X#ifndef EXIT_SUCCESS
  951. X# define EXIT_SUCCESS  0
  952. X# define EXIT_FAILURE  1
  953. X#endif
  954. X
  955. X
  956. X#define SETBITS  32
  957. X
  958. X
  959. X#ifdef __STDC__
  960. X# define Signed     signed
  961. X# define Void       void      /* Void f() = procedure */
  962. X# ifndef Const
  963. X#  define Const     const
  964. X# endif
  965. X# ifndef Volatile
  966. X# define Volatile  volatile
  967. X# endif
  968. X# define PP(x)      x         /* function prototype */
  969. X# define PV()       (void)    /* null function prototype */
  970. Xtypedef void *Anyptr;
  971. X#else
  972. X# define Signed
  973. X# define Void       void
  974. X# ifndef Const
  975. X#  define Const
  976. X# endif
  977. X# ifndef Volatile
  978. X#  define Volatile
  979. X# endif
  980. X# define PP(x)      ()
  981. X# define PV()       ()
  982. Xtypedef char *Anyptr;
  983. X#endif
  984. X
  985. X#ifdef __GNUC__
  986. X# define Inline     inline
  987. X#else
  988. X# define Inline
  989. X#endif
  990. X
  991. X#define Register    register  /* Register variables */
  992. X#define Char        char      /* Characters (not bytes) */
  993. X
  994. X#ifndef Static
  995. X# define Static     static    /* Private global funcs and vars */
  996. X#endif
  997. X
  998. X#ifndef Local
  999. X# define Local      static    /* Nested functions */
  1000. X#endif
  1001. X
  1002. Xtypedef Signed   char schar;
  1003. Xtypedef unsigned char uchar;
  1004. Xtypedef unsigned char boolean;
  1005. X
  1006. X#ifndef true
  1007. X# define true    1
  1008. X# define false   0
  1009. X#endif
  1010. X
  1011. X
  1012. Xtypedef struct {
  1013. X    Anyptr proc, link;
  1014. X} _PROCEDURE;
  1015. X
  1016. X#ifndef _FNSIZE
  1017. X# define _FNSIZE  120
  1018. X#endif
  1019. X
  1020. X
  1021. Xextern Void    PASCAL_MAIN  PP( (int, Char **) );
  1022. Xextern Char    **P_argv;
  1023. Xextern int     P_argc;
  1024. Xextern short   P_escapecode;
  1025. Xextern int     P_ioresult;
  1026. Xextern __p2c_jmp_buf *__top_jb;
  1027. X
  1028. X
  1029. X#ifdef P2C_H_PROTO   /* if you have Ansi C but non-prototyped header files */
  1030. Xextern Char    *strcat      PP( (Char *, Const Char *) );
  1031. Xextern Char    *strchr      PP( (Const Char *, int) );
  1032. Xextern int      strcmp      PP( (Const Char *, Const Char *) );
  1033. Xextern Char    *strcpy      PP( (Char *, Const Char *) );
  1034. Xextern size_t   strlen      PP( (Const Char *) );
  1035. Xextern Char    *strncat     PP( (Char *, Const Char *, size_t) );
  1036. Xextern int      strncmp     PP( (Const Char *, Const Char *, size_t) );
  1037. Xextern Char    *strncpy     PP( (Char *, Const Char *, size_t) );
  1038. Xextern Char    *strrchr     PP( (Const Char *, int) );
  1039. X
  1040. Xextern Anyptr   memchr      PP( (Const Anyptr, int, size_t) );
  1041. Xextern Anyptr   memmove     PP( (Anyptr, Const Anyptr, size_t) );
  1042. Xextern Anyptr   memset      PP( (Anyptr, int, size_t) );
  1043. X#ifndef memcpy
  1044. Xextern Anyptr   memcpy      PP( (Anyptr, Const Anyptr, size_t) );
  1045. Xextern int      memcmp      PP( (Const Anyptr, Const Anyptr, size_t) );
  1046. X#endif
  1047. X
  1048. Xextern int      atoi        PP( (Const Char *) );
  1049. Xextern double   atof        PP( (Const Char *) );
  1050. Xextern long     atol        PP( (Const Char *) );
  1051. Xextern double   strtod      PP( (Const Char *, Char **) );
  1052. Xextern long     strtol      PP( (Const Char *, Char **, int) );
  1053. X#endif /*P2C_H_PROTO*/
  1054. X
  1055. X#ifndef HAS_STDLIB
  1056. Xextern Anyptr   malloc      PP( (size_t) );
  1057. Xextern Void     free        PP( (Anyptr) );
  1058. X#endif
  1059. X
  1060. Xextern int      _OutMem     PV();
  1061. Xextern int      _CaseCheck  PV();
  1062. Xextern int      _NilCheck   PV();
  1063. Xextern int    _Escape     PP( (int) );
  1064. Xextern int    _EscIO      PP( (int) );
  1065. X
  1066. Xextern long     ipow        PP( (long, long) );
  1067. Xextern Char    *strsub      PP( (Char *, Char *, int, int) );
  1068. Xextern Char    *strltrim    PP( (Char *) );
  1069. Xextern Char    *strrtrim    PP( (Char *) );
  1070. Xextern Char    *strrpt      PP( (Char *, Char *, int) );
  1071. Xextern Char    *strpad      PP( (Char *, Char *, int, int) );
  1072. Xextern int      strpos2     PP( (Char *, Char *, int) );
  1073. Xextern long     memavail    PV();
  1074. Xextern int      P_peek      PP( (FILE *) );
  1075. Xextern int      P_eof       PP( (FILE *) );
  1076. Xextern int      P_eoln      PP( (FILE *) );
  1077. Xextern Void     P_readpaoc  PP( (FILE *, Char *, int) );
  1078. Xextern Void     P_readlnpaoc PP( (FILE *, Char *, int) );
  1079. Xextern long     P_maxpos    PP( (FILE *) );
  1080. Xextern long    *P_setunion  PP( (long *, long *, long *) );
  1081. Xextern long    *P_setint    PP( (long *, long *, long *) );
  1082. Xextern long    *P_setdiff   PP( (long *, long *, long *) );
  1083. Xextern long    *P_setxor    PP( (long *, long *, long *) );
  1084. Xextern int      P_inset     PP( (unsigned, long *) );
  1085. Xextern int      P_setequal  PP( (long *, long *) );
  1086. Xextern int      P_subset    PP( (long *, long *) );
  1087. Xextern long    *P_addset    PP( (long *, unsigned) );
  1088. Xextern long    *P_addsetr   PP( (long *, unsigned, unsigned) );
  1089. Xextern long    *P_remset    PP( (long *, unsigned) );
  1090. Xextern long    *P_setcpy    PP( (long *, long *) );
  1091. Xextern long    *P_expset    PP( (long *, long) );
  1092. Xextern long     P_packset   PP( (long *) );
  1093. Xextern int      P_getcmdline PP( (int l, int h, Char *line) );
  1094. Xextern Void     TimeStamp   PP( (int *Day, int *Month, int *Year,
  1095. X                 int *Hour, int *Min, int *Sec) );
  1096. Xextern Void    P_sun_argv  PP( (char *, int, int) );
  1097. X
  1098. X
  1099. X/* I/O error handling */
  1100. X#define _CHKIO(cond,ior,val,def)  ((cond) ? P_ioresult=0,(val)  \
  1101. X                      : P_ioresult=(ior),(def))
  1102. X#define _SETIO(cond,ior)          (P_ioresult = (cond) ? 0 : (ior))
  1103. X
  1104. X/* Following defines are suitable for the HP Pascal operating system */
  1105. X#define FileNotFound     10
  1106. X#define FileNotOpen      13
  1107. X#define FileWriteError   38
  1108. X#define BadInputFormat   14
  1109. X#define EndOfFile        30
  1110. X
  1111. X/* Creating temporary files */
  1112. X#if (defined(BSD) || defined(NO_TMPFILE)) && !defined(HAVE_TMPFILE)
  1113. X# define tmpfile()  (fopen(tmpnam(NULL), "w+"))
  1114. X#endif
  1115. X
  1116. X/* File buffers */
  1117. X#define FILEBUF(f,sc,type) sc int __CAT__(f,_BFLAGS);   \
  1118. X               sc type __CAT__(f,_BUFFER)
  1119. X
  1120. X#define RESETBUF(f,type)   (__CAT__(f,_BFLAGS) = 1)
  1121. X#define SETUPBUF(f,type)   (__CAT__(f,_BFLAGS) = 0)
  1122. X
  1123. X#define GETFBUF(f,type)    (*((__CAT__(f,_BFLAGS) == 1 &&   \
  1124. X                   ((__CAT__(f,_BFLAGS) = 2),   \
  1125. X                fread(&__CAT__(f,_BUFFER),  \
  1126. X                      sizeof(type),1,(f)))),\
  1127. X                  &__CAT__(f,_BUFFER)))
  1128. X#define AGETFBUF(f,type)   ((__CAT__(f,_BFLAGS) == 1 &&   \
  1129. X                 ((__CAT__(f,_BFLAGS) = 2),   \
  1130. X                  fread(&__CAT__(f,_BUFFER),  \
  1131. X                    sizeof(type),1,(f)))),\
  1132. X                __CAT__(f,_BUFFER))
  1133. X
  1134. X#define PUTFBUF(f,type,v)  (GETFBUF(f,type) = (v))
  1135. X#define CPUTFBUF(f,v)      (PUTFBUF(f,char,v))
  1136. X#define APUTFBUF(f,type,v) (memcpy(GETFBUF(f,type), (v),  \
  1137. X                   sizeof(__CAT__(f,_BUFFER))))
  1138. X
  1139. X#define GET(f,type)        (__CAT__(f,_BFLAGS) == 1 ?   \
  1140. X                fread(&__CAT__(f,_BUFFER),sizeof(type),1,(f)) :  \
  1141. X                (__CAT__(f,_BFLAGS) = 1))
  1142. X
  1143. X#define PUT(f,type)        (fwrite(&__CAT__(f,_BUFFER),sizeof(type),1,(f)),  \
  1144. X                (__CAT__(f,_BFLAGS) = 0))
  1145. X#define CPUT(f)            (PUT(f,char))
  1146. X
  1147. X/* Memory allocation */
  1148. X#ifdef __GCC__
  1149. X# define Malloc(n)  (malloc(n) ?: (Anyptr)_OutMem())
  1150. X#else
  1151. Xextern Anyptr __MallocTemp__;
  1152. X# define Malloc(n)  ((__MallocTemp__ = malloc(n)) ? __MallocTemp__ : (Anyptr)_OutMem())
  1153. X#endif
  1154. X#define FreeR(p)    (free((Anyptr)(p)))    /* used if arg is an rvalue */
  1155. X#define Free(p)     (free((Anyptr)(p)), (p)=NULL)
  1156. X
  1157. X/* sign extension */
  1158. X#define SEXT(x,n)   ((x) | -(((x) & (1L<<((n)-1))) << 1))
  1159. X
  1160. X/* packed arrays */   /* BEWARE: these are untested! */
  1161. X#define P_getbits_UB(a,i,n,L)   ((int)((a)[(i)>>(L)-(n)] >>   \
  1162. X                       (((~(i))&((1<<(L)-(n))-1)) << (n)) &  \
  1163. X                       (1<<(1<<(n)))-1))
  1164. X
  1165. X#define P_getbits_SB(a,i,n,L)   ((int)((a)[(i)>>(L)-(n)] <<   \
  1166. X                       (16 - ((((~(i))&((1<<(L)-(n))-1))+1) <<\
  1167. X                          (n)) >> (16-(1<<(n))))))
  1168. X
  1169. X#define P_putbits_UB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |=   \
  1170. X                 (x) << (((~(i))&((1<<(L)-(n))-1)) << (n)))
  1171. X
  1172. X#define P_putbits_SB(a,i,x,n,L) ((a)[(i)>>(L)-(n)] |=   \
  1173. X                 ((x) & (1<<(1<<(n)))-1) <<   \
  1174. X                 (((~(i))&((1<<(L)-(n))-1)) << (n)))
  1175. X
  1176. X#define P_clrbits_B(a,i,n,L)    ((a)[(i)>>(L)-(n)] &=   \
  1177. X                 ~( ((1<<(1<<(n)))-1) <<   \
  1178. X                   (((~(i))&((1<<(L)-(n))-1)) << (n))) )
  1179. X
  1180. X/* small packed arrays */
  1181. X#define P_getbits_US(v,i,n)     ((int)((v) >> (~(i) << (n)) & (1<<(1<<(n)))-1))
  1182. X#define P_getbits_SS(v,i,n)     ((int)((long)(v) << (32 - (((~(i))+1) << (n))) >> (32-(1<<(n)))))
  1183. X#define P_putbits_US(v,i,x,n)   ((v) |= (x) << (~(i) << (n)))
  1184. X#define P_putbits_SS(v,i,x,n)   ((v) |= ((x) & (1<<(1<<(n)))-1) << (~(i) << (n)))
  1185. X#define P_clrbits_S(v,i,n)      ((v) &= ~( ((1<<(1<<(n)))-1) << (~(i) << (n)) ))
  1186. X
  1187. X#define P_max(a,b)   ((a) > (b) ? (a) : (b))
  1188. X#define P_min(a,b)   ((a) < (b) ? (a) : (b))
  1189. X
  1190. X
  1191. X/* Fix toupper/tolower on Suns and other stupid BSD systems */
  1192. X#ifdef toupper
  1193. X# undef toupper
  1194. X# undef tolower
  1195. X# define toupper(c)   my_toupper(c)
  1196. X# define tolower(c)   my_tolower(c)
  1197. X#endif
  1198. X
  1199. X#ifndef _toupper
  1200. X# if 'A' == 65 && 'a' == 97
  1201. X#  define _toupper(c)  ((c)-'a'+'A')
  1202. X#  define _tolower(c)  ((c)-'A'+'a')
  1203. X# else
  1204. X#  define _toupper(c)  toupper(c)
  1205. X#  define _tolower(c)  tolower(c)
  1206. X# endif
  1207. X#endif
  1208. X
  1209. X
  1210. X#endif    /* P2C_H */
  1211. X
  1212. X
  1213. X
  1214. X/* End. */
  1215. X
  1216. X
  1217. END_OF_FILE
  1218. if test 11081 -ne `wc -c <'src/p2c.h'`; then
  1219.     echo shar: \"'src/p2c.h'\" unpacked with wrong size!
  1220. fi
  1221. # end of 'src/p2c.h'
  1222. fi
  1223. if test -f 'src/pexpr.c.3' -a "${1}" != "-c" ; then 
  1224.   echo shar: Will not clobber existing file \"'src/pexpr.c.3'\"
  1225. else
  1226. echo shar: Extracting \"'src/pexpr.c.3'\" \(8365 characters\)
  1227. sed "s/^X//" >'src/pexpr.c.3' <<'END_OF_FILE'
  1228. X            setprec2(10);
  1229. X        checkbreak(breakbeforerel);
  1230. X            wrexpr(ex->args[0], incompat(ex, 0, subprec));
  1231. X            outop(">");
  1232. X            wrexpr(ex->args[1], incompat(ex, 0, subprec));
  1233. X            break;
  1234. X
  1235. X        case EK_LE:
  1236. X            setprec2(10);
  1237. X        checkbreak(breakbeforerel);
  1238. X            wrexpr(ex->args[0], incompat(ex, 0, subprec));
  1239. X            outop("<=");
  1240. X            wrexpr(ex->args[1], incompat(ex, 0, subprec));
  1241. X            break;
  1242. X
  1243. X        case EK_GE:
  1244. X            setprec2(10);
  1245. X        checkbreak(breakbeforerel);
  1246. X            wrexpr(ex->args[0], incompat(ex, 0, subprec));
  1247. X            outop(">=");
  1248. X            wrexpr(ex->args[1], incompat(ex, 0, subprec));
  1249. X            break;
  1250. X
  1251. X        case EK_EQ:
  1252. X            setprec2(9);
  1253. X        checkbreak(breakbeforerel);
  1254. X            wrexpr(ex->args[0], incompat(ex, 0, subprec));
  1255. X            outop("==");
  1256. X            wrexpr(ex->args[1], incompat(ex, 0, subprec));
  1257. X            break;
  1258. X
  1259. X        case EK_NE:
  1260. X            setprec2(9);
  1261. X        checkbreak(breakbeforerel);
  1262. X            wrexpr(ex->args[0], incompat(ex, 0, subprec));
  1263. X            outop("!=");
  1264. X            wrexpr(ex->args[1], incompat(ex, 0, subprec));
  1265. X            break;
  1266. X
  1267. X        case EK_BAND:
  1268. X            setprec3(8);
  1269. X        if (ex->val.type == tp_boolean)
  1270. X        checkbreak(breakbeforelog);
  1271. X        else
  1272. X        checkbreak(breakbeforearith);
  1273. X            wrexpr(ex->args[0], incompat(ex, 0, subprec-1));
  1274. X        outop("&");
  1275. X            wrexpr(ex->args[1], incompat(ex, 1, subprec-1));
  1276. X            break;
  1277. X
  1278. X        case EK_BXOR:
  1279. X            setprec3(7);
  1280. X        checkbreak(breakbeforearith);
  1281. X            wrexpr(ex->args[0], incompat(ex, 0, subprec-1));
  1282. X            outop("^");
  1283. X            wrexpr(ex->args[1], incompat(ex, 1, subprec-1));
  1284. X            break;
  1285. X
  1286. X        case EK_BOR:
  1287. X            setprec3(6);
  1288. X        if (ex->val.type == tp_boolean)
  1289. X        checkbreak(breakbeforelog);
  1290. X        else
  1291. X        checkbreak(breakbeforearith);
  1292. X            wrexpr(ex->args[0], incompat(ex, 0, subprec-1));
  1293. X        outop("|");
  1294. X            wrexpr(ex->args[1], incompat(ex, 1, subprec-1));
  1295. X            break;
  1296. X
  1297. X        case EK_AND:
  1298. X            setprec3(5);
  1299. X        checkbreak(breakbeforelog);
  1300. X        wrexpr(ex->args[0], incompat(ex, 0, subprec-1));
  1301. X            outop("&&");
  1302. X        wrexpr(ex->args[1], incompat(ex, 1, subprec-1));
  1303. X            break;
  1304. X
  1305. X        case EK_OR:
  1306. X            setprec3(4);
  1307. X        checkbreak(breakbeforelog);
  1308. X        wrexpr(ex->args[0], incompat(ex, 0, subprec-1));
  1309. X            outop("||");
  1310. X        wrexpr(ex->args[1], incompat(ex, 1, subprec-1));
  1311. X            break;
  1312. X
  1313. X        case EK_COND:
  1314. X            setprec3(3);
  1315. X        i = 0;
  1316. X        for (;;) {
  1317. X        i++;
  1318. X        if (extraparens != 0)
  1319. X            wrexpr(ex->args[0], 15);
  1320. X        else
  1321. X            wrexpr(ex->args[0], subprec);
  1322. X        NICESPACE();
  1323. X        output("\002?");
  1324. X        NICESPACE();
  1325. X        out_expr(ex->args[1]);
  1326. X        if (ex->args[2]->kind == EK_COND) {
  1327. X            NICESPACE();
  1328. X            output("\002:");
  1329. X            NICESPACE();
  1330. X            ex = ex->args[2];
  1331. X        } else {
  1332. X            NICESPACE();
  1333. X            output((i == 1) ? "\017:" : "\002:");
  1334. X            NICESPACE();
  1335. X            wrexpr(ex->args[2], subprec-1);
  1336. X            break;
  1337. X        }
  1338. X        }
  1339. X            break;
  1340. X
  1341. X        case EK_ASSIGN:
  1342. X            if (ex->args[1]->kind == EK_PLUS &&
  1343. X                exprsame(ex->args[1]->args[0], ex->args[0], 2) &&
  1344. X                ex->args[1]->args[1]->kind == EK_CONST &&
  1345. X                ex->args[1]->args[1]->val.type->kind == TK_INTEGER &&
  1346. X                abs(ex->args[1]->args[1]->val.i) == 1) {
  1347. X        if (prec == 0 && postincrement) {
  1348. X            setprec(15);
  1349. X            wrexpr(ex->args[0], subprec);
  1350. X            EXTRASPACE();
  1351. X            if (ex->args[1]->args[1]->val.i == 1)
  1352. X            output("++");
  1353. X            else
  1354. X            output("--");
  1355. X        } else {
  1356. X            setprec(14);
  1357. X            if (ex->args[1]->args[1]->val.i == 1)
  1358. X            output("++");
  1359. X            else
  1360. X            output("--");
  1361. X            EXTRASPACE();
  1362. X            wrexpr(ex->args[0], subprec-1);
  1363. X        }
  1364. X            } else {
  1365. X                setprec2(2);
  1366. X        checkbreak(breakbeforeassign);
  1367. X                wrexpr(ex->args[0], subprec);
  1368. X                ex2 = copyexpr(ex->args[1]);
  1369. X                j = -1;
  1370. X                switch (ex2->kind) {
  1371. X
  1372. X                    case EK_PLUS:
  1373. X                    case EK_TIMES:
  1374. X                    case EK_BAND:
  1375. X                    case EK_BOR:
  1376. X                    case EK_BXOR:
  1377. X                        for (i = 0; i < ex2->nargs; i++) {
  1378. X                            if (exprsame(ex->args[0], ex2->args[i], 2)) {
  1379. X                                j = i;
  1380. X                                break;
  1381. X                            }
  1382. X                            if (ex2->val.type->kind == TK_REAL)
  1383. X                                break;   /* non-commutative */
  1384. X                        }
  1385. X                        break;
  1386. X
  1387. X                    case EK_DIVIDE:
  1388. X                    case EK_DIV:
  1389. X                    case EK_MOD:
  1390. X                    case EK_LSH:
  1391. X                    case EK_RSH:
  1392. X                        if (exprsame(ex->args[0], ex2->args[0], 2))
  1393. X                            j = 0;
  1394. X                        break;
  1395. X
  1396. X            default:
  1397. X            break;
  1398. X                }
  1399. X                if (j >= 0) {
  1400. X                    if (ex2->nargs == 2)
  1401. X                        ex2 = grabarg(ex2, 1-j);
  1402. X                    else
  1403. X                        delfreearg(&ex2, j);
  1404. X                    switch (ex->args[1]->kind) {
  1405. X
  1406. X                        case EK_PLUS:
  1407. X                            if (expr_looks_neg(ex2)) {
  1408. X                                outop("-=");
  1409. X                                ex2 = makeexpr_neg(ex2);
  1410. X                            } else
  1411. X                                outop("+=");
  1412. X                            break;
  1413. X
  1414. X                        case EK_TIMES:
  1415. X                            outop("*=");
  1416. X                            break;
  1417. X
  1418. X                        case EK_DIVIDE:
  1419. X                        case EK_DIV:
  1420. X                            outop("/=");
  1421. X                            break;
  1422. X
  1423. X                        case EK_MOD:
  1424. X                            outop("%=");
  1425. X                            break;
  1426. X
  1427. X                        case EK_LSH:
  1428. X                            outop("<<=");
  1429. X                            break;
  1430. X
  1431. X                        case EK_RSH:
  1432. X                            outop(">>=");
  1433. X                            break;
  1434. X
  1435. X                        case EK_BAND:
  1436. X                            outop("&=");
  1437. X                            break;
  1438. X
  1439. X                        case EK_BOR:
  1440. X                            outop("|=");
  1441. X                            break;
  1442. X
  1443. X                        case EK_BXOR:
  1444. X                            outop("^=");
  1445. X                            break;
  1446. X
  1447. X            default:
  1448. X                break;
  1449. X                    }
  1450. X                } else {
  1451. X            output(" ");
  1452. X            outop3(breakbeforeassign, "=");
  1453. X            output(" ");
  1454. X                }
  1455. X                if (extraparens != 0 &&
  1456. X                    (ex2->kind == EK_EQ || ex2->kind == EK_NE ||
  1457. X                     ex2->kind == EK_GT || ex2->kind == EK_LT ||
  1458. X                     ex2->kind == EK_GE || ex2->kind == EK_LE ||
  1459. X                     ex2->kind == EK_AND || ex2->kind == EK_OR))
  1460. X                    wrexpr(ex2, 16);
  1461. X                else
  1462. X                    wrexpr(ex2, subprec-1);
  1463. X                freeexpr(ex2);
  1464. X            }
  1465. X            break;
  1466. X
  1467. X        case EK_COMMA:
  1468. X            setprec3(1);
  1469. X            for (i = 0; i < ex->nargs-1; i++) {
  1470. X                wrexpr(ex->args[i], subprec);
  1471. X                output(",\002");
  1472. X                NICESPACE();
  1473. X            }
  1474. X            wrexpr(ex->args[ex->nargs-1], subprec);
  1475. X            break;
  1476. X
  1477. X        default:
  1478. X            intwarning("wrexpr", "bad ex->kind [311]");
  1479. X    }
  1480. X    switch (parens) {
  1481. X      case 1:
  1482. X        output(")");
  1483. X    break;
  1484. X      case 2:
  1485. X    output("\004");
  1486. X    break;
  1487. X    }
  1488. X}
  1489. X
  1490. X
  1491. X
  1492. X/* will parenthesize assignments and "," operators */
  1493. X
  1494. Xvoid out_expr(ex)
  1495. XExpr *ex;
  1496. X{
  1497. X    wrexpr(ex, 2);
  1498. X}
  1499. X
  1500. X
  1501. X
  1502. X/* will not parenthesize anything at top level */
  1503. X
  1504. Xvoid out_expr_top(ex)
  1505. XExpr *ex;
  1506. X{
  1507. X    wrexpr(ex, 0);
  1508. X}
  1509. X
  1510. X
  1511. X
  1512. X/* will parenthesize unless only writing a factor */
  1513. X
  1514. Xvoid out_expr_factor(ex)
  1515. XExpr *ex;
  1516. X{
  1517. X    wrexpr(ex, 15);
  1518. X}
  1519. X
  1520. X
  1521. X
  1522. X/* will parenthesize always */
  1523. X
  1524. Xvoid out_expr_parens(ex)
  1525. XExpr *ex;
  1526. X{
  1527. X    output("(");
  1528. X    wrexpr(ex, 1);
  1529. X    output(")");
  1530. X}
  1531. X
  1532. X
  1533. X
  1534. X/* evaluate expression for side effects only */
  1535. X/* no top-level parentheses */
  1536. X
  1537. Xvoid out_expr_stmt(ex)
  1538. XExpr *ex;
  1539. X{
  1540. X    wrexpr(ex, 0);
  1541. X}
  1542. X
  1543. X
  1544. X
  1545. X/* evaluate expression for boolean (zero/non-zero) result only */
  1546. X/* parenthesizes like out_expr() */
  1547. X
  1548. Xvoid out_expr_bool(ex)
  1549. XExpr *ex;
  1550. X{
  1551. X    wrexpr(ex, 2);
  1552. X}
  1553. X
  1554. X
  1555. X
  1556. X
  1557. X/* End. */
  1558. X
  1559. X
  1560. X
  1561. END_OF_FILE
  1562. if test 8365 -ne `wc -c <'src/pexpr.c.3'`; then
  1563.     echo shar: \"'src/pexpr.c.3'\" unpacked with wrong size!
  1564. fi
  1565. # end of 'src/pexpr.c.3'
  1566. fi
  1567. if test -f 'src/turbo.imp' -a "${1}" != "-c" ; then 
  1568.   echo shar: Will not clobber existing file \"'src/turbo.imp'\"
  1569. else
  1570. echo shar: Extracting \"'src/turbo.imp'\" \(9333 characters\)
  1571. sed "s/^X//" >'src/turbo.imp' <<'END_OF_FILE'
  1572. X
  1573. X{ Turbo Pascal standard units.  For use with p2c. }
  1574. X
  1575. X{ Only partially complete! }
  1576. X
  1577. X
  1578. X
  1579. X
  1580. X{-------------------------------------------------------------------------}
  1581. X
  1582. Xunit printer;
  1583. X
  1584. Xinterface
  1585. X
  1586. Xvar
  1587. X   lst : text;
  1588. X
  1589. Xend;
  1590. X
  1591. X
  1592. X
  1593. X
  1594. X{-------------------------------------------------------------------------}
  1595. X
  1596. Xunit dos;
  1597. X
  1598. Xinterface
  1599. X
  1600. Xconst
  1601. X   FCarry     = $0001;     { 8086 flags }
  1602. X   FParity    = $0004;
  1603. X   FAuxiliary = $0010;
  1604. X   FZero      = $0040;
  1605. X   FSign      = $0080;
  1606. X   FOverflow  = $0100;
  1607. X
  1608. X   fmClosed   = $D7B0;     { File modes }
  1609. X   fmInput    = $D7B1;
  1610. X   fmOutput   = $D7B2;
  1611. X   fmInOut    = $D7B3;
  1612. X
  1613. X   ReadOnly  = $01;        { File attributes }
  1614. X   Hidden    = $02;
  1615. X   SysFile   = $04;
  1616. X   VolumeID  = $08;
  1617. X   Directory = $10;
  1618. X   Archive   = $20;
  1619. X   AnyFile   = $3F;
  1620. X
  1621. X
  1622. Xtype
  1623. X   PathStr = string[79];
  1624. X   DirStr = PathStr;
  1625. X   NameStr = string[8];
  1626. X   ExtStr = string[3];
  1627. X
  1628. X   FileRec =
  1629. X      record
  1630. X         Handle: Word;
  1631. X         Mode: Word;
  1632. X         RecSize: Word;
  1633. X         Private: array [1..26] of Byte;
  1634. X         UserData: array [1..16] of Byte;
  1635. X         Name: array [0..79] of char;
  1636. X      end;
  1637. X
  1638. X   TextBuf = array [0..127] of char;
  1639. X   TextRec =
  1640. X      record
  1641. X         Handle: Word;
  1642. X         Mode: Word;
  1643. X         BufSize: Word;
  1644. X         Private: Word;
  1645. X         BufPos: Word;
  1646. X         BufEnd: Word;
  1647. X         BufPtr: ^TextBuf;
  1648. X         OpenProc: Pointer;
  1649. X         InOutProc: Pointer;
  1650. X         FlushProc: Pointer;
  1651. X         CloseProc: Pointer;
  1652. X         UserData: array [1..16] of Byte;
  1653. X         Name: array [0..79] of char;
  1654. X         Buffer: TextBuf;
  1655. X      end;
  1656. X
  1657. X   Registers =
  1658. X      record
  1659. X         case integer of
  1660. X            0: (AX,BX,CX,DX,BP,SI,DI,ES,Flags: word);
  1661. X            1: (AL,AH,BL,BH,CL,CH,DL,DH: byte);
  1662. X      end;
  1663. X
  1664. X   DateTime =
  1665. X      record
  1666. X         Year, Month, Day, Hour, Min, Sec: word;
  1667. X      end;
  1668. X
  1669. X   SearchRec =
  1670. X      record
  1671. X         Fill: array [1..21] of byte;
  1672. X         Attr: byte;
  1673. X         Time: longint;
  1674. X         Size: longint;
  1675. X         Name: string[12];
  1676. X      end;
  1677. X
  1678. X
  1679. Xvar
  1680. X   DosError: integer;
  1681. X
  1682. Xprocedure GetTime(var hour, minute, second, csec : word);
  1683. Xprocedure GetDate(var year, month, day, dow : word);
  1684. Xprocedure FSplit(fn : PathStr; var dir, name, ext : string);
  1685. X
  1686. X{WarnNames=1}
  1687. Xprocedure Exec(path, cmdLine : PathStr);
  1688. X{WarnNames}
  1689. X
  1690. Xend;
  1691. X
  1692. X
  1693. X
  1694. X
  1695. X
  1696. X{-------------------------------------------------------------------------}
  1697. X
  1698. Xunit crt;
  1699. X
  1700. Xinterface
  1701. X
  1702. X
  1703. Xfunction KeyPressed : boolean;
  1704. Xfunction ReadKey : char;
  1705. X
  1706. Xprocedure ClrScr;
  1707. Xprocedure TextBackground(i : integer);
  1708. Xprocedure Window(a, b, c, d : integer);
  1709. X
  1710. Xvar wherex, wherey : integer;
  1711. X
  1712. Xend;
  1713. X
  1714. X
  1715. X
  1716. X
  1717. X
  1718. X{-------------------------------------------------------------------------}
  1719. X
  1720. Xunit graph;
  1721. X
  1722. Xinterface
  1723. X
  1724. Xconst
  1725. X  gr0k = 0;
  1726. X  grNoInitGraph      = -1;
  1727. X  grNotDetected      = -2;
  1728. X  grFileNotFound     = -3;
  1729. X  grInvalidDriver    = -4;
  1730. X  grNoLoadMem        = -5;
  1731. X  grNoScanMem        = -6;
  1732. X  grNoFloodMem       = -7;
  1733. X  grFontNotFound     = -8;
  1734. X  grNoFontMem        = -9;
  1735. X  grInvalidMode      = -10;
  1736. X  grError            = -11;
  1737. X  grIOerror          = -13;
  1738. X  grInvalidFontNum   = -14;
  1739. X
  1740. X  Detect = 0;
  1741. X  CGA = 1;
  1742. X  MCGA = 2;
  1743. X  EGA = 3;
  1744. X  EGA64 = 4;
  1745. X  EGAMono = 5;
  1746. X  IBM8514 = 6;
  1747. X  HercMono = 7;
  1748. X  ATT400 = 8;
  1749. X  VGA = 9;
  1750. X  PC3270 = 10;
  1751. X  CurrentDriver = -128;
  1752. X
  1753. X  CGAC0 = 0;
  1754. X  CGAC1 = 1;
  1755. X  CGAC2 = 2;
  1756. X  CGAC3 = 3;
  1757. X  CGAHi = 4;
  1758. X  MCGAC0 = 0;
  1759. X  MCGAC1 = 1;
  1760. X  MCGAC2 = 2;
  1761. X  MCGAC3 = 3;
  1762. X  MCGAMed = 4;
  1763. X  MCGAHi = 5;
  1764. X  EGALo = 0;
  1765. X  EGAHi = 1;
  1766. X  EGA64Lo = 0;
  1767. X  EGA64Hi = 1;
  1768. X  EGAMonoHi = 3;
  1769. X  HercMonoHi = 0;
  1770. X  ATT400C0 = 0;
  1771. X  ATT400C1 = 1;
  1772. X  ATT400C2 = 2;
  1773. X  ATT400C3 = 3;
  1774. X  ATT400Med = 4;
  1775. X  ATT400Hi = 5;
  1776. X  VGALo = 0;
  1777. X  VGAMed = 1;
  1778. X  VGAHi = 2;
  1779. X  PC3270Hi = 0;
  1780. X  IBM8514LO = 0;
  1781. X  IBM8514HI = 1;
  1782. X
  1783. X  Black = 0;
  1784. X  Blue = 1;
  1785. X  Green = 2;
  1786. X  Cyan = 3;
  1787. X  Red = 4;
  1788. X  Magenta = 5;
  1789. X  Brown = 6;
  1790. X  LightGray = 7;
  1791. X  DarkGray = 8;
  1792. X  LightBlue = 9;
  1793. X  LightGreen = 10;
  1794. X  LightCyan = 11;
  1795. X  LightRed = 12;
  1796. X  LightMagenta = 13;
  1797. X  Yellow = 14;
  1798. X  White = 15;
  1799. X
  1800. X  SolidLn = 0;
  1801. X  DottedLn = 1;
  1802. X  CenterLn = 2;
  1803. X  DashedLn = 3;
  1804. X  UserBitLn = 4;
  1805. X
  1806. X  NormWidth = 1;
  1807. X  ThickWidth = 3;
  1808. X
  1809. X
  1810. Xtype
  1811. X  ArcCoordsType = record
  1812. X                    X, Y: integer;
  1813. X                    Xstart, Ystart: integer;
  1814. X                    Xend, Yend: integer;
  1815. X                  end;
  1816. X
  1817. Xconst
  1818. X  MaxColors = 15;
  1819. Xtype
  1820. X  PaletteType = record
  1821. X                  Size: byte;
  1822. X                  Colors: array[0..MaxColors] of shortint;
  1823. X                end;
  1824. X  FillPatternType = array[1..8] of byte;
  1825. X  FillSettingsType = record
  1826. X                       Pattern: word;
  1827. X                       Color: word;
  1828. X                     end;
  1829. X  LineSettingsType = record
  1830. X                       LineStyle: word;
  1831. X                       Pattern: word;
  1832. X                       Thickness: word;
  1833. X                     end;
  1834. X  TextSettingsType = record
  1835. X                       Font: word;
  1836. X                       Direction: word;
  1837. X                       CharSize: word;
  1838. X                       Horiz: word;
  1839. X                       Vert: word;
  1840. X                     end;
  1841. X  ViewPortType = record
  1842. X                   x1, y1, x2, y2: integer;
  1843. X                   Clip: boolean;
  1844. X                 end;
  1845. X
  1846. Xconst
  1847. X  LeftText = 0;
  1848. X  CenterText = 1;
  1849. X  RightText = 2;
  1850. X  BottomText = 0;
  1851. X  TopText = 2;
  1852. X
  1853. Xconst
  1854. X  ClipOn = true;
  1855. X  ClipOff = false;
  1856. X
  1857. Xconst
  1858. X  EmptyFill = 0;
  1859. X  SolidFill = 1;
  1860. X  LineFill = 2;
  1861. X  LtSlashFill = 3;
  1862. X  SlashFill = 4;
  1863. X  BkSlashFill = 5;
  1864. X  LtBkSlashFill = 6;
  1865. X  HatchFill = 7;
  1866. X  XHatchFill = 8;
  1867. X  InterleaveFill = 9;
  1868. X  WideDotFill = 10;
  1869. X  CloseDotFill = 11;
  1870. X  UserFill = 17;
  1871. X
  1872. Xconst
  1873. X  NormalPut = 0;
  1874. X  CopyPut = 0;
  1875. X  XORPut = 1;
  1876. X  OrPut = 2;
  1877. X  AndPut = 3;
  1878. X  NotPut = 4;
  1879. X
  1880. X
  1881. Xprocedure Arc(X, Y: integer; StAngle, EndAngle, Radius: word);
  1882. Xprocedure Bar(x1, y1, x2, y2: integer);
  1883. Xprocedure Bar3D(x1, y1, x2, y2: integer; Depth: word; Top: boolean);
  1884. Xprocedure Circle(X, Y: integer; Radius: word);
  1885. Xprocedure ClearDevice;
  1886. Xprocedure ClearViewPort;
  1887. Xprocedure CloseGraph;
  1888. Xprocedure DetectGraph(var GraphDriver, GraphMode: integer);
  1889. Xprocedure DrawPoly(NumPoints: word; var PolyPoints);
  1890. Xprocedure Ellipse(X, Y: integer; StAngle, EndAngle: word;
  1891. X                  XRadius, YRadius: word);
  1892. Xprocedure FillEllipse(X, Y: integer; XRadius, YRadius: word);
  1893. Xprocedure FillPoly(NumPoints: word; var PolyPoints);
  1894. Xprocedure FloodFill(x, y: integer; Border: word);
  1895. Xprocedure GetArcCoords(var ArcCoords: ArcCoordsType);
  1896. Xprocedure GetAspectRatio(var Xasp, Yasp: word);
  1897. Xfunction GetBkColor: word;
  1898. Xfunction GetColor: word;
  1899. Xfunction GetDefaultPalette(var Palette: PaletteType): PaletteType;
  1900. Xfunction GetDriverName: string;
  1901. Xprocedure GetFillPattern(var FillPattern: FillPatternType);
  1902. Xprocedure GetFillSettings(var FillInfo: FillSettingsType);
  1903. Xfunction GetGraphMode: integer;
  1904. Xprocedure GetImage(x1, y1, x2, y2: integer; var BitMap);
  1905. Xprocedure GetLineSettings(var LineInfo: LineSettingsType);
  1906. Xfunction GetMaxColor: word;
  1907. Xfunction GetMaxMode: word;
  1908. Xfunction GetMaxX: integer;
  1909. Xfunction GetMaxY: integer;
  1910. Xfunction GetModeName(ModeNumber: integer): string;
  1911. Xprocedure GetModeRange(GraphDriver: integer; var LoMode, HiMode: integer);
  1912. Xprocedure GetPalette(var Palette: PaletteType);
  1913. Xfunction GetPaletteSize: integer;
  1914. Xfunction GetPixel(X,Y: integer): word;
  1915. Xprocedure GetTextSettings(var TextInfo: TextSettingsType);
  1916. Xprocedure GetViewSettings(var ViewPort: ViewPortType);
  1917. Xfunction GetX: integer;
  1918. Xfunction GetY: integer;
  1919. Xprocedure GraphDefaults;
  1920. Xfunction GraphErrorMsg(ErrorCode: integer): string;
  1921. Xfunction GraphResult: integer;
  1922. Xfunction ImageSize(x1, y1, x2, y2: integer): word;
  1923. Xprocedure InitGraph(var GraphDriver: integer; var GraphMode: integer;
  1924. X                    PathToDriver: string);
  1925. Xfunction InstallUserDriver(Name: string; AutoDetectPtr: pointer): integer;
  1926. Xfunction InstallUserFont(FontFileName: string): integer;
  1927. Xprocedure Line(x1, y1, x2, y2: integer);
  1928. Xprocedure LineRel(Dx, Dy: integer);
  1929. Xprocedure LineTo(x, y: integer);
  1930. Xprocedure MoveRel(Dx, Dy: integer);
  1931. Xprocedure MoveTo(x, y: integer);
  1932. Xprocedure OutText(TextString: string);
  1933. Xprocedure OutTextXY(X,Y: integer; TextString: string);
  1934. Xprocedure PieSlice(x, y: integer; StAngle, EndAngle, Radius: word);
  1935. Xprocedure PutImage(x, y: integer; var BitMap; BitBlt: word);
  1936. Xprocedure PutPixel(x, y: integer; Pixel: word);
  1937. Xprocedure Rectangle(x1, y1, x2, y2: integer);
  1938. Xfunction RegisterBGIdriver(driver: pointer): integer;
  1939. Xfunction RegisterBGIfont(font: pointer): integer;
  1940. Xprocedure RestoreCrtMode;
  1941. Xprocedure Sector(x, y: integer; StAngle, EndAngle, XRadius, YRadius: word);
  1942. Xprocedure SetActivePage(Page: word);
  1943. Xprocedure SetAllPalette(var Palette);
  1944. Xprocedure SetAspectRatio(Xasp, Yasp: word);
  1945. Xprocedure SetBkColor(ColorNum: word);
  1946. Xprocedure SetColor(Color: word);
  1947. Xprocedure SetFillPattern(Pattern: FillPatternType; Color: word);
  1948. Xprocedure SetFillStyle(Pattern: word; Color: word);
  1949. Xprocedure SetGraphBufSize(BufSize: word);
  1950. Xprocedure SetGraphMode(Mode: integer);
  1951. Xprocedure SetLineStyle(LineStyle: word; Pattern: word; Thickness: word);
  1952. Xprocedure SetPalette(ColorNum: word; Color: shortint);
  1953. Xprocedure SetRGBPalette(ColorNum, RedValue, GreenValue, BlueValue: integer);
  1954. Xprocedure SetTextJustify(Horiz, Vert: word);
  1955. Xprocedure SetTextStyle(Font: word; Direction: word; CharSize: word);
  1956. Xprocedure SetUserCharSize(MultX, DivX, MultY, DivY: word);
  1957. Xprocedure SetViewPort(x1, y1, x2, y2: integer; Clip: boolean);
  1958. Xprocedure SetVisualPage(Page: word);
  1959. Xprocedure SetWriteMode(WriteMode: integer);
  1960. Xfunction TextHeight(TextString: string): word;
  1961. Xfunction TextWidth(TextString: string): word;
  1962. X
  1963. X
  1964. Xend;
  1965. END_OF_FILE
  1966. if test 9333 -ne `wc -c <'src/turbo.imp'`; then
  1967.     echo shar: \"'src/turbo.imp'\" unpacked with wrong size!
  1968. fi
  1969. # end of 'src/turbo.imp'
  1970. fi
  1971. echo shar: End of archive 3 \(of 32\).
  1972. cp /dev/null ark3isdone
  1973. MISSING=""
  1974. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ; do
  1975.     if test ! -f ark${I}isdone ; then
  1976.     MISSING="${MISSING} ${I}"
  1977.     fi
  1978. done
  1979. if test "${MISSING}" = "" ; then
  1980.     echo You have unpacked all 32 archives.
  1981.     echo "Now see PACKNOTES and the README"
  1982.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1983. else
  1984.     echo You still need to unpack the following archives:
  1985.     echo "        " ${MISSING}
  1986. fi
  1987. ##  End of shell archive.
  1988. exit 0
  1989.