LONG databaselength = 0;
LONG grey = 0;
LONG black = 0;
LONG white = 0;
LONG silver = 0;
LONG ICGateNumber[500];
LONG ICPinfunction[500][128];
LONG ICPinnumbers[500];
LONG ICType[500];
char ICName[500][100];
char ICDescript[500][8][100];
char ICPinout[500][128][20];
struct IntuiText IntuiText;
struct List databaselist;
struct Node *Node = NULL;
struct RastPort *Rastport = NULL;

void loaddatabase(void);
void calculatelayout(void);
char *stringcopy(char *, const char *);

void Window1_CloseWindow_Event(void)
{
    Emperor_QuitProgram();
//    if(Quitrequest1()) Emperor_QuitProgram();
}

void Startup(void)
{
    /* Get some nessesary pens */

    grey   = ObtainBestPen(Screen1->ViewPort.ColorMap, 0x64000000, 0x64000000, 0x64000000, OBP_Precision, PRECISION_IMAGE, TAG_DONE);
    black  = ObtainBestPen(Screen1->ViewPort.ColorMap, 0x00000000, 0x00000000, 0x00000000, OBP_Precision, PRECISION_IMAGE, TAG_DONE);
    white  = ObtainBestPen(Screen1->ViewPort.ColorMap, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, OBP_Precision, PRECISION_IMAGE, TAG_DONE);
    silver = ObtainBestPen(Screen1->ViewPort.ColorMap, 0xD2000000, 0xD2000000, 0xBE000000, OBP_Precision, PRECISION_IMAGE, TAG_DONE);
    loaddatabase();
}

void Shutdown(void)
{
}

void Window1_ShowWindow_Event(void)
{
    SetGadgetAttrs(Listbrowser1, Window1, NULL, LISTBROWSER_Labels, &databaselist, LISTBROWSER_Selected, 0, TAG_DONE);
    Rastport = Window1->RPort;
    calculatelayout();
}

void Chooser1_GadgetUp_Event(void)
{
}

void Listbrowser1_GadgetUp_Event(void)
{
    calculatelayout();
}

void Menu_Information1_MenuPick_Event(void)
{
    Inforequest1();
}

void Menu_Quit1_MenuPick_Event(void)
{
    if(Quitrequest1()) Emperor_QuitProgram();
}

