unix.cxx
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:22k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /* 
  2.  * unix.cxx
  3.  * 
  4.  * Resource compiler unix code generator
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: unix.cxx,v $
  30.  * Revision 1.13  1998/12/21 08:02:14  robertj
  31.  * New directory structure
  32.  *
  33.  * Revision 1.12  1998/10/16 13:56:58  robertj
  34.  * Changed resource output files to be the same as for Windows.
  35.  * Removed warning on unused parameter.
  36.  *
  37.  * Revision 1.11  1998/09/26 01:24:21  robertj
  38.  * Added open source license
  39.  *
  40.  * Revision 1.10  1998/09/26 00:41:29  robertj
  41.  * Fixed name space conflict with type Cursor.
  42.  * Fixed innumerable scoping problems in for loops.
  43.  * Fixed triadic operator type mismatch problem.
  44.  *
  45.  * Revision 1.9  1996/04/19 13:24:07  craigs
  46.  * Version before big cleanup
  47.  *
  48.  * Revision 1.8  1995/08/24 12:53:58  robertj
  49.  * Added general control type for arbitrary dialog controls.
  50.  * Added output file extension variable.
  51.  *
  52.  * Revision 1.2  1995/08/04 06:23:12  robertj
  53.  * *** empty log message ***
  54.  *
  55.  * Revision 1.6  1994/12/31 23:27:15  robertj
  56.  * Many changes
  57.  *
  58.  * Revision 1.5  1994/12/05  11:35:31  robertj
  59.  * Update.
  60.  * 
  61. // Revision 1.1  1993/06/24  19:23:17  craigs 
  62. // Initial revision 
  63. // 
  64.  */ 
  65.  
  66. #pragma implementation "pwrc.h" 
  67. #pragma implementation "keycode.h" 
  68.  
  69. #include <fstream.h> 
  70.  
  71. #include "ptlib.h" 
  72.  
  73. #include "pwrc.h" 
  74. #include "pwlib/stdresid.h" 
  75.  
  76. #include <iomanip.h> 
  77.  
  78. PString OutputExtension(".res.cxx"); 
  79. PString CxxExtension(".cxx"); 
  80.  
  81. static PString Indent; 
  82.  
  83. static BOOL hack_dialog_initialiser_flag; 
  84. static int hack_dialog_id = -1; 
  85.  
  86. static BOOL hack_accel_flag; 
  87.  
  88. static const PString NullString = "NULL";
  89. #define OUTPUTSTRING(s) ((s).IsEmpty() ? NullString : (s))  
  90.  
  91.  
  92. /////////////////////////////////////////////////////////////// 
  93. // 
  94. //  StringDict::PrintOn 
  95. // 
  96.  
  97. void StringDict::PrintOn(ostream & out) const 
  98.   out << "nn//n//  String Resourcesn//nn" 
  99.       << "static PXResource StringResources[] = {n"; 
  100.  
  101.   PINDEX i;
  102.   for (i = 0; i < GetSize(); i++) { 
  103.     int id = GetDataAt (i).GetID(); 
  104.     out << "  { " 
  105.         << id 
  106.         << ", " 
  107.         << GetDataAt (i).GetLiteralText() 
  108.         << " },n"; 
  109.   } 
  110.  
  111.   out << "  { -1, NULL }n};n"; 
  112.  
  113.  
  114. /////////////////////////////////////////////////////////////// 
  115. // 
  116. //  MenuItem::PrintOn 
  117. // 
  118.  
  119.  
  120. void MenuItem::PrintOn(ostream & out) const 
  121.  
  122.   if (!hack_accel_flag) 
  123.     out << Indent << "{ " 
  124.                << "PXMenuResource::Item, "  
  125.                << textLiteral 
  126.                << ", " 
  127.                << id 
  128.                << " },n"; 
  129.   else { 
  130.     PINDEX i;
  131.     for (i = 0; i < accel.GetSize(); i++) 
  132.       out << "  { " 
  133.           << id 
  134.           << ", (PKeyCode::Value)" 
  135.           << accel[i].GetValue() 
  136.           << ", " 
  137.           << accel[i].GetModifiers() 
  138.           << "},n"; 
  139.   } 
  140.  
  141.  
  142. /////////////////////////////////////////////////////////////// 
  143. // 
  144. //  Separator::PrintOn 
  145. // 
  146.  
  147. void Separator::PrintOn(ostream & out) const 
  148.  
  149.   if (!hack_accel_flag) 
  150.     out << Indent << "{ PXMenuResource::Separator },n"; 
  151.  
  152.  
  153. /////////////////////////////////////////////////////////////// 
  154. // 
  155. //  Menu::PrintOn 
  156. // 
  157.  
  158. void Menu::PrintOn(ostream & out) const 
  159.  
  160.   PINDEX i; 
  161.  
  162.   if (!hack_accel_flag) 
  163.     out << Indent << "{ PXMenuResource::SubMenu, " << textLiteral << " },n"; 
  164.  
  165.   Indent += "  "; 
  166.  
  167.   // 
  168.   // output items 
  169.   // 
  170.   for (i = 0; i < items.GetSize(); i++)  
  171.     out << items [i]; 
  172.  
  173.   Indent = Indent.Left(Indent.GetLength()-2); 
  174.  
  175.   // 
  176.   // output end of menu 
  177.   // 
  178.   if (!hack_accel_flag) 
  179.     out << Indent << "{ PXMenuResource::EndMenu },n"; 
  180.  
  181.  
  182. /////////////////////////////////////////////////////////////// 
  183. // 
  184. //  Menubar::PrintOn 
  185. // 
  186.  
  187. void MenuBar::PrintOn(ostream & out) const 
  188.  
  189.   // 
  190.   // output header for menubar 
  191.   // 
  192.   if (!hack_accel_flag) 
  193.     out << "nnstatic PXMenuResource PXMenuBar" << id << "[] = {n" 
  194.         << "  { PXMenuResource::MenuBar },n"; 
  195.   else 
  196.     out << "nnstatic PXAcceleratorResource PXAccel" << id << "[] = {n"; 
  197.  
  198.   Indent = "  "; 
  199.  
  200.   // 
  201.   // output data for menubar 
  202.   // 
  203.   PINDEX i; 
  204.   for (i = 0; i < menus.GetSize(); i++)  
  205.     out << menus [i]; 
  206.  
  207.   // 
  208.   // output trailer for menubar 
  209.   // 
  210.   if (!hack_accel_flag) 
  211.     out << "n { PXMenuResource::EndBar }n};nn"; 
  212.   else 
  213.     out << "  { -1, (PKeyCode::Value)0, 0 }n};nn"; 
  214.  
  215.  
  216. /////////////////////////////////////////////////////////////// 
  217. // 
  218. //  MenubarDict::PrintOn 
  219. // 
  220.  
  221. void MenubarDict::PrintOn(ostream & out) const 
  222.  
  223.   if (!hack_accel_flag) 
  224.     out << "nn//n// Menubar resourcesn//"; 
  225.   else 
  226.     out << "nn//n// Accelerator resourcesn//"; 
  227.  
  228.   //  output each of the menubars 
  229.   PINDEX i;
  230.   for (i = 0; i < GetSize(); i++) 
  231.     out << GetDataAt (i); 
  232.  
  233.   if (!hack_accel_flag) { 
  234.     //  output list of menubars 
  235.     out << "nnstatic PXResource MenuBarResources[] = {n"; 
  236.     for (i = 0; i < GetSize(); i++) { 
  237.       int id = GetDataAt (i).GetID(); 
  238.       out << "  { " << id << ", &PXMenuBar" << id << " },n"; 
  239.     } 
  240.   } else { 
  241.     //  output list of accelerators 
  242.     out << "nnstatic PXResource AcceleratorResources[] = {n"; 
  243.     for (i = 0; i < GetSize(); i++) { 
  244.       int id = GetDataAt (i).GetID(); 
  245.       out << "  { " << id << ", &PXAccel" << id << " },n"; 
  246.     } 
  247.   } 
  248.   out << "  { -1, NULL }n};n"; 
  249.  
  250.  
  251. /////////////////////////////////////////////////////////////// 
  252. // 
  253. //  output routines for various control types 
  254. // 
  255.  
  256. void Point::PrintOn(ostream & out) const 
  257.   out << ", " << x << ',' << y; 
  258.  
  259.  
  260. void Control::PrintOn(ostream & out) const 
  261.   out << pos << dim << ", "  
  262.              << OUTPUTSTRING(textLiteral) 
  263.              << ", "
  264.              << OUTPUTSTRING(balloonHelp) 
  265.              << ", " << id; 
  266.  
  267.  
  268. void PushButton::PrintOn(ostream & out) const 
  269.   if (hack_dialog_initialiser_flag) 
  270.     return;
  271.  
  272.   out << "  { PXDialogResource::PushButton"; 
  273.   Control::PrintOn(out); 
  274.   out << ", 0x" << setbase(16) << options << setbase(10);
  275.   out << " },n"; 
  276.  
  277. #if 0 
  278. ostream & DefPushButton::PrintOn(ostream & out) const 
  279.   if (hack_dialog_initialiser_flag) 
  280.     return;
  281.  
  282.   out << "  { PXDialogResource::DefPushButton"; 
  283.   Control::PrintOn(out); 
  284.   out << " },n"; 
  285. #endif 
  286.  
  287.  
  288. void CheckBox::PrintOn(ostream & out) const 
  289.   if (hack_dialog_initialiser_flag) 
  290.     return;
  291.  
  292.   out << "  { PXDialogResource::CheckBox"; 
  293.   Control::PrintOn(out); 
  294.   out << " },n"; 
  295.  
  296.  
  297. void Check3Way::PrintOn(ostream & out) const 
  298.   if (hack_dialog_initialiser_flag) 
  299.     return;
  300.  
  301.   out << "  { PXDialogResource::Check3Way"; 
  302.   Control::PrintOn(out); 
  303.   out << " },n"; 
  304.  
  305.  
  306. void RadioButton::PrintOn(ostream & out) const 
  307.   if (hack_dialog_initialiser_flag) 
  308.     return;
  309.  
  310.   out << "  { PXDialogResource::RadioButton"; 
  311.   Control::PrintOn(out); 
  312.   out << " },n"; 
  313.  
  314.  
  315. void LeftText::PrintOn(ostream & out) const 
  316.   if (hack_dialog_initialiser_flag) 
  317.     return;
  318.  
  319.   out << "  { PXDialogResource::LeftText"; 
  320.   Control::PrintOn(out); 
  321.   out << " },n"; 
  322.  
  323.  
  324. void CentreText::PrintOn(ostream & out) const 
  325.   if (hack_dialog_initialiser_flag) 
  326.     return;
  327.  
  328.   out << "  { PXDialogResource::CentreText"; 
  329.   Control::PrintOn(out); 
  330.   out << " },n"; 
  331.  
  332.  
  333. void RightText::PrintOn(ostream & out) const 
  334.   if (hack_dialog_initialiser_flag) 
  335.     return;
  336.  
  337.   out << "  { PXDialogResource::RightText"; 
  338.   Control::PrintOn(out); 
  339.   out << " },n"; 
  340.  
  341.  
  342. void StaticBox::PrintOn(ostream & out) const 
  343.   if (hack_dialog_initialiser_flag) 
  344.     return;
  345.  
  346.   out << "  { PXDialogResource::StaticBox"; 
  347.   Control::PrintOn(out); 
  348.   out << " },n"; 
  349.  
  350.  
  351. void EditBox::PrintOn(ostream & out) const 
  352.   if (hack_dialog_initialiser_flag) 
  353.     return;
  354.  
  355.   out << "  { PXDialogResource::EditBox"; 
  356.   Control::PrintOn(out); 
  357.   out << " },n"; 
  358.  
  359. void Password::PrintOn(ostream & out) const 
  360.   if (hack_dialog_initialiser_flag) 
  361.     return;
  362.  
  363.   out << "  { PXDialogResource::Password"; 
  364.   Control::PrintOn(out); 
  365.   out << " },n"; 
  366.  
  367.  
  368. void IntEditBox::PrintOn(ostream & out) const 
  369.   if (hack_dialog_initialiser_flag) 
  370.     return;
  371.  
  372.   out << "  { PXDialogResource::IntEditBox"; 
  373.   Control::PrintOn(out); 
  374.   out << " },n"; 
  375.  
  376.  
  377. void FloatEditBox::PrintOn(ostream & out) const 
  378.   if (hack_dialog_initialiser_flag) 
  379.     return;
  380.  
  381.   out << "  { PXDialogResource::FloatEditBox"; 
  382.   Control::PrintOn(out); 
  383.   out << " },n"; 
  384.  
  385.  
  386. void TextEditor::PrintOn(ostream & out) const 
  387.   if (hack_dialog_initialiser_flag) 
  388.     return;
  389.  
  390.   out << "  { PXDialogResource::TextEditor"; 
  391.   Control::PrintOn(out); 
  392.   out << " },n"; 
  393. void ListControl::PrintOn(ostream &) const
  394. {
  395. }
  396. static void PrintStringList (ostream & out, const PString & name, const PStringList & strList) 
  397.  
  398.   if (strList.GetSize() == 0) 
  399.     return; 
  400.   out << "static char *" 
  401.       << name 
  402.       << "[] = {n"; 
  403.   PINDEX i;
  404.   for (i = 0; i < strList.GetSize(); i++) 
  405.     out << "  " << strList[i] << ",n"; 
  406.   out << "  NULL };n"; 
  407.  
  408.  
  409. void ChoiceBox::PrintOn(ostream & out) const 
  410.   if (hack_dialog_initialiser_flag) {
  411.     if (strList.GetSize() == 0) 
  412.       return;
  413.     out << "nn//n" 
  414.         << "//  Initialiser list for choice box in dialog " << hack_dialog_id << "n" 
  415.         << "//nn"; 
  416.     char buff[20]; 
  417.     sprintf(buff, "%i_%i", hack_dialog_id, id); 
  418.     PrintStringList(out, 
  419.                     PString("ChoiceBoxInit_") + buff, 
  420.                     strList); 
  421.     return;
  422.   } 
  423.   out << "  { PXDialogResource::ChoiceBox"; 
  424.   Control::PrintOn(out); 
  425.   out << ", 0x" << setbase(16) << options << setbase(10);
  426.   if (strList.GetSize() != 0) 
  427.     out << ", ChoiceBoxInit_" << hack_dialog_id << "_" << id; 
  428.   out << " },n"; 
  429.  
  430. void ListBox::PrintOn(ostream & out) const 
  431.   if (hack_dialog_initialiser_flag) { 
  432.     if (strList.GetSize() == 0) 
  433.       return;
  434.     out << "nn//n" 
  435.         << "//  Initialiser list for listbox " << id << " in dialog " << hack_dialog_id << "n" 
  436.         << "//nn"; 
  437.     char buff[20]; 
  438.     sprintf(buff, "%i_%i", hack_dialog_id, id); 
  439.     PrintStringList(out, 
  440.                     PString("ListBoxInit_") + buff, 
  441.                     strList); 
  442.     return;
  443.   } 
  444.  
  445.   out << "  { PXDialogResource::ListBox"; 
  446.   out << pos << dim << ", NULL, NULL, " << id; 
  447.   out << ", 0x" << setbase(16) << options << setbase(10); 
  448.   if (strList.GetSize() != 0) 
  449.     out << ", ListBoxInit_" << hack_dialog_id << "_" << id; 
  450.   out << " },n"; 
  451.  
  452.  
  453. void ComboBox::PrintOn(ostream & out) const 
  454.   if (hack_dialog_initialiser_flag) { 
  455.     if (strList.GetSize() == 0) 
  456.       return;
  457.     out << "nn//n" 
  458.         << "//  Initialiser list for combo box in dialog " << hack_dialog_id << "n" 
  459.         << "//nn"; 
  460.     char buff[20]; 
  461.     sprintf(buff, "%i_%i", hack_dialog_id, id); 
  462.     PrintStringList(out, 
  463.                     PString("ComboBoxInit_") + buff, 
  464.                     strList); 
  465.     return; 
  466.   } 
  467.  
  468.   out << "  { PXDialogResource::ComboBox"; 
  469.   Control::PrintOn(out); 
  470.   out << ", 0x" << setbase(16) << options << setbase(10);
  471.   if (strList.GetSize() != 0) 
  472.     out << ", ComboBoxInit_" << hack_dialog_id << "_" << id; 
  473.   out << " },n"; 
  474.  
  475.  
  476. void HScrollBar::PrintOn(ostream & out) const 
  477.   if (hack_dialog_initialiser_flag) 
  478.     return;
  479.  
  480.   out << "  { PXDialogResource::HScrollBar"; 
  481. //  Control::PrintOn(out); 
  482.   out << pos << dim << ", "  
  483.       << """
  484.       << minimum << " " << maximum << " " << smallNudge << " " << largeNudge
  485.       << """
  486.       << ", "
  487.       << OUTPUTSTRING(balloonHelp) 
  488.       << ", " << id; 
  489.   out << " },n"; 
  490.  
  491.  
  492. void VScrollBar::PrintOn(ostream & out) const 
  493.   if (hack_dialog_initialiser_flag) 
  494.     return;
  495.  
  496.   out << "  { PXDialogResource::VScrollBar"; 
  497. //  Control::PrintOn(out); 
  498.   out << pos << dim << ", "  
  499.       << """
  500.       << minimum << " " << maximum << " " << smallNudge << " " << largeNudge
  501.       << """
  502.       << ", "
  503.       << OUTPUTSTRING(balloonHelp) 
  504.       << ", "
  505.       << id; 
  506.   out << " },n"; 
  507.  
  508.  
  509. void StaticIcon::PrintOn(ostream & out) const 
  510.   if (hack_dialog_initialiser_flag) 
  511.     return;
  512.  
  513.   out << "  { PXDialogResource::StaticIcon"; 
  514.   Control::PrintOn(out); 
  515.   out << ", " << iconID << " },n"; 
  516. void UserControl::PrintOn(ostream & out) const 
  517.   if (hack_dialog_initialiser_flag) 
  518.     return;
  519.  
  520.   out << "  { PXDialogResource::UserControl"; 
  521.   Control::PrintOn(out); 
  522.   out << " },n"; 
  523.  
  524. /////////////////////////////////////////////////////////////// 
  525. // 
  526. //  Dialog::PrintOn 
  527. // 
  528.  
  529. void Layout::PrintOn(ostream & out) const 
  530.   // 
  531.   // set special hack flag to output list box initialisers 
  532.   // Oh the shame!! 
  533.   // 
  534.   hack_dialog_initialiser_flag = TRUE; 
  535.   hack_dialog_id = id; 
  536.  
  537.   PINDEX i;
  538.   for (i = 0; i < itemList.GetSize(); i++) 
  539.     out << itemList[i]; 
  540.  
  541.   hack_dialog_initialiser_flag = FALSE; 
  542.  
  543.   out << "nnstatic PXDialogResource PXDialog" << id << "[] = {n"  
  544.       << "  { PXDialogResource::DialogFrame, " 
  545.       << pos.X() << ", " << pos.Y() << ", "  
  546.       << dim.X() << ", " << dim.Y() << ", " 
  547.       << OUTPUTSTRING(textLiteral) << ", "  
  548.       << "NULL, "  
  549.       << id << ", " 
  550.       << fontSize << ", "  
  551.       << OUTPUTSTRING(fontName) << " },n"; 
  552.  
  553.   for (i = 0; i < itemList.GetSize(); i++) 
  554.     out << itemList[i]; 
  555.  
  556.   out << "  { PXDialogResource::EndItems }n};n"; 
  557.  
  558. /////////////////////////////////////////////////////////////// 
  559. // 
  560. //  DialogDict::PrintOn 
  561. // 
  562.  
  563. void DialogDict::PrintOn(ostream & out) const 
  564.  
  565.   out << "nn//n// Dialog Resourcesn//"; 
  566.  
  567.   //  output each of the dialogs 
  568.   PINDEX i;
  569.   for (i = 0; i < GetSize(); i++) 
  570.     out << GetDataAt (i); 
  571.  
  572.   //  output list of dialogs 
  573.   out << "nnstatic PXResource DialogResources[] = {n"; 
  574.   for (i = 0; i < GetSize(); i++) { 
  575.     int id = GetDataAt (i).GetID(); 
  576.     out << "  { " << id << ", &PXDialog" << id << "},n"; 
  577.   } 
  578.  
  579.   out << "  { -1, NULL }n};n"; 
  580.  
  581.  
  582. /////////////////////////////////////////////////////////////// 
  583. // 
  584. //  BinaryData::PrintOn 
  585. // 
  586.  
  587. void BinaryData::PrintOn(ostream & out) const 
  588.   out << "  "" << setbase(16) << setfill('0'); 
  589.   PINDEX i;
  590.   for (i = 0; i < GetSize(); i++) { 
  591.     out << "\x" << setw(2) << (theArray[i]&0xff); 
  592.     if (i != GetSize()-1 && (i%10) == 9) 
  593.       out << ""n  ""; 
  594.   } 
  595.   out << setfill(' ') << setbase(10) << '"'; 
  596.  
  597.  
  598. /////////////////////////////////////////////////////////////// 
  599. // 
  600. //  PixData::PrintOn 
  601. // 
  602.  
  603. void PixData::PrintOn(ostream & out) const 
  604.   out << "  "" << setbase(16) << setfill('0'); 
  605.   PINDEX i;
  606.   for (i = 0; i < GetSize(); i++) { 
  607.     out << "\x" << setw(2) << (theArray[i]&0xff); 
  608.     if (i != GetSize()-1 && (i%10) == 9) 
  609.       out << ""n  ""; 
  610.   } 
  611.   out << setfill(' ') << setbase(10) << '"'; 
  612.  
  613.  
  614. /////////////////////////////////////////////////////////////// 
  615. // 
  616. //  PixelContents::PrintOn 
  617. // 
  618.  
  619. void PixelContents::PrintOn(ostream & out) const 
  620.   out << "  " 
  621.       << width 
  622.       << ", " 
  623.       << height 
  624.       << ", " 
  625.       << depth 
  626.       << ", " 
  627.       << endl 
  628.       << endl; 
  629.  
  630.   out << "  // Clutn" 
  631.       << clut 
  632.       << ", " 
  633.       << endl 
  634.       << endl; 
  635.  
  636.   out << "  // Pixelsn" 
  637.       << pixels 
  638.       << ", " 
  639.       << endl 
  640.       << endl; 
  641.  
  642.   out << "  // AndMaskn" 
  643.       << andMask 
  644.       << ", " 
  645.       << endl 
  646.       << endl; 
  647.  
  648.   out << "  // XorMaskn" 
  649.       << xorMask 
  650.       << ", " 
  651.       << endl 
  652.       << endl; 
  653.  
  654.   out << "  // HotSpotn" 
  655.       << x  
  656.       << ", " 
  657.       << y 
  658.       << "nn"; 
  659.  
  660.  
  661. /////////////////////////////////////////////////////////////// 
  662. // 
  663. //  Icon::PrintOn 
  664. // 
  665.  
  666. void Icon::PrintOn(ostream & out) const 
  667.   out << "nnstatic PXPixelResource PXIcon"  
  668.       << id 
  669.       << " = {n  " 
  670.       << contents 
  671.       << "};n"; 
  672.  
  673.  
  674. /////////////////////////////////////////////////////////////// 
  675. // 
  676. //  IconDict::PrintOn 
  677. // 
  678.  
  679. void IconDict::PrintOn(ostream & out) const 
  680.   out << "nn//n// Icon Resourcesn//n"; 
  681.  
  682.   //  output each of the icons 
  683.   PINDEX i;
  684.   for (i = 0; i < GetSize(); i++) 
  685.     out << GetDataAt (i); 
  686.  
  687.   //  output list of icons 
  688.   out << "nnstatic PXResource IconResources[] = {n"; 
  689.   for (i = 0; i < GetSize(); i++) { 
  690.     int id = GetDataAt (i).GetID(); 
  691.     out << "  { " << id << ", &PXIcon" << id << "},n"; 
  692.   } 
  693.  
  694.   out << "  { -1, NULL }n};n"; 
  695.  
  696.  
  697. /////////////////////////////////////////////////////////////// 
  698. // 
  699. //  CursorResource::PrintOn 
  700. // 
  701.  
  702. void CursorResource::PrintOn(ostream & out) const 
  703.   out << "nnstatic PXPixelResource PXCursor"  
  704.       << id << " = {n" << contents << "};n"; 
  705.  
  706.  
  707. /////////////////////////////////////////////////////////////// 
  708. // 
  709. //  CursorDict::PrintOn 
  710. // 
  711.  
  712. void CursorDict::PrintOn(ostream & out) const 
  713.   out << "nn//n// Cursor Resourcesn//n"; 
  714.  
  715.   //  output each of the cursors 
  716.   PINDEX i;
  717.   for (i = 0; i < GetSize(); i++) 
  718.     out << GetDataAt (i); 
  719.  
  720.   //  output list of cursors 
  721.   out << "nnstatic PXResource CursorResources[] = {n"; 
  722.   for (i = 0; i < GetSize(); i++) { 
  723.     int id = GetDataAt (i).GetID(); 
  724.     out << "  { " << id << ", &PXCursor" << id << "},n"; 
  725.   } 
  726.  
  727.   out << "  { -1, NULL }n};n"; 
  728.  
  729.  
  730. /////////////////////////////////////////////////////////////// 
  731. // 
  732. //  Image::PrintOn 
  733. // 
  734.  
  735. void Image::PrintOn(ostream & out) const 
  736.   out << "nnstatic PXPixelResource PXImage"  
  737.              << id << " = {n  " 
  738.              << contents 
  739.              << "};n"; 
  740.  
  741.  
  742. /////////////////////////////////////////////////////////////// 
  743. // 
  744. //  ImageDict::PrintOn 
  745. // 
  746.  
  747. void ImageDict::PrintOn(ostream & out) const 
  748.   out << "nn//n// Image Resourcesn//n"; 
  749.  
  750.   //  output each of the images 
  751.   PINDEX i;
  752.   for (i = 0; i < GetSize(); i++) 
  753.     out << GetDataAt (i); 
  754.  
  755.   //  output list of image 
  756.   out << "nnstatic PXResource ImageResources[] = {n"; 
  757.   for (i = 0; i < GetSize(); i++) { 
  758.     int id = GetDataAt (i).GetID(); 
  759.     out << "  {" << id << ", &PXImage" << id << "},n"; 
  760.   } 
  761.  
  762.   out << "  { -1, NULL }n};n"; 
  763. /////////////////////////////////////////////////////////////// 
  764. // 
  765. //  Pattern::PrintOn 
  766. // 
  767.  
  768. void Pattern::PrintOn(ostream & out) const 
  769.   out << "nn//n// Pattern Resourcesn//n";
  770. //      << "nnstatic PXPixelResource PXImage"  
  771. //      << id << " = {n  " 
  772. //      << contents 
  773. //      << "};n"; 
  774.  
  775.  
  776. /////////////////////////////////////////////////////////////// 
  777. // 
  778. //  PatternDict::PrintOn 
  779. // 
  780.  
  781. void PatternDict::PrintOn(ostream & out) const 
  782.   out << "nn//n// Image Resourcesn//n"; 
  783.  
  784. //  //  output each of the images 
  785. //  for (PINDEX i = 0; i < GetSize(); i++) 
  786. //    out << GetDataAt (i); 
  787. // 
  788. //  //  output list of image 
  789. //  out << "nnstatic PXResource ImageResources[] = {n"; 
  790. //  for (i = 0; i < GetSize(); i++) { 
  791. //    int id = GetDataAt (i).GetID(); 
  792. //    out << "  {" << id << ", &PXImage" << id << "},n"; 
  793. //  } 
  794. // 
  795. //  out << "  { -1, NULL }n};n"; 
  796.  
  797. /////////////////////////////////////////////////////////////// 
  798. // 
  799. //  DataResource::PrintOn 
  800. // 
  801.  
  802. void DataResource::PrintOn(ostream & out) const 
  803.   static const PString DataString = ""DATA"";
  804.   out << (textConverted.IsEmpty() ? DataString : textLiteral) 
  805.              << ",n  " 
  806.              << data 
  807.              << "n"; 
  808.  
  809.  
  810. /////////////////////////////////////////////////////////////// 
  811. // 
  812. //  DataDict::PrintOn 
  813. // 
  814.  
  815. void DataDict::PrintOn(ostream & out) const 
  816.   // 
  817.   // output each data resource as a static constant array 
  818.   // 
  819.   PINDEX i;
  820.   for (i = 0; i < GetSize(); i++) { 
  821.     int id = GetDataAt (i).GetID(); 
  822.     out << "static PXDataResource DataResource" 
  823.         << id 
  824.         << " = {" 
  825.         << GetDataAt (i) 
  826.         << "};nn"; 
  827.   } 
  828.  
  829.   out << "nn//n// Arbitrary Data Resourcesn//n" 
  830.          "nnstatic PXResource DataResources[] = {n"; 
  831.  
  832.   for (i = 0; i < GetSize(); i++) { 
  833.     out << "  {  " << (int)GetKeyAt(i) << ", &DataResource" << (int) GetKeyAt (i) << "},n"; 
  834.   } 
  835.  
  836.   out << "  { -1, NULL }n};n"; 
  837.  
  838.  
  839. /////////////////////////////////////////////////////////////// 
  840. // 
  841. //  Backend 
  842. // 
  843.  
  844. void ResourceFile::Backend(PFile & out) 
  845.   hack_accel_flag = FALSE; 
  846.  
  847.   out << "//n// Resource file generated by Unix PWRCn//nn" 
  848.          "#include <pwlib.h>nn" 
  849.       << stringDict 
  850.       << menubarDict 
  851.       << dialogDict 
  852.       << iconDict 
  853.       << cursorDict 
  854.       << imageDict 
  855.       << dataDict; 
  856.  
  857.   hack_accel_flag = TRUE; 
  858.   out << menubarDict; 
  859.  
  860.   out << "nn" 
  861.       << "#ifndef PRESOURCESETNAMEn" 
  862.       << "#define PRESOURCESETNAME PXApplicationResourcesn" 
  863.       << "#endifnnn"; 
  864.  
  865.   out << "n//n//  list of resources for this programn//nn" 
  866.       << "PXResourceSet PRESOURCESETNAME = { {n" 
  867.       << "  StringResources,n" 
  868.       << "  MenuBarResources,n" 
  869.       << "  DialogResources,n" 
  870.       << "  IconResources,n" 
  871.       << "  CursorResources,n" 
  872.       << "  ImageResources,n" 
  873.       << "  DataResources,n" 
  874.       << "  AcceleratorResourcesn" 
  875.       << "} };n"; 
  876.  
  877.  
  878. /////////////////////////////////////////////////////////////// 
  879. // 
  880. //  Decompiler 
  881. // 
  882.  
  883. void Decompile(PFile &, PTextFile &) 
  884.   cerr << "The decompile facility is not available on Unix(tm) platforms.n"; 
  885.