FreeDOS source code study - fdisk compile source code
Prepare operating system
The OS can be Windows 98 or Windows XP.
Install NASM
Download NASM from here.
Decompress the archive to C:\fdisk_build\nasm.
Make sure C:\fdisk_build\nasm\nasm.exe is there.
Install Turbo C++
Download Turbo C++ from here.
Decompress the archive to C:\fdisk_build\turbocpp_images.
The directory contains five floppy image files:
- Disk01.img
- Disk02.img
- Disk03.img
- Disk04.img
- Disk05.img
Download Virtual Floppy Drive from here.
Decompress the archive to C:\fdisk_build\vfd.
Run C:\fdisk_build\vfd\vfdwin.exe.
In tab Driver, click Install and Start.
In tab Drive0, click Change to add drive A:.
Click Open/Create... to mount image file C:\fdisk_build\turbocpp_images\Disk01.img.
Click A:\INSTALL.EXE to start Turbo C++ installation.
During the installation, use Virtual Floppy Drive to switch the floppy image according to the prompt.
Install Turbo C++ to C:\fdisk_build\turbocpp.
Make sure C:\fdisk_build\turbocpp\bin\tcc.exe is there.
Prepare fdisk source code
Download fdisk source code from here.
Decompress the archive to C:\fdisk_build\fdisk.
Copy C:\fdisk_build\fdisk\SOURCE\BOOTEASY\BOOTEASY.ASM to C:\fdisk_build\fdisk\SOURCE\FDISK\BOOTEASY.ASM.
Copy C:\fdisk_build\fdisk\SOURCE\BOOTNORM\BOOTNORM.ASM to C:\fdisk_build\fdisk\SOURCE\FDISK\BOOTNORM.ASM.
Decompress C:\fdisk_build\fdisk\SOURCE\CATS396S.ZIP to C:\fdisk_build\fdisk\SOURCE\CATS396S.
I tried building CATS into catdb.lib using Turbo C 2.01, then link with it
when building fdisk. The linking failed for unknown reason. So instead we build
CATS directly with fdisk.
Copy CATGETS.C, DB.C, and GET_LINE.C from C:\fdisk_build\fdisk\SOURCE\CATS396S\CATS39\LIB to C:\fdisk_build\fdisk\SOURCE\FDISK.
Apply the following changes to C:\fdisk_build\fdisk\SOURCE\FDISK\GET_LINE.C.
Change line 44
str = malloc (sizeof (char) * str_size);to
str = (char*) malloc (sizeof (char) * str_size);Change line 64
tmp_str = realloc (str, sizeof (char) * str_size);to
tmp_str = (char*) realloc (str, sizeof (char) * str_size);
Apply the following changes to C:\fdisk_build\fdisk\SOURCE\FDISK\MAKEFILE.
Change
OBJ = main.obj bootnormal.obj booteasy.obj cmd.obj fdiskio.obj \
helpscr.obj kbdinput.obj pdiskio.obj pcompute.obj \
userint1.obj userint2.objto
OBJ1 = main.obj bootnormal.obj booteasy.obj cmd.obj fdiskio.obj
OBJ2 = helpscr.obj kbdinput.obj pdiskio.obj pcompute.obj
OBJ3 = userint1.obj userint2.obj db.obj catgets.obj get_line.obj
OBJ = $(OBJ1) $(OBJ2) $(OBJ3)Change
ui2.obj: userint2.c
$(CC) $(CFLAGS) -c userint2.ccto
ui2.obj: userint2.c
$(CC) $(CFLAGS) -c userint2.c
db.obj: db.c
$(CC) $(CFLAGS) -c db.c
catgets.obj: catgets.c
$(CC) $(CFLAGS) -c catgets.c
get_line.obj: get_line.c
$(CC) $(CFLAGS) -c get_line.cBuild echoto
The command that builds fdisk.exe will fail with "Arguments list too long"
error. The workaround is to put its arguments in a temp file. To create the
temp file, we need an echoto program.
Create C:\fdisk_build\echoto\echoto.c:
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *file;
char* fileName;
int i;
if (argc <= 1)
{
return 0;
}
fileName = argv[1];
file = fopen(fileName, "a");
if (file == NULL) {
return 1;
}
for (i = 2; i < argc; i++)
{
fprintf(file, "%s ", argv[i]);
}
fclose(file);
return 0;
}In the command console, run
cd C:\fdisk_build\echoto
SET PATH=%PATH%;C:\fdisk_build\turbocpp\bin
tcc -IC:\fdisk_build\turbocpp\INCLUDE -LC:\fdisk_build\turbocpp\LIB echoto.cThe result file is C:\fdisk_build\echoto\echoto.exe.
Copy C:\fdisk_build\echoto\echoto.exe to C:\fdisk_build\fdisk\SOURCE\FDISK\echoto.exe.
Edit C:\fdisk_build\fdisk\SOURCE\FDISK\MAKEFILE, change
fdisk.exe: main.obj $(OBJ)
$(CC) $(LDFLAGS) -efdisk $(OBJ) $(LDLIBS)to
fdisk.exe: main.obj $(OBJ)
$(RM) objs_list.txt
echoto.exe objs_list.txt $(OBJ1)
echoto.exe objs_list.txt $(OBJ2)
echoto.exe objs_list.txt $(OBJ3)
$(CC) $(LDFLAGS) -efdisk $(LDLIBS) @objs_list.txtBuild fdisk
In the command console, run
cd C:\fdisk_build\fdisk\SOURCE\FDISK
C:\fdisk_build\nasm\nasm.exe -f obj bootnorm.asm
C:\fdisk_build\nasm\nasm.exe -f obj booteasy.asm
SET PATH=%PATH%;C:\fdisk_build\turbocpp\bin
make allThe result file is C:\fdisk_build\fdisk\SOURCE\FDISK\fdisk.exe.
Comments: