1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>Castle Game Engine: CastleClassUtils</title>
<meta name="generator" content="PasDoc 0.13.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="StyleSheet" type="text/css" href="pasdoc.css">
</head>
<body>
<table class="container"><tr><td class="navigation">
<h2>Castle Game Engine</h2><p><a href="introduction.html" class="navigation">Introduction</a></p><p><a href="AllUnits.html" class="navigation">Units</a></p><p><a href="ClassHierarchy.html" class="navigation">Class Hierarchy</a></p><p><a href="AllClasses.html" class="navigation">Classes, Interfaces, Objects and Records</a></p><p><a href="AllTypes.html" class="navigation">Types</a></p><p><a href="AllVariables.html" class="navigation">Variables</a></p><p><a href="AllConstants.html" class="navigation">Constants</a></p><p><a href="AllFunctions.html" class="navigation">Functions and Procedures</a></p><p><a href="AllIdentifiers.html" class="navigation">Identifiers</a></p></td><td class="content">
<h1 class="unit">Unit CastleClassUtils</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Uses">Uses</a></td><td><a class="section" href="#PasDoc-Classes">Classes, Interfaces, Objects and Records</a></td><td><a class="section" href="#PasDoc-FuncsProcs">Functions and Procedures</a></td><td>Types</td><td><a class="section" href="#PasDoc-Constants">Constants</a></td><td><a class="section" href="#PasDoc-Variables">Variables</a></td></tr></table>
<a name="PasDoc-Description"></a><h2 class="description">Description</h2>
<p>
Basic classes and class utilities (for streams, strings, lists and such). Many utilities for classes that are defined in the Classes unit, and some classes of our my own.
<p>Some notes about TStream descendants : </p>
<ul class="paragraph_spacing">
<li><p> I call a stream "purely sequential" (or just "sequential") if it allows only reading and/or writing of data and does not allow free "Seek" calls, in particular — it does not allow Seek to move back in a stream.</p></li>
<li><p> I call a stream "growing" if it's read-only and it's purely sequential and it's Size property may be useless. In other words, when you read a "growing" stream, you don't know when it ends, until you reach the end. You just have to read data until Read returns 0.</p></li>
<li><p>Remember that to reliably detect end of the stream when you use TStream.Read, you have to test is ReadCount = 0. Merely testing that ReadCount < less than you requested is not enough, e.g. seen for THandleStream when handle is StdIn.</p></li>
</ul>
<p></p>
<a name="PasDoc-Uses"></a><h2 class="uses">Uses</h2>
<ul class="useslist"><li>Classes</li><li>SysUtils</li><li><a href="CastleUtils.html">CastleUtils</a></li><li><a href="CastleStringUtils.html">CastleStringUtils</a></li><li>Contnrs</li><li>FGL</li><li><a href="CastleGenericLists.html">CastleGenericLists</a></li><li><a href="CastleVectors.html">CastleVectors</a></li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-Classes"></a><h3 class="cio">Classes, Interfaces, Objects and Records</h3>
<table class="classestable wide_list">
<tr class="listheader">
<th class="itemname">Name</th>
<th class="itemdesc">Description</th>
</tr>
<tr class="list">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.TTextReaderWriter.html"><code>TTextReaderWriter</code></a></td>
<td class="itemdesc">Common class for reading or writing a stream like a text file.</td>
</tr>
<tr class="list2">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.TTextReader.html"><code>TTextReader</code></a></td>
<td class="itemdesc">Read any TStream like a text file.</td>
</tr>
<tr class="list">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.TTextWriter.html"><code>TTextWriter</code></a></td>
<td class="itemdesc">Write to a stream like to a text file.</td>
</tr>
<tr class="list2">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.TStringListCaseSens.html"><code>TStringListCaseSens</code></a></td>
<td class="itemdesc">TStringList that is case sensitive.</td>
</tr>
<tr class="list">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.EStreamNotImplemented.html"><code>EStreamNotImplemented</code></a></td>
<td class="itemdesc"> </td>
</tr>
<tr class="list2">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.EStreamNotImplementedWrite.html"><code>EStreamNotImplementedWrite</code></a></td>
<td class="itemdesc"> </td>
</tr>
<tr class="list">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.EStreamNotImplementedSeek.html"><code>EStreamNotImplementedSeek</code></a></td>
<td class="itemdesc"> </td>
</tr>
<tr class="list2">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.EStreamNotImplementedSetSize.html"><code>EStreamNotImplementedSetSize</code></a></td>
<td class="itemdesc"> </td>
</tr>
<tr class="list">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.TPeekCharStream.html"><code>TPeekCharStream</code></a></td>
<td class="itemdesc">Abstract class to read another stream, always being able to back one character.</td>
</tr>
<tr class="list2">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.TSimplePeekCharStream.html"><code>TSimplePeekCharStream</code></a></td>
<td class="itemdesc">Read another stream, sequentially, always being able to back one character.</td>
</tr>
<tr class="list">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.TBufferedReadStream.html"><code>TBufferedReadStream</code></a></td>
<td class="itemdesc">Read another stream, sequentially, always being able to back one character, and buffering it.</td>
</tr>
<tr class="list2">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.TCastleObjectStack.html"><code>TCastleObjectStack</code></a></td>
<td class="itemdesc"> </td>
</tr>
<tr class="list">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.TCastleObjectQueue.html"><code>TCastleObjectQueue</code></a></td>
<td class="itemdesc"> </td>
</tr>
<tr class="list2">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.TCastleObjectList.html"><code>TCastleObjectList</code></a></td>
<td class="itemdesc">Extended TObjectList for Castle Game Engine.</td>
</tr>
<tr class="list">
<td class="itemname">Class <a class="bold" href="CastleClassUtils.TNotifyEventList.html"><code>TNotifyEventList</code></a></td>
<td class="itemdesc"> </td>
</tr>
</table>
<a name="PasDoc-FuncsProcs"></a><h3 class="summary">Functions and Procedures</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#StringsAdd">StringsAdd</a></b>(Strs: TStrings; Count: integer; itemVal: string='dummy'); overload;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#AddStrArrayToStrings">AddStrArrayToStrings</a></b>(const StrArr: array of string; strlist: TStrings);</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#Strings_AddSplittedString">Strings_AddSplittedString</a></b>(Strings: TStrings; const S, Splitter: string);</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#Strings_AddCastleEngineProgramHelpSuffix">Strings_AddCastleEngineProgramHelpSuffix</a></b>( Strings: TStrings; const DisplayApplicationName: string; const Version: string; WrapLines: boolean);</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#Strings_SetText">Strings_SetText</a></b>(SList: TStrings; const S: string);</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#Strings_Trim">Strings_Trim</a></b>(Strings: TStrings; MaxCount: Cardinal);</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#StreamWriteLongWord">StreamWriteLongWord</a></b>(Stream: TStream; const Value: LongWord);</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadLongWord">StreamReadLongWord</a></b>(Stream: TStream): LongWord;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#StreamWriteByte">StreamWriteByte</a></b>(Stream: TStream; const Value: Byte);</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadByte">StreamReadByte</a></b>(Stream: TStream): Byte;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#WriteStr">WriteStr</a></b>(Stream: TStream; const S: string); overload;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#WritelnStr">WritelnStr</a></b>(Stream: TStream; const S: string); overload;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#WriteStr">WriteStr</a></b>(const S: string); overload;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#WritelnStr">WritelnStr</a></b>(const S: string); overload;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadChar">StreamReadChar</a></b>(Stream: TStream): char;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadZeroEndString">StreamReadZeroEndString</a></b>(Stream: TStream): string;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadUpto_NotEOS">StreamReadUpto_NotEOS</a></b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; backEndingChar: boolean; out endingChar: char): string; overload;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadUpto_NotEOS">StreamReadUpto_NotEOS</a></b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; backEndingChar: boolean): string; overload;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadUpto_NotEOS">StreamReadUpto_NotEOS</a></b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; out endingChar: char): string; overload;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadUpto_NotEOS">StreamReadUpto_NotEOS</a></b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>): string; overload;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadUpto_EOS">StreamReadUpto_EOS</a></b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; backEndingChar: boolean; out endingChar: integer): string; overload;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadUpto_EOS">StreamReadUpto_EOS</a></b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; backEndingChar: boolean): string; overload;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadUpto_EOS">StreamReadUpto_EOS</a></b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; out endingChar: integer): string; overload;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadUpto_EOS">StreamReadUpto_EOS</a></b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>): string; overload;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#CreateReadFileStream">CreateReadFileStream</a></b>(const URL: string): TStream; deprecated;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#ReadGrowingStream">ReadGrowingStream</a></b>(GrowingStream, DestStream: TStream; ResetDestStreamPosition: boolean);</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#ReadGrowingStreamToString">ReadGrowingStreamToString</a></b>(GrowingStream: TStream): string;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#StreamWriteString">StreamWriteString</a></b>(Stream: TStream; const s: string);</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamReadString">StreamReadString</a></b>(Stream: TStream): string;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#StreamToString">StreamToString</a></b>(Stream: TStream): string;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#StreamSaveToFile">StreamSaveToFile</a></b>(Stream: TStream; const URL: string);</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#MemoryStreamLoadFromString">MemoryStreamLoadFromString</a></b>(const Stream: TMemoryStream; const S: string; const Rewind: boolean = true);</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#MemoryStreamLoadFromString">MemoryStreamLoadFromString</a></b>( const S: string; const Rewind: boolean = true): TMemoryStream;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#CreateIfNeeded">CreateIfNeeded</a></b>(var Component: TComponent; ComponentClass: TComponentClass; Owner: TComponent);</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a href="CastleClassUtils.html#FPGObjectList_RemoveNils">FPGObjectList_RemoveNils</a></b>(List: TFPSList): Cardinal;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#FPGObjectList_ReplaceAll">FPGObjectList_ReplaceAll</a></b>(List: TFPSList; OldItem, NewItem: TObject);</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#FPGObjectList_FreeAndNilItem">FPGObjectList_FreeAndNilItem</a></b>(List: TFPSList; I: Integer);</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a href="CastleClassUtils.html#FPGObjectList_NilItem">FPGObjectList_NilItem</a></b>(List: TFPSList; I: Integer);</code></td>
</tr>
</table>
<a name="PasDoc-Constants"></a><h3 class="summary">Constants</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a href="CastleClassUtils.html#DefaultReadBufferSize">DefaultReadBufferSize</a></b> = 1024 * 1024;</code></td>
</tr>
</table>
<a name="PasDoc-Variables"></a><h3 class="summary">Variables</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a href="CastleClassUtils.html#StdInStream">StdInStream</a></b>:TStream;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code><b><a href="CastleClassUtils.html#StdOutStream">StdOutStream</a></b>:TStream;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code><b><a href="CastleClassUtils.html#StdErrStream">StdErrStream</a></b>:TStream;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code><b><a href="CastleClassUtils.html#StdInReader">StdInReader</a></b>: <a href="CastleClassUtils.TTextReader.html">TTextReader</a>;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Functions and Procedures</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StringsAdd"></a><code>procedure <b>StringsAdd</b>(Strs: TStrings; Count: integer; itemVal: string='dummy'); overload;</code></td>
</tr>
<tr><td colspan="1">
<p>
Add some strings.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="AddStrArrayToStrings"></a><code>procedure <b>AddStrArrayToStrings</b>(const StrArr: array of string; strlist: TStrings);</code></td>
</tr>
<tr><td colspan="1">
<p>
Add all strings from string array to TStrings instance.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="Strings_AddSplittedString"></a><code>procedure <b>Strings_AddSplittedString</b>(Strings: TStrings; const S, Splitter: string);</code></td>
</tr>
<tr><td colspan="1">
<p>
Splits S by Splitter, and adds each splitted part to Strings. Splitting is done by Splitter, i.e. if N is the number of occurrences of Splitter inside S, then it always adds N + 1 strings to Strings. Yes, this means that if S starts with Splitter then the first part is equal to ''. And if S ends with Splitter then the last oart is equal to ''.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="Strings_AddCastleEngineProgramHelpSuffix"></a><code>procedure <b>Strings_AddCastleEngineProgramHelpSuffix</b>( Strings: TStrings; const DisplayApplicationName: string; const Version: string; WrapLines: boolean);</code></td>
</tr>
<tr><td colspan="1">
<p>
Something like <a class="normal" href="CastleUtils.html#SCastleEngineProgramHelpSuffix">SCastleEngineProgramHelpSuffix</a>, but appends contents as a couple of lines to Strings.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="Strings_SetText"></a><code>procedure <b>Strings_SetText</b>(SList: TStrings; const S: string);</code></td>
</tr>
<tr><td colspan="1">
<p>
Use this instead of <code>SList.Text := S</code> to workaround FPC 2.0.2 bug. See [<a href="http://www.freepascal.org/mantis/view.php?id=6699">http://www.freepascal.org/mantis/view.php?id=6699</a>]</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="Strings_Trim"></a><code>procedure <b>Strings_Trim</b>(Strings: TStrings; MaxCount: Cardinal);</code></td>
</tr>
<tr><td colspan="1">
<p>
Make sure we don't have more than MaxCount strings on a list. Removes the last strings if necessary.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamWriteLongWord"></a><code>procedure <b>StreamWriteLongWord</b>(Stream: TStream; const Value: LongWord);</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadLongWord"></a><code>function <b>StreamReadLongWord</b>(Stream: TStream): LongWord;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamWriteByte"></a><code>procedure <b>StreamWriteByte</b>(Stream: TStream; const Value: Byte);</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadByte"></a><code>function <b>StreamReadByte</b>(Stream: TStream): Byte;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="WriteStr"></a><code>procedure <b>WriteStr</b>(Stream: TStream; const S: string); overload;</code></td>
</tr>
<tr><td colspan="1">
<p>
Write string contents to stream. This isn't a procedure to encode a string within a binary stream, this only writes string contents (Length(S) bytes) into the stream. Versions with "ln" append newline. Versions without Stream parameter write to <a class="normal" href="CastleClassUtils.html#StdOutStream">StdOutStream</a>. </p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="WritelnStr"></a><code>procedure <b>WritelnStr</b>(Stream: TStream; const S: string); overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="WriteStr"></a><code>procedure <b>WriteStr</b>(const S: string); overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="WritelnStr"></a><code>procedure <b>WritelnStr</b>(const S: string); overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadChar"></a><code>function <b>StreamReadChar</b>(Stream: TStream): char;</code></td>
</tr>
<tr><td colspan="1">
<p>
Read one character from stream. </p>
<h6 class="description_section">Exceptions raised</h6>
<dl class="exceptions_raised">
<dt><code>EReadError</code></dt>
<dd>If end of stream.</dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadZeroEndString"></a><code>function <b>StreamReadZeroEndString</b>(Stream: TStream): string;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadUpto_NotEOS"></a><code>function <b>StreamReadUpto_NotEOS</b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; backEndingChar: boolean; out endingChar: char): string; overload;</code></td>
</tr>
<tr><td colspan="1">
<p>
Read stream, until you find some character in EndingChars. Returns read contents, without final character (the one in EndingChars set).
<p>If you use a version with BackEndingChar parameter and pass BackEndingChar = <code>True</code>, then the ending character will be returned back to stream (we will start reading from it next time). Note that "returning the character" is done by Seek(-1, soFromCurrent), which may not be possible on some streams. Wrap a stream in <a class="normal" href="CastleClassUtils.TPeekCharStream.html">TPeekCharStream</a> instead, and use <a class="normal" href="CastleClassUtils.TPeekCharStream.html#ReadUpto">TPeekCharStream.ReadUpto</a>, to be able to "return back" a character reliably.
<p>Independently from BackEndingChar, if you use a version with EndingChar parameter, it will be set to the ending character.
<p> </p>
<h6 class="description_section">Exceptions raised</h6>
<dl class="exceptions_raised">
<dt><code>EReadError</code></dt>
<dd>If the stream will end before encountering one of EndingChars.</dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadUpto_NotEOS"></a><code>function <b>StreamReadUpto_NotEOS</b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; backEndingChar: boolean): string; overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadUpto_NotEOS"></a><code>function <b>StreamReadUpto_NotEOS</b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; out endingChar: char): string; overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadUpto_NotEOS"></a><code>function <b>StreamReadUpto_NotEOS</b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>): string; overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadUpto_EOS"></a><code>function <b>StreamReadUpto_EOS</b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; backEndingChar: boolean; out endingChar: integer): string; overload;</code></td>
</tr>
<tr><td colspan="1">
<p>
Read stream, until you find some character in EndingChars, or end of stream.
<p>Compared to <a class="normal" href="CastleClassUtils.html#StreamReadUpto_NotEOS">StreamReadUpto_NotEOS</a>, this treats "end of stream" as a normal situation, and doesn't raise any exception on it. It sets EndingChar to -1 on end of stream. When EndingChar is not -1, you know you can safely cast it to normal 8-bit character.
<p>Everything else works like with <a class="normal" href="CastleClassUtils.html#StreamReadUpto_NotEOS">StreamReadUpto_NotEOS</a>. </p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadUpto_EOS"></a><code>function <b>StreamReadUpto_EOS</b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; backEndingChar: boolean): string; overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadUpto_EOS"></a><code>function <b>StreamReadUpto_EOS</b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>; out endingChar: integer): string; overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadUpto_EOS"></a><code>function <b>StreamReadUpto_EOS</b>(Stream: TStream; const endingChars: <a href="CastleStringUtils.html#TSetOfChars">TSetOfChars</a>): string; overload;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="CreateReadFileStream"></a><code>function <b>CreateReadFileStream</b>(const URL: string): TStream; deprecated;</code></td>
</tr>
<tr><td colspan="1">
<p class="hint_directive">Warning: this symbol is deprecated.</p><p>
Open a proper stream to read a file, fast (with buffering) and with seeking. This gives you a stream most comfortable for reading (buffering means that you can read small, comfortable pieces of it; seeking means you can jump freely to various file positions, back and forward).
<p>On different OSes or even compilers this may require a little different stream, so it's safest to just use this function. For example, traditional Classes.TFileStream doesn't do buffering. Although under Linux, the buffering of file handles is done at kernel level (so everything works fast), on Windows the slowdown is noticeable. This function will always create proper stream descendant, eventually wrapping some standard stream in a buffered stream with full seeking capability.
<p> Instead of this, use <a class="normal" href="CastleDownload.html#Download">CastleDownload.Download</a> with LocalFileInMemory.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="ReadGrowingStream"></a><code>procedure <b>ReadGrowingStream</b>(GrowingStream, DestStream: TStream; ResetDestStreamPosition: boolean);</code></td>
</tr>
<tr><td colspan="1">
<p>
Read a growing stream, and append it to another destination stream. A "growing stream" is a stream that we can only read sequentially, no seeks allowed, and size is unknown until we hit the end.
<p>The only operation we do on GrowingStream is GrowingStream.Read and the only operation on DestStream is DestStream.WriteBuffer. So DestStream usually must be able to grow dynamically to accomodate any GrowingStream input size.
<p>This procedure ends when GrowingStream ends. If ResetDestStreamPosition then at the end we do DestStream.Position := 0 (since it is usually useful and it would be easy for you to forget about it).</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="ReadGrowingStreamToString"></a><code>function <b>ReadGrowingStreamToString</b>(GrowingStream: TStream): string;</code></td>
</tr>
<tr><td colspan="1">
<p>
Read a growing stream, and returns it's contents as a string. A "growing stream" is a stream that we can only read sequentially, no seeks allowed, and size is unknown until we hit the end.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamWriteString"></a><code>procedure <b>StreamWriteString</b>(Stream: TStream; const s: string);</code></td>
</tr>
<tr><td colspan="1">
<p>
Encode / decode a string in a binary stream. Records string length (4 bytes), then the string contents (Length(S) bytes). </p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamReadString"></a><code>function <b>StreamReadString</b>(Stream: TStream): string;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamToString"></a><code>function <b>StreamToString</b>(Stream: TStream): string;</code></td>
</tr>
<tr><td colspan="1">
<p>
Convert whole Stream to a string. Changes Stream.Position to 0 and then reads Stream.Size bytes, so be sure that Stream.Size is usable.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StreamSaveToFile"></a><code>procedure <b>StreamSaveToFile</b>(Stream: TStream; const URL: string);</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="MemoryStreamLoadFromString"></a><code>procedure <b>MemoryStreamLoadFromString</b>(const Stream: TMemoryStream; const S: string; const Rewind: boolean = true);</code></td>
</tr>
<tr><td colspan="1">
<p>
Set contents of TMemoryStream to given string. If Rewind then the position is reset to the beginning, otherwise it stays at the end.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="MemoryStreamLoadFromString"></a><code>function <b>MemoryStreamLoadFromString</b>( const S: string; const Rewind: boolean = true): TMemoryStream;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="CreateIfNeeded"></a><code>procedure <b>CreateIfNeeded</b>(var Component: TComponent; ComponentClass: TComponentClass; Owner: TComponent);</code></td>
</tr>
<tr><td colspan="1">
<p>
Create Component instance, if it's <code>Nil</code>. If Component = nil then it will do <code>Component := ComponentClass.Create(Owner)</code>.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="FPGObjectList_RemoveNils"></a><code>function <b>FPGObjectList_RemoveNils</b>(List: TFPSList): Cardinal;</code></td>
</tr>
<tr><td colspan="1">
<p>
Remove all nils. Returns how many instances were removed (how much Count was decreased). Do not call this with other TFPSList descendants, only TFPGObjectList specializations.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="FPGObjectList_ReplaceAll"></a><code>procedure <b>FPGObjectList_ReplaceAll</b>(List: TFPSList; OldItem, NewItem: TObject);</code></td>
</tr>
<tr><td colspan="1">
<p>
Replace all OldItem instances with NewItem. Do not call this with other TFPSList descendants, only TFPGObjectList specializations.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="FPGObjectList_FreeAndNilItem"></a><code>procedure <b>FPGObjectList_FreeAndNilItem</b>(List: TFPSList; I: Integer);</code></td>
</tr>
<tr><td colspan="1">
<p>
Free and set to <code>Nil</code> given item on TFPGObjectList.
<p>Usually, simply assigning to it <code>Nil</code> value (when list has FreeObjects = <code>True</code>) would do the trick. Unfortunately there's bug <a href="http://bugs.freepascal.org/view.php?id=19854">http://bugs.freepascal.org/view.php?id=19854</a> .</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="FPGObjectList_NilItem"></a><code>procedure <b>FPGObjectList_NilItem</b>(List: TFPSList; I: Integer);</code></td>
</tr>
<tr><td colspan="1">
<p>
Set to <code>Nil</code> (never freeing) given item on TFPGObjectList.</p>
</td></tr>
</table>
<h3 class="detail">Constants</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="DefaultReadBufferSize"></a><code><b>DefaultReadBufferSize</b> = 1024 * 1024;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<h3 class="detail">Variables</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StdInStream"></a><code><b>StdInStream</b>:TStream;</code></td>
</tr>
<tr><td colspan="1">
<p>
Streams that wrap standard input/output/error of the program.
<p>Note that you can't simultaneously read from <code>StdInStream</code> and <a class="normal" href="CastleClassUtils.html#StdInReader">StdInReader</a> (reasons: see comments at <a class="normal" href="CastleClassUtils.TTextReader.html">TTextReader</a> class, <a class="normal" href="CastleClassUtils.TTextReader.html">TTextReader</a> has to internally manage the stream underneath).
<p>Notes for Windows:
<p></p>
<ol class="paragraph_spacing">
<li value="1"><p> Under Windows when program is a GUI program then some (or all) of the variables below may be nil.</p></li>
<li value="2"><p> But they don't <i>have</i> to be nil. User can run a GUI program and explicitly redirect it's standard stream, e.g. <code>cat something | my_program</code> for stdin or <code>my_program > output.txt</code> for stdout. Actually some shells, like Cygwin's bash, always redirect some streams "under the mask". And then you have some of std* streams available.
<p>Actually FPC (and Delphi?) RTL don't provide in such cases valid Input/Output/ErrOutput variables (because IsConsole = false). But my streams below try to obtain standard stream handles under Windows <i>regardless of IsConsole value</i>. So even a GUI program is able to write to stdin/stdout/stderr using these streams.</p></li>
<li value="3"><p> Unfortunately, in a GUI program under Windows you <i>cannot</i> depend on the fact that "<a class="normal" href="CastleClassUtils.html#StdOutStream">StdOutStream</a> <> nil means that stdout is actually available (because user redirected stdout etc.)". Reason? Windows failure, as usual:
<p>This is tested on Windows 2000 Prof, with FPC 2.0.0 and 2.1.1 (revision 4317). When no stdout is available, <a class="normal" href="CastleClassUtils.html#StdOutStream">StdOutStream</a> should be nil, because GetStdHandle(STD_OUTPUT_HANDLE) should return 0. However, GetStdHandle(STD_OUTPUT_HANDLE) doesn't return 0... It returns some stupid handle (no, not INVALID_HANDLE_VALUE either) that you can't write into (trying to write returns in ERROR_INVALID_HANDLE WinAPI error). It seems that there is no way for me to check whether GetStdHandle(STD_OUTPUT_HANDLE) returned valid handle (e.g. because the program's stdout was redirected, so stdout is perfectly available) or whether it returned something unusable.
<p>So if you write an $apptype GUI program and you want to try to use stdout anyway, you can't just check for <a class="normal" href="CastleClassUtils.html#StdOutStream">StdOutStream</a> <> nil. You should also check the first write to <a class="normal" href="CastleClassUtils.html#StdOutStream">StdOutStream</a> for EWriteError.
<p>Note that GetStdHandle(STD_INPUT_HANDLE) and GetStdHandle(STD_ERROR_HANDLE) work correctly, so it should be OK to check <code>StdInStream</code> <> nil or <a class="normal" href="CastleClassUtils.html#StdErrStream">StdErrStream</a> <> nil. The only problematic one is GetStdHandle(STD_OUTPUT_HANDLE).</p></li>
</ol>
<p>
<p></p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StdOutStream"></a><code><b>StdOutStream</b>:TStream;</code></td>
</tr>
<tr><td colspan="1">
<p>
Streams that wrap standard input/output/error of the program.
<p>Note that you can't simultaneously read from <a class="normal" href="CastleClassUtils.html#StdInStream">StdInStream</a> and <a class="normal" href="CastleClassUtils.html#StdInReader">StdInReader</a> (reasons: see comments at <a class="normal" href="CastleClassUtils.TTextReader.html">TTextReader</a> class, <a class="normal" href="CastleClassUtils.TTextReader.html">TTextReader</a> has to internally manage the stream underneath).
<p>Notes for Windows:
<p></p>
<ol class="paragraph_spacing">
<li value="1"><p> Under Windows when program is a GUI program then some (or all) of the variables below may be nil.</p></li>
<li value="2"><p> But they don't <i>have</i> to be nil. User can run a GUI program and explicitly redirect it's standard stream, e.g. <code>cat something | my_program</code> for stdin or <code>my_program > output.txt</code> for stdout. Actually some shells, like Cygwin's bash, always redirect some streams "under the mask". And then you have some of std* streams available.
<p>Actually FPC (and Delphi?) RTL don't provide in such cases valid Input/Output/ErrOutput variables (because IsConsole = false). But my streams below try to obtain standard stream handles under Windows <i>regardless of IsConsole value</i>. So even a GUI program is able to write to stdin/stdout/stderr using these streams.</p></li>
<li value="3"><p> Unfortunately, in a GUI program under Windows you <i>cannot</i> depend on the fact that "<code>StdOutStream</code> <> nil means that stdout is actually available (because user redirected stdout etc.)". Reason? Windows failure, as usual:
<p>This is tested on Windows 2000 Prof, with FPC 2.0.0 and 2.1.1 (revision 4317). When no stdout is available, <code>StdOutStream</code> should be nil, because GetStdHandle(STD_OUTPUT_HANDLE) should return 0. However, GetStdHandle(STD_OUTPUT_HANDLE) doesn't return 0... It returns some stupid handle (no, not INVALID_HANDLE_VALUE either) that you can't write into (trying to write returns in ERROR_INVALID_HANDLE WinAPI error). It seems that there is no way for me to check whether GetStdHandle(STD_OUTPUT_HANDLE) returned valid handle (e.g. because the program's stdout was redirected, so stdout is perfectly available) or whether it returned something unusable.
<p>So if you write an $apptype GUI program and you want to try to use stdout anyway, you can't just check for <code>StdOutStream</code> <> nil. You should also check the first write to <code>StdOutStream</code> for EWriteError.
<p>Note that GetStdHandle(STD_INPUT_HANDLE) and GetStdHandle(STD_ERROR_HANDLE) work correctly, so it should be OK to check <a class="normal" href="CastleClassUtils.html#StdInStream">StdInStream</a> <> nil or <a class="normal" href="CastleClassUtils.html#StdErrStream">StdErrStream</a> <> nil. The only problematic one is GetStdHandle(STD_OUTPUT_HANDLE).</p></li>
</ol>
<p>
<p></p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StdErrStream"></a><code><b>StdErrStream</b>:TStream;</code></td>
</tr>
<tr><td colspan="1">
<p>
Streams that wrap standard input/output/error of the program.
<p>Note that you can't simultaneously read from <a class="normal" href="CastleClassUtils.html#StdInStream">StdInStream</a> and <a class="normal" href="CastleClassUtils.html#StdInReader">StdInReader</a> (reasons: see comments at <a class="normal" href="CastleClassUtils.TTextReader.html">TTextReader</a> class, <a class="normal" href="CastleClassUtils.TTextReader.html">TTextReader</a> has to internally manage the stream underneath).
<p>Notes for Windows:
<p></p>
<ol class="paragraph_spacing">
<li value="1"><p> Under Windows when program is a GUI program then some (or all) of the variables below may be nil.</p></li>
<li value="2"><p> But they don't <i>have</i> to be nil. User can run a GUI program and explicitly redirect it's standard stream, e.g. <code>cat something | my_program</code> for stdin or <code>my_program > output.txt</code> for stdout. Actually some shells, like Cygwin's bash, always redirect some streams "under the mask". And then you have some of std* streams available.
<p>Actually FPC (and Delphi?) RTL don't provide in such cases valid Input/Output/ErrOutput variables (because IsConsole = false). But my streams below try to obtain standard stream handles under Windows <i>regardless of IsConsole value</i>. So even a GUI program is able to write to stdin/stdout/stderr using these streams.</p></li>
<li value="3"><p> Unfortunately, in a GUI program under Windows you <i>cannot</i> depend on the fact that "<a class="normal" href="CastleClassUtils.html#StdOutStream">StdOutStream</a> <> nil means that stdout is actually available (because user redirected stdout etc.)". Reason? Windows failure, as usual:
<p>This is tested on Windows 2000 Prof, with FPC 2.0.0 and 2.1.1 (revision 4317). When no stdout is available, <a class="normal" href="CastleClassUtils.html#StdOutStream">StdOutStream</a> should be nil, because GetStdHandle(STD_OUTPUT_HANDLE) should return 0. However, GetStdHandle(STD_OUTPUT_HANDLE) doesn't return 0... It returns some stupid handle (no, not INVALID_HANDLE_VALUE either) that you can't write into (trying to write returns in ERROR_INVALID_HANDLE WinAPI error). It seems that there is no way for me to check whether GetStdHandle(STD_OUTPUT_HANDLE) returned valid handle (e.g. because the program's stdout was redirected, so stdout is perfectly available) or whether it returned something unusable.
<p>So if you write an $apptype GUI program and you want to try to use stdout anyway, you can't just check for <a class="normal" href="CastleClassUtils.html#StdOutStream">StdOutStream</a> <> nil. You should also check the first write to <a class="normal" href="CastleClassUtils.html#StdOutStream">StdOutStream</a> for EWriteError.
<p>Note that GetStdHandle(STD_INPUT_HANDLE) and GetStdHandle(STD_ERROR_HANDLE) work correctly, so it should be OK to check <a class="normal" href="CastleClassUtils.html#StdInStream">StdInStream</a> <> nil or <code>StdErrStream</code> <> nil. The only problematic one is GetStdHandle(STD_OUTPUT_HANDLE).</p></li>
</ol>
<p>
<p></p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="StdInReader"></a><code><b>StdInReader</b>: <a href="CastleClassUtils.TTextReader.html">TTextReader</a>;</code></td>
</tr>
<tr><td colspan="1">
</td></tr>
</table>
<!-- Piwik -->
<script type="text/javascript">
var _paq = _paq || [];
_paq.push(["trackPageView"]);
_paq.push(["enableLinkTracking"]);
(function() {
var u=(("https:" == document.location.protocol) ? "https" : "http") + "://michalis.ii.uni.wroc.pl/piwik-castle-engine/";
_paq.push(["setTrackerUrl", u+"piwik.php"]);
_paq.push(["setSiteId", "1"]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Piwik Code -->
<noscript>
<!-- Piwik Image Tracker -->
<img src="http://michalis.ii.uni.wroc.pl/piwik-castle-engine/piwik.php?idsite=1&rec=1" style="border:0" alt="" />
<!-- End Piwik -->
</noscript>
<hr noshade size="1"><span class="appinfo"><em>Generated by <a href="http://pasdoc.sourceforge.net/">PasDoc 0.13.0</a> on 2015-06-15 04:43:09</em>
</span>
</td></tr></table></body></html>
|