#----------------------------------------------------------------------------
# MAKEFILE for the 42XX DRIVER
#
# COMPONENT_NAME: 42XX
#
# FUNCTIONS: 42XX PRINTER DRIVER
#----------------------------------------------------------------------------
DRIVER              = 42xx
DRIVERNAME          = ddk42xx
MRIOUT              = $(O_NLV)
SUBSYS              = osdd
SUBSYS_RELATIVE     = $(DRIVER)
SRC_RELATIVE        = src\$(SUBSYS)\$(SUBSYS_RELATIVE)
SRC_NL_RELATIVE     = mri\$(NLV)\$(SUBSYS)\$(DRIVER)
TOOLDIR             = $(ROOT)\src\$(SUBSYS)\common\tools

#------------------------------------------------------------------------------
#  Use built in macro "MAKEDIR" to establish "ROOT".  Due to case sensitivity
#  of nmake macro substitution, try all lowercase then all uppercase.  Fail if
#  current working directory path is mixed case.  This is a current nmake
#  limitation on macro substitutions but should not be a problem for most
#  people.  We are searching for a fix to this problem.
#------------------------------------------------------------------------------

ROOT            = $(MAKEDIR:\src\osdd\42xx=)
!if "$(ROOT)" == "$(MAKEDIR)"
ROOT            = $(MAKEDIR:\SRC\OSDD\42XX=)
!endif
!if "$(ROOT)" == "$(MAKEDIR)"
!error Problem setting "ROOT"! Make sure current working directory is either all\
       uppercase or all lowercase!
!endif

#-----------------------------------------------------------------
# Set up component/subsystem specific macros for use in header.mak
# This allows you establish a search order for header and lib paths.  A
# prefix would be a path that you would like to add to the beginning of
# the standard path which is set in header.mak.  A suffix tags onto the
# end of the standard path.
#-----------------------------------------------------------------

#CMP_HDR_PREFIX = <specify non-default path(s) for front of INCLUDE path>
CMP_HDR_PREFIX  =
#CMP_HDR_SUFFIX = <specify non-default path(s) for back INCLUDE path>
CMP_HDR_SUFFIX  = $(ROOT)\$(SRC_RELATIVE);$(ROOT)\$(SRC_NL_RELATIVE);$(42XXINC)
#CMP_LIB_PREFIX = <specify non-default path(s) for front of LIB path>
CMP_LIB_PREFIX  =
#CMP_LIB_SUFFIX = <specify non-default path(s) for back LIB path>
CMP_LIB_SUFFIX  =

#-----------------------------------------------------------------------------
# PUBLIC must be "os2".  This macro may be used in the future to create
# drivers for other operating systems.
#------------------------------------------------------------------------------

PUBLIC1 = os2

!ifndef HOST_PROC
HOST_PROC=386
HOST_OS=OS2
!endif

#------------------------------------------------------------------------------
# header.mak is the public makefile that sets up all paths and options.  It
# should not be altered.  Additions or changes to header.mak for a component
# can be overwritten in this makefile.  Additions or changes to header.mak
# for an entire subsystem can be overwritten in subsys.mak
#-----------------------------------------------------------------------------

!include $(ROOT)\header.mak

!include $(ROOT)\src\$(SUBSYS)\common\version.mak

#-------------------------------------------------------------------------
# subsys.mak is used as a way for each subsystem to override any settings
# that were set in header.mak.  It is owned by development.
#-------------------------------------------------------------------------

!include $(ROOT)\src\$(SUBSYS)\common\subsys.mak

#PRIV_HDR  = $(ROOT)\$(SRC_RELATIVE)

#-------------------------------------------------------------------------
# Insert any paths or macros that weren't defined in header.mak or
# subsys.mak here.
#--------------------------------------------------------------------------

MRIPATH = $(ROOT)\$(SRC_NL_RELATIVE)
42XXINC = $(ROOT)\$(SRC_RELATIVE)\inc

#----------------------------------------------------------------
# Set up the list of suffixes, if the suffixes in header.mak are not
# sufficient.  Be sure to include the entire list.
#-----------------------------------------------------------------

.SUFFIXES:
.SUFFIXES: .c .cpp .asm .h .inc .obj .def .dll .lib .o .res .rc .drv

