|
Volume Number: | 6 | |
Issue Number: | 7 | |
Column Tag: | Mousehole Report |
Mac IIfx and MacApp
By Larry Nedry, Mousehole BBS
From: Dhands
Re: MacII vs MacIIfx
I had the opportunity to compare a Mac II and a Mac IIfx on MPW compile/link times and here are the results. The command executed was a complete rebuild of 5 MacApp examples repeated 5 times, average total time in seconds.
MABuild -make -e “{MAExamples}Calc:Calc”
MABuild -make -e “{MAExamples}Cards:Cards”
MABuild -make -e “{MAExamples}DemoDialogs:DemoDialogs”
MABuild -make -e “{MAExamples}DemoText:DemoText”
MABuild -make -e “{MAExamples}Nothing:Nothing”
RAM Cache | | Mac II | | Mac IIfx | | II:IIfx | |||
Off | | 1495 | | 870 | | 1:1.7 | |||
512k | | 842 | | 374 | | 1:2.25 |
I was sort of surprised that the IIfx was “only” 2.25 times faster (in this test) than the II. I was expecting at least 3x based on Apples press and other reviews. This is a narrow view of the IIfx speed, but to a software developer the compile/link time is an important bench mark.
Both Macs were running Multifinder 6.1, System 6.0.5, MPW 3.1, 2 meg. MPW partition.
From: Nobutoge
Re: MacII vs MacIIfx
Interesting. It may be because MPW takes a lot of disk I/Os to get compile/link done and those I/O periods basically remain the same whether you are on the II or IIfx [I don’t know... this is just my guess. I mean that the IIfx may be fast on the I/O processing but the time to get to right sectors on the disk would remain the same.]
From: John Hestenes [Mousehole: Johnh;Compuserve: 76216,1540]
Re: Console/tty for MPW C++/C
I need information to obtain or build a console or tty window and keyboard interface in C code to support STDIN,STDOUT and STDERR streams and CIN, COUT and CERR in applications (not within MPW as a tool). I am using a Mac IIcx, 4MB RAM, 40MB disk, System 6.0.4, MPW C++, C and assembler. The standard MPW manuals appear to omit needed information to do this. This interface is needed for teaching university students (Drexel University, PA) C++ from the standard C++ books so the code may be compiled also on UNIX and IBM-compatible systems. I am aware of “console” implementations in THINK C and other Mac compilers. Were is it for MPW? Any help is appreciated!
From: Atom
Re: console/tty for MPW C/C++?
Language Systems has a nice console window for their MPW Fortran compiler that could be used. It’s scrollable and editable and there are documented routines to send text to and from it from any MPW language. To use it in C++ you would create a custom streambuf class, make its overflow and underflow methods call the LS code, and assign the standard C++ streams to instances of it. I hope this helps.
From: Noisy
Re: Mystery globals & Macsbug
If you can’t get something to work...see how someone else did it. This works fine until I decided to peer into the guts of MacsBug to try and determine how to implement a breakpoint in ROM. While Nosying around, I discovered a rather interesting phenomenon: there are no CODE resources (or recognizable object code as ANY resource) in the MacsBug file. Hacking at the boot code revealed that a low ram global ($120) the Nosy titled ‘MacJmp’ got bashed around a lot during MacsBug installation. Any sages out there able to identify this beasty and how MacsBug interacts with the rest of the world?
From: Mrteague
Re: Mystery globals & Macsbug
I too learn by hacking other people’s work. Although at one time I probably reverse engineered MacsBug and System Boot up, I have forgotten some of it. But I can tell you the way *I expect* MacsBug interacts with the rest of the world. It all revolves around the idea of exceptions on the 680x0 family, and the associated exception (interrupt) vectors that are stored in low memory (I think $100 on). Normally the ROM vectors them to the System Error trap - like if you don’t have MacsBug installed, and you get an Address error, you will be greeted with the bomb box with ID = 2. However if MacsBug is present in your System Folder on bootup, the bootup code loads the data fork of MacsBug (that’s why you don’t see any CODE resources etc, if you having been looking with ResEdit) into high memory (where BufPtr points to, and subsequently the value of BufPtr is set to below MacsBug for other uses), and patches the interrupt vectors to point to MacsBug entry point(s), and probably MacJmp as well (I haven’t bothered worrying about that particular interaction). Now when you get an address error, you will dropped into MacsBug. MacJmp is probably used when tracing or single-stepping through code among other things. The newer versions of MacsBug are much more sophisticated than earlier versions, in that they have user callable routines to do things like get data from a user, and display data to the user - so there is probably some kind of jump table in MacsBug for the various common routines.
Among more interesting things, I think MacsBug keeps a checksum on itself, so it can if it ever gets corrupted (I’m sure you have seen some of the infamous “MacsBug caused an exception” type of msgs). I tried patching MacsBug 6.x once, to allow use of alternate keyboard chars rather than up/down arrow of the ADB
From: Cforden
Re: 2 questions re: Memory Mgmt.
1. Is there any disadvantage to calling MaxApplZone() at the beginning of a program? It seems like it would be very handy to always know how much memory was actually available. If MaxApplZone() is not called first, then FreeMem() seems to not report any memory that would automatically be added to the application heap if needed.
2. Is there any nice way to detect a failure of the segment loader to load a CODE segment (due to, for example, an out-of-memory condition)? I presume such an occurrence would likely result in something ungraceful happening, like a system crash. The only way I can think of doing something about this is to call GetResource(‘CODE’, xxx) before any subroutine call that might not get loaded successfully and check for a NIL handle. However, that approach would get tedious if used often.
From: Mrteague
Re: 2 questions re: Memory Mgmt.
1) The only disadvantages to calling MaxApplZone at the beginning of your program I can think of - if you wanted to reduce the size of the current heap zone by say modifying BufPtr or the stack size sometime in your program (you should do these first before MaxApplZone), and there would be no room to do this, if the zone was extended to it’s fullest first. Or things like DAs etc. that wanted their own heap couldn’t do it. Probably less of a problem now with MultiFinder and newer System software.
2) The only way I can think of trapping failure of the segment loader to load a CODE segment etc, would be to patch the System Error handler, to trap the System error #25 or #26 (I think) calls - but you are probably dicing with death at this point. If your program is written well enough at the start, and has the segmentation in sensible places etc, then you SHOULD NOT have a problem with Out of Memory conditions that the user can do anything about (i.e. if your program requires more memory than the user has, there are not many options open to him/her and your program).
From: Atom
Re: MacApp 2.0B9 and C++
I am interested in MacApp and would like to know if I need MPW Pascal to be able to use MacApp 2.0B9. I get different and confusing answers from APDA depending on who I talk to. I have MPW 3.1, the Interfaces & Libraries, and C++ 3.1B1 but not the Pascal compiler.
From: Lecroy
Re: MacApp 2.0B9 and C++
You’ll need either MPW Pascal *OR* the latest version of THINK Pascal. The MPW compiler will work “out of the box”, THINK Pascal has a source converter that reformats the MacApp code to THINK “standards”.
We use MPW here and are pretty happy with it (I’m not referring to compile/link speed...which is fairly unbearable). From what I’ve seen on AppleLink regarding THINK, everyone seems to be pretty happy with it, although a few people have run into some minor problems...
From: Atom
Re: MacApp 2.0B9 and C++
Thanks for your reply. I decided to spring for the THINK upgrade anyway, it seemed like a good environment in which to learn MacApp -- I like to tinker a lot, and MPW C++’s slow turnarounds were driving me crazy (even with relatively short header files). Just out of curiosity, why the need for the Pascal compiler? Does MacApp come in source form only, or (as one APDA operator told me) is there some sort of incompatibility between MacApp 2.0B9 and C++?
From: Lecroy
Re: MacApp 2.0B9 and C++
I assumed you were talking about Pascal when you asked about MacApp. MacApp does come with source and object files, so theoretically you don’t need the Pascal compiler, but..... I wouldn’t want to do without it, especially if you are going to be using MacApp 2.0b9. The last change list I got for 2.0b9 -> final contained 5 pages of single spaced changes, many of which were bug fixes. So you want to have the Pascal compiler in order to fix any bugs you come across. There are also a few places in MacApp that we have needed to change directly in the source code (the base behavior of some objects wasn’t quite what *we* thought it should be).
I feel awkward speaking negatively about MacApp, so I should mention that we have been extremely happy with it. Even MacApp with problems is better than having to deal with all of the programming problems application features that MacApp has already taken care of.
As far as incompatibility between C++ & MacApp 2.0b9, I’m not really sure. I know that I’ve seen a few problems mentioned on AppleLink, but they all seemed to get resolved sooner or later. If you have an AppleLink account, I highly recommend taking a look at the MacApp.Tech$ group address. You can get just about any MacApp related question taken care of there.
I’m not sure, though, if THINK C works with MacApp, someone correct me if I’m wrong.
From: Btoback
Re: MacApp 2.0B9 and C++ Help
I have been trying to get a C++ version of the “nothing” application to work with MacApp and the original MacApp C++ headers. I fixed several problems that shouldn’t have been there: types Byte and VHSelect were not defined anywhere; I stuck them into one of the MacApp header files.
Now the program compiles correctly, but immediately drops into the debugger with a diagnostic that says that a class name can’t be found. This is coming from RegisterStdType, which calls a routine that looks up the class name in a table. How do I get my class name into the table?
Who is supposed to construct the table? Pascal? Me? The linker? HyperCard? I must be missing something.
From: Atom
Re: MacApp 2.0 -- worth the cost?
Well, my THINK Pascal 3.0 upgrade came in late Friday (a week early!) so I decided to put in my order for MacApp 2.0B9 today, and guess what? 2.0 beta isn’t available anymore and they’re taking orders for 2.0 final. Great, I thought, until they told me how much it would cost. $125 you say, maybe $150? Guess again. Apple’s raised the price on MacApp 2.0 from $100 to $275. No, that’s not a typo. They’ve almost tripled the price.
From: Siegel
Re: MacApp 2.0 -- worth the cost?
If you’ve never used a class library before, why not start with the TCL, and then if you decide you want MacApp, you can upgrade later, and in the meantime save your pennies to help pay for it.
From: Thomas
Re: Serial Port Reset on the Portable
I’m porting some software to the Macintosh Portable which writes directly to the SCC chip. The program works fine on all other Mac platforms except the Portable and the IIfx. I’ve heard rumors that all I need to do on the portable is wakeup the serial port (reset the SCC chip?). Does anyone out there know anything about this?
From: Ears
Re: Serial Port Reset on the Portable
Why do you need to write to the SCC chip. This is a sure way to make your program break on future CPUs. Unless you really need to it would be better to stay within Apple’s guidelines for future compatibility.
From: Mrteague
Re: Serial Port Reset on the Portable
I would have to agree with the other reply - you are asking with trouble writing directly to the SCC chip. If the application/driver whatever you are modifying doesn’t require that extra special need for accessing the hardware directly, then I would suggest you take THIS opportunity to modify the code to NOT access the SCC chip directly. But if you must, the usual reason for direct SCC not working is the I/O addresses are in different places on different Macs.
It will be even harder to do on the IIfx and newer machines. The Serial Driver for the Portable does do things with the Power Manager, which you will need to do, and it won’t only be “waking up” the SCC.
From: Atom
Re: Mouse-moved events
Does anyone know if there’s a minimum time that Multifinder waits before returning with a mouse-moved event? In other words, if you set the mouse region but the mouse has moved out of it before you next call WaitNextEvent, will Multifinder return immediately or give background tasks a chance before doing so? The reason I ask is that I noticed some strange behavior while playing with the TCL TinyEdit demo that comes with THINK Pascal 3.0. If you quickly move the mouse into the edit pane from outside the active window there is often a noticeable delay before the cursor changes to an I-beam. For this to happen you have to cross the part of the scroll pane that’s outside the edit pane. At first I thought the mouse region was being set up wrong but WNE *is* returning with a mouse-moved event, it’s just taking its time doing it. I know this is a minor problem but it’s made me curious.
From: Malam
Re: Patching traps
Hi, I am looking for source code examples on how to patch traps in an INIT. Specifically, I’d like to trap GetResource and ExitToShell. I need to track application launches and quits.
A while back there was an INIT that beeped upon launch and quit, but it was written in FORTH, something that I have absolutely no idea on what to do with.
From: Johncasey
Re: Hiding the menu bar
I am trying to write a slide show/presentation program. Does anyone know how to remove the menubar from the main screen under Multifinder? I also may want to write a little screen saver, but I can’t seem to find a “HideMenuBar” command!
From: Johncasey
Re: Full File Pathnames - HELP!
How can you translate the information returned by SFGetFile into a full pathname (ie. HD:System Folder:System)? I am working on some libraries that will allow a user to write software that will run on many different computers. I don’t want to rewrite all the stdio routines for the other machines just because the Mac uses a reference number instead of a pathname. If anyone has any suggestions please respond. Thanks!
From: Johncasey
Re: PICT File Spooling
Does anyone have a the source code to a PICT file viewer using the PICT file spooling example from Inside Mac Volume V? I would prefer a C version (if possible). Thanks!
From: Arlen
Re: Kilroy
Anybody know where the PICT Kilroy comes from? I was sleuthing through a friend’s Mac the other day and found the PICT resource of the cute little bugger peeking over a wall in his system file. I’ve seen it before, but not very often and not in every Mac. Who puts him there, anyway? Is he a virus (doubtful, as none of my tools react to him) or is he a calling card left by some DA/CDEV/INIT author?
I haven’t found anything wrong about having him around, but I’m curious.
From: Tomt
Re: Kilroy
I think the pict could be from Virus Detective.
From: Craig
Re: DB Engines
Mac Oracle has a Hypercard front end that is worth checking out. It suffers only from the speed of Hypercard. The latest version includes info on getting the thing to work with Supercard as well. The real problem is Oracle, multi-user access - Phoee (sp? :-)). The suggested solution was SQLNet running on a microvax. The response to AppleTalk was fear.
Single user use though is OK, the need to develop in a HLL such as C or Pascal is a bit of a bummer as it really slows development down.
From: Walrus
Re: WDEF virus
Well, I’m in the midst of cleaning up my system after discovering this virus (a message had come up on this board a couple months ago about it) I wanted to upload an INIT that has helped in the mopping up.
This is the first infection I’ve contracted and fortunately it is relatively benign. I didn’t even suspect a problem until I was trying to fix a Stuffed file on a disk and found some odd strings in the Desktop file -- stuff like “WDEF” “WDEFvirus” and that is when I remembered something about a new virus that hides as a WDEF resource. Disinfectant 1.7 works well in finding it and giving some background, but 2 INITs are good for automatic treatment. Both work automatically when a disk is inserted (which is when it spreads from disk to disk. It is not an executable program-spreading type of virus), but they are a little different. Eradicate’em is a little smaller and only beeps when it finds it’s prey and kills it. GateKeeper Aid gives you a dialog box telling you what the heck is going on. If you don’t think you have a problem, you probably want GA so that YOU will know when something is amiss. If you know you’ve got a problem (like me), you might just use Eradicate’em so that it does it without bothering you. And they both work under Multifinder.
I’m not sure where I got this, I almost never have a disk that was in someone else’s drive. Oh well, at least I bagged one of the suckers to be examined (or rather, Nosied) later.
BEWARE, Y’ALL
From: Venture
Re: Moon Phases
I seem to remember that “Numerical Recipes In C” had the formula for calculating every Friday the 13 which occurred on a full moon (just as an example of how to write the code). If true, that should give you the basis of the algorithm.
Numerical R.. (however you spell it) should be available in any respectable college bookstore or library. Try page 12 or thereabouts.
From: Chuckerp
Re: PopUpFuncs
For what it’s worth, I have never had any problems with the PopUpFuncs INIT, or any other mysterious problems after installing it. Have lots of RAM, lots of INITS.
From: Derek
Re: Mac II Monitor Problem
My Mac II is a few years old now and now one out of every ten times I turn on my Mac II the monitor stays off. I don’t hear a relay click so I know the relay is not turning on. Anyone know where I can get the relay from? And also exactly where it is located?
From: Fortune
Re: Mac Plus Accelerator
While at MacWorld I decided that I really need to do something to bring my Mac Plus up to date. I currently have 4MB of memory and an 80MB disk, so the logical improvements are an accelerator (and later, a larger display). The accelerator that most impressed me at the show was the Gemini board from Total Systems. This was a 16Mhz 68030 with 4 SIMM slots that could be addressed via a 32 bit wide data path (faster than trying to get to the motherboard memory they say). In addition, there is a socket for the math co-processor, a fast SCSI port (Mac II speed they said), and an SE compatible slot (great for when I finally ad the monitor). They also include a aux power supply and a fan. Total price was $1095.00 (till the end of this month). The big question: Has anyone had any experience/contact/ESP/etc. with this company or their accelerators? The package sounds pretty good on the face of it. If you don’t have any information on this accelerator, what other would you recommend? Dove Marathon 030? Radius? Thanks (in advance) for the help!
From: Billco
Re: PBDirCreate
Ok, how does one create a new folder? my call to PBDirCreate always returns DupFNErr.
From: Ronyd
Re: using the list manager for pallettes
I have created a scrollable palette with icons . The only problem is that the pallette is displayed without the scroll bars. I passed a value of TRUE fore the hscroll arg in LNew. Is there anything else that has to be done in order to get scroll bars?
From: Noisy
Re: using the list manager for pallettes
Did you remember to leave space for the Scrollbar(s) on the right and bottom side? IM-IV page261 reminds you that the scroll bar will be drawn OUTSIDE the rectangle specified. If this doesn’t solve your mystery, let me know...
From: Ronyd
Re: using the list manager for pallettes
Does this mean that I must allocate the exact number of pixels? When my pallette is displayed, the icons are displayed, and white space indicates that the space is allocated. I’ll check my code again. Any other ideas? thank for responding.
From: Harcoke
Re: appleshare bug ??
Anyways I found the solution, it is a simple typo in IM V 393. the bottom arrow should point both ways and all you have to do then is add this simple line LoginInfo.ioNamePtr := nil and it works without a single hickup (is that what you say over there ?).
From: Rguerra
Re: Hiding Res Maps/RAM cache
A couple of questions:
1) Is anyone familiar with the technique of “hiding” a files resource map behind the System Resource Map? In other words, the resource map is left open and easily accessible from patch code, for example. Probably the best examples of this technique are MasterJuggler and Suitcase which leave their files plus the online DA’s, Fonts, FKEY’s, sounds open for instant access.
Does anyone know what might be involved in implementing this scheme? Moving the handle to the resource map of one’s own file behind the System’s is no problem. Before I go patching up various Resource Manager routines does anyone know of any mega-pitfalls or “must handle” cases? I’d appreciate any advice on this.
2) Is there a way to determine not only whether the Apple RAM cache is active but also how much memory has been allocated to it?
From: Rguerra
Re: Standard FIle question
Does anyone have a reliable technique for differentiating files vs. folders that are selected in a standard file dialog AT HOOK TIME? At hook time, the reply record is partially filled in, but how can one differentiate between files and folders if you do not know the filetype of displayed files? I’d like the “Open” button’s title to toggle between different strings according to what is selected at a particular moment. Thanks!
From: Mward
Re: Fastback II Fails to Restore
I love Diskfit, but I *need* to be able to backup by selected folder. After getting fed up with Fastback, I went back to Redux. It’s not wonderful, but it works.
- SPREAD THE WORD:
- Slashdot
- Digg
- Del.icio.us
- Newsvine