TweetFollow Us on Twitter

Oct 89 Letters
Volume Number:5
Issue Number:10
Column Tag:Letters

Letters

By David E. Smith, Editor & Publisher, MacTutor

Any sympathetic souls

John Love, III

Springfield, VA

I’m having absolutely NO luck with MACDTS, or anyone else for that matter, trying to solve my following 2 separate & distinct problems. I KNOW this is an AWFUL lot, but I’m going crazy ?!*!?

; 1) Using _CopyBits to create a color PICT2 file:
entireScreenpointer; My globals
screenMap pointer; ...
pictBoundsrect   ; ...
picHdl  handle   ; ...

 clr.w  -(sp)
 bsr  TestForColor
 pop.w  d0
 beq.s  .bitMap
 ; ----------
.pixMap GetCWMgrPort !entireScreen
 move.l entireScreen,a0
 lea  portPixMap(a0),a1
 move.l a1,screenMap
 move.l portPixMap(a0),a1
 move.l (a1),a1  ; Handle -- Pointer.
 bra.s  .setBounds
 ;
.bitMap GetWMgrPort!entireScreen
 move.l entireScreen,a0
 lea  portBits(a0),a1
 move.l a1,.screenMap

 ; ~~~~~~~~~~

.setBoundsmove.l bounds+topLeft(a1),pictBounds+topLeft
 move.l bounds+botRight(a1),pictBounds+botRight
 ; ----------
.setPortSetPort  entireScreen
 ClipRect !pictBounds
 ; etc
 
.macDraw2 OpenPicture!pictBounds,=picHdl

 CopyBits screenMap,screenMap,!pictBounds,!pictBounds,#srcCopy,#0

 ClosePicture
 ; etc
 
; above code works in black-and-white mode, but NOT in color.
;
; I’ve tried : move.lentireScreen,a0
;move.l portPixMap(a0),screenMap
; Also :move.l entireScreen,a0
;move.l portPixMap(a0),a1
;move.l (a1),screenMap
;
; ... but neither permutation works --> an empty picHdl (10 bytes, obviously
; ... corresponding to just the picSize & picFrame fields).
; ... it doesn’t bomb, but the file comes up blank, that is, just
; ... the 512-byte header + those 10 bytes and nothing else.
; ... I think it’s kinda interesting that ONLY upon
;
;move.l portPixMap(a0),screenMap
;
; ... do I get a PICT2 file, albeit an empty one.
; ... In the other two cases, I get just a PICT file.
;
;SIGH !!
; ------------------------------

; 2) Switching color on & off on the fly, that is, changing the MODE:

; following was deduced from the “Cards and Drivers ...” book.
; This book is supposed to be official stuff from Apple, yet
; MacDTS fails to respond in other than purely qualitative prose.
;
; All my code does is turn video to a constant gray all over
; as if I had turned the video OFF.  All further execution ceases !!
; No bomb, but I must re-boot.
 
; My calling stuff:

origModeinteger  ; My globals
paramBlkRec byte ioFQElSize ; ...
VDPgInfobyteVDPageInfo  ; ...

 clr.w  -(sp)
 bsr  TestForColor
 pop.w  d0
 beq.s  .notColor
 
 ; ----------
 ; Save the current mode for reseting when done
 ; and then set to black-and-white:

.itsColor clr.w  -(sp)    ; result = Error code.
 push.l MainDevice
 pea  paramBlkRec; VARed ...
 pea  VDPgInfo
 bsr  GetMode
 lea  VDPgInfo,a1
 move.w csMode(a1),origMode ; ... for reseting later.
 pop.w  d0
 bsr  testError  ; Returns if d0 <> 0.
 ; ----------
 clr.w  -(sp)
 push.l MainDevice
 push.w #oneBitMode; ... for black-and-white.
 bsr  SetDeviceMode
 pop.w  d0
 bsr  testError
 
.notColor
 ; etc
 
.onExitingclr.w  -(sp)
 bsr  TestForColor
 pop.w  d0
 beq.s  .byeBye
 
 ; ----------
 ; Reset the mode to its original value:
 
.resetColor clr.w-(sp)
 push.l MainDevice
 push.w .origMode
 bsr  SetDeviceMode
 pop.w  d0
 bsr  .testError
 
.byeBye
 ; etc

; All my subroutine children:
; ======================================
; FUNCTION  TestForColor : BOOLEAN;
; Test for the presence of a Mac with Color QuickDraw AND a Color
; Monitor that the user has set to Color via the Control Panel
; or by using the “Switch-A-Roo” FKEY:

TestForColorfunc boolean
 noParms
 
 locals
