Help us understand the problem. What is going on with this article?

Delphi 1.0 Client/Server が無償公開されたので Windows 10 (64bit) にインストールしてみる

はじめに

image.png

Delphi 25 周年記念で、Delphi 1.0 Client/Server がアンティークソフトウェアとして無償公開されたのでこれをインストールして試した記事を書きました。

そちらにも書いたのですが、Delphi 1.0 は 16bit アプリケーションなので 64bit Windows にはインストールできません。

winevdm on 64-bit Windows (OTVDM)

このソフトウェアは winevdm(16bit Windows エミュレータ)の 64bit Windows 版です。64bit Windows 上で 16bit Windows アプリケーションを実行する事ができます。

OTVDM のインストール方法

最新版を以下から持ってきます。

  1. [Job name] リストのいずれかをクリック。私は上を選択しました。
  2. [Artifacts] タブを選択。
  3. [File name] にリストされている ZIP をクリックしダウンロード。
    image.png

  4. アーカイブを解凍したら名前を OTVDM に変更して C:\ へ移動。つまり C:\OTVDM フォルダができる事になります。

  5. C:\OTVDM フォルダに移動、install.inf を Explorer で右クリックして [インストール]。

これでインストール完了です。

Delphi 1.0 Client/Server

まずは Delphi 1.0 をダウンロードしてアーカイブを解凍します。解凍した先を $(SOURCE) とします。

$(SOURCE)\INSTALL フォルダにある インストーラは動作しないので $(SOURCE)\RUNIMAGE フォルダの中身をコピーしてセットアップします。

ファイルコピー

  1. フォルダが取っ散らかるので C:\WIN16 フォルダを作成します。
  2. $(SOURCE)\RUNIMAGE フォルダの WINDOWS サブフォルダ以外を C:\WIN16 へコピーします。
    image.png
  3. $(SOURCE)\RUNIMAGE フォルダの WINDOWS サブフォルダを C:\OTVDM へコピーします (WINDOWS フォルダは既に存在するので上書きする形になります)。

環境変数 PATH の設定

Windows 10 の環境変数に PATH16 を追加します。これが OTVDM で参照されるパスとなります。値は C:\;C:\WINDOWS;C:\WIN16\IBLOCAL\BIN;C:\WIN16\IDAPI; です。
image.png

環境設定ファイルの作成

C:\OTVDM\WINDOWS に 9 つのファイルを作成します。

DELPHI.INI
[Library]
SearchPath=C:\WIN16\DELPHI\LIB
ComponentLibrary=C:\WIN16\DELPHI\BIN\COMPLIB.DCL
[Gallery]
BaseDir=C:\WIN16\DELPHI\GALLERY
[Experts]
ExptDemo=C:\WIN16\DELPHI\BIN\EXPTDEMO.DLL
[ReportSmith]
ExePath=C:\WIN16\RPTSMITH
[Transfer]
Count=4
Title0=ReportSmith
Path0=RPTSMITH.EXE
WorkingDir0=C:\WIN16\RPTSMITH
Params0=
Title1=Image Editor
Path1=IMAGEDIT.EXE
WorkingDir1=
Params1=
Title2=Database Desktop
Path2=DBD.EXE
WorkingDir2=C:\WIN16\DBD
Params2=
Title3=BDE Config
Path3=BDECFG.EXE
WorkingDir3=C:\WIN16\IDAPI
Params3=
[Session]
Project=
ODBC.INI
[ODBC Data Sources]
InterBase=Borland Interbase
RS_Btrieve=Btrieve Data (file.ddf)
RS_MS_Access=Access Data (*.mdb)
RS_dBASE=dBase Files (*.dbf)
RS_Excel=Excel Files (*.xls)
RS_FoxPro=FoxPro Files (*.dbf)
RS_Paradox=Q+E ParadoxFile
RS_Text=Text Files (*.txt; *.csv)
[InterBase]
Driver=C:\WINDOWS\SYSTEM\BLINT04.DLL
Workarounds=29
[RS_Btrieve]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
FileType=Btrieve
SingleUser=False
[RS_MS_Access]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
FileType=RedISAM
SingleUser=False
UseSystemDB=False
[RS_dBASE]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
FileType=dBase4
SingleUser=False
DataDirectory=C:\WIN16\RPTSMITH\video
[RS_Excel]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
FileType=Excel
MaxScanRows=200
[RS_FoxPro]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
FileType=FoxPro 2.5
SingleUser=False
DataDirectory=C:\WIN16\RPTSMITH\video
[RS_Paradox]
Driver=C:\WINDOWS\SYSTEM\BIPDX04.DLL
TableVersion=4
SortOrder=ASCII
ReadConsistency=0
LockReadBlob=0
IntlSort=0
Database=C:\WIN16\RPTSMITH\video
[RS_Text]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
FileType=Text
ColNameHeader=False
Format=CSVDelimited
MaxScanRows=25
CharacterSet=OEM
ODBCINST.INI
[ODBC Drivers]
Borland InterBase=Installed
dBase Files (*.dbf)=Installed
Text Files (*.txt; *.csv)=Installed
Q+E ParadoxFile=Installed
Excel Files (*.xls)=Installed
FoxPro Files (*.dbf)=Installed
Btrieve Files (file.ddf)=Installed
Btrieve Data (file.ddf)=Installed
Access Files (*.mdb)=Installed
Access Data (*.mdb)=Installed
[Borland InterBase]
Driver=C:\WINDOWS\SYSTEM\BLINT04.DLL
Setup=C:\WINDOWS\SYSTEM\BLINT04.DLL
[dBase Files (*.dbf)]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
Setup=C:\WINDOWS\SYSTEM\SIMADMIN.DLL
[Text Files (*.txt; *.csv)]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
Setup=C:\WINDOWS\SYSTEM\SIMADMIN.DLL
[Q+E ParadoxFile]
Driver=C:\WINDOWS\SYSTEM\BIPDX04.DLL
Setup=C:\WINDOWS\SYSTEM\BIPDX04.DLL
[Excel Files (*.xls)]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
Setup=C:\WINDOWS\SYSTEM\SIMADMIN.DLL
[FoxPro Files (*.dbf)]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
Setup=C:\WINDOWS\SYSTEM\SIMADMIN.DLL
[Btrieve Files (file.ddf)]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
Setup=C:\WINDOWS\SYSTEM\SIMADMIN.DLL
[Btrieve Data (file.ddf)]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
Setup=C:\WINDOWS\SYSTEM\SIMADMIN.DLL
[Access Files (*.mdb)]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
Setup=C:\WINDOWS\SYSTEM\SIMADMIN.DLL
[Access Data (*.mdb)]
Driver=C:\WINDOWS\SYSTEM\SIMBA.DLL
Setup=C:\WINDOWS\SYSTEM\SIMADMIN.DLL
ODBCISAM.INI
[Installable ISAMS]
RedISAM=red110.dll
Btrieve=btrv110.dll
dBase4=xbs110.dll
FoxPro 2.5=xbs110.dll
Excel=xlsisam.dll
Text=txtisam.dll
[Red ISAM]
MaxBufferSize=512
NetworkAccess=On
PageTimeout=600
[Btrieve ISAM]
CollatingSequence=ASCII
NetworkAccess=On
PageTimeout=600
[dBase ISAM]
CollatingSequence=ASCII
Deleted=On
Statistics=Truth
NetworkAccess=On
PageTimeout=600
RPTSMITH.INI
[ReportSmith]
ReportOpenLastUsedDirectory=C:\WIN16\RPTSMITH\video
X=66
Y=87
Width=960
Height=787
Style=0
[OptionsSection]
StartupTask=0
NewTask=0
FontEnumMode=2
[MACRO]
MacroPath=C:\WIN16\RPTSMITH\macros
BinaryPath=C:\WIN16\RPTSMITH\macros
RS_RUN.INI
[OptionsSection]
StartupTask=2
NewTask=0
FontEnumMode=2
[MACRO]
MacroPath=C:\WIN16\RS_RUN\macros
BinaryPath=C:\WIN16\RS_RUN\macros
[RS_Runtime]
ExePath=C:\WIN16\RS_RUN
RS_SQLIF.INI
[dBase Files (*.dbf)]
IsLocal=1
CountStarSupport=1
OpListType=1
OpGrpDCount=4
OpGrpWCount=1
OpGrp1Title="Comparison operators:"
OpGrp1Count=2
OpGrp1Item1Disp="x IN (a, b, c, ...)"
OpGrp1Item1Text=" IN (\r) \n"
OpGrp1Item2Disp="x NOT IN (a, b, c, ...)"
OpGrp1Item2Text=" NOT IN (\r) \n"
OpGrp2Title="Patterns, ranges and lists:"
OpGrp2Count=2
OpGrp2Item1Disp="x BETWEEN y AND z"
OpGrp2Item1Text=" BETWEEN \n AND "
OpGrp2Item2Disp="x NOT BETWEEN y AND z"
OpGrp2Item2Text=" NOT BETWEEN \n AND "
OpGrp3Title="Constants:"
OpGrp3Count=1
OpGrp3Item1Disp="'YYYY-MM-DD' - date"
OpGrp3Item1Text=" '\n' "
OpGrp4Title="Summary functions:"
OpGrp4Count=6
OpGrp4Item1Disp="AVG(col) - Average of column or column expression"
OpGrp4Item1Text=" AVG(\r) \n"
OpGrp4Item2Disp="COUNT(*) - Count of rows"
OpGrp4Item2Text=" COUNT(*) \n"
OpGrp4Item3Disp="COUNT(col) - Count of rows"
OpGrp4Item3Text=" COUNT(\r) \n"
OpGrp4Item4Disp="MAX(col) - Maximum value of column or column expression"
OpGrp4Item4Text=" MAX(\r) \n"
OpGrp4Item5Disp="MIN(col) - Minimum value of column or column expression"
OpGrp4Item5Text=" MIN(\r) \n"
OpGrp4Item6Disp="SUM(col) - Sum of column or column expression"
OpGrp4Item6Text=" SUM(\r) \n"
OpGrp5Title="SQL statement keywords:"
OpGrp5Count=2
OpGrp5Item1Disp="GROUP BY colexp1, colexp2... - Group and summarize results"
OpGrp5Item1Text=" GROUP BY \n"
OpGrp5Item2Disp="HAVING expr - Additional selection criteria for groups"
OpGrp5Item2Text=" HAVING \n"
;FnListType=1
FnGrpCount=1
FnGrp1Count=1
FnGrp1Title="String functions:"
FnGrp1Item1Disp="CONVERT(col,data type) - Conversion of column into specified data type"
FnGrp1Item1Text=" {fn CONVERT(\r,\n)}"

[Btrieve Data (file.ddf)]
IsLocal=1
CountStarSupport=1
OpListType=1
OpGrpDCount=3
OpGrpWCount=2
OpGrp1Title="Comparison operators:"
OpGrp1Count=2
OpGrp1Item1Disp="x IN (a, b, c, ...)"
OpGrp1Item1Text=" IN (\r) \n"
OpGrp1Item2Disp="x NOT IN (a, b, c, ...)"
OpGrp1Item2Text=" NOT IN (\r) \n"
OpGrp2Title="Patterns, ranges and lists:"
OpGrp2Count=2
OpGrp2Item1Disp="x BETWEEN y AND z"
OpGrp2Item1Text=" BETWEEN \n AND "
OpGrp2Item2Disp="x NOT BETWEEN y AND z"
OpGrp2Item2Text=" NOT BETWEEN \n AND "
OpGrp3Title="Constants:"
OpGrp3Count=1
OpGrp3Item1Disp="'YYYY-MM-DD' - date"
OpGrp3Item1Text=" '\n' "
OpGrp4Title="SQL statement keywords:"
OpGrp4Count=2
OpGrp4Item1Disp="GROUP BY colexp1, colexp2... - Group and summarize results"
OpGrp4Item1Text=" GROUP BY \n"
OpGrp4Item2Disp="HAVING expr - Additional selection criteria for groups"
OpGrp4Item2Text=" HAVING \n"
OpGrp5Title="Summary functions:"
OpGrp5Count=6
OpGrp5Item1Disp="AVG(col) - Average of column or column expression"
OpGrp5Item1Text=" AVG(\r) \n"
OpGrp5Item2Disp="COUNT(*) - Count of rows"
OpGrp5Item2Text=" COUNT(*) \n"
OpGrp5Item3Disp="COUNT(col) - Count of rows"
OpGrp5Item3Text=" COUNT(\r) \n"
OpGrp5Item4Disp="MAX(col) - Maximum value of column or column expression"
OpGrp5Item4Text=" MAX(\r) \n"
OpGrp5Item5Disp="MIN(col) - Minimum value of column or column expression"
OpGrp5Item5Text=" MIN(\r) \n"
OpGrp5Item6Disp="SUM(col) - Sum of column or column expression"
OpGrp5Item6Text=" SUM(\r) \n"
;FnListType=1
FnGrpCount=1
FnGrp1Count=1
FnGrp1Title="String functions:"
FnGrp1Item1Disp="CONVERT(col,data type) - Conversion of column into specified data type"
FnGrp1Item1Text=" {fn CONVERT(\r,\n)}"

[Excel Files (*.xls)]
IsLocal=1
CountStarSupport=1
OpListType=1
OpGrpDCount=3
OpGrpWCount=2
OpGrp1Title="Comparison operators:"
OpGrp1Count=2
OpGrp1Item1Disp="x IN (a, b, c, ...)"
OpGrp1Item1Text=" IN (\r) \n"
OpGrp1Item2Disp="x NOT IN (a, b, c, ...)"
OpGrp1Item2Text=" NOT IN (\r) \n"
OpGrp2Title="Patterns, ranges and lists:"
OpGrp2Count=2
OpGrp2Item1Disp="x BETWEEN y AND z"
OpGrp2Item1Text=" BETWEEN \n AND "
OpGrp2Item2Disp="x NOT BETWEEN y AND z"
OpGrp2Item2Text=" NOT BETWEEN \n AND "
OpGrp3Title="Constants:"
OpGrp3Count=1
OpGrp3Item1Disp="'YYYY-MM-DD' - date"
OpGrp3Item1Text=" '\n' "
OpGrp4Title="SQL statement keywords:"
OpGrp4Count=2
OpGrp4Item1Disp="GROUP BY colexp1, colexp2... - Group and summarize results"
OpGrp4Item1Text=" GROUP BY \n"
OpGrp4Item2Disp="HAVING expr - Additional selection criteria for groups"
OpGrp4Item2Text=" HAVING \n"
OpGrp5Title="Summary functions:"
OpGrp5Count=6
OpGrp5Item1Disp="AVG(col) - Average of column or column expression"
OpGrp5Item1Text=" AVG(\r) \n"
OpGrp5Item2Disp="COUNT(*) - Count of rows"
OpGrp5Item2Text=" COUNT(*) \n"
OpGrp5Item3Disp="COUNT(col) - Count of rows"
OpGrp5Item3Text=" COUNT(\r) \n"
OpGrp5Item4Disp="MAX(col) - Maximum value of column or column expression"
OpGrp5Item4Text=" MAX(\r) \n"
OpGrp5Item5Disp="MIN(col) - Minimum value of column or column expression"
OpGrp5Item5Text=" MIN(\r) \n"
OpGrp5Item6Disp="SUM(col) - Sum of column or column expression"
OpGrp5Item6Text=" SUM(\r) \n"
;FnListType=1
FnGrpCount=1
FnGrp1Count=1
FnGrp1Title="String functions:"
FnGrp1Item1Disp="CONVERT(col,data type) - Conversion of column into specified data type"
FnGrp1Item1Text=" {fn CONVERT(\r,\n)}"

[Paradox Files (*.db )]
IsLocal=1
CountStarSupport=1
SQLExecReturnsQualifiedNames=0
OpListType=1
OpGrpDCount=3
OpGrpWCount=2
OpGrp1Title="Comparison operators:"
OpGrp1Count=2
OpGrp1Item1Disp="x IN (a, b, c, ...)"
OpGrp1Item1Text=" IN (\r) \n"
OpGrp1Item2Disp="x NOT IN (a, b, c, ...)"
OpGrp1Item2Text=" NOT IN (\r) \n"
OpGrp2Title="Patterns, ranges and lists:"
OpGrp2Count=2
OpGrp2Item1Disp="x BETWEEN y AND z"
OpGrp2Item1Text=" BETWEEN \n AND "
OpGrp2Item2Disp="x NOT BETWEEN y AND z"
OpGrp2Item2Text=" NOT BETWEEN \n AND "
OpGrp3Title="Constants:"
OpGrp3Count=1
OpGrp3Item1Disp="'YYYY-MM-DD' - date"
OpGrp3Item1Text=" '\n' "
OpGrp4Title="SQL statement keywords:"
OpGrp4Count=2
OpGrp4Item1Disp="GROUP BY colexp1, colexp2... - Group and summarize results"
OpGrp4Item1Text=" GROUP BY \n"
OpGrp4Item2Disp="HAVING expr - Additional selection criteria for groups"
OpGrp4Item2Text=" HAVING \n"
OpGrp5Title="Summary functions:"
OpGrp5Count=6
OpGrp5Item1Disp="AVG(col) - Average of column or column expression"
OpGrp5Item1Text=" AVG(\r) \n"
OpGrp5Item2Disp="COUNT(*) - Count of rows"
OpGrp5Item2Text=" COUNT(*) \n"
OpGrp5Item3Disp="COUNT(col) - Count of rows"
OpGrp5Item3Text=" COUNT(\r) \n"
OpGrp5Item4Disp="MAX(col) - Maximum value of column or column expression"
OpGrp5Item4Text=" MAX(\r) \n"
OpGrp5Item5Disp="MIN(col) - Minimum value of column or column expression"
OpGrp5Item5Text=" MIN(\r) \n"
OpGrp5Item6Disp="SUM(col) - Sum of column or column expression"
OpGrp5Item6Text=" SUM(\r) \n"
;FnListType=1
FnGrpCount=1
FnGrp1Count=1
FnGrp1Title="String functions:"
FnGrp1Item1Disp="CONVERT(col,data type) - Conversion of column into specified data type"
FnGrp1Item1Text=" {fn CONVERT(\r,\n)}"

[FoxPro Files (*.dbf)]
IsLocal=1
CountStarSupport=1
OpListType=1
OpGrpDCount=3
OpGrpWCount=2
OpGrp1Title="Comparison operators:"
OpGrp1Count=2
OpGrp1Item1Disp="x IN (a, b, c, ...)"
OpGrp1Item1Text=" IN (\r) \n"
OpGrp1Item2Disp="x NOT IN (a, b, c, ...)"
OpGrp1Item2Text=" NOT IN (\r) \n"
OpGrp2Title="Patterns, ranges and lists:"
OpGrp2Count=2
OpGrp2Item1Disp="x BETWEEN y AND z"
OpGrp2Item1Text=" BETWEEN \n AND "
OpGrp2Item2Disp="x NOT BETWEEN y AND z"
OpGrp2Item2Text=" NOT BETWEEN \n AND "
OpGrp3Title="Constants:"
OpGrp3Count=1
OpGrp3Item1Disp="'YYYY-MM-DD' - date"
OpGrp3Item1Text=" '\n' "
OpGrp4Title="SQL statement keywords:"
OpGrp4Count=2
OpGrp4Item1Disp="GROUP BY colexp1, colexp2... - Group and summarize results"
OpGrp4Item1Text=" GROUP BY \n"
OpGrp4Item2Disp="HAVING expr - Additional selection criteria for groups"
OpGrp4Item2Text=" HAVING \n"
OpGrp5Title="Summary functions:"
OpGrp5Count=6
OpGrp5Item1Disp="AVG(col) - Average of column or column expression"
OpGrp5Item1Text=" AVG(\r) \n"
OpGrp5Item2Disp="COUNT(*) - Count of rows"
OpGrp5Item2Text=" COUNT(*) \n"
OpGrp5Item3Disp="COUNT(col) - Count of rows"
OpGrp5Item3Text=" COUNT(\r) \n"
OpGrp5Item4Disp="MAX(col) - Maximum value of column or column expression"
OpGrp5Item4Text=" MAX(\r) \n"
OpGrp5Item5Disp="MIN(col) - Minimum value of column or column expression"
OpGrp5Item5Text=" MIN(\r) \n"
OpGrp5Item6Disp="SUM(col) - Sum of column or column expression"
OpGrp5Item6Text=" SUM(\r) \n"
;FnListType=1
FnGrpCount=1
FnGrp1Count=1
FnGrp1Title="String functions:"
FnGrp1Item1Disp="CONVERT(col,data type) - Conversion of column into specified data type"
FnGrp1Item1Text=" {fn CONVERT(\r,\n)}"

[WATCOM SQL]
FnListType=2
CountStarSupport=1
QuoteODBCOuterJoin=1
QuoteAlias=1

[ShowCase ODBC]
FnListType=2
CountStarSupport=1

[ShowCase ODBC - VISTA]
FnListType=2
CountStarSupport=1

[ShowCase ODBC - ReadOnly]
FnListType=2
CountStarSupport=1

[Q+E ParadoxFile]
IsLocal=1
CountStarSupport=1
SQLExecReturnsQualifiedNames=0
QuoteFromList=0
OuterJoinSyntax=1
OuterJoinText="*"
OuterJoinSupport="LRM"
QuoteAlias=1

[RDS]
HasOwners=0
CountStarSupport=1
OuterJoinSyntax=1
OuterJoinSupport="LR"
OuterJoinText="*"
;DBInFullColumnName=0
;SortExprSupport=0
;DateFormat=""date '"yyyy-mm-dd"'""
;TimeFormat=""time '"hh:mm:ss"'""

[Velocis Standalone]
HasOwners=0
CountStarSupport=1

[Velocis]
HasOwners=0
CountStarSupport=1

[Lotus Notes]
CountStarSupport=1
SQLExecReturnsQualifiedNames=0
TableTypes=

[Microsoft Btrieve Driver (file.ddf)]
QuoteFromList=0
IsLocal=1
HasDatabases=0
IDQuote=

[Microsoft Dbase Driver (*.dbf)]
IDQuote=

[Microsoft Excel Driver (*.xls)]
IDQuote=

[Microsoft FoxPro Driver (*.dbf)]
IDQuote=

[Microsoft Text Driver (*.txt; *.csv)]
QuoteFromList=0
IDQuote=

[Microsoft Access Driver (*.mdb)]
QuoteFromList=0
HasDatabases=0

[Microsoft Paradox Driver (*.db )]
QuoteFromList=0
SQLExecReturnsQualifiedNames=0
IDQuote=

[Microsoft Btrieve Driver (file.ddf) (32 bit)]
QuoteFromList=0
IsLocal=1
HasDatabases=0
IDQuote=

[Microsoft dBase Driver (*.dbf) (32 bit)]
IDQuote=

[Microsoft Excel Driver (*.xls) (32 bit)]
IDQuote=

[Microsoft FoxPro Driver (*.dbf) (32 bit)]
IDQuote=

[Microsoft Text Driver (*.txt; *.csv) (32 bit)]
QuoteFromList=0
IDQuote=

[Microsoft Access Driver (*.mdb) (32 bit)]
QuoteFromList=0
HasDatabases=0

[Microsoft Paradox Driver (*.db ) (32 bit)]
QuoteFromList=0
SQLExecReturnsQualifiedNames=0
IDQuote=
WINHELP.INI
[Files]
DELPHI.HLP=C:\WIN16\DELPHI\BIN
WINAPI.HLP=C:\WIN16\DELPHI\BIN
CWG.HLP=C:\WIN16\DELPHI\BIN
CWH.HLP=C:\WIN16\DELPHI\BIN
LOCALSQL.HLP=C:\WIN16\DELPHI\BIN
VQB.HLP=C:\WIN16\DELPHI\BIN
SQLREF.HLP=C:\WIN16\IBLOCAL\BIN
WISQL.HLP=C:\WIN16\IBLOCAL\BIN
BDECFG.HLP=C:\WIN16\IDAPI
RPTSMITH.HLP=C:\WIN16\RPTSMITH
RS_DD.HLP=C:\WIN16\RPTSMITH
SBL.HLP=C:\WIN16\RPTSMITH
RS_RUN.HLP=C:\WIN16\RPTSMITH
DBD.HLP=C:\WIN16\DBD
MULTIHLP.INI
[Index Path]
DELPHI.HLP=C:\WIN16\DELPHI\BIN
WINAPI.HLP=C:\WIN16\DELPHI\BIN
CWG.HLP=C:\WIN16\DELPHI\BIN
CWH.HLP=C:\WIN16\DELPHI\BIN
LOCALSQL.HLP=C:\WIN16\DELPHI\BIN
VQB.HLP=C:\WIN16\DELPHI\BIN
SQLREF.HLP=C:\WIN16\IBLOCAL\BIN
WISQL.HLP=C:\WIN16\IBLOCAL\BIN
BDECFG.HLP=C:\WIN16\IDAPI
RPTSMITH.HLP=C:\WIN16\RPTSMITH
RS_DD.HLP=C:\WIN16\RPTSMITH
SBL.HLP=C:\WIN16\RPTSMITH
RS_RUN.HLP=C:\WIN16\RPTSMITH
DBD.HLP=C:\WIN16\DBD

※ 設定はすべてデフォルトインストール時のものです (パス以外)。設定を変更したい場合には、VM の XP 等に Delphi 1.0 をインストールして、自分で環境設定ファイルを持ってくる必要があります。

Windows 環境設定ファイルの編集

C:\OTVDM\WINDOWS\WIN.INI をテキストエディタで開き、以下を追記します(WIN.INI は空かもしれません)。

WIN.INI
[IDAPI]
DLLPATH=C:\WIN16\IDAPI
CONFIGFILE01=C:\WIN16\IDAPI\IDAPI.CFG
[Borland Language Drivers]
LDPath=C:\WIN16\IDAPI\LANGDRV
[BWCC]
BitmapLibrary=BWCC.DLL
[Interbase]
RootDirectory=C:\WIN16\IBLOCAL
[Paradox Engine]
UserName=PxEngine
NetNamePath=C:\WIN16
MaxTables=64
RecBufs=64
MaxLocks=64
MaxFiles=64
SwapSize=64
[DDE Servers]
DBD=C:\WIN16\DBD\DBD
[DBD]
WORKDIR=C:\WIN16\DBD
PRIVDIR=C:\WIN16\DBD\DBDPRIV

ここまでの作業を図にするとこうなります。
image.png

実行

Explorer で C:\WIN16\DELPHI\BIN を開き、DELPHI.EXE をダブルクリックすると Delphi 1.0 Client/Server が起動します。
image.png

DB 系のデモを読み込むためには C:\WIN16\IDAPI にある BDECFG.EXE を実行し、[Aliasses] タブの DBDEMOSIBLOCAL のパスを正しいものにします。
image.pngimage.png

Alias Item Value
DBDEMOS PATH C:\WIN16\DELPHI\DEMOS\DATA
IBLOCAL SERVER NAME C:\WIN16\IBLOCAL\EXAMPLES\EMPLOYEE.GDB

[Drivers] タブの PARADOX も書き換えておいたほうがいいでしょう。
image.png

Driver Name Item Value
PARADOX NET DIR C:\WIN16

image.png

てゆーか、当方の環境だとコンパイルすると落ちますね。 ver 1650 で落ちなくなりました (^o^)/

DOSBox(-X) との併用

プロジェクトを DOSBox 上のコマンドラインコンパイラ (dcc.exe) でコンパイルし、
image.png
生成された EXE (16bit Windows アプリケーション) を (OTVDM で) 実行する事もできます。
image.png

See also:

DCC.EXE (コマンドラインコンパイラ)

コマンドラインコンパイラ (DCC.EXE) は MS-DOS アプリケーションなので、DOSBox(-X) で動作します。

コマンドラインコンパイラ を動作させるために最低限必要なのは、$(SOURCE)\RUNIMAGELIB フォルダ全部と、BIN フォルダの次のファイルです。

  • DCC.CFG
  • DCC.EXE
  • DELPHI.DMT
  • DELPHI.DSL
  • DLIB.EXE
  • DPMI16BI.OVL
  • RTM.EXE

DCC.CFG は、コマンドラインコンパイラ用の環境設定ファイルです。パスを次のように書き換える必要があります。

DCC.CFG
/m
/cw
/rC:\WIN16\DELPHI\LIB
/uC:\WIN16\DELPHI\LIB
/iC:\WIN16\DELPHI\LIB

DCC.EXE を使ってコンパイルするには、引数にプロジェクトファイルを指定します。

DCC プロジェクトファイル

プロジェクトが単一のファイル (*.DPR のみ) で構成される場合には普通にコンパイルできますが、他にユニットが存在する場合にはプロジェクトファイルのある場所へカレントディレクトリを移動する必要があります。

CD プロジェクトファイルのあるディレクトリ
DCC プロジェクトファイル

生成された実行ファイルは Win16 アプリケーションなので、OTVDM をインストールしているか、16bit/32bit Windows でないと実行できません。

おわりに

Delphi 1.0 C/S をちゃんと試したいのなら、VM の XP とかで動作させる事をオススメします。

ただ、やりようによっては 64bit の Windows 10 で 16bit 版 Delphi を動かせるってのはちょっと魅力的ですね。他の 16bit Windows アプリも動かせますし、古い WinHelp も読めます。

See also:

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした