TIP: Click on subject to list as thread! ANSI
echo: fidosoft.husky
to: andrew clarke
from: Tobias Ernst
date: 2002-11-10 18:04:52
subject: compilers for smapi

Hallo!

 ac> MS-DOS:

 ac> Watcom C++ 11.0c (16 & 32-bit) (free) (2000)
 ac> Borland C++ 3.1 (16-bit) (1992)
 ac> Turbo C++ 1.0 (free) (1991)

16-bit DOS is only working with smapi+msged. All other programs, especially
hpt, are written with a philosophy about allocating buffers and so on that
they won't work in 16-bit mode. As for 32-bit mode, only Watcom C++ and
DJGPP (you forgot that one) are relevant.

As for 16-bit Msged: I was making the last release with Borland C 3.1
(which is farily identical with Turbo C for what that matters), but I won't
make any DOS releases any further except for 32-bit ones done with DJGPP.
So if you want to become binary maintainer for DOS - just select the 16-bit
compiler that suits you.

 ac> FreeBSD:
 ac> gcc version 2.95 (free)
 ac> Linux:
 ac> gcc version 2.7.2 (free)


Well, both under FreeBSD and unter Linux you'll meet gcc 2.7, 2.8, 2.9, 3.0, 3.1.

 ac> OS/2 32-bit:

 ac> Borland C++ 1.0 (1993)
 ac> Watcom C++ 11.0c (2000) (free)
 ac> Metaware High C++ 3.2 (1995)

Only Watcom is relevant of these. The High C patches presumbably don't work
at all. But the most relevant of all is EMX, which you forgot.

 ac> And I don't use BeOS, so BeOS users will have to continue using 
 ac> the current SMAPI stream (ie. not my version).

It's fairly Unix. As well as Mac OS.

 ac> And I don't know about Mac OS X users.  Presumably they can use 
 ac> the FreeBSD port, but there may be endianness problems, at least for 
 ac> a while, unless they've already been fixed.

Presumably I am the only Mac OS X user at present :-). 6 months ago there
were no endianness problems - I once spent a month to fix them all. You can
share a message base between OSX and DOS without problems. Husky compiles
on OS X with gcc without major problems, though presently only with
DYNLIBS=0.


But there is one basic thing I want you to understand. The way you are 
talking about it, especially about the BeOs thing, makes me think you
pursue the wrong path to "portability2. Methinks you want to make a
list of compilers you support, and on other compilers you simply will say
the thing does not work. This is an approach to portability that is OK in
the Windows+DOS world, but that is utterly wrong in the Unix world, because
in the UNIX world, everytime that you think you have captured all compilers
and operating systems, a new user appears that digs out yet another
operating system and yet another compiler, and you will never manage to get
as many test systems as to cover them all. I, as mor myself, have been
using Husky not only on DOS, OS/2, Windows, Linux, FreeBSD, MacOS X, and
BeOS, but also on RS/6000 and DEC Workstations under AIX, Tru64 Unix,
NetBSD and on Solaris, i even did a test run on a S/390 mainframe running
64-bit-Linux under VMS, I compiled the stuff not only with gcc, but with
DEC CC (which gives faster code by factor 2), with IBM CC, and with beasts
you would never like to know, and I'll happily dig out a dozen more
operating environments where I would like to run a fido point or node, just
to prove that your way of getting portability is wrong.

The only way of getting portable code is to write code that, by the specs
(e.g. I recommend the book by Kernighan and Ritchie, 2nd Edition about ANSI
C) will work on any beast that calls itself computer and has a C compiler. 

If you encounter situations where you say "ah, with compiler X I need
that command, but with compiler Y I need that command - but I don't know
how to do that with compiler Z, so I will just say my program does not work
with compiler Z - then you are making an serious error.

All programs in the Husky suite (with the exception of a mailer, that
handles the phone line or TCP/IP, which admittedly is not part of any basic
standard - but that is one reason why Husky does not include a mailer) are
of a kind that the CAN be written in ANSI C. And I once spent really much
time to make sure, that Husky compiles on any compiler, and I would like to
see that this situation is not fundamentally changed.

I don't object if you will make ADDITIONALY functionatlity inside #ifdef
statements that only works on certain compiler. I understand that DLL
features are desirable, and as under Windows they cannot be realized
without fuddling the code without #ifdefs , then well, go ahead and insert
#ifdefs. But please almays make sure that it looks always like this:

#ifdef COMPILERA
code for compiiler A
#elif defined (COMPILERB)
code for compiler B
#else
default solution
#endif

The default solution may have less features then the compiler specific
solutions, e.g. simply no DLL support, or it may be slow and ugly, but the
program should compile and should do what it is supposed to so.

For example, to test if a file exists, you can use the "access"
function inside a #ifdef UNIX, and you can use FindFirst or something
inside a #ifdef WIN32, but obligatory you must use "fopen" and
check for the  return code checking" in the "#else" clause
to make sure that the code really works anywhere, because that is the only
portably way to do it.

If you don't believe that anything can be done without thinking about a
particular compiler, you are wrong. Anything that Husky requires can be
done without knowing a bit about the compiler. If you don't know how to do
that, look into the Husky porting guide I place somewhere inside huskybse,
and if the answer is not there, then ask. But never ever write any piece of
code without that #else fallback, never ever write anything that by
definition does not work on BeOS or on whatever OS that you don't use
yourself.

Husky right know works on any OS with any compiler (well, ideally - there
are always small bugs, when you try to first compile it on a new OS - but
these are bugs, Husky is not DESIGNED to be that way), and I am strongly
opposed against anything that would fundamentally change that situation.

Regards,
Tobias.

--- Msged/MAC 6.1.2
* Origin: We love MsgEd ... (2:2476/418.15)
SEEN-BY: 10/3 345 102/943 106/1 2 3 1234 2000 123/500 128/187 130/803 140/1
SEEN-BY: 143/2 201/505 226/600 229/1000 2000 249/116 267/200 280/5003 333/0
SEEN-BY: 379/1 1200 550/5012 633/267 270 2404/201 2624/306 3800/1
@PATH: 2476/418 140/1 106/2000 1 379/1 633/267

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.