diff --git a/allbwb.bat b/allbwb.bat new file mode 100644 index 0000000..9901cb7 --- /dev/null +++ b/allbwb.bat @@ -0,0 +1,11 @@ +rem this is the name of the patch file +set bwbname=bwb1 + +rem rm -fr bwbasic +rem md bwbasic +rem cd bwbasic +rem unzip ..\%bwbname% +rem chmod -R 666 * +call zipall +call bwbasic3 +call subjobs diff --git a/bwb_dio.c b/bwb_dio.c index 6dcfc83..7110c30 100644 --- a/bwb_dio.c +++ b/bwb_dio.c @@ -1009,7 +1009,7 @@ bwb_kill( l ) /* try to delete the specified file */ str_btoc( atbuf, &( e->sval ) ); - r = unlink( atbuf ); + r = remove( atbuf ); /* detect error */ diff --git a/bwb_fnc.c b/bwb_fnc.c index 72a2b9c..b8a479e 100644 --- a/bwb_fnc.c +++ b/bwb_fnc.c @@ -39,7 +39,7 @@ #include "bwbasic.h" #include "bwb_mes.h" -#if UNIX_CMDS +#if HAVE_SYSSTAT #include #endif diff --git a/bwbasic.c b/bwbasic.c index 5c4f37e..bf38144 100644 --- a/bwbasic.c +++ b/bwbasic.c @@ -51,7 +51,7 @@ char *bwb_ebuf; /* error buffer */ static char *read_line; int bwb_trace = FALSE; -FILE *errfdevice = stderr; /* output device for error messages */ +FILE *errfdevice; /* output device for error messages */ #if HAVE_LONGJUMP jmp_buf mark; @@ -133,6 +133,7 @@ bwb_init( argc, argv ) static char end_buf[] = "\0"; #endif + errfdevice = stderr; #if INTENSIVE_DEBUG prn_xprintf( stderr, "Memory Allocation Statistics:\n" ); prn_xprintf( stderr, "----------------------------\n" ); diff --git a/bwbasic.h b/bwbasic.h index 0167218..acb14de 100644 --- a/bwbasic.h +++ b/bwbasic.h @@ -41,7 +41,7 @@ /* Version number */ -#define VERSION "2.20 patch level 2" /* Current version number */ +#define VERSION "2.30" /* Current version number */ /*************************************************************** @@ -64,6 +64,27 @@ #define IMP_NCU FALSE /* Linux, ncurses */ #define ALLOW_RENUM TRUE /* Added by JBV */ +/* Make function names 8-character unique for systems like MVS */ +#define var_findnval vf_nval +#define var_findsval vf_sval +#define fnc_timer f_timer +#define bwb_elseif b_elseif +#define bwb_caseif b_caseif +#define find_endif f_endif +#define find_endselect f_endselect +#define find_endsub f_endsub +#define fslt_findl fsf_l +#define fslt_findf fsf_f +#define bwb_loopuntil bl_until +#define bwb_exitfor bexfor +#define bwb_exitdo bexdo +#define bwb_endselect be_select +#define bwb_endsub be_endsub +#define fslt_addcallvar fa_callvar +#define fslt_addlocalvar fa_localvar +#define CALLOC calloc2 +#define FREE free2 + #if IMP_TTY #include "bwx_tty.h" #endif @@ -89,7 +110,7 @@ ***************************************************************/ -#ifdef MSDOS +#ifdef __STDC__ #define HAVE_RAISE TRUE #define HAVE_STRING TRUE #define HAVE_STDLIB TRUE @@ -128,13 +149,13 @@ #endif #ifdef __STDC__ -#define HAVE_SYSTYPES TRUE +#define HAVE_SYSTYPES FALSE #else #define HAVE_SYSTYPES TRUE /* Compiler has header */ #endif #ifdef __STDC__ -#define HAVE_SYSSTAT TRUE +#define HAVE_SYSSTAT FALSE #else #define HAVE_SYSSTAT TRUE /* Compiler has header */ #endif @@ -428,7 +449,11 @@ #define DEFVNAME_COLORS "BWB.COLORS" /* default variable name for COLORS */ #define DEFVNAME_IMPL "BWB.IMPLEMENTATION$" /* default variable name for IMPLEMENTATION */ #define ERRFILE "err.out" /* Filename for redirected error messages */ +#if defined(__MVS__) +#define PROFILENAME "dd:profile" +#else #define PROFILENAME "profile.bas" /* Filename for profile execution */ +#endif #define TASKS 4 /* number of tasks available */ #define MAXARGSIZE 128 /* maximum size of argument */ #define MAXREADLINESIZE 256 /* size of read_line buffer */ diff --git a/bwbasic1.jcl b/bwbasic1.jcl new file mode 100644 index 0000000..8def5b0 --- /dev/null +++ b/bwbasic1.jcl @@ -0,0 +1,9 @@ +//BWBGEN JOB CLASS=C,REGION=0K +//IDCAMS EXEC PGM=IDCAMS +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + DEFINE ALIAS (NAME(BWBASIC) RELATE(SYS1.UCAT.TSO)) - + CATALOG(SYS1.VMASTCAT/SECRET) + SET MAXCC=0 +/* +// diff --git a/bwbasic2.jcl b/bwbasic2.jcl new file mode 100644 index 0000000..b8e0b0b --- /dev/null +++ b/bwbasic2.jcl @@ -0,0 +1,35 @@ +//BWBGEN JOB CLASS=C,REGION=0K +//* +//CREATE PROC BWBPREF='BWBASIC' +//DELETE EXEC PGM=IEFBR14 +//DD1 DD DSN=&BWBPREF..SOURCE,DISP=(MOD,DELETE), +// UNIT=SYSDA,SPACE=(TRK,(0)) +//DD2 DD DSN=&BWBPREF..INCLUDE,DISP=(MOD,DELETE), +// UNIT=SYSDA,SPACE=(TRK,(0)) +//DD3 DD DSN=&BWBPREF..NCALIB,DISP=(MOD,DELETE), +// UNIT=SYSDA,SPACE=(TRK,(0)) +//DD4 DD DSN=&BWBPREF..LINKLIB,DISP=(MOD,DELETE), +// UNIT=SYSDA,SPACE=(TRK,(0)) +//DD5 DD DSN=&BWBPREF..JCL,DISP=(MOD,DELETE), +// UNIT=SYSDA,SPACE=(TRK,(0)) +//* +//ALLOC EXEC PGM=IEFBR14 +//DD1 DD DSN=&BWBPREF..SOURCE,DISP=(,CATLG), +// DCB=(RECFM=VB,LRECL=224,BLKSIZE=9024), +// SPACE=(CYL,(7,1,10)),UNIT=SYSDA +//DD2 DD DSN=&BWBPREF..INCLUDE,DISP=(,CATLG), +// DCB=(RECFM=VB,LRECL=224,BLKSIZE=9024), +// SPACE=(CYL,(1,1,10)),UNIT=SYSDA +//DD3 DD DSN=&BWBPREF..NCALIB,DISP=(,CATLG), +// DCB=(RECFM=U,LRECL=0,BLKSIZE=3200), +// SPACE=(CYL,(1,1,10)),UNIT=SYSDA +//DD4 DD DSN=&BWBPREF..LINKLIB,DISP=(,CATLG), +// DCB=(RECFM=U,LRECL=0,BLKSIZE=3200), +// SPACE=(CYL,(1,1,10)),UNIT=SYSDA +//DD5 DD DSN=&BWBPREF..JCL,DISP=(,CATLG), +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=9040), +// SPACE=(CYL,(1,1,20)),UNIT=SYSDA +// PEND +//* +//S1 EXEC CREATE +// diff --git a/bwbasic3.bat b/bwbasic3.bat new file mode 100644 index 0000000..c1bb8d5 --- /dev/null +++ b/bwbasic3.bat @@ -0,0 +1,4 @@ +del allzips.txt +mvsendec encb all.zip allzips.txt +m4 bwbasic3.m4 >bwbasic3.jcl +del allzips.txt diff --git a/bwbasic3.m4 b/bwbasic3.m4 new file mode 100644 index 0000000..905db3f --- /dev/null +++ b/bwbasic3.m4 @@ -0,0 +1,22 @@ +//BWBGEN JOB CLASS=C,REGION=0K +//* +//TRANSFER PROC BWBPREF='BWBASIC',PDPPREF='PDPCLIB' +//DELETE EXEC PGM=IEFBR14 +//DD1 DD DSN=&BWBPREF..ALLZIPS,DISP=(MOD,DELETE), +// UNIT=SYSDA,SPACE=(TRK,(0)) +//* +//MVSENDEC EXEC PGM=MVSENDEC,PARM='decb dd:input dd:output' +//STEPLIB DD DSN=&PDPPREF..LINKLIB,DISP=SHR +//INPUT DD DUMMY +//OUTPUT DD DSN=&BWBPREF..ALLZIPS,DISP=(,CATLG), +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120), +// SPACE=(CYL,(20,10),RLSE),UNIT=SYSDA +//SYSIN DD DUMMY +//SYSPRINT DD SYSOUT=*,DCB=(RECFM=F,LRECL=132,BLKSIZE=132) +//SYSTERM DD SYSOUT=*,DCB=(RECFM=F,LRECL=132,BLKSIZE=132) +// PEND +//* +//S1 EXEC TRANSFER +//MVSENDEC.INPUT DD * +undivert(allzips.txt)/* +// diff --git a/bwbasic4.jcl b/bwbasic4.jcl new file mode 100644 index 0000000..ca01b63 --- /dev/null +++ b/bwbasic4.jcl @@ -0,0 +1,32 @@ +//BWBGEN JOB CLASS=C,REGION=0K +//* +//CREATE EXEC PGM=IEFBR14 +//DD1 DD DSN=&&ZIPS,DISP=(,PASS), +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120), +// SPACE=(CYL,(20,10,20)),UNIT=SYSDA +//* +//UNZIP1 PROC PDPPREF='PDPCLIB',BWBPREF='BWBASIC' +//MINI EXEC PGM=MVSUNZIP,PARM='dd:input dd:output binary' +//STEPLIB DD DSN=&PDPPREF..LINKLIB,DISP=SHR +//INPUT DD DSN=&BWBPREF..ALLZIPS,DISP=SHR +//OUTPUT DD DSN=&&ZIPS,DISP=(OLD,PASS) +//SYSIN DD DUMMY +//SYSPRINT DD SYSOUT=*,DCB=(RECFM=F,LRECL=132,BLKSIZE=132) +//SYSTERM DD SYSOUT=*,DCB=(RECFM=F,LRECL=132,BLKSIZE=132) +// PEND +//* +//UNZIP2 PROC IN=,OUT=,PDPPREF='PDPCLIB',BWBPREF='BWBASIC' +//MINI EXEC PGM=MVSUNZIP,PARM='dd:input dd:output' +//STEPLIB DD DSN=&PDPPREF..LINKLIB,DISP=SHR +//INPUT DD DSN=&&ZIPS(&IN),DISP=(OLD,PASS) +//OUTPUT DD DSN=&BWBPREF..&OUT,DISP=SHR +//SYSIN DD DUMMY +//SYSPRINT DD SYSOUT=*,DCB=(RECFM=F,LRECL=132,BLKSIZE=132) +//SYSTERM DD SYSOUT=*,DCB=(RECFM=F,LRECL=132,BLKSIZE=132) +// PEND +//* +//S1 EXEC UNZIP1 +//S2 EXEC UNZIP2,IN='BWBSRC',OUT='SOURCE' +//S3 EXEC UNZIP2,IN='BWBINC',OUT='INCLUDE' +//S4 EXEC UNZIP2,IN='BWBJCL',OUT='JCL' +// diff --git a/bwbasic5.jcl b/bwbasic5.jcl new file mode 100644 index 0000000..0c82641 --- /dev/null +++ b/bwbasic5.jcl @@ -0,0 +1,64 @@ +//BWBGEN JOB CLASS=C,REGION=0K +//* +//BWBCMP PROC BWBPREF='BWBASIC',MEMBER='',GCCPREF='GCC', +// PDPPREF='PDPCLIB', +// COS1='-w -S -ansi', +// COS2='-o dd:out -' +//* +//COMP EXEC PGM=GCC, +// PARM='&COS1 &COS2' +//STEPLIB DD DSN=&GCCPREF..LINKLIB,DISP=SHR +//SYSIN DD DSN=&BWBPREF..SOURCE(&MEMBER),DISP=SHR +//INCLUDE DD DSN=&BWBPREF..INCLUDE,DISP=SHR,DCB=BLKSIZE=32720 +// DD DSN=&PDPPREF..INCLUDE,DISP=SHR +//SYSINCL DD DSN=&BWBPREF..INCLUDE,DISP=SHR,DCB=BLKSIZE=32720 +// DD DSN=&PDPPREF..INCLUDE,DISP=SHR +//OUT DD DSN=&&TEMP1,DISP=(,PASS),UNIT=SYSDA, +// DCB=(LRECL=80,BLKSIZE=9040,RECFM=FB), +// SPACE=(CYL,(10,10)) +//SYSPRINT DD SYSOUT=*,DCB=(LRECL=132,BLKSIZE=132) +//SYSTERM DD SYSOUT=*,DCB=(LRECL=132,BLKSIZE=132) +//* +//ASM EXEC PGM=ASMBLR, +// PARM='DECK,NOLIST', +// COND=(4,LT,COMP) +//SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR +// DD DSN=&PDPPREF..MACLIB,DISP=SHR +//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(2,1)) +//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(2,1)) +//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(2,1)) +//SYSPRINT DD SYSOUT=* +//SYSLIN DD DUMMY +//SYSGO DD DUMMY +//SYSPUNCH DD DSN=&&OBJSET,UNIT=SYSDA,SPACE=(80,(240,200)), +// DISP=(,PASS) +//SYSIN DD DSN=&&TEMP1,DISP=(OLD,DELETE) +//* +//LKED EXEC PGM=IEWL,PARM='NCAL', +// COND=((4,LT,COMP),(4,LT,ASM)) +//SYSLIN DD DSN=&&OBJSET,DISP=(OLD,DELETE) +//SYSLMOD DD DSN=&BWBPREF..NCALIB(&MEMBER),DISP=SHR +//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(2,1)) +//SYSPRINT DD SYSOUT=* +// PEND +//* +//BWBASIC EXEC BWBCMP,MEMBER=BWBASIC +//BWB@INT EXEC BWBCMP,MEMBER=BWB@INT +//BWB@TBL EXEC BWBCMP,MEMBER=BWB@TBL +//BWB@CMD EXEC BWBCMP,MEMBER=BWB@CMD +//BWB@PRN EXEC BWBCMP,MEMBER=BWB@PRN +//BWB@EXP EXEC BWBCMP,MEMBER=BWB@EXP +//BWB@VAR EXEC BWBCMP,MEMBER=BWB@VAR +//BWB@INP EXEC BWBCMP,MEMBER=BWB@INP +//BWB@FNC EXEC BWBCMP,MEMBER=BWB@FNC +//BWB@CND EXEC BWBCMP,MEMBER=BWB@CND +//BWB@OPS EXEC BWBCMP,MEMBER=BWB@OPS +//BWB@DIO EXEC BWBCMP,MEMBER=BWB@DIO +//BWB@STR EXEC BWBCMP,MEMBER=BWB@STR +//BWB@ELX EXEC BWBCMP,MEMBER=BWB@ELX +//BWB@MTH EXEC BWBCMP,MEMBER=BWB@MTH +//BWB@STC EXEC BWBCMP,MEMBER=BWB@STC +//BWX@TTY EXEC BWBCMP,MEMBER=BWX@TTY +//UNIXIO EXEC BWBCMP,MEMBER=UNIXIO +//* +// diff --git a/bwbasic6.jcl b/bwbasic6.jcl new file mode 100644 index 0000000..2708090 --- /dev/null +++ b/bwbasic6.jcl @@ -0,0 +1,33 @@ +//BWBGEN JOB CLASS=C,REGION=0K +//LINK PROC BWBPREF='BWBASIC',PDPPREF='PDPCLIB' +//LKED EXEC PGM=IEWL,PARM='MAP,LIST,SIZE=(999424,65536)' +//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(30,10)) +//SYSPRINT DD SYSOUT=* +//SYSLIB DD DSN=&PDPPREF..NCALIB,DISP=SHR,DCB=BLKSIZE=32760 +// DD DSN=&BWBPREF..NCALIB,DISP=SHR +//SYSLMOD DD DSN=&BWBPREF..LINKLIB,DISP=SHR +// PEND +//DOLINK EXEC LINK +//LKED.SYSLIN DD * + INCLUDE SYSLIB(BWBASIC) + INCLUDE SYSLIB(BWB@INT) + INCLUDE SYSLIB(BWB@TBL) + INCLUDE SYSLIB(BWB@CMD) + INCLUDE SYSLIB(BWB@PRN) + INCLUDE SYSLIB(BWB@EXP) + INCLUDE SYSLIB(BWB@VAR) + INCLUDE SYSLIB(BWB@INP) + INCLUDE SYSLIB(BWB@FNC) + INCLUDE SYSLIB(BWB@CND) + INCLUDE SYSLIB(BWB@OPS) + INCLUDE SYSLIB(BWB@DIO) + INCLUDE SYSLIB(BWB@STR) + INCLUDE SYSLIB(BWB@ELX) + INCLUDE SYSLIB(BWB@MTH) + INCLUDE SYSLIB(BWB@STC) + INCLUDE SYSLIB(BWX@TTY) + INCLUDE SYSLIB(UNIXIO) + ENTRY @@CRT0 + NAME BWBASIC(R) +/* +// diff --git a/bwbasic7.jcl b/bwbasic7.jcl new file mode 100644 index 0000000..7463d0e --- /dev/null +++ b/bwbasic7.jcl @@ -0,0 +1,23 @@ +//BWBGEN JOB CLASS=C,REGION=0K +//* +//RUNBW PROC BWBPREF='BWBASIC' +//BWBASIC EXEC PGM=BWBASIC +//STEPLIB DD DSN=&BWBPREF..LINKLIB,DISP=SHR +//SYSIN DD DUMMY +//SYSPRINT DD SYSOUT=*,DCB=(RECFM=F,LRECL=132,BLKSIZE=132) +//SYSTERM DD SYSOUT=*,DCB=(RECFM=F,LRECL=132,BLKSIZE=132) +// PEND +//* +//CLEAN PROC BWBPREF='BWBASIC' +//DELETE EXEC PGM=IEFBR14 +//DD1 DD DSN=&BWBPREF..ALLZIPS,DISP=(MOD,DELETE), +// UNIT=SYSDA,SPACE=(TRK,(0)) +// PEND +//* +//S1 EXEC RUNBW +//SYSIN DD * +print "hello, world" +quit +/* +//S2 EXEC CLEAN +// diff --git a/bwbmvs.txt b/bwbmvs.txt new file mode 100644 index 0000000..db2ce5c --- /dev/null +++ b/bwbmvs.txt @@ -0,0 +1,14 @@ +BWBASIC for MVS +--------------- + +To compile BWBASIC on MVS, run the following commands: + +zipall +bwbasic3 +subjobs + +after taking a look at what they do and seeing if they +are appropriate to your environment. + +Or just run "allbwb" which will do all of that. + diff --git a/bwx_iqc.c b/bwx_iqc.c index 0c26f11..4edb680 100644 --- a/bwx_iqc.c +++ b/bwx_iqc.c @@ -66,7 +66,7 @@ static int iqc_setpos( void ); ***************************************************************/ -void +int main( int argc, char **argv ) { #if MS_CMDS @@ -115,6 +115,7 @@ main( int argc, char **argv ) bwb_mainloop(); } + return (0); } /*************************************************************** diff --git a/bwx_ncu.c b/bwx_ncu.c index 2b68ef0..45bda3b 100644 --- a/bwx_ncu.c +++ b/bwx_ncu.c @@ -111,6 +111,7 @@ main( int argc, char **argv ) { bwb_mainloop(); } + return (0); } /*************************************************************** diff --git a/bwx_tty.c b/bwx_tty.c index 658eaec..9fe20d4 100644 --- a/bwx_tty.c +++ b/bwx_tty.c @@ -66,7 +66,7 @@ extern jmp_buf mark; ***************************************************************/ #if ANSI_C -void +int main( int argc, char **argv ) #else main( argc, argv ) @@ -93,6 +93,7 @@ main( argc, argv ) bwx_terminate(); /* allow ^D (Unix) exit with grace */ + return (0); } /*************************************************************** diff --git a/compile.bat b/compile.bat new file mode 100644 index 0000000..3f79b4c --- /dev/null +++ b/compile.bat @@ -0,0 +1,25 @@ +del bwbasic.exe +del *.o +del *.obj + +call stdcomp bwbasic.c +call stdcomp bwb_int.c +call stdcomp bwb_tbl.c +call stdcomp bwb_cmd.c +call stdcomp bwb_prn.c +call stdcomp bwb_exp.c +call stdcomp bwb_var.c +call stdcomp bwb_inp.c +call stdcomp bwb_fnc.c +call stdcomp bwb_cnd.c +call stdcomp bwb_ops.c +call stdcomp bwb_dio.c +call stdcomp bwb_str.c +call stdcomp bwb_elx.c +call stdcomp bwb_mth.c +call stdcomp bwb_stc.c +call stdcomp bwx_tty.c +call stdcomp unixio.c + +gcc -o bwbasic.exe *.o +rem bcc32 -ebwbasic.exe *.obj diff --git a/renum.c b/renum.c index 227fa8c..4b87daf 100644 --- a/renum.c +++ b/renum.c @@ -467,6 +467,7 @@ main(argc, argv) fclose(fdout); sprintf(tempstr, "mv editfl %s\0", f9str); system(tempstr); + return (0); } diff --git a/stdcomp.bat b/stdcomp.bat new file mode 100644 index 0000000..ceb1ea0 --- /dev/null +++ b/stdcomp.bat @@ -0,0 +1,3 @@ +rem gcc -w -c -ansi -I . %1 %2 %3 %4 %5 %6 %7 %8 %9 +rem bcc32 -w- -A -c -I. %1 %2 %3 %4 %5 %6 %7 %8 %9 +gccmvs -w -S -ansi -nostdinc -I ../pdos/pdpclib -I . %1 %2 %3 %4 %5 %6 %7 %8 %9 diff --git a/subjobs.bat b/subjobs.bat new file mode 100644 index 0000000..5b874f2 --- /dev/null +++ b/subjobs.bat @@ -0,0 +1,9 @@ +del alljcl.jcl +type bwbasic1.jcl >>alljcl.jcl +type bwbasic2.jcl >>alljcl.jcl +type bwbasic3.jcl >>alljcl.jcl +type bwbasic4.jcl >>alljcl.jcl +type bwbasic5.jcl >>alljcl.jcl +type bwbasic6.jcl >>alljcl.jcl +type bwbasic7.jcl >>alljcl.jcl +call runmvs alljcl.jcl alljcl.txt diff --git a/unixio.c b/unixio.c new file mode 100644 index 0000000..3040250 --- /dev/null +++ b/unixio.c @@ -0,0 +1,170 @@ +/*********************************************************************/ +/* */ +/* This Program Written By Paul Edwards. */ +/* Released to the public domain. */ +/* */ +/*********************************************************************/ +/*********************************************************************/ +/* */ +/* unixio - Unix I/O functions written in terms of standard C */ +/* functions. */ +/* */ +/*********************************************************************/ + +#include + +#ifdef fileno +#undef fileno +#endif + +#include "unixio.h" + +static FILE *files[FOPEN_MAX]; +/*char *environ[] = { NULL };*/ + +int open(const char *fnm, int mode, ...) +{ + int x; + char *modestr; + + for (x = 3; x < FOPEN_MAX; x++) + { + if (files[x] == NULL) + { + break; + } + } + if (x == FOPEN_MAX) + { + return (-1); + } + if (mode == O_RDONLY) + { + modestr = "r"; + } + else if (mode == O_WRONLY) + { + modestr = "w"; + } + else if (mode == O_RDWR) + { + modestr = "r+"; + } + files[x] = fopen(fnm, modestr); + if (files[x] == NULL) + { + return (-1); + } + return (x); +} + +int read(int fno, void *buf, size_t bytes) +{ + size_t rb; + + if (fno < 3) + { + rb = fread(buf, 1, bytes, stdin); + } + else + { + rb = fread(buf, 1, bytes, files[fno]); + } + return ((int)rb); +} + +int write(int fno, const void *buf, size_t bytes) +{ + size_t wb; + + if (fno == 1) + { + fwrite(buf, 1, bytes, stdout); + } + else if (fno == 2) + { + fwrite(buf, 1, bytes, stderr); + } + else if (fno > 2) + { + wb = fwrite(buf, 1, bytes, files[fno]); + } + return ((int)wb); +} + +int close(int fno) +{ + if (fno >= 3) + { + fclose(files[fno]); + files[fno] = NULL; + } + return (0); +} + +char *getcwd(char *buf, int len) +{ + if (len != 0) + { + *buf = '\0'; + } + return (buf); +} + +void unlink(char *f) +{ + remove(f); + return; +} + +int stat(char *f, struct stat *buf) +{ + memset(buf, '\0', sizeof *buf); + return (0); +} + +int fileno(FILE *fp) +{ + return (0); +} + +int access(char *f, int n) +{ + return (1); +} + +int fstat(int fh, struct stat *buf) +{ + memset(buf, '\0', sizeof *buf); + return (0); +} + +int pwait(int a, int *b, int c) +{ + return (0); +} + +int putenv(char *x) +{ + return (0); +} + +char *mktemp(char *s) +{ + return (tmpnam(s)); +} + +int chdir(char *path) +{ + return (0); +} + +int rmdir(char *path) +{ + return (0); +} + +int mkdir(char *path, int permissions) +{ + return (0); +} diff --git a/unixio.h b/unixio.h new file mode 100644 index 0000000..bc0a86c --- /dev/null +++ b/unixio.h @@ -0,0 +1,41 @@ +/* written by Paul Edwards */ +/* released to the public domain */ + +#ifndef UNIXIO_INCLUDED +#define UNIXIO_INCLUDED + +#include + +#define S_IFBLK 0x3000 +#define S_IFDIR 0x4000 +#define S_IFREG 0x8000 +#define S_IFMT 0xf000 + +#ifndef ENOENT +#define ENOENT 2002 +#endif +#ifndef ENOTDIR +#define ENOTDIR 2045 +#endif + +#define O_RDONLY 1 +#define O_WRONLY 2 +#define O_RDWR 4 +#define O_CREAT 0x100 +#define O_TRUNC 0x200 + +struct stat { + long st_size; + long st_mode; + long st_ino; + long st_dev; + long st_mtime; +}; + +int open(const char *fnm, int mode, ...); +int read(int fno, void *buf, size_t bytes); +int write(int fno, const void *buf, size_t bytes); +int close(int fno); +char *mktemp(char *s); + +#endif diff --git a/zipall.bat b/zipall.bat new file mode 100644 index 0000000..784199c --- /dev/null +++ b/zipall.bat @@ -0,0 +1,11 @@ +del bwbinc.zip +del bwbsrc.zip +del bwbjcl.zip +del all.zip +del bwbasic3.jcl +del alljcl.jcl +del alljcl.txt +zip -0 -X -ll -j bwbsrc.zip *.c +zip -0 -X -ll -j bwbinc.zip *.h +zip -0 -X -ll -j bwbjcl.zip *.jcl README +zip -0 -X all *.zip