void calculatelayout(void)
{
    /* This is the main layout rendering function */

    LONG counter;
    LONG intuilength;
    LONG maxchipwidth;
    LONG selected;
    char construct[50];

    /* Clear layout and get some infos */
    SetAPen(Rastport, 0);
    RectFill(Rastport, Layout3->LeftEdge + 3, Layout3->TopEdge + 3, Layout3->LeftEdge + Layout3->Width - 3, Layout3->TopEdge + Layout3->Height - 3);
    selected = stringtoint(Emperor_GetGadgetAttr(Listbrowser1));
    SetAPen(Rastport, black);
    maxchipwidth = Layout3->Width / 2 - Layout3->Width / 5;
    RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 1, Layout3->TopEdge + 20, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 1, Layout3->TopEdge + Layout3->Height - 20);
    SetAPen(Rastport, white);

    /* Draw the pins */
    for(counter = 0;counter < ICPinnumbers[selected] / 2;counter++)
    {
        SetAPen(Rastport, silver);
        RectFill(Rastport, Layout3->LeftEdge + maxchipwidth - 20,
                           Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * (1 + 2 * counter) / (ICPinnumbers[selected] - 1),
                           Layout3->LeftEdge + maxchipwidth,
                           Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * 2 * counter / (ICPinnumbers[selected] - 1));
        SetAPen(Rastport, grey);
        RectFill(Rastport, Layout3->LeftEdge + maxchipwidth - 19,
                           Layout3->TopEdge + Layout3->Height - 19 - (Layout3->Height - 40) * (1 + 2 * counter) / (ICPinnumbers[selected] - 1),
                           Layout3->LeftEdge + maxchipwidth,
                           Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * 2 * counter / (ICPinnumbers[selected] - 1));
        SetAPen(Rastport, silver);
        RectFill(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth,
                           Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * (1 + 2 * counter) / (ICPinnumbers[selected] - 1),
                           Layout3->LeftEdge + Layout3->Width - maxchipwidth + 20,
                           Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * 2 * counter / (ICPinnumbers[selected] - 1));
        SetAPen(Rastport, grey);
        RectFill(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth,
                           Layout3->TopEdge + Layout3->Height - 19 - (Layout3->Height - 40) * (1 + 2 * counter) / (ICPinnumbers[selected] - 1),
                           Layout3->LeftEdge + Layout3->Width - maxchipwidth + 19,
                           Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * 2 * counter / (ICPinnumbers[selected] - 1));
    }

    /* Draw in/out/bidirectional arrows */
    for(counter = 0;counter < ICPinnumbers[selected] / 2;counter++)
    {
        SetAPen(Rastport, silver);
        if(ICPinfunction[selected][2 * counter + 1] == -1)
        {
        }
        else
        {
            if(ICPinfunction[selected][2 * counter + 1] == +1)
            {
            }
            else
            {
                if(ICPinfunction[selected][2 * counter + 1] == 0)
                {
                }
                else
                {
                    if(ICPinfunction[selected][2 * counter + 1] - 10 < 10)
                    {
                        Move(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                        Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                        Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                        Move(Rastport, Layout3->LeftEdge + maxchipwidth - 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                        Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    }
                    else
                    {
                        if(ICPinfunction[selected][2 * counter + 1] - 20 < 10)
                        {
                            Move(Rastport, Layout3->LeftEdge + maxchipwidth - 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                            Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                            Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 11, (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                            Move(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                            Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 11, (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                        }
                        else
                        {
                            if(ICPinfunction[selected][2 * counter + 1] - 30 < 10)
                            {
                                Move(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Move(Rastport, Layout3->LeftEdge + maxchipwidth - 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));

                                Move(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 11, (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Move(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 11, (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                            }
                        }
                    }
                }
            }
        }
        if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] == -1)
        {
        }
        else
        {
            if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] == +1)
            {
            }
            else
            {
                if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] == 0)
                {
                }
                else
                {
                    if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] - 10 < 10)
                    {
                        Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                        Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                        Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                        Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                        Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    }
                    else
                    {
                        if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] - 20 < 10)
                        {
                            Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                            Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                            Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 11, (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                            Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                            Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 11, (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                        }
                        else
                        {
                            if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] - 30 < 10)
                            {
                                Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));

                                Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 11, (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                                Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth + 11, (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                            }
                        }
                    }
                }
            }
        }
    }

    /* Draw description */
    IntuiText.FrontPen = silver;
    IntuiText.BackPen = 0;
    IntuiText.DrawMode = JAM1;
    IntuiText.LeftEdge = 0;
    IntuiText.TopEdge = 0;
    for(counter = 0;counter < ICPinnumbers[selected] / 2;counter++)
    {
        switch(ICPinout[selected][2 * counter][0])
        {
            case '+':
                strcpy(construct, "+ 5 Volt");
                break;
            case '-':
                strcpy(construct, "Masse");
                break;
            case 'E':
                strcpy(construct, "Eingang ");
                strcat(construct, inttostring(ICPinfunction[selected][2 * counter + 1] - 10));
                break;
            case 'A':
                strcpy(construct, "Ausgang ");
                strcat(construct, inttostring(ICPinfunction[selected][2 * counter + 1] - 20));
                break;
            default:
                strcpy(construct, ICPinout[selected][2 * counter]);
                break;
        }
        IntuiText.IText = (UBYTE *) construct;
        PrintIText(Rastport, &IntuiText, Layout3->LeftEdge + 10, (WORD) (Layout3->TopEdge + Layout3->Height - 20 - Screen1->Font->ta_YSize / 2 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));

        switch(ICPinout[selected][2 * (ICPinnumbers[selected] - counter - 1)][0])
        {
            case '+':
                strcpy(construct, "+ 5 Volt");
                break;
            case '-':
                strcpy(construct, "Masse");
                break;
            case 'E':
                strcpy(construct, "Eingang ");
                strcat(construct, inttostring(ICPinfunction[selected][2 * ICPinnumbers[selected] - 2 * counter - 1] - 10));
                break;
            case 'A':
                strcpy(construct, "Ausgang ");
                strcat(construct, inttostring(ICPinfunction[selected][2 * ICPinnumbers[selected] - 2 * counter - 1] - 20));
                break;
            default:
                strcpy(construct, ICPinout[selected][2 * (ICPinnumbers[selected] - counter - 1)]);
                break;
        }
        IntuiText.IText = (UBYTE *) construct;
        intuilength = IntuiTextLength(&IntuiText);
        PrintIText(Rastport, &IntuiText, Layout3->LeftEdge + Layout3->Width - intuilength - 10, (WORD) (Layout3->TopEdge + Layout3->Height - 20 - Screen1->Font->ta_YSize / 2 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
    }

    /* Draw some other stuff */
    SetAPen(Rastport, grey);
    Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 6, Layout3->TopEdge + 30);
    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 1, Layout3->TopEdge + 20);
    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 1, Layout3->TopEdge + Layout3->Height - 20);
    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 6, Layout3->TopEdge + Layout3->Height - 30);
    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 6, Layout3->TopEdge + 30);
    Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 6, Layout3->TopEdge + 30);
    Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 1, Layout3->TopEdge + 20);
    Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 1, Layout3->TopEdge + Layout3->Height - 20);
    Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 6, Layout3->TopEdge + Layout3->Height - 30);
    Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 6, Layout3->TopEdge + 30);
    Move(Rastport, Layout3->LeftEdge + maxchipwidth + 6, Layout3->TopEdge + Layout3->Height - 30);
    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 6, Layout3->TopEdge + Layout3->Height - 30);
    SetAPen(Rastport, black);
    RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 70, Layout3->TopEdge + 20, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 70, Layout3->TopEdge + 30);
    SetAPen(Rastport, grey);
    Move(Rastport, Layout3->LeftEdge + maxchipwidth + 70, Layout3->TopEdge + 20);
    Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 70, Layout3->TopEdge + 30);
    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 70, Layout3->TopEdge + 30);
    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 70, Layout3->TopEdge + 20);
    SetAPen(Rastport, silver);
    Move(Rastport, Layout3->LeftEdge + maxchipwidth + 71, Layout3->TopEdge + 20);
    Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 71, Layout3->TopEdge + 29);
    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 71, Layout3->TopEdge + 29);
    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 71, Layout3->TopEdge + 20);

    switch(ICGateNumber[selected])
    {
        case 1:
            Move(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5)  / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 40, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5)  / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 40, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5)  / (ICPinnumbers[selected] - 1)));

            SetAPen(Rastport, grey);
            RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 40,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)),
                               Layout3->LeftEdge + Layout3->Width - maxchipwidth - 41,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
            break;
        case 2:
            SetAPen(Rastport, silver);
            Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));

            Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));

            SetAPen(Rastport, grey);
            RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)),
                               Layout3->LeftEdge + Layout3->Width / 2 - 6,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
            RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)),
                               Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
            break;
        case 3:
            SetAPen(Rastport, silver);
            Move(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 40, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 40, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5) / (ICPinnumbers[selected] - 1)));

            Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));

            Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
            Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));

            SetAPen(Rastport, grey);
            RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 40,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5)  / (ICPinnumbers[selected] - 1)),
                               Layout3->LeftEdge + Layout3->Width - maxchipwidth - 41,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5)  / (ICPinnumbers[selected] - 1)));
            RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)),
                               Layout3->LeftEdge + Layout3->Width / 2 - 6,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
            RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)),
                               Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
                               (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
            break;
        case 40:
            for(counter = 0;counter < 4;counter += 2)
            {
                SetAPen(Rastport, silver);
                Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));

                Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 7.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 7.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));

                SetAPen(Rastport, grey);
                RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)),
                                   Layout3->LeftEdge + Layout3->Width / 2 - 6,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)),
                                   Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 7.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
            }
            break;
        case 41:
            for(counter = 0;counter < 4;counter += 2)
            {
                SetAPen(Rastport, silver);
                Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));

                Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));

                SetAPen(Rastport, grey);
                RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 3 * counter) / (ICPinnumbers[selected] - 1)),
                                   Layout3->LeftEdge + Layout3->Width / 2 - 6,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
                RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)),
                                   Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
            }
            break;
        case 5:
            break;
        case 6:
            if(ICPinnumbers[selected] == 14)
            {
                for(counter = 0;counter < 6;counter += 2)
                {
                    SetAPen(Rastport, silver);
                    Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));

                    Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));

                    SetAPen(Rastport, grey);
                    RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
                                       (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)),
                                       Layout3->LeftEdge + Layout3->Width / 2 - 6,
                                       (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
                                       (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)),
                                       Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
                                       (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                }
            }
            if(ICPinnumbers[selected] == 16)
            {
                for(counter = 0;counter < 4;counter += 2)
                {
                    SetAPen(Rastport, silver);
                    Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));

                    Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));

                    SetAPen(Rastport, grey);
                    RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
                                       (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)),
                                       Layout3->LeftEdge + Layout3->Width / 2 - 6,
                                       (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                    RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
                                       (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)),
                                       Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
                                       (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
                }
                SetAPen(Rastport, silver);
                Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11) / (ICPinnumbers[selected] - 1)));

                Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 15) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 15) / (ICPinnumbers[selected] - 1)));
                Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));

                SetAPen(Rastport, grey);
                RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11)  / (ICPinnumbers[selected] - 1)),
                                   Layout3->LeftEdge + Layout3->Width / 2 - 6,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));
                RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)),
                                   Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
                                   (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 15) / (ICPinnumbers[selected] - 1)));
            }
            break;
        case 7:
            break;
        case 8:
            break;
    }

    switch(ICType[selected])
    {
        case 1:
            /* NAND */
            
            break;
        case 2:
            /* NOR */
            
            break;
        case 3:
            /* AND */
            
            break;
        case 4:
            /* OR */
            
            break;
        case 5:
            /* XNOR */
            
            break;
        case 6:
            /* XOR */
            
            break;
        case 7:
            /* NOT */
            
            break;
        case 8:
            /* DRIVER */
            
            break;
        case 9:
            /* AND/NOR */
            
            break;
        case 10:
            /* SCHMITT-TRIGGER */
            
            break;
        case 11:
            /* EXPANDER */
            
            break;
        case 12:
            /* AND/OR */
            
            break;
        case 20:
            /* DECODER BCD->DECIMAL */
            
            break;
        case 21:
            /* DECODER EXCESS3->DECIMAL */
            
            break;
        case 22:
            /* DECODER EXCESSGRAY->DECIMAL */
            
            break;
        case 23:
            /* DECODER BCD->7SEGMENT*/
            
            break;
        case 30:
            /* FREQENCY-DIVIDER */
            
            break;
    }
}

