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

unsigned char UniPlus[]=//  01234567//  01234567//  01234567//  01234567
                       {  0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F, 0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F,
                          0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F, 0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F,
                          0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F, 0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F,
                          0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F, 0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F,
                          0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F, 0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F,
                          0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F, 0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F,
                          0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F, 0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F,
                          0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F, 0xF0,0xF0,0xF0,0xF0, 0x0F,0x0F,0x0F,0x0F };

unsigned char IObrd[]=
          {0xFF,0xFF,0xFF,0x3F,0x03,0xFF,0x00,0xFF,
           0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xFF,0xE4,
           0xFF,0xC0,0x70,0x2F,0xF9,0x50,0x66,0x9E,
           0xC0,0x01,0x80,0xF7,0x03,0x79,0x56,0x06,
           0x74,0xFE,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,
           0xFF,0xFF,0x3F,0x01,0xAA,0x60,0xAA,0xAF,
           0xFF,0xC0,0x03,0x07,0xC4,0xFF,0xE0,0x55,
           0x55,0x50,0xF1,0xFF,0xFF,0xF8,0xFF,0xFF};


unsigned char CPUbrd[]=
          {0xFF,0xFF,0xFF,0x3F,0x03,0xFF,0x00,0xFF,
           0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xFF,0xC4,
           0xFF,0xC0,0x79,0xF2,0x40,0xF9,0x38,0xE0,
           0xBF,0xE0,0xEF,0xF0,0x71,0x38,0x01,0x80,
           0x79,0xFC,0x03,0xC0,0xFF,0xFF,0xFF,0xFF,
           0xFF,0xFF,0xFF,0x3F,0x01,0xFE,0xC0,0xAA,
           0xAA,0xBF,0xC0,0x03,0xFC,0x84,0x1F,0xE0,
           0x01,0x55,0x55,0x40,0xE1,0x03,0xFF,0xFF,
           0xE0,0xFF,0xFF};

unsigned char MEMbrd[]=
          {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0x1F,
           0xFF,0xFF,0xC0,0x80,0x0F,0xFF,0xFF,0x80,
           0x07,0xFF,0xE0,0xE3,0x03,0xFF,0xF0,0xFF,
           0xFF,0xFF,0x71,0x04,0x5E,0x88,0x02,0x1C,
           0x8E,0x50,0x03,0x8C,0x70,0xC7,0x01,0x0C,
           0x20,0x7B,0x0E,0x04,0x0C,0x5E,0x88,0x03,
           0xFF,0xD5,0x57,0x00,0xFF,0x80,0x07,0xFF,
           0x80,0x03,0xFF,0xC0,0xF3,0x2A,0xA8,0xFC,
           0x7F,0xFC,0xFF,0xFF,0xFF,0xFF};

unsigned char Xcard[]=
           {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0x01,
           0xFF,0xFF,0x80,0xFC,0xFF,0xFF,0xFF,0xFF,
           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
           0xFF,0xFF,0xDF,0x03,0x63,0xEA,0xAD,0x80,
           0x01,0x3C,0xC0,0x06,0x15,0x50,0xCF,0x3F,
           0xF8};

unsigned char waiticon[]=
          {0xFF,0xFF,0xFF,0x61,0x1F,0xFF,0xFF,0xF8,
           0x0F,0x18,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF,
           0x86,0xF0,0x11,0xFF,0xFF,0x88,0x6D,0x05,
           0xA0,0x02,0x18,0x80,0x01,0x40,0x01,0x4F,
           0xF2,0xCE,0x80,0xA8,0x15,0xF3,0x54,0x2A,
           0x3C,0x2A,0x54,0x14,0x28,0xCF,0x08,0x10,
           0xFF,0x3C,0x08,0x10,0x14,0x28,0xCF,0x28,
           0x14,0xF3,0x50,0x0A,0x1C,0xA0,0x05,0x01,
           0x46,0x62,0x86,0x80,0x02,0x88,0x11,0x40,
           0x61,0x05,0x10,0x08,0xA0,0x11,0x18,0xE0,
           0x07,0x88,0x0F,0xFF,0xFF,0x86,0xF0,0x0F,
           0xFF,0xFF,0xF0,0xE1,0x1F,0xFF,0xFF,0xF8,
           0xFF,0xFF};

unsigned char proicon[]=
          {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
           0xFF,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xF8,
           0x3F,0xFF,0xF0,0xFF,0xFF,0xFF,0xFC,0xFF,
           0xCC,0x03,0x7F,0x01,0x80,0xCF,0x03,0x7F,
           0xFC,0x01,0x80,0x00,0x3F,0xFF,0xFF,0xFF,
           0xFF,0xFC,0x1C,0xFF,0x60,0xFF,0xF3,0xFF,
           0x38,0x03,0x0C,0xFD,0xC0,0xFF,0xFF,0xFF,
           0xFF,0xFF,0xFF};

unsigned char upper[]=
          {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
           0xFF,0x2F,0x08,0x1F,0xFF,0x08,0xFF,0xFC,
           0x10,0x1F,0xFF,0xFF,0xFC,0x02,0x20,0x1F,
           0xFF,0xFF,0xFC,0x47,0xF8,0x20,0x1F,0xFF,
           0xFF,0xFC,0x80,0x1F,0xFF,0x08,0xFF,0xFC,
           0x80,0x1F,0xFF,0xFF,0xFC,0x80,0x47,0xF8,
           0x1F,0xFF,0xFF,0xFC,0x20,0xE0,0x1F,0xFF,
           0xFF,0xFC,0x10,0xFB,0x08,0xFF,0xFF,0xFF,
           0xFF,0xFF,0xFF,0xFF};


unsigned char driven[]=
          {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
           0xFF,0xEF,0x02,0x38,0x03,0xFF,0x04,0x07,
           0xFF,0x22,0x88,0x3F,0xFF,0xF8,0x11,0xFE,
           0xE8,0x7F,0xFF,0xFC,0x20,0x8B,0x20,0x7F,
           0xFF,0xFC,0xA0,0x11,0xFE,0x3F,0xFF,0xF8,
           0x08,0xE3,0x07,0xFF,0x84,0xF8,0x03,0xFF,
           0x02,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};

unsigned char insertd[]=
          {0xFF,0x79,0x07,0xFE,0x0F,0xC6,0xFF,0x7F,
           0xFF,0xF0,0x71,0xFF,0xFF,0xF8,0x0A,0x18,
           0xAA,0xAA,0xA8,0xFA,0xAA,0xAA,0xF6,0xA0,
           0x60,0xE3,0x03,0xC0,0x07,0x38,0x04,0x20,
           0x06,0x08,0x10,0xFF,0xF3,0x08,0x10,0x3C,
           0x04,0x20,0x03,0xC0,0xFF,0xFF,0xFF,0xFF,
           0x61,0x1F,0xFF,0xFF,0xF8,0x0F,0x38,0xFF,
           0xFF,0xF0,0x01,0x80,0xCF,0x02,0x40,0xF3,
           0x04,0x20,0x3C,0x08,0x10,0x10,0x08,0xCF,
           0x1C,0x38,0xFF,0xFF,0xCF,0x03,0xC0};


unsigned char keybdout[]=
          {0xCF,0x01,0xC0,0xFF,0x3F,0x0E,0x38,0xCF,
           0x08,0x08,0xF3,0x04,0x10,0x3C,0x02,0x20,
           0x01,0x40,0xDF,0x80,0xF3,0x01,0xC0,0x3F,
           0x01,0x40,0x20,0x1B,0x6D,0xB6,0xDB,0x60,
           0x16,0xDB,0x08,0x6D,0xB6,0xDF,0x3B,0x6D,
           0xB6,0xDB,0x80,0x67,0x80,0x06,0xDB,0x6D,
           0xB6,0xD8,0xFF,0x0F,0x4F,0xFF,0xFF,0xFF,
           0x00,0xFF,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,
           0xF8,0x00,0x1B,0x6D,0xB6,0xD8,0x36,0xC0,
           0x1B,0x6D,0x00,0xB6,0xD8,0x36,0xC0,0x1B,
           0x6D,0xB6,0xD8,0x00,0x36,0xC0,0x1B,0x6D,
           0xB6,0xD8,0x36,0xC0,0x00,0x1B,0x6D,0xB6,
           0xD8,0x36,0xC0,0x1B,0x6D,0x00,0xB6,0xD8,
           0x36,0xC0,0x1B,0xFF,0xFF,0xD8,0x00,0x36,
           0xC0,0x1B,0xFF,0xFF,0xD8,0x36,0xC0,0x00,
           0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x7F,0xFF,
           0xF0,0xFF,0xFF,0xFF,0xF0,0xFF};

