/* ** this function returns a pointer to the leftmost element if ele is NULL, ** and to the next object to the right otherways. ** If no elements left, returns a pointer to NULL. */ PUBLIC HTBTElement * HTBTree_next(HTBTree * tree, HTBTElement * element) { HTBTElement * father_of_element; HTBTElement * father_of_forefather; if (!element) { father_of_element = tree->top; if (father_of_element != NULL) while (father_of_element->left != NULL) father_of_element = father_of_element->left; } else { father_of_element = element; if (father_of_element->right != NULL) { father_of_element = father_of_element->right; while (father_of_element->left != NULL) father_of_element = father_of_element->left; } else { father_of_forefather = father_of_element->up; while (father_of_forefather && (father_of_forefather->right == father_of_element)) { father_of_element = father_of_forefather; father_of_forefather = father_of_element->up; } father_of_element = father_of_forefather; } } #if 0 /* The option -DBTREE_TRACE will give much more information ** about the way the process is running, for debugging matters */ if (father_of_element != NULL) { HTTrace("\nObject = %s\t",(char *)father_of_element->object); if (father_of_element->up != NULL) HTTrace("Objet du pere = %s\n", (char *)father_of_element->up->object); else HTTrace("Pas de Pere\n"); if (father_of_element->left != NULL) HTTrace("Objet du fils gauche = %s\t", (char *)father_of_element->left->object); else HTTrace("Pas de fils gauche\t"); if (father_of_element->right != NULL) HTTrace("Objet du fils droit = %s\n", (char *)father_of_element->right->object); else HTTrace("Pas de fils droit\n"); HTTrace("Profondeur gauche = %i\t",father_of_element->left_depth); HTTrace("Profondeur droite = %i\n",father_of_element->right_depth); HTTrace(" **************\n"); } #endif return father_of_element; }
PUBLIC void HTDebugBreak (char * file, unsigned long line, const char * fmt, ...) { va_list pArgs; va_start(pArgs, fmt); HTTrace("%s:%ld ", file ? file : "", line); HTTrace(fmt, pArgs); #ifdef WWW_MSWINDOWS DebugBreak(); #else /* WWW_MSWINDOWS */ abort(); #endif /* !WWW_MSWINDOWS */ return; }
void HText_beginAnchor (HText * text, HTChildAnchor * anchor) { TextAnchor * a; if (text && anchor) { Robot * mr = (Robot *) HTRequest_context(text->request); HTAnchor * dest = HTAnchor_followMainLink((HTAnchor *) anchor); HTParentAnchor * dest_parent = HTAnchor_parent(dest); char * uri = HTAnchor_address((HTAnchor *) dest_parent); #if 0 if (SHOW_MSG) HTTrace("Robot....... Found `%s\' \n", uri ? uri : "NULL"); #endif if (uri) { HTList_addObject(mr->urilist, (void *) uri); mr->count++; } if ((a = (TextAnchor *) HT_MALLOC(sizeof(*a))) == NULL) HT_OUTOFMEM("HText_beginAnchor"); if (text->last_anchor) { text->last_anchor->next = a; } else { text->first_anchor = a; } a->next = 0; a->anchor = anchor; text->last_anchor = a; if (HTAnchor_followMainLink((HTAnchor*)anchor)) { a->number = ++(text->anchors); } else { a->number = 0; } } }
/* return whether to give up the ghost */ #if 0 /* obsolete */ PUBLIC BOOL warn(CSParse_t * pCSParse, Message_t message, ...) { va_list list; char space[257]; char ** messages = CSParse_getMessages(); HTAlertCallback *cbf = HTAlert_find(HT_A_CONFIRM); va_start(list, message); if (message >= message_COUNT) { HTTrace("Yous got a error\n"); return YES; } vsprintf(space, messages[message], list); va_end(list); HTTrace(space); HTTrace("\n"); if (cbf && (*cbf)(0, HT_A_CONFIRM, HT_MSG_RULES, NULL, NULL, NULL)) return NO; return YES; }
void HText_appendImage (HText * text, HTChildAnchor * anchor, const char *alt, const char * align, BOOL isMap) { if (text && anchor) { HTParentAnchor * dest = (HTParentAnchor *) HTAnchor_followMainLink((HTAnchor *) anchor); char * uri = HTAnchor_address((HTAnchor *) dest); if (SHOW_MSG) { HTTrace("Image %s", uri); } HT_FREE(uri); } }
main () /****************************************************** ** This is just a test to show how to handle HTBTree.c */ { HTBTree * tree; HTBTElement * next_element; tree = HTBTree_new((HTComparer)strcasecomp); HTBTree_add(tree,"hypertext"); HTBTree_add(tree,"Addressing"); HTBTree_add(tree,"X11"); HTBTree_add(tree,"Tools"); HTBTree_add(tree,"Proposal.wn"); HTBTree_add(tree,"Protocols"); HTBTree_add(tree,"NeXT"); HTBTree_add(tree,"Daemon"); HTBTree_add(tree,"Test"); HTBTree_add(tree,"Administration"); HTBTree_add(tree,"LineMode"); HTBTree_add(tree,"DesignIssues"); HTBTree_add(tree,"MarkUp"); HTBTree_add(tree,"Macintosh"); HTBTree_add(tree,"Proposal.rtf.wn"); HTBTree_add(tree,"FIND"); HTBTree_add(tree,"Paper"); HTBTree_add(tree,"Tcl"); HTBTree_add(tree,"Talks"); HTBTree_add(tree,"Architecture"); HTBTree_add(tree,"VMSHelp"); HTBTree_add(tree,"Provider"); HTBTree_add(tree,"Archive"); HTBTree_add(tree,"SLAC"); HTBTree_add(tree,"Project"); HTBTree_add(tree,"News"); HTBTree_add(tree,"Viola"); HTBTree_add(tree,"Users"); HTBTree_add(tree,"FAQ"); HTBTree_add(tree,"WorkingNotes"); HTBTree_add(tree,"Windows"); HTBTree_add(tree,"FineWWW"); HTBTree_add(tree,"Frame"); HTBTree_add(tree,"XMosaic"); HTBTree_add(tree,"People"); HTBTree_add(tree,"All"); HTBTree_add(tree,"Curses"); HTBTree_add(tree,"Erwise"); HTBTree_add(tree,"Carl"); HTBTree_add(tree,"MidasWWW"); HTBTree_add(tree,"XPM"); HTBTree_add(tree,"MailRobot"); HTBTree_add(tree,"Illustrations"); HTBTree_add(tree,"VMClient"); HTBTree_add(tree,"XPA"); HTBTree_add(tree,"Clients.html"); HTBTree_add(tree,"Library"); HTBTree_add(tree,"CERNLIB_Distribution"); HTBTree_add(tree,"libHTML"); HTBTree_add(tree,"WindowsPC"); HTBTree_add(tree,"tkWWW"); HTBTree_add(tree,"tk2.3"); HTBTree_add(tree,"CVS-RCS"); HTBTree_add(tree,"DecnetSockets"); HTBTree_add(tree,"SGMLStream"); HTBTree_add(tree,"NextStep"); HTBTree_add(tree,"CVSRepository_old"); HTBTree_add(tree,"ArthurSecret"); HTBTree_add(tree,"CVSROOT"); HTBTree_add(tree,"HytelnetGate"); HTBTree_add(tree,"cern.www.new.src"); HTBTree_add(tree,"Conditions"); HTBTree_add(tree,"HTMLGate"); HTBTree_add(tree,"Makefile"); HTBTree_add(tree,"Newsgroups.html"); HTBTree_add(tree,"People.html"); HTBTree_add(tree,"Bugs.html"); HTBTree_add(tree,"Summary.html"); HTBTree_add(tree,"zDesignIssues.wn"); HTBTree_add(tree,"HT.draw"); HTBTree_add(tree,"HTandCERN.wn"); HTBTree_add(tree,"Ideas.wn"); HTBTree_add(tree,"MarkUp.wn"); HTBTree_add(tree,"Proposal.html"); HTBTree_add(tree,"SearchPanel.draw"); HTBTree_add(tree,"Comments.wn"); HTBTree_add(tree,"Xanadu.html"); HTBTree_add(tree,"Storinglinks.html"); HTBTree_add(tree,"TheW3Book.html"); HTBTree_add(tree,"Talk_Feb-91.html"); HTBTree_add(tree,"JFosterEntry.txt"); HTBTree_add(tree,"Summary.txt"); HTBTree_add(tree,"Bibliography.html"); HTBTree_add(tree,"HTandCern.txt"); HTBTree_add(tree,"Talk.draw"); HTBTree_add(tree,"zDesignNotes.html"); HTBTree_add(tree,"Link.html"); HTBTree_add(tree,"Status.html"); HTBTree_add(tree,"http.txt"); HTBTree_add(tree,"People.html~"); HTBTree_add(tree,"TAGS"); HTBTree_add(tree,"summary.txt"); HTBTree_add(tree,"Technical.html"); HTBTree_add(tree,"Terms.html"); HTBTree_add(tree,"JANETAccess.html"); HTBTree_add(tree,"People.txt"); HTBTree_add(tree,"README.txt"); HTBTree_add(tree,"CodingStandards.html"); HTBTree_add(tree,"Copyright.txt"); HTBTree_add(tree,"Status_old.html"); HTBTree_add(tree,"patches~"); HTBTree_add(tree,"RelatedProducts.html"); HTBTree_add(tree,"Implementation"); HTBTree_add(tree,"History.html"); HTBTree_add(tree,"Makefile.bak"); HTBTree_add(tree,"Makefile.old"); HTBTree_add(tree,"Policy.html"); HTBTree_add(tree,"WhatIs.html"); HTBTree_add(tree,"TheProject.html"); HTBTree_add(tree,"Notation.html"); HTBTree_add(tree,"Helping.html"); HTBTree_add(tree,"Cyber-WWW.sit.Hqx"); HTBTree_add(tree,"Glossary.html"); HTBTree_add(tree,"maketags.html"); HTBTree_add(tree,"IntroCS.html"); HTBTree_add(tree,"Contrib"); HTBTree_add(tree,"Help.html"); HTBTree_add(tree,"CodeManagExec"); HTBTree_add(tree,"HT-0.1draz"); HTBTree_add(tree,"Cello"); HTBTree_add(tree,"TOPUB"); HTBTree_add(tree,"BUILD"); HTBTree_add(tree,"BUILDALL"); HTBTree_add(tree,"Lynx"); HTBTree_add(tree,"ArthurLibrary"); HTBTree_add(tree,"RashtyClient"); HTBTree_add(tree,"#History.html#"); HTBTree_add(tree,"PerlServers"); HTBTree_add(tree,"modules"); HTBTree_add(tree,"NCSA_httpd"); HTBTree_add(tree,"MAIL2HTML"); HTBTree_add(tree,"core"); HTBTree_add(tree,"EmacsWWW"); HTTrace("\nTreeTopObject=%s\n\n",tree->top->object); next_element = HTBTree_next(tree,NULL); while (next_element != NULL) { HTTrace("The next element is %s\n",next_element->object); next_element = HTBTree_next(tree,next_element); } HTBTree_free (tree); }