#-----------------------------------------------------------------------------
# MAKEFILE for ObjectWindows Libraries
# Copyright (c) 1991, 1996 by Borland International, All Rights Reserved
#
# $Revision:   10.75  $
#
# Defines:
#   MODEL=<d|l|f|t> one of:
#     dll, large (WIN16 default)
#     flat (WIN32 default), or multithreaded (implies flat)
#   WIN32        enables win32
#   WIN16        enables win16
#   MT           builds OWL to be used with multithreaded rtl
#   ALIGN=<1|2|4|8> specifies the alignment
#   DIAGS        enables runtime diagnostics (adds 'd' to lib name before 'w')
#   DEBUG        enables debug info for debuggers
#   OWLNOPCH     disables precompiled headers for OWL
#   OWLSECTION   enables sectioning of sources into multiple small objs
#   OWLNAME=Xxx  lib & DLL name base, Defaults to 'owl'. Req. for non-diag DLLs
#   OWLVER=nnn   version for OWL DLL. Defaults to 501. Req. for non-diag DLLs
#   USERDLL      builds OWL for use in a user DLL (adds 'u' to lib name after
#                model)
#   OWLFARVTABLE moves OWL class vtables out of dgroup (only 16-bit)
#   CODEGUARD    builds OWL with CodeGuard:  1=basic data, 2=full checking
#   BCC32I       uses bcc32i instead of bcc32 to compile
#   NO_EMULATED_CTRL   builds library using system implementation of common
#                      controls
#   REDEFINE_BOOL      builds library with BOOL mapped to bool
#   DISABLE_EXCEPTIONS disables exception use in OWL & in macros
#   NO_OWL1_COMPAT     builds library without API exposed for backward
#                      compatibility with v1.0 of ObjectWindows.
#   NO_OWL2_COMPAT     builds library without API exposed for backward
#                      compatibility with v2.x of ObjectWindows.
#                      NOTE: NO_OWL2_COMPAT implies NO_OWL1_COMPAT
#   NO_WIN32S_SUPPORT  builds library without special code to make up for
#                      WIN32s lack of support for safe exceptions
#   NO_OBJ_STREAMING   builds library without special code to allow
#                      some OWL objects to be persisted in a stream
#
#
#
# Define these for alternate OWL build directories:
#   OWLSRCDIR    defaults to: $(BCROOT)\source\owl
#   OWLINCDIR    defaults to: $(BCROOT)\include
#   OWLLIBDIR    defaults to: $(BCROOT)\lib
#   OWLBINDIR    defaults to: $(BCROOT)\bin
#
# Standard builds:
#   make MODEL=l OWLSECTION=1                    large model library (owlwl.lib)
#   make MODEL=d OWLNAME=Owl OWLVER=501          16bit DLL (owlwi.lib, owl501.dll)
#   make WIN32=1 OWLSECTION=1                    32bit flat model library (owlwf.lib)
#   make MODEL=d WIN32=1 OWLNAME=owl OWLVER=501  32bit DLL (owlwfi.lib, owl501f.dll)
#
# Diagnostic builds:
#   make MODEL=l OWLSECTION=1 -DDIAGS  large model diag library (owldwl.lib)
#   make MODEL=d DIAGS=1               16bit diag DLL (owldwi.lib, owl501d.dll)
#   make WIN32=1 OWLSECTION=1 -DDIAGS  32bit flat model diag lib (owldwf.lib)
#   make MODEL=d WIN32=1 DIAGS=1       32bit diag DLL (owldwfi.lib, owl501df.dll)
#
# Notes:
#   The owl16.ord file should be maintained if OWL functions are changed
#   otherwise warnings will be generated during the DLL link.
#
#-----------------------------------------------------------------------------

.autodepend
.cacheautodepend
.swap

#--------------------------------------------------------------------
# Fill in defaults. The following table describes the logic used for
# assigning defaults. Blank means "don't care", ! means not defined
#
#   MODEL | DLL | WIN16 | WIN32 | RESULTS
#  -------+-----+-------+-------+--------------------------------
#     !   |  !  |   !   |       | MODEL=f    WIN32=1  (default)
#   ==f|t | ==1 |   !   |       | MODEL=f|t  WIN32=1  DLL=1
#   ==f|t |  !  |   !   |       | MODEL=f|t  WIN32=1
#     !   |  !  |  ==1  |   !   | MODEL=l    WIN16=1  DLL=1
#         | ==1 |  ==1  |   !   | MODEL=l    WIN16=1  DLL=1
#   ==l   |  !  |       |   !   | MODEL=l    WIN16=1
#---------+-----+-------+-------+--------------------------------

!if !$d(MODEL) && !defined(MT) && !$d(WIN16) && !$d(OS2)
  MODEL = f    # default build model = flat static, Win32
!endif

!if $(MODEL) == d     # model d is short for building the DLL-- flat or large
  DLL = 1
! if !$d(WIN16) && !$d(OS2)
    WIN32 = 1         # DLL is 32bit by default
! endif
!endif

!if ($(MODEL) == t || $(MODEL) == f) && !$d(OS2)
  WIN32 = 1    # default to WIN32 switch on for flat or multi-threaded model
!elif $(MODEL)==l
  WIN16 = 1    # default to WIN16 switch on for large model
!endif

!if $(MODEL) == t || $d(MT)
  MT = mt       # model t implies MT. Use MT as 'mt' to build library names
!endif

!if $d(WIN32)
! if $d(MT)
    MODEL = t
! else
    MODEL = f
! endif
!elif $d(DLL)
  MODEL = l
!endif

#
# Figure out default data alignment based on target
#
!if !$d(ALIGN)
  ALIGN = 1
!endif

!if $d(DOS) && $d(MT)
! error Cannot build multi-thread library for DOS.
!endif

!if $d(MODEL)
! if $(MODEL)!=l && $(MODEL)!=f && $(MODEL)!=t
!   error MODEL must be l, f, or t
! endif
!endif

#--------------------------------------------------------------------
# Dir & name components
#--------------------------------------------------------------------
!if $d(DLL)

! if !$d(OWLNAME) && !$d(DIAGS)
!   error MUST DEFINE LIBRARY NAME, e.g. "MAKE MODEL=d OWLNAME=YourName"
! endif

! if $d(WIN32)
    KEY = w$(MODEL)i            # 32bit flat or multithread DLL import library
! else
    KEY = wi                    # 16bit DLL import library
! endif

!else

KEY = w$(MODEL)                 # Static library uses w+model

!endif  # if/else $d(DLL)

! if $d(USERDLL)
  KEY = $(KEY)u                 # Static or import library for use by dlls
! endif

!if !$d(OWLNAME)
  OWLNAME = owl
! if !$d(OWLVER)
    OWLVER = 501
! endif
!endif

#--------------------------------------------------------------------
# Debug & diagnostic flags
#--------------------------------------------------------------------
!if $d(DEBUG)
  CDBG = -v -k -Od #-vi # debug-info on, normal stack, no optimizations, inlines
!endif
!if 1 || $d(DEBUG)    # Leave public debug info in dll & strip to a .tds after
! if $d(WIN32)
    LDBG = -v
! else
    LDBG = -v -Vt
! endif
!endif

!if $d(DIAGS)         # default diags use precondition, check, trace & warn
  __DEBUG=2
  __TRACE=1
  __WARN=1
! if $d(WIN32)
    BD=d              # Use Bids Diag version when OWL lib is diag
! else
    BD=db             # Extension compatible with traditional DOS names
! endif
  OD=d                # OWL libs & dll get a 'd' for Diag versions
!endif

#
# Build up compiler diag switches based on settings
#
!if $d(__DEBUG)
  CDIAG = -D__DEBUG=$(__DEBUG)
!endif
!if $d(__TRACE)
  CDIAG = $(CDIAG) -D__TRACE
!endif
!if $d(__WARN)
  CDIAG = $(CDIAG) -D__WARN
!endif

#--------------------------------------------------------------------
# Dir & search paths, & precompiled headers
#--------------------------------------------------------------------

#
# BC tools BCBINDIR can be based on MAKEDIR if no BCROOT is defined
#
!if $d(BCROOT)
  BCBINDIR = $(BCROOT)\bin
!else
  BCBINDIR = $(MAKEDIR)
!endif

#
# Default bcroot to whatever is in bcroot.inc
#
!if !$d(BCROOT)
! include $(MAKEDIR)\bcroot.inc
!endif

#
# Where to find BC tools, libraries and include files
#
BCSRCDIR = $(BCROOT)\source
BCINCDIR = $(BCROOT)\include
BCLIBDIR = $(BCROOT)\lib
BCBINDIR = $(BCROOT)\bin

#
# Where to find OWL dirs-- can set these for special layouts
# Build search paths differently if OWL include dir is not below BC's
#
!if !$d(OWLSRCDIR)
  OWLSRCDIR = $(BCSRCDIR)\owl
!endif

#
# Build include paths of OWL dependencies
#
INCLUDE=$(BCINCDIR)
!if $d(BIDSINCDIR)
  INCLUDE=$(BIDSINCDIR);$(INCLUDE)
!endif
!if $d(OCFINCDIR)
  INCLUDE=$(OCFINCDIR);$(INCLUDE)
!endif

#
# Add OWL's include directory
#
!if !$d(OWLINCDIR)
  OWLINCDIR     = $(BCINCDIR)
  RCINCLUDEPATH = -i$(BCINCDIR)
!else
  RCINCLUDEPATH = -i$(OWLINCDIR) -i$(BCINCDIR)
!endif
INCLUDE=$(OWLINCDIR);$(INCLUDE)

#
# Library/Bin paths
#
LIBPATH=$(BCLIBDIR)
!if $d(BIDSLIBDIR)
  LIBPATH=$(BIDSLIBDIR);$(LIBPATH)
!endif
!if $d(OCFLIBDIR)
  LIBPATH=$(OCFLIBDIR);$(LIBPATH)
!endif
!if $d(OWLLIBDIR)
  LIBPATH=$(OWLLIBDIR);$(LIBPATH)
!else
  OWLLIBDIR=$(BCLIBDIR)
!endif
!if !$d(OWLBINDIR)
  OWLBINDIR = $(BCBINDIR)
!endif

#
# Paths for OBJs
#
OWLOBJDIR = $(OWLSRCDIR)\o\$(OD)$(KEY)   # Keep seperate diag/nondiag dirs

.PATH.obj = $(OWLOBJDIR)
.PATH.res = $(OWLOBJDIR)
.PATH.def = $(OWLOBJDIR)
.PATH.lib = $(OWLLIBDIR)
.PATH.cpp = $(OWLSRCDIR)

#
# Define OWLNOPCH to disable the use of Precompiled headers when building OWL
#
!if !$d(OWLNOPCH)
  CPCH= -H=$(OWLLIBDIR)\$(OWLNAME)$(OD)$(KEY).csm -H"pch.h" -D_OWLPCH
! if $d(WIN32) || $(__MAKE__) > 0x0370  # -Hc: !valid for 16-bit before v5.0
    CPCH = $(CPCH) -Hc
! endif
!endif

#--------------------------------------------------------------------
# Library names
#--------------------------------------------------------------------
!if $d(DLL)
! if $d(WIN32)
    OWLDLL = $(OWLBINDIR)\$(OWLNAME)$(OWLVER)$(OD)$(MODEL).dll
! else
    OWLDLL = $(OWLBINDIR)\$(OWLNAME)$(OWLVER)$(OD).dll
! endif
  OWLDEF = owl.def
  OWLRES = owl.res
!endif
OWLLIB = $(OWLLIBDIR)\$(OWLNAME)$(OD)$(KEY).lib

#--------------------------------------------------------------------
# Tools and options for Win32
#--------------------------------------------------------------------

#
# Options which are Win16/Win32 independent
#
!if $d(REDEFINE_BOOL)
  CFLAGS = $(CFLAGS) -DBI_REDEFINE_BOOL
