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

Google Drive 1.20 - File backup and shar...
Google Drive is a place where you can create, share, collaborate, and keep all of your stuff. Whether you're working with a friend on a joint research project, planning a wedding with your fiancé, or... Read more
Simon 4.0.3 - Monitor changes and crashe...
Simon monitors websites and alerts you of crashes and changes. Select pages to monitor, choose your alert options, and customize your settings. Simon does the rest. Keep a watchful eye on your... Read more
Vitamin-R 2.23 - Personal productivity t...
Vitamin-R creates the optimal conditions for your brain to work at its best by structuring your work into short bursts of distraction-free, highly focused activity alternating with opportunities for... Read more
iDefrag 5.0.0 - Disk defragmentation and...
iDefrag helps defragment and optimize your disk for improved performance. Features include: Supports HFS and HFS+ (Mac OS Extended). Supports case sensitive and journaled filesystems. Supports... Read more
PCalc 4.2 - Full-featured scientific cal...
PCalc is a full-featured, scriptable scientific calculator with support for hexadecimal, octal, and binary calculations, as well as an RPN mode, programmable functions, and an extensive set of unit... Read more
FileZilla 3.10.2 - Fast and reliable FTP...
FileZilla (ported from Windows) is a fast and reliable FTP client and server with lots of useful features and an intuitive interface. Version 3.10.2: Note: Now requires a 64-bit Intel processor.... Read more
The Hit List 1.1.11 - Advanced reminder...
The Hit List manages the daily chaos of your modern life. It's easy to learn - it's as easy as making lists. And it's powerful enough to let you plan, then forget, then act when the time is right.... Read more
Bartender 1.2.32 - Organize your menu ba...
Bartender lets you organize your menu bar apps. Features: Lets you tidy your menu bar apps how you want. See your menu bar apps when you want. Hide the apps you need to run, but do not need to... Read more
ClamXav 2.7.5 - Free virus checker, base...
ClamXav is a free virus checker for OS X. It uses the tried, tested, and very popular ClamAV open source antivirus engine as a back end. I hope you like and use ClamXav a lot and that it helps keep... Read more
xScope 4.1.2 - Onscreen graphic measurem...
xScope is powerful set of tools that are ideal for measuring, inspecting, and testing on-screen graphics and layouts. Its tools float above your desktop windows and can be accessed via a toolbar,... Read more