.theWorld byte sysEnv1Size; Mac II stuff.
 endLocals
 
 enter
 
 movem.ld1-d7/a0-a5,-(sp) ; Save all your pennies !!
 ; ==========
 
 clr.w  .result  ; Assume NO color = B&W.
 
 move.w #1,d0    ; Version #1.
 lea  .theWorld,a0
 _SysEnvirons
 tst.w  d0
 bne.s  .notColor
 ; ----------
.noErrortst.b  hasColorQD(a0) ; A0 --> theWorld.
 beq.s  .notColor
 ; ----------
 GetGDevice =a1  ; Handle -->
 move.l (a1),a1  ;   Pointer.
 move.l gdPMap(a1),a0; Ditto ...
 move.l (a0),a0
 cmpi.w #1,pmPixelSize(a0)
 beq.s  .notColor

.color  st.result
 ; ----------
.notColor

 ; ==========
.end  movem.l  (sp)+,d1-d7/a0-a5 ; Withdraw life savings !!
 
 exit

; ======================================
; FUNCTION  WhereIsTheDevice (whatDevice: GDHandle) : dceHandle;
; Slot #, Slot ID, etc ??
WhereIsTheDevice funchandle
.whatDevice handle
 endParms
 
 noLocals
 
.devRefNumrequ d1
 enter
 
 movem.ld1-d7/a0-a5,-(sp) ; Save your goodies !!
 ; ==========
 clr.l  .result  ; Assume nowhere !!
 
 move.l .whatDevice,a0
 move.l (a0),a0  ; Handle --> Pointer.
 move.w gdRefNum(a0),.devRefNum
 ; tst.w.devRefNum
 beq.s  .end; Nowhere !!
 ; ----------
 not.w  .devRefNum ; = Unit #
 lsl.w  #2,.devRefNum; 4 bytes per entry.
 move.l UTableBase,a1; --> DCE Table.
 move.l (a1,.devRefNum),.result  ; = dceHandle.
 
 ; ==========
.end  movem.l  (sp)+,d1-d7/a0-a5 ; Dig up your treasure !!
 exit

; ======================================
; FUNCTION  GetMode (whatDevice: GDHandle; VAR paramBlk: paramBlkRec;
;     VAR VDPgInfo: VDPgInfoRec) : INTEGER;
; csMode, csPage, etc ??

GetMode funcinteger; Error code.
.whatDevice handle
.paramBlk var
.VDPgInfo var
 endParms
 
 noLocals
.paramBlkPtrrequ a0
.dceHandlerequ a1
.dcePtr requa1
 
 enter
 
 movem.ld1-d7/a0-a5,-(sp) ; Save your goodies !!
 ; ==========
 move.w #-1,.result; Assume a problem.
 
 move.l .paramBlk,.paramBlkPtr; A Pointer.
 move.l #ioFQElSize-1,d0
.clearBlk1clr.b  (.paramBlkPtr)+
 dbra d0,.clearblk1
 ; ----------
 move.l .VDPgInfo,a2 ; Another Pointer.
 move.l #VDPageInfo-1,d2
.clearBlk2clr.b  (a2)+
 dbra d2,.clearBlk2
 
 clr.l  -(sp)    ; FUNCTIONal result.
 push.l .whatDevice
 bsr  WhereIsTheDevice
 pop.l  .dceHandle
 cmpi.l #0,.dceHandle
 beq.s  .end; Oh-Oh !!
 move.l (.dceHandle),.dcePtr
 ; ----------
 move.l .paramBlk,.paramBlkPtr; Reset.
 ; clr.lioCompletion(.paramBlkPtr)
 move.w dCtlRefNum(.dcePtr),ioRefNum(.paramBlkPtr)
 ; move.b #fsCurPerm,ioPermssn(.paramBlkPtr)   ; = 0
 ; clr.lioMix(.paramBlkPtr)
 ; clr.wioFlags(.paramBlkPtr)
 move.b dCtlSlot(.dcePtr),ioSlot(.paramBlkPtr)
 move.b dCtlSlotID(.dcePtr),ioID(.paramBlkPtr)
 
 move.w #cscGetMode,csCode(.paramBlkPtr)
 move.l .VDPgInfo,csParam(.paramBlkPtr)      ; VARed.
 _Status,immed
 move.w d0,.result
 ; ==========
.end  movem.l  (sp)+,d1-d7/a0-a5 ; Dig up your treasure !!
 
 exit

; ======================================
; FUNCTION  SetMode (whatDevice: GDHandle; paramBlk: paramBlkPtr;
;     VDPgInfo: VDPgInfoPtr) : INTEGER;
;
; csMode, csPage, etc !!

