This commit is contained in:
guha%netscape.com 1999-01-25 23:16:04 +00:00
Родитель 5c4146ac85
Коммит 6c0d9026ee
5 изменённых файлов: 269 добавлений и 90 удалений

Просмотреть файл

@ -71,91 +71,124 @@ cookiePropValue (char* cookie, char* prop) {
}
}
void
AnswerOpenDirQuery (WriteClientProc callBack, void* obj, char *query, char* cookie) {
char buff[1000];
RDF_Resource narrow = RDF_GetResource("narrow", 1);
RDF_Resource link = RDF_GetResource("link", 1);
RDF_Resource name = RDF_GetResource("name", 1);
RDF_Resource topic = RDF_GetResource("Topic", 1);
RDF_Resource desc = RDF_GetResource("description", 1);
RDF_Resource editor = RDF_GetResource("editor", 1);
RDF_Resource newsGroup = RDF_GetResource("newsGroup", 1);
RDF_Resource node = getNodeFromQuery(query);
char widthc = cookiePropValue(cookie, "cols");
char sort = cookiePropValue(cookie, "sort");
size_t rw = (widthc ? ((int)widthc - 48) : 3);
RDF_Resource gNarrow;
RDF_Resource gLink;
RDF_Resource gName;
RDF_Resource gTopic;
RDF_Resource gDesc;
RDF_Resource gEditor;
RDF_Resource gNewsGroup;
char* gTemplate;
int gInited = 0;
#define MAX_TEMPLATE_SIZE 20000
if (!sort) sort = 'D';
void
Init () {
if (!gInited) {
int n = 0;
FILE *templateFile = fopen("template.html", "r");
gInited = 1;
gNarrow = RDF_GetResource("narrow", 1);
gLink = RDF_GetResource("link", 1);
gName = RDF_GetResource("name", 1);
gTopic = RDF_GetResource("Topic", 1);
gDesc = RDF_GetResource("description", 1);
gEditor = RDF_GetResource("editor", 1);
gNewsGroup = RDF_GetResource("newsGroup", 1);
gTemplate = malloc(MAX_TEMPLATE_SIZE+1);
memset(gTemplate, '\0', MAX_TEMPLATE_SIZE);
n = fread(gTemplate, 1, MAX_TEMPLATE_SIZE, templateFile);
gTemplate[n] = '\0';
fclose(templateFile);
}
}
char*
resourceName (RDF_Resource u) {
char* nm = (char*) RDF_OnePropValue(0, u, gName, RDF_STRING_TYPE);
char* id = RDF_ResourceID(u);
if (!nm || strchr(nm, '/')) nm = strrchr(id, '/') +1;
return nm;
}
void
outputTopicName (WriteClientProc callBack, void* obj, RDF_Resource node) {
char* nm = (char*) RDF_OnePropValue(0, node, gName, RDF_STRING_TYPE);
char* id = RDF_ResourceID(node);
if (!nm || strchr(nm, '/'))
if (strchr(id, '/')) {
nm = strrchr(id, '/') +1;
} else {
nm = id;
}
(*callBack)(obj, nm);
}
void
listSubTopics (WriteClientProc callBack, void* obj, RDF_Resource node, char* cookie, RDF_Resource p) {
if (node) {
RDF_Cursor c = RDF_GetTargets(0, node, narrow, RDF_RESOURCE_TYPE);
RDF_Resource u = (RDF_Resource) RDF_NextValue(c);
(*callBack)(obj, PREFIX);
listParents(callBack, obj, node, 0);
if (u) {
(*callBack)(obj, "<BR><hr><table cellspacing=\"6\" cellpadding=\"6\" width=\"80%\">");
while (u) {
int w = 0;
(*callBack)(obj, "<tr>");
while ((w < rw) && u) {
char* nm = (char*) RDF_OnePropValue(0, u, name, RDF_STRING_TYPE);
char* id = RDF_ResourceID(u);
if (!nm || strchr(nm, '/')) nm = strrchr(id, '/') +1;
sprintf(buff, "<td width=\"%i%\"><li><a href=\"OpenDir?browse=%s\">%s</a></td>",
(100 / rw), id, (nm ? nm : id));
(*callBack)(obj, buff);
w++;
u = (RDF_Resource) RDF_NextValue(c);
}
(*callBack)(obj, "</tr>");
}
(*callBack)(obj, "</table>");
RDF_Cursor c = RDF_GetTargets(0, node, p, RDF_RESOURCE_TYPE);
char widthc = cookiePropValue(cookie, "cols");
RDF_Resource u;
char buff[5000];
RDF_Resource subTopicList[200];
int n = 0;
int w = 0;
while (u = (RDF_Resource) RDF_NextValue(c)) {
subTopicList[n++] = u;
}
RDF_DisposeCursor(c);
(*callBack)(obj, "<hr><UL>");
c = RDF_GetTargets(0, node, link, RDF_RESOURCE_TYPE);
u = (RDF_Resource) RDF_NextValue(c);
while (u) {
describeItem(callBack, obj, u);
u = (RDF_Resource) RDF_NextValue(c);
}
(*callBack)(obj, "</UL>");
RDF_DisposeCursor(c);
c = RDF_GetTargets(0, node, newsGroup, RDF_RESOURCE_TYPE);
u = (RDF_Resource) RDF_NextValue(c);
if (u) {
(*callBack)(obj, "<hr><b>NewsGroups:</B>");
while (u) {
char* id = RDF_ResourceID(u);
sprintf(buff, "<li><a href=\"%s\">%s</a>", id, id);
(*callBack)(obj, buff);
u = (RDF_Resource) RDF_NextValue(c);
for (w = 0; w < n; w++) {
char* id;
if (((w == 0) || (w == ((n+1)/2))) && (p == gNarrow)) {
if (w != 0) (*callBack)(obj, "</td>");
(*callBack)(obj, "</UL>\n<TD width=\"40%\" valign=top><UL><FONT Face=\"sans-serif, Arial, Helvetica\">\n<UL>\n");
}
(*callBack)(obj, "</UL>");
}
RDF_DisposeCursor(c);
c = RDF_GetTargets(0, node, editor, RDF_RESOURCE_TYPE);
u = (RDF_Resource) RDF_NextValue(c);
if (u) {
(*callBack)(obj, "<hr><b>Editors:</b>");
while (u) {
char* id = RDF_ResourceID(u);
sprintf(buff, " %s", id);
(*callBack)(obj, buff);
u = (RDF_Resource) RDF_NextValue(c);
}
RDF_DisposeCursor(c);
u = subTopicList[w];
id = RDF_ResourceID(u);
if (p == gNarrow) {
sprintf(buff, "<li><a href=\"OpenDir?browse=%s\">%s</a>\n", id, resourceName(u));
} else {
char* des = (char*) RDF_OnePropValue(0, u, gDesc, RDF_STRING_TYPE);
sprintf(buff, "<li><a href=\"%s\">%s</a> %s %s\n", id, resourceName(u),
(des ? " : " : ""), (des ? des : ""));
}
(*callBack)(obj, buff);
}
}
}
void
AnswerOpenDirQuery (WriteClientProc callBack, void* obj, char *query, char* cookie) {
RDF_Resource node = getNodeFromQuery(query);
size_t n = 0;
char buff[MAX_TEMPLATE_SIZE];
char* pbegin = 0;
char* begin;
Init();
begin = gTemplate;
while (pbegin = strstr(begin, "&Topic")) {
memset(buff, '\0', 10000);
memcpy(buff, begin, pbegin-begin);
(*callBack)(obj, buff);
if (startsWith("&TopicName;", pbegin)) {
outputTopicName(callBack, obj, node);
} else if (startsWith("&TopicPath;", pbegin)) {
listParents(callBack, obj, node, 0);
} else if (startsWith("&TopicSubTopics;", pbegin)) {
listSubTopics(callBack, obj, node, cookie, gNarrow);
} else if (startsWith("&TopicItems;", pbegin)) {
listSubTopics(callBack, obj, node, cookie, gLink);
}
begin = pbegin + (strchr(pbegin, ';') - pbegin) + 1;
}
(*callBack)(obj, begin);
}
void describeCategory (WriteClientProc callBack, void* obj, RDF_Resource u) {
char buff[1000];
@ -198,11 +231,11 @@ AnswerSearchQuery (WriteClientProc callBack, void* obj, char *query, char* cooki
RDF_Resource topic = RDF_GetResource("Topic", 1);
RDF_Resource type = RDF_GetResource("type", 1);
RDF_Resource u ;
RDF_Resource* cats = (RDF_Resource*)xGetMem(sizeof(RDF_Resource) * (MRN + 1));
RDF_Resource* items = (RDF_Resource*)xGetMem(sizeof(RDF_Resource) * (MRN + 1));;
size_t catn = 0;
size_t itemn = 0;
size_t index;
RDF_Resource* cats = (RDF_Resource*)xGetMem(sizeof(RDF_Resource) * (MRN + 1));
RDF_Resource* items = (RDF_Resource*)xGetMem(sizeof(RDF_Resource) * (MRN + 1));
char showDesc = cookiePropValue(cookie, "searchDesc");
(*callBack)(obj, PREFIX);

Просмотреть файл

@ -68,9 +68,11 @@ TNS
findChildOfChar (TNS node, char c) {
TNS ch = node->child;
char c1 = tolower(c);
int n = 0;
while (ch) {
if (c1 == ch->c) return ch;
ch = ch->next;
n++;
}
return 0;
}

Просмотреть файл

@ -52,14 +52,14 @@ Run(ServerSession_t obj)
val++;
*(val -1) = '\0';
WAIStartResponse(obj);
WriteClient(obj, PREFIX);
/* WriteClient(obj, PREFIX); */
if (strcmp(query, "browse") == 0) {
AnswerOpenDirQuery(WriteClient, obj, val, cookie);
} else if (strcmp(query, "search") == 0) {
AnswerSearchQuery(WriteClient, obj, val, cookie);
}
WriteClient(obj, POSTFIX);
/* WriteClient(obj, POSTFIX); */
return 0;
}
@ -71,6 +71,7 @@ int WINAPI WinMain(
LPSTR lpCmdLine, // pointer to command line
int nCmdShow // show state of window
)
{
int argc = 0;
char **argv = NULL;
@ -80,7 +81,8 @@ int main(int argc, char **argv)
#endif
char localhost[256];
char *host;
RDF_Resource u;
RDF_Resource u;
int n = 2;
IIOPWebAppService_t obj;
//
@ -106,6 +108,7 @@ int main(int argc, char **argv)
// that appears as argv[0].
// GetCommandLine can be used to retrieve the
// whole thing.
n = 1;
if (lpCmdLine && *lpCmdLine){
if (*lpCmdLine != '-'){
char *sep = strchr(lpCmdLine, ' ');
@ -129,8 +132,13 @@ int main(int argc, char **argv)
WAIregisterService(obj, host);
RDF_Initialize();
printf("RDF Initialized!\n");
RDF_ReadFile(argv[2]);
if (argc == 0) {
RDF_ReadFile("three_level");
} else {
while (n <= argc) {
RDF_ReadFile(argv[n++]);
}
}
printf("done");
WAIimplIsReady();

Просмотреть файл

@ -236,12 +236,13 @@ parseNextRDFXMLBlobInt(RDFT f, char* blob, int size) {
if ((c == '\n') || (c == '\r')) lineNumber++;
m = 0;
somethingseenp = 0;
memset(f->line, '\0', RDF_BUF_SIZE-1);
/* memset(f->line, '\0', RDF_BUF_SIZE-1); */
if (f->holdOver[0] != '\0') {
memcpy(f->line, f->holdOver, strlen(f->holdOver));
m = strlen(f->holdOver);
somethingseenp = 1;
memset(f->holdOver, '\0', RDF_BUF_SIZE-1);
f->holdOver[0] = '\0';
/* memset(f->holdOver, '\0', RDF_BUF_SIZE-1); */
}
while ((n < size) && (wsCharp(c)) && (!somethingseenp)) {
c = blob[++n];
@ -256,19 +257,23 @@ parseNextRDFXMLBlobInt(RDFT f, char* blob, int size) {
else break;
if ((c == '\n') || (c == '\r')) lineNumber++;
}
f->line[m] = '\0';
f->line[m+1] = '\0';
if (c == '>') f->line[m] = c;
n++;
if (m > 0) {
if ((c == '<') || (c == '>')) {
last = n;
if (c == '<') f->holdOver[0] = '<';
if (c == '<') {
f->holdOver[0] = '<';
f->holdOver[1] = '\0';
}
if (somethingseenp == 1) {
int ok = parseNextRDFToken(f, f->line);
if (!ok)
return 0;
}
parseNextRDFToken(f, f->line);
}
} else if (size > last) {
memcpy(f->holdOver, f->line, m);
f->holdOver[m+1] = '\0';
}
} else if (c == '<') f->holdOver[0] = '<';
}

131
rdf/opendir/template.html Normal file
Просмотреть файл

@ -0,0 +1,131 @@
<html><head><title>Open Directory - Business</title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#0000ee" vlink="#551a8b" alink="#ff0000">
<!-- BAN_NAV:START:TOP -->
<CENTER>
<!-- Netscape Logo & GLOBAL UTILITY -->
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=600>
<TR>
<TD ROWSPAN=2 WIDTH=135 HEIGHT=35 VALIGN="TOP">
<!-- Netscape lockup image and link go in this cell -->
<!-- E1:START:NSCP_LOCKUP --><A HREF="http://home.netscape.com/"><IMG SRC="/images/nnc_lockup.gif" ALT="Netscape Netcenter"
WIDTH=123 HEIGHT=33 BORDER=0></A><!-- E1:END:NSCP_LOCKUP --></TD>
<TD WIDTH=465 BGCOLOR="#99CCCC" HEIGHT=17 ALIGN="RIGHT" VALIGN="middle">
<!-- Netscape Global Utilities Bar belongs in this cell-->
<FONT FACE="sans-serif, Arial, Helvetica" SIZE="2">
<!-- E2:START:GLOBAL_UTILITY-->
<A HREF="http://home.netscape.com/misc/nav_redir/netsearch.html">Net&nbsp;Search</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="http://home.netscape.com/misc/nav_redir/webmail.html">WebMail</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="http://home.netscape.com/misc/nav_redir/personalize.html">Personalize</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="http://home.netscape.com/misc/nav_redir/members.html">Members</A>&nbsp;&nbsp;|&nbsp;&nbsp;<A HREF="http://home.netscape.com/misc/nav_redir/download.html">Download</A>&nbsp;
<!-- E2:END:GLOBAL_UTILITY --></FONT></TD></TR>
<!-- Blank cells for spacing: do not remove -->
<TR> <TD HEIGHT=20></TD> </TR>
</TABLE>
<!-- start AD -->
<TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 WIDTH=600>
<TR><TD ALIGN="CENTER" VALIGN="TOP">
<!-- AD CEll -->
<!-- E3:START:AD -->
<FONT FACE="sans-serif, Arial, Helvetica" SIZE="2">
<!--AD_TAG VENDOR=ADFORCE WIDTH=468 HEIGHT=60-->
<IFRAME WIDTH=468 HEIGHT=60 NORESIZE SCROLLING=No FRAMEBORDER=0 MARGINHEIGHT=0 MARGINWIDTH=0
SRC="http://adforce.imgis.com/?adiframe|2.0|9|20894|1|1|ADFORCE;">
<A href="http://adforce.imgis.com/?adlink|9|20894|1|1|misc=916957047;AdId=35443;BnId=1;IMGIS;loc=400;" TARGET=_top><IMG SRC="http://imageserv.imgis.com/images/Ad35443St1Sz1Sq1Id1_Ban1.gif" NAME=imgisad BORDER=0 ALT='Internet access as low as 14.95 per month! Click here!' WIDTH=468 HEIGHT=60></A>
</IFRAME>
<BR><A href="http://adforce.imgis.com/?adlink|2.0|9|20894|1|1|IMGIS;loc=100;" target=_top><B>Click Here!</B></A>
</FONT></TD></TR></TABLE>
<TABLE BORDER=0 WIDTH=600 CELLSPACING=0 CELLPADDING=0>
<TR> <TD ALIGN="CENTER"><HR WIDTH=600 NOSHADE SIZE=1></TD></TR>
<TR VALIGN="TOP">
<TD ALIGN="LEFT"><FONT FACE="sans-serif, Arial, Helvetica" SIZE="2" COLOR="#CC0033">You are here:</FONT>
<FONT FACE="sans-serif, Arial, Helvetica" SIZE="2">
<A HREF="http://home.netscape.com/">Home</A> > &TopicPath;
</FONT></TD></TR></TABLE>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=600>
<TR VALIGN="BOTTOM">
<TD><FONT FACE="sans-serif, Arial, Helvetica" SIZE="5"><B>&TopicName;
</B></FONT>
</TD>
<TD ALIGN="RIGHT"></TD>
</TR>
<TR><TD HEIGHT=2 COLSPAN=2></TD></TR>
</TABLE>
<HR NOSHADE SIZE=1 WIDTH=600>
<TABLE Border=0 Cellpadding=0 Cellspacing=0 Width=600>
<TR><TD>
<FORM method=get action="/cgi-bin/search">
<INPUT size=25 name=search> <INPUT type=submit value=Search>
<FONT Face="sans-serif, Arial, Helvetica">
<BR><INPUT type=radio name=all value=yes checked>Search the entire directory
<INPUT type=radio name=all value=no>Search only in <B>&TopicName;</B>
<INPUT type=hidden name=cat value="Business">
</FONT></TD></TR></TABLE>
<HR Width=600 Noshade Size=1>
<TABLE Border=0 Cellpadding=0 Cellspacing=0 Width=600>
<TR>
&TopicSubTopics;
</TR>
</TABLE>
<HR Width=600 Noshade Size=1>
<TABLE Border=0 Cellpadding=0 Cellspacing=0 Width=600>
<TR>
<TD width="%" valign=top><UL><FONT Face="sans-serif, Arial, Helvetica">
<P>
&TopicItems;
</TD>
</TR></TABLE>
<HR Width=600 Noshade Size=1>
<TABLE Border=0 Cellpadding=0 Cellspacing=0 Width=600>
<TR>
<TD valign=bottom><SMALL><A href="/about.html">About the Open Directory Project</A>
<BR><A href=&TopicAddURL;>Add URL</A> <B>-</B>
<A href=&TopicBecomeEditor;>Become an Editor</A>
</TD>
<TD><DIV align=right><TABLE bgcolor="#f0f0f0"><TR><TD><TABLE><TR><TD valign=top><FONT Face="sans-serif, Arial, Helvetica"><SMALL>Category editor:</SMALL></TD>&TopicEditors;</TR></TABLE></TD></TR></TABLE></DIV>
</TD></TR></TABLE>
<HR Width=600 Noshade Size=1>
<CENTER><FONT Face="sans-serif, Arial, Helvetica"></CENTER>
</FORM>
<TABLE WIDTH=600 BORDER=0 CELLPADDING=0 CELLSPACING=0>
<TR><TD ALIGN=LEFT VALIGN=TOP><FONT FACE="sans-serif, Arial, Helvetica" SIZE=-2><A HREF="http://home.netscape.com/misc/nav_redir/help.html" TARGET="_top">Help</A> | <A
HREF="http://home.netscape.com/misc/nav_redir/site_map.html" TARGET="_top">Site Map</A> | <A HREF="http://home.netscape.com/misc/nav_redir/company_info.html" TARGET="_top">Company Information</A> | <A
HREF="http://home.netscape.com/misc/nav_redir/howtoget.html" TARGET="_top">How to Get Netscape Products</A> | <A HREF="http://home.netscape.com/misc/nav_redir/ad.html" TARGET="_top">Advertise With Us</A> | <A HREF="http://home.netscape.com/misc/nav_redir/addsite.html" TARGET="_top">Add Site</A></FONT></TD></TR>
<TR>
<TD WIDTH=600 HEIGHT=8 COLSPAN=0></TD>
</TR>
<TR>
<TD ALIGN=LEFT VALIGN=TOP>
<FONT FACE="sans-serif, Arial, Helvetica" SIZE=-2><A HREF="http://home.netscape.com/misc/nav_redir/channels/autos.html" TARGET="_top">Autos</A> | <A
HREF="http://home.netscape.com/misc/nav_redir/channels/business.html" TARGET="_top">Business</A> | <A HREF="http://home.netscape.com/misc/nav_redir/channels/computers_internet.html" TARGET="_top">Computing & Internet</A> | <A
HREF="http://home.netscape.com/misc/nav_redir/channels/education.html" TARGET="_top">Education</A> | <A HREF="http://home.netscape.com/misc/nav_redir/channels/entertainment.html" TARGET="_top">Entertainment</A> | <A
HREF="http://home.netscape.com/misc/nav_redir/channels/games.html" TARGET="_top">Games</A> | <A HREF="http://home.netscape.com/misc/nav_redir/channels/health.html" TARGET="_top">Health</A> | <A
HREF="http://home.netscape.com/misc/nav_redir/channels/kids_family.html" TARGET="_top">Kids & Family</A> | <A HREF="http://home.netscape.com/misc/nav_redir/channels/lifestyles.html" TARGET="_top">Lifestyles</A> | <A
HREF="http://home.netscape.com/misc/nav_redir/channels/local.html" TARGET="_top">Local</A> | <A HREF="http://home.netscape.com/misc/nav_redir/channels/netscape.html" TARGET="_top">Netscape</A> | <A
HREF="http://home.netscape.com/misc/nav_redir/channels/news.html" TARGET="_top">News</A> | <A HREF="http://home.netscape.com/misc/nav_redir/channels/personalize_finance.html" TARGET="_top">Personal Finance</A> | <A
HREF="http://home.netscape.com/misc/nav_redir/channels/real_estate.html" TARGET="_top">Real Estate</A> | <A HREF="http://home.netscape.com/misc/nav_redir/channels/shopping.html" TARGET="_top">Shopping</A> | <A HREF="http://home.netscape.com/misc/nav_redir/channels/smallbiz.html" TARGET="_top">Small Business</A> | <A
HREF="http://home.netscape.com/misc/nav_redir/channels/sports.html" TARGET="_top">Sports</A> | <A HREF="http://home.netscape.com/misc/nav_redir/channels/travel.html" TARGET="_top">Travel</A></FONT></TD></TR>
</TABLE>
<TABLE WIDTH=600 BORDER=0 CELLPADDING=0 CELLSPACING=0>
<TR><TD WIDTH=600 HEIGHT=8 COLSPAN=0></TD></TR>
<TR>
<TD WIDTH=600 COLSPAN=5 VALIGN=TOP ALIGN=LEFT>
<FONT FACE="sans-serif, Arial, Helvetica" SIZE=-2>
© 1999 Netscape, All Rights Reserved. <A HREF="http://home.netscape.com/legal_notices/index.html">Legal & Privacy Notices</A><BR>This site powered by <A HREF="http://home.netscape.com/comprod/server_central/index.html" TARGET="_top">Netscape SuiteSpot servers</A>.</FONT></TD>
</TR>
</TABLE>
</CENTER></BODY></HTML>