v21i047: Pascal to C translator, Part02/32

Rich Salz rsalz at uunet.uu.net
Tue Mar 27 06:30:55 AEST 1990


Submitted-by: Dave Gillespie <daveg at csvax.caltech.edu>
Posting-number: Volume 21, Issue 47
Archive-name: p2c/part02

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 2 (of 32)."
# Contents:  HP/import/fs.imp HP/include/fs.h HP/include/iodecl.h
#   HP/include/misc.h src/INSTALL src/Makefile src/README src/dir.c
#   src/hpmods.c src/system.imp
# Wrapped by rsalz at litchi.bbn.com on Mon Mar 26 14:29:26 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'HP/import/fs.imp' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'HP/import/fs.imp'\"
else
echo shar: Extracting \"'HP/import/fs.imp'\" \(4894 characters\)
sed "s/^X//" >'HP/import/fs.imp' <<'END_OF_FILE'
X
X
X{IncludeFrom=fs <p2c/fs.h>}
X
X
X{*VarStrings=0} {*VarFiles=0} {*ExportSymbol=fs_%s} {*Export_Symbol=%s}
X
X
Xmodule fs;    {file support} 
X
Ximport sysglobals, asm, misc;
X
Xexport
X
Xtype 
X     closetype = (cnormal, lock, purge, ccrunch); 
X     faccess = (readonly,writeonly,readwrite,writeappend,overwrite);
X     vptr = record case integer of
X              0: (j: integer);
X              1: (i: ^shortint); 
X              2: (s: ^string80);
X              end;
X           
X
Xprocedure fstripname(s : fid; var pvname,ppath,pfname : string);
Xprocedure fixname(var title: string; kind: filekind); 
Xprocedure zapspaces(var s: string); 
Xfunction suffix(var ftitle: string): filekind; 
Xfunction scantitle (fname: fid; var fvid: vid; var ftitle: fid; 
X                            var fsegs: integer; var fkind: filekind): boolean; 
Xfunction findvolume (var fvid: vid; verify: boolean): unitnum; 
Xprocedure doprefix(var dirname:fid; var kvid:vid; var kunit:integer; 
X                                                             findunit:boolean);
X
X{WarnNames=1}
Xprocedure finitb (var f: fib; window: windowp; recbytes: integer); 
Xprocedure fhpopen(var f: fib; typ: faccess; var title, option: string255);
Xprocedure fhpreset(var f: fib; typ: faccess);
Xprocedure fcloseit(var f: fib; stype: string255);
Xprocedure fclose (var f: fib; ftype: closetype); 
Xprocedure fmaketype(anyvar f:fib; var title, option, typestring: string); 
Xprocedure foverfile(anyvar f:fib; var title, option, typestring: string); 
Xprocedure fanonfile(anyvar f:fib; var name:string; kind:filekind;size:integer);
X
Xprocedure fseek(var f: fib; position: integer); 
Xfunction fposition(var f: fib): integer;
Xfunction fmaxpos(var f: fib): integer;
X
Xfunction fbufferref(var f: fib): windowp;
Xprocedure fget (var f: fib); 
Xprocedure fput (var f: fib); 
Xfunction feof (var f: fib): boolean; 
Xfunction feoln (var f: fib): boolean; 
Xprocedure fwriteln (var f: fib); 
X
Xprocedure fread(anyvar f: fib; anyvar buf: window); 
Xprocedure fwrite(anyvar f: fib;  anyvar buf: window); 
X
X{WarnNames}
Xprocedure freadbytes(anyvar f: fib; anyvar buf: window; size: integer); 
Xprocedure fwritebytes(anyvar f: fib;  anyvar buf: window; size: integer); 
X{*WarnNames=1}
X
Xfunction fblockio (var f: fib; var buf: window;
X                           nblocks,rblock: integer; doread: boolean): integer; 
X
X
Xprocedure killchar (anyvar f: fib; var sinx: integer); 
X
Xprocedure fpage (var t: text); 
Xprocedure foverprint(var t: text); 
Xprocedure fgotoxy(anyvar f: fib;      x, y:  integer); 
Xprocedure fgetxy (anyvar f: fib;  var x, y:  integer); 
X
Xprocedure freadln (var t:text); 
Xprocedure fwritechar (var t: text; ch: char; rleng: shortint); 
Xprocedure freadchar (var t:text; var ch: char);
Xprocedure freadword (var t:text; var i: shortint);
Xprocedure freadint (var t:text; var i: integer); 
Xprocedure fwriteword (var t:text;i,rleng: shortint); 
Xprocedure fwriteint (var t:text;i: integer; rleng: shortint); 
Xprocedure fwritestr (var t:text;anyvar s: string80; rleng: shortint); 
Xprocedure freadstr (var t:text; var s: string);
Xprocedure fwritepaoc (var t: text; var a: window; aleng,rleng: shortint); 
Xprocedure freadpaoc (var t: text; var a: window; aleng: shortint);
Xprocedure freadenum (var t: text; var i: shortint; p: vptr);
Xprocedure fwriteenum(var t: text; i: shortint; rleng: shortint; p: vptr);
Xprocedure freadbool (var t: text; var b: boolean);
Xprocedure fwritebool(var t: text; b: boolean; rleng: shortint);
X
X
Xprocedure freadstrchar (var s: string255;var p2: integer; var ch: char);
Xprocedure fwritestrchar (var s: string;
X                                  var p2: integer; ch: char; rleng: shortint); 
Xprocedure freadstrword (var s: string255;var p2: integer; var i: shortint);
X{PROCEDURE FREADSTRINT (VAR S: STRING255;VAR P2,I: INTEGER);}
Xprocedure fwritestrword (var s: string;var p2: integer; i,rleng: shortint); 
X{PROCEDURE FWRITESTRINT(VAR T: STRING;
X                               VAR P2: INTEGER; I: INTEGER; RLENG: SHORTINT); }
Xprocedure freadstrstr (var t: string255;var p2: integer; var s: string);
Xprocedure fwritestrstr (var s: string; var p2: integer;
X                                        anyvar t: string255; rleng: shortint); 
Xprocedure fwritestrpaoc (var s: string; var p2: integer;
X                                        var a: window; aleng,rleng: shortint); 
Xprocedure freadstrpaoc (var s: string255; var p2: integer;
X                                              var a: window; aleng: shortint);
Xprocedure freadstrenum (var s: string255;
X                                    var p2: integer; var i: shortint; p: vptr);
Xprocedure fwritestrenum(var s: string;
X                                  var p2: integer; i,rleng: shortint; p: vptr);
Xprocedure freadstrbool (var s: string255;var p2: integer; var b: boolean);
Xprocedure fwritestrbool(var s: string;
X                                 var p2: integer; b: boolean; rleng: shortint);
X
X
Xend.
X
X
END_OF_FILE
if test 4894 -ne `wc -c <'HP/import/fs.imp'`; then
    echo shar: \"'HP/import/fs.imp'\" unpacked with wrong size!