Dungeon Hunter 5 Coming on March 12
Gameloft has excitedly announced that Dungeon Hunter 5 is on its way! Once again, you will adventure across the land of Valenthia exploring dungeons and fighting monsters. The game will have a new asynchronous multiplayer mode called Strongholds... | Read more »
It Came From Canada: Jurojin: Immortal N...
At this point it’s pretty safe to say that no MOBA is going to dethrone Dota 2 and League of Legends anytime soon. After all, if Batman can’t do it, nobody can. However, with a genre as popular and profitable as this one, there’s still room for... | Read more »
Tiny Farm – Animals, Tractors and Advent...
Tiny Farm – Animals, Tractors and Adventures! Review By Amy Solomon on March 3rd, 2015 Our Rating: :: LIVELY LANDSCAPESUniversal App - Designed for iPhone and iPad Tiny Farm – Animals, Tractors and Adventures! includes farm-related... | Read more »
This Week at 148Apps: February 23-27, 20...
Final February Fun at 148Apps   How do you know what apps are worth your time and money? Just look to the review team at 148Apps. We sort through the chaos and find the apps you’re looking for. The ones we love become Editor’s Choice, standing out... | Read more »
GDC 2015 – Does Not Commute is Definitel...
GDC 2015 – Does Not Commute is Definitely a Game You Should Keep an Eye on Posted by Rob Rich on March 2nd, 2015 [ permalink ] We were teased about Mediocre Games’ (Smash Hit, | Read more »
F84 Games & POW! Announce Stan Lee V...
F84 Games has announced that it is working with legendary comic creator Stan Lee and POW! Entertainment to produce Stan Lee’s Hero Command. The game will be a action adventure of heroic proportions. | Read more »
Setlyst Keeps Your Set Straight So You C...
Setlyst Keeps Your Set Straight So You Can Focus On Rocking Out. Posted by Jessica Fisher on March 2nd, 2015 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Space is Vast, So Space Agency Has a Vas...
Space is Vast, So Space Agency Has a Vast New Update! Posted by Jessica Fisher on March 2nd, 2015 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Size DOES Matter Review
Size DOES Matter Review By Campbell Bird on March 2nd, 2015 Our Rating: :: HARD TO BEATUniversal App - Designed for iPhone and iPad This rhythm game has a unique control scheme and performance system that make it feel like a true... | Read more »
The first ever action 3D card battler Al...
On the other hand, you probably haven’t played an action 3D card battler – until now. Step forward, All Star Legion. All Star Legion is a 3D QTE-based action RPG card battler, but fear not – the game itself isn’t as convoluted as its description.... | Read more »

Price Scanner via MacPrices.net

Another Tranche Of IBM MobileFirst For iOS Ap...
IBM has announced the next expansion phase for  its IBM MobileFirst for iOS portfolio, with a troika of new apps to address key priorities for the Banking and Financial Services, Airline and Retail... Read more
Sale! 15-inch Retina MacBook Pros for up to $...
B&H Photo has the new 2014 15″ Retina MacBook Pros on sale for up to $250 off MSRP for a limited time. Shipping is free, and B&H charges NY sales tax only: - 15″ 2.2GHz Retina MacBook Pro: $... Read more
WaterField Designs Introduces the Minimalist...
With Apple Pay gaining popularity, Android Pay coming in May 2015, and loyalty cards and receipts that can be accessed from smartphones, San Francisco’s WaterField Designs observes that it may be... Read more
Sale! 15-inch 2.2GHz Retina MacBook Pro for $...
 Best Buy has the 15″ 2.2GHz Retina MacBook Pro on sale for $1774.99 $1799.99, or $225 off MSRP. Choose free home shipping or free local store pickup (if available). Price valid for online orders... Read more
13-inch 2.5GHz MacBook Pro (refurbished) avai...
The Apple Store has Apple Certified Refurbished 13″ 2.5GHz MacBook Pros available for $170 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free: - 13″ 2.5GHz... Read more
13-inch 2.5GHz MacBook Pro on sale for $100 o...
B&H Photo has the 13″ 2.5GHz MacBook Pro on sale for $999.99 including free shipping plus NY sales tax only. Their price is $100 off MSRP. Read more
27-inch 3.5GHz 5K iMac in stock today and on...
 B&H Photo has the 27″ 3.5GHz 5K iMac in stock today and on sale for $2299 including free shipping plus NY sales tax only. Their price is $200 off MSRP, and it’s the lowest price available for... Read more
Apple Launches Free Web-Based Pages and Other...
Apple’s new Web-only access to iWork productivity apps is a free level of iCloud service available to anyone, including people who don’t own or use Apple devices. The service includes access to Apple... Read more
Survey Reveals Solid State Disk (SSD) Technol...
In a recent SSD technology use survey, Kroll Ontrack, a firm specializing in data recovery, found that while nearly 90 percent of respondents leverage the performance and reliability benefits of SSD... Read more
Save up to $600 with Apple refurbished Mac Pr...
The Apple Store is offering Apple Certified Refurbished Mac Pros for up to $600 off the cost of new models. An Apple one-year warranty is included with each Mac Pro, and shipping is free. The... Read more

Jobs Board

*Apple* Solutions Consultant - Retail Sales...
**Job Summary** As an Apple Solutions Consultant (ASC) you are the link between our customers and our products. Your role is to drive the Apple business in a retail Read more
*Apple* Pay Automation Engineer - iOS System...
**Job Summary** At Apple , great ideas have a way of becoming great products, services, and customer experiences very quickly. Bring passion and dedication to your job Read more
Sr. Technical Services Consultant, *Apple*...
**Job Summary** Apple Professional Services (APS) has an opening for a senior technical position that contributes to Apple 's efforts for strategic and transactional Read more
Event Director, *Apple* Retail Marketing -...
…This senior level position is responsible for leading and imagining the Apple Retail Team's global engagement strategy and team. Delivering an overarching brand Read more
*Apple* Pay - Site Reliability Engineer - Ap...
**Job Summary** Imagine what you could do here. At Apple , great ideas have a way of becoming great products, services, and customer experiences very quickly. Bring Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.