Mar 88 Letters
Volume Number: | | 4
|
Issue Number: | | 3
|
Column Tag: | | Letters
|
How Do You 'Float' a Window?
By David E. Smith, Editor & Publisher, MacTutor
Rotating Bitmaps
Peter Adamson
Aix-en-Provence, France
Does anyone out there have an algorithm for rotating bitmaps? Can I use the resource manager by more than one user to open and modify a single resource file over AppleTalk? I have a classified ad program where each ad is a resource of type CLAD. I want to be able to type ads simultaneously from several Macs connected to a single file. Will calls like addResourse and unique I.D. work? I want to avoid getting into trouble later on.
[For a good discussion of how to rotate bitmaps, see Bob Dennys article in The Best of MacTutor, Volume 1, on page 210 titled PICT Rotation with Copybits from MacTutor, Vol. 1, No. 12. It is my understanding that the resource fork of a file cannot be opened for writing except by a single application. Therefore, you cannot write to a resource fork and be sharable by several Macs. So what you want to do cannot be done with resources. -Ed]
Spreadsheet / Word Features
Steve Millina
In the January issue 1988 letter column, Cary Maraish asked how to do spreadsheet-type windows fairly easily . I just did a one-page spreadsheet, and I found that the list manager does a great job. Set up a rectangle for the cells, and feed LInit the number of rows and columns, but FALSE for both scroll bars. Since this was a true spreadsheet, actual text entry was through a text edit box at the top of the page, with the text being transferred to the list with LSetCell only when the user indicated entry was complete. For convenience, I used a dialog window so that the text edit stuff was taken care of directly. You do need to bear in mind that the default text list definition proc justifies left , so the programmer has to insert the appropriate number of spaces in front of the numbers to make them line up.
If you really want entry to be made at the selection, you might try a Dialog window with a grid of edit text boxes. (I tried something similar with a grid of stat text boxes and it worked fine).
Since Im already writing, I want to take issue with your evaluation of WriteNow. I tried desperately to like WriteNow for many of the reasons you mention, but in the end I went back to Word 3. The most important determinant was the fact that setting line spacing was a slow and painful process, because I use lots of single spaced paragraphs (for examples and quotations) in the midst of double spaced text and the switch took forever. So does setting the ruler.
I even tried macros. At the time I didnt have Quickkeys but I did have Touch-n-Go, which is usually great. I tried to make it move the indent cursor. Fat chance! WriteNow doesnt look at the mousedown and mouseup events once it knows whats going on and the indent moves sort of randomly. I guess it reads the mouse button directly but that is not the kind of programming you should commend
Word, on the other hand, may be mammoth, and may have any amount of code wasted on oddities (such as outlining that only an IBM PC could love) but a lot of the add-on touches are incredibly useful. Styles lead the list. Also high is the command-= calculator that calculates whatever is selected and makes the answer directly available for pasting. I know you can do the same thing with some calculator DAs but the difference in speed and convenience is simply amazing. In a lot of respects, Microsoft did what good programmers are supposed to do, it found out how its targeted users work.
Good Software Design
S. C. Kim Hunter
Laguna Hills, CA
The MacTutor editorial in the Dec 87 issue of MacTutor addressed the issue of multiple software tools and the Macintosh interface. Trying to put all the tools in one application tends to defeat the object of MultiFinder. So we see the Mac programming world working at cross purposes: Apple system folk trying to give us instant access to lots of tools, and developers trying to cram all the tools into their specific rendition - then groaning because they have to make more for somebody elses tools.
Basically, all the things ever embodied in either hardware or software - at least for the 25 years Ive used computers - are stumbling blocks placed in the way of folk that need to do a job. First you have to configure the hardware, then the software, then read the manuals, then teach your hands to process keys in the right order and with multiple combinations. Eventually you figure out how to make the computer do what it was that you wanted to do when you decided to use a computer. You know what you want - you have to figure out how to make the computer understand that.
Ive talked to hundreds of folk using FileMaker - some of the dumbest you can imagine regarding knowledge of computers. I am sure that anyone who reads MacTutor would agree that someone who cant figure out how to use FileMaker has got to be among the dumbest of the dumb. FileMaker has the best user interface of any software Ive ever used, and Nashoba purposely works very hard to avoid making FileMaker too complex, probably the main reason it isnt, and may never be, a relational product - hopefully, theyll come up with a better way.
But these dumb people I talk to are not deadbeats. Most have very successful businesses in their fields - doctors, lawyers, butchers, bakers, and bee keepers. They know exactly what they want, but they dont spend endless hours reading Inside Macintosh or MacTutor. So they just see software and hardware as stumbling blocks in the way of what they want to do. Isnt this the essence of the Macintosh User Interface Guidelines?
Those of us who do take the time to read Inside Macintosh and MacTutor have an unwritten obligation to all those other folk. We can program the most superb software you could ever imagine. But if folk cant see how to make it do what they want, then it is just a stumbling block in their way. At the basic level, all keystroke combinations (more than one key down at the same time) are just stumbling blocks - UNLESS this key combination is visible on the screen OR it is a common standard that works with EVERY software package. So all those programmers that spend hours figuring out esoteric key combinations for every possible function in their product are really counterproductive to society - save for a few power users. [Right on! -Ed]
Even worse are the programmers that create key combinations that are totally hidden from visible view - even the venerable MacPaint is guilty of this. And the IBM-PC is the epitome of stumbling blocks - no need to belabor that point with MacTutor readers.
I just delivered an MS-DOS program to a client. He called and said I just put in the disk, and ran the program, and it worked. Thats the first time that ever happened. So the Mac is having an impact beyond its scope.
But if the Mac programming world isnt careful, were going to find ourselves, like the Wall Street stock traders, back at square one. Weve done a phenomenal job. But now we have to face Gasseés Open Mac. He made it for us. Its here (almost).
How are we going to face it? Was the day of the Mac II introduction a black day for all the dumb folk? Are we going to emulate our PC compatriates by requiring users to spend several days reading manual sections on How to configure the software to match endless combinations of hardware? Will we do the same job on our users as the Apple II folk have done? Is the MultiFinder just a poor excuse for UNIX and will it degenerate to an access path to hundreds of universal tools called cc, xf, vd, grep, or barf?
Gasseé opened the Mac. Odds are that the software industry will close it by burying its interface in complexity. If you ever have to post a dialog that asks a user to tell you anything about the hardware configuration your software is running on, you are slipping into the abyss that was depicted by the ill-fated Apple Super Bowl commercial of 1985.
Software folk must demand that the hardware folk provide them signature bytes with which they can identify the hardware. It will take a monumental effort to keep all of us informed about all the various hardware - a task that no one is willing to pay for. Hardware folk live in their own world. And most of them have been producing PC boards. Unless we stomp on them hard RIGHT NOW (Is it too late?), we have no one to blame but ourselves, and we will watch the Macintosh User Interface Guidelines surf into the abyss with us on the add-on boards. And the dumb folk will find some other way to get their jobs done. (Did I hear someone say Jobs?)
Better Region Idea
Ted Cohn
San Jose, CA
I loved your December Issue! I was particularly interested in seeing the article on Tear-off Menus, since I wrote them for the Radius Two Page Display that Radius released in November. Radius version actually modifies the Macintosh operating system so that one can tear off the menus of any application. The menus can then be selected from at any time - and all transparent to the application and MultiFinder.
I would like to contribute to the Mac Community and your magazine. Would you be interested in an article about Quickdraw regions? I havent read enough of your back issues to know whether or not you printed an article about them.
I first became very interested in regions when I needed to create abstract regions for a desk accessory I was thinking of writing. The standard way of creating regions is by executing a sequence of graphics commands through programming. However, this method is much too cumbersome when dealing with irregular objects. I need an easy way to convert a complex picture (or bitmap) from MacPaint into a QuickDraw region where all black pixels would be considered inside the region. I wrote an assembly language routine called MakeRgn to do just this. I have found no routine in the Macintosh ToolBox or in print which does this and I believe it would interest your readers. (I saw an article in Byte magazine last year but felt it could have explained regions better; plus its edge-traversal algorithm was faulty because it missed holes in the bitmaps by traversing only the exterior of objects.)
[Sounds like a great article! Send it in ASAP! -Ed]
Pop-Up Menu is Backwards!
Ted C. Johnson
Santa Clara, CA
Page 13 of the January 1988 issue of MacTutor (MacTutor welcomes letters. I will personally try to answer all of them.) is the reason why I decided to go ahead and write this letter. Its such a bummer when you write someone and get no response!
I would like to offer some constructive criticism concerning the Apple user interface. I think that the method of selecting a document (from SFGetFile() dialog box) which isnt in the current folder can be made more intuitive.
If the document isnt in the current folder, the user can get a menu listing of the folders between the current folder and the root folder (which is usually the DeskTop) by pressing the folder icon at the top of the dialog box. This is called a Pop-Up menu as opposed to a Pull-Down or hierarchical menu. I think that this list is upside down, because the folders which are above the current folder appear below the current folder in the menu! i.e. in the example below, the Libraries folder is above the Library Sources folder, yet the libraries folder appears below the Library Sources folder in the pop-up menu.
Either method gets the job done, but I think my way is a bit more intuitive.
Big Arrays for C
Jack McCrae
Albuquerque, NM
The enclosed program would probably be appropriate for the inclusion in the letters section of your most excellent magazine. At least I think its kind of neat (my program that is). And if it wouldnt be too much trouble would you please send me a copy of of your authors kit.
Two limitations I have run into while programming in the C language are the 32k byte segmentation limit, and Cs inability to pass variable sized multi-dimensional arrays to subroutines. I have found a simple solution to both of these problems. Arrays constructed according to the source code which follows act like normally declared arrays; no special functions are needed to assign into, or read from these arrays.
The following example program illustrates a three dimensional case. It can be easily modified for two dimensions, or extended for four or more. The cost of this method is a small amount of extra space which is required for one or more arrays of pointers, and an extra initialization step to create these pointers. As an added bonus, rows of these arrays may be rearranged by simply rearranging the pointers to them, rather than all of their elements themselves.
To use this method to create an array that takes up more than 32k bytes of memory, delete references to the variable arrayspaceand replace with the line
intermediate[i][j]=arrayspace[i][j;
with
intermedate[i][j]=malloc(sizeof(double)*kdemension);
where kdemension is the number of elements in the outermost dimension.
This swaps the 32k total limit for an array for a 32k limit on each dimension.
The following compiled with either Megamax C, v 2.01b. or Lightspeed C v 2.13.
#include<stdio.h>
extern long tickcount();
long t;
usearray(array)
double**array[];
{
printf(array[0][0][0]=%f/n,array[0][0][0]);
printf(array[1][2][3]=%f/n,array[1][2][3]);
printf(array[2][3][4]=%f/n,array[2][3][4]);
printf(array[9][9][9]=%f/n,array[9][9][9]);
/*note that the above arrays appear to be accesed normally. Had a pointer
to a normal array (i.e. arrayspace[]) been passed instead of **array[]
it would have been necessary to use a construction like arrayspace[i*100=j*10=k]
to access array elements.
*/
}
/*this routine sets up array to index elements of arrayspce by double
indirection */
initarray(arrayspace,intermediate,array)
double arrayspace[10][10][10];
double *intermediate[10][10];
double **array[10];
{
int i,j,k;
for(i=0;j<10;j++){
array[i]=intermediate[i];
for(j=0;j<10;j++){
intermediate[i][j]=arrayspace[i][j];
for(k=0;k<10;k++)
arrayspace[i][j][k]=100*i+10*j+k;
}
}
}
main(){
int i,j,k;
double arrayspace[10][10][10];
double *intermediate[10][10];
double **array[10];
initarray(arrayspace,intermediate, array);
asearray(array);
while(!button());
}
Higher Printing Authority
John Bartleson
Spokane, WA
First let me thank you for producing such a useful journal. I read it cover-to-cover every month and have found many useful items in its pages. MacTutor fills a unique place in the evolution of our favorite computer.
I am thinking of writing an article for MacTutor, but I need your advice on whether you would be interested in the topic. Here it is:
As I began to program the Mac, I had to tackle the problem of writing printing code. I eventually learned how to do it, but I think that the effort necessary to do it right was too high. There are several reasons for this. First, like much of the Macintosh system software, the Printing Manager is a relatively low-level interface to a process much different from that used on previous computers. Second, the Printing Manager as documented in Inside Macintosh is vague on many topics and needs to be rewritten. Finally, there is very little non-Apple documentation dealing with how to use the Printing Manager. The only documentation Ive found is in Volume II of Dan Westons The Complete Book of Assembly Language Programming. This has a good chapter on printing but it leaves out some of the fine points necessary for commercial - grade programming, such as error recovery.
Programming for Macintosh is more complex than is readily apparent from Inside Macintosh. You have to take care of draft copy looping, max pages in spool file looping, print-idle procedures, print traps vs. direct calls, etc. On top of this, you have to provide robust error checking that can handle both user cancellation, which may occur at any time, and Printing Manager errors.
I found that I was wrestling with these problems every time I wrote Printing code for a program. I wanted a higher - level interface to the Printing Manager, one that would be easier to use than the existing interface, but one that wouldnt limit me in getting any desired image on the page. This led led me to write the Generic Printing Manager, GenPrint.
GenPrint is a single subroutine that communicates with your calling program through a parameter block named GenPrBlk. GenPrBlk contains several flags and handles, and in addition it contains pointers to several co-routines. Co-routines are procedures within your calling program that do your specific print processing, GenPrint calls these procedures at appropriate times during printing. There are four co-routines, but the typical program will use only two. For example, you must provide a PrintPage co-routine to image the pages, but a JobDialog co-routine is needed only if you have a custom PrJobDialog you want to execute. Heres an example of typical use in pascal:
PROCEDURE MyPrint {Demo of GenPrint call};
VAR ParamBlk:GenPrBlk;
{other variables owned by MyPrint would go here these can be accessed
within the co-routines.
PROCEDURE GenPrint (Blk: GenPrBlk) ; EXTERNAL;
PROCEDURE DoInitCopy;
{Initialize pointers etc. to print a copy}
END; {DoInitCopy}
PROCEDURE DoPrintPage;
{ Draw a page in the printing GrafPort }
END; {DoPrintPage}
BEGIN {MyPrint}
{ Set the co-routine addresses in ParamBlk }.
ParamBlk.JobDialog :=0;
ParamBlk.SpSpace :=0;
ParamBlk.InitCopy := @DoInitCopy;
ParamBlk.PrintPage := @DoPrintPage;
|
GenPrint (ParamBlk) ;
|
END; {MyPrint}
GenPrint is written in MPW Assembler, which is necessary so that it can set up the callers A6 stack frame to allow the co-routines to access their enclosing procedures variables. This means it can be called only from assembler or from languages (like MPW Pascal and C) that allow external assembler subroutines.
GenPrint greatly reduces the amount of coding necessary to do Macintosh printing. As an example, A commercial - class subroutine to print any Text Edit record, with support for fixed-space tabs, can be done in about 40 pascal statements.
While this technique may not be as exciting as an article on a new 256K ROM feature, I suspect a lot of people who havent figured printing out would find it useful. And nothing on this topic has appeared before in MacTutor.
[Sounds great. Looking forward to seeing this. -Ed]
How to Keep The Window on Top
Kenrick Chin
Ontario, Canada
I have an old problem that Im sure has been dealt with by now. I am having difficulty creating a tools window that always stays in front of the selected window, like they have done in FullPaint, PageMaker etc.
The global variable GhostWindow does what Inside Macintosh says it is supposed to do, but not what I want it to do. Any call to DragWindow( ), GrowWindow( ) etc. will select an underlying window and bring it to the front on top of the tools window which is not what I want. [Dont know how to do this. Maybe one of our readers will respond. The next author also wants to know this.-Ed]
How Do You Float a Window?
Ajay Nath
Just a quick note about your Christmas issue. It looked real slick! The articles on Tear off menus and the printer driver were good but had a few flaws.
The Tear off menu article gave a good explanation of how to Tear off the menu, but the real feature of these menus in (Hypercard and MacPaint) is that they dont get sent behind other windows and that the application windows behind them stay hi-lighted. ( i.e. in SuperPaint or MacPaint 2.0) clicking on a window brings it forward but not in front of the tool or pattern windows, this involves not calling SelectWindow and moving and Hi-lighting windows yourself. Movement must be done by the app because DragWindow calls SelectWindow which would bring a dragged window in front of a Tool or Pattern window. What we need is really an article (are you listening Bill Atkinson) on how to float windows.
There also may be a bug in the DrvtStorage ( ) procedure in the printer driver code. The code looks like
asm {
MOVE #2,D0
ASL.L #2,D0
MOVE uTableBase
ADDA D0,A0
MOVE.L (A0), own DctlEntry
}
this could be done like
asm {
MOVE.L uTableBase, A0
MOVE.L 8(A0), ourDCTlEntry
}
and indeed the former code is incorrect because the first instruction moves a 2 into the lower word of D0 and shifts to multiply it by 4 to get 8( a MOVEQ #8,D0 or MOVE.L #8,D0 is better), but what if the hiword of D0 doesnt=0? Then the shift doesnt give you an 8 in D0! Perhaps this works because LS C guarantees 0L in D0, this doesnt seem likely.
Also, the last time I Used SuperPaint it had this bug, select the rectangle tool and drag from a point down and to the right, then put the cross exactly on the bottom right of this rectangle and drag up to its top left, the rectangles should match but dont! Even MacPaint 1.0 didnt have this silly bug!
Ive written a very simple MacDraw-like application in LS C, its a bit long, but it can read and write files, scrolls, prints, uses the 38 standard MacPatterns, has a custom MDEF like MacDraw(MDEF written in Assembly) and is a good example of how to do this stuff. Its a bit lengthy though, shall I write it up and send it to you? [Yes, by all means! -Ed]
HyperDrive Problems
R.A. Yaworsky
Yukon, Canada
I recently attempted to run MultiFinder on my Mac+ with a HyperDrive 2000 upgrade. The HyperDrive Manager, I suspect, does not conform to the proper way of doing things and cannot open the hard drives drawers. The Manager handles access to the drawers through a desk accessory, but under MultiFinder, strange things occur, leading to a nasty crash and a corruption of some of the drawer information on my drive. The end result is Ive lost access to some of my drawers. My advice to users of any HyperDrive is to be very wary.
The local Apple dealer, who is also a General Computer (HyperDrive) dealer, is not aware of any HyperDrive Manager or System upgrades (Im Using V3R1, about 1 year old), but then again, we havent even officially received MultiFinder up in Canada yet. I would hope General Computer can release a better behaving upgrade. [My advice is to dump the HyperDrive and get a normal scsi drive like Jasmine or DataFrame. -Ed]
LS Pascal Concerns
Rob Terrell
Blacksburg, VA
I finally broke down and decided to write you guys. First, let me thank you for the most helpful Mac programming resource Ive found. I got my start with Inside Macintosh phone book edition, but it wasnt until I bought every back issue of MacTutor at the Boston show a couple of years ago and read them on the plane home home until I became semi-confident in what I am doing.
Right now I feel it necessary to complain a little. Im using Lightspeed Pascal here at Virginia Tech on my Mac+ -- CS majors got a price on Mac II system that Im sure Apple lost my money on, but I am not a CS major --and I can say without reservations that Lightspeed is the best and worst Pascal implementation Ive ever used on the Mac.
I mean, the debugging is fantastic. But theres so much that they try to do for you -- the init calls at the start, for example. Almost everyone today passes a procedure with ExitToShell to InitDialogs. Lightspeed doesnt do this. What happens when you get a bomb running you program? You might get a courteous Lightspeed error message, or you may get a with no recourse but to reboot. [Im sure you are aware that you do not need to use the LS init sequence. I regularly call all the inits myself and pass a pointer to InitDialogs. -Ed]
This Program I had to write for CS included a terminal emulator. No problem, right? Just use the Lightspeeds Text window. But look out - how do you clear that screen? How do you set the cursors coordinates? How do you do inverse video? you dont. If you try a InvertRect, it inverts the bits in the draw window, not the text window! [Gotta make your own window. This is Apples fault, not LS. There is no easy text window function built into the Mac. -Ed]
So in addition to a fairly simple but lengthy linked-list program I also had to write my own terminal emulator. I realized this about 1:30 am the night before it was due. The CS dept. was kind enough to give a simple terminal routine (though you had to advance the cursor and put the chars yourself) but it bombed with an address error when I linked it into my code. I decided to write my own rather than attempt to debug someone elses code. I finished fifteen minutes after the deadline.
Now this is just a sample of what burns me about Lightspeed. They make this wonderfully powerful debugging environment, then leave out all the Lisa pascal extensions like exit and halt and stop and claim to be Lisa compatible! They changed the type
keymap=packed array[1..127]of boolean
to an
array[0..3]of longint
How do I scan for keypress? The manual gives no hint. I know I should use GetNextEvent, but IM Vol.1 suggested to check for modifiers keypresses with Getkeys! [Again, no easy way to make a quick and dirty Mac program, and that is not LSs fault. But I do agree that exit is a needed function in LS Pascal! -Ed]
Its little things like this that almost drive me back to Turbo...if not for the observe window, Id still use Turbo against my professors wishes. If I could get more memory and a hard disk, I might even go back to TML. The sad thing is that now Im a registered owner of all these wonderful products. I buy, and I complain, and I go broke. Its good that they all cost under $100 dollars to the student or the APDA member.
Anyway, enough complaining. I am also writing for an Authors kit. I am currently writing a POS system in Hypercard (that will hopefully pay for a hard disk--thanks to your article I may build it myself). I realize that HyperCard is probably too wimpy for coverage by MacTutor, but it sure beats pascal for ease of programming. I took a U.S. map from ClickArt and transferred in US census data stolen off floppies from the Tech library and made a nifty demographics program all in about an hour. Try that in Pascal!
Another area of interest I have is in CD-ROM. I was about to buy a Hitachi CD-ROM when a mac developer told me to wait since a major player whose name started with an A was about to enter the field and break some price barriers. An article on HyperCard would be really nice once this product materializes from vaporware. Perhaps some sort of data link to HyperCard could be written as an XCMD, since HyperCard wont read locked volumes. (Maybe a smart SCSI driver could fool it.) Thanks and keep up the good work!
Dialog Boxes
David Dunham
Goleta, CA
I think Kirk Austin (Vol. 3, No. 12, p.73) has the right idea; about dialogs should be unobtrusive. Unfortunately, his routine prevents multitasking, with or without juggler(er,MultiFinder). It would be better to call SystemTask, to keep DAs multitasking, and GetNextEvent to keep background applications running. (Apple says that Systemtask is redundant under the Multifinder environment, but its easier just to call it than to check your environment.) I also think a key should be able to cancel the about.
while (true) {
SystemTask(); /* keep clock ticking */
if (GetNextEvent(mDownMask | keyDownMask, &event))
break;
}
If you prefer that the click which cancels the about be passed on to the appropriate program (remember the Mac has always multitasked --the user could be clicking in a desk accessory window to activate it), you can use something like the following:
while(!EventAvail(keyDownMask | auto =KeyMask | mDownMask, &Event))
SystemTask();
/*Remove mouseDown if in our window */
if (event. what ==mouseDown){
GlobalToLocal(&event.where);
if (PtInRect(event.where,&window->portRect)){
GetNextEvent (mDownMask,&event); /*swallow event*/
}
}
This code comes from my desk accessories, which have transparent title windows. I call them transparent because you can just start typing or mousing without having to actively cancel the window-- events pass right through.
Impact of HyperTalk
Charles Turner
As nifty as HyperTalk is, I expect that it will noticeably increase the market for MacApp and similar products as new programmers meet the Mac and old programmers get the object orientation. [We would like to hear from MacTutor readers on what impact Hypercard will have on programming. Will people still want to program the Mac? Obviously this question has a great impact on MacTutor and our programming orientation. -Ed]
It Aint Easy in Jamaica
Charles Dyer
Jamaica
Regarding No Fluff Stores: theres one apple dealer in Jamaica, and hes as arrogant as only someone in a monopoly situation could be. No, Hes more arrogant than that; I work for the local power company --we run Harris SCADA boxes, and boy, are they primitive in comparison to a Mac-- and if JPS ever tried half of what the local Apple dealer pulls, thered be a revolution. The nearest thing to No Fluff stores that I know of are Computer Village in Miami--Kendal, actually, about a half an hour south of the airport, less if you dont mind about being pulled over by the cops--and H.I.S. Computermation, in Melbourne, Florida. Melbournes where Harris corporate headquarters is, and also where Harris Controls division hides out from the rest of the world; I spent a lot of time there while Harris was getting our system ready. If youre in southern or central Florida and need a good store, you could do worse.
I got Kronicks MPW and Assembly Language from APDA last month and can endorse Nashs comments completely. before this book, assembler was something I used when I had no choice; now, its actually getting to be semi-fun.
And one last thing: thanks to the fact that the local telephone company has two extremely obnoxious policies: they charge A LOT for long distance calls, and they say that external modems are illegal --note:internal modems are fine, so long as you pay a hefty installation fee, but not external modems, because they rent external modems-- I cant get to the Mousehole directly. Could you increase you coverage a little for those who for one reason or another cant dial in? And regarding that posting Bashing Macworld: be nice to them they dont know any better. Besides their review policy can be made to serve you quite well, once you catch on to the facts noted in by the Psuedohacker. There is a certain hard drive company which shall be nameless-- their lawyers might be better than their engineers--which has had extensive advertising in MacWorld for quite a while, but which had never had one review of their products published anywhere-- at least not anywhere that Id seen and I looked. When contacted over the telephone-- a toll call, toll free numbers dont work outside the U.S. -- they got kinda evasive. A short time after I made the call, I got a new issue of MacWorld, the August issue, I think -- and it was the only first really negative review that I can recall seeing in MacWorld, and it was about one of that companies products! First rule of MacWorld reviews: if they advertise there but have never been reviewed, there might be a reason, so caveat emptor. Second rule: if MacWorld dumps on it, it must the dog of all dogs and this time you cant say you werent warned. If that issue would have arrived a couple of weeks earlier, it might have saved me the cost of a phone call.
More Assembly Please
R.V. Morffi
San Francisco, CA
Just a little note to congratulate you on the Technical magazine for the macintosh. I dont say the best because that would imply that there are are others and you simply have no competition when it comes to the amount and quality of hard technical information content of MacTutor.
I am a professional systems programmer working on Unisys (Borroughs) mainframes. However, when it comes to the Mac Im a novice. But I recently acquired MPW for the Mac and have been playing with its excellent assembler ever since.
I have noticed that beginner assembly articles on MacTutor have become scarce so I would like to contribute a small article describing an MPW skeleton application I wrote that can be the basis for other applications. It handles window events, desk accessories, etc.
If you could use my humble contribution, please send me a writers kit.
Spreadsheet Advice
Greg King
Canada
This is in response to the request by Cary Mariash in the Jan 88 issue of MacTutor for spreadsheet source code. I personally have not yet written a spreadsheet, though I may be forced to in the future, but sample code for such a beast exists. Programming the 68000 - Macintosh assembly language by Edwin Rosenzweig and Harland Harrison from Hayden has as one of its sample programs a very simple spreadsheet called simplecalc. An alternative way of handling cells on the screen is to use the list manager but this way may prove unwieldy for data sets. (I have used the list manager but am in no way an expert on it.)
My only comment to Mr. Mariashs request is why re-invent the wheel? I have written the FFT desk accessory, available on Compuserve, for performing Fast Fourier Transforms on the premise that all I/O will be done via a commercial spreadsheet through the clipboard. I feel that it is more time effective for a researcher to implement his/her custom routines as a desk accessory and build upon the platform provided by the commercial spreadsheet, all you have to do is learn how to write DAs and how to handle the clipboard. This however may be a biased opinion since I am a big fan of desk accessories, I write more desk accessories than applications.
One application that I did write is SpectroPlot, a user extensible data analysis, digital signal processing, and graphics program for large sets of scientific data(>16K data points), specifically digitized spectra. It is capable of exchanging data with commercial spreadsheets through optimal tab delimited data files but currently doesnt offer the user the ability to directly enter or alter data. SpectroPlot only offers minimal processing capabilities as I intend it to be a visual shell that can call custom routines that researchers compile into code resources. this way researchers need not worry about learning how to program the Mac user interface. The funny thing about this concept was that I was working on it before I saw HyperCard.
Anyway enough babbling, I hope Mr. Mariash finds what he needs and wish him success in his endeavors.
Will the Real C Stand Up
Barbara Pollock
Hawthorne, CA
My question is a legal question but I need a little guidance in finding the right place to ask the question. I want to go commercial with a game I have been writing for the last half year. I think C is the language I want to use. My question, Is there a C for the Macintosh that lets a user sell her C program?
My game is a Poker game,complete with screen graphics. I am still working on the subtleties of the game, but the game without added frills is complete. Originally the game was written for a class at UCLA Extension and the class recommended Lisp as the language. At the moment, the game is written in ExperLisp, which does not allow selling any part of the language.
Any suggestions? [Think is running a pretty impressive ad in MacTutor that says Pagemaker was written in LS C with the obvious implication -Ed]
Where is John Mitchell?
Anthony C. Marlowe
West Germany
Could you please tell whats with MacMaster Systems? I Know John Mitchell is supposed to be working for Apple. I was one of the few registered users. It took 3/4 of a year for the first new copy of FEdit+. I ordered version 2.nn sometime in May of this last year and have not heard a word since.
Keep up the great work on your magazine. I agree with you about the concept of a single application designed to do a single task and do it well. I have MPW mainly because of my interest in MacApp and TMLs Modula-2 (which I received quite promptly). I also find the Pascal better than LSP. If you take QUED/M (a great editor), TML Pascal & Linker, Rez and SIJs Debugger, one has a good development system. I run TML Pascal on a Mac+ and am using Rel 2.5 and Wombats comment about 2.5 not curing the problem from June/87? I ran the program with 2.2 and 2.5 on my plus and it ran the way it should.
I am looking for a file management system comparable to c-tree and r-tree from Facom for Pascal and MOdula-2 MPW compatible. TMLs system is not modifiable and lacks the necessary flexibility.
No More MacTutor for Me!
Robert W. Jasinski
Holland,MI
If it is possible, I would appreciate your discontinuing my subscription to MacTutor and refunding the prorated amount applicable to the issues not received yet. I would like to discontinue basically because your magazine is above my head. I was hoping for a source of type-in BASIC programs that I could learn from, but your material is far more advanced than I am able to handle. I am not a computer professional and have never had a formal course in computer science. Im just trying to teach myself a little in my very minimal spare time. The format of your magazine is good, and you should not take this as a statement that your magazine is not worthy. Thank you for your time and trouble. [Suggest you look into Nibble Mac. They feature type-in Basic programs primarily. -Ed]
Standings Article
Noel T. Goldsmith
Australia
Now for a complaint, how long will it be before you publish the rest of Tim Standings program on the SCSI driver. I was so inspired by his articles that I am now the proud owner of a Wren III, which is very fast.
I have not tried the Wren on the Mac II yet, as I am getting a bit sick of reformatting the drive to try different interleaves. (If I believe what I hear the interleave for a II is 1, for an SE is a 2 and for a Plus, 3).
I read Jörg Langowskis article on his SCSI driver, but what about the new Partition Map Entry, (Inside Macintosh V, page 5, in chapter 31 The SCSI Manager) which replaces the Device Partition Map, and will allow a disc to be divided up into separate OS partitions?
I could suggest (I know someone who..) that a person might profit in examining the physical blocks 0 and 1 on a variety of hard disks formatted and initialized by variety of utilities (in the privacy of your own home as Steve Jasik puts it ), and a person could also profit by examining code using ResEdit, and a person could profit even more by reading the information available from manufacturers about their SCSI drives. It is interesting to speculate upon the reasons for Apples and others HD SC Install programs refusal to recognize drives which are not supported by Apple or others (such as Wren III). As you might guess, I know more than I am telling, and look forward to receiving an authors kit. [Tim Standings SCSI driver article will appear about the time Apple releases MacBasic, which is to say never, unless Mr. Standing has a change of heart and publishes it. -Ed]