fi
# end of 'HP/import/fs.imp'
fi
if test -f 'HP/include/fs.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'HP/include/fs.h'\"
else
echo shar: Extracting \"'HP/include/fs.h'\" \(4438 characters\)
sed "s/^X//" >'HP/include/fs.h' <<'END_OF_FILE'
X/* Header for module fs, generated by p2c */
X#ifndef FS_H
X#define FS_H
X
X
X
X/*file support*/
X#ifndef SYSGLOBALS_H
X#include <p2c/sysglobals.h>
X#endif
X
X#ifndef ASM_H
X#include <p2c/asm.h>
X#endif
X
X#ifndef MISC_H
X#include <p2c/misc.h>
X#endif
X
X
X
X#ifdef FS_G
X# define vextern
X#else
X# define vextern extern
X#endif
X
X
X
Xtypedef enum {
X    fs_cnormal, fs_lock, fs_purge, fs_ccrunch
X} fs_closetype;
X
Xtypedef enum {
X    fs_readonly, fs_writeonly, fs_readwrite, fs_writeappend, fs_overwrite
X} fs_faccess;
X
Xtypedef union fs_vptr {
X    long j;
X    short *i;
X    Char *s;
X} fs_vptr;
X
X
X
Xextern Void fs_fstripname PP((Char *s, Char *pvname, Char *ppath,
X			      Char *pfname));
Xextern Void fs_fixname PP((Char *title, int kind));
Xextern Void fs_zapspaces PP((Char *s));
Xextern filekind fs_suffix PP((Char *ftitle));
Xextern boolean fs_scantitle PP((Char *fname, Char *fvid, Char *ftitle,
X				long *fsegs, filekind *fkind));
Xextern char fs_findvolume PP((Char *fvid, int verify));
Xextern Void fs_doprefix PP((Char *dirname, Char *kvid, long *kunit,
X			    int findunit));
Xextern Void fs_finitb PP((fib *f, Char *window_, long recbytes));
Xextern Void fs_fhpopen PP((fib *f, int typ, Char *title, Char *option));
Xextern Void fs_fhpreset PP((fib *f, int typ));
Xextern Void fs_fcloseit PP((fib *f, Char *stype));
Xextern Void fs_fclose PP((fib *f, int ftype));
Xextern Void fs_fmaketype PP((fib *f, Char *title, Char *option,
X			     Char *typestring));
Xextern Void fs_foverfile PP((fib *f, Char *title, Char *option,
X			     Char *typestring));
Xextern Void fs_fanonfile PP((fib *f, Char *name, int kind, long size));
Xextern Void fs_fseek PP((fib *f, long position));
Xextern long fs_fposition PP((fib *f));
Xextern long fs_fmaxpos PP((fib *f));
Xextern Char *fs_fbufferref PP((fib *f));
Xextern Void fs_fget PP((fib *f));
Xextern Void fs_fput PP((fib *f));
Xextern boolean fs_feof PP((fib *f));
Xextern boolean fs_feoln PP((fib *f));
Xextern Void fs_fwriteln PP((fib *f));
Xextern Void fs_fread PP((fib *f, Char *buf));
Xextern Void fs_fwrite PP((fib *f, Char *buf));
Xextern Void fs_freadbytes PP((fib *f, Char *buf, long size));
Xextern Void fs_fwritebytes PP((fib *f, Char *buf, long size));
Xextern long fs_fblockio PP((fib *f, Char *buf, long nblocks, long rblock,
X			    int doread));
Xextern Void fs_killchar PP((fib *f, long *sinx));
Xextern Void fs_fpage PP((FILE *t));
Xextern Void fs_foverprint PP((FILE *t));
Xextern Void fs_fgotoxy PP((fib *f, long x, long y));
Xextern Void fs_fgetxy PP((fib *f, long *x, long *y));
Xextern Void fs_freadln PP((FILE *t));
Xextern Void fs_fwritechar PP((FILE *t, int ch, int rleng));
Xextern Void fs_freadchar PP((FILE *t, Char *ch));
Xextern Void fs_freadword PP((FILE *t, short *i));
Xextern Void fs_freadint PP((FILE *t, long *i));
Xextern Void fs_fwriteword PP((FILE *t, int i, int rleng));
Xextern Void fs_fwriteint PP((FILE *t, long i, int rleng));
Xextern Void fs_fwritestr PP((FILE *t, Char *s, int rleng));
Xextern Void fs_freadstr PP((FILE *t, Char *s));
Xextern Void fs_fwritepaoc PP((FILE *t, Char *a, int aleng, int rleng));
Xextern Void fs_freadpaoc PP((FILE *t, Char *a, int aleng));
Xextern Void fs_freadenum PP((FILE *t, short *i, fs_vptr p));
Xextern Void fs_fwriteenum PP((FILE *t, int i, int rleng, fs_vptr p));
Xextern Void fs_freadbool PP((FILE *t, boolean *b));
Xextern Void fs_fwritebool PP((FILE *t, int b, int rleng));
Xextern Void fs_freadstrchar PP((Char *s, long *p2, Char *ch));
Xextern Void fs_fwritestrchar PP((Char *s, long *p2, int ch, int rleng));
Xextern Void fs_freadstrword PP((Char *s, long *p2, short *i));
X
X/*PROCEDURE FREADSTRINT (VAR S: STRING255;VAR P2,I: INTEGER);*/
Xextern Void fs_fwritestrword PP((Char *s, long *p2, int i, int rleng));
X
X/*PROCEDURE FWRITESTRINT(VAR T: STRING; */
X/*                                VAR P2: INTEGER; I: INTEGER; RLENG: SHORTINT); */
Xextern Void fs_freadstrstr PP((Char *t, long *p2, Char *s));
Xextern Void fs_fwritestrstr PP((Char *s, long *p2, Char *t, int rleng));
Xextern Void fs_fwritestrpaoc PP((Char *s, long *p2, Char *a, int aleng,
X				 int rleng));
Xextern Void fs_freadstrpaoc PP((Char *s, long *p2, Char *a, int aleng));
Xextern Void fs_freadstrenum PP((Char *s, long *p2, short *i, fs_vptr p));
Xextern Void fs_fwritestrenum PP((Char *s, long *p2, int i, int rleng,
X				 fs_vptr p));
Xextern Void fs_freadstrbool PP((Char *s, long *p2, boolean *b));
Xextern Void fs_fwritestrbool PP((Char *s, long *p2, int b, int rleng));
X
X
X
X#undef vextern
X
X#endif /*FS_H*/
X
X/* End. */
X
END_OF_FILE
if test 4438 -ne `wc -c <'HP/include/fs.h'`; then
    echo shar: \"'HP/include/fs.h'\" unpacked with wrong size!
