[comp.sys.mac.programmer] Wishlist for THINK _C_

d88-jwa@nada.kth.se (Jon W{tte) (03/23/90)

I've had this very long wish list for a while, and now I've
completely mislaid it, so I'll just ramble on :-)

1. Compiler errors are accumulated in a separate window and may be
   stepped through _after_ compilation. (Like emacs, or even Turbo
   C on the (yukk) PC)

2. Some support for several different project/description files,
   and maybe cross-dependancy as well.

3. Some means of reading/saving the project layout into a text
   file (maybe read in a make(1) file and convert to a projcet ? 8-)

4. Grep in files with name matching <pattern> (not necessary in the
   project)

5. A class browser.

6. A means of setting various #define's globally.

7. Some way to set breakpoints in a source file other than the
   current, without using Debugger() (Or have I overlooked something ?)


I'm sure I've wished for several other features during the last
six months or so, but these seven things should be enough to make
me pay the upgrade fee... (I do mac programming professionally,
but still haven't the bucks for apple DTS, especially since it
isn't quite the same here in Sweden... :-( )

h+

ech@cbnewsk.ATT.COM (ned.horvath) (03/24/90)

From article <3192@draken.nada.kth.se>, by d88-jwa@nada.kth.se (Jon W{tte):
> 
> I've had this very long wish list for a while, and now I've
> completely mislaid it, so I'll just ramble on :-)
> 
> 1. Compiler errors are accumulated in a separate window and may be
>    stepped through _after_ compilation. (Like emacs, or even Turbo
>    C on the (yukk) PC)

'Twould be nice.  Especially as this would allow Warning diagnostics
in addition to the one-class of errors at present.  But probably requires
Kahl and co. to rearchitect the compiler, so I guess I could live without
it.

> 2. Some support for several different project/description files,
>    and maybe cross-dependancy as well.

I don't know what this means.  You can include one project into another
now, and the dependencies get noted on make/use-disk; and you can Merge
the builds into a single result file.  Make it ain't, but I've also
got Tempo...

> 3. Some means of reading/saving the project layout into a text
>    file (maybe read in a make(1) file and convert to a projcet ? 8-)

I can't get excited about this one.  When I begin a port, I have to
pound the "Add..." dialog a bunch.  So what?

> 4. Grep in files with name matching <pattern> (not necessary in the
>    project)

Same comment: yawn.

> 5. A class browser.

AHA! Now THIS one I NEED.  I know Rich can't comment, but...PLEASE DO THIS!

> 6. A means of setting various #define's globally.

I'd like this one too.  But then, most of my projects already have
a catch-all header for inclusion in every file, so...

> 7. Some way to set breakpoints in a source file other than the
>    current, without using Debugger() (Or have I overlooked something ?)

I don't understand this one. I have Debugger() and DebugStr, and once a
debugging session is started, I can open any source file in TC4, and use
cmd-G to get it into the edit window of the debugger to set a breakpoint.
It MIGHT be nice to have a list of preset breakpoints, but given the speed
of the compiler,  that's effectively what Debugger() provides.

To the above, let me add one more: permit me to do builds in background.
The compiler may be fast, but there are still times when I change one
thing in one header, and I don't really want to watch 50K lines compiled.

=Ned Horvath=

d88-jwa@nada.kth.se (Jon Watte) (03/24/90)

In article <2274@cbnewsk.ATT.COM> ech@cbnewsk.ATT.COM (ned.horvath) writes:
>From article <3192@draken.nada.kth.se>, by d88-jwa@nada.kth.se (Jon W{tte):

>> 1. Compiler errors are accumulated in a separate window and may be

>in addition to the one-class of errors at present.  But probably requires
>Kahl and co. to rearchitect the compiler, so I guess I could live without

It would be _more_ than nice. Ever run gcc and gdb under gnu emacs ?
Not that I'm a gnu fan, but they sure make some neat things...

>> 2. Some support for several different project/description files,
>>    and maybe cross-dependancy as well.

>I don't know what this means.  You can include one project into another

Yes, but to close one project and open another and switch back & forth
isn't my view of user-friendliness (For example; NetHack has two support
applications that needs to be run when you touch certain files)

>> 3. Some means of reading/saving the project layout into a text
>>    file (maybe read in a make(1) file and convert to a projcet ? 8-)

>I can't get excited about this one.  When I begin a port, I have to
>pound the "Add..." dialog a bunch.  So what?

Well. In the case of NetHack (again :-) it would save us the trouble
of distributing a hqx-ed project file... Okay, it would be neat, but
not essential.

>> 4. Grep in files with name matching <pattern> (not necessary in the
>>    project)

>Same comment: yawn.

So do you have a grep that can scan through all files in a directiry ?
I'd be very interested in it, in that case.

(I _often_ use egrep "<some-expression>" f*.c or similar on unix boxes)

>> 6. A means of setting various #define's globally.

>I'd like this one too.  But then, most of my projects already have
>a catch-all header for inclusion in every file, so...

A hitch: pre-compiled headers mustn't rely on these #defines...

>> 7. Some way to set breakpoints in a source file other than the
>>    current, without using Debugger() (Or have I overlooked something ?)

>I don't understand this one. I have Debugger() and DebugStr, and once a

Well, maybe I want conditional breakpoints. I was mailed how to
do this, I just hadn't seen it in the manual (Top of page 141)

But then, I always "Set Aside" everything but the debugger and
the project...

>To the above, let me add one more: permit me to do builds in background.

Yes ! Yes ! Yes ! Now, this is something I've wanted for years !
(Maybe as a check box under compilator flags, to avoid as much overhead
as possible ?)

Wishing for a white Christmas,

							h+
-- 
   ---  Stay alert !  -  Trust no one !  -  Keep your laser handy !  ---
             h+@nada.kth.se  ==  h+@proxxi.se  ==  Jon Watte
                    longer .sig available on request

CXT105@psuvm.psu.edu (Christopher Tate) (03/25/90)

While we're coming up with a wish list, how about....

1)   A way to toggle 6888x code generation within the source.  It would make
     it so easy to write programs that could be run with any coprocessor
     configuration if you could do something like:

          if (foundCoprocessor) {
               #define _6888x_
               /* use the coprocessor for this code */
               #undef _6888x_
          }
          else {
               /* do the same thing using SANE */
          }

2)   A way to search-and-replace in multiple files at once that are *not*
     in the current project.  I don't know how many times I've wanted to
     do this....

3)   A mechanism that would allow me to keep code in one library at a
     time.  It seems ludicrous to store the code for the ANSI library
     in every project that I'm currently working on -- the disk space
     really adds up, especially on floppies.  Why can't the project just
     contain the information about where to find the code, instead of
     having to copy it into itself?

4)   (This one is a pet peeve, since I got burned by it recently)  The rules
     that THINK C uses for finding the resource file associated with a
     project are different from the rules it uses to find source files.
     For example, you can put your source files into a folder called
     (project_name), and the compiler will find them, but it will not find
     the project_name.rsrc file if it's in that same folder.  I'd like to
     see C use the same rules for finding .rsrc files as it uses for finding
     source code.


Rich, I hope you can pass some of these along.  I realize that 1) is an
extension to C, and therefore suspect, but it'd make things awfully nice.
Another possibility would be for the compiler to generate code to detect the
coprocessor automatically at runtime, and then use the appropriate libraries.
Admittedly, it makes your code quite a bit bigger, but those of us who can't
handle 68881 programming might find it quite convenient....

-------
Christopher Tate                   | "Mr. Churchill, you're drunk!"
                                   |
cxt105@psuvm.psu.edu               | "Yes madam, and you are ugly.  In the
{...}!psuvax1!psuvm.bitnet!cxt105  |  morning, however, I shall be sober."
cxt105@psuvm.bitnet                |

rob@cs.mu.oz.au (Robert Wallen) (03/26/90)

In article <90083.132800CXT105@psuvm.psu.edu> cxt105@psuvm.psu.edu writes:
>While we're coming up with a wish list, how about....

I suppose if you dont ask, you dont get so ...

How about a #define that I can detect to determine the current project type.
That way, my CDEF (etc) sources can contain code like 

pascal long
#ifdef _APPLICATION_    /* change name to cdefmain to allow testbed */
cdefmain(......
#endif
#ifdef _CODESEGMENT_
main(.....
#endif

and my (mostly) general purpose textedit routines can determine whether they
are in _APPLICATION_ or _DESKACC_ (so I can refresh clikloop & workbreak 
routines only when they need it..., etc)

And how about different names for the default pre-compiled MacHeaders files.
That way, I can have the OOPS stuff precompiled for applications and desk accs
and not worry for CDEFs or INITs.  Maybe make it selectable from the 'Set 
Project Type' window.  (Yeh, I know I can just turn it off in the options 
window and manually #include it.  This is a wish list, isnt it)

nilesinc@well.sf.ca.us (Avi Rappoport) (03/28/90)

What I really need is a way to keep my breakpoints and variables between
runs of the program.  So annoying to have to keep resetting them.

Also, standard command keys (I changed them with ResEdit, but hate to do
that everytime I have a new version).  Remembering window size and location:
I have a portrait monitor, so I can't see all my code in the debug window,
but the data window is often too big.  If only I could reset the size, and
have it stick...

-- 
--  Help me justify my online bills: ask me EndNote questions, please!  --
Avi Rappoport                               2000 Hearst, Berkeley, CA 94709
nilesinc@well.sf.ca.us,                                        415-655-6666
Niles.Assoc on AppleLink    		    	          fax: 415-649-8179                 

jonathan@itsgw.rpi.edu (Jonathan Fisher) (03/30/90)

In article <16903@well.sf.ca.us> nilesinc@well.UUCP (Avi Rappoport) writes:
>What I really need is a way to keep my breakpoints and variables between
>runs of the program.  So annoying to have to keep resetting them.
>
Yes.  That and a moveable or resizeable console window!!  I use Think C
for my Systems Programming Class, and we have to use a unix system.  So
I use Think C with the console window and the special command line (gasp)
arguments function.  But when using the debugger, I can't move the
console window out of the way so that I could see the debugger windows.
Every time that the program starts to run the console window comes to
the front and hides the debugger windows.
I am using a SE and no other screen.  This renders auto-trace totally
useless.  If there is a way around this, someone please let me know! 


-- 
Jonathan Fisher                                      jonathan@pawl.rpi.edu
ITS Student Consultant                                       or
Rensselaer Polytechnic Institute                  userganu@rpitsmts.bitnet
GO VIKINGS!  Central Division Champs => NFC Champs => Superbowl XXV Champs

mjf@well.sf.ca.us (Marty Fried) (04/11/90)

In article <16903@well.sf.ca.us> nilesinc@well.UUCP (Avi Rappoport) writes:
>What I really need is a way to keep my breakpoints and variables between
>runs of the program.  So annoying to have to keep resetting them.
I too was frustrated with that aspect of the debugger.  I have just discovered
that you can use the "skip to here" function to re-run from any point, even 
from the beginning.  If you select the first statement, then select skip to
here, the program will start at that point.  I haven't had a chance to fully
test this out, but it seems to work.
I have also used the console routines to resize and even rename to console
window.  (using stdin and stdout as the FILE *).  I had to edit console.c to
make it work, though.
Hope these discoveries will help other programmers using ThinkC.
Marty Fried    *    SlideTek, Inc.   *   Sausalito, California

denbeste@bgsuvax.UUCP (William C. DenBesten) (04/12/90)

In article <16903@well.sf.ca.us> nilesinc@well.UUCP (Avi Rappoport) writes:
> What I really need is a way to keep my breakpoints and variables between
> runs of the program.  So annoying to have to keep resetting them.

From article <17184@well.sf.ca.us>, by mjf@well.sf.ca.us (Marty Fried):
> I too was frustrated with that aspect of the debugger.  I have just discovered
> that you can use the "skip to here" function to re-run from any point, even 
> from the beginning.

Skip to here is neat, but keep in mind as you use it that the value of
variables is NOT changed back to what it was at that point in the
execution.  For example, if you are stopped at c: and skip to a:, the
value printed the second time is 9, not 7.

      x=7;
   a: printf("x is %d\n",a);
      x=9;
   c:

It is not reasonable to expect the debugger to change the value of
variables back since that would require keeping enormous amounts of
state information. This does, however, mean that you can get really
wierd results.

-- 
William C. DenBesten   is   denbeste@bgsu.edu  or   denbesten@bgsuopie.bitnet

oster@well.sf.ca.us (David Phillip Oster) (04/13/90)

In article <17184@well.sf.ca.us> mjf@well.UUCP (Marty Fried) writes:
_>In article <16903@well.sf.ca.us> nilesinc@well.UUCP (Avi Rappoport) writes:
_>>What I really need is a way to keep my breakpoints and variables between
_>>runs of the program.  So annoying to have to keep resetting them.
_>I have just discovered
_>that you can use the "skip to here" function to re-run from any point, even 
_>from the beginning.  If you select the first statement, then select skip to
_>here, the program will start at that point.

_>I have also used the console routines to resize and even rename to console
_>window.  (using stdin and stdout as the FILE *).  I had to edit console.c to
_>make it work, though.

Unfortunately, if you write real Mac applications, which you apparently do not
since you care about console i/o, you'll find that starting from the first
statement is not the same as the initial start up in critical ways:

1.) You will be calling the ToolBox initialization routines in an
environment where thay have already been called.

2.) any memory allocation routines you call will  allocate new storage
without ever freeing the old stuff from the previous run. (GetMenu, for
example.)

It is a nifty hack when it works, but don't expect it to work too well.
-- 
-- David Phillip Oster - Note new address. Old one has gone Bye Bye.
-- oster@well.sf.ca.us = {backbone}!well!oster

tim@hoptoad.uucp (Tim Maroney) (04/13/90)

In article <16903@well.sf.ca.us> nilesinc@well.UUCP (Avi Rappoport) writes:
>>What I really need is a way to keep my breakpoints and variables between
>>runs of the program.  So annoying to have to keep resetting them.

I've often thought this myself.  Oh, Riiiich.....

In article <17184@well.sf.ca.us> mjf@well.UUCP (Marty Fried) writes:
>I too was frustrated with that aspect of the debugger.  I have just discovered
>that you can use the "skip to here" function to re-run from any point, even 
>from the beginning.  If you select the first statement, then select skip to
>here, the program will start at that point.  I haven't had a chance to fully
>test this out, but it seems to work.

Except that your global data will not get reinitialized, so it's not
the same as re-running the program.  It could very well give misleading
results; in fact, it's almost sure to, if you use any globals and count
on C to initialize them to zero or to what your source code's
initializers specify.  I would recommend not using this strategy except
possibly very early in the running of your program, or if you are using
very little global data and not couting on its initialization.
-- 
Tim Maroney, Mac Software Consultant, sun!hoptoad!tim, tim@toad.com

"Do what you wanna, do what you will;
 Just don't mess up your neighbor's thrill.
 And when you pay the bill, kindly leave a little tip
 To help the next poor sucker on his one-way trip."
    - Frank Zappa, "You Are What You Is"