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
|
<pre>
<font color="#0000ff">// Copyright (c) 2002 David Muse</font>
<font color="#0000ff">// See the file COPYING for more information</font>
<font color="#a020f0">#include </font><font color="#ff00ff"><rudiments/variablebuffer.h></font>
<font color="#a020f0">#include </font><font color="#ff00ff"><stdio.h></font>
<font color="#a020f0">#ifdef RUDIMENTS_NAMESPACE</font>
<font color="#a52a2a"><b>using</b></font> <font color="#2e8b57"><b>namespace</b></font> rudiments;
<font color="#a020f0">#endif</font>
<font color="#2e8b57"><b>int</b></font> main(<font color="#2e8b57"><b>int</b></font> argc, <font color="#2e8b57"><b>const</b></font> <font color="#2e8b57"><b>char</b></font> **argv) {
<font color="#0000ff">// create a buffer</font>
variablebuffer *vb=<font color="#a52a2a"><b>new</b></font> variablebuffer(<font color="#ff00ff">10</font>,<font color="#ff00ff">10</font>);
<font color="#0000ff">// append some string sequences to the buffer and display the contents</font>
<font color="#0000ff">// of the buffer byte by byte</font>
vb->append((<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> *)<font color="#ff00ff">"12345"</font>,<font color="#ff00ff">5</font>);
vb->append((<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> *)<font color="#ff00ff">"12345"</font>,<font color="#ff00ff">5</font>);
vb->append((<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> *)<font color="#ff00ff">"12345"</font>,<font color="#ff00ff">5</font>);
vb->append((<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> *)<font color="#ff00ff">"12345"</font>,<font color="#ff00ff">5</font>);
vb->append((<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> *)<font color="#ff00ff">"12345"</font>,<font color="#ff00ff">5</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>size_t</b></font> i=<font color="#ff00ff">0</font>; i<vb->getSize(); i++) {
printf(<font color="#ff00ff">"</font><font color="#6a5acd">%c</font><font color="#ff00ff">"</font>,vb->getBuffer()[i]);
}
printf(<font color="#ff00ff">"</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#0000ff">// write 66666 to the buffer at position 0 and display it's contents</font>
<font color="#0000ff">// byte by byte (the first 5 bytes should be overwritten)</font>
vb->setPosition(<font color="#ff00ff">0</font>);
vb->write((<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> *)<font color="#ff00ff">"66666"</font>,<font color="#ff00ff">5</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>size_t</b></font> i=<font color="#ff00ff">0</font>; i<vb->getSize(); i++) {
printf(<font color="#ff00ff">"</font><font color="#6a5acd">%c</font><font color="#ff00ff">"</font>,vb->getBuffer()[i]);
}
printf(<font color="#ff00ff">"</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#0000ff">// write 66666 to the buffer at position 30 and display it's contents</font>
<font color="#0000ff">// byte by byte, displaying nonprintable characters as .'s</font>
<font color="#0000ff">// (there should be a gap in the buffer now containing random data)</font>
vb->setPosition(<font color="#ff00ff">30</font>);
vb->write((<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> *)<font color="#ff00ff">"66666"</font>,<font color="#ff00ff">5</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>size_t</b></font> i=<font color="#ff00ff">0</font>; i<vb->getSize(); i++) {
<font color="#a52a2a"><b>if</b></font> (vb->getBuffer()[i]>=<font color="#ff00ff">' '</font> && vb->getBuffer()[i]<=<font color="#ff00ff">'~'</font>) {
printf(<font color="#ff00ff">"</font><font color="#6a5acd">%c</font><font color="#ff00ff">"</font>,vb->getBuffer()[i]);
} <font color="#a52a2a"><b>else</b></font> {
printf(<font color="#ff00ff">"."</font>);
}
}
printf(<font color="#ff00ff">"</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#0000ff">// set the current position to 50</font>
vb->setPosition(<font color="#ff00ff">50</font>);
<font color="#0000ff">// Append 12345 to the buffer and display it's contents byte by byte,</font>
<font color="#0000ff">// displaying nonprintable characters as .'s</font>
<font color="#0000ff">// Since we used append() instead of write(), the data should not be</font>
<font color="#0000ff">// written at position 50, but rather just at the current end of</font>
<font color="#0000ff">// the buffer.</font>
vb->append((<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> *)<font color="#ff00ff">"12345"</font>,<font color="#ff00ff">5</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>size_t</b></font> i=<font color="#ff00ff">0</font>; i<vb->getSize(); i++) {
<font color="#a52a2a"><b>if</b></font> (vb->getBuffer()[i]>=<font color="#ff00ff">' '</font> && vb->getBuffer()[i]<=<font color="#ff00ff">'~'</font>) {
printf(<font color="#ff00ff">"</font><font color="#6a5acd">%c</font><font color="#ff00ff">"</font>,vb->getBuffer()[i]);
} <font color="#a52a2a"><b>else</b></font> {
printf(<font color="#ff00ff">"."</font>);
}
}
printf(<font color="#ff00ff">"</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#0000ff">// Write 12345 to the buffer at the current position and display it's</font>
<font color="#0000ff">// contents byte by byte, displaying nonprintable characters as .'s</font>
<font color="#0000ff">// The current position should just be the end of the buffer, since</font>
<font color="#0000ff">// we just appended. So calling write() here is equivalent to calling</font>
<font color="#0000ff">// append.</font>
vb->write((<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> *)<font color="#ff00ff">"12345"</font>,<font color="#ff00ff">5</font>);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>size_t</b></font> i=<font color="#ff00ff">0</font>; i<vb->getSize(); i++) {
<font color="#a52a2a"><b>if</b></font> (vb->getBuffer()[i]>=<font color="#ff00ff">' '</font> && vb->getBuffer()[i]<=<font color="#ff00ff">'~'</font>) {
printf(<font color="#ff00ff">"</font><font color="#6a5acd">%c</font><font color="#ff00ff">"</font>,vb->getBuffer()[i]);
} <font color="#a52a2a"><b>else</b></font> {
printf(<font color="#ff00ff">"."</font>);
}
}
printf(<font color="#ff00ff">"</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#0000ff">// read 4 bytes from position 0 of the buffer and display them</font>
<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font> buffer[<font color="#ff00ff">5</font>];
buffer[<font color="#ff00ff">4</font>]=(<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>char</b></font>)<font color="#ff00ff">NULL</font>;
vb->setPosition(<font color="#ff00ff">0</font>);
<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>long</b></font> sizeread=vb->read(buffer,<font color="#ff00ff">4</font>);
printf(<font color="#ff00ff">"</font><font color="#6a5acd">%ld</font><font color="#ff00ff">: "</font>,sizeread);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>long</b></font> i=<font color="#ff00ff">0</font>; i<sizeread; i++) {
printf(<font color="#ff00ff">"</font><font color="#6a5acd">%c</font><font color="#ff00ff">"</font>,buffer[i]);
}
printf(<font color="#ff00ff">"</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#0000ff">// read 4 bytes from position 5 of the buffer and display them</font>
vb->setPosition(<font color="#ff00ff">5</font>);
sizeread=vb->read(buffer,<font color="#ff00ff">4</font>);
printf(<font color="#ff00ff">"</font><font color="#6a5acd">%ld</font><font color="#ff00ff">: "</font>,sizeread);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>long</b></font> i=<font color="#ff00ff">0</font>; i<sizeread; i++) {
printf(<font color="#ff00ff">"</font><font color="#6a5acd">%c</font><font color="#ff00ff">"</font>,buffer[i]);
}
printf(<font color="#ff00ff">"</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#0000ff">// read 4 bytes from position 60 of the buffer and display them</font>
<font color="#0000ff">// (since this is off of the end of the buffer, nothing should be</font>
<font color="#0000ff">// displayed)</font>
vb->setPosition(<font color="#ff00ff">60</font>);
sizeread=vb->read(buffer,<font color="#ff00ff">4</font>);
printf(<font color="#ff00ff">"</font><font color="#6a5acd">%ld</font><font color="#ff00ff">: "</font>,sizeread);
<font color="#a52a2a"><b>for</b></font> (<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>long</b></font> i=<font color="#ff00ff">0</font>; i<sizeread; i++) {
printf(<font color="#ff00ff">"</font><font color="#6a5acd">%c</font><font color="#ff00ff">"</font>,buffer[i]);
}
printf(<font color="#ff00ff">"</font><font color="#6a5acd">\n</font><font color="#ff00ff">"</font>);
<font color="#a52a2a"><b>delete</b></font> vb;
}
</pre>
|