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

LibreOffice 5.3.4.2 - Free, open-source...
LibreOffice is an office suite (word processor, spreadsheet, presentations, drawing tool) compatible with other major office suites. The Document Foundation is coordinating development and... Read more
VOX 2.8.26 - Music player that supports...
VOX just sounds better! The beauty is in its simplicity, yet behind the minimal exterior lies a powerful music player with a ton of features and support for all audio formats you should ever need.... Read more
iFFmpeg 6.4.0 - Convert multimedia files...
iFFmpeg is a comprehensive media tool to convert movie, audio and media files between formats. The FFmpeg command line instructions can be very hard to master/understand, so iFFmpeg does all the hard... Read more
Beamer 3.3 - Stream any movie file from...
Beamer streams to your Apple TV.... Plays any movie file - Just like the popular desktop movie players, Beamer accepts all common formats, codecs and resolutions. AVI, MKV, MOV, MP4, WMV, FLV. To... Read more
jAlbum Pro 14.0 - Organize your digital...
jAlbum Pro has all the features you love in jAlbum, but comes with a commercial license. You can create gorgeous custom photo galleries for the Web without writing a line of code! Beginner-friendly... Read more
Apple Remote Desktop Client 3.9.3 - Clie...
Apple Remote Desktop Client is the best way to manage the Mac computers on your network. Distribute software, provide real-time online help to end users, create detailed software and hardware reports... Read more
Chromium 59.0.3071.109 - Fast and stable...
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all Internet users to experience the web. Version 59.0.3071.109: This update has no Flash plug-... Read more
Thunderbird 52.2.0 - Email client from M...
As of July 2012, Thunderbird has transitioned to a new governance model, with new features being developed by the broader free software and open source community, and security fixes and improvements... Read more
Google Chrome 59.0.3071.109 - Modern and...
Google Chrome is a Web browser by Google, created to be a modern platform for Web pages and applications. It utilizes very fast loading of Web pages and has a V8 engine, which is a custom built... Read more
Shredo 1.2.2 - $9.99
Shredo is a beautiful, functional file-shredding and privacy scan utility. It permanently shreds files, folders, and external volumes' contents to keep information secure and impossible for anyone to... Read more

Latest Forum Discussions

See All