SetMode funcinteger; Error code.
.whatDevice handle
.paramBlk pointer
.VDPgInfo pointer
 endParms
 
 noLocals
 
.paramBlkPtrrequ a0
.dceHandlerequ a1
.dcePtr requa1
 
 enter
 
 movem.ld1-d7/a0-a5,-(sp)
 ; ==========
 
 clr.l  -(sp)    ; FUNCTIONal result.
 push.l .whatDevice
 bsr  WhereIsTheDevice
 pop.l  .dceHandle
 cmpi.l #0,.dceHandle
 bne.s  .setNewMode; Everything’s cool !!
.itsNowhere move.w #-1,d0
 bra.s  .ohOh
 ; ----------
.setNewMode move.l (.dceHandle),.dcePtr
 move.l .paramBlk,.paramBlkPtr
 move.w #cscSetMode,csCode(.paramBlkPtr)
 move.l .VDPgInfo,csParam(.paramBlkPtr)
 _Control,immed

.ohOh move.wd0,.result    
 ; ==========
.end  movem.l  (sp)+,d1-d7/a0-a5
 
 
 exit

; ======================================
; FUNCTION  SetDeviceMode (whatDevice: GDHandle; mode: INTEGER) : INTEGER;
;
; Set the specified Device to a particular color mode:

SetDeviceMode  funcinteger; Error code.
.whatDevice handle
.mode integer
 endParms
 
 locals
.paramBlkRecbyte ioFQElSize
.VDPgInfo byte VDPageInfo
 endLocals
 
.paramBlkPtrrequ a0
.dceHandlerequ a1
.dcePtr requa1
 enter
 
 movem.ld1-d7/a0-a5,-(sp)
 ; ==========
 
.getOldStuffclr.w-(sp)    ; result = Error code.
 push.l .whatDevice
 pea  .paramBlkRec ; VARed ...
 pea  .VDPgInfo
 bsr  GetMode
 pop.w  d0
 bne.s  .ohOh

.whereInThe?clr.l-(sp)    ; FUNCTIONal result.
 push.l .whatDevice
 bsr  WhereIsTheDevice
 pop.l  .dceHandle
 cmpi.l #0,.dceHandle
 bne.s  .setGray ; Everything’s cool !!
.itsNowhere move.w #-1,d0
 bra.s  .ohOh
 ; ----------
.setGraymove.l (.dceHandle),.dcePtr; Recommended middle step.
 lea  .paramBlkRec,.paramBlkPtr
 move.w #cscGrayPage,csCode(.paramBlkPtr)
 lea  .VDPgInfo,a2
 move.l a2,csParam(.paramBlkPtr)
 _Control,immed
 tst.w  d0
 ; bne.s.ohOh    ; This call is optional.

.setNewMode clr.w-(sp)    ; Error code.
 push.l .whatDevice
 pea  .paramBlkRec
 lea  .VDPgInfo,a1
 move.w .mode,csMode(a1)  ; Change the mode.
 pea  .VDPgInfo
 bsr  SetMode
 pop.w  d0
 
.ohOh move.wd0,.result    
 ; ==========
.end  movem.l  (sp)+,d1-d7/a0-a5
 
 exit

Onstad’s Answer

Flashpoint

San Francisco, CA

Paul Onstad’s question in the August 1989 issue of MacTutor on page 4: you must do a CreateResFile() after the Create to add the resource map data to the resource fork. [Note: you must Create FIRST, CreateResFile SECOND.]

Segmented XCMD Problem Solved

Peter B. Nagel

Denver, CO

With several gentle nudges from various helpful persons on CompuServe, I was able quite successfully to implement a solution in HyperTMON to the segmented XCMD problem that three individuals described in the Mousehole Report column in your August issue.

MPW’s -ss linker option will allow the creation of XCMD segments well in excess of the normal 32k limit on the intra-code segment addresses. Through a judicious resorting of my linked modules, I was able to create XCMDs approaching 38k. To enlarge an XCMD beyond that limit, however, I found that it was necessary, and certainly possible, to segment XCMDs through the use of separate code resources.

To do this, create and link a separate code resource whose entry point jumps to a case statement that branches to the appropriate procedures and functions in the resource. Then define a parameter block with sufficient fields to hold all the possible parameters that could be passed to all the procedures and functions in that code resource. From within the XCMD, then, you can include the following code (minus appropriate error checking) to retrieve the separate code resource, initialize the parameter block, and jump to you external code:

Procedure JumpToNewCode(paramBlkHndl: paramHndl; procAddress: Ptr);
InLine  $205F, { MOVE.L (A7)+, A0; address of procedure}
 $4E90, { JSR (A0); jump to procedure}

Procedure CallNewCode(selector: integer; param1: integer; param2: longint; 
param3: Ptr; Var param4: Handle; Var param5: Boolean);
Var
 paramBlkHndl : paramHndl;
 codeAddr : Handle;
Begin {Procedure CallNewCode}
 codeAddr := GetResource(‘CODE’, 1234);
 MoveHHi(codeAddr);
 HLock(codeAddr);
 paramBlkHndl := NewHandle(sizeof(paramHndl));
 with paramBlkHndl^^ do
 begin
 {fill in parameters}
 end;
 JumpToNewCode(paramBlkHndl, StripAddress(codeAddr^));
 HUnlock(codeAddr);
 HPurge(codeAddr);
 with paramBlkHndl^^ do
 begin
 {return Var values}
 end;
 DisposHandle(paramBlkHndl);
end; {Procedure CallNewCode}

At one time, it appeared that, when memory became really tight, HyperCard may have been unceremoniously disposing of my code resources, and so I ended up calling BlockMove to place them in nonrelocatable blocks, since I needed them around at all times. I am still not sure that it wasn’t my own fault, but I would be interested in knowing if any of your readers have had a similar problem.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

EtreCheck 3.1.4 - For troubleshooting yo...
EtreCheck is an app that displays the important details of your system configuration and allow you to copy that information to the Clipboard. It is meant to be used with Apple Support Communities to... Read more
Together 3.7 - Store and organize all of...
Together helps you organize your Mac, giving you the ability to store, edit and preview your files in a single clean, uncluttered interface. Features Smart storage. With simple drag-and-drop... Read more
Together 3.7 - Store and organize all of...
Together helps you organize your Mac, giving you the ability to store, edit and preview your files in a single clean, uncluttered interface. Features Smart storage. With simple drag-and-drop... Read more
EtreCheck 3.1.4 - For troubleshooting yo...
EtreCheck is an app that displays the important details of your system configuration and allow you to copy that information to the Clipboard. It is meant to be used with Apple Support Communities to... Read more
Postbox 5.0.9 - Powerful and flexible em...
Postbox is a new email application that helps you organize your work life and get stuff done. It has all the elegance and simplicity of Apple Mail, but with more power and flexibility to manage even... Read more
DiskCatalogMaker 6.5.16 - Catalog your d...
DiskCatalogMaker is a simple disk management tool which catalogs disks. Simple, light-weight, and fast. Finder-like intuitive look and feel. Super-fast search algorithm. Can compress catalog data... Read more
TrailRunner 3.8.827 - Route planning for...
TrailRunner is the perfect companion for runners, bikers, hikers, and all people wandering under the sky. Plan routes on a geographical map. Import GPS or workout recordings and journalize your... Read more
VueScan 9.5.61 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more
Postbox 5.0.9 - Powerful and flexible em...
Postbox is a new email application that helps you organize your work life and get stuff done. It has all the elegance and simplicity of Apple Mail, but with more power and flexibility to manage even... Read more
VueScan 9.5.61 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more

Latest Forum Discussions

See All

