Changeset 404 for trunk/gsdl/src
- Timestamp:
- 1999-07-20T14:58:16+12:00 (25 years ago)
- Location:
- trunk/gsdl/src/recpt
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl/src/recpt/browsetools.cpp
r344 r404 12 12 /* 13 13 $Log$ 14 Revision 1.14 1999/07/20 02:58:15 sjboddie 15 got List and AZList classifications using format strings - tidied 16 up a bit 17 14 18 Revision 1.13 1999/07/07 05:44:25 sjboddie 15 19 Made some changes to allow for new way classifiers work (i.e. you can … … 71 75 #include "browsetools.h" 72 76 #include "OIDtools.h" 77 #include "formattools.h" 73 78 74 79 … … 78 83 // AZList containing a Hierarchy classification as used by hdl's 'magazine' 79 84 // section). It really needs redesigning to handle all cases. 85 86 87 88 // simply checks to see if formatstring begins with a <td> tag 89 static bool is_table_content (const text_t &formatstring) { 90 text_t::const_iterator here = formatstring.begin(); 91 text_t::const_iterator end = formatstring.end(); 92 93 while (here != end) { 94 if (*here != ' ') { 95 if (*here == '<') { 96 if ((*(here+1) == 't' || *(here+1) == 'T') && 97 (*(here+2) == 'd' || *(here+2) == 'D') && 98 (*(here+3) == '>' || *(here+3) == ' ')) 99 return true; 100 } else return false; 101 } 102 here ++; 103 } 104 return false; 105 } 106 107 108 // output_controls displays the detach, expand/contract contents, 109 // expand/contract text and highlighting/no highlighting buttons 110 // and the warning if expanded text is going to be large 111 static void output_controls (cgiargsclass &args, recptproto *collectproto, 112 displayclass &disp, outconvertclass &outconvert, 113 ostream &textout, ostream &logout) { 114 115 if (args["u"] != "1") { 116 117 FilterResponse_t response; 118 text_tarray metadata; 119 text_t top; 120 get_top (args["d"], top); 121 122 text_tarray buttons; 123 124 // detach button 125 buttons.push_back ("_document:imagedetach_"); 126 127 // highlighting button 128 if (args["hl"] == "1") 129 buttons.push_back ("_document:imagenohighlight_"); 130 else 131 buttons.push_back ("_document:imagehighlight_"); 132 133 // expand/contract contents button - only have this if it's 134 // a Hierarchy type toc 135 metadata.push_back ("classifytype"); 136 if (get_info (top, args["c"], metadata, false, collectproto, response, logout)) { 137 if (response.docInfo[0].metadata[0].values[0] == "Hierarchy") 138 if (args["gc"] == "1") 139 buttons.push_back ("_document:imagecontracttoc_"); 140 else 141 buttons.push_back ("_document:imageexpandtoc_"); 142 } 143 144 // expand/contract text button 145 if (args.getintarg("gt")) 146 buttons.push_back ("_document:imagecontracttext_"); 147 else 148 buttons.push_back ("_document:imageexpandtext_"); 149 150 text_tarray::const_iterator here = buttons.begin(); 151 text_tarray::const_iterator end = buttons.end(); 152 int count = 0; 153 while (here != end) { 154 if ((count != 0) && ((count % 3) == 0)) textout << "<br>\n"; 155 textout << outconvert << disp << *here; 156 count ++; 157 here ++; 158 } 159 } 160 } 161 80 162 81 163 … … 88 170 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ 89 171 90 void book_toc (const text_t &/*classifytitle*/, cgiargsclass &args, 91 recptproto *collectproto, displayclass &disp, 92 outconvertclass &outconvert, ostream &textout, 93 ostream &logout) { 172 void book_toc (cgiargsclass &args, recptproto *collectproto, 173 displayclass &disp, outconvertclass &outconvert, 174 ostream &textout, ostream &logout) { 94 175 95 176 if (args["d"].empty()) return; … … 185 266 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ 186 267 187 void hierarchy_toc (const text_t &classifytype, const text_t &/*classifytitle*/, 268 // prototypes 269 270 static void output_hierarchy (const text_t &classifytype, cgiargsclass &args, 271 recptproto *collectproto, displayclass &disp, 272 outconvertclass &outconvert, ostream &textout, 273 ostream &logout); 274 static void output_contracted_hierarchy_toc (const text_t &classifytype, cgiargsclass &args, 275 recptproto *collectproto,displayclass &disp, 276 outconvertclass &outconvert, ostream &textout, 277 ostream &logout); 278 static void output_expanded_hierarchy_toc (cgiargsclass &args, recptproto *collectproto, 279 displayclass &disp, outconvertclass &outconvert, 280 ostream &textout, ostream &logout); 281 static void output_parents_toc (cgiargsclass &args, const text_tarray &parents, 282 int &tabcount, int &colnum, displayclass &disp, 283 recptproto *collectproto, outconvertclass &outconvert, 284 ostream &textout, ostream &logout); 285 static void output_siblings_toc (cgiargsclass &args, const FilterResponse_t &siblings, 286 int &tabcount, int &colnum, displayclass &disp, 287 outconvertclass &outconvert, ostream &textout, ostream &logout); 288 static void output_cover_image (cgiargsclass &args, recptproto *collectproto, 289 displayclass &disp, outconvertclass &outconvert, 290 ostream &textout, ostream &logout); 291 292 293 void hierarchy_toc (const text_t &classifytype, 188 294 cgiargsclass &args, recptproto *collectproto, 189 295 displayclass &disp, outconvertclass &outconvert, … … 238 344 } 239 345 240 // output_controls displays the detach, expand/contract contents,241 // expand/contract text and highlighting/no highlighting buttons242 // and the warning if expanded text is going to be large243 void output_controls (cgiargsclass &args, recptproto *collectproto,244 displayclass &disp, outconvertclass &outconvert,245 ostream &textout, ostream &logout) {246 247 if (args["u"] != "1") {248 249 FilterResponse_t response;250 text_tarray metadata;251 text_t top;252 get_top (args["d"], top);253 254 text_tarray buttons;255 256 // detach button257 buttons.push_back ("_document:imagedetach_");258 259 // highlighting button260 if (args["hl"] == "1")261 buttons.push_back ("_document:imagenohighlight_");262 else263 buttons.push_back ("_document:imagehighlight_");264 265 // expand/contract contents button - only have this if it's266 // a Hierarchy type toc267 metadata.push_back ("classifytype");268 if (get_info (top, args["c"], metadata, false, collectproto, response, logout)) {269 if (response.docInfo[0].metadata[0].values[0] == "Hierarchy")270 if (args["gc"] == "1")271 buttons.push_back ("_document:imagecontracttoc_");272 else273 buttons.push_back ("_document:imageexpandtoc_");274 }275 276 // expand/contract text button277 if (args.getintarg("gt"))278 buttons.push_back ("_document:imagecontracttext_");279 else280 buttons.push_back ("_document:imageexpandtext_");281 282 text_tarray::const_iterator here = buttons.begin();283 text_tarray::const_iterator end = buttons.end();284 int count = 0;285 while (here != end) {286 if ((count != 0) && ((count % 3) == 0)) textout << "<br>\n";287 textout << outconvert << disp << *here;288 count ++;289 here ++;290 }291 }292 }293 294 346 295 347 void output_contracted_hierarchy_toc (const text_t &classifytype, cgiargsclass &args, … … 302 354 FilterResponse_t siblings; 303 355 FilterResponse_t response; 356 bool getParents = false; 304 357 305 358 text_t &arg_d = args["d"]; … … 315 368 if (has_children (arg_cl, args["c"], collectproto, logout)) { 316 369 get_parents_array (arg_cl + ".fc", parents); 317 if (!get_children (arg_cl, args["c"], metadata, 370 371 if (!get_children (arg_cl, args["c"], metadata, getParents, 318 372 collectproto, siblings, logout)) 319 373 return; … … 321 375 get_parents_array (arg_cl, parents); 322 376 if (!get_children (arg_cl + ".pr", args["c"], metadata, 323 collectproto, siblings, logout))377 getParents, collectproto, siblings, logout)) 324 378 return; 325 379 } … … 334 388 if (has_children (arg_d, args["c"], collectproto, logout)) { 335 389 get_parents_array (arg_d + ".fc", parents); 336 if (!get_children (arg_d, args["c"], metadata, 390 if (!get_children (arg_d, args["c"], metadata, getParents, 337 391 collectproto, siblings, logout)) 338 392 return; … … 340 394 get_parents_array (arg_d, parents); 341 395 if (!get_children (arg_d + ".pr", args["c"], metadata, 342 collectproto, siblings, logout))396 getParents, collectproto, siblings, logout)) 343 397 return; 344 398 } … … 648 702 649 703 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 650 Functions for generating a "List" type table of contents. These can be used only704 Functions for generating a "List" or "AZList type table of contents. These can be used only 651 705 at classification level as it doesn't make sense to display document level stuff 652 706 this way (I think!!) 653 707 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ 654 708 655 void list_toc (const text_t &/*classifytype*/, const text_t &classifytitle, 709 // prototypes 710 711 static void output_list (text_t &formatstring, cgiargsclass &args, 712 recptproto *collectproto, displayclass &disp, 713 outconvertclass &outconvert, ostream &textout, 714 ostream &logout); 715 716 void list_toc (const text_t &classifytype, text_t &formatstring, 656 717 cgiargsclass &args, recptproto *collectproto, 657 718 displayclass &disp, outconvertclass &outconvert, 658 719 ostream &textout, ostream &logout) { 659 720 721 722 textout 723 << "\n<!-- Table of Contents produced by browsetools::list_toc -->\n\n" 724 << "<table cellpadding=0 cellspacing=2>\n"; 725 726 if (classifytype == "AZList" || classifytype == "List") 727 output_list (formatstring, args, collectproto, 728 disp, outconvert, textout, logout); 729 730 else if (classifytype == "Hierarchy") 731 output_hierarchy ("AZList", args, collectproto, 732 disp, outconvert, textout, logout); 733 734 textout << "</table>\n" 735 << "<!-- end of Table of Contents -->\n"; 736 737 } 738 739 void output_list (text_t &formatstring, cgiargsclass &args, 740 recptproto *collectproto, displayclass &disp, 741 outconvertclass &outconvert, ostream &textout, 742 ostream &logout) { 743 660 744 text_tarray metadata; 745 bool getParents = false; 661 746 FilterResponse_t response; 747 662 748 text_t &arg_cl = args["cl"]; 663 text_t doclink = "<a href=\"_httpdocument_&cl=" + arg_cl + "&d="; 664 665 metadata.push_back (classifytitle); 666 metadata.push_back ("Title"); 667 668 if (get_children (arg_cl, args["c"], metadata, collectproto, response, logout)) { 669 670 textout 671 << "\n<!-- Table of Contents produced by browsetools::output_list_toc " 672 << "-->\n\n<p>\n"; 673 749 750 // if format string is empty use the default 751 if (formatstring.empty()) 752 formatstring = "<td valign=top nowrap>[link][icon][/link]</td><td>{Or}{[Title],Untitled}</td>"; 753 754 bool intable = is_table_content (formatstring); 755 if (!intable) textout << "<tr><td>\n"; 756 757 format_t *formatlistptr = new format_t(); 758 parse_formatstring (formatstring, formatlistptr, metadata, getParents); 759 metadata.push_back ("doctype"); // need this to decide which icon to use 760 761 if (get_children (arg_cl, args["c"], metadata, getParents, 762 collectproto, response, logout)) { 763 674 764 ResultDocInfo_tarray::const_iterator sechere = response.docInfo.begin(); 675 765 ResultDocInfo_tarray::const_iterator secend = response.docInfo.end(); 676 766 677 767 while (sechere != secend) { 678 679 const text_t &ctitle = (*sechere).metadata[0].values[0]; 680 const text_t &title = (*sechere).metadata[1].values[0]; 681 682 if (!ctitle.empty()) { 683 textout << outconvert << disp << "<br>" << doclink << (*sechere).OID 684 << "\">" + ctitle + "</a>\n"; 685 } else if (!title.empty()) { 686 textout << outconvert << disp << "<br>" << doclink << (*sechere).OID 687 << "\">" + title + "</a>\n"; 768 const MetadataInfo_t &lastmeta = (*sechere).metadata.back(); 769 const text_t &doctype = lastmeta.values.back(); 770 771 text_t link = "<a href=\"_httpdocument_&cl="; 772 text_t icon = "_document:iconclosedbook_"; 773 774 if (doctype == "classify") { 775 icon = "_document:iconclosedbookshelf_"; 776 link += (*sechere).OID + "\">"; 777 } else { 778 link += arg_cl + "&d=" + (*sechere).OID + "\">"; 688 779 } 780 if (intable) textout << "<tr>\n"; 781 782 textout << outconvert << disp 783 << get_formatted_string (*sechere, formatlistptr, link, icon) << "\n"; 784 785 if (intable) textout << "</tr>\n"; 786 689 787 sechere ++; 690 788 } 691 692 textout << "\n<!-- end of Table of Contents -->\n"; 693 } 694 } 695 696 697 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 698 Functions for generating an "AZList" type table of contents. These can be used only 699 at classification level as it doesn't make sense to display document level stuff 700 this way (I think!!) 701 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ 702 703 void azlist_toc (const text_t &classifytype, const text_t &classifytitle, 704 cgiargsclass &args, recptproto *collectproto, 705 displayclass &disp, outconvertclass &outconvert, 706 ostream &textout, ostream &logout) { 707 708 text_tarray metadata; 709 FilterResponse_t response; 710 text_t &arg_cl = args["cl"]; 711 712 textout 713 << "\n<!-- Table of Contents produced by browsetools::azlist_toc -->\n\n" 714 << "<table cellpadding=0 cellspacing=2>\n"; 715 716 717 if (classifytype == "AZList") { 718 719 metadata.push_back ("Title"); 720 metadata.push_back ("Creator"); 721 metadata.push_back ("doctype"); 722 723 if (get_children (arg_cl, args["c"], metadata, collectproto, response, logout)) 724 output_azlist (response, classifytitle, arg_cl, disp, outconvert, textout); 725 } 726 727 else if (classifytype == "Hierarchy") 728 output_hierarchy ("AZList", args, collectproto, disp, outconvert, textout, logout); 729 730 textout << "</table>\n" 731 << "<!-- end of Table of Contents -->\n"; 732 733 } 734 735 // note that this function expects response to contain three fields of metadata 736 // ("Title", "Creator", "doctype") - if they're not there it may cause a run-time error 737 void output_azlist (const FilterResponse_t &response, const text_t &classifytitle, 738 const text_t &arg_cl, displayclass &disp, 739 outconvertclass &outconvert, ostream &textout) { 740 741 bool iscreator = false; 742 if (classifytitle == "Creator") iscreator = true; 743 744 ResultDocInfo_tarray::const_iterator sechere = response.docInfo.begin(); 745 ResultDocInfo_tarray::const_iterator secend = response.docInfo.end(); 746 747 while (sechere != secend) { 748 749 const text_t &title = (*sechere).metadata[0].values[0]; 750 const text_t &creator = (*sechere).metadata[1].values[0]; 751 const text_t &doctype = (*sechere).metadata[2].values[0]; 752 753 text_t link = "<a href=\"_httpdocument_&cl="; 754 text_t icon = "_document:iconclosedbook_"; 755 756 if (doctype == "classify") { 757 icon = "_document:iconclosedbookshelf_"; 758 link += (*sechere).OID; 759 } else { 760 link += arg_cl + "&d=" + (*sechere).OID; 761 } 762 763 if (iscreator) { 764 if (!creator.empty()) { 765 textout << outconvert << disp << "<tr><td valign=top>" << link << "\">" 766 << icon << "</a></td><td>" << creator << "</td><td>"; 767 768 if (!title.empty()) 769 textout << outconvert << " " << title; 770 } 771 } else { 772 if (!title.empty()) { 773 textout << outconvert << disp << "<tr><td valign=top>" << link << "\">" 774 << icon << "</a></td><td>" << title << "</td><td>"; 775 776 if (!creator.empty()) 777 textout << outconvert << " " << creator; 778 } 779 } 780 textout << "</td></tr>\n"; 781 sechere ++; 789 if (!intable) textout << "</td></tr>\n"; 782 790 } 783 791 } … … 791 799 792 800 void datelist_toc (const text_t &/*classifytype*/, const text_t &/*classifytitle*/, 793 c giargsclass &/*args*/, recptproto */*collectproto*/,801 const text_t &/*formatstring*/, cgiargsclass &/*args*/, recptproto */*collectproto*/, 794 802 displayclass &/*disp*/, outconvertclass &/*outconvert*/, 795 803 ostream &/*textout*/, ostream &/*logout*/) { -
trunk/gsdl/src/recpt/browsetools.h
r344 r404 28 28 29 29 30 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 31 Functions for generating a "Book" type table of contents. These should only be called 32 for document level tocs (i.e. when the "d" argument is set) as I don't think it makes 33 sense to display top level classifications in this way. 34 This type of table of contents is intended for documents whose sub-sections are simply 35 numbered as pages. 36 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ 30 void book_toc (cgiargsclass &args, recptproto *collectproto, 31 displayclass &disp, outconvertclass &outconvert, 32 ostream &textout, ostream &logout); 37 33 38 void book_toc (const text_t &/*classifytitle*/, cgiargsclass &args, 39 recptproto *collectproto, displayclass &disp, 40 outconvertclass &outconvert, ostream &textout, 41 ostream &logout); 42 43 44 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 45 Functions for generating a "Hierarchy" type table of contents. These can be used either 46 at top classification level or at document level (the difference being that a cover 47 image and control buttons are displayed at document level). 48 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ 49 50 void hierarchy_toc (const text_t &classifytype, const text_t &classifytitle, 34 void hierarchy_toc (const text_t &classifytype, 51 35 cgiargsclass &args, recptproto *collectproto, 52 36 displayclass &disp, outconvertclass &outconvert, 53 37 ostream &textout, ostream &logout); 54 void output_hierarchy (const text_t &classifytype, cgiargsclass &args,55 recptproto *collectproto, displayclass &disp,56 outconvertclass &outconvert, ostream &textout,57 ostream &logout);58 void output_contracted_hierarchy_toc (const text_t &classifytype, cgiargsclass &args,59 recptproto *collectproto,displayclass &disp,60 outconvertclass &outconvert, ostream &textout,61 ostream &logout);62 void output_expanded_hierarchy_toc (cgiargsclass &args, recptproto *collectproto,63 displayclass &disp, outconvertclass &outconvert,64 ostream &textout, ostream &logout);65 void output_parents_toc (cgiargsclass &args, const text_tarray &parents,66 int &tabcount, int &colnum, displayclass &disp,67 recptproto *collectproto, outconvertclass &outconvert,68 ostream &textout, ostream &logout);69 void output_siblings_toc (cgiargsclass &args, const FilterResponse_t &siblings,70 int &tabcount, int &colnum, displayclass &disp,71 outconvertclass &outconvert, ostream &textout, ostream &logout);72 void output_controls (cgiargsclass &args, recptproto *collectproto,73 displayclass &disp, outconvertclass &outconvert,74 ostream &textout, ostream &logout);75 void output_cover_image (cgiargsclass &args, recptproto *collectproto,76 displayclass &disp, outconvertclass &outconvert,77 ostream &textout, ostream &logout);78 38 79 80 81 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 82 Functions for generating a "List" type table of contents. These can be used only 83 at classification level as it doesn't make sense to display document level stuff 84 this way (I think!!) 85 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ 86 87 void list_toc (const text_t &classifytype, const text_t &classifytitle, 39 void list_toc (const text_t &classifytype, text_t &formatstring, 88 40 cgiargsclass &args, recptproto *collectproto, 89 41 displayclass &disp, outconvertclass &outconvert, 90 42 ostream &textout, ostream &logout); 91 43 92 93 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-94 Functions for generating an "AZList" type table of contents. These can be used only95 at classification level as it doesn't make sense to display document level stuff96 this way (I think!!)97 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/98 99 void azlist_toc (const text_t &classifytype, const text_t &classifytitle,100 cgiargsclass &args, recptproto *collectproto,101 displayclass &disp, outconvertclass &outconvert,102 ostream &textout, ostream &logout);103 void output_azlist (const FilterResponse_t &response, const text_t &classifytitle,104 const text_t &arg_cl, displayclass &disp,105 outconvertclass &outconvert, ostream &textout);106 107 108 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-109 Functions for generating a "DateList" type table of contents. These can be used only110 at classification level as it doesn't make sense to display document level stuff111 this way (I think!!)112 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/113 114 44 void datelist_toc (const text_t &classifytype, const text_t &classifytitle, 115 c giargsclass &args, recptproto *collectproto,45 const text_t &formatstring, cgiargsclass &args, recptproto *collectproto, 116 46 displayclass &disp, outconvertclass &outconvert, 117 47 ostream &textout, ostream &logout); 118 119 120 /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-121 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/122 48 123 49 void set_arrow_macros (const text_t &OID, const text_t &classifytype, … … 126 52 127 53 128 129 130 54 #endif
Note:
See TracChangeset
for help on using the changeset viewer.