<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Thanks everyone for your help with this.  The following code
    replaces the ugly use of the process dictionary with a simple
    process to increment or decrement the buffer index as needed.<br>
    <br>
    <div style="color: #ffffff;background-color: #002451;font-family: Consolas, 'Courier New', monospace;font-weight: normal;font-size: 16px;line-height: 22px;white-space: pre;"><div><span style="color: #7285b7;">%%% --------------------------------------------------------------------------------------------------------------------</span></div><div><span style="color: #7285b7;">%%%</span></div><div><span style="color: #7285b7;">%%% Fun     : getc</span></div><div><span style="color: #7285b7;">%%% Purpose : Read or put back the next character from/to the specified InputBuffer and return its integer value or eof</span></div><div><span style="color: #7285b7;">%%% Created : 02 January 2019</span></div><div><span style="color: #7285b7;">%%%</span></div><div><span style="color: #7285b7;">%%% Notes   : 1) This block of code includes startiLoop, iLoop, and stopiLoop which handle the Ibuffer index increments</span></div><div><span style="color: #7285b7;">%%%              and decrements.</span></div><div><span style="color: #7285b7;">%%%</span></div><div><span style="color: #7285b7;">%%% --------------------------------------------------------------------------------------------------------------------</span></div>
<div><span style="color: #bbdaff;">startiLoop</span><span style="color: #ffffff;">()   </span><span style="color: #99ffff;">-></span><span style="color: #ffffff;"> </span><span style="color: #ff9da4;">Pid</span><span style="color: #ffffff;"> </span><span style="color: #99ffff;">=</span><span style="color: #ffffff;"> </span><span style="color: #bbdaff;">spawn(</span><span style="color: #ebbbff;">fun</span><span style="color: #bbdaff;">() -> iLoop(</span><span style="color: #ffc58f;">0</span><span style="color: #bbdaff;">) </span><span style="color: #ebbbff;">end</span><span style="color: #bbdaff;">)</span><span style="color: #ffffff;">, </span><span style="color: #ff9da4;">Pid</span><span style="color: #ffffff;">. </span><span style="color: #7285b7;">% the pid is saved in the file record (see stddef.hrl)</span></div><div><span style="color: #bbdaff;">stopiLoop</span><span style="color: #ffffff;">(</span><span style="color: #ff9da4;">Pid</span><span style="color: #ffffff;">) </span><span style="color: #99ffff;">-></span><span style="color: #ffffff;"> </span><span style="color: #ff9da4;">Pid</span><span style="color: #ffffff;"> </span><span style="color: #99ffff;">!</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">stopiLoop</span><span style="color: #ffffff;">, </span><span style="color: #d1f1a9;">ok</span><span style="color: #ffffff;">.                     </span><span style="color: #7285b7;">% not used as yet</span></div>
<div><span style="color: #bbdaff;">iLoop</span><span style="color: #ffffff;">(</span><span style="color: #ff9da4;">I</span><span style="color: #ffffff;">) </span><span style="color: #99ffff;">-></span></div><div><span style="color: #ffffff;">    </span><span style="color: #ebbbff;">receive</span></div><div><span style="color: #ffffff;">        {</span><span style="color: #d1f1a9;">incI</span><span style="color: #ffffff;">, </span><span style="color: #ff9da4;">GetcPid</span><span style="color: #ffffff;">} -> </span><span style="color: #ff9da4;">GetcPid</span><span style="color: #ffffff;"> </span><span style="color: #99ffff;">!</span><span style="color: #ffffff;"> {</span><span style="color: #bbdaff;">self()</span><span style="color: #ffffff;">, </span><span style="color: #ff9da4;">I</span><span style="color: #ffffff;"> </span><span style="color: #99ffff;">+</span><span style="color: #ffffff;"> </span><span style="color: #ffc58f;">1</span><span style="color: #ffffff;">}, </span><span style="color: #bbdaff;">iLoop(</span><span style="color: #ff9da4;">I</span><span style="color: #bbdaff;"> </span><span style="color: #99ffff;">+</span><span style="color: #bbdaff;"> </span><span style="color: #ffc58f;">1</span><span style="color: #bbdaff;">)</span><span style="color: #ffffff;">;</span></div><div><span style="color: #ffffff;">        {</span><span style="color: #d1f1a9;">decI</span><span style="color: #ffffff;">, </span><span style="color: #ff9da4;">GetcPid</span><span style="color: #ffffff;">} -> </span><span style="color: #ff9da4;">GetcPid</span><span style="color: #ffffff;"> </span><span style="color: #99ffff;">!</span><span style="color: #ffffff;"> {</span><span style="color: #bbdaff;">self()</span><span style="color: #ffffff;">, </span><span style="color: #ff9da4;">I</span><span style="color: #ffffff;"> </span><span style="color: #99ffff;">+</span><span style="color: #ffffff;"> </span><span style="color: #ffc58f;">1</span><span style="color: #ffffff;">}, </span><span style="color: #bbdaff;">iLoop(</span><span style="color: #ff9da4;">I</span><span style="color: #bbdaff;"> </span><span style="color: #99ffff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ffc58f;">1</span><span style="color: #bbdaff;">)</span><span style="color: #ffffff;">;</span></div><div><span style="color: #ffffff;">        </span><span style="color: #d1f1a9;">stopiLoop</span><span style="color: #ffffff;">       -> </span><span style="color: #bbdaff;">exit(</span><span style="color: #d1f1a9;">normal</span><span style="color: #bbdaff;">)</span></div><div><span style="color: #ffffff;">    </span><span style="color: #ebbbff;">end</span><span style="color: #ffffff;">.</span></div>
<div><span style="color: #bbdaff;">getc</span><span style="color: #ffffff;">(</span><span style="color: #ff9da4;">IBuffer</span><span style="color: #ffffff;">, </span><span style="color: #ff9da4;">Mode</span><span style="color: #ffffff;">) </span><span style="color: #99ffff;">-></span></div>
<div><span style="color: #ffffff;">    </span><span style="color: #ff9da4;">ILoopPid</span><span style="color: #ffffff;"> </span><span style="color: #99ffff;">=</span><span style="color: #ffffff;"> </span><span style="color: #ff9da4;">IBuffer</span><span style="color: #99ffff;">#</span><span style="color: #ffeead;">file</span><span style="color: #ffffff;">.</span><span style="color: #ff9da4;">pid</span><span style="color: #ffffff;">,</span></div>
<div><span style="color: #ffffff;">    </span><span style="color: #ebbbff;">case</span><span style="color: #ffffff;"> </span><span style="color: #ff9da4;">Mode</span><span style="color: #ffffff;"> </span><span style="color: #ebbbff;">of</span></div><div><span style="color: #ffffff;">        </span><span style="color: #99ffff;">?</span><span style="color: #bbdaff;">READMODE</span><span style="color: #ffffff;">   -></span></div><div><span style="color: #ffffff;">            </span><span style="color: #ff9da4;">ILoopPid</span><span style="color: #ffffff;"> </span><span style="color: #99ffff;">!</span><span style="color: #ffffff;"> {</span><span style="color: #d1f1a9;">incI</span><span style="color: #ffffff;">, </span><span style="color: #bbdaff;">self()</span><span style="color: #ffffff;">}, </span></div><div><span style="color: #ffffff;">            </span><span style="color: #ebbbff;">receive</span></div><div><span style="color: #ffffff;">                {</span><span style="color: #ff9da4;">ILoopPid</span><span style="color: #ffffff;">, </span><span style="color: #ff9da4;">I</span><span style="color: #ffffff;">} -> </span><span style="color: #ff9da4;">I</span><span style="color: #ffffff;"> </span></div><div><span style="color: #ffffff;">            </span><span style="color: #ebbbff;">end</span><span style="color: #ffffff;">,</span></div><div><span style="color: #ffffff;">            </span><span style="color: #ebbbff;">case</span><span style="color: #ffffff;"> </span><span style="color: #ff9da4;">I</span><span style="color: #ffffff;"> </span><span style="color: #99ffff;">></span><span style="color: #ffffff;"> </span><span style="color: #ff9da4;">IBuffer</span><span style="color: #99ffff;">#</span><span style="color: #ffeead;">file</span><span style="color: #ffffff;">.</span><span style="color: #ff9da4;">size</span><span style="color: #ffffff;"> </span><span style="color: #ebbbff;">of</span></div><div><span style="color: #ffffff;">                </span><span style="color: #d1f1a9;">true</span><span style="color: #ffffff;">  -> </span><span style="color: #d1f1a9;">eof</span><span style="color: #ffffff;">;</span></div><div><span style="color: #ffffff;">                </span><span style="color: #d1f1a9;">false</span><span style="color: #ffffff;"> -> </span><span style="color: #ffeead;">lists</span><span style="color: #bbdaff;">:nth(</span><span style="color: #ff9da4;">I</span><span style="color: #bbdaff;">, </span><span style="color: #ff9da4;">IBuffer</span><span style="color: #99ffff;">#</span><span style="color: #ffeead;">file</span><span style="color: #bbdaff;">.</span><span style="color: #ff9da4;">buffer</span><span style="color: #bbdaff;">)</span></div><div><span style="color: #ffffff;">            </span><span style="color: #ebbbff;">end</span><span style="color: #ffffff;">;</span></div><div><span style="color: #ffffff;">        </span><span style="color: #99ffff;">?</span><span style="color: #bbdaff;">PUTBAKMODE</span><span style="color: #ffffff;"> -> </span><span style="color: #ff9da4;">ILoopPid</span><span style="color: #ffffff;"> </span><span style="color: #99ffff;">!</span><span style="color: #ffffff;"> {</span><span style="color: #d1f1a9;">decI</span><span style="color: #ffffff;">, </span><span style="color: #bbdaff;">self()</span><span style="color: #ffffff;">};</span></div><div><span style="color: #ffffff;">        </span><span style="color: #ff9da4;">_</span><span style="color: #ffffff;">           -> </span><span style="color: #bbdaff;">fatalError(</span><span style="color: #d1f1a9;">"getc: illegal mode"</span><span style="color: #bbdaff;">, </span><span style="color: #d1f1a9;">""</span><span style="color: #bbdaff;">)</span></div><div><span style="color: #ffffff;">    </span><span style="color: #ebbbff;">end</span><span style="color: #ffffff;">.                    
</span></div></div>
  </body>
</html>