#------------------------------------------------------------------------
# Please define all compiler, assembler, and linker flags here.
# Use if statement to define the flags for each type of builds.
# See $(ROOT)\src\$(SUBSYS)\common\subsys.mak for defines.
#------------------------------------------------------------------------

# Intel Retail specific Flags
!    if "$(BLD_TYPE)"=="retos2c"
MORE_CFLAGS=-UDEBUG -Oilt /Gs- /DIBM42XX_DRV=1
MORE_LFLAGS=/E
# Intel Debug IPMD specific flags
!    else
MORE_CFLAGS=-Ti+
MORE_LFLAGS=/CO
!    endif

CDEFINES=/DINCL_32=1 /i $(ROOT)\$(SRC_RELATIVE)\42xxfmf
LFLAGS    = /a:4 /E /nod /map /noe
CFLAGS    = /Q+ /C /Ss+ /Gn+ /Ge- /Rn /Gd- /Ms /W2 /DIBM42XX_DRV=1 /DLINT_ARGS /I$(ROOT)\$(SRC_RELATIVE)\INC -Fo$(O)\$(*F).obj
LIBOS2    = $(R206_LIB)\os2386.lib
LIBOS2P   = $(R206_LIB)\os2386p.lib
CLIBSDLL  = $(COMPILER_LIB)\dde4nbs.lib

#-------------------------------------------------------------------------
#   Setup the inference rules for compiling and assembling source code to
#   object code.
#-------------------------------------------------------------------------

.c{$(O)}.obj:
        $(CC) $(MORE_CFLAGS) $(CFLAGS) $(@B).c

.asm{$(O)}.obj:
        $(AS) -z -t -I$(42XXINC) -DINCL_32 $(*F).asm,$(O)\$(*F).obj;

#------------------------------------------------------------------------
# Intel Libraries to be included for DLL
#------------------------------------------------------------------------

LIBSDLL = $(LIBOS2) $(LIBOS2P) $(CLIBSDLL)

#---------------------------------------------------------------------------
# OBJ file list
#---------------------------------------------------------------------------

OBJ1 =  $(O)\fontxfrm.obj $(O)\prddyna.obj  $(O)\asmutils.obj $(O)\prdinit.obj
OBJ2 =  $(O)\prdakern.obj $(O)\prdapage.obj $(O)\prdaqery.obj $(O)\prdarfnt.obj
OBJ3 =  $(O)\prdarsub.obj $(O)\prdasetb.obj $(O)\prdasetg.obj $(O)\prdbblt.obj
OBJ4 =  $(O)\prdbcrea.obj $(O)\prdbctab.obj $(O)\prdbdata.obj $(O)\prdbdelt.obj
OBJ5 =  $(O)\prdbexin.obj $(O)\prdbgetb.obj $(O)\prdbgetp.obj $(O)\prdbgrey.obj
OBJ6 =  $(O)\prdbimag.obj $(O)\prdbinex.obj $(O)\prdbmark.obj $(O)\prdbsele.obj
OBJ7 =  $(O)\prdbsetp.obj $(O)\prdbsubr.obj $(O)\prdcctab.obj $(O)\prdcqery.obj
OBJ8 =  $(O)\prdcqtab.obj $(O)\prdcsubr.obj $(O)\prddntft.obj $(O)\prdd42ft.obj
OBJ9 =  $(O)\prdd42XX.obj $(O)\prddata.obj  $(O)\prddest.obj  $(O)\prdebcls.obj
OBJ10 = $(O)\prdecopn.obj $(O)\prdeddc.obj  $(O)\prdedpdb.obj $(O)\prdeedc.obj
OBJ11 = $(O)\prdefldb.obj $(O)\prdefont.obj $(O)\prdefpdb.obj $(O)\prdenabl.obj
OBJ12 = $(O)\prderset.obj $(O)\prderstr.obj $(O)\prdesave.obj $(O)\prdesub1.obj
OBJ13 = $(O)\prdesub2.obj $(O)\prdesub3.obj $(O)\prdesubr.obj $(O)\prdfdfnt.obj
OBJ14 = $(O)\prdgaccb.obj $(O)\prdgaddb.obj $(O)\prdgconv.obj $(O)\prdgheap.obj
OBJ15 = $(O)\prdgpraw.obj $(O)\prdgxfrm.obj $(O)\prdiclip.obj $(O)\prdiline.obj
OBJ16 = $(O)\prdjsubr.obj $(O)\prdjqstd.obj $(O)\prdldraw.obj $(O)\prdlgetc.obj
OBJ17 = $(O)\prdlgeto.obj $(O)\prdlgrat.obj $(O)\prdlpoly.obj $(O)\prdlsetc.obj
OBJ18 = $(O)\prdlseto.obj $(O)\prdlshrt.obj $(O)\prdlsubr.obj $(O)\prdmconn.obj
OBJ19 = $(O)\prdmconv.obj $(O)\prdmcpge.obj $(O)\prdmdev.obj  $(O)\prdmdfnt.obj
OBJ20 = $(O)\prdmdlg.obj  $(O)\prdmdsub.obj $(O)\prdmentr.obj $(O)\prdmfile.obj
OBJ21 = $(O)\prdmhelp.obj $(O)\prdmjob.obj  $(O)\prdmmain.obj $(O)\prdmsub1.obj
OBJ22 = $(O)\prdmsubr.obj $(O)\prdngpim.obj $(O)\prdodc.obj   $(O)\prdodraw.obj
OBJ23 = $(O)\prdpinit.obj $(O)\prdpprep.obj $(O)\prdprint.obj $(O)\prdpwrit.obj
OBJ24 = $(O)\prdperr.obj  $(O)\prdprast.obj $(O)\prdpstrt.obj $(O)\prdpsubr.obj
OBJ25 = $(O)\prdptext.obj $(O)\prdqedoc.obj $(O)\prdqesc.obj  $(O)\prdqesub.obj
OBJ26 = $(O)\prdqhcc.obj  $(O)\prdqname.obj $(O)\prdqqery.obj $(O)\prdring3.obj
OBJ27 = $(O)\prdspoly.obj $(O)\prdtcstr.obj $(O)\prdupatt.obj $(O)\prdssubr.obj
OBJ28 = $(O)\prdtdfnt.obj $(O)\prdtefnt.obj $(O)\prdtesub.obj $(O)\prdtqery.obj
OBJ29 = $(O)\prdtsubr.obj $(O)\prdutils.obj $(O)\prdtxfrm.obj $(O)\prdzdriv.obj
OBJ30 = $(O)\prdztrac.obj $(O)\prd42sr2.obj $(O)\newbmps.obj

OBJS  = $(OBJ1) $(OBJ2) $(OBJ3) $(OBJ4) $(OBJ5) $(OBJ6) $(OBJ7) $(OBJ8)  \
        $(OBJ9) $(OBJ10) $(OBJ11) $(OBJ12) $(OBJ13) $(OBJ14) $(OBJ15)    \
        $(OBJ16) $(OBJ17) $(OBJ18) $(OBJ19) $(OBJ20) $(OBJ21) $(OBJ22)   \
        $(OBJ23) $(OBJ24) $(OBJ25) $(OBJ26) $(OBJ27) $(OBJ28) $(OBJ29)   \
        $(OBJ30)

#-----------------------------------------------------------------------------
# The all target is used to specify a list of targets that need to be built
#-----------------------------------------------------------------------------

all: paths $(O)\$(DRIVERNAME).drv $(O)\$(DRIVERNAME).hlp

# -----------------------------------------------------------
# Create Help file
# -----------------------------------------------------------
$(O)\$(DRIVERNAME).hlp: $(ROOT)\$(SRC_NL_RELATIVE)\prd42xx.ipf
    cd $(ROOT)\$(SRC_NL_RELATIVE)
    ipfc prd42xx.ipf /l=$(L) /codepage=$(P) /country=$(C) $(O)\$(DRIVERNAME).hlp
    cd $(ROOT)\$(SRC_RELATIVE)

paths:
  -makepath $(MRIOUT)

# -----------------------------------------------------------
# Create Resource file
# -----------------------------------------------------------
$(MRIOUT)\$(DRIVERNAME).res:  $(ROOT)\$(SRC_NL_RELATIVE)\*.rc  \
                             $(ROOT)\$(SRC_NL_RELATIVE)\*.dlg \
                             $(42XXINC)\prdd42xx.h
    copy $(ROOT)\$(SRC_NL_RELATIVE)\*.dlg $(ROOT)\$(SRC_RELATIVE)
    copy $(ROOT)\$(SRC_NL_RELATIVE)\*.rc  $(ROOT)\$(SRC_RELATIVE)
    $(RC) $(CDEFINES) -r -i $(42XXINC) prd42xx.rc $(MRIOUT)\$(DRIVERNAME).res

# -----------------------------------------------------------
# Create Driver
# -----------------------------------------------------------
$(O)\$(DRIVERNAME).drv: makefile $(O)\$(DRIVERNAME).def $(MRIOUT)\$(DRIVERNAME).res $(OBJS) $(LIBSDLL)
       $(LINK) $(LFLAGS) $(MORE_LFLAGS) @<<$(O)\$(DRIVERNAME).RSP
$(OBJS:.obj=.obj+
)
$(O)\$(DRIVERNAME).DRV
$(O)\$(DRIVERNAME).MAP
$(LIBSDLL:.lib=.lib+
)
$(O)\$(DRIVERNAME).def
<<keep
       $(RC) $(CDEFINES) $(MRIOUT)\$(DRIVERNAME).res $(O)\$(DRIVERNAME).drv
       cd $(O)
       mapsym $(O)\$(DRIVERNAME).map
       eautil $(O)\$(DRIVERNAME).drv $(O)\$(DRIVERNAME).ea /s /r /p
       eautil $(O)\$(DRIVERNAME).drv $(O)\$(DRIVERNAME).ea /j /m
       $(TOOLDIR)\ea -e VendorName=$(DRIVERNAME) $(O)\$(DRIVERNAME).drv
       $(TOOLDIR)\ea -e RequiredDriverFiles=$(DRIVERNAME).DRV $(O)\$(DRIVERNAME).drv
       $(TOOLDIR)\ea -e OptionalDriverFiles=$(DRIVERNAME).hlp $(O)\$(DRIVERNAME).drv
       $(TOOLDIR)\ea -e .version=$(VERSION13) $(O)\$(DRIVERNAME).drv
       $(TOOLDIR)\ea -e .version=$(VERSION13) $(O)\$(DRIVERNAME).sym
       $(TOOLDIR)\devnames -e$(O)\$(DRIVERNAME).drv .

# -----------------------------------------------------------
# Create dynamic ddk42xx.def
# -----------------------------------------------------------
$(O)\$(DRIVERNAME).def: makefile
   echo Creating $(O)\$(DRIVERNAME).def <<$(O)\$(DRIVERNAME).def
LIBRARY $(DRIVERNAME) INITGLOBAL TERMGLOBAL
DESCRIPTION '$(FILEVER) DDK 42XX PRINTER DEVICE DRIVER DYNA-LINK'
DATA MOVEABLE SINGLE
HEAPSIZE 65535
STACKSIZE 65535

SEGMENTS
         _42XX     CLASS 'CODE'   CONFORMING

EXPORTS
        prdm_MainDlgProc               @2
        OS2_PM_DRV_ENABLE              @200
        OS2_PM_DRV_DEVMODE             @201
        OS2_PM_DRV_DEVICENAMES         @202
        DrvInstall                     @210

IMPORTS
    ;   GreGetClipRects               =PMGRE.3
    ;   GreConvert                    =PMGRE.3
    ;   GreCreateJournal              =PMGRE.3
    ;   GreDeleteJournal              =PMGRE.3
    ;   GreStartJournal               =PMGRE.3
    ;   GreStopJournal                =PMGRE.3
    ;   GrePlayJournal                =PMGRE.3
    ;   GreOpenJournal                =PMGRE.3
    ;   GreQueryCodePageVector        =PMGRE.3
        GetDriverInfo                 =PMGRE.37
        WinCreateHelpInstance         =HELPMGR.51
        WinDestroyHelpInstance        =HELPMGR.52
        WinAssociateHelpInstance      =HELPMGR.54
<<keep

#***************************************************************************
# Include Footer.mak at this point.
#***************************************************************************

!include $(ROOT)\footer.mak

#****************************************************************************
