mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-30 07:59:42 +01:00
1559 lines
95 KiB
HTML
Executable File
1559 lines
95 KiB
HTML
Executable File
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr" lang="en"><head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
</head>
|
|
<body class="mediawiki ns-0 ltr page-Candide">
|
|
<div id="globalWrapper">
|
|
<div id="column-content">
|
|
<div id="content">
|
|
<a name="top" id="top"></a>
|
|
<h1 class="firstHeading">Candide</h1>
|
|
<div id="bodyContent">
|
|
<table id="toc" class="toc" summary="Contents"><tbody><tr><td><div id="toctitle"><h2>Contents</h2> </div>
|
|
<ul>
|
|
<li class="toclevel-1"><a href="#Candide"><span class="tocnumber">1</span> <span class="toctext">Candide</span></a>
|
|
<ul>
|
|
<li class="toclevel-2"><a href="#About_Candide"><span class="tocnumber">1.1</span> <span class="toctext">About Candide</span></a></li>
|
|
<li class="toclevel-2"><a href="#Trigger"><span class="tocnumber">1.2</span> <span class="toctext">Trigger</span></a></li>
|
|
<li class="toclevel-2"><a href="#Source"><span class="tocnumber">1.3</span> <span class="toctext">Source</span></a></li>
|
|
<li class="toclevel-2"><a href="#Bot_Channel"><span class="tocnumber">1.4</span> <span class="toctext">Bot Channel</span></a></li>
|
|
<li class="toclevel-2"><a href="#Directing_output_to_a_user"><span class="tocnumber">1.5</span> <span class="toctext">Directing output to a user</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#tell"><span class="tocnumber">1.5.1</span> <span class="toctext">tell</span></a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-1"><a href="#Factoids"><span class="tocnumber">2</span> <span class="toctext">Factoids</span></a>
|
|
<ul>
|
|
<li class="toclevel-2"><a href="#List_of_factoids"><span class="tocnumber">2.1</span> <span class="toctext">List of factoids</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#Channel_namespaces"><span class="tocnumber">2.1.1</span> <span class="toctext">Channel namespaces</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#Adding_a_factoid"><span class="tocnumber">2.2</span> <span class="toctext">Adding a factoid</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#factadd"><span class="tocnumber">2.2.1</span> <span class="toctext">factadd</span></a></li>
|
|
<li class="toclevel-3"><a href="#Special_commands"><span class="tocnumber">2.2.2</span> <span class="toctext">Special commands</span></a>
|
|
<ul>
|
|
<li class="toclevel-4"><a href="#.2Fsay"><span class="tocnumber">2.2.2.1</span> <span class="toctext">/say</span></a></li>
|
|
<li class="toclevel-4"><a href="#.2Fme"><span class="tocnumber">2.2.2.2</span> <span class="toctext">/me</span></a></li>
|
|
<li class="toclevel-4"><a href="#.2Fcall"><span class="tocnumber">2.2.2.3</span> <span class="toctext">/call</span></a></li>
|
|
<li class="toclevel-4"><a href="#.2Fmsg"><span class="tocnumber">2.2.2.4</span> <span class="toctext">/msg</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-3"><a href="#Special_variables"><span class="tocnumber">2.2.3</span> <span class="toctext">Special variables</span></a>
|
|
<ul>
|
|
<li class="toclevel-4"><a href="#.24nick"><span class="tocnumber">2.2.3.1</span> <span class="toctext">$nick</span></a></li>
|
|
<li class="toclevel-4"><a href="#.24args"><span class="tocnumber">2.2.3.2</span> <span class="toctext">$args</span></a></li>
|
|
<li class="toclevel-4"><a href="#.24channel"><span class="tocnumber">2.2.3.3</span> <span class="toctext">$channel</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-3"><a href="#adlib_list_variables"><span class="tocnumber">2.2.4</span> <span class="toctext">adlib list variables</span></a></li>
|
|
<li class="toclevel-3"><a href="#action_with_args"><span class="tocnumber">2.2.5</span> <span class="toctext">action_with_args</span></a></li>
|
|
<li class="toclevel-3"><a href="#add_nick"><span class="tocnumber">2.2.6</span> <span class="toctext">add_nick</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#Deleting_a_factoid"><span class="tocnumber">2.3</span> <span class="toctext">Deleting a factoid</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#factrem"><span class="tocnumber">2.3.1</span> <span class="toctext">factrem</span></a></li>
|
|
<li class="toclevel-3"><a href="#forget"><span class="tocnumber">2.3.2</span> <span class="toctext">forget</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#Viewing.2Ftriggering_a_factoid"><span class="tocnumber">2.4</span> <span class="toctext">Viewing/triggering a factoid</span></a></li>
|
|
<li class="toclevel-2"><a href="#Viewing.2Ftriggering_another_channel.27s_factoid"><span class="tocnumber">2.5</span> <span class="toctext">Viewing/triggering another channel's factoid</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#fact"><span class="tocnumber">2.5.1</span> <span class="toctext">fact</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#Aliasing_a_factoid"><span class="tocnumber">2.6</span> <span class="toctext">Aliasing a factoid</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#factalias"><span class="tocnumber">2.6.1</span> <span class="toctext">factalias</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#Changing_a_factoid"><span class="tocnumber">2.7</span> <span class="toctext">Changing a factoid</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#factchange"><span class="tocnumber">2.7.1</span> <span class="toctext">factchange</span></a></li>
|
|
<li class="toclevel-3"><a href="#factset"><span class="tocnumber">2.7.2</span> <span class="toctext">factset</span></a></li>
|
|
<li class="toclevel-3"><a href="#factunset"><span class="tocnumber">2.7.3</span> <span class="toctext">factunset</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#Finding_a_factoid"><span class="tocnumber">2.8</span> <span class="toctext">Finding a factoid</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#factfind"><span class="tocnumber">2.8.1</span> <span class="toctext">factfind</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#Information_about_a_factoid"><span class="tocnumber">2.9</span> <span class="toctext">Information about a factoid</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#factinfo"><span class="tocnumber">2.9.1</span> <span class="toctext">factinfo</span></a></li>
|
|
<li class="toclevel-3"><a href="#factshow"><span class="tocnumber">2.9.2</span> <span class="toctext">factshow</span></a></li>
|
|
<li class="toclevel-3"><a href="#factset_2"><span class="tocnumber">2.9.3</span> <span class="toctext">factset</span></a></li>
|
|
<li class="toclevel-3"><a href="#count"><span class="tocnumber">2.9.4</span> <span class="toctext">count</span></a></li>
|
|
<li class="toclevel-3"><a href="#histogram"><span class="tocnumber">2.9.5</span> <span class="toctext">histogram</span></a></li>
|
|
<li class="toclevel-3"><a href="#top20"><span class="tocnumber">2.9.6</span> <span class="toctext">top20</span></a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-1"><a href="#Commands"><span class="tocnumber">3</span> <span class="toctext">Commands</span></a>
|
|
<ul>
|
|
<li class="toclevel-2"><a href="#Quotegrabs"><span class="tocnumber">3.1</span> <span class="toctext">Quotegrabs</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#Table_of_quotegrabs"><span class="tocnumber">3.1.1</span> <span class="toctext">Table of quotegrabs</span></a></li>
|
|
<li class="toclevel-3"><a href="#grab"><span class="tocnumber">3.1.2</span> <span class="toctext">grab</span></a></li>
|
|
<li class="toclevel-3"><a href="#recall"><span class="tocnumber">3.1.3</span> <span class="toctext">recall</span></a></li>
|
|
<li class="toclevel-3"><a href="#getq"><span class="tocnumber">3.1.4</span> <span class="toctext">getq</span></a></li>
|
|
<li class="toclevel-3"><a href="#rq"><span class="tocnumber">3.1.5</span> <span class="toctext">rq</span></a></li>
|
|
<li class="toclevel-3"><a href="#delq"><span class="tocnumber">3.1.6</span> <span class="toctext">delq</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#Modules"><span class="tocnumber">3.2</span> <span class="toctext">Modules</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#.7B.7D"><span class="tocnumber">3.2.1</span> <span class="toctext">{}</span></a></li>
|
|
<li class="toclevel-3"><a href="#cc"><span class="tocnumber">3.2.2</span> <span class="toctext">cc</span></a>
|
|
<ul>
|
|
<li class="toclevel-4"><a href="#Usage"><span class="tocnumber">3.2.2.1</span> <span class="toctext">Usage</span></a></li>
|
|
<li class="toclevel-4"><a href="#Supported_Languages"><span class="tocnumber">3.2.2.2</span> <span class="toctext">Supported Languages</span></a></li>
|
|
<li class="toclevel-4"><a href="#Default_Language"><span class="tocnumber">3.2.2.3</span> <span class="toctext">Default Language</span></a></li>
|
|
<li class="toclevel-4"><a href="#Disallowed_system_calls"><span class="tocnumber">3.2.2.4</span> <span class="toctext">Disallowed system calls</span></a></li>
|
|
<li class="toclevel-4"><a href="#Program_termination_with_no_output"><span class="tocnumber">3.2.2.5</span> <span class="toctext">Program termination with no output</span></a></li>
|
|
<li class="toclevel-4"><a href="#Abnormal_program_termination"><span class="tocnumber">3.2.2.6</span> <span class="toctext">Abnormal program termination</span></a></li>
|
|
<li class="toclevel-4"><a href="#C_and_C.2B.2B_Functionality"><span class="tocnumber">3.2.2.7</span> <span class="toctext">C and C++ Functionality</span></a></li>
|
|
<li class="toclevel-4"><a href="#Using_the_preprocessor"><span class="tocnumber">3.2.2.8</span> <span class="toctext">Using the preprocessor</span></a>
|
|
<ul>
|
|
<li class="toclevel-5"><a href="#Default_.23includes"><span class="tocnumber">3.2.2.8.1</span> <span class="toctext">Default #includes</span></a></li>
|
|
<li class="toclevel-5"><a href="#Using_.23include"><span class="tocnumber">3.2.2.8.2</span> <span class="toctext">Using #include</span></a></li>
|
|
<li class="toclevel-5"><a href="#Using_.23define"><span class="tocnumber">3.2.2.8.3</span> <span class="toctext">Using #define</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-4"><a href="#main.28.29_Function_Unnecessary"><span class="tocnumber">3.2.2.9</span> <span class="toctext">main() Function Unnecessary</span></a></li>
|
|
<li class="toclevel-4"><a href="#Embedding_Newlines"><span class="tocnumber">3.2.2.10</span> <span class="toctext">Embedding Newlines</span></a></li>
|
|
<li class="toclevel-4"><a href="#Printing_in_binary.2Fbase2"><span class="tocnumber">3.2.2.11</span> <span class="toctext">Printing in binary/base2</span></a></li>
|
|
<li class="toclevel-4"><a href="#Using_the_GDB_debugger"><span class="tocnumber">3.2.2.12</span> <span class="toctext">Using the GDB debugger</span></a>
|
|
<ul>
|
|
<li class="toclevel-5"><a href="#print"><span class="tocnumber">3.2.2.12.1</span> <span class="toctext">print</span></a></li>
|
|
<li class="toclevel-5"><a href="#ptype"><span class="tocnumber">3.2.2.12.2</span> <span class="toctext">ptype</span></a></li>
|
|
<li class="toclevel-5"><a href="#watch"><span class="tocnumber">3.2.2.12.3</span> <span class="toctext">watch</span></a></li>
|
|
<li class="toclevel-5"><a href="#trace"><span class="tocnumber">3.2.2.12.4</span> <span class="toctext">trace</span></a></li>
|
|
<li class="toclevel-5"><a href="#gdb"><span class="tocnumber">3.2.2.12.5</span> <span class="toctext">gdb</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-4"><a href="#Interactive_Editing"><span class="tocnumber">3.2.2.13</span> <span class="toctext">Interactive Editing</span></a>
|
|
<ul>
|
|
<li class="toclevel-5"><a href="#copy"><span class="tocnumber">3.2.2.13.1</span> <span class="toctext">copy</span></a></li>
|
|
<li class="toclevel-5"><a href="#show"><span class="tocnumber">3.2.2.13.2</span> <span class="toctext">show</span></a></li>
|
|
<li class="toclevel-5"><a href="#diff"><span class="tocnumber">3.2.2.13.3</span> <span class="toctext">diff</span></a></li>
|
|
<li class="toclevel-5"><a href="#paste"><span class="tocnumber">3.2.2.13.4</span> <span class="toctext">paste</span></a></li>
|
|
<li class="toclevel-5"><a href="#run"><span class="tocnumber">3.2.2.13.5</span> <span class="toctext">run</span></a></li>
|
|
<li class="toclevel-5"><a href="#undo"><span class="tocnumber">3.2.2.13.6</span> <span class="toctext">undo</span></a></li>
|
|
<li class="toclevel-5"><a href="#s.2F.2F"><span class="tocnumber">3.2.2.13.7</span> <span class="toctext">s//</span></a></li>
|
|
<li class="toclevel-5"><a href="#replace"><span class="tocnumber">3.2.2.13.8</span> <span class="toctext">replace</span></a></li>
|
|
<li class="toclevel-5"><a href="#prepend"><span class="tocnumber">3.2.2.13.9</span> <span class="toctext">prepend</span></a></li>
|
|
<li class="toclevel-5"><a href="#append"><span class="tocnumber">3.2.2.13.10</span> <span class="toctext">append</span></a></li>
|
|
<li class="toclevel-5"><a href="#remove"><span class="tocnumber">3.2.2.13.11</span> <span class="toctext">remove</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-4"><a href="#Some_Examples"><span class="tocnumber">3.2.2.14</span> <span class="toctext">Some Examples</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-3"><a href="#english"><span class="tocnumber">3.2.3</span> <span class="toctext">english</span></a></li>
|
|
<li class="toclevel-3"><a href="#expand"><span class="tocnumber">3.2.4</span> <span class="toctext">expand</span></a></li>
|
|
<li class="toclevel-3"><a href="#prec"><span class="tocnumber">3.2.5</span> <span class="toctext">prec</span></a></li>
|
|
<li class="toclevel-3"><a href="#paren"><span class="tocnumber">3.2.6</span> <span class="toctext">paren</span></a></li>
|
|
<li class="toclevel-3"><a href="#faq"><span class="tocnumber">3.2.7</span> <span class="toctext">faq</span></a></li>
|
|
<li class="toclevel-3"><a href="#c99std"><span class="tocnumber">3.2.8</span> <span class="toctext">c99std</span></a></li>
|
|
<li class="toclevel-3"><a href="#c11std"><span class="tocnumber">3.2.9</span> <span class="toctext">c11std</span></a></li>
|
|
<li class="toclevel-3"><a href="#man"><span class="tocnumber">3.2.10</span> <span class="toctext">man</span></a></li>
|
|
<li class="toclevel-3"><a href="#google"><span class="tocnumber">3.2.11</span> <span class="toctext">google</span></a></li>
|
|
<li class="toclevel-3"><a href="#define"><span class="tocnumber">3.2.12</span> <span class="toctext">define</span></a></li>
|
|
<li class="toclevel-3"><a href="#dict"><span class="tocnumber">3.2.13</span> <span class="toctext">dict</span></a></li>
|
|
<li class="toclevel-3"><a href="#foldoc"><span class="tocnumber">3.2.14</span> <span class="toctext">foldoc</span></a></li>
|
|
<li class="toclevel-3"><a href="#vera"><span class="tocnumber">3.2.15</span> <span class="toctext">vera</span></a></li>
|
|
<li class="toclevel-3"><a href="#udict"><span class="tocnumber">3.2.16</span> <span class="toctext">udict</span></a></li>
|
|
<li class="toclevel-3"><a href="#wdict"><span class="tocnumber">3.2.17</span> <span class="toctext">wdict</span></a></li>
|
|
<li class="toclevel-3"><a href="#acronym"><span class="tocnumber">3.2.18</span> <span class="toctext">acronym</span></a></li>
|
|
<li class="toclevel-3"><a href="#math"><span class="tocnumber">3.2.19</span> <span class="toctext">math</span></a></li>
|
|
<li class="toclevel-3"><a href="#compliment"><span class="tocnumber">3.2.20</span> <span class="toctext">compliment</span></a></li>
|
|
<li class="toclevel-3"><a href="#insult"><span class="tocnumber">3.2.21</span> <span class="toctext">insult</span></a></li>
|
|
<li class="toclevel-3"><a href="#excuse"><span class="tocnumber">3.2.22</span> <span class="toctext">excuse</span></a></li>
|
|
<li class="toclevel-3"><a href="#horoscope"><span class="tocnumber">3.2.23</span> <span class="toctext">horoscope</span></a></li>
|
|
<li class="toclevel-3"><a href="#horrorscope"><span class="tocnumber">3.2.24</span> <span class="toctext">horrorscope</span></a></li>
|
|
<li class="toclevel-3"><a href="#quote"><span class="tocnumber">3.2.25</span> <span class="toctext">quote</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#Informative"><span class="tocnumber">3.3</span> <span class="toctext">Informative</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#list"><span class="tocnumber">3.3.1</span> <span class="toctext">list</span></a></li>
|
|
<li class="toclevel-3"><a href="#info"><span class="tocnumber">3.3.2</span> <span class="toctext">info</span></a></li>
|
|
<li class="toclevel-3"><a href="#version"><span class="tocnumber">3.3.3</span> <span class="toctext">version</span></a></li>
|
|
<li class="toclevel-3"><a href="#source"><span class="tocnumber">3.3.4</span> <span class="toctext">source</span></a></li>
|
|
<li class="toclevel-3"><a href="#help"><span class="tocnumber">3.3.5</span> <span class="toctext">help</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#Administrative"><span class="tocnumber">3.4</span> <span class="toctext">Administrative</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#login"><span class="tocnumber">3.4.1</span> <span class="toctext">login</span></a></li>
|
|
<li class="toclevel-3"><a href="#logout"><span class="tocnumber">3.4.2</span> <span class="toctext">logout</span></a></li>
|
|
<li class="toclevel-3"><a href="#ignore"><span class="tocnumber">3.4.3</span> <span class="toctext">ignore</span></a></li>
|
|
<li class="toclevel-3"><a href="#unignore"><span class="tocnumber">3.4.4</span> <span class="toctext">unignore</span></a></li>
|
|
<li class="toclevel-3"><a href="#ban"><span class="tocnumber">3.4.5</span> <span class="toctext">ban</span></a></li>
|
|
<li class="toclevel-3"><a href="#unban"><span class="tocnumber">3.4.6</span> <span class="toctext">unban</span></a></li>
|
|
<li class="toclevel-3"><a href="#kick"><span class="tocnumber">3.4.7</span> <span class="toctext">kick</span></a></li>
|
|
<li class="toclevel-3"><a href="#export"><span class="tocnumber">3.4.8</span> <span class="toctext">export</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#.23.23c"><span class="tocnumber">3.5</span> <span class="toctext">##c</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#C-Aphorisms"><span class="tocnumber">3.5.1</span> <span class="toctext">C-Aphorisms</span></a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-1"><a href="#Flood_control"><span class="tocnumber">4</span> <span class="toctext">Flood control</span></a>
|
|
<ul>
|
|
<li class="toclevel-2"><a href="#Message_flood"><span class="tocnumber">4.1</span> <span class="toctext">Message flood</span></a></li>
|
|
<li class="toclevel-2"><a href="#Join_flood"><span class="tocnumber">4.2</span> <span class="toctext">Join flood</span></a></li>
|
|
<li class="toclevel-2"><a href="#Enter_key_abuse"><span class="tocnumber">4.3</span> <span class="toctext">Enter key abuse</span></a></li>
|
|
<li class="toclevel-2"><a href="#Notification_message"><span class="tocnumber">4.4</span> <span class="toctext">Notification message</span></a>
|
|
<ul>
|
|
<li class="toclevel-3"><a href="#Message_flooding"><span class="tocnumber">4.4.1</span> <span class="toctext">Message flooding</span></a></li>
|
|
<li class="toclevel-3"><a href="#Join_flooding"><span class="tocnumber">4.4.2</span> <span class="toctext">Join flooding</span></a></li>
|
|
<li class="toclevel-3"><a href="#Enter_key_abuse_2"><span class="tocnumber">4.4.3</span> <span class="toctext">Enter key abuse</span></a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toclevel-2"><a href="#Opping.2FDeopping"><span class="tocnumber">4.5</span> <span class="toctext">Opping/Deopping</span></a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
</td></tr></tbody></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
|
|
<a name="Candide"></a><h2> <span class="mw-headline">Candide</span></h2>
|
|
<a name="About_Candide"></a><h3> <span class="mw-headline">About Candide</span></h3>
|
|
<p>Candide is an IRC bot written in Perl in pragma_'s spare time.
|
|
</p>
|
|
<a name="Trigger"></a><h3> <span class="mw-headline">Trigger</span></h3>
|
|
<p>All of <b>candide'</b>s commands may begin with its name or its trigger, or be followed by its name.
|
|
</p><p>The trigger character defaults to exclaimation mark [!]; <b>the freenode instance uses a comma [,]</b>.
|
|
</p><p>Note that commands need not be submitted to the channel; you can /msg it instead. If you /msg <b>candide</b>,
|
|
it will respond with a private message in return. In private message,
|
|
you do not need to specify its name or one of the trigger symbols.
|
|
</p>
|
|
<pre>Examples:
|
|
<pragma_> !hi (or ,hi if on freenode)
|
|
<pragma_> hi, candide
|
|
<pragma_> candide: hi
|
|
</pre>
|
|
<a name="Source"></a><h3> <span class="mw-headline">Source</span></h3>
|
|
<p>Candide's source may be found at <a href="http://code.google.com/p/pbot2-pl/" class="external free" title="http://code.google.com/p/pbot2-pl/" rel="nofollow">http://code.google.com/p/pbot2-pl/</a>. It can be browsed at <a href="http://code.google.com/p/pbot2-pl/source/browse/#svn/trunk/" class="external free" title="http://code.google.com/p/pbot2-pl/source/browse/#svn/trunk/" rel="nofollow">http://code.google.com/p/pbot2-pl/source/browse/#svn/trunk/</a>.<br>
|
|
The URL for the source of any loaded modules may be found by using the <a href="#factinfo" title="">factinfo</a> command:
|
|
</p>
|
|
<pre> <pragma_> factinfo ##c faq
|
|
<candide> faq: Module loaded by pragma_ on Fri Dec 31 02:34:04 2004 ->
|
|
<a href="http://code.google.com/p/pbot2-pl/source/browse/trunk/modules/cfaq.pl" class="external free" title="http://code.google.com/p/pbot2-pl/source/browse/trunk/modules/cfaq.pl" rel="nofollow">http://code.google.com/p/pbot2-pl/source/browse/trunk/modules/cfaq.pl</a>, used 512 times (last by ecrane)
|
|
</pre>
|
|
<a name="Bot_Channel"></a><h3> <span class="mw-headline">Bot Channel</span></h3>
|
|
<p>You may test/play with the bot in the #pbot2 channel on irc.freenode.net.
|
|
</p>
|
|
<a name="Directing_output_to_a_user"></a><h3> <span class="mw-headline">Directing output to a user</span></h3>
|
|
<p>You may direct candide to prepend the nickname of a specific person
|
|
to a factoid in the channel by stating the nickname after the factoid
|
|
(if the factoid doesn't take arguments):
|
|
</p>
|
|
<pre> <pragma_> candide: version defrost
|
|
<candide> defrost: PBot revision 387 2012-10-07
|
|
</pre>
|
|
<a name="tell"></a><h5> <span class="mw-headline">tell</span></h5>
|
|
<p>You may also use the `tell <nick> about <command>` syntax (which is necessary if the factoid does take arguments):
|
|
</p>
|
|
<pre> <pragma_> candide: tell defrost about help cc
|
|
<candide> defrost: To learn all about cc, see <a href="http://www.iso-9899.info/wiki/Candide#cc" class="external free" title="http://www.iso-9899.info/wiki/Candide#cc" rel="nofollow">http://www.iso-9899.info/wiki/Candide#cc</a>
|
|
</pre>
|
|
<a name="Factoids"></a><h2> <span class="mw-headline">Factoids</span></h2>
|
|
<a name="List_of_factoids"></a><h3> <span class="mw-headline">List of factoids</span></h3>
|
|
<p>The most recent exported list of factoids can be found here:
|
|
<a href="http://www.iso-9899.info/candide/factoids.html" class="external free" title="http://www.iso-9899.info/candide/factoids.html" rel="nofollow">http://www.iso-9899.info/candide/factoids.html</a>.
|
|
</p>
|
|
<a name="Channel_namespaces"></a><h4> <span class="mw-headline">Channel namespaces</span></h4>
|
|
<p>Factoids added in one channel may be called/triggered in another
|
|
channel or in private message, providing that the other channel doesn't
|
|
already have a factoid of the same name.
|
|
</p><p>Factoids may also be added to a special channel named .*.
|
|
Factoids that are set in this channel will be accessible to any channel,
|
|
including private messages. However, factoids that are set in a
|
|
specific channel will override factoids of the same name that are set in
|
|
the .* channel or other channels.
|
|
</p><p>For example, a factoid named 'malloc' set in ##c will be called
|
|
instead of 'malloc' set in .*,
|
|
if the factoid were triggered in ##c; otherwise, the latter 'malloc'
|
|
will be triggered if the factoid were triggered in another channel.
|
|
</p><p>Similiarily, if there were no 'malloc' factoid in the .*
|
|
namespace, but only in ##c and you attempted to use this factoid in a
|
|
channel other than ##c, that channel will invoke ##c's version of
|
|
'malloc', providing that channel doesn't have its own 'malloc' factoid.
|
|
</p><p>Likewise, if there is a 'malloc' factoid set in ##c++ and the factoid is triggered in the ##c++ channel,
|
|
then this version of 'malloc' will be called instead of the ##c or the .* factoid.
|
|
</p><p>However, if you are in a channel that doesn't have a 'malloc'
|
|
factoid and there is no 'malloc' factoid in the global .* channel, and
|
|
you attempt to call 'malloc' then the bot will display a message
|
|
notifying you that 'malloc' is ambiguous and which channels it belongs
|
|
to so that you may use the <a href="#fact" title="">fact</a> command to call the correct factoid.
|
|
</p>
|
|
<a name="Adding_a_factoid"></a><h3> <span class="mw-headline">Adding a factoid</span></h3>
|
|
<p>There are two ways to add a factoid. The first is:
|
|
</p>
|
|
<pre> <factoid> is <description>
|
|
</pre>
|
|
<p>In this case, the factoid will be created as belonging to
|
|
the channel in which the command was executed. <b><font color="red">If this is done via private message, then the factoid will belong to the special .* channel.</font></b>
|
|
</p>
|
|
<a name="factadd"></a><h4> <span class="mw-headline">factadd</span></h4>
|
|
<p>The second method allows you to add a factoid to any channel. This
|
|
method is suitable to add to a specific channel from a private message:
|
|
</p>
|
|
<pre> factadd <channel> <keyword> is <description>
|
|
</pre>
|
|
<p>In this method, you may add factoids to any channel, including the special .* channel, which stands for all channels.
|
|
</p><p>Examples:
|
|
</p>
|
|
<pre> <pragma_> factadd ##c c is /say C rocks!
|
|
<pragma_> c is /say C rocks!
|
|
</pre>
|
|
<a name="Special_commands"></a><h4> <span class="mw-headline">Special commands</span></h4>
|
|
<a name=".2Fsay"></a><h5> <span class="mw-headline">/say</span></h5>
|
|
<p>If a factoid begins with "/say " then candide will not use
|
|
the "<factoid> is <description>" format when displaying the
|
|
factoid.
|
|
</p>
|
|
<pre> Example:
|
|
<pragma_> hi is /say Well, hello there, $nick.
|
|
<candide> 'hi' added.
|
|
<prec> candide, hi
|
|
<candide> Well, hello there, prec.
|
|
</pre>
|
|
<a name=".2Fme"></a><h5> <span class="mw-headline">/me</span></h5>
|
|
<p>If a factoid begins with "/me " then candide will ACTION the factoid.
|
|
</p>
|
|
<pre> Example:
|
|
<pragma_> bounce is /me bounces around.
|
|
<candide> 'bounce' added.
|
|
<pragma_> bounce
|
|
*candide bounces around.
|
|
</pre>
|
|
<a name=".2Fcall"></a><h5> <span class="mw-headline">/call</span></h5>
|
|
<p>If a factoid begins with "/call " then candide will call an existing command.
|
|
</p>
|
|
<pre> Example:
|
|
<pragma_> boing is /call bounce
|
|
<candide> 'boing' added.
|
|
<pragma_> boing
|
|
*candide bounces around.
|
|
</pre>
|
|
<a name=".2Fmsg"></a><h5> <span class="mw-headline">/msg</span></h5>
|
|
<p>If a factoid begins with "/msg <nick> " then candide will /MSG the factoid
|
|
text to <nick>
|
|
</p>
|
|
<a name="Special_variables"></a><h4> <span class="mw-headline">Special variables</span></h4>
|
|
<p>Currently there are three special variables:
|
|
</p>
|
|
<a name=".24nick"></a><h5> <span class="mw-headline">$nick</span></h5>
|
|
<pre> $nick: expands to the nick of the caller
|
|
</pre>
|
|
<a name=".24args"></a><h5> <span class="mw-headline">$args</span></h5>
|
|
<pre> $args: expands to any text following the keyword
|
|
</pre>
|
|
<a name=".24channel"></a><h5> <span class="mw-headline">$channel</span></h5>
|
|
<pre> $channel: expands to the name of the channel in which the command is used
|
|
</pre>
|
|
<a name="adlib_list_variables"></a><h4> <span class="mw-headline">adlib list variables</span></h4>
|
|
<p>You may create a list of adlib words by using the normal factoid creation method.
|
|
Also note that multiple words can be surrounded with double quotes to constitute one element.
|
|
</p>
|
|
<pre> Example:
|
|
<pragma_> colors is red green blue "bright yellow" pink "dark purple" orange
|
|
<candide> 'colors' added
|
|
</pre>
|
|
<p>Then you can instruct candide to pick a random word from this list to use in another factoid by
|
|
inserting the list as a variable.
|
|
</p>
|
|
<pre> Example:
|
|
<pragma_> sky is /say The sky is $colors.
|
|
<candide> 'sky' added.
|
|
<pragma_> sky
|
|
<candide> The sky is dark purple.
|
|
<pragma_> sky
|
|
<candide> The sky is green.
|
|
</pre>
|
|
<p>A practical example, creating the RTFM trigger:
|
|
</p>
|
|
<pre> <pragma_> sizes is big large tiny small huge gigantic teeny
|
|
<candide> 'sizes' added.
|
|
<pragma_> attacks is whaps thwacks bashes smacks punts whacks
|
|
<candide> 'attacks' added.
|
|
<pragma_> rtfm is /me $attacks $args with a $sizes $colors manual.
|
|
<candide> 'rtfm' added.
|
|
<pragma_> rtfm mauke
|
|
* candide thwacks mauke with a big red manual.
|
|
</pre>
|
|
<a name="action_with_args"></a><h4> <span class="mw-headline">action_with_args</span></h4>
|
|
<p>You can use the <a href="#factset" title="">factset</a> command to
|
|
set a special factoid meta-data key named "action_with_args" to trigger
|
|
an alternate message if an argument has been supplied.
|
|
</p>
|
|
<pre> Example:
|
|
<pragma_> snack is /me eats a cookie.
|
|
<candide> 'snack' added.
|
|
<pragma_> factset #channel snack action_with_args /me gives $args a cookie.
|
|
<candide> [Factoids] (#channel) snack: 'action_with_args' set to '/me gives $args a cookie.'
|
|
<pragma_> snack
|
|
* candide eats a cookie.
|
|
<pragma_> snack orbitz
|
|
* candide gives orbitz a cookie.
|
|
</pre>
|
|
<a name="add_nick"></a><h4> <span class="mw-headline">add_nick</span></h4>
|
|
<p>You can use the <a href="#factset" title="">factset</a> command to
|
|
set a special factoid meta-data key named "add_nick" to prepend the nick
|
|
of the caller to the output. This is mostly useful for modules.
|
|
</p>
|
|
<a name="Deleting_a_factoid"></a><h3> <span class="mw-headline">Deleting a factoid</span></h3>
|
|
<a name="factrem"></a><h4> <span class="mw-headline">factrem</span></h4>
|
|
<a name="forget"></a><h4> <span class="mw-headline">forget</span></h4>
|
|
<p>To remove a factoid, use the factrem or forget command. The syntax is:
|
|
</p>
|
|
<pre> factrem <channel> <keyword>
|
|
forget <channel> <keyword>
|
|
</pre>
|
|
<a name="Viewing.2Ftriggering_a_factoid"></a><h3> <span class="mw-headline">Viewing/triggering a factoid</span></h3>
|
|
<p>To view or trigger a factoid, one merely issues its keyword as a command.
|
|
</p>
|
|
<pre> <pragma_> candide, c?
|
|
<candide> C rocks!
|
|
</pre>
|
|
<a name="Viewing.2Ftriggering_another_channel.27s_factoid"></a><h3> <span class="mw-headline">Viewing/triggering another channel's factoid</span></h3>
|
|
<a name="fact"></a><h4> <span class="mw-headline">fact</span></h4>
|
|
<p>To view or trigger a factoid belonging to a specific channel, use the fact command:
|
|
</p>
|
|
<pre> fact <channel> <keyword> [arguments]
|
|
</pre>
|
|
<a name="Aliasing_a_factoid"></a><h3> <span class="mw-headline">Aliasing a factoid</span></h3>
|
|
<a name="factalias"></a><h4> <span class="mw-headline">factalias</span></h4>
|
|
<p>To create an factoid that acts as an alias for a command, use the
|
|
'factalias' command or '<alias> is /call <command>'.
|
|
</p>
|
|
<pre> <newalias> is /call <command>
|
|
</pre>
|
|
<p>The syntax for 'factalias' is:
|
|
</p>
|
|
<pre> factalias <channel> <new keyword> <command>
|
|
</pre>
|
|
<pre> Example:
|
|
<pragma_> book is /me points accusingly at $args, "Where is your book?!"
|
|
<candide> 'book' added.
|
|
<pragma_> book newbie
|
|
*candide points accusingly at newbie, "Where is your book?!"
|
|
<pragma_> rafb is /call book
|
|
<candide> 'rafb' added.
|
|
<pragma_> rafb runtime
|
|
*candide points accusingly at runtime, "Where is your book?!"
|
|
</pre>
|
|
<pre> Another example:
|
|
<pragma_> offtopic is /say In this channel, '$args' is off-topic.
|
|
<pragma_> offtopic C++
|
|
<candide> In this channel, 'C++' is off-topic.
|
|
<pragma_> factalias ##c C++ offtopic C++ <i>(or: C++ is /call offtopic C++)</i>
|
|
<pragma_> C++
|
|
<candide> In this channel, 'C++' is off-topic.
|
|
</pre>
|
|
<a name="Changing_a_factoid"></a><h3> <span class="mw-headline">Changing a factoid</span></h3>
|
|
<a name="factchange"></a><h4> <span class="mw-headline">factchange</span></h4>
|
|
<p>To change a factoid, use the 'factchange' command:
|
|
</p>
|
|
<pre> Usage: factchange <channel> <keyword> s/<pattern>/<change to>/<br>
|
|
<pragma_> c
|
|
<candide> C rocks!
|
|
<pragma_> factchange ##c c s/rocks/rules/
|
|
<candide> c changed.
|
|
<pragma_> c
|
|
<candide> C rules!
|
|
</pre>
|
|
<p>Note that the final argument is a Perl-style substitution regex. See 'man perlre'.
|
|
</p>
|
|
<pre> For instance, it is possible to append to a factoid by using:
|
|
'factchange channel factoid s/$/text to append/'
|
|
</pre>
|
|
<pre> Likewise, you can prepend to a factoid by using:
|
|
'factchange channel factoid s/^/text to prepend/'
|
|
</pre>
|
|
<p>Alternatively, you may append to a factoid by using 'is also':
|
|
</p>
|
|
<pre> <pragma_> candide, c is also See FAQ at <a href="http://www.eskimo.com/%7Escs/C-faq/top.html" class="external free" title="http://www.eskimo.com/~scs/C-faq/top.html" rel="nofollow">http://www.eskimo.com/~scs/C-faq/top.html</a>
|
|
<candide> Changed: c is /say C rules! ; See FAQ at <a href="http://www.eskimo.com/%7Escs/C-faq/top.html" class="external free" title="http://www.eskimo.com/~scs/C-faq/top.html" rel="nofollow">http://www.eskimo.com/~scs/C-faq/top.html</a>
|
|
</pre>
|
|
<a name="factset"></a><h4> <span class="mw-headline">factset</span></h4>
|
|
<p>To view or set factoid meta-data, such as owner, rate-limit, etc, use the 'factset' command.
|
|
</p>
|
|
<pre> Usage: factset <channel> <factoid> [<key> [value]]
|
|
</pre>
|
|
<p>Omit <key> and <value> to list all the keys and values
|
|
for a factoid. Specify <key>, but omit <value> to see the
|
|
value for a specific key.
|
|
</p>
|
|
<a name="factunset"></a><h4> <span class="mw-headline">factunset</span></h4>
|
|
<p>To unset factoid meta-data, use the 'factunset' command.
|
|
</p>
|
|
<pre> Usage: factunset <channel> <factoid> <key>
|
|
</pre>
|
|
<a name="Finding_a_factoid"></a><h3> <span class="mw-headline">Finding a factoid</span></h3>
|
|
<a name="factfind"></a><h4> <span class="mw-headline">factfind</span></h4>
|
|
<p>To search the database for a factoid, you may use the 'factfind' command. You may optionally
|
|
specify whether to narrow by channel and/or include factoid owner and/or last referenced by in the search.
|
|
</p><p>If there is only one match for the query, it will display that factoid, otherwise it will list all matches.
|
|
</p>
|
|
<pre>Usage: factfind [-channel channel] [-owner nick] [-by nick] [text]
|
|
Example:
|
|
<pragma_> candide, factfind cast
|
|
<candide> 3 factoids match: [##c] NULL casting dontcastmalloc
|
|
</pre>
|
|
<a name="Information_about_a_factoid"></a><h3> <span class="mw-headline">Information about a factoid</span></h3>
|
|
<a name="factinfo"></a><h4> <span class="mw-headline">factinfo</span></h4>
|
|
<p>To get information about a factoid, such as who submitted it and when, use the 'factinfo' command:
|
|
</p>
|
|
<pre> factinfo <channel> <keyword>
|
|
</pre>
|
|
<pre> <pragma_> candide, factinfo ##c NULL
|
|
<candide> NULL: Factoid submitted by Major-Willard for all channels on Sat Jan 1 16:17:42 2005
|
|
[5 years and 178 days ago], referenced 39 times (last by pragma_ on Sun Jun 27 04:40:32 2010 [5 seconds ago])
|
|
</pre>
|
|
<p>If the factoid has been submitted for the special .* channel, then it will be shown as 'submitted for all channels'. Otherwise,
|
|
it will be shown as 'submitted for #channel'.
|
|
</p>
|
|
<a name="factshow"></a><h4> <span class="mw-headline">factshow</span></h4>
|
|
<p>To see the factoid string literal, use the 'factshow' command:
|
|
</p>
|
|
<pre> factshow <channel> <keyword>
|
|
</pre>
|
|
<pre> <pragma_> factshow ##c hi
|
|
<candide> hi: /say $greetings, $nick.
|
|
</pre>
|
|
<a name="factset_2"></a><h4> <span class="mw-headline">factset</span></h4>
|
|
<p>To view factoid meta-data, such as owner, rate-limit, etc, use the 'factset' command.
|
|
</p>
|
|
<pre> Usage: factset <channel> <factoid> [<key> [value]]
|
|
</pre>
|
|
<p>Omit <key> and <value> to list all the keys and values
|
|
for a factoid. Specify <key>, but omit <value> to see the
|
|
value for a specific key.
|
|
</p>
|
|
<a name="count"></a><h4> <span class="mw-headline">count</span></h4>
|
|
<p>To see how many factoids and what percentage of the database <nick> has submitted, use the 'count' command:
|
|
</p>
|
|
<pre> <pragma_> count prec
|
|
<candide> prec has submitted 28 factoids out of 233 (12%)
|
|
<pragma_> count twkm
|
|
<candide> twkm has submitted 74 factoids out of 233 (31%)
|
|
<pragma_> count pragma
|
|
<candide> pragma has submitted 27 factoids out of 233 (11%)
|
|
</pre>
|
|
<a name="histogram"></a><h4> <span class="mw-headline">histogram</span></h4>
|
|
<p>To see a histogram of the top 10 factoid submitters, use the 'histogram' command:
|
|
</p>
|
|
<pre> <pragma_> histogram
|
|
<candide> 268 factoids, top 10 submitters: twkm: 74 (27%) Major-Willard:
|
|
64 (23%) pragma_: 40 (14%) prec: 39 (14%) defrost: 14 (5%)
|
|
PoppaVic: 10 (3%) infobahn: 7 (2%) orbitz: 3 (1%) mauke: 3
|
|
(1%) Tom^: 2 (1%)
|
|
</pre>
|
|
<a name="top20"></a><h4> <span class="mw-headline">top20</span></h4>
|
|
<p>To see the top 20 most popular factoids, use the 'top20' command.
|
|
</p>
|
|
<a name="Commands"></a><h2> <span class="mw-headline">Commands</span></h2>
|
|
<p>To see all the currently available commands, use the <b>list commands</b> command.
|
|
</p><p>Some commands are:
|
|
</p>
|
|
<a name="Quotegrabs"></a><h3> <span class="mw-headline">Quotegrabs</span></h3>
|
|
<a name="Table_of_quotegrabs"></a><h4> <span class="mw-headline">Table of quotegrabs</span></h4>
|
|
<p>A table of grabbed quotes can be found here: <a href="http://www.iso-9899.info/candide/quotegrabs.html" class="external free" title="http://www.iso-9899.info/candide/quotegrabs.html" rel="nofollow">http://www.iso-9899.info/candide/quotegrabs.html</a>
|
|
</p>
|
|
<a name="grab"></a><h4> <span class="mw-headline">grab</span></h4>
|
|
<p>Grabs a message someone says, and adds it to the quotegrabs database.
|
|
You may grab multiple nicks/messages in one quotegrab by separating
|
|
the arguments with a plus sign (the nicks need not be different -- you
|
|
can grab multiple messages by the same nick by specifying a different
|
|
history for each grab).
|
|
</p><p>You can use the <a href="#recall" title="">recall</a> command to test the arguments before grabbing (please use a private message).
|
|
</p>
|
|
<pre>Usage: grab <nick> [history [channel]]
|
|
where [history] is an optional argument that is an integral index into the recent messages OR a regular expression used to search message contents;
|
|
e.g., to grab the 3rd most recent message for nick, use: grab nick 3
|
|
OR to grab a message containing the text "pizza", use: grab nick pizza
|
|
</pre>
|
|
<pre>Examples:
|
|
</pre>
|
|
<pre> <bob> Clowns are scary.
|
|
<pragma-> grab bob clowns
|
|
<candide> Quote grabbed: 1: <bob> Clowns are scary.
|
|
</pre>
|
|
<pre> <alice> Please put that in the right place.
|
|
<bob> That's what she said!
|
|
<pragma-> grab alice place + bob said
|
|
<candide> Quote grabbed 2: <alice> Please put that in the right place. <bob> That's what she said!
|
|
</pre>
|
|
<pre> <charlie> I know a funny programming knock-knock joke.
|
|
<charlie> Knock knock!
|
|
<charlie> Race condition.
|
|
<charlie> Who's there?
|
|
<pragma-> grab charlie knock + charlie race + charlie there
|
|
<candide> Quote grabbed 3: <charlie> Knock knock! <charlie> Race condition. <charlie> Who's there?
|
|
</pre>
|
|
<a name="recall"></a><h4> <span class="mw-headline">recall</span></h4>
|
|
<p>Recalls messages from the chat history and displays them with a relative time-stamp.
|
|
</p><p>Usage is identical to <a href="#grab" title="">grab</a>.
|
|
</p>
|
|
<pre> <pragma-> recall alice + bob
|
|
<candide> [20 seconds ago] <alice> Please put that in the right place. [8 seconds ago] <bob> That's what she said!
|
|
</pre>
|
|
<a name="getq"></a><h4> <span class="mw-headline">getq</span></h4>
|
|
<p>Retrieves and displays a specific grabbed quote from the quotegrabs database.
|
|
</p>
|
|
<pre>Usage: getq <quote-id>
|
|
</pre>
|
|
<a name="rq"></a><h4> <span class="mw-headline">rq</span></h4>
|
|
<p>Retrieves and displays a random grabbed quote from the quotegrabs database. You may filter by nick, channel and/or quote text.
|
|
</p>
|
|
<pre>Usage: rq [nick regex [channel regex [text regex]]]
|
|
rq <nick regex> [-channel <channel regex>] [-text <text regex>]
|
|
</pre>
|
|
<a name="delq"></a><h4> <span class="mw-headline">delq</span></h4>
|
|
<p>Deletes a specific grabbed quote from the quotegrabs database. You
|
|
can only delete quotes you have grabbed unless you are logged in as an
|
|
admin.
|
|
</p>
|
|
<pre>Usage: delq <quote-id>
|
|
</pre>
|
|
<a name="Modules"></a><h3> <span class="mw-headline">Modules</span></h3>
|
|
<a name=".7B.7D"></a><h4> <span class="mw-headline">{}</span></h4>
|
|
<p>This is just an alias for the <a href="#cc" title="">cc</a> command. Can take an optional nick argument in front in order to address the output to said nick.
|
|
</p>
|
|
<pre> Example:
|
|
<pragma_> { puts("hello"); }
|
|
<candide> hello
|
|
<pragma_> somebody: { puts("hi"); }
|
|
<candide> somebody: hi
|
|
</pre>
|
|
<a name="cc"></a><h4> <span class="mw-headline">cc</span></h4>
|
|
<p>Code compiler (and executor). This command will compile and execute
|
|
user-provided code in a number of languages, and then display the
|
|
compiler and/or program output.
|
|
</p><p>The program is executed within a gdb debugger instance, which may
|
|
be interacted with via the gdb macros described below or with the
|
|
gdb("command") function.
|
|
</p><p>The compiler and program are executed inside a virtual machine.
|
|
After each run, the virtual machine is restored to a previous state. No
|
|
system calls have been disallowed. You can write to and read from the
|
|
filesystem, provided you do it in the same program. The network cable
|
|
has been unplugged. You are free to write and test any code you like.
|
|
Have fun.
|
|
</p><p>Uses gcc 4.9.0 and gdb 7.7.
|
|
</p>
|
|
<a name="Usage"></a><h5> <span class="mw-headline">Usage</span></h5>
|
|
<pre> Usage: cc [compiler options] [-paste] [-nomain] [-lang=<language>] <code> [-input=<stdin input>]
|
|
cc <run|undo|show|paste|copy|replace|prepend|append|remove|s/// [and ...]>
|
|
cc <diff>
|
|
[nick] { <same as above without the cc in front> }
|
|
</pre>
|
|
<ul><li> You can pass any gcc compiler options. By default, -Wall -Wextra -std=c11 -pedantic are passed unless an option is specified.
|
|
</li><li> The -paste option will pretty-format and paste the code/output
|
|
to a paste site and display the URL (useful to preserve newlines in
|
|
output, and to refer to line-numbers).
|
|
</li><li> The -nomain flag will prevent the code from being wrapped with a main() function.
|
|
</li><li> The -input=<stdin input> option provides STDIN input
|
|
(i.e., scanf(), getc(stdin), etc.); MUST be the last option after any
|
|
code (otherwise the code will be considered to be input).
|
|
</li><li> The run, undo, show, replace, etc commands are part of interactive-editing. See below.
|
|
</li><li> The diff command can be used to display the differences between the two most recent snippets.
|
|
</li><li> You can use { } instead of cc; the options/flags/comments must
|
|
be inside the braces. Can take an optional nick argument in front in
|
|
order to address the output to said nick.
|
|
</li></ul>
|
|
<a name="Supported_Languages"></a><h5> <span class="mw-headline">Supported Languages</span></h5>
|
|
<p>The -lang option accepts the following languages: C, C99 and C11.
|
|
Alternatively, you may use the -std=<c89|gnu89|c99|gnu99|etc>
|
|
compiler option to specify which standard to follow.
|
|
</p><p>Support for additional languages coming soon.
|
|
</p>
|
|
<a name="Default_Language"></a><h5> <span class="mw-headline">Default Language</span></h5>
|
|
<p>The default language (e.g., without an explicit -lang or -std option)
|
|
is C11 pedantic; which is gcc -Wall -Wextra -std=c11 -pedantic.
|
|
</p>
|
|
<a name="Disallowed_system_calls"></a><h5> <span class="mw-headline">Disallowed system calls</span></h5>
|
|
<p>None. The network cable has been unplugged. Other than that, anything goes. Have fun.
|
|
</p>
|
|
<a name="Program_termination_with_no_output"></a><h5> <span class="mw-headline">Program termination with no output</span></h5>
|
|
<p>If there is no output, information about the local variables will be displayed.
|
|
</p>
|
|
<pre> <pragma_> cc int x = 5, y = 16; x ^= y, y ^= x, x ^= y;
|
|
<candide> pragma_: <no output: x = 16; y = 5>
|
|
</pre>
|
|
<pre> <pragma_> cc #include <sys/utsname.h> struct utsname u; uname(&u);
|
|
<candide> pragma_: <no output: u = {sysname = "Linux", nodename = "compiler", release = "3.2.0-8-generic", version = "#15-Ubuntu SMP Wed Jan 11 13:57:44 UTC 2012", machine = "x86_64", __domainname = "(none)"}>
|
|
</pre>
|
|
<a name="Abnormal_program_termination"></a><h5> <span class="mw-headline">Abnormal program termination</span></h5>
|
|
<p>If a signal is detected, the bot will display useful information.
|
|
</p><p>Example session:
|
|
</p>
|
|
<pre>< pragma_> ,cc char *p = 0; *p = 1;
|
|
< candide> pragma_: Program received signal 11 (SIGSEGV) at statement: *p = 1; <local variables: p = 0x0>
|
|
</pre>
|
|
<pre>< pragma_> ,cc void bang() { char *p = 0, s[] = "lol"; strcpy(p, s); } bang();
|
|
< candide> pragma_: Program received signal 11 (SIGSEGV) in bang () at statement: strcpy(p, s); <local variables: p = 0x0, s = "lol">
|
|
</pre>
|
|
<pre>< pragma_> ,cc int a = 2 / 0;
|
|
< candide> pragma_: [In function 'main': warning: division by zero] Program received signal 8 (SIGFPE) at statement: int a = 2 / 0;
|
|
</pre>
|
|
<a name="C_and_C.2B.2B_Functionality"></a><h5> <span class="mw-headline">C and C++ Functionality</span></h5>
|
|
<a name="Using_the_preprocessor"></a><h5> <span class="mw-headline">Using the preprocessor</span></h5>
|
|
<a name="Default_.23includes"></a><h6> <span class="mw-headline">Default #includes</span></h6>
|
|
<p>These are the default includes for C11. To get the most up-to-date list of #includes, use the `cc paste` command.
|
|
</p>
|
|
<pre>#define _XOPEN_SOURCE 9001
|
|
#define __USE_XOPEN
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <math.h>
|
|
#include <limits.h>
|
|
#include <sys/types.h>
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdarg.h>
|
|
#include <stdnoreturn.h>
|
|
#include <stdalign.h>
|
|
#include <ctype.h>
|
|
#include <inttypes.h>
|
|
#include <float.h>
|
|
#include <errno.h>
|
|
#include <time.h>
|
|
#include <assert.h>
|
|
#include <complex.h>
|
|
</pre>
|
|
<a name="Using_.23include"></a><h6> <span class="mw-headline">Using #include</span></h6>
|
|
<p>In C and C++, you may #include <file.h> one after another on
|
|
the same line. The bot will automatically put them on separate lines.
|
|
If you do use #include, the files you specify will replace the default
|
|
includes. You do not need to append a \n after the #include.
|
|
</p>
|
|
<pre><pragma_> cc #include <sys/utsname.h> struct utsname u; uname(&u);
|
|
<candide> pragma_: <no output: u = {sysname = "Linux", nodename = "compiler", release = "3.2.0-8-generic", version = "#15-Ubuntu SMP Wed Jan 11 13:57:44 UTC 2012", machine = "x86_64", __domainname = "(none)"}>
|
|
</pre>
|
|
<pre><pragma_> cc #include <stdio.h> #include <stdlib.h> void func(void) { puts("Hello, world"); } func();
|
|
<candide> pragma_: Hello, World
|
|
</pre>
|
|
<p>In the previous examples, only the specified includes (e.g.,
|
|
<sys/utsname.h> in the first example, <stdio.h> and
|
|
<stdlib.h> in the second, will be included instead of the default
|
|
includes.
|
|
</p>
|
|
<a name="Using_.23define"></a><h6> <span class="mw-headline">Using #define</span></h6>
|
|
<p>You can also #define macros; however, #defines require an explicit
|
|
"\n" sequence to terminate, otherwise the remainder of the line will be
|
|
part of the macro.
|
|
</p>
|
|
<pre><pragma_> cc #define GREETING "Hello, World"\n puts(GREETING);
|
|
<candide> pragma_: Hello, World
|
|
</pre>
|
|
<a name="main.28.29_Function_Unnecessary"></a><h5> <span class="mw-headline">main() Function Unnecessary</span></h5>
|
|
<p>In C and C++, if there is no main function, then a main function will
|
|
created and wrapped around the appropriate bits of your code (unless
|
|
the -nomain flag was specified); anything outside of any functions,
|
|
excluding preprocessor stuff, will be put into this new main function.
|
|
Here's an example:
|
|
</p>
|
|
<pre> <pragma_> cc -paste int add(int a, int b) { return a + b; } printf("4 + 6 = %d -- ", add(4, 6)); int add3(int a, int b, int c)
|
|
{ return add(a, b) + c; } printf("7 + 8 + 9 = %d", add3(7, 8, 9));
|
|
<candide> <a href="http://sprunge.us/ehRA?c" class="external free" title="http://sprunge.us/ehRA?c" rel="nofollow">http://sprunge.us/ehRA?c</a>
|
|
</pre>
|
|
<p>The -paste flag causes the code to be pretty-formatted and pasted
|
|
with output in comments to a paste site, which displays the following:
|
|
</p>
|
|
<pre>#define _XOPEN_SOURCE 9001
|
|
#define __USE_XOPEN
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <math.h>
|
|
#include <limits.h>
|
|
#include <sys/types.h>
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdarg.h>
|
|
#include <stdnoreturn.h>
|
|
#include <stdalign.h>
|
|
#include <ctype.h>
|
|
#include <inttypes.h>
|
|
#include <float.h>
|
|
#include <errno.h>
|
|
#include <time.h>
|
|
#include <assert.h>
|
|
#include <complex.h>
|
|
#include <prelude.h>
|
|
|
|
|
|
int add(int a, int b) {
|
|
return a + b;
|
|
}
|
|
|
|
int add3(int a, int b, int c) {
|
|
return add(a, b) + c;
|
|
}
|
|
|
|
int main(void) {
|
|
printf("4 + 6 = %d -- ", add(4, 6));
|
|
|
|
printf("7 + 8 + 9 = %d", add3(7, 8, 9));
|
|
return 0;
|
|
}
|
|
|
|
/************* OUTPUT *************
|
|
4 + 6 = 10 -- 7 + 8 + 9 = 24
|
|
************** OUTPUT *************/
|
|
</pre>
|
|
<a name="Embedding_Newlines"></a><h5> <span class="mw-headline">Embedding Newlines</span></h5>
|
|
<p>In Assembler, you may start a newline in the code via a \n sequence or a semi-colon.
|
|
</p><p>In C and C++, #defines must be terminated by a \n sequence.
|
|
</p><p>In all other languages, you may embed a newline in the code by using |n. Yes, that's the pipe character followed by 'n'.
|
|
</p>
|
|
<a name="Printing_in_binary.2Fbase2"></a><h5> <span class="mw-headline">Printing in binary/base2</span></h5>
|
|
<p>A freenode ##c regular, Wulf, has provided a printf format specifier 'b' which can be used to print values in base2.
|
|
</p>
|
|
<pre> <Wulf> cc printf("%b", 1234567);
|
|
<candide> 000100101101011010000111
|
|
</pre>
|
|
<pre> <Wulf> cc printf("%#'b", 1234567);
|
|
<candide> 0001.0010.1101.0110.1000.0111
|
|
</pre>
|
|
<a name="Using_the_GDB_debugger"></a><h5> <span class="mw-headline">Using the GDB debugger</span></h5>
|
|
<p>The program is executed within a gdb debugger instance, which may be interacted with via the following gdb macros.
|
|
</p>
|
|
<a name="print"></a><h6> <span class="mw-headline">print</span></h6>
|
|
<p>The print() macro prints the values of expressions. Useful for printing out structures and arrays.
|
|
</p>
|
|
<pre><pragma_> cc int a[] = { 1, 2, 3 }; print(a);
|
|
<candide> pragma_: <a = {1, 2, 3}>
|
|
</pre>
|
|
<pre><pragma_> cc #include <sys/utsname.h> struct utsname u; uname(&u); print(u);
|
|
<candide> pragma_: <u = {sysname = "Linux", nodename = "compiler", release = "3.2.0-8-generic", version = "#15-Ubuntu SMP Wed Jan 11 13:57:44 UTC 2012", machine = "x86_64", __domainname = "(none)"}>
|
|
</pre>
|
|
<pre><pragma_> cc print(sizeof(int));
|
|
<candide> pragma_: <sizeof(int) = 4>
|
|
</pre>
|
|
<pre><pragma_> cc print(2+2);
|
|
<candide> pragma_: <2 + 2 = 4>
|
|
</pre>
|
|
<a name="ptype"></a><h6> <span class="mw-headline">ptype</span></h6>
|
|
<p>The ptype() macro prints the types of expressions.
|
|
</p>
|
|
<pre> <pragma_> cc int *a[] = {0}; ptype(a); ptype(a[0]); ptype(*a[0]);
|
|
<candide> pragma_: <a = int *[1]> <a[0] = int *> <*a[0] = int>
|
|
</pre>
|
|
<a name="watch"></a><h6> <span class="mw-headline">watch</span></h6>
|
|
<p>The watch() macro watches a variable and displays its value when it changes.
|
|
</p>
|
|
<pre><pragma_> cc int n = 0, last = 1; watch(n); while(n <= 7000) { n += last; last = n - last; } /* fibonacci */
|
|
<candide> pragma_: <n = 1> <n = 2> <n = 3> <n = 5> <n = 8> <n = 13> <n = 21> <n = 34> <n = 55> <n = 89> <n = 144> <n = 233> <n = 377> <n = 610> <n = 987> <n = 1597> <n = 2584> <n = 4181> <n = 6765> <n = 10946>
|
|
</pre>
|
|
<a name="trace"></a><h6> <span class="mw-headline">trace</span></h6>
|
|
<p>The trace() macro traces a function's calls, displaying passed and returned values.
|
|
</p>
|
|
<pre> <pragma_> ,cc trace(foo); char *foo(int n) { puts("Hello, world"); return "Good-bye, world"; } foo(42);
|
|
<candide> pragma_: <entered [1] foo (n=42)>
|
|
Hello, world
|
|
<leaving [1] foo (n=42), returned 0x401006 "Good-bye, world">
|
|
</pre>
|
|
<pre> <pragma_> ,cc int fib2(int n, int p0, int p1) { return n == 1 ? p1 : fib2(n - 1, p1, p0 + p1); }
|
|
int fib(int n) { return n == 0 ? 0 : fib2(n, 0, 1); }
|
|
trace(fib); trace(fib2); for(int i = 0; i < 20; i++) printf("%d ", fib(i));
|
|
<candide> pragma_: <entered [1] fib (n=0)>
|
|
<leaving [1] fib (n=0), returned 0>
|
|
1
|
|
<entered [1] fib (n=2)>
|
|
<entered [2] fib2 (n=2, p0=0, p1=1)>
|
|
<entered [3] fib2 (n=1, p0=1, p1=1)>
|
|
<leaving [3] fib2 (n=1, p0=1, p1=1), returned 1>
|
|
<leaving [2] fib2 (n=2, p0=0, p1=1), returned 1>
|
|
<leaving [1] fib (n=2), returned 1>
|
|
1
|
|
<entered [1] fib (n=3)>
|
|
<entered [2] fib2 (n=3, p0=0, p1=1)>
|
|
<entered [3] fib2 (n=2, p0=1, p1=1)>
|
|
<entered [4] fib2 (n=1, p0=1, p1=2)>
|
|
<leaving [4] fib2 (n=1, p0=1, p1=2), returned 2>
|
|
<leaving [3] fib2 (n=2, p0=1, p1=1), returned 2>
|
|
<leaving [2] fib2 (n=3, p0=0, p1=1), returned 2>
|
|
<leaving [1] fib (n=3), returned 2>
|
|
2
|
|
<entered [1] fib (n=4)>
|
|
<entered [2] fib2 (n=4, p0=0, p1=1)>
|
|
<entered [3] fib2 (n=3, p0=1, p1=1)>
|
|
<entered [4] fib2 (n=2, p0=1, p1=2)>
|
|
<entered [5] fib2 (n=1, p0=2, p1=3)>
|
|
<leaving [5] fib2 (n=1, p0=2, p1=3), returned 3>
|
|
<leaving [4] fib2 (n=2, p0=1, p1=2), returned 3>
|
|
<leaving [3] fib2 (n=3, p0=1, p1=1), returned 3>
|
|
<leaving [2] fib2 (n=4, p0=0, p1=1), returned 3>
|
|
<leaving [1] fib (n=4), returned 3>
|
|
3
|
|
<entered [1] fib (n=5)>
|
|
<entered [2] fib2 (n=5, p0=0, p1=1)>
|
|
<entered [3] fib2 (n=4, p0=1, p1=1)>
|
|
<entered [4] fib2 (n=3, p0=1, p1=2)>
|
|
<entered [5] fib2 (n=2, p0=2, p1=3)>
|
|
<entered [6] fib2 (n=1, p0=3, p1=5)>
|
|
<leaving [6] fib2 (n=1, p0=3, p1=5), returned 5>
|
|
<leaving [5] fib2 (n=2, p0=2, p1=3), returned 5>
|
|
<leaving [4] fib2 (n=3, p0=1, p1=2), returned 5>
|
|
<leaving [3] fib2 (n=4, p0=1, p1=1), returned 5>
|
|
<leaving [2] fib2 (n=5, p0=0, p1=1), returned 5>
|
|
<leaving [1] fib (n=5), returned 5>
|
|
5
|
|
<entered [1] fib (n=6)>
|
|
<entered [2] fib2 (n=6, p0=0, p1=1)>
|
|
<entered [3] fib2 (n=5, p0=1, p1=1)>
|
|
<entered [4] fib2 (n=4, p0=1, p1=2)>
|
|
<entered [5] fib2 (n=3, p0=2, p1=3)>
|
|
<entered [6] fib2 (n=2, p0=3, p1=5)>
|
|
<entered [7] fib2 (n=1, p0=5, p1=8)>
|
|
<leaving [7] fib2 (n=1, p0=5, p1=8), returned 8>
|
|
<leaving [6] fib2 (n=2, p0=3, p1=5), returned 8>
|
|
<leaving [5] fib2 (n=3, p0=2, p1=3), returned 8>
|
|
<leaving [4] fib2 (n=4, p0=1, p1=2), returned 8>
|
|
<leaving [3] fib2 (n=5, p0=1, p1=1), returned 8>
|
|
<leaving [2] fib2 (n=6, p0=0, p1=1), returned 8>
|
|
<leaving [1] fib (n=6), returned 8>
|
|
8
|
|
... etc ...
|
|
</pre>
|
|
<a name="gdb"></a><h6> <span class="mw-headline">gdb</span></h6>
|
|
<p>The gdb() function takes a string argument which it passes to the gdb debugger and then displays the output if any.
|
|
</p>
|
|
<pre> <pragma_> ,cc gdb("info macro NULL");
|
|
<candide> pragma_: <Defined at /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h:402> <#define NULL ((void *)0)>
|
|
</pre>
|
|
<pre> <pragma_> ,cc void foo() { gdb("info frame"); } foo();
|
|
<candide> pragma_: <Stack level 1, frame at 0x7fffffffe660:> rip = 0x400e28 in foo (); saved rip 0x400e43 called by frame at 0x7fffffffe680, caller of frame at 0x7fffffffe650 source language
|
|
c. Arglist at 0x7fffffffe650, args: Locals at 0x7fffffffe650, Previous frame's sp is 0x7fffffffe660 Saved registers: rbp at 0x7fffffffe650, rip at 0x7fffffffe658
|
|
</pre>
|
|
<a name="Interactive_Editing"></a><h5> <span class="mw-headline">Interactive Editing</span></h5>
|
|
<p>The <a href="#cc" title="">cc</a> command supports interactive-editing. The general syntax is: cc [command].
|
|
</p><p>Each cc snippet is saved in a buffer which is named after the channel or nick it was used in. You can use <a href="#show" title="">show</a> or <a href="#diff" title="">diff</a> with a buffer argument to view that buffer; otherwise you can use the <a href="#copy" title="">copy</a>
|
|
command to copy the most recent snippet of another buffer into the
|
|
current buffer and optionally chain it with another command -- for
|
|
example, to copy the ##c buffer and paste it: <i>cc copy ##c and paste</i>.
|
|
</p><p>The commands are: <a href="#copy" title="">copy</a>, <a href="#show" title="">show</a>, <a href="#diff" title="">diff</a>, <a href="#paste" title="">paste</a>, <a href="#run" title="">run</a>, <a href="#undo" title="">undo</a>, <a href="#s.2F.2F" title="">s//</a>, <a href="#replace" title="">replace</a>, <a href="#prepend" title="">prepend</a>, <a href="#append" title="">append</a>, and <a href="#remove" title="">remove</a>. Most of the commands may be chained together by separating them with whitespace or "and".
|
|
</p><p>The commands are described in more detail below:
|
|
</p>
|
|
<a name="copy"></a><h6> <span class="mw-headline">copy</span></h6>
|
|
<p>To copy a snippet from another buffer, use the <b>copy</b> command. Other commands can optionally be chained after this command.
|
|
</p>
|
|
<pre> Usage: cc copy <buffer> [and ...]
|
|
</pre>
|
|
<a name="show"></a><h6> <span class="mw-headline">show</span></h6>
|
|
<p>To show the latest code in the buffer, use the <b>show</b> command. This command can take an optional buffer argument.
|
|
</p>
|
|
<pre> <pragma_> cc show
|
|
<candide> pragma_: printf("Hello, world!");
|
|
</pre>
|
|
<p>This command is stand-alone and cannot be chained with other interactive-editing commands.
|
|
</p>
|
|
<a name="diff"></a><h6> <span class="mw-headline">diff</span></h6>
|
|
<p>To see the differences between the two most recent snippets, use the <b>diff</b> command. This command can take an optional buffer argument.
|
|
</p>
|
|
<pre> <pragma_> cc diff
|
|
<candide> pragma: printf("<replaced `Hello` with `Good-bye`>, <replaced `world` with `void`>");
|
|
</pre>
|
|
<p>This command is stand-alone and cannot be chained with other interactive-editing commands.
|
|
</p>
|
|
<a name="paste"></a><h6> <span class="mw-headline">paste</span></h6>
|
|
<p>To paste the full source of the latest code in the buffer as the compiler sees it, use the <b>paste</b> command:
|
|
</p>
|
|
<pre> <pragma_> cc paste
|
|
<candide> pragma_: <a href="http://some.random.paste-site.com/paste/results" class="external free" title="http://some.random.paste-site.com/paste/results" rel="nofollow">http://some.random.paste-site.com/paste/results</a>
|
|
</pre>
|
|
<p>This command is stand-alone and cannot be chained with other interactive-editing commands.
|
|
</p>
|
|
<a name="run"></a><h6> <span class="mw-headline">run</span></h6>
|
|
<p>To attempt to compile and execute the latest code in the buffer, use the <b>run</b> command:
|
|
</p>
|
|
<pre> <pragma_> cc run
|
|
<candide> pragma_: Hello, world!
|
|
</pre>
|
|
<p>This command is stand-alone and cannot be chained with other interactive-editing commands.
|
|
</p>
|
|
<a name="undo"></a><h6> <span class="mw-headline">undo</span></h6>
|
|
<p>To undo any changes, use <b>undo</b>. The <b>undo</b> command must be the first command before any subsequent commands.
|
|
</p>
|
|
<a name="s.2F.2F"></a><h6> <span class="mw-headline">s//</span></h6>
|
|
<p>To change the latest code in the buffer, use the <b>s/regex/substitution/[gi]</b> pattern.
|
|
</p>
|
|
<pre> <pragma_> cc s/Hello/Good-bye/ and s/world/void/
|
|
<candide> pragma_: Good-bye, void!
|
|
<pragma_> cc show
|
|
<candide> pragma_: printf("Good-bye, void!");
|
|
</pre>
|
|
<a name="replace"></a><h6> <span class="mw-headline">replace</span></h6>
|
|
<p>Alternatively, you may use the <b>replace</b> command. The usage is (note the required single-quotes):
|
|
</p>
|
|
<pre> cc replace [all, first, second, ..., tenth, last] 'from' with 'to'
|
|
</pre>
|
|
<a name="prepend"></a><h6> <span class="mw-headline">prepend</span></h6>
|
|
<p>Text may be prepended with the <b>prepend</b> command:
|
|
</p>
|
|
<pre> cc prepend 'text'
|
|
</pre>
|
|
<a name="append"></a><h6> <span class="mw-headline">append</span></h6>
|
|
<p>Text may be appended with the <b>append</b> command:
|
|
</p>
|
|
<pre> cc append 'text'
|
|
</pre>
|
|
<a name="remove"></a><h6> <span class="mw-headline">remove</span></h6>
|
|
<p>Text may be deleted with the <b>remove</b> command:
|
|
</p>
|
|
<pre> cc remove [all, first, second, ..., tenth, last] 'text'
|
|
</pre>
|
|
<a name="Some_Examples"></a><h5> <span class="mw-headline">Some Examples</span></h5>
|
|
<pre> Examples:
|
|
</pre>
|
|
<pre> < pragma_> cc int fib2(int n, int p0, int p1) { return n == 1 ? p1 : fib2(n - 1, p1, p0 + p1); }
|
|
int fib(int n) { return n == 0 ? 0 : fib2(n, 0, 1); } for(int i = 0; i < 21; i++) printf("%d ", fib(i));
|
|
< candide> pragma_: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
|
|
</pre>
|
|
<pre> < pragma_> cc int i = 0, last = 1; while(i <= 7000) { printf("%d ", i); i += last; last = i - last; }
|
|
<candide> pragma_: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
|
|
</pre>
|
|
<pre> <Icewing> cc int n=0, f[2]={0,1}; while(n<20) printf("%d ",f[++n&1]=f[0]+f[1]); // based on cehteh
|
|
<candide> Icewing: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
|
|
</pre>
|
|
<pre> <3monkeys> cc @p=(0,1); until($#p>20) { print"$p[-2]\n"; push @p, $p[-2] + $p[-1] } -lang=Perl
|
|
<candide> 3monkeys: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
|
|
</pre>
|
|
<pre> <spiewak> cc -lang=Ruby p,c=0,1; 20.times{p p; c=p+p=c}
|
|
<candide> spiewak: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
|
|
</pre>
|
|
<pre> <Jafet> cc main = print $ take 20 $ let fibs = 0 : scanl (+) 1 fibs in fibs; -lang=Haskell
|
|
<candide> Jafet: [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181]
|
|
</pre>
|
|
<a name="english"></a><h4> <span class="mw-headline">english</span></h4>
|
|
<p>Converts C code into English sentences. Understands only C89 code.
|
|
</p>
|
|
<pre> Usage: english <C snippet>
|
|
</pre>
|
|
<pre> Examples:
|
|
<pragma_> english char (*a)[10]; char *b[10];
|
|
<candide> Let a be a pointer to an array of length 10 of type char. Let b be an array of length 10 of type pointer to char.
|
|
<pragma_> english for(;;);
|
|
<candide> Repeatedly compute nothing.
|
|
<pragma_> english typedef char Batman; char Bruce_Wayne; char superhero = (Batman) Bruce_Wayne;
|
|
<candide> Let Batman be another name for a character. Let Bruce_Wayne be a character. Let superhero be a character, with value being Bruce_Wayne cast to a Batman.
|
|
</pre>
|
|
<a name="expand"></a><h4> <span class="mw-headline">expand</span></h4>
|
|
<p>Expands macros in C code and displays the resulting code. Macros
|
|
must be terminated by a \n sequence. You may #include headers to expand
|
|
macros defined within.
|
|
</p>
|
|
<pre> Usage: expand <C snippet>
|
|
</pre>
|
|
<pre> Example:
|
|
<pragma_> expand #define WHILE while ( \n #define DO ) { \n #define WEND } \n int i = 5; WHILE --i DO puts("hi"); WEND
|
|
<candide> pragma_: int i = 5; while ( --i ) { puts("hi"); }
|
|
<pragma_> expand #include <stdlib.h> NULL
|
|
<candide> pragma_: ((void *)0)
|
|
</pre>
|
|
<a name="prec"></a><h4> <span class="mw-headline">prec</span></h4>
|
|
<a name="paren"></a><h4> <span class="mw-headline">paren</span></h4>
|
|
<p>Shows operator precedence in C99 expressions by adding parentheses.
|
|
</p>
|
|
<pre> Usage: prec <expression>
|
|
paren <expression>
|
|
</pre>
|
|
<pre> Examples:
|
|
<pragma_> prec *a++
|
|
<candide> pragma_: *(a++)
|
|
<pragma_> prec a = b & c
|
|
<candide> pragma_: a = (b & c)
|
|
<pragma_> prec token = strtok(s, d) != NULL
|
|
<candide> pragma_: token = (strtok(s, d) != NULL)
|
|
</pre>
|
|
<a name="faq"></a><h4> <span class="mw-headline">faq</span></h4>
|
|
<p>Displays questions from the <a href="http://http//www.eskimo.com/%7Escs/C-faq/top.html" class="external text" title="http://http://www.eskimo.com/~scs/C-faq/top.html" rel="nofollow">comp.lang.c faq</a>.
|
|
Some queries may return more than one result; if this happens, you may
|
|
use the 'match #' optional argument to specify the match you'd like to
|
|
view.
|
|
</p>
|
|
<pre> Usage: faq [match #] <search regex>
|
|
Examples:
|
|
<pragma_> faq cast malloc
|
|
<candide> 2 results, displaying #1: 7. Memory Allocation, 7.6 Why am
|
|
I getting ``warning: assignment of pointer from integer
|
|
lacks a cast<i> for calls to malloc? : </i>
|
|
<a href="http://www.eskimo.com/%7Escs/C-faq/q7.6.html" class="external free" title="http://www.eskimo.com/~scs/C-faq/q7.6.html" rel="nofollow">http://www.eskimo.com/~scs/C-faq/q7.6.html</a>
|
|
<pragma_> faq 2 cast malloc
|
|
<candide> 2 results, displaying #2: 7. Memory Allocation, 7.7 Why
|
|
does some code carefully cast the values returned by
|
|
malloc to the pointer type being allocated? :
|
|
<a href="http://www.eskimo.com/%7Escs/C-faq/q7.7.html" class="external free" title="http://www.eskimo.com/~scs/C-faq/q7.7.html" rel="nofollow">http://www.eskimo.com/~scs/C-faq/q7.7.html</a>
|
|
<pragma_> faq ^6.4
|
|
<candide> 6. Arrays and Pointers, 6.4 Why are array and pointer
|
|
declarations interchangeable as function formal
|
|
parameters? : <a href="http://www.eskimo.com/%7Escs/C-faq/q6.4.html" class="external free" title="http://www.eskimo.com/~scs/C-faq/q6.4.html" rel="nofollow">http://www.eskimo.com/~scs/C-faq/q6.4.html</a>
|
|
</pre>
|
|
<a name="c99std"></a><h4> <span class="mw-headline">c99std</span></h4>
|
|
<p>Searches ISO/IEC 9899:TC3 (WG14/N1256), also known as the C99 draft standard. <a href="http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf" class="external free" title="http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf" rel="nofollow">http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf</a>
|
|
</p>
|
|
<pre> Usage: c99std [-list] [-n#] [section] [search regex]
|
|
If specified, 'section' must be in the form of X.YpZ where X and Y are section/chapter and, optionally, pZ is paragraph.
|
|
To display a specific section and all its paragraphs, specify just the 'section' without pZ.
|
|
To display just a specific paragraph, specify the full 'section' identifier (X.YpZ).
|
|
You may use -n # to skip to the #th match.
|
|
To list only the section numbers containing 'search text', add -list.
|
|
If both 'section' and 'search regex' are specified, then the search space will be within the specified section identifier.
|
|
</pre>
|
|
<pre> Examples:
|
|
</pre>
|
|
<pre> < pragma_> c99std pointer value
|
|
< candide> Displaying #1 of 64 matches: 5.1.2.2.1p1: [Program startup] If they are declared, the parameters to the
|
|
main function shall obey the following constraints: -- The value of argc shall be nonnegative. -- argv[argc]
|
|
shall be a null pointer. -- If the value of argc is greater than zero, the array members argv[0] through
|
|
argv[argc-1] inclusive shall contain pointers to st... truncated; see <a href="http://codepad.org/f2DULaGQ" class="external free" title="http://codepad.org/f2DULaGQ" rel="nofollow">http://codepad.org/f2DULaGQ</a> for full text.
|
|
</pre>
|
|
<pre> < pragma_> c99std pointer value -list
|
|
< candide> Sections containing 'pointer value': 5.1.2.2.1p2, 5.1.2.3p9, 6.2.5p20, 6.2.5p27, 6.3.2.1p3, 6.3.2.1p4,
|
|
6.3.2.3p2, 6.3.2.3p6, 6.5.2.1p3, 6.5.2.2p5, 6.5.2.2p6, 6.5.2.4p1, 6.5.2.4p2, 6.5.3.1p1, 6.5.3.2p3, 6.5.3.2p4,
|
|
6.5.3.3p5, 6.5.3.4p5, 6.5.6p8, 6.5.6p9, 6.5.8p5, 6.5.15p6, 6.6p7, 6.6p9, 6.7.2.2p5, 6.7.2.3p7, 6.7.2.3p3,
|
|
6.7.5.1p3, 6.7.5.2p7, 7.1.1p1, 7.1.1p4, 7.1.4p1, 7... truncated; see <a href="http://codepad.org/qQlnJYJk" class="external free" title="http://codepad.org/qQlnJYJk" rel="nofollow">http://codepad.org/qQlnJYJk</a> for full text.
|
|
</pre>
|
|
<pre> < pragma_> Hmm, how about just section 6.3?
|
|
</pre>
|
|
<pre> < pragma_> c99std pointer value 6.3
|
|
< candide> Displaying #1 of 4 matches: 6.3.2.1p1: [Lvalues, arrays, and function designators] Except when it is the operand
|
|
of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression
|
|
that has type ``array of type is converted to an expression with type ``pointer to type that points to the
|
|
initial element of the array ob... truncated; see <a href="http://codepad.org/mf1RNnr2" class="external free" title="http://codepad.org/mf1RNnr2" rel="nofollow">http://codepad.org/mf1RNnr2</a> for full text.
|
|
</pre>
|
|
<pre> < pragma_> c99std pointer value 6.3 -list
|
|
< candide> Sections containing 'pointer value': 6.3.2.1p3, 6.3.2.1p4, 6.3.2.3p2, 6.3.2.3p6
|
|
</pre>
|
|
<pre> < pragma_> c99std pointer value 6.3 -n3
|
|
< candide> Displaying #3 of 4 matches: 6.3.2.3p1: [Pointers] For any qualifier q, a pointer to a non-q-qualified type may be
|
|
converted to a pointer to the q-qualified version of the type; the values stored in the original and converted
|
|
pointers shall compare equal.
|
|
</pre>
|
|
<a name="c11std"></a><h4> <span class="mw-headline">c11std</span></h4>
|
|
<p>Searches ISO/IEC 9811:201X (WG14/N1256), also known as the C11 draft standard. <a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf" class="external free" title="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf" rel="nofollow">http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf</a>
|
|
</p><p>Usage is identical to c99std.
|
|
</p>
|
|
<a name="man"></a><h4> <span class="mw-headline">man</span></h4>
|
|
<p>Displays manpage summaries and/or C related tidbits (headers,
|
|
prototypes, specifications), as well as a link to the FreeBSD manpage.
|
|
</p>
|
|
<pre>Usage: man [section] query
|
|
Samples:
|
|
<pragma_> man fork
|
|
<candide> Includes: sys/types.h, unistd.h - pid_t fork(void); - SVr4,
|
|
SVID, POSIX, X/OPEN, BSD - fork creates a child process that
|
|
differs from the parent process only in its PID and PPID, and
|
|
in the fact that resource utilizations are set to 0 -
|
|
<a href="http://www.iso-9899.info/man?fork" class="external free" title="http://www.iso-9899.info/man?fork" rel="nofollow">http://www.iso-9899.info/man?fork</a>
|
|
<pragma_> man atexit
|
|
<candide> Includes: stdlib.h - int atexit(void (*function)(void)); -
|
|
SVID 3, BSD 4.3, ISO 9899 - atexit () function registers the
|
|
given function to be called at normal program termination,
|
|
whether via exit(3) or via return from the program's main -
|
|
<a href="http://www.iso-9899.info/man?atexit" class="external free" title="http://www.iso-9899.info/man?atexit" rel="nofollow">http://www.iso-9899.info/man?atexit</a>
|
|
<pragma_> man getcwd
|
|
<candide> Includes: unistd.h - char *getcwd(char *buf, size_t size); -
|
|
POSIX.1 - getcwd () function copies an absolute pathname of
|
|
the current working directory to the array pointed to by buf,
|
|
which is of length size - <a href="http://www.iso-9899.info/man?getcwd" class="external free" title="http://www.iso-9899.info/man?getcwd" rel="nofollow">http://www.iso-9899.info/man?getcwd</a>
|
|
</pre>
|
|
<a name="google"></a><h4> <span class="mw-headline">google</span></h4>
|
|
<p>Displays google results for a query.
|
|
</p>
|
|
<pre>Usage: google [number of results] query
|
|
Samples:
|
|
<pragma_> google brian kernighan
|
|
<candide> brian kernighan (115,000): Brian Kernighan's Home Page:
|
|
(<a href="http://www.cs.princeton.edu/%7Ebwk/" class="external free" title="http://www.cs.princeton.edu/~bwk/" rel="nofollow">http://www.cs.princeton.edu/~bwk/</a>)
|
|
<pragma_> google 3 brian kernighan
|
|
<candide> brian kernighan (115,000): Brian Kernighan's Home Page:
|
|
(<a href="http://www.cs.princeton.edu/%7Ebwk/" class="external free" title="http://www.cs.princeton.edu/~bwk/" rel="nofollow">http://www.cs.princeton.edu/~bwk/</a>), An Interview with Brian
|
|
Kernighan: (<a href="http://www-2.cs.cmu.edu/%7Emihaib/kernighan-interview/" class="external free" title="http://www-2.cs.cmu.edu/~mihaib/kernighan-interview/" rel="nofollow">http://www-2.cs.cmu.edu/~mihaib/kernighan-interview/</a>),
|
|
Interview with Brian Kernighan | Linux Journal:
|
|
(<a href="http://www.linuxjournal.com/article.php?sid=7035" class="external free" title="http://www.linuxjournal.com/article.php?sid=7035" rel="nofollow">http://www.linuxjournal.com/article.php?sid=7035</a>), Brian W.
|
|
Kernighan: (<a href="http://www.lysator.liu.se/c/bwk/" class="external free" title="http://www.lysator.liu.se/c/bwk/" rel="nofollow">http://www.lysator.liu.se/c/bwk/</a>) ,Brian W.
|
|
Kernighan: Programming in C: A Tutorial:
|
|
(<a href="http://www.lysator.liu.se/c/bwk-tutor.html" class="external free" title="http://www.lysator.liu.se/c/bwk-tutor.html" rel="nofollow">http://www.lysator.liu.se/c/bwk-tutor.html</a>)
|
|
</pre>
|
|
<a name="define"></a><h4> <span class="mw-headline">define</span></h4>
|
|
<a name="dict"></a><h4> <span class="mw-headline">dict</span></h4>
|
|
<p>Displays dictionary defintions from <a href="http://dict.org/" class="external free" title="http://dict.org" rel="nofollow">http://dict.org</a> using DICT protocol.
|
|
</p><p>Databases for the -d option are listed here: <a href="http://www.iso-9899.info/candide/dict_databases.txt" class="external free" title="http://www.iso-9899.info/candide/dict_databases.txt" rel="nofollow">http://www.iso-9899.info/candide/dict_databases.txt</a>
|
|
-- Note that there may be several commands aliased to one of these
|
|
databases; for example, the `foldoc` command is an alias to `dict -d
|
|
foldoc`.
|
|
</p>
|
|
<pre> Usage: dict [-d database] [-n start from definition number] [-t first letter of word class type (n]oun, v]erb, etc)]
|
|
[-search <regex> for definitions matching <regex>] <word>
|
|
</pre>
|
|
<pre> Examples:
|
|
</pre>
|
|
<pre> <pragma_> dict hit
|
|
<candide> hit: n: 1) (baseball) a successful stroke in an athletic contest (especially in baseball);
|
|
"he came all the way around on Williams' hit", 2) the act of contacting one thing with another;
|
|
"repeated hitting raised a large bruise"; "after three misses she finally got a hit" [syn: hitting,
|
|
striking], 3) a conspicuous success; "that song was his first hit and marked the beginning of his
|
|
career"; "that new Broadway show is a real smasher"
|
|
</pre>
|
|
<pre> <pragma_> dict -n 4 hit
|
|
<candide> hit: n: 4) (physics) an brief event in which two or more bodies come together; "the collision of the
|
|
particles resulted in an exchange of energy and a change of direction" [syn: collision], 5) a dose
|
|
of a narcotic drug, 6) a murder carried out by an underworld syndicate; "it has all the earmarks of
|
|
a Mafia hit", 7) a connection made via the internet to another website; "WordNet gets many hits from
|
|
users worldwide"
|
|
</pre>
|
|
<pre> <pragma_> dict -t v hit
|
|
<candide> hit: v: 1) cause to move by striking; "hit a ball", 2) hit against; come into sudden contact with;
|
|
"The car hit a tree"; "He struck the table with his elbow" [syn: strike, impinge on, run into,
|
|
collide with] [ant: miss], 3) affect or afflict suddenly, usually adversely; "We were hit by really
|
|
bad weather"; "He was stricken with cancer when he was still a teenager"; "The earthquake struck at
|
|
midnight" [syn: strike], 4) deal a blow to
|
|
</pre>
|
|
<pre> <pragma_> dict -search ball hit
|
|
<candide> hit: n: 1) (baseball) a successful stroke in an athletic contest (especially in baseball); "he came all
|
|
the way around on Williams' hit", v: 1) cause to move by striking; "hit a ball"
|
|
</pre>
|
|
<pre> <pragma_> dict -d eng-fra hit
|
|
<candide> hit: 1) [hit] battre, frapper, heurter frapper, heurter atteindre, frapper, parvenir, saisir
|
|
</pre>
|
|
<a name="foldoc"></a><h4> <span class="mw-headline">foldoc</span></h4>
|
|
<p>This is just an alias for `dict -d foldoc`.
|
|
</p>
|
|
<a name="vera"></a><h4> <span class="mw-headline">vera</span></h4>
|
|
<p>This is just an alias for `dict -d vera`.
|
|
</p><p><br>
|
|
</p>
|
|
<a name="udict"></a><h4> <span class="mw-headline">udict</span></h4>
|
|
<p>Displays dictionary definitions from <a href="http://urbandictionary.com/" class="external free" title="http://urbandictionary.com" rel="nofollow">http://urbandictionary.com</a>.
|
|
</p>
|
|
<pre>Usage: udict query
|
|
</pre>
|
|
<a name="wdict"></a><h4> <span class="mw-headline">wdict</span></h4>
|
|
<p>Displays Wikipedia article abstracts (first paragraph). Note: case-sensitive and very picky.
|
|
</p>
|
|
<pre>Usage: wdict query
|
|
</pre>
|
|
<a name="acronym"></a><h4> <span class="mw-headline">acronym</span></h4>
|
|
<p>Displays expanded acronyms.
|
|
</p>
|
|
<pre>Usage: acronym query
|
|
Samples:
|
|
<pragma_> acronym posix
|
|
<candide> posix (3 entries): Portable Operating System for
|
|
Information Exchange, Portable Operating System Interface
|
|
Extensions (IBM), Portable Operating System Interface for
|
|
Unix
|
|
<pragma_> acronym linux
|
|
<candide> linux (1 entries): Linux Is Not UniX
|
|
</pre>
|
|
<a name="math"></a><h4> <span class="mw-headline">math</span></h4>
|
|
<p>Evaluate calculations.
|
|
</p>
|
|
<pre>Usage: math <expression>
|
|
Example:
|
|
<pragma_> math 5 + 5
|
|
<candide> 5 + 5 = 10
|
|
</pre>
|
|
<a name="compliment"></a><h4> <span class="mw-headline">compliment</span></h4>
|
|
<p>Displays a random Markov-chain compliment/insult.
|
|
</p>
|
|
<pre>Usage: compliment [nick]
|
|
</pre>
|
|
<a name="insult"></a><h4> <span class="mw-headline">insult</span></h4>
|
|
<p>Displays a random insult.
|
|
</p>
|
|
<pre>Usage: insult [nick]
|
|
</pre>
|
|
<a name="excuse"></a><h4> <span class="mw-headline">excuse</span></h4>
|
|
<p>Displays a random excuse.
|
|
</p>
|
|
<pre>Usage: excuse [nick]
|
|
</pre>
|
|
<a name="horoscope"></a><h4> <span class="mw-headline">horoscope</span></h4>
|
|
<p>Displays a horoscope for a Zodiac sign (google this if you don't know your sign).
|
|
</p>
|
|
<pre>Usage: horoscope <sign>
|
|
</pre>
|
|
<a name="horrorscope"></a><h4> <span class="mw-headline">horrorscope</span></h4>
|
|
<p>Displays a horrorscope for a Zodiac sign.
|
|
</p>
|
|
<pre>Usage: horrorscope <sign>
|
|
</pre>
|
|
<a name="quote"></a><h4> <span class="mw-headline">quote</span></h4>
|
|
<p>Displays quotes from a popular quotation database. If you use
|
|
`quote` without arguments, it returns a random quote; if you use it
|
|
with an argument, it searches for quotes containing that text; if you
|
|
add --author <name> at the end, it searches for a quote by
|
|
that author; if you specify text and --author, it searches for quotes by
|
|
that author, containing that text.
|
|
</p>
|
|
<pre>Usage: quote [search text] [--author <author name>]
|
|
Samples:
|
|
<pragma_> quote
|
|
<candide> "Each success only buys an admission ticket to a more difficult problem." -- Henry Kissinger (1923 - ).
|
|
<pragma_> quote --author lao tzu
|
|
<candide> 41 matching quotes found. "A journey of a thousand miles begins with a single step." -- Lao-tzu (604 BC - 531 BC).
|
|
<pragma_> quote butterfly
|
|
<candide> 11 matching quotes found. "A chinese philosopher once had a dream that he was a butterfly. From that day on, he
|
|
was never quite certain that he was not a butterfly, dreaming that he was a man." -- Unknown.
|
|
</pre>
|
|
<a name="Informative"></a><h3> <span class="mw-headline">Informative</span></h3>
|
|
<a name="list"></a><h4> <span class="mw-headline">list</span></h4>
|
|
<p>Lists information about specified argument
|
|
</p>
|
|
<pre>Usage: .list <modules|factoids|commands|admins>
|
|
</pre>
|
|
<a name="info"></a><h4> <span class="mw-headline">info</span></h4>
|
|
<p>Shows detailed information about a module or a factoid
|
|
</p>
|
|
<pre> Usage: .info <module|factoid>
|
|
</pre>
|
|
<a name="version"></a><h4> <span class="mw-headline">version</span></h4>
|
|
<p>Shows version information
|
|
</p>
|
|
<a name="source"></a><h4> <span class="mw-headline">source</span></h4>
|
|
<p>Shows candide's source information.
|
|
</p>
|
|
<a name="help"></a><h4> <span class="mw-headline">help</span></h4>
|
|
<p>Shows link to this page.
|
|
</p>
|
|
<a name="Administrative"></a><h3> <span class="mw-headline">Administrative</span></h3>
|
|
<a name="login"></a><h4> <span class="mw-headline">login</span></h4>
|
|
<p>You cannot use any of the admin commands unless you login first
|
|
</p>
|
|
<pre> Usage: login <password>
|
|
</pre>
|
|
<p>Note that login requires that your nick and hostmask match candide's records.
|
|
</p>
|
|
<a name="logout"></a><h4> <span class="mw-headline">logout</span></h4>
|
|
<p>Logs out of candide.
|
|
</p>
|
|
<a name="ignore"></a><h4> <span class="mw-headline">ignore</span></h4>
|
|
<p>Ignore a user
|
|
</p>
|
|
<pre>Usage: ignore <hostmask> [channel] [timeout]
|
|
</pre>
|
|
<a name="unignore"></a><h4> <span class="mw-headline">unignore</span></h4>
|
|
<p>Unignores a user
|
|
</p>
|
|
<pre>Usage: unignore <hostmask> [channel]
|
|
</pre>
|
|
<a name="ban"></a><h4> <span class="mw-headline">ban</span></h4>
|
|
<p>Bans a user
|
|
</p>
|
|
<pre> Usage: ban <hostmask> [timeout seconds]
|
|
</pre>
|
|
<p>If timeout is omitted, candide will ban the user for one hour. Timeout is in seconds.
|
|
</p>
|
|
<a name="unban"></a><h4> <span class="mw-headline">unban</span></h4>
|
|
<p>Unbans a user
|
|
</p>
|
|
<pre> Usage:
|
|
unban <hostmask>
|
|
</pre>
|
|
<p>Note that <hostmask> must EXACTLY match the hostmask in the ban list for the channel.
|
|
</p>
|
|
<a name="kick"></a><h4> <span class="mw-headline">kick</span></h4>
|
|
<p>Removes a nick from the channel.
|
|
</p>
|
|
<pre> Usage from channel: kick <nick> <reason>
|
|
From private message: kick <channel> <nick> <reason>
|
|
</pre>
|
|
<a name="export"></a><h4> <span class="mw-headline">export</span></h4>
|
|
<p>exports specified list to web page
|
|
</p>
|
|
<pre>Usage: export <commands|factoids|admins|channels>
|
|
</pre>
|
|
<a name=".23.23c"></a><h3> <span class="mw-headline">##c</span></h3>
|
|
<a name="C-Aphorisms"></a><h4> <span class="mw-headline">C-Aphorisms</span></h4>
|
|
<p>The C Aphorisms can be triggered with c<n> where <n> is
|
|
an integer representing one of the aphorisms. For example, to quote C
|
|
Aphorism 1, use `c1`.
|
|
</p>
|
|
<ol><li> The questioner's first description of the problem/question will be misleading.
|
|
</li><li> All examples given by the questioner will be incomplete,
|
|
misleading, broken, wrong, and/or not representative of the actual
|
|
question.
|
|
</li><li> The questioner will not read and apply the answers they are given but will instead continue to practice c1 and c2.
|
|
</li><li> The ignorant will continually mis-educate the questioner.
|
|
</li><li> When given a choice of solutions, the questioner will always choose the wrong one.
|
|
</li><li> The questioner will always find a reason to say, "It doesn't work."
|
|
</li><li> The questioner will paste code and say "I have a problem" or
|
|
"It doesn't work" without any further information or description of the
|
|
problem.
|
|
</li><li> The more beginner they are, the more likely they are to be overcomplicating it.
|
|
</li><li> The questioner will always have some excuse for doing it wrong.
|
|
</li><li> The newbie will not accept the answer you give, no matter how right it is.
|
|
</li><li> <skipped due to existing c11 factoid>
|
|
</li><li> The newbie will think they are smarter than they really are.
|
|
</li><li> The newbie will fail to recognize undefined behavior, and will
|
|
wrongly think that their program is correct because it appears to work.
|
|
</li></ol>
|
|
<a name="Flood_control"></a><h2> <span class="mw-headline">Flood control</span></h2>
|
|
<p>Candide can monitor the channel for excessive rapid traffic
|
|
originating from an individual and automatically ban the offender for a
|
|
certain length of time.
|
|
</p>
|
|
<a name="Message_flood"></a><h3> <span class="mw-headline">Message flood</span></h3>
|
|
<p>If four (4) or more messages are sent within ten (10) seconds, the
|
|
flood control is triggered. The offender will be muted for 30 seconds
|
|
for the first offense. Each additional offense will result in the
|
|
offender being muted for a much longer period. For example, the first
|
|
offense will result in 30 seconds, the 2nd offense will be 5 minutes,
|
|
the 3rd will be 1 hour, and so on.
|
|
</p>
|
|
<a name="Join_flood"></a><h3> <span class="mw-headline">Join flood</span></h3>
|
|
<p>If four (4) or more JOINs are observed within thirty (30) minutes <b>without any messages in between joins</b>, the offender will be forwarded to another channel for a limited time: 2^(number_of_offenses + 2) hours.
|
|
</p><p>In addition to private instructions from candide, this channel
|
|
will have a /topic and ChanServ on-join message with instructions
|
|
explaining to the offender how to remove the forwarding. The
|
|
instructions are to message candide with: unbanme <channel>.
|
|
</p><p>(Any messages sent to the public channel by the user at any time
|
|
will reset their JOIN counter back to zero. The unbanme command can
|
|
only be used for the first two offenses -- the offense counter is
|
|
decremented once every 24 hours.)
|
|
</p>
|
|
<a name="Enter_key_abuse"></a><h3> <span class="mw-headline">Enter key abuse</span></h3>
|
|
<p>If four (4) consecutive messages are sent with ten (10) seconds or
|
|
less between individual messages and without another person speaking, an
|
|
enter-key-abuse counter is incremented. This counter will then
|
|
continue to be incremented every two (2) consecutive messages with ten
|
|
(10) seconds or less in between until another person speaks or more than
|
|
ten (10) seconds have elapsed, whereupon it returns to requiring four
|
|
(4) consecutive messages. When this counter reaches three (3) or
|
|
greater, the offender will be muted using the same timeout rules as
|
|
message flooding. This counter is automatically decremented once per
|
|
hour.
|
|
</p>
|
|
<a name="Notification_message"></a><h3> <span class="mw-headline">Notification message</span></h3>
|
|
<p>Candide will send the following message to the offender each offense.
|
|
</p>
|
|
<a name="Message_flooding"></a><h4> <span class="mw-headline">Message flooding</span></h4>
|
|
<p>"You have been muted due to flooding. Please use a web paste service such as <a href="http://codepad.org/" class="external free" title="http://codepad.org" rel="nofollow">http://codepad.org</a> for lengthy pastes. You will be allowed to speak again in $timeout."
|
|
</p>
|
|
<a name="Join_flooding"></a><h4> <span class="mw-headline">Join flooding</span></h4>
|
|
<p>"You have been banned from $channel due to join flooding. If your
|
|
connection issues have been resolved, or this was an accident, you may
|
|
request an unban at any time by responding to this message with: unbanme
|
|
$channel, otherwise you will be automatically unbanned in $timeout."
|
|
</p>
|
|
<a name="Enter_key_abuse_2"></a><h4> <span class="mw-headline">Enter key abuse</span></h4>
|
|
<p>"You have been muted due to abusing the enter key. Please do not
|
|
split your sentences over multiple messages. You will be allowed to
|
|
speak again in $timeout."
|
|
</p>
|
|
<a name="Opping.2FDeopping"></a><h3> <span class="mw-headline">Opping/Deopping</span></h3>
|
|
<p>ChanServ will automagically op and deop Candide when necessary.
|
|
Candide will wait until about 5 minutes have elapsed before requesting a
|
|
deop from ChanServ.
|
|
</p>
|
|
<hr>
|
|
<p><a href="http://www.iso-9899.info/wiki/Category_IRC" title="Category IRC">Category IRC</a>
|
|
</p>
|
|
<!-- Saved in parser cache with key wikidb:pcache:idhash:935-0!1!0!!en!2!edit=0 and timestamp 20140414194808 -->
|
|
<div class="printfooter">
|
|
Retrieved from "<a href="http://www.iso-9899.info/wiki/Candide">http://www.iso-9899.info/wiki/Candide</a>"</div>
|
|
<!-- end content -->
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="column-one">
|
|
<div id="p-cactions" class="portlet">
|
|
<h5>Views</h5>
|
|
<div class="pBody">
|
|
<ul>
|
|
<li id="ca-nstab-main" class="selected"><a href="http://www.iso-9899.info/wiki/Candide" title="View the content page [alt-shift-c]" accesskey="c">Article</a></li>
|
|
<li id="ca-talk"><a href="http://www.iso-9899.info/wiki/Talk:Candide" title="Discussion about the content page [alt-shift-t]" accesskey="t">Discussion</a></li>
|
|
<li id="ca-viewsource"><a href="http://www.iso-9899.info/wiki?title=Candide&action=edit" title="This page is protected. You can view its source. [alt-shift-e]" accesskey="e">View source</a></li>
|
|
<li id="ca-history"><a href="http://www.iso-9899.info/wiki?title=Candide&action=history" title="Past versions of this page. [alt-shift-h]" accesskey="h">History</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="portlet" id="p-personal">
|
|
<h5>Personal tools</h5>
|
|
<div class="pBody">
|
|
<ul>
|
|
<li id="pt-anonuserpage"><a href="http://www.iso-9899.info/wiki/User:71.92.165.183" title="The user page for the ip you're editing as [alt-shift-.]" accesskey="." class="new">71.92.165.183</a></li>
|
|
<li id="pt-anontalk"><a href="http://www.iso-9899.info/wiki/User_talk:71.92.165.183" title="Discussion about edits from this ip address [alt-shift-n]" accesskey="n" class="new">Talk for this IP</a></li>
|
|
<li id="pt-anonlogin"><a href="http://www.iso-9899.info/wiki?title=Special:Userlogin&returnto=Candide" title="You are encouraged to log in, it is not mandatory however. [alt-shift-o]" accesskey="o">Log in</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="portlet" id="p-logo">
|
|
<a style="background-image: url(/wiki.png);" href="http://www.iso-9899.info/wiki/Main_Page" title="Visit the Main Page [alt-shift-z]" accesskey="z"></a>
|
|
</div>
|
|
<script type="text/javascript"> if (window.isMSIE55) fixalpha(); </script>
|
|
<div class="portlet" id="p-navigation">
|
|
<h5>Navigation</h5>
|
|
<div class="pBody">
|
|
<ul>
|
|
<li id="n-mainpage"><a href="http://www.iso-9899.info/wiki/Main_Page" title="Visit the Main Page [alt-shift-z]" accesskey="z">Main Page</a></li>
|
|
<li id="n-portal"><a href="http://www.iso-9899.info/wiki/C:Community_Portal" title="About the project, what you can do, where to find things">Community portal</a></li>
|
|
<li id="n-currentevents"><a href="http://www.iso-9899.info/wiki/Current_events" title="Find background information on current events">Current events</a></li>
|
|
<li id="n-recentchanges"><a href="http://www.iso-9899.info/wiki/Special:Recentchanges" title="The list of recent changes in the wiki. [alt-shift-r]" accesskey="r">Recent changes</a></li>
|
|
<li id="n-randompage"><a href="http://www.iso-9899.info/wiki/Special:Random" title="Load a random page [alt-shift-x]" accesskey="x">Random page</a></li>
|
|
<li id="n-help"><a href="http://www.iso-9899.info/wiki/Help:Contents" title="The place to find out.">Help</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div id="p-search" class="portlet">
|
|
<h5><label for="searchInput">Search</label></h5>
|
|
<div id="searchBody" class="pBody">
|
|
<form action="/wiki/Special:Search" id="searchform"><div>
|
|
<input id="searchInput" name="search" title="Search C [alt-shift-f]" accesskey="f" type="text">
|
|
<input name="go" class="searchButton" id="searchGoButton" value="Go" type="submit">
|
|
<input name="fulltext" class="searchButton" id="mw-searchButton" value="Search" type="submit">
|
|
</div></form>
|
|
</div>
|
|
</div>
|
|
<div class="portlet" id="p-tb">
|
|
<h5>Toolbox</h5>
|
|
<div class="pBody">
|
|
<ul>
|
|
<li id="t-whatlinkshere"><a href="http://www.iso-9899.info/wiki/Special:Whatlinkshere/Candide" title="List of all wiki pages that link here [alt-shift-j]" accesskey="j">What links here</a></li>
|
|
<li id="t-recentchangeslinked"><a href="http://www.iso-9899.info/wiki/Special:Recentchangeslinked/Candide" title="Recent changes in pages linked from this page [alt-shift-k]" accesskey="k">Related changes</a></li>
|
|
<li id="t-specialpages"><a href="http://www.iso-9899.info/wiki/Special:Specialpages" title="List of all special pages [alt-shift-q]" accesskey="q">Special pages</a></li>
|
|
<li id="t-print"><a href="http://www.iso-9899.info/wiki?title=Candide&printable=yes" title="Printable version of this page [alt-shift-p]" accesskey="p">Printable version</a></li> <li id="t-permalink"><a href="http://www.iso-9899.info/wiki?title=Candide&oldid=8969" title="Permanent link to this version of the page">Permanent link</a></li> </ul>
|
|
</div>
|
|
</div>
|
|
</div><!-- end of the left (by default at least) column -->
|
|
<div class="visualClear"></div>
|
|
<div id="footer">
|
|
<div id="f-poweredbyico"><a href="http://www.mediawiki.org/"><img src="Candide%20-%20C_files/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki"></a></div>
|
|
<ul id="f-list">
|
|
<li id="lastmod"> This page was last modified 19:38, 14 April 2014.</li>
|
|
<li id="viewcount">This page has been accessed 30,092 times.</li>
|
|
<li id="privacy"><a href="http://www.iso-9899.info/wiki/C:Privacy_policy" title="C:Privacy policy">Privacy policy</a></li>
|
|
<li id="about"><a href="http://www.iso-9899.info/wiki/C:About" title="C:About">About C</a></li>
|
|
<li id="disclaimer"><a href="http://www.iso-9899.info/wiki/C:General_disclaimer" title="C:General disclaimer">Disclaimers</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
|
|
<script type="text/javascript">if (window.runOnloadHook) runOnloadHook();</script>
|
|
</div>
|
|
<!-- Served in 0.399 secs. -->
|
|
</body></html>
|