[comp.lang.c] Turbo C

kent@ncoast.UUCP (02/20/87)

s/*** REPLACE THIS LINE WITH YOUR MESSAGE ***/YOUR MESSAGE/g

A number of people have posted inquiries about Borland's Turbo C.  The
following is an editorial of sorts, along with some biased and unsolicited
opinions of MS-DOS C compilers.  I am associated with NONE of the companies
discussed.

My opinion is : don't bother with Turbo C.  There are other products out there
that must be just or good (or better), and by all indications, Borland's Turbo
C will share all of the drawbacks of the other Borland Products, to wit:

1. Non-standard (in troubling and non-trivial ways) implementations.  Borland
says that Turbo C will adhere to ANSI Standard C, but don't expect it to
be any closer than Microsoft C 4.0.  My bet is that it will be as close to
ANSI C as Turbo Pascal is to ISO Pascal.  Is this a fatal flaw? Depends on your
point of view.  It is definitely fatal in a professional, production
environment.

2. A lack of a batch mode for compiles.  Ever try to run Turbo Prolog from make?

3. Bugs.  I found several in Turbo Prolog, just screwing around for a day or
so (V1.0).  Borland was nice enough to send me 1.1 unsolicited, but I haven't
verified that the bugs are gone.  Why go with a new, untested product when there
are mature products around?

I have been working for three years with C compilers daily, and have the 
following two-bit reviews to offer:

1. MSC 4.0.  Love codeview (but it has annoying bugs!), love the extensive
library.  Code generation good to excellent.  I haven't found any library bugs
myself, but supposedly if malloc fails, it will sometimes clobber DS.
ROM support sucks - regardless of the source they give you to startup.

2. Aztec C86 - good to excellent code generation.  Occasionally you will
still hit ugly code generation bugs in large models.  Excellent ROM support.
Nice package of development tools, (make diff vi clone etc), but there are

them

shaffer@operations.dccs.upenn.edu (Earl Shaffer) (07/08/87)

PEOPLE!!! - Hey, am I the only one who is angry that my 1.0
software is buggy!  Worse than that, *I* have to fix it!

I have not heard any of you saying ".. I cant believe this.."
I called Borland and said "what are you going to do about your
bug problem" and they said ".. we will mail you patch information".

This means I have to sit down with DEBUG and fix *THEIR* error!
Yes, I do not like this!  This does not say much for their company,
their customer service policies, not to mention their QA procedures.

I have to teach a C course using this product.  My first lesson
is going to have to be "lets patch the buggy software".




==============================================================================
Earl Shaffer - University of Pennsylvania - Data Communications Department
"Time was invented so that everything wouldn't happen at once." Steven Wright
==============================================================================

kbrown@irs1.UUCP (07/09/87)

In article <1439@super.upenn.edu.upenn.edu> shaffer@operations.dccs.upenn.edu.UUCP (Earl Shaffer) writes:
>PEOPLE!!! - Hey, am I the only one who is angry that my 1.0
>software is buggy!  Worse than that, *I* have to fix it!
>
>I have not heard any of you saying ".. I cant believe this.."
>I called Borland and said "what are you going to do about your
>bug problem" and they said ".. we will mail you patch information".
>
>

I am probably going to get flamed for this but I think this is typical
of the way Borland operates.  First they pre-announced the product as
vaporware (and began taking orders!!) several months before the product
was ready.  I was at a show a week or so after Turbo C was announced,
the Borland people didn't even have a copy, beta or otherwise, of the
software yet.  Some time after that I saw a rather lame excuse that they
were giving people who had already placed orders as to why it was taking
so long to ship th product.  And now that they are finally shipping it
is buggy.

I am sure that they knew that Microsoft was going to ship QuickC in
September and pushed an unfinished product out the door to beat
Microsoft.  Anyone want to take bets on how many patches Microsoft
will have to distribute in the first month after QuickC is shipped?
Does anyone know what the latest count from Borland is?  As of a couple
of days ago I have 1 through 9.


ken brown
kbrown@irs1

bagpiper@csvax.caltech.EDU (07/15/87)

People keep mentioning stuff about TurboC bugs and their fixes.  From
what I gather, the DTM of the file(s) change but not the version number(1.0).
We have a version of TurboC that we are thinking of using on a project.  If
anybody could post (I think this is of general interest) the DTM's of each
new mini-minor version, it would be a help.  At the least I would be interested
in the DTM of the most current copy of TurboC that Borland is shipping.

                                    Thanks

Michael Hunter         UUCP  : ....{seismo, rutgers, ames}!cit-vax!oxy!bagpiper
Box 241                ARPA  : oxy!bagpiper@csvax.caltech.edu
Occidental College     BITNET: oxy!bagpiper@hamlet.bitnet
Los Angeles, CA 90041  CSNET : oxy!bagpiper%csvax.caltech.edu@relay.cs.net

ephram@violet.berkeley.edu (07/17/87)

