/*
 *  This EAGLE User Language Program prints a board's
 *  Partlist and its "Bill Of Material" in RTF.
 *  Tested and works under MS-Office 7.0 and 2000
 *  Published under GNU-Public-License
 *  Ing.-Büro Völpel GmbH
 *  Author: Thomas Bronner 
 *  Email: info@voelpel.com	
 */

string hexb(char c)
  {
  string buf = "";

  sprintf(buf, "%X", c);
  buf = "\\\'" + buf;
  return (buf);
  }

string convert(string str)
  {
  string buf ="";
  int i, len;

  len = strlen(str);
  for (i=0;i<len;i++)
    {
    if (str[i] == '\\')
      {
      buf = buf + '/';
      }
    else if (str[i] > 127)
      {
      buf = buf + hexb(str[i]);
      }
    else
      {
      buf = buf + str[i];
      }
    }
  return buf;
  }


void PartLine(string Name, string Value, string Package)
  {
  Name = convert(Name);
  Value = convert(Value);
  Package = convert(Package);
  
  printf("\\pard \\ql \\li0\\ri0\\nowidctlpar\\intbl"
	"\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0"
	"{\\loch\\af0\\hich\\af0\\dbch\\af0 %-s \\cell }"
	"{\\loch\\af0\\hich\\af0\\dbch\\af0 %-s \\cell }"
	"{\\loch\\af0\\hich\\af0\\dbch\\af0 %-s \\cell }"
	"{\\loch\\af0\\hich\\af0\\dbch\\af0 %-s \\cell }"
	, Name, Value, Package, "");
  printf("\\pard \\ql \\li0\\ri0\\nowidctlpar\\intbl"
	"\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0"
	"{\\loch\\af0\\hich\\af0\\dbch\\af0\\trowd \\trrh360\\trftsWidth1 \\clvertalt\\clbrdrt\\brdrnone"
	"\\clbrdrl\\brdrs"
	"\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3"
	"\\clwWidth1085 \\cellx1085\\clvertalt\\clbrdrt\\brdrnone \\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb"
	"\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3\\clwWidth1946 \\cellx3031"
	"\\clvertalt\\clbrdrt\\brdrnone \\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1"
	"\\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3\\clwWidth1545 \\cellx4576\\clvertalt\\clbrdrt\\brdrnone"
	"\\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2"
	"\\brdrcf1 \\cltxlrtb\\clftsWidth3\\clwWidth5061 \\cellx9637\\row }");
  }

int ValueLine(string Quantity, string Value, string Package )
  {
  Quantity = convert(Quantity);
  Value = convert(Value);
  Package = convert(Package);
  
  
  printf("\\pard \\ql \\li0\\ri0\\nowidctlpar\\intbl"
	"\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0"
  	"{\\loch\\af0\\hich\\af0\\dbch\\af0 %-s\\cell }"
	"{\\loch\\af0\\hich\\af0\\dbch\\af0 %-s\\cell }"
	"{\\loch\\af0\\hich\\af0\\dbch\\af0 %-s\\cell }", Quantity, Value, Package); 
	
   

  
  return 50;
  }


