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

  1. Subject:  v21i047:  Pascal to C translator, Part02/32
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: 0f80ecf4 a1dff4b2 39acc187 3b336861
  5.  
  6. Submitted-by: Dave Gillespie <daveg@csvax.caltech.edu>
  7. Posting-number: Volume 21, Issue 47
  8. Archive-name: p2c/part02
  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 2 (of 32)."
  17. # Contents:  HP/import/fs.imp HP/include/fs.h HP/include/iodecl.h
  18. #   HP/include/misc.h src/INSTALL src/Makefile src/README src/dir.c
  19. #   src/hpmods.c src/system.imp
  20. # Wrapped by rsalz@litchi.bbn.com on Mon Mar 26 14:29:26 1990
  21. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  22. if test -f 'HP/import/fs.imp' -a "${1}" != "-c" ; then 
  23.   echo shar: Will not clobber existing file \"'HP/import/fs.imp'\"
  24. else
  25. echo shar: Extracting \"'HP/import/fs.imp'\" \(4894 characters\)
  26. sed "s/^X//" >'HP/import/fs.imp' <<'END_OF_FILE'
  27. X
  28. X
  29. X{IncludeFrom=fs <p2c/fs.h>}
  30. X
  31. X
  32. X{*VarStrings=0} {*VarFiles=0} {*ExportSymbol=fs_%s} {*Export_Symbol=%s}
  33. X
  34. X
  35. Xmodule fs;    {file support} 
  36. X
  37. Ximport sysglobals, asm, misc;
  38. X
  39. Xexport
  40. X
  41. Xtype 
  42. X     closetype = (cnormal, lock, purge, ccrunch); 
  43. X     faccess = (readonly,writeonly,readwrite,writeappend,overwrite);
  44. X     vptr = record case integer of
  45. X              0: (j: integer);
  46. X              1: (i: ^shortint); 
  47. X              2: (s: ^string80);
  48. X              end;
  49. X           
  50. X
  51. Xprocedure fstripname(s : fid; var pvname,ppath,pfname : string);
  52. Xprocedure fixname(var title: string; kind: filekind); 
  53. Xprocedure zapspaces(var s: string); 
  54. Xfunction suffix(var ftitle: string): filekind; 
  55. Xfunction scantitle (fname: fid; var fvid: vid; var ftitle: fid; 
  56. X                            var fsegs: integer; var fkind: filekind): boolean; 
  57. Xfunction findvolume (var fvid: vid; verify: boolean): unitnum; 
  58. Xprocedure doprefix(var dirname:fid; var kvid:vid; var kunit:integer; 
  59. X                                                             findunit:boolean);
  60. X
  61. X{WarnNames=1}
  62. Xprocedure finitb (var f: fib; window: windowp; recbytes: integer); 
  63. Xprocedure fhpopen(var f: fib; typ: faccess; var title, option: string255);
  64. Xprocedure fhpreset(var f: fib; typ: faccess);
  65. Xprocedure fcloseit(var f: fib; stype: string255);
  66. Xprocedure fclose (var f: fib; ftype: closetype); 
  67. Xprocedure fmaketype(anyvar f:fib; var title, option, typestring: string); 
  68. Xprocedure foverfile(anyvar f:fib; var title, option, typestring: string); 
  69. Xprocedure fanonfile(anyvar f:fib; var name:string; kind:filekind;size:integer);
  70. X
  71. Xprocedure fseek(var f: fib; position: integer); 
  72. Xfunction fposition(var f: fib): integer;
  73. Xfunction fmaxpos(var f: fib): integer;
  74. X
  75. Xfunction fbufferref(var f: fib): windowp;
  76. Xprocedure fget (var f: fib); 
  77. Xprocedure fput (var f: fib); 
  78. Xfunction feof (var f: fib): boolean; 
  79. Xfunction feoln (var f: fib): boolean; 
  80. Xprocedure fwriteln (var f: fib); 
  81. X
  82. Xprocedure fread(anyvar f: fib; anyvar buf: window); 
  83. Xprocedure fwrite(anyvar f: fib;  anyvar buf: window); 
  84. X
  85. X{WarnNames}
  86. Xprocedure freadbytes(anyvar f: fib; anyvar buf: window; size: integer); 
  87. Xprocedure fwritebytes(anyvar f: fib;  anyvar buf: window; size: integer); 
  88. X{*WarnNames=1}
  89. X
  90. Xfunction fblockio (var f: fib; var buf: window;
  91. X                           nblocks,rblock: integer; doread: boolean): integer; 
  92. X
  93. X
  94. Xprocedure killchar (anyvar f: fib; var sinx: integer); 
  95. X
  96. Xprocedure fpage (var t: text); 
  97. Xprocedure foverprint(var t: text); 
  98. Xprocedure fgotoxy(anyvar f: fib;      x, y:  integer); 
  99. Xprocedure fgetxy (anyvar f: fib;  var x, y:  integer); 
  100. X
  101. Xprocedure freadln (var t:text); 
  102. Xprocedure fwritechar (var t: text; ch: char; rleng: shortint); 
  103. Xprocedure freadchar (var t:text; var ch: char);
  104. Xprocedure freadword (var t:text; var i: shortint);
  105. Xprocedure freadint (var t:text; var i: integer); 
  106. Xprocedure fwriteword (var t:text;i,rleng: shortint); 
  107. Xprocedure fwriteint (var t:text;i: integer; rleng: shortint); 
  108. Xprocedure fwritestr (var t:text;anyvar s: string80; rleng: shortint); 
  109. Xprocedure freadstr (var t:text; var s: string);
  110. Xprocedure fwritepaoc (var t: text; var a: window; aleng,rleng: shortint); 
  111. Xprocedure freadpaoc (var t: text; var a: window; aleng: shortint);
  112. Xprocedure freadenum (var t: text; var i: shortint; p: vptr);
  113. Xprocedure fwriteenum(var t: text; i: shortint; rleng: shortint; p: vptr);
  114. Xprocedure freadbool (var t: text; var b: boolean);
  115. Xprocedure fwritebool(var t: text; b: boolean; rleng: shortint);
  116. X
  117. X
  118. Xprocedure freadstrchar (var s: string255;var p2: integer; var ch: char);
  119. Xprocedure fwritestrchar (var s: string;
  120. X                                  var p2: integer; ch: char; rleng: shortint); 
  121. Xprocedure freadstrword (var s: string255;var p2: integer; var i: shortint);
  122. X{PROCEDURE FREADSTRINT (VAR S: STRING255;VAR P2,I: INTEGER);}
  123. Xprocedure fwritestrword (var s: string;var p2: integer; i,rleng: shortint); 
  124. X{PROCEDURE FWRITESTRINT(VAR T: STRING;
  125. X                               VAR P2: INTEGER; I: INTEGER; RLENG: SHORTINT); }
  126. Xprocedure freadstrstr (var t: string255;var p2: integer; var s: string);
  127. Xprocedure fwritestrstr (var s: string; var p2: integer;
  128. X                                        anyvar t: string255; rleng: shortint); 
  129. Xprocedure fwritestrpaoc (var s: string; var p2: integer;
  130. X                                        var a: window; aleng,rleng: shortint); 
  131. Xprocedure freadstrpaoc (var s: string255; var p2: integer;
  132. X                                              var a: window; aleng: shortint);
  133. Xprocedure freadstrenum (var s: string255;
  134. X                                    var p2: integer; var i: shortint; p: vptr);
  135. Xprocedure fwritestrenum(var s: string;
  136. X                                  var p2: integer; i,rleng: shortint; p: vptr);
  137. Xprocedure freadstrbool (var s: string255;var p2: integer; var b: boolean);
  138. Xprocedure fwritestrbool(var s: string;
  139. X                                 var p2: integer; b: boolean; rleng: shortint);
  140. X
  141. X
  142. Xend.
  143. X
  144. X
  145. END_OF_FILE
  146. if test 4894 -ne `wc -c <'HP/import/fs.imp'`; then
  147.     echo shar: \"'HP/import/fs.imp'\" unpacked with wrong size!
  148. fi
  149. # end of 'HP/import/fs.imp'
  150. fi
  151. if test -f 'HP/include/fs.h' -a "${1}" != "-c" ; then 
  152.   echo shar: Will not clobber existing file \"'HP/include/fs.h'\"
  153. else
  154. echo shar: Extracting \"'HP/include/fs.h'\" \(4438 characters\)
  155. sed "s/^X//" >'HP/include/fs.h' <<'END_OF_FILE'
  156. X/* Header for module fs, generated by p2c */
  157. X#ifndef FS_H
  158. X#define FS_H
  159. X
  160. X
  161. X
  162. X/*file support*/
  163. X#ifndef SYSGLOBALS_H
  164. X#include <p2c/sysglobals.h>
  165. X#endif
  166. X
  167. X#ifndef ASM_H
  168. X#include <p2c/asm.h>
  169. X#endif
  170. X
  171. X#ifndef MISC_H
  172. X#include <p2c/misc.h>
  173. X#endif
  174. X
  175. X
  176. X
  177. X#ifdef FS_G
  178. X# define vextern
  179. X#else
  180. X# define vextern extern
  181. X#endif
  182. X
  183. X
  184. X
  185. Xtypedef enum {
  186. X    fs_cnormal, fs_lock, fs_purge, fs_ccrunch
  187. X} fs_closetype;
  188. X
  189. Xtypedef enum {
  190. X    fs_readonly, fs_writeonly, fs_readwrite, fs_writeappend, fs_overwrite
  191. X} fs_faccess;
  192. X
  193. Xtypedef union fs_vptr {
  194. X    long j;
  195. X    short *i;
  196. X    Char *s;
  197. X} fs_vptr;
  198. X
  199. X
  200. X
  201. Xextern Void fs_fstripname PP((Char *s, Char *pvname, Char *ppath,
  202. X                  Char *pfname));
  203. Xextern Void fs_fixname PP((Char *title, int kind));
  204. Xextern Void fs_zapspaces PP((Char *s));
  205. Xextern filekind fs_suffix PP((Char *ftitle));
  206. Xextern boolean fs_scantitle PP((Char *fname, Char *fvid, Char *ftitle,
  207. X                long *fsegs, filekind *fkind));
  208. Xextern char fs_findvolume PP((Char *fvid, int verify));
  209. Xextern Void fs_doprefix PP((Char *dirname, Char *kvid, long *kunit,
  210. X                int findunit));
  211. Xextern Void fs_finitb PP((fib *f, Char *window_, long recbytes));
  212. Xextern Void fs_fhpopen PP((fib *f, int typ, Char *title, Char *option));
  213. Xextern Void fs_fhpreset PP((fib *f, int typ));
  214. Xextern Void fs_fcloseit PP((fib *f, Char *stype));
  215. Xextern Void fs_fclose PP((fib *f, int ftype));
  216. Xextern Void fs_fmaketype PP((fib *f, Char *title, Char *option,
  217. X                 Char *typestring));
  218. Xextern Void fs_foverfile PP((fib *f, Char *title, Char *option,
  219. X                 Char *typestring));
  220. Xextern Void fs_fanonfile PP((fib *f, Char *name, int kind, long size));
  221. Xextern Void fs_fseek PP((fib *f, long position));
  222. Xextern long fs_fposition PP((fib *f));
  223. Xextern long fs_fmaxpos PP((fib *f));
  224. Xextern Char *fs_fbufferref PP((fib *f));
  225. Xextern Void fs_fget PP((fib *f));
  226. Xextern Void fs_fput PP((fib *f));
  227. Xextern boolean fs_feof PP((fib *f));
  228. Xextern boolean fs_feoln PP((fib *f));
  229. Xextern Void fs_fwriteln PP((fib *f));
  230. Xextern Void fs_fread PP((fib *f, Char *buf));
  231. Xextern Void fs_fwrite PP((fib *f, Char *buf));
  232. Xextern Void fs_freadbytes PP((fib *f, Char *buf, long size));
  233. Xextern Void fs_fwritebytes PP((fib *f, Char *buf, long size));
  234. Xextern long fs_fblockio PP((fib *f, Char *buf, long nblocks, long rblock,
  235. X                int doread));
  236. Xextern Void fs_killchar PP((fib *f, long *sinx));
  237. Xextern Void fs_fpage PP((FILE *t));
  238. Xextern Void fs_foverprint PP((FILE *t));
  239. Xextern Void fs_fgotoxy PP((fib *f, long x, long y));
  240. Xextern Void fs_fgetxy PP((fib *f, long *x, long *y));
  241. Xextern Void fs_freadln PP((FILE *t));
  242. Xextern Void fs_fwritechar PP((FILE *t, int ch, int rleng));
  243. Xextern Void fs_freadchar PP((FILE *t, Char *ch));
  244. Xextern Void fs_freadword PP((FILE *t, short *i));
  245. Xextern Void fs_freadint PP((FILE *t, long *i));
  246. Xextern Void fs_fwriteword PP((FILE *t, int i, int rleng));
  247. Xextern Void fs_fwriteint PP((FILE *t, long i, int rleng));
  248. Xextern Void fs_fwritestr PP((FILE *t, Char *s, int rleng));
  249. Xextern Void fs_freadstr PP((FILE *t, Char *s));
  250. Xextern Void fs_fwritepaoc PP((FILE *t, Char *a, int aleng, int rleng));
  251. Xextern Void fs_freadpaoc PP((FILE *t, Char *a, int aleng));
  252. Xextern Void fs_freadenum PP((FILE *t, short *i, fs_vptr p));
  253. Xextern Void fs_fwriteenum PP((FILE *t, int i, int rleng, fs_vptr p));
  254. Xextern Void fs_freadbool PP((FILE *t, boolean *b));
  255. Xextern Void fs_fwritebool PP((FILE *t, int b, int rleng));
  256. Xextern Void fs_freadstrchar PP((Char *s, long *p2, Char *ch));
  257. Xextern Void fs_fwritestrchar PP((Char *s, long *p2, int ch, int rleng));
  258. Xextern Void fs_freadstrword PP((Char *s, long *p2, short *i));
  259. X
  260. X/*PROCEDURE FREADSTRINT (VAR S: STRING255;VAR P2,I: INTEGER);*/
  261. Xextern Void fs_fwritestrword PP((Char *s, long *p2, int i, int rleng));
  262. X
  263. X/*PROCEDURE FWRITESTRINT(VAR T: STRING; */
  264. X/*                                VAR P2: INTEGER; I: INTEGER; RLENG: SHORTINT); */
  265. Xextern Void fs_freadstrstr PP((Char *t, long *p2, Char *s));
  266. Xextern Void fs_fwritestrstr PP((Char *s, long *p2, Char *t, int rleng));
  267. Xextern Void fs_fwritestrpaoc PP((Char *s, long *p2, Char *a, int aleng,
  268. X                 int rleng));
  269. Xextern Void fs_freadstrpaoc PP((Char *s, long *p2, Char *a, int aleng));
  270. Xextern Void fs_freadstrenum PP((Char *s, long *p2, short *i, fs_vptr p));
  271. Xextern Void fs_fwritestrenum PP((Char *s, long *p2, int i, int rleng,
  272. X                 fs_vptr p));
  273. Xextern Void fs_freadstrbool PP((Char *s, long *p2, boolean *b));
  274. Xextern Void fs_fwritestrbool PP((Char *s, long *p2, int b, int rleng));
  275. X
  276. X
  277. X
  278. X#undef vextern
  279. X
  280. X#endif /*FS_H*/
  281. X
  282. X/* End. */
  283. X
  284. END_OF_FILE
  285. if test 4438 -ne `wc -c <'HP/include/fs.h'`; then
  286.     echo shar: \"'HP/include/fs.h'\" unpacked with wrong size!
  287. fi
  288. # end of 'HP/include/fs.h'
  289. fi
  290. if test -f 'HP/include/iodecl.h' -a "${1}" != "-c" ; then 
  291.   echo shar: Will not clobber existing file \"'HP/include/iodecl.h'\"
  292. else
  293. echo shar: Extracting \"'HP/include/iodecl.h'\" \(6087 characters\)
  294. sed "s/^X//" >'HP/include/iodecl.h' <<'END_OF_FILE'
  295. X/* Header for module IODECLARATIONS, generated by p2c */
  296. X#ifndef IODECLARATIONS_H
  297. X#define IODECLARATIONS_H
  298. X
  299. X
  300. X
  301. X#ifndef SYSGLOBALS_H
  302. X#include <p2c/sysglobals.h>
  303. X#endif
  304. X
  305. X
  306. X
  307. X#ifdef IODECLARATIONS_G
  308. X# define vextern
  309. X#else
  310. X# define vextern extern
  311. X#endif
  312. X
  313. X
  314. X
  315. X#define P_iominisc      0
  316. X#define P_iomaxisc      31
  317. X#define P_minrealisc    7
  318. X#define P_maxrealisc    31
  319. X
  320. X#define io_line_feed    '\n'
  321. X#define io_carriage_rtn '\015'
  322. X
  323. X#define P_ioescapecode  (-26)
  324. X#define ioe_no_error    0
  325. X#define ioe_no_card     1
  326. X#define ioe_not_hpib    2
  327. X#define ioe_not_act     3
  328. X#define ioe_not_dvc     4
  329. X#define ioe_no_space    5
  330. X#define ioe_no_data     6
  331. X#define ioe_bad_tfr     7
  332. X#define ioe_isc_busy    8
  333. X#define ioe_buf_busy    9
  334. X#define ioe_bad_cnt     10
  335. X#define ioe_bad_tmo     11
  336. X#define ioe_no_driver   12
  337. X#define ioe_no_dma      13
  338. X#define ioe_no_word     14
  339. X#define ioe_not_talk    15
  340. X#define ioe_not_lstn    16
  341. X#define ioe_timeout     17
  342. X#define ioe_not_sctl    18
  343. X#define ioe_rds_wtc     19
  344. X#define ioe_bad_sct     20
  345. X#define ioe_crd_dwn     21
  346. X#define ioe_eod_seen    22
  347. X#define ioe_misc        23
  348. X#define ioe_sr_toomany  304
  349. X#define ioe_dc_fail     306
  350. X#define ioe_dc_usart    313
  351. X#define ioe_dc_ovfl     314
  352. X#define ioe_dc_clk      315
  353. X#define ioe_dc_cts      316
  354. X#define ioe_dc_car      317
  355. X#define ioe_dc_act      318
  356. X#define ioe_dc_conn     319
  357. X#define ioe_dc_conf     325
  358. X#define ioe_dc_reg      326
  359. X#define ioe_dc_rval     327
  360. X#define ioe_sr_fail     353
  361. X#define no_isc          255
  362. X
  363. X#define gtl_message     '\001'
  364. X#define sdc_message     '\004'
  365. X#define ppc_message     '\005'
  366. X#define get_message     '\b'
  367. X#define tct_message     '\t'
  368. X#define llo_message     '\021'
  369. X#define dcl_message     '\024'
  370. X#define ppu_message     '\025'
  371. X#define spe_message     '\030'
  372. X#define spd_message     '\031'
  373. X#define unl_message     '?'
  374. X#define unt_message     '_'
  375. X#define ppe_message     '`'
  376. X#define ppd_message     'p'
  377. X
  378. X#define talk_constant   64
  379. X#define listen_constant 32
  380. X#define no_card         0
  381. X#define other_card      1
  382. X#define system_card     2
  383. X#define hpib_card       3
  384. X#define gpio_card       4
  385. X#define serial_card     5
  386. X#define graphics_card   6
  387. X#define srm_card        7
  388. X#define bubble_card     8
  389. X#define eprom_prgmr     9
  390. X#define hp98628_dsndl   (-7)
  391. X#define P_hp98629       (-6)
  392. X#define hp_datacomm     (-5)
  393. X#define P_hp98620       (-4)
  394. X#define internal_kbd    (-3)
  395. X#define internal_crt    (-2)
  396. X#define internal_hpib   (-1)
  397. X#define no_id           0
  398. X#define P_hp98624       1
  399. X#define P_hp98626       2
  400. X#define P_hp98622       3
  401. X#define P_hp98623       4
  402. X#define P_hp98625       8
  403. X#define hp98628_async   20
  404. X#define P_hpGATOR       25
  405. X#define P_hp98253       27
  406. X#define P_hp98627       28
  407. X#define P_hp98259       30
  408. X#define P_hp98644       66
  409. X
  410. X
  411. X
  412. Xtypedef enum {
  413. X    ren_line, ifc_line, srq_line, eoi_line, nrfd_line, ndac_line, dav_line,
  414. X    atn_line
  415. X} type_hpib_line;
  416. X
  417. Xtypedef enum {
  418. X    no_parity, odd_parity, even_parity, zero_parity, one_parity
  419. X} type_parity;
  420. X
  421. Xtypedef enum {
  422. X    rts_line, cts_line, dcd_line, dsr_line, drs_line, ri_line, dtr_line
  423. X} type_serial_line;
  424. X
  425. Xtypedef struct drv_table_type {
  426. X    _PROCEDURE iod_init;
  427. X    _PROCEDURE iod_isr;
  428. X    _PROCEDURE iod_rdb;
  429. X    _PROCEDURE iod_wtb;
  430. X    _PROCEDURE iod_rdw;
  431. X    _PROCEDURE iod_wtw;
  432. X    _PROCEDURE iod_rds;
  433. X    _PROCEDURE iod_wtc;
  434. X    _PROCEDURE iod_end;
  435. X    _PROCEDURE iod_tfr;
  436. X    _PROCEDURE iod_send;
  437. X    _PROCEDURE iod_ppoll;
  438. X    _PROCEDURE iod_set, iod_clr;
  439. X    _PROCEDURE iod_test;
  440. X} drv_table_type;
  441. X
  442. Xtypedef union io_funny_proc {
  443. X    _PROCEDURE real_proc;
  444. X    struct {
  445. X    Anyptr *dummy_pr, *dummy_sl;
  446. X    } U0;
  447. X} io_funny_proc;
  448. X
  449. Xtypedef struct io_temp_type {
  450. X    isrib myisrib;
  451. X    io_funny_proc user_isr;
  452. X    Anyptr *user_parm, *card_addr, *in_bufptr, *out_bufptr;
  453. X    Char eirbyte;
  454. X    uchar my_isc;
  455. X    long timeout;
  456. X    short addressed;
  457. X    Char drv_misc[32];
  458. X} io_temp_type;
  459. X
  460. Xtypedef struct io_temp_type2 {
  461. X    isrib myisrib;
  462. X    io_funny_proc user_isr;
  463. X    Anyptr *user_parm, *card_addr, *in_bufptr, *out_bufptr;
  464. X    Char eirbyte;
  465. X    uchar my_isc;
  466. X    long timeout;
  467. X    short addressed;
  468. X    Char drv_misc[128];
  469. X} io_temp_type2;
  470. X
  471. Xtypedef struct io_temp_type3 {
  472. X    isrib myisrib;
  473. X    io_funny_proc user_isr;
  474. X    Anyptr *user_parm, *card_addr, *in_bufptr, *out_bufptr;
  475. X    Char eirbyte;
  476. X    uchar my_isc;
  477. X    long timeout;
  478. X    short addressed;
  479. X    Char drv_misc[160];
  480. X} io_temp_type3;
  481. X
  482. Xtypedef struct io_temp_type4 {
  483. X    isrib myisrib;
  484. X    io_funny_proc user_isr;
  485. X    Anyptr *user_parm, *card_addr, *in_bufptr, *out_bufptr;
  486. X    Char eirbyte;
  487. X    uchar my_isc;
  488. X    long timeout;
  489. X    short addressed;
  490. X    Char drv_misc[164];
  491. X} io_temp_type4;
  492. X
  493. Xtypedef struct isc_table_type {
  494. X    drv_table_type *io_drv_ptr;
  495. X    io_temp_type *io_tmp_ptr;
  496. X    short card_type;
  497. X    long user_time;
  498. X    short card_id;
  499. X    Anyptr *card_ptr;
  500. X} isc_table_type;
  501. X
  502. Xtypedef enum {
  503. X    dummy_tfr_1, serial_DMA, serial_FHS, serial_FASTEST, dummy_tfr_2,
  504. X    overlap_INTR, overlap_DMA, overlap_FHS, overlap_FASTEST, P_OVERLAP
  505. X} user_tfr_type;
  506. X
  507. Xtypedef enum {
  508. X    no_tfr, INTR_tfr, DMA_tfr, BURST_tfr, FHS_tfr
  509. X} actual_tfr_type;
  510. X
  511. Xtypedef enum {
  512. X    to_memory, from_memory
  513. X} dir_of_tfr;
  514. X
  515. Xtypedef Char buf_type[];
  516. X
  517. Xtypedef struct buf_info_type {
  518. X    io_temp_type *drv_tmp_ptr;
  519. X    uchar active_isc;
  520. X    actual_tfr_type act_tfr;
  521. X    user_tfr_type usr_tfr;
  522. X    boolean b_w_mode, end_mode;
  523. X    dir_of_tfr direction;
  524. X    short term_char;
  525. X    long term_count;
  526. X    Char *buf_ptr;
  527. X    long buf_size;
  528. X    Anyptr *buf_empty, *buf_fill;
  529. X    io_funny_proc eot_proc;
  530. X    Anyptr *eot_parm;
  531. X    boolean dma_priority;
  532. X} buf_info_type;
  533. X
  534. X
  535. X
  536. Xvextern io_funny_proc dma_ch_0;
  537. Xvextern uchar dma_isc_0;
  538. Xvextern io_funny_proc dma_ch_1;
  539. Xvextern uchar dma_isc_1;
  540. Xvextern isrib dma_isrib0, dma_isrib1;
  541. Xvextern boolean dma_here;
  542. Xvextern Char io_work_char;
  543. Xvextern long ioe_result, ioe_isc;
  544. Xvextern isc_table_type isc_table[P_iomaxisc - P_iominisc + 1];
  545. Xvextern Char io_revid[97];
  546. Xvextern _PROCEDURE io_error_link;
  547. X
  548. X
  549. X
  550. Xextern Void io_escape PP((long my_code, long select_code));
  551. Xextern uchar io_find_isc PP((Anyptr *iod_temp));
  552. X
  553. X
  554. X
  555. X#undef vextern
  556. X
  557. X#endif /*IODECLARATIONS_H*/
  558. X
  559. X/* End. */
  560. X
  561. END_OF_FILE
  562. if test 6087 -ne `wc -c <'HP/include/iodecl.h'`; then
  563.     echo shar: \"'HP/include/iodecl.h'\" unpacked with wrong size!
  564. fi
  565. # end of 'HP/include/iodecl.h'
  566. fi
  567. if test -f 'HP/include/misc.h' -a "${1}" != "-c" ; then 
  568.   echo shar: Will not clobber existing file \"'HP/include/misc.h'\"
  569. else
  570. echo shar: Extracting \"'HP/include/misc.h'\" \(2815 characters\)
  571. sed "s/^X//" >'HP/include/misc.h' <<'END_OF_FILE'
  572. X/* Header for module misc, generated by p2c */
  573. X#ifndef MISC_H
  574. X#define MISC_H
  575. X
  576. X
  577. X
  578. X/*homeless orphans*/
  579. X#ifndef SYSGLOBALS_H
  580. X#include <p2c/sysglobals.h>
  581. X#endif
  582. X
  583. X#ifndef ASM_H
  584. X#include <p2c/asm.h>
  585. X#endif
  586. X
  587. X
  588. X
  589. X#ifdef MISC_G
  590. X# define vextern
  591. X#else
  592. X# define vextern extern
  593. X#endif
  594. X
  595. X
  596. X
  597. X#define misc_null       0
  598. X
  599. X#define misc_nullchar   '\0'
  600. X#define misc_homechar   '\001'
  601. X
  602. X#define misc_etx        3
  603. X#define misc_bell       7
  604. X
  605. X#define misc_bellchar   '\007'
  606. X
  607. X#define misc_bs         8
  608. X
  609. X#define misc_leftchar   '\b'
  610. X
  611. X#define misc_tab        9
  612. X
  613. X#define misc_cteol      '\t'
  614. X
  615. X#define misc_lf         10
  616. X
  617. X#define misc_downchar   '\n'
  618. X
  619. X#define misc_vt         11
  620. X
  621. X#define misc_cteos      '\013'
  622. X
  623. X#define misc_ff         12
  624. X
  625. X#define misc_clearscr   '\f'
  626. X
  627. X#define misc_cr         13
  628. X
  629. X#define misc_eol        '\015'
  630. X
  631. X#define misc_dle        16
  632. X#define misc_esc        27
  633. X
  634. X#define misc_escchar    '\033'
  635. X
  636. X#define misc_fsp        28
  637. X
  638. X#define misc_rightchar  '\034'
  639. X
  640. X#define misc_us         31
  641. X
  642. X#define misc_upchar     '\037'
  643. X
  644. X#define misc_del        127
  645. X#define misc_cntrl      255
  646. X
  647. X
  648. X
  649. X/* CATALOGUE INFORMATION, zero entry refers to the directory itself */
  650. X/*name of file or directory*/
  651. X/*external file type (LIF)*/
  652. X/*file kind*/
  653. X/*physical size of file  */
  654. X/*                                         or of total data space on volume*/
  655. X/*logical size of file  */
  656. X/*                                         or unused space on medium*/
  657. X/*starting location of file  */
  658. X/*                                         or first possible data location*/
  659. X/*size of a sector or block*/
  660. X/*creation, last modified dates*/
  661. X/*creation, last modified times*/
  662. X/*extension  */
  663. X/*                                         or total possible number of files */
  664. X/*                                         or requested number of files*/
  665. X/*secondary discretionary field */
  666. X/*                                         or start index of requested catalog*/
  667. X/*comment or miscellaneous information*/
  668. X
  669. Xtypedef struct misc_catentry {
  670. X    Char cname[tidleng + 1];
  671. X    short ceft;
  672. X    filekind ckind;
  673. X    long cpsize, clsize, cstart, cblocksize;
  674. X    daterec ccreatedate, clastdate;
  675. X    timerec ccreatetime, clasttime;
  676. X    long cextra1, cextra2;
  677. X    Char cinfo[21];
  678. X} misc_catentry;
  679. X
  680. Xtypedef struct misc_passentry {
  681. X    long pbits;
  682. X    Char pword[passleng + 1];
  683. X} misc_passentry;
  684. X
  685. X
  686. X
  687. Xvextern uchar misc_idle;
  688. X
  689. X
  690. X
  691. X/* idle character -- 3.0 bug jws 3/20/84 */
  692. Xextern Void misc_getioerrmsg PP((Char *s, long lastior));
  693. Xextern Void misc_printerror PP((long errorcode, long lastior));
  694. Xextern Void misc_upc PP((Char *s));
  695. Xextern long misc_ueovbytes PP((int unit));
  696. Xextern Void misc_unblockeddam PP((fib *f, int unum, int request));
  697. Xextern Void misc_initfilekinds PV( );
  698. Xextern Void misc_lockup PV( );
  699. Xextern Void misc_lockdown PV( );
  700. X
  701. X
  702. X
  703. X#undef vextern
  704. X
  705. X#endif /*MISC_H*/
  706. X
  707. X/* End. */
  708. X
  709. END_OF_FILE
  710. if test 2815 -ne `wc -c <'HP/include/misc.h'`; then
  711.     echo shar: \"'HP/include/misc.h'\" unpacked with wrong size!
  712. fi
  713. # end of 'HP/include/misc.h'
  714. fi
  715. if test -f 'src/INSTALL' -a "${1}" != "-c" ; then 
  716.   echo shar: Will not clobber existing file \"'src/INSTALL'\"
  717. else
  718. echo shar: Extracting \"'src/INSTALL'\" \(5638 characters\)
  719. sed "s/^X//" >'src/INSTALL' <<'END_OF_FILE'
  720. X
  721. XThis directory contains "p2c" version 1.14, a Pascal to C translator.
  722. X
  723. X"p2c"  Copyright 1989  Dave Gillespie
  724. X                       256-80 Caltech
  725. X                       Pasadena CA 91125
  726. X                       daveg@csvax.caltech.edu, cit-vax!daveg
  727. X
  728. X
  729. XThis program is distributed under the terms of the GNU License Agreement.
  730. XSee the file src/COPYING for details.
  731. X
  732. XThe GNU License Agreement restrictions do _not_ apply to code generated
  733. Xby p2c, nor to the p2c run-time files "p2clib.c" and "p2c.h".
  734. X
  735. X
  736. X
  737. XQUICK INSTRUCTIONS
  738. X
  739. XThe top-level Makefile in this directory tree knows how to build
  740. Xp2c and run it on some example programs.  The compiled p2c will be
  741. X"installed" in this directory tree rather than in public directories.
  742. X(For a full public installation, see the instructions below.)
  743. XJust type "make test" to build p2c and run the examples.
  744. X
  745. X
  746. X
  747. XFULL INSTALLATION INSTRUCTIONS
  748. X
  749. XFor a complete system, you must:
  750. X
  751. X   a) Create a home directory for p2c, such as /usr/lib/p2c.  The exact
  752. X      location does not matter, as long as p2c knows how to find it.
  753. X
  754. X   b) Create an include directory, such as /usr/include/p2c.  If you are
  755. X      unable to arrange for an include directory, you can edit sys.p2crc
  756. X      so as not to require one, or compile translated code with a
  757. X      suitable -I flag.
  758. X
  759. X   c) Install the executable "p2c" in /usr/bin or elsewhere on the
  760. X      standard search path.
  761. X
  762. X   d) Install the run-time library "libp2c.a" in /usr/lib or elsewhere
  763. X      on the standard library search path.
  764. X
  765. X   e) Install the Unix manual entry "p2c.1" in /usr/man/man1.  If you
  766. X      have a "man1.Z" directory instead (for compressed man pages)
  767. X      you will have to edit the Makefile to use a "compress" command.
  768. X
  769. X   f) Install the necessary files in the p2c home directory.
  770. X
  771. XThe Makefile is initially set up to create a private version of p2c in
  772. Xthe p2c distribution directory.  Just "cd src" and "make install" to
  773. Xperform the above steps.  This will place the p2c executable, run-time
  774. Xlibrary, include directory, and man page in the "home" subdirectory of
  775. Xthe distribution directory.  The man page will be in human-readable form.
  776. X
  777. XTo compile code that has been translated by this private version of p2c,
  778. Xuse the command:
  779. X
  780. X    cc -I. foo.c libp2c.a
  781. X
  782. X(assuming "home," i.e., HOMEDIR, is the current directory.)
  783. X
  784. XThe "examples" subdirectory contains a few sample Pascal programs and
  785. Xa Makefile to translate and compile them.
  786. X
  787. XTo install p2c for public use, edit the Makefile to indicate the correct
  788. Xdirectory names.  Suggested names are included as comments.  Also change
  789. XMANFILE as shown to store the man page in the proper form for the "man"
  790. Xcommand.
  791. X
  792. X    HOMEDIR      default /usr/lib/p2c       Home directory
  793. X    INCDIR       default /usr/include/p2c   Include directory
  794. X    BINDIR       default /usr/bin           Directory for "p2c" executable
  795. X    LIBDIR       default /usr/lib           Directory for "libp2c.a" library
  796. X    MANDIR       default /usr/man/man1      Directory for "p2c.1" manual page
  797. X
  798. XMake sure the home and include directories have been created and are
  799. Xwritable, and that the bin, lib, and man directories are writable.
  800. X(You may have to be root to do this.)  Recompile "p2c" with another
  801. X"make install".  Be sure "trans.c" is recompiled with the new value
  802. Xof HOMEDIR; you can ensure this by doing "make newhome" before
  803. X"make install".  You can always type "make" with no arguments to
  804. Xcompile without installing.
  805. X
  806. XHP Pascal Workstation System users will want to copy all of ../HP/include
  807. Xinto the new p2c include directory, and copy all of ../HP/import into
  808. Xthe p2c home directory.  You will have to write emulations for the
  809. Xfunctions you use out of these modules.  (The HP directories are
  810. Xpresent in the ftp distribution only---they have been omitted from
  811. Xthe shar'd version to save space.)
  812. X
  813. XIncomplete interface texts for standard Turbo units are included in
  814. Xturbo.imp.  Turbo users will have to flesh these out and write emulations
  815. Xfor whatever parts of the Turbo runtime library they need.
  816. X
  817. XIf you wish to edit various system-wide configuration parameters, it is
  818. Xbetter to put them in loc.p2crc than in sys.p2crc.  As an example, on a
  819. XTurbo-oriented environment you may wish to add
  820. X
  821. X    Language Turbo
  822. X
  823. Xto the loc.p2crc file to replace the normal default (HP Pascal).
  824. X
  825. X
  826. X
  827. XPORTABILITY
  828. X
  829. XP2c was originally developed on a homebrew C compiler on the HP Pascal
  830. XWorkstation operating system.  Current development takes place on HP-UX,
  831. Xwhich is System V based.  The translator has also been compiled and used
  832. Xon Sun-3's, so presumably it is fairly portable among 32-bit Unix machines.
  833. X
  834. XMany parts of the code will have to be adjusted in order for p2c to work
  835. Xon a machine with 16-bit ints.  I have never had reason or opportunity to
  836. Xtrack these down since I don't have access to such a machine.  Please note
  837. Xthat code _generated_ by p2c works with either size of int even though p2c
  838. Xitself does not.
  839. X
  840. XIf your compiler supports ANSI prototypes, most of the 16-bit portability
  841. Xproblems will go away except for possible %d/%ld sloppiness in sprintf control
  842. Xstrings.  There may be places where p2c tries to cast a pointer into an
  843. Xint, but I believe all such cases use longs consistently.  You will have
  844. Xa problem if your long type is not large enough to store a pointer.
  845. X
  846. XBecause p2c was developed to run under Unix, it is sloppy about memory
  847. Xallocation.  Some data structures are allocated but never freed.  Profiles
  848. Xshow that the waste is not too great in most cases, but if it is a problem
  849. Xyou may have to write a garbage collector (this shouldn't be too hard if you
  850. Xonly run the collector after translating each procedure).
  851. X
  852. END_OF_FILE
  853. if test 5638 -ne `wc -c <'src/INSTALL'`; then
  854.     echo shar: \"'src/INSTALL'\" unpacked with wrong size!
  855. fi
  856. # end of 'src/INSTALL'
  857. fi
  858. if test -f 'src/Makefile' -a "${1}" != "-c" ; then 
  859.   echo shar: Will not clobber existing file \"'src/Makefile'\"
  860. else
  861. echo shar: Extracting \"'src/Makefile'\" \(5131 characters\)
  862. sed "s/^X//" >'src/Makefile' <<'END_OF_FILE'
  863. X# Makefile for "p2c", the Pascal to C translator.
  864. X#  Copyright (C) 1989 David Gillespie.
  865. X#  Author's address: daveg@csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
  866. X
  867. X# This program is free software; you can redistribute it and/or modify
  868. X# it under the terms of the GNU General Public License as published by
  869. X# the Free Software Foundation (any version).
  870. X
  871. X# This program is distributed in the hope that it will be useful,
  872. X# but WITHOUT ANY WARRANTY; without even the implied warranty of
  873. X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  874. X# GNU General Public License for more details.
  875. X
  876. X# You should have received a copy of the GNU General Public License
  877. X# along with this program; see the file COPYING.  If not, write to
  878. X# the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  879. X
  880. X
  881. X# Directories (private version)
  882. XHOMEDIR = ../home
  883. XINCDIR = ../home/p2c
  884. XBINDIR = ..
  885. XLIBDIR = ../home
  886. XMANDIR = ../home
  887. XMANFILE = p2c.cat          # human-readable manual (for cat.1)
  888. X#MANFILE = p2c.man.inst    # uncompressed nroff source (for man.1)
  889. X#MANFILE = p2c.man.Z       # compressed nroff source (for man.1.Z)
  890. X
  891. X# Directories (public version)
  892. X#HOMEDIR = /usr/lib/p2c
  893. X#INCDIR = /usr/include/p2c
  894. X#BINDIR = /usr/bin
  895. X#LIBDIR = /usr/lib
  896. X#MANDIR = /usr/man/man1
  897. X#MANFILE = p2c.man.inst
  898. X
  899. X# Compiler options
  900. XCC = cc                    # you may wish to use gcc here instead
  901. XOPT = # -O           # uncomment this for optimization
  902. XDEB = # -g           # uncomment this for debugging
  903. XDEFS =               # place other -D types of things here
  904. XCFLAGS = $(OPT) $(DEB) $(DEFS)
  905. XLFLAGS =
  906. X
  907. X
  908. X# Custom translator modules
  909. XCUSTSRCS = hpmods.c citmods.c
  910. XCUSTOBJS = hpmods.o citmods.o
  911. XCUSTDEFS = -DCUST1=hpmods -DCUST2=citmods
  912. X
  913. X
  914. X# File names
  915. XP2CSRCS = trans.c stuff.c out.c comment.c lex.c parse.c decl.c \
  916. X          expr.c pexpr.c funcs.c dir.c
  917. XP2COBJS = trans.o stuff.o out.o comment.o lex.o parse.o decl.o \
  918. X          expr.o pexpr.o funcs.o dir.o
  919. X
  920. XSRCS = $(P2CSRCS) $(CUSTSRCS)
  921. XOBJS = $(P2COBJS) $(CUSTOBJS)
  922. X
  923. XLIBSRCS = p2clib.c loc.p2clib.c
  924. XLIBOBJS = p2clib.o loc.p2clib.o
  925. XOTHERLIBOBJS =
  926. X
  927. XABSHOMEDIR = `cd $(HOMEDIR); pwd`
  928. XABSINCDIR = `cd $(INCDIR); pwd`
  929. XABSLIBDIR = `cd $(LIBDIR); pwd`
  930. X
  931. XMISCSRCS = makeproto.c
  932. XPROTOS = p2c.proto p2c.hdrs
  933. XHDRS = trans.h p2c.h
  934. X
  935. X
  936. X# Top-level targets
  937. Xall: proto p2c libp2c.a p2c.cat
  938. Xproto: $(PROTOS)
  939. X
  940. X
  941. X# Making p2c
  942. Xp2c: $(OBJS)
  943. X    $(CC) $(LFLAGS) $(OBJS) -o p2c
  944. X
  945. Xdir.o: dir.c trans.h
  946. X    $(CC) -c $(CFLAGS) $(CUSTDEFS) dir.c
  947. X
  948. Xtrans.o: trans.c trans.h
  949. X    $(CC) -c $(CFLAGS) -DHASDUMPS -DP2C_HOME=\"$(ABSHOMEDIR)\" trans.c
  950. X
  951. X
  952. X# Making and using makeproto
  953. Xp2c.hdrs: $(SRCS) makeproto
  954. X    ./makeproto -n -m -h -t16 -a35 -s0 -x $(SRCS) -o p2c.hdrs
  955. X
  956. Xp2c.proto: $(SRCS) makeproto
  957. X    ./makeproto -n -m -h -t16 -a35 -s1 -i $(SRCS) -o p2c.proto
  958. X
  959. Xmakeproto: makeproto.c
  960. X    $(CC) $(CFLAGS) $(LFLAGS) makeproto.c -o makeproto
  961. X
  962. X
  963. X# Making the p2c runtime library
  964. Xlibp2c.a: $(LIBOBJS)
  965. X    ar r libp2c.a $(LIBOBJS) $(OTHERLIBOBJS)
  966. X
  967. Xp2clib.o: p2clib.c
  968. X    $(CC) -c $(CFLAGS) p2clib.c
  969. X
  970. X
  971. X# Making the p2c man page
  972. Xp2c.man.inst: p2c.man
  973. X    sed -e "s;--HOMEDIR--;$(ABSHOMEDIR);"   \
  974. X            -e "s;--INCDIR--;$(ABSINCDIR);"     \
  975. X            -e "s;--LIBDIR--;$(ABSLIBDIR);"     \
  976. X            p2c.man >p2c.man.inst
  977. X
  978. Xp2c.man.Z: p2c.man.inst
  979. X    compress -c p2c.man.inst >p2c.man.Z
  980. X
  981. Xp2c.cat: p2c.man.inst
  982. X    if [ -f /usr/bin/nroff -o -f /bin/nroff ];  \
  983. X        then nroff -man p2c.man.inst >p2c.cat; fi
  984. X
  985. X
  986. X
  987. X# Initially installing p2c:
  988. X#  First, make sure $(HOMEDIR) and $(INCDIR) exist and are writable;
  989. X#  Second, make sure $(LIBDIR), $(BINDIR) and $(MANDIR) are writable;
  990. X#  Third, execute "make install" to compile and set things up.
  991. X# (You may need to have a system operator do these steps for you.)
  992. X
  993. XCOPY = cp
  994. X
  995. Xnewhome:
  996. X    rm -f trans.o     # force trans.c to be recompiled (if HOMEDIR changes)
  997. X
  998. Xinstall: proto \
  999. X    $(BINDIR)/p2c         \
  1000. X    $(LIBDIR)/libp2c.a    \
  1001. X    $(MANDIR)/p2c.1          \
  1002. X    $(INCDIR)/p2c.h          \
  1003. X    $(HOMEDIR)/p2crc      \
  1004. X    $(HOMEDIR)/loc.p2crc  \
  1005. X    $(HOMEDIR)/system.imp \
  1006. X    $(HOMEDIR)/system.m2  \
  1007. X    $(HOMEDIR)/turbo.imp  \
  1008. X    $(HOMEDIR)/string.pas
  1009. X
  1010. X$(BINDIR)/p2c: p2c
  1011. X    $(COPY)  p2c          $(BINDIR)/p2c
  1012. X
  1013. XSHELL=/bin/sh
  1014. X$(LIBDIR)/libp2c.a: libp2c.a
  1015. X    $(COPY)  libp2c.a     $(LIBDIR)/libp2c.a
  1016. X    if [ -f /usr/bin/ranlib -o -f /bin/ranlib ]; then ranlib $(LIBDIR)/libp2c.a; fi
  1017. X
  1018. X$(MANDIR)/p2c.1: $(MANFILE)
  1019. X    $(COPY)  $(MANFILE)   $(MANDIR)/p2c.1
  1020. X
  1021. X$(INCDIR)/p2c.h: p2c.h
  1022. X    $(COPY)  p2c.h        $(INCDIR)/p2c.h
  1023. X
  1024. X$(HOMEDIR)/p2crc: sys.p2crc
  1025. X    $(COPY)  sys.p2crc    $(HOMEDIR)/p2crc
  1026. X
  1027. X$(HOMEDIR)/loc.p2crc: loc.p2crc
  1028. X    $(COPY)  loc.p2crc    $(HOMEDIR)/loc.p2crc
  1029. X
  1030. X$(HOMEDIR)/system.imp: system.imp
  1031. X    $(COPY)  system.imp   $(HOMEDIR)/system.imp
  1032. X
  1033. X$(HOMEDIR)/system.m2: system.m2
  1034. X    $(COPY)  system.m2    $(HOMEDIR)/system.m2
  1035. X
  1036. X$(HOMEDIR)/turbo.imp: turbo.imp
  1037. X    $(COPY)  turbo.imp    $(HOMEDIR)/turbo.imp
  1038. X
  1039. X$(HOMEDIR)/string.pas: string.pas
  1040. X    $(COPY)  string.pas   $(HOMEDIR)/string.pas
  1041. X
  1042. X
  1043. X
  1044. X# Miscellaneous
  1045. Xtags:
  1046. X    etags $(SRCS) $(LIBSRCS) $(MISCSRCS) $(HDRS)
  1047. X
  1048. Xclean.o:
  1049. X    rm $(OBJS)
  1050. X
  1051. Xclean:
  1052. X    rm $(OBJS) $(LIBOBJS) $(PROTOS) p2c
  1053. X
  1054. Xwc:
  1055. X    wc $(SRCS) $(LIBSRCS) trans.h
  1056. X
  1057. Xtest:
  1058. X    echo '"make test" should be used in the outer-level p2c directory.'
  1059. X    echo 'Type "cd .." and "make test" again.'
  1060. X
  1061. END_OF_FILE
  1062. if test 5131 -ne `wc -c <'src/Makefile'`; then
  1063.     echo shar: \"'src/Makefile'\" unpacked with wrong size!
  1064. fi
  1065. # end of 'src/Makefile'
  1066. fi
  1067. if test -f 'src/README' -a "${1}" != "-c" ; then 
  1068.   echo shar: Will not clobber existing file \"'src/README'\"
  1069. else
  1070. echo shar: Extracting \"'src/README'\" \(2993 characters\)
  1071. sed "s/^X//" >'src/README' <<'END_OF_FILE'
  1072. X
  1073. XThis directory contains "p2c", a Pascal to C translator.
  1074. X
  1075. X"p2c"  Copyright 1989  Dave Gillespie
  1076. X                       256-80 Caltech
  1077. X                       Pasadena CA 91125
  1078. X                       daveg@csvax.caltech.edu, cit-vax!daveg
  1079. X
  1080. X
  1081. XThis program is distributed under the terms of the GNU License Agreement.
  1082. XSee the file src/COPYING for details.
  1083. X
  1084. XThe GNU License Agreement restrictions do _not_ apply to code generated
  1085. Xby p2c, nor to the p2c run-time files "p2clib.c" and "p2c.h".
  1086. X
  1087. X
  1088. X
  1089. XThe file "trans.c" includes an overview of the source files of p2c.
  1090. XAll p2c source files include the header "trans.h".
  1091. X
  1092. XThe file "dir.c" is intended to be modified by the user to install
  1093. Xcode for custom translations of certain procedures.  To add your own
  1094. Xcustom code to p2c, modify CUSTSRCS and CUSTDEFS in the Makefile,
  1095. Xthen recompile dir.c.
  1096. X
  1097. XThe file "system.imp" (copied to %H/system.imp) contains declarations
  1098. Xfor "predefined" functions like "sqrt".  These generally have custom
  1099. Xtranslation code in funcs.c.  Functions with irregular syntaxes have
  1100. Xtheir symbol table entries built directly in funcs.c; they do not
  1101. Xappear here.  The default sys.p2crc causes p2c to read system.imp at
  1102. Xthe beginning of every job.
  1103. X
  1104. XThe file "system.m2" contains declarations for predefined Modula-2
  1105. Xfunctions.  It should be substituted for "system.imp" when translating
  1106. XModula-2 programs.
  1107. X
  1108. XThe file "turbo.imp" contains declarations for all the Turbo Pascal
  1109. Xstandard units like dos and crt.  (These are very incomplete at
  1110. Xpresent.)  The default sys.p2crc causes p2c to read turbo.imp as
  1111. Xsoon as any Turbo standard unit is used.
  1112. X
  1113. XThe file "string.pas" implements the Oregon Software dynamic strings
  1114. Xpackage.  These are translated pretty completely into native C strings
  1115. Xusing only the FuncMacro mechanism of p2c---no custom C code was
  1116. Xwritten to support these functions.
  1117. X
  1118. XThe file "NOTES" contains the author's current bugs-and-plans list.
  1119. XThe file "HISTORY" contains the revision history of the program.
  1120. X
  1121. XThe "makeproto" program is an independent utility for scanning a large
  1122. XC program with old-style declarations and building function prototypes
  1123. Xfor all its functions.  The "trans.h" file #includes the prototype
  1124. Xfiles for all of p2c.
  1125. X
  1126. X
  1127. XNO WARRANTY:
  1128. X   The program in this directory was developed for internal use at
  1129. X   Caltech and thus absolutely no guarantee is made that the program
  1130. X   will compile or run on other systems or that it will produce correct
  1131. X   code.  P2c is _not_ a compiler, it is a translator; it strives to
  1132. X   produce correct code but reserves the right to sacrifice correctness
  1133. X   in extreme cases for readability in the general case.  P2c is designed
  1134. X   to be extended (see funcs.c, hpmods.c and citmods.c for examples), but
  1135. X   some of the main code is pretty messy since the translator has grown
  1136. X   considerably beyond its original planned scale.  Bug reports are
  1137. X   welcome at daveg@csvax.caltech.edu, but I may not have time to respond
  1138. X   to them immediately.  Suggestions are welcome, too!
  1139. X
  1140. END_OF_FILE
  1141. if test 2993 -ne `wc -c <'src/README'`; then
  1142.     echo shar: \"'src/README'\" unpacked with wrong size!
  1143. fi
  1144. # end of 'src/README'
  1145. fi
  1146. if test -f 'src/dir.c' -a "${1}" != "-c" ; then 
  1147.   echo shar: Will not clobber existing file \"'src/dir.c'\"
  1148. else
  1149. echo shar: Extracting \"'src/dir.c'\" \(5243 characters\)
  1150. sed "s/^X//" >'src/dir.c' <<'END_OF_FILE'
  1151. X/* "p2c", a Pascal to C translator.
  1152. X   Copyright (C) 1989 David Gillespie.
  1153. X   Author's address: daveg@csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
  1154. X
  1155. XThis program is free software; you can redistribute it and/or modify
  1156. Xit under the terms of the GNU General Public License as published by
  1157. Xthe Free Software Foundation (any version).
  1158. X
  1159. XThis program is distributed in the hope that it will be useful,
  1160. Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
  1161. XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1162. XGNU General Public License for more details.
  1163. X
  1164. XYou should have received a copy of the GNU General Public License
  1165. Xalong with this program; see the file COPYING.  If not, write to
  1166. Xthe Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
  1167. X
  1168. X
  1169. X
  1170. X#define define_parameters
  1171. X#define PROTO_DIR_C
  1172. X#include "trans.h"
  1173. X
  1174. X
  1175. X/* This file is user-modifiable.  It is the "directory" of C functions
  1176. X   for compiling in-line various Pascal library routines. */
  1177. X
  1178. X
  1179. X
  1180. Xextern void setup_module_hp();
  1181. Xextern void setup_module_cit();
  1182. Xextern void setup_module_tanner();
  1183. X
  1184. X
  1185. X
  1186. X
  1187. X/* This function is called once when p2c is starting up, before
  1188. X   the p2crc file has been read.
  1189. X*/
  1190. X
  1191. Xvoid init_dir()
  1192. X{
  1193. X
  1194. X
  1195. X}
  1196. X
  1197. X
  1198. X
  1199. X
  1200. X
  1201. X/* This function is called once when p2c is starting up, after
  1202. X   the p2crc file has been read.
  1203. X*/
  1204. X
  1205. Xvoid setup_dir()
  1206. X{
  1207. X
  1208. X
  1209. X}
  1210. X
  1211. X
  1212. X
  1213. X
  1214. X
  1215. X/* This procedure is called after reading the import text for a module,
  1216. X   where "name" is the module name, in upper-case letters.  Calls to
  1217. X   "addmeaning", "makestandardfunc", etc. will annotate the context of
  1218. X   the module.  Note that this will be called if the module is searched,
  1219. X   even if it is never actually imported.
  1220. X*/
  1221. X
  1222. X#if 0
  1223. XStatic void _setup(name, defn)
  1224. Xchar *name;
  1225. Xint defn;
  1226. X{
  1227. X    /* this is a dummy procedure which may be called by setup_module */
  1228. X}
  1229. X#endif
  1230. X
  1231. X#define _setup(a,b)
  1232. X
  1233. Xvoid setup_module(name, defn)
  1234. Xchar *name;
  1235. Xint defn;
  1236. X{
  1237. X    if (!strcicmp(name, "SYSTEM"))
  1238. X    decl_builtins();
  1239. X#ifdef CUST1
  1240. X    CUST1(name, defn);
  1241. X#endif
  1242. X#ifdef CUST2
  1243. X    CUST2(name, defn);
  1244. X#endif
  1245. X#ifdef CUST3
  1246. X    CUST3(name, defn);
  1247. X#endif
  1248. X#ifdef CUST4
  1249. X    CUST4(name, defn);
  1250. X#endif
  1251. X#ifdef CUST5
  1252. X    CUST5(name, defn);
  1253. X#endif
  1254. X}
  1255. X
  1256. X
  1257. X
  1258. X
  1259. X
  1260. X/* This procedure is called once after the p2crc file has been
  1261. X   read and the built-in parameters have been "fixed".  It should
  1262. X   check ranges and add defaults for any newly introduced parameters
  1263. X   in the "rctable" (see "trans.h").
  1264. X*/
  1265. X
  1266. Xvoid fix_parameters()
  1267. X{
  1268. X
  1269. X
  1270. X}
  1271. X
  1272. X
  1273. X
  1274. X
  1275. X
  1276. X/* This function is called during a traversal of the tree of statements for
  1277. X   a procedure.  Ordinarily it returns its argument; it may instead return
  1278. X   an arbitrary other statement or sequence of statements, which will then
  1279. X   be spliced in to replace the original one.  It may return NULL to delete
  1280. X   the statement altogether.
  1281. X*/
  1282. X
  1283. XStmt *fix_statement(sp)
  1284. XStmt *sp;
  1285. X{
  1286. X    return sp;
  1287. X}
  1288. X
  1289. X
  1290. X
  1291. X
  1292. X
  1293. X/* This is the analogous function for expression traversals.  It is
  1294. X   called after the arguments have been (recursively) fixed and all
  1295. X   built-in fixes have been performed.
  1296. X*/
  1297. X
  1298. XExpr *fix_expression(ex, env)
  1299. XExpr *ex;
  1300. Xint env;
  1301. X{
  1302. X    return ex;
  1303. X}
  1304. X
  1305. X
  1306. X
  1307. X
  1308. X
  1309. X/* This procedure is called when fixing an expression of type
  1310. X   EK_BICALL.  It is called before the arguments are fixed.  If
  1311. X   it recognizes the BICALL, it should fix the arguments, then
  1312. X   return a (possibly modified) fixed expression, which may or
  1313. X   may not be a BICALL.  That expression will then be sent to
  1314. X   fix_expression() as usual, but other standard fixes will not
  1315. X   automatically be performed on it.  If the BICALL is not
  1316. X   recognized, the function should return NULL.
  1317. X*/
  1318. X
  1319. XExpr *fix_bicall(ex, env)
  1320. XExpr *ex;
  1321. Xint env;
  1322. X{
  1323. X    return NULL;
  1324. X}
  1325. X
  1326. X
  1327. X
  1328. X
  1329. X
  1330. X/* This function returns nonzero if the built-in function "name"
  1331. X   should be written "if (f(x))" rather than "if (f(x) != 0)"
  1332. X   when used as a boolean.  The call does *not* necessarily have
  1333. X   to return a 1-or-0 value.
  1334. X*/
  1335. X
  1336. Xint boolean_bicall(name)
  1337. Xchar *name;
  1338. X{
  1339. X    return (!strcmp(name, "strcmp") ||
  1340. X            !strcmp(name, "strncmp") ||
  1341. X            !strcmp(name, "memcmp") ||
  1342. X            !strcmp(name, "feof") ||
  1343. X            !strcmp(name, "feoln"));
  1344. X}
  1345. X
  1346. X
  1347. X
  1348. X
  1349. X
  1350. X/* The function "name" promises not to change certain of its
  1351. X   VAR-style parameters.  For each of arguments i = 0 through 15,
  1352. X   if bit 1<<i of the return value of this function is set, and
  1353. X   the i'th parameter is a pointer to an object, then the function
  1354. X   guarantees not to change that object.
  1355. X*/
  1356. X
  1357. Xunsigned int safemask_bicall(name)
  1358. Xchar *name;
  1359. X{
  1360. X    Symbol *sp;
  1361. X
  1362. X    sp = findsymbol_opt(name);
  1363. X    if (sp) {
  1364. X    if (sp->flags & (STRUCTF|STRLAPF))
  1365. X        return ~1;
  1366. X    if (sp->flags & (NOSIDEEFF|DETERMF))
  1367. X        return ~0;
  1368. X    }
  1369. X    if (!strcmp(name, "fwrite") ||
  1370. X        !strcmp(name, "memchr"))
  1371. X        return 1;
  1372. X    if (!strcmp(name, "memcpy") ||
  1373. X        !strcmp(name, "memmove"))
  1374. X        return 2;
  1375. X    if (!strcmp(name, "memcmp"))
  1376. X        return 3;
  1377. X    if (!strcmp(name, "sprintf") ||
  1378. X        !strcmp(name, "fprintf"))
  1379. X        return ~1;
  1380. X    if (!strcmp(name, "printf"))
  1381. X        return ~0;
  1382. X    return 0;
  1383. X}
  1384. X
  1385. X
  1386. X
  1387. X
  1388. X
  1389. X/* The function "name" has side effects that could affect other variables
  1390. X   in the program besides those that are explicitly mentioned.
  1391. X*/
  1392. X
  1393. Xint sideeffects_bicall(name)
  1394. Xchar *name;
  1395. X{
  1396. X    return 0;
  1397. X}
  1398. X
  1399. X
  1400. X
  1401. X
  1402. X
  1403. X
  1404. X/* End. */
  1405. X
  1406. X
  1407. X
  1408. END_OF_FILE
  1409. if test 5243 -ne `wc -c <'src/dir.c'`; then
  1410.     echo shar: \"'src/dir.c'\" unpacked with wrong size!
  1411. fi
  1412. # end of 'src/dir.c'
  1413. fi
  1414. if test -f 'src/hpmods.c' -a "${1}" != "-c" ; then 
  1415.   echo shar: Will not clobber existing file \"'src/hpmods.c'\"
  1416. else
  1417. echo shar: Extracting \"'src/hpmods.c'\" \(3133 characters\)
  1418. sed "s/^X//" >'src/hpmods.c' <<'END_OF_FILE'
  1419. X/* "p2c", a Pascal to C translator.
  1420. X   Copyright (C) 1989 David Gillespie.
  1421. X   Author's address: daveg@csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
  1422. X
  1423. XThis program is free software; you can redistribute it and/or modify
  1424. Xit under the terms of the GNU General Public License as published by
  1425. Xthe Free Software Foundation (any version).
  1426. X
  1427. XThis program is distributed in the hope that it will be useful,
  1428. Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
  1429. XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1430. XGNU General Public License for more details.
  1431. X
  1432. XYou should have received a copy of the GNU General Public License
  1433. Xalong with this program; see the file COPYING.  If not, write to
  1434. Xthe Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
  1435. X
  1436. X
  1437. X
  1438. X#define PROTO_HPMODS_C
  1439. X#include "trans.h"
  1440. X
  1441. X
  1442. X
  1443. X
  1444. X
  1445. X/* FS functions */
  1446. X
  1447. X
  1448. XStatic Stmt *proc_freadbytes()
  1449. X{
  1450. X    Expr *ex, *ex2, *vex, *fex;
  1451. X    Type *type;
  1452. X
  1453. X    if (!skipopenparen())
  1454. X    return NULL;
  1455. X    fex = p_expr(tp_text);
  1456. X    if (!skipcomma())
  1457. X    return NULL;
  1458. X    vex = p_expr(NULL);
  1459. X    if (!skipcomma())
  1460. X    return NULL;
  1461. X    ex2 = p_expr(tp_integer);
  1462. X    skipcloseparen();
  1463. X    type = vex->val.type;
  1464. X    ex = makeexpr_bicall_4("fread", tp_integer,
  1465. X                           makeexpr_addr(vex),
  1466. X                           convert_size(type, ex2, "FREADBYTES"),
  1467. X                           makeexpr_long(1),
  1468. X                           copyexpr(fex));
  1469. X    if (checkeof(fex)) {
  1470. X        ex = makeexpr_bicall_2(name_SETIO, tp_void,
  1471. X                               makeexpr_rel(EK_EQ, ex, makeexpr_long(1)),
  1472. X                               makeexpr_long(30));
  1473. X    }
  1474. X    return wrapopencheck(makestmt_call(ex), fex);
  1475. X}
  1476. X
  1477. X
  1478. X
  1479. X
  1480. XStatic Stmt *proc_fwritebytes()
  1481. X{
  1482. X    Expr *ex, *ex2, *vex, *fex;
  1483. X    Type *type;
  1484. X
  1485. X    if (!skipopenparen())
  1486. X    return NULL;
  1487. X    fex = p_expr(tp_text);
  1488. X    if (!skipcomma())
  1489. X    return NULL;
  1490. X    vex = p_expr(NULL);
  1491. X    if (!skipcomma())
  1492. X    return NULL;
  1493. X    ex2 = p_expr(tp_integer);
  1494. X    skipcloseparen();
  1495. X    type = vex->val.type;
  1496. X    ex = makeexpr_bicall_4("fwrite", tp_integer,
  1497. X                           makeexpr_addr(vex),
  1498. X                           convert_size(type, ex2, "FWRITEBYTES"),
  1499. X                           makeexpr_long(1),
  1500. X                           copyexpr(fex));
  1501. X    if (checkfilewrite) {
  1502. X        ex = makeexpr_bicall_2(name_SETIO, tp_void,
  1503. X                               makeexpr_rel(EK_EQ, ex, makeexpr_long(1)),
  1504. X                               makeexpr_long(3));
  1505. X    }
  1506. X    return wrapopencheck(makestmt_call(ex), fex);
  1507. X}
  1508. X
  1509. X
  1510. X
  1511. X
  1512. X
  1513. X
  1514. X
  1515. X
  1516. X
  1517. X
  1518. X/* SYSGLOBALS */
  1519. X
  1520. X
  1521. XStatic void setup_sysglobals()
  1522. X{
  1523. X    Symbol *sym;
  1524. X
  1525. X    sym = findsymbol("SYSESCAPECODE");
  1526. X    if (sym->mbase)
  1527. X        strchange(&sym->mbase->name, name_ESCAPECODE);
  1528. X    sym = findsymbol("SYSIORESULT");
  1529. X    if (sym->mbase)
  1530. X        strchange(&sym->mbase->name, name_IORESULT);
  1531. X}
  1532. X
  1533. X
  1534. X
  1535. X
  1536. X
  1537. X
  1538. X
  1539. X
  1540. Xvoid hpmods(name, defn)
  1541. Xchar *name;
  1542. Xint defn;
  1543. X{
  1544. X    if (!strcmp(name, "FS")) {
  1545. X        makespecialproc("freadbytes", proc_freadbytes);
  1546. X        makespecialproc("fwritebytes", proc_fwritebytes);
  1547. X    } else if (!strcmp(name, "SYSGLOBALS")) {
  1548. X        setup_sysglobals();
  1549. X    }
  1550. X}
  1551. X
  1552. X
  1553. X
  1554. X
  1555. X/* End. */
  1556. X
  1557. X
  1558. X
  1559. END_OF_FILE
  1560. if test 3133 -ne `wc -c <'src/hpmods.c'`; then
  1561.     echo shar: \"'src/hpmods.c'\" unpacked with wrong size!
  1562. fi
  1563. # end of 'src/hpmods.c'
  1564. fi
  1565. if test -f 'src/system.imp' -a "${1}" != "-c" ; then 
  1566.   echo shar: Will not clobber existing file \"'src/system.imp'\"
  1567. else
  1568. echo shar: Extracting \"'src/system.imp'\" \(3784 characters\)
  1569. sed "s/^X//" >'src/system.imp' <<'END_OF_FILE'
  1570. X
  1571. X{ Declarations for Pascal built-in objects }
  1572. X
  1573. X{ Note: All functions with unusual syntaxes are not included here }
  1574. X
  1575. X
  1576. X{*IgnoreNonAlpha=0}   { If Language=UCSD, make sure we can parse "__module" }
  1577. X
  1578. X
  1579. X__module SYSTEM;   {PERMANENT}
  1580. X
  1581. X
  1582. X__export
  1583. X
  1584. X{ Standard Pascal functions }
  1585. Xfunction  arctan(x : longreal) : longreal;
  1586. Xfunction  cos(x : longreal) : longreal;
  1587. Xfunction  exp(x : longreal) : longreal;
  1588. Xfunction  ln(x : longreal) : longreal;
  1589. Xprocedure mark(var p);
  1590. Xfunction  odd(i : integer) : boolean;
  1591. Xprocedure release(var p);
  1592. Xfunction  round(x : longreal) : integer;
  1593. Xfunction  sin(x : longreal) : longreal;
  1594. Xfunction  sqrt(x : longreal) : longreal;
  1595. Xfunction  trunc(x : longreal) : integer;
  1596. X
  1597. X
  1598. X
  1599. X{ HP Pascal extensions }
  1600. Xfunction  binary(s : string) : integer;
  1601. Xprocedure gotoxy(x, y : integer);
  1602. Xfunction  hex(s : string) : integer;
  1603. Xfunction  lastpos(anyvar f : text) : integer;
  1604. Xfunction  linepos(var f : text) : integer;
  1605. Xprocedure moveleft(anyvar s, d : integer; i : integer);
  1606. Xprocedure moveright(anyvar s, d : integer; i : integer);
  1607. Xfunction  octal(s : string) : integer;
  1608. Xfunction  str(s : string; i, j : integer) : string;
  1609. Xfunction  strlen(s : string) : integer;
  1610. Xfunction  strltrim(s : string) : string;
  1611. Xfunction  strmax(s : string) : integer;
  1612. Xfunction  strpos(s, s2 : string) : integer;
  1613. Xfunction  strrpt(s : string; i : integer) : string;
  1614. Xfunction  strrtrim(s : string) : string;
  1615. X
  1616. X
  1617. X
  1618. X{ Turbo/UCSD Pascal extensions }
  1619. Xfunction  copy(s : string; i, j : integer) : string;
  1620. Xprocedure delete(var s; i, j : integer);
  1621. Xfunction  frac(x : longreal) : longreal;
  1622. Xprocedure freemem(var p);
  1623. Xprocedure getmem(var p; i : integer);
  1624. Xprocedure insert(s : string; var s2; i : integer);
  1625. Xfunction  length(s : string) : integer;
  1626. Xfunction  log(x : longreal) : longreal;
  1627. Xfunction  maxavail : integer;
  1628. Xfunction  memavail : integer;
  1629. Xprocedure move(var s, d; i : integer);
  1630. Xfunction  paramcount : integer;
  1631. Xfunction  paramstr(i : integer) : string;
  1632. Xfunction  pos(s, s2 : string) : integer;
  1633. Xfunction  ptr(i, j : integer) : pointer;
  1634. Xfunction  pwroften(r : longreal) : longreal;
  1635. Xfunction  swap(i : integer) : integer;
  1636. Xfunction  upcase(c : char) : char;
  1637. X
  1638. X
  1639. X{ Turbo standard variables }
  1640. X
  1641. Xvar
  1642. X   HeapPtr, FreePtr: pointer;
  1643. X
  1644. X
  1645. X{ Oregon Software Pascal-2 extensions }
  1646. X{FuncMacro p2_inew(n) = malloc(n)}
  1647. X{FuncMacro p2_new(x,n) = (*x = Malloc(n))}
  1648. X{FuncMacro p2_dispose(x,n) = Free(*x)}
  1649. Xprocedure noioerror(var f);
  1650. Xfunction ioerror(var f) : boolean;
  1651. Xfunction iostatus(var f) : integer;
  1652. X{FuncMacro exitst(s) = exit(s)}
  1653. Xprocedure exitst(s : integer);
  1654. X{FuncMacro P_getcmdline(low,high,line,len)=(*len=P_getcmdline(low,high,line))}
  1655. Xprocedure P_getcmdline(var line : array [low..high : integer] of char; var len : integer);
  1656. Xprocedure TimeStamp(var day, month, year, hour, min, sec : integer);
  1657. X
  1658. X
  1659. X{ VAX Pascal extensions }
  1660. Xfunction  expo(r : real) : integer;
  1661. Xfunction  index(s, s2 : string) : integer;
  1662. Xfunction  pad(s : string; padchar : char; size : integer) : string;
  1663. Xfunction  substr(s : string; i, j : integer) : string;
  1664. Xfunction  uround(x : longreal) : integer;
  1665. Xfunction  utrunc(x : longreal) : integer;
  1666. X
  1667. X
  1668. X
  1669. X{ MPW Pascal extensions }
  1670. Xfunction  arccos(r : longreal) : longreal;
  1671. Xfunction  arcsin(r : longreal) : longreal;
  1672. Xfunction  arctanh(r : longreal) : longreal;
  1673. Xfunction  cosh(r : longreal) : longreal;
  1674. Xfunction  exp10(r : longreal) : longreal;
  1675. Xfunction  log10(r : longreal) : longreal;
  1676. Xfunction  scaneq(limit : integer; ch : char; var s : univ integer) : integer;
  1677. Xfunction  scanne(limit : integer; ch : char; var s : univ integer) : integer;
  1678. Xfunction  sinh(r : longreal) : longreal;
  1679. Xfunction  tan(r : longreal) : longreal;
  1680. Xfunction  tanh(r : longreal) : longreal;
  1681. X
  1682. X
  1683. X{ SUN Pascal extensions }
  1684. Xtype alfa = packed array [1..10] of char;
  1685. X{FuncMacro argc = P_argc}
  1686. Xfunction  argc : integer;
  1687. X{FuncMacro null = 0}
  1688. Xprocedure null;
  1689. X
  1690. X
  1691. X
  1692. Xend.
  1693. X
  1694. X
  1695. X
  1696. END_OF_FILE
  1697. if test 3784 -ne `wc -c <'src/system.imp'`; then
  1698.     echo shar: \"'src/system.imp'\" unpacked with wrong size!
  1699. fi
  1700. # end of 'src/system.imp'
  1701. fi
  1702. echo shar: End of archive 2 \(of 32\).
  1703. cp /dev/null ark2isdone
  1704. MISSING=""
  1705. 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
  1706.     if test ! -f ark${I}isdone ; then
  1707.     MISSING="${MISSING} ${I}"
  1708.     fi
  1709. done
  1710. if test "${MISSING}" = "" ; then
  1711.     echo You have unpacked all 32 archives.
  1712.     echo "Now see PACKNOTES and the README"
  1713.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1714. else
  1715.     echo You still need to unpack the following archives:
  1716.     echo "        " ${MISSING}
  1717. fi
  1718. ##  End of shell archive.
  1719. exit 0
  1720.