home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 13 / 13.iso / p / p078 / 3.img / NETFORMS.PLB / PCBII.CF < prev    next >
Encoding:
Text File  |  1991-10-14  |  8.7 KB  |  357 lines

  1. /*
  2.     /L Do not append sheet number to labels
  3.  */
  4.  
  5. /*  VERSION="1.10   14-OCT-91"
  6.  *      - Added 'Time Stamp - ' to the comment header for COMPNET in PCB II
  7.  *      - Added code for outputting missing pins on a part
  8.  *      - Added length checks for Part Names, Module Names,
  9.  *        Reference Strings and Pin Names
  10.  *      - Added Version message
  11.  *
  12.  *  Capacities:
  13.  *      - Part Names are limited to 8 characters
  14.  *      - Module Names are limited to 8 characters
  15.  *      - Reference Strings are limited to 8 characters
  16.  *      - Node Names are limited to 8 characters
  17.  *      - Node Numbers are limited to 5 digits (plus the leading 'N')
  18.  *      - Pin Names are limited to 4 charactes
  19.  *      - Pin Numbers are not checked for length
  20.  *
  21.  *  Characters:
  22.  *      - All ASCII keyboard characters are legal except { '(){} ' }
  23.  */
  24.  
  25. int prevpin;
  26. int currpin;
  27.  
  28. int type;
  29. int new_type;
  30. int legal;
  31. int len;
  32.  
  33. int sw_L;
  34.  
  35. /*-----------------------*/
  36.  
  37. Initialize()
  38. {
  39.     WriteString(0, "Creating Netlist...");
  40.     WriteCrLf(0);
  41.  
  42.     AddSymbol("Str");
  43.     AddSymbol("PinNumberStr");
  44.     AddSymbol("SignalNameStr");
  45.     AddSymbol("PartNameStr");
  46.     AddSymbol("ModuleNameStr");
  47.     AddSymbol("ReferenceStr");
  48.  
  49.     WriteString(1, "( { OrCAD/PCB II Netlist Format");
  50.     WriteCrLf(1);
  51.     CopySymbol(TitleString, Str);
  52.     PadSpaces(Str, 46);
  53.     WriteSymbol(1, Str);
  54.     WriteString(1, "Revised: ");
  55.     WriteSymbol(1, DateString);
  56.     WriteCrLf(1);
  57.     CopySymbol(DocumentNumber, Str);
  58.     PadSpaces(Str, 46);
  59.     WriteSymbol(1, Str);
  60.     WriteString(1, "Revision: ");
  61.     WriteSymbol(1, Revision);
  62.     WriteCrLf(1);
  63.     WriteSymbol(1, Organization);
  64.     WriteCrLf(1);
  65.     WriteSymbol(1, AddressLine1);
  66.     WriteCrLf(1);
  67.     WriteSymbol(1, AddressLine2);
  68.     WriteCrLf(1);
  69.     WriteSymbol(1, AddressLine3);
  70.     WriteCrLf(1);
  71.     WriteSymbol(1, AddressLine4);
  72.     WriteCrLf(1);
  73.     WriteCrLf(1);
  74.     WriteString(1, "Time Stamp - }");
  75.     WriteCrLf(1);
  76.  
  77.     SetCharSet("~`!@#$%^&*_-+=[]|\\':;/><.0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
  78.     SetNumberWidth(5);
  79.  
  80.     sw_L = SwitchIsSet("L");
  81. }
  82.  
  83. /*-----------------------*/
  84.  
  85. WriteHeader()
  86. {
  87.     CreatePartDataBase();
  88. }
  89.  
  90. /*-----------------------*/
  91.  
  92. ValidateNodeInfo()
  93. {
  94.     /* globals type, legal, and len are set */
  95.     type = GetStandardSymbol(TypeCode);
  96.     new_type = type;
  97.  
  98.     CopySymbol(SignalNameString, SignalNameStr);
  99.     legal = SymbolInCharSet(SignalNameStr);
  100.     if (legal != 1) { new_type = 'N'; }
  101.  
  102.     if (new_type == 'L')
  103.     {
  104.         if (sw_L == 0)
  105.         {
  106.             SetNumberWidth(1);
  107.             MakeLocalSignal("_");
  108.             SetNumberWidth(5);
  109.             CopySymbol(LocalSignal, SignalNameStr);
  110.         }
  111.     }
  112.  
  113.     len = SymbolLength(SignalNameStr);
  114.     if (len > 8) { new_type = 'N'; }
  115. }
  116.  
  117. /*-----------------------*/
  118.  
  119. HandleNodeName()
  120. {
  121.     ValidateNodeInfo();
  122.  
  123.     if (legal != 1)
  124.     {
  125.         /* illegal character in the node name */
  126.         WriteString(0, "WARNING: Name contains illegal characters '");
  127.         WriteSymbol(0, SignalNameStr);
  128.         WriteString(0, "', changed to N");
  129.         WriteSymbol(0, NetNumber);
  130.         WriteCrLf(0);
  131.  
  132.         SetSymbol(ExitType, "W");
  133.     }
  134.  
  135.     if (len > 8)
  136.     {
  137.         WriteString(0, "WARNING: Name is too long '");
  138.         WriteSymbol(0, SignalNameStr);
  139.         WriteString(0, "', changed to N");
  140.         WriteSymbol(0, NetNumber);
  141.         WriteCrLf(0);
  142.  
  143.         SetSymbol(ExitType, "W");
  144.     }
  145.  
  146.     AddSignalName();
  147. }
  148.  
  149. /*-----------------------*/
  150.  
  151. WriteNet()
  152. {
  153.     RecordNode();
  154. }
  155.  
  156. /*-----------------------*/
  157.  
  158. WriteNetEnding()
  159. {
  160. }
  161.  
  162. /*-----------------------*/
  163.  
  164. ProcessFieldStrings()
  165. {
  166. }
  167.  
  168. /*-----------------------*/
  169.  
  170. SetCurrentPinNumber()
  171. {
  172.     int i;
  173.     int len;
  174.     int ch;
  175.  
  176.     SetCharSet("0123456789");
  177.  
  178.     currpin = 0;
  179.     CopySymbol(PinNumberString, PinNumberStr);
  180.  
  181.     i = SymbolInCharSet(PinNumberStr);
  182.     if (i == 1) {
  183.         len = SymbolLength(PinNumberString);
  184.  
  185.         i = 0;
  186.         do {
  187.             ch = GetSymbolChar(i, PinNumberStr);
  188.             currpin = (currpin * 10) + (ch - 48);
  189.  
  190.             i = i + 1;
  191.         } while (i < len);
  192.     }
  193.  
  194.     SetCharSet("~`!@#$%^&*_-+=[]|\\':;/><.0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
  195. }
  196.  
  197. /*-----------------------*/
  198.  
  199. WriteNetListEnd()
  200. {
  201.     int net;
  202.  
  203.     net = 0;
  204.     SetFirst(ALL);
  205.     do {
  206.         CopySymbol(ReferenceString, Str);
  207.         LoadFieldString(Str);
  208.  
  209.         WriteString(1, " ( ");
  210.         WriteSymbol(1, TimeStamp);
  211.         WriteString(1, " ");
  212.  
  213.         CopySymbol(ModuleName, ModuleNameStr);
  214.         len = SymbolLength(ModuleName);
  215.         if (len > 8)
  216.         {
  217.             PadSpaces(ModuleNameStr, 8);
  218.             WriteString(0, "WARNING: Name is too long '");
  219.             WriteSymbol(0, ModuleName);
  220.             WriteString(0, "', truncated to ");
  221.             WriteSymbol(0, ModuleNameStr);
  222.             WriteCrLf(0);
  223.  
  224.             SetSymbol(ExitType, "W");
  225.         }
  226.  
  227.         CopySymbol(PartName, PartNameStr);
  228.         len = SymbolLength(PartName);
  229.         if (len > 8)
  230.         {
  231.             PadSpaces(PartNameStr, 8);
  232.             WriteString(0, "WARNING: Name is too long '");
  233.             WriteSymbol(0, PartName);
  234.             WriteString(0, "', truncated to ");
  235.             WriteSymbol(0, PartNameStr);
  236.             WriteCrLf(0);
  237.  
  238.             SetSymbol(ExitType, "W");
  239.         }
  240.  
  241.         CopySymbol(ReferenceString, ReferenceStr);
  242.         len = SymbolLength(ReferenceString);
  243.         if (len > 8)
  244.         {
  245.             PadSpaces(ReferenceStr, 8);
  246.             WriteString(0, "WARNING: Name is too long '");
  247.             WriteSymbol(0, ReferenceString);
  248.             WriteString(0, "', truncated to ");
  249.             WriteSymbol(0, ReferenceStr);
  250.             WriteCrLf(0);
  251.  
  252.             SetSymbol(ExitType, "W");
  253.         }
  254.  
  255.  
  256.         len = SymbolLength(ModuleName);
  257.         if (len > 0)
  258.             { WriteSymbol(1, ModuleNameStr); }
  259.         else
  260.             { WriteSymbol(1, PartNameStr); }
  261.         WriteString(1, " ");
  262.  
  263.         WriteSymbol(1, ReferenceStr);
  264.         WriteString(1, " ");
  265.         WriteSymbol(1, PartNameStr);
  266.         WriteCrLf(1);
  267.  
  268.         prevpin = 0;
  269.         do {
  270.             /* write out any pins between the previous one and the current one */
  271.             SetCurrentPinNumber();
  272.  
  273.             prevpin = prevpin + 1;
  274.             if (currpin > prevpin) {
  275.                 if (currpin != 0) {
  276.                     SetNumberWidth(1);
  277.  
  278.                     while (currpin > prevpin) {
  279.                         WriteString(1, "  ( ");
  280.  
  281.                         WriteInteger(1, prevpin);
  282.                         WriteString(1, " ?");
  283.                         net = net + 1;
  284.                         WriteInteger(1, net);
  285.                         WriteString(1, " )");
  286.                         WriteCrLf(1);
  287.  
  288.                         prevpin = prevpin + 1;
  289.                     }
  290.  
  291.                     SetNumberWidth(5);
  292.                 }
  293.             }
  294.             prevpin = currpin;
  295.  
  296.             ValidateNodeInfo();
  297.  
  298.             WriteString(1, "  ( ");
  299.             CopySymbol(PinNumberString, PinNumberStr);
  300.             len = SymbolLength(PinNumberStr);
  301.             if (len > 4)
  302.             {
  303.                 PadSpaces(PinNumberStr, 4);
  304.                 WriteString(0, "WARNING: Name is too long '");
  305.                 WriteSymbol(0, PinNumberString);
  306.                 WriteString(0, "', truncated to ");
  307.                 WriteSymbol(0, PinNumberStr);
  308.                 WriteCrLf(0);
  309.  
  310.                 SetSymbol(ExitType, "W");
  311.             }
  312.             WriteSymbol(1, PinNumberStr);
  313.             WriteString(1, " ");
  314.  
  315.             if (new_type == 'L')
  316.             {
  317.                 WriteSymbol(1, SignalNameStr);
  318.             }
  319.             if (new_type == 'P')
  320.             {
  321.                 WriteSymbol(1, SignalNameStr);
  322.             }
  323.             if (new_type == 'S')
  324.             {
  325.                 WriteSymbol(1, SignalNameStr);
  326.             }
  327.             if (new_type == 'N')
  328.             {
  329.                 WriteString(1, "N");
  330.                 WriteSymbol(1, NetNumber);
  331.             }
  332.             if (new_type == 'U')
  333.             {
  334.                 WriteString(1, "?");
  335.                 net = net + 1;
  336.                 SetNumberWidth(1);
  337.                 WriteInteger(1, net);
  338.                 SetNumberWidth(5);
  339.             }
  340.             WriteString(1, " )");
  341.             WriteCrLf(1);
  342.         } while (SetNext(NODES));
  343.  
  344.         WriteString(1, " )");
  345.         WriteCrLf(1);
  346.  
  347.     } while (SetNext(ALL));
  348.  
  349.     WriteString(1, ")");
  350.     WriteCrLf(1);
  351.  
  352.     WriteString(0, "Done");
  353.     WriteCrLf(0);
  354. }
  355.  
  356.  
  357.