!endif
!if $d(NO_EMULATED_CTRL)            # Only use OS implementation of CmnCtrls
  CFLAGS = $(CFLAGS) -DOWL_NATIVECTRL_ALWAYS
!endif
!if $d(NO_OWL2_COMPAT)              # Build without backward compatible API
! if !$d(NO_OWL1_COMPAT)            # No OWL2 Compat => No OWL1 Compat
    NO_OWL1_COMPAT = 1
! endif
  CFLAGS = $(CFLAGS) -DNO_OWL2_COMPAT
!endif
!if $d(NO_OWL1_COMPAT)              # Build without backward compatible API
  CFLAGS = $(CFLAGS) -DNO_OWL1_COMPAT
!endif
!if $d(NO_WIN32S_SUPPORT)           # Build without special code for Win32s
  CFLAGS = $(CFLAGS) -DNO_WIN32S_SUPPORT
!endif
!if $d(NO_OBJ_STREAMING)            # Build without persistent/stream support
  CFLAGS = $(CFLAGS) -DBI_NO_OBJ_STREAMING
!endif
#
#
#

!if $d(WIN32)
! if $d(BCC32I)
    CC     = $(BCBINDIR)\bcc32i      # Highly optimizing compiler
! else
    CC     = $(BCBINDIR)\bcc32       # Regular optimizing compiler
! endif
  RCC      = brcc32 -w32             # Resource compiler
  ASM      = $(BCBINDIR)\tasm32      # Assembler
  LINK     = $(BCBINDIR)\tlink32     # Linker
  LIB      = $(BCBINDIR)\tlib        # Librarian
  IMPLIB   = $(BCBINDIR)\implib      # Import library generator
  TDSTRIP  = $(BCBINDIR)\tdstrp32    # Debug info extractor

! if !$d(NO_OWL_OPT)
    CFLAGS = $(CFLAGS) -3 -d -k- -Ogmpv   # Optimizations (-O1gmpv), stdcall
! endif
! if $d(CODEGUARD)                   # d=add data, c=add calls, t=check this
    CFLAGS = $(CFLAGS) -vGd -vGt
!   if $(CODEGUARD) == 2
      CFLAGS= $(CFLAGS) -vGc
!   endif
!  endif
  CFLAGS   = $(CFLAGS) -i55          # Bump identifier length up to 55
  CFGFILE  = bcc32.cfg               # Name of compiler's config file
! if $d(DEBUG)
    LIBFLAGS = /P4096 #/C
! else
    LIBFLAGS = /P1024 /0 #/C
! endif

! if $d(DLL)
    CFLAGS = $(CFLAGS) -WDE -D_BUILDOWLDLL
    LFLAGS = $(LDBG) -Tpd -aa -x -c -r
!   if !$d(BIDSILIB)
      BIDSILIB = bids$(BD)$(MODEL)i
!   endif
    STDLIBS  = import32 cw32$(MT)i   # Libs for linking the DLL
!   if $d(CODEGUARD)
      STDLIBS  = cg32 $(STDLIBS)
!   endif
    STARTUP  = c0d32
! else
    CFLAGS = $(CFLAGS) -W
! endif

! if $d(MT)
    CFLAGS = $(CFLAGS) -WM
! endif

! if $d(ALIGN)
    CFLAGS = $(CFLAGS) -a$(ALIGN)
! endif

#--------------------------------------------------------------------
# Tools and options for Win16
#--------------------------------------------------------------------
!else
  CC       = $(BCBINDIR)\bcc         # Compiler
  RCC      = brcc32 -31              # Resource compiler
  ASM      = $(BCBINDIR)\tasm        # Assembler
  LINK     = $(BCBINDIR)\tlink       # Linker
  RLINK    = $(BCBINDIR)\rlink       # Resource linker
  LIB      = $(BCBINDIR)\tlib        # Librarian

  # implib needs -o switch in 16 bit for compatibility
  IMPLIB   = $(BCBINDIR)\implib -o -w # Import library generator
  TDSTRIP  = $(BCBINDIR)\tdstrip     # Debug info extractor

! if !$d(NO_OWL_OPT)
    CFLAGS = $(CFLAGS) -3 -d -k- -O1gmpv # Optimizations
! else
    CFLAGS = $(CFLAGS) -Od               # No optimizations
! endif
! if $d(CODEGUARD)                   # d=add data, c=add calls, t=check this
    CFLAGS = $(CFLAGS) -vGd -vGt
!  endif
  CFLAGS   = -m$(MODEL) $(CFLAGS)    # Memory model

! if $(MODEL) != s && $(MODEL) != m  # Large models can put strs in code seg
    CFLAGS = $(CFLAGS) -dc
! endif

! if $d(OWLFARVTABLE)
    CFLAGS = $(CFLAGS) -D_OWLFARVTABLE;_BIDSFARVTABLE #;_RTLFARVTABLE
! endif
! if $d(DISABLE_EXCEPTIONS)
    CFLAGS = $(CFLAGS) -DDISABLE_EXCEPTIONS -x-
! endif
  CFGFILE = turboc.cfg

! if $d(DEBUG)
    LIBFLAGS = /P4096 /C
! else
    LIBFLAGS = /P128  /0 /C
! endif

! if $d(DLL)                         # Build the 16bit Owl DLL
    # Dll, explicit export, far data into seg named OWL_FARDATA, compat excptns
    CFLAGS = $(CFLAGS) -WDE -D_BUILDOWLDLL -zEOWL_FARDATA -xc
    LFLAGS = $(LDBG) -Twd -n -s -c -C # -Oc -Oi -Oa -Or
!   if $d(DEBUG)
    LFLAGS = $(LFLAGS) -A=512
!   endif
!   if !$d(BIDSILIB)
      BIDSILIB = bids$(BD)i
!   endif
    STDLIBS  = import crtldll         # Libs for linking the Owl DLL
!if $d(CODEGUARD)
    STDLIBS  = cg16 $(STDLIBS)
