* Minor bug fixes, cosmetic improvements and portability improvements * Added support for compiling on MVS (IBM mainframe)tags/v2.30
@@ -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 |
@@ -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 */ | |||
@@ -39,7 +39,7 @@ | |||
#include "bwbasic.h" | |||
#include "bwb_mes.h" | |||
#if UNIX_CMDS | |||
#if HAVE_SYSSTAT | |||
#include <sys/stat.h> | |||
#endif | |||
@@ -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" ); | |||
@@ -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 <sys/types.h> header */ | |||
#endif | |||
#ifdef __STDC__ | |||
#define HAVE_SYSSTAT TRUE | |||
#define HAVE_SYSSTAT FALSE | |||
#else | |||
#define HAVE_SYSSTAT TRUE /* Compiler has <sys/stat.h> 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 */ | |||
@@ -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 | |||
/* | |||
// |
@@ -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 | |||
// |
@@ -0,0 +1,4 @@ | |||
del allzips.txt | |||
mvsendec encb all.zip allzips.txt | |||
m4 bwbasic3.m4 >bwbasic3.jcl | |||
del allzips.txt |
@@ -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)/* | |||
// |
@@ -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' | |||
// |
@@ -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 | |||
//* | |||
// |
@@ -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) | |||
/* | |||
// |
@@ -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 | |||
// |
@@ -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. | |||
@@ -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); | |||
} | |||
/*************************************************************** | |||
@@ -111,6 +111,7 @@ main( int argc, char **argv ) | |||
{ | |||
bwb_mainloop(); | |||
} | |||
return (0); | |||
} | |||
/*************************************************************** | |||
@@ -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); | |||
} | |||
/*************************************************************** | |||
@@ -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 |
@@ -467,6 +467,7 @@ main(argc, argv) | |||
fclose(fdout); | |||
sprintf(tempstr, "mv editfl %s\0", f9str); | |||
system(tempstr); | |||
return (0); | |||
} | |||
@@ -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 |
@@ -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 |
@@ -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 <stdio.h> | |||
#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); | |||
} |
@@ -0,0 +1,41 @@ | |||
/* written by Paul Edwards */ | |||
/* released to the public domain */ | |||
#ifndef UNIXIO_INCLUDED | |||
#define UNIXIO_INCLUDED | |||
#include <stddef.h> | |||
#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 |
@@ -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 |