66 lines
2.2 KiB
Plaintext
66 lines
2.2 KiB
Plaintext
1. check AutoFooter if all files are there, add new files when necessary
|
|
|
|
2. generate flex.c and bison.c by typing:
|
|
flex -i -I -L -s -t yabasic.flex >flex.c
|
|
perl -i -n -e 'if (!/^\#include\s+<unistd.h>\s+$$/) {print if $$i;$$i++}' flex.c
|
|
bison -d -l -t -v --output-file bison.c yabasic.bison
|
|
|
|
3. edit flex.c as follows:
|
|
- add the headers (after #include<stdio.h>) and the static declaration
|
|
#include <zlib.h>
|
|
#include "program.h"
|
|
static int isparsed = 0;
|
|
- replace the default input buffer size
|
|
#define YY_BUF_SIZE 16384
|
|
with
|
|
#define YY_BUF_SIZE PROGLEN
|
|
- search for
|
|
#define YY_INPUT(buf,result,max_size) \
|
|
replace the last lines of this define
|
|
else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
|
|
&& ferror( yyin ) ) \
|
|
YY_FATAL_ERROR( "input in flex scanner failed" );
|
|
with
|
|
else if ( ((result = zread( buf, 1, max_size, yyin )) == 0) && !ferror( yyin ) ) \
|
|
YY_FATAL_ERROR( "input in flex scanner failed" );
|
|
- add to the function
|
|
static int yy_get_next_buffer()
|
|
after
|
|
int ret_val;
|
|
the following line
|
|
if(isparsed) return EOB_ACT_END_OF_FILE;
|
|
- add the function zread at the end of flex.c:
|
|
int zread(char* dest, size_t memb_size, size_t num_memb, FILE *file)
|
|
{
|
|
long destlen = PROGLEN;
|
|
if(isparsed==1)
|
|
return 0;
|
|
isparsed = 1;
|
|
uncompress(dest,&destlen,myProg,sizeof(myProg));
|
|
return destlen;
|
|
}
|
|
- NOTE: you only have to go through this process when new commands have been added to
|
|
yabasic.flex. Otherwise you can just take the modified flex.c from the last BuildFactory.
|
|
|
|
4. edit main.c as follows:
|
|
- search for the function
|
|
int isbound(void)
|
|
delete the whole function and replace it with:
|
|
int isbound(void)
|
|
{
|
|
FILE *interpreter;
|
|
if (!interpreter_path || !interpreter_path[0]) {
|
|
error(FATAL,"interpreter_path is not set !");
|
|
return 0;
|
|
}
|
|
if (!(interpreter=fopen(interpreter_path,"r"))) {
|
|
sprintf(string,"Couldn't open '%s' to check, if it is bound: %s",interpreter_path,my_strerror(errno));
|
|
error(WARNING,string);
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|