<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NeoEGM.com &#187; Programming</title>
	<atom:link href="http://www.neoegm.com/tech/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.neoegm.com</link>
	<description>Knowledge is inside</description>
	<lastBuildDate>Mon, 08 Jul 2024 05:38:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.39</generator>
	<item>
		<title>How to compile C++ console programs which support special characters (ISO-8859-1)</title>
		<link>http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/</link>
		<comments>http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 05:00:24 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[ASCII]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Charset]]></category>
		<category><![CDATA[Compile]]></category>
		<category><![CDATA[DOS]]></category>
		<category><![CDATA[G++]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[Hard-coded]]></category>
		<category><![CDATA[iconv]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[ISO-8859-1]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[RAD]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Special Characters]]></category>
		<category><![CDATA[Strings]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=1000</guid>
		<description><![CDATA[The GCC compiler (or G++) does not always work with our source code files just as we would expect it to. This specially happens when there are special characters in our files (the ones with ASCII codes higher than 127). Take the following program as a sample (the strings are written in spanish): Let&#8217;s compile [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>The GCC compiler (or G++) does not always work with our source code files just as we would expect it to. This specially happens when there are special characters in our files (the ones with ASCII codes higher than 127).</p>
<p>Take the following program as a sample (the strings are written in spanish):</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
using std::cout;
using std::cin;
using std::endl;

#include &lt;string&gt;
using std::string;

int main()
{
	string sDummy;

	cout &lt;&lt; &quot;Por favor ingrese su contraseña: &quot;;
	cin &gt;&gt; sDummy;

	cout &lt;&lt; endl;
	cout &lt;&lt; &quot;Su contraseña es inválida, por favor verifíquela e inténtelo nuevamente. Ha ingresado: '&quot; &lt;&lt; sDummy &lt;&lt; &quot;'.&quot; &lt;&lt; endl;

	return 0;
}
</pre>
<p>Let&#8217;s compile it&#8230; </p>

<pre class="console">
g++ TestChars.cpp -o TestChars.exe
</pre>
<p>And execute it&#8230; We can easily imagine the output&#8230; But&#8230; This is what we get:</p>

<pre class="console">
Por favor ingrese su contrase±a: contraseña

Su contrase±a es invßlida, por favor veriffquela e intTntelo nuevamente. Ha ingresado: 'contraseña'.
</pre>
<p>Notice that the string that we&#8217;ve just typed (&#8220;contraseña&#8221;) gets correctly printed, while the ones hard-coded in the program don&#8217;t.</p>
<p>So&#8230; What can we do?</p>
<p>Well, there are some compiler command line parameters ready to help us&#8230; They are the <a href="http://gcc.gnu.org/onlinedocs/cpp/Invocation.html#index-character-set_002c-input-178">finput-charset</a> and <a href="http://gcc.gnu.org/onlinedocs/cpp/Invocation.html#index-fexec_002dcharset-173">fexec-charset</a> command line arguments&#8230;</p>
<p>Both take as additional parameter a <em>charset</em> name from the ones supported by the compiler&#8230;</p>
<p>For the interested ones, here is the output of the charsets supported by the library that GCC uses to make the conversion&#8230; They may not be the same on every system&#8230;</p>
<pre class="brush: plain; collapse: true; light: false; title: ; toolbar: true; notranslate">
# iconv --list
The following list contain all the coded character sets known.  This does not necessarily mean that all combinations of these names can be used for the FROM and TO command line parameters.  One coded character set can be listed with several different names (aliases).

437, 500, 500V1, 850, 851, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865, 866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3, 8859_4, 8859_5, 8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993, 10646-1:1993/UCS4, ANSI_X3.4-1968, ANSI_X3.4-1986, ANSI_X3.4, ANSI_X3.110-1983, ANSI_X3.110, ARABIC, ARABIC7, ARMSCII-8, ASCII, ASMO-708, ASMO_449, BALTIC, BIG-5, BIG-FIVE, BIG5-HKSCS, BIG5, BIG5HKSCS, BIGFIVE, BRF, BS_4730, CA, CN-BIG5, CN-GB, CN, CP-AR, CP-GR, CP-HU, CP037, CP038, CP273, CP274, CP275, CP278, CP280, CP281, CP282, CP284, CP285, CP290, CP297, CP367, CP420, CP423, CP424, CP437, CP500, CP737, CP775, CP803, CP813, CP819, CP850, CP851, CP852, CP855, CP856, CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP866NAV, CP868, CP869, CP870, CP871, CP874, CP875, CP880, CP891, CP901, CP902, CP903, CP904, CP905, CP912, CP915, CP916, CP918, CP920, CP921, CP922, CP930, CP932, CP933, CP935, CP936, CP937, CP939, CP949, CP950, CP1004, CP1008, CP1025, CP1026, CP1046, CP1047, CP1070, CP1079, CP1081, CP1084, CP1089, CP1097, CP1112, CP1122, CP1123, CP1124, CP1125, CP1129, CP1130, CP1132, CP1133, CP1137, CP1140, CP1141, CP1142, CP1143, CP1144, CP1145, CP1146, CP1147, CP1148, CP1149, CP1153, CP1154, CP1155, CP1156, CP1157, CP1158, CP1160, CP1161, CP1162, CP1163, CP1164, CP1166, CP1167, CP1250, CP1251, CP1252, CP1253, CP1254, CP1255, CP1256, CP1257, CP1258, CP1282, CP1361, CP1364, CP1371, CP1388, CP1390, CP1399, CP4517, CP4899, CP4909, CP4971, CP5347, CP9030, CP9066, CP9448, CP10007, CP12712, CP16804, CPIBM861, CSA7-1, CSA7-2, CSASCII, CSA_T500-1983, CSA_T500, CSA_Z243.4-1985-1, CSA_Z243.4-1985-2, CSA_Z243.419851, CSA_Z243.419852, CSDECMCS, CSEBCDICATDE, CSEBCDICATDEA, CSEBCDICCAFR, CSEBCDICDKNO, CSEBCDICDKNOA, CSEBCDICES, CSEBCDICESA, CSEBCDICESS, CSEBCDICFISE, CSEBCDICFISEA, CSEBCDICFR, CSEBCDICIT, CSEBCDICPT, CSEBCDICUK, CSEBCDICUS, CSEUCKR, CSEUCPKDFMTJAPANESE, CSGB2312, CSHPROMAN8, CSIBM037, CSIBM038, CSIBM273, CSIBM274, CSIBM275, CSIBM277, CSIBM278, CSIBM280, CSIBM281, CSIBM284, CSIBM285, CSIBM290, CSIBM297, CSIBM420, CSIBM423, CSIBM424, CSIBM500, CSIBM803, CSIBM851, CSIBM855, CSIBM856, CSIBM857, CSIBM860, CSIBM863, CSIBM864, CSIBM865, CSIBM866, CSIBM868, CSIBM869, CSIBM870, CSIBM871, CSIBM880, CSIBM891, CSIBM901, CSIBM902, CSIBM903, CSIBM904, CSIBM905, CSIBM918, CSIBM921, CSIBM922, CSIBM930, CSIBM932, CSIBM933, CSIBM935, CSIBM937, CSIBM939, CSIBM943, CSIBM1008, CSIBM1025, CSIBM1026, CSIBM1097, CSIBM1112, CSIBM1122, CSIBM1123, CSIBM1124, CSIBM1129, CSIBM1130, CSIBM1132, CSIBM1133, CSIBM1137, CSIBM1140, CSIBM1141, CSIBM1142, CSIBM1143, CSIBM1144, CSIBM1145, CSIBM1146, CSIBM1147, CSIBM1148, CSIBM1149, CSIBM1153, CSIBM1154, CSIBM1155, CSIBM1156, CSIBM1157, CSIBM1158, CSIBM1160, CSIBM1161, CSIBM1163, CSIBM1164, CSIBM1166, CSIBM1167, CSIBM1364, CSIBM1371, CSIBM1388, CSIBM1390, CSIBM1399, CSIBM4517, CSIBM4899, CSIBM4909, CSIBM4971, CSIBM5347, CSIBM9030, CSIBM9066, CSIBM9448, CSIBM12712, CSIBM16804, CSIBM11621162, CSISO4UNITEDKINGDOM, CSISO10SWEDISH, CSISO11SWEDISHFORNAMES, CSISO14JISC6220RO, CSISO15ITALIAN, CSISO16PORTUGESE, CSISO17SPANISH, CSISO18GREEK7OLD, CSISO19LATINGREEK, CSISO21GERMAN, CSISO25FRENCH, CSISO27LATINGREEK1, CSISO49INIS, CSISO50INIS8, CSISO51INISCYRILLIC, CSISO58GB1988, CSISO60DANISHNORWEGIAN, CSISO60NORWEGIAN1, CSISO61NORWEGIAN2, CSISO69FRENCH, CSISO84PORTUGUESE2, CSISO85SPANISH2, CSISO86HUNGARIAN, CSISO88GREEK7, CSISO89ASMO449, CSISO90, CSISO92JISC62991984B, CSISO99NAPLPS, CSISO103T618BIT, CSISO111ECMACYRILLIC, CSISO121CANADIAN1, CSISO122CANADIAN2, CSISO139CSN369103, CSISO141JUSIB1002, CSISO143IECP271, CSISO150, CSISO150GREEKCCITT, CSISO151CUBA, CSISO153GOST1976874, CSISO646DANISH, CSISO2022CN, CSISO2022JP, CSISO2022JP2, CSISO2022KR, CSISO2033, CSISO5427CYRILLIC, CSISO5427CYRILLIC1981, CSISO5428GREEK, CSISO10367BOX, CSISOLATIN1, CSISOLATIN2, CSISOLATIN3, CSISOLATIN4, CSISOLATIN5, CSISOLATIN6, CSISOLATINARABIC, CSISOLATINCYRILLIC, CSISOLATINGREEK, CSISOLATINHEBREW, CSKOI8R, CSKSC5636, CSMACINTOSH, CSNATSDANO, CSNATSSEFI, CSN_369103, CSPC8CODEPAGE437, CSPC775BALTIC, CSPC850MULTILINGUAL, CSPC862LATINHEBREW, CSPCP852, CSSHIFTJIS, CSUCS4, CSUNICODE, CSWINDOWS31J, CUBA, CWI-2, CWI, CYRILLIC, DE, DEC-MCS, DEC, DECMCS, DIN_66003, DK, DS2089, DS_2089, E13B, EBCDIC-AT-DE-A, EBCDIC-AT-DE, EBCDIC-BE, EBCDIC-BR, EBCDIC-CA-FR, EBCDIC-CP-AR1, EBCDIC-CP-AR2, EBCDIC-CP-BE, EBCDIC-CP-CA, EBCDIC-CP-CH, EBCDIC-CP-DK, EBCDIC-CP-ES, EBCDIC-CP-FI, EBCDIC-CP-FR, EBCDIC-CP-GB, EBCDIC-CP-GR, EBCDIC-CP-HE, EBCDIC-CP-IS, EBCDIC-CP-IT, EBCDIC-CP-NL, EBCDIC-CP-NO, EBCDIC-CP-ROECE, EBCDIC-CP-SE, EBCDIC-CP-TR, EBCDIC-CP-US, EBCDIC-CP-WT, EBCDIC-CP-YU, EBCDIC-CYRILLIC, EBCDIC-DK-NO-A, EBCDIC-DK-NO, EBCDIC-ES-A, EBCDIC-ES-S, EBCDIC-ES, EBCDIC-FI-SE-A, EBCDIC-FI-SE, EBCDIC-FR, EBCDIC-GREEK, EBCDIC-INT, EBCDIC-INT1, EBCDIC-IS-FRISS, EBCDIC-IT, EBCDIC-JP-E, EBCDIC-JP-KANA, EBCDIC-PT, EBCDIC-UK, EBCDIC-US, EBCDICATDE, EBCDICATDEA, EBCDICCAFR, EBCDICDKNO, EBCDICDKNOA, EBCDICES, EBCDICESA, EBCDICESS, EBCDICFISE, EBCDICFISEA, EBCDICFR, EBCDICISFRISS, EBCDICIT, EBCDICPT, EBCDICUK, EBCDICUS, ECMA-114, ECMA-118, ECMA-128, ECMA-CYRILLIC, ECMACYRILLIC, ELOT_928, ES, ES2, EUC-CN, EUC-JISX0213, EUC-JP-MS, EUC-JP, EUC-KR, EUC-TW, EUCCN, EUCJP-MS, EUCJP-OPEN, EUCJP-WIN, EUCJP, EUCKR, EUCTW, FI, FR, GB, GB2312, GB13000, GB18030, GBK, GB_1988-80, GB_198880, GEORGIAN-ACADEMY, GEORGIAN-PS, GOST_19768-74, GOST_19768, GOST_1976874, GREEK-CCITT, GREEK, GREEK7-OLD, GREEK7, GREEK7OLD, GREEK8, GREEKCCITT, HEBREW, HP-GREEK8, HP-ROMAN8, HP-ROMAN9, HP-THAI8, HP-TURKISH8, HPGREEK8, HPROMAN8, HPROMAN9, HPTHAI8, HPTURKISH8, HU, IBM-803, IBM-856, IBM-901, IBM-902, IBM-921, IBM-922, IBM-930, IBM-932, IBM-933, IBM-935, IBM-937, IBM-939, IBM-943, IBM-1008, IBM-1025, IBM-1046, IBM-1047, IBM-1097, IBM-1112, IBM-1122, IBM-1123, IBM-1124, IBM-1129, IBM-1130, IBM-1132, IBM-1133, IBM-1137, IBM-1140, IBM-1141, IBM-1142, IBM-1143, IBM-1144, IBM-1145, IBM-1146, IBM-1147, IBM-1148, IBM-1149, IBM-1153, IBM-1154, IBM-1155, IBM-1156, IBM-1157, IBM-1158, IBM-1160, IBM-1161, IBM-1162, IBM-1163, IBM-1164, IBM-1166, IBM-1167, IBM-1364, IBM-1371, IBM-1388, IBM-1390, IBM-1399, IBM-4517, IBM-4899, IBM-4909, IBM-4971, IBM-5347, IBM-9030, IBM-9066, IBM-9448, IBM-12712, IBM-16804, IBM037, IBM038, IBM256, IBM273, IBM274, IBM275, IBM277, IBM278, IBM280, IBM281, IBM284, IBM285, IBM290, IBM297, IBM367, IBM420, IBM423, IBM424, IBM437, IBM500, IBM775, IBM803, IBM813, IBM819, IBM848, IBM850, IBM851, IBM852, IBM855, IBM856, IBM857, IBM860, IBM861, IBM862, IBM863, IBM864, IBM865, IBM866, IBM866NAV, IBM868, IBM869, IBM870, IBM871, IBM874, IBM875, IBM880, IBM891, IBM901, IBM902, IBM903, IBM904, IBM905, IBM912, IBM915, IBM916, IBM918, IBM920, IBM921, IBM922, IBM930, IBM932, IBM933, IBM935, IBM937, IBM939, IBM943, IBM1004, IBM1008, IBM1025, IBM1026, IBM1046, IBM1047, IBM1089, IBM1097, IBM1112, IBM1122, IBM1123, IBM1124, IBM1129, IBM1130, IBM1132, IBM1133, IBM1137, IBM1140, IBM1141, IBM1142, IBM1143, IBM1144, IBM1145, IBM1146, IBM1147, IBM1148, IBM1149, IBM1153, IBM1154, IBM1155, IBM1156, IBM1157, IBM1158, IBM1160, IBM1161, IBM1162, IBM1163, IBM1164, IBM1166, IBM1167, IBM1364, IBM1371, IBM1388, IBM1390, IBM1399, IBM4517, IBM4899, IBM4909, IBM4971, IBM5347, IBM9030, IBM9066, IBM9448, IBM12712, IBM16804, IEC_P27-1, IEC_P271, INIS-8, INIS-CYRILLIC, INIS, INIS8, INISCYRILLIC, ISIRI-3342, ISIRI3342, ISO-2022-CN-EXT, ISO-2022-CN, ISO-2022-JP-2, ISO-2022-JP-3, ISO-2022-JP, ISO-2022-KR, ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-9E, ISO-8859-10, ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16, ISO-10646, ISO-10646/UCS2, ISO-10646/UCS4, ISO-10646/UTF-8, ISO-10646/UTF8, ISO-CELTIC, ISO-IR-4, ISO-IR-6, ISO-IR-8-1, ISO-IR-9-1, ISO-IR-10, ISO-IR-11, ISO-IR-14, ISO-IR-15, ISO-IR-16, ISO-IR-17, ISO-IR-18, ISO-IR-19, ISO-IR-21, ISO-IR-25, ISO-IR-27, ISO-IR-37, ISO-IR-49, ISO-IR-50, ISO-IR-51, ISO-IR-54, ISO-IR-55, ISO-IR-57, ISO-IR-60, ISO-IR-61, ISO-IR-69, ISO-IR-84, ISO-IR-85, ISO-IR-86, ISO-IR-88, ISO-IR-89, ISO-IR-90, ISO-IR-92, ISO-IR-98, ISO-IR-99, ISO-IR-100, ISO-IR-101, ISO-IR-103, ISO-IR-109, ISO-IR-110, ISO-IR-111, ISO-IR-121, ISO-IR-122, ISO-IR-126, ISO-IR-127, ISO-IR-138, ISO-IR-139, ISO-IR-141, ISO-IR-143, ISO-IR-144, ISO-IR-148, ISO-IR-150, ISO-IR-151, ISO-IR-153, ISO-IR-155, ISO-IR-156, ISO-IR-157, ISO-IR-166, ISO-IR-179, ISO-IR-193, ISO-IR-197, ISO-IR-199, ISO-IR-203, ISO-IR-209, ISO-IR-226, ISO/TR_11548-1, ISO646-CA, ISO646-CA2, ISO646-CN, ISO646-CU, ISO646-DE, ISO646-DK, ISO646-ES, ISO646-ES2, ISO646-FI, ISO646-FR, ISO646-FR1, ISO646-GB, ISO646-HU, ISO646-IT, ISO646-JP-OCR-B, ISO646-JP, ISO646-KR, ISO646-NO, ISO646-NO2, ISO646-PT, ISO646-PT2, ISO646-SE, ISO646-SE2, ISO646-US, ISO646-YU, ISO2022CN, ISO2022CNEXT, ISO2022JP, ISO2022JP2, ISO2022KR, ISO6937, ISO8859-1, ISO8859-2, ISO8859-3, ISO8859-4, ISO8859-5, ISO8859-6, ISO8859-7, ISO8859-8, ISO8859-9, ISO8859-9E, ISO8859-10, ISO8859-11, ISO8859-13, ISO8859-14, ISO8859-15, ISO8859-16, ISO11548-1, ISO88591, ISO88592, ISO88593, ISO88594, ISO88595, ISO88596, ISO88597, ISO88598, ISO88599, ISO88599E, ISO885910, ISO885911, ISO885913, ISO885914, ISO885915, ISO885916, ISO_646.IRV:1991, ISO_2033-1983, ISO_2033, ISO_5427-EXT, ISO_5427, ISO_5427:1981, ISO_5427EXT, ISO_5428, ISO_5428:1980, ISO_6937-2, ISO_6937-2:1983, ISO_6937, ISO_6937:1992, ISO_8859-1, ISO_8859-1:1987, ISO_8859-2, ISO_8859-2:1987, ISO_8859-3, ISO_8859-3:1988, ISO_8859-4, ISO_8859-4:1988, ISO_8859-5, ISO_8859-5:1988, ISO_8859-6, ISO_8859-6:1987, ISO_8859-7, ISO_8859-7:1987, ISO_8859-7:2003, ISO_8859-8, ISO_8859-8:1988, ISO_8859-9, ISO_8859-9:1989, ISO_8859-9E, ISO_8859-10, ISO_8859-10:1992, ISO_8859-14, ISO_8859-14:1998, ISO_8859-15, ISO_8859-15:1998, ISO_8859-16, ISO_8859-16:2001, ISO_9036, ISO_10367-BOX, ISO_10367BOX, ISO_11548-1, ISO_69372, IT, JIS_C6220-1969-RO, JIS_C6229-1984-B, JIS_C62201969RO, JIS_C62291984B, JOHAB, JP-OCR-B, JP, JS, JUS_I.B1.002, KOI-7, KOI-8, KOI8-R, KOI8-RU, KOI8-T, KOI8-U, KOI8, KOI8R, KOI8U, KSC5636, L1, L2, L3, L4, L5, L6, L7, L8, L10, LATIN-9, LATIN-GREEK-1, LATIN-GREEK, LATIN1, LATIN2, LATIN3, LATIN4, LATIN5, LATIN6, LATIN7, LATIN8, LATIN10, LATINGREEK, LATINGREEK1, MAC-CENTRALEUROPE, MAC-CYRILLIC, MAC-IS, MAC-SAMI, MAC-UK, MAC, MACCYRILLIC, MACINTOSH, MACIS, MACUK, MACUKRAINIAN, MIK, MS-ANSI, MS-ARAB, MS-CYRL, MS-EE, MS-GREEK, MS-HEBR, MS-MAC-CYRILLIC, MS-TURK, MS932, MS936, MSCP949, MSCP1361, MSMACCYRILLIC, MSZ_7795.3, MS_KANJI, NAPLPS, NATS-DANO, NATS-SEFI, NATSDANO, NATSSEFI, NC_NC0010, NC_NC00-10, NC_NC00-10:81, NF_Z_62-010, NF_Z_62-010_(1973), NF_Z_62-010_1973, NF_Z_62010, NF_Z_62010_1973, NO, NO2, NS_4551-1, NS_4551-2, NS_45511, NS_45512, OS2LATIN1, OSF00010001, OSF00010002, OSF00010003, OSF00010004, OSF00010005, OSF00010006, OSF00010007, OSF00010008, OSF00010009, OSF0001000A, OSF00010020, OSF00010100, OSF00010101, OSF00010102, OSF00010104, OSF00010105, OSF00010106, OSF00030010, OSF0004000A, OSF0005000A, OSF05010001, OSF100201A4, OSF100201A8, OSF100201B5, OSF100201F4, OSF100203B5, OSF1002011C, OSF1002011D, OSF1002035D, OSF1002035E, OSF1002035F, OSF1002036B, OSF1002037B, OSF10010001, OSF10010004, OSF10010006, OSF10020025, OSF10020111, OSF10020115, OSF10020116, OSF10020118, OSF10020122, OSF10020129, OSF10020352, OSF10020354, OSF10020357, OSF10020359, OSF10020360, OSF10020364, OSF10020365, OSF10020366, OSF10020367, OSF10020370, OSF10020387, OSF10020388, OSF10020396, OSF10020402, OSF10020417, PT, PT2, PT154, R8, R9, RK1048, ROMAN8, ROMAN9, RUSCII, SE, SE2, SEN_850200_B, SEN_850200_C, SHIFT-JIS, SHIFT_JIS, SHIFT_JISX0213, SJIS-OPEN, SJIS-WIN, SJIS, SS636127, STRK1048-2002, ST_SEV_358-88, T.61-8BIT, T.61, T.618BIT, TCVN-5712, TCVN, TCVN5712-1, TCVN5712-1:1993, THAI8, TIS-620, TIS620-0, TIS620.2529-1, TIS620.2533-0, TIS620, TS-5881, TSCII, TURKISH8, UCS-2, UCS-2BE, UCS-2LE, UCS-4, UCS-4BE, UCS-4LE, UCS2, UCS4, UHC, UJIS, UK, UNICODE, UNICODEBIG, UNICODELITTLE, US-ASCII, US, UTF-7, UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE, UTF7, UTF8, UTF16, UTF16BE, UTF16LE, UTF32, UTF32BE, UTF32LE, VISCII, WCHAR_T, WIN-SAMI-2, WINBALTRIM, WINDOWS-31J, WINDOWS-874, WINDOWS-936, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252, WINDOWS-1253, WINDOWS-1254, WINDOWS-1255, WINDOWS-1256, WINDOWS-1257, WINDOWS-1258, WINSAMI2, WS2, YU
</pre>
<p>The first parameter, <strong><em>finput-charset</em></strong>, is the charset used to <strong>read</strong> the source code files&#8230; The second one, fexec-charset</em></strong>, is the used to store the strings and character constants <strong>in the executable file</strong>, so they will be shown correctly while running&#8230;</p>
<p>So, assuming you&#8217;re writing your source files in <strong><em><a href="http://en.wikipedia.org/wiki/ISO/IEC_8859-1">iso-8859-1</a></em></strong> (the most common charset on Windows platforms) and want to show them while running in <strong><em><a href="http://en.wikipedia.org/wiki/Code_page_437">cp437</a></strong></em> (the DOS console charset), we could call the compiler like this:</p>

<pre class="console">
g++ TestChars.cpp -o TestChars.exe -finput-charset=iso-8859-1 -fexec-charset=cp437
</pre>
<p>And what do we expect to get? <img src="http://www.neoegm.com/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>

<pre class="console">
Por favor ingrese su contraseña: contraseña

Su contraseña es inválida, por favor verifíquela e inténtelo nuevamente. Ha ingresado: 'contraseña'.
</pre>
<p>Everything worked just the way we expected! <img src="http://www.neoegm.com/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Now, finally, I&#8217;ll show how to configure these command line options for the wxDev IDE&#8230;</p>
<p>First of all, I must say there are two ways to set compiler options: global options and project options&#8230; As you may imagine, the first ones are applied to every compiled project, while the latter just get applied to the currently opened project (they are set in a per project basis)&#8230;</p>
<p>To set the parameters in the global compiler options you must got to the Tools menu and then open the Compiler Options item&#8230;</p>
<p><img src="http://www.neoegm.com/wp-content/uploads/2009/08/Main_Menu_EN.png" alt="Main_Menu_EN" title="Main_Menu_EN" width="236" height="229" class="aligncenter size-full wp-image-1006" /></p>
<p>After that, you simply enter the following string (the parameters) into the &#8220;Add the following commands when calling compiler&#8221; box:</p>
<pre class="brush: plain; light: true; title: ; notranslate">
-finput-charset=iso-8859-1 -fexec-charset=cp437
</pre>
<p>If there are already other parameters configured, you should append them&#8230;</p>
<p><img src="http://www.neoegm.com/wp-content/uploads/2009/08/Main_Compiler_Options_Filled_EN.png" alt="Main_Compiler_Options_Filled_EN" title="Main_Compiler_Options_Filled_EN" width="477" height="503" class="aligncenter size-full wp-image-1004" /></p>
<p>They will be sent to both the C compiler and the C++ compiler&#8230;</p>
<p>The other alternative is to set the same parameters in the project options&#8230;</p>
<p>First, we open the project options&#8230; Either going to Project->Project Options or right clicking the project and going to &#8220;Project Options&#8221;&#8230;</p>
<p><img src="http://www.neoegm.com/wp-content/uploads/2009/08/Project_Menu_EN.png" alt="Project_Menu_EN" title="Project_Menu_EN" width="278" height="235" class="aligncenter size-full wp-image-1008" /></p>
<p>Then, we go to the Parameters page and paste the parameters string in the two compiler boxes&#8230; Both parameters can be entered either in a single line or broken apart&#8230; Just as before, if there are already other parameters configured, you should append them&#8230;</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/08/Project_Options_Parameters_Filled_EN.png" rel="lightbox[1000]"><img src="http://www.neoegm.com/wp-content/uploads/2009/08/Project_Options_Parameters_Filled_EN-299x222.png" alt="Project_Options_Parameters_Filled_EN" title="Project_Options_Parameters_Filled_EN" width="299" height="222" class="aligncenter size-medium wp-image-1002" /></a></p>
<p>Whell, that&#8217;s all&#8230; Most IDEs will have similar options!<br />
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="Programming|NeoEGM com">Programming|NeoEGM com</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="graficos del diapason de la guitarra">graficos del diapason de la guitarra</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="mail czset cn loc:ES">mail czset cn loc:ES</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="mail gpl com cn loc:ES">mail gpl com cn loc:ES</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="mail gino com cn loc:ES">mail gino com cn loc:ES</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="wxDev|NeoEGM com">wxDev|NeoEGM com</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="mail ecma-music com loc:ES">mail ecma-music com loc:ES</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="mail sami com cn loc:ES">mail sami com cn loc:ES</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="where r the notes on a quitar">where r the notes on a quitar</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/" title="email ecma-music com loc:ES">email ecma-music com loc:ES</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/tech/programming/c-cpp/how-to-compile-c-console-programs-which-support-special-characters-iso-8859-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple C++ List Class</title>
		<link>http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/</link>
		<comments>http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 20:55:36 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[List]]></category>
		<category><![CDATA[Memory Leaks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=976</guid>
		<description><![CDATA[Just as I published some days ago the Simple C++ String Class as a C++ learning exercise, now I am freeing a Simple C++ List Class. The standard library has a list class. But, while learning, it&#8217;s a good idea to know how to develop your own list class. That&#8217;s why I made the List [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Easy to use C++ memory leak detection library">cppMemDbg &#8211; Easy to use C++ memory leak detection library </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Just as I published some days ago the <a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/">Simple C++ String Class</a> as a C++ learning exercise, now I am freeing a <strong>Simple C++ List Class</strong>.</p>
<p>The standard library has a <em>list</em> class. But, while learning, it&#8217;s a good idea to know how to develop your own <em>list</em> class.</p>
<p>That&#8217;s why I made the <em>List</em> class. It&#8217;s not intended for professional projects (for them, you should use the standard library&#8217;s <em>list</em>), but as help to learn C++.</p>
<pre class="brush: cpp; title: ; notranslate">
template &lt;class TYPE&gt;
class List
{
	/* ... */

public:
	//Construction and destruction
	List() { /* ... */ }
	~List() { /* ... */ }
	
	List(const List&amp; rlList) { /* ... */ }
	
	//Assignment operator
	List&amp; operator=(const List&amp; rlList);

	//Information
	int Length() { /* ... */ }
	bool Empty() { /* ... */ }

	//Element managing
	int Add(TYPE&amp; rtData);
	TYPE* Elem(int nPos);
	bool Delete(int nPos);
	void DeleteAll();
	
	//Search
	int Find(TYPE&amp; rItem, int nStartAt = 0);

	//Operadores
	TYPE&amp; operator[](int nPos) { /* ... */ }	//Elem
	int operator&lt;&lt;(TYPE&amp; rdData) { /* ... */ }	//Add

protected:
	void FreeList();
	void Init() { /* ... */ }
};

//Output
template &lt;class TYPE&gt;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; oStream, List&lt;TYPE&gt;&amp; rlList);
</pre>
<p><span id="more-976"></span></p>
<p>This is a sample project made to explain the <em>List</em> class usage.</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
	using std::cout;
	using std::cin;
	using std::endl;

#include &quot;List.h&quot;
#include &quot;String.h&quot;

int main(int argc, char *argv[])
{
	cout &lt;&lt; &quot;List sample project&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;-------------------&quot; &lt;&lt; endl &lt;&lt; endl;


	//-----------------------------
	cout &lt;&lt; &quot;&gt; Creating a list of strings... An empty string finishes the list...&quot; &lt;&lt; endl &lt;&lt; endl;

	List&lt;String&gt; lStrings;
	String sTmp;
	
	do
	{
		cout &lt;&lt; &quot;&gt; String &quot; &lt;&lt; lStrings.Length()+1 &lt;&lt; &quot;: &quot;;
		cin &gt;&gt; sTmp;
		
		if (sTmp.Length())
			lStrings.Add(sTmp);
	} while (sTmp.Length());
	
	cout &lt;&lt; endl &lt;&lt; &quot;&gt; Entry finished. &quot; &lt;&lt; lStrings.Length() &lt;&lt; &quot; string(s) loaded.&quot; &lt;&lt; endl &lt;&lt; endl;
	
	cout &lt;&lt; &quot;&gt; Printing list...&quot; &lt;&lt; endl &lt;&lt; endl;
	
	cout &lt;&lt; lStrings;

	cout &lt;&lt; endl;
	//-----------------------------
	
	
	//-----------------------------
	do
	{
		cout &lt;&lt; &quot;&gt; Type a string to find in the list (exact match) [empty = end]: &quot;;
		cin &gt;&gt; sTmp;

		if (sTmp.Length())
		{
			int nFound = lStrings.Find(sTmp);
			
			if (nFound != -1)
			{
				lStrings.Delete(nFound);

				cout &lt;&lt; &quot;&gt; String \&quot;&quot; &lt;&lt; sTmp &lt;&lt; &quot;\&quot; found at position &quot; &lt;&lt; nFound+1 &lt;&lt; &quot; and removed.&quot; &lt;&lt; endl &lt;&lt; endl;
				
				cout &lt;&lt; &quot;&gt; Printing list...&quot; &lt;&lt; endl &lt;&lt; endl;

				if (!lStrings.Empty())
					cout &lt;&lt; lStrings;
				else
				{
					cout &lt;&lt; &quot;[Empty list]&quot; &lt;&lt; endl &lt;&lt; endl;
					break;
				}
			}
			else
				cout &lt;&lt; &quot;&gt; String \&quot;&quot; &lt;&lt; sTmp &lt;&lt; &quot;\&quot; not found.&quot; &lt;&lt; endl;
		}
		
		cout &lt;&lt; endl;
	} while (sTmp.Length());
	
	cout &lt;&lt; endl;
	//-----------------------------

	//-----------------------------
	cout &lt;&lt; &quot;&gt; Now getting a bit more complex... Let's create a list of lists of strings... An empty string finishes the list and an empty first string finishes the list of lists...&quot; &lt;&lt; endl &lt;&lt; endl;

	List&lt; List&lt;String&gt; &gt; lLists;
	List&lt;String&gt; lTmpList;
	int nStrings = 0;

	do
	{
		lTmpList.DeleteAll();
		
		cout &lt;&lt; &quot;&gt; Loading list &quot; &lt;&lt; lLists.Length()+1 &lt;&lt; &quot;...&quot; &lt;&lt; endl;
		
		do
		{
			cout &lt;&lt; &quot;\t&gt; String &quot; &lt;&lt; lTmpList.Length()+1 &lt;&lt; &quot;: &quot;;
			cin &gt;&gt; sTmp;
			
			if (sTmp.Length())
			{
				lTmpList.Add(sTmp);
				nStrings++;
			}
		} while (sTmp.Length());
		
		if (lTmpList.Length())
			lLists.Add(lTmpList);
	} while (lTmpList.Length());
	
	cout &lt;&lt; endl &lt;&lt; &quot;&gt; Entry finished. &quot; &lt;&lt; lLists.Length() &lt;&lt; &quot; list(s) loaded, &quot; &lt;&lt; nStrings &lt;&lt; &quot; string(s) loaded.&quot; &lt;&lt; endl &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;&gt; Printing lists (standard method)...&quot; &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; lLists;

	cout &lt;&lt; endl;
	
	cout &lt;&lt; &quot;&gt; Printing lists (custom method)...&quot; &lt;&lt; endl &lt;&lt; endl;
	
	for (int i = 0; i &lt; lLists.Length(); i++)
	{
		List&lt;String&gt; *plList = lLists.Elem(i);

		if (plList)
		{
			cout &lt;&lt; &quot;- List &quot; &lt;&lt; i &lt;&lt; endl &lt;&lt; endl;
			cout &lt;&lt; *plList;
			cout &lt;&lt; endl;
		}
	}
	//-----------------------------

    return 0;
}
</pre>
<p>And this is its output:</p>

<pre class="console">
List sample project
-------------------

> Creating a list of strings... An empty string finishes the list...

> String 1: Test 1
> String 2: Test 2
> String 3: Test 3, a little bit longer
> String 4:

> Entry finished. 3 string(s) loaded.

> Printing list...

Test 1
Test 2
Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Hello
> String "Hello" not found.

> Type a string to find in the list (exact match) [empty = end]: Test 1
> String "Test 1" found at position 1 and removed.

> Printing list...

Test 2
Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Test 1
> String "Test 1" not found.

> Type a string to find in the list (exact match) [empty = end]: test 2
> String "test 2" not found.

> Type a string to find in the list (exact match) [empty = end]: Test 2
> String "Test 2" found at position 1 and removed.

> Printing list...

Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Test 3, a little bit longer
> String "Test 3, a little bit longer" found at position 1 and removed.

> Printing list...

[Empty list]


> Now getting a bit more complex... Let's create a list of lists of strings... An empty string finishes the list and an empty first string finishes the list of lists...

> Loading list 1...
        > String 1: Test 1a
        > String 2: Test 1b
        > String 3: Test 1c
        > String 4:
> Loading list 2...
        > String 1: Test 2a
        > String 2: Test 2b
        > String 3: Test 2c
        > String 4: Test 2d
        > String 5:
> Loading list 3...
        > String 1: Test 3a
        > String 2: Test 3b
        > String 3: This is a looooooooooooooooooooooong string
        > String 4:
> Loading list 4...
        > String 1:

> Entry finished. 3 list(s) loaded, 10 string(s) loaded.


> Printing lists (standard method)...

Test 1a
Test 1b
Test 1c

Test 2a
Test 2b
Test 2c
Test 2d

Test 3a
Test 3b
This is a looooooooooooooooooooooong string


> Printing lists (custom method)...

- List 0

Test 1a
Test 1b
Test 1c

- List 1

Test 2a
Test 2b
Test 2c
Test 2d

- List 2

Test 3a
Test 3b
This is a looooooooooooooooooooooong string

</pre>
<p>This project also uses the <a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/">Simple C++ String Class</a> to show the List class working with custom classes. Exactly the same code could be without problem by simply replacing &#8220;String&#8221; with &#8220;string&#8221; and including the standard library&#8217;s <em>string</em> header.</p>
<p>The code completely is portable.</p>
<p>It&#8217;s been developed, compiled and tested using <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> for Windows with the <a href="http://www.mingw.org/">MinGW compiler</a> (included in the bundle).</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">List is licensed under the <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<p><br/><br />
I&#8217;ve also tested the project for memory leaks using the <a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/">cppMemDbg – Easy to use C++ memory leak detection library</a> and it found no problems at all&#8230;</p>
<p>You can download the library output and the cppMemDbg adapted project here:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_cppMemDbg_Output.txt">Download cppMemDbg Output</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_1.0_cppMemDbg.zip">Download Adapted Project 1.0</a></p>
</div>
<p><br/><br />
Now, finally, the download links:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_1.0.zip">Download List Class 1.0</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_1.0.zip">Download List Sample Project 1.0</a></p>
</div>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="c list class">c list class</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="list class c">list class c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="class list c">class list c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="lista simple c">lista simple c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="clase lista c">clase lista c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="LISTA SIMPLE EN C">LISTA SIMPLE EN C</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="listas simples en c">listas simples en c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="clase lista en c">clase lista en c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="c class list">c class list</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="list class in c">list class in c</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Easy to use C++ memory leak detection library">cppMemDbg &#8211; Easy to use C++ memory leak detection library </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple C++ String Class</title>
		<link>http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/</link>
		<comments>http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 14:12:15 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[Strings]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=764</guid>
		<description><![CDATA[Every C++ programmer knows that the standard library has a string class. But, while learning, it&#8217;s a good idea to know how to develop your own string class. That&#8217;s why I made the String class. It&#8217;s not intended for professional projects (for them, you should use the standard library&#8217;s string), but as help to learn [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Easy to use C++ memory leak detection library">cppMemDbg &#8211; Easy to use C++ memory leak detection library </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Every C++ programmer knows that the standard library has a <em>string</em> class. But, while learning, it&#8217;s a good idea to know how to develop your own <em>string</em> class.</p>
<p>That&#8217;s why I made the <em>String</em> class. It&#8217;s not intended for professional projects (for them, you should use the standard library&#8217;s <em>string</em>), but as help to learn C++.</p>
<pre class="brush: cpp; title: ; notranslate">
class String
{
	char *m_pszString;	//Allocated buffer
	int m_nAllocated;	//Allocated length

public:
	//Construction and destruction
	String() { /* ... */ }
	~String() { /* ... */ }

	//Copy constructors
	String(const char *pszString) { /* ... */ }
	String(const String&amp; rsString) { /* ... */ }

	//Operators (assignment)
	String&amp; operator=(const char *pszString);
	String&amp; operator=(const String&amp; rsString) { /* ... */ }

	//Operators (concatenation)
	String&amp; operator+=(const char *pszString);
	String&amp; operator+=(String&amp; rsString) { /* ... */ }
	String operator+(String rsString);

	//Operators (comparison)
	bool operator&lt;(String sString) { /* ... */ }
	bool operator&lt;=(String sString) { /* ... */ }

	bool operator&gt;(String sString) { /* ... */ }
	bool operator&gt;=(String sString) { /* ... */ }

	bool operator==(String sString) { /* ... */ }
	bool operator!=(String sString) { /* ... */ }

	//Operations
	void Clear();
	String Lower() { /* ... */ }
	String Upper() { /* ... */ }

	//Information
	int Length() { /* ... */ }

	//Cast operators
	operator const char*() { /* ... */ }

protected:	//Helper functions
	/* ... */
};

//Output e input
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; oStream, String&amp; rsString);
std::istream&amp; operator&gt;&gt;(std::istream&amp; iStream, String&amp; rsString);
</pre>
<p><span id="more-764"></span></p>
<p>This is a sample project made to explain the <em>String</em> class usage.</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
	using std::cout;
	using std::cin;
	using std::endl;
#include &quot;String.h&quot;

using namespace std;

int main(int argc, char *argv[])
{
	cout &lt;&lt; &quot;String sample project&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;---------------------&quot; &lt;&lt; endl &lt;&lt; endl;

	String a(&quot;This&quot;), b(&quot;is&quot;), c(&quot;a&quot;), d(&quot;test&quot;);
	String e = a + &quot; &quot; + b + &quot; &quot; + c + &quot; &quot; + d;

	cout &lt;&lt; &quot;String parts:&quot; &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; a &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; b &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; c &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; d &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;Concatenated with spaces:&quot; &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; e &lt;&lt; endl &lt;&lt; endl;

	String f, g;

	cout &lt;&lt; &quot;Please input a string (empty to break): &quot;;
	cin &gt;&gt; f;
	cout &lt;&lt; &quot;Please input other string (empty to break): &quot;;
	cin &gt;&gt; g;

	cout &lt;&lt; endl;

	cout &lt;&lt; &quot;1st string (&quot; &lt;&lt; f &lt;&lt; &quot;) is &quot; &lt;&lt; f.Length() &lt;&lt; &quot; chars long.&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;2nd string (&quot; &lt;&lt; g &lt;&lt; &quot;) is &quot; &lt;&lt; g.Length() &lt;&lt; &quot; chars long.&quot; &lt;&lt; endl;

	cout &lt;&lt; endl;

	cout &lt;&lt; &quot;1st string in lowercase is &quot; &lt;&lt; f.Lower() &lt;&lt; endl;
	cout &lt;&lt; &quot;1st string in uppercase is &quot; &lt;&lt; f.Upper() &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;2nd string in lowercase is &quot; &lt;&lt; g.Lower() &lt;&lt; endl;
	cout &lt;&lt; &quot;2nd string in uppercase is &quot; &lt;&lt; g.Upper() &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;1 &lt; 2\t=&gt; &quot; &lt;&lt; (f&lt;g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 &lt;= 2\t=&gt; &quot; &lt;&lt; (f&lt;=g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 &gt; 2\t=&gt; &quot; &lt;&lt; (f&gt;g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 &gt;= 2\t=&gt; &quot; &lt;&lt; (f&gt;=g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 == 2\t=&gt; &quot; &lt;&lt; (f==g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 != 2\t=&gt; &quot; &lt;&lt; (f!=g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl &lt;&lt; endl;

	if (f == g)
		cout &lt;&lt; &quot;Strings are equal.&quot; &lt;&lt; endl;
	else
		cout &lt;&lt; &quot;Strings are not equal.&quot; &lt;&lt; endl;

	cout &lt;&lt; endl;

	cout &lt;&lt; &quot;1+2\t=&gt; &quot; &lt;&lt; f+g &lt;&lt; endl;
	cout &lt;&lt; &quot;2+1\t=&gt; &quot; &lt;&lt; g+f &lt;&lt; endl;

	cout &lt;&lt; endl;

    return 0;
}
</pre>
<p>And this is its output:</p>

<pre class="console">
String sample project
---------------------

String parts:
        This
        is
        a
        test

Concatenated with spaces:
        This is a test

Please input a string (empty to break): Hello, string 1
Please input other string (empty to break): Phrase 2

1st string (Hello, string 1) is 15 chars long.
2nd string (Phrase 2) is 8 chars long.

1st string in lowercase is hello, string 1
1st string in uppercase is HELLO, STRING 1

2nd string in lowercase is phrase 2
2nd string in uppercase is PHRASE 2

1 < 2   => false
1 <= 2  => false
1 > 2   => true
1 >= 2  => true
1 == 2  => false
1 != 2  => true

Strings are not equal.

1+2     => Hello, string 1Phrase 2
2+1     => Phrase 2Hello, string 1

</pre>
<p>The code completely is portable.</p>
<p>It&#8217;s been developed, compiled and tested using <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> for Windows with the <a href="http://www.mingw.org/">MinGW compiler</a> (included in the bundle).</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">String is licensed under the <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<p>Now the download links:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/string-class/String_1.0.zip">Download String Class 1.0</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/string-class/String_Sample_Project_1.0.zip">Download String Sample Project 1.0</a></p>
</div>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="open source c string class">open source c string class</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="clase string c">clase string c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="C String Class Source Code">C String Class Source Code</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="string c español">string c español</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="simple string class c">simple string class c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="simple string class">simple string class</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="mail istream al loc:ES">mail istream al loc:ES</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="string c">string c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="simple c string class">simple c string class</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="c string class source">c string class source</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Easy to use C++ memory leak detection library">cppMemDbg &#8211; Easy to use C++ memory leak detection library </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cppMemDbg &#8211; Easy to use C++ memory leak detection library</title>
		<link>http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/</link>
		<comments>http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 11:51:13 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Memory Leaks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=727</guid>
		<description><![CDATA[This library is the C++ sequel to the cMemDbg. Just as the cMemDbg, it is a very easy to use library which can help you to detect and track memory leaks. Its usage is very similar to the cMemDbg, but with support for the C++ operators (new, new[], delete and delete[]). There are lots of [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" rel="bookmark" title="cMemDbg &#8211; Easy to use C memory leak detection library">cMemDbg &#8211; Easy to use C memory leak detection library </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>This library is the C++ sequel to the <a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/">cMemDbg</a>.</p>
<p>Just as the cMemDbg, it is a very easy to use library which can help you to detect and track memory leaks.</p>
<p>Its usage is very similar to the cMemDbg, but with support for the C++ operators (new, new[], delete and delete[]).</p>
<p>There are lots of solutions for this on the net, but this one has the particularity of being really simple to implement.</p>

<pre class="console">>new  003D26D8  36  [Main.cpp:127]
>new  003D2708  36  [Main.cpp:128]
>ERROR  Bad free type  free => delete  003D2708  36
(Main.cpp:128)
>free  003D2708  36  (Main.cpp:128)  [Main.cpp:129]
>free  003D2708  0    [Main.cpp:130]
>ERROR  Trying to free unallocated memory: 003D2708
[Main.cpp:130]
>delete[]  003D3EB0  7  (String.cpp:59)  [String.h:41]
[...]
>delete[]  003D24F0  4  (String.cpp:59)  [String.h:41]
>delete  003D2490  40  (Lista.h:120)  [Lista.h:112]
>INFO  PROBLEM: Memory leak found (36 bytes)
>INFO  Unfreed block  003D26D8  36    [Main.cpp:127]
</pre>
<p><span id="more-727"></span>You just have to add the following include to your main include file (a file that gets included by each file of your project) or, in case you don&#8217;t have one, to each file that calls any memory allocation function (malloc, realloc, calloc, free, new, new[], delete or delete[]).</p>
<p>This is the line:</p>
<pre class="brush: cpp; light: true; title: ; notranslate">#include &quot;cMemDbg.h&quot;</pre>
<p>There are two extra cautions you have to take into account:<br />
1- Include it <strong>after</strong> the standard headers (stdio.h, stdlib.h, malloc.h, etc.).<br />
2- Never call the delete (or delete[]) operator without knowing if its argument is NULL. So: &#8220;delete a;&#8221; should become &#8220;if (a) delete a;&#8221;. Otherwise, the library may show incorrect messages.</p>
<p>That&#8217;s all&#8230; Expecting more? Well, there is a final step&#8230; You have to make this call just before you exit your program so you can get the detailed conclusions:</p>
<pre class="brush: cpp; light: true; title: ; notranslate">PrintMemoryLeakInfo();</pre>
<p>By default, the library output will go to stdout (normally the console screen). If you want to redirect it to a file, you can call the InitCPPMemDbg() function. This is its prototype:</p>
<pre class="brush: cpp; light: true; title: ; notranslate">void InitCPPMemDbg(const char *pszOutputPath = NULL);</pre>
<p>Other option, to simplify, is to create a global object of the &#8220;cppMemDbg&#8221; type at the beginning of the global declarations. You can pass a file path to the constructor to redirect the output. It will call InitCPPMemDbg (to setup the redirect) at construction and PrintMemoryLeakInfo() at destruction.</p>
<p>Simply like this:</p>
<pre class="brush: cpp; light: true; title: ; notranslate">cppMemDbg cDbg;</pre>
<p>Or, with redirection:</p>
<pre class="brush: cpp; light: true; title: ; notranslate">cppMemDbg cDbg(&quot;mylocalfile.txt&quot;);</pre>
<p>Easy, not?</p>
<p>That was all&#8230; Really.</p>
<p>The code completely is portable.</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">cppMemDbg is licensed under the <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<p>Now, before going to more &#8220;expert&#8221; features, I&#8217;ll leave here the link to download the library for the ones who don&#8217;t wish to keep reading:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/cppmemdbg/cppMemDbg_1.0.zip">Download cppMemDbg 1.0</a></p>
</div>
<p>Now let&#8217;s continue&#8230;</p>
<p>The library comes with three configurable settings (available in cppMemDbg.cpp):</p>
<ul>
<li><strong>PRINT_OPERATIONS:</strong> If set to 1, it will print to the configured output (stdout by default) each memory alloc operation done in the program (allocation or free). Otherwise, the library will just print problems and notifications and the final dump. <em>[Default value = 1]</em></li>
<li><strong>MAX_ALLOC:</strong> Internal library memory stack length (in elements). It is the max amount of allocations that can be tracked without being freed. You can increase this value at will if needed. In fact, if it is needed, the library will print a message saying: &#8220;INTERNAL_ERROR: Allocation stack overflow, please increase MAX_ALLOC&#8221;. <em>[Default value = 256]</em></li>
<li><strong>g_fFile:</strong> FILE* to print the library generated notifications to. <em>[Default value = stdout]</em></li>
<li><strong>MAX_DELETE_STACK:</strong> Internal library <em>delete</em> nesting stack array length (in elements). It is the max amount of <em>delete</em>s that can be nested. You can increase this value at will if needed. In fact, if it is needed, the library will print a message saying: &#8220;INTERNAL_ERROR: Delete stack overflow, please increase MAX_DELETE_STACK&#8221;. <em>[Default value = 16]</em></li>
</ul>
<p>Finally, there are two more functions you could use wherever needed:</p>
<ul>
<li><strong>PrintTotalAllocatedMemory():</strong> Prints the accumulative amount of memory allocated at the moment of the call.</li>
<li><strong>PrintMemoryReservedByCMemDbgLibrary():</strong> Prints the amount of memory reserved by the library (defined at compilation time by the MAX_ALLOC constant).</li>
</ul>
<p>That&#8217;s all&#8230; I said it was easy to use.</p>
<p>Anyway, if after reading the cppMemDbg.h file&#8217;s comments, you have any questions, comments or suggestions, please feel free to contact me.</p>
<p>Here is the <a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/">Attendance Control</a> project modified to test it for memory leaks and allocation/deallocation problems with the cppMemDbg library:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/cppmemdbg/ControlAsistencia_cppMemDbg.zip">Download sample project</a></p>
</div>
<p>The code is portable between Linux and Windows (I&#8217;ve tested it myself on both platforms and it worked seamlessly).</p>
<p>It&#8217;s been developed, compiled and tested using <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> for Windows with the <a href="http://www.mingw.org/">MinGW compiler</a> (included in the bundle). In Linux, it was compiled using the GNU GCC compiler.</p>
<p>It is configured to send the output to the &#8220;TestMemDbg.txt&#8221; file in the working directory. This is the relevant piece of the Main.cpp file:</p>
<pre class="brush: cpp; first-line: 101; highlight: [107,109]; title: ; notranslate">
//...

#include &quot;ControlDeAsistencia.h&quot;
#include &quot;BasicFunctions.h&quot;
#include &lt;fstream&gt;

#include &quot;cppMemDbg.h&quot;

cppMemDbg cDbg(&quot;TestMemDbg.txt&quot;);

//...
</pre>
<p>And this is its successful output (the real output es tabbed to make it easier the analysis en a spreadsheet software):</p>

<pre class="console">>new[]  003D3F58  14  [String.cpp:59]
>new[]  003D2438  14  [String.cpp:59]
>delete[]  003D3F58  14  (String.cpp:59)  [String.h:41]
>new[]  003D3EB0  7  [String.cpp:59]
>new[]  003D2450  7  [String.cpp:59]
[...]
>delete[]  003D2558  4  (String.cpp:59)  [String.h:41]
>delete[]  003D24F0  4  (String.cpp:59)  [String.h:41]
>delete  003D2490  40  (Lista.h:120)  [Lista.h:112]
>INFO  No memory leaks detected
</pre>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="cppMemDbg">cppMemDbg</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="mingw memory leak detection">mingw memory leak detection</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="memory leak detection mingw">memory leak detection mingw</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="mingw memory leak">mingw memory leak</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="c memory leak library">c memory leak library</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="c memory leak detector">c memory leak detector</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="memory leak mingw">memory leak mingw</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="c memory leak detection library">c memory leak detection library</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="memory leak detection c">memory leak detection c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" title="libreria para delete en c">libreria para delete en c</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" rel="bookmark" title="cMemDbg &#8211; Easy to use C memory leak detection library">cMemDbg &#8211; Easy to use C memory leak detection library </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Attendance Control (wxWidgets Version)</title>
		<link>http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/</link>
		<comments>http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 21:00:25 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[wxWidgets]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=479</guid>
		<description><![CDATA[wxAttendanceControl is a GUI version of Attendance Control. It&#8217;s been prepared as a further introduction exercise to the wxWidgets GUI (Graphical User Interface) usage (the basic introduction exercise was the Celsius to Fahrenheit application). For the complete exercise explanation please visit the original Attendance Control exercise. Since the code of the console project was written [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" rel="bookmark" title="Celsius to Fahrenheit">Celsius to Fahrenheit </a></li>
<li><a href="http://www.neoegm.com/tech/software/tools/office-document-property-resetter/" rel="bookmark" title="Office Document Property Resetter">Office Document Property Resetter </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>wxAttendanceControl is a GUI version of <a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/">Attendance Control</a>.</p>
<p>It&#8217;s been prepared as a further introduction exercise to the <a href="http://www.wxwidgets.org/">wxWidgets</a> GUI (Graphical User Interface) usage (the basic introduction exercise was the <a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/">Celsius to Fahrenheit</a> application).</p>
<p>For the complete exercise explanation please visit the <a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/">original Attendance Control exercise</a>.</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia1.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia1-300x225.png" alt="wxControlAsistencia1" title="wxControlAsistencia1" width="300" height="225" class="aligncenter size-medium wp-image-506" /></a></p>
<p><span id="more-479"></span></p>
<p>Since the code of the console project was written trying to make it encapsulated and portable, we re-utilized as most of the files that we could. For a detailed description of the files utilized, look at the &#8220;Files.xls&#8221; file on the source code package.</p>
<p>What&#8217;s next will be a very similar overview to the original one, but with the wxWidgets Version screens.</p>
<p>When you first start the program, you can only log in as admin (-1234:prueba)&#8230;</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia2.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia2-300x225.png" alt="wxControlAsistencia2" title="wxControlAsistencia2" width="300" height="225" class="aligncenter size-medium wp-image-507" /></a></p>
<p>Then, you&#8217;ll get to the administration menu:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia3.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia3-300x225.png" alt="wxControlAsistencia3" title="wxControlAsistencia3" width="300" height="225" class="aligncenter size-medium wp-image-508" /></a></p>
<p>The next step should be registering the different users using the first option:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia4.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia4-300x225.png" alt="wxControlAsistencia4" title="wxControlAsistencia4" width="300" height="225" class="aligncenter size-medium wp-image-509" /></a></p>
<p>After that, they&#8217;ll be able to sign in themselves:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia5.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia5-300x225.png" alt="wxControlAsistencia5" title="wxControlAsistencia5" width="300" height="225" class="aligncenter size-medium wp-image-510" /></a></p>
<p>So they&#8217;ll get into the attendance screen to record their actions:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia6.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia6-300x225.png" alt="wxControlAsistencia6" title="wxControlAsistencia6" width="300" height="225" class="aligncenter size-medium wp-image-511" /></a></p>
<p>Each of them &#8217;till they go back to home&#8230;</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia7.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia7-300x225.png" alt="wxControlAsistencia7" title="wxControlAsistencia7" width="300" height="225" class="aligncenter size-medium wp-image-512" /></a></p>
<p>When any administrator wants to watch the full listing of users and actions, he simply logs in and goes to the second button of the administration menu:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia8.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia8-300x225.png" alt="wxControlAsistencia8" title="wxControlAsistencia8" width="300" height="225" class="aligncenter size-medium wp-image-513" /></a></p>
<p>It&#8217;s simply the same text that appeared on the console version. But, now you have a second option (third button):</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia9.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia9-300x225.png" alt="wxControlAsistencia9" title="wxControlAsistencia9" width="300" height="225" class="aligncenter size-medium wp-image-514" /></a></p>
<p>If he wants, he can save that information to a file by using, instead, the fourth button:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia10.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia10-300x225.png" alt="wxControlAsistencia10" title="wxControlAsistencia10" width="300" height="225" class="aligncenter size-medium wp-image-515" /></a></p>
<p>Or the fifth:</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia11.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia11-300x225.png" alt="wxControlAsistencia11" title="wxControlAsistencia11" width="300" height="225" class="aligncenter size-medium wp-image-516" /></a></p>
<p>Finally, he can close the program by going to the sixth button (losing all the data)&#8230;</p>
<p><a href="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia12.png" rel="lightbox[479]"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/wxControlAsistencia12-300x225.png" alt="wxControlAsistencia12" title="wxControlAsistencia12" width="300" height="225" class="aligncenter size-medium wp-image-505" /></a></p>
<p>That&#8217;s all&#8230;</p>
<p>Now, like I&#8217;ve done before, I&#8217;ll leave the links.</p>
<p>The code should be portable, but I&#8217;ve only tried it on Windows.</p>
<p>It&#8217;s been developed, compiled and tested using <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> for Windows with the <a href="http://www.mingw.org/">MinGW compiler</a> (included in the bundle).</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">wxControlAsistencia is licensed under the <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/wx-control-asistencia/wxControlAsistencia_1.01.zip">Download wxControlAsistencia v1.01</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/wx-control-asistencia/wxControlAsistencia_1.01_Source.zip">Download v1.01 Source Code</a></p>
</div>
<p><strong>Update:</strong> minor bug in String.cpp fixed => version 1.01<br />
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="codigo fuente control de asistencia">codigo fuente control de asistencia</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="codigo fuente sistema asistencia">codigo fuente sistema asistencia</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="wxwidgets gui">wxwidgets gui</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="control de asistencias de alumnos">control de asistencias de alumnos</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="control de asistencia codigo fuente">control de asistencia codigo fuente</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="codigo fuente de control de asistencia">codigo fuente de control de asistencia</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="CODIGO FUENTE CONTROL DE PERSONAL">CODIGO FUENTE CONTROL DE PERSONAL</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="control asistencia">control asistencia</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="wxControlAsistencia">wxControlAsistencia</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" title="codigo fuente de control de personal">codigo fuente de control de personal</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" rel="bookmark" title="Celsius to Fahrenheit">Celsius to Fahrenheit </a></li>
<li><a href="http://www.neoegm.com/tech/software/tools/office-document-property-resetter/" rel="bookmark" title="Office Document Property Resetter">Office Document Property Resetter </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Celsius to Fahrenheit</title>
		<link>http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/</link>
		<comments>http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 22:00:33 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[wxWidgets]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Celsius]]></category>
		<category><![CDATA[Convert]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Fahrenheit]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MinGW]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Temperature]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=474</guid>
		<description><![CDATA[This is a very tiny and simple application I’ve written to teach the basic usage of wxWidgets as an introduction to GUI (Graphical User Interfaces).

Its purpose is just what it’s name says: converting from celsius degrees to fahrenheit degrees (and sideways).<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/online-tools/convert-celsius-to-fahrenheit-online/" rel="bookmark" title="Convert Celsius to Fahrenheit Online">Convert Celsius to Fahrenheit Online </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" rel="bookmark" title="Attendance Control (wxWidgets Version)">Attendance Control (wxWidgets Version) </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>If you just want to convert temperatures by using a website, you should visit the <a href="http://www.neoegm.com/tech/online-tools/convert-celsius-to-fahrenheit-online/">online celsius to fahrenheit conversion tool</a>. Otherwise, keep reading&#8230;</p>
<p>This is a very tiny and simple application I&#8217;ve written to teach the basic usage of <a href="http://www.wxwidgets.org/" target="_blank">wxWidgets</a> as an introduction to GUI (Graphical User Interfaces).</p>
<p>Its purpose is just what it&#8217;s name says: converting from celsius degrees to fahrenheit degrees (and sideways).</p>
<p><img src="http://www.neoegm.com/wp-content/uploads/2009/07/CelsiusAFahrenheit.png" alt="CelsiusAFahrenheit" title="CelsiusAFahrenheit" width="374" height="229" class="aligncenter size-full wp-image-481" /></p>
<p><span id="more-474"></span></p>
<p>These are the two formulas needed to make the program (in fact one is derived from the other, but for the sake of simplicity, I&#8217;m leaving both):</p>
<pre class="brush: plain; light: true; title: ; notranslate">
Tcelsius = (5/9) * (Tfahrenheit - 32)
Tfahrenheit = (9/5) * Tcelsius + 32
</pre>
<p>It&#8217;s been developed, compiled and tested using <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> for Windows with the <a href="http://www.mingw.org/">MinGW compiler</a> (included in the bundle).</p>
<p>The code should be <strong>portable</strong>, but I haven&#8217;t tested it myself on other platforms.</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">CelsiusAFahrenheit is licensed under the <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/celsius-to-fahrenheit/CelsiusAFahrenheit_1.0.zip">Download CelsiusAFahrenheit v1.0</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/celsius-to-fahrenheit/CelsiusAFahrenheit_1.0_Source.zip">Download v1.0 Source Code</a></p>
</div>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir grados fahrenheit a centigrados">convertir grados fahrenheit a centigrados</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="grados celsius a farenheit">grados celsius a farenheit</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir grados farenheit a centigrados">convertir grados farenheit a centigrados</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir centigrados a farenheit">convertir centigrados a farenheit</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="grados farenheit a celsius">grados farenheit a celsius</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir celsius a farenheit">convertir celsius a farenheit</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir de fahrenheit a celsius">convertir de fahrenheit a celsius</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir grados centigrados a farenheit en java">convertir grados centigrados a farenheit en java</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="convertir grados farenheit a celsius">convertir grados farenheit a celsius</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/" title="como convertir grados farenheit a centigrados">como convertir grados farenheit a centigrados</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/online-tools/convert-celsius-to-fahrenheit-online/" rel="bookmark" title="Convert Celsius to Fahrenheit Online">Convert Celsius to Fahrenheit Online </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" rel="bookmark" title="Attendance Control (wxWidgets Version)">Attendance Control (wxWidgets Version) </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/celsius-to-fahrenheit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Attendance Control</title>
		<link>http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/</link>
		<comments>http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 21:00:42 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Attendance]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Control]]></category>
		<category><![CDATA[DOS]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=476</guid>
		<description><![CDATA[&#8220;Attendance Control&#8221; is a console application made as an exercise to integrate the different C++ concepts taught in class up to the middle of the year. The main objective is to be able to develop a employee attendance control which records the times (and justifications, if corresponding) of each time the employees arrive, go to [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" rel="bookmark" title="Attendance Control (wxWidgets Version)">Attendance Control (wxWidgets Version) </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>&#8220;Attendance Control&#8221; is a console application made as an <strong>exercise</strong> to integrate the different C++ concepts taught in class up to the middle of the year.</p>
<p>The main objective is to be able to develop a employee attendance control which records the times (and justifications, if corresponding) of each time the employees arrive, go to lunch, return from lunch and go back to home.</p>

<pre class="console">Sistema de control de asistencia de personal
--------------------------------------------

DNI:

</pre>
<p><span id="more-476"></span></p>
<p>The complete wording says:</p>
<blockquote><p>
Develop an employee attendance control system (for later verification of absences and late arrivals with their corresponding justifications) and its managemente private part (user registration and gathered data visualization).</p>
<p>The main screen must staywaiting for ID <strong>[DNI]</strong> and password.</p>
<p>There must be a preset admin user with <strong>DNI</strong> = -1234 and Password = prueba.</p>
<p>In case of being an administrator user, you&#8217;ll be able to access the management part, with the following options:</p>
<p>	1- Alta de usuario <em>[New user]</em><br />
	2- Lista de usuarios (datos adquiridos) <em>[User list (gathered data)]</em><br />
	3- Salida a archivo <em>[Output to file]</em><br />
	4- Cerrar la aplicación <em>[Close the application]</em><br />
	0- Volver a la pantalla principal <em>[Back to the main screen]</em></p>
<p>Otherwise, it will be asked which kind of action are you about to do (Arrival <strong>[Ingreso]</strong>, return to home <strong>[Salida]</strong>, lunch <strong>[Salida a almuerzo]</strong> or return from lunch <strong>[Retorno de almuerzo]</strong>) and its justification in case it corresponds, and they will be recorded along with the current time in a &#8220;Events&#8221; record of the corresponding user.</p>
<p>The user required data is:<br />
	DNI <em>[ID]</em><br />
	Nombre completo <em>[Full name]</em><br />
	Contraseña <em>[Password]</em><br />
	Si es administrador <em>[Whether it is administrator]</em><br />
	Eventos relacionados <em>[Related events]</em></p>
<p>It&#8217;s desired to use as a base the class &#8220;PersonaBasica&#8221; <em>[Basic person]</em> which has already been developed by the IT department, whose header file &#8220;PersonaBasica.h&#8221; is attached below:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &quot;String.h&quot;
#include &lt;iostream&gt;

class PersonaBasica
{
	String m_sNombreCompleto;
	long m_nDNI;

public:
	//Construcción
	PersonaBasica() { m_nDNI = 0; }

	//Encapsulaciones
	long DNI() const { return m_nDNI; }
	void DNI(long val) { m_nDNI = val; }

	String NombreCompleto() const { return m_sNombreCompleto; }
	void NombreCompleto(String val) { m_sNombreCompleto = val; }
};

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; oStream, PersonaBasica&amp; rpPersonaBasica);
</pre>
<p>Note: the lengths of the data to be registered is completely unknown and rumors are circulating that the users are used to write pretty elaborate justifications.
</p></blockquote>
<p>When you first start the program, you can only log in as admin (-1234:prueba)&#8230;</p>

<pre class="console">Sistema de control de asistencia de personal
--------------------------------------------

DNI: -1234
Contraseña: prueba
Usuario "Administrador" reconocido.

Presione una tecla para continuar...

</pre>
<p>Then, you&#8217;ll get to the administration menu:</p>

<pre class="console">Sistema de control de asistencia de personal (ADMNISTRACION)
------------------------------------------------------------

1- Alta de usuario
2- Lista de usuarios (datos adquiridos)
3- Salida a archivo
4- Cerrar la aplicación
0- Volver a la pantalla principal

Ingrese la opción deseada:

</pre>
<p>The next step should be registering the different users using the first option:</p>

<pre class="console">Sistema de control de asistencia de personal (Alta de usuario)
--------------------------------------------------------------

DNI: 12345678
Nombre completo: Pedro Gutierrez
Password: 123bbb
Administrador [1 = Sí/0 = No]: 0

Persona agregada satisfatoriamente.

Presione una tecla para continuar...

</pre>
<p>After that, they&#8217;ll be able to sign in themselves:</p>

<pre class="console">Sistema de control de asistencia de personal
--------------------------------------------

DNI: 12345678
Contraseña: 123bbb
Usuario "Pedro Gutierrez" reconocido.

Presione una tecla para continuar...

</pre>
<p>So they&#8217;ll get into the attendance screen to record their actions:</p>

<pre class="console">Asistencia de "Pedro Gutierrez"
-------------------------------

Tipo de asistencia:
        1- Ingreso
        2- Salida
        3- Salida a almorzar
        4- Vuelta de almorzar
Selección: 1

Justificación (si corresponde): Llegué tarde porque había
corte de calles.

Evento agregado satisfactoriamente.

Presione una tecla para continuar...

</pre>
<p>Each of them &#8217;till they go back to home&#8230;</p>

<pre class="console">Asistencia de "Pedro Gutierrez"
-------------------------------

Tipo de asistencia:
        1- Ingreso
        2- Salida
        3- Salida a almorzar
        4- Vuelta de almorzar
Selección: 2

Justificación (si corresponde): Me voy más temprano porque
tengo que llevar a mi hijo al médico.

Evento agregado satisfactoriamente.

Presione una tecla para continuar...

</pre>
<p>When any administrator wants to watch the full listing of users and actions, he simply logs in and goes to the second option of the administration menu:</p>

<pre class="console">Sistema de control de asistencia de personal (Lista de
usuarios)
------------------------------------------------------

DNI: -1234
Nombre completo: Administrador
Password: ********
Administrador: 1
Cantidad de eventos: 0
Eventos:

[Esta persona no posee eventos]


DNI: 12345678
Nombre completo: Pedro Gutierrez
Password: ********
Administrador: 0
Cantidad de eventos: 4
Eventos:

Hora: 28/07/2009 14:13:27
Tipo: Ingreso
Justificación: Llegué tarde porque había corte de calles.

Hora: 28/07/2009 14:14:23
Tipo: Salida a almorzar
Justificación:

Hora: 28/07/2009 14:14:44
Tipo: Vuelta de almorzar
Justificación:

Hora: 28/07/2009 14:14:52
Tipo: Salida
Justificación: Me voy más temprano porque tengo que llevar a
mi hijo al médico.

Presione una tecla para continuar...

</pre>
<p>If he wants, he can save that information to a file by using, instead, the third option:</p>

<pre class="console">Sistema de control de asistencia de personal (ADMNISTRACION)
------------------------------------------------------------

1- Alta de usuario
2- Lista de usuarios (datos adquiridos)
3- Salida a archivo
4- Cerrar la aplicación
0- Volver a la pantalla principal

Ingrese la opción deseada: 3

Ingrese la ruta del archivo a guardar: c:asistencia.txt
Archivo guardado satisfactoriamente

Presione una tecla para continuar...

</pre>
<p>Finally, he can close the program by going to the fourth option (losing all the data)&#8230;</p>

<pre class="console">Sistema de control de asistencia de personal (ADMNISTRACION)
------------------------------------------------------------

1- Alta de usuario
2- Lista de usuarios (datos adquiridos)
3- Salida a archivo
4- Cerrar la aplicación
0- Volver a la pantalla principal

Ingrese la opción deseada: 4
Saliendo de la aplicación...

Presione una tecla para continuar...

</pre>
<p>That&#8217;s the idea of the application&#8230;</p>
<p>Now I&#8217;ll leave the links for the ones who don&#8217;t want to solve it themselves (or the ones who just want to run it and watch it work).</p>
<p>The code is portable between Linux and Windows (I&#8217;ve tested it myself on both platforms and it worked seamlessly).</p>
<p>It&#8217;s been developed, compiled and tested using <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> for Windows with the <a href="http://www.mingw.org/">MinGW compiler</a> (included in the bundle). In Linux, it was compiled using the GNU GCC compiler.</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">ControlAsistencia is licensed under the <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/control-asistencia/ControlAsistencia_1.02.zip">Download ControlAsistencia v1.02</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/control-asistencia/ControlAsistencia_1.02_Source.zip">Download v1.02 Source Code</a></p>
</div>
<p><strong>Update:</strong> minor bug in String.cpp fixed => version 1.01<br />
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia de personal en excel">control de asistencia de personal en excel</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia en excel">control de asistencia en excel</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" title="asistencia de personal en excel">asistencia de personal en excel</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" title="como hacer un control de asistencia en excel">como hacer un control de asistencia en excel</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia">control de asistencia</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" title="Control de Asistencia GNU">Control de Asistencia GNU</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia gpl">control de asistencia gpl</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia de personal">control de asistencia de personal</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" title="control asistencia excel">control asistencia excel</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia linux">control de asistencia linux</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" rel="bookmark" title="Attendance Control (wxWidgets Version)">Attendance Control (wxWidgets Version) </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cMemDbg &#8211; Easy to use C memory leak detection library</title>
		<link>http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/</link>
		<comments>http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 18:42:07 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Memory Leaks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=58</guid>
		<description><![CDATA[After some time working with C, I decided to develop a very easy to use library which can help you to detect and track memory leaks. There are lots of solutions for this on the net, but this one has the particularity of being really simple to implement. You just have to add the following [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Easy to use C++ memory leak detection library">cppMemDbg &#8211; Easy to use C++ memory leak detection library </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>After some time working with C, I decided to develop a very easy to use library which can help you to detect and track memory leaks.</p>
<p>There are lots of solutions for this on the net, but this one has the particularity of being really simple to implement.</p>
<p><span id="more-58"></span><br />
You just have to add the following include to your main include file (a file that gets included by each file of your project) or, in case you don&#8217;t have one, to each file that calls any memory allocation function (malloc, realloc, calloc or free). The only extra caution you have to take into account is to include it <strong>after</strong> the standard headers (stdio.h, stdlib.h, malloc.h, etc.).</p>
<p>This is the line:</p>
<pre class="brush: plain; light: true; title: ; notranslate">#include &quot;cMemDbg.h&quot;</pre>
<p>That&#8217;s all&#8230; Expecting more? Well, there is a final step&#8230; You have to make this call just before you exit your program so you can get the detailed conclusions:</p>
<pre class="brush: plain; light: true; title: ; notranslate">PrintMemoryLeakInfo();</pre>
<p>Easy, not?</p>
<p>That was all&#8230; Really.</p>
<p>Now, before going to more &#8220;expert&#8221; features, I&#8217;ll leave here the link to download the library for the ones who don&#8217;t wish to keep reading:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/cmemdbg/cMemDbg_1.0.zip">Download cMemDbg 1.0</a></p>
</div>
<p>Now let&#8217;s continue&#8230;</p>
<p>The library comes with three configurable settings (available in cMemDbg.c):</p>
<ul>
<li><strong>PRINT_OPERATIONS:</strong> If set to 1, it will print to the configured output (stdout by default) each memory alloc operation done in the program (allocation or free). Otherwise, the library will just print problems and notifications and the final dump. <em>[Default value = 1]</em></li>
<li><strong>MAX_ALLOC:</strong> Internal library memory stack length (in elements). It is the max amount of allocations that can be tracked without being freed. You can increase this value at will if needed. In fact, if it is needed, the library will print a message saying: &#8220;INTERNAL_ERROR: Allocation stack overflow, please increase MAX_ALLOC&#8221;. <em>[Default value = 256]</em></li>
<li><strong>PRINT_OUTPUT:</strong> Location to print the library generated notifications (can be any stream/file in which you could print using fprintf). <em>[Default value = stdout]</em></li>
</ul>
<p>Finally, there are two more functions you could use wherever needed:</p>
<ul>
<li><strong>PrintTotalAllocatedMemory():</strong> Prints the accumulative amount of memory allocated at the moment of the call.</li>
<li><strong>PrintMemoryReservedByCMemDbgLibrary():</strong> Prints the amount of memory reserved by the library (defined at compilation time by the MAX_ALLOC constant).</li>
</ul>
<p>That&#8217;s all&#8230; I said it was easy to use.</p>
<p>Anyway, if after reading the cMemDbg.h files&#8217; comments, you have any questions, comments or suggestions, please feel free to contact me.<br />
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="detectar fugas de memoria en c">detectar fugas de memoria en c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="cmemdbg">cmemdbg</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="c memory leak">c memory leak</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="detectar fuga memoria c">detectar fuga memoria c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="detectar fugas de memoria">detectar fugas de memoria</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="internal_error allocation stack overflow please increase max_alloc">internal_error allocation stack overflow please increase max_alloc</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="detectar memory leaks c">detectar memory leaks c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="detectar fugas de memoria c">detectar fugas de memoria c</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="freebsd memory leak detection">freebsd memory leak detection</a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/" title="Detector de fugas de memoria">Detector de fugas de memoria</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Easy to use C++ memory leak detection library">cppMemDbg &#8211; Easy to use C++ memory leak detection library </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
<li><a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/tech/programming/c-cpp/cmemdbg-easy-to-use-c-memory-leak-detection-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