fi
# end of 'HP/include/fs.h'
fi
if test -f 'HP/include/iodecl.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'HP/include/iodecl.h'\"
else
echo shar: Extracting \"'HP/include/iodecl.h'\" \(6087 characters\)
sed "s/^X//" >'HP/include/iodecl.h' <<'END_OF_FILE'
X/* Header for module IODECLARATIONS, generated by p2c */
X#ifndef IODECLARATIONS_H
X#define IODECLARATIONS_H
X
X
X
X#ifndef SYSGLOBALS_H
X#include <p2c/sysglobals.h>
X#endif
X
X
X
X#ifdef IODECLARATIONS_G
X# define vextern
X#else
X# define vextern extern
X#endif
X
X
X
X#define P_iominisc      0
X#define P_iomaxisc      31
X#define P_minrealisc    7
X#define P_maxrealisc    31
X
X#define io_line_feed    '\n'
X#define io_carriage_rtn '\015'
X
X#define P_ioescapecode  (-26)
X#define ioe_no_error    0
X#define ioe_no_card     1
X#define ioe_not_hpib    2
X#define ioe_not_act     3
X#define ioe_not_dvc     4
X#define ioe_no_space    5
X#define ioe_no_data     6
X#define ioe_bad_tfr     7
X#define ioe_isc_busy    8
X#define ioe_buf_busy    9
X#define ioe_bad_cnt     10
X#define ioe_bad_tmo     11
X#define ioe_no_driver   12
X#define ioe_no_dma      13
X#define ioe_no_word     14
X#define ioe_not_talk    15
X#define ioe_not_lstn    16
X#define ioe_timeout     17
X#define ioe_not_sctl    18
X#define ioe_rds_wtc     19
X#define ioe_bad_sct     20
X#define ioe_crd_dwn     21
X#define ioe_eod_seen    22
X#define ioe_misc        23
X#define ioe_sr_toomany  304
X#define ioe_dc_fail     306
X#define ioe_dc_usart    313
X#define ioe_dc_ovfl     314
X#define ioe_dc_clk      315
X#define ioe_dc_cts      316
X#define ioe_dc_car      317
X#define ioe_dc_act      318
X#define ioe_dc_conn     319
X#define ioe_dc_conf     325
X#define ioe_dc_reg      326
X#define ioe_dc_rval     327
X#define ioe_sr_fail     353
X#define no_isc          255
X
X#define gtl_message     '\001'
X#define sdc_message     '\004'
X#define ppc_message     '\005'
X#define get_message     '\b'
X#define tct_message     '\t'
X#define llo_message     '\021'
X#define dcl_message     '\024'
X#define ppu_message     '\025'
X#define spe_message     '\030'
X#define spd_message     '\031'
X#define unl_message     '?'
X#define unt_message     '_'
X#define ppe_message     '`'
X#define ppd_message     'p'
X
X#define talk_constant   64
X#define listen_constant 32
X#define no_card         0
X#define other_card      1
X#define system_card     2
X#define hpib_card       3
X#define gpio_card       4
X#define serial_card     5
X#define graphics_card   6
X#define srm_card        7
X#define bubble_card     8
X#define eprom_prgmr     9
X#define hp98628_dsndl   (-7)
X#define P_hp98629       (-6)
X#define hp_datacomm     (-5)
X#define P_hp98620       (-4)
X#define internal_kbd    (-3)
X#define internal_crt    (-2)
X#define internal_hpib   (-1)
X#define no_id           0
X#define P_hp98624       1
X#define P_hp98626       2
X#define P_hp98622       3
X#define P_hp98623       4
X#define P_hp98625       8
X#define hp98628_async   20
X#define P_hpGATOR       25
X#define P_hp98253       27
X#define P_hp98627       28
X#define P_hp98259       30
X#define P_hp98644       66
X
X
X
Xtypedef enum {
X    ren_line, ifc_line, srq_line, eoi_line, nrfd_line, ndac_line, dav_line,
X    atn_line
X} type_hpib_line;
X
Xtypedef enum {
X    no_parity, odd_parity, even_parity, zero_parity, one_parity
X} type_parity;
X
Xtypedef enum {
X    rts_line, cts_line, dcd_line, dsr_line, drs_line, ri_line, dtr_line
X} type_serial_line;
X
Xtypedef struct drv_table_type {
X    _PROCEDURE iod_init;
X    _PROCEDURE iod_isr;
X    _PROCEDURE iod_rdb;
X    _PROCEDURE iod_wtb;
X    _PROCEDURE iod_rdw;
X    _PROCEDURE iod_wtw;
X    _PROCEDURE iod_rds;
X    _PROCEDURE iod_wtc;
X    _PROCEDURE iod_end;
X    _PROCEDURE iod_tfr;
X    _PROCEDURE iod_send;
X    _PROCEDURE iod_ppoll;
X    _PROCEDURE iod_set, iod_clr;
X    _PROCEDURE iod_test;
X} drv_table_type;
X
Xtypedef union io_funny_proc {
X    _PROCEDURE real_proc;
X    struct {
X	Anyptr *dummy_pr, *dummy_sl;
X    } U0;
X} io_funny_proc;
X
Xtypedef struct io_temp_type {
X    isrib myisrib;
X    io_funny_proc user_isr;
X    Anyptr *user_parm, *card_addr, *in_bufptr, *out_bufptr;
X    Char eirbyte;
X    uchar my_isc;
X    long timeout;
X    short addressed;
X    Char drv_misc[32];
X} io_temp_type;
X
Xtypedef struct io_temp_type2 {
X    isrib myisrib;
X    io_funny_proc user_isr;
X    Anyptr *user_parm, *card_addr, *in_bufptr, *out_bufptr;
X    Char eirbyte;
X    uchar my_isc;
X    long timeout;
X    short addressed;
X    Char drv_misc[128];
X} io_temp_type2;
X
Xtypedef struct io_temp_type3 {
X    isrib myisrib;
X    io_funny_proc user_isr;
X    Anyptr *user_parm, *card_addr, *in_bufptr, *out_bufptr;
X    Char eirbyte;
X    uchar my_isc;
X    long timeout;
X    short addressed;
X    Char drv_misc[160];
X} io_temp_type3;
X
Xtypedef struct io_temp_type4 {
X    isrib myisrib;
X    io_funny_proc user_isr;
X    Anyptr *user_parm, *card_addr, *in_bufptr, *out_bufptr;
X    Char eirbyte;
X    uchar my_isc;
X    long timeout;
X    short addressed;
X    Char drv_misc[164];
X} io_temp_type4;
X
Xtypedef struct isc_table_type {
X    drv_table_type *io_drv_ptr;
X    io_temp_type *io_tmp_ptr;
X    short card_type;
X    long user_time;
X    short card_id;
X    Anyptr *card_ptr;
X} isc_table_type;
X
Xtypedef enum {
X    dummy_tfr_1, serial_DMA, serial_FHS, serial_FASTEST, dummy_tfr_2,
X    overlap_INTR, overlap_DMA, overlap_FHS, overlap_FASTEST, P_OVERLAP
X} user_tfr_type;
X
Xtypedef enum {
X    no_tfr, INTR_tfr, DMA_tfr, BURST_tfr, FHS_tfr
X} actual_tfr_type;
X
Xtypedef enum {
X    to_memory, from_memory
X} dir_of_tfr;
X
Xtypedef Char buf_type[];
X
Xtypedef struct buf_info_type {
X    io_temp_type *drv_tmp_ptr;
X    uchar active_isc;
X    actual_tfr_type act_tfr;
X    user_tfr_type usr_tfr;
X    boolean b_w_mode, end_mode;
X    dir_of_tfr direction;
X    short term_char;
X    long term_count;
X    Char *buf_ptr;
X    long buf_size;
X    Anyptr *buf_empty, *buf_fill;
X    io_funny_proc eot_proc;
X    Anyptr *eot_parm;
X    boolean dma_priority;
X} buf_info_type;
X
X
X
Xvextern io_funny_proc dma_ch_0;
Xvextern uchar dma_isc_0;
Xvextern io_funny_proc dma_ch_1;
Xvextern uchar dma_isc_1;
Xvextern isrib dma_isrib0, dma_isrib1;
Xvextern boolean dma_here;
Xvextern Char io_work_char;
Xvextern long ioe_result, ioe_isc;
Xvextern isc_table_type isc_table[P_iomaxisc - P_iominisc + 1];
Xvextern Char io_revid[97];
Xvextern _PROCEDURE io_error_link;
X
X
X
Xextern Void io_escape PP((long my_code, long select_code));
Xextern uchar io_find_isc PP((Anyptr *iod_temp));
X
X
X
X#undef vextern
X
X#endif /*IODECLARATIONS_H*/
X
X/* End. */
X
END_OF_FILE
if test 6087 -ne `wc -c <'HP/include/iodecl.h'`; then
    echo shar: \"'HP/include/iodecl.h'\" unpacked with wrong size!
