[libimdb-commit] CVS: libimdb/parser Makefile,NONE,1.1 imdbDict.c,NONE,1.1 imdbParser.c,NONE,1.1 pri
Status: Pre-Alpha
Brought to you by:
jveldhuis
|
From: Jerry V. <jve...@us...> - 2003-06-16 04:18:48
|
Update of /cvsroot/libimdb/libimdb/parser
In directory sc8-pr-cvs1:/tmp/cvs-serv11812/parser
Added Files:
Makefile imdbDict.c imdbParser.c private.h
Log Message:
initial checkin
--- NEW FILE: Makefile ---
#
# $Id: Makefile,v 1.1 2003/06/16 04:18:38 jveldhuis Exp $
#
include ../config.mk
include ../constants.mk
CPPFLAGS += -I../include
LIB_BASE = imdbParser
LIB_VERSION = 1.0
build:
$(MAKE) $(MYLIBRARY) LIBRARY=$(MYLIBRARY)
$(MAKE) $(MYDYNAMIC) DYNAMIC=$(MYDYNAMIC)
install:; @true;
include ../rules.mk
--- NEW FILE: imdbDict.c ---
/**
* @file
* @verbatim $Id: imdbDict.c,v 1.1 2003/06/16 04:18:38 jveldhuis Exp $ @endverbatim
*/
static char rcs_id[] = "$Id: imdbDict.c,v 1.1 2003/06/16 04:18:38 jveldhuis Exp $";
#define _USE_STDIO
#define _USE_STDLIB
#define _USE_ERRNO
#define _USE_IO
#define _USE_ASSERT
#define _USE_STDARG
#define _USE_STRINGS
#define _USE_TYPES
#define _USE_CTYPE
#define _USE_MALLOC
#define _USE_LIMITS
#define _USE_TIME
#include "sysincludes.h"
#include "jlog/dicerr.h"
#include "libimdb/parser.h"
#include "libimdb/dict.h"
/*#include "private.h"*/
struct imdbDict_s
{
int fd;
char dir[1024];
imdbParser_t *parser;
};
static inline void
writeIt(int fd, char *in)
{
char *i=in;
while(*i != '\0') {
if ( isalnum(*i) || *i == '_' || *i=='.' || *i=='-') {
write(fd, i, 1);
}
else {
char buf[100];
sprintf(buf, "%%%02x", (unsigned int)*i);
write(fd, buf, strlen(buf));
}
i++;
}
}
/**
* move ending ', The', articles to front of title name.
* articles include The,A,Une,Les,L\',Le,La,El,Das.
*/
static void
titleMoveArticlesToFront(const char *title, char *output)
{
int len=strlen(title);
const char *end=title+len;
if ( strncmp(end-5, ", The", 5)==0 ||
strncmp(end-5, ", Une", 5)==0 ||
strncmp(end-5, ", Les", 5)==0 ||
strncmp(end-5, ", Das", 5)==0 ) {
output[0]=*(end-3);
output[1]=*(end-2);
output[2]=*(end-1);
output[3]=' ';
strncpy(output+4, title, len-5);
output[len-1]='\0';
}
else if ( strncmp(end-3, ", A", 3)==0 ) {
output[0]='A';
output[1]=' ';
strncpy(output+2, title, len-3);
output[len-1]='\0';
}
else if ( strncmp(end-4, ", L\'", 4)==0 ||
strncmp(end-4, ", Le", 4)==0 ||
strncmp(end-4, ", La", 4)==0 ||
strncmp(end-4, ", El", 4)==0 ) {
output[0]=*(end-2);
output[1]=*(end-1);
output[2]=' ';
strncpy(output+3, title, len-4);
output[len-1]='\0';
}
else {
strcpy(output, title);
}
}
static int
listentry_cb(jlogHandle_t *logh,
imdbParser_t *imdbh,
const ListFile_e lf,
const void *entry)
{
imdbDict_t *dict=imdbParser_getUserHandle(logh, imdbh);
switch(lf) {
case LIST_MOVIES:
{
const struct MovieInList_s *data=entry;
write(dict->fd, data->title, strlen(data->title));
write(dict->fd, "\t", 1);
switch(data->type) {
case isMovie: write(dict->fd, "\t1", 2);
break;
case isTVSeries: write(dict->fd, "\t2", 2);
break;
case isTVMovie: write(dict->fd, "\t3", 2);
break;
case isVideoMovie: write(dict->fd, "\t4", 2);
break;
case isVideoGame: write(dict->fd, "\t5", 2);
break;
case isTVMiniSeries:write(dict->fd, "\t6", 2);
break;
}
write(dict->fd, "\n", 1);
if ( data->number > 1000 ) {
/* stop */
/*return(-1);*/
}
}
break;
case LIST_DIRECTORS:
{
const struct DirectorInList_s *data=entry;
}
break;
case LIST_ACTORS:
{
const struct ActorInList_s *data=entry;
}
break;
case LIST_ACTRESSES:
{
const struct ActorInList_s *data=entry;
}
break;
}
return(0);
}
imdbDict_t *
imdbDict_create(jlogHandle_t *logh,
const char *dbsDir,
const char *dictDir)
{
imdbDict_t *dict;
dict=malloc(sizeof(struct imdbDict_s));
if ( dict == NULL ) {
DICE_BAD_MEM_FAILURE(logh, imdbDict_t *, NULL);
}
dict->parser=imdbParser_open(logh, dbsDir, listentry_cb);
if ( dict->parser == NULL ) {
free(dict);
DIC_FAILURE(logh, imdbDict_t *, NULL);
}
imdbParser_setUserHandle(logh, dict->parser, dict);
dict->fd=-1;
strcpy(dict->dir, dictDir);
return(dict);
}
int
imdbDict_destroy(jlogHandle_t *logh,
imdbDict_t *dict)
{
imdbParser_close(logh, dict->parser);
free(dict);
DIC_SUCCESS(logh, int, 0);
}
int
imdbDict_indexMovies(jlogHandle_t *logh,
imdbDict_t *dict)
{
char file[1024];
sprintf(file, "%s/moviedb.idx", dict->dir);
dict->fd=open(file, O_CREAT|O_TRUNC|O_WRONLY, 0666);
if ( dict->fd == -1 ) {
DICE_FILE_OPEN_FAILURE(logh, file, strerror(errno), int, -1);
}
/* -1 means stop, -2 means abort */
if ( imdbParser_moviesParse(logh, dict->parser) < -1 ) {
close(dict->fd);
unlink(file);
DIC_FAILURE(logh, int, -1);
}
close(dict->fd);
return(0);
}
--- NEW FILE: imdbParser.c ---
/**
* @file
* @verbatim $Id: imdbParser.c,v 1.1 2003/06/16 04:18:38 jveldhuis Exp $ @endverbatim
*/
static char rcs_id[] = "$Id: imdbParser.c,v 1.1 2003/06/16 04:18:38 jveldhuis Exp $";
#define _USE_STDIO
#define _USE_STDLIB
#define _USE_ERRNO
#define _USE_IO
#define _USE_ASSERT
#define _USE_STDARG
#define _USE_STRINGS
#define _USE_TYPES
#define _USE_CTYPE
#define _USE_MALLOC
#define _USE_LIMITS
#define _USE_TIME
[...1333 lines suppressed...]
LIST_DIRECTORS));
}
int
imdbParser_actorsParse(jlogHandle_t *logh,
imdbParser_t *parser)
{
return(imdbParser_castOrDirectorsParse(logh,
parser,
LIST_ACTORS));
}
int
imdbParser_actressesParse(jlogHandle_t *logh,
imdbParser_t *parser)
{
return(imdbParser_castOrDirectorsParse(logh,
parser,
LIST_ACTRESSES));
}
--- NEW FILE: private.h ---
/**
* @file
* @verbatim $Id: private.h,v 1.1 2003/06/16 04:18:38 jveldhuis Exp $ @endverbatim
*/
/*typedef void (FormatError_cb_t)(jlogHandle_t *logh,
imdbParser_t *parser,
const char *pathname,
int lineNumber,
const char *message);*/
typedef struct movieStats_s {
int numTVMiniSeries;
int numMovie;
int numTVSeries;
int numTVMovie;
int numVideoMovie;
int numVideoGame;
} movieStats_t;
struct imdbParser_s
{
void *userHandle;
char *dbsDir;
/*FormatError_cb_t *formatError_cb;*/
progressStarting_cb_t *progressStarting_cb;
progressUpdate_cb_t *progressUpdate_cb;
progressFinished_cb_t *progressFinished_cb;
ListEntry_cb_t *listEntry_cb;
struct {
movieStats_t movieList;
struct {
int numDirectors;
movieStats_t movies;
} directorsList;
struct {
int numActors;
movieStats_t movies;
} actorsList;
struct {
int numActresses;
movieStats_t movies;
} actressesList;
} stats;
};
|