Пример #1
0
RDFT
MakeMailAccountDB (char* url)
{
  if (startsWith("mailaccount://", url)) {
    RDFT   ntr =   NewRemoteStore(url);
    char*  fileurl = getMem(100);
    int32 n = PR_SKIP_BOTH;
    PRDirEntry	*de;
    PRDir* dir ;
    RDF_Resource top = RDF_GetResource(NULL, url, 1);
    sprintf(fileurl, "%s%s", profileDirURL, &url[14]);
    dir = OpenDir(fileurl);
    if (dir == NULL) {
      if ( CallPRMkDirUsingFileURL(fileurl, 00700) > -1) dir = OpenDir(fileurl);
    }
    while ((dir != NULL) && ((de = PR_ReadDir(dir, (PRDirFlags)(n++))) != NULL)) {
      if ((!endsWith(".ssf", de->name)) && (!endsWith(".dat", de->name)) && 
          (!endsWith(".snm", de->name)) && (!endsWith("~", de->name))) {
        RDF_Resource r;
        sprintf(fileurl, "mailbox://folder/%s/%s", &url[14], de->name);
        r = RDF_GetResource(NULL, fileurl, 1);
        setResourceType(r, PMF_RT);
        remoteStoreAdd(ntr, r, gCoreVocab->RDF_parent, top, RDF_RESOURCE_TYPE, 1);
        remoteStoreAdd(ntr, r, gCoreVocab->RDF_name, copyString(de->name), RDF_STRING_TYPE, 1);
      }
    }
    freeMem(fileurl);
    if (dir) PR_CloseDir(dir);
    return ntr;
  } else return NULL;
}
Пример #2
0
Theyril::Theyril(Inventory* p, int stack) : Resource(p){
	setName("Theyril");
	setWeight(float(0.1));
	setSymbol(new Symbol('*', 15));
	setItemID(getNextID());
	setStack(stack);
	totWeight = getWeight()*stack;
	setResourceType(theyril);
}
Пример #3
0
Wood::Wood(Inventory* p, int stack) : Resource(p){
	setName("Wood");
	setWeight(float(0.1));
	setSymbol(new Symbol('*', 6));
	setItemID(getNextID());
	setStack(stack);
	totWeight = getWeight()*stack;
	setResourceType(wood);
}
Пример #4
0
Leather::Leather(Inventory* p, int stack) : Resource(p){
	setName("Leather");
	setWeight(float(0.1));
	setSymbol(new Symbol('*', 14));
	setItemID(getNextID());
	setStack(stack);
	totWeight = getWeight()*stack;
	setResourceType(leather);
}
Пример #5
0
Cloth::Cloth(Inventory* p, int stack) : Resource(p){
	setName("Cloth");
	setWeight(float(0.1));
	setSymbol(new Symbol('*', 7));
	setItemID(getNextID());
	setStack(stack);
	totWeight = getWeight()*stack;
	setResourceType(cloth);
}
Пример #6
0
Selentine::Selentine(Inventory* p, int stack) : Resource(p){
	setName("Selentine");
	setWeight(float(0.1));
	setSymbol(new Symbol('*', 7));
	setItemID(getNextID());
	setStack(stack);
	totWeight = getWeight()*stack;
	setResourceType(selentine);
}
Пример #7
0
Veilron::Veilron(Inventory* p, int stack) : Resource(p){
	setName("Veilron");
	setWeight(float(0.1));
	setSymbol(new Symbol('*', 0, BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED));
	setItemID(getNextID());
	setStack(stack);
	totWeight = getWeight()*stack;
	setResourceType(veilron);
}
Пример #8
0
Iron::Iron(Inventory* p, int stack) : Resource(p){
	setName("Iron");
	setWeight(float(0.5));
	setSymbol(new Symbol('*', 8));
	setItemID(getNextID());
	setStack(stack);
	totWeight = getWeight()*stack;
	setResourceType(iron);
}
Пример #9
0
Neithal::Neithal(Inventory* p, int stack) : Resource(p){
	setName("Neithal");
	setWeight(float(0.1));
	setSymbol(new Symbol('*', 1));
	setItemID(getNextID());
	setStack(stack);
	totWeight = getWeight()*stack;
	setResourceType(neithal);
}
Пример #10
0
void
es_GetUrlExitFunc (URL_Struct *urls, int status, MWContext *cx)
{
	RDF_Resource		parent = NULL, child = NULL, r;
	_esFEData		*feData;
	char			*newURL, *p;

	feData = (_esFEData *)urls->fe_data;
	if ((status >= 0) && (feData != NULL))
	{
		parent = RDF_GetResource(gNCDB, feData->parent, false);
		child = RDF_GetResource(gNCDB, feData->child, false);
		if ((parent != NULL) && (child != NULL))
		{
			switch(feData->method)
			{
				case	URL_POST_METHOD:
				if (((p = strrchr(resourceID(child), '/')) != NULL) && (*++p != '\0'))
				{
					if ((newURL = append2Strings(resourceID(parent), p)) != NULL)
					{
						if ((r = RDF_GetResource(gNCDB, newURL, 1)) != NULL)
						{
							setContainerp(r, containerp(child));
							setResourceType(r, resourceType(child));
						
							remoteStoreAdd(gRemoteStore, r,
								gCoreVocab->RDF_parent, parent,
								RDF_RESOURCE_TYPE, 1);
						}
						freeMem(newURL);
					}
				}
				break;

				case	URL_DELETE_METHOD:
				remoteStoreRemove(gRemoteStore, child,
					gCoreVocab->RDF_parent, parent,
					RDF_RESOURCE_TYPE);
				break;
			}
		}
	}
	else if (status < 0)
	{
		if ((cx != NULL) && (urls != NULL) && (urls->error_msg != NULL))
		{
			FE_Alert(cx, urls->error_msg);
		}
	}
	if (feData != NULL)
	{
		esFreeFEData(feData);
	}
        NET_FreeURLStruct (urls);
}
Пример #11
0
void 
RDF_FinishMessageDelivery (RDFT rdf)
{
  MF folder = (MF) rdf->pdata;
  MM msg    = folder->add;
  folder->add = NULL;
  addMsgToFolder(folder, msg);
  setResourceType(msg->r, PM_RT);
  fseek(folder->sfile, 0L, SEEK_END);
  msg->summOffset = ftell(folder->sfile);
  writeMsgSum(folder, msg);
  fseek(folder->mfile, 0L, SEEK_END);
  fputs("\n", folder->mfile);
  sendNotifications2(rdf, RDF_ASSERT_NOTIFY, msg->r, gCoreVocab->RDF_parent, folder->top, 
                     RDF_RESOURCE_TYPE, 1);       
}
Пример #12
0
void 
RDF_StartMessageDelivery (RDFT rdf)
{
  MF folder = (MF) rdf->pdata;
  MM msg    = (MM) getMem(sizeof(struct MailMessage));
  char* nurl = getMem(100);
  fseek(folder->mfile, 0L, SEEK_END);
  fprintf(folder->mfile, "From - \n");
  msg->offset = ftell(folder->mfile);
  sprintf(nurl, "%s?%i", rdf->url, msg->offset);
  msg->r = RDF_GetResource(NULL, nurl, 1);
  msg->r->pdata = msg;
  msg->flags = getMem(4);
  folder->add = msg;
  setResourceType(msg->r, PM_RT); 
  fseek(folder->mfile, 0L, SEEK_END);
  fputs("X-Mozilla-Status: 0000\n", folder->mfile);
}
Пример #13
0
RDF_Resource
hostUnitOfURL (RDF r, RDF_Resource top, RDF_Resource nu, char* title)
{
  char host[100];
  char* url =  resourceID(nu);
  int16 s1, s2, s3;
  RDF_Resource hostResource, existing;
  if (strlen(url) > 100) return NULL;
  if (startsWith("file", url)) {
    return RDF_GetResource(NULL, "Local Files", 1);
  } else { 
    memset(host, '\0', 100);
    s1 = charSearch(':', url)+3;
    s2 = charSearch('/', &url[s1]);
    s3 = charSearch(':', &url[s1]);
    if (s2 == -1) s2 = strlen(url)-s1;
    if ((s3 != -1) && (s2 > s3)) s2 = s3;
    if (startsWith("www", &url[s1])) {s1 = s1+4; s2 = s2-4;}
    if (s2<1) return(NULL);
    memcpy((char*)host, &url[s1], s2);
    host[0] = toupper(host[0]);
    hostResource = RDF_GetResource(NULL, host, 1);
    setContainerp(hostResource, 1);
    setResourceType(hostResource, HISTORY_RT);
    existing = PL_HashTableLookup(hostHash, hostResource);
    if (existing != NULL) {
      if (existing == nu) {
	return existing;
      } else if (existing == top) {
	return hostResource;
      } else {
	remoteStoreRemove(gRemoteStore, existing, gCoreVocab->RDF_parent, top, RDF_RESOURCE_TYPE);
	histAddParent(existing, hostResource);
	histAddParent(hostResource, top);
	PL_HashTableAdd(hostHash, hostResource, top);
	return hostResource;
      }
    } else {
	PL_HashTableAdd(hostHash, hostResource, nu);
	histAddParent(nu, top);
	return nu;
    }
  }
}
Пример #14
0
void
parseNextESFTPLine (RDFFile f, char* line)
{
  int16 i1, i2;
  char url[100];
  RDF_Resource ru;
  PRBool directoryp;
   
  if (f->fileType == FTP_RT) {
	  if (!startsWith("201", line)) return;
	  line = &line[5];
  }
  i1 = charSearch(' ', line);
  if (i1 == -1) return;
  i2 = charSearch(' ', &line[i1+1]) + i1 + 1;
  line[i1] = '\0';
  directoryp = 0;
  if (strlen(line) > 64) return;
  if (resourceType(f->top) == ES_RT) {
    directoryp = startsWith("Director", &line[i1+1]);
     sprintf(url, "nes:%s%s%s", f->url, line, (directoryp ? "/" : ""));
  } else {
    int i3 = charSearch(' ', &line[i1+i2+1]);
    directoryp = startsWith("Directory", &line[i1+i2+i3+2]);

/* this is bad as files can be of zero-length!
    if ((charSearch('.', line) ==-1) && (startsWith("0", &line[i1+1]))) directoryp = 1;
*/

    sprintf(url, "%s%s%s", f->url, line, (directoryp ? "/" : ""));
   }
  ru = RDF_GetResource(NULL, url, 1);
  setResourceType(ru, resourceType(f->top));
  if (directoryp) setContainerp(ru, 1);
/*
  remoteStoreAdd(gRemoteStore, ru, gCoreVocab->RDF_name, NET_UnEscape(line), RDF_STRING_TYPE, 1);
*/
  remoteStoreAdd(gRemoteStore, ru, gCoreVocab->RDF_parent, f->top, RDF_RESOURCE_TYPE, 1);
}
Пример #15
0
PRBool
MoveMessage (char* to, char* from, MM message) {
  RDFT todb = getBFTranslator(to);
  RDFT fromdb = getBFTranslator(from);
  MF tom = todb->pdata;
  MF fom = fromdb->pdata;
  RDF_Resource r;
  MM newMsg = (MM)getMem(sizeof(struct MailMessage));
  char* buffer = getMem(BUFF_SIZE);
  if (!buffer) return 0;
  setMessageFlag(fromdb, message->r, "0008"); 
  fseek(tom->mfile, 0L, SEEK_END);
  fseek(fom->mfile, message->offset, SEEK_SET);
  fputs("From -\n", tom->mfile);
  sprintf(buffer, "mailbox://%s?%d", &to[17], ftell(tom->mfile));
  r = RDF_GetResource(NULL, buffer, 1);
  newMsg->subject = copyString(message->subject);
  newMsg->from = copyString(message->from);
  newMsg->date = copyString(message->date);
  newMsg->r = r;
  r->pdata = newMsg;
  setResourceType(r, PM_RT);        
  newMsg->summOffset = -1;
  newMsg->offset = ftell(tom->mfile);
  writeMsgSum(tom, newMsg);
  addMsgToFolder (tom, newMsg) ;
  fflush(tom->sfile);
  while (fgets(buffer, BUFF_SIZE, fom->mfile) && strncmp("From ", buffer, 5)) {
    fputs(buffer, tom->mfile);
  }
  sendNotifications2(todb, RDF_ASSERT_NOTIFY, r, gCoreVocab->RDF_parent, tom->top, 
                     RDF_RESOURCE_TYPE, 1);       
  sendNotifications2(fromdb, RDF_DELETE_NOTIFY, message->r, gCoreVocab->RDF_parent, fom->top, 
                     RDF_RESOURCE_TYPE, 1);       
  freeMem(buffer);
  return 1;
}
Пример #16
0
void
readSummaryFile (RDFT rdf)
{
  if (startsWith("mailbox://", rdf->url)) {
    char* url = rdf->url;
    char* folderURL = &url[10];
	int32 flen = strlen(profileDirURL) + strlen(folderURL) + 4;
    char* fileurl = getMem(flen);
    char* nurl = getMem(strlen(url) + 20);
    FILE *f; 
    char* buff = getMem(BUFF_SIZE);
    MF folder = (MF) getMem(sizeof(struct MailFolder));
    MM msg = NULL;
    FILE *mf;
    char* aclen;
     
	rdf->pdata = folder;
    sprintf(fileurl, "%s%s.ssf",  profileDirURL, folderURL);
    fileurl = MCDepFileURL(fileurl);
    f = openPMFile(fileurl);
    sprintf(fileurl, "%s%s",  profileDirURL, folderURL);
	fileurl = MCDepFileURL(fileurl);
    mf = openPMFile(fileurl);
    folder->top = RDF_GetResource(NULL, rdf->url, 1);
	setResourceType(folder->top, PM_RT);    
    setContainerp(folder->top, 1); 
    folder->top->pdata = folder;
    folder->rdf = rdf;
    folder->sfile = f;
    folder->mfile = mf;

    while (f && fgets(buff, BUFF_SIZE, f)) {
      if (startsWith("Status:", buff)) {
        msg = (MM) getMem(sizeof(struct MailMessage));
        msg->flags = stripCopy(&buff[8]);
        fgets(buff, BUFF_SIZE, f);
        sscanf(&buff[9], "%d", &msg->summOffset);
        fgets(buff, BUFF_SIZE, f);
        msg->from = stripCopy(&buff[6]);
        fgets(buff, BUFF_SIZE, f);
        msg->subject = stripCopy(&buff[8]);
        fgets(buff, BUFF_SIZE, f);
        msg->date = stripCopy(&buff[6]);
        fgets(buff, BUFF_SIZE, f);
        sscanf(&buff[9], "%d", &msg->offset);
        sprintf(nurl, "%s?%d", url, msg->offset);
        msg->r = RDF_GetResource(NULL, nurl, 1);
        msg->r->pdata = msg;
        addMsgToFolder (folder, msg) ; 
        setResourceType(msg->r, PM_RT);        
      }
    }

    if (msg == NULL) {
      /* either a new mailbox or need to read BMF to recreate */
      while (mf && fgets(buff, BUFF_SIZE, mf)) {
        if (strncmp("From ", buff, 5) ==0)  { 
          if (msg) writeMsgSum(folder, msg);
          msg = (MM) getMem(sizeof(struct MailMessage));
          msg->offset = ftell(mf);
          msg->summOffset = -1;
          sprintf(nurl, "%s?%i", url, msg->offset);
          msg->r = RDF_GetResource(NULL, nurl, 1); 
          msg->r->pdata = msg;
          setResourceType(msg->r, PM_RT);
		  addMsgToFolder (folder, msg) ;
        }
        if ((!msg->from) && (startsWith("From:", buff))) {
          msg->from = stripCopy(&buff[6]); 
        } else if ((!msg->date) && (startsWith("Date:", buff))) {
          msg->date = stripCopy(&buff[6]);
        } else if ((!msg->subject) && (startsWith("Subject:", buff))) {
          msg->subject = stripCopy(&buff[8]);
        } else if ((!msg->flags) && (startsWith("X-Mozilla-Status:", buff))) {
          msg->flags = stripCopy(&buff[17]);
        }        
      }
      if (msg) writeMsgSum(folder, msg);
      if (folder->sfile) fflush(folder->sfile);
    }
	memset(fileurl, '\0', flen);
	memcpy(fileurl, rdf->url, strlen(rdf->url));
    aclen = strchr(&fileurl[10], '/');
	fileurl[aclen-fileurl] = '\0';
	strcat(fileurl, "/trash"); 
    folder->trash = fileurl;
    freeMem(buff);
    freeMem(nurl);
    /* GetPopToRDF(rdf); */
  }
}
Пример #17
0
NewResourceAssistant::NewResourceAssistant(ResourceModel* resourceModel, QWidget* parent) :
    KAssistantDialog(parent),
    m_resourceModel(resourceModel),
    m_resourceTypesWidget(new ResourceTypesWidget(this)),
    m_newCourseWidget(new NewCourseWidget(m_resourceModel, this)),
    m_newKeyboardLayoutWidget(new NewKeyboardLayoutWidget(m_resourceModel, this)),
    m_resourceTemplateWidget(new ResourceTemplateWidget(m_resourceModel, this))
{
    setWindowTitle(i18n("New"));

    m_resourceTypesPage = addPage(m_resourceTypesWidget, i18n("New..."));
    setValid(m_resourceTypesPage, false);

    m_newCoursePage = addPage(m_newCourseWidget, i18n("New course"));
    setValid(m_newCoursePage, false);
    setAppropriate(m_newCoursePage, false);

    m_newKeyboardLayoutPage = addPage(m_newKeyboardLayoutWidget, i18n("New keyboard layout"));
    setValid(m_newKeyboardLayoutPage, false);
    setAppropriate(m_newKeyboardLayoutPage, false);

    m_resourceTemplatePage = addPage(m_resourceTemplateWidget, i18n("Template"));
    setValid(m_resourceTemplatePage, false);

    connect(m_resourceTypesWidget, SIGNAL(typeSelected(ResourceModel::ResourceItemType)), SLOT(setResourceType(ResourceModel::ResourceItemType)));
    connect(m_newCourseWidget, SIGNAL(isValidChanged()), SLOT(updateNewCoursePageValidity()));
    connect(m_newKeyboardLayoutWidget, SIGNAL(isValidChanged()), SLOT(updateNewKeyboardLayoutPageValidity()));
    connect(m_resourceTemplateWidget, SIGNAL(isValidChanged()), SLOT(updateResourceTemplatePageValidity()));
}
Пример #18
0
void
possiblyAccessldap(RDFT rdf, RDF_Resource u, RDF_Resource s, PRBool inversep)
{
  /** try to get the values of u.s from the directory **/

	LDAP		*ld;
	LDAPMessage	*result=NULL, *entry;
	LDAPURLDesc	*ldURL=NULL;
	RDF_Resource	node;
	char		*attrs[2], **vals;
	int		err, i;
	char		*title = NULL;

	/*
		Note: a labeledURI is a url followed by an optional [space title-string]
         */

  if (!stringEquals(resourceID(s), resourceID(gCoreVocab->RDF_parent)) || (!inversep) || (!ldap_is_ldap_url(resourceID(u))))	return;

  ldap_url_parse(resourceID(u), &ldURL);
  if (ldURL == NULL)	return;
  ld = ldap_init (ldURL->lud_host, ldURL->lud_port);
  if (ld == NULL)
	{
	ldap_free_urldesc(ldURL);
	return;
	}
  if ((err = ldap_simple_bind_s(ld, NULL, NULL)) != LDAP_SUCCESS)
	{
	ldap_unbind(ld);
	ldap_free_urldesc(ldURL);
	return;
	}

  attrs[0] = "labeledURI";
  attrs[1] = NULL;

  err = ldap_search_s(ld, ldURL->lud_dn, LDAP_SCOPE_BASE, ldURL->lud_filter, attrs, 0, &result);
  if (err == LDAP_SUCCESS)
	{
	for (entry=ldap_first_entry(ld, result); entry!=NULL; entry=ldap_next_entry(ld, entry))
		{
		if ((vals = ldap_get_values(ld, entry, attrs[0])) != NULL)
		{
			for (i=0; vals[i] != NULL; i++)
			{
				/* vals[i] has a URL... add into RDF graph */

/*
				if (((title = strstr(vals[i], " ")) != NULL)
					&& (*(title+1) != '\0'))
				{
					*(++title) = '\0';
				}
				else
				{
					title = NULL;
				}
*/
				if ((node = RDF_Create(vals[i], true)) != NULL)
				{
					setResourceType(node, LDAP_RT);
					if (ldapContainerp(node) == true)
					{
						setContainerp(node, 1);
					}

					ldapDBAdd(rdf, node, gCoreVocab->RDF_parent,
							u, RDF_RESOURCE_TYPE);

					if (title != NULL)
					{
						ldapDBAdd(rdf, node, gCoreVocab->RDF_name,
							title, RDF_STRING_TYPE);
					}
				}
			}
			ldap_value_free(vals);
			}
		}
	}
  if (result != NULL)
	{
	ldap_msgfree(result);
	}
  ldap_unbind(ld);
  ldap_free_urldesc(ldURL);
}
Пример #19
0
RDF_Resource
hostUnitOfDate (RDF r, RDF_Resource u, time_t lastAccessDate)
{
	RDF_Resource		node = NULL, parentNode;
/*
	RDF_Resources		std;
*/
	time_t			now, tempTime;
	struct tm		*T,nowStruct, dateStruct;
	char			hourBuffer[128], dayBuffer[128], weekBuffer[128];
	char			bigBuffer[1024];
	int			numDays;

	/* NOTE: localtime uses a single static buffer, so MUST copy contents out */

	time((time_t *)&now);
	if ((T = localtime(&now)) == NULL)	return(NULL);
	nowStruct = *T;

	if ((T = localtime(&lastAccessDate)) == NULL)	return(NULL);
	dateStruct = *T;

	bigBuffer[0] = hourBuffer[0] = dayBuffer[0] = weekBuffer[0] = 0;

	if (now < (lastAccessDate + SECS_IN_HOUR))		/* within the last hour */
	{
		strcpy(hourBuffer, XP_GetString(RDF_WITHINLASTHOUR));
	}
	else if ((nowStruct.tm_year == dateStruct.tm_year) &&	/* some time today */
		(nowStruct.tm_yday == dateStruct.tm_yday))
	{
		strcpy(dayBuffer, XP_GetString(RDF_TODAY));
		hourRange(hourBuffer, &dateStruct);
	}
	else							/* check if within last week */
	{
		numDays = 7;
		do
		{
			now -= SECS_IN_DAY;
			if ((T = localtime(&now)) == NULL)	return(NULL);
			nowStruct = *T;
			if ((nowStruct.tm_year == dateStruct.tm_year) &&
				(nowStruct.tm_yday == dateStruct.tm_yday))
			{
				sprintf(dayBuffer, "%d/%d - %s",
					(uint) dateStruct.tm_mon + 1,	(uint)dateStruct.tm_mday,
					XP_GetString(RDF_DAY_0 + nowStruct.tm_wday));
				hourRange(hourBuffer, &dateStruct);
				break;
			}
		} while (numDays-- > 0);

		if (dayBuffer[0] == '\0')				/* older than a week */
		{
			tempTime = lastAccessDate;
			numDays = dateStruct.tm_wday;
			while (numDays-- > 0)
			{
				tempTime -= SECS_IN_DAY;
			}
			if ((T = localtime(&tempTime)) == NULL)	return(NULL);
			dateStruct = *T;
#ifdef	XP_MAC
			/* Mac epoch according to localtime is 1904 */
			PR_snprintf(weekBuffer, sizeof(weekBuffer)-1, XP_GetString(RDF_WEEKOF), (uint)dateStruct.tm_mon + 1,
				(int)dateStruct.tm_mday, (uint)dateStruct.tm_year + 1904);
#else
			PR_snprintf(weekBuffer, sizeof(weekBuffer)-1, XP_GetString(RDF_WEEKOF), (uint)dateStruct.tm_mon + 1,
				(int)dateStruct.tm_mday, (uint)dateStruct.tm_year + 1900);
#endif

			if ((T = localtime(&lastAccessDate)) == NULL)	return(NULL);
			dateStruct = *T;

#ifdef	XP_MAC
			/* Mac epoch according to localtime is 1904 */
			sprintf(dayBuffer, "%s - %d/%d/%d",
				XP_GetString(RDF_DAY_0 + dateStruct.tm_wday), (uint) dateStruct.tm_mon + 1,
				(uint)dateStruct.tm_mday, (uint)dateStruct.tm_year + 1904);
#else
			sprintf(dayBuffer, "%s - %d/%d/%d",
				XP_GetString(RDF_DAY_0 + dateStruct.tm_wday), (uint) dateStruct.tm_mon + 1,
				(uint)dateStruct.tm_mday, (uint)dateStruct.tm_year + 1900);
#endif
			hourRange(hourBuffer, &dateStruct);
		}
	}
	parentNode = u;

	if (weekBuffer[0] != '\0')
	{
		if ((node = RDF_GetResource(NULL, weekBuffer, false)) == NULL)
		{
			if ((node = RDF_GetResource(NULL, weekBuffer, true)) == NULL)	return(NULL);
		}
		setContainerp(node, 1);
		setResourceType(node, HISTORY_RT);
		remoteStoreAdd(gRemoteStore, node, gCoreVocab->RDF_parent,
				parentNode, RDF_RESOURCE_TYPE, 1);
		remoteStoreAdd(gRemoteStore, node, gCoreVocab->RDF_name,
				copyString(weekBuffer), RDF_STRING_TYPE, 1);
		parentNode = node;
	}
	if (dayBuffer[0] != '\0')
	{
	  sprintf(bigBuffer, "%d/%d",  (uint) dateStruct.tm_mon + 1,
		  (uint)dateStruct.tm_mday);


		if ((node = RDF_GetResource(NULL, bigBuffer, false)) == NULL)
		{
			if ((node = RDF_GetResource(NULL, bigBuffer, true)) == NULL)	return(NULL);
		}
		setContainerp(node, 1);
		setResourceType(node, HISTORY_RT);
		histAddParent(node, parentNode);
		sprintf(bigBuffer,"%s - %s",weekBuffer,dayBuffer);
		remoteStoreAdd(gRemoteStore, node, gCoreVocab->RDF_name,
				copyString(dayBuffer), RDF_STRING_TYPE, 1);
		parentNode = node;
	}
	if (hourBuffer[0] == 'W')
	{
		sprintf(bigBuffer, "%s", hourBuffer);

		if ((node = RDF_GetResource(NULL, bigBuffer, false)) == NULL)
		{
			if ((node = RDF_GetResource(NULL, bigBuffer, true)) == NULL)	return(NULL);
		}
		setContainerp(node, 1);
		setResourceType(node, HISTORY_RT);
		remoteStoreAdd(gRemoteStore, node, gCoreVocab->RDF_parent,
				parentNode, RDF_RESOURCE_TYPE, 1);
		remoteStoreAdd(gRemoteStore, node, gCoreVocab->RDF_name,
				copyString(hourBuffer), RDF_STRING_TYPE, 1);
		parentNode = node;
	}
	return (node);
}