In article <8293@brl-adm.ARPA> oxy!bagpiper@csvax.caltech.EDU (Michael Paul Hunter) writes:
>People keep mentioning stuff about TurboC bugs and their fixes.  From
>what I gather, the DTM of the file(s) change but not the version number(1.0).
>We have a version of TurboC that we are thinking of using on a project.  If
>anybody could post (I think this is of general interest) the DTM's of each
>new mini-minor version, it would be a help.  At the least I would be interested
>in the DTM of the most current copy of TurboC that Borland is shipping.
>
>                                    Thanks
>
>Michael Hunter         UUCP  : ....{seismo, rutgers, ames}!cit-vax!oxy!bagpiper
>Box 241                ARPA  : oxy!bagpiper@csvax.caltech.edu
>Occidental College     BITNET: oxy!bagpiper@hamlet.bitnet
>Los Angeles, CA 90041  CSNET : oxy!bagpiper%csvax.caltech.edu@relay.cs.net

The date of the latest version that I have is 6-3-87 1:00a.  I got it from
the borland folk as an update because I couldn't apply the patches (I forgot
to rename my exe file to anything != exe so debug applied offsets to 
relocatable ...).  The original version was one of the earlier versions
I purchased it in the 1st few days from a company that drove down to borland
the day it was shipped and got a truckload.  I did a file compare with
the version I already had and found out that aside the 3 patches I have
division of constants, -G and structure push floating point patch) the
files compared exactly the same.

I really must say that the people at borland are willing to help and
have a satisfactory resolution alternitive to "You will have to wait for
version X.1.2.3.2.1.5".  
 

ephram@violet.berkeley.edu

steve@ondine.uucp (Steve Jenkins) (07/22/87)

In article <4376@jade.BERKELEY.EDU> ephram@violet.berkeley.edu () writes:
>[...]  I did a file compare with
>the version I already had and found out that aside the 3 patches I have
>division of constants, -G and structure push floating point patch) the
>files compared exactly the same.
>
There is also another bug of which Borland is aware, unfixed as of
now.  Fortunately, it's easy to work around.

Formal parameters of type float are not adjusted to double in
function definitions without function prototypes.  The obvious
workaround is to use prototypes, or declare the parameters double.

-----------------------------------
Steve Jenkins
UCLA Dept of Anesthesiology
ucla-an!steve@EE.UCLA.EDU

frisk@askja.UUCP (Fridrik Skulason) (08/04/87)

I have heard that Borland does not change the version number of the
Turbo C compiler when fixing bugs. 

Now - the good thing about this is that you don't have to wait for months
for the fixes, but unfortunately it's hard to know just which bugs have
been fixed in "your" version. 

Since I have never seen a list of the various versions, I am going to
create one.

So - those of you using Turbo C, and having a few spare minutes how
about mailing the following information to me:

     TC creation date  [on the original disk please, not your HD copy]
     TC size
     Known fixes in this version

The resulting list will probably appear a few days after the replies stop
arriving......
-- 
Fridrik Skulason  Univ. of Iceland, Computing Center
       UUCP  ...mcvax!hafro!askja!frisk                BIX  frisk

                     "This line intentionally left blank"

wjones@andromeda.rutgers.edu (Wendell E Jones) (03/31/88)

	I am wondering is there anyway that I can get turbo C to do a fork().
    I looked all over for something to tell me if it does but I am at a
    lost.  Please E-mail me the reply.
    
			    Thanks in advance,
*********************************************************
*  W.E.Jones A.K.A. The Ronin                           *
*  U.S.Mail 91 Ackerson St. Hackensack New Jersey 07601	*
*  Nan ja desu karma ka?  Karma desu karma. Neh?        *
*  DISLAMER : I DON'T DO SPELLING!!! SO DON'T REMIND ME.*
*********************************************************

C08922DB%WUVMD.BITNET@cunyvm.cuny.edu (Don Branson) (07/21/88)

I am interested in understanding the structure of the function type
"interrupt" in Turbo C. Basically, what is special about this function
definition, and what approaches can be used in other compilers to simulate
this feature? Optimum-C is what I'm using.

Thanks in advance,

Thank you.
Don Branson
C08922DB@WUVMD.BITNET

brb@akgua.ATT.COM (Brian R. Bainter) (07/21/88)

From article <16577@brl-adm.ARPA>, by C08922DB%WUVMD.BITNET@cunyvm.cuny.edu:
> 
> I am interested in understanding the structure of the function type
> "interrupt" in Turbo C. Basically, what is special about this function
> definition, and what approaches can be used in other compilers to simulate
> this feature? Optimum-C is what I'm using.
> 
> Thanks in advance,
> 
> Thank you.
> Don Branson
> C08922DB@WUVMD.BITNET

I am not entirely sure, because I haven't worked with it before, but according
to my reading I believe that the biggest speciality of this type of function
is that it does a return from interrupt instead of just a normal return from
subroutine. I think that it may also save off all of the registers before
entering the routine, and then restores them just before the return.

If after I get home and find out that this is not correct by consulting
the manual, I will post another article to clarify if someone has not already
done so.


-- 
	Brian R. Bainter

 AT&T Technologies Atlanta Works
 {cbosgd, gatech, ihnp4, moss, mtune, ulysses}akgua!brb

jfh@rpp386.UUCP (John F. Haugh II) (07/22/88)

