-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
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
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
** 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 <stdlib.h>
#include <string.h>
#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
}else{
w = 10;
}
- fprintf(p->out,"%-*.*s%s",w,w,"-------------------------------------",
+ fprintf(p->out,"%-*.*s%s",w,w,"-------------------------------------"
+ "------------------------------------------------------------",
i==nArg-1 ? "\n": " ");
}
}
}
break;
}
+ case MODE_Html: {
+ if( p->cnt++==0 && p->showHeader ){
+ fprintf(p->out,"<TR>");
+ for(i=0; i<nArg; i++){
+ fprintf(p->out,"<TH>%s</TH>",azCol[i]);
+ }
+ fprintf(p->out,"</TR>\n");
+ }
+ for(i=0; i<nArg; i++){
+ fprintf(p->out,"<TR>");
+ for(i=0; i<nArg; i++){
+ fprintf(p->out,"<TD>%s</TD>",azArg[i]);
+ }
+ fprintf(p->out,"</TD>\n");
+ }
+ break;
+ }
}
return 0;
}
".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"
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
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);
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);
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"
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");