From d79fbd4064855ae997d3ace01ee6ef102c408370 Mon Sep 17 00:00:00 2001 From: Jon Foster Date: Sun, 26 Sep 2021 22:35:45 -0700 Subject: [PATCH] v2.30 * Minor bug fixes, cosmetic improvements and portability improvements * Added support for compiling on MVS (IBM mainframe) --- allbwb.bat | 11 ++++ bwb_dio.c | 2 +- bwb_fnc.c | 2 +- bwbasic.c | 3 +- bwbasic.h | 33 ++++++++++-- bwbasic1.jcl | 9 ++++ bwbasic2.jcl | 35 ++++++++++++ bwbasic3.bat | 4 ++ bwbasic3.m4 | 22 ++++++++ bwbasic4.jcl | 32 +++++++++++ bwbasic5.jcl | 64 ++++++++++++++++++++++ bwbasic6.jcl | 33 ++++++++++++ bwbasic7.jcl | 23 ++++++++ bwbmvs.txt | 14 +++++ bwx_iqc.c | 3 +- bwx_ncu.c | 1 + bwx_tty.c | 3 +- compile.bat | 25 +++++++++ renum.c | 1 + stdcomp.bat | 3 ++ subjobs.bat | 9 ++++ unixio.c | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ unixio.h | 41 ++++++++++++++ zipall.bat | 11 ++++ 24 files changed, 545 insertions(+), 9 deletions(-) create mode 100644 allbwb.bat create mode 100644 bwbasic1.jcl create mode 100644 bwbasic2.jcl create mode 100644 bwbasic3.bat create mode 100644 bwbasic3.m4 create mode 100644 bwbasic4.jcl create mode 100644 bwbasic5.jcl create mode 100644 bwbasic6.jcl create mode 100644 bwbasic7.jcl create mode 100644 bwbmvs.txt create mode 100644 compile.bat create mode 100644 stdcomp.bat create mode 100644 subjobs.bat create mode 100644 unixio.c create mode 100644 unixio.h create mode 100644 zipall.bat 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