- Timestamp:
- 2000-08-18T17:40:07+12:00 (24 years ago)
- Location:
- trunk/gsdl
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl/etc/main.cfg
r1390 r1425 6 6 gsdl.dm english.dm chinese.dm french.dm german.dm maori.dm \ 7 7 english2.dm french2.dm arabic.dm spanish.dm \ 8 home.dm 8 home.dm collect.dm 9 9 10 10 status enabled -
trunk/gsdl/macros/collect.dm
r1419 r1425 9 9 # this is just like the _gsimage_ macro but it calls the check_submit() javascript 10 10 # function instead of linking directly to the page (_1_ argument isn't used) 11 _gsjimage_ {<a href="javascript:check _submit('_4_');" onMouseover="roll('_4_',1);" onMouseOut="roll('_4_',0);"><img11 _gsjimage_ {<a href="javascript:check\_submit('_4_');" onMouseover="roll('_4_',1);" onMouseOut="roll('_4_',0);"><img 12 12 name="_4_" src="_2_" onLoad="gbutton(this,'_3_');" border=0 alt="_5_"></a>} 13 13 14 _gsimage_ [v=1] {<a href="#" onClick="check _submit(_4_);">_5_</a><br>}14 _gsimage_ [v=1] {<a href="#" onClick="check\_submit(_4_);">_5_</a><br>} 15 15 16 16 … … 106 106 <form name="collectorform" method=post action="_gwcgi_"> 107 107 <input type=hidden name="e" value="_decodedcompressedoptions_"> 108 <input type=hidden name="pcp" value="_cgiargcp_">109 108 110 109 <center> … … 226 225 227 226 _infoscriptextra_ { 228 function check _submit (gotopage) \{227 function check\_submit (gotopage) \{ 229 228 var form = document.collectorform; 230 229 if (form.bc1fullname.value.match(/^\\s*$/)) … … 261 260 <input type=hidden name="e" value="_decodedcompressedoptions_"> 262 261 <input type=hidden name="cp" value="_cgiargcp_"> 263 <input type=hidden name=" pcp" value="_cgiargcp_">262 <input type=hidden name="bc1infochanged" value="0"> 264 263 265 264 <center> … … 278 277 279 278 <h4>Title for collection:</h4> 280 <input type="text" name="bc1fullname" value="_cgiargbc1fullname_") size=72> 279 <input type="text" name="bc1fullname" value="_cgiargbc1fullname_" 280 onChange="document.collectorform.bc1infochanged.value=1;") size=72> 281 281 <br> 282 282 <font color="#909090"> … … 288 288 289 289 <h4>Contact email address:</h4> 290 <input type="text" name="bc1contactemail" value="_cgiargbc1contactemail_" size=72> 290 <input type="text" name="bc1contactemail" value="_cgiargbc1contactemail_" 291 onChange="document.collectorform.bc1infochanged.value=1;" size=72> 291 292 <br> 292 293 <font color="#909090"> … … 298 299 299 300 <h4>About this collection:</h4> 300 <textarea name="bc1aboutdesc" cols=72 rows=6 301 wrap=physical>_cgiargbc1aboutdesc_</textarea> 301 <textarea name="bc1aboutdesc" cols=72 rows=6 wrap=physical 302 onChange="document.collectorform.bc1infochanged.value=1;"> 303 _cgiargbc1aboutdesc_ 304 </textarea> 302 305 <br> 303 306 <font color="#909090"> … … 331 334 332 335 _srcescriptextra_ { 333 function check _submit (gotopage) \{336 function check\_submit (gotopage) \{ 334 337 var form = document.collectorform; 335 338 … … 353 356 <input type=hidden name="e" value="_decodedcompressedoptions_"> 354 357 <input type=hidden name="cp" value="_cgiargcp_"> 355 <input type=hidden name="pcp" value="_cgiargcp_">356 358 357 359 <center> … … 433 435 var changed = 0; 434 436 435 function check _submit (gotopage) \{437 function check\_submit (gotopage) \{ 436 438 var form = document.collectorform; 437 439 form.bc1cfgchanged.value = changed; … … 440 442 \} 441 443 442 function reset _button () \{444 function reset\_button () \{ 443 445 document.collectorform.reset(); 444 446 changed = 0; … … 450 452 <input type=hidden name="e" value="_decodedcompressedoptions_"> 451 453 <input type=hidden name="cp" value="_cgiargcp_"> 452 <input type=hidden name="pcp" value="_cgiargcp_">453 454 <input type=hidden name="bc1cfgchanged" value="_cgiargbc1cfgchanged_"> 454 455 … … 477 478 </textarea> 478 479 <table><tr valign=top> 479 <td><a href="javascript:reset _button();">_iconstop_</a></td>480 <td><a href="javascript:reset _button();">Reset</a></td>480 <td><a href="javascript:reset\_button();">_iconstop_</a></td> 481 <td><a href="javascript:reset\_button();">Reset</a></td> 481 482 </tr></table> 483 484 <p><center> 485 _collectorbar_ 486 </center> 487 488 </td></tr> 489 </table></center> 490 491 </form> 492 } 493 494 495 ####################################################################### 496 # Build page 497 498 _bildscriptextra_ { 499 var changed = 0; 500 501 function check\_submit (gotopage) \{ 502 var form = document.collectorform; 503 form.bc1cfgchanged.value = changed; 504 form.cp.value = gotopage; 505 form.submit(); 506 \} 507 } 508 509 _bildcontent_ { 510 <form name="collectorform" method=post action="_gwcgi_"> 511 <input type=hidden name="e" value="_decodedcompressedoptions_"> 512 <input type=hidden name="cp" value="_cgiargcp_"> 513 514 <center> 515 <table width=_pagewidth_> 516 <tr><td> 517 _iconblankbar_ 518 <center> 519 <h2>Build</h2> 520 </center> 521 <p>_iconblankbar_ 482 522 483 523 <p><center> -
trunk/gsdl/src/recpt/collectoraction.cpp
r1419 r1425 24 24 *********************************************************************/ 25 25 26 // note that the collectoraction relies on having direct access to a 27 // collections configuration file. this breaks the separation between 28 // receptionist and collection server and so is not suitable (at least 29 // in its current form) for use when collection servers are separate 30 // from the receptionist (e.g. when using the CORBA protocol). 31 26 32 #include "collectoraction.h" 27 33 #include "OIDtools.h" 28 34 #include "fileutil.h" 35 #include "cfgread.h" 29 36 30 37 #if !defined (__WIN32__) … … 55 62 argsinfo.addarginfo (NULL, arg_ainfo); 56 63 57 arg_ainfo.shortname = "pcp"; 58 arg_ainfo.longname = "previous collector page"; 59 arg_ainfo.multiplechar = true; 60 arg_ainfo.defaultstatus = cgiarginfo::weak; 61 arg_ainfo.argdefault = ""; 64 arg_ainfo.shortname = "bc1fullname"; 65 arg_ainfo.longname = "collector specific"; 66 arg_ainfo.multiplechar = true; 67 arg_ainfo.defaultstatus = cgiarginfo::weak; 68 arg_ainfo.argdefault = ""; 69 arg_ainfo.savedarginfo = cgiarginfo::must; 70 argsinfo.addarginfo (NULL, arg_ainfo); 71 72 arg_ainfo.shortname = "bc1dirname"; 73 arg_ainfo.longname = "collector specific"; 74 arg_ainfo.multiplechar = true; 75 arg_ainfo.defaultstatus = cgiarginfo::weak; 76 arg_ainfo.argdefault = ""; 77 arg_ainfo.savedarginfo = cgiarginfo::must; 78 argsinfo.addarginfo (NULL, arg_ainfo); 79 80 arg_ainfo.shortname = "bc1contactemail"; 81 arg_ainfo.longname = "collector specific"; 82 arg_ainfo.multiplechar = true; 83 arg_ainfo.defaultstatus = cgiarginfo::weak; 84 arg_ainfo.argdefault = ""; 85 arg_ainfo.savedarginfo = cgiarginfo::must; 86 argsinfo.addarginfo (NULL, arg_ainfo); 87 88 arg_ainfo.shortname = "bc1aboutdesc"; 89 arg_ainfo.longname = "collector specific"; 90 arg_ainfo.multiplechar = true; 91 arg_ainfo.defaultstatus = cgiarginfo::weak; 92 arg_ainfo.argdefault = ""; 93 arg_ainfo.savedarginfo = cgiarginfo::must; 94 argsinfo.addarginfo (NULL, arg_ainfo); 95 96 arg_ainfo.shortname = "bc1clone"; 97 arg_ainfo.longname = "collector specific"; 98 arg_ainfo.multiplechar = false; 99 arg_ainfo.defaultstatus = cgiarginfo::weak; 100 arg_ainfo.argdefault = "0"; 101 arg_ainfo.savedarginfo = cgiarginfo::must; 102 argsinfo.addarginfo (NULL, arg_ainfo); 103 104 arg_ainfo.shortname = "bc1clonecol"; 105 arg_ainfo.longname = "collector specific"; 106 arg_ainfo.multiplechar = true; 107 arg_ainfo.defaultstatus = cgiarginfo::weak; 108 arg_ainfo.argdefault = ""; 109 arg_ainfo.savedarginfo = cgiarginfo::must; 110 argsinfo.addarginfo (NULL, arg_ainfo); 111 112 arg_ainfo.shortname = "bc1inputdir1"; 113 arg_ainfo.longname = "collector specific"; 114 arg_ainfo.multiplechar = true; 115 arg_ainfo.defaultstatus = cgiarginfo::weak; 116 arg_ainfo.argdefault = ""; 117 arg_ainfo.savedarginfo = cgiarginfo::must; 118 argsinfo.addarginfo (NULL, arg_ainfo); 119 120 arg_ainfo.shortname = "bc1inputdir2"; 121 arg_ainfo.longname = "collector specific"; 122 arg_ainfo.multiplechar = true; 123 arg_ainfo.defaultstatus = cgiarginfo::weak; 124 arg_ainfo.argdefault = ""; 125 arg_ainfo.savedarginfo = cgiarginfo::must; 126 argsinfo.addarginfo (NULL, arg_ainfo); 127 128 arg_ainfo.shortname = "bc1inputdir3"; 129 arg_ainfo.longname = "collector specific"; 130 arg_ainfo.multiplechar = true; 131 arg_ainfo.defaultstatus = cgiarginfo::weak; 132 arg_ainfo.argdefault = ""; 133 arg_ainfo.savedarginfo = cgiarginfo::must; 134 argsinfo.addarginfo (NULL, arg_ainfo); 135 136 arg_ainfo.shortname = "bc1inputdir4"; 137 arg_ainfo.longname = "collector specific"; 138 arg_ainfo.multiplechar = true; 139 arg_ainfo.defaultstatus = cgiarginfo::weak; 140 arg_ainfo.argdefault = ""; 141 arg_ainfo.savedarginfo = cgiarginfo::must; 142 argsinfo.addarginfo (NULL, arg_ainfo); 143 144 // only set when one of the fields was changed in 145 // the "collection info" page 146 arg_ainfo.shortname = "bc1infochanged"; 147 arg_ainfo.longname = "collector specific"; 148 arg_ainfo.multiplechar = false; 149 arg_ainfo.defaultstatus = cgiarginfo::weak; 150 arg_ainfo.argdefault = "0"; 62 151 arg_ainfo.savedarginfo = cgiarginfo::mustnot; 63 152 argsinfo.addarginfo (NULL, arg_ainfo); 64 153 65 arg_ainfo.shortname = "bc1fullname"; 66 arg_ainfo.longname = "collector specific"; 67 arg_ainfo.multiplechar = true; 68 arg_ainfo.defaultstatus = cgiarginfo::weak; 69 arg_ainfo.argdefault = ""; 70 arg_ainfo.savedarginfo = cgiarginfo::must; 71 argsinfo.addarginfo (NULL, arg_ainfo); 72 73 arg_ainfo.shortname = "bc1dirname"; 74 arg_ainfo.longname = "collector specific"; 75 arg_ainfo.multiplechar = true; 76 arg_ainfo.defaultstatus = cgiarginfo::weak; 77 arg_ainfo.argdefault = ""; 78 arg_ainfo.savedarginfo = cgiarginfo::must; 79 argsinfo.addarginfo (NULL, arg_ainfo); 80 81 arg_ainfo.shortname = "bc1contactemail"; 82 arg_ainfo.longname = "collector specific"; 83 arg_ainfo.multiplechar = true; 84 arg_ainfo.defaultstatus = cgiarginfo::weak; 85 arg_ainfo.argdefault = ""; 86 arg_ainfo.savedarginfo = cgiarginfo::must; 87 argsinfo.addarginfo (NULL, arg_ainfo); 88 89 arg_ainfo.shortname = "bc1aboutdesc"; 90 arg_ainfo.longname = "collector specific"; 91 arg_ainfo.multiplechar = true; 92 arg_ainfo.defaultstatus = cgiarginfo::weak; 93 arg_ainfo.argdefault = ""; 94 arg_ainfo.savedarginfo = cgiarginfo::must; 95 argsinfo.addarginfo (NULL, arg_ainfo); 96 97 arg_ainfo.shortname = "bc1clone"; 98 arg_ainfo.longname = "collector specific"; 99 arg_ainfo.multiplechar = false; 100 arg_ainfo.defaultstatus = cgiarginfo::weak; 101 arg_ainfo.argdefault = "0"; 102 arg_ainfo.savedarginfo = cgiarginfo::must; 103 argsinfo.addarginfo (NULL, arg_ainfo); 104 105 arg_ainfo.shortname = "bc1clonecol"; 106 arg_ainfo.longname = "collector specific"; 107 arg_ainfo.multiplechar = true; 108 arg_ainfo.defaultstatus = cgiarginfo::weak; 109 arg_ainfo.argdefault = ""; 110 arg_ainfo.savedarginfo = cgiarginfo::must; 111 argsinfo.addarginfo (NULL, arg_ainfo); 112 113 arg_ainfo.shortname = "bc1inputdir1"; 114 arg_ainfo.longname = "collector specific"; 115 arg_ainfo.multiplechar = true; 116 arg_ainfo.defaultstatus = cgiarginfo::weak; 117 arg_ainfo.argdefault = ""; 118 arg_ainfo.savedarginfo = cgiarginfo::must; 119 argsinfo.addarginfo (NULL, arg_ainfo); 120 121 arg_ainfo.shortname = "bc1inputdir2"; 122 arg_ainfo.longname = "collector specific"; 123 arg_ainfo.multiplechar = true; 124 arg_ainfo.defaultstatus = cgiarginfo::weak; 125 arg_ainfo.argdefault = ""; 126 arg_ainfo.savedarginfo = cgiarginfo::must; 127 argsinfo.addarginfo (NULL, arg_ainfo); 128 129 arg_ainfo.shortname = "bc1inputdir3"; 130 arg_ainfo.longname = "collector specific"; 131 arg_ainfo.multiplechar = true; 132 arg_ainfo.defaultstatus = cgiarginfo::weak; 133 arg_ainfo.argdefault = ""; 134 arg_ainfo.savedarginfo = cgiarginfo::must; 135 argsinfo.addarginfo (NULL, arg_ainfo); 136 137 arg_ainfo.shortname = "bc1inputdir4"; 138 arg_ainfo.longname = "collector specific"; 139 arg_ainfo.multiplechar = true; 140 arg_ainfo.defaultstatus = cgiarginfo::weak; 141 arg_ainfo.argdefault = ""; 142 arg_ainfo.savedarginfo = cgiarginfo::must; 143 argsinfo.addarginfo (NULL, arg_ainfo); 144 154 // only set when cfg file is altered from within 155 // "configure collection" page 145 156 arg_ainfo.shortname = "bc1cfgchanged"; 146 157 arg_ainfo.longname = "collector specific"; … … 186 197 187 198 bool collectoraction::check_cgiargs (cgiargsinfoclass &/*argsinfo*/, cgiargsclass &args, 188 ostream & /*logout*/) {199 ostream &logout) { 189 200 190 201 if (args["cp"] != "intro") { … … 194 205 } 195 206 196 if ((args["pcp"] == "info") && args["bc1dirname"].empty()) { 197 // we've just come from the "collection information" page for the 198 // first time so we'll need to create the collection with mkcol.pl 199 // and set up bc1dirname - we do this part here instead of in do_action 200 // because the bc1dirname argument must be set to its new value before 201 // the compressedoptions macros are set. 202 args["bc1dirname"] = get_directory_name (args["bc1fullname"]); 203 do_mkcol = true; 207 if (args["bc1infochanged"] == "1") { 208 209 if (args["bc1dirname"].empty()) { 210 // we've just come from the "collection information" page for the 211 // first time so we'll need to create the collection with mkcol.pl 212 // and set up bc1dirname - we do this part here instead of in do_action 213 // because the bc1dirname argument must be set to its new value before 214 // the compressedoptions macros are set. 215 args["bc1dirname"] = get_directory_name (args["bc1fullname"]); 216 do_mkcol = true; 217 218 } else { 219 // "collection information" has been changed after collection was made 220 // so we'll need to update the cfg file. 221 update_cfgfile_partial (args, logout); 222 } 204 223 } 205 224 … … 208 227 // page. we need to update the file on disk and catch bc1 arguments up 209 228 // with changes. 210 211 212 } 213 229 update_cfgfile_complete (args, logout); 230 } 231 214 232 return true; 233 } 234 235 // update configuration file on disk to match bc1 arguments 236 void collectoraction::update_cfgfile_partial (cgiargsclass &args, ostream &logout) { 237 238 text_t cfgfile = filename_cat(gsdlhome, "collect", args["bc1dirname"], "etc", "collect.cfg"); 239 char *cfgfilec = cfgfile.getcstr(); 240 241 vector<text_tarray> cfgarray; 242 243 // read in cfg file 244 ifstream cfg_in (cfgfilec); 245 if (cfg_in) { 246 text_tarray cfgline; 247 while (read_cfg_line(cfg_in, cfgline) >= 0) { 248 if (cfgline.size () >= 2) { 249 if (cfgline[0] == "creator") { 250 cfgline[1] = args["bc1contactemail"]; 251 } else if (cfgline[0] == "collectionmeta") { 252 if (cfgline[1] == "collectionname") { 253 cfgline[2] = args["bc1fullname"]; 254 } else if (cfgline[1] == "collectionextra") { 255 cfgline[2] = carriage_replace (args["bc1aboutdesc"], 0); 256 } 257 } 258 } 259 cfgarray.push_back (cfgline); 260 } 261 cfg_in.close(); 262 263 // now write cfg file back out 264 ofstream cfg_out (cfgfilec); 265 if (cfg_out) { 266 // lock the file 267 int fd = GSDL_GET_FILEDESC(cfg_out); 268 int lock_val = 1; 269 GSDL_LOCK_FILE (fd); 270 if (lock_val != 0) { 271 logout << "Error: Couldn't lock file " << cfgfilec << "\n"; 272 cfg_out.close(); 273 274 } else { 275 276 vector<text_tarray>::const_iterator this_line = cfgarray.begin(); 277 vector<text_tarray>::const_iterator end_line = cfgarray.end(); 278 while (this_line != end_line) { 279 write_cfg_line (cfg_out, *this_line); 280 this_line ++; 281 } 282 GSDL_UNLOCK_FILE (fd); 283 cfg_out.close(); 284 } 285 286 } else { 287 logout << "collectoraction::update_cfgfile_partial: unable to open " 288 << cfgfilec << " for output\n"; 289 } 290 291 } else { 292 logout << "collectoraction::update_cfgfile_partial: unable to open " 293 << cfgfilec << " for input\n"; 294 } 295 delete cfgfilec; 296 } 297 298 // replace configuration file on disk with that in the bc1cfgfile argument and 299 // catch other bc1 arguments up with those the new cfgfile contains 300 void collectoraction::update_cfgfile_complete (cgiargsclass &args, ostream &logout) { 301 302 text_t cfgfile = filename_cat(gsdlhome, "collect", args["bc1dirname"], "etc", "collect.cfg"); 303 char *cfgfilec = cfgfile.getcstr(); 304 ofstream cfg_out (cfgfilec); 305 306 if (cfg_out) { 307 // lock the file 308 int fd = GSDL_GET_FILEDESC(cfg_out); 309 int lock_val = 1; 310 GSDL_LOCK_FILE (fd); 311 if (lock_val != 0) { 312 logout << "Error: Couldn't lock file " << cfgfilec << "\n"; 313 cfg_out.close(); 314 315 } else { 316 317 outconvertclass text_t2ascii; 318 cfg_out << text_t2ascii << args["bc1cfgfile"]; 319 GSDL_UNLOCK_FILE (fd); 320 cfg_out.close(); 321 322 // now that we've written the file we'll read it back again and 323 // update our bc1 arguments 324 ifstream cfg_in (cfgfilec); 325 if (cfg_in) { 326 text_tarray cfgline; 327 while (read_cfg_line(cfg_in, cfgline) >= 0) { 328 if (cfgline.size () >= 2) { 329 if (cfgline[0] == "creator") { 330 args["bc1contactemail"] = cfgline[1]; 331 } else if (cfgline[0] == "collectionmeta") { 332 if (cfgline[1] == "collectionname") { 333 args["bc1fullname"] = cfgline[2]; 334 } else if (cfgline[1] == "collectionextra") { 335 args["bc1aboutdesc"] = carriage_replace (cfgline[2], 1); 336 } 337 } 338 } 339 } 340 cfg_in.close(); 341 } else { 342 logout << "collectoraction::update_cfgfile_complete: unable to open " 343 << cfgfilec << " for input\n"; 344 } 345 } 346 } else { 347 logout << "collectoraction::update_cfgfile_complete: unable to open " 348 << cfgfilec << " for output\n"; 349 } 350 delete cfgfilec; 215 351 } 216 352 … … 330 466 331 467 // set the _cfgfile_ macro 332 void collectoraction::set_cfgfile (displayclass &disp, const text_t &dirname ) {468 void collectoraction::set_cfgfile (displayclass &disp, const text_t &dirname, ostream &logout) { 333 469 334 470 // read in collect.cfg … … 342 478 #endif 343 479 344 delete cfgfilec;345 346 480 if (cfg_ifs) { 347 481 // read in collect.cfg … … 350 484 cfg_ifs.get(c); 351 485 while (!cfg_ifs.eof ()) { 486 if (c=='\\') cfgtext.push_back('\\'); 352 487 cfgtext.push_back(c); 353 488 cfg_ifs.get(c); … … 357 492 // define it as a macro 358 493 disp.setmacro("cfgfile","collector",cfgtext); 359 } 494 495 } else { 496 logout << "collectoraction::set_cfgfile: couldn't open configuration file (" 497 << cfgfilec << ") for reading\n"; 498 } 499 delete cfgfilec; 360 500 } 361 501 … … 423 563 collectorbar += get_button (collector_page, "grey", "view", false); 424 564 collectorbar += "</tr><tr><td colspan=4></td><td align=center>_icongreyuparrow_</td><td colspan=4></td>\n"; 565 566 } else if (collector_page == "bild") { 567 568 425 569 } 426 570 … … 429 573 430 574 if (collector_page == "srce") set_fullnamemenu (disp, args, protos, logout); 431 if (collector_page == "conf") set_cfgfile (disp, args["bc1dirname"] );575 if (collector_page == "conf") set_cfgfile (disp, args["bc1dirname"], logout); 432 576 } 433 577 … … 458 602 } 459 603 604 if (collector_page == "bild") { 605 // do the work (download, import, build) 606 text_t build_cmd = "perl " + filename_cat (gsdlhome, "bin", "script", "build"); 607 if (!args["bc1inputdir1"].empty()) { 608 build_cmd += " -download \"" + args["bc1inputdir1"] + "\""; 609 } 610 if (!args["bc1inputdir2"].empty()) { 611 build_cmd += " -download \"" + args["bc1inputdir2"] + "\""; 612 } 613 if (!args["bc1inputdir3"].empty()) { 614 build_cmd += " -download \"" + args["bc1inputdir3"] + "\""; 615 } 616 if (!args["bc1inputdir4"].empty()) { 617 build_cmd += " -download \"" + args["bc1inputdir4"] + "\""; 618 } 619 build_cmd.push_back (' '); 620 build_cmd += args["bc1dirname"]; 621 622 #if !defined (__WIN32__) 623 // run in background on unix systems 624 build_cmd += " &"; 625 #endif 626 char *build_cmdc = build_cmd.getcstr(); 627 #if defined (__WIN32__) 628 gsdl_system (build_cmdc, logout); 629 #else 630 system (build_cmdc); 631 #endif 632 delete build_cmdc; 633 } 460 634 461 635 if (error.empty()) { -
trunk/gsdl/src/recpt/collectoraction.h
r1419 r1425 47 47 recptprotolistclass *protos, ostream &logout); 48 48 49 void set_cfgfile (displayclass &disp, const text_t &dirname); 49 void set_cfgfile (displayclass &disp, const text_t &dirname, ostream &logout); 50 51 void update_cfgfile_partial (cgiargsclass &args, ostream &logout); 52 53 void update_cfgfile_complete (cgiargsclass &args, ostream &logout); 50 54 51 55 text_t carriage_replace (const text_t &intext, int sw);
Note:
See TracChangeset
for help on using the changeset viewer.