Um die Funktion des Programmes am Bildschirm darzustellen, wird showbinaer verwendet. Die Funktion showbinaer verwendet Funktionen der unter Turbo-C beliebten conio-Bibliothek fuer die Ausgabe auf den Textbildschirm. Eine Portierung dieser Funktionen auf die NT-Konsole ist Teil von lcc-win32.


/* loes8-7.c
   Loesung der Aufgabe 8.7 mit Zusatzfunktionen (Ausgabe)
*/


#include <stdio.h>
#include <windows.h>  /* fuer WIN-API Funktion sleep */

void showbinaer(void *p, int size, int y0, int init);

/*
Die Funktion circular_shift_right verschiebt ein Bitmuster um n Position nach rechts.
Das niederwertigste Bit wird als hoechstwertiges Bit wieder nachgeschoben
*/
unsigned int circular_shift_right (unsigned int a, int n)
{
  int bit0;
  int i;
  int bytes;

  bytes = sizeof(unsigned int);

  for (i = 0; i < n; i++) {
    bit0 = a % 2;   /* Wert des Bits 0 */
    a >>= 1;
    a |= bit0 << 8*bytes - 1;
  }
   return a;
}

int main(void)
{
  void *p;
  unsigned int z;
  int i;

  p = (void *) &z;

  z = 20456;  /* Bitmuster einstellen */
  showbinaer(p, sizeof(int), 4, 1);

  for (i = 0; i < 8*sizeof(int); i++) {
    z = circular_shift_right(z, 1);
    showbinaer(p, sizeof(int), 4, 0);
    sleep(500);
  }


  return 0;
}