!endif
    STARTUP  = c0dl

! else
!   if $d(USERDLL)
      CFLAGS = $(CFLAGS) -WDE -xc    # Build static Owl lib for use in DLLs
!   else
      CFLAGS = $(CFLAGS) -WSE        # Build static Owl lib for use in EXEs
!   endif
! endif

! if $d(ALIGN)
    CFLAGS = $(CFLAGS) -a$(ALIGN)
! endif

!endif

#--------------------------------------------------------------------
# Rules
#--------------------------------------------------------------------
.rc.res:
  $(RCC) $(RCINCLUDEPATH) -fo$@ $.

.cpp.obj:
  $(CC) {$& }

.asm.obj:
  $(ASM) /mx $& $@

#--------------------------------------------------------------------
# Various file lists needed for dependency checking and LIBing.
#
#   OBJS_CMN are the objs common to static libs and the dll
#   OBJS_LIB are the objs that go into libs and implibs only, not the dlls
#   OBJS_DLL are the objs that go into the dll only
#   LIBDEPOBJS is the list of object files for lib/implib dependency checking
#   LIBOBJS is the list of object files for building/addingto the libraries
#   LINKOBJS is the list of object files for building the DLL
#--------------------------------------------------------------------

# Common, unsectioned objs go into static libs and DLLs
#
OBJS_CMN =\
 PFXappdict.obj\
 PFXbitmap.obj\
 PFXbitmapga.obj\
 PFXbitset.obj\
 PFXbuttonga.obj\
 PFXcelarray.obj\
 PFXchecklst.obj\
 PFXchooseco.obj\
 PFXchoosefo.obj\
 PFXclipboar.obj\
 PFXclipview.obj\
 PFXcolmnhdr.obj\
 PFXcommctrl.obj\
 PFXcommdial.obj\
 PFXcontrolb.obj\
 PFXcontain.obj\
 PFXcontrolg.obj\
 PFXcreatedc.obj\
 PFXcursor.obj\
 PFXdatetime.obj\
 PFXdc.obj\
 PFXdibdc.obj\
 PFXdibitmap.obj\
 PFXdispatch.obj\
 PFXdocking.obj\
 PFXeventhan.obj\
 PFXexcept.obj\
 PFXfont.obj\
 PFXgadget.obj\
 PFXgadgetli.obj\
 PFXgadgetwi.obj\
 PFXgauge.obj\
 PFXgdibase.obj\
 PFXgdiobjec.obj\
 PFXglyphbtn.obj\
 PFXhotkey.obj\
 PFXicon.obj\
 PFXimagelst.obj\
 PFXlayoutwi.obj\
 PFXmailer.obj\
 PFXmci.obj\
 PFXmciwav.obj\
 PFXmemorydc.obj\
 PFXmenu.obj\
 PFXmenugadg.obj\
 PFXmessageb.obj\
 PFXmetafile.obj\
 PFXmetafldc.obj\
 PFXmodegad.obj\
 PFXmodversi.obj\
 PFXnotetab.obj\
 PFXowl.obj\
 PFXpaintdc.obj\
 PFXpalette.obj\
 PFXpanespli.obj\
 PFXpen.obj\
 PFXpicklist.obj\
 PFXpictwind.obj\
 PFXpreview.obj\
 PFXprevwin.obj\
 PFXprintdc.obj\
 PFXpropsht.obj\
 PFXrcntfile.obj\
 PFXresource.obj\
 PFXregion.obj\
 PFXrolldial.obj\
 PFXserialze.obj\
 PFXsplashwi.obj\
 PFXstatusba.obj\
 PFXswindow.obj\
 PFXtabctrl.obj\
 PFXtextgadg.obj\
 PFXtimegadg.obj\
 PFXtoolbox.obj\
 PFXtooltip.obj\
 PFXuiborder.obj\
 PFXuiface.obj\
 PFXuihandle.obj\
 PFXuipart.obj\
 PFXupdown.obj\
 PFXversion.obj\
 PFXwindow.obj\
 PFXwindowdc.obj\
 PFXwing.obj\
 PFXwinsock.obj\
 PFXwskaddr.obj\
 PFXwskerr.obj\
 PFXwskhostm.obj\
 PFXwsksockm.obj\
 PFXwskservm.obj\
 PFXwsksock.obj\
 PFXwsksockd.obj

!if !$d(NO_OWL1_COMPAT) && !$d(NO_OWL2_COMPAT)
OBJS_CMN = $(OBJS_CMN) \
 PFXcompat.obj\
 PFXmoduleob.obj
!endif

