This file contains patches for the example application of Jon Siegel's
book "CORBA Fundamentals and Programming". These patches are necessary
since the original sources use namespaces for module mapping, while
ORBacus maps modules to identifier prefixes (since most C++
compilers do not support namespaces yet).

To apply these patches you need the `patch' program. You can get
this program from many FTP server around the world. One location is:

   ftp://gnu.ai.mit.edu/pub/gnu/patch-2.5.tar.gz.

With this program, you can install the patches as follows:

1. Create a new directory with the name `book' and copy the content of
   the disk that comes with the book into that directory. Change to
   this directory with `cd book'.

2. Create a new directory `tarfiles/gencp' and extract the file
   `tarfiles/gencptar' into this directory. This can be done with the
   following commands:

   cd tarfiles
   mkdir gencp
   cd gencp
   tar xvf ../gencptar

3. Use the `patch' command to create the necessary changes to the
   sources:

   patch -p0 < <this file>

   <this file> stands for the full path name of this read-me file.

4. Set the environment variables `CXX', `CXXFLAGS', `AR', `ARFLAGS',
   `PRELINK', `PRELINKFLAGS' according to the instructions from the
   file `INSTALL'.

5. Check the file `make.cfg'. It is possible that you have to add
   special include and library paths to `INCLUDE' and `LIBRARY'. For
   example, if you have installed the ORBacus header files in
   `/ob/include' and the ORBacus library in `/ob/lib', you have to
   add `-I/ob/include' to `INCLUDE' and `-L/ob/lib' to `LIBRARY'. You
   may also have to add special libraries to `LIBRARY',
   e.g. `-lsocket' and `-lnsl' for Solaris.

6. Compile everything by typing `make'.

7. Change to the `bin' directory and start the application as
   described in the book.

The copyright notice of the orignal sources from the book is as
follows:

   Copyright (C) 1996 by the Object Management Group, Inc.  All
   rights reserved.  

   Permission to use, copy, modify, and distribute this software for
   any  teaching or instructional purpose and without fee is hereby
   granted, provided that the above copyright notice appear in all
   copies and that both that copyright notice and this permission
   notice appear in supporting documentation, and that the names of
   Object Management Group, Inc. (OMG) and John Wiley and Sons, Inc.
   (Wiley) not be used in advertising or publicity pertaining to
   distribution of the software without specific, written prior
   permission.

   THIS SOFTWARE IS SOLD AS IS WITHOUT WARRANTY OF ANY KIND, EITHER
   EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
   WARRANTY OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   PURPOSE.  Neither OMG, Wiley, nor their dealers or distributors
   assume any liability of any alleged or actual damages arising
   from the use of or the inability to use this software.  (Some
   states do not allow the exclusion of implied warranties, so the
   exclusion may not apply to you.)

----------------------------------------------------------------------
diff -cr --minimal ../siegel.orig/IDL/Makefile ./IDL/Makefile
*** ../siegel.orig/IDL/Makefile	Mon Oct 14 16:16:50 1996
--- ./IDL/Makefile	Tue Jan 14 15:54:54 1997
***************
*** 1,4 ****
! #include ../make.cfg
  
  SOURCE.idl = POS.idl \
               Store.idl \
--- 1,4 ----
! include ../make.cfg
  
  SOURCE.idl = POS.idl \
               Store.idl \
***************
*** 7,21 ****
  
  LIBRARY    = libidl.a
  
- INCLUDE    = -I.
- CFLAGS     = $(INCLUDE) -c -g
- CCFLAGS    = 
  # ---------------------------------------------------
  
  all debug profile optimize static: $(LIBRARY)
  
  $(LIBRARY): $(OBJECTS)
! 	$(CC) -xar -o $(LIBRARY) $(OBJECTS)
  
  clean:
  	$(RM) *.o ${LIBRARY} core
--- 7,21 ----
  
  LIBRARY    = libidl.a
  
  # ---------------------------------------------------
  
  all debug profile optimize static: $(LIBRARY)
  
  $(LIBRARY): $(OBJECTS)
! 	@if test -n "$(PRELINK)" ; then \
! 	    $(PRELINK) $(PRELINKFLAGS) $(OBJECTS) ; \
! 	fi
! 	$(AR) $(ARFLAGS) $(LIBRARY) $(OBJECTS)
  
  clean:
  	$(RM) *.o ${LIBRARY} core
diff -cr --minimal ../siegel.orig/Makefile ./Makefile
*** ../siegel.orig/Makefile	Mon Oct 14 16:16:47 1996
--- ./Makefile	Fri Oct 25 15:08:41 1996
***************
*** 1,7 ****
  all:
  	cd IDL; make all
  	cd PNS; make all
! 	cd utilities; make all
  	cd POS; make all
  	cd store; make all
  	cd central; make all
--- 1,7 ----
  all:
  	cd IDL; make all
  	cd PNS; make all
! 	cd util; make all
  	cd POS; make all
  	cd store; make all
  	cd central; make all
***************
*** 9,15 ****
  clean:
  	cd IDL; make clean
  	cd PNS; make clean
! 	cd utilities; make clean
  	cd POS; make clean
  	cd store; make clean
  	cd central; make clean
--- 9,15 ----
  clean:
  	cd IDL; make clean
  	cd PNS; make clean
! 	cd util; make clean
  	cd POS; make clean
  	cd store; make clean
  	cd central; make clean
diff -cr --minimal ../siegel.orig/PNS/Makefile ./PNS/Makefile
*** ../siegel.orig/PNS/Makefile	Mon Oct 14 16:16:51 1996
--- ./PNS/Makefile	Mon Nov 11 12:06:07 1996
***************
*** 2,16 ****
               PNSData.C \
               Srv_Main.C
  APPL = PNSServer
! INCLUDE = -I. -I../IDL 
! LIBRARY =  -L../IDL -lidl
! CFLAGS = -g -c $(INCLUDE)
! OTHEROBJS = 
  
  include ../make.cfg
  
  all $(APPL): $(OBJECTS)
! 	$(CC) -g -o $(APPL) $(OBJECTS) $(OTHEROBJS) $(LIBRARY)
  
  clean:
  	rm -f *.o ${DEPFILE} ${APPL} .make.state .nse_depinfo core
--- 2,13 ----
               PNSData.C \
               Srv_Main.C
  APPL = PNSServer
! OTHEROBJ =
  
  include ../make.cfg
  
  all $(APPL): $(OBJECTS)
! 	$(CXX) -o $(APPL) $(CXXFLAGS) $(OBJECTS) $(OTHEROBJ) $(LIBRARY)
  
  clean:
  	rm -f *.o ${DEPFILE} ${APPL} .make.state .nse_depinfo core
diff -cr --minimal ../siegel.orig/PNS/PNSData.C ./PNS/PNSData.C
*** ../siegel.orig/PNS/PNSData.C	Mon Oct 14 16:16:52 1996
--- ./PNS/PNSData.C	Tue Oct 15 11:58:23 1996
***************
*** 23,34 ****
  exclusion may not apply to you.)
  
  */
  #include "PNSData.h"
  #include <string.h>
  
  // Locate an item in the tree - returning the data contained within it
  
! unsigned char PNData::locate(const char *name, CORBA::Object_ptr &obj) {
    TreeNode *t;
    unsigned long status=locate_node(name,t);
    if (status)
--- 23,35 ----
  exclusion may not apply to you.)
  
  */
+ #include <OB/CORBA.h>
  #include "PNSData.h"
  #include <string.h>
  
  // Locate an item in the tree - returning the data contained within it
  
! unsigned char PNData::locate(const char *name, CORBA_Object_ptr &obj) {
    TreeNode *t;
    unsigned long status=locate_node(name,t);
    if (status)
***************
*** 40,46 ****
  // If the data was there already - replace the previous entry
  // otherwise returns the node off which it should be inserted
  
! void PNData::insert(const char *name, CORBA::Object_ptr obj) {
    TreeNode *temp;
    if (!locate_node(name,temp)) {
      TreeNode *new_node=new TreeNode;
--- 41,47 ----
  // If the data was there already - replace the previous entry
  // otherwise returns the node off which it should be inserted
  
! void PNData::insert(const char *name, CORBA_Object_ptr obj) {
    TreeNode *temp;
    if (!locate_node(name,temp)) {
      TreeNode *new_node=new TreeNode;
***************
*** 56,62 ****
        temp->m_right=new_node;
    }
    else {
!     CORBA::release(temp->m_item.obj);
      temp->m_item.obj=obj;
    }
  }
--- 57,63 ----
        temp->m_right=new_node;
    }
    else {
!     CORBA_release(temp->m_item.obj);
      temp->m_item.obj=obj;
    }
  }
diff -cr --minimal ../siegel.orig/PNS/PNSData.h ./PNS/PNSData.h
*** ../siegel.orig/PNS/PNSData.h	Mon Oct 14 16:16:52 1996
--- ./PNS/PNSData.h	Tue Oct 15 11:58:25 1996
***************
*** 29,35 ****
  #include <iostream.h>
  
  struct PNStruct {
!   CORBA::Object_var obj;
    char name[80];
  };
  
--- 29,35 ----
  #include <iostream.h>
  
  struct PNStruct {
!   CORBA_Object_var obj;
    char name[80];
  };
  
***************
*** 46,53 ****
    virtual unsigned char locate_node(const char *name, TreeNode * &ret_node);
  public:
    PNData() : m_root(0) {};
!   virtual unsigned char locate(const char *name,CORBA::Object_ptr &obj);
!   virtual void insert(const char *name, CORBA::Object_ptr obj);
  };
  
  #endif
--- 46,53 ----
    virtual unsigned char locate_node(const char *name, TreeNode * &ret_node);
  public:
    PNData() : m_root(0) {};
!   virtual unsigned char locate(const char *name,CORBA_Object_ptr &obj);
!   virtual void insert(const char *name, CORBA_Object_ptr obj);
  };
  
  #endif
diff -cr --minimal ../siegel.orig/PNS/PNS_i.C ./PNS/PNS_i.C
*** ../siegel.orig/PNS/PNS_i.C	Mon Oct 14 16:16:52 1996
--- ./PNS/PNS_i.C	Tue Oct 15 11:58:26 1996
***************
*** 23,39 ****
  exclusion may not apply to you.)
  
  */
  #include "PNS_i.h"
! #include "### Store interface header file"
  #include <fstream.h>
  
! pname_i::pname_i(CORBA::ORB_ptr orb)
  {
    ofstream os("PNS.dat");
    if (os) {
      char *refstring = orb->object_to_string( _this());
      os << refstring;
!     CORBA::string_free(refstring);
    }
    else {
      cerr << "Error writing Pseudo Name-Service object reference" << endl;
--- 23,40 ----
  exclusion may not apply to you.)
  
  */
+ #include <OB/CORBA.h>
  #include "PNS_i.h"
! #include "PNS_skel.h"
  #include <fstream.h>
  
! pname_i::pname_i(CORBA_ORB_ptr orb)
  {
    ofstream os("PNS.dat");
    if (os) {
      char *refstring = orb->object_to_string( _this());
      os << refstring;
!     CORBA_string_free(refstring);
    }
    else {
      cerr << "Error writing Pseudo Name-Service object reference" << endl;
***************
*** 41,59 ****
  }
  
  void pname_i:: BindName (const char * ObjectName,
! 		     CORBA::Object_ptr ObjectRef)
  {
    cerr << "pname_i::BindName - registering " << ObjectName << endl;
    m_data.insert(ObjectName,
!                 CORBA::Object::_duplicate(ObjectRef));
  }
  
! CORBA::Object_ptr pname_i:: ResolveName (const char * ObjectName)
  {
    cerr << "pname_i::ResolveName - looking up " << ObjectName << endl;
!   CORBA::Object_ptr p;
    if (m_data.locate(ObjectName,p))
!      return CORBA::Object::_duplicate(p);
    else
!      return CORBA::Object::_nil();
  }
--- 42,60 ----
  }
  
  void pname_i:: BindName (const char * ObjectName,
! 		     CORBA_Object_ptr ObjectRef)
  {
    cerr << "pname_i::BindName - registering " << ObjectName << endl;
    m_data.insert(ObjectName,
!                 CORBA_Object::_duplicate(ObjectRef));
  }
  
! CORBA_Object_ptr pname_i:: ResolveName (const char * ObjectName)
  {
    cerr << "pname_i::ResolveName - looking up " << ObjectName << endl;
!   CORBA_Object_ptr p;
    if (m_data.locate(ObjectName,p))
!      return CORBA_Object::_duplicate(p);
    else
!      return CORBA_Object::_nil();
  }
diff -cr --minimal ../siegel.orig/PNS/PNS_i.h ./PNS/PNS_i.h
*** ../siegel.orig/PNS/PNS_i.h	Mon Oct 14 16:16:53 1996
--- ./PNS/PNS_i.h	Tue Oct 15 11:58:28 1996
***************
*** 26,41 ****
  #ifndef PNAME_I_H 
  #define PNAME_I_H
  
! #include <### interface header file>
  #include "PNSData.h"
  
! class pname_i : public <### ORB specific base class> {
    PNData m_data;
  public:
!   pname_i(CORBA::ORB_ptr orb);
    virtual void              BindName (const char *      ObjectName,
!                                       CORBA::Object_ptr ObjectRef);
!   virtual CORBA::Object_ptr ResolveName (const char * ObjectName);
  };
  
  
--- 26,41 ----
  #ifndef PNAME_I_H 
  #define PNAME_I_H
  
! #include <PNS_skel.h>
  #include "PNSData.h"
  
! class pname_i : virtual public PseudoNameService_skel {
    PNData m_data;
  public:
!   pname_i(CORBA_ORB_ptr orb);
    virtual void              BindName (const char *      ObjectName,
!                                       CORBA_Object_ptr ObjectRef);
!   virtual CORBA_Object_ptr ResolveName (const char * ObjectName);
  };
  
  
diff -cr --minimal ../siegel.orig/PNS/Srv_Main.C ./PNS/Srv_Main.C
*** ../siegel.orig/PNS/Srv_Main.C	Mon Oct 14 16:16:53 1996
--- ./PNS/Srv_Main.C	Tue Oct 15 11:58:30 1996
***************
*** 23,48 ****
  exclusion may not apply to you.)
  
  */
  #include "PNS_i.h"
  #include <fstream.h>
  #include <stdio.h>
  
  int main(int argc, char* argv[])
  {
!    CORBA::ORB_ptr orb   = CORBA::ORB_init(argc,argv);
!    CORBA::BOA_ptr boa   = orb->BOA_init(argc,argv,"");
  
     try
  	{
        PseudoNameService_ptr PNS1 = new pname_i(orb);
!       boa->obj_is_ready(PNS1, nil);
  	}
     catch (...)
  	{
        cerr << "Error initializing PNS" << endl;
  	}
- 
-    cout <<"Pseudo Name Server up "<<endl;
  
     return 0;
  }
--- 23,48 ----
  exclusion may not apply to you.)
  
  */
+ #include <OB/CORBA.h>
  #include "PNS_i.h"
  #include <fstream.h>
  #include <stdio.h>
  
  int main(int argc, char* argv[])
  {
!    CORBA_ORB_ptr orb   = CORBA_ORB_init(argc,argv);
!    CORBA_BOA_ptr boa   = orb->BOA_init(argc,argv,"");
  
     try
  	{
        PseudoNameService_ptr PNS1 = new pname_i(orb);
!       cout <<"Pseudo Name Server up "<<endl;
!       boa->impl_is_ready(CORBA_ImplementationDef::_nil());
  	}
     catch (...)
  	{
        cerr << "Error initializing PNS" << endl;
  	}
  
     return 0;
  }
diff -cr --minimal ../siegel.orig/POS/Makefile ./POS/Makefile
*** ../siegel.orig/POS/Makefile	Mon Oct 14 16:16:53 1996
--- ./POS/Makefile	Mon Nov 11 12:06:08 1996
***************
*** 8,16 ****
  APPL2 = POSclt
  APP1OBJ = POS_Ter.o POS_OM.o POS_IM.o Srv_Main.o
  APP2OBJ = POS_Ter.o POS_OM.o POS_IM.o POSClt.o
- INCLUDE = -I. -I../IDL -I../central -I../util
- LIBRARY =  -L../IDL -lidl
- CFLAGS = -g -c $(INCLUDE)
  OTHEROBJ = ../util/FindPNS.o
  
  include ../make.cfg
--- 8,13 ----
***************
*** 18,27 ****
  all : $(APPL1) $(APPL2)
  
  $(APPL1): $(OBJECTS)
! 	$(CC) -g -o $(APPL1) $(APP1OBJ) $(OTHEROBJ) $(LIBRARY)
  
  $(APPL2): $(OBJECTS)
! 	$(CC) -g -o $(APPL2) $(APP2OBJ) $(OTHEROBJ) $(LIBRARY)
  
  clean:
  	rm -f *.o $(APPL1) $(APPL2) core .make.state .nse_depinfo
--- 15,24 ----
  all : $(APPL1) $(APPL2)
  
  $(APPL1): $(OBJECTS)
! 	$(CXX) -o $(APPL1) $(APP1OBJ) $(CXXFLAGS) $(OTHEROBJ) $(LIBRARY)
  
  $(APPL2): $(OBJECTS)
! 	$(CXX) -o $(APPL2) $(APP2OBJ) $(CXXFLAGS) $(OTHEROBJ) $(LIBRARY)
  
  clean:
  	rm -f *.o $(APPL1) $(APPL2) core .make.state .nse_depinfo
diff -cr --minimal ../siegel.orig/POS/POSClt.C ./POS/POSClt.C
*** ../siegel.orig/POS/POSClt.C	Mon Oct 14 16:16:54 1996
--- ./POS/POSClt.C	Tue Oct 15 11:58:34 1996
***************
*** 23,28 ****
--- 23,29 ----
  exclusion may not apply to you.)
  
  */
+ #include <OB/CORBA.h>
  #include "POS_IM.h"
  #include "POS_Ter.h"
  #include <FindPNS.h>
***************
*** 35,49 ****
      return 1;
    }
  
!   CORBA::ORB_ptr orb   = CORBA::ORB_init(argc,argv);
!   CORBA::BOA_ptr boa   = orb->BOA_init(argc,argv,"");
  
!   POS::POSTerminal_var  Ter;
    PseudoNameService_var pns;
    try {
      pns = FindPNS(orb);
      Ter = new POSTerminal_i(pns, argv[1], atol(argv[2]));
-     boa->obj_is_ready(Ter, nil);
    }
    catch(...) {
      cerr << "ERROR Starting POS Terminal Media" << endl;
--- 36,49 ----
      return 1;
    }
  
!   CORBA_ORB_ptr orb   = CORBA_ORB_init(argc,argv);
!   CORBA_BOA_ptr boa   = orb->BOA_init(argc,argv,"");
  
!   POS_POSTerminal_var  Ter;
    PseudoNameService_var pns;
    try {
      pns = FindPNS(orb);
      Ter = new POSTerminal_i(pns, argv[1], atol(argv[2]));
    }
    catch(...) {
      cerr << "ERROR Starting POS Terminal Media" << endl;
***************
*** 51,62 ****
    }
  
  
!   POS::InputMedia_var InPut;
    char caBuff[255];
  
    try {
      InPut = new InputMedia_i(Ter);
-     boa->obj_is_ready(InPut, nil);
    }
    catch(...) {
      cerr << "Error starting InputMedia" << endl;
--- 51,61 ----
    }
  
  
!   POS_InputMedia_var InPut;
    char caBuff[255];
  
    try {
      InPut = new InputMedia_i(Ter);
    }
    catch(...) {
      cerr << "Error starting InputMedia" << endl;
diff -cr --minimal ../siegel.orig/POS/POS_IM.C ./POS/POS_IM.C
*** ../siegel.orig/POS/POS_IM.C	Mon Oct 14 16:16:54 1996
--- ./POS/POS_IM.C	Tue Oct 15 11:58:36 1996
***************
*** 26,38 ****
  #include <iostream.h>
  #include <stdlib.h>
  #include <ctype.h>
! #include <### Store interface header file>
  #include "POS_IM.h"
  
! InputMedia_i::InputMedia_i(POS::POSTerminal_ptr pTer)
  {
     // we will comunicate with the following terminal
!    m_POSTerminalRef = POS::POSTerminal::_duplicate(pTer);
  }
  
  void  InputMedia_i:: BarcodeInput (const char * Item)
--- 26,39 ----
  #include <iostream.h>
  #include <stdlib.h>
  #include <ctype.h>
! #include <OB/CORBA.h>
! #include <Store.h>
  #include "POS_IM.h"
  
! InputMedia_i::InputMedia_i(POS_POSTerminal_ptr pTer)
  {
     // we will comunicate with the following terminal
!    m_POSTerminalRef = POS_POSTerminal::_duplicate(pTer);
  }
  
  void  InputMedia_i:: BarcodeInput (const char * Item)
***************
*** 41,47 ****
    {
       m_POSTerminalRef->SendBarcode(Item);
    }
!   catch (const AStore::BarcodeNotFound &bce)
    {
       cerr << "Error in Sending barcode" << endl;
    }
--- 42,48 ----
    {
       m_POSTerminalRef->SendBarcode(Item);
    }
!   catch (const AStore_BarcodeNotFound &bce)
    {
       cerr << "Error in Sending barcode" << endl;
    }
diff -cr --minimal ../siegel.orig/POS/POS_IM.h ./POS/POS_IM.h
*** ../siegel.orig/POS/POS_IM.h	Mon Oct 14 16:16:54 1996
--- ./POS/POS_IM.h	Tue Oct 15 11:58:38 1996
***************
*** 26,39 ****
  #ifndef POS_IM_H
  #define POS_IM_H
  
! #include <### interface header file>
  
! class InputMedia_i : <### ORB specific base class>
  {
  private:
! 	POS::POSTerminal_var m_POSTerminalRef;
  public:
! 	InputMedia_i(POS::POSTerminal_ptr pTer);
  	virtual void BarcodeInput (const char * Item);
  	virtual void KeypadInput (const char *Cmd);
  };
--- 26,39 ----
  #ifndef POS_IM_H
  #define POS_IM_H
  
! #include <POS_skel.h>
  
! class InputMedia_i : virtual public POS_InputMedia_skel
  {
  private:
! 	POS_POSTerminal_var m_POSTerminalRef;
  public:
! 	InputMedia_i(POS_POSTerminal_ptr pTer);
  	virtual void BarcodeInput (const char * Item);
  	virtual void KeypadInput (const char *Cmd);
  };
diff -cr --minimal ../siegel.orig/POS/POS_OM.C ./POS/POS_OM.C
*** ../siegel.orig/POS/POS_OM.C	Mon Oct 14 16:16:55 1996
--- ./POS/POS_OM.C	Tue Oct 15 12:52:01 1996
***************
*** 42,47 ****
--- 42,49 ----
  
  */
  
+ #include <OB/CORBA.h>
+ #include <stdio.h>
  #include "POS_OM.h"
  #include <FindPNS.h>
  
***************
*** 50,56 ****
  //----------------------------------------------------------------------------------
  
  OutputMedia_i::OutputMedia_i(PseudoNameService_ptr pns
!                             ,POS::POSId Id)
  {
    // Register the object with the name service
    char refstring[1024];
--- 52,58 ----
  //----------------------------------------------------------------------------------
  
  OutputMedia_i::OutputMedia_i(PseudoNameService_ptr pns
!                             ,POS_POSId Id)
  {
    // Register the object with the name service
    char refstring[1024];
***************
*** 65,74 ****
    }
  }
  
! CORBA::Boolean OutputMedia_i:: OutputText (const char * StringToPrint)
  {
    // Check if the string passed exists and if so, output it
    if (StringToPrint)
       cout << StringToPrint << endl;
!   return CORBA::TRUE;
  }
--- 67,76 ----
    }
  }
  
! CORBA_Boolean OutputMedia_i:: OutputText (const char * StringToPrint)
  {
    // Check if the string passed exists and if so, output it
    if (StringToPrint)
       cout << StringToPrint << endl;
!   return CORBA_TRUE;
  }
diff -cr --minimal ../siegel.orig/POS/POS_OM.h ./POS/POS_OM.h
*** ../siegel.orig/POS/POS_OM.h	Mon Oct 14 16:16:55 1996
--- ./POS/POS_OM.h	Tue Oct 15 11:58:41 1996
***************
*** 26,41 ****
  #ifndef POS_OM_H
  #define POS_OM_H
  
! #include <### POS interface header file>
! #include <### PNS header file>
  
  //------------------ Output Media ------------------------------------------
! class OutputMedia_i : <### ORB specific base class>
  {
  public:
  	OutputMedia_i(PseudoNameService_ptr pns
!                 ,POS::POSId            Id);
! 	virtual CORBA::Boolean OutputText (const char * StringToPrint);
  };
  
  #endif
--- 26,41 ----
  #ifndef POS_OM_H
  #define POS_OM_H
  
! #include <POS_skel.h>
! #include <PNS.h>
  
  //------------------ Output Media ------------------------------------------
! class OutputMedia_i : virtual public POS_OutputMedia_skel
  {
  public:
  	OutputMedia_i(PseudoNameService_ptr pns
!                 ,POS_POSId            Id);
! 	virtual CORBA_Boolean OutputText (const char * StringToPrint);
  };
  
  #endif
diff -cr --minimal ../siegel.orig/POS/POS_Ter.C ./POS/POS_Ter.C
*** ../siegel.orig/POS/POS_Ter.C	Mon Oct 14 16:16:55 1996
--- ./POS/POS_Ter.C	Tue Oct 15 11:58:43 1996
***************
*** 24,57 ****
  
  */
  #include <stream.h>
  #include "POS_Ter.h"
  #include <FindPNS.h>
! #include <### PNS interface header file>
  
  POSTerminal_i:: POSTerminal_i(PseudoNameService_ptr   pns
                               ,char                  * storeid
!                              ,POS::POSId              id)
  {
    // Load in the stringified object references from the files and
    // construct references to these objects
    char caStr[512];
    strcpy(caStr,"Tax_");
    strcat(caStr, storeid);
!   CORBA::Object_ptr obj = pns->ResolveName(caStr);
!   m_taxRef = AStore::Tax::_narrow(obj);
  
    strcpy(caStr,"Store_");
    strcat(caStr,storeid);
    obj = pns->ResolveName(caStr);
!   m_storeRef = AStore::Store::_narrow(obj);
  
    sprintf(caStr,"OutputMedia_%ld",id);
    obj = pns->ResolveName(caStr);
!   m_outputMediaRef = POS::OutputMedia::_narrow(obj);
  
    // Initialize the member variables to their appropriate values
    m_itemBarcode = 0;
!   m_storeAccessRef = AStore::StoreAccess::_nil();
    m_id = id;
    m_POSTaxTotal = m_POSTotal = 0.0;
    m_saleTaxableSubTotal = m_saleSubTotal = 0.0;
--- 24,59 ----
  
  */
  #include <stream.h>
+ #include <stdio.h>
+ #include <OB/CORBA.h>
  #include "POS_Ter.h"
  #include <FindPNS.h>
! #include <PNS.h>
  
  POSTerminal_i:: POSTerminal_i(PseudoNameService_ptr   pns
                               ,char                  * storeid
!                              ,POS_POSId              id)
  {
    // Load in the stringified object references from the files and
    // construct references to these objects
    char caStr[512];
    strcpy(caStr,"Tax_");
    strcat(caStr, storeid);
!   CORBA_Object_ptr obj = pns->ResolveName(caStr);
!   m_taxRef = AStore_Tax::_narrow(obj);
  
    strcpy(caStr,"Store_");
    strcat(caStr,storeid);
    obj = pns->ResolveName(caStr);
!   m_storeRef = AStore_Store::_narrow(obj);
  
    sprintf(caStr,"OutputMedia_%ld",id);
    obj = pns->ResolveName(caStr);
!   m_outputMediaRef = POS_OutputMedia::_narrow(obj);
  
    // Initialize the member variables to their appropriate values
    m_itemBarcode = 0;
!   m_storeAccessRef = AStore_StoreAccess::_nil();
    m_id = id;
    m_POSTaxTotal = m_POSTotal = 0.0;
    m_saleTaxableSubTotal = m_saleSubTotal = 0.0;
***************
*** 59,65 ****
  
  void  POSTerminal_i:: Login () 
  {
!   if (!CORBA::is_nil(m_storeAccessRef)) {
      cerr << "Can't log in twice" << endl;
      return;
    }
--- 61,67 ----
  
  void  POSTerminal_i:: Login () 
  {
!   if (!CORBA_is_nil(m_storeAccessRef)) {
      cerr << "Can't log in twice" << endl;
      return;
    }
***************
*** 111,117 ****
  
    // Find and output the total sales and tax for the store
  
!   AStore::Store::StoreTotals tots;
    try {
      tots = m_storeRef->Totals();
    }
--- 113,119 ----
  
    // Find and output the total sales and tax for the store
  
!   AStore_Store::StoreTotals tots;
    try {
      tots = m_storeRef->Totals();
    }
***************
*** 132,138 ****
  
    // Output the Totals for each POS in turn
  
!   AStore::POSList_var PL;
    try {
      m_storeRef->GetPOSTotals(PL);
    }
--- 134,140 ----
  
    // Output the Totals for each POS in turn
  
!   AStore_POSList_var PL;
    try {
      m_storeRef->GetPOSTotals(PL);
    }
***************
*** 141,147 ****
      return;
    }
  
!   for (CORBA::ULong i = 0; i < PL->length(); i++)
    {
      if (PL[i].Id>0) {
         sprintf(caOpStr,"%15s %ld\n%15s %9.2f\n%15s %9.2f\n","POS   I.D.  :-",
--- 143,149 ----
      return;
    }
  
!   for (CORBA_ULong i = 0; i < PL->length(); i++)
    {
      if (PL[i].Id>0) {
         sprintf(caOpStr,"%15s %ld\n%15s %9.2f\n%15s %9.2f\n","POS   I.D.  :-",
***************
*** 163,181 ****
  {
    if (!LoggedIn())
      return;
!   AStore::ItemInfo_var ItemInf;
!   CORBA::Float price;
!   CORBA::Float taxablePrice;
!   delete[] m_itemBarcode;
!   m_itemBarcode = new char[strlen(Item) + 1];
!   strcpy(m_itemBarcode,Item);
  
    try
    {
       m_storeAccessRef->FindPrice(m_itemBarcode,m_itemQuantity,
                                   price,taxablePrice,ItemInf);
    }
!   catch (const AStore::BarcodeNotFound &e)
    {
       m_itemQuantity = 1;    
       cerr << "Invalid Barcode Found" << endl;
--- 165,182 ----
  {
    if (!LoggedIn())
      return;
!   AStore_ItemInfo_var ItemInf;
!   CORBA_Float price;
!   CORBA_Float taxablePrice;
!   CORBA_string_free(m_itemBarcode);
!   m_itemBarcode = CORBA_string_dup(Item);
  
    try
    {
       m_storeAccessRef->FindPrice(m_itemBarcode,m_itemQuantity,
                                   price,taxablePrice,ItemInf);
    }
!   catch (const AStore_BarcodeNotFound &e)
    {
       m_itemQuantity = 1;    
       cerr << "Invalid Barcode Found" << endl;
***************
*** 187,216 ****
      return;
    }
  
!   CORBA::Float itemExt = (float)m_itemQuantity * price;
    m_saleSubTotal += itemExt;
    
    char caOpStr[255];
    char * szFmtStr;
    szFmtStr = "%3d %10s %20s %7.2f %7.2f %s";
    sprintf(caOpStr,szFmtStr,m_itemQuantity,m_itemBarcode,
!           ItemInf->Name,price,itemExt,
       ((taxablePrice > 0.0) ? " *" : "") );
    try
    {
       m_outputMediaRef->OutputText(caOpStr);
    }
!   catch (CORBA::Exception &exc)
    {
      cout << "Error with Output Media" << endl;
      return;
    }
!   m_saleTaxableSubTotal += taxablePrice * (CORBA::Float)m_itemQuantity;
    m_itemQuantity = 1;
  }
  
  //-----------------------------------------------------------------------------
! void  POSTerminal_i:: ItemQuantity (CORBA::Long Quantity) 
  {
    if (!LoggedIn())
      return;
--- 188,217 ----
      return;
    }
  
!   CORBA_Float itemExt = (float)m_itemQuantity * price;
    m_saleSubTotal += itemExt;
    
    char caOpStr[255];
    char * szFmtStr;
    szFmtStr = "%3d %10s %20s %7.2f %7.2f %s";
    sprintf(caOpStr,szFmtStr,m_itemQuantity,m_itemBarcode,
!           (const char*)ItemInf->Name,price,itemExt,
       ((taxablePrice > 0.0) ? " *" : "") );
    try
    {
       m_outputMediaRef->OutputText(caOpStr);
    }
!   catch (CORBA_Exception &exc)
    {
      cout << "Error with Output Media" << endl;
      return;
    }
!   m_saleTaxableSubTotal += taxablePrice * (CORBA_Float)m_itemQuantity;
    m_itemQuantity = 1;
  }
  
  //-----------------------------------------------------------------------------
! void  POSTerminal_i:: ItemQuantity (CORBA_Long Quantity) 
  {
    if (!LoggedIn())
      return;
***************
*** 227,236 ****
  
    sprintf(caOpStr,"Taxable Sub-Total := %8.2f",m_saleTaxableSubTotal);
    m_outputMediaRef->OutputText(caOpStr);
!   CORBA::Float saleTax = m_taxRef->CalculateTax(m_saleTaxableSubTotal);
    sprintf(caOpStr,"Taxes             := %8.2f",saleTax);
    m_outputMediaRef->OutputText(caOpStr);
!   CORBA::Float saleTotal = saleTax + m_saleSubTotal;
    sprintf(caOpStr,"Total             := %8.2f",saleTotal);
    m_outputMediaRef->OutputText(caOpStr);
    m_outputMediaRef->OutputText("\nGo raibh maith agat\n");
--- 228,237 ----
  
    sprintf(caOpStr,"Taxable Sub-Total := %8.2f",m_saleTaxableSubTotal);
    m_outputMediaRef->OutputText(caOpStr);
!   CORBA_Float saleTax = m_taxRef->CalculateTax(m_saleTaxableSubTotal);
    sprintf(caOpStr,"Taxes             := %8.2f",saleTax);
    m_outputMediaRef->OutputText(caOpStr);
!   CORBA_Float saleTotal = saleTax + m_saleSubTotal;
    sprintf(caOpStr,"Total             := %8.2f",saleTotal);
    m_outputMediaRef->OutputText(caOpStr);
    m_outputMediaRef->OutputText("\nGo raibh maith agat\n");
***************
*** 248,254 ****
    m_itemQuantity = 1;
    if (m_itemBarcode)
    {
!     delete[] m_itemBarcode;
      m_itemBarcode = 0;
    }
    return;
--- 249,255 ----
    m_itemQuantity = 1;
    if (m_itemBarcode)
    {
!     CORBA_string_free(m_itemBarcode);
      m_itemBarcode = 0;
    }
    return;
***************
*** 256,262 ****
  
  unsigned char POSTerminal_i::LoggedIn()
  {
!   if (CORBA::is_nil(m_storeAccessRef)) {
      cerr << "Need to log in first" << endl;
      return 0;
    }
--- 257,263 ----
  
  unsigned char POSTerminal_i::LoggedIn()
  {
!   if (CORBA_is_nil(m_storeAccessRef)) {
      cerr << "Need to log in first" << endl;
      return 0;
    }
diff -cr --minimal ../siegel.orig/POS/POS_Ter.h ./POS/POS_Ter.h
*** ../siegel.orig/POS/POS_Ter.h	Mon Oct 14 16:16:56 1996
--- ./POS/POS_Ter.h	Tue Oct 15 11:58:45 1996
***************
*** 26,61 ****
  #ifndef POS_TER_H
  #define POS_TER_H
  
! #include <### PNS interface header file>
! #include <### Store interface header file>
! #include <### POS interface header file>
  
!     class POSTerminal_i : <### ORB specific base class>
      {
      private:
!       POS::Barcode   		m_itemBarcode;
!       CORBA::Long 	  	   m_itemQuantity;
!       AStore::Tax*		   m_taxRef;
!       AStore::Store*		   m_storeRef;
!       AStore::StoreAccess*	m_storeAccessRef;
!       POS::OutputMedia*		m_outputMediaRef;
!       CORBA::Float		   m_itemExtension;
!       CORBA::Float		   m_saleSubTotal;
!       CORBA::Float		   m_saleTaxableSubTotal;
!       CORBA::Float		   m_POSTotal;
!       CORBA::Float		   m_POSTaxTotal;
!       CORBA::Long		      m_id;
        unsigned char        LoggedIn();
         
      public:
        POSTerminal_i(PseudoNameService_ptr   pns
                     ,char                  * storeid
!                    ,POS::POSId              id);
        virtual void Login ();
        virtual void PrintPOSSalesSummary ();
        virtual void PrintStoreSalesSummary ();
        virtual void SendBarcode (const char *Item);
!       virtual void ItemQuantity (CORBA::Long Quantity);
        virtual void EndOfSale ();
  
  	};
--- 26,61 ----
  #ifndef POS_TER_H
  #define POS_TER_H
  
! #include <PNS.h>
! #include <Store.h>
! #include <POS_skel.h>
  
!     class POSTerminal_i : virtual public POS_POSTerminal_skel
      {
      private:
!       POS_Barcode   		m_itemBarcode;
!       CORBA_Long 	  	   m_itemQuantity;
!       AStore_Tax*		   m_taxRef;
!       AStore_Store*		   m_storeRef;
!       AStore_StoreAccess*	m_storeAccessRef;
!       POS_OutputMedia*		m_outputMediaRef;
!       CORBA_Float		   m_itemExtension;
!       CORBA_Float		   m_saleSubTotal;
!       CORBA_Float		   m_saleTaxableSubTotal;
!       CORBA_Float		   m_POSTotal;
!       CORBA_Float		   m_POSTaxTotal;
!       CORBA_Long		      m_id;
        unsigned char        LoggedIn();
         
      public:
        POSTerminal_i(PseudoNameService_ptr   pns
                     ,char                  * storeid
!                    ,POS_POSId              id);
        virtual void Login ();
        virtual void PrintPOSSalesSummary ();
        virtual void PrintStoreSalesSummary ();
        virtual void SendBarcode (const char *Item);
!       virtual void ItemQuantity (CORBA_Long Quantity);
        virtual void EndOfSale ();
  
  	};
diff -cr --minimal ../siegel.orig/POS/Srv_Main.C ./POS/Srv_Main.C
*** ../siegel.orig/POS/Srv_Main.C	Mon Oct 14 16:16:56 1996
--- ./POS/Srv_Main.C	Tue Oct 15 12:52:01 1996
***************
*** 23,29 ****
--- 23,31 ----
  exclusion may not apply to you.)
  
  */
+ #include <OB/CORBA.h>
  #include "POS_OM.h"
+ #include <stdlib.h>
  #include <stdio.h>
  #include <FindPNS.h>
  
***************
*** 34,50 ****
       return 1;
    }
  
!   CORBA::ORB_ptr orb   = CORBA::ORB_init(argc,argv);
!   CORBA::BOA_ptr boa   = orb->BOA_init(argc,argv,"");
  
!   POS::OutputMedia_var OutPut;
    PseudoNameService_var pns;
  
    try
    {
       pns=FindPNS(orb);
       OutPut = new OutputMedia_i(pns, atol(argv[1]));
!      boa->obj_is_ready(OutPut, nil);
    }
    catch (...)
    {
--- 36,52 ----
       return 1;
    }
  
!   CORBA_ORB_ptr orb   = CORBA_ORB_init(argc,argv);
!   CORBA_BOA_ptr boa   = orb->BOA_init(argc,argv,"");
  
!   POS_OutputMedia_var OutPut;
    PseudoNameService_var pns;
  
    try
    {
       pns=FindPNS(orb);
       OutPut = new OutputMedia_i(pns, atol(argv[1]));
!      boa->impl_is_ready(CORBA_ImplementationDef::_nil());
    }
    catch (...)
    {
Only in .: bin
diff -cr --minimal ../siegel.orig/central/DepotData.C ./central/DepotData.C
*** ../siegel.orig/central/DepotData.C	Mon Oct 14 16:16:57 1996
--- ./central/DepotData.C	Tue Oct 15 11:58:49 1996
***************
*** 23,31 ****
  exclusion may not apply to you.)
  
  */
  #include "DepotData.h"
  
! unsigned long DepotData::Locate(const POS::Barcode bc,AStore::ItemInfo &i) {
    TreeNode *t;
    unsigned long status=LocateNode(bc,t);
    if (status)
--- 23,32 ----
  exclusion may not apply to you.)
  
  */
+ #include <OB/CORBA.h>
  #include "DepotData.h"
  
! unsigned long DepotData::Locate(const char* bc,AStore_ItemInfo &i) {
    TreeNode *t;
    unsigned long status=LocateNode(bc,t);
    if (status)
***************
*** 33,39 ****
    return status;
  }
  
! void DepotData::Insert(const AStore::ItemInfo &i) {
    TreeNode *temp;
    const char *s = i.Item;
    if (!LocateNode(s,temp)) {
--- 34,40 ----
    return status;
  }
  
! void DepotData::Insert(const AStore_ItemInfo &i) {
    TreeNode *temp;
    const char *s = i.Item;
    if (!LocateNode(s,temp)) {
***************
*** 53,59 ****
    }
  }
  
! unsigned long DepotData::LocateNode(const POS::Barcode bc, TreeNode * &ret_node) {
    int compare;
    ret_node=m_root;
    if (ret_node==0) return 0;
--- 54,60 ----
    }
  }
  
! unsigned long DepotData::LocateNode(const char* bc, TreeNode * &ret_node) {
    int compare;
    ret_node=m_root;
    if (ret_node==0) return 0;
diff -cr --minimal ../siegel.orig/central/DepotData.h ./central/DepotData.h
*** ../siegel.orig/central/DepotData.h	Mon Oct 14 16:16:57 1996
--- ./central/DepotData.h	Tue Oct 15 11:58:50 1996
***************
*** 26,32 ****
  #ifndef DEPOTDATA_H
  #define DEPOTDATA_H
  
! #include <### Central interface header file>
  #include <fstream.h>
  
  // The depot stores all info about the products as a binary tree
--- 26,32 ----
  #ifndef DEPOTDATA_H
  #define DEPOTDATA_H
  
! #include <Central.h>
  #include <fstream.h>
  
  // The depot stores all info about the products as a binary tree
***************
*** 35,52 ****
  class TreeNode {
  public:
    TreeNode *m_left, *m_right;
!   AStore::ItemInfo m_item;
    
    TreeNode() : m_left(0), m_right(0) {}
  };
  
  class DepotData {
    TreeNode *m_root;
!   virtual unsigned long LocateNode(const POS::Barcode bc, TreeNode * &ret_node);
  public:
    DepotData() : m_root(0) {};
!   virtual unsigned long Locate(const POS::Barcode bc,AStore::ItemInfo &i);
!   virtual void Insert(const AStore::ItemInfo &i);
  };
  
  #endif
--- 35,52 ----
  class TreeNode {
  public:
    TreeNode *m_left, *m_right;
!   AStore_ItemInfo m_item;
    
    TreeNode() : m_left(0), m_right(0) {}
  };
  
  class DepotData {
    TreeNode *m_root;
!   virtual unsigned long LocateNode(const char* bc, TreeNode * &ret_node);
  public:
    DepotData() : m_root(0) {};
!   virtual unsigned long Locate(const char* bc,AStore_ItemInfo &i);
!   virtual void Insert(const AStore_ItemInfo &i);
  };
  
  #endif
diff -cr --minimal ../siegel.orig/central/Depot_i.C ./central/Depot_i.C
*** ../siegel.orig/central/Depot_i.C	Mon Oct 14 16:16:57 1996
--- ./central/Depot_i.C	Tue Oct 15 11:58:52 1996
***************
*** 24,30 ****
  
  */
  #include <fstream.h>
! #include <### PNS interface header file>
  #include "Depot_i.h"
  #include <FindPNS.h>
  
--- 24,31 ----
  
  */
  #include <fstream.h>
! #include <OB/CORBA.h>
! #include <PNS.h>
  #include "Depot_i.h"
  #include <FindPNS.h>
  
***************
*** 36,44 ****
  
  Depot_i::Depot_i(PseudoNameService_ptr pns)
  {
!   AStore::ItemInfo loaditem;
!   loaditem.Item = new char[30];
!   loaditem.Name = new char[40];
    char tempstring[30];
    int i;
    ifstream is(depotdata_file);
--- 37,45 ----
  
  Depot_i::Depot_i(PseudoNameService_ptr pns)
  {
!   AStore_ItemInfo loaditem;
!   loaditem.Item = CORBA_string_alloc(29);
!   loaditem.Name = CORBA_string_alloc(39);
    char tempstring[30];
    int i;
    ifstream is(depotdata_file);
***************
*** 60,66 ****
        i++;
      if (i < NITEMTYPES)
      {
!       loaditem.Itemtype=AStore::ItemTypes(i);
        m_items.Insert(loaditem);
      }
    }
--- 61,67 ----
        i++;
      if (i < NITEMTYPES)
      {
!       loaditem.Itemtype=AStore_ItemTypes(i);
        m_items.Insert(loaditem);
      }
    }
***************
*** 75,89 ****
  
  }
  
! void Depot_i::FindItemInfo (CORBA::Long             StoreId, 
                                const char           *Item, 
!                               CORBA::Long           Quantity, 
!                               AStore::ItemInfo_out  IInfo)
  {
!     IInfo = new AStore::ItemInfo;
      if (!m_items.Locate(Item,*IInfo))
      {
!        AStore::BarcodeNotFound *bcnf = new AStore::BarcodeNotFound;
         bcnf->item = Item;
         // Raise the exception here
         throw(*bcnf);
--- 76,90 ----
  
  }
  
! void Depot_i::FindItemInfo (CORBA_Long             StoreId, 
                                const char           *Item, 
!                               CORBA_Long           Quantity, 
!                               AStore_ItemInfo*&    IInfo)
  {
!     IInfo = new AStore_ItemInfo;
      if (!m_items.Locate(Item,*IInfo))
      {
!        AStore_BarcodeNotFound *bcnf = new AStore_BarcodeNotFound;
         bcnf->item = Item;
         // Raise the exception here
         throw(*bcnf);
diff -cr --minimal ../siegel.orig/central/Depot_i.h ./central/Depot_i.h
*** ../siegel.orig/central/Depot_i.h	Mon Oct 14 16:16:58 1996
--- ./central/Depot_i.h	Tue Oct 15 11:58:54 1996
***************
*** 26,42 ****
  #ifndef DEPOT_I_H
  #define DEPOT_I_H
  
! #include <### Central interface header file>
  #include "DepotData.h"
  
! class Depot_i : <### ORB specific base class> {
    DepotData m_items;
  public:
    Depot_i(PseudoNameService_ptr pns);
!   virtual void FindItemInfo (CORBA::Long           StoreId,
                               const char           *Item,
!                              CORBA::Long           Quantity,
!                              AStore::ItemInfo_out  OutItemInfo);
  };
  
  #endif
--- 26,42 ----
  #ifndef DEPOT_I_H
  #define DEPOT_I_H
  
! #include <Central_skel.h>
  #include "DepotData.h"
  
! class Depot_i : virtual public CentralOffice_Depot_skel {
    DepotData m_items;
  public:
    Depot_i(PseudoNameService_ptr pns);
!   virtual void FindItemInfo (CORBA_Long           StoreId,
                               const char           *Item,
!                              CORBA_Long           Quantity,
!                              AStore_ItemInfo*&    OutItemInfo);
  };
  
  #endif
diff -cr --minimal ../siegel.orig/central/Makefile ./central/Makefile
*** ../siegel.orig/central/Makefile	Mon Oct 14 16:16:58 1996
--- ./central/Makefile	Mon Nov 11 12:06:08 1996
***************
*** 3,17 ****
               Srv_Main.C
  
  APPL = CentralServer
- INCLUDE = -I. -I../IDL -I../POS -I../store -I../util
- LIBRARY =  -L../IDL -lidl
- CFLAGS = -g -c $(INCLUDE)
  OTHEROBJS = ../util/FindPNS.o
  
  include ../make.cfg
  
  all $(APPL): $(OBJECTS)
! 	$(CC) -g -o $(APPL) $(OBJECTS) $(OTHEROBJS) $(LIBRARY)
  
  clean:
  	rm -f *.o core $(APPL) .nse_depinfo .make.state
--- 3,14 ----
               Srv_Main.C
  
  APPL = CentralServer
  OTHEROBJS = ../util/FindPNS.o
  
  include ../make.cfg
  
  all $(APPL): $(OBJECTS)
! 	$(CXX) -o $(APPL) $(CXXFLAGS) $(OBJECTS) $(OTHEROBJS) $(LIBRARY)
  
  clean:
  	rm -f *.o core $(APPL) .nse_depinfo .make.state
diff -cr --minimal ../siegel.orig/central/Srv_Main.C ./central/Srv_Main.C
*** ../siegel.orig/central/Srv_Main.C	Mon Oct 14 16:16:58 1996
--- ./central/Srv_Main.C	Tue Oct 15 11:58:58 1996
***************
*** 23,45 ****
  exclusion may not apply to you.)
  
  */
  #include <FindPNS.h>
  #include <Depot_i.h>
  
  int
  main(int argc, char** argv)
  {
!   CORBA::ORB_ptr orb  = CORBA::ORB_init(argc, argv);
!   CORBA::BOA_ptr boa  = orb->BOA_init(argc, argv,"");
  
!   CentralOffice::Depot_var dep1;
    PseudoNameService_var pns;
    
    try
    {
      pns=FindPNS(orb);
      dep1 = new Depot_i(pns);
!     boa->obj_is_ready(dep1,nil);
    }
    catch(...) {
       cerr << "ERROR Starting Depot Server" << endl;
--- 23,46 ----
  exclusion may not apply to you.)
  
  */
+ #include <OB/CORBA.h>
  #include <FindPNS.h>
  #include <Depot_i.h>
  
  int
  main(int argc, char** argv)
  {
!   CORBA_ORB_ptr orb  = CORBA_ORB_init(argc, argv);
!   CORBA_BOA_ptr boa  = orb->BOA_init(argc, argv,"");
  
!   CentralOffice_Depot_var dep1;
    PseudoNameService_var pns;
    
    try
    {
      pns=FindPNS(orb);
      dep1 = new Depot_i(pns);
!     boa->impl_is_ready(CORBA_ImplementationDef::_nil());
    }
    catch(...) {
       cerr << "ERROR Starting Depot Server" << endl;
diff -cr --minimal ../siegel.orig/make.cfg ./make.cfg
*** ../siegel.orig/make.cfg	Mon Oct 14 16:16:47 1996
--- ./make.cfg	Mon Nov 11 12:06:06 1996
***************
*** 1,8 ****
  SOURCE     = $(SOURCE.C) \
               $(SOURCE.idl)
  
  OBJECTS    = $(SOURCE.C:.C=.o) \
!              $(SOURCE.idl:.idl=.o)
  
  # clear out the suffixes
  .SUFFIXES:
--- 1,12 ----
+ INCLUDE	   = -I. -I../IDL -I../POS -I../store -I../util
+ LIBRARY    = -L../IDL -lidl -lOB
+ 
  SOURCE     = $(SOURCE.C) \
               $(SOURCE.idl)
  
  OBJECTS    = $(SOURCE.C:.C=.o) \
!              $(SOURCE.idl:.idl=.o) \
!              $(SOURCE.idl:.idl=_skel.o)
  
  # clear out the suffixes
  .SUFFIXES:
***************
*** 10,17 ****
  .SUFFIXES:  .idl .cxx .cxx~ .C .C~ .c .c~ .h .h~ .hp .hp~ .o
  
  .idl.o:
!    echo "put command to compile IDL and generated source code here"
  
  .C.o:
!    echo "put command to compile " $< " here"
! 
--- 14,22 ----
  .SUFFIXES:  .idl .cxx .cxx~ .C .C~ .c .c~ .h .h~ .hp .hp~ .o
  
  .idl.o:
! 	idl -I. --c-suffix .C $< ; \
! 	$(CXX) $(CXXFLAGS) -c -I. $*.C ; \
! 	$(CXX) $(CXXFLAGS) -c -I. $*_skel.C
  
  .C.o:
! 	$(CXX) $(CXXFLAGS) $(INCLUDE) -c $<
diff -cr --minimal ../siegel.orig/store/Makefile ./store/Makefile
*** ../siegel.orig/store/Makefile	Mon Oct 14 16:16:59 1996
--- ./store/Makefile	Mon Nov 11 12:06:09 1996
***************
*** 2,16 ****
               Srv_Main.C
  
  APPL = StoreServer
- INCLUDE = -I. -I../IDL -I../POS -I../util
- LIBRARY =  -L../IDL -lidl
- CFLAGS = -g -c $(INCLUDE)
  OTHEROBJS = ../util/FindPNS.o
  
  include ../make.cfg
  
  all $(APPL): $(OBJECTS) 
! 	$(CC) -g -o $(APPL) $(OBJECTS) $(OTHEROBJS) $(LIBRARY)
  
  clean:
  	rm -f *.o $(APPL) core .nse_depinfo .make.state
--- 2,13 ----
               Srv_Main.C
  
  APPL = StoreServer
  OTHEROBJS = ../util/FindPNS.o
  
  include ../make.cfg
  
  all $(APPL): $(OBJECTS) 
! 	$(CXX) -o $(APPL) $(CXXFLAGS) $(OBJECTS) $(OTHEROBJS) $(LIBRARY)
  
  clean:
  	rm -f *.o $(APPL) core .nse_depinfo .make.state
diff -cr --minimal ../siegel.orig/store/Srv_Main.C ./store/Srv_Main.C
*** ../siegel.orig/store/Srv_Main.C	Mon Oct 14 16:17:00 1996
--- ./store/Srv_Main.C	Tue Oct 15 13:09:03 1996
***************
*** 23,31 ****
  exclusion may not apply to you.)
  
  */
  #include <FindPNS.h>
  #include <store_i.h>
- 
  int
  main(int argc, char** argv)
  {
--- 23,32 ----
  exclusion may not apply to you.)
  
  */
+ #include <stdlib.h>
+ #include <OB/CORBA.h>
  #include <FindPNS.h>
  #include <store_i.h>
  int
  main(int argc, char** argv)
  {
***************
*** 34,54 ****
        return 1;
     }
  
!    CORBA::ORB_ptr orb   = CORBA::ORB_init(argc,argv);
!    CORBA::BOA_ptr boa   = orb->BOA_init(argc,argv,"");
  
!    AStore::Tax_var tax1;
!    AStore::Store_var store1;
     PseudoNameService_var pns;
  
     try
     {
        pns=FindPNS(orb);
!       store1 = new Store_i(pns,atof(argv[1]),atol(argv[2]));
! 		boa->obj_is_ready(store1,nil);
! 
!       tax1 = new Tax_i(pns,atof(argv[1]));
!       boa->obj_is_ready(tax1,nil);
  	}
     catch(...) {
        cerr << "ERROR Starting Store Server" << endl;
--- 35,53 ----
        return 1;
     }
  
!    CORBA_ORB_ptr orb   = CORBA_ORB_init(argc,argv);
!    CORBA_BOA_ptr boa   = orb->BOA_init(argc,argv,"");
  
!    AStore_Tax_var tax1;
!    AStore_Store_var store1;
     PseudoNameService_var pns;
  
     try
     {
        pns=FindPNS(orb);
!       store1 = new Store_i(pns,atol(argv[1]),atof(argv[2]));
!       tax1 = new Tax_i(pns,atol(argv[1]));
!       boa->impl_is_ready(CORBA_ImplementationDef::_nil());
  	}
     catch(...) {
        cerr << "ERROR Starting Store Server" << endl;
diff -cr --minimal ../siegel.orig/store/store_i.C ./store/store_i.C
*** ../siegel.orig/store/store_i.C	Mon Oct 14 16:17:00 1996
--- ./store/store_i.C	Tue Oct 15 12:52:02 1996
***************
*** 23,38 ****
  exclusion may not apply to you.)
  
  */
  #include "store_i.h"
  #include <FindPNS.h>
  #include <fstream.h>
  #include <stdio.h>
  
  #define EMPTY      -1
! const CORBA::Float region_rate = 0.05;
  
  Tax_i::Tax_i(PseudoNameService_ptr pns
!             ,AStore::AStoreId storeID)
  {
     // set tax rate applied to taxable goods
     m_regionRate = region_rate;
--- 23,39 ----
  exclusion may not apply to you.)
  
  */
+ #include <OB/CORBA.h>
  #include "store_i.h"
  #include <FindPNS.h>
  #include <fstream.h>
  #include <stdio.h>
  
  #define EMPTY      -1
! const CORBA_Float region_rate = 0.05;
  
  Tax_i::Tax_i(PseudoNameService_ptr pns
!             ,AStore_AStoreId storeID)
  {
     // set tax rate applied to taxable goods
     m_regionRate = region_rate;
***************
*** 48,65 ****
     }
  }
  
! CORBA::Float Tax_i::CalculateTax(CORBA::Float          TaxableAmount)
  {
     return TaxableAmount*m_regionRate;
  }
  
! CORBA::Float Tax_i::FindTaxablePrice(
!                       CORBA::Float             ItemPrice
!                      ,AStore::ItemTypes        Itemtype)
  {
!    CORBA::Float taxprice;
  
!    if (Itemtype == AStore::other)
        taxprice = ItemPrice;
     else
        taxprice = 0.0;
--- 49,66 ----
     }
  }
  
! CORBA_Float Tax_i::CalculateTax(CORBA_Float          TaxableAmount)
  {
     return TaxableAmount*m_regionRate;
  }
  
! CORBA_Float Tax_i::FindTaxablePrice(
!                       CORBA_Float             ItemPrice
!                      ,AStore_ItemTypes        Itemtype)
  {
!    CORBA_Float taxprice;
  
!    if (Itemtype == AStore_other)
        taxprice = ItemPrice;
     else
        taxprice = 0.0;
***************
*** 67,74 ****
  }
  
  Store_i::Store_i(PseudoNameService_ptr pns
!                 ,AStore::AStoreId storeID
! 				    ,CORBA::Float storeMarkup):
    m_POSTerminals(10)                     // start off with space for 10 POSs
  {
     // Register the object with the name server
--- 68,75 ----
  }
  
  Store_i::Store_i(PseudoNameService_ptr pns
!                 ,AStore_AStoreId storeID
! 				    ,CORBA_Float storeMarkup):
    m_POSTerminals(10)                     // start off with space for 10 POSs
  {
     // Register the object with the name server
***************
*** 87,117 ****
     m_storeMarkup   = storeMarkup;
     m_storeID       = storeID;
     // initialize m_POSTerminals to indicate no POS Logins have been received
!    CORBA::ULong len      = m_POSTerminals.length();
!    for (CORBA::ULong i = 0; i < len; i++)
  	{
        m_POSTerminals[i].Id = EMPTY;
  	}
  
  }
  
! CORBA::Long Store_i::StoreId()
  {
     return m_storeID;
  }
  
! AStore::Store::StoreTotals Store_i::Totals()
  {
!   AStore::Store::StoreTotals ST;
    ST.StoreTotal=m_storeTotal;
    ST.StoreTaxTotal=m_storeTaxTotal;
    return ST;
  }
  
! AStore::StoreAccess_ptr Store_i::Login(CORBA::Long Id)
  {
  
!    CORBA::ULong loc = LocatePOSEntry(Id);
  
     m_POSTerminals[loc].Id         = Id;
     m_POSTerminals[loc].TotalSales = 0;
--- 88,118 ----
     m_storeMarkup   = storeMarkup;
     m_storeID       = storeID;
     // initialize m_POSTerminals to indicate no POS Logins have been received
!    CORBA_ULong len      = m_POSTerminals.length();
!    for (CORBA_ULong i = 0; i < len; i++)
  	{
        m_POSTerminals[i].Id = EMPTY;
  	}
  
  }
  
! CORBA_Long Store_i::StoreId()
  {
     return m_storeID;
  }
  
! AStore_Store::StoreTotals Store_i::Totals()
  {
!   AStore_Store::StoreTotals ST;
    ST.StoreTotal=m_storeTotal;
    ST.StoreTaxTotal=m_storeTaxTotal;
    return ST;
  }
  
! AStore_StoreAccess_ptr Store_i::Login(CORBA_Long Id)
  {
  
!    CORBA_Long loc = LocatePOSEntry(Id);
  
     m_POSTerminals[loc].Id         = Id;
     m_POSTerminals[loc].TotalSales = 0;
***************
*** 119,148 ****
  
     // check to see of a StoreAccess object exists for this m_POSTerminal
     // allocate new one if needed.
!    if (CORBA::is_nil((AStore::StoreAccess_ptr &)m_POSTerminals[loc].StoreAccessReference))
     {
        // create a local instance of the SToreAccess Object
        m_POSTerminals[loc].StoreAccessReference = new StoreAccess_i(m_pns
                                                                      ,_this()
                                                                      ,m_storeMarkup);
!       if (CORBA::is_nil((AStore::StoreAccess_ptr &)m_POSTerminals[loc].StoreAccessReference))
           cerr << "Store_i::Login: Unable to create StoreAccess object for POS Login" << endl;
     }
!    return AStore::StoreAccess::_duplicate(m_POSTerminals[loc].StoreAccessReference);
  }
  
! void Store_i::GetPOSTotals(AStore::POSList_out POSData)
  {
!    POSData = new AStore::POSList(m_POSTerminals);
  }
  
  void Store_i::UpdateStoreTotals(
!                          CORBA::Long  Id
!                         ,CORBA::Float Price
!                         ,CORBA::Float Taxes)
  {
  
!    CORBA::ULong i = LocatePOSEntry(Id);
     if (i != EMPTY)
     {
        m_POSTerminals[i].TotalSales += Price;
--- 120,149 ----
  
     // check to see of a StoreAccess object exists for this m_POSTerminal
     // allocate new one if needed.
!    if (CORBA_is_nil((AStore_StoreAccess_ptr &)m_POSTerminals[loc].StoreAccessReference))
     {
        // create a local instance of the SToreAccess Object
        m_POSTerminals[loc].StoreAccessReference = new StoreAccess_i(m_pns
                                                                      ,_this()
                                                                      ,m_storeMarkup);
!       if (CORBA_is_nil((AStore_StoreAccess_ptr &)m_POSTerminals[loc].StoreAccessReference))
           cerr << "Store_i::Login: Unable to create StoreAccess object for POS Login" << endl;
     }
!    return AStore_StoreAccess::_duplicate(m_POSTerminals[loc].StoreAccessReference);
  }
  
! void Store_i::GetPOSTotals(AStore_POSList*& POSData)
  {
!    POSData = new AStore_POSList(m_POSTerminals);
  }
  
  void Store_i::UpdateStoreTotals(
!                          CORBA_Long  Id
!                         ,CORBA_Float Price
!                         ,CORBA_Float Taxes)
  {
  
!    CORBA_Long i = LocatePOSEntry(Id);
     if (i != EMPTY)
     {
        m_POSTerminals[i].TotalSales += Price;
***************
*** 155,167 ****
        cerr << "Store_i::UpdateStoreTotals: Could not locate POS Terminal " << Id << endl;
  }
  
! CORBA::ULong Store_i::LocatePOSEntry(CORBA::Long Id)
  {
!    CORBA::ULong loc       = EMPTY;
!    CORBA::ULong availloc  = EMPTY;
!    CORBA::ULong len       = m_POSTerminals.length();
     int keepgoing          = 1;
!    CORBA::ULong i         = 0;
  
     // locate POSId or first available slot
     while (loc == EMPTY && i < len)
--- 156,168 ----
        cerr << "Store_i::UpdateStoreTotals: Could not locate POS Terminal " << Id << endl;
  }
  
! CORBA_Long Store_i::LocatePOSEntry(CORBA_Long Id)
  {
!    CORBA_Long loc       = EMPTY;
!    CORBA_Long availloc  = EMPTY;
!    CORBA_ULong len       = m_POSTerminals.length();
     int keepgoing          = 1;
!    CORBA_ULong i         = 0;
  
     // locate POSId or first available slot
     while (loc == EMPTY && i < len)
***************
*** 190,207 ****
  }
  
  StoreAccess_i::StoreAccess_i(PseudoNameService_ptr pns
!                             ,AStore::Store_var     store
!                             ,CORBA::Float          markup)
  {
     m_storeMarkup = markup;
     try
  	{
        char refstr[255];
!       AStore::AStoreId id = store->StoreId();
        sprintf(refstr,"Tax_%ld",id);
!       m_tax= AStore::Tax::_narrow(pns->ResolveName(refstr));
!       m_depot= CentralOffice::Depot::_narrow(pns->ResolveName("Depot"));
!       m_store = AStore::Store::_duplicate(store);
  	}
     catch(...) {
        cerr << "Trouble finding tax, store, or depot " << endl;
--- 191,208 ----
  }
  
  StoreAccess_i::StoreAccess_i(PseudoNameService_ptr pns
!                             ,AStore_Store_var     store
!                             ,CORBA_Float          markup)
  {
     m_storeMarkup = markup;
     try
  	{
        char refstr[255];
!       AStore_AStoreId id = store->StoreId();
        sprintf(refstr,"Tax_%ld",id);
!       m_tax= AStore_Tax::_narrow(pns->ResolveName(refstr));
!       m_depot= CentralOffice_Depot::_narrow(pns->ResolveName("Depot"));
!       m_store = AStore_Store::_duplicate(store);
  	}
     catch(...) {
        cerr << "Trouble finding tax, store, or depot " << endl;
***************
*** 211,231 ****
  
  void StoreAccess_i::FindPrice(
                           const char           *Item
!                         ,CORBA::Long           Quantity
!                         ,CORBA::Float&         ItemPrice
!                         ,CORBA::Float&         ItemTaxPrice
!                         ,AStore::ItemInfo_out  IInfo)
  {
  
! 	AStore::ItemInfo *i2;
     m_depot->FindItemInfo(m_store->StoreId()
                          ,Item
                          ,Quantity
                          ,i2);
!    IInfo      = new AStore::ItemInfo;
     *IInfo     = *i2;
     ItemPrice     = m_storeMarkup * IInfo->Itemcost;
     ItemTaxPrice = m_tax->FindTaxablePrice(
                                   ItemPrice
!                                 ,((AStore::ItemInfo *) IInfo)->Itemtype);
  }
--- 212,232 ----
  
  void StoreAccess_i::FindPrice(
                           const char           *Item
!                         ,CORBA_Long           Quantity
!                         ,CORBA_Float&         ItemPrice
!                         ,CORBA_Float&         ItemTaxPrice
!                         ,AStore_ItemInfo*&    IInfo)
  {
  
! 	AStore_ItemInfo *i2;
     m_depot->FindItemInfo(m_store->StoreId()
                          ,Item
                          ,Quantity
                          ,i2);
!    IInfo      = new AStore_ItemInfo;
     *IInfo     = *i2;
     ItemPrice     = m_storeMarkup * IInfo->Itemcost;
     ItemTaxPrice = m_tax->FindTaxablePrice(
                                   ItemPrice
!                                 ,((AStore_ItemInfo *) IInfo)->Itemtype);
  }
diff -cr --minimal ../siegel.orig/store/store_i.h ./store/store_i.h
*** ../siegel.orig/store/store_i.h	Mon Oct 14 16:17:00 1996
--- ./store/store_i.h	Tue Oct 15 12:52:02 1996
***************
*** 26,99 ****
  #ifndef STORE_I_H
  #define STORE_I_H
  
! #include <### PNS interface header file>
! #include <### Store interface header file>
! #include <### Central interface header file>
  
! class Tax_i : <### ORB specific base class>
  {
  private:
! 	CORBA::Float       m_regionRate;
  public:
!    Tax_i(PseudoNameService_ptr pns,AStore::AStoreId StoreID);
!    virtual CORBA::Float CalculateTax(CORBA::Float TaxableAmount);
  
! 	virtual CORBA::Float FindTaxablePrice(
!                       CORBA::Float      ItemPrice,
!                       AStore::ItemTypes Itemtype);
  
  };
  
! class Store_i : ORB specific base class
  {
  private:
! 	CORBA::ULong              LocatePOSEntry(CORBA::Long);
!    AStore::AStoreId          m_storeID;
!    CORBA::Float              m_storeTotal;
!    CORBA::Float              m_storeTaxTotal;
!    CORBA::Float              m_storeMarkup;
!    AStore::POSList           m_POSTerminals;
     PseudoNameService_var     m_pns;
  public:
     Store_i(PseudoNameService_ptr pns,
!            AStore::AStoreId storeID,
!            CORBA::Float storeMarkup);
  
!    virtual AStore::AStoreId           StoreId();
  
!    virtual AStore::Store::StoreTotals Totals();
  
!    virtual AStore::StoreAccess_ptr    Login(
!                      CORBA::Long         Id);
  
     virtual void                       GetPOSTotals(
!                      AStore::POSList_out  POSData);
  
     virtual void                       UpdateStoreTotals(
! 							CORBA::Long          Id,
!                      CORBA::Float         Price,
!                      CORBA::Float         Taxes);
  
  };
  
! class StoreAccess_i : ORB specific base class
  {
  private:
!    CORBA::Float              m_storeMarkup;
!    CentralOffice::Depot_var  m_depot;
!    AStore::Tax_var           m_tax;
!    AStore::Store_var	        m_store;
  public:
     StoreAccess_i(PseudoNameService_ptr pns,
!                  AStore::Store_var     pStore,
!                  CORBA::Float          markup);
  
     virtual void FindPrice(
                        const char          *Item,
!                       CORBA::Long          Quantity,
!                       CORBA::Float&        ItemPrice,
!                       CORBA::Float&        ItemTaxPrice,
!                       AStore::ItemInfo_out IInfo);
  
  };
  
--- 26,99 ----
  #ifndef STORE_I_H
  #define STORE_I_H
  
! #include <PNS.h>
! #include <Store_skel.h>
! #include <Central.h>
  
! class Tax_i : virtual public AStore_Tax_skel
  {
  private:
! 	CORBA_Float       m_regionRate;
  public:
!    Tax_i(PseudoNameService_ptr pns,AStore_AStoreId StoreID);
!    virtual CORBA_Float CalculateTax(CORBA_Float TaxableAmount);
  
! 	virtual CORBA_Float FindTaxablePrice(
!                       CORBA_Float      ItemPrice,
!                       AStore_ItemTypes Itemtype);
  
  };
  
! class Store_i : virtual public AStore_Store_skel
  {
  private:
! 	CORBA_Long              LocatePOSEntry(CORBA_Long);
!    AStore_AStoreId          m_storeID;
!    CORBA_Float              m_storeTotal;
!    CORBA_Float              m_storeTaxTotal;
!    CORBA_Float              m_storeMarkup;
!    AStore_POSList           m_POSTerminals;
     PseudoNameService_var     m_pns;
  public:
     Store_i(PseudoNameService_ptr pns,
!            AStore_AStoreId storeID,
!            CORBA_Float storeMarkup);
  
!    virtual AStore_AStoreId           StoreId();
  
!    virtual AStore_Store::StoreTotals Totals();
  
!    virtual AStore_StoreAccess_ptr    Login(
!                      CORBA_Long         Id);
  
     virtual void                       GetPOSTotals(
!                      AStore_POSList*& POSData);
  
     virtual void                       UpdateStoreTotals(
! 							CORBA_Long          Id,
!                      CORBA_Float         Price,
!                      CORBA_Float         Taxes);
  
  };
  
! class StoreAccess_i : virtual public AStore_StoreAccess_skel
  {
  private:
!    CORBA_Float              m_storeMarkup;
!    CentralOffice_Depot_var  m_depot;
!    AStore_Tax_var           m_tax;
!    AStore_Store_var	        m_store;
  public:
     StoreAccess_i(PseudoNameService_ptr pns,
!                  AStore_Store_var     pStore,
!                  CORBA_Float          markup);
  
     virtual void FindPrice(
                        const char          *Item,
!                       CORBA_Long          Quantity,
!                       CORBA_Float&        ItemPrice,
!                       CORBA_Float&        ItemTaxPrice,
!                       AStore_ItemInfo*&   IInfo);
  
  };
  
diff -cr --minimal ../siegel.orig/util/FindPNS.C ./util/FindPNS.C
*** ../siegel.orig/util/FindPNS.C	Mon Oct 14 16:17:01 1996
--- ./util/FindPNS.C	Tue Oct 15 11:59:07 1996
***************
*** 25,33 ****
  */
  #include <fstream.h>
  
  #include "FindPNS.h"
  
! PseudoNameService_ptr FindPNS(CORBA::ORB_ptr orb)
  {
     char refstring[1024];
     ifstream is("PNS.dat");
--- 25,34 ----
  */
  #include <fstream.h>
  
+ #include <OB/CORBA.h>
  #include "FindPNS.h"
  
! PseudoNameService_ptr FindPNS(CORBA_ORB_ptr orb)
  {
     char refstring[1024];
     ifstream is("PNS.dat");
diff -cr --minimal ../siegel.orig/util/FindPNS.h ./util/FindPNS.h
*** ../siegel.orig/util/FindPNS.h	Mon Oct 14 16:17:01 1996
--- ./util/FindPNS.h	Tue Oct 15 11:59:09 1996
***************
*** 26,33 ****
  #ifndef PNSFIND_H
  #define PNSFIND_H
  
! #include <### PNS interface header file>
  
! PseudoNameService_ptr FindPNS(CORBA::ORB_ptr orb);
  
  #endif
--- 26,33 ----
  #ifndef PNSFIND_H
  #define PNSFIND_H
  
! #include <PNS.h>
  
! PseudoNameService_ptr FindPNS(CORBA_ORB_ptr orb);
  
  #endif
diff -cr --minimal ../siegel.orig/util/Makefile ./util/Makefile
*** ../siegel.orig/util/Makefile	Mon Oct 14 16:17:01 1996
--- ./util/Makefile	Mon Nov 11 12:06:10 1996
***************
*** 1,8 ****
  SOURCE.C   = FindPNS.C
  
- INCLUDE = -I. -I../interfaces -I../POS
- LIBRARY =  -L../interfaces -lidl
- CFLAGS = -g -c $(INCLUDE)
  OTHEROBJS = 
  
  include ../make.cfg
--- 1,5 ----
