| www.delorie.com/djgpp/doc/pitfalls.html | search |
terra@diku.dk).
This document is supposed to be sort-of a checklist for DJGPP programmers especially when porting programs from either Unix or some other Dos compiler. You should be able to go through the list and say ``I thought of that'' or ``that doesn't apply to this program'' to every item. Sometimes you'll have to say ``OK, I'll document this.''
You might very well also want to take a look at the Frequently Asked Questions (FAQ).
CR LF (or "\r\n" if you like). Unix
files are terminated by only LF (or "\n").
DJGPP will supply automatic conversion in such a way that the program
will see Unix-style files when the files are opened as text
files. This is specified using O_TEXT for (e.g.)
open or a t for (e.g.) fopen.
For binary files the corresponding names are
O_BINARY and b.
If unspecified, the value of _fmode is used. This
is O_TEXT per default.
You will want to think about the mode for every file you open. If
you're porting a Unix program, setting _fmode to
O_BINARY at the start of your program might be a good
idea. Read also the documentation for setmode and
crlf2nl.
__DJGPP__ to mark code special to DJGPP; use
__MSDOS__ to mark code special to Dos. (If you have
to write code that works with DJGPP V1 also, consider using
__GO32__ which was defined also in V1.)
/dev/) supplied with a device
name is ignored. Anything from and including the first dot in the
final path component is also ignored. The null device is called
NUL. See also file names.
command.com) changes all references
to environment variables to upper case. The environment as such has
case sensitivity, but the user has no simply way of using that. Also,
there is no simple way to set a variable to the empty string.
Only one dot is allowed in every path component and it must not be the first character. Only the first eight characters before the dot and the first three after are significant. The only significance of the dot is to separate the two parts.
Since Dos uses drive letters, paths that start with a slash are not absolute.
Front slashes (/) and backslashes (\)
are equivalent. DJGPP's C library will make sure you see front
slashes only.
argv[0] effect for programs, see the
FAQ on
symlinks and the
documentation for the stubedit program if that exists.)
pipe works
by running the producer and the consumer sequentially.
$SHELL) note that the
standard Dos shell (command.com) takes /c
where Unix' takes -c. You should avoid using the shell
if you can because command.com imposes limits on the
length of a command line and will zero the return code. Using
system is OK.
system
function uses command.com only for commands like
dir and batch files, and will handle redirection for
you. See also the
FAQ
on command-lines and about
current directory.
command.com, not Dos as such.)
/) and not backslashes
(\) from the library functions that give you file
names except for parts you supplied yourself. You can use
either yourself.
__dpmi_int.
farptr.h header file, which see.
Key words like near, far, and
huge can probably be ignored or #defined away.
rename will move files like the Unix
rename
does. In particular, the target will be deleted if it exists
and you can move directories (``prune-and-graft'').
int is 32 bits. If you need a 16 bit
int, use short. (For readability and portability you
might be far better off defining int8, int16,
and int32 types.)
unlink (remove) will delete files
like the Unix unlink. This means that the read-only
flag on the file is ignored.
| webmaster | delorie software privacy |
| Copyright © 1998 | Updated Nov 1998 |