4898794edd81be5285ea6e544acbedeaeb31bf78
max
  Tue Nov 23 08:10:57 2021 -0800
Fixing pointers to README file for license in all source code files. refs #27614

diff --git src/hg/test/otest/test1.c src/hg/test/otest/test1.c
index ee46875..b645d86 100644
--- src/hg/test/otest/test1.c
+++ src/hg/test/otest/test1.c
@@ -1,323 +1,323 @@
 /* test - test out something. */
 
 /* Copyright (C) 2013 The Regents of the University of California 
- * See README in this or parent directory for licensing information. */
+ * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */
 #include "common.h"
 #include "portable.h"
 #include "jksql.h"
 #include "hash.h"
 #include "dystring.h"
 #include "linefile.h"
 
 
 #define sqlQuery sqlGetResult
 
 char *database = "test";
 
 void dropAll()
 /* Drop all tables. */
 {
 struct sqlConnection *conn = sqlConnect(database);
 sqlGetResult(conn, NOSQLINJ "drop table word");
 sqlGetResult(conn, NOSQLINJ "drop table lineWords");
 sqlGetResult(conn, NOSQLINJ "drop table lineSize");
 sqlGetResult(conn, NOSQLINJ "drop table commaLine");
 sqlDisconnect(&conn);
 }
 
 void createAll()
 /* Define all tables. */
 {
 struct sqlConnection *conn = sqlConnect(database);
 sqlGetResult(conn,
   NOSQLINJ "CREATE table word ("
    "id smallint not null primary key,"
    "word varchar(250) not null"
    ")" );
 sqlGetResult(conn,
   NOSQLINJ "CREATE table lineSize ("
    "id int(8) not null primary key,"
    "size smallint not null"
    ")" );
 sqlGetResult(conn,
   NOSQLINJ "CREATE table lineWords ("
    "line int(8) not null,"
    "word smallint not null,"
    "pos smallint not null"
    ")" );
 sqlGetResult(conn,
   NOSQLINJ "CREATE table commaLine ("
    "id int(8) not null primary key,"
    "size smallint not null,"
    "wordList blob not null"
    ")" );
 sqlDisconnect(&conn);
 }
 
 void freshTables()
 /* Make database have defined but empty tables. */
 {
 dropAll();
 createAll();
 }
 
 int tokSize(char *text, int size)
 /* Return size of next token of text. */
 {
 char c;
 int i;
 
 c = text[0];
 if (isspace(c))
     {
     for (i=1; i<size; ++i)
 	{
 	if (!isspace(text[i]))
 	    break;
 	}
     return i;
     }
 else if (isdigit(c))
     {
     for (i=1; i<size; ++i)
 	{
 	if (!isdigit(text[i]))
 	    break;
 	}
     return i;
     }
 else if (isalpha(c))
     {
     for (i=1; i<size; ++i)
 	{
 	if (!isalpha(text[i]))
 	    break;
 	}
     return i;
     }
 else
     return 1;
 }
 
 void addFile(char *fileName)
 /* Add all the words in file to database. */
 {
 struct lineFile *lf = lineFileOpen(fileName, FALSE);
 char *line;
 int lineSize;
 char wordBuf[1024];
 int lineBuf[512];
 int highestWordId = 0;
 int wordCount;
 char *nullPt = NULL;
 struct hash *wordHash = newHash(16);
 struct hashEl *hel;
 struct dyString *query = newDyString(512);
 struct sqlConnection *conn = sqlConnect(database);
 int i;
 int lineCount = 0;
 
 while (lineFileNext(lf, &line, &lineSize))
     {
     /* Chop the line up into words. */
     int wordCount = 0;
     int startWord;
     int wordSize;
     int sizeLeft;
     int wordId;
     int i;
     for (sizeLeft = lineSize; sizeLeft > 0; sizeLeft -= wordSize, line += wordSize)
 	{
 	wordSize = tokSize(line, sizeLeft);
 	if (wordSize >= sizeof(wordBuf))
 	    errAbort("Word too long line %d of %s", lf->lineIx, lf->fileName);
 	memcpy(wordBuf, line, wordSize);
 	wordBuf[wordSize] = 0;
 	if (wordBuf[wordSize-1] == ' ')
 	    wordBuf[wordSize-1] = '_';
 	if ((hel = hashLookup(wordHash, wordBuf)) == NULL)
 	    {
 	    wordId = highestWordId++;
 	    hel = hashAdd(wordHash, wordBuf, nullPt + wordId);
 	    dyStringClear(query);
 	    if (wordBuf[0] == '\'')
 		{
 		sqlDyStringPrintf(query,
 		    "INSERT into word values (%d, \"'\")", wordId);
 		}
 	    else if (wordBuf[0] == '\\')
 		{
 		sqlDyStringPrintf(query,
 		    "INSERT into word values (%d, '\\\\')", wordId);
 		}
 	    else
 		{
 		sqlDyStringPrintf(query,
 		    "INSERT into word values (%d, '%s')", wordId, wordBuf);
 		}
 	    sqlGetResult(conn, query->string);
 	    }
 	else
 	    {
 	    wordId = (char *)(hel->val) - nullPt;
 	    }
 	if (wordCount >= ArraySize(lineBuf))
 	    {
 	    errAbort("Too many words in line %d of %s", lf->lineIx, lf->fileName);
 	    }
 	lineBuf[wordCount++] = wordId;
 	}
 
     /* Store the words in the database */
     dyStringClear(query);
     sqlDyStringPrintf(query,
 	"INSERT into commaLine values (%d, %d, '", lineCount, wordCount);
     for (i=0; i<wordCount; ++i)
 	dyStringPrintf(query, "%d,", lineBuf[i]);
     dyStringAppend(query, "')");
     sqlGetResult(conn, query->string);
 
     dyStringClear(query);
     sqlDyStringPrintf(query,
 	"INSERT into lineSize values (%d,%d)", lineCount, wordCount);
     sqlGetResult(conn, query->string);
 
     for (i=0; i<wordCount; ++i)
 	{
 	dyStringClear(query);
 	sqlDyStringPrintf(query,
 	    "INSERT into lineWords values (%d,%d,%d)", lineCount, lineBuf[i], i);
 	sqlGetResult(conn, query->string);
 	}
     ++lineCount;
     }
 sqlDisconnect(&conn);
 }
 
 void usage()
 {
 errAbort("usage: test file\n");
 }
 
 char **loadWords()
 /* Load words from table into array. */
 {
 struct sqlConnection *conn = sqlConnect(database);
 struct sqlResult *sr;
 int wordCount;
 char **words = NULL;
 int i = 0;
 char **row;
 
 wordCount = sqlTableSize(conn, "word");
 uglyf("Got %d words\n", wordCount);
 words = needMem(wordCount * sizeof(words[0]));
 sr = sqlQuery(conn, NOSQLINJ "select * from word");
 while ((row = sqlNextRow(sr)) != NULL)
     {
     words[i] = cloneString(row[1]);
     ++i;
     }
 printf("wordCount %d i %d\n", wordCount, i);
 sqlFreeResult(&sr);
 sqlDisconnect(&conn);
 return words;
 }
 
 void noOutput(FILE *f, char *s)
 /* Write string to file (maybe) */
 {
 }
 
 void fileOutput(FILE *f, char *s)
 /* Write string to file (maybe) */
 {
 fputs(s, f);
 }
 
 void commaRecon(char *fileName)
 /* Do comma based reconstruction. */
 {
 char **words;
 long start, end;
 struct sqlConnection *conn = sqlConnect(database);
 struct sqlResult *sr;
 char **row;
 FILE *f = mustOpen(fileName, "w");
 
 start = clock1000();
 words = loadWords();
 end = clock1000();
 printf("Time to load words: %4.3f\n", 0.001*(end-start));
 start = clock1000();
 
 sr = sqlQuery(conn, NOSQLINJ "SELECT * from commaLine");
 while ((row = sqlNextRow(sr)) != NULL)
     {
     int wordCount = sqlUnsigned(row[1]);
     int i;
     char *s = row[2],*e;
     int wordIx;
     for (i=0; i<wordCount; ++i)
 	{
 	e = strchr(s,',');
 	*e++ = 0;
 	wordIx = sqlUnsigned(s);
 	s = e;
 	fileOutput(f,words[wordIx]);
 	}
     }
 end = clock1000();
 printf("Time to comma reconstruct file: %4.3f\n", 0.001*(end-start));
 sqlDisconnect(&conn);
 }
 
 void relationRecon(char *fileName)
 /* Do relationship based reconstruction. */
 {
 char **words;
 long start, end;
 struct sqlConnection *conn = sqlConnect(database);
 struct sqlResult *sr;
 char **row;
 FILE *f = mustOpen(fileName, "w");
 int lineCount;
 int i;
 char query[256];
 
 start = clock1000();
 words = loadWords();
 end = clock1000();
 printf("Time to load words: %4.3f\n", 0.001*(end-start));
 start = clock1000();
 
 lineCount = sqlTableSize(conn, "lineSize");
 for (i=0; i<lineCount; ++i)
     {
     sqlSafef(query, sizeof query, "select * from lineWords where line = %d", i);
     sr = sqlQuery(conn, query);
     while ((row = sqlNextRow(sr)) != NULL)
 	fileOutput(f,words[sqlUnsigned(row[1])]);
     sqlFreeResult(&sr);
     }
 end = clock1000();
 printf("Time to relation reconstruct file: %4.3f\n", 0.001*(end-start));
 sqlDisconnect(&conn);
 }
 
 
 void makeBig()
 /* Make a pretty big database from a large text file. */
 {
 freshTables();
 addFile("/usr/src/linux/Documentation/Configure.help");
 }
 
 int main(int argc, char *argv[])
 {
 if (argc != 2)
     usage();
 relationRecon(argv[1]);
 //commaRecon(argv[1]);
 //makeBig();
 }