diff --git a/manifest b/manifest index 044b5d2058..6cce59265a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C :-)\s(CVS\s29) -D 2000-05-31T22:58:39 +C :-)\s(CVS\s30) +D 2000-05-31T23:33:17 F COPYRIGHT 74a8a6531a42e124df07ab5599aad63870fa0bd4 F Makefile.in 7ac2fef265940d93a544cb454efa836451559a71 F README 6b5960603c7f8bf42fc022b4b6436f242f238dbb @@ -15,7 +15,7 @@ F src/insert.c bd34716d0bba5561f6b55101adbf16fa75f872e8 F src/main.c a14b1e8837836e59eb4855bf22879c7139892276 F src/parse.y 16322c46ec117082ef745715f7a4761f2491a0b2 F src/select.c 25cada7cb2b0b4973b3e17c81ba1b1c887829f71 -F src/shell.c c5752d32cdeaa7d548d4f91177b697b023a00381 +F src/shell.c 9a42923e9c8ec1654dd1ef1aa113eca26dcf30db F src/sqlite.h 2397c17a8f4ca90c09acab0100dc7e2f8f441b69 F src/sqliteInt.h a3c662ff65826f3b51d4aa946b4201e864c4587c F src/tclsqlite.c 9efd29f79ded6a900aa3d142169c8bfe03b7affd @@ -45,7 +45,7 @@ F www/c_interface.tcl f875864edf7974157d1c257ca08de854660882a5 F www/changes.tcl 37f4906f0b03f2160d2b2e4ed3cedb0b91d253cb F www/index.tcl a94e31dc690f07b0dfdb82c5ab6315e4840a336d F www/sqlite.tcl 7deb564df188ad4523adecfe2365de6d09f6dfd9 -P 57c5add197c12c919e2556b5ac421803398f2c1b -R f5b36e27fa2bef5aa09105fe5f4f6aab +P 09054df318240f2f2b365f7b24655473c1ab6655 +R fc82166dc2a47a40a12fe4f5158b594e U drh -Z 8e27228f5e9143eb165e86ff6773e689 +Z 56c060b93461ac99c13a7f384be1c3c5 diff --git a/manifest.uuid b/manifest.uuid index 8c1fc379dc..fe16bb7615 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -09054df318240f2f2b365f7b24655473c1ab6655 \ No newline at end of file +9b8458bbcef19882f14f0e96575fc3f0a86df97a \ No newline at end of file diff --git a/src/shell.c b/src/shell.c index 4cc8a3032d..86202d1d24 100644 --- a/src/shell.c +++ b/src/shell.c @@ -24,7 +24,7 @@ ** This file contains code to implement the "sqlite" command line ** utility for accessing SQLite databases. ** -** $Id: shell.c,v 1.4 2000/05/31 02:27:49 drh Exp $ +** $Id: shell.c,v 1.5 2000/05/31 23:33:17 drh Exp $ */ #include #include @@ -137,6 +137,7 @@ struct callback_data { #define MODE_Line 0 /* One field per line. Blank line between records */ #define MODE_Column 1 /* One record per line in neat columns */ #define MODE_List 2 /* One record per line with a separator */ +#define MODE_Html 3 /* Generate an XHTML table */ /* ** Number of elements in an array @@ -176,7 +177,8 @@ static int callback(void *pArg, int nArg, char **azArg, char **azCol){ }else{ w = 10; } - fprintf(p->out,"%-*.*s%s",w,w,"-------------------------------------", + fprintf(p->out,"%-*.*s%s",w,w,"-------------------------------------" + "------------------------------------------------------------", i==nArg-1 ? "\n": " "); } } @@ -202,6 +204,23 @@ static int callback(void *pArg, int nArg, char **azArg, char **azCol){ } break; } + case MODE_Html: { + if( p->cnt++==0 && p->showHeader ){ + fprintf(p->out,""); + for(i=0; iout,"%s",azCol[i]); + } + fprintf(p->out,"\n"); + } + for(i=0; iout,""); + for(i=0; iout,"%s",azArg[i]); + } + fprintf(p->out,"\n"); + } + break; + } } return 0; } @@ -215,8 +234,8 @@ static char zHelp[] = ".header ON|OFF Turn display of headers on or off\n" ".help Show this message\n" ".indices TABLE Show names of all indices on TABLE\n" - ".mode MODE Set mode to one of \"line\", \"column\", or" - " \"list\"\n" + ".mode MODE Set mode to one of \"line\", \"column\", " + "\"list\", or \"html\"\n" ".output FILENAME Send output to FILENAME\n" ".output stdout Send output to the screen\n" ".schema ?TABLE? Show the CREATE statements\n" @@ -317,6 +336,8 @@ static void do_meta_command(char *zLine, sqlite *db, struct callback_data *p){ p->mode = MODE_Column; }else if( strncmp(azArg[1],"list",n2)==0 ){ p->mode = MODE_List; + }else if( strncmp(azArg[1],"html",n2)==0 ){ + p->mode = MODE_Html; } }else @@ -391,10 +412,45 @@ static void do_meta_command(char *zLine, sqlite *db, struct callback_data *p){ int main(int argc, char **argv){ sqlite *db; char *zErrMsg = 0; + char *argv0 = argv[0]; struct callback_data data; + memset(&data, 0, sizeof(data)); + data.mode = MODE_List; + strcpy(data.separator,"|"); + data.showHeader = 0; + while( argc>=2 && argv[1][0]=='-' ){ + if( strcmp(argv[1],"-html")==0 ){ + data.mode = MODE_Html; + argc--; + argv++; + }else if( strcmp(argv[1],"-list")==0 ){ + data.mode = MODE_List; + argc--; + argv++; + }else if( strcmp(argv[1],"-line")==0 ){ + data.mode = MODE_Line; + argc--; + argv++; + }else if( argc>=3 && strcmp(argv[0],"-separator")==0 ){ + sprintf(data.separator,"%.*s",sizeof(data.separator)-1,argv[2]); + argc -= 2; + argv += 2; + }else if( strcmp(argv[1],"-header")==0 ){ + data.showHeader = 1; + argc--; + argv++; + }else if( strcmp(argv[1],"-noheader")==0 ){ + data.showHeader = 0; + argc--; + argv++; + }else{ + fprintf(stderr,"%s: unknown option: %s\n", argv0, argv[1]); + return 1; + } + } if( argc!=2 && argc!=3 ){ - fprintf(stderr,"Usage: %s FILENAME ?SQL?\n", *argv); + fprintf(stderr,"Usage: %s ?OPTIONS? FILENAME ?SQL?\n", argv0); exit(1); } db = sqlite_open(argv[1], 0666, &zErrMsg); @@ -402,11 +458,8 @@ int main(int argc, char **argv){ fprintf(stderr,"Unable to open database \"%s\": %s\n", argv[1], zErrMsg); exit(1); } - memset(&data, 0, sizeof(data)); data.out = stdout; if( argc==3 ){ - data.mode = MODE_List; - strcpy(data.separator,"|"); if( sqlite_exec(db, argv[2], callback, &data, &zErrMsg)!=0 && zErrMsg!=0 ){ fprintf(stderr,"SQL error: %s\n", zErrMsg); exit(1); @@ -416,9 +469,6 @@ int main(int argc, char **argv){ char *zSql = 0; int nSql = 0; int istty = isatty(0); - data.mode = MODE_Line; - strcpy(data.separator,"|"); - data.showHeader = 0; if( istty ){ printf( "Enter \".help\" for instructions\n" @@ -438,7 +488,7 @@ int main(int argc, char **argv){ int len = strlen(zLine); zSql = realloc( zSql, nSql + len + 2 ); if( zSql==0 ){ - fprintf(stderr,"%s: out of memory!\n", *argv); + fprintf(stderr,"%s: out of memory!\n", argv0); exit(1); } strcpy(&zSql[nSql++], "\n");