# Add in these objs when sectioning
#
!if $d(OWLSECTION)
OBJS_CMN = $(OBJS_CMN)\
 PFXapplica1.obj\
 PFXapplica2.obj\
 PFXapplica3.obj\
 PFXapplica4.obj\
 PFXbrush1.obj\
 PFXbrush2.obj\
 PFXbutton1.obj\
 PFXbutton2.obj\
 PFXcheckbo1.obj\
 PFXcheckbo2.obj\
 PFXcombobo1.obj\
 PFXcombobo2.obj\
 PFXcontrol1.obj\
 PFXcontrol2.obj\
 PFXdecfram1.obj\
 PFXdecfram2.obj\
 PFXdecmdif1.obj\
 PFXdecmdif2.obj\
 PFXdialog1.obj\
 PFXdialog2.obj\
 PFXdib1.obj\
 PFXdib2.obj\
 PFXdib3.obj\
 PFXdib4.obj\
 PFXdib5.obj\
 PFXdib6.obj\
 PFXdib7.obj\
 PFXdocmang1.obj\
 PFXdocmang2.obj\
 PFXdocmang3.obj\
 PFXdoctpl1.obj\
 PFXdoctpl2.obj\
 PFXdocumen1.obj\
 PFXdocumen2.obj\
 PFXedit1.obj\
 PFXedit2.obj\
 PFXeditfil1.obj\
 PFXeditfil2.obj\
 PFXeditsea1.obj\
 PFXeditsea2.obj\
 PFXeditvie1.obj\
 PFXeditvie2.obj\
 PFXfiledoc1.obj\
 PFXfiledoc2.obj\
 PFXfiltval1.obj\
 PFXfiltval2.obj\
 PFXfindrep1.obj\
 PFXfindrep2.obj\
 PFXfloatfr1.obj\
 PFXfloatfr2.obj\
 PFXframewi1.obj\
 PFXframewi2.obj\
 PFXframewi3.obj\
 PFXgroupbo1.obj\
 PFXgroupbo2.obj\
 PFXhslider1.obj\
 PFXhslider2.obj\
 PFXinputdi1.obj\
 PFXinputdi2.obj\
 PFXlistbox1.obj\
 PFXlistbox2.obj\
 PFXlistvie1.obj\
 PFXlistvie2.obj\
 PFXlookval1.obj\
 PFXlookval2.obj\
 PFXmdichil1.obj\
 PFXmdichil2.obj\
 PFXmdiclie1.obj\
 PFXmdiclie2.obj\
 PFXmdifram1.obj\
 PFXmdifram2.obj\
 PFXmenudes1.obj\
 PFXmenudes2.obj\
 PFXmodule1.obj\
 PFXmodule2.obj\
 PFXmodule3.obj\
 PFXmodule4.obj\
 PFXopensav1.obj\
 PFXopensav2.obj\
 PFXpictval1.obj\
 PFXpictval2.obj\
 PFXprintdi1.obj\
 PFXprintdi2.obj\
 PFXprinter1.obj\
 PFXprinter2.obj\
 PFXprintou1.obj\
 PFXprintou2.obj\
 PFXradiobu1.obj\
 PFXradiobu2.obj\
 PFXrangevl1.obj\
 PFXrangevl2.obj\
 PFXscrollb1.obj\
 PFXscrollb2.obj\
 PFXscrolle1.obj\
 PFXscrolle2.obj\
 PFXslider1.obj\
 PFXslider2.obj\
 PFXstatic1.obj\
 PFXstatic2.obj\
 PFXtinycap1.obj\
 PFXtinycap2.obj\
 PFXvalidat1.obj\
 PFXvalidat2.obj\
 PFXview1.obj\
 PFXview2.obj\
 PFXvslider1.obj\
 PFXvslider2.obj

# Add in these objs when not sectioning
#
!else
OBJS_CMN = \
 PFXmodule.obj\
 $(OBJS_CMN)\
 PFXapplicat.obj\
 PFXbrush.obj\
 PFXbutton.obj\
 PFXcheckbox.obj\
 PFXcombobox.obj\
 PFXcontrol.obj\
 PFXdecframe.obj\
 PFXdecmdifr.obj\
 PFXdialog.obj\
 PFXdib.obj\
 PFXdocmanag.obj\
 PFXdoctpl.obj\
 PFXdocument.obj\
 PFXedit.obj\
 PFXeditfile.obj\
 PFXeditsear.obj\
 PFXeditview.obj\
 PFXfiledoc.obj\
 PFXfiltval.obj\
 PFXfindrepl.obj\
 PFXfloatfra.obj\
 PFXframewin.obj\
 PFXgroupbox.obj\
 PFXhslider.obj\
 PFXinputdia.obj\
 PFXlistbox.obj\
 PFXlistview.obj\
 PFXlookval.obj\
 PFXmdichild.obj\
 PFXmdiclien.obj\
 PFXmdiframe.obj\
 PFXmenudesc.obj\
 PFXopensave.obj\
 PFXpictval.obj\
 PFXprintdia.obj\
 PFXprinter.obj\
 PFXprintout.obj\
 PFXradiobut.obj\
 PFXrangeval.obj\
 PFXscrollba.obj\
 PFXscroller.obj\
 PFXslider.obj\
 PFXstatic.obj\
 PFXtinycapt.obj\
 PFXvalidate.obj\
 PFXview.obj\
 PFXvslider.obj
!endif

!if $d(WIN32)
OBJS_CMN =$(OBJS_CMN)\
 PFXanimctrl.obj\
 PFXdraglist.obj\
 PFXlistwind.obj\
 PFXrichedit.obj\
 PFXrichedpr.obj\
 PFXdibblt32.obj\
 PFXtreewind.obj\
 PFXhlpmanag.obj
!else
OBJS_CMN =$(OBJS_CMN)\
 PFXtreewn16.obj\
 PFXdibblt16.obj
!endif

# Objs that go into static libs and import libs, but not in the owl dll itself
# These also get built differently when in the import library. Note that
# classes in the modules are declared _USERCLASS instead of _OWLCLASS
#
OBJS_LIB =\
 PFXglobal.obj

# OLE 2 classes get put into the lib.
#
!if $(MODEL) == l || $(MODEL) == f || $(MODEL) == t
OBJS_OLE2=\
 PFXstgdoc.obj\
 PFXolewindo.obj\
 PFXoledoc.obj\
 PFXoleframe.obj\
 PFXolemdifr.obj\
 PFXoleview.obj

!if	$d(WIN32)
OBJS_OLE2 = $(OBJS_OLE2) \
 PFXoledialg.obj \
 PFXshellitm.obj 
!endif

OBJS_LIB = $(OBJS_LIB) $(OBJS_OLE2)
!endif

OBJS_LIB = $(OBJS_LIB)\
 PFXvbxctl.obj

!if $d(USERDLL) || $d(WIN32)   # Lib for use by DLLs
OBJS_LIB = $(OBJS_LIB)\
 PFXlibmain.obj\
 PFXowlmain.obj\
 PFXinitdll.obj
!endif
!if !$d(USERDLL) || $d(WIN32)  # Lib for use in EXEs
OBJS_LIB = $(OBJS_LIB)\
 PFXwinmain.obj
!endif

# Objs that go into the Owl DLL only
#
!if $d(DLL)
OBJS_DLL =\
tmplinst.obj
!endif