fi
# end of 'HP/include/iodecl.h'
fi
if test -f 'HP/include/misc.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'HP/include/misc.h'\"
else
echo shar: Extracting \"'HP/include/misc.h'\" \(2815 characters\)
sed "s/^X//" >'HP/include/misc.h' <<'END_OF_FILE'
X/* Header for module misc, generated by p2c */
X#ifndef MISC_H
X#define MISC_H
X
X
X
X/*homeless orphans*/
X#ifndef SYSGLOBALS_H
X#include <p2c/sysglobals.h>
X#endif
X
X#ifndef ASM_H
X#include <p2c/asm.h>
X#endif
X
X
X
X#ifdef MISC_G
X# define vextern
X#else
X# define vextern extern
X#endif
X
X
X
X#define misc_null       0
X
X#define misc_nullchar   '\0'
X#define misc_homechar   '\001'
X
X#define misc_etx        3
X#define misc_bell       7
X
X#define misc_bellchar   '\007'
X
X#define misc_bs         8
X
X#define misc_leftchar   '\b'
X
X#define misc_tab        9
X
X#define misc_cteol      '\t'
X
X#define misc_lf         10
X
X#define misc_downchar   '\n'
X
X#define misc_vt         11
X
X#define misc_cteos      '\013'
X
X#define misc_ff         12
X
X#define misc_clearscr   '\f'
X
X#define misc_cr         13
X
X#define misc_eol        '\015'
X
X#define misc_dle        16
X#define misc_esc        27
X
X#define misc_escchar    '\033'
X
X#define misc_fsp        28
X
X#define misc_rightchar  '\034'
X
X#define misc_us         31
X
X#define misc_upchar     '\037'
X
X#define misc_del        127
X#define misc_cntrl      255
X
X
X
X/* CATALOGUE INFORMATION, zero entry refers to the directory itself */
X/*name of file or directory*/
X/*external file type (LIF)*/
X/*file kind*/
X/*physical size of file  */
X/*                                         or of total data space on volume*/
X/*logical size of file  */
X/*                                         or unused space on medium*/
X/*starting location of file  */
X/*                                         or first possible data location*/
X/*size of a sector or block*/
X/*creation, last modified dates*/
X/*creation, last modified times*/
X/*extension  */
X/*                                         or total possible number of files */
X/*                                         or requested number of files*/
X/*secondary discretionary field */
X/*                                         or start index of requested catalog*/
X/*comment or miscellaneous information*/
X
Xtypedef struct misc_catentry {
X    Char cname[tidleng + 1];
X    short ceft;
X    filekind ckind;
X    long cpsize, clsize, cstart, cblocksize;
X    daterec ccreatedate, clastdate;
X    timerec ccreatetime, clasttime;
X    long cextra1, cextra2;
X    Char cinfo[21];
X} misc_catentry;
X
Xtypedef struct misc_passentry {
X    long pbits;
X    Char pword[passleng + 1];
X} misc_passentry;
X
X
X
Xvextern uchar misc_idle;
X
X
X
X/* idle character -- 3.0 bug jws 3/20/84 */
Xextern Void misc_getioerrmsg PP((Char *s, long lastior));
Xextern Void misc_printerror PP((long errorcode, long lastior));
Xextern Void misc_upc PP((Char *s));
Xextern long misc_ueovbytes PP((int unit));
Xextern Void misc_unblockeddam PP((fib *f, int unum, int request));
Xextern Void misc_initfilekinds PV( );
Xextern Void misc_lockup PV( );
Xextern Void misc_lockdown PV( );
X
X
X
X#undef vextern
X
X#endif /*MISC_H*/
X
X/* End. */
X
END_OF_FILE
if test 2815 -ne `wc -c <'HP/include/misc.h'`; then
    echo shar: \"'HP/include/misc.h'\" unpacked with wrong size!
fi
# end of 'HP/include/misc.h'
fi
if test -f 'src/INSTALL' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/INSTALL'\"
else
echo shar: Extracting \"'src/INSTALL'\" \(5638 characters\)
sed "s/^X//" >'src/INSTALL' <<'END_OF_FILE'
X
XThis directory contains "p2c" version 1.14, a Pascal to C translator.
X
X"p2c"  Copyright 1989  Dave Gillespie
X                       256-80 Caltech
X                       Pasadena CA 91125
X                       daveg at csvax.caltech.edu, cit-vax!daveg
X
X
XThis program is distributed under the terms of the GNU License Agreement.
XSee the file src/COPYING for details.
X
XThe GNU License Agreement restrictions do _not_ apply to code generated
Xby p2c, nor to the p2c run-time files "p2clib.c" and "p2c.h".
X
X
X
XQUICK INSTRUCTIONS
X
XThe top-level Makefile in this directory tree knows how to build
Xp2c and run it on some example programs.  The compiled p2c will be
X"installed" in this directory tree rather than in public directories.
X(For a full public installation, see the instructions below.)
XJust type "make test" to build p2c and run the examples.
X
X
X
XFULL INSTALLATION INSTRUCTIONS
X
XFor a complete system, you must:
X
X   a) Create a home directory for p2c, such as /usr/lib/p2c.  The exact
X      location does not matter, as long as p2c knows how to find it.
X
X   b) Create an include directory, such as /usr/include/p2c.  If you are
X      unable to arrange for an include directory, you can edit sys.p2crc
X      so as not to require one, or compile translated code with a
X      suitable -I flag.
X
X   c) Install the executable "p2c" in /usr/bin or elsewhere on the
X      standard search path.
X
X   d) Install the run-time library "libp2c.a" in /usr/lib or elsewhere
X      on the standard library search path.
X
X   e) Install the Unix manual entry "p2c.1" in /usr/man/man1.  If you
X      have a "man1.Z" directory instead (for compressed man pages)
X      you will have to edit the Makefile to use a "compress" command.
X
X   f) Install the necessary files in the p2c home directory.
X
XThe Makefile is initially set up to create a private version of p2c in
Xthe p2c distribution directory.  Just "cd src" and "make install" to
Xperform the above steps.  This will place the p2c executable, run-time
Xlibrary, include directory, and man page in the "home" subdirectory of
Xthe distribution directory.  The man page will be in human-readable form.
X
XTo compile code that has been translated by this private version of p2c,
Xuse the command:
X
X    cc -I. foo.c libp2c.a
X
X(assuming "home," i.e., HOMEDIR, is the current directory.)
X
XThe "examples" subdirectory contains a few sample Pascal programs and
Xa Makefile to translate and compile them.
X
XTo install p2c for public use, edit the Makefile to indicate the correct
Xdirectory names.  Suggested names are included as comments.  Also change
XMANFILE as shown to store the man page in the proper form for the "man"
Xcommand.
X
X    HOMEDIR      default /usr/lib/p2c       Home directory
X    INCDIR       default /usr/include/p2c   Include directory
X    BINDIR       default /usr/bin           Directory for "p2c" executable
X    LIBDIR       default /usr/lib           Directory for "libp2c.a" library
X    MANDIR       default /usr/man/man1      Directory for "p2c.1" manual page
X
XMake sure the home and include directories have been created and are
Xwritable, and that the bin, lib, and man directories are writable.
X(You may have to be root to do this.)  Recompile "p2c" with another
X"make install".  Be sure "trans.c" is recompiled with the new value
Xof HOMEDIR; you can ensure this by doing "make newhome" before
X"make install".  You can always type "make" with no arguments to
Xcompile without installing.
X
XHP Pascal Workstation System users will want to copy all of ../HP/include
Xinto the new p2c include directory, and copy all of ../HP/import into
Xthe p2c home directory.  You will have to write emulations for the
Xfunctions you use out of these modules.  (The HP directories are
Xpresent in the ftp distribution only---they have been omitted from
Xthe shar'd version to save space.)
X
XIncomplete interface texts for standard Turbo units are included in
Xturbo.imp.  Turbo users will have to flesh these out and write emulations
Xfor whatever parts of the Turbo runtime library they need.
X
XIf you wish to edit various system-wide configuration parameters, it is
Xbetter to put them in loc.p2crc than in sys.p2crc.  As an example, on a
XTurbo-oriented environment you may wish to add
X
X    Language Turbo
X
Xto the loc.p2crc file to replace the normal default (HP Pascal).
X
X
X
XPORTABILITY
X
XP2c was originally developed on a homebrew C compiler on the HP Pascal
XWorkstation operating system.  Current development takes place on HP-UX,
Xwhich is System V based.  The translator has also been compiled and used
Xon Sun-3's, so presumably it is fairly portable among 32-bit Unix machines.
X
XMany parts of the code will have to be adjusted in order for p2c to work
Xon a machine with 16-bit ints.  I have never had reason or opportunity to
Xtrack these down since I don't have access to such a machine.  Please note
Xthat code _generated_ by p2c works with either size of int even though p2c
Xitself does not.
X
XIf your compiler supports ANSI prototypes, most of the 16-bit portability
Xproblems will go away except for possible %d/%ld sloppiness in sprintf control
Xstrings.  There may be places where p2c tries to cast a pointer into an
Xint, but I believe all such cases use longs consistently.  You will have
Xa problem if your long type is not large enough to store a pointer.
X
XBecause p2c was developed to run under Unix, it is sloppy about memory
Xallocation.  Some data structures are allocated but never freed.  Profiles
Xshow that the waste is not too great in most cases, but if it is a problem
Xyou may have to write a garbage collector (this shouldn't be too hard if you
Xonly run the collector after translating each procedure).
X
END_OF_FILE
if test 5638 -ne `wc -c <'src/INSTALL'`; then
    echo shar: \"'src/INSTALL'\" unpacked with wrong size!
fi
# end of 'src/INSTALL'
fi
if test -f 'src/Makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/Makefile'\"
else
echo shar: Extracting \"'src/Makefile'\" \(5131 characters\)
sed "s/^X//" >'src/Makefile' <<'END_OF_FILE'
X# Makefile for "p2c", the Pascal to C translator.
X#  Copyright (C) 1989 David Gillespie.
X#  Author's address: daveg at csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
X
X# This program is free software; you can redistribute it and/or modify
X# it under the terms of the GNU General Public License as published by
X# the Free Software Foundation (any version).
X
X# This program is distributed in the hope that it will be useful,
X# but WITHOUT ANY WARRANTY; without even the implied warranty of
X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
X# GNU General Public License for more details.
X
X# You should have received a copy of the GNU General Public License
X# along with this program; see the file COPYING.  If not, write to
X# the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
X
X# Directories (private version)
XHOMEDIR = ../home
XINCDIR = ../home/p2c
XBINDIR = ..
XLIBDIR = ../home
XMANDIR = ../home
XMANFILE = p2c.cat          # human-readable manual (for cat.1)
X#MANFILE = p2c.man.inst    # uncompressed nroff source (for man.1)
X#MANFILE = p2c.man.Z       # compressed nroff source (for man.1.Z)
X
X# Directories (public version)
X#HOMEDIR = /usr/lib/p2c
X#INCDIR = /usr/include/p2c
X#BINDIR = /usr/bin
X#LIBDIR = /usr/lib
X#MANDIR = /usr/man/man1
X#MANFILE = p2c.man.inst
X
X# Compiler options
XCC = cc                    # you may wish to use gcc here instead
XOPT = # -O		   # uncomment this for optimization
XDEB = # -g		   # uncomment this for debugging
XDEFS =			   # place other -D types of things here
XCFLAGS = $(OPT) $(DEB) $(DEFS)
XLFLAGS =
X
X
X# Custom translator modules
XCUSTSRCS = hpmods.c citmods.c
XCUSTOBJS = hpmods.o citmods.o
XCUSTDEFS = -DCUST1=hpmods -DCUST2=citmods
X
X
X# File names
XP2CSRCS = trans.c stuff.c out.c comment.c lex.c parse.c decl.c \
X          expr.c pexpr.c funcs.c dir.c
XP2COBJS = trans.o stuff.o out.o comment.o lex.o parse.o decl.o \
X          expr.o pexpr.o funcs.o dir.o
X
XSRCS = $(P2CSRCS) $(CUSTSRCS)
XOBJS = $(P2COBJS) $(CUSTOBJS)
X
XLIBSRCS = p2clib.c loc.p2clib.c
XLIBOBJS = p2clib.o loc.p2clib.o
XOTHERLIBOBJS =
X
XABSHOMEDIR = `cd $(HOMEDIR); pwd`
XABSINCDIR = `cd $(INCDIR); pwd`
XABSLIBDIR = `cd $(LIBDIR); pwd`
X
XMISCSRCS = makeproto.c
XPROTOS = p2c.proto p2c.hdrs
XHDRS = trans.h p2c.h
X
X
X# Top-level targets
Xall: proto p2c libp2c.a p2c.cat
Xproto: $(PROTOS)
X
X
X# Making p2c
Xp2c: $(OBJS)
X	$(CC) $(LFLAGS) $(OBJS) -o p2c
X
Xdir.o: dir.c trans.h
X	$(CC) -c $(CFLAGS) $(CUSTDEFS) dir.c
X
Xtrans.o: trans.c trans.h
X	$(CC) -c $(CFLAGS) -DHASDUMPS -DP2C_HOME=\"$(ABSHOMEDIR)\" trans.c
X
X
X# Making and using makeproto
Xp2c.hdrs: $(SRCS) makeproto
X	./makeproto -n -m -h -t16 -a35 -s0 -x $(SRCS) -o p2c.hdrs
X
Xp2c.proto: $(SRCS) makeproto
X	./makeproto -n -m -h -t16 -a35 -s1 -i $(SRCS) -o p2c.proto
X
Xmakeproto: makeproto.c
X	$(CC) $(CFLAGS) $(LFLAGS) makeproto.c -o makeproto
X
X
X# Making the p2c runtime library
Xlibp2c.a: $(LIBOBJS)
X	ar r libp2c.a $(LIBOBJS) $(OTHERLIBOBJS)
X
Xp2clib.o: p2clib.c
X	$(CC) -c $(CFLAGS) p2clib.c
X
X
X# Making the p2c man page
Xp2c.man.inst: p2c.man
X	sed -e "s;--HOMEDIR--;$(ABSHOMEDIR);"   \
X            -e "s;--INCDIR--;$(ABSINCDIR);"     \
X            -e "s;--LIBDIR--;$(ABSLIBDIR);"     \
X            p2c.man >p2c.man.inst
X
Xp2c.man.Z: p2c.man.inst
X	compress -c p2c.man.inst >p2c.man.Z
X
Xp2c.cat: p2c.man.inst
X	if [ -f /usr/bin/nroff -o -f /bin/nroff ];  \
X	    then nroff -man p2c.man.inst >p2c.cat; fi
X
X
X
X# Initially installing p2c:
X#  First, make sure $(HOMEDIR) and $(INCDIR) exist and are writable;
X#  Second, make sure $(LIBDIR), $(BINDIR) and $(MANDIR) are writable;
X#  Third, execute "make install" to compile and set things up.
X# (You may need to have a system operator do these steps for you.)
X
XCOPY = cp
X
Xnewhome:
X	rm -f trans.o     # force trans.c to be recompiled (if HOMEDIR changes)
X
Xinstall: proto \
X	$(BINDIR)/p2c         \
X	$(LIBDIR)/libp2c.a    \
X	$(MANDIR)/p2c.1	      \
X	$(INCDIR)/p2c.h	      \
X	$(HOMEDIR)/p2crc      \
X	$(HOMEDIR)/loc.p2crc  \
X	$(HOMEDIR)/system.imp \
X	$(HOMEDIR)/system.m2  \
X	$(HOMEDIR)/turbo.imp  \
X	$(HOMEDIR)/string.pas
X
X$(BINDIR)/p2c: p2c
X	$(COPY)  p2c          $(BINDIR)/p2c
X
XSHELL=/bin/sh
X$(LIBDIR)/libp2c.a: libp2c.a
X	$(COPY)  libp2c.a     $(LIBDIR)/libp2c.a
X	if [ -f /usr/bin/ranlib -o -f /bin/ranlib ]; then ranlib $(LIBDIR)/libp2c.a; fi
X
X$(MANDIR)/p2c.1: $(MANFILE)
X	$(COPY)  $(MANFILE)   $(MANDIR)/p2c.1
X
X$(INCDIR)/p2c.h: p2c.h
X	$(COPY)  p2c.h        $(INCDIR)/p2c.h
X
X$(HOMEDIR)/p2crc: sys.p2crc
X	$(COPY)  sys.p2crc    $(HOMEDIR)/p2crc
X
X$(HOMEDIR)/loc.p2crc: loc.p2crc
X	$(COPY)  loc.p2crc    $(HOMEDIR)/loc.p2crc
X
X$(HOMEDIR)/system.imp: system.imp
X	$(COPY)  system.imp   $(HOMEDIR)/system.imp
X
X$(HOMEDIR)/system.m2: system.m2
X	$(COPY)  system.m2    $(HOMEDIR)/system.m2
X
X$(HOMEDIR)/turbo.imp: turbo.imp
X	$(COPY)  turbo.imp    $(HOMEDIR)/turbo.imp
X
X$(HOMEDIR)/string.pas: string.pas
X	$(COPY)  string.pas   $(HOMEDIR)/string.pas
X
X
X
X# Miscellaneous
Xtags:
X	etags $(SRCS) $(LIBSRCS) $(MISCSRCS) $(HDRS)
X
Xclean.o:
X	rm $(OBJS)
X
Xclean:
X	rm $(OBJS) $(LIBOBJS) $(PROTOS) p2c
X
Xwc:
X	wc $(SRCS) $(LIBSRCS) trans.h
X
Xtest:
X	echo '"make test" should be used in the outer-level p2c directory.'
X	echo 'Type "cd .." and "make test" again.'
X
END_OF_FILE
if test 5131 -ne `wc -c <'src/Makefile'`; then
    echo shar: \"'src/Makefile'\" unpacked with wrong size!
fi
# end of 'src/Makefile'
fi
if test -f 'src/README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/README'\"
else
echo shar: Extracting \"'src/README'\" \(2993 characters\)
sed "s/^X//" >'src/README' <<'END_OF_FILE'
X
XThis directory contains "p2c", a Pascal to C translator.
X
X"p2c"  Copyright 1989  Dave Gillespie
X                       256-80 Caltech
X                       Pasadena CA 91125
X                       daveg at csvax.caltech.edu, cit-vax!daveg
X
X
XThis program is distributed under the terms of the GNU License Agreement.
XSee the file src/COPYING for details.
X
XThe GNU License Agreement restrictions do _not_ apply to code generated
Xby p2c, nor to the p2c run-time files "p2clib.c" and "p2c.h".
X
X
X
XThe file "trans.c" includes an overview of the source files of p2c.
XAll p2c source files include the header "trans.h".
X
XThe file "dir.c" is intended to be modified by the user to install
Xcode for custom translations of certain procedures.  To add your own
Xcustom code to p2c, modify CUSTSRCS and CUSTDEFS in the Makefile,
Xthen recompile dir.c.
X
XThe file "system.imp" (copied to %H/system.imp) contains declarations
Xfor "predefined" functions like "sqrt".  These generally have custom
Xtranslation code in funcs.c.  Functions with irregular syntaxes have
Xtheir symbol table entries built directly in funcs.c; they do not
Xappear here.  The default sys.p2crc causes p2c to read system.imp at
Xthe beginning of every job.
X
XThe file "system.m2" contains declarations for predefined Modula-2
Xfunctions.  It should be substituted for "system.imp" when translating
XModula-2 programs.
X
XThe file "turbo.imp" contains declarations for all the Turbo Pascal
Xstandard units like dos and crt.  (These are very incomplete at
Xpresent.)  The default sys.p2crc causes p2c to read turbo.imp as
Xsoon as any Turbo standard unit is used.
X
XThe file "string.pas" implements the Oregon Software dynamic strings
Xpackage.  These are translated pretty completely into native C strings
Xusing only the FuncMacro mechanism of p2c---no custom C code was
Xwritten to support these functions.
X
XThe file "NOTES" contains the author's current bugs-and-plans list.
XThe file "HISTORY" contains the revision history of the program.
X
XThe "makeproto" program is an independent utility for scanning a large
XC program with old-style declarations and building function prototypes
Xfor all its functions.  The "trans.h" file #includes the prototype
Xfiles for all of p2c.
X
X
XNO WARRANTY:
X   The program in this directory was developed for internal use at
X   Caltech and thus absolutely no guarantee is made that the program
X   will compile or run on other systems or that it will produce correct
X   code.  P2c is _not_ a compiler, it is a translator; it strives to
X   produce correct code but reserves the right to sacrifice correctness
X   in extreme cases for readability in the general case.  P2c is designed
X   to be extended (see funcs.c, hpmods.c and citmods.c for examples), but
X   some of the main code is pretty messy since the translator has grown
X   considerably beyond its original planned scale.  Bug reports are
X   welcome at daveg at csvax.caltech.edu, but I may not have time to respond
X   to them immediately.  Suggestions are welcome, too!
X
END_OF_FILE
if test 2993 -ne `wc -c <'src/README'`; then
    echo shar: \"'src/README'\" unpacked with wrong size!
fi
# end of 'src/README'
fi
if test -f 'src/dir.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/dir.c'\"
else
echo shar: Extracting \"'src/dir.c'\" \(5243 characters\)
sed "s/^X//" >'src/dir.c' <<'END_OF_FILE'
X/* "p2c", a Pascal to C translator.
X   Copyright (C) 1989 David Gillespie.
X   Author's address: daveg at csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
X
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation (any version).
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
XGNU General Public License for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; see the file COPYING.  If not, write to
Xthe Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
X
X
X
X#define define_parameters
X#define PROTO_DIR_C
X#include "trans.h"
X
X
X/* This file is user-modifiable.  It is the "directory" of C functions
X   for compiling in-line various Pascal library routines. */
X
X
X
Xextern void setup_module_hp();
Xextern void setup_module_cit();
Xextern void setup_module_tanner();
X
X
X
X
X/* This function is called once when p2c is starting up, before
X   the p2crc file has been read.
X*/
X
Xvoid init_dir()
X{
X
X
X}
X
X
X
X
X
X/* This function is called once when p2c is starting up, after
X   the p2crc file has been read.
X*/
X
Xvoid setup_dir()
X{
X
X
X}
X
X
X
X
X
X/* This procedure is called after reading the import text for a module,
X   where "name" is the module name, in upper-case letters.  Calls to
X   "addmeaning", "makestandardfunc", etc. will annotate the context of
X   the module.  Note that this will be called if the module is searched,
X   even if it is never actually imported.
X*/
X
X#if 0
XStatic void _setup(name, defn)
Xchar *name;
Xint defn;
X{
X    /* this is a dummy procedure which may be called by setup_module */
X}
X#endif
X
X#define _setup(a,b)
X
Xvoid setup_module(name, defn)
Xchar *name;
Xint defn;
X{
X    if (!strcicmp(name, "SYSTEM"))
X	decl_builtins();
X#ifdef CUST1
X    CUST1(name, defn);
X#endif
X#ifdef CUST2
X    CUST2(name, defn);
X#endif
X#ifdef CUST3
X    CUST3(name, defn);
X#endif
X#ifdef CUST4
X    CUST4(name, defn);
X#endif
X#ifdef CUST5
X    CUST5(name, defn);
X#endif
X}
X
X
X
X
X
X/* This procedure is called once after the p2crc file has been
X   read and the built-in parameters have been "fixed".  It should
X   check ranges and add defaults for any newly introduced parameters
X   in the "rctable" (see "trans.h").
X*/
X
Xvoid fix_parameters()
X{
X
X
X}
X
X
X
X
X
X/* This function is called during a traversal of the tree of statements for
X   a procedure.  Ordinarily it returns its argument; it may instead return
X   an arbitrary other statement or sequence of statements, which will then
X   be spliced in to replace the original one.  It may return NULL to delete
X   the statement altogether.
X*/
X
XStmt *fix_statement(sp)
XStmt *sp;
X{
X    return sp;
X}
X
X
X
X
X
X/* This is the analogous function for expression traversals.  It is
X   called after the arguments have been (recursively) fixed and all
X   built-in fixes have been performed.
X*/
X
XExpr *fix_expression(ex, env)
XExpr *ex;
Xint env;
X{
X    return ex;
X}
X
X
X
X
X
X/* This procedure is called when fixing an expression of type
X   EK_BICALL.  It is called before the arguments are fixed.  If
X   it recognizes the BICALL, it should fix the arguments, then
X   return a (possibly modified) fixed expression, which may or
X   may not be a BICALL.  That expression will then be sent to
X   fix_expression() as usual, but other standard fixes will not
X   automatically be performed on it.  If the BICALL is not
X   recognized, the function should return NULL.
X*/
X
XExpr *fix_bicall(ex, env)
XExpr *ex;
Xint env;
X{
X    return NULL;
X}
X
X
X
X
X
X/* This function returns nonzero if the built-in function "name"
X   should be written "if (f(x))" rather than "if (f(x) != 0)"
X   when used as a boolean.  The call does *not* necessarily have
X   to return a 1-or-0 value.
X*/
X
Xint boolean_bicall(name)
Xchar *name;
X{
X    return (!strcmp(name, "strcmp") ||
X            !strcmp(name, "strncmp") ||
X            !strcmp(name, "memcmp") ||
X            !strcmp(name, "feof") ||
X            !strcmp(name, "feoln"));
X}
X
X
X
X
X
X/* The function "name" promises not to change certain of its
X   VAR-style parameters.  For each of arguments i = 0 through 15,
X   if bit 1<<i of the return value of this function is set, and
X   the i'th parameter is a pointer to an object, then the function
X   guarantees not to change that object.
X*/
X
Xunsigned int safemask_bicall(name)
Xchar *name;
X{
X    Symbol *sp;
X
X    sp = findsymbol_opt(name);
X    if (sp) {
X	if (sp->flags & (STRUCTF|STRLAPF))
X	    return ~1;
X	if (sp->flags & (NOSIDEEFF|DETERMF))
X	    return ~0;
X    }
X    if (!strcmp(name, "fwrite") ||
X        !strcmp(name, "memchr"))
X        return 1;
X    if (!strcmp(name, "memcpy") ||
X        !strcmp(name, "memmove"))
X        return 2;
X    if (!strcmp(name, "memcmp"))
X        return 3;
X    if (!strcmp(name, "sprintf") ||
X        !strcmp(name, "fprintf"))
X        return ~1;
X    if (!strcmp(name, "printf"))
X        return ~0;
X    return 0;
X}
X
X
X
X
X
X/* The function "name" has side effects that could affect other variables
X   in the program besides those that are explicitly mentioned.
X*/
X
Xint sideeffects_bicall(name)
Xchar *name;
X{
X    return 0;
X}
X
X
X
X
X
X
X/* End. */
X
X
X
END_OF_FILE
if test 5243 -ne `wc -c <'src/dir.c'`; then
    echo shar: \"'src/dir.c'\" unpacked with wrong size!
fi
# end of 'src/dir.c'
fi
if test -f 'src/hpmods.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/hpmods.c'\"
else
echo shar: Extracting \"'src/hpmods.c'\" \(3133 characters\)
sed "s/^X//" >'src/hpmods.c' <<'END_OF_FILE'
X/* "p2c", a Pascal to C translator.
X   Copyright (C) 1989 David Gillespie.
X   Author's address: daveg at csvax.caltech.edu; 256-80 Caltech/Pasadena CA 91125.
X
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation (any version).
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
XGNU General Public License for more details.
X
XYou should have received a copy of the GNU General Public License
Xalong with this program; see the file COPYING.  If not, write to
Xthe Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
X
X
X
X#define PROTO_HPMODS_C
X#include "trans.h"
X
X
X
X
X
X/* FS functions */
X
X
XStatic Stmt *proc_freadbytes()
X{
X    Expr *ex, *ex2, *vex, *fex;
X    Type *type;
X
X    if (!skipopenparen())
X	return NULL;
X    fex = p_expr(tp_text);
X    if (!skipcomma())
X	return NULL;
X    vex = p_expr(NULL);
X    if (!skipcomma())
X	return NULL;
X    ex2 = p_expr(tp_integer);
X    skipcloseparen();
X    type = vex->val.type;
X    ex = makeexpr_bicall_4("fread", tp_integer,
X                           makeexpr_addr(vex),
X                           convert_size(type, ex2, "FREADBYTES"),
X                           makeexpr_long(1),
X                           copyexpr(fex));
X    if (checkeof(fex)) {
X        ex = makeexpr_bicall_2(name_SETIO, tp_void,
X                               makeexpr_rel(EK_EQ, ex, makeexpr_long(1)),
X                               makeexpr_long(30));
X    }
X    return wrapopencheck(makestmt_call(ex), fex);
X}
X
X
X
X
XStatic Stmt *proc_fwritebytes()
X{
X    Expr *ex, *ex2, *vex, *fex;
X    Type *type;
X
X    if (!skipopenparen())
X	return NULL;
X    fex = p_expr(tp_text);
X    if (!skipcomma())
X	return NULL;
X    vex = p_expr(NULL);
X    if (!skipcomma())
X	return NULL;
X    ex2 = p_expr(tp_integer);
X    skipcloseparen();
X    type = vex->val.type;
X    ex = makeexpr_bicall_4("fwrite", tp_integer,
X                           makeexpr_addr(vex),
X                           convert_size(type, ex2, "FWRITEBYTES"),
X                           makeexpr_long(1),
X                           copyexpr(fex));
X    if (checkfilewrite) {
X        ex = makeexpr_bicall_2(name_SETIO, tp_void,
X                               makeexpr_rel(EK_EQ, ex, makeexpr_long(1)),
X                               makeexpr_long(3));
X    }
X    return wrapopencheck(makestmt_call(ex), fex);
X}
X
X
X
X
X
X
X
X
X
X
X/* SYSGLOBALS */
X
X
XStatic void setup_sysglobals()
X{
X    Symbol *sym;
X
X    sym = findsymbol("SYSESCAPECODE");
X    if (sym->mbase)
X        strchange(&sym->mbase->name, name_ESCAPECODE);
X    sym = findsymbol("SYSIORESULT");
X    if (sym->mbase)
X        strchange(&sym->mbase->name, name_IORESULT);
X}
X
X
X
X
X
X
X
X
Xvoid hpmods(name, defn)
Xchar *name;
Xint defn;
X{
X    if (!strcmp(name, "FS")) {
X        makespecialproc("freadbytes", proc_freadbytes);
X        makespecialproc("fwritebytes", proc_fwritebytes);
X    } else if (!strcmp(name, "SYSGLOBALS")) {
X        setup_sysglobals();
X    }
X}
X
X
X
X
X/* End. */
X
X
X
END_OF_FILE
if test 3133 -ne `wc -c <'src/hpmods.c'`; then
    echo shar: \"'src/hpmods.c'\" unpacked with wrong size!
fi
# end of 'src/hpmods.c'
fi
if test -f 'src/system.imp' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/system.imp'\"
else
echo shar: Extracting \"'src/system.imp'\" \(3784 characters\)
sed "s/^X//" >'src/system.imp' <<'END_OF_FILE'
X
X{ Declarations for Pascal built-in objects }
X
X{ Note: All functions with unusual syntaxes are not included here }
X
X
X{*IgnoreNonAlpha=0}   { If Language=UCSD, make sure we can parse "__module" }
X
X
X__module SYSTEM;   {PERMANENT}
X
X
X__export
X
X{ Standard Pascal functions }
Xfunction  arctan(x : longreal) : longreal;
Xfunction  cos(x : longreal) : longreal;
Xfunction  exp(x : longreal) : longreal;
Xfunction  ln(x : longreal) : longreal;
Xprocedure mark(var p);
Xfunction  odd(i : integer) : boolean;
Xprocedure release(var p);
Xfunction  round(x : longreal) : integer;
Xfunction  sin(x : longreal) : longreal;
Xfunction  sqrt(x : longreal) : longreal;
Xfunction  trunc(x : longreal) : integer;
X
X
X
X{ HP Pascal extensions }
Xfunction  binary(s : string) : integer;
Xprocedure gotoxy(x, y : integer);
Xfunction  hex(s : string) : integer;
Xfunction  lastpos(anyvar f : text) : integer;
Xfunction  linepos(var f : text) : integer;
Xprocedure moveleft(anyvar s, d : integer; i : integer);
Xprocedure moveright(anyvar s, d : integer; i : integer);
Xfunction  octal(s : string) : integer;
Xfunction  str(s : string; i, j : integer) : string;
Xfunction  strlen(s : string) : integer;
Xfunction  strltrim(s : string) : string;
Xfunction  strmax(s : string) : integer;
Xfunction  strpos(s, s2 : string) : integer;
Xfunction  strrpt(s : string; i : integer) : string;
Xfunction  strrtrim(s : string) : string;
X
X
X
X{ Turbo/UCSD Pascal extensions }
Xfunction  copy(s : string; i, j : integer) : string;
Xprocedure delete(var s; i, j : integer);
Xfunction  frac(x : longreal) : longreal;
Xprocedure freemem(var p);
Xprocedure getmem(var p; i : integer);
Xprocedure insert(s : string; var s2; i : integer);
Xfunction  length(s : string) : integer;
Xfunction  log(x : longreal) : longreal;
Xfunction  maxavail : integer;
Xfunction  memavail : integer;
Xprocedure move(var s, d; i : integer);
Xfunction  paramcount : integer;
Xfunction  paramstr(i : integer) : string;
Xfunction  pos(s, s2 : string) : integer;
Xfunction  ptr(i, j : integer) : pointer;
Xfunction  pwroften(r : longreal) : longreal;
Xfunction  swap(i : integer) : integer;
Xfunction  upcase(c : char) : char;
X
X
X{ Turbo standard variables }
X
Xvar
X   HeapPtr, FreePtr: pointer;
X
X
X{ Oregon Software Pascal-2 extensions }
X{FuncMacro p2_inew(n) = malloc(n)}
X{FuncMacro p2_new(x,n) = (*x = Malloc(n))}
X{FuncMacro p2_dispose(x,n) = Free(*x)}
Xprocedure noioerror(var f);
Xfunction ioerror(var f) : boolean;
Xfunction iostatus(var f) : integer;
X{FuncMacro exitst(s) = exit(s)}
Xprocedure exitst(s : integer);
X{FuncMacro P_getcmdline(low,high,line,len)=(*len=P_getcmdline(low,high,line))}
Xprocedure P_getcmdline(var line : array [low..high : integer] of char; var len : integer);
Xprocedure TimeStamp(var day, month, year, hour, min, sec : integer);
X
X
X{ VAX Pascal extensions }
Xfunction  expo(r : real) : integer;
Xfunction  index(s, s2 : string) : integer;
Xfunction  pad(s : string; padchar : char; size : integer) : string;
Xfunction  substr(s : string; i, j : integer) : string;
Xfunction  uround(x : longreal) : integer;
Xfunction  utrunc(x : longreal) : integer;
X
X
X
X{ MPW Pascal extensions }
Xfunction  arccos(r : longreal) : longreal;
Xfunction  arcsin(r : longreal) : longreal;
Xfunction  arctanh(r : longreal) : longreal;
Xfunction  cosh(r : longreal) : longreal;
Xfunction  exp10(r : longreal) : longreal;
Xfunction  log10(r : longreal) : longreal;
Xfunction  scaneq(limit : integer; ch : char; var s : univ integer) : integer;
Xfunction  scanne(limit : integer; ch : char; var s : univ integer) : integer;
Xfunction  sinh(r : longreal) : longreal;
Xfunction  tan(r : longreal) : longreal;
Xfunction  tanh(r : longreal) : longreal;
X
X
X{ SUN Pascal extensions }
Xtype alfa = packed array [1..10] of char;
X{FuncMacro argc = P_argc}
Xfunction  argc : integer;
X{FuncMacro null = 0}
Xprocedure null;
X
X
X
Xend.
X
X
X
END_OF_FILE
if test 3784 -ne `wc -c <'src/system.imp'`; then
    echo shar: \"'src/system.imp'\" unpacked with wrong size!
fi
# end of 'src/system.imp'
fi
echo shar: End of archive 2 \(of 32\).
cp /dev/null ark2isdone
MISSING=""
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
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 32 archives.
    echo "Now see PACKNOTES and the README"
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Please send comp.sources.unix-related mail to rsalz at uunet.uu.net.
Use a domain-based address or give alternate paths, or you may lose out.



More information about the Comp.sources.unix mailing list