[comp.sys.mac.programmer] Think Pascal Wishes...?

siegel@endor.uucp (Rich Siegel) (09/25/90)

Does anyone have any wishes for THINK Pascal? Editor, Compiler, Debugger
feature requests? Annoyances? Any sort of commentary?

R.



 Rich Siegel	Software Engineer	Symantec Languages Group
 Internet: siegel@endor.harvard.edu	UUCP: ..harvard!endor!siegel

If you have telekinetic powers, raise my hand.

weesh@grymoire.crd.ge.com (Darweesh) (09/25/90)

Let me just say that Lights...er...Think Pascal is the most wonderful
programming environment I've ever used...Unix or Mac.
I have no bug reports or major problems with it, but if you are looking for
feature ideas, here is a large feature that could be added (but could also
be done manually).  Version Management as in RCS type stuff in unix.
Make it possible to create/recreate any of the versions of a project that
ever were.  If you're not familiar with Unix RCS, then let me know, and I'll
elaborate.

-Mike Darweesh

philip@pescadero.Stanford.EDU (Philip Machanick) (09/25/90)

In article <4251@husc6.harvard.edu>, siegel@endor.uucp (Rich Siegel) writes:
> Does anyone have any wishes for THINK Pascal? Editor, Compiler, Debugger
> feature requests? Annoyances? Any sort of commentary?

Since you ask, here's a list. Sorry I don't have time to think of more.

Environment / general
o support for including external tools in project, e.g., run Rez if
  resource source changed - i.e., should be as powerful as Make, without
  losing current ease of use
o support for more than 1 resource file
o apropos - LISP environment style: a search for a string supplies a list of
  names, and you select the one you want and jump to its definition (see
  Mac Allegro Common Lisp for a good example)
o extend the current name menus (lists of uses files, procedure names etc.) to
  the project window (OPTION or COMMAND click on name in Project)

Compiler
o support for arrays larger than 32K _at least_ on the heap, preferably
  more than 32K global data (my BIGGEST priority)**********************
o assembly language output
o assembler for inlines (relatively low priority for me; real programmers
  like hex)

Debugger
o programmable breakpoints - like assertions: cause a drop into the debugger
  only if the condition they check is true and debugging mode is on - should
  _not_ be part of source code to keep it portable (at least within Mac)
o allow offsets of more than 32K
o disassembler, with pointers back to source (e.g., double-click on line
  of assembly code, get editor window, finger at source line)

Editor
o more levels of undo
o multiple views/panes (see how MS Word allows you to split the screen, or
  to have more than 1 window open at once for the same document - a good
  special case of this is to be able to see declarations and the place the
  declared items are used at the same time
o folding (based on occam editor): allow sections of code to be collapsed
  as in an outliner
o pretty printing - I'm one of the fans of this feature, except I find it
  irritating that I can't always break a long line. Sometimes I can do
  it by inserting a comment, sometimes I can't. Generally more parametrization
  and control in general will make pretty printing more useful
o option to output pretty printing in MacWrite or MS Word (could be a problem
  because original MacWrite only supported a small number of tabs) - or
  even PICT - format.

Philip Machanick
philip@pescadero.stanford.edu

252u3129@fergvax.unl.edu (Mike Gleason) (09/25/90)

I'm very impressed that a company would actually go out and ask for
suggestions!  Apple, Microsoft, ... take note!

I've got version 2.0, so I don't know if any of my suggestions are
already in there.  (It was between upgrading to TP v3 or Tuition...)

Something I think is pretty important is that you should be able to
choose to save a compiled resource directly into another file.  It's a
ROYAL pain having to go into ResEdit zillions of times to try out a new
XCMD, etc.  This goes for Think C too!  An excellent example of this can
be found in Farallon's SoundEdit.  Very slick, uses Standard File, uh,
slickly.

Another thing I hate is having to open a non-pascal text file and having
the pretty-printer try and format it and making it un-readable.  Howz
about having a 'Open plain text file' command?

And, is an inline assembler possible?  I guess you've got the inline
keyword where you could enter in machine-language gibberish, but it
would be cool if you could put in asm junk like you can in Think C.

Oh, uh, lowering the upgrade price would be nice too... $75 is kinda
steep on a student's income ;-)

Thanks for listening,
-- mike gleason


_____________________________________________________________________________
 * Mike Gleason                                      252u3129@fergvax.unl.edu
 * "Don't you f*ckin' look at me!" -- D. Hopper       cosc006@unlcdc2.unl.edu

gix%mdi.com (Brian Gix) (09/25/90)

In article <4251@husc6.harvard.edu> siegel@endor.UUCP (Rich Siegel) writes:
>Does anyone have any wishes for THINK Pascal? Editor, Compiler, Debugger
>feature requests? Annoyances? Any sort of commentary?

	How about the ability to use Think C Librarys w/ Think Pascal
	and Think Pascal Libs w/ Think C....   Sure would save some
	translation time... :-)

>R.
>
> Rich Siegel	Software Engineer	Symantec Languages Group
> Internet: siegel@endor.harvard.edu	UUCP: ..harvard!endor!siegel
>
>If you have telekinetic powers, raise my hand.


	--Brian Gix

-- 
================================================================================
|| Brian Gix            ||   gix@mdi.com               gixb@prism.cs.orst.edu ||
|| MDI - Motorola       ||   gix@nwnexus.wa.com        ...!uunet!mdisea!gix   ||
|| Bothell, WA 98011 USA||   AmOnline: GIX             Phone: (206) 487-5894  ||

252u3129@fergvax.unl.edu (Mike Gleason) (09/25/90)

quote:
        How about the ability to use Think C Librarys w/ Think Pascal
        and Think Pascal Libs w/ Think C....   Sure would save some
        translation time... :-)