Great zombie games in the spirit of Dead...
Dead Rising 4 arrives tomorrow, giving enthusiasts a fresh chance to take selfies with zombies and get up to other ridiculous end-of-the-world shenanigans. To really get into the spirit of things, we've gone and gathered the best zombie games that... | Read more »
Amateur Surgeon 4 Guide: Advanced tips a...
Amateur Surgeon 4 is still tackling the competition at the top of the App Store charts, so if you haven't tried it out yet, you should probably do that right away. If you've been at it for a while, though, perhaps you're ready to start expanding... | Read more »
Amateur Surgeon 4 Guide: Become the worl...
It's time to wield your trusty pizza cutter again, as Amateur Surgeon has returned with a whole fresh set of challenges (and some old, familiar ones, too). Starting anew isn't easy, especially when all you have at your disposal is a lighter, the... | Read more »
Le Parker: Sous Chef Extraordinaire (Ga...
Le Parker: Sous Chef Extraordinaire 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: | Read more »
Telltale Games really is working on a Gu...
Telltale Games' next episodic adventure is indeed Guardians of the Galaxy. A document tied to the voice actors strike suggested that the project was in the work, but now we have direct confirmation following an announcement at the Game Awards that... | Read more »
Amateur Surgeon returns to iOS and Andro...
Amateur Surgeon and its two sequels disappeared from the App Store some time and it was sad days for all. But now, just in time for the holidays, the Adult Swim favorite makes its joyous return in the shape of Amateur Surgeon 4, a remake with... | Read more »
The best board games on mobile
Sometimes you need to ditch all of the high speed, high action games in favor of something a little more traditional. If you don't feel like parting ways from your mobile device, though, there are still plenty of ways to get that old-school fix.... | Read more »
The best Facebook Messenger Instant Game...
Facebook's new Instant Games is now here, meaning you can play games with your friends directly via Facebook. It's a fun new way to connect with friends, of course, but it's also proving to be a solid gaming experience in its own right, with a... | Read more »
You can now play game's on Facebook...
Facebook launched its new Instant Games platform in an exciting new attempt to engage its user base. As a result, you can now play a number of different games directly through Facebook Messenger. All of these games run with HTML5, meaning you play... | Read more »
Apollo Justice Ace Attorney (Games)
Apollo Justice Ace Attorney 1.00.00 Device: iOS Universal Category: Games Price: $.99, Version: 1.00.00 (iTunes) Description: Court Is Back In Session Star as rookie defense attorney, Apollo Justice, as he visits crime scenes,... | Read more »

Price Scanner via MacPrices.net

Monday roundup of Holiday Mac sales: Up to $3...
Take up to $300 off MSRP on the price of a new Apple Mac at B&H Photo today as part of their Holiday sale. Shipping is free, and B&H charges NY sales tax only. Touch Bar MacBook Pros are in... Read more
12-inch WiFi Apple iPad Pros on sale for up t...
B&H Photo has 12″ WiFi Apple iPad Pros on sale for up to $50 off MSRP, each including free shipping. B&H charges sales tax in NY only: - 12″ Space Gray 32GB WiFi iPad Pro: $749 $50 off MSRP... Read more
9-inch Apple WiFi iPad Pros on sale for $20-$...
B&H Photo has 9.7″ Apple WiFi iPad Pros on sale for $20-$50 off MSRP, each including free shipping. B&H charges sales tax in NY only: - 9″ Space Gray 256GB WiFi iPad Pro: $779.95 $20 off MSRP... Read more
Holiday sale: Apple MacBook Airs available fo...
B&H Photo has 13″ MacBook Airs on sale for $100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 13″ 1.6GHz/128GB MacBook Air (MMGF2LL/A): $899 $100 off MSRP - 13″ 1.6GHz/... Read more
13-inch Silver Touch Bar MacBook Pro in stock...
Amazon has the new 2016 13″ 2.9GHz/256GB Silver Touch Bar MacBook Pro (MLVP2LL/A) in stock today and on sale for $1749 including free shipping. That’s $50 off MSRP, and it’s the lowest price... Read more
Parallels Toolbox 1.3 for Mac Offers 25 Singl...
Parallels has launched Parallels Toolbox 1.3 for Mac, an upgrade that adds five new utilities to the stand-alone application which was released in August and is available exclusively online at http... Read more
OWC Mercury Elite Pro Dual mini Ultra-Portabl...
OWC has introduced the new OWC Mercury Elite Pro Dual mini, a powerful yet ultra-portable dual-drive RAID solution. The new Mercury Elite Pro Dual mini packs phenomenal performance into a small... Read more
Clearance 13-inch Retina MacBook Pros availab...
B&H Photo has clearance 2015 13″ Retina Apple MacBook Pros available for up to $200 off original MSRP. Shipping is free, and B&H charges NY tax only: - 13″ 2.7GHz/128GB Retina MacBook Pro: $... Read more
Roundup of 2016 13-inch 2.0GHz MacBook Pro sa...
B&H has the non-Touch Bar 13″ MacBook Pros in stock today for $50-$100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 13″ 2.0GHz MacBook Pro Space Gray (MLL42LL/A): $1449 $... Read more
New 13-inch 2.0GHz Space Gray MacBook Pro in...
Adorama has the new 13″ 2.0GHz Space Gray MacBook Pro (non-Touch Bar, MLL42LL/A) in stock for $1499 including a free 3-year AppleCare Protection Plan. Shipping is free, and Adorama charges sales tax... Read more

Jobs Board

Lead *Apple* Solutions Consultant - Apple (...
# Lead Apple Solutions Consultant Job Number: 53586123 Pittsburgh, Pennsylvania, United States Posted: Nov. 28, 2016 Weekly Hours: 40.00 **Job Summary** The Lead ASC Read more
*Apple* Retail - Multiple Positions- Plano,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions- Kansas...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions- Chicago...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Hardware Design Validation Engineer - *Apple...
The Apple Watch team is looking for a Hardware Design Validation Engineer. This person will be part of the Apple Watch hardware team with responsibilities for Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.