DOS NASM-IDE Installation Issue

Hello,
Im working my way through a PDF file of the book Assembly language step-by-step programming with DOS and Linux by Jeff Duntemann. The CD that accompanied the book included a DOS NASM Integrated Development Environment written in Borland Pascal titled NASM-IDE. I was able to find it on github, but, while all the files seem present, there are a few steps that need to occur before it can be used.

https://github.com/OS2World/DEV-ASM-UTIL-NASM-IDE

According to the authors instructions, the following steps need be taken
The NASM-IDE archive is zipped using PKZIP. To use the NASM-IDE source code, create a directory and unzip the entire archive to that directory.
The source code can be compiled using Borland Turbo Pascal 7.0. The main program file is called NASMIDE.PAS.
Before attempting to run the compiled code, you must do the following:

  • Compile and run GENRES.PAS to create the hint line resource file.
  • Compile TVHC.PAS to create the help file compiler.
  • Run MAKEHELP.BAT to compile the help files.
  • Create an INI file (see NASMIDE.SAM).

The problem I have is that I do not understand how to compile these files correctly. I understand that a Turbo Pascal unit is first created and saved with a .pas extension. Compiling such a file will result in a file with a .tpu (unit) extension.
The specific problem is that the genres.pas unit references other units itself in its code.

The genres.pas unit has a uses clause that says uses CRT, OBJECTS, ICONST;
Compiling it results in the following error
Error 15: File not found (IEDIT.TPU).

The ICONST unit uses the IEDIT unit
The iconst.pas unit has a uses clause that says uses APP, VIEWS, IEDIT

Compiling iedit.pas results in the following error
Error 15: File not found (IUTILS.TPU)
The IEDIT.pas unit has a uses clause that says
Uses DRIVERS, OBJECTS, VIEWS, DIALOGS, IUTILS, SINI, IHELP, IOPT;
The IEDIT.pas unit depends on IUTILS.pas.

This circular reference problem continues as I try to compile other units along the chain.

The question is how to compile a unit file with a .pas extension into an actual .tpu unit when the original file depends on other .tpu unit files that cannot be created because they do not exist as .tpu files and cannot be separately compiled because they are called from the original file.

Each compilation effort fails because the dependent .tpu file does not exist; it only exists as a unit source file with a .pas extension.
Borland Pascal is being used in these compilation attempts. It is running natively on a PC running MS DOS v6.22.

I was able to compile about 12 of the files to .tpu format by setting genres.pas as the Primary file in the Compile menu option and selecting the Build option, but this ended with an Error 26: Type mismatch. Error on the IMAIN.PAS file.

Any help would be appreciated.
Thank You!

A Pascal ‘readkey’ issue?

I'm embarrassed to admit that I cannot understand why in this very simple example that the "readln(age);" statement in the "else if" clause ignores the first integer entered in response to the "writeln('How old are you ',name:length(name),'?');" statement aroune line 16.

It seems clear that the culprit is the "ch := readkey;" statement on line 18.
To enter a valid age, some key must first be pressed (other than <Enter> (ASCII 13) which is trapped by the "if ch = #13 then" statement.

It does not seem to matter if the "age" variable is typed as a string or integer.

What happens is that if one enters two characters or integers, only the second is stored in the "age" variable. For example, to input an age of "25", I must first press some other key on the keyboard first, then enter "25" for "25" to be stored in the "age" variable.

Any help understanding this would be sincerely appreciated. Perhaps the entire approach is incorrect?

PROGRAM t5;
uses crt;

var
  name,age  : string;
  ch        : char;

procedure greet;
  begin

    clrscr;
    writeln('What''s your name? ');
    readln(name);
    clrscr;
    writeln('Hi, ',name:length(name));
    writeln('How old are you ',name:length(name),'?');

    ch := readkey;
      if ch = #13 then
        begin
          writeln('Please enter a valid age!');
          writeln ('You pressed the ','"','Enter','"',' key ','("',ord(ch),'")');
          readln;
          writeln('Bye!');
          readln;
        end

      else if ch <> #13 then

        begin
          readln(age);
          writeln('Gee, ',age,', - that''s really old!');
          readln;
        end;
  end;


BEGIN

  greet;

END.