home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 22 / AACD 22.iso / AACD / Programming / Emperor_v4.0 / Emperor / Projects / IntegratedCircuitDB.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-05  |  52.0 KB  |  683 lines

  1. LONG databaselength = 0;
  2. LONG grey = 0;
  3. LONG black = 0;
  4. LONG white = 0;
  5. LONG silver = 0;
  6. LONG ICGateNumber[500];
  7. LONG ICPinfunction[500][128];
  8. LONG ICPinnumbers[500];
  9. LONG ICType[500];
  10. char ICName[500][100];
  11. char ICDescript[500][8][100];
  12. char ICPinout[500][128][20];
  13. struct IntuiText IntuiText;
  14. struct List databaselist;
  15. struct Node *Node = NULL;
  16. struct RastPort *Rastport = NULL;
  17.  
  18. void loaddatabase(void);
  19. void calculatelayout(void);
  20. char *stringcopy(char *, const char *);
  21.  
  22. void Window1_CloseWindow_Event(void)
  23. {
  24.     Emperor_QuitProgram();
  25. //    if(Quitrequest1()) Emperor_QuitProgram();
  26. }
  27.  
  28. void Startup(void)
  29. {
  30.     /* Get some nessesary pens */
  31.  
  32.     grey   = ObtainBestPen(Screen1->ViewPort.ColorMap, 0x64000000, 0x64000000, 0x64000000, OBP_Precision, PRECISION_IMAGE, TAG_DONE);
  33.     black  = ObtainBestPen(Screen1->ViewPort.ColorMap, 0x00000000, 0x00000000, 0x00000000, OBP_Precision, PRECISION_IMAGE, TAG_DONE);
  34.     white  = ObtainBestPen(Screen1->ViewPort.ColorMap, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, OBP_Precision, PRECISION_IMAGE, TAG_DONE);
  35.     silver = ObtainBestPen(Screen1->ViewPort.ColorMap, 0xD2000000, 0xD2000000, 0xBE000000, OBP_Precision, PRECISION_IMAGE, TAG_DONE);
  36.     loaddatabase();
  37. }
  38.  
  39. void Shutdown(void)
  40. {
  41. }
  42.  
  43. void Window1_ShowWindow_Event(void)
  44. {
  45.     SetGadgetAttrs(Listbrowser1, Window1, NULL, LISTBROWSER_Labels, &databaselist, LISTBROWSER_Selected, 0, TAG_DONE);
  46.     Rastport = Window1->RPort;
  47.     calculatelayout();
  48. }
  49.  
  50. void Chooser1_GadgetUp_Event(void)
  51. {
  52. }
  53.  
  54. void Listbrowser1_GadgetUp_Event(void)
  55. {
  56.     calculatelayout();
  57. }
  58.  
  59. void Menu_Information1_MenuPick_Event(void)
  60. {
  61.     Inforequest1();
  62. }
  63.  
  64. void Menu_Quit1_MenuPick_Event(void)
  65. {
  66.     if(Quitrequest1()) Emperor_QuitProgram();
  67. }
  68.  
  69. void calculatelayout(void)
  70. {
  71.     /* This is the main layout rendering function */
  72.  
  73.     LONG counter;
  74.     LONG intuilength;
  75.     LONG maxchipwidth;
  76.     LONG selected;
  77.     char construct[50];
  78.  
  79.     /* Clear layout and get some infos */
  80.     SetAPen(Rastport, 0);
  81.     RectFill(Rastport, Layout3->LeftEdge + 3, Layout3->TopEdge + 3, Layout3->LeftEdge + Layout3->Width - 3, Layout3->TopEdge + Layout3->Height - 3);
  82.     selected = stringtoint(Emperor_GetGadgetAttr(Listbrowser1));
  83.     SetAPen(Rastport, black);
  84.     maxchipwidth = Layout3->Width / 2 - Layout3->Width / 5;
  85.     RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 1, Layout3->TopEdge + 20, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 1, Layout3->TopEdge + Layout3->Height - 20);
  86.     SetAPen(Rastport, white);
  87.  
  88.     /* Draw the pins */
  89.     for(counter = 0;counter < ICPinnumbers[selected] / 2;counter++)
  90.     {
  91.         SetAPen(Rastport, silver);
  92.         RectFill(Rastport, Layout3->LeftEdge + maxchipwidth - 20,
  93.                            Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * (1 + 2 * counter) / (ICPinnumbers[selected] - 1),
  94.                            Layout3->LeftEdge + maxchipwidth,
  95.                            Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * 2 * counter / (ICPinnumbers[selected] - 1));
  96.         SetAPen(Rastport, grey);
  97.         RectFill(Rastport, Layout3->LeftEdge + maxchipwidth - 19,
  98.                            Layout3->TopEdge + Layout3->Height - 19 - (Layout3->Height - 40) * (1 + 2 * counter) / (ICPinnumbers[selected] - 1),
  99.                            Layout3->LeftEdge + maxchipwidth,
  100.                            Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * 2 * counter / (ICPinnumbers[selected] - 1));
  101.         SetAPen(Rastport, silver);
  102.         RectFill(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth,
  103.                            Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * (1 + 2 * counter) / (ICPinnumbers[selected] - 1),
  104.                            Layout3->LeftEdge + Layout3->Width - maxchipwidth + 20,
  105.                            Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * 2 * counter / (ICPinnumbers[selected] - 1));
  106.         SetAPen(Rastport, grey);
  107.         RectFill(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth,
  108.                            Layout3->TopEdge + Layout3->Height - 19 - (Layout3->Height - 40) * (1 + 2 * counter) / (ICPinnumbers[selected] - 1),
  109.                            Layout3->LeftEdge + Layout3->Width - maxchipwidth + 19,
  110.                            Layout3->TopEdge + Layout3->Height - 20 - (Layout3->Height - 40) * 2 * counter / (ICPinnumbers[selected] - 1));
  111.     }
  112.  
  113.     /* Draw in/out/bidirectional arrows */
  114.     for(counter = 0;counter < ICPinnumbers[selected] / 2;counter++)
  115.     {
  116.         SetAPen(Rastport, silver);
  117.         if(ICPinfunction[selected][2 * counter + 1] == -1)
  118.         {
  119.         }
  120.         else
  121.         {
  122.             if(ICPinfunction[selected][2 * counter + 1] == +1)
  123.             {
  124.             }
  125.             else
  126.             {
  127.                 if(ICPinfunction[selected][2 * counter + 1] == 0)
  128.                 {
  129.                 }
  130.                 else
  131.                 {
  132.                     if(ICPinfunction[selected][2 * counter + 1] - 10 < 10)
  133.                     {
  134.                         Move(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  135.                         Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  136.                         Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  137.                         Move(Rastport, Layout3->LeftEdge + maxchipwidth - 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  138.                         Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  139.                     }
  140.                     else
  141.                     {
  142.                         if(ICPinfunction[selected][2 * counter + 1] - 20 < 10)
  143.                         {
  144.                             Move(Rastport, Layout3->LeftEdge + maxchipwidth - 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  145.                             Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  146.                             Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 11, (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  147.                             Move(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  148.                             Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 11, (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  149.                         }
  150.                         else
  151.                         {
  152.                             if(ICPinfunction[selected][2 * counter + 1] - 30 < 10)
  153.                             {
  154.                                 Move(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  155.                                 Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  156.                                 Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  157.                                 Move(Rastport, Layout3->LeftEdge + maxchipwidth - 3,  (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  158.                                 Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 7,  (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  159.  
  160.                                 Move(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  161.                                 Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 11, (WORD) (Layout3->TopEdge + Layout3->Height - 18 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  162.                                 Move(Rastport, Layout3->LeftEdge + maxchipwidth - 15, (WORD) (Layout3->TopEdge + Layout3->Height - 20 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  163.                                 Draw(Rastport, Layout3->LeftEdge + maxchipwidth - 11, (WORD) (Layout3->TopEdge + Layout3->Height - 22 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  164.                             }
  165.                         }
  166.                     }
  167.                 }
  168.             }
  169.         }
  170.         if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] == -1)
  171.         {
  172.         }
  173.         else
  174.         {
  175.             if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] == +1)
  176.             {
  177.             }
  178.             else
  179.             {
  180.                 if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] == 0)
  181.                 {
  182.                 }
  183.                 else
  184.                 {
  185.                     if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] - 10 < 10)
  186.                     {
  187.                         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)));
  188.                         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)));
  189.                         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)));
  190.                         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)));
  191.                         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)));
  192.                     }
  193.                     else
  194.                     {
  195.                         if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] - 20 < 10)
  196.                         {
  197.                             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)));
  198.                             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)));
  199.                             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)));
  200.                             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)));
  201.                             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)));
  202.                         }
  203.                         else
  204.                         {
  205.                             if(ICPinfunction[selected][ICPinnumbers[selected] * 2 - 2 * counter - 1] - 30 < 10)
  206.                             {
  207.                                 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)));
  208.                                 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)));
  209.                                 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)));
  210.                                 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)));
  211.                                 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)));
  212.  
  213.                                 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)));
  214.                                 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)));
  215.                                 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)));
  216.                                 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)));
  217.                             }
  218.                         }
  219.                     }
  220.                 }
  221.             }
  222.         }
  223.     }
  224.  
  225.     /* Draw description */
  226.     IntuiText.FrontPen = silver;
  227.     IntuiText.BackPen = 0;
  228.     IntuiText.DrawMode = JAM1;
  229.     IntuiText.LeftEdge = 0;
  230.     IntuiText.TopEdge = 0;
  231.     for(counter = 0;counter < ICPinnumbers[selected] / 2;counter++)
  232.     {
  233.         switch(ICPinout[selected][2 * counter][0])
  234.         {
  235.             case '+':
  236.                 strcpy(construct, "+ 5 Volt");
  237.                 break;
  238.             case '-':
  239.                 strcpy(construct, "Masse");
  240.                 break;
  241.             case 'E':
  242.                 strcpy(construct, "Eingang ");
  243.                 strcat(construct, inttostring(ICPinfunction[selected][2 * counter + 1] - 10));
  244.                 break;
  245.             case 'A':
  246.                 strcpy(construct, "Ausgang ");
  247.                 strcat(construct, inttostring(ICPinfunction[selected][2 * counter + 1] - 20));
  248.                 break;
  249.             default:
  250.                 strcpy(construct, ICPinout[selected][2 * counter]);
  251.                 break;
  252.         }
  253.         IntuiText.IText = (UBYTE *) construct;
  254.         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)));
  255.  
  256.         switch(ICPinout[selected][2 * (ICPinnumbers[selected] - counter - 1)][0])
  257.         {
  258.             case '+':
  259.                 strcpy(construct, "+ 5 Volt");
  260.                 break;
  261.             case '-':
  262.                 strcpy(construct, "Masse");
  263.                 break;
  264.             case 'E':
  265.                 strcpy(construct, "Eingang ");
  266.                 strcat(construct, inttostring(ICPinfunction[selected][2 * ICPinnumbers[selected] - 2 * counter - 1] - 10));
  267.                 break;
  268.             case 'A':
  269.                 strcpy(construct, "Ausgang ");
  270.                 strcat(construct, inttostring(ICPinfunction[selected][2 * ICPinnumbers[selected] - 2 * counter - 1] - 20));
  271.                 break;
  272.             default:
  273.                 strcpy(construct, ICPinout[selected][2 * (ICPinnumbers[selected] - counter - 1)]);
  274.                 break;
  275.         }
  276.         IntuiText.IText = (UBYTE *) construct;
  277.         intuilength = IntuiTextLength(&IntuiText);
  278.         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)));
  279.     }
  280.  
  281.     /* Draw some other stuff */
  282.     SetAPen(Rastport, grey);
  283.     Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 6, Layout3->TopEdge + 30);
  284.     Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 1, Layout3->TopEdge + 20);
  285.     Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 1, Layout3->TopEdge + Layout3->Height - 20);
  286.     Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 6, Layout3->TopEdge + Layout3->Height - 30);
  287.     Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 6, Layout3->TopEdge + 30);
  288.     Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 6, Layout3->TopEdge + 30);
  289.     Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 1, Layout3->TopEdge + 20);
  290.     Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 1, Layout3->TopEdge + Layout3->Height - 20);
  291.     Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 6, Layout3->TopEdge + Layout3->Height - 30);
  292.     Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 6, Layout3->TopEdge + 30);
  293.     Move(Rastport, Layout3->LeftEdge + maxchipwidth + 6, Layout3->TopEdge + Layout3->Height - 30);
  294.     Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 6, Layout3->TopEdge + Layout3->Height - 30);
  295.     SetAPen(Rastport, black);
  296.     RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 70, Layout3->TopEdge + 20, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 70, Layout3->TopEdge + 30);
  297.     SetAPen(Rastport, grey);
  298.     Move(Rastport, Layout3->LeftEdge + maxchipwidth + 70, Layout3->TopEdge + 20);
  299.     Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 70, Layout3->TopEdge + 30);
  300.     Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 70, Layout3->TopEdge + 30);
  301.     Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 70, Layout3->TopEdge + 20);
  302.     SetAPen(Rastport, silver);
  303.     Move(Rastport, Layout3->LeftEdge + maxchipwidth + 71, Layout3->TopEdge + 20);
  304.     Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 71, Layout3->TopEdge + 29);
  305.     Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 71, Layout3->TopEdge + 29);
  306.     Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 71, Layout3->TopEdge + 20);
  307.  
  308.     switch(ICGateNumber[selected])
  309.     {
  310.         case 1:
  311.             Move(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5)  / (ICPinnumbers[selected] - 1)));
  312.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 40, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5)  / (ICPinnumbers[selected] - 1)));
  313.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 40, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
  314.             Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
  315.             Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5)  / (ICPinnumbers[selected] - 1)));
  316.  
  317.             SetAPen(Rastport, grey);
  318.             RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 40,
  319.                                (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)),
  320.                                Layout3->LeftEdge + Layout3->Width - maxchipwidth - 41,
  321.                                (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
  322.             break;
  323.         case 2:
  324.             SetAPen(Rastport, silver);
  325.             Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));
  326.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));
  327.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  328.             Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  329.             Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));
  330.  
  331.             Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  332.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  333.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
  334.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
  335.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  336.  
  337.             SetAPen(Rastport, grey);
  338.             RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
  339.                                (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)),
  340.                                Layout3->LeftEdge + Layout3->Width / 2 - 6,
  341.                                (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  342.             RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
  343.                                (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)),
  344.                                Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
  345.                                (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
  346.             break;
  347.         case 3:
  348.             SetAPen(Rastport, silver);
  349.             Move(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5) / (ICPinnumbers[selected] - 1)));
  350.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 40, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5) / (ICPinnumbers[selected] - 1)));
  351.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 40, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5) / (ICPinnumbers[selected] - 1)));
  352.             Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5) / (ICPinnumbers[selected] - 1)));
  353.             Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 40,                  (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5) / (ICPinnumbers[selected] - 1)));
  354.  
  355.             Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));
  356.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));
  357.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  358.             Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  359.             Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)));
  360.  
  361.             Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  362.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  363.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
  364.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
  365.             Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  366.  
  367.             SetAPen(Rastport, grey);
  368.             RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 40,
  369.                                (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5)  / (ICPinnumbers[selected] - 1)),
  370.                                Layout3->LeftEdge + Layout3->Width - maxchipwidth - 41,
  371.                                (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5)  / (ICPinnumbers[selected] - 1)));
  372.             RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
  373.                                (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 9.5)  / (ICPinnumbers[selected] - 1)),
  374.                                Layout3->LeftEdge + Layout3->Width / 2 - 6,
  375.                                (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)));
  376.             RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
  377.                                (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11.5) / (ICPinnumbers[selected] - 1)),
  378.                                Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
  379.                                (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13.5) / (ICPinnumbers[selected] - 1)));
  380.             break;
  381.         case 40:
  382.             for(counter = 0;counter < 4;counter += 2)
  383.             {
  384.                 SetAPen(Rastport, silver);
  385.                 Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
  386.                 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)));
  387.                 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)));
  388.                 Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
  389.                 Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
  390.  
  391.                 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)));
  392.                 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)));
  393.                 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)));
  394.                 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)));
  395.                 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)));
  396.  
  397.                 SetAPen(Rastport, grey);
  398.                 RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
  399.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)),
  400.                                    Layout3->LeftEdge + Layout3->Width / 2 - 6,
  401.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
  402.                 RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
  403.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)),
  404.                                    Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
  405.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 7.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
  406.             }
  407.             break;
  408.         case 41:
  409.             for(counter = 0;counter < 4;counter += 2)
  410.             {
  411.                 SetAPen(Rastport, silver);
  412.                 Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
  413.                 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)));
  414.                 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)));
  415.                 Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
  416.                 Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
  417.  
  418.                 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)));
  419.                 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)));
  420.                 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)));
  421.                 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)));
  422.                 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)));
  423.  
  424.                 SetAPen(Rastport, grey);
  425.                 RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
  426.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 3 * counter) / (ICPinnumbers[selected] - 1)),
  427.                                    Layout3->LeftEdge + Layout3->Width / 2 - 6,
  428.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
  429.                 RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
  430.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 3 * counter) / (ICPinnumbers[selected] - 1)),
  431.                                    Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
  432.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 3 * counter) / (ICPinnumbers[selected] - 1)));
  433.             }
  434.             break;
  435.         case 5:
  436.             break;
  437.         case 6:
  438.             if(ICPinnumbers[selected] == 14)
  439.             {
  440.                 for(counter = 0;counter < 6;counter += 2)
  441.                 {
  442.                     SetAPen(Rastport, silver);
  443.                     Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  444.                     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)));
  445.                     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)));
  446.                     Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  447.                     Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  448.  
  449.                     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)));
  450.                     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)));
  451.                     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)));
  452.                     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)));
  453.                     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)));
  454.  
  455.                     SetAPen(Rastport, grey);
  456.                     RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
  457.                                        (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)),
  458.                                        Layout3->LeftEdge + Layout3->Width / 2 - 6,
  459.                                        (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  460.                     RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
  461.                                        (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)),
  462.                                        Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
  463.                                        (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  464.                 }
  465.             }
  466.             if(ICPinnumbers[selected] == 16)
  467.             {
  468.                 for(counter = 0;counter < 4;counter += 2)
  469.                 {
  470.                     SetAPen(Rastport, silver);
  471.                     Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  472.                     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)));
  473.                     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)));
  474.                     Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  475.                     Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  476.  
  477.                     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)));
  478.                     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)));
  479.                     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)));
  480.                     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)));
  481.                     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)));
  482.  
  483.                     SetAPen(Rastport, grey);
  484.                     RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
  485.                                        (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 1.5 - 2 * counter) / (ICPinnumbers[selected] - 1)),
  486.                                        Layout3->LeftEdge + Layout3->Width / 2 - 6,
  487.                                        (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  488.                     RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
  489.                                        (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 3.5 - 2 * counter) / (ICPinnumbers[selected] - 1)),
  490.                                        Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
  491.                                        (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 5.5 - 2 * counter) / (ICPinnumbers[selected] - 1)));
  492.                 }
  493.                 SetAPen(Rastport, silver);
  494.                 Move(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11) / (ICPinnumbers[selected] - 1)));
  495.                 Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11) / (ICPinnumbers[selected] - 1)));
  496.                 Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 - 5, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));
  497.                 Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));
  498.                 Draw(Rastport, Layout3->LeftEdge + maxchipwidth + 30,      (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11) / (ICPinnumbers[selected] - 1)));
  499.  
  500.                 Move(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));
  501.                 Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));
  502.                 Draw(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,             (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 15) / (ICPinnumbers[selected] - 1)));
  503.                 Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 30 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 15) / (ICPinnumbers[selected] - 1)));
  504.                 Draw(Rastport, Layout3->LeftEdge + Layout3->Width - maxchipwidth - 30, (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));
  505.  
  506.                 SetAPen(Rastport, grey);
  507.                 RectFill(Rastport, Layout3->LeftEdge + maxchipwidth + 30,
  508.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 11)  / (ICPinnumbers[selected] - 1)),
  509.                                    Layout3->LeftEdge + Layout3->Width / 2 - 6,
  510.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)));
  511.                 RectFill(Rastport, Layout3->LeftEdge + Layout3->Width / 2 + 5,
  512.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 10 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 13) / (ICPinnumbers[selected] - 1)),
  513.                                    Layout3->LeftEdge + Layout3->Width - maxchipwidth - 31,
  514.                                    (WORD) (Layout3->TopEdge + Layout3->Height - 31 + (40 - Layout3->Height) * (ICPinnumbers[selected] - 15) / (ICPinnumbers[selected] - 1)));
  515.             }
  516.             break;
  517.         case 7:
  518.             break;
  519.         case 8:
  520.             break;
  521.     }
  522.  
  523.     switch(ICType[selected])
  524.     {
  525.         case 1:
  526.             /* NAND */
  527.             
  528.             break;
  529.         case 2:
  530.             /* NOR */
  531.             
  532.             break;
  533.         case 3:
  534.             /* AND */
  535.             
  536.             break;
  537.         case 4:
  538.             /* OR */
  539.             
  540.             break;
  541.         case 5:
  542.             /* XNOR */
  543.             
  544.             break;
  545.         case 6:
  546.             /* XOR */
  547.             
  548.             break;
  549.         case 7:
  550.             /* NOT */
  551.             
  552.             break;
  553.         case 8:
  554.             /* DRIVER */
  555.             
  556.             break;
  557.         case 9:
  558.             /* AND/NOR */
  559.             
  560.             break;
  561.         case 10:
  562.             /* SCHMITT-TRIGGER */
  563.             
  564.             break;
  565.         case 11:
  566.             /* EXPANDER */
  567.             
  568.             break;
  569.         case 12:
  570.             /* AND/OR */
  571.             
  572.             break;
  573.         case 20:
  574.             /* DECODER BCD->DECIMAL */
  575.             
  576.             break;
  577.         case 21:
  578.             /* DECODER EXCESS3->DECIMAL */
  579.             
  580.             break;
  581.         case 22:
  582.             /* DECODER EXCESSGRAY->DECIMAL */
  583.             
  584.             break;
  585.         case 23:
  586.             /* DECODER BCD->7SEGMENT*/
  587.             
  588.             break;
  589.         case 30:
  590.             /* FREQENCY-DIVIDER */
  591.             
  592.             break;
  593.     }
  594. }
  595.  
  596. void loaddatabase(void)
  597. {
  598.     FILE *database = NULL;
  599.     BOOL done = FALSE;
  600.     LONG databasecounter1, databasecounter2;
  601.     char databaseentry[100];
  602.  
  603.     database = fopen("PROGDIR:IntegratedCircuitDB.database", "r");
  604.     if(database)
  605.     {
  606.         databaselength = 0;
  607.         while((!done) && (databaselength < 500))
  608.         {
  609.             for(databasecounter1 = 0;databasecounter1 < 4;databasecounter1++)
  610.             {
  611.                 fgets(databaseentry, 10, database);
  612.                 if(databaseentry[0] == '#')
  613.                 {
  614.                     if(databasecounter1 == 0) done = TRUE;
  615.                     databasecounter1 = 4;
  616.                 }
  617.                 else
  618.                 {
  619.                     if(databasecounter1 == 0) stringcopy(ICName[databaselength], databaseentry);
  620.                     if(databasecounter1 == 1) ICType[databaselength] = stringtoint(databaseentry) / 10;
  621.                     if(databasecounter1 == 2) ICGateNumber[databaselength] = stringtoint(databaseentry) / 10;
  622.                 }
  623.             }
  624.             if(!done)
  625.             {
  626.                 for(databasecounter1 = 0;databasecounter1 < 8;databasecounter1++)
  627.                 {
  628.                     fgets(databaseentry, 100, database);
  629.                     if(databaseentry[0] == '#') databasecounter1 = 8;
  630.                     else
  631.                     {
  632.                         stringcopy(ICDescript[databaselength][databasecounter1], databaseentry);
  633.                     }
  634.                 }
  635.                 for(databasecounter1 = 0, databasecounter2 = 0;databasecounter1 < 128;databasecounter1++, databasecounter2++)
  636.                 {
  637.                     if(databasecounter2 == 2) databasecounter2 = 0;
  638.                     fgets(databaseentry, 10, database);
  639.                     if(databaseentry[0] == '#')
  640.                     {
  641.                         ICPinnumbers[databaselength] = databasecounter1 / 2;
  642.                         databasecounter1 = 128;
  643.                     }
  644.                     else
  645.                     {
  646.                         if(databasecounter2 == 0) stringcopy(ICPinout[databaselength][databasecounter1], databaseentry);
  647.                         if(databasecounter2 == 1) ICPinfunction[databaselength][databasecounter1] = stringtoint(databaseentry) / 10;
  648.                     }
  649.                 }
  650.                 databaselength++;
  651.             }
  652.             fgets(databaseentry, 10, database);
  653.         }
  654.         fclose(database);
  655.         NewList(&databaselist);
  656.         for(databasecounter1 = 0;databasecounter1 < databaselength;databasecounter1++)
  657.         {
  658.             Node = AllocListBrowserNode(1, LBNCA_CopyText, TRUE, LBNCA_Text, ICName[databasecounter1], TAG_DONE);
  659.             AddTail(&databaselist, Node);
  660.         }
  661.     }
  662.     else
  663.     {
  664.         Errorrequest1();
  665.         Emperor_QuitProgram();
  666.     }
  667. }
  668.  
  669. char *stringcopy(char *buffer1, const char *buffer2)
  670. {
  671.   char *d = buffer1, c;
  672.  
  673.   do
  674.   {
  675.     c = *buffer2++;
  676.     if(c != 0x0a) *buffer1++ = c;
  677.   }
  678.   while(c);
  679.  
  680.   return(d);
  681. }
  682.  
  683.