📄 mal_io.c
字号:
#line 208 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#include "mal_config.h"#include "mal_io.h"strio_stdin(bstream **ret){ *ret = (bstream*)GDKin; return MAL_SUCCEED;}strio_stdout(stream **ret){ *ret = GDKout; return MAL_SUCCEED;}strio_stderr(stream **ret){ *ret = GDKerr; return MAL_SUCCEED;}strIOprintBoth(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int indx, str hd, str tl, int nobat){ int tpe = getArgType(mb, pci, indx); ptr val = (ptr) getArgReference(stk, pci, indx); stream *fp = GDKout; (void) mb; if (tpe == TYPE_any) tpe = stk->stk[pci->argv[indx]].vtype; if (val == NULL || tpe == TYPE_void) { if (hd) stream_printf(fp, "%s", hd); stream_printf(fp, "nil"); if (tl) stream_printf(fp, "%s", tl); return MAL_SUCCEED; } if (isaBatType(tpe) ) { BAT *b; if (*(int *) val == 0) { if (hd) stream_printf(fp, "%s", hd); stream_printf(fp,"nil"); if (tl) stream_printf(fp, "%s", tl); return MAL_SUCCEED; } b = BATdescriptor(*(int *) val); if (b == NULL) { throw(MAL, "io.print", "Could not access descriptor"); } if (nobat) { if (hd) stream_printf(fp, "%s", hd); stream_printf(fp, "<%s>", BBPname(b->batCacheid)); if (tl) stream_printf(fp, "%s", tl); } else BATmultiprintf(GDKout, 2, &b, TRUE, 0, TRUE); BBPunfix(b->batCacheid); return MAL_SUCCEED; } if (hd) stream_printf(fp, "%s", hd); if (ATOMvarsized(tpe)) ATOMprint(tpe, *(str *) val, fp); else ATOMprint(tpe, val, fp); if (tl) stream_printf(fp, "%s", tl); return MAL_SUCCEED;}strIOprint_val(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){ int i; if (p->argc == 2) IOprintBoth(mb, stk, p, 1, "[ ", " ]\n", 0); else { IOprintBoth(mb, stk, p, 1, "[ ", 0, 1); for (i = 2; i < p->argc - 1; i++) IOprintBoth(mb, stk, p, i, ", ", 0, 1); IOprintBoth(mb, stk, p, i, ", ", "]\n", 1); } return MAL_SUCCEED;}strIOprint_tables(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){ IOtableAll(GDKout, mb, stk, p, 1, 0, FALSE, TRUE); return MAL_SUCCEED;}strIOprompt_val(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ return IOprintBoth(mb, stk, pci, 1, 0, 0, 1);}strIOprint_ft(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ int tpe = getArgType(mb, pci, 1); ptr val = (ptr) getArgReference(stk, pci, 1); if (val == NULL) { ATOMprint(TYPE_str, "nil", GDKout); return MAL_SUCCEED; } if (tpe == TYPE_str) ATOMprint(TYPE_str, *(str *) val, GDKout); else ATOMprint(tpe, val, GDKout); return MAL_SUCCEED;}#line 341 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"strIOtableAll(stream *f, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int i, int order, int printhead, int printorder){ BAT *piv[MAXPARAMS], *b; int nbats = 0; int tpe, k = i; ptr val; for (; i < pci->argc; i++) { tpe = getArgType(mb, pci, i); val = (ptr) getArgReference(stk, pci, i); if (!isaBatType(tpe)) throw(MAL, "io.table", "BAT expected"); b = BATdescriptor(*(int *) val); if (b == NULL) { for (k = 0; k < nbats; k++) BBPunfix(piv[k]->batCacheid); throw(MAL, "io.table", "Could not access descriptor"); } piv[nbats++] = b; } /*if(printhead) */ nbats++; BATmultiprintf(f, nbats, piv, printhead, order, printorder); for (k = 0; k < nbats - 1; k++) BBPunfix(piv[k]->batCacheid); return MAL_SUCCEED;}strIOotable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ int order; order = *(int *) getArgReference(stk, pci, 1); return IOtableAll(GDKout, mb, stk, pci, 2, order, TRUE, TRUE);}strIOtable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ return IOtableAll(GDKout, mb, stk, pci, 1, 0, TRUE, TRUE);}strIOfotable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ stream *fp; int order; fp = *(stream **) getArgReference(stk, pci, 1); order = *(int *) getArgReference(stk, pci, 2); (void) order; /* fool compiler */ return IOtableAll(fp, mb, stk, pci, 3, 1, TRUE, TRUE);}strIOftable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ stream *fp; fp = *(stream **) getArgReference(stk, pci, 1); return IOtableAll(fp, mb, stk, pci, 2, 0, TRUE, TRUE);}strIOttable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ return IOtableAll(GDKout, mb, stk, pci, 1, 0, FALSE, TRUE);}strIOtotable(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ int order; order = *(int *) getArgReference(stk, pci, 1); (void) order; /* fool compiler */ return IOtableAll(GDKout, mb, stk, pci, 2, order, FALSE, TRUE);}#line 439 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"strIOprint_str(int *ret, str *s){ stream *fd = GDKout; str c; (void) ret; if (strNil(*s)) stream_printf(fd, "nil"); else { for (c = *s; *c; c++) { if (*c == '\\') { c++; #line 431 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" switch(*c){ case 'n': stream_printf(fd,"\n");break; case 't': stream_printf(fd,"\t");break; case 'r': stream_printf(fd,"\r");break; case '\\': stream_printf(fd,"\\");break; default : stream_printf(fd,"\\");stream_printf(fd,"%c",*c); }#line 452 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" } else stream_printf(fd, "%c", *c); } } return MAL_SUCCEED;}intformatMarker(str format){ int i = 0; str t = format; while ((t = strchr(t, '%')) != NULL) { t++; i++; } return i;}#line 521 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#line 502 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"io_export str IOprint_formatted_chr(int *ret, ptr fmt, chr *s);str IOprint_formatted_chr(int *ret, ptr fmt, chr *s){ stream *fd = MCgetClient()->fdout; char *format; str c; (void) ret; /* TODO: check format properly !!! including sizes */ format= *(str *)fmt; if( format== NULL || format== str_nil) throw(MAL, "io.print", "Format missing"); if( formatMarker(format)!=1) throw(MAL, "io.print", "Too many %%"); if( *s == chr_nil) return IOprint_formatted_nil(fd,* (str*) fmt, 'c'); #line 477 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" for(c= format;*c; c++){ if( *c=='\\'){ c++; #line 431 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" switch(*c){ case 'n': stream_printf(fd,"\n");break; case 't': stream_printf(fd,"\t");break; case 'r': stream_printf(fd,"\r");break; case '\\': stream_printf(fd,"\\");break; default : stream_printf(fd,"\\");stream_printf(fd,"%c",*c); }#line 480 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" } else if( *c== '%'){ char newformat[1024]; int i=0; if(*(c+1)=='%'){ stream_printf(fd,"%c",*c); c++; continue; } while(*c != 'c' && *c && i<1024) newformat[i++]= *c++; newformat[i++]='c'; newformat[i]=0; if(*c!= 'c') throw(MAL, "io.print", "Format limitation"); else stream_printf(fd,newformat,*s); } else stream_printf(fd,"%c",*c); }#line 517 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" return MAL_SUCCEED;}#line 521 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#line 502 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"io_export str IOprint_formatted_sht(int *ret, ptr fmt, sht *s);str IOprint_formatted_sht(int *ret, ptr fmt, sht *s){ stream *fd = MCgetClient()->fdout; char *format; str c; (void) ret; /* TODO: check format properly !!! including sizes */ format= *(str *)fmt; if( format== NULL || format== str_nil) throw(MAL, "io.print", "Format missing"); if( formatMarker(format)!=1) throw(MAL, "io.print", "Too many %%"); if( *s == sht_nil) return IOprint_formatted_nil(fd,* (str*) fmt, 'd'); #line 477 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" for(c= format;*c; c++){ if( *c=='\\'){ c++; #line 431 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" switch(*c){ case 'n': stream_printf(fd,"\n");break; case 't': stream_printf(fd,"\t");break; case 'r': stream_printf(fd,"\r");break; case '\\': stream_printf(fd,"\\");break; default : stream_printf(fd,"\\");stream_printf(fd,"%c",*c); }#line 480 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" } else if( *c== '%'){ char newformat[1024]; int i=0; if(*(c+1)=='%'){ stream_printf(fd,"%c",*c); c++; continue; } while(*c != 'd' && *c && i<1024) newformat[i++]= *c++; newformat[i++]='d'; newformat[i]=0; if(*c!= 'd') throw(MAL, "io.print", "Format limitation"); else stream_printf(fd,newformat,*s); } else stream_printf(fd,"%c",*c); }#line 517 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" return MAL_SUCCEED;}#line 522 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#line 502 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"io_export str IOprint_formatted_int(int *ret, ptr fmt, int *s);str IOprint_formatted_int(int *ret, ptr fmt, int *s){ stream *fd = MCgetClient()->fdout; char *format; str c; (void) ret; /* TODO: check format properly !!! including sizes */ format= *(str *)fmt; if( format== NULL || format== str_nil) throw(MAL, "io.print", "Format missing"); if( formatMarker(format)!=1) throw(MAL, "io.print", "Too many %%"); if( *s == int_nil) return IOprint_formatted_nil(fd,* (str*) fmt, 'd'); #line 477 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" for(c= format;*c; c++){ if( *c=='\\'){ c++; #line 431 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" switch(*c){ case 'n': stream_printf(fd,"\n");break; case 't': stream_printf(fd,"\t");break; case 'r': stream_printf(fd,"\r");break; case '\\': stream_printf(fd,"\\");break; default : stream_printf(fd,"\\");stream_printf(fd,"%c",*c); }#line 480 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" } else if( *c== '%'){ char newformat[1024]; int i=0; if(*(c+1)=='%'){ stream_printf(fd,"%c",*c); c++; continue; } while(*c != 'd' && *c && i<1024) newformat[i++]= *c++; newformat[i++]='d'; newformat[i]=0; if(*c!= 'd') throw(MAL, "io.print", "Format limitation"); else stream_printf(fd,newformat,*s); } else stream_printf(fd,"%c",*c); }#line 517 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" return MAL_SUCCEED;}#line 523 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#line 502 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"io_export str IOprint_formatted_flt(int *ret, ptr fmt, flt *s);str IOprint_formatted_flt(int *ret, ptr fmt, flt *s){ stream *fd = MCgetClient()->fdout; char *format; str c; (void) ret; /* TODO: check format properly !!! including sizes */ format= *(str *)fmt; if( format== NULL || format== str_nil) throw(MAL, "io.print", "Format missing"); if( formatMarker(format)!=1) throw(MAL, "io.print", "Too many %%"); if( *s == flt_nil) return IOprint_formatted_nil(fd,* (str*) fmt, 'f'); #line 477 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" for(c= format;*c; c++){ if( *c=='\\'){ c++; #line 431 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" switch(*c){ case 'n': stream_printf(fd,"\n");break; case 't': stream_printf(fd,"\t");break; case 'r': stream_printf(fd,"\r");break; case '\\': stream_printf(fd,"\\");break; default : stream_printf(fd,"\\");stream_printf(fd,"%c",*c); }#line 480 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" } else if( *c== '%'){ char newformat[1024]; int i=0; if(*(c+1)=='%'){ stream_printf(fd,"%c",*c); c++; continue; } while(*c != 'f' && *c && i<1024) newformat[i++]= *c++; newformat[i++]='f'; newformat[i]=0; if(*c!= 'f') throw(MAL, "io.print", "Format limitation"); else stream_printf(fd,newformat,*s); } else stream_printf(fd,"%c",*c); }#line 517 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx" return MAL_SUCCEED;}#line 524 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"#line 502 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"io_export str IOprint_formatted_dbl(int *ret, ptr fmt, dbl *s);str IOprint_formatted_dbl(int *ret, ptr fmt, dbl *s){ stream *fd = MCgetClient()->fdout; char *format; str c; (void) ret; /* TODO: check format properly !!! including sizes */ format= *(str *)fmt; if( format== NULL || format== str_nil) throw(MAL, "io.print", "Format missing"); if( formatMarker(format)!=1) throw(MAL, "io.print", "Too many %%"); if( *s == dbl_nil) return IOprint_formatted_nil(fd,* (str*) fmt, 'f'); #line 477 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mal_io.mx"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -