Synchronet now requires the libarchive development package (e.g. libarchive-dev on Debian-based Linux distros, libarchive.org for more info) to build successfully.

Commit 1b393810 authored by rswindell's avatar rswindell

OpenDoors C++ DoorKit (v6.21)

parent a8b56c32
; DOOR.CFG - Sample OpenDoors door configuration file
;
; This configuration file can be used by the sysop to customize an OpenDoors
; door for use on their own system. The information in this file is NOT usually
; needed, and the file can be left as is, or even erased, without effecting the
; door's performance. OpenDoors is designed to run on almost any BBS system
; automatically, without requiring anything but to the door's .EXE file.
; However, there are many cases where the sysop may wish to customize a door's
; operation using this configuration file. The configuration file system is
; provided to allow the customization of options such as paging hours, maximum
; time permitted within the door, etc., and to allow OpenDoors doors to be run
; under even the most non-typical BBS setups.
;
; Any text following a semi-colon (;), and blank lines, are ignored.
;
;------------------------------------------------------------------------------
;
; BBS system directory. Indicates where the door information file (drop file)
; can be found. Remove the semi-colon (;) to activate this option.
;
;BBSDir C:\BBS
;
;------------------------------------------------------------------------------
;
; The door's working directory. This is where the door's system files are
; located. Remove the semi-colon (;) to activate this option.
;
;DoorDir C:\BBS\MYDOOR
;
;------------------------------------------------------------------------------
;
; Local mode override. Forces door to always operate in local test mode.
; Remove the semi-colon (;) to activate this option. When this mode is
; activated, no door information file is required and default settings are
; used for the user's name, location, etc.
;
;LocalMode
;
;------------------------------------------------------------------------------
;
; Door personality setting. This setting selects one of a number of sysop
; interface personalities. Each personality setting emulates the status line
; format and sysop function keys of a particular BBS package. Valid
; personality settings are:
;
; Standard (OpenDoors style, simplified from RA)
; PCBoard
; RemoteAccess
; Wildcat
;
Personality Standard
;
;------------------------------------------------------------------------------
;
; Log File options. "LogFileName" specifies filename (path optional) where the
; door should record log information. To disable the log file altogether,
; remove the semi-colon (;) from the "DisableLogging" line.
;
;LogFileName DOOR.LOG
;DisableLogging
;
;------------------------------------------------------------------------------
;
; BBS node number that door is running on. Only used if OpenDoors is unable
; to determine the node number by some other means.
;
Node 1
;
;------------------------------------------------------------------------------
;
; Sysop paging hours. Sysop paging will be permitted beginning at the start
; time, up until, but not including, the end time. Times should be in 24-hour
; format. To disable paging on a particular day, set the paging start and end
; times to the same time. To make paging always available, set the start time
; to 0:00 and the end time to 23:59.
;
; Start Time End Time
SundayPagingHours 9:00 22:00
MondayPagingHours 8:30 22:00
TuesdayPagingHours 8:30 22:00
WednesdayPagingHours 8:30 22:00
ThursdayPagingHours 8:30 22:00
FridayPagingHours 8:30 22:00
SaturdayPagingHours 9:00 22:00
;
;------------------------------------------------------------------------------
;
; Duration of sysop page. Value indicates the number of beeps that compose the
; sysop page alarm, with one beep sounded per second.
;
PageDuration 10
;
;------------------------------------------------------------------------------
;
; Maximum length of time a user is permitted to access the door. If the user's
; total remaining time on the BBS is less than this value, the user will only
; be permitted to access the door for this shorter length of time. This option
; may be disabled by placing a semi-colon (;) at the beginning of the line.
; When this option is disabled, the user will be permitted to use the full
; of their remaining time on the BBS within the door.
;
;MaximumDoorTime 15
;
;------------------------------------------------------------------------------
;
; Inactivity timeout. Specifies the maximum number of seconds that may elapse
; without the user pressing any key, before the user will be automatically
; disconnected. A value of 0 disables inactivity timeouts.
;
InactivityTimeout 200
;
;------------------------------------------------------------------------------
;
; Name of the sysop. OpenDoors can usually determine the sysop's name from the
; information passed to the door by the BBS. However, some BBS software does
; not supply this information to doors. In such cases, if the sysop's name is
; required by the door, it may be supplied here. Remove the semi-colon (;) to
; activate this option.
;
;SysopName The Sysop
;
;------------------------------------------------------------------------------
;
; Name of the BBS. OpenDoors can usually determine the name of the BBS from
; the information passed to the door by the BBS. However, some BBS software
; does not supply this information to door programs. In such cases, if the
; name of the BBS is needed by the door, it may be supplied here. Remove the
; semi-colon (;) to activate this option.
;
;SystemName Unnamed BBS
;
;------------------------------------------------------------------------------
;
; Door colour options. These options specify the various text colours that
; will be used by the door if ANSI or AVATAR graphics modes are available.
; Colours are specified in the format:
;
; {Bright} {Flashing} [Foreground Colour] on [Background Colour]
;
; Where foreground and background colours are one of:
;
; Black
; Blue
; Green
; Cyan
; Red
; Magenta
; Yellow / Brown
; White / Grey
;
; Note that some of these options (such as those that pertain to files
; listings) are not used for all doors.
;
ChatUserColour Bright white on black
ChatSysopColour Bright red on black
FileListTitleColour Bright yellow on black
FileListNameColour Bright yellow on black
FileListSizeColour Bright magenta on black
FileListDescriptionColour Cyan on black
FileListOfflineColour Bright red on black
PagePromptColour Bright white on black
PopupMenuTitleColour Bright white on grey
PopupMenuBorderColour Black on grey
PopupMenuTextColour Black on grey
PopupMenuKeyColour Red on grey
PopupMenuHighlightColour Grey on black
PopupMenuHighKeyColour Red on black
;
;------------------------------------------------------------------------------
;
; Memory swapping options. These options are generally not needed, but can be
; used to customize OpenDoor's swapping behaviour. "SwappingDir" can be used
; to specify which directory or directories should be used for swapping.
; Multiple directory paths can be seperated using a semi-colon.
; "SwappingNoEMS" can be used to prevent any swapping from being done to EMS
; memory, and "SwappingDisable" can be used to disable memory swapping
; altogether. Remove the semi-colon (;) to activate any of these options.
;
;SwappingDir C:\
;SwappingNoEMS
;SwappingDisable
;
;------------------------------------------------------------------------------
;
; Serial port options. These options are generally not needed, as these
; settings can usually be determined from the BBS door information file.
; "LockedBPS" specifies the the BPS rate at which the door should communicate
; with the modem. "SerialPort" specifies the port port number that the modem
; is connected to. Unless you have reassigned the port numbers through your
; FOSSIL drive, port 0 corresponds to COM1, port 1 corresponds to COM2, and
; so on. Remove the semi-colon (;) to activate either of these options.
;
;LockedBPS 38400
;SerialPort 0
;
;
; Under DOS, a FOSSIL driver is normally used for serial I/O if one is
; available. If a FOSSIL driver has not been loaded, the door communicates
; directly with the modem. Removing the semi-colon (;) from the "NoFossil"
; option causes the door to always communicate directly with the modem,
; bypassing any FOSSIL driver.
;
;NoFossil
;
;------------------------------------------------------------------------------
;
; The following options only apply for the MS-DOS version of this program,
; and only if a FOSSIL driver is NOT being used for serial communications.
; If a FOSSIL driver IS being used, these options are normally set on the
; FOSSIL driver command line. Under Windows, these options are set in the
; control panel.
;
; Hexidecimal address of the serial port. This address can usually be
; determined automatically for ports COM1, COM2, COM3, and COM4, and is
; normally only required for ports COM5 and higher. Remove the semi-colon
; (;) to activate this option.
;
;PortAddress 2F8
;
;
; Interrupt request line that the serial port is using. May be any IRQ line
; from 1 to 15. By default, IRQ line 4 is used for ports COM1: and COM3:,
; while IRQ line 3 is used for all other ports. Remove the semi-colon (;)
; to activate this option.
;
;PortIRQ 4
;
;
; Serial I/O buffer sizes. "ReceiveBuffer" specifies the number of bytes in
; the serial I/O receive buffer. You may want to increase this buffer size
; if you find that characters being sent from the user's modem are being lost.
; "TransmitBuffer" specifies the number of bytes in the serial I/O transmit
; buffer. You may want to increase this buffer size for improved performance
; in some multitasking environments. A transmit buffer size smaller than 3072
; bytes is not recommended.
;
ReceiveBuffer 256
TransmitBuffer 3072
;
;
; UART FIFO buffers. Normally, OpenDoors will use 16550A UART FIFO buffers
; if they are available. You can prevent OpenDoors from using the FIFO
; buffers, even if they are available, by removing the semi-colon before
; the "NoFIFO" keyword. The "FIFOTriggerSize" specifies how many characters
; may be placed in the FIFO buffers before an serial I/O interrupt is
; envoked. Valid values are 1, 4, 8 and 14 bytes. The default value is 4
; bytes.
;
;NoFIFO
FIFOTriggerSize 4
;
;------------------------------------------------------------------------------
;
; The following options control if and how the Windows version of this program
; disables DTR response by the modem prior to exiting. Normally, the sequence
; of modem commands specified by DisableDTR is sent before exiting, to prevent
; the modem from hanging up. To disable this feature, remove the semi-colon
; (;) at the beginning of the NoDTRDisable line.
;
; DisableDTR specifies a series of commands to be sent to the modem, and
; responses to be received by the modem. Each command and response is
; separated by a space. A tilde (~) character denotes a one second pause, and
; a pipe (|) denotes a CR.
;
;NoDTRDisable
DisableDTR ~+++ OK AT&D0| OK ATO|
;
;------------------------------------------------------------------------------
;
; Custom door information file support. OpenDoors automatically recognizes
; most door information file (drop file) formats, including DORINFO?.DEF,
; EXITINFO.BBS, DOOR.SYS, SFDOORS.DAT, CALLINFO.BBS and CHAIN.TXT. However,
; to permit OpenDoors doors to operate on BBS systems that produce a different
; format file, you may define a custom door information file format. A custom
; door information file format is defined using the "CustomFileName" command,
; followed by one or more lines beginning with the "CustomFileLine" command.
;
; The "CustomFileName" option specifies the filename used to distinguish this
; file format from other file formats. This filename should not include a
; path. To specify the path where the door information file is located, use
; the BBSDir setting, near the beginning of this file. If the filename of the
; custom format is the same as that of one of the built-in formats, the custom
; format will override the built-in format.
;
; The actual format of the custom file is specified using a number of lines
; that begin with the keyword "CustomFileLine". Each of these lines will
; correspond to a single line in the door information file, with the option
; following the "CustomFileLine" keyword specifying the information that can
; be found on that line. This can be one of the following keywords:
;
; Ignore - Causes the next line in the door information
; file to be ignored. Use on lines for which none
; of the options below apply.
; ComPort - COM? port the modem is connected to
; (0 indicates local mode)
; FossilPort - Fossil port number the modem is connected to
; ModemBPS - BPS rate at which to communicate with modem
; (0 or non-numerical value indicates local mode)
; LocalMode - 1, T or Y if door is operating in local mode
; UserName - Full name of the user
; UserFirstName - First name(s) of the user
; UserLastName - Last name of the user
; Alias - The user's psuedonym / handle
; HoursLeft - Hours user has left online
; MinutesLeft - Minutes user has left online, or time left online
; in format hh:mm
; SecondsLeft - Seconds user has left online, or time left online
; in format hh:mm:ss or format mm:ss
; (If more than one of the above time options are
; used, the user time left is taken to be the total
; of all of these values.)
; ANSI - 1, T, Y or G for ANSI graphics mode
; AVATAR - 1, T or Y for AVATAR graphics mode
; RIP - 1, T or Y for RIP graphics mode
; PagePausing - 1, T or Y if user wishes a pause at end of screen
; ScreenLength - Number of lines on user's screen
; ScreenClearing - 1, T or Y if screen clearing mode is on
; Security - The user's security level / access level
; City - City the user is calling from
; Node - Node number user is connected to
; SysopName - Full name of the sysop
; SysopFirstName - The sysop's first name(s)
; SysopLastName - The sysop's last name
; SystemName - Name of the BBS
;
;
CustomFileName EXAMPLE.DEF ; Same format as DORINFO?.DEF
CustomFileLine SystemName
CustomFileLine SysopFirstName
CustomFileLine SysopLastName
CustomFileLine ComPort
CustomFileLine ModemBPS
CustomFileLine Ignore
CustomFileLine UserFirstName
CustomFileLine UserLastName
CustomFileLine City
CustomFileLine ANSI
CustomFileLine Security
CustomFileLine MinutesLeft
;
;------------------------------------------------------------------------------
TEST BBS
THE
SYSOP
COM0
0 BAUD,N,8,1
0
TEST
USER
UNKNOWN LOCATION
1
10
60
# OpenDoors 6.10
# (C) Copyright 1991 - 1997 by Brian Pirie. All Rights Reserved.
#
#
# File: DOS.mak
#
# Description: Makefile used to build the MS-DOS OpenDoors libraries from
# the sources. Usage is described below.
#
# Revisions: Date Ver Who Change
# ---------------------------------------------------------------
# Oct 13, 1994 6.00 BP New file header format.
# Oct 13, 1994 6.00 BP Made directories configurable.
# Oct 13, 1994 6.00 BP Erase tlib-created backup file.
# Oct 14, 1994 6.00 BP Added ODGen.h dependencies.
# Oct 14, 1994 6.00 BP Added ODPlat.c module.
# Oct 31, 1994 6.00 BP Added headers dependency constant.
# Nov 01, 1994 6.00 BP Added ODUtil.c module.
# Dec 31, 1994 6.00 BP Added -B option for Borland Cs.
# Jan 01, 1995 6.00 BP Added ODKrnl.c, ODKrnl.h.
# Jan 29, 1995 6.00 BP Added ODCmdLn.c.
# Nov 16, 1995 6.00 BP Added ODInQue.c, and new headers.
# Nov 21, 1995 6.00 BP Created ODInit1.c, ODInit2.c.
# Dec 02, 1995 6.00 BP Added ODRes.h
# Dec 02, 1995 6.00 BP Added ODFrame.c, ODFrame.h.
# Dec 02, 1995 6.00 BP Added ODStat.h, ODSwap.h.
# Dec 04, 1995 6.00 BP Changes for building Win32 version.
# Dec 05, 1995 6.00 BP Split into makefiles for each platform
# Dec 07, 1995 6.00 BP Added ODEdit.c.
# Jan 04, 1996 6.00 BP Added ODGetIn.c.
# Feb 09, 1996 6.00 BP Renamed ODInit?.* to ODInEx?.*
# Feb 19, 1996 6.00 BP Changed version number to 6.00.
# Mar 03, 1996 6.10 BP Begin version 6.10.
#
###############################################################################
#
# USAGE INFORMATION
#
###############################################################################
#
# Command Line: make -fDOS.mak -DTARGET=?
# or
# nmake -fDOS.mak "TARGET=?"
#
# Where: "TARGET=?" - Specifies which version of the library should be
# built. TARGET can be set to:
#
# t - MS-DOS version, tiny memory model
# s - MS-DOS version, small memory model
# c - MS-DOS version, compact memory model
# m - MS-DOS version, medium memory model
# l - MS-DOS version, large memory model
# h - MS-DOS version, huge memory model
#
# Setting must be in lower case for Borland compilers,
# uppercase for Microsoft compilers.
#
###############################################################################
#
# CONFIGURATION
#
# Customize this section of the makefile to provide the relevant information
# for your compiler, assembler (if any) and build environment.
#
###############################################################################
# Compiler executable file name. Use:
#
# tcc - For Borland Turbo C and Turbo C++
# bcc - For Borland C++
# cl - For Microsoft compilers
#
CC=tcc
#
#------------------------------------------------------------------------------
#
# Assembler executable file name. Use:
#
# tasm - For Turbo Assembler
# masm - For Microsoft Macro Assembler
#
AS=tasm
#
#------------------------------------------------------------------------------
#
# Library managment utility. Use:
#
# tlib - For Borland compilers
# lib - For Microsoft compilers
#
LIB=tlib
#
#------------------------------------------------------------------------------
#
# MS-DOS compiler command-line flags. Use:
#
# -m$(TARGET) -c -O -G -Z -d -B - For Borland compilers including Turbo C
# /a$(TARGET) /c /nologo - For Microsoft compilers
#
CFLAGS=-m$(TARGET) -c -O -G -Z -d -Ic:\progra~1\tc\include
#
#------------------------------------------------------------------------------
#
# Assembler command-line flags.
#
AFLAGS=/mx
ADEFLCODE=/dLCODE
ADEFLDATA=/dLDATA
#
#------------------------------------------------------------------------------
#
# Output directories. customize for your own preferences. Note that trailing
# backslash (\) characters are required.
#
SOURCEDIR=.\ # Comments required
ODHEADERDIR=.\ # in order to
OBJDIR=..\obj\ # avoid line
LIBDIR=..\lib\ # concatentation
#
###############################################################################
#
# DEPENDENCIES
#
# You won't normally have to change anything after this point in this makefile.
#
###############################################################################
#
# Define primary target.
#
all: $(LIBDIR)ODoor$(TARGET).lib
#
#------------------------------------------------------------------------------
#
# Name of all headers.
#
HEADERS= $(HEADERDIR)ODCom.h\
$(HEADERDIR)ODCore.h\
$(HEADERDIR)ODFrame.h\
$(HEADERDIR)ODGen.h\
$(HEADERDIR)ODInEx.h\
$(HEADERDIR)ODInQue.h\
$(HEADERDIR)ODKrnl.h\
$(HEADERDIR)ODPlat.h\
$(HEADERDIR)ODRes.h\
$(HEADERDIR)ODScrn.h\
$(HEADERDIR)ODStat.h\
$(HEADERDIR)ODSwap.h\
$(HEADERDIR)ODTypes.h\
$(HEADERDIR)ODUtil.h\
$(HEADERDIR)OpenDoor.h
#
#------------------------------------------------------------------------------
#
# Build from C sources.
#
$(OBJDIR)odauto$(TARGET).obj : $(SOURCEDIR)odauto.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odauto.c
command /c erase $(OBJDIR)odauto$(TARGET).obj
move odauto.obj $(OBJDIR)odauto$(TARGET).obj
$(OBJDIR)odblock$(TARGET).obj : $(SOURCEDIR)odblock.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odblock.c
command /c erase $(OBJDIR)odblock$(TARGET).obj
move odblock.obj $(OBJDIR)odblock$(TARGET).obj
$(OBJDIR)odcfile$(TARGET).obj : $(SOURCEDIR)odcfile.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odcfile.c
command /c erase $(OBJDIR)odcfile$(TARGET).obj
move odcfile.obj $(OBJDIR)odcfile$(TARGET).obj
$(OBJDIR)odcmdln$(TARGET).obj : $(SOURCEDIR)odcmdln.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odcmdln.c
command /c erase $(OBJDIR)odcmdln$(TARGET).obj
move odcmdln.obj $(OBJDIR)odcmdln$(TARGET).obj
$(OBJDIR)odcom$(TARGET).obj : $(SOURCEDIR)odcom.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odcom.c
command /c erase $(OBJDIR)odcom$(TARGET).obj
move odcom.obj $(OBJDIR)odcom$(TARGET).obj
$(OBJDIR)odcore$(TARGET).obj : $(SOURCEDIR)odcore.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odcore.c
command /c erase $(OBJDIR)odcore$(TARGET).obj
move odcore.obj $(OBJDIR)odcore$(TARGET).obj
$(OBJDIR)oddrbox$(TARGET).obj : $(SOURCEDIR)oddrbox.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)oddrbox.c
command /c erase $(OBJDIR)oddrbox$(TARGET).obj
move oddrbox.obj $(OBJDIR)oddrbox$(TARGET).obj
$(OBJDIR)odedit$(TARGET).obj : $(SOURCEDIR)odedit.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odedit.c
command /c erase $(OBJDIR)odedit$(TARGET).obj
move odedit.obj $(OBJDIR)odedit$(TARGET).obj
$(OBJDIR)odedstr$(TARGET).obj : $(SOURCEDIR)odedstr.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odedstr.c
command /c erase $(OBJDIR)odedstr$(TARGET).obj
move odedstr.obj $(OBJDIR)odedstr$(TARGET).obj
$(OBJDIR)odemu$(TARGET).obj : $(SOURCEDIR)odemu.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odemu.c
command /c erase $(OBJDIR)odemu$(TARGET).obj
move odemu.obj $(OBJDIR)odemu$(TARGET).obj
$(OBJDIR)odgetin$(TARGET).obj : $(SOURCEDIR)odgetin.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odgetin.c
command /c erase $(OBJDIR)odgetin$(TARGET).obj
move odgetin.obj $(OBJDIR)odgetin$(TARGET).obj
$(OBJDIR)odgraph$(TARGET).obj : $(SOURCEDIR)odgraph.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odgraph.c
command /c erase $(OBJDIR)odgraph$(TARGET).obj
move odgraph.obj $(OBJDIR)odgraph$(TARGET).obj
$(OBJDIR)odinex1$(TARGET).obj : $(SOURCEDIR)odinex1.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odinex1.c
command /c erase $(OBJDIR)odinex1$(TARGET).obj
move odinex1.obj $(OBJDIR)odinex1$(TARGET).obj
$(OBJDIR)odinex2$(TARGET).obj : $(SOURCEDIR)odinex2.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odinex2.c
command /c erase $(OBJDIR)odinex2$(TARGET).obj
move odinex2.obj $(OBJDIR)odinex2$(TARGET).obj
$(OBJDIR)odinque$(TARGET).obj : $(SOURCEDIR)odinque.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odinque.c
command /c erase $(OBJDIR)odinque$(TARGET).obj
move odinque.obj $(OBJDIR)odinque$(TARGET).obj
$(OBJDIR)odkrnl$(TARGET).obj : $(SOURCEDIR)odkrnl.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odkrnl.c
command /c erase $(OBJDIR)odkrnl$(TARGET).obj
move odkrnl.obj $(OBJDIR)odkrnl$(TARGET).obj
$(OBJDIR)odlist$(TARGET).obj : $(SOURCEDIR)odlist.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odlist.c
command /c erase $(OBJDIR)odlist$(TARGET).obj
move odlist.obj $(OBJDIR)odlist$(TARGET).obj
$(OBJDIR)odlog$(TARGET).obj : $(SOURCEDIR)odlog.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odlog.c
command /c erase $(OBJDIR)odlog$(TARGET).obj
move odlog.obj $(OBJDIR)odlog$(TARGET).obj
$(OBJDIR)odmulti$(TARGET).obj : $(SOURCEDIR)odmulti.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odmulti.c
command /c erase $(OBJDIR)odmulti$(TARGET).obj
move odmulti.obj $(OBJDIR)odmulti$(TARGET).obj
$(OBJDIR)odplat$(TARGET).obj : $(SOURCEDIR)odplat.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odplat.c
command /c erase $(OBJDIR)odplat$(TARGET).obj
move odplat.obj $(OBJDIR)odplat$(TARGET).obj
$(OBJDIR)odpcb$(TARGET).obj : $(SOURCEDIR)odpcb.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odpcb.c
command /c erase $(OBJDIR)odpcb$(TARGET).obj
move odpcb.obj $(OBJDIR)odpcb$(TARGET).obj
$(OBJDIR)odpopup$(TARGET).obj : $(SOURCEDIR)odpopup.c $(HEADERS)
$(CC) $(CFLAGS) $(SOURCEDIR)odpopup.c
command /c erase $(OBJDIR)odpopup$(TARGET).obj
move odpopup.obj $(OBJDIR)odpopup$(TARGET).obj