enquote.

It says how in the Think Pascal manual how you can use Think C
libraries.  However, I couldn't find a place in either manual saying how
you could use a Think Pascal library in Think C.  I wonder if you could
just declare functions as extern pascal MyType foo() that exist in
a Pascal library?

_____________________________________________________________________________
 * Mike Gleason                                      252u3129@fergvax.unl.edu
 * "Don't you f*ckin' look at me!" -- D. Hopper       cosc006@unlcdc2.unl.edu

pillera@etd4260a.erim.org (Joe Pillera) (09/25/90)

How about injecting some of the superior features of LS Pascal (i.e.
Lightsbug) into THINK C?  THINK Pascal is such of a superior product,
it's really left it's younger brother (C) in the dust;  it's
unfortunate that THINK C isn't as user-friendly...

-joe
--

-----
Joe Pillera                              ERIM
Research Scientist                       Image Processing Systems Division
pillera@etd4260a.erim.org                P.O. Box 8618
(313) 994-1200 x2754                     Ann Arbor, Michigan  48107-8618


Disclaimer: The opinions expressed here are solely those of Joe Pillera,
            and not of ERIM or its affiliates.

jem@sm.luth.se (Jan Erik Mostr|m) (09/25/90)

pillera@etd4260a.erim.org (Joe Pillera) writes:

# How about injecting some of the superior features of LS Pascal (i.e.
# Lightsbug) into THINK C?  THINK Pascal is such of a superior product,
# it's really left it's younger brother (C) in the dust;  it's
# unfortunate that THINK C isn't as user-friendly...

Hear Hear

emerson@uvm-gen.UUCP (Tree,,,) (09/25/90)

From article <4251@husc6.harvard.edu>, by siegel@endor.uucp (Rich Siegel):
> Does anyone have any wishes for THINK Pascal? Editor, Compiler, Debugger
> feature requests? Annoyances? Any sort of commentary?

I would find bracket matching a real plus in the editor.  I know there is
an INIT that gives this capability to THINK C, but there is nothing out there
for THINK Pascal.  Also, like the others, RCS-like capability would be
wonderful.

Tom E.

--
+----------------------------------------------------------------------+
| The three most dangerous things in the   |                           |
| world are a programmer with a soldering  | Tom Emerson               |
| iron, a hardware guy with a software     | emerson@griffin.uvm.edu   |
| patch, and a user with an idea.          |                           |
+----------------------------------------------------------------------+

pete@tone.rice.edu (Pete Keleher) (09/25/90)

> How about injecting some of the superior features of LS Pascal (i.e.
> Lightsbug) into THINK C?  THINK Pascal is such of a superior product,
> it's really left it's younger brother (C) in the dust;  it's
> unfortunate that THINK C isn't as user-friendly...
Not being a Pascal type, I haven't ever seen THINK Pascal. What superior
features are you thinking of?

pete
--
=============================================================================
Pete Keleher						pete@titan.rice.edu
=============================================================================

samalone@athena.mit.edu (Stuart A. Malone) (09/25/90)

Thank you for asking for our suggestions.  I'm not going to list every feature
I can imagine for THINK Pascal; I'd rather concentrate on the ones that I
believe are practical to implement and immediately useful.  Roughly in order of
increasing difficulty:


* Enable the "Save" command on untitled documents.  Sure, it will behave just
like "Save As...", but at least it will have a command-key equivalent.

* Wrap long lines in the editor.  Preferably, this would be done automatically
to fit the window.  Once this is done, you can eliminate the horizontal
scrollbar to make room for one more line of code.  (Oh, for a large screen!)
I realize that this wouldn't leave room for the stop sign at the bottom of the
window in "Stops In" mode, but I'd rather have the lines wrap than have a cute
icon, and perhaps your designers can come up with some other way to indicate
that the left column is special.

An inferior solution would be to allow the programmer to insert explicit
newlines.

* Make the option double-click trick work with more symbols.  Right now it only
works with procedure and function names, but it should also work with types and
constant names, and maybe even variables (though perhaps it's only practical
with global variables).  My wife was using Just Enough Pascal to refresh her
memory of Pascal and learn about the Macintosh, and was frustrated that most of
the time option double-click failed.

Along the same lines, if the symbol is defined in a library, it would be nice
to indicate which library contains the symbol by hilighting the library in the
Project window.

* Make the debugging environment more like the actual Macintosh environment.
Suspend, resume, and mouseMoved events should be passed through (or emulated)
to the application being debugged, and the mouseRegion and maxSleep arguments
to WaitNextEvent should be handled properly.  As things stand, there are
certain parts of my project that I can only check by building a standalone
application and guessing at the problem when something goes wrong.

* Provide a way (other than inline hexadecimal codes) to call ProcPtrs.  This
would eliminate nearly all the places where I use inline hexadecimal now.  I
think that the best way to accomplish this is to extend Pascal to allow the
programmer to declare procedure and function types, and pointers to these
types.  The procedure and function types would become a legal shorthand for
defining a procedure or function of that type, but could not be used as the
type of a variable or expression.  Types naming pointers to procedures and
functions could be used as variable and expression types, and could also be
used to coerce ProcPtrs to callable procedures.  Here's an example of what I
have in mind:

  TYPE
  { Note that the name "MyFilter" serves only as a placeholder. }
  { It's presence should be optional. }
    FilterProc = FUNCTION MyFilter(theDialog: DialogPtr;
      VAR theEvent: EventRecord; VAR itemHit: integer): boolean;
    FilterProcPtr = ^FilterProc;

  { Here we define a FilterProc function using the previous type declaration. }
  FilterProc FancyFilter;
  VAR
    i, j: integer;
  BEGIN
    i := itemHit;
    ...
  END;

  { Here we declare an argument of type FilterProcPtr, and proceed to call }
  { the function. }
  FUNCTION TestFilter(filter: FilterProcPtr):boolean;
  BEGIN
    ...
    TestFilter := filter^(dialog, event, item);
  END;


* Yes, I would also like to see a source-code control system built into THINK
Pascal.  I use one of these (RCS) on my UNIX machine at work, and it is a
tremendous programming aid.  As far as I can tell, Apple's Projector is only
available as part of MPW, which I use THINK Pascal to avoid.  Also, a built-in
system would undoubtedly be far more convenient to use than a separate
application, and ease-of-use is crucial to the success of a revision-control
system.  I would be satisfied even if it worked only on source files stored in
your proprietary format, which would probably make your job easier.  (After
solving the procedure-level segmentation problem so elegantly in THINK Pascal
3.0, I'm sure your engineers are up to the task of designing the interface to
the revision control system.  I really must praise your team for doing an
excellent job on such a tricky problem.)


I hope that these suggestions are helpful, and I hope they can be implemented.
I would certainly be willing to pay for an update containing these features.
If you have any questions, feel free to send me email.

				--Stuart A. Malone
				samalone@athena.mit.edu

weesh@grymoire.crd.ge.com (Darweesh) (09/25/90)

It would be nice if Think Pascal and Think C could share object code.

-Mike Darweesh
weesh@crd.ge.com

252u3129@fergvax.unl.edu (Mike Gleason) (09/26/90)

I thought of another needed addition: being able to have static arrays
(I guess what I'm going to call them for now).  In MSDOS Turbo Pascal
you can have something like this:

const
  myTable[10] = {1, 1, 2, 3, 5, 8, 13, 21, 44, 65};

It's something like that, I can't remember, I don't use anything but the
best pascal compiler in the world ;-)  When porting from inferior
compilers, it sucks having to type in myTable[1] := 1, myTable[2] := 1,
etc.

_____________________________________________________________________________
 * Mike Gleason                                      252u3129@fergvax.unl.edu
 * "Don't you f*ckin' look at me!" -- D. Hopper       cosc006@unlcdc2.unl.edu

phils@chaos.cs.brandeis.edu (Phil Shapiro) (09/26/90)

In article <12142@crdgw1.crd.ge.com> weesh@grymoire.crd.ge.com (Darweesh) writes:
>   It would be nice if Think Pascal and Think C could share object code.
>
>   -Mike Darweesh
>   weesh@crd.ge.com

They can, albeit in a limited fashion.  Libraries built in Think C can
be added directly to Think Pascal projects.  Also, libraries built
from Think Pascal can be converted with oConv into projects.  You have
to convince oConv that the library is really a MPW .o file, though, so
you'll have to change the file's creator and its name.

	-phil shapiro, symantec tech support
--
Phil Shapiro
phils@chaos.cs.brandeis.edu

KOFOID@cc.utah.edu (09/26/90)

I would also like to complement Symantec on the decision to solicit
advice directly from users.

I am in substantial agreement with most of the suggestions thus far made.
I would also like Symantec to add hooks to foreign editors. I would far
prefer an Emacs-like editor, such as Alpha or a highly customizable
editor, such as QUED to the THINK editor, which I find brain-damaged. In
every other respect, THINK Pascal is an utter joy to use compared to
other systems. However, I want

{1} to format my code *exactly* the way *I* wish;
{2} to do regular-expression search and replace, forwards and backwards;
{3} to write macros;
{4} to block comment code;
{5} to treat the alternate comment braces ("(* *)") as "error braces" 
to comment already partially commented text;
{6} to read or write text files without the stupid pretty-printer futzing
them up;
{7} to comment-number code at the beginning of each line, these lines
being an example;
{8} etc.

Cheers,

Eric

 __________________________________________________________________
|       Eric Kofoid; Dept. Biology, U. of Utah; SLC, UT 84112      |
|                          (801) 581-3592                          |
|                     kofoid@bioscience.utah.edu                   |
|                                                                  |
| -- The University of Utah is blameless for anything I've said -- |
|__________________________________________________________________|

paulr@syma.sussex.ac.uk (Paul T Russell) (09/26/90)

In article <4251@husc6.harvard.edu> siegel@endor.UUCP (Rich Siegel) writes:
>Does anyone have any wishes for THINK Pascal? Editor, Compiler, Debugger
>feature requests? Annoyances? Any sort of commentary?

It would be nice to extend the option/command-click-on-title-bar stuff.
I was thinking of something along the following lines:

 1) Press option key - cursor changes into something appropriate
    (like a fish ?)

 2) Click on any word in a text editing window.

 3) A pop-up menu appears. The first item reads "Defined in: xyz.p";
    the second item reads "Referenced by: " and has a submenu with
    all the references to the symbol (file name/unit name/procedure);
    and then there are other items but I can't quite read what's on
    them. ;-)

 4) Selecting any of the menu items opens up the relevant text window
    and highlights the reference.

Sort of a magical hyper cross reference facility. How about it ? It
would things like MPW's XRef tools and Aranda look a bit silly...

//Paul

-- 
           Paul Russell, Department of Experimental Psychology
         University of Sussex, Falmer, Brighton BN1 9QG, England
     Janet: paulr@uk.ac.sussex.syma  Nsfnet: paulr@syma.sussex.ac.uk
    Bitnet: paulr%sussex.syma@ukacrl.bitnet  Usenet: ...ukc!syma!paulr

rad@genco.uucp (Bob Daniel) (09/26/90)

It would be nice to compile a code resource into an existing file rather
than creating a new one every time (as an option).


_________
moof moof

homeier@aerospace.aero.org (Peter Homeier) (09/26/90)

In article <4251@husc6.harvard.edu> siegel@endor.UUCP (Rich Siegel) writes:
>Does anyone have any wishes for THINK Pascal? Editor, Compiler, Debugger
>feature requests? Annoyances? Any sort of commentary?
>
> Rich Siegel	Software Engineer	Symantec Languages Group
> Internet: siegel@endor.harvard.edu	UUCP: ..harvard!endor!siegel

I am so glad you asked!  I absolutely *LOVE* THINK Pascal.  It has, I think,
the finest debugging environment I have ever used.  Nevertheless, there *is*
one feature that I would dearly love to see included, that does exists in
many other "Mainframe" debuggers, but for some reason was overlooked in
creating THINK Pascal's debugger.  This feature is the "procedure traceback".

The procedure traceback appears as a window that has two panes.  The top pane
is a list of the procedure call stack, as a scrollable text field with a line
(in order) for each procedure (or function) called but not yet returned from.
This line contains the name of the procedure or function.  Clicking on the
name of a function  causes the list of formal parameter names and also local
variables to appear in the lower pane, along with their current values (if
printable).  At the same time the code window resets itself to the code for
that procedure or function, with the actual point of the call in progress
highlighted.  The values listed in the lower pane are editable, and any new
value is assigned to the parameter or variable.  (Actually, only *variable*
parameters would be editable, not value, procedure, or function parameters.)

All this should be made clearer with an example.  Take the following code:

 1.  program test;
 2.  
 3.  var m, n: integer;
 4.  
 5.  procedure p(x: integer; var y,z: integer);
 6.  var a: integer;
 7.  begin a := z-1;
 8.     if x>0 then q(y,a)
 9.  end;
10.  
11.  procedure q(u: integer; var v: integer);
12.  var d: integer;
13.  begin d := u-1;
14.     if u>0 then p(v,d,v) else STOP
15.  end;
16.  
17.  begin
18.     m := 2;
19.     n := 3;
20.     p(3,m,n)
21.  end.

If I have this figured out correctly, the above program should break at
line 14 at the STOP.  Then the code and traceback windows would reflect
the current scope, as follows:

+=============== TEST CODE ================+     +===== TRACEBACK =======+
| 11.  procedure q(u: integer; var v: inte |     |=>q(0,0)               |
| 12.  var d: integer;                     |     |  p(1,0,1)             |
| 13.  begin d := u-1;                     |     |  q(1,1)               |
| 14.     if u>0 then p(v,d,v) else STOP   |     |  p(2,1,2)             |
| 15.  end;                         ^^^^   |     |  q(2,2)               |
| 16.                                      |     |  p(3,2,3)             |
| 17.  begin                               |     |  test()               |
| 18.     m := 2;                          |     +-----------------------+
| 19.     n := 3;                          |     |  u: 0                 |
| 20.     p(3,m,n)                         |     |  v: 0                 |
| 21.  end.                                |     |  d: -1                |
|                                          |     |                       |
|                                          |     |                       |
|                                          |     |                       |
|                                          |     |                       |
+------------------------------------------+     +-----------------------+

The "^^^^" is my attempt to show highlighting on the code screen.
Then clicking, say, on the "p(2,1,2)" entry would result in the screen
changing to

+=============== TEST CODE ================+     +===== TRACEBACK =======+
|  5.  procedure p(x: integer; var y,z: in |     |  q(0,0)               |
|  6.  var a: integer;                     |     |  p(1,0,1)             |
|  7.  begin a := z-1;                     |     |  q(1,1)               |
|  8.     if x>0 then q(y,a)               |     |=>p(2,1,2)             |
|  9.  end;           ^^^^^^               |     |  q(2,2)               |
| 10.                                      |     |  p(3,2,3)             |
| 11.  procedure q(u: integer; var v: inte |     |  test()               |
| 12.  var d: integer;                     |     +-----------------------+
| 13.  begin d := u-1;                     |     |  x: 2                 |
| 14.     if u>0 then p(v,d,v) else STOP   |     |  y: 1                 |
| 15.  end;                                |     |  z: 2                 |
| 16.                                      |     |  a: 1                 |
| 17.  begin                               |     |                       |
| 18.     m := 2;                          |     |                       |
| 19.     n := 3;                          |     |                       |
+------------------------------------------+     +-----------------------+

Finally, if the user clicked on the name of the program, "test()", he
would get the point in the main program where the first call was made,
and see listed all global variables:

+=============== TEST CODE ================+     +===== TRACEBACK =======+
| 17.  begin                               |     |  q(0,0)               |
| 18.     m := 2;                          |     |  p(1,0,1)             |
| 19.     n := 3;                          |     |  q(1,1)               |
| 20.     p(3,m,n)                         |     |  p(2,1,2)             |
| 21.  end^^^^^^^^                         |     |  q(2,2)               |
|                                          |     |  p(3,2,3)             |
|                                          |     |=>test()               |
|                                          |     +-----------------------+
|                                          |     |  m: 2                 |
|                                          |     |  n: 3                 |
|                                          |     |                       |
|                                          |     |                       |
|                                          |     |                       |
|                                          |     |                       |
|                                          |     |                       |
+------------------------------------------+     +-----------------------+

So much of this is already present in pieces in the THINK Pascal debugger!
Already, when the program hits a breakpoint, the code window is updated to
show the current location of the program counter.  All that would need to
be added here is the capability to pull the appropriate return address off
the stack, and display the source code at THAT location.

Already, the Observe window allows the interactive display of variables,
updated at every break.  To create the lower pane of the traceback window,
all that would need to be added is the ability retrieve the variable names
in the selected scope, evaluate them in THAT scope, and to edit their values.

This traceback feature would immediately increase the programmer's vision
into his program's state during debugging.  So often the problem is not in
the current scope where the error finally forced a break, but prior, in a
higher scope than the current call.  It is highly valuable to be able to go
back to previous scopes and first, see the location where the call came from,
and second, to examine the local parameters and variables there.

I want to thank Rich Siegel at the Symantec Languages Group, and all the
others at THINK, for their excellent implementation of Pascal.  I hope the
above suggestions were clear, and of value.  It's not often you get the
opportunity to comment like this; I hope Symantec finds it worthwhile.

Peter V. Homeier
homeier@aerospace.aero.org

wayne@helix.nih.gov (Wayne Rasband) (09/27/90)

More than anything else, I would like to see better code optimization. I 
think it's crime that, with the possible exception of Absoft's new FORTRAN 
compiler,  there aren't any highly optimizing compilers available for the 
Mac.

-wayne  rasband  (wayne@helix.nih.gov)

rcook@eagle.wesleyan.edu (09/27/90)

First of all I think it's fabulous that you are asking us what changes we would
like.  I just hope you have the time and energy to implement all the great
suggestions I have read so far.  Here's my list:

1.  I often use assembly language in my programs, and even with MultiFinder it
is a pain to have to switch to the Editor, then to the Assembler, then to the
Library converter (I'm using MDS), and back into THINK Pascal.  I would really
appreciate an integrated assembler in the TP environment.  Ideally we could
have an Assemble... command in a menu which would assemble the code in an
editor window, depositing the object code in your project, and the option for
inline assembly code as in C.

2.  I put a lot of effort into the appearance or my programs on the screen, so
I fain myself going into ResEdit all the time to adjust icons, windows,
dialogs, cursors, etc.  Again, MultiFinder is good, but an integrated resource
editor would be better, I think.  I am not talking about putting all of ResEdit
into TP, but just some basic stuff, like string/string list, icon, pattern,
cursor, dialog, alert, DITL, and window editors into THINK Pascal.  I often
find myself hard coding strings into my programs because it is such a pain to
have to go into ResEdit everytime I think to include a new string into my
program.  An integrated resource editor would make this a snap.

Just too reiterate some other good suggestions I have heard, I like the ideas of
a version control system, a way to wrap long lines of code, an option to not
pretty print a file, and a way to save a pretty printed file in a word
processor's format.  That's about it.  I anxiously await the arrival of THINK
Pascal version 4...


--
Randall Cook
rcook@eagle.wesleyan.edu
--

francis@arthur.uchicago.edu (Francis Stracke) (09/27/90)

In article <4251@husc6.harvard.edu> siegel@endor.UUCP (Rich Siegel) writes:
>Does anyone have any wishes for THINK Pascal? Editor, Compiler, Debugger
>feature requests? Annoyances? Any sort of commentary?

About pretty-printing: mostly I like it.  But the horizontal/vertical
dichotomy in listing variables (and unit names?) has got to go.  I prefer
to have a horizontal list, for the most part; but, when it gets over one
line, it gets to be a pain.  (Especially with the TCL--everybody's going to
be having HUGE unit lists, no?)  I'd like to be able to do something to
say "hey, break the list here."
I haven't seen 3.0 yet (don't blame me, blame my bank...), so ignore this if
it's been addressed already.

>If you have telekinetic powers, raise my hand.

I just did.  I also have hypnotic powers, so you didn't notice.

francis@arthur.uchicago.edu (Francis Stracke) (09/27/90)

In article <12126@crdgw1.crd.ge.com> weesh@crd.ge.com (Darweesh) writes:
>
>Let me just say that Lights...er...Think Pascal is the most wonderful
>programming environment I've ever used...Unix or Mac.
Agreed!
>I have no bug reports or major problems with it, but if you are looking for
>feature ideas, here is a large feature that could be added (but could also
>be done manually).  Version Management as in RCS type stuff in unix.
PLEASE make it extremely optional! Good Lord, can you imagine trying to keep
that much stuff around if you're just on an ordinary 20M HD? (Actually, I'm
still using 2.0, primarily because I can't afford an upgrade, but also
because I can fit it on 2 floppies.)

philip@pescadero.Stanford.EDU (Philip Machanick) (09/27/90)

Another thing I've wanted for a long time, which would include some of the
other requests:

Integrate THINK C and THINK Pascal into 1 environment - ideally with some
generalization so this could be done with other tools, like Rez and ResEdit.

Do this in such a way as to maintain the ease of use of THINK. Now that
doesn't sound so easy ...
-- 
Philip Machanick
philip@pescadero.stanford.edu

francis@arthur.uchicago.edu (Francis Stracke) (09/27/90)

In article <1667@uvm-gen.UUCP> emerson@uvm-gen.UUCP (Tree,,,) writes:
>From article <4251@husc6.harvard.edu>, by siegel@endor.uucp (Rich Siegel):
>> Does anyone have any wishes for THINK Pascal? Editor, Compiler, Debugger
>> feature requests? Annoyances? Any sort of commentary?
>
>I would find bracket matching a real plus in the editor.  I know there is
>an INIT that gives this capability to THINK C, but there is nothing out there
>for THINK Pascal.

Just what do you mean by brackets? begin/end? It's got it; the indentation
works out automatically.

Pascal's brackets, the comments, would be much nicer if they didn't have to
be one line apiece!

boerned@mist.CS.ORST.EDU (Dan Boerner) (09/27/90)

Wish List:
	Allow adding of multiple files to the project file. This is
	a big one when you have to recreate a project file that has been
	corrupted during development.

	Allow selecting and dragging of multiple files in the project window.
	(I had to integrate a project with over 100 units and adding new
	units in the correct place took forever, Add to project...Drag
	with autoscroll....Add to project...Drag with autoscroll...)

	SPEEDING UP BUG CATCHING	
	Precompiled "uses" similar to the precompiled headers option in THC
	Catching one syntax bug at a time for a large file with many uses
	means watching the compiler load the uses over and over and over
	again.  Is there a way to eliminate this?

	RSRC EDITING FROM WITHIN THP
	I have to disagree with an earlier suggestion to include some rsrc
	editing features to the environment for the following reasons:
	1. A few is never enough.  The small set of rsrcs will never be 
	   adequate and cause frustration when after editing STR#s in
	   the environment you need to edit MENUs and have to leave it.
	2. Resource editors are nortoriously hard to write, we had
	   to write one for a project I was on and it ended up being
	   a bad idea.  Apple is always adding new rsrc types and you 
	   end up just reinventing the wheel.  Look at how long it has
	   taken apple to get ResEdit 2.0 out.
	3. Under MF I have no trouble quickly switching back and forth
	   between THP and ResEdit.
	4. Do what your good at.  Since were moving toward smaller programs
	   that work together (mini-apps) and away from swiss-army knife
	   programs I think it makes more sense to move toward a day when
	   a program like THP can use AppleEvents to send a msg to ResEdit
	   saying "Hey, edit this rsrc".  


	Another vote for:
		Exporting with styles (bolding) intact.
		Split Screen Editor window.
		Line wrapping option
		Debugger Conditional breakpoints

That's all for now, thanks for asking...

Dan Boerner
PhD Student @ Oregon State University
boerned@mist.cs.orst.edu

czychi@ethz.UUCP (Gary Czychi) (09/27/90)

In article <4251@husc6.harvard.edu> siegel@endor.UUCP (Rich Siegel) writes:
>Does anyone have any wishes for THINK Pascal? Editor, Compiler, Debugger
>feature requests? Annoyances? Any sort of commentary?
>
> Rich Siegel   Software Engineer       Symantec Languages Group
> Internet: siegel@endor.harvard.edu    UUCP: ..harvard!endor!siegel


Great! The best programming environment in the world will even get better!
Thanks a lot for the superb TP and your devotion, Rich.

My favorites would be:

1) #> Pascal's brackets, the comments, would be much nicer if they didn't
   #> have to be one line apiece!
I'll second that. It's quite difficult to write (and adjust) several lines
of comment. And I write lots of comments.


2) Is it somehow possible to have several statements on one line? In my
current project I have hundreds of short assignments in several units. And
it's quite annoying to scroll to the code I want, because only one small
column of code takes up several pages.
Don't get me wrong, I like the one-statement-per-line approach, *but* there
should be an exception to that rule.


3) Can you somehow save the the window locations of all units? And the Text
and Drawing windows as well? I, for instance have all the 'help' windows on
my small SE screen and the code windows on my 13" screen.


4) Please, please enhance the Object Oriented Programming Manual. It's not
bad, it's only far to short! I have more questions now than I had before I
read it (very carefully).
And please give us a list of books which deal with the TCL. I want to learn
it, but not by trial and error...
Last but not least, why don't you bring out a tutorial like JEP for the TCL?
This is what I really need. And I would love to be a tester for it...


That's my $0.02. Thank's a lot for the opportunity.


Gary


        Gary T. Czychi             University of St.Gallen, Switzerland
	  
                czychi@csghsg52.BITNET               (preferred)
                czychi@bernina.ethz.ch.UUCP          (CZYCHI@ETHZ.uucp)

		        Tel.: --41 / 71 / 57 17 22

sund@tde.lth.se (Lars Sundstr|m) (09/27/90)

In article <PHILS.90Sep25181555@chaos.cs.brandeis.edu> phils@chaos.cs.brandeis.edu (Phil Shapiro) writes:

   They can, albeit in a limited fashion.  Libraries built in Think C can
   be added directly to Think Pascal projects.  Also, libraries built
   from Think Pascal can be converted with oConv into projects.  You have
   to convince oConv that the library is really a MPW .o file, though, so
   you'll have to change the file's creator and its name.

	   -phil shapiro, symantec tech support
   --
   Phil Shapiro
   phils@chaos.cs.brandeis.edu


Try using db_Vista object code from RAIMA in Think Pascal. They seem
to have used some strange options in THINK C which makes THINK Pascal to
complain about some unknown resources.


/Lars Sundstroem



--
+---------------------------------------------------------------------+
| Lars Sundstrom, Lund University, Department of Applied Electronics, |
| Box 118, S-221 00 Lund, Sweden Phone: +46-46121598 Fax:+46-46129948 |
| Internet: sund@tde.lth.se                                           |
+---------------------------------------------------------------------+

rcb@ccpv1.cc.ncsu.edu (Randy Buckland) (09/27/90)

francis@arthur.uchicago.edu (Francis Stracke) writes:
>About pretty-printing: mostly I like it.  But the horizontal/vertical
>dichotomy in listing variables (and unit names?) has got to go.  I prefer
>to have a horizontal list, for the most part; but, when it gets over one
>line, it gets to be a pain.  (Especially with the TCL--everybody's going to
>be having HUGE unit lists, no?)  I'd like to be able to do something to
>say "hey, break the list here."

This can be done, it's just not pretty. Just insert a comment in the long
list. This will cause a line break.

--
Randy Buckland
North Carolina State University
randy@ncsu.edu (919) 737-2517

liberte@yoyodyne.ncsa.uiuc.edu (09/28/90)

Here is a suggestion that may satisfy all camps regarding pretty-printing.
And it may be easy to implement, guessing at what TP is doing internally.

