Making DLL's with multiple threads that access the coprocessor: Difference between revisions

From OS2World.Com Wiki
Jump to navigation Jump to search
(Created page with "By Jeff Hitchcock <PRE> 14-Jul-1991 To: Anyone interested in making DLL's with multiple threads that access the coprocessor From: Jeff Hitchcock (71601,...")
 
No edit summary
Line 1,983: Line 1,983:


</PRE>
</PRE>
[[Category:Technical]]

Revision as of 22:20, 14 July 2018

By Jeff Hitchcock

14-Jul-1991

To:       Anyone interested in making DLL's with multiple threads that access
          the coprocessor

From:     Jeff Hitchcock (71601,260)
          Applied Signal Technology, Inc.
          470 Spring Park Place, Suite 700
          Herndon, VA 22070
          (703) 478-5619 Voice
          (703) 471-8915 Fax

1.   What follows is a summary of key points of my experience in splitting a
large program (1.8 MB .EXE) that uses both multiple threads and the
coprocessor into a smaller .EXE (appx. 100K) and 12 DLL's, not including the
special C Run Time Library (CRTL) DLL.  I will be happy to answer any
questions that I can about this, either on CompuServ (IBMOS2 forum) or on the
phone.  I check in on CompuServ as often as I can, but it is always not every
week.


2.   So we are all using the same terminology, the following applies
throughout:

     Term                Meaning

     module              A DLL or EXE file, composed of multiple sources.

     source              A .C or .ASM file; part of a module.  Can also mean
                             .H and .DLG files, as part of a resource.


3.   The following proved to be the essential points:


     a.   All modules must use a dynamically linked CRTL in order to use the
               coprocessor.

     b.   All links must use the /NOI flag, which preserves case sensitivity
               (required because the CRTL functions are in lower case).

     c.   All module definition files (.DEF) must have the EXPENTRY functions
               (the exported ones) defined in UPPERCASE, because (i) EXPENTRY
               (== pascal _loadds) converts the function name to all
               uppercase, and (ii) the link uses the /NOI flag so references
               to the function from other modules will be unresolved if the
               functions are not defined as all uppercase.

     d.   All calls to WinDlgBox must be preceeded with a call to
               DosLoadModule to load and get the handle of the DLL and
               followed by a call to DosFreeModule to free the DLL.

     e.   Other than (d) and eliinating references to previously global
               variables, we made NO changes to any of our code.


4.   The following "picture" shows, essentially, the flow from source to
          finished .DLL and .LIB (import library):

                     ÚÄÄÄÄÄÄÄ¿         ÚÄÄÄÄÄÄÄ¿
                     ³       ³         ³       ³
                     ³  .C   ³         ³  .H   ³
                     ³       ³         ³       ³
                     ÀÄÄÄÄÄÄÄÙ         ÀÄÄÄÄÄÄÄÙ
                         º                 º
                         º                 º
                         ÈÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍͼ
                                  º
                                  º
                      ÉÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍ»
                      º                       º
                      º   cl -D_MT -D_DLL ... º
                      º                       º
                      ÈÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍͼ
                                  º
                                  º         ÚÄÄÄÄÄÄÄ¿
                                  º        ÚÁÄÄÄÄÄÄ¿³
ÚÄÄÄÄÄÄÄ¿         ÚÄÄÄÄÄÄÄ¿   ÚÄÄÄÄÄÄÄ¿   ÚÁÄÄÄÄÄÄ¿³³ ÚÄÄÄÄÄÄÄ¿
³       ³         ³       ³   ³       ³   ³       ³³³ ³       ³
³ .DLG  ³         ³  .H   ³   ³ .OBJ  ³   ³ .OBJ  ³³Ù ³ .DEF  ³ÍÍÍ»
³       ³         ³       ³   ³       ³   ³       ÃÙ  ³       ³   º
ÀÄÄÄÄÄÄÄÙ         ÀÄÄÄÄÄÄÄÙ   ÀÄÄÄÄÄÄÄÙ   ÀÄÄÄÄÄÄÄÙ   ÀÄÄÄÄÄÄÄÙ   º
    º                 º           º           º           º       º
    º                 º           º           º           º       º
    ÈÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍͼ           ÈÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍͼ       º
             º                                º                   º
             º                                º                   º
      ÉÍÍÍÍÍÍÊÍÍÍÍÍ»           ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»    º
      º            º           º                             º    º
      º  rc -r .rc ÌÍÍÍÍÍ»     º    link /NOI /NOD /NOE ...  º    º
      º            º     º     º                             º    º
      ÈÍÍÍÍÍÍÍÍÍÍÍͼ     º     ÈÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ    º
                         º                  º                     º
                         º                  º                     º
                     ÚÄÄÄÄÄÄÄ¿          ÚÄÄÄÄÄÄÄ¿                 º
                     ³       ³          ³       ³                 º
                     ³ .RES  ³          ³ .DLL  ³                 º
                     ³       ³          ³       ³                 º
                     ÀÄÄÄÄÄÄÄÙ          ÀÄÄÄÄÄÄÄÙ                 º
                         º                º   º                   º
                         º                º   º                   º
                         ÈÍÍÍÍÍÍÍÍËÍÍÍÍÍÍͼ   ÈÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍͼ
                                  º                     º
                                  º                     º
                           ÉÍÍÍÍÍÍÊÍÍÍÍÍÍÍ»    ÉÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍ»
                           º              º    º                  º
                           º rc .res .dll º    º implib .lib .def º
                           º              º    º                  º
                           ÈÍÍÍÍÍÍËÍÍÍÍÍÍͼ    ÈÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍͼ
                                  º                     º
                                  º                     º
                              ÚÄÄÄÄÄÄÄ¿             ÚÄÄÄÄÄÄÄ¿
                              ³       ³             ³       ³
                              ³ .DLL  ³             ³ .LIB  ³
                              ³       ³             ³       ³
                              ÀÄÄÄÄÄÄÄÙ             ÀÄÄÄÄÄÄÄÙ


5.   Four files are included for your perusal:

     (1)  The makefile for use with PolyMake (by InterSolv).

     (2)  The ELV_CRTL.DEF file (essentially the same as cexample.def,
               included with Microsoft C 6.0).

     (3)  ELV_DISP.DEF, to show how a DLL is defined.

     (4)  ELV_DISP.RC, to show how resources within a DLL are defined.


<START OF MAKEFILE>
-------------------------------------------------------------------------------