unsigned char mouseout[]=
          {0xFD,0xE0,0xFF,0xF3,0x07,0x1C,0x3C,0x04,
           0x04,0x02,0x08,0xCF,0x01,0x10,0xF7,0xA0,
           0x3D,0x40,0x01,0xE0,0xFF,0xF3,0x01,0x20,
           0x7F,0x3F,0x9C,0xFF,0x80,0xFF,0xFE,0xFF,
           0xFF,0x3C,0x7E,0x7C,0xFF,0xFE,0xCF,0x1F,
           0xF0,0xF3,0x0F,0xE0,0x3C,0x0F,0xE0,0x1F,
           0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,
           0xFF,0xFE};

unsigned char Question[]=
          {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
           0xCF,0x0F,0xE0,0xF3,0x03,0x80,0xFE,0x0C,
           0xCF,0x03,0x80,0xF7,0xE0,0xBF,0x03,0xEF,
           0x03,0xFF,0xFE,0x03,0xFF,0xFF,0xFF,0xFF,
           0xFF,0xFF,0xFF};

unsigned char checkmrk[]=
          {0xCF,0x07,0x80,0xF3,0x0E,0x80,0xBE,0x1B,
           0x36,0xEF,0x6C,0x7B,0xD8,0x01,0x9E,0xB0,
           0x03,0x60,0xE7,0x06,0xC0,0x79,0x0D,0x80,
           0x1B,0xDF,0x36,0xF7,0x6C,0x3D,0xD8,0x01,
           0xB0,0xCF,0x03,0x60,0xF3,0x06,0xC0,0xBC,
           0x0D,0x80,0x1B,0xEF,0x36,0xFB,0x6C,0x9E,
           0xD8,0x01,0xB0,0xE7,0x03,0x60,0x38,0xF8,
           0x06,0xC0,0xDC,0x0D,0xCE,0x80,0x36,0x1B,
           0xF3,0x1B,0x36,0x3C,0x0D,0xEC,0x06,0xD8,
           0xCF,0x03,0x30,0xF3,0x01,0xE0};

unsigned char badmrk[]=
          {0x3C,0x03,0xC0,0x02,0xE0,0xCF,0x01,0xB0,
           0xF7,0xD8,0x7D,0x6C,0x36,0xDF,0x1B,0xE7,
           0x0D,0x80,0x79,0x06,0xC0,0x03,0x9E,0x60,
           0x01,0xB0,0xEF,0xD8,0xFB,0x6C,0xBE,0x36,
           0x1B,0xCF,0x0D,0x80,0xF3,0x06,0xC0,0x3C,
           0x03,0x60,0x01,0xB0,0xDF,0xD8,0xF7,0x6C,
           0x7D,0x36,0x1B,0x9F,0x0D,0x80,0xE7,0x06,
           0xC0,0x79,0x03,0x60,0x01,0xBE,0xB0,0xD8,
           0xEF,0x6C,0xFB,0x36,0x3E,0x1B,0x0E,0x80};