The House of da Vinci (Games)
The House of da Vinci 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: Enter The House of Da Vinci, a new must-try 3D puzzle adventure game. Solve mechanical puzzles, discover hidden... | Read more »
Solve the disappearance of history’s gre...
Blue Brain Games invites you to indulge in an immersive hands-on 3D puzzle adventure in similar vein to The Room series, with its debut release The House of Da Vinci. Set during the historic period of the Italian Renaissance (when Leonardo himself... | Read more »
Age of Rivals (Games)
Age of Rivals 3.3 Device: iOS Universal Category: Games Price: $.99, Version: 3.3 (iTunes) Description: Deep civilization-building strategy in a fast-paced card game! | Read more »
Panthera Frontier (Games)
Panthera Frontier 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: | Read more »
Angry Birds Evolution beginner's gu...
Angry Birds changes things up a fair bit in its latest iteration, Angry Birds Evolution. The familiar sling-shot physics mechanics are still there, but the game now features team-based gameplay, RPG elements, and a new top-down view. With all of... | Read more »
Sega Forever is for the retro game fans
Sega is launching a new retro games service titled Sega Forever, in a move that's sure to delight games enthusiasts with a bit of nostalgia. Sega's releasing five classic games for free. The titles include Sonic the Hedgehog, Phantasy Star II,... | Read more »
The Little Acre (Games)
The Little Acre 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: | Read more »
Lovely adventure game 'The Little A...
The Little Acre makes its way from PC to iOS today and it's a real charmer. It's a lovely little adventure game set in 1950's Ireland, gorgeously animated in a style slightly reminiscent of old Disney films. The game won a lot of praise for its... | Read more »
Futurama: Worlds of Tomorrow officially...
Futurama: Worlds of Tomorrow arrives next Thursday, and it features . . . Stephen Hawking? Turns out a few of your favorite science super stars, including Bill Nye, Neil DeGrasse Tyson, and George Takei will be making an appearance alongside the... | Read more »
MU Origin’s new update offers exciting c...
MU Origin is kicking off the summer with style. Its latest update is a real doozy, offering up plenty of fresh content. New challenges, some extra help for newcomers, and new costumes are just a few of the things you will find in the new patch. | Read more »

Price Scanner via MacPrices.net

Clearance 2016 MacBook Pros available for up...
B&H Photo has clearance 2016 13″ and 15″ MacBook Pros in stock today and on sale for up to $400 off original MSRP. Shipping is free, and B&H charges NY & NJ sales tax only: - 15″ 2.7GHz... Read more
Apple Ranks 9th In comScore Top 50 U.S. Digit...
comScore, Inc. has released its monthly ranking of U.S. online activity at the top digital media properties for May 2017 based on data from comScore Media Metrix Multi-Platform. * Entity has... Read more
10.5-inch iPad Pros available for up to $20 o...
B&H Photo has the new 2017 10.5″ iPad Pros available for up to $20 off MSRP including free shipping plus NY & NJ sales tax only: - 64GB iPad Pro WiFi: $649 - 256GB iPad Pro WiFi: $749 - 512GB... Read more
Three Off-The-Beaten-Track iOS Apps That Dese...
One of the great things about using iPads and iPhones is the vast selection of apps available for most anything you want or need to do. The three outlined in this article have been in my core app... Read more
Apple No. 1 Spot In Gartner Top 100 Vendors i...
Gartner, Inc. has unveiled the top global 100 vendors in IT in 2016 based on their revenue across IT (excluding communication services) and component market segments. In the Gartner Global Top 100:... Read more
Clearance iMacs available for up to $300 off...
B&H Photo has clearance 21″ and 27″ Apple iMacs available starting at $949, each including free shipping plus NY & NJ sales tax only: - 27″ 3.3GHz iMac 5K: $1999 $300 off original MSRP - 27″... Read more
1.4GHz Mac mini, refurbished, available for $...
The Apple Store has Apple Certified Refurbished 1.4GHz Mac minis available for $419. Apple’s one-year warranty is included, and shipping is free. Their price is $80 off MSRP, and it’s the lowest... Read more
Free Mixoo iOS Photo Editing App Gets Major U...
Button Software Technology has announced Mixoo 3.0, an important feature update to the company’s photo editor for iOS devices. Mixoo offers amazing ways to edit as well as decorate personal photo... Read more
FNable 2.0 Function Key Enabling Software Get...
Briksoftware has released FNable 2.0 With Touch Bar Support, a major new version of the function key enabling software now compatible with Touch Bar keyboards. FNable’s simplicity that allows users... Read more
Clearance 2016 12-inch Retina MacBooks, Apple...
Apple recently dropped prices on Certified Refurbished 2016 12″ Retina MacBooks, with models now available starting at $1019. Apple will include a standard one-year warranty with each MacBook, and... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Security Data Analyst - *Apple* Information...
…data sources need to be collected to allow Information Security to better protect Apple employees and customers from a wide range of threats.Act as the subject matter Read more
Lead *Apple* Solutions Consultant - Apple I...
…integrity, and trust.Success Metrics/Key Performance Indicators:Quantitative* Year over Year growth in Apple Product and Beyond the Box sales in the assigned Point of Read more
*Apple* Solutions Consultant till v%u00E5r...
…ethics, integrity, and trust.Success Metrics/Key Performance Indicators:QuantitativeYear over Year growth in Apple Product and Beyond the Box sales in the assigned Point Read more
Sr. Software Engineer, *Apple* Retail - App...
Apple Retail is looking for a Software Engineer…You'll work on projects that touch all aspects of Apple Retail Point-of-Sale system, and will leverage your strong Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.