if (board) board(B)
  {
  output(filesetext(B.name, ".RTF"),"wt")
    {                  
    printf("\{\\rtf1\\ansi\\ansicpg1252\\uc1 \\deff0\\deflang1031\\deflangfe1031{\\fonttbl{\\f0"
	"\\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Thorndale};}"
	"{\\f147\\fnil\\fcharset0\\fprq0{\\*\\panose 00000000000000000000}{\\*\\falt Arial};}"
	"{\\f148\\froman\\fcharset238\\fprq2 Times New Roman CE{\\*\\falt Thorndale};}{\\f149\\froman"
	"\\fcharset204\\fprq2 Times New Roman Cyr{\\*\\falt Thorndale};}{\\f151\\froman\\fcharset161"
	"\\fprq2 Times New Roman Greek{\\*\\falt Thorndale};}"
	"{\\f152\\froman\\fcharset162\\fprq2 Times New Roman Tur{\\*\\falt Thorndale};}"
	"{\\f153\\froman\\fcharset177\\fprq2 Times New Roman (Hebrew){\\*\\falt Thorndale};}"
	"{\\f154\\froman\\fcharset178\\fprq2 Times New Roman (Arabic){\\*\\falt Thorndale};}"
	"{\\f155\\froman\\fcharset186\\fprq2 Times New Roman Baltic{\\*\\falt Thorndale};}}{\\colortbl;"
	"\\red0\\green0\\blue0;\\red0\\green0\\blue255;\\red0\\green255\\blue255;\\red0\\green255\\blue0;"
	"\\red255\\green0\\blue255;\\red255\\green0\\blue0;\\red255\\green255\\blue0;"
	"\\red255\\green255\\blue255;\\red0\\green0\\blue128;\\red0\\green128\\blue128;"
	"\\red0\\green128\\blue0;\\red128\\green0\\blue128;\\red128\\green0\\blue0;"
	"\\red128\\green128\\blue0;\\red128\\green128\\blue128;\\red192\\green192\\blue192;}"
	"{\\stylesheet{\\ql \\li0\\ri0\\nowidctlpar\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0ß\\lin0"
	"\\itap0 \\fs24\\lang1033\\langfe1024\\loch\\f147\\hich\\af147\\dbch\\af147\\cgrid\\langnp1033"
	"\\langfenp1024 \\snext0 Normal;}{\\*\\cs10 \\additive Default Paragraph Font;}"
	"{\\s15\\ql \\li0\\ri0\\sa120\\nowidctlpar\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0"
	"\\itap0 \\fs24\\lang1033\\langfe1024\\loch\\f147\\hich\\af147\\dbch\\af147\\cgrid\\langnp1033"
	"\\langfenp1024 \\sbasedon0 \\snext15 Body Text;}{\\s16\\ql \\li0\\ri0\\sa120\\nowidctlpar"
	"\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\fs24\\lang1033\\langfe1024\\loch"
	"\\f0\\hich\\af0\\dbch\\af147\\cgrid\\langnp1033\\langfenp1024 \\sbasedon15 \\snext16 List;}"
	"{\\s17\\ql \\li0\\ri0\\sb120\\sa120\\nowidctlpar\\noline\\hyphpar0\\aspnum\\faauto\\adjustright"
	"\\rin0\\lin0\\itap0 \\i\\fs20\\lang1033\\langfe1024\\loch\\f0\\hich\\af0\\dbch\\af147\\cgrid"
	"\\langnp1033\\langfenp1024 \\sbasedon0 \\snext17 caption;}{\\s18\\ql \\li0\\ri0\\nowidctlpar"
	"\\noline\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\fs24\\lang1033\\langfe1024"
	"\\loch\\f0\\hich\\af0\\dbch\\af147\\cgrid\\langnp1033\\langfenp1024 \\sbasedon0 \\snext18 Verzeichnis;}"
	"{\\s19\\ql \\li0\\ri0\\nowidctlpar\\noline\\tqc\\tx4818\\tqr\\tx9637\\hyphpar0\\aspnum\\faauto"
	"\\adjustright\\rin0\\lin0\\itap0 \\fs24\\lang1033\\langfe1024\\loch\\f147\\hich\\af147\\dbch"
	"\\af147\\cgrid\\langnp1033\\langfenp1024 \\sbasedon0 \\snext19 header;}{\\s20\\ql \\li0\\ri0"
	"\\nowidctlpar\\noline\\tqc\\tx4818\\tqr\\tx9637\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0"
	"\\lin0\\itap0 \\fs24\\lang1033\\langfe1024\\loch\\f147\\hich\\af147\\dbch\\af147\\cgrid\\langnp1033"
	"\\langfenp1024 \\sbasedon0 \\snext20 footer;}{\\s21\\ql \\li0\\ri0\\sa120\\nowidctlpar\\noline"
	"\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\fs24\\lang1033\\langfe1024\\loch"
	"\\f147\\hich\\af147\\dbch\\af147\\cgrid\\langnp1033\\langfenp1024 \\sbasedon15 "
	"\\snext21 Tabellen Inhalt;}{\\s22\\qc \\li0\\ri0\\sa120\\nowidctlpar\\noline\\hyphpar0\\aspnum"
	"\\faauto\\adjustright\\rin0\\lin0\\itap0 \\b\i\\fs24\\lang1033\\langfe1024\\loch\\f147\\hich\\af147"
	"\\dbch\\af147\\cgrid\\langnp1033\\langfenp1024 \\sbasedon21 \\snext22 Tabellen \\'dcberschrift;}}"
	"\\paperw11905\\paperh16837\\margl1134\\margr1134\\margt2000\\margb2000 \\widowctrl\\ftntj\\aenddoc"
	"\\noxlattoyen\\expshrtn\\noultrlspc\\dntblnsbdb\\nospaceforul\\formshade\\horzdoc\\dghspace0"
	"\\dgvspace0\\dghorigin0\\dgvorigin0\\dghshow0\\dgvshow0\\jexpand\\jsksu\\viewkind1\\viewscale100"
	"\\pgbrdrhead\\pgbrdrfoot\\splytwnine\\ftnlytwnine\\htmautsp\\nolnhtadjtbl\\useltbaln\\alntblind"
	"\\lytcalctblwd\\lyttblrtgr\\lnbrkrule \\fet0\\sectd \\linex0\\headery1134\\footery1134\\endnhere"
	"\\sectdefaultcl \n");


    printf("{\\header \\pard\\plain\\s19\\ql \\li0\\ri0\\nowidctlpar\\noline\\tqc\\tx4818\\tqr\\tx9637"
	"\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\fs24\\lang1033\\langfe1024\\loch"
	"\\af147\\hich\\af147\\dbch\\af147\\cgrid\\langnp1033\\langfenp1024 {\\loch\\af0\\hich\\af0\\dbch\\af0"  
	" Partlist exported from %s at %s \\par}}",
           convert(B.name), t2string(time()));
    
    printf("{\\footer \\pard\\plain \\s20\\ql \\li0\\ri0\\nowidctlpar\\noline\\tqc\\tx4818\\tqr\\tx9637"
	"\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\fs24\\lang1033\\langfe1024\\loch"
	"\\af147\\hich\\af147\\dbch\\af147\\cgrid\\langnp1033\\langfenp1024 {\\f0 \\hich\\af0\\dbch\\af147"
	"\\loch\\f0 Seite }{\\field{\\*\\fldinst {\\f0 \\hich\\af0\\dbch\\af147\\loch\\f0  \\hich\\af0"
	"\\dbch\\af147\\loch\\f0 PAGE\\hich\\af0\\dbch\\af147\\loch\\f0  \\\\*\\hich\\af0\\dbch\\af147"
	"\\loch\\f0 \\*ARABIC\\hich\\af0\\dbch\\af147\\loch\\f0  }}{\\fldrslt 1{\\f0\\lang1024\\langfe1024"
	"\\noproof\\hich\\af0\\dbch\\af147\\loch\\f0 1}}}");
    
    printf("{\\par }}{\\*\\pnseclvl1\\pnucrm\\pnstart1\\pnindent720\\pnhang{\\pntxta .}}{\\*\\pnseclvl2"
	"\\pnucltr\\pnstart1\\pnindent720\\pnhang{\\pntxta .}}{\\*\\pnseclvl3\\pndec\\pnstart1\\pnindent720"
	"\\pnhang{\\pntxta .}}{\\*\\pnseclvl4\\pnlcltr\\pnstart1\\pnindent720\\pnhang{\\pntxta )}}"
	"{\\*\\pnseclvl5\\pndec\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl6"
	"\\pnlcltr\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl7\\pnlcrm\\pnstart1"
	"\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl8\\pnlcltr\\pnstart1\\pnindent720"
	"\\pnhang{\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl9\\pnlcrm\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}"
	"{\\pntxta )}}");

    printf("\\trowd \\trhdr \\trftsWidth1 \\clvertalt\\clbrdrt\\brdrs\\brdrw2\\brdrcf1 \\clbrdrl\\brdrs"
	"\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2\\brdrcf1 \\clcfpat8"
	"\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth1085 \\cellx1085\\clvertalt\\clbrdrt\\brdrs\\brdrw2"
	"\\brdrcf1 \\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2\\brdrcf1" 
	"\\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth1946 \\cellx3031\\clvertalt\\clbrdrt\\brdrs"
	"\\brdrw2\\brdrcf1 \\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2"
	"\\brdrcf1 \\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth1545 \\cellx4576\\clvertalt"
	"\\clbrdrt\\brdrs\\brdrw2\\brdrcf1 \\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr"
	"\\brdrs\\brdrw2\\brdrcf1 \\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth5061 \\cellx9637"
	"\\pard\\plain\\qc \\li0\\ri0\\nowidctlpar\\intbl\\hyphpar0"
	"\\aspnum\\faauto\\adjustright\\rin0\\lin0"
	"\\fs24\\lang1033\\langfe1024\\loch\\af147\\hich\\af147\\dbch\\af147\\cgrid\\langnp1033\\langfenp1024"
	"{\\b\\f0 \\hich\\af0\\dbch\\af147\\loch\\f0 Part"
	"\\cell \\hich\\af0\\dbch\\af147\\loch\\f0 Value"
	"\\cell\\hich\\af0\\dbch\\af147\\loch\\f0 Package\\cell \\hich\\af0\\dbch\\af147\\loch\\f0 Comments"
	"\\cell }\\pard \\ql \\li0\\ri0\\nowidctlpar\\intbl\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0"
	"{\\loch\\af0\\hich\\af0\\dbch\\af0 \\trowd \\trhdr\\trftsWidth1 \\clvertalt\\clbrdrt\\brdrs\\brdrw2"
	"\\brdrcf1 \\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs"
	"\\brdrw2\\brdrcf1 \\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth1085 \\cellx1085\\clvertalt"
	"\\clbrdrt\\brdrs\\brdrw2\\brdrcf1 \\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr"
	"\\brdrs\\brdrw2\\brdrcf1 \\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth1946 \\cellx3031"
	"\\clvertalt\\clbrdrt\\brdrs\\brdrw2\\brdrcf1 \\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2\\brdrcf1"
	"\\clbrdrr\\brdrs\\brdrw2\\brdrcf1\\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth1545 "
	"\\cellx4576\\clvertalt\\clbrdrt\\brdrs\\brdrw2\\brdrcf1 \\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2"
	"\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2\\brdrcf1 \\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth5061"
	"\\cellx9637\\row}");
 printf("\\trowd \\trrh360\\trftsWidth1 \\clvertalt\\clbrdrt\\brdrnone \\clbrdrl\\brdrs"
	"\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3"
	"\\clwWidth1085 \\cellx1085\\clvertalt\\clbrdrt\\brdrnone \\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb"
	"\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3\\clwWidth1946 \\cellx3031"
	"\\clvertalt\\clbrdrt\\brdrnone \\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1"
	"\\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3\\clwWidth1545 \\cellx4576\\clvertalt\\clbrdrt\\brdrnone"
	"\\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2"
	"\\brdrcf1 \\cltxlrtb\\clftsWidth3\\clwWidth5061 \\cellx9637");
    
    numeric string ename[], evalue[], pname[];
    int cnt = 0, index[];

    B.elements(E)
      {
      ename[cnt] = E.name;
      evalue[cnt] = E.value;
      pname[cnt] = E.package.name;
      cnt++;
      }
    sort(cnt, index, ename);
    for (int i = 0; i < cnt-1; i++)
      {PartLine(ename[index[i]], evalue[index[i]], pname[index[i]]);}
	
    PartLine(ename[index[i]], evalue[index[i]], pname[index[i]]);
    string lastvalue = "? ? ?", lastpack = "? ? ?", parts = "";
    
    
    printf("\\pard \\ql \\li0\\ri0\\nowidctlpar\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0"
	"{\\line \\sect }\\sectd \\linex0\\headery1134\\footery1134\\endnhere\\sectdefaultcl {\\header\\pard"
	"\\plain\\s19\\ql \\li0\\ri0\\nowidctlpar\\noline\\tqc\\tx4818\\tqr\\tx9637\\hyphpar0\\aspnum\\faauto"
	"\\adjustright\\rin0\\lin0\\itap0 \\fs24\\lang1033\\langfe1024\\loch\\af147\\hich\\af147\\dbch\\af147"
	"\\cgrid\\langnp1033\\langfenp1024 {\\loch\\af0\\hich\\af0\\dbch\\af0" 
	" Bill of materials exported from %s at %s \\par }}\n", convert(B.name), t2string(time()));


    printf("{\\footer \\pard\\plain \\s20\\ql \\li0\\ri0\\nowidctlpar\\noline\\tqc\\tx4818\\tqr\\tx9637"
	"\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 \\fs24\\lang1033\\langfe1024\\loch\\af147"
	"\\hich\\af147\\dbch\\af147\\cgrid\\langnp1033\\langfenp1024 {\\f0 \\hich\\af0\\dbch\\af147\\loch\\f0"
	" Seite }{\\field{\\*\\fldinst {\\f0 \\hich\\af0\\dbch\\af147\\loch\\f0  \\hich\\af0\\dbch\\af147"
	"\\loch\\f0 PAGE\\hich\\af0\\dbch\\af147\\loch\\f0  \\\\*\\hich\\af0\\dbch\\af147\\loch\\f0 \\*ARABIC"
	"\\hich\\af0\\dbch\\af147\\loch\\f0  }}{\\fldrslt {\\f0\\lang1024\\langfe1024\\noproof\\hich\\af0"
	"\\dbch\\af147\\loch\\f0 2}}}{\\par }}");

  printf("\\trowd \\trhdr\\trftsWidth1 \\clvertalt\\clbrdrt\\brdrs\\brdrw2\\brdrcf1 \\clbrdrl\\brdrs\\brdrw2"
	"\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2\\brdrcf1 \\clcfpat8\\clcbpat16"
	"\\cltxlrtb\\clftsWidth3\\clwWidth1085 \\cellx1085\\clvertalt\\clbrdrt\\brdrs\\brdrw2\\brdrcf1"
	"\\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2\\brdrcf1 \\clcfpat8"
	"\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth1946 \\cellx3031\\clvertalt\\clbrdrt\\brdrs\\brdrw2"
	"\\brdrcf1 \\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2\\brdrcf1\\clbrdrr\\brdrs\\brdrw2\\brdrcf1"
	"\\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth1545 \\cellx4576\\clvertalt\\clbrdrt\\brdrs"
	"\\brdrw2\\brdrcf1 \\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2"
	"\\brdrcf1\\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth5061 \\cellx9637\\pard\\plain \\qc"
	"\\li0\\ri0\\nowidctlpar\\intbl\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0 \\fs24\\lang1033"
	"\\langfe1024\\loch\\af147\\hich\\af147\\dbch\\af147\\cgrid\\langnp1033\\langfenp1024 {\\b\\f0" 
	"\\hich\\af0\\dbch\\af147\\loch\\f0 Qty\\cell"
	"\\hich\\af0\\dbch\\af147\\loch\\f0 Value\\cell"
	"\\hich\\af0\\dbch\\af147\\loch\\f0 Package\\cell"
	"\\hich\\af0\\dbch\\af147\\loch\\f0 Parts\\cell}"
	"\\pard \\ql \\li0\\ri0\\nowidctlpar\\intbl\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0"
	"{\\loch\\af0\\hich\\af0\\dbch\\af0 \\trowd \\trhdr\\trftsWidth1 \\clvertalt\\clbrdrt\\brdrs\\brdrw2"
	"\\brdrcf1 \\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs"
	"\\brdrw2\\brdrcf1 \\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth1085 \\cellx1085\\clvertalt"
	"\\clbrdrt\\brdrs\\brdrw2\\brdrcf1 \\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr"
	"\\brdrs\\brdrw2\\brdrcf1 \\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth1946 \\cellx3031"
	"\\clvertalt\\clbrdrt\\brdrs\\brdrw2\\brdrcf1 \\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2\\brdrcf1"
	"\\clbrdrr\\brdrs\\brdrw2\\brdrcf1\\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth1545 "
	"\\cellx4576\\clvertalt\\clbrdrt\\brdrs\\brdrw2\\brdrcf1 \\clbrdrl\\brdrnone \\clbrdrb\\brdrs\\brdrw2"
	"\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2\\brdrcf1 \\clcfpat8\\clcbpat16\\cltxlrtb\\clftsWidth3\\clwWidth5061"
	"\\cellx9637\\row}");
printf("\\trowd \\trrh360\\trftsWidth1 \\clvertalt\\clbrdrt\\brdrnone \\clbrdrl\\brdrs"
	"\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3"
	"\\clwWidth1085 \\cellx1085\\clvertalt\\clbrdrt\\brdrnone \\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb"
	"\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3\\clwWidth1946 \\cellx3031"
	"\\clvertalt\\clbrdrt\\brdrnone \\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1"
	"\\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3\\clwWidth1545 \\cellx4576\\clvertalt\\clbrdrt\\brdrnone"
	"\\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2"
	"\\brdrcf1 \\cltxlrtb\\clftsWidth3\\clwWidth5061 \\cellx9637");

    sort(cnt, index, evalue, pname, ename);
    int z = 0;
    int quantity = 0;    
    for (int n = 0; n < cnt; n++)
      {
      
      int i = index[n];
      if ((lastvalue != evalue[i]) || (lastpack != pname[i]))
        {
        
	lastvalue = evalue[i];
        lastpack = pname[i];
        quantity = 1;
        for (int j = n + 1; j < cnt && (lastvalue == evalue[index[j]]) &&
             (lastpack == pname[index[j]]); ++j)
           ++quantity;
	z = 0;   
	
	string buf;
	
        sprintf(buf, "%d", quantity);
        ValueLine(buf, evalue[i], pname[i]);
	printf("{\\loch\\af0\\hich\\af0\\dbch\\af0 ");
	printf(ename[i]);
	
        z++;
	}
      else
        {
        printf(", "); 
	printf(ename[i]);
	z++;
	
	}
	
	if (quantity == z) {printf("\\cell}");
   printf("\\pard \\ql \\li0\\ri0\\nowidctlpar\\intbl"
	"\\hyphpar0\\aspnum\\faauto\\adjustright\\rin0\\lin0"
	"{\\loch\\af0\\hich\\af0\\dbch\\af0\\trowd \\trrh360\\trftsWidth1 \\clvertalt\\clbrdrt\\brdrnone"
	"\\clbrdrl\\brdrs"
	"\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3"
	"\\clwWidth1085 \\cellx1085\\clvertalt\\clbrdrt\\brdrnone \\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb"
	"\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3\\clwWidth1946 \\cellx3031"
	"\\clvertalt\\clbrdrt\\brdrnone \\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1"
	"\\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3\\clwWidth1545 \\cellx4576\\clvertalt\\clbrdrt\\brdrnone"
	"\\clbrdrl\\brdrs\\brdrw2\\brdrcf1 \\clbrdrb\\brdrs\\brdrw2\\brdrcf1 \\clbrdrr\\brdrs\\brdrw2"
	"\\brdrcf1 \\cltxlrtb\\clftsWidth3\\clwWidth5061 \\cellx9637\\row }");}	   
      
	}
    printf("\\pard\\ql \\li0\\ri0\\nowidctlpar\\hyphpar0"
	"\\aspnum\\faauto\\adjustright\\rin0\\lin0\\itap0 {\\par }}");
    }
  }

