
#include <stdlib.h>
#include <stdio.h>

#define X

enum {
    MAX = 0x40
};

typedef unsigned char uchar;

uchar dec2[] =      
                    X
                    X
                 X X X X
                   X X
                  X   X                 
                   "*"
                  ">>>"
                 ">>>O>"
                ">O<O>o@"
               "O>o>o>>O@"
              ">>@<O>o<@>>"
             "@O>o@O<o<@<<@"
            "O<<<o>>>@O<<<o<"
           "o<O<@>>>O>>>o>@>>"
          ">>>O>o@O<<o@<O>o@>>"
         "O<<<<o@O<<<<<o>o>>@O<"
        "o<<O@>>>>>O<<<<o@O<o@><"
       "<<<<<<<@>O<o>>>@>O>>>>>>o"
      ">@O>>o<@O>>o@<O>>>o<o>>@O<<"
     "o>>>>>@<<O>o<o>>@>>>>O>o@<O>>"
    "o>>@O<<<<o@O>>o><><<>><<>>><><@"
                   ;;;
                   ;;;
                   ;;;

int main(void)
{
    uchar reg[MAX] = {0};
    uchar *prg = dec2;
    uchar *p = reg;
    
    while (*prg) {
        if (p < reg || p >= reg + MAX) {
            fprintf(stderr, "Bad address.\n");
            exit(1);
        }
    
        switch (*prg) {
        case 'O':   p++;                    break;
        case 'o':   p--;                    break;
        case '>':   (*p)++;                 break;
        case '<':   (*p)--;                 break;
        case '@':   printf("%d\n", *p);     break;
        }

        prg++;
    }
    
    return 0;
}