There is already an option to not pretty-print, but then you have to
do *all* the formatting yourself.  How about a little help from the
environment, but not too much.  With pretty-printing turned off, one
additional key command (cmd-i?) would indent just the current line
relative to previous lines.  So the editor would go through all the
same contortions it does now to pretty-print, but nothing else would
be changed - only the current line would be indented.

Another command (enter?) would start a new line (like return), and indent
to the right column.  This would allow you to easily combine multiple
statements per line, or break lists where you want.

Highlighting erroneous text should be an independent option whether or
not pretty-printing is active.  I dont recall whether it is now.

I am currently using MPW C, and am not a happy camper.  In addition
to importing more THINK Pascal features to THINK C, more compatibility
with MPW languages and libraries, and MacApp is always needed.

Someone mentioned using Pascal libraries with C and C libraries with
Pascal.  Years ago, there were problems with *incompatible* entry
points (with the same names) between Pascal and C libraries.  I hope
the situation will improve, but I imagine it is a lower priority
since how many people mix languages?

Dan LaLiberte
National Center for Supercomputing Applications
liberte@ncsa.uiuc.edu

rcbaem@rw6.urc.tue.nl (pooh 'Ernst' Mulder) (09/28/90)

ANOTHER (oops capslock!) another feature I would like to see in the debugger
(It isn't in the 2.0 version debugger) is to be able  to stop execution
when a certain variable reaches a certain _value_.

This would save a lot of code I write every time to stop my program when a
variable reaches the value with which I want to start debugging.

pooh

finnegan@dhw68k.cts.com (Greg Finnegan) (09/30/90)

Minor (nit-picky) things I'd like:

Don't clobber the filename in the status box when compiling (the
phrase "Updating Dorfus.proj..."). Why don't you use the second
line of the status box to indicate that the project is being updated?

I'd like an option in the Project type dialog that sets what I can
do to the project - build, go, build as application (I keep two
projects, or more, around for each application.  I use one in the
environment and  the others for various stand alone applications.  I
really hate it when I'm in one of me 'build' projects and I
absent-mindedly hit cmd-b and it proceeds to rebuild my entire
project while I'm eating lunch. Arghh!)

Greg.



-- 

uucp: ...{spsd,zardoz,felix}!dhw68k!finnegan
InterNet: finnegan@dhw68k.cts.com
--------------------------------------------

tim@hoptoad.uucp (Tim Maroney) (10/01/90)

In article <4251@husc6.harvard.edu> siegel@endor.UUCP (Rich Siegel) writes:
>Does anyone have any wishes for THINK Pascal? Editor, Compiler, Debugger
>feature requests? Annoyances? Any sort of commentary?

Thanks for asking.  I find myself wrestling for all too many hours a
week with environmental issues that have nothing to do with our code.
Most of my suggestions bear on the issues of reliability and general
programmer-friendliness rather than new features.

THINK Pascal is friendly in some ways.  In other ways it expresses a
false economy which focuses too heavily on raw compile-link-run
turnaround time.  If it takes a programmer an hour to remedy a glitch
in the environment which results from the high-speed turnaround, then
things are actually much slower.  If it takes a programmer four hours
to find a bug which a more error-checking compiler would have turned
up at compile time, then once again, the gain in actual programming
speed is negative.

(1)  Incorruptible project files.  Completely refresh the heap from the
project file after every run.  Make sure the resource map and all other
data structures are never written back to the file after having been
open concurrently with software execution.  Checksum or CRC all
critical resources and data structures to allow an algorithmic check
for corruption if it creeps through.

(2) Compatibility with 32-bit Quickdraw.  Breakpoints crash into the
machine debugger (MacsBug) with 32-bit Quickdraw in 32-bit mode if the
FPU code generation is activted.  Crashes are less frequent with the
FPU code generation disabled, but clicking on a LightsBug variable
in 32-bit mode causes a psychedelic monochrome animation sequence,
followed about thirty seconds later by the realization that nothing
else happened in all that time -- the variable did not open.

(3) MacApp compatibility.  Any change to TWindow.IRes will cause a
fairly reliable crash and project file corruption when run under the
environment.  I reported this months ago and nothing has been done.
now it not only causes my floating windows code to crash when run under
the debugging environment, it does the same with the new official
MacApp floating windows code.  Later, I attempted to add a flag telling
TWindow not to EraseRect on a DrawContents, a very minimal change, and
I got a permanently trashed project file every time I ran it.  (By
"permanently trashed" I mean Remove Objects did not suffice to undo the
corruption.)  The symptoms were very similar to those under both
versions of the floating windows code, and the only common factor was
that a (clearly harmless, flag-setting) change was made to
TWindow.IRes.

(4) Syntax compatibility with MPW Pascal.  This will eliminate most of
the problems with MacApp.  Recently an automatic bug fix correction
script was made available by Apple; it could not be applied to THINK
Pascal MacApp because of the laborious code conversion process.  Add
the $I directive, compatible assumptions about type residency in units
and unit dependencies, and any other syntactic features which exist in
MPW Pascal.

(5) Speed up the debugger.  I'm sure part of the blame rests on the
MacApp debugger, but using both LightsBug and the MacApp debugger, code
execution time is excruciatingly long -- sometimes an order of
magnitude slower.  This is another false economy.

(6) Add an optional optimizer phase.  MPW Pascal produces register
optimized code that is both significantly faster (10%+) and smaller
(because all the stack-relative offsets disappear from most code).
Making it optional means it need not slow down the ordinary compile-
link-run cycle.  Note:  If the system becomes compatible with MPW
Pascal, then this is less important, since MPW can be used as a
production code building phase.

(7) Improve RAM usage.  Run the code either as a separate MultiFinder
process or using MultiFinder temporary memory.  Having to allocate RAM
permanently to the application when megabytes of it are only useful
during execution of the user code has a severely negative impact on the
usefulness of MultiFinder.  It becomes difficult to use THINK Pascal
together with other programmer tools such as ResEdit, HyperCard (for
documentation) and MPW (for resource and/or project management).

(8) Check for unsafe VAR parameters, unsafe WITH statements, and
uninitialized variable accesses.  A few seconds per file are well worth
the hours of debugging time it sometimes takes to find these errors.
-- 
Tim Maroney, Mac Software Consultant, sun!hoptoad!tim, tim@toad.com

"Satanic is merely the name they give to the behavior of those who would
 disrupt the orderly way in which men want to live."
    -- Gabrielle, THE VAMPIRE LESTAT, Anne Rice

emerson@uvm-gen.UUCP (Tree,,,) (10/01/90)

From article <1990Sep26.233518.18704@midway.uchicago.edu>,
by francis@arthur.uchicago.edu (Francis Stracke):
> Just what do you mean by brackets? begin/end? It's got it; the indentation
> works out automatically.
> 
> Pascal's brackets, the comments, would be much nicer if they didn't have to
> be one line apiece!
Sorry, perhaps I should have said paren matching.  While not as neccessary
in Pascal as it is in C, it would be a welcome (at least for me) addition
to the editor.

Tree

+----------------------------------------------------------------------+
| The three most dangerous things in the   |                           |
| world are a programmer with a soldering  | Tom Emerson               |
| iron, a hardware guy with a software     | emerson@hal.uvm.edu       |
| patch, and a user with an idea.          |                           |
+----------------------------------------------------------------------+

tim@efi.com (Tim Maroney) (10/02/90)

In article <12142@crdgw1.crd.ge.com> weesh@grymoire.crd.ge.com (Darweesh)
writes:
>>   It would be nice if Think Pascal and Think C could share object code.

In article <PHILS.90Sep25181555@chaos.cs.brandeis.edu>
phils@chaos.cs.brandeis.edu (Phil Shapiro) writes:
>They can, albeit in a limited fashion.  Libraries built in Think C can
>be added directly to Think Pascal projects.

However, it requires source code changes in the THINK code.  It is not
possible to include unmodified libraries from THINK C.

b_murphy@fennel.cc.uwa.oz.au (10/02/90)

> since how many people mix languages?

I do, I do... Try: C + Pascal + Modula-2. What do you get?
Something someone wrote sometime for somebody. (What is documentation? :-)

-- 
-o (short for On-no)

     ()/)/)()  can be  r e a c h e d  at  B_MURPHY@VAXA.UWA.OZ.AU