In article <16577@brl-adm.ARPA> C08922DB%WUVMD.BITNET@cunyvm.cuny.edu writes:
>I am interested in understanding the structure of the function type
>"interrupt" in Turbo C. Basically, what is special about this function
>definition, and what approaches can be used in other compilers to simulate
>this feature? Optimum-C is what I'm using.

it declares the function as being called at interrupt time.  this means
that the function can have no stray side effects, such as not restoring
a modified register, and that the function must be ended with a return
from exception rather than a short or long return from subroutine call.

- john.
-- 
John F. Haugh II                 +--------- Cute Chocolate Quote ---------
HASA, "S" Division               | "USENET should not be confused with
UUCP:   killer!rpp386!jfh        |  something that matters, like CHOCOLATE"
DOMAIN: jfh@rpp386.uucp          |             -- with my apologizes

driscoll@eecae.UUCP (Mike Driscoll) (07/22/88)

in article <16577@brl-adm.ARPA>, C08922DB%WUVMD.BITNET@cunyvm.cuny.edu says:
> 
> 
> I am interested in understanding the structure of the function type
> "interrupt" in Turbo C. Basically, what is special about this function
> definition, and what approaches can be used in other compilers to simulate
> this feature? Optimum-C is what I'm using.
> 
> Thanks in advance,
> 
> Thank you.
> Don Branson
> C08922DB@WUVMD.BITNET


  In TurboC, a function declared to be of type interrupt has three major
differences:

1.  All registers are pushed onto the stack on entry and popped
    from the stack on exit. 

2.  The DS register is set to point to the DGROUP of the program.

3.  The function returns with an return from interrupt instruction
    (IRET) instead of a normal return (RET).

Note that pushing the registers on the stack makes them available to the
function as if they were function parameters.  They may be changed and
the changed values will be placed in the registers on return.  

If your compiler allows inline assembly language, you can probably
insert the neccesary instructions in any function that should be
interrupt.  You need to know how to access the address of the DGROUP
segment.  You might also be able to compile to assembly language and
insert the needed assembly code in the file and then assemble that to
get an executable.  


	Mike


-- 
Michael A. Driscoll              UUCP: ...ihnp4!msudoc!eecae!driscoll
Dept. of Electrical Engineering  ARPA: driscoll@eecae.ee.msu.edu  (35.8.8.151)
Michigan State University        Office: (517) 353-5337
E. Lansing, MI, 48824

grimlok@hubcap.UUCP (Mike Percy) (07/22/88)

From article <4244@rpp386.UUCP>, by jfh@rpp386.UUCP (John F. Haugh II):
> In article <16577@brl-adm.ARPA> C08922DB%WUVMD.BITNET@cunyvm.cuny.edu writes:
>>I am interested in understanding the structure of the function type
>>"interrupt" in Turbo C. Basically, what is special about this function
>>definition, and what approaches can be used in other compilers to simulate
>>this feature? Optimum-C is what I'm using.

Well, how about this (file = int.c)

void interrupt test() 
{
}

then I do a tcc -S on it and get

	name	int
int_text	segment byte public 'code'
dgroup	group	_data,_bss
	assume	cs:int_text,ds:dgroup
int_text	ends
_data	segment	word public 'data'
_d@	label	byte
_data	ends
_bss	segment	word public 'bss'
_b@	label	byte
_bss	ends
int_text	segment byte public 'code'
; Line 2
_test	proc	far
	push	ax
	push	bx
	push	cx
	push	dx
	push	es
	push	ds
	push	si
	push	di
	push	bp
	mov	bp,dgroup
	mov	ds,bp
; Line 3
@1:
	pop	bp
	pop	di
	pop	si
	pop	ds
	pop	es
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	iret
_test	endp
int_text	ends
_data	segment word public 'data'
_s@	label 	byte
_data	ends
int_text
	public	_test
int_text	ends
	end

Oh yeah, that was with all other options default (small MM, etc.)

dennett@usage.csd.unsw.oz.au (Dennett Jaques) (08/04/90)

G'day there,

I am having a small problem with some functions in Turbo C 2.01 relating
to 'gets' and 'scanf' when in graphics mode.

The program runs fine on EGA VGA displays but the same code when run on
Hercules equipped machines causes small lines of scattered pixels to be
displayed across the top half of the screen at the point where 'scanf' or
'gets' are called. Additional pixels appear as keyboard input is processed 
by these functions. No characters are echoed to the screen at this time
although they should be, EGA and VGA OK here.

On the other hand if I program using 'getch' in place of the above - this
works for all types of graphics cards.
But this method is too sloppy.

The above code first uses 'InitGraph' to determin display hardware.

Anybody have any thoughts?


  
  Cheers.

  Dennett Jaques.

             _________________________________________________________________
            
   ,-_|\     Network Analyst             E-mail: dennett@usage.csd.unsw.edu.au
  /     \    The University of N.S.W     Phone:  +61 2 697-2324
  \_,-._* <- Sydney, AUSTRALIA           FAX:    +61 2 662-8665
       v     _________________________________________________________________

                         When I want my employers opinion,
                               I'll give it to them.