void loaddatabase(void)
{
    FILE *database = NULL;
    BOOL done = FALSE;
    LONG databasecounter1, databasecounter2;
    char databaseentry[100];

    database = fopen("PROGDIR:IntegratedCircuitDB.database", "r");
    if(database)
    {
        databaselength = 0;
        while((!done) && (databaselength < 500))
        {
            for(databasecounter1 = 0;databasecounter1 < 4;databasecounter1++)
            {
                fgets(databaseentry, 10, database);
                if(databaseentry[0] == '#')
                {
                    if(databasecounter1 == 0) done = TRUE;
                    databasecounter1 = 4;
                }
                else
                {
                    if(databasecounter1 == 0) stringcopy(ICName[databaselength], databaseentry);
                    if(databasecounter1 == 1) ICType[databaselength] = stringtoint(databaseentry) / 10;
                    if(databasecounter1 == 2) ICGateNumber[databaselength] = stringtoint(databaseentry) / 10;
                }
            }
            if(!done)
            {
                for(databasecounter1 = 0;databasecounter1 < 8;databasecounter1++)
                {
                    fgets(databaseentry, 100, database);
                    if(databaseentry[0] == '#') databasecounter1 = 8;
                    else
                    {
                        stringcopy(ICDescript[databaselength][databasecounter1], databaseentry);
                    }
                }
                for(databasecounter1 = 0, databasecounter2 = 0;databasecounter1 < 128;databasecounter1++, databasecounter2++)
                {
                    if(databasecounter2 == 2) databasecounter2 = 0;
                    fgets(databaseentry, 10, database);
                    if(databaseentry[0] == '#')
                    {
                        ICPinnumbers[databaselength] = databasecounter1 / 2;
                        databasecounter1 = 128;
                    }
                    else
                    {
                        if(databasecounter2 == 0) stringcopy(ICPinout[databaselength][databasecounter1], databaseentry);
                        if(databasecounter2 == 1) ICPinfunction[databaselength][databasecounter1] = stringtoint(databaseentry) / 10;
                    }
                }
                databaselength++;
            }
            fgets(databaseentry, 10, database);
        }
        fclose(database);
        NewList(&databaselist);
        for(databasecounter1 = 0;databasecounter1 < databaselength;databasecounter1++)
        {
            Node = AllocListBrowserNode(1, LBNCA_CopyText, TRUE, LBNCA_Text, ICName[databasecounter1], TAG_DONE);
            AddTail(&databaselist, Node);
        }
    }
    else
    {
        Errorrequest1();
        Emperor_QuitProgram();
    }
}

char *stringcopy(char *buffer1, const char *buffer2)
{
  char *d = buffer1, c;

  do
  {
    c = *buffer2++;
    if(c != 0x0a) *buffer1++ = c;
  }
  while(c);

  return(d);
}