_____________________________________________________________________
        The net never sleeps, come to think of it, do I ever?
---->  Thinking is dangerous, subversive and leads you astray.  <----

Lewis_P@cc.curtin.edu.au (Peter Lewis) (10/02/90)

Hi All,
   Here is my 5c (Australia no longer produces 2c coins!) on THINK Pascal
bugs and wishes -

BUGS:

If (from the finder) you select project fred.proj and its file fred.p,
and then double-click them, TP may open fred.p twice (if re-open 
windows is selected, and fred.p was open the last time you used fred.proj),
allowing both files to be edited and independantly saved leading to
lost changes.

If a const string s is defined, then s[i] is undefined if range 
checking is on, ie -
   {$R+}
   const
      s='Hello'
   begin
     for i:=1 to 5 do
       writeln(s[i])   { this will not in general print an H e l l o }
   end.

WISHES:

Command-Option-W & S should work (should Close All and Save All resp)
   (and they should work irrespective of the CAPS lock key unlike
   the finders treatment of command-option-W!)

Option-double-click on internal (local) procedures should bring up
   there definition, and Option-double-click on a unit name in a uses
   list should open (or bring to the front) the unit
   
The project file should be automatically overwritten when the 
   Build Application menu item is chosen (this could be an option like
   Auto Save).  That is, it should not even ask you for the name.  The
   output application name (and folder) could be set in the Set Project
   Type dialog box.

Have Build (or a seperate command) optionally generate a window of 
possible errors, including but not limitted to -
   Functions that do not assign return values,
   Variables, constants, types that are not used within their context
      (Note: both of these can be done by having a boolean in the symbol
       table, at little cost in compile speed)

Stops Out should cause the editor to actually use the left centimetre of
the window

REITERATION:

   THINK Pascal is a wonderful environment.  If it could read Net News,
send & receive Email, and edit resources, I could live there!
   You can add my vote for at least half of the other suggestions!

See ya,
   Peter.

Disclaimer:Curtin & I have an agreement:Neither of us listen to either of us.
*-------+---------+---------+---------+---------+---------+---------+-------*
Internet: Lewis_P@cc.curtin.edu.au              I Peter Lewis
ACSnet: Lewis_P@cc.cut.oz.au                    I NCRPDA, Curtin University
Bitnet: Lewis_P%cc.curtin.edu.au@cunyvm.bitnet  I GPO Box U1987
UUCP: uunet!munnari.oz!cc.curtin.edu.au!Lewis_P I Perth, WA, 6001, AUSTRALIA

dw2x+@andrew.cmu.edu (Duane T. Williams) (10/06/90)

Faster processing of Uses, i.e., precompiled headers.
Currently, THINK Pascal is SLOW, and it's primarily due
to the long time it takes to load TCL.  If THINK Pascal
were to look for and load TCL.fast if it existed and was
newer than TCL.p then things would be much faster.

monching@quiche.cs.mcgill.ca (Patrick WONG) (10/07/90)

I wouldn't mind having a way of getting the names of the functions and 
procedures into the clip board or into a text file.  Is there any way
I can do it now?


-- 
patrick wong                   | McGill University           
monching@quiche.cs.mcgill.ca   | School of Computer Science  
                               | Montreal, Quebec