Copyright © 1996-2001 Robert Hoehne
This documentation may be freely distributed with the RHIDE package or any part thereof, provided this copyright notice is left intact on all copies.
The following master menu lists the major topics in this documentation, including all the indices.
RHIDE is copyright by Robert Hoehne. Parts of RHIDE are copyright by other people as noted in the source files. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Additional permission: As a special additional permission, the library librhuti which is in the source tree of the RHIDE sources in the librhuti/ subdirectory can be distributed alone freely without any restrictions. It is not limited to use under the terms of the GPL or LGPL. For more information see the file COPYING.RHU in that subdirectory. Non-binding request =================== If you distribute RHIDE together with other products it would be nice, if you could give me a note about it so I'll be informed. Of course you can send me a copy of the distribution medium but this is not required. For contacting the author send electronic mail to robert.hoehne@gmx.net or paper mail to Robert Hoehne Am Berg 3 D - 09573 Dittmannsdorf Germany
There are two archives
rhide??b.zip
rhide-?.?-1.i386.rpm
rhide??s.zip
rhide-?.?-1.src.rpm
NOTE: The sources for the GNU/Linux and DJGPP versions are of course in its core the same, there are only differences in the directory structure and myabe in some preconfigured files. But in general both archives can be used on both systems (after some cosmetic changes).
where ??
in the above filenames stand for the digits of the actual
version of RHIDE which is as of writing this version 1.5 which leads to
15
.
These archives can be found at
The RHIDE home page
or at any ftp site, which mirrors DJGPP. On that DJGPP mirrors are of
course only the DJGPP archives available.
The RPM packackes can be found at sunsite mirrors and/or also in some GNU/Linux distributions. (At least I hope so when I`m ready to upload them there)
To install these archives, unzip them in the DJGPP-root directory, like any other DJGPP package.
To install the GNU/Linux RPM packages, use your favorite install program (most Linux distributions allow to install RPM packages) or install it with the Redhat package manager itself.
What is RHIDE? RHIDE is an Integrated Development Environment for compiling C- or C++-files (GNU-Assembler source files also supported) in an environment, which has an integrated editor where you can edit your source files and a project management, where you can define, which files are needed to build a program or a library.
For what stands the name RHIDE? This has nothing mystic in it. It comes simply from my initials RH and IDE (Integrated Development Environment).
RHIDE works like the IDE from Borland, which comes with Turbo C++ 3.1 and is written with the Turbo Vision library, which I have ported to use with DJGPP. Features of this IDE are:
-DNO_BREAK
-flag.
In addition to RHIDE I have included a stand-alone debugger
(called rhgdb.exe
), which is GDB 5.0 with a Turbo Vision user
interface.
RHIDE works under and is compiled with DJGPP V2. To compile your programs you need a working GCC-configuration, that means, GCC must be found in your path. Because DJGPP works only under DPMI you need a DPMI-Server. If you run it under Windows 3.1(1)/95, you have DPMI. Under MS-DOS you need either a memory-manager, which give you DPMI-services (I think QEMM is it, EMM386 has no DPMI-support), or you use CWSDPMI, the free DPMI-server from Charles W. Sandmann, which you can find on SimTel-ftp-sites. I use it and it works fine for me.
Running RHIDE under Windows NT or Windows 2000 is very limited since of the poor support there for DOS programs.
The builtin editor uses a simple heuristic to check, if a file is in UNIX or DOS text format. It checks the first 1024 Bytes, and if there is a lf without a cr, all lf's will be translated to cr/lf's. This is done at first only in memory. But if you save your file to disk, it will be saved in DOS text format.
RHIDE will work correctly only with DJGPP version 2.01 or higher. If you have installed DJGPP 2.0, you will run into problems when the commandline passed to the called compilers or the linker will exceed the 126 character limit. There is a new technique used from DJGPP 2.01 on, which programs compiled under 2.0 don't understand.
To run RHIDE type
rhide [options] ['file-name']or
rhide [options] 'project-name' [options]Here stands 'file-name', for a file, which you want to open at start up. If it has no suffix it is assumed to be a 'project-name'.
'project-name' stands for a name of your project. If you don't type it, RHIDE searches the current directory for a project file. If there exists only one, it will be opened. If there exist more than one or none, RHIDE will not open a project, you have to do it manually. see Open project.
Possible options are for debugging RHIDE itself see Debugging RHIDE. If no project was open, you will see an empty desktop. At the top-line of the screen you can see the menu. This is activated by pressing <F10> or by clicking with the mouse at this line. Alternatively you can press <Alt> plus the highlighted character of a pull-down menu, e.g. to activate the File menu, press Alt+F. At the bottom is the status line with some hotkeys and their functions displayed.
Other options are:
-H
-S
-E
stderr
end exit.
-C
-y
-n
-c
-h
-b
With this switch you can override the default name of keybind.txt
to whatever you want.
-p
-G n
-K
-M
At the upper right corner of the screen you can see the free virtual/physical memory (where M stands for Megabytes, K for Kilobytes and B for Bytes), if enabled see Preferences.
If you try to open a project, which does not exist, RHIDE will create a
new one. For the default setting in the newly created project, RHIDE
will look first in some directories if there exists an options file
for RHIDE called rh_opt.gpr
. If this file is found, the options
from that file are used for the new project, otherwise the in RHIDE
hardcoded defaults are used.
There is also support for multiple languages. For this RHIDE uses the GNU gettext library. With this lib it is possible to support multiple languages without changing any code of RHIDE, when adding a new language.
There are two ways for selecting the language. Either you set the environment
variable LANGUAGE to the language you want or give it as a commandline
argument to RHIDE. The normal way is by setting LANGUAGE. If you
have installed RHIDE as described in the readme
, you should
specify the language with a two character shortcut. Because of my limited
time, the translations to are not synronized with RHIDE.
When you want to specify the language on the commandline, use the following syntax:
rhide -L LANGUAGEwhere LANGUAGE represents the language code.
If you do not specify any language, English is assumed.
Because it was not possible to get all the translations at the time
when RHIDE was ready, I included only the
message files (that are the files with the .mo
suffix) as they
are ready in the binary archive. That means that it is possible that
you will see some strings
in English instead of your language.
I have added some commandline options to debug the IDE itself. These options are the following:
-dt
-dc
stderr
the commands which the IDE executes.
-dd
stderr
how the IDE checks the dependencies.
-df
stderr
how the IDE searches for files.
-ds
stderr
how the IDE expands the specs.
-da
You can also combine these options like -dct
, which is the same as
-dc -dt
.
To examine this debugging information, it is the best to use the redir command, to redirect the stderr to a file like
redir -e err rhide -da projectwhich will redirect stderr to the file
err
.
Under GNU/Linux use the following command:
rhide -da project 2>err
Each of the letters above (after -d
) can be prefixed by
a -
or a +
to explicitely turn the flag on or off.
For instance -dc
and -d+c
are the same and
-da-c
selects all debugging options except the -dc
switch.
If you want to supply certain switches for RHIDE as a default,
you may put them into the environment variable $(RHIDEOPT)
.
The contents of
this variable is used before the the real commandline is parsed.
That means you can overwrite the switches from the environment variable.
This program can be used to create a makefile from your project-file. It does exactly the same as the function which is selectable from the RHIDE menu see Write Makefile.
In RHIDE you have only the possibility to say, if in the generated
makefile all dependencies should be included or not. With
gpr2mak
you can tell also to create recursively all the
needed makefiles. This makes sense only if you have included other
projects in your project.
Here are the possible commandline options for gpr2mak
.
-d
-d-
-r
gpr2mak
recursively, if there are other projects part
of the project.
-r-
gpr2mak
recursively.
-o OUTFILE
OUTFILE
instead of the project name (with the suffix .mak
)
as the created makefile. If you want to write the makefile to stdout
,
use -
as OUTFILE
.
And the complete syntax for calling gpr2mak
is also:
gpr2mak [-d[-]] [-r[-]] [-o OUTFILE] project-file
If you give no options, (the project-file must be given), gpr2mak
assumes the flags -d- -r-
as default.
The main reason for this program was the need for me to have project files which should work on different computers and also on different systems (like DJGPP and GNU/Linux). The task for this program is to convert as most as possible absolute filenames stored in the project file to use variables so the project can be used by simply changing some variables outside RHIDE.
GPREXP replaces all directories, which are used also in the dialogs like the directory customizations for include file searches, by the variables if they are known there.
Here I will give you some instructions for the first steps to get contact with RHIDE.
A project for RHIDE is a file, which contains all the needed information required to build a program or library from one or more source files. Also all the other options which belong to the look and feel of your desktop are stored there.
In general RHIDE creates for each project two files. One for the project
itself (it has the suffix .gpr
) and one for the desktop related
things (it has the suffix .gdt
).
To create a new project either run rhide with a not existing project name as argument or open within RHIDE a project by selecting a name which is not existent.
For the next instructions I will assume, that you want to create a project for the standard "Hello world" program in the current directory. Create now the new project by running
rhide hello
and you will see an empty desktop and one window opened, the project window. This window will show you that there is no file defined for your project. If the project window is selected, (it has a double frame), then hit there <Ins> and you will be prompted for adding an item to your project.
Type in the input line now hello.c
and hit <ENTER>. Now hit
<ESC> to leave the dialog. You will see now, that the project window
contains a line with hello.c
.
Now hit <ENTER> on that filename and you will get an empty editor window
named hello.c
prepended by the current directory. In this editor
window you can type now the program:
#include <stdio.h> int main() { printf("Hello world!\n"); exit(0); }
Now you can select from the Run-menu the Run entry (or use the hotkey Ctrl+F9) and RHIDE will do all the necessary steps to compile, link and execute the program.
If everything was correct (no typing errors) or some other error,
you will get a message box where RHIDE tells you, that the program
exited with an exit code of 0. (This is the value, which you have
specified in your program above in the exit(0);
statement)
This box you can close with <ENTER> or <ESC>.
To see the output of the program, you can switch now to the user screen with Alt+F5 or from the menu (Windows/User screen). To return back to RHIDE hit any key.
RHIDE uses many environment variables for it's configuration and behavior. This includes also some standard variables, which are used by the in RHIDE linked libraries. These are:
/usr/share/locale
and for
DJGPP $(DJDIR)/share/locale
.
/usr/info
and for DJGPP $(DJDIR)/info
.
There are some different ways for setting environment variables for RHIDE. One of them is to set them like any other environment variable on your system. But this means that these variables are visible also by all the other programs.
When using the DJGPP version, you can set them in your
djgpp.env
file either at the beginning as global variables
for any DJGPP program or in a special section [RHIDE]
only
for RHIDE. Please read the doc about the format of the djgpp.env
file for more information.
Derived from the technique used on DJGPP for setting environment
variables which are visible only for DJGPP programs, I have added
in RHIDE a similar thing. RHIDE can read environment variables also
from a file called rhide.env
.
The syntax of this file is very simple. Each line has one of the following syntax:
VARIABLE
should
become the contents CONTENTS
where CONTENTS
can be also
a variable, which is expanded at runtime.
OTHER_ENV_FILE
as environment file. The name
OTHER_ENV_FILE
can be also an environment variable, which is
expanded before reading the file.
#
means, that this line is ignored.
It can be used for you to write there some comments about that file.
RHIDE is very powerful in handling the environment variables. Most of it is taken from the behavior of GNU make. On this great things depend, that a variable name can consist also of other variables, which are computed when the variable should be expanded.
As an example of this, you can take a look on the RHIDE sources in the
rhide.env
files. There I'm using, for instance, the RHIDE
builtin variable $(RHIDE_OS) to define the libraries, which are linked
in RHIDE depending on the operating system where RHIDE is built.
An other example is distributed with RHIDE in it's binary archives
as rhide_.env
which is commented and should be in a directory
.../share/rhide/
where the ...
stand for a different
directory on different OS's. (on DJGPP it is %DJDIR% and on GNU/Linux it
is /usr/local )
Here is a part of the environment file rhide.var
in the main
RHIDE source directory (which is included by rhide.env
with
.$(RHIDESRC)/rhide.var
RHIDE_OS_LIBS_Linux=ncurses gpm m RHIDE_OS_LIBS_DJGPP_idegc.exe=dbg RHIDE_OS_LIBS_DJGPP=$(RHIDE_OS_LIBS_DJGPP_$(MAIN_TARGET)) RHIDE_OS_LIBS=$(RHIDE_OS_LIBS_$(RHIDE_OS))
The RHIDE builtin linker spec see Builtin compiler specs includes also $(RHIDE_OS_LIBS) when linking. Since RHIDE can be built on DJGPP and GNU/Linux and on these different operating systems I have to link different libraries.
Description of the above: When linking on DJGPP the file
idegc.exe
(which is RHIDE) I have to include (in addition
to all the other libraries) libdbg.a
, which contains all
the DJGPP specific debugging functions. This is done at runtime
by expanding RHIDE_OS_LIBS. Here are the steps, how RHIDE expands
the variable RHIDE_OS_LIBS:
$(RHIDE_OS_LIBS) -> $(RHIDE_OS_LIBS_$(RHIDE_OS)) $(RHIDE_OS_LIBS_$(RHIDE_OS)) -> $(RHIDE_OS_LIBS_DJGPP) $(RHIDE_OS_LIBS_DJGPP) -> $(RHIDE_OS_LIBS_DJGPP_$(MAIN_TARGET)) $(RHIDE_OS_LIBS_DJGPP_$(MAIN_TARGET)) -> $(RHIDE_OS_LIBS_DJGPP_idegc.exe) $(RHIDE_OS_LIBS_DJGPP_idegc.exe -> dbg
In a similar way it expands on GNU/Linux to
$(RHIDE_OS_LIBS) -> ncurses gpm m
RHIDE searches some known directories for the file
rhide.env
(and of course also other there defined
included files).
At first it searches for a global file in /usr/local/share/rhide
(on GNU/Linux) or $(DJDIR)/share/rhide
. Then it searches in
$(HOME)
and at last in the current directory.
RHIDE does not only a search, it also loads the file, if it was found
in any of the above mentioned directories. That means, if in all these
directories rhide.env
exists, it is loaded. This has the effect,
that you can define some global defaults which can be overwritten with
a rhide.env
in the current or your home directory.
In this section I will give you some comments about the concept of RHIDE.
RHIDE works with the GNU compilers. As a result of this, most of the
options are fixed and they are mostly also specific only for this
compiler. If I speak about compilers, I mean GCC, which calls the right
compilers for you.
(cpp
for preprocessing your input files,
cc1
for compiling C programs, cc1plus
for
compiling C++ programs and as
for compiling assembler files and so on)
Selecting the right compiler for a specific file is done by RHIDE in the same way as GCC does it. It looks for the extension of the file and determines the language of this file.
The list of the known suffixes is taken from GCC. Remember the fact, that GCC and RHIDE check the suffixes in a case sensitive way especially when running under Windows 95 see Running under Windows 95.
.c
.i
.cc
.cpp
.cxx
.C
.ii
.m
.p
.pas
.o
.a
.exe
.
.h
.hpp
.s
.S
cpp
. If you have such files, there is a problem, when
long filenames are not enabled (default in MS-DOS), because
RHIDE converts all filenames in this situation to lower case. But you
can add to the local options for this item see Local options
the commandline argument -x assembler-with-cpp, to tell
GCC
to preprocess this file first before assembling it.
.f
.for
.F
.fpp
cpp
.
.adb
.ads
.nsm
.asm
In RHIDE you can specify some arguments to other programs. These arguments must be a space separated list of strings. If you want to have one or more spaces as part of an argument, you have to enclose the whole argument in single or double quotes.
With DJGPP 2.01 were many bugs fixed, which caused problems under Windows 95 with the long (and case sensitive) filenames. Now all filenames are shown in lower case, except they contain characters with different case. That means, all normal 8+3 DOS filenames, which are normally reported in Windows 95 in upper cases, are automatically converted to lower case. For more information about filename conversion look at the libc reference.
If you really need the filenames exactly as they are reported by the OS, you can use the -c switch see Getting started.
You can also run more than one instance of RHIDE at once, in several DOS-boxes, because RHIDE creates and uses its own temp directory every time it starts to disable conflicts, when running multiple compilers at the same time. This is done by creating a directory in the directory pointed at by the environment variables %TMPDIR%, %TEMP% or %TMP%, in that order, until one of them exists. If none of them exists, the current directory is assumed. Then RHIDE puts the value of this directory into the environment variable %TMPDIR%. After leaving RHIDE this directory will be removed, if it is empty.
Because I have no access to OS/2, I cannot say anything about it. But some people said that they run RHIDE under OS/2 successfully, but there must be the exclusive mouse access to the DOS window disabled.
Since RHIDE is now available also for GNU/Linux here some hints. In general you will get the best results when you have installed RHIDE as a setuid root program. I know, this might be a security problem but I have tried to make it as secure as possible. After getting acces to the screen and the keyboard RHIDE will switch back to your normal rights and does not use root rights any more. It does not write any data or modify any file on disk with root rights (except you are running as root of course).
The reason for this is the rudimentary support for fast access to the screen and the totally hided acces to the keyboard in the Linux kernel. Additionally when you want to use the dual monitor debugging feature of RHIDE this is also needed, because RHIDE needs in that case access to the ports of your monochrome video card.
Running RHIDE under X-Window is not full supported (but it is possible). There are several reasons for this. The first is, that RHIDE uses in that case only terminal functions for input and output. That means it depends completetly on your terminfo database and these are (at least for me) in some cases totally wrong. You can see this mostly that RHIDE does not handle correct the keyboard. Other programs which use ncurses know this also and have there own hardcaded patches but I do not want to do so.
To fix the keyboard conflicts whenrunning in a xterm, I distribute
little modified terminfo file /usr/local/share/rhide/xterm-rhide
which you can place in /usr/lib/terminfo/x
or when you have
no root access you can place it also in $HOME/.terminfo/x
.
And then to use this file simply set the environment variable to
this new terminal with
export TERM=xterm-rhidebefore running RHIDE in the xterm.
An other alternative is to run RHIDE in a rxvt terminal but there you have to set also explicitely the TERM variable, because it is set mostly to xterm-color.
export TERM=rxvt
For creating a program, RHIDE allows you to define multiple source files which should be compiled and linked to your final program. This is done by creating a project. In this project you insert your source files (and not all the include files).
After a source file (which is inserted in your project) compiled at least once, RHIDE knows about all dependencies of this file, so this file will be compiled again only, if one of the include files have changed.
Because of many requests of users I made RHIDE to work also without using a project. This may be good, if you have a single file, but if your program should be build from more than one file I suggest you to use a project.
If you have only one editor window opened, the name of the resulting
program is taken from the name of the source file by removing the suffix
and on DJGPP appending .exe
.
If you have more than one files opened, I saw no other way for determining
the name of the produced program, than naming it aout
(on DJGPP
aout.exe
).
You can also create libraries (a collection of object files,
which can be linked with other programs) with RHIDE. The way for doing this is
very simple. Because RHIDE knows about the meaning of file suffixes, you can
change the name of the main target see Main targetname to have a suffix
.a
and that's all. Now RHIDE will run ar
instead of linking.
RHIDE supports two different ways for saving the options which you have customized.
The first one (which I prefer) is the use of the so called default
project. This is the project rhide.gpr
and must be located
in the same directory where rhide.exe
is. To create or modify
this default project change to that directory (normally %DJDIR%/bin)
and type there
rhide rhide
Now change any options you want and exit RHIDE. From now on these options are used for any newly created project or when running RHIDE without a project.
The second way is to save your options to a project file see Save options or to load them from any existing project file see Load options.
This chapter describes the pull-down menus and all their sub-menus. The main menu bar, the topmost line of the screen, is selected with the hotkey <F10> or by clicking with the mouse at this line. You can walk through the menu with the cursor keys and a menu entry is selected with <ENTER> or by clicking with the mouse on it.
This menu has its name only that one can speak about it. The symbol for this menu is the leftmost symbol in the menu bar. <Alt+SPACE> selects this menu.
This brings up a window with information about the author and the version of RHIDE.
This menu entry opens an editor with some important information which should be part of a bug report and where you can describe the problem.
With this menu item you can call the FSDB debugger, which comes with DJGPP. But remember, this runs the debugger as an external program and it is not integrated in RHIDE.
This is a very useful function. You can type the arguments for grep in the input line, which will be shown, and after this the program grep is called. The messages from grep are redirected to the message window see Message window.
This is analog to the call of FSDB see FSDB.
This function is sometimes useful, if you had run your program and
it wrote some things to the screen (for redirecting stdout
and stderr
from your program to a window in RHIDE
see Preferences.)
This brings up a dialog, where you can do some calculations. This dialog is similar to the evaluate dialog see Evaluate/Modify, but it uses not the feature of GDB, but it is a separate calculator. For more information see Calculator.
There can be used also some of the standard functions like
log
, sin
and so on and it can convert also integer
values between different bases (hex
, oct
, dec
).
This will open a small window, where you can play a little puzzle game. The "stones" are moved with the cursor keys or by clicking with the mouse on it.
This will open a little calender. With the cursor keys <Up> and <Down> you can switch to the next/previous month or click with the mouse on the small symbols in the upper corners.
This will open a window with all the ASCII characters. Move around with the cursor keys or press any key to select any wanted character. In the bottom line you will see the the character and the value of it (decimal and hexadecimal). The decimal value can be used to create that character for instance in the editor by holding the <Alt> key down and typing the value on the numeric key pad.
In this menu you can find functions, which deal with files, like open, close, save and so on.
Brings up the file-open dialog, where you can select a file to open (hotkey <F3> ). This dialog contains an input line for the filename, a list of filenames, an information window and the buttons for opening and canceling.
In the filename input line you can type directly the file, which you want to
open or you can type any mask to list only some files. The default
mask is *.cc
, but you can change this to anything and your last
typed mask is stored as the default mask for the next use. There is also
a history of your previous typed inputs available. This is selected when
you hit the down key or click at the small symbol at the end of the input line
with your mouse.
The list of filenames shows all the files that correspond to the mask. If this list is selected you can choose a file with the cursor keys, or you can type the first letters of the filename you want, and the bar is located at the first file, which has these letters as the first characters. To open the file simply press <ENTER> or double click with the mouse on it.
Below the list of filenames there is a small window with information about the selected file (complete path, size, modification time).
To leave the dialog without opening a file press <ESC> .
This is the menu entry for creating a new file to edit. This file gets the title 'Untitled'. If you save or close it, you will be prompted for a new name of this file by opening the file-open dialog.
Save the file in the current editor-window to disk. If the name of the current file is 'Untitled' you will be prompted for a new name. <F2> is the hotkey for this function. The modification of the file on disk is set to the time of the last modification of this file and not to the time when saving to disk.
If the file was not modified, it is not saved!!
Save the file in the current editor-window to disk under a different name, for which you will be prompted. For choosing the new name the file-open dialog will be opened.
Save all the editor files to disk. If they are not modified, they will not be saved.
This executes a DOS-Shell. This is done by calling the program,
which is set in the environment variable COMSPEC. If this variable
does not exist, the program c:/command.com
is executed.
To return to the IDE type
exit at the DOS-prompt. Before calling DOS, the program does
a Save all see Save all automatically.
Here you can quit the IDE. If there are any unsaved editor-files, you will be prompted for saving them. (<Alt+X> is the hotkey.)
In this menu you can activate functions, which are related to the integrated editor. Most of them have a hotkey.
This undoes your last change in the current editor-window. <Alt+Backspace> is the hotkey for this function.
This does the reverse to undo see Undo. That means, it is the undo of the undo.
This moves the selected text in the current editor-window to the clipboard. (<Shift+Del> is the hotkey.)
This copys the selected text in the current editor-window to the clipboard. (<Ctrl+Ins> is the hotkey.)
This inserts the selected text in the clipboard in the current editor-window at the current cursor-position. (<Shift+Ins> is the hotkey.)
This brings up an editor-window with the contents of the clipboard. The contents of the clipboard will be lost, if you exit the IDE.
This erases the selected text in the current editor-window.
This is the same function as See Copy, but it uses the Windows clipboard and works only, when running under Windows.
This is the same function as See Paste, but it uses the Windows clipboard and works only, when running under Windows.
When selecting this menu entry, all real tabs (all characters with
the code 0x9
) are expanded to as many spaces as defined as
the tabsize see Preferences.
This function is the reverse to See Expand all tabs. That means, RHIDE tries to make as many as possible spaces (count is taken from the defined tabsize) to real tabs.
Here is a submenu for handling macros. Currently there is only one recordable macro available and it is NOT stored anywhere. That means it is lost when you leave RHIDE and restart it. There is another way of using macros see Defining macros.
After selecting this function, all your keystrokes are recorded to reproduce them later.
This stops the recording of a macro.
This executes the recorded macro.
Menu for searching and replacing strings in the editor-window. These functions have also hotkeys.
Find a string in the current editor-window. You can type the string for searching in an input line and you can also select, if the search is case sensitive or not and to search for whole words only or not.
Find and replace a string in the current editor-window. This works in the same way like searching text, but additionally you can give a string, with which the found text will be replaced.
This function repeats the last search or replace operation.
After prompting for a line number (with range checking), the cursor will be located at this line.
With this feature you can easily jump to the source line of a function to edit or see it. This is only a heuristic by parsing your source file and does not take the information from the debugging symbols.
After selecting it you will get a dialog, from where you can select the function to which you want to jump.
This selects the next message in the message window see Message window, but only, if there is a next message available.
This selects the previous message in the message window see Message window, but only, if there is a previous message available.
In this menu you find the functions for running your program.
If your project-target is an executable, this will be run after doing
a See Make. <Ctrl+F9>
is the hotkey. If the build was
not successful, the program will not be started. The debugging functions
are only available if -g
was used for compiling
see Syntax of arguments.
This executes the code for exactly one source line. If there is a function call at the current line this function is executed at once without stepping through this function.
When using the <Shift>-key, RHIDE will NOT switch to the user screen when executing the debuggee.
(hotkey <F8> or hotkey <Shift+F8> may be used.)
This is the same as See Step over, except when there is a function call at the current line and for this function debugging information is available, RHIDE steps into this function.
When using the <Shift>-key, RHIDE will NOT switch to the user screen when executing the debuggee.
(hotkey <F7> or hotkey <Shift+F7> may be used.)
This will execute your program until the execution comes to the line, where the cursor is. If the program is stopped at any other place by a breakpoint the program will stop there and not at the cursor position.
When using the <Shift>-key, RHIDE will NOT switch to the user screen when executing the debuggee.
(hotkey <F4> or hotkey <Shift+F4> may be used.)
This 'kills' your debuggee at the current execution point without executing any other code of your program
Here you can define the name of the main
function of
your program. This is needed at least when debugging programs,
(like written with GNU Pascal or GNU Fortran), where the function
of your main program is not main
.
But you can use this also to debug your program at locations, which
are executed normally before main
is called (for instance
the global constructors).
Here you can type the arguments, which will be passed to your program when you do a run see Run and see Syntax of arguments.
Here are the functions to translate your source files and for updating your project.
Compile the file in the current editor-window or the selected entry in the project-window if you are there. The IDE chooses automatically the correct compiler, depending on the suffix of the file see Known suffixes.
This makes your project up to date. It works like MAKE on commandline with a makefile. <F9> is the hotkey. The dependencies are checked for each item of the project. These dependencies are automatically generated, if you compile a file within the IDE.
This function has two different results depending on the type of your project. If your project is an executable see Known suffixes, the linker is started. But if it is a library, all the object files are taken to build a library.
This builds the project completely new with compiling and linking all of the project-items.
This menu contains the functions for debugging your program. Most of them have hotkeys and they are described in more detail later see Debugging with RHIDE.
See Setting a breakpoint.
See Evaluating the contents of variables.
See Watching the contents of variables.
See Modifying and setting a breakpoint.
This opens a window, where you can see assembler instructions. When you are running the debugger, you will see the instructions at the current execution point of your program.
You can step see Step over or trace see Trace into here in the same way like in an editor window and you can also debug code, which has no debugging information.
Additionally you can scroll here also forwards or backwards but scrolling backwards is very hard to implememnt and so you will get when scrolling backwards most of the time wrong output. Sorry for this, but until I find more time to implement this better you have to live with it.
This shows a window with a list of functions, from which the current execution point in the debugged program is called. If you hit <Enter> on a function which has line number debugging information, you will go to the source line which is shown in the window.
This asks first for a regular expression to list only those functions of your program, which match that expression. The syntax for such a regular expression is a little bit different from the wildcards you are probably knowing from MS-DOS.
If you want to get a list of all functions you should enter either nothing (the default), or ".*", or "?*" (both without the double quotes). The expression "*" does NOT mean all function. In fact, your entry will be interpreted as a regular expression.
After you have typed the expression and pressed <Enter>, you will get a list of functions that match the regular expression and for which debugging information is available.
This list is sorted by the name of the function and has three parts:
NAME | RETURN VALUE | FILE
You can walk through the list with the cursor keys or the mouse. If you hit <Enter> or double click a function, you will go the the source code of that function.
Here you can add or remove items to or from your project
Here is the point to open a project. After selecting this menu item, the file open dialog is opened to select a project. You can type the name of the project or select one from the list.
If you open a project in another directory than the current, RHIDE will change the current directory to this directory and then the project will be opened.
If you type here a name of a project which does not exist, a new one is created.
If no project was opened and you create a new project, all open desktop files remain open, but they are not added to the project. If a project was opened, it will be automatically closed before the new project is opened.
This closes the currently opened project and closes all files, which are on the desktop.
A dialog will be opened, from where you can choose your file to add to your project. If you are in the project window see Project window you can use the <Ins> key to activate this function within the project window.
Currently it is impossible to use relative or absolute paths as part of a project item. If you have your files in several directories, you have to setup either the search path for source files or you have to create for each directory a library that can be included in your project.
This will remove the selected item in the project-window from your project. If you are in the project window see Project window you can use the <Del> key to activate this function.
Here you can give the selected project-item options for compiling, which will be in effect only for this item. If you are in the project window see Project window you can use <Ctrl+O> to activate this function. The options you give here are passed to GCC only, when compiling this file. For more details see see Local options for a project item.
This shows the dependencies for the selected item in the project window. You can use the hotkey <Ctrl+I> in the project window. see Project window
Here you can change the name of your main target. The main target is either
an executable file or a library. RHIDE selects the type of the main target
from the suffix of this name. If it has no suffix or the suffix .exe
,
an executable will be built. If it has the suffix .a
, a library will
be created.
Remember when you give it no suffix, both, the COFF image and the .exe
file will created. If it has the .exe
suffix, only the .exe
file is created.
Here you can give the primary source file, when you want to use the
'automake' feature of GPC. If you type a source name here, RHIDE assumes
that your program is written in Pascal and does NOT check any dependencies
of the project, because this is done automatically by GPC with the
--automake
option.
If you don't want to use the 'automake' feature of GPC, even when building a Pascal program, give here an empty name, which is the default.
This function removes all internal stored dependencies. The files are not removed. This is useful when you want to create a makefile see Write Makefile and you do not want to include all the absolute filenames for the dependencies (mostly the include files).
This function is a relict from earlier versions of RHIDE, but I have not disabled it.
This function includes the function of clearing the dependencies see Clear dependencies and removes in addition to it all the files, which can be rebuild within RHIDE.
Here you can create a makefile that contains all the rules to build the project from the command line without starting RHIDE. For this you need the GNU make, because the generated makefile uses the features of GNU make very extensively.
If you have used environment variables in your search paths see Directories, these are not expanded in the generated makefile. But all variables you used will be defined at the beginning of the makefile with their current value.
This menu contains many submenus for anything you can customize.
Here you can define all of the paths, where RHIDE and the compilers finds the needed files and where to store some files.
All the paths you can define in the several entries have the form
of a semicolon separated list of directories, just like your environment
variable %PATH%. You can use forward slashes and back slashes, but they
are all converted to forward slashes by RHIDE. You can also use
environment variables as part of your paths. The syntax of such a variable
is that of a GNU makefile. If you want to use the variable %DJDIR%
,
you must type $(DJDIR)
.
Place here a list of directories, where gcc (and RHIDE) should search for header files which you use via #include ... and which are not in the default directories (like %DJDIR%/include) If you want to use for instance allegro, put here the directory, where allegro.h is.
This is the list of directories, where GCC looks for include files and RHIDE searches in this directory (after looking in the current directory) for header files.
This is the list of directories, where GCC looks for libraries when linking. RHIDE searches in this directories (after looking in the current directory) for libraries, if you have included them directly as a project item.
This is the list of directories where RHIDE looks for object files. If you type here only one directory this has also the effect that the object files, which are compiled, are stored in this directory.
This is the list of directories, where RHIDE looks for the source files (after looking in the current directory).
It enables you also one feature (like I use it mostly at any time), to have the sources in one directory tree and the objects and executables in a total different directory. Simply Go to any directory, create there your project and then add the needed files to your project. Finally specify the path to your sources here and RHIDE will find them.
Define here a space separated list of directories where your standard headers are. Header files found in these directories are not added to the list of dependencies which is automatically generated when compiling a C/C++ source file.
In this submenu you can change most flags, which have to do when compiling C or C++ files or better for the options of all the currently supported compilers.
This opens a dialog where you can enable or disable most of the flags for generating or suppressing warnings when you compile a C or C++ file. see How to toggle these flags
For a detailed description of the available flags see Warning Options.
This opens a dialog where you can customize how the compiler optimizes your code. see How to toggle these flags
For a detailed description of the available flags see Optimize Options.
This opens a dialog where you can customize the amount of debugging information the compiler should include in object files. see How to toggle these flags
For a detailed description of the available flags see Debugging Options.
This opens a dialog where you can select flags that are only passed to GCC when compiling C files. see How to toggle these flags
For a detailed description of the available flags see C Dialect Options.
This opens a dialog where you can select flags which are only passed to GCC when compiling C++ files. see How to toggle these flags
For a detailed description of the available flags see C++ Dialect Options.
This opens a dialog where you can select flags which are only passed to GPC when compiling Pascal files. see How to toggle these flags
For a detailed description of the available flags see Pascal Dialect Options.
This opens a dialog where you can select flags which are only passed to g77 when compiling Fortran files. see How to toggle these flags
For a detailed description of the available flags see Fortran Dialect Options.
The options in the dialogs for Warnings, Debugging, C-flags and CXX-Flags are selected with the cursor-keys or the mouse and are activated or deactivated by pressing <SPACE> or by double-clicking with the mouse at the first field of the option. If an option can take an additional value or string, an inputbox will be opened, and you can type them there. If the additional value is optional, you can leave this input-box by pressing <ESC> or activating the Cancel button and no value, or the previous one will be appended to this option.
Here you can tell the linker which libraries will be linked in your program. At this time the number of additional libraries is limited to 16. If you need more, you have to type them manually see Linker options
In the input-fields of the dialog you only have to type the part of your
library name after lib
and before .a
. Example: If your library
is libtv.a
put only tv
there. You can switch
between the input lines for the libraries using <Tab>
or
<Down Arrow> (next field) or <Shift+Tab>
or
<Up Arrow> (previous field). If you have
typed your libraries you can activate or disable them by switching the
checkbox before the name on or off. This is done by pressing <Alt> and
the corresponding digit or letter of the checkbox at the same time or by
clicking with the mouse.
Normally RHIDE checks the types of your source-files and automatically
adds some standard libraries, corresponding to these source-files.
These are for C++ files the library libiostream.a
and for Objective C files the libobjc.a
library.
If you want to disable this, deactivate the Use standard libraries
checkbox. This adds also the commandline option -nostdlib to
GCC,
that means, you must give the linker explicitly all of the standard
libraries, which you need. This includes the libgcc.a
and
libc.a
libraries.
Here you can enter a space separated list of options that will be passed to GCC when linking your program. see Syntax of arguments
See Syntax of arguments.
Here you can enter a space separated list of additional options that will be passed to GCC every time it is called. see Syntax of arguments
See Syntax of arguments.
Here you can customize all of the colors of the IDE.
When this is enabled, the editor automatically indents the next line by referring to the previous line if you press enter.
For more information see Autoindent
See Editor options.
When this is enabled, the character \t
is
inserted into the text if you press the <Tab>-key. Otherwise
the number of spaces (defined by tabsize) is inserted.
For more information see Real Tabs.
See Editor options.
Normally, RHIDE uses persistent blocks. This means the selected area will not get unselected if you press a key. If you like the behavior of earlier versions of RHIDE, disable this option.
For more information see Persistent Blocks.
See Editor options.
This option enables the so called
'C intelligent indenting', which is an heuristic for indenting after
special key words like if
or while
more than the normal
autoindenting. This works only if autoindent is enabled.
For more information see Intelligent C indent.
See Editor options.
This is a special feature of the builtin editor. If you enable this option you will see a vertical special color highlighted column across the whole editor window at the cursor column.
For more information see Column cursor.
See Editor options.
This is a special feature of the builtin editor. If you enable this option you will see a horizontal special color highlighted row across the whole editor window at the cursor row.
For more information see Row cursor.
See Editor options.
If this option is enabled, you will see at any time you type a bracket, brace or parenthesis the matching highlighted or a message, that there was no matching found.
For more information see Match pair highlight.
See Editor options.
Enable this option, when you want to leave the cursor at it's current position when you paste some text.
See Editor options.
When this option is enabled, the syntax highlight is still shown in selected blocks.
See Editor options.
When enabling this option the editor fills the gaps in your text with an optimal value of spaces and tabs.
See Editor options.
Additionally you can select here the tabbing size for the editor. This value is used as the global setting for all editor windows which will be opened after setting this value. The currently opened windows will use also this setting.
See Editor options.
Here you can customize some basic options for the work of the IDE. A dialog will be opened where you can turn on or off the following options:
When this is enabled, all internally stored dependencies for a project item are written to the makefile see Write Makefile. You should disable this option, if you want to give another user the makefile of your project, and (s)he has a different directory structure.
See Preferences.
Create backup files when saving. When it is enabled, RHIDE creates a backup
of the file to save under the same name as the editing file, but the suffix
is replaced with .bak
See Preferences.
Turn the Syntax highlight on or off. RHIDE automatically checks the suffix of the editing file to determine the correct syntax highlighting. Currently this is supported only for C, C++, and Pascal source files. All other files are not specially highlighted.
See Preferences.
Here is an very powerful option. If you have installed on your computer a secondary display (monochrome monitor) in addition to your VGA monitor, RHIDE can (when this option is enabled) switch to the second monitor for it's output and you can see your program on the normal monitor.
If this option is enabled and you have not a secondary monitor installed, RHIDE will detect this and does not switch to it.
See Preferences.
Turn this on, if you want to redirect the output to stderr of your program to a window in the IDE. This is also needed, if you want to use the builtin analyzing of a call frame traceback, when your program crashes.
See Preferences.
Turn this option on, if you want to redirect the output to stdout from your program to a window in the IDE.
See Preferences.
Turn this option on if you want to see which files are checked, when you do a make see Make, and to see the commandlines how the compilers are started by RHIDE.
See Preferences.
Turn this option on to show in the upper right corner of the screen a readout of the free memory of your system. This shows both, the virtual and the physical free memory.
See Preferences.
If this option is enabled, RHIDE does not use the internal caching of information about searching files and modification times. Use this only if you have problems with the automatic checking of dependencies, because this slows down RHIDE.
See Preferences.
On EGA/VGA video cards it is possible to use 16 background colors instead of normal 8. This is done by telling the video card how to interpret the highest bit of the color attribute. If you enable this, you can use up to 16 background colors, otherwise there are only 8 colors for the background available. To get blinking foreground colors, you must use a little trick. Enable at first this option here. Then change the color attribute to highlight background color you want and then reset the '16 background colors' option.
See Preferences.
When this option is enabled you can see in the GDB output window which commands are sent to the builtin GDB from RHIDE.
See Preferences.
When this option is enabled RHIDE uses no shadows at all for the windows and dialogs and so on.
See Preferences.
When you debug a program, which modifies the palette when in text mode, you should enable this option.
Enable this option only, when you get a system crash after starting your program and because of the use of disk cache the project, which RHIDE automatically saves before your program is run, is corrupted.
When this option is enabled, RHIDE waits for a keypress after exiting your program. It is in general the same like pressing <Alt+F5> after exiting the user program.
Here you can tell RHIDE to add only header files to the list of dependencies for a project item which are included via
#include "..."
When this option is enabled, RHIDE will allow you to include project items which are not in the current directory or any of the directories specified in the path for source files see Sources directories. If the item is relative to any of these default searched directories only the relative subdirectory will be part of the item.
An other side effect is, that the resutling object file will be placed also in the same directory relative to the default output directory.
When you select this option RHIDE will open always the disassembler window when the execution stops at a location for which there is no line number debugging information available. Default the window can be opened only by explicit request.
This allows you also to debug functions or code from other libraries or the startup code.
Only when this option is enabled, RHIDE will use the builtin knowledge about RCS see RCS and RHIDE.
Here
you can select the video mode. If you want to use a video mode
other than the ones shown, you have to select the User Mode
mode and type the value of this mode (see in the reference of
your video card) as a decimal or hexadecimal (preceeded by
0x
) number. But
you can use only textmodes (modes with starting video ram address
at 0xB800:0000
. For the numbers of the videomodes refer to
the documentation of your video card.
If you type an invalid videomode (RHIDE checks it), the
80x25-Mode will automatically selected.
I have tested all available text modes with my et4000-card, and they work. For some modes, (mostly every high resolution text mode) the mouse cursor is shown by my own routine. That means that you can use the mouse also in the high resolution text modes.
See Preferences.
Define here the number of closed windows which RHIDE should remember. If you want to disable this, give here a number 0 and when RHIDE should remember any closed window give here -1.
Here you can customize a little bit the speed of the double click interval and you can also tell RHIDE to reverse the mouse buttons.
This opens a dialog, where you can modify the list of reserved words the editor knows. If you choose the Default button in this dialog, the default reserved words are generated and any previous words are lost.
This opens a dialog, where you can modify the list of reserved words for Pascal the editor knows. If you choose the Default button in this dialog, the default reserved words are generated and any previous words are lost.
Here you can modify the list of C options, which you can turn on or off see C options.
See How to change the list of flags.
Here you can modify the list of CXX options, which you can turn on or off see CXX options.
See How to change the list of flags.
Here you can modify the list of Pascal options, which you can turn on or off see Pascal options.
See How to change the list of flags.
Here you can modify the list of Fortran options, which you can turn on or off see Fortran options.
See How to change the list of flags.
Here you can modify the list of Warning-Flags, which you can turn on or off see Warnings.
See How to change the list of flags.
Here you can modify the list of Debugging-Flags, which you can turn on or off see Debugging.
See How to change the list of flags.
Here you can modify the list of Optimization-Flags, which you can turn on or off see Optimizations.
see How to change the list of flags.
Here you can define your own list of words, which can be specially highlighted, when syntax highlighting is enabled see Preferences.
The syntax of the strings, which you can modify or add with the last menu-entries is any string followed by an optional modifier with the following meaning:
%d
%d?
%c
%c?
%s
%s?
%s(STRING)
%s?(STRING)
As an example: the string for the -O
option is defined as
-O%d?
and the -d
option see Debugging is
defined as
-d%s(MNDyrxjsLtfcSlgRJdkamp)
which means, the
string after -d
must be a combination of the characters in
MNDyrxjsLtfcSlgRJdkamp
If you leave the dialogs for modifying the flag lists with the OK button or if you activate the Default button, all flags are disabled
Here you can save all the options you currently customized to a file.
RHIDE restricts this to saving them only to a file with the .gpr
suffix (and .gdt
for the desktop file).
Here you can load the options from any existing project file.
In this menu you get the functions for arranging, resizing and switching between the windows on the desktop:
With this function you can resize and/or move the current window. After selecting this, the frame of the current window will be drawn light-green and you can move it with the cursor-keys. To resize it, press <Shift+> cursor-keys. To exit the moving/resizing function, press <ESC> or <ENTER>. Alternatively you can use the mouse. For moving, click on the top of the window and hold the left button down. Now you can move the window by moving the mouse. To resize it, click on lower right corner of the window, hold the button down and resize the window by moving the mouse. (This function has the hotkey <Ctrl+F5> )
This brings up the window to maximal size or to previous size. (hotkey <F5> or click with the mouse at the symbol on the right upper corner of the window)
This arranges all the editor-windows on the desktop, to see them all simultaneously.
This arranges all the editor-windows on the desktop, to see the contents of the current editor-window and the top-frame of all the others.
Hotkey <F6> switches to the next window on the desktop.
Hotkey <Shift+F6> switches to the previous window on the desktop.
This closes the current window. If it is an editor-window and its contents were modified, you will be prompted to save it. Hotkey <Alt+F3> or click with the mouse on the upper-left symbol of the frame.
Hotkey <Alt+0> brings up a list of all windows that are currently on the desktop. You can select one of them and press <ENTER> to switch to it. With <Del> you can close the selected window.
With this function you can select the project window see Project window. If it was closed, it will be opened.
Hotkey <Alt+F5> shows the contents of the DOS-Screen. To leave this function, do any event. That means, press any key, or click with the mouse.
In this menu you have access to many predefined help entries in the big help system.
This opens the INFO viewer. Many thanks at this point to
Salvador Eduardo Tropea (SET). He wrote the very good INFO viewer for
use with RHIDE. This was also the most important reason for me to
write the documentation in Texinfo, because you have now an online help
available with the produced
INFO file rhide.info
.
Pressing <F1> invokes the help system from everywhere. For help on using the INFO viewer, press <F1> within the help window. But the above things work only if you have correctly installed the INFO files that come with RHIDE.
If you have installed the binary archive of RHIDE as described in the
readme.bin
, the INFO files are in %DJDIR%/info
. If you
have not modified your djgpp.env
file, this directory is searched
for the INFO files.
But you can put the INFO files in any directory you want, if you add this
directory to the %INFOPATH% variable in your djgpp.env
file in
the section for info
.
This brings up the help window with the main index for getting help for RHIDE.
In this submenu you can set the files to be searched for getting syntax help and you can also customize the options, how this is done.
If you are in an editor window, and you press <Ctrl+F1> , you get help about the function under or before the cursor. But only if this function is documented in the files you have given to be searched for see Files to search. If there was no help found you will be informed. This feature can be used also by clicking with the right mouse button on the word.
Give here a space separated list of files (if you give no suffix, the standard suffixes are tried) which should be scanned for getting help for a word.
Here you can give some options, how the syntax help should work. The following search methods are selectable and other options. For all the search methods it is possible to get more than one matching topic. If that is true, you will find a list, from which you can select the wanted topic.
When this is selected, you will get syntax help only, if in the selected files a topic with that exact name was found.
When this is selected, you will get syntax help, when the word is a substring of any of the nodes in the files to be searched for syntax help.
This method uses a "Fuzzy search" for getting syntax help. That means it looks also for nodes, which are similar to the word for which you want to get syntax help.
These are several options for the textual search:
Case sensitive
Here you can set the bound for the fuzzy search. The range is from 1 to 1000 where 1 means that mostly every string matches any other string and 1000 means the exact match.
Here you can get a list of all available topics for the syntax help, from where you can choose one (<Enter>, <Space> or double click).
This is a separate menu entry to open the libc reference, because this is used very often when writing C programs.
This brings up a help-window for instructions and available keystrokes when using the integrated INFO viewer. (see Top)
To select a window you can do the following. If the window has a number, this is right on the top-frame, you can select this window by pressing <Alt> and this number (but only if the number is a single digit). Or you click anywhere in the window or on the frame of the window with your mouse.
This section should describe the work of the editor. But because the editor is now so complex and, not my own work, there is now separate documentation, see Top for a detailed and better doc. But you can read also more from my doc, which describes the most common (for me) usage of the editor.
Here I describe most of the editor commands. If there is a key command like Ctrl+Q+Y, press <Ctrl> and <Q> simultaneously and after this press <Y>.
I strongly recommend not to use the technique by holding down the <Ctrl>
key when pressing the second key in such key combinations, because for
instance when you press Ctrl+K and then Ctrl+C you will be
prompted if you want to interrupt RHIDE (because you pressed the interrupt
key). But if you really want to use this methode, you should use the
-C
commandline switch when starting RHIDE to disable the handling
of SIGINIT
.
If you have set some markers, they will be stored, so you can use them later when restarting RHIDE.
To compile only a single file, you don't need to include it in a project. You only have to open it and do a compile. If a file is in your project, you can compile it, if you are in its editor-window or if you are in the project-window and this file is selected.
Warnings and errors from compiling a file are listed in the message-window. If there are warnings or errors, you can jump to the corresponding source by hitting <ENTER> on this message. If this file wasn't already opened, it will be opened.
Most checking of the dependencies works correctly, but there are some few situations, where this checking gets confused. The first results in the fact that I implemented a cache function for getting the modification time of files, that means, most files are 'stat'ed only once, after starting RHIDE. But if someone modifies one of the files, which are in the cache, (this can be another program, when you run RHIDE in a multitasking environment, such as Windows) or if you run your project and it modifies some of these files, the internal cache is after this not up to date.
Here is another situation. Your source files are not in the current
directory. You have opened a source file for editing and successfully
built your project. Now you leave RHIDE, because you want to debug your
program with FSDB
, you copy the source file (in this case it is the
file, which you have opened in the IDE) to the current directory. Now
you debug it and there are some errors. You restart RHIDE to make the
changes in the file. The previously opened file will be opened automatically
and you edit it. If you do now a Make, RHIDE tells you, that your project
is up to date, because it searches for source files at first in the current
directory, and there is the unmodified file.
In this chapter I will give you for some special parts a more detailed description of what they do.
The project window shows you every file, which you have included in your project. Most time you work with RHIDE this window should be visible, but you can also close it see Close.
The items in the project window, and therefore also in your project, are sorted in alphabetical order. This has the effect of faster finding an item and you can also move the selecting bar to a specified item by typing the name of this item.
Normally, the alphabetic order of the project items causes no problems because the linker searches at first every object file for unresolved symbols before any library. The statement, the the GNU linker is a one pass linker makes sense only for libraries, because they are checked only once for unresolved references. That means, if you include libraries in your project you must know about the order, where this library is put on the command line when linking your program.
If you have problems with that order, or if you really want to have one object file (or library) before some others, you must rename them, to get the right position from the name.
To open an editor window with the selected item press either <ENTER> or <SPACE>. If there was already a window with this file opened on the desktop, this window will be selected. This works only if the selected item has a known suffix see Known suffixes. If the selected item is a project file, that project will be opened with the side effect that if you close this project, the previous one will be reopened.
If you have compiled a file already in RHIDE, you bring up a list with all dependencies of that file. In this list the files are show by their basename followed by the directory and they are also sorted in alphabetical order. From here you can also open an editor window with the selected dependency by pressing <SPACE> or <ENTER> on that item.
You can change many options for a project item, which are in effect only for this file. To do this, hit <Ctrl+O> on the selected item and a dialog is shown, where you can change the options.
At this time you can change the following options.
Here you can give some additional defines or any other commandline options, when compiling this item.
This is a switch to tell RHIDE, that this file should not be linked with your program, but it is compiled and it is checked to determine if your program is up to date.
When you select this option the item is compiled only if it does not already exist. For most project items this is not usefull but if you have included in your project other projects which create a library this might be usefull, especially if the library has many source files and you know, that they change very seldom.
Here you can specify another name as the compiled file. Put here only the basename of the file (without any directory)
From that list you can select exactly one type of the compiler, which is used to create your output file. Possible values are:
Auto
User
None
GNU C compiler
GNU C++ compiler
GNU assembler
GNU Pascal compiler
If you have selected the User compiler type, you have to put in the next input line the specs on how to call the compiler. These specs can use any variables that are known to RHIDE see Builtin variables together with normal text. As an example I show here, how the builtin C compiler is defined (the backslashes at the end of the lines are used only here to show, that the line is continued, they are NOT part of the specs):
$(RHIDE_GCC) $(INCLUDE_DIRS) $(C_DEBUG_FLAGS) $(C_OPT_FLAGS) \ $(C_WARN_FLAGS) $(C_C_LANG_FLAGS) $(C_EXTRA_FLAGS) $(LOCAL_OPT) \ -c $(SOURCE_NAME) -o $(OUTFILE)
Here you can select how errors or warnings that are produced by the compiler, are checked. Possible values are:
Auto
User
stderr
None
builtin C
builtin assembler
builtin linker
return value
If you have selected above the User error checking, type here the program, which should check for errors and/or warnings. What the external error checking program should do:
Errors
If "!Line" and/or "!Column" are not used they dafault to 0. The next line contain the error text. Example:
!Error!File'test.c'!Line 17 This is a sample error message
This means, that in file 'test.c' at line 17 an error occurred
with the description 'This is a sample error message'
Warnings
Any other line
WARNING: THE LIST OF VARIABLES AND STRINGFUNCTIONS DESCRIBED BELOW MIGHT NOT BE UPTODATE. IF YOU WANT TO GET INFORMATION ABOUT ALL FEATURES PLEASE LOOK IN THE SOURCES FOR RHIDE.
RHIDE uses for compiling, linking, and the other stages of generating a file also specs, like you can change in the local options for a project item see Local options. Here the specs, which are used currently:
All of these specs have a default content in RHIDE, but they can be overwritten by setting the environment variable with the same name and any other contents.
This section describes, which variables can be used within RHIDE to get values from some of the configurations, which you have made inside RHIDE.
All of these variables are referenced by a name enclosed in parentheses
preceeded by a dollar sign. Example: $(RHIDE_GCC)
. You can overwrite any
of the following variables, if you define in your environment the same
variable with any contents you want.
When RHIDE tries to get the contents of such a variable, it searches at first if it is found in it's internal database. If it was not found, the environment is checked for such a variable and if that fails, the resulting value is the variable itself.
In addition to the use of variables, RHIDE has a limited ability of using string manipulating functions. I have implemented some of the functions, which are available with GNU make. They have the same name and should work exactly like the GNU make counterpart.
$(strip arg)
arg
.
$(addsuffix arg1,arg2)
arg2
the string arg1
.
$(addprefix arg1,arg2)
$(addsuffix arg1,arg2)
,
except that it puts
the string arg1
before each argument from arg2
.
$(notdir arg)
arg
.
$(dir)
arg
. If there
was no directory in arg
, an empty string is returned. (The directory
contains also the drive letter, if there was one)
$(subst arg1,arg2,arg3)
arg1
in arg3
with
arg2
The following variables have a special meaning in RHIDE with the default contents:
$(RHIDE_GCC) $(RHIDE_INCLUDES) $(C_DEBUG_FLAGS) \ $(C_OPT_FLAGS) $(C_WARN_FLAGS) $(C_C_LANG_FLAGS) \ $(C_EXTRA_FLAGS) $(LOCAL_OPT) -c $(SOURCE_NAME) \ -o $(OUTFILE)
$(RHIDE_GCC) $(RHIDE_INCLUDES) $(C_DEBUG_FLAGS) \ $(C_OPT_FLAGS) $(C_WARN_FLAGS) $(C_C_LANG_FLAGS) \ $(C_EXTRA_FLAGS) -x c $(LOCAL_OPT) -c $(SOURCE_NAME) \ -o $(OUTFILE)
$(RHIDE_GXX) $(RHIDE_INCLUDES) $(C_DEBUG_FLAGS) \ $(C_OPT_FLAGS) $(C_WARN_FLAGS) $(C_C_LANG_FLAGS) \ $(C_CXX_LANG_FLAGS) $(C_EXTRA_FLAGS) $(LOCAL_OPT) \ -c $(SOURCE_NAME) -o $(OUTFILE)
$(RHIDE_GXX) $(RHIDE_INCLUDES) $(C_DEBUG_FLAGS) \ $(C_OPT_FLAGS) $(C_WARN_FLAGS) $(C_C_LANG_FLAGS) \ $(C_CXX_LANG_FLAGS) $(C_EXTRA_FLAGS) -c c++ $(LOCAL_OPT) \ -c $(SOURCE_NAME) -o $(OUTFILE)
$(RHIDE_AS) $(RHIDE_INCLUDES) $(C_DEBUG_FLAGS) \ $(C_OPT_FLAGS) $(C_WARN_FLAGS) $(C_EXTRA_FLAGS) \ $(LOCAL_OPT) -c $(SOURCE_NAME) -o $(OUTFILE)
$(RHIDE_AS) $(RHIDE_INCLUDES) $(C_DEBUG_FLAGS) \ $(C_OPT_FLAGS) $(C_WARN_FLAGS) $(C_EXTRA_FLAGS) \ -x assembler $(LOCAL_OPT) -c $(SOURCE_NAME) \ -o $(OUTFILE)
$(RHIDE_INCLUDES) $(C_DEBUG_FLAGS) $(C_OPT_FLAGS) \ $(C_WARN_FLAGS) $(C_P_LANG_FLAGS) $(C_EXTRA_FLAGS)
$(RHIDE_GPC) $(RHIDE_GPC_FLAGS) $(LOCAL_OPT) \ -c $(SOURCE_NAME) -o $(OUTFILE)
$(RHIDE_GPC) $(RHIDE_GPC_FLAGS) -x pascal \ $(LOCAL_OPT) -c $(SOURCE_NAME) -o $(OUTFILE)
$(RHIDE_LD) $(RHIDE_LIBDIRS) $(C_EXTRA_FLAGS) \ $(RHIDE_LDFLAGS) -o $(OUTFILE) $(OBJFILES) \ $(LIBRARIES) $(RHIDE_LIBS)
$(RHIDE_LD_PASCAL) $(RHIDE_LIBDIRS) $(C_EXTRA_FLAGS) \ $(RHIDE_LDFLAGS) -o $(OUTFILE) $(OBJFILES) \ $(LIBRARIES) $(RHIDE_LIBS)
$(RHIDE_LD_PASCAL) $(RHIDE_LIBDIRS) $(RHIDE_LDFLAGS) \ -o $(OUTFILE) \ --automake=\"$(strip $(RHIDE_GPC_FLAGS))\" \ $(RHIDE_GPC_FLAGS) $(SOURCE_NAME) $(LIBRARIES) $(RHIDE_LIBS)
$(RHIDE_AR) $(RHIDE_ARFLAGS) $(OUTFILE) $(OBJFILES)
fsdb $(OUTFILE) $(addprefix -p ,$(SRC_DIRS)) $(PROG_ARGS)
gdb $(OUTFILE) $(addprefix -d ,$(SRC_DIRS))
grep -n $(prompt arguments for GREP)
gprof $(OUTFILE)
The following are not used as real variables, but they are used to get the contents of options from RHIDE. But you can override them also by setting them as an environment variable.
GCC
. Currently only the -nostdlib
switch.
GCC
when linking. Currently only the
switches -pg
and -nostdlib
.
TITLE
and insert
the parameters here.
If you have special wishes for compiling your source files, you can configure for RHIDE mostly everything. For adding support for other than the builtin known file types see Builtin variables. If you want to change the behavior of RHIDE for compiling all the known file types you should know at first really what you do. If you think, this is a good idea or if you only want only check if it works you can do it.
Before RHIDE compiles any file (this includes also linking and building
a library) it searches the environment for a variable after the following
scheme: When compiling a file with suffix .c
to a file with
suffix .o
RHIDE checks for the variable $(RHIDE_COMPILE.c.o). If
this variable is defined the contents of this variable is taken as the
compile spec.
If you want to change the specs for linking you must take as destination
suffix .exe
or .
and as source suffix the suffix of
your object files. Example:
$(RHIDE_COMPILE.o.)
This window shows every time you compile a file the resulting messages, which GCC produces. These messages were converted in a special format to show them in the window. Some of the messages contain a file eventually combined with a line number. If you press <ENTER> on such a message, the corresponding source line in the file will be highlighted and the window with this file will be selected. If this file is not already on the desktop, it will be opened.
If the file, to which the messages refer, is already in the foreground you can see the selected source line for your messages directly on the screen.
Syntax highlighting is now supported directly by the editor. It should work in mostly every situation for all the supported types. Currently (in RHIDE) only the C/C++ style syntax highlight and the Pascal style syntax highlight are supported.
With which style a file is highlighted is chosen by RHIDE by checking the suffix of the file and determining the file type from that suffix See Known suffixes.
This is one of the main parts of RHIDE. To speed up the work, I have added a cache for checking the modification time of a file and for finding a file (computing the full name of a file). But sometimes the data in the cache isn't valid, especially when running under Windows. If you see this, you can clear the cache by leaving RHIDE and starting again.
If you didn't do any special things but have problems with it, please
run RHIDE with the -df
switch and try to find out, where the
problem is and post it to me so I can fix it.
The Turbo Vision library is part of Turbo C++ version 3.1. I have ported this library to use with DJGPP because I think it is the most powerful text windowing library, which is available for MS-DOS. With the help of this library you can write a front end application which looks very well and has an interface that is easy to use.
The Turbo Vision library is not only a window based text user interface, it is also a very good event handling mechanism. It supports the use of the mouse and keyboard with the ability of defining and using of hotkeys. That means, you can assign to some key or combinations of keys, which function should be executed.
The main parts of an application, which is using this library, are the desktop, the menu bar and the status line. The menu bar is usually shown as the topmost line of the screen. There are shown the main parts of the pull down menus, from where you can select the most functions, which are implemented in an application.
To use the menu you can use the mouse as well the keyboard. With the mouse you can click every where on a menu entry and the corresponding function will be executed. There are some different actions, which a menu entry can have. At first some of them, these are, for example, all the entries in the menu bar, open a submenu with more menu entries which are related to the name of this main entry. And the others, most in such a submenu, execute a definite function of the application.
With the keyboard you can walk through the menu very simply. Press <F10> to activate the menu bar. In the pull down menus you can use the cursor keys to move the highlighted bar up and down and with the cursor right and left keys you can switch to next or previous menu. With the <ENTER> key you activate the function, which corresponds to this entry. If this was a submenu, which is indicated with a symbol like a small right arrow, this will be opened.
If you walk through the menu with the cursor keys or the mouse (hold the left mouse button down and move the mouse) in the status line will be shown for each entry a short hint for the function of this menu entry.
In a dialog, like the file open dialog, are many things which you can select or where you can type in some data. At first some general functions. If you press <ESC> the dialog will be closed and nothing will be changed. The same can be done with the mouse by clicking on the close symbol (this is the small symbol on upper left frame of the dialog).
In the next paragraphs I will describe the most used elements of a dialog. For selecting each element of a dialog you can use the <Tab> key to select the next element in the dialog or the Shift+Tab key, to select the previous element.
A button is a rectangle with some text on it. If you activate such a button a specified action is executed. To select a button you can use the <Tab> key, until the button is specially highlighted and press <ENTER> then. Most times a character of the text on this button has a different color. So you can press <Alt> plus this character to activate the button. With the mouse you can simply click on a button to activate it.
A Listbox is a collection of some strings in one or more columns and rows as needed. The project window see Project window is such a Listbox with the names of the project items. You can use the cursor keys to move the focus bar in the list, or if it is a sorted Listbox, you can also type some characters and the focus will move to the item, which starts with these characters. To select a item in a list box, press <SPACE> or <ENTER> or double click with mouse on it.
In an input line you can type some text which can be edited with the usual editing keys.
A checkbox is a collection of options, which can be turned on or off. Each option has in front of it a small indicator, if it is turned on (an X is shown) or not (the X is not shown). To toggle such an option, use the cursor keys to move the focus to the option you want and press <SPACE> or, if a character in an option string is highlighted you can press this key and the option will be turned on or off or click with the mouse on the option.
Radiobuttons are similar to Checkboxes, but there you can select only one of all the shown options.
Please look for a detailed documentation here: Pseudo Macros.
The integrated help system of RHIDE is based on the INFO
Viewer written by salvador@inti.gov.ar. It gives you access to all the INFO
files which you have installed in the correct directories as is done
for info.exe
.
To get help about the INFO Viewer hit <F1> when the help-window is opened or follow this link to Top.
In addition to getting help with this system you can also copy text from the help screen to the clipboard. This is useful if you want for instance to copy an example from the libc reference in your program. This feature is not so powerful as in the editor, but it is good enough. To mark some text use the <Shift> and cursor keys and copy the selected text with Ctrl+Ins to the clipboard.
In RHIDE you have also the possibility to get help about a specific function. Currently this works only for functions, which are documented in the libc reference. For doing this, move the cursor to the function and hit <Ctrl+F1> or click with the right button of the mouse on that word.
RHIDE knows a little bit about RCS, the Revision Control System. Since RCS is available also for DJGPP I enabled now some features to use RHIDE also on packages which use RCS.
RHIDE can handle RCS files in the way, that it searches for a checked in source file if the normal source file was not found. The complicatest part here was to determin the correct RCS file name from the source name. (Especially under DJGPP this is a problem since under raw DOS it is not possible to use names like 'foo.c,v').
So I decided to use the external program rlog
which comes with
the RCS package to determine the actual correct RCS source name. I did
so because the DJGPP implementation knows enough about the DOS
limitation and how to solve them.
This help here is not ment to be a RCS introduction. If you don't know what RCS is or what can be done with it, please look in the manuals wich come with RCS.
Here now what RHIDE knows about the RCS files. If a source file was
not found, it's RCS name is computed with the spec $(RHIDE_RLOG)
which defaults to $(shell rlog -R $(rlog_arg))
where $(rlog_arg)
is substituted at runtime with the actual wanted source file.
This spec can be overwritten to speed it up. An example for this can
be found in the distributed sample environment file rhide_.env
.
When RHIDE only wants to compile the file or only to get the modification time it is temporary checked out (without locking it) and after the needed operation (compiling) it is removed (for checking the modification time it is not checked out, but the time form the RCS file is taken).
If you want to open that file for editing the same is done but now it is
checked out with setting a lock and it is not checked in after closing
the window. The spec for checking the file out is $(RHIDE_CO)
which can be overwritten also and it defaults to
$(shell co -q $(co_arg))
where the switch -l
is added
when it is checked out for edititing otherwise $(co_arg)
is
substituted at runtime only with the wanted source file.
For debugging your programs you need now no external debugger, because RHIDE has one integrated. The integrated debugger is not code which I have written, but it is GDB 4.16, which is linked in RHIDE.
Because RHIDE uses a special method to communicate with GDB it is currently not possible to use all of the features, which GDB has. I have implemented at this time the most important functions, which are needed to debug your program. So it is not possible to give GDB the same commands as when running GDB stand alone. That means, if you need any very special feature of GDB you must run GDB.
The integrated debugger is a real source level debugger like GDB. If you step through your program you will see every time exactly where in the sources you are. But to use the ability to debug your program needs, that you have compiled your source files with debugging information and these symbols must not have been stripped from the executable.
Because the integrated debugger is GDB, you will have all the limitations which GDB has in addition to well known DJGPP and/or MS-DOS limitations. Here is a (not complete) list of known misfeatures:
/* This is an example, that GCC produces wrong line number information for code which is optimized out. (compile this with -O) */ int a = 1; int b = 2; int main() { if (a == b) return 0; if ((a + 1) == b) return 1; return 0; /* The debugger should never come here, but it comes */ }
RHIDE supports now also to use an installed dual display. This is when you have installed in addition to your VGA card a monochrome display card together with a monitor. RHIDE checks this by asking the BIOS if it is present and if this is true and the option is enabled see Preferences then RHIDE switches automatically to the secondary display when debugging and your program will run on the primary display.
With this debugging technique you will get the best debugging results especially when debugging graphics programs.
To use the dual display with RHGDB use the -D
switch for
RHGDB.
If you are familiar with Borland's debugger, you will see, that most of the functions of that debugger are implemented in the same or in a similar way (this includes the key bindings).
For stepping through your code, there are three ways. This is at first
the Step-function <F8>. With this you execute a complete source
line. If there is a function call at the current execution point, this
function is called without debugging it. This technique is the same
like the next
-command from GDB.
The next way is the Trace-function.
It is like the Step-function, <F7>, except that if there is a function
call at the current execution point, you will go into this function when
there is debugging information for that function available.
This technique is the same as the step
-command from GDB.
And the third way is the Goto-Cursor-function. For this, move the cursor to the line in your source code and press <F4>. Now the execution of your program is continued until it comes to that line. Sometimes you will get an error message, that for the specified line is no code generated. This comes from the optimization of your code by GCC. In this case try a line below or above.
You can evaluate also the the contents of variables, when your program has been started. For this you can press Ctrl+F4 and you will see a dialog, where you can type in the expression to evaluate, a line with the result and a line, where you can give the expression a new value. If you have pressed this in an editor window, RHIDE tries to find the word under the cursor and copies this as default in the expression input line. To get the contents of this expression you have to press the Evaluate-button.
If the expression could not be evaluated so it is shown in the result line. For the exact syntax of getting the contents of an expression see Expressions. You can also show the value of the expression in several formats see Output Formats.
In addition to the functionality of the Borland debuggers, GDB (and of course also RHIDE) can evaluate the result of function calls. If you have, for example, in your debugged program a function
int foo(int arg1) { /* do something and return a value */ }defined, you can type in the expression input line
foo(16)and you will get as result, what the function would return, if it is called with the argument
16
. As arguments you can also use
any known variable or complex expressions.
A known limitation is, that the expressions are NOT checked for validity. That means, you can produce any exception there, which will terminate your program. As an example type in the expression input line
3/0And, of course, you cannot assign to a function call a new value.
As an special side effect you can use this also as a calculator. You can evaluate any trivial or complex expression and this is also available, if you haven't started the integrated debugger.
In addition to a single look at the contents of a variable, you can add the variable to a list which is updated after each debugger step and is shown in the watching window. For this function you can use the hotkey Ctrl+F7.
Within the watch window you can press <Enter> on an expression to change that expression (NOT the contents of that expression) or you can press <Del> to remove the variable from the watch window.
Because GDB cannot handle correctly C++ debugging information when it is generated as COFF debugging information (with stabs debugging information there is no such limitation and you can skip reading more) you will have many problems when debugging C++ programs to get the contents of a variable when it is a member of a class. Because GDB does not detect, that your program is a C++ program, it sees it as a normal C program and so GDB does nothing know about classes and all what have to do with it.
For accessing the member of a baseclass you must do some tricks. Let me explain it on an example:
class A { public: int a; }; class B : public A { public: void test(); }; void B::test() { fprintf(stdout,"%d\n",a); }
If you debug the program in the function B::test()
and you
want to get the contents of the member a
, you have to access
it with this->A.a
!!! That means: At first you must access
all members with the implicit this
variable and at second
you must give all baseclasses until that, where the member was
declared.
Breakpoints are a very useful thing when debugging a program. You can set a breakpoint at any location of your program and run it. It will be automatically stopped, if the program execution reaches the breakpoint.
For setting a breakpoint there are two different ways. The first is by setting a breakpoint at any line by pressing Ctrl+F8. You will see, that there is a breakpoint set, that this line is shown in another color. If you hit Ctrl+F8 on a line, which has already a breakpoint, the breakpoint at this line is removed.
The second way is by setting a breakpoint with the breakpoint dialog which is selectable only from the menu. There you will see any breakpoint for your program. These breakpoints can be modified now in many things. In this dialog you can enable/disable a breakpoint. This is not the same as deleting and resetting it. If you disable a breakpoint, it is stored internally but it is not used. If you enable it again all the settings for that breakpoint, which you have already made, are remembered.
In the breakpoint dialog you can also set or delete a breakpoint with the given buttons. If you want to set a new breakpoint, use the New-Button. Then you will get a dialog which you also get when you press the Modify-Button. In this dialog you can change many things of the breakpoint.
In this dialog is the only point for setting a breakpoint at a specified function. For doing this you must set at first the type of the breakpoint to Function. Then you can type in the function input line the name of the function or hit <Ctrl+F1> to get a list of functions which are available from where you can select one with <Enter>.
For setting a breakpoint at a specified line, set the breakpoint type to Line and type in the filename and the linenumber.
The next what you can modify on a breakpoint is a condition. That means that the breakpoint should stop your program only, if the condition is true. Write the condition in the programming language of your source file and you can use any accessible variable and you can call also functions of the debugged program. For other information about the syntax see Conditions.
And at last you can give your breakpoints also a count. A breakpoint count is a number, how often this breakpoint is ignored. That means, if you type there, for example, 10, then the RHIDE stops the execution of the program only, if it comes to that point the tenth time. WARNING: This count is set by RHIDE only once. After the breakpoint is really hit, from now on the breakpoint stops your program every time, the breakpoint is reached.
Currently there is a big problem, when you have set a breakpoint at a line (not at a function) of your program and you edit now the source code. If you insert or delete some lines the breakpoints, which are set at lines after or at the modified lines are NOT updated to the correct line number.
In addition to RHIDE, which has an integrated debugger, there is also a stand-alone debugger called RHGDB. (The name comes from my initials and GDB)
RHGDB has the same abilities as RHIDE for debugging your program. But it has no editor. The source files are shown in read only windows where you can move the cursor and other things (except editing) like in RHIDE.
The menu tree is analog of RHIDE's but (of course) it has not all the menu entries of RHIDE, because RHGDB should be used only for debugging and nothing else.
I have written it to debug DJGPP programs, for which there is no RHIDE project file available but the program has debugging information and, if you are short of memory, it is much smaller than RHIDE.
The syntax for using RHGDB is very simple. Run it with your program as the first argument followed by any argument, which should be passed to your program.
RHGDB saves and reads the options from files with the suffix .rgd
.
This is done automatically when you run RHGDB with your program as argument
by searching a file with the same basename of your program and the suffix
.rgd
and in this file the options are also automatically stored,
when you exit RHGDB.
Alternatively you can also save/read the options from within RHIDE by selecting the corresponding menu entries from the Options menu.
To use the the "Dual display debugging" feature of RHGDB you must
give on commandline the -D
switch.
Question: I have enabled the Use tabs
option, but if I move
the cursor through that tab, it seems, that RHIDE uses spaces
Answer:This behavior cannot (currently) be changed. Even when you have enabled the use of real tabs (characters with the code 9), the cursor is moved as if there are spaces.
Question: Are there any sample project files, to show how RHIDE works?
Answer:The sources of RHIDE include many project files to rebuild at least RHIDE with itself and many others.
Question: I have written some libraries. How can I use them in a project?
Question: How I can use a library, which I have?
Answer: There are some different ways to do this. On the one side you can include them directly in the project with the Add to project item function see Add item. But if they are not in the current directory, you must also set the library search path to the directory, where they are see Library directories. The other variant is to include them in the list of libraries see Libraries.
If this library is created with RHIDE, that means you have a project file for building this library you can also simply include that project file in your project. For examples, look at the RHIDE sources in the project file for RHIDE.
Question: I have a directory, where all my include files are. Can I setup RHIDE to have this directory every time in the include search path, when creating a new project?
Question: I prefer the 80x28 video mode over the default 80x25 mode. How I can turn this mode on by default for all newly created project files?
Answer: You can create a default project file. From this file RHIDE reads all the options, if it creates a new project. The default project must have the same basename as the executable of RHIDE and must be located in the same directory.
The creation of such a default project file is very simple. Change to the
directory, where rhide.exe
is located and run there
rhide rhide
Now make any changes in the options which you want to have as default for all newly created projects. This includes also settings in the various search paths. If you are ready, exit RHIDE and this project file will be your default project file.
Question: I know, that I can create a default project file. Can I create and use more than one?
Answer:Since DJGPP supports a quasi-Unix-like link for executables, you can
create such a link also for RHIDE. As an example I will create a link to
rhide.exe
with the name myrhide.exe
. At first I have to
create the new file.
stubify -g myrhide.exeNow I must tell
myrhide.exe
which program it really should run.
stubedit myrhide.exe runfile=rhideThats all. Or, if you have installed the GNU fileutils, you can use also now the
ln.exe
program to create the link:
ln -s rhide.exe myrhide.exe
Question: I don't want to type every time I start RHIDE the commandline -L de to use the German user interface. Is there any better way?
Answer: Create an environment variable LANGUAGE with your preferred language like
set LANGUAGE=deand your problem is solved.
Question: I have 4 Mb RAM in my computer and every time, when I compile large files with optimizations enabled, my hard disk is working very hard.
Answer:Buy more RAM!
Question: I heard something about a newer version RHIDE. From where I can get exact information about this?
Answer: See
at the RHIDE home page.
This page contains the latest news and the latest version of RHIDE.
Question: I have a lot of money and don't know what to do with it. Can you help me?
Answer: Send it to me, so I can spend more time for developing RHIDE. My Address is:
Robert Hoehne Am Berg 3 D-09573 Dittmannsdorf Germany
Question: RHIDE does all sorts of unpredictable and silly things. I.e. does not remember the paths and other settings that I give it.
Answer: Did you start RHIDE with a project file i.e. invoke rhide with
rhide projfileRHIDE needs a place to keep this information. Then go into projects tab and select add then follow the dialog to add the
.c
or
.cc
file to the project.
Question: I do not generate an .exe
file.
Answer: Enter RHIDE from the dos prompt by
rhide projnameclick project tab then add and select your
Hello.c
or hello.cc
file.
Then compile and
then link or else build all. There should be a file projname.exe
.
Question: The linker reports multiple int main()
in my object file.
Answer: You have more than one .c
or .cc
file in your project with
int main()
and the linker does not know where to start the .exe
file.
Question: It is not finding the include files *.h
.
Answer: You are not referring to the djgpp distribution *.h
files that
are part of the DJGPP standard distribution. If so see DJGPP FAQ. In RHIDE
click the Options tab on top of RHIDE window, then Directories, then
Include, then add the path to the dot.h
files in the text box as
follows:
$(DJDIR)/contrib/grx/include $(DJDIR)/contrib/here/there etcThis path can also be set in the
djgpp.env
file (see the DJGPP
information).
Question: It's still not finding the dot.h
files.
Answer: Invoke Win95 long file names at the command line via
rhide -y projname
Question: How do I set rhide to long file names without -y each time?
Answer: Add the -y to your RHIDEOPT environment variable.
Question: The linker is not finding various library functions that are in an extension to DJGPP. For example functions that are part of SWORD Graphic User Interface or GRX. Graphic Package.
Answer: Click the Options tab then Libraries then mark one of the boxes and
type in the Library name that you need i.e. grx for libgrx.a
.
Question: It's still not finding the library functions.
Answer: Go into Options tab on top of the RHIDE window then Directories then
Libraries, then add the path to the libdot.a
files in the text box as
follows:
$(DJDIR)/contrib/lib/here/there $(DJDIR)/contrib/grx/libThis can also be set in the
djgpp.env
file (see the DJGPP information).
Question: Where is the rhide documentation and how do I read it?
Answer:Get the file txixxxb.zip and unzip it. Go into dir info and edit the file DIR. Add
rhide.inf
or any other dot.inf
to DIR. Use the same format as the
existing dot.inf
files in DIR. It's obvious from the format how to do
this. Save and exit from the edit session. Type "info" take the lesson
on how to run info and you are fully equipped to run an old world non
gui browser and are ready to learn all about gnu.
If you are using RHIDE, simply hit <F1> and browse through the help, it IS the RHIDE documentation!
Question: The linker reports out of memory when linking many *.o
files.
Answer: This should occour only on Windows 95 users (or W98).
Give dos more memory. Quit rhide and dos. Select the dos icon or its
alias (it's in windows/start/programs
) RIGHT click select properties
then select memory tab then set Protected mode DPMI to maximum 65535 and have
another go.
Question: I have a big svga monitor and rhide looks like cga screen. What can I do to take advantage of my monitor?
Answer:Set the dos and rhide screens to suite your taste.
Quit rhide and dos. Select the dos icon or its alias (it's in
windows/start/programs
) RIGHT click select properties then select screen
tab then set the type of screen that you require in dos. Then get into
RHIDE and select options tab on the top of the screen then Environment
and then Preferences then set the type of screen to your liking.
Question: I`m running under W95/98 with long filenames and have some source files ond/or directory names with spaces in it. I get many errors when trying to compile or link. How can I solve this?
Answer: This is a limitation of RHIDE. Theortically it could be fixed, but this would need many changes in the RHIDE sources. I`m not willing to do. So, simply do not not filenames with spaces.
Question: How do I setup RHIDE to run under OS/2?
Answer: OS/2 (WARP3 and above) Users have to pay attention to the following DOS-Settings:
- DPMI_DOS_API must be set to "Enabled" - DPMI_MEMORY_LIMIT should be set above 8MB (better >10) - DOS_HIGH must be set to OFF - DOS_UMB must be set to OFF - DOS_FILES should be set fairly higher than 20 (>60) - DOS_BREAK "ON" might be useful sometimes :-) - MOUSE_EXCLUSIVE_ACCESS should be set to off - You can use RHIDE with or without the "-M" option
Question: I think, I found a bug in RHIDE. How can I report it?
Answer:At first try for your own to solve the problem by checking the documentation.
If the bug is releated to the editor (some keys do not work, autoindenting is not like you expect, program crash after some special editing ...) please send them to salvador@inti.gov.ar, because he is the author of the in RHIDE integrated editor.
See at the RHIDE home page, if this problem was already reported by other users. As the next ask the problem in the news group news:comp.os.msdos.djgpp, because there may be some other people with the same problem, and they can give you an answer or I, because I read this group also.
GNU/Linux users should post the problems in the linux group. To make sure that I will read it also, please send a CC to me because my time doesn`t allow me to read that huge newsgroups.
If this don't help you, do the following:
Try to reproduce the error with the smallest possible project or source file. Run RHIDE with all debugging options enabled and redirect the printed output to a file see Debugging RHIDE. Send me this file and a detailed as possible description of the problem and include in your report the exact version of RHIDE you are using.The exact version is shown in the About-Dialog and means the version number together with the build date.
And a last note. If I get bug reports or questions or problems with RHIDE which I think that they are of common interest be warned that I bounce them simply to the news groups because at this time it is impossible for me to answer all the mails I get. So the best is to post the questions and/or problems only in the news groups.
stderr
: redirect stderr
stdout
: redirect stdout
stderr
redirecting: redirect stderr
stdout
redirecting: redirect stdout
Activate a button | <ENTER>
: How the dialogs work
Activate a flag | <SPACE>
: How to toggle these flags
Activate menu bar | <F10>
: What is Turbo Vision
Add a project item | <Ins>
: Add item
Again find/replace | <Ctrl+L>
: Text selecting and searching commands
Auto indent | <Ctrl+O>
: Other commands
Begin of file | <Ctrl+PgUp>
: Cursor moving commands
Block indenting | <Ctrl+K+Tab>
: Block commands
Block unindenting | <Ctrl+K+Shift+Tab>
: Block commands
Bottom of file | <Ctrl+PgDown>
: Cursor moving commands
Call stack | <Ctrl+F3>
: Call stack
Close a window | <Alt+F3>
: Close
Close a window | <Del>
: List
Compile | <Alt+F9>
: Compile
Context help | <Ctrl+F1>
: The INFO Viewer
Copy | <Ctrl+Ins>
: Text selecting and searching commands, Copy
Copy | <Ctrl+K+K>
: Text selecting and searching commands
Cursor down | <Ctrl+X>
: Cursor moving commands
Cursor left | <Ctrl+S>
: Cursor moving commands
Cursor right | <Ctrl+D>
: Cursor moving commands
Cursor up | <Ctrl+E>
: Cursor moving commands
Cut | <Ctrl+K+Y>
: Text selecting and searching commands
Cut | <Shift+Del>
: Text selecting and searching commands, Cut
Delete a character | <Ctrl+G>
: Erasing commands
Delete a character | <Ctrl+H>
: Erasing commands
Delete selected text | <Ctrl+Del>
: Text selecting and searching commands
Delete to the beginning of line | <Ctrl+Q+H>
: Erasing commands
Delete to the end of line | <Ctrl+Q+Y>
: Erasing commands
Delete to the next word | <Ctrl+T>
: Erasing commands
Delete to the previous word | <Ctrl+Backspace>
: Erasing commands
End of block | <Ctrl+K+K>
: Block commands
End of file | <Ctrl+Q+C>
: Cursor moving commands
End of line | <Ctrl+Q+D>
: Cursor moving commands
Erase a character | <Backspace>
: Erasing commands
Erase a character | <Del>
: Erasing commands
Erase a line | <Ctrl+Y>
: Erasing commands
Evaluate/Modify | <Ctrl+F4>
: Evaluate/Modify
Execute a macro | <Shift+Space>
: Other commands
Find | <Ctrl+Q+F>
: Text selecting and searching commands, Find
Go to cursor (No display swap) | <Shift+F4>
: Go to cursor
Go to cursor | <F4>
: Go to cursor
Goto line | <Ctrl+J>
: Goto line
Help about the INFO Viewer | <F1>
: The INFO Viewer
Help about the INFO viewer | <F1>
: Help
Help | <F1>
: Help
Ignoring | <Ctrl+C>
: What is RHIDE?
Indent block | <Ctrl+K+I>
: Block commands
Interrupting the compilers | <Ctrl+Break>
: What is RHIDE?
Jump to a line | <Ctrl+J>
: Other commands
Jump to a marker | <Ctrl+Q+?>
: Other commands
Jump to function | <Alt+F2>
: Jump to function
Jump to the source line | <ENTER>
: Message window
Leaving a dialog | <ESC>
: How to toggle these flags, Open, How the dialogs work
Leaving RHIDE | <Alt+X>
: Exit
List of all windows | <Alt+0>
: List
List of functions | <Ctrl+F1>
: Modifying and setting a breakpoint
Local options | <Ctrl+O>
: Local options for a project item, Local options
Macro play | <Ctrl+F10>
: Play
Macro start | <Shift+F10>
: Record
Macro stop | <Alt+F10>
: Stop
Make | <F9>
: Make
Menu | <F10>
: Getting started, Description of the pull-down menus
Move block | <Ctrl+K+V>
: Block commands
Next input line | <Tab>
: Libraries
Next message | <Alt+F8>
: Next message
Next window | <F6>
: Next
open a file | <F3>
: Open
Open a project item | <ENTER>
: Open a project item
Open an include file | <ENTER>
: Dependencies of project item
Overwrite mode | <Ctrl+V>
: Other commands
Page down | <Ctrl+C>
: Cursor moving commands
Page up | <Ctrl+R>
: Cursor moving commands
Paste | <Ctrl+K+C>
: Text selecting and searching commands
Paste | <Shift+Ins>
: Text selecting and searching commands, Paste
Previous input line | <Shift+Tab>
: Libraries
Previous message | <Alt+F7>
: Previous message
Previous window | <Shift+F6>
: Previous
Program reset | <Ctrl+F2>
: Program reset
Read block from file | <Ctrl+K+R>
: Block commands
Remove a project item | <Del>
: Delete item
Remove from the watches | <Del>
: Watching the contents of variables
Replace | <Ctrl+Q+A>
: Replace, Text selecting and searching commands
Resize/move a window | <Ctrl+F5>
: Size/move
Resizing a window | <Shift+>
: Size/move
Run | <Ctrl+F9>
: Run
saving a file | <F2>
: Save
Search again | <Ctrl+L>
: Search again
Select a item in a Listbox | <ENTER>
: How the dialogs work
Select a menu entry | <ENTER>
: What is Turbo Vision
Select a message | <ENTER>
: Some hints and problems
Select a window | <ENTER>
: List
Select menu item | <ENTER>
: Description of the pull-down menus
Select text | <Shift>
: Text selecting and searching commands
Selecting a window | <Alt>
: Selecting a window
Set a marker | <Ctrl+K+?>
: Other commands
Show includes | <Ctrl+I>
: Includes
Start of block | <Ctrl+K+B>
: Block commands
Start of file | <Ctrl+Q+R>
: Cursor moving commands
Start of line | <Ctrl+Q+S>
: Cursor moving commands
Step over (No display swap) | <Shift+F8>
: Step over
Step over | <F8>
: Step over
Syntax help | <Ctrl+F1>
: Syntax help
System Menu | <Alt+SPACE>
: System menu
To lower | <Ctrl+K+O>
: Block commands
To upper | <Ctrl+K+M>
: Block commands
Toggle a breakpoint | <Ctrl+F8>
: Set/Reset Breakpoint
Toggle an option | <SPACE>
: How the dialogs work
Trace into (No display swap) | <Shift+F7>
: Trace into
Trace into | <F7>
: Trace into
Undo | <Alt+Backspace>
: Undo
Unindent block | <Ctrl+K+U>
: Block commands
Unselect | <Ctrl+K+H>
: Text selecting and searching commands
User screen | <Alt+F5>
: UserScreen
Watch an expression | <Ctrl+F7>
: Watch an expression
Word left | <Ctrl+A>
: Cursor moving commands
Word right | <Ctrl+F>
: Cursor moving commands
Write block to file | <Ctrl+K+W>
: Block commands
Zoom a window | <F5>
: Zoom