###############################################################################
#                                                                             #
#  ELVIRA MAKE FILE for use with PolyMake                                     #
#                                                                             #
#  For the making of the Elvira .EXE and .DLL files.                          #
#                                                                             #
# --------------------------------------------------------------------------- #
#                                                                             #
#  NOTE: A custom C Run Time Library is used by ELVIRA.  To make it, the      #
#        file '\c600\lib\crtlib.obj' must be available.                       #
#                                                                             #
#        'mlib' refers to Microsoft's Linker, which is renamed to distinguish #
#        it from PolyLibrarian, which is called 'lib'.                        #
#                                                                             #
# --------------------------------------------------------------------------- #
#                                                                             #
#  Command line syntax:                                                       #
#                                                                             #
#   >make [oldver=Va.b] [newver=Vc.d] [debug=no] [target]                     #
#                                                                             #
#   where a = old major version                                               #
#         b = old minor version                                               #
#         c = new major version                                               #
#         d = new minor version                                               #
#                                                                             #
#         and "version" refers to an Elvira version, not a source revision.   #
#                                                                             #
#   debug=no disables Codeview during compile & link                          #
#            (Default is Codeview enabled)                                    #
#                                                                             #
#   target is a makeable file (elvira3.exe or a .dll)                         #
#                                                                             #
# --------------------------------------------------------------------------- #
#                                                                             #
#   Definitions of macros (alphabetically listed)                             #
#                                                                             #
#       ADEBUG              Assembler debug flags                             #
#       AFLAGS              Assembler flags                                   #
#       ARCPATH             Path for VCS archive files (*.??v)                #
#       CDEFINES            Universal defines used when compiling .C files    #
#       CWD                 Current Working Directory (inherent)              #
#       DEBUGON             "YES" if Codeview is desired; otherwise "NO"      #
#       DLL_SYSLIBS         System libraries included in a .DLL link          #
#       DLL_CFLAGS          C compiler flags for .DLL source                  #
#       DLL_CDEBUG          Additional C compiler flags for debugging .DLL    #
#       DLL_CNODEBUG        Additional C compiler flags for no bebugging .DLL #
#       DLL_LINKFLAGS       Link flags for compiling a .EXE                   #
#       DLL_LINKDEBUG       Link flags added when using Codeview with .DL     #
#       ELV_DLLS            List of all .DLL's used in ELVIRA                 #
#       ELV_EXES            List of all .EXE's used in ELVIRA                 #
#       ELV_EXE_OBJS        .EXE : .OBJ dependencies                          #
#       ELV_EXE_RSRCS       .EXE resources and headers                        #
#       ELV_xxxx_OBJS       .DLL : .OBJ dependencies for ELV_xxxx.DLL         #
#       ELV_xxxx_RSCRS      .DLL resources for ELV_xxxx.DLL                   #
#       ELV_RESS            A list of all .RES files in Elvira                #
#       EXE_SYSLIBS         System libraries included in a .EXE link          #
#       EXE_CFLAGS          C compiler flags for .EXE source                  #
#       EXE_CDEBUG          Additional C compiler flags for debugging .EXE    #
#       EXE_CNODEBUG        Additional C compiler flags for no bebugging .EXE #
#       EXE_LINKFLAGS       Link flags for compiling a .EXE                   #
#       EXE_LINKDEBUG       Link flags added when using Codeview with .EXE    #
#       GETOPTS             Options used by VCS get command                   #
#       INC_GROUP           Functional groups to be compiled with real code   #
#       RCDEFINES           Universal defines used when compiling .RC files   #
#       SOURCEPATH          Paths to search for source code                   #
#                                                                             #
###############################################################################

###############################################################################
#                                                                             #
#   GENERAL MACROS AND DIRECTIVES                                             #
#                                                                             #
###############################################################################

# Do not delete intermediate files (e.g., created .OBJ's)

.PRECIOUS

# Paths to files

ARCPATH       = v:\elvira
SOURCEPATH    = $(CWD);$(ARCPATH)

# .ASM related flags

AFLAGS        =
ADEBUG        = /Zi /Zd

# .C (made into a .EXE) related flags

EXE_CFLAGS    = -c $(CDEFINES) -Alfw -FPi -D_MT -D_DLL -G2stw -Gt16 -Od -W3
EXE_CDEBUG    = -Zi -Od
EXE_CNODEBUG  = -Od

# .C (made into a .DLL) related flags

DLL_CFLAGS    = -c $(CDEFINES) -ALw -FPi -D_MT -D_DLL -G2s -Gt16 -Od -W3
DLL_CDEBUG    = -Zi -Od
DLL_CNODEBUG  = -Od

# GET (extract from version control) flags

GETOPTS       = -q

# .EXE linker flags

EXE_LINKFLAGS = /NOD /NOE /NOI /ALIGN:16 /SEGMENTS:200
EXE_LINKDEBUG = /CO

# Libraries used in linking .EXE's

EXE_SYSLIBS = elv_crtl os2 lm_dxi_o

# .DLL linker flags

DLL_LINKFLAGS = /NOD /NOE /NOI /ALIGN:16 /SEGMENTS:200
DLL_LINKDEBUG = /CO

# Libraries used in linking .DLL's

DLL_SYSLIBS   = elv_crtl os2

# Utility DLL's used by ELVIRA .EXE's and .DLL's (except for the utility .DLL's)

ELV_UTILDLLS  = elv_util
ELV_UTILDLLS += elv_file

###############################################################################
#                                                                             #
#   EXE'S AND FUNCTION                                                        #
#                                                                             #
###############################################################################

ELV_EXES       = elvira3.exe    # The main executable

###############################################################################
#                                                                             #
#   EXE : OBJECT dependencies                                                 #
#                                                                             #
#   The following objects are statically linked to make ELVIRA3.EXE.  All     #
#   other objects are linked into dynamic link libraries.                     #
#                                                                             #
###############################################################################

ELV_EXE_OBJS   = elvira3.obj    # Must be first for .EXE file to LINK properly
ELV_EXE_OBJS  += config.obj
ELV_EXE_OBJS  += process.obj

ELV_EXE_SYSOBS = c:\c600\lib\crtexe.obj

###############################################################################
#                                                                             #
#   DLL'S AND FUNCTION                                                        #
#                                                                             #
#   ELV_UTIL and ELV_FILE are listed first since they are used by most other  #
#   .DLL's.  Keeping them first forces their recompiles first during a        #
#   complete make.                                                            #
#                                                                             #
###############################################################################

# ----------------------
# DYNAMIC LINK LIBRARIES
# ----------------------

ELV_DLLS       = elv_crtl.dll   # C RTL for Elvira (Required to use 80x87)

ELV_DLLS      += elv_util.dll   #
ELV_DLLS      += elv_file.dll   #

ELV_DLLS      += elv_b100.dll   #
ELV_DLLS      += elv_clct.dll   #
ELV_DLLS      += elv_disp.dll   #
ELV_DLLS      += elv_dmod.dll   #
ELV_DLLS      += elv_fax.dll    #
ELV_DLLS      += elv_lor.dll    #
ELV_DLLS      += elv_mlti.dll   #
ELV_DLLS      += elv_naa.dll    #
ELV_DLLS      += elv_proc.dll   #
ELV_DLLS      += elv_rcgn.dll   #

# ----------------
# IMPORT LIBRARIES
# ----------------

ELV_IMPLIBS    = elv_crtl.lib

ELV_IMPLIBS   += elv_util.lib
ELV_IMPLIBS   += elv_file.lib

ELV_IMPLIBS   += elv_b100.lib
ELV_IMPLIBS   += elv_clct.lib
ELV_IMPLIBS   += elv_disp.lib
ELV_IMPLIBS   += elv_dmod.lib
ELV_IMPLIBS   += elv_fax.lib
ELV_IMPLIBS   += elv_lor.lib
ELV_IMPLIBS   += elv_mlti.lib
ELV_IMPLIBS   += elv_naa.lib
ELV_IMPLIBS   += elv_proc.lib
ELV_IMPLIBS   += elv_rcgn.lib

# ----------------------
# RESOURCE FILES
# ----------------------

ELV_RESS       = elv_util.res   #
ELV_RESS      += elv_file.res   #

# ELV_RESS      += elv_b100.res   # No B100 resources
ELV_RESS      += elv_clct.res   #
ELV_RESS      += elv_disp.res   #
ELV_RESS      += elv_dmod.res   #
ELV_RESS      += elv_fax.res    #
ELV_RESS      += elv_lor.res    #
ELV_RESS      += elv_mlti.res   #
ELV_RESS      += elv_naa.res    #
ELV_RESS      += elv_proc.res   #
ELV_RESS      += elv_rcgn.res   #
ELV_RESS      += elvira3.res    #

###############################################################################
#                                                                             #
#   DLL : OBJECT dependencies                                                 #
#                                                                             #
#   The following objects are linked into dynamic link libraries.             #
#                                                                             #
###############################################################################

# ------------
# ELV_B100.DLL
# ------------

ELV_B100_OBJS  = b100elv3.obj
ELV_B100_OBJS += b100os2.obj
ELV_B100_OBJS += b100mdem.obj

# ------------
# ELV_CLCT.DLL
# ------------

ELV_CLCT_OBJS  = datacoll.obj
ELV_CLCT_OBJS += rxctl.obj
ELV_CLCT_OBJS += scan.obj
ELV_CLCT_OBJS += scanfunc.obj
ELV_CLCT_OBJS += siggen.obj
ELV_CLCT_OBJS += sim.obj

# ------------
# ELV_DISP.DLL
# ------------

ELV_DISP_OBJS  = bitplot.obj
ELV_DISP_OBJS += dataplot.obj
ELV_DISP_OBJS += text.obj

# ------------
# ELV_DMOD.DLL
# ------------

ELV_DMOD_OBJS  = anlgdmod.obj
ELV_DMOD_OBJS += bpskdmod.obj
ELV_DMOD_OBJS += fskdmod.obj
ELV_DMOD_OBJS += modem.obj

# ------------
# ELV_FAX.DLL
# ------------

ELV_FAX_OBJS   = decutil.obj
ELV_FAX_OBJS  += fax.obj

# ------------
# ELV_FILE.DLL
# ------------

ELV_FILE_OBJS  = fileio.obj

# ------------
# ELV_LOR.DLL
# ------------

ELV_LOR_OBJS   = bitproc.obj

# ------------
# ELV_MLTI.DLL
# ------------

ELV_MLTI_OBJS  = classify.obj
ELV_MLTI_OBJS += energy.obj
ELV_MLTI_OBJS += fsk.obj
ELV_MLTI_OBJS += searche.obj
ELV_MLTI_OBJS += spltband.obj
ELV_MLTI_OBJS += topid.obj
ELV_MLTI_OBJS += vftid.obj

# ------------
# ELV_NAA.DLL
# ------------

ELV_NAA_OBJS   = casdecod.obj
ELV_NAA_OBJS  += hdlc.obj
ELV_NAA_OBJS  += mar.obj
ELV_NAA_OBJS  += naa.obj
ELV_NAA_OBJS  += naaclass.obj
ELV_NAA_OBJS  += naadecod.obj
ELV_NAA_OBJS  += naaevent.obj
ELV_NAA_OBJS  += sif.obj

# ------------
# ELV_PROC.DLL
# ------------

ELV_PROC_OBJS  = fft.obj
ELV_PROC_OBJS += filter.obj
ELV_PROC_OBJS += mathe.obj
ELV_PROC_OBJS += resample.obj

# ------------
# ELV_RCGN.DLL
# ------------

ELV_RCGN_OBJS  = baudline.obj
ELV_RCGN_OBJS += carrier.obj
ELV_RCGN_OBJS += recognz.obj

# ------------
# ELV_UTIL.DLL
# ------------

ELV_UTIL_OBJS  = help11.obj
ELV_UTIL_OBJS += print.obj
ELV_UTIL_OBJS += status.obj
ELV_UTIL_OBJS += util.obj

# ------------
# ELV_CRTL.DLL
# ------------

ELV_CRTL_OBJS  = c:\c600\lib\crtlib.obj

###############################################################################
#                                                                             #
#   EXE : RESOURCE dependencies                                               #
#                                                                             #
#   The following resources are linked into .EXE files.                       #
#                                                                             #
###############################################################################

ELV_EXE_RSRCS   = elvira3.rc
ELV_EXE_RSRCS  += elvira3$.h
ELV_EXE_RSRCS  += config$.h
ELV_EXE_RSRCS  += config$.dlg
# ELV_EXE_RSRCS  += elvira3.ico
# ELV_EXE_RSRCS  += crosshr.ptr

###############################################################################
#                                                                             #
#   DLL : RESOURCE dependencies                                               #
#                                                                             #
#   The following resources are linked into dynamic link libraries.           #
#                                                                             #
###############################################################################

# ------------
# ELV_B100.DLL
# ------------

ELV_B100_RSRCS  =

# ------------
# ELV_CLCT.DLL
# ------------

ELV_CLCT_RSRCS  = elv_clct.rc
ELV_CLCT_RSRCS += version.h
ELV_CLCT_RSRCS += datacol$.dlg
ELV_CLCT_RSRCS += datacol$.h
ELV_CLCT_RSRCS += rxctl$.dlg
ELV_CLCT_RSRCS += rxctl$.h
ELV_CLCT_RSRCS += scan$.dlg
ELV_CLCT_RSRCS += scan$.h
ELV_CLCT_RSRCS += siggen$.dlg
ELV_CLCT_RSRCS += siggen$.h
ELV_CLCT_RSRCS += sim$.dlg
ELV_CLCT_RSRCS += sim$.h

# ------------
# ELV_DISP.DLL
# ------------

ELV_DISP_RSRCS  = elv_disp.rc
ELV_DISP_RSRCS += dataplo$.dlg
ELV_DISP_RSRCS += dataplo$.h

# ------------
# ELV_DMOD.DLL
# ------------

ELV_DMOD_RSRCS  = elv_dmod.rc
ELV_DMOD_RSRCS += anlgdmo$.dlg
ELV_DMOD_RSRCS += anlgdmo$.h
ELV_DMOD_RSRCS += bpskdmo$.dlg
ELV_DMOD_RSRCS += bpskdmo$.h
ELV_DMOD_RSRCS += fskdmod$.dlg
ELV_DMOD_RSRCS += fskdmod$.h
ELV_DMOD_RSRCS += modem$.dlg
ELV_DMOD_RSRCS += modem$.h

# ------------
# ELV_FAX.DLL
# ------------

ELV_FAX_RSRCS   = elv_fax.rc
ELV_FAX_RSRCS  += fax$.dlg
ELV_FAX_RSRCS  += fax$.h

# ------------
# ELV_FILE.DLL
# ------------

ELV_FILE_RSRCS  = elv_file.rc
ELV_FILE_RSRCS += fileio$.dlg
ELV_FILE_RSRCS += fileio$.h

# ------------
# ELV_LOR.DLL
# ------------

ELV_LOR_RSRCS   = elv_lor.rc
ELV_LOR_RSRCS  += bitproc$.dlg
ELV_LOR_RSRCS  += bitproc$.h

# ------------
# ELV_MLTI.DLL
# ------------

ELV_MLTI_RSRCS  = elv_mlti.rc
ELV_MLTI_RSRCS += classif$.dlg
ELV_MLTI_RSRCS += classif$.h
ELV_MLTI_RSRCS += energy$.dlg
ELV_MLTI_RSRCS += energy$.h
ELV_MLTI_RSRCS += fsk$.dlg
ELV_MLTI_RSRCS += fsk$.h
ELV_MLTI_RSRCS += searche$.dlg
ELV_MLTI_RSRCS += searche$.h
ELV_MLTI_RSRCS += spltban$.dlg
ELV_MLTI_RSRCS += spltban$.h
ELV_MLTI_RSRCS += topid$.dlg
ELV_MLTI_RSRCS += topid$.h
ELV_MLTI_RSRCS += vftid$.dlg
ELV_MLTI_RSRCS += vftid$.h

# ------------
# ELV_NAA.DLL
# ------------

ELV_NAA_RSRCS   = elv_naa.rc
ELV_NAA_RSRCS  += casdeco$.dlg
ELV_NAA_RSRCS  += casdeco$.h
ELV_NAA_RSRCS  += hdlc$.dlg
ELV_NAA_RSRCS  += hdlc$.h
ELV_NAA_RSRCS  += sif$.dlg
ELV_NAA_RSRCS  += sif$.h
ELV_NAA_RSRCS  += naa$.dlg
ELV_NAA_RSRCS  += naa$.h
ELV_NAA_RSRCS  += naaeven$.dlg
ELV_NAA_RSRCS  += naaeven$.h
ELV_NAA_RSRCS  += mar$.dlg
ELV_NAA_RSRCS  += mar$.h

# ------------
# ELV_PROC.DLL
# ------------

ELV_PROC_RSRCS  = elv_proc.rc
ELV_PROC_RSRCS += fft$.dlg
ELV_PROC_RSRCS += fft$.h
ELV_PROC_RSRCS += filter$.dlg
ELV_PROC_RSRCS += filter$.h
ELV_PROC_RSRCS += mathe$.dlg
ELV_PROC_RSRCS += mathe$.h
ELV_PROC_RSRCS += resampl$.dlg
ELV_PROC_RSRCS += resampl$.h

# ------------
# ELV_RCGN.DLL
# ------------

ELV_RCGN_RSRCS  = elv_rcgn.rc
ELV_RCGN_RSRCS += baudlin$.dlg
ELV_RCGN_RSRCS += baudlin$.h
ELV_RCGN_RSRCS += carrier$.dlg
ELV_RCGN_RSRCS += carrier$.h
ELV_RCGN_RSRCS += recognz$.dlg
ELV_RCGN_RSRCS += recognz$.h

# ------------
# ELV_UTIL.DLL
# ------------

ELV_UTIL_RSRCS  = elv_util.rc
ELV_UTIL_RSRCS += print$.dlg
ELV_UTIL_RSRCS += print$.h

###############################################################################
#                                                                             #
#   ADJUST FLAGS DEPENDING UPON COMMAND LINE MACRO DEFINITIONS                #
#                                                                             #
###############################################################################

# If debugging is enabled (the default), add Codeview to compiles and links

DEBUGON = $[u,$(debug)]

%if "$(DEBUGON)" == "NO"

%echo ** CODEVIEW DISABLED

EXE_CFLAGS    += $(CNODEBUG)
DLL_CFLAGS    += $(CNODEBUG)

%else

%echo ** CODEVIEW ENABLED

AFLAGS        += $(ADEBUG)
EXE_CFLAGS    += $(EXE_CDEBUG)
DLL_CFLAGS    += $(DLL_CDEBUG)

EXE_LINKFLAGS += $(EXE_LINKDEBUG)
DLL_LINKFLAGS += $(DLL_LINKDEBUG)

%endif

###############################################################################
#                                                                             #
#   DEFINE THE "VERSION" TO BE SHOWN IN "ABOUT" DIALOG BOX                    #
#                                                                             #
###############################################################################

%if %defined(oldver)
CDEFINES        = /DVERSION=$(oldver)
%endif

%if %defined(newver)
CDEFINES        = /DVERSION=$(newver)
%endif

###############################################################################
#                                                                             #
#   DEFINE GROUP OF MODULES TO BE MADE                                        #
#                                                                             #
###############################################################################

%if %defined(group)

INC_GROUP = $[u,$(group)]
CDEFINES  += /D$(INC_GROUP)
RCDEFINES += -d $(INC_GROUP)

%else

CDEFINES  += /DINC_ALL
RCDEFINES += -d INC_ALL

%endif

###############################################################################
#                                                                             #
#   LOGFILE EXTRACTION RULES                                                  #
#                                                                             #
###############################################################################

.LOGFILE .asv(.asm -R$(oldver))
.LOGFILE .c_v(.c   -R$(oldver))
.LOGFILE .dev(.def -R$(oldver))
.LOGFILE .dlv(.dlg -R$(oldver))
.LOGFILE .exv(.ext -R$(oldver))
.LOGFILE .glv(.glb -R$(oldver))
.LOGFILE .h_v(.h   -R$(oldver))
.LOGFILE .rcv(.rc  -R$(oldver))

###############################################################################
#                                                                             #
#   LOGFILES ARE IN THE "ARCPATH" DIRECTORY ONLY                              #
#                                                                             #
###############################################################################

.PATH.asv = $(ARCPATH)
.PATH.c_v = $(ARCPATH)
.PATH.dev = $(ARCPATH)
.PATH.dlv = $(ARCPATH)
.PATH.exv = $(ARCPATH)
.PATH.glv = $(ARCPATH)
.PATH.h_v = $(ARCPATH)
.PATH.rcv = $(ARCPATH)

###############################################################################
#                                                                             #
#   SOURCE FILES ARE IN ONE OF THE "SOURCEPATH" DIRECTORIES                   #
#                                                                             #
###############################################################################

.PATH.asm = $(SOURCEPATH)
.PATH.c   = $(SOURCEPATH)
.PATH.def = $(SOURCEPATH)
.PATH.dlg = $(SOURCEPATH)
.PATH.ext = $(SOURCEPATH)
.PATH.glb = $(SOURCEPATH)
.PATH.h   = $(SOURCEPATH)
.PATH.ico = $(SOURCEPATH)
.PATH.obj = $(SOURCEPATH)
.PATH.rc  = $(SOURCEPATH)
.PATH.ptr = $(SOURCEPATH)

###############################################################################
#                                                                             #
#   ALL .LIB, .RES, AND .DLL FILES MUST BE IN THE $(CWD)                      #
#                                                                             #
###############################################################################

.PATH.dll = $(CWD)
.PATH.lib = $(CWD)
.PATH.res = $(CWD)

# Library files must have .LIB extension (All .DLL's have Import .LIB's)

.LIBRARY .lib

###############################################################################
#                                                                             #
#   EPILOG                                                                    #
#                                                                             #
#   If a new version was specified, update the log files.                     #
#                                                                             #
###############################################################################

%if %defined(newver)
.EPILOG:
    vcs -V"$(newver)": *.??v
%endif

###############################################################################
#                                                                             #
#   LOG FILE EXTRACTION RULES                                                 #
#                                                                             #
#     $@  Target file                                                         #
#     $*  Target file, less extension                                         #
#     $<  Depends on file                                                     #
#     $?  All depends on files modified more recently than target             #
#     $** All depends on files regardless of modification                     #
#                                                                             #
###############################################################################

.c_v.c:
    get -q $(oldver) $<($@)

.h_v.h:
    get -q $(oldver) $<($@)

.asv.asm:
    get -q $(oldver) $<($@)

.rcv.rc:
    get -q $(oldver) $<($@)

.dlv.dlg:
    get -q $(oldver) $<($@)

.exv.ext:
    get -q $(oldver) $<($@)

.glv.glb:
    get -q $(oldver) $<($@)

.dev.def:
    get -q $(oldver) $<($@)

###############################################################################
#                                                                             #
#   GENERAL COMPILATION RULES                                                 #
#                                                                             #
###############################################################################

.asm.obj:
    masm $(AFLAGS) $< ;

.c.obj:
    cl $(CFLAGS) $<

.rc.res:
    rc -r $(RCDEFINES) $<

.res.dll:
    rc $<

.res.exe:
    rc $<

###############################################################################
###############################################################################
##                                                                           ##
##   DEPENDENCIES                                                            ##
##                                                                           ##
##     ** MAKE PROCESSING BEGINS HERE **                                     ##
##                                                                           ##
##     Sequence is to build all .DLL's, then the .EXE.                       ##
##                                                                           ##
###############################################################################
###############################################################################

# ------------------
# HEAD PSEUDO TARGET
# ------------------

head : $(ELV_RESS) $(ELV_DLLS) $(ELV_EXES)

# ----------------------------------------------
# FILES THAT MUST EXIST BUT HAVE NO MAKE PROCESS
# ----------------------------------------------

elvira3.def :
#elvira3.ico :
#elvira3.ptr :

###############################################################################
#                                                                             #
#   ELVIRA3.EXE AND ELVIRA3.RES                                               #
#                                                                             #
###############################################################################

elvira3.res : $(ELV_EXE_RSRCS)
    rc -r $(RCDEFINES) elvira3

elvira3.exe :: elvira3.def $(ELV_EXE_OBJS)
     link $(EXE_LINKFLAGS) $(ELV_EXE_OBJS) $(ELV_EXE_SYSOBS), elvira3, NUL, $(EXE_SYSLIBS) $(ELV_IMPLIBS), elvira3 ;
     rc  $[f, $[d, $<], $[r, $<], .RES]

elvira3.exe :: elvira3.res
    rc $<

###############################################################################
#                                                                             #
#   .DLL'S AND ASSOCIATED RESOURCES                                           #
#                                                                             #
###############################################################################

# ------------
# ELV_B100.DLL
# ------------

elv_b100_head : elv_b100.res elv_b100.dll

elv_b100.def :

elv_b100.dll :: elv_b100.def $(ELV_B100_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_B100_OBJS), elv_b100, NUL, $(DLL_SYSLIBS) $(ELV_UTILDLLS), elv_b100
    implib elv_b100.lib elv_b100.def

# ------------
# ELV_CLCT.DLL
# ------------

elv_clct_head : elv_clct.res elv_clct.dll

elv_clct.def :

elv_clct.res : $(ELV_CLCT_RSRCS)
    rc -r $(RCDEFINES) elv_clct.rc

elv_clct.dll :: elv_clct.def $(ELV_CLCT_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_CLCT_OBJS), elv_clct, NUL, $(DLL_SYSLIBS) $(ELV_UTILDLLS) elv_b100, elv_clct
    implib elv_clct.lib elv_clct.def
    rc $*.res $*.dll

elv_clct.dll :: elv_clct.res
    rc $*.res $*.dll

# ------------
# ELV_DISP.DLL
# ------------

elv_disp_head : elv_disp.res elv_disp.dll

elv_disp.def :

elv_disp.res : $(ELV_DISP_RSRCS)
    rc -r $(RCDEFINES) elv_disp.rc

elv_disp.dll :: elv_disp.def $(ELV_DISP_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_DISP_OBJS), elv_disp, NUL, $(DLL_SYSLIBS) $(ELV_UTILDLLS), elv_disp
    implib elv_disp.lib elv_disp.def
    rc $*.res $*.dll

elv_disp.dll :: elv_disp.res
    rc $*.res $*.dll

# ------------
# ELV_DMOD.DLL
# ------------

elv_dmod_head : elv_dmod.res elv_dmod.dll

elv_dmod.def :

elv_dmod.res : $(ELV_DMOD_RSRCS)
    rc -r $(RCDEFINES) elv_dmod.rc

elv_dmod.dll :: elv_dmod.def $(ELV_DMOD_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_DMOD_OBJS), elv_dmod, NUL, $(DLL_SYSLIBS) $(ELV_UTILDLLS) ELV_B100, elv_dmod
    implib elv_dmod.lib elv_dmod.def
    rc $*.res $*.dll

elv_dmod.dll :: elv_dmod.res
    rc $*.res $*.dll

# ------------
# ELV_FAX.DLL
# ------------

elv_fax_head : elv_fax.res elv_fax.dll

elv_fax.def :

elv_fax.res : $(ELV_FAX_RSRCS)
    rc -r $(RCDEFINES) elv_fax.rc

elv_fax.dll :: elv_fax.def $(ELV_FAX_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_FAX_OBJS), elv_fax, NUL, $(DLL_SYSLIBS) $(ELV_UTILDLLS) lm_dxi_o, elv_fax
    implib elv_fax.lib elv_fax.def
    rc $*.res $*.dll

elv_fax.dll :: elv_fax.res
    rc $*.res $*.dll

# ------------
# ELV_FILE.DLL
# ------------

elv_file_head : elv_file.res elv_file.dll

elv_file.def :

elv_file.res : $(ELV_FILE_RSRCS)
    rc -r $(RCDEFINES) elv_file.rc

elv_file.dll :: elv_file.def $(ELV_FILE_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_FILE_OBJS), elv_file, NUL, $(DLL_SYSLIBS) elv_util, elv_file
    implib elv_file.lib elv_file.def
    rc $*.res $*.dll

elv_file.dll :: elv_file.res
    rc $*.res $*.dll

# ------------
# ELV_LOR.DLL
# ------------

elv_lor_head : elv_lor.res elv_lor.dll

elv_lor.def :

elv_lor.res : $(ELV_LOR_RSRCS)
    rc -r $(RCDEFINES) elv_lor.rc

elv_lor.dll :: elv_lor.def $(ELV_LOR_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_LOR_OBJS), elv_lor, NUL, $(DLL_SYSLIBS) $(ELV_UTILDLLS), elv_lor
    implib elv_lor.lib elv_lor.def
    rc $*.res $*.dll

elv_lor.dll :: elv_lor.res
    rc $*.res $*.dll

# ------------
# ELV_MLTI.DLL
# ------------

elv_mlti_head : elv_mlti.res elv_mlti.dll

elv_mlti.def :

elv_mlti.res : $(ELV_MLTI_RSRCS)
    rc -r $(RCDEFINES) elv_mlti.rc

elv_mlti.dll :: elv_mlti.def $(ELV_MLTI_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_MLTI_OBJS), elv_mlti, NUL, $(DLL_SYSLIBS) $(ELV_UTILDLLS), elv_mlti
    implib elv_mlti.lib elv_mlti.def
    rc $*.res $*.dll

elv_mlti.dll :: elv_mlti.res
    rc $*.res $*.dll

# ------------
# ELV_NAA.DLL
# ------------

elv_naa_head : elv_naa.res elv_naa.dll

elv_naa.def :

elv_naa.res : $(ELV_NAA_RSRCS)
    rc -r $(RCDEFINES) elv_naa.rc

elv_naa.dll :: elv_naa.def $(ELV_NAA_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_NAA_OBJS), elv_naa, NUL, $(DLL_SYSLIBS) $(ELV_UTILDLLS), elv_naa
    implib elv_naa.lib elv_naa.def
    rc $*.res $*.dll

elv_naa.dll :: elv_naa.res
    rc $*.res $*.dll

# ------------
# ELV_PROC.DLL
# ------------

elv_proc_head : elv_proc.res elv_proc.dll

elv_proc.def :

elv_proc.res : $(ELV_PROC_RSRCS)
    rc -r $(RCDEFINES) elv_proc.rc

elv_proc.dll :: elv_proc.def $(ELV_PROC_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_PROC_OBJS), elv_proc, NUL, $(DLL_SYSLIBS) $(ELV_UTILDLLS), elv_proc
    implib elv_proc.lib elv_proc.def
    rc $*.res $*.dll

elv_proc.dll :: elv_proc.res
    rc $*.res $*.dll

# ------------
# ELV_RCGN.DLL
# ------------

elv_rcgn_head : elv_rcgn.res elv_rcgn.dll

elv_rcgn.def :

elv_rcgn.res : $(ELV_RCGN_RSRCS)
    rc -r $(RCDEFINES) elv_rcgn.rc

elv_rcgn.dll :: elv_rcgn.def $(ELV_RCGN_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_RCGN_OBJS), elv_rcgn, NUL, $(DLL_SYSLIBS) $(ELV_UTILDLLS), elv_rcgn
    implib elv_rcgn.lib elv_rcgn.def
    rc $*.res $*.dll

elv_rcgn.dll :: elv_rcgn.res
    rc $*.res $*.dll

# ------------
# ELV_UTIL.DLL
# ------------

elv_util_head : elv_util.res elv_util.dll

elv_util.def :

elv_util.res : $(ELV_UTIL_RSRCS)
    rc -r $(RCDEFINES) elv_util.rc

elv_util.dll :: elv_util.def $(ELV_UTIL_OBJS)
    link $(DLL_LINKFLAGS) $(ELV_UTIL_OBJS), elv_util, NUL, $(DLL_SYSLIBS), elv_util
    implib elv_util.lib elv_util.def
    rc $*.res $*.dll

elv_util.dll :: elv_util.res
    rc $*.res $*.dll

# ------------------------
# ELV_CRTL.DLL - LINK ONLY
# ------------------------

elv_crtl.dll : elv_crtl.def
    link /NOD /NOE /NOI $(ELV_CRTL_OBJS),elv_crtl.dll,,cdllobjs+os2,elv_crtl.def
    implib elv_crtl.lib elv_crtl.def
    mlib elv_crtl.lib+c:\c600\lib\cdllsupp.lib ;

###############################################################################
#                                                                             #
#   .ASM SOURCE FILES                                                         #
#                                                                             #
###############################################################################

# None as of 05-Jul-1991

###############################################################################
#                                                                             #
#   .C SOURCE FILES, GROUPED BY .EXE or .DLL                                  #
#                                                                             #
###############################################################################

# ------------
# ELVIRA3.EXE
# ------------

config.obj   : config.c elv_base.h config.h config$.h elv_exe.h version.h fileio.h util.h
    cl $(EXE_CFLAGS) $<

elvira3.obj  : elvira3.c elv_base.h elvira3$.h elv_exe.h version.h null.h help11.h helpid11.h fileio.h print.h status.h util.h config.h processe.h
    cl $(EXE_CFLAGS) $<

process.obj  : process.c elv_base.h elv_exe.h version.h util.h
    cl $(EXE_CFLAGS) $<

# ------------
# ELV_B100.DLL
# ------------

b100elv3.obj : b100elv3.c b100os2.h b100elv3.h b100mdem.h
    cl $(DLL_CFLAGS) $<

b100os2.obj  : b100os2.c b100os2.h
    cl $(DLL_CFLAGS) $<

b100mdem.obj : b100mdem.c b100os2.h b100mdem.h b100psk.h
    cl $(DLL_CFLAGS) $<

# ------------
# ELV_CLCT.DLL
# ------------

datacoll.obj : datacoll.c elv_base.h version.h fileio.h util.h b100os2.h b100elv3.h datacol$.h datacoll.h portia.h cmpndtbl.h
    cl $(DLL_CFLAGS) $<

rxctl.obj    : rxctl.c elv_base.h version.h util.h fileio.h rxctl.h rxctl$.h
    cl $(DLL_CFLAGS) $<

scan.obj     : scan.c elv_base.h version.h util.h fileio.h b100os2.h b100elv3.h scan$.h scanfunc.h
    cl $(DLL_CFLAGS) $<

scanfunc.obj : scanfunc.c elv_base.h version.h util.h b100os2.h b100elv3.h scan$.h scanfunc.h fileio.h cmpndtbl.h
    cl $(DLL_CFLAGS) $<

siggen.obj   : siggen.c elv_base.h version.h util.h siggen.h siggen$.h fileio.h cmpndtbl.h
    cl $(DLL_CFLAGS) $<

sim.obj      : sim.c elv_base.h version.h util.h fileio.h sim.h sim$.h
    cl $(DLL_CFLAGS) $<

# ------------
# ELV_DISP.DLL
# ------------

bitplot.obj  : bitplot.c elv_base.h version.h fileio.h util.h
    cl $(DLL_CFLAGS) $<

dataplot.obj : dataplot.c elv_base.h version.h dataplo$.h util.h cmpndtbl.h
    cl $(DLL_CFLAGS) $<

text.obj     : text.c elv_base.h version.h util.h
    cl $(DLL_CFLAGS) $<

# ------------
# ELV_DMOD.DLL
# ------------

anlgdmod.obj : anlgdmod.c elv_base.h version.h anlgdmod.h anlgdmo$.h cmpndtbl.h b100mdem.h util.h fileio.h
    cl $(DLL_CFLAGS) $<

bpskdmod.obj : bpskdmod.c elv_base.h version.h bpskdmod.h bpskdmo$.h cmpndtbl.h util.h fileio.h
    cl $(DLL_CFLAGS) $<

fskdmod.obj  : fskdmod.c elv_base.h version.h fskdmod.h fskdmod$.h cmpndtbl.h fileio.h util.h
    cl $(DLL_CFLAGS) $<

modem.obj    : modem.c elv_base.h util.h version.h b100os2.h b100elv3.h b100mdem.h b100psk.h modem.h modem$.h cmpndtbl.h fileio.h
    cl $(DLL_CFLAGS) $<

# ------------
# ELV_FAX.DLL
# ------------

decutil.obj   : decutil.c elv_base.h util.h version.h null.h help11.h helpid11.h fax.h decutil.h
    cl $(DLL_CFLAGS) $<

fax.obj      : fax.c elv_base.h util.h version.h null.h help11.h helpid11.h null.ext lm_dxi.h fax.h decutil.h fileio.h fax$.h
    cl $(DLL_CFLAGS) $<

# ------------
# ELV_FILE.DLL
# ------------

fileio.obj   : fileio.c easyfont.h elv_base.h util.h fileio.h fileio$.h
    cl $(DLL_CFLAGS) $<

# ------------
# ELV_LOR.DLL
# ------------

bitproc.obj  : bitproc.c elv_base.h version.h bitproc.h bitproc$.h util.h fileio.h
    cl $(DLL_CFLAGS) $<

# ------------
# ELV_MLTI.DLL
# ------------

classify.obj : classify.c elv_base.h util.h version.h chclass.h portia.h fileio.h b100os2.h b100elv3.h classify.h classif$.h
    cl $(DLL_CFLAGS) $<

energy.obj   : energy.c elv_base.h version.h elv_mlti.h energy.h energy$.h fileio.h util.h
    cl $(DLL_CFLAGS) $<

fsk.obj      : fsk.c elv_base.h version.h elv_mlti.h fsk.h fsk$.h fileio.h util.h
    cl $(DLL_CFLAGS) $<

searche.obj  : searche.c elv_base.h version.h elv_mlti.h b100por.h portia.h fileio.h chclass.h searche.h searche$.h util.h
    cl $(DLL_CFLAGS) $<

spltband.obj : spltband.c elv_base.h version.h elv_mlti.h spltbndf.h spltband.h spltban$.h fileio.h util.h
    cl $(DLL_CFLAGS) $<

topid.obj    : topid.c elv_base.h version.h elv_mlti.h topid.h topid$.h fileio.h util.h
    cl $(DLL_CFLAGS) $<

vftid.obj    : vftid.c elv_base.h version.h elv_mlti.h vftid.h vftid$.h fileio.h util.h
    cl $(DLL_CFLAGS) $<

# ------------
# ELV_NAA.DLL
# ------------

casdecod.obj : casdecod.c elv_base.h version.h casdeco$.h util.h
    cl $(DLL_CFLAGS) $<

hdlc.obj     : hdlc.c elv_base.h version.h hdlc$.h cmpndtbl.h util.h
    cl $(DLL_CFLAGS) $<

sif.obj      : sif.c elv_base.h version.h sif$.h util.h
    cl $(DLL_CFLAGS) $<

naa.obj      : naa.c elv_base.h version.h naaglb.h naa$.h util.h
    cl $(DLL_CFLAGS) $<

naaclass.obj : naaclass.c elv_base.h version.h naaglb.h util.h
    cl $(DLL_CFLAGS) $<

naadecod.obj : naadecod.c elv_base.h version.h naaglb.h util.h
    cl $(DLL_CFLAGS) $<

naaevent.obj : naaevent.c elv_base.h naaglb.h naaeven$.h version.h util.h
    cl $(DLL_CFLAGS) $<

mar.obj      : mar.c elv_base.h version.h mar$.h util.h
    cl $(DLL_CFLAGS) $<

# ------------
# ELV_PROC.DLL
# ------------

fft.obj      : fft.c elv_base.h version.h fft$.h cmpndtbl.h fileio.h util.h
    cl $(DLL_CFLAGS) $<

filter.obj   : filter.c elv_base.h version.h filter$.h cmpndtbl.h fileio.h util.h
    cl $(DLL_CFLAGS) $<

mathe.obj    : mathe.c elv_base.h version.h mathe$.h cmpndtbl.h util.h fileio.h
    cl $(DLL_CFLAGS) $<

resample.obj : resample.c elv_base.h version.h util.h resampl$.h cmpndtbl.h fileio.h
    cl $(DLL_CFLAGS) $<

# ------------
# ELV_RCGN.DLL
# ------------

baudline.obj : baudline.c elv_base.h version.h elv_mlti.h baudline.h baudlin$.h fileio.h util.h
    cl $(DLL_CFLAGS) $<

carrier.obj  : carrier.c elv_base.h version.h elv_mlti.h carrier.h carrier$.h fileio.h util.h
    cl $(DLL_CFLAGS) $<

recognz.obj  : recognz.c elv_base.h version.h fileio.h util.h recognz.h recognz$.h
    cl $(DLL_CFLAGS) $<

# ------------
# ELV_UTIL.DLL
# ------------

help11.obj   : help11.c elv_base.h version.h util.h help11.h helpid11.h
    cl $(DLL_CFLAGS) $<

print.obj    : print.c elv_base.h print$.h print.h version.h util.h null.h help11.h helpid11.h
    cl $(DLL_CFLAGS) $<

status.obj   : status.c elv_base.h status$.h status.h util.h
    cl $(EXE_CFLAGS) $<

util.obj     : util.c elv_base.h b100os2.h b100elv3.h elv_mlti.h util.h version.h null.h help11.h helpid11.h
    cl $(DLL_CFLAGS) $<

-------------------------------------------------------------------------------
<END OF MAKEFILE>


<START OF ELV_CRTL.DEF>
-------------------------------------------------------------------------------

;////////////////////////////////////////////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////
;
;  ELV_CRTL.DEF
;
;  Definition file for ELV_CRTL.DLL
;
;//////////////////////////////////////////////////////////////////////////////
;//////////////////////////////////////////////////////////////////////////////

LIBRARY     ELV_CRTL INITINSTANCE

DESCRIPTION 'Microsoft C 6.0 Run Time Library DLL'
DATA        MULTIPLE
SEGMENTS    _IOSEG CLASS 'IOSEG_CODE' IOPL
PROTMODE
EXPORTS
           ATOF
           DIFFTIME
           LDIV
           STRTOD
           _abort
           _abs
           _access
           _alloca
           _asctime
           _atexit
           _atoi
           _atol
           _bsearch
           _calloc
           _cgets
           _chdir
           __chdrive
           _chmod
           _chsize
           _clearerr
           _clock
           _close
           _cprintf
           _cputs
           _creat
           _cscanf
           _ctime
           _cwait
           _div
           _dup
           _dup2
           _ecvt
           _eof
           _environ
           __errno
           _execl
           _execle
           _execlp
           _execlpe
           _execv
           _execve
           _execvp
           _execvpe
           _exit
           _fclose
           _fcloseall
           _fcvt
           _fdopen
           _feof
           _ferror
           _fflush
           _fgetc
           _fgetchar
           _fgetpos
           _fgets
           _filelength
           _fileno
           _flushall
           _fopen
           __fsopen
           _fprintf
           _fputc
           _fputchar
           _fputs
           _fread
           _free
           _freopen
           _fscanf
           _fseek
           _fsetpos
           _fstat
           _ftell
           _ftime
           __fullpath
           _fwrite
           _gcvt
           _getc
           _getch
           _getchar
           _getche
           _getcwd
           __getdcwd
           __getdrive
           _getenv
           _getpid
           _gets
           _getw
           _gmtime
           _halloc
           _hfree
           _inp
           _inpw
           _isalnum
           _isalpha
           _isascii
           _isatty
           _iscntrl
           _iscsym
           _iscsymf
           _isdigit
           _isgraph
           _islower
           _isprint
           _ispunct
           _isspace
           _isupper
           _isxdigit
           _itoa
           _kbhit
           _labs
           _lfind
           _localeconv
           _localtime
           _locking
           _longjmp
           _lsearch
           _lseek
           _ltoa
           _malloc
           _memccpy
           _memchr
           _memcmp
           _memcpy
           _memicmp
           _memmove
           _memset
           _mkdir
           _mktemp
           _mktime
           _movedata
           _onexit
           _open
           _outp
           _outpw
           __pclose
           _perror
           __pipe
           __popen
           _printf
           _putc
           _putch
           _putchar
           _putenv
           _puts
           _putw
           _qsort
           _rand
           _realloc
           _read
           _remove
           _rename
           _rewind
           _rmdir
           _rmtmp
           _scanf
           _segread
           _setbuf
           _setjmp
           _setlocale
           _setmode
           _setvbuf
           _signal
           _sopen
           _spawnl
           _spawnle
           _spawnlp
           _spawnlpe
           _spawnv
           _spawnve
           _spawnvp
           _spawnvpe
           _sprintf
           _srand
           _sscanf
           _stackavail
           _stat
           _strcat
           _strchr
           _strcmp
           _strcmpi
           _strcoll
           _strcpy
           _strcspn
           _strdup
           _strerror
           _strftime
           _stricmp
           _strlen
           _strlwr
           _strncat
           _strncmp
           _strncpy
           _strnicmp
           _strnset
           _strpbrk
           _strrchr
           _strrev
           _strset
           _strspn
           _strstr
           _strtok
           _strtol
           _strtoul
           _strupr
           _strxfrm
           _swab
           _system
           _tell
           _tempnam
           _time
           _tmpfile
           _tmpnam
           _toascii
           _tolower
           __tolower
           _toupper
           __toupper
           _tzset
           _ultoa
           _umask
           _ungetc
           _ungetch
           _unlink
           _utime
           _vfprintf
           _vprintf
           _vsprintf
           _wait
           _write
           _daylight
           _timezone
           _tzname
           __aDBused
           __aFchkstk
           __aFrchkstk
           __aFFaldiv
           __aFFalmul
           __aFFalrem
           __aFFalshl
           __aFFalshr
           __aFFauldiv
           __aFFaulmul
           __aFFaulrem
           __aFFaulshr
           __aFahdiff
           __aFldiv
           __aFllrot
           __aFlmul
           __aFlrem
           __aFlrrot
           __aFlshl
           __aFlshr
           __aFNaldiv
           __aFNalmul
           __aFNalrem
           __aFNalshl
           __aFNalshr
           __aFNauldiv
           __aFNaulmul
           __aFNaulrem
           __aFNaulshr
           __aFuldiv
           __aFulmul
           __aFulrem
           __aFulshr
           __amblksiz
           __assert
           __beginthread
           __cexit
           __c_exit
           __chkstk
           __ctype
           __CRT_INIT
           __dll_heapadd
           __dll_ncalloc
           __dll_nexpand
           __dll_nfree
           __dll_nfreect
           __dll_nheapchk
           __dll_nheapset
           __dll_nheapwalk
           __dll_nmalloc
           __dll_nmemavl
           __dll_nmemmax
           __dll_nheapmin
           __dll_nrealloc
           __endthread
           __exit
           __bheapadd
           __bcalloc
           __bexpand
           __bfree
           __bfreeseg
           __bheapchk
           __bheapseg
           __bheapset
           __bheapwalk
           __bmalloc
           __bheapmin
           __brealloc
           __bmsize
           __expand
           __fcalloc
           __fexpand
           __ffree
           __fheapchk
           __fheapset
           __fheapwalk
           __fmalloc
           __fheapmin
           __fileinfo
           __fmemccpy
           __fmemchr
           __fmemcmp
           __fmemcpy
           __fmemicmp
           __fmemmove
           __fmemset
           __fmode
           __fmsize
           __frealloc
           __fstrcat
           __fstrchr
           __fstrcmp
           __fstricmp
           __fstrcpy
           __fstrcspn
           __fstrdup
           __fstrlen
           __fstrlwr
           __fstrncat
           __fstrncmp
           __fstrnicmp
           __fstrncpy
           __fstrnset
           __fstrpbrk
           __fstrrchr
           __fstrrev
           __fstrset
           __fstrspn
           __fstrstr
           __fstrtok
           __fstrupr
           __heapchk
           __heapset
           __iob
           __heapwalk
           __lrotl
           __lrotr
           __makepath
           __heapmin
           __msize
           __nmsize
           __QCfptr_error
           __QCnptr_error
           __rotl
           __rotr
           __searchenv
           __splitpath
           __strdate
           __strerror
           __strtime
           ___doserrno
           ACOS
           ASIN
           ATAN
           ATAN2
           CABS
           CEIL
           COS
           COSH
           EXP
           FABS
           FLOOR
           FMOD
           FREXP
           HYPOT
           J0
           J1
           JN
           LDEXP
           LOG
           LOG10
           MODF
           POW
           SIN
           SINH
           SQRT
           TAN
           TANH
           Y0
           Y1
           YN
           _dieeetomsbin
           _dmsbintoieee
           _fieeetomsbin
           _fmsbintoieee
           _HUGE
           _matherr
           __aFCIacos
           __aFCIasin
           __aFCIatan
           __aFCIatan2
           __aFCIceil
           __aFCIcos
           __aFCIcosh
           __aFCIexp
           __aFCIfabs
           __aFCIfloor
           __aFCIfmod
           __aFCIlog
           __aFCIlog10
           __aFCImax
           __aFCImin
           __aFCIpow
           __aFCIsin
           __aFCIsinh
           __aFCIsqrt
           __aFCItan
           __aFCItanh
           __clear87
           __control87
           __fltused
           __fpreset
           __status87
           __aFdcvt
           __aFeaddd
           __aFeadds
           __aFedivd
           __aFedivdr
           __aFedivs
           __aFedivsr
           __aFeldd
           __aFeldl
           __aFeldq
           __aFelds
           __aFeldt
           __aFeldw
           __aFemuld
           __aFemuls
           __aFestd
           __aFestdp
           __aFests
           __aFestsp
           __aFesttp
           __aFesubd
           __aFesubdr
           __aFesubs
           __aFesubsr
           __aFfabs
           __aFfadd
           __aFfaddd
           __aFfadds
           __aFfchs
           __aFfcmp
           __aFfcompp
           __aFfdiv
           __aFfdivd
           __aFfdivdr
           __aFfdivr
           __aFfdivs
           __aFfdivsr
           __aFfdup
           __aFfld1
           __aFfldd
           __aFfldl
           __aFfldq
           __aFflds
           __aFfldt
           __aFfldw
           __aFfldz
           __aFfmul
           __aFfmuld
           __aFfmuls
           __aFfstd
           __aFfstdp
           __aFfsts
           __aFfstsp
           __aFfsttp
           __aFfsub
           __aFfsubd
           __aFfsubdr
           __aFfsubr
           __aFfsubs
           __aFfsubsr
           __aFftol
           __aFftst
           __aFfxch
           __aFsaddd
           __aFsadds
           __aFsdivd
           __aFsdivdr
           __aFsdivs
           __aFsdivsr
           __aFsldd
           __aFsldl
           __aFsldq
           __aFslds
           __aFsldt
           __aFsldw
           __aFsmuld
           __aFsmuls
           __aFsstd
           __aFsstdp
           __aFssts
           __aFsstsp
           __aFssttp
           __aFssubd
           __aFssubdr
           __aFssubs
           __aFssubsr
           _acosl
           _asinl
           _atanl
           _atan2l
           _cabsl
           _ceill
           _cosl
           _coshl
           _expl
           _fabsl
           _floorl
           _fmodl
           _hypotl
           _ldexpl
           _logl
           _log10l
           _modfl
           _powl
           _sinl
           _sinhl
           _sqrtl
           _tanl
           _tanhl
           __atold
           __fac
           __j0l
           __j1l
           __jnl
           __LHUGE
           __matherrl
           __strtold
           __y0l
           __y1l
           __ynl
           __aFCIacosl
           __aFCIasinl
           __aFCIatanl
           __aFCIatan2l
           __aFCIceill
           __aFCIcosl
           __aFCIcoshl
           __aFCIexpl
           __aFCIfloorl
           __aFCIfmodl
           __aFCIlogl
           __aFCIlog10l
           __aFCIpowl
           __aFCIsinl
           __aFCIsinhl
           __aFCIsqrtl
           __aFCItanl
           __aFCItanhl

-------------------------------------------------------------------------------
<END OF ELV_CRTL.DEF>


<START OF ELV_DISP.DEF>
-------------------------------------------------------------------------------

;////////////////////////////////////////////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////
;
;  ELV_DISP.DEF
;
;  DEFINITION FILE FOR ELV_DISP.DLL
;
;//////////////////////////////////////////////////////////////////////////////
;//////////////////////////////////////////////////////////////////////////////

LIBRARY         ELV_DISP INITINSTANCE

DESCRIPTION     'ELVIRA DISPLAY DLL'
PROTMODE
DATA            MULTIPLE
HEAPSIZE        8192
EXPORTS         MODULEINIT03
                MODULE03
                MODULEMODIFY03
                BITPLOTPROC

                MODULEINIT01
                MODULE01
                MODULEMODIFY01
                MANUALSCALEDLGPROC

                MODULEINIT25
                MODULE25
                MODULEMODIFY25

-------------------------------------------------------------------------------
<END OF ELV_DISP.DEF>


<START OF ELV_DISP.RC>
-------------------------------------------------------------------------------

//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//
//  ELV_DISP.RC
//
///////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////

#include <os2.h>

#include "version.h"  // Version specific stuff

/***********************************************************************/

/* Data Plot Files */

#ifdef INC_DATAPLOT

#include "dataplo$.h"
rcinclude dataplo$.dlg

#endif

-------------------------------------------------------------------------------
<END OF ELV_DISP.RC>