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

Vienna 3.0.6 :5eaf312: - RSS and Atom ne...
Vienna is a freeware and Open-Source RSS/Atom newsreader with article storage and management via a SQLite database, written in Objective-C and Cocoa, for the OS X operating system. It provides... Read more
Kodi 15.1.rc1 - Powerful media center to...
Kodi (was XBMC) is an award-winning free and open-source (GPL) software media player and entertainment hub that can be installed on Linux, OS X, Windows, iOS, and Android, featuring a 10-foot user... Read more
Bookends 12.5.8 - Reference management a...
Bookends is a full-featured bibliography/reference and information-management system for students and professionals. Access the power of Bookends directly from Mellel, Nisus Writer Pro, or MS Word (... Read more
Chromium 44.0.2403.125 - 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 44.0.2403.125: This release contains a number... Read more
iMazing 1.2.2 - Complete iOS device mana...
iMazing (was DiskAid) is the ultimate iOS device manager with capabilities far beyond what iTunes offers. With iMazing and your iOS device (iPhone, iPad, or iPod), you can: Copy music to and from... Read more
Audio Hijack 3.2.0 - Record and enhance...
Audio Hijack (was Audio Hijack Pro) drastically changes the way you use audio on your computer, giving you the freedom to listen to audio when you want and how you want. Record and enhance any audio... Read more
FontExplorer X Pro 5.0.1 - Font manageme...
FontExplorer X Pro is optimized for professional use; it's the solution that gives you the power you need to manage all your fonts. Now you can more easily manage, activate and organize your... Read more
Calcbot 1.0.2 - Intelligent calculator a...
Calcbot is an intelligent calculator and unit converter for the rest of us. Featuring an easy-to-read history tape, expression view, intuitive conversion, and much more! Features History Tape -... Read more
MTR 5.0.0.1 - The Mac's oldest and...
MTR (was MacTheRipper)--the Mac's oldest and smartest DVD-backup app--is now updated to version 5.001 MTR -- the complete toolbox, not a one-trick, point-and-click extractor. MTR is intended for... Read more
LibreOffice 4.4.5.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

Card King: Dragon Wars - Tips, Tricks an...
[Read more] | Read more »
Pac-Man Championship Edition DX has brou...
Bandai Namco has released Pac-Man Championship Edition DX on iOS and Android, which features the classic arcade gameplay that we've all grown to love. Pac-Man Championship Edition DX can be enjoyed in much shorter bursts than the arcade versions... | Read more »
Cosmonautica (Games)
Cosmonautica 1.1 Device: iOS Universal Category: Games Price: $6.99, Version: 1.1 (iTunes) Description: Cast off! Are you ready for some hilarious adventures in outer space? | Read more »
Rescue humanity from a Demon horde in An...
Angel Stone is Fincon's follow up to the massively successful Hello Hero and is out now on iOS and Android. You play as a member of The Resistance, a group of mighty human warriors who have risen up in defiance of the Demon horde threatening to... | Read more »
Gallery Doctor (Photography)
Gallery Doctor 1.0 Device: iOS iPhone Category: Photography Price: $2.99, Version: 1.0 (iTunes) Description: Free up valuable iCloud and iPhone storage with Gallery Doctor, the only iPhone cleaner that automatically identifies the... | Read more »
You Against Me (Games)
You Against Me 1.0 Device: iOS Universal Category: Games Price: $.99, Version: 1.0 (iTunes) Description: A simple game… You. Me. Claim, steal, lock, score, win! | Read more »
Yep, it's True - Angry Birds 2 is O...
The not exactly rumors were true and the birds are back. Angry Birds 2 has come to the App Store and the world will... well I suppose it'll still be the same, but now we have more bird-flinging options! [Read more] | Read more »
You Could Design Your Own Card for Chain...
If you've ever wanted to create your own item, weapon, trap, or even monster for Chainsaw Warrior: Lords of the Night, this is your chance. Auroch Digital is currently holding a contest so that fans can fight to the death (not really) to see which... | Read more »
Bitcoin Billionaire is Going Back in Tim...
If you thought you managed to buy everything there is to buy in Bitcoin Billionaire and make all the money, well you though wrong. Those of you who made it far enough might remember investing in time travel - and it looks like that investment is... | Read more »
Domino Drop (Games)
Domino Drop 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Domino Drop is a delightful new puzzle game with dominos and gravity!Learn how to play it in a minute, master it day by day.Your... | Read more »

Price Scanner via MacPrices.net

11-inch MacBook Airs on sale for $100 off MSR...
Best Buy has 11-inch MacBook Airs on sale for $100 off MSRP. Choose free shipping or free local store pickup (if available). Sale prices for online orders only, in-store prices may vary: - 11″ 1.6GHz... Read more
iPad Air 2 on sale for up to $100 off MSRP
Best Buy has iPad Air 2s on sale for up to $100 off MSRP on their online store for a limited time. Choose free shipping or free local store pickup (if available). Sale prices available for online... Read more
Sale! 13-inch MacBook Pros on sale for $100 o...
B&H Photo has 13″ MacBook Pros on sale for $100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 13″ 2.5GHz/500GB MacBook Pro: $999.99 save $100 - 13″ 2.7GHz/128GB Retina... Read more
Sale! Save $100 on 13-inch MacBook Airs this...
B&H Photo has the 13″ 1.6GHz/128GB MacBook Air on sale for $899.99 including free shipping plus NY tax only. Their price is $100 off MSRP, and it’s the lowest price available for this model.... Read more
Worldwide Tablet Market Decline Continues, Ap...
The worldwide tablet market declined -7.0% year-over-year in the second quarter of 2015 (2Q15) with shipments totaling 44.7 million units according to preliminary data from the International Data... Read more
TP-LINK TL-PA8030P KIT Powerline Featuring Ho...
Consumer and business networking products provider TP-LINK is now shipping its TL-PA8030P KIT AV1200 3-Port Gigabit Passthrough Powerline Starter Kit that expands your home’s network over its... Read more
Apple refurbished iPad Air 2s available for u...
The Apple Store has Apple Certified Refurbished iPad Air 2s available for up to $140 off the price of new models. Apple’s one-year warranty is included with each model, and shipping is free: - 128GB... Read more
Updated Apple iPad Price Trackers
We’ve updated our iPad Air Price Tracker and our iPad mini Price Tracker with the latest information on prices and availability from Apple and other resellers. Read more
Apple refurbished 2014 13-inch 128GB MacBook...
The Apple Store has Apple Certified Refurbished 2014 13″ MacBook Airs available starting at $759. An Apple one-year warranty is included with each MacBook, and shipping is free: - 13″ 1.4GHz/128GB... Read more
Apple’s Education discount saves up to $300 o...
Purchase a new Mac or iPad at The Apple Store for Education and take up to $300 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free,... Read more

Jobs Board

*Apple* Retail - Multiple Positions (US) - A...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
Infrastructure Engineer - *Apple* /Mac - Hil...
Infrastructure Engineer - Apple /Mac Job Code: 1608 # of openings: 1 Description Our fortune 500 client is looking to hire an experienced Infrastructure Engineer to join Read more
Executive Administrative Assistant, *Apple*...
…supporting presentation development for senior leadership. * User experience with Apple hardware and software is preferred. Additional Requirements The following list Read more
*Apple* Bus Company is now hirin - Apple Bus...
Apple Bus Company is now hiring school bus drivers in the Pettis County area. Class B CDL preferred. Free training provided. No nights or weekends required. Flexible Read more
*Apple* Certified Mac Technician - Updated 6...
…and friendly, hands-on technical support to customers troubleshooting and repairing Apple /Mac products with courtesy, speed and skill. Use your problem-solving skills Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.