From ac9664e312b008cb683eebe57fe43353b4a65160 Mon Sep 17 00:00:00 2001 From: Lynn Stricklan Date: Mon, 4 Jan 2021 20:08:02 -0700 Subject: [PATCH] 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. --- internal/c/libqb.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/internal/c/libqb.cpp b/internal/c/libqb.cpp index da64aff9e..c7b70af91 100644 --- a/internal/c/libqb.cpp +++ b/internal/c/libqb.cpp @@ -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 f->record_length=128; 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 @@ -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 //the current line or the next line. 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 - if (tab_spc_cr_size==2){ + if (cr_size==2){ //print to file div=1; 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 (gfs_fileno_valid(i)!=1) goto invalid_file;//Bad file name or number 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 + cr_size = 1; + } else { + cursor=gfs_file[i].column; + } invalid_file:; - }else{ + } + if (cr_size == 1) { //print to surface if (write_page->text){ 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; if (cursor>pos){ cr=1; - size=tab_spc_cr_size; + size=cr_size; spaces=pos/div; if (pos%div) spaces++; spaces--;//don't put a space on the dest position size+=spaces; @@ -15851,8 +15859,8 @@ void sub_put2(int32 i,int64 offset,void *element,int32 passed){ //build custom string tqbs=qbs_new(size,1); if (cr){ - tqbs->chr[0]=13; if (tab_spc_cr_size==2) tqbs->chr[1]=10; - memset(&tqbs->chr[tab_spc_cr_size],32,spaces); + tqbs->chr[0]=13; if (cr_size==2) tqbs->chr[1]=10; + memset(&tqbs->chr[cr_size],32,spaces); }else{ memset(tqbs->chr,32,spaces); }