# Put together obj groups into lists for different dependencies & tools
#
LIBDEPOBJS = $(OBJS_CMN:PFX=) $(OBJS_LIB:PFX=) $(OBJS_DLL:PFX=)
!if $d(DLL)
 LIBOBJS   = $(OBJS_LIB:PFX=+)
 LINKOBJS  = $(OBJS_CMN:PFX=)  $(OBJS_DLL:PFX=)
!else
 LIBOBJS   = $(OBJS_CMN:PFX=+) $(OBJS_LIB:PFX=+)
!endif

#--------------------------------------------------------------------
# Targets
#--------------------------------------------------------------------
target: cfgfile $(OWLLIB)

cfgfile:
  @-if not exist $(.PATH.cpp)\o\NUL md $(.PATH.cpp)\o
  @-if not exist $(.PATH.obj)\NUL md $(.PATH.obj)
  @copy &&|
-I$(INCLUDE)
-c -w $(CFLAGS) $(CDBG) $(CDIAG)
$(CPCH) -n$(.PATH.obj)
| $(CFGFILE) > NUL

!if $d(DLL)

$(.PATH.obj)\$(OWLRES):
  $(RCC) $&.rc @&&|
$(RCINCLUDEPATH)
| -fo$@

!if $d(WIN32)

$(OWLLIB): $(LIBDEPOBJS) $(.PATH.obj)\$(OWLDEF) $(.PATH.obj)\$(OWLRES)
  @cd $(.PATH.obj)
  $(LINK) @&&|
$(LFLAGS) -L$(LIBPATH) $(STARTUP) +
$(LINKOBJS)
$(OWLDLL)

$(BIDSILIB) $(STDLIBS)
$(OWLDEF)
$(OWLRES)
|
  $(TDSTRIP) -s $(OWLDLL)
  $(IMPLIB) $(OWLLIB) $(OWLDLL)
  $(LIB) $(LIBFLAGS) $(OWLLIB) @&&|
$(LIBOBJS)
|
  @-del $*.bak
  @cd $(.PATH.cpp)

!if $d(USE_ORD32)
$(.PATH.obj)\$(OWLDEF): $(.PATH.cpp)\owl32.ord
!else
$(.PATH.obj)\$(OWLDEF):
!endif
  @copy &&|
LIBRARY     $(OWLNAME)$(OWLVER)$(OD)
DESCRIPTION 'ObjectWindows DLL'
EXETYPE     WINDOWS
DATA        MULTIPLE 
EXPORTS
!if $d(USE_ORD32)
| + $(.PATH.cpp)\owl32.ord $(.PATH.obj)\$(OWLDEF) > NUL
!else
| $(.PATH.obj)\$(OWLDEF) > NUL
!endif



# Compile objs that aren't part of the Owl DLL as if they were user EXE or
# user DLL objs
#
$(OBJS_LIB:PFX=):
!if $d(USERDLL)
  $(CC)    -D_OWLDLL -U_BUILDOWLDLL {$&.cpp }
!else
  $(CC) -W -D_OWLDLL -U_BUILDOWLDLL {$&.cpp }
!endif

!else  # ! WIN32

#
# link once to get dll ordinals for implib,
# finish lib by adding additional objs,
# then re-link stripping name tables, add resources & tdstrip debug info
#
$(OWLLIB): $(LIBDEPOBJS) $(.PATH.obj)\$(OWLDEF) $(.PATH.obj)\$(OWLRES)
  @cd $(.PATH.obj)
  $(LINK) @&&|
$(LFLAGS) -Gn -L$(LIBPATH) $(STARTUP) +
$(LINKOBJS)
$(OWLDLL)

$(BIDSILIB) $(STDLIBS)
$(OWLDEF)
|
  $(RLINK) -v -k $(OWLRES) $(OWLDLL)
  $(IMPLIB) -i $(OWLLIB) $(OWLDEF) $(OWLDLL)
  $(LIB) $(LIBFLAGS) $(OWLLIB) @&&|
$(LIBOBJS)
|                                     # OWL_QUICK_LINK is used mainly to
!if !$d(OWL_QUICK_LINK)               # monitor the export tables of the DLL
  $(LINK) @&&|
$(LFLAGS) -Gr -Gn -L$(LIBPATH) $(STARTUP) +
$(LINKOBJS)
$(OWLDLL)

$(BIDSILIB) $(STDLIBS)
$(OWLDEF)
|
  $(RLINK) -v -k $(OWLRES) $(OWLDLL)
!endif
  $(TDSTRIP) -s $(OWLDLL)
  @-del $*.bak
  @cd $(.PATH.cpp)

$(.PATH.obj)\$(OWLDEF): $(.PATH.cpp)\owl16.ord
  @copy &&|
LIBRARY     $(OWLNAME)$(OWLVER)$(OD)
DESCRIPTION 'ObjectWindows DLL'
EXETYPE     WINDOWS
CODE        PRELOAD MOVEABLE DISCARDABLE
DATA        PRELOAD MOVEABLE SINGLE
HEAPSIZE    4096
EXPORTS
| + $(.PATH.cpp)\owl16.ord $(.PATH.obj)\$(OWLDEF) > NUL

# Compile objs that aren't part of the Owl DLL as if they were user EXE or
# user DLL objs
#
$(OBJS_LIB:PFX=):
!if $d(USERDLL)
  $(CC)     -D_OWLDLL -U_BUILDOWLDLL {$&.cpp }
!else
  # smart callback, far data into normal data seg DATA, could use CODE if RO
  $(CC) -WS -D_OWLDLL -U_BUILDOWLDLL -zFDATA {$&.cpp }
!endif

localex.obj: locale.cpp
  $(CC) -o$< locale.cpp

!endif # if/else WIN32

!else  # ! DLL

$(OWLLIB): $(LIBDEPOBJS)
  @-del $(OWLLIB)
  @cd $(.PATH.obj)
  $(LIB) $(LIBFLAGS) $(OWLLIB) @&&|
$(LIBOBJS)
|
!if $d(DEBUG) && $d(WIN16) && $d(STRIP_OBJS)  # This is a space saver
  $(TDSTRIP) *.obj
!endif
  @cd $(.PATH.cpp)

!endif

clean:
  @echo Removing .OBJs from $(.PATH.obj)
  @-if exist $(.PATH.obj)\*.obj del $(.PATH.obj)\*.obj
  @-if exist $(.PATH.obj)\*.csm del $(.PATH.obj)\*.csm

!if $d(WIN16)
NOOPT=-Od
!endif

applicat.obj: applicat.cpp
  $(CC) $(NOOPT) applicat.cpp

applica1.obj: applicat.cpp
  $(CC) $(NOOPT) -o$< -DSECTION=1 applicat.cpp
applica2.obj: applicat.cpp
  $(CC) $(NOOPT) -o$< -DSECTION=2 applicat.cpp
applica3.obj: applicat.cpp
  $(CC) $(NOOPT) -o$< -DSECTION=3 applicat.cpp
applica4.obj: applicat.cpp
  $(CC) $(NOOPT) -o$< -DSECTION=4 applicat.cpp

brush1.obj: brush.cpp
  $(CC) -o$< -DSECTION=1 brush.cpp
brush2.obj: brush.cpp
  $(CC) -o$< -DSECTION=2 brush.cpp

button1.obj: button.cpp
  $(CC) -o$< -DSECTION=1 button.cpp
button2.obj: button.cpp
  $(CC) -o$< -DSECTION=2 button.cpp

checkbo1.obj: checkbox.cpp
  $(CC) -o$< -DSECTION=1 checkbox.cpp
checkbo2.obj: checkbox.cpp
  $(CC) -o$< -DSECTION=2 checkbox.cpp

combobo1.obj: combobox.cpp
  $(CC) -o$< -DSECTION=1 combobox.cpp
combobo2.obj: combobox.cpp
  $(CC) -o$< -DSECTION=2 combobox.cpp

control1.obj: control.cpp
  $(CC) -o$< -DSECTION=1 control.cpp
control2.obj: control.cpp
  $(CC) -o$< -DSECTION=2 control.cpp

decfram1.obj: decframe.cpp
  $(CC) -o$< -DSECTION=1 decframe.cpp
decfram2.obj: decframe.cpp
  $(CC) -o$< -DSECTION=2 decframe.cpp

decmdif1.obj: decmdifr.cpp
  $(CC) -o$< -DSECTION=1 decmdifr.cpp
decmdif2.obj: decmdifr.cpp
  $(CC) -o$< -DSECTION=2 decmdifr.cpp

dialog1.obj: dialog.cpp
  $(CC) -o$< -DSECTION=1 dialog.cpp
dialog2.obj: dialog.cpp
  $(CC) -o$< -DSECTION=2 dialog.cpp

dib1.obj: dib.cpp
  $(CC) -o$< -DSECTION=1 dib.cpp
dib2.obj: dib.cpp
  $(CC) -o$< -DSECTION=2 dib.cpp
dib3.obj: dib.cpp
  $(CC) -o$< -DSECTION=3 dib.cpp
dib4.obj: dib.cpp
  $(CC) -o$< -DSECTION=4 dib.cpp
dib5.obj: dib.cpp
  $(CC) -o$< -DSECTION=5 dib.cpp
dib6.obj: dib.cpp
  $(CC) -o$< -DSECTION=6 dib.cpp
dib7.obj: dib.cpp
  $(CC) -o$< -DSECTION=7 dib.cpp

docmang1.obj: docmanag.cpp
  $(CC) -o$< -DSECTION=1 docmanag.cpp
docmang2.obj: docmanag.cpp
  $(CC) -o$< -DSECTION=2 docmanag.cpp
docmang3.obj: docmanag.cpp
  $(CC) -o$< -DSECTION=3 docmanag.cpp

doctpl1.obj: doctpl.cpp
  $(CC) -o$< -DSECTION=1 doctpl.cpp
doctpl2.obj: doctpl.cpp
  $(CC) -o$< -DSECTION=2 doctpl.cpp

documen1.obj: document.cpp
  $(CC) -o$< -DSECTION=1 document.cpp
documen2.obj: document.cpp
  $(CC) -o$< -DSECTION=2 document.cpp

edit1.obj: edit.cpp
  $(CC) -o$< -DSECTION=1 edit.cpp
edit2.obj: edit.cpp
  $(CC) -o$< -DSECTION=2 edit.cpp

editfil1.obj: editfile.cpp
  $(CC) -o$< -DSECTION=1 editfile.cpp
editfil2.obj: editfile.cpp
  $(CC) -o$< -DSECTION=2 editfile.cpp

editsea1.obj: editsear.cpp
  $(CC) -o$< -DSECTION=1 editsear.cpp
editsea2.obj: editsear.cpp
  $(CC) -o$< -DSECTION=2 editsear.cpp

editvie1.obj: editview.cpp
  $(CC) -o$< -DSECTION=1 editview.cpp
editvie2.obj: editview.cpp
  $(CC) -o$< -DSECTION=2 editview.cpp

filedoc1.obj: filedoc.cpp
  $(CC) -o$< -DSECTION=1 filedoc.cpp
filedoc2.obj: filedoc.cpp
  $(CC) -o$< -DSECTION=2 filedoc.cpp

filtval1.obj: filtval.cpp
  $(CC) -o$< -DSECTION=1 filtval.cpp
filtval2.obj: filtval.cpp
  $(CC) -o$< -DSECTION=2 filtval.cpp

findrep1.obj: findrepl.cpp
  $(CC) -o$< -DSECTION=1 findrepl.cpp
findrep2.obj: findrepl.cpp
  $(CC) -o$< -DSECTION=2 findrepl.cpp

floatfr1.obj: floatfra.cpp
  $(CC) -o$< -DSECTION=1 floatfra.cpp
floatfr2.obj: floatfra.cpp
  $(CC) -o$< -DSECTION=2 floatfra.cpp

framewi1.obj: framewin.cpp
  $(CC) -o$< -DSECTION=1 framewin.cpp
framewi2.obj: framewin.cpp
  $(CC) -o$< -DSECTION=2 framewin.cpp
framewi3.obj: framewin.cpp
  $(CC) -o$< -DSECTION=3 framewin.cpp

groupbo1.obj: groupbox.cpp
  $(CC) -o$< -DSECTION=1 groupbox.cpp
groupbo2.obj: groupbox.cpp
  $(CC) -o$< -DSECTION=2 groupbox.cpp

hslider1.obj: hslider.cpp
  $(CC) -o$< -DSECTION=1 hslider.cpp
hslider2.obj: hslider.cpp
  $(CC) -o$< -DSECTION=2 hslider.cpp

inputdi1.obj: inputdia.cpp
  $(CC) -o$< -DSECTION=1 inputdia.cpp
inputdi2.obj: inputdia.cpp
  $(CC) -o$< -DSECTION=2 inputdia.cpp

listbox1.obj: listbox.cpp
  $(CC) -o$< -DSECTION=1 listbox.cpp
listbox2.obj: listbox.cpp
  $(CC) -o$< -DSECTION=2 listbox.cpp

listvie1.obj: listview.cpp
  $(CC) -o$< -DSECTION=1 listview.cpp
listvie2.obj: listview.cpp
  $(CC) -o$< -DSECTION=2 listview.cpp

lookval1.obj: lookval.cpp
  $(CC) -o$< -DSECTION=1 lookval.cpp
lookval2.obj: lookval.cpp
  $(CC) -o$< -DSECTION=2 lookval.cpp

mdichil1.obj: mdichild.cpp
  $(CC) -o$< -DSECTION=1 mdichild.cpp
mdichil2.obj: mdichild.cpp
  $(CC) -o$< -DSECTION=2 mdichild.cpp

mdiclie1.obj: mdiclien.cpp
  $(CC) -o$< -DSECTION=1 mdiclien.cpp
mdiclie2.obj: mdiclien.cpp
  $(CC) -o$< -DSECTION=2 mdiclien.cpp

mdifram1.obj: mdiframe.cpp
  $(CC) -o$< -DSECTION=1 mdiframe.cpp
mdifram2.obj: mdiframe.cpp
  $(CC) -o$< -DSECTION=2 mdiframe.cpp

menudes1.obj: menudesc.cpp
  $(CC) -o$< -DSECTION=1 menudesc.cpp
menudes2.obj: menudesc.cpp
  $(CC) -o$< -DSECTION=2 menudesc.cpp

module1.obj: module.cpp
  $(CC) -o$< -DSECTION=1 module.cpp
module2.obj: module.cpp
  $(CC) -o$< -DSECTION=2 module.cpp
module3.obj: module.cpp
  $(CC) -o$< -DSECTION=3 module.cpp
module4.obj: module.cpp
  $(CC) -o$< -DSECTION=4 module.cpp

opensav1.obj: opensave.cpp
  $(CC) -o$< -DSECTION=1 opensave.cpp
opensav2.obj: opensave.cpp
  $(CC) -o$< -DSECTION=2 opensave.cpp

pictval1.obj: pictval.cpp
  $(CC) -o$< -DSECTION=1 pictval.cpp
pictval2.obj: pictval.cpp
  $(CC) -o$< -DSECTION=2 pictval.cpp

printou1.obj: printout.cpp
  $(CC) -o$< -DSECTION=1 printout.cpp
printou2.obj: printout.cpp
  $(CC) -o$< -DSECTION=2 printout.cpp

printer1.obj: printer.cpp
  $(CC) -o$< -DSECTION=1 printer.cpp
printer2.obj: printer.cpp
  $(CC) -o$< -DSECTION=2 printer.cpp

printdi1.obj: printdia.cpp
  $(CC) -o$< -DSECTION=1 printdia.cpp
printdi2.obj: printdia.cpp
  $(CC) -o$< -DSECTION=2 printdia.cpp

radiobu1.obj: radiobut.cpp
  $(CC) -o$< -DSECTION=1 radiobut.cpp
radiobu2.obj: radiobut.cpp
  $(CC) -o$< -DSECTION=2 radiobut.cpp

rangevl1.obj: rangeval.cpp
  $(CC) -o$< -DSECTION=1 rangeval.cpp
rangevl2.obj: rangeval.cpp
  $(CC) -o$< -DSECTION=2 rangeval.cpp

scrolle1.obj: scroller.cpp
  $(CC) -o$< -DSECTION=1 scroller.cpp
scrolle2.obj: scroller.cpp
  $(CC) -o$< -DSECTION=2 scroller.cpp

scrollb1.obj: scrollba.cpp
  $(CC) -o$< -DSECTION=1 scrollba.cpp
scrollb2.obj: scrollba.cpp
  $(CC) -o$< -DSECTION=2 scrollba.cpp

slider1.obj: slider.cpp
  $(CC) -o$< -DSECTION=1 slider.cpp
slider2.obj: slider.cpp
  $(CC) -o$< -DSECTION=2 slider.cpp

static1.obj: static.cpp
  $(CC) -o$< -DSECTION=1 static.cpp
static2.obj: static.cpp
  $(CC) -o$< -DSECTION=2 static.cpp

tinycap1.obj: tinycapt.cpp
  $(CC) -o$< -DSECTION=1 tinycapt.cpp
tinycap2.obj: tinycapt.cpp
  $(CC) -o$< -DSECTION=2 tinycapt.cpp

validat1.obj: validate.cpp
  $(CC) -o$< -DSECTION=1 validate.cpp
validat2.obj: validate.cpp
  $(CC) -o$< -DSECTION=2 validate.cpp

view1.obj: view.cpp
  $(CC) -o$< -DSECTION=1 view.cpp
view2.obj: view.cpp
  $(CC) -o$< -DSECTION=2 view.cpp

vslider1.obj: vslider.cpp
  $(CC) -o$< -DSECTION=1 vslider.cpp
vslider2.obj: vslider.cpp
  $(CC) -o$< -DSECTION=2 vslider.cpp