unsigned char diskette[]=
          {0xFF,0xFF,0xFF,0xFF,0x1F,0x03,0xFF,0xFF,
           0x86,0xF8,0x07,0xFF,0xFF,0xF4,0xEF,0x0A,
           0xFB,0x05,0xBC,0x02,0x80,0x01,0xFF,0x7D,
           0x78,0x84,0xCF,0x01,0x02,0xFF,0x7C,0x01,
           0x02,0x84,0xDF,0x78,0xFF,0xFF,0xFF,0x7F,
           0x07,0x10,0xFF,0xFF,0xFF,0x80,0x03,0xFF,
           0xFF,0xFE,0xFF,0xFF,0xFF,0xFF};

unsigned char lisa[]=
          {0xFF,0x0F,0x03,0xFF,0xFF,0xFF,0x00,0xFF,
           0xC0,0x07,0xFF,0xFF,0xFF,0xFF,0xE0,0x10,
           0x0C,0xFF,0xFF,0xF0,0x30,0x01,0xFF,0x70,
           0xFF,0xF8,0x07,0x80,0x01,0x9E,0xFF,0x01,
           0xFF,0xCF,0x07,0x80,0xFF,0x3F,0x07,0x80,
           0xE7,0x01,0xFF,0x09,0x01,0xFF,0x01,0xFF,
           0xFF,0xF8,0x40,0x07,0x80,0x0C,0xFF,0xFF,
           0xF0,0x30,0x00,0x07,0xFF,0xFF,0xFF,0xFF,
           0xE0,0x03,0xFF,0x00,0xFF,0xFF,0xFF,0xC0,
           0x03,0xFF,0xFF,0xFF,0x00,0xFF,0xE0,0x07,
           0xFF,0xFF,0xFF,0xFF,0xF0,0x61,0xAA,0xAA,
           0xAA,0x95,0xFF,0x18,0xFF,0xFF,0x9F,0x5F,
           0xFF,0xFD,0x86,0x1F,0x0A,0xAA,0xA8,0x15,
           0x3F,0x07,0xFF,0x00,0xFF,0xFF,0xFF,0xF0,
           0x03,0xFF,0xFF,0xFF,0xFC,0xFF,0xE0,0xFF,
           0xFF,0xFF};


unsigned char *decode_icon(unsigned char *icon, unsigned char *text)
{
int iindex=0, oindex=0;
int x,y, octals, mapbyte, obit;
static unsigned char output[6*33+1  ];

      memset(output,0,6*33   );

      for (octals=0; octals<24; octals++)
       {  mapbyte=icon[iindex++]|256;
          while(mapbyte)
          {  obit=mapbyte & 1; mapbyte=mapbyte>>1; if (!mapbyte) break;
             if (obit) output[oindex++]=0;
             else      output[oindex++]=icon[iindex++];
          }
       }
       for (iindex=0,oindex=6,y=0; y<31*6; y++) output[oindex++]^=output[iindex++];

       puts("\n------------------------------------------------");
       printf("------------------%s---------------------------\n\n",text);
       for (oindex=0, y=0; y<31; y++)          // row
       {   for (x=0; x<6; x++, oindex++)          // x-byte
               for (obit=128; obit; obit=obit>>1)
                    if (output[oindex] & obit) printf("##"); else printf("  ");
         puts("");
       }
       puts("\n------------------------------------------------\n\n");

       return output;
}


int main(int argc, unsigned char *argv[])
{

decode_icon(UniPlus ,"UniPlus  ");
decode_icon(IObrd   ,"IObrd    ");
decode_icon(CPUbrd  ,"CPUbrd   ");
decode_icon(MEMbrd  ,"MEMbrd   ");
decode_icon(Xcard   ,"Xcard    ");
decode_icon(waiticon,"waiticon ");
decode_icon(proicon ,"proicon  ");
decode_icon(upper   ,"upper    ");
decode_icon(driven  ,"driven   ");
decode_icon(insertd ,"insertd  ");
decode_icon(keybdout,"keybdout ");
decode_icon(mouseout,"mouseout ");
decode_icon(Question,"Question ");
decode_icon(checkmrk,"checkmrk ");
decode_icon(badmrk  ,"badmrk   ");
decode_icon(diskette,"diskette ");
decode_icon(lisa    ,"lisa     ");
}
