<commit_before>XMMC-cogs-demo
==============
This an example of an application architecture that has 1 XMMC process that handles human interaction and 3 independent processes running on 3 separate cogs. The xmmc process is a simple command processor.  It can start, stop or dispaly status for any of three cogs.  It supports the following commands:
* startA - load cogA code into a cog and start it
* startB - load cogB code into a cog and start it
* startC - load cogC code into a cog and start it
* stopA  - stop the cog running cogA code
* stopB  - stop the cog running cogB code
* stopC  - stop the cog running cogC code
* queryA - set flag telling the cogA code to increment query counter for the cog
* queryB - set flag telling the cogB code to increment query counter for the cog
* queryC - set flag telling the cogC code to increment query counter for the cog
* status - display the status of all cogs and query counters
* exit   - terminate application

The code loaded in to the cogs zeros the cog query counter then loops, checking its control block for a request to increment the query counter for the cog.  If it get one, it resets the flag then increments the query counter in its control block. 

<commit_msg>cosmetic edits<commit_after>XMMC-cogs-demo
==============
This an example of an application architecture that has 1 XMMC process that handles human interaction and 3 independent processes running on 3 separate cogs. The code was tested on a Parallax C3.  

The xmmc process (main) is a simple command processor.  It can start, stop or display status of code running on any of three cogs (cogA, cogB, cogC).  It supports the following commands:
* startA - load cogA code into a cog and start it
* startB - load cogB code into a cog and start it
* startC - load cogC code into a cog and start it
* stopA  - stop the cog running cogA code
* stopB  - stop the cog running cogB code
* stopC  - stop the cog running cogC code
* queryA - set flag telling the cogA code to increment query counter for the cog
* queryB - set flag telling the cogB code to increment query counter for the cog
* queryC - set flag telling the cogC code to increment query counter for the cog
* status - display the status of all cogs and query counters
* exit   - terminate application

The code running on each cog is identical, however each cog has its own control block.  All communication with the cog is accomplished through the control block.  When a cog starts up it zeros the cog query counter and query flag both of which are located in shared memory (the cogs control block).  It then loops, checking its control block for a request to increment the query counter.  If it get one, it resets the flag then increments the query counter. Locks are not used to keep it simple.


{'fraction_non_alphanumeric': 0.041021950341849585, 'fraction_numerical': 0.0025188916876574307, 'mean_word_length': 3.793103448275862, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2575128', 'n_tokens_mistral': 751, 'n_tokens_neox': 731, 'n_words': 465}