mirror of
https://github.com/QB64Official/qb64.git
synced 2024-07-04 23:30:24 +00:00
Update libqb.cpp
2 changes here: line 13062: When opening a file for random access, if the LEN is not supplied, it defaults the length correctly, but does not allocate the buffer correctly. The code should reference the record_length in the file struct. Changes in lines 15798-15853: When printing text to the screen, carriage returns in the text are ignored. In sub_file_print, the code for printing to the screen is modified to honor carriage returns.
This commit is contained in:
parent
21b32a7125
commit
ac9664e312
|
@ -13037,7 +13037,7 @@ void sub_open(qbs *name,int32 type,int32 access,int32 sharing,int32 i,int64 reco
|
||||||
if (type==1){//set record length
|
if (type==1){//set record length
|
||||||
f->record_length=128;
|
f->record_length=128;
|
||||||
if (passed) if (record_length!=-1) f->record_length=record_length;
|
if (passed) if (record_length!=-1) f->record_length=record_length;
|
||||||
f->field_buffer=(uint8*)calloc(record_length,1);
|
f->field_buffer=(uint8*)calloc(f->record_length,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type==5){//seek eof
|
if (type==5){//seek eof
|
||||||
|
@ -15796,8 +15796,11 @@ void sub_put2(int32 i,int64 offset,void *element,int32 passed){
|
||||||
//returns a string to advance to the horizontal position "pos" on either
|
//returns a string to advance to the horizontal position "pos" on either
|
||||||
//the current line or the next line.
|
//the current line or the next line.
|
||||||
static int32 w,div,cursor;
|
static int32 w,div,cursor;
|
||||||
|
|
||||||
|
static int32 cr_size; // a local in case file is SCRN
|
||||||
|
cr_size = tab_spc_cr_size; // init to caller's value
|
||||||
//calculate width in spaces & current position
|
//calculate width in spaces & current position
|
||||||
if (tab_spc_cr_size==2){
|
if (cr_size==2){
|
||||||
//print to file
|
//print to file
|
||||||
div=1;
|
div=1;
|
||||||
w=2147483647;
|
w=2147483647;
|
||||||
|
@ -15808,9 +15811,14 @@ void sub_put2(int32 i,int64 offset,void *element,int32 passed){
|
||||||
if (i<0) goto invalid_file;//TCP/IP unsupported
|
if (i<0) goto invalid_file;//TCP/IP unsupported
|
||||||
if (gfs_fileno_valid(i)!=1) goto invalid_file;//Bad file name or number
|
if (gfs_fileno_valid(i)!=1) goto invalid_file;//Bad file name or number
|
||||||
i=gfs_fileno[i];//convert fileno to gfs index
|
i=gfs_fileno[i];//convert fileno to gfs index
|
||||||
cursor=gfs_file[i].column;
|
if (gfs_file[i].scrn == 1) { // going to screen, change the cr size
|
||||||
invalid_file:;
|
cr_size = 1;
|
||||||
} else {
|
} else {
|
||||||
|
cursor=gfs_file[i].column;
|
||||||
|
}
|
||||||
|
invalid_file:;
|
||||||
|
}
|
||||||
|
if (cr_size == 1) {
|
||||||
//print to surface
|
//print to surface
|
||||||
if (write_page->text){
|
if (write_page->text){
|
||||||
w=write_page->width;
|
w=write_page->width;
|
||||||
|
@ -15840,7 +15848,7 @@ void sub_put2(int32 i,int64 offset,void *element,int32 passed){
|
||||||
size=0; spaces=0; cr=0;
|
size=0; spaces=0; cr=0;
|
||||||
if (cursor>pos){
|
if (cursor>pos){
|
||||||
cr=1;
|
cr=1;
|
||||||
size=tab_spc_cr_size;
|
size=cr_size;
|
||||||
spaces=pos/div; if (pos%div) spaces++;
|
spaces=pos/div; if (pos%div) spaces++;
|
||||||
spaces--;//don't put a space on the dest position
|
spaces--;//don't put a space on the dest position
|
||||||
size+=spaces;
|
size+=spaces;
|
||||||
|
@ -15851,8 +15859,8 @@ void sub_put2(int32 i,int64 offset,void *element,int32 passed){
|
||||||
//build custom string
|
//build custom string
|
||||||
tqbs=qbs_new(size,1);
|
tqbs=qbs_new(size,1);
|
||||||
if (cr){
|
if (cr){
|
||||||
tqbs->chr[0]=13; if (tab_spc_cr_size==2) tqbs->chr[1]=10;
|
tqbs->chr[0]=13; if (cr_size==2) tqbs->chr[1]=10;
|
||||||
memset(&tqbs->chr[tab_spc_cr_size],32,spaces);
|
memset(&tqbs->chr[cr_size],32,spaces);
|
||||||
}else{
|
}else{
|
||||||
memset(tqbs->chr,32,spaces);
|
memset(tqbs->chr,32,spaces);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue