# Delphi 1.0 Client/Server が無償公開されたので Windows 10 (64bit) / 11 にインストールしてみる --- tags: Delphi Pascal embarcadero objectpascal OTVDM created_at: 2020-02-16 updated_at: 2024-12-31 --- # はじめに ![image.png](./images/7cd11d09-54df-09f3-5cd3-244756f93007.png) **Delphi 25 周年**記念で、**Delphi 1.0 Client/Server** がアンティークソフトウェアとして無償公開されたのでこれをインストールして試した記事を書きました。 - [Delphi 1.0 Client/Server が無償公開されたので Windows 7 の XP Mode にインストールしてみる (Qiita)](./e02a7b42ef65baa5d175.md) そちらにも書いたのですが、Delphi 1.0 は 16bit アプリケーションなので 64bit Windows にはインストールできません。 # winevdm on 64-bit Windows (OTVDM) このソフトウェアは **winevdm**(16bit Windows エミュレータ)の 64bit Windows 版です。64bit Windows 上で 16bit Windows アプリケーションを実行する事ができます。 - [winevdm on 64-bit Windows (GitHub)](https://github.com/otya128/winevdm) ## OTVDM のインストール方法 最新版を以下から持ってきます。 - [winevdm (AppVeyor: otya128)](https://ci.appveyor.com/project/otya128/winevdm) 1. [Job name] リストのいずれかをクリック。私は上を選択しました。 2. [Artifacts] タブを選択。 3. [File name] にリストされている ZIP をクリックしダウンロード。
![image.png](./images/d5006884-3ea1-7b3f-84d6-c5cf91de8fe8.png) 4. アーカイブを解凍したら名前を `OTVDM` に変更して `C:\` へ移動。つまり `C:\OTVDM` フォルダができる事になります。 5. `C:\OTVDM` フォルダに移動、`install.inf` を Explorer で右クリックして [インストール]。 これでインストール完了です。 # Delphi 1.0 Client/Server まずは Delphi 1.0 をダウンロードしてアーカイブを解凍します。解凍した先を `$(SOURCE)` とします。 - [Historic Delphi 1 Client/Server Install ISO (Embarcadero)](https://cc.embarcadero.com/item/30911) `$(SOURCE)\INSTALL` フォルダにある **インストーラは動作しない**ので `$(SOURCE)\RUNIMAGE` フォルダの中身をコピーしてセットアップします。 :::note 2015/01/01 現在 (dev2564)、インストーラは遅いものの**正しく動作する**ようです。 インストールパスにだけ気を付けてインストールしてください。 ![image.png](./images/8af44b8d-b7fa-72b5-e15b-13b4b8a5b7c8.png) ![image.png](./images/897a4410-9baf-5b7d-110b-437602754f27.png) `AUTOEXEC.BAT` への追記はスキップしてください。 ![image.png](./images/d146f44f-cf60-c615-a3e4-99c1f769406c.png) ::: ## ファイルコピー 1. フォルダが取っ散らかるので `C:\WIN16` フォルダを作成します。 2. `$(SOURCE)\RUNIMAGE` フォルダの `WINDOWS` サブフォルダ**以外**を `C:\WIN16` へコピーします。
![image.png](./images/2291ee6c-cb94-e8e2-d779-29b24505a0f2.png) 3. `$(SOURCE)\RUNIMAGE` フォルダの `WINDOWS` サブフォルダを `C:\OTVDM` へコピーします (WINDOWS フォルダは既に存在するので上書きする形になります)。 ## 環境変数 PATH の設定 Windows の環境変数に `PATH16` を追加します。これが OTVDM で参照されるパスとなります。 ![image.png](./images/a8e1588b-25ea-6a8a-6f2a-738e3ec8263e.png) システム環境変数の変更を行う `[システムのプロパティ | 詳細設定]` は `[ファイル名を指定して実行]` (〔Win〕+〔R〕) から `SystemPropertiesAdvanced` で開けます。 ![image.png](./images/3b30888f-7b69-a5ef-3cdc-e3d1f3b5057f.png) ![image.png](./images/a817ebaf-cf10-8be9-e0ab-8d6b658d2fb0.png) 環境変数 `PATH16` の値は `C:\;C:\WINDOWS;C:\WIN16\IBLOCAL\BIN;C:\WIN16\IDAPI;` です。 ![image.png](./images/5ee80b69-c1ea-1175-701e-1ed331950542.png) ![image.png](./images/46bae086-5cef-0652-70cf-86009ae89bf7.png) ## 環境設定ファイルの作成 `C:\OTVDM\WINDOWS` に 9 つのファイルを作成します。 ```ini: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= ``` ```ini: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 ``` ```ini: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 ``` ```ini: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 ``` ```ini: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 ``` ```ini: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 ``` ```ini: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= ``` ```ini: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 ``` ```ini: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 は空かもしれません)。 ```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](./images/d122a00e-9dd6-dd3a-c99c-66ff447c391f.png) # 実行 Explorer で `C:\WIN16\DELPHI\BIN` を開き、`DELPHI.EXE` をダブルクリックすると **Delphi 1.0 Client/Server** が起動します。 ![image.png](./images/676bed07-045e-4999-c3c3-d03672d6a19d.png) DB 系のデモを読み込むためには `C:\WIN16\IDAPI` にある `BDECFG.EXE` を実行し、[Aliasses] タブの `DBDEMOS` と `IBLOCAL` のパスを正しいものにします。 ![image.png](./images/f999067a-4ee1-4b96-c2b2-bb779be93a7d.png) ![image.png](./images/549e250c-8113-0b4f-1990-abe97f82aa69.png) | Alias | Item | Value | |:---|:--|:---| | DBDEMOS |PATH | C:\WIN16\DELPHI\DEMOS\DATA | | IBLOCAL |SERVER NAME| C:\WIN16\IBLOCAL\EXAMPLES\EMPLOYEE.GDB | [Drivers] タブの `PARADOX` も書き換えておいたほうがいいでしょう。 ![image.png](./images/fc9fbc2f-dbb6-6026-c151-79046d656902.png) | Driver Name | Item | Value | |:---|:--|:---| | PARADOX |NET DIR | C:\WIN16 | ![image.png](./images/b7eaf582-449a-dd4a-ccf6-365ba4dc262e.png) ~~てゆーか、**当方の環境だとコンパイルすると落ちますね。**~~ dev1650 で落ちなくなりました (^o^)/ ## DOSBox(-X) との併用 プロジェクトを **DOSBox** 上のコマンドラインコンパイラ (dcc.exe) でコンパイルし、 ![image.png](./images/192656db-695e-1238-cc15-aae79ef5be9c.png) 生成された EXE (16bit Windows アプリケーション) を (OTVDM で) 実行する事もできます。 ![image.png](./images/9b9d842a-19f9-4b85-77d1-8ff72127bbd3.png) **See also:** - [DOSBox](https://www.dosbox.com/) - [DOSBox-X (GitHub)](https://github.com/joncampbell123/dosbox-x/releases) ## DCC.EXE (コマンドラインコンパイラ) コマンドラインコンパイラ (DCC.EXE) は MS-DOS アプリケーションなので、**DOSBox(-X)** や **MS-DOS Player** で動作します。 コマンドラインコンパイラ を動作させるために最低限必要なのは、`$(SOURCE)\RUNIMAGE` の `LIB` フォルダ全部と、`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 (や Windows 11) で 16bit 版 Delphi を動かせるってのはちょっと魅力的ですね。他の 16bit Windows アプリも動かせますし、古い WinHelp も読めます。 **See also:** - [Delphi Configuration Files (Embarcadero Blogs)](https://community.idera.com/developer-tools/b/blog/posts/delphi-configuration-files) - [Turbo Pascal 1.0 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](./54cefe48e729742e818d.md#-turbo-pascal-302) - [Turbo Pascal 3.02 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](./54cefe48e729742e818d.md#-turbo-pascal-302) - [Turbo Pascal 5.5 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](./eb35e0480559f893a9b8.md) - [Turbo C 2.01 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](./100bb258e4480aa7bdf3.md) - [Turbo C++ 1.01 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](./7a0e5d84d258c3b1a795.md) - [C++Builder 1.0 Client/Server を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](./40b67a7572b1110bff69.md)