TweetFollow Us on Twitter

ResEdit
Volume Number:3
Issue Number:5
Column Tag:Basic School

Windows with ResEdit

By Dave Kelly, MacTutor Editorial Board

Windows are a fundamental of the Macintosh user interface. Back in March of 1985, Vol. 1 No. 4 of MacTutor (for those of you who were around back then) or starting on page 307 in The Best of MacTutor, Vol 1, I cover the basics of creating windows with MS Basic. I refer you back to this reference for details. (You can get Best of MacTutor, Vol 1, through MacTutor for $24.95). Sorry to say, the new version of MS Basic and the MS Basic Compiler has only a small improvement to windows. MS Basic now allows six windows open at once instead of four. ZBasic has added window capabilities such as additional window types available including the ability to specify Zoom windows, go-away box, grow box, and rounded cornered windows. We can only hope that the next version of MS Basic will be more comprehensive. Notwithstanding this there are a few things that can be mentioned relating to windows.

If you recall, a few months back, during our Basic Wars review, PCMacBasic was the only Basic to allow you to use resources to program your application windows. This is still true, however I have come across a method which allows MS Basic to use window resources as a guide for the window that will be used in Basic. This method is very simple and only requires three calls from the ToolLib library. It does not extend the window creation capabilities, however. Languages which fully support the toolbox will usually allow you to create a window using the WIND (window resource) ID number.

Now you can create your own window resources using ResEdit and Basic will read the resource and create a window looking like the one described by the resource. Well, usually. There are still those types of windows that Basic doesn't support such as the ones with rounded corners of different curvatures. ZBasic does support these other types and a similar method could be used to read the WIND resources from ZBasic.

For now I'll explain what to do to implement this method. You might also get some ideas of other resources you could read and apply the same idea to.

First off, in case you don't know how ResEdit can be used to create your own windows I will briefly explain by walking you though an example. Open up ResEdit and choose 'NEW' from the File menu. I chose to use a separate resource file (named 'Window.rsc') for this example just to be safe. You could use any file to store your resource in just like the library CODE resources. Next (with the new file open) open up a new resource by selecting 'NEW' from the File menu. Create a resource of type 'WIND' by selecting or typing the proper type when asked.

At this point ResEdit gives you a default window which can be sized and placed where ever you want it. The move the window drag it near the title bar just like you would move a window when using the Finder. To resize the window you drag the lower right corner of the window to the size you want.

Now select Get Info from the File menu to adjust the window ID# if necessary. Usually you are safe to just use the number that ResEdit assigns the WIND resource. In this example I used 3041 through 3044 for the four windows that I created. You will have to create your own resources to use the example program. Be sure to use the same ID numbers in the program that you use as your resource ID.

There are two ways to view WIND resources with ResEdit. The first is graphically which is the mode you get when you first open a WIND resource. The second way is to display the WIND resource parameters as text. If you want different window types you can select Display text to show the actual window resource parameters.

The ProcID is the parameter which indicates the window type. The ProcID numbers are shown in Inside Macintosh as:

CONST documentProc = 0;
 dBoxProc = 1;
 plainDBox = 2;
 altDBoxProc = 3;
 noGrowDocProc = 4;
 rDocProc = 16;

Since not all of these are supported by MS Basic the example program will ignore those that it doesn't understand and use the default document window. You could probably try this same method using ZBasic and be able to implement all of the features. Another way to view the resource would be to open it up as General instead of using OPEN in the File menu. Using this we can see how the WIND is organized.

From this HEX representation of the WIND resource and Inside Macintosh (pg. I-302) we see:

$00 2E, the first two bytes represent the top of the window where HEX $00 2E = 46 decimal.

$00 0A, the 3rd and 4th bytes represent the left of the window where HEX $00 0A = 10 decimal.

$00 AC, the 5th and 6th bytes represent the bottom of the window where HEX $00 AC = 170 decimal.

$01 4E, the 7th and 8th bytes represent the right side of the window where HEX $01 4E = 202 decimal.

$00 00, the 9th and 10th bytes represent the ProcID parameter.

$01 00, the 11th and 12th bytes represent the visible parameter.

$01 00, the 13th and 14th bytes represent the goAwayFlag parameter.

$00 00 00 00, the 15th through 18th bytes is the refCon parameter.

$08, the 16th byte represents the length of the window title (the next 8 bytes) where $57 69 6E 64 6F 77 20 31 is 'Window 1' when converted via ASCII codes.

The only thing left to finish the new resources now is to close the resource file and quit ResEdit. The example Basic listing below will read the resource file and store it in and array where the information can be used to create a window that looks the same as the one created in ResEdit using the standard MS Basic window command. This is accomplished with the aid of three ToolLib calls. The first is OpenResFile, used to open the desired resource file. The last is CloseResFile, used to close the resource file. The trick comes in using LoadArray to read in data from an open resource and place it in a pre-dimensioned array. Since the data that is read is not in the same format that Basic expects for variables, it is necessary to read each by and decode or convert the data to MS Basic variables which we can use in the Window statement. The subroutine GetResWindow demonstrates which byte to peek to get the desired results. The variable pointer must be explicitly defined in each of the peek statements or the data may not come back correctly. You may only need to read back the parts that will be used in your program.

An optional way of doing this would be to manually write down what the window size and type etc. after creating the window with ResEdit (then you wouldn't need to actually save the window resources) and then use these numbers to create your new window. This would make the Basic code shorter, but might not be quite as accessible to modification after it is compiled (provided you intend to compile your application).

As mentioned last month, there are still some serious problems with HFS and MS Basic. Until this is fixed, the use of resources is somewhat restricted. Since a compiled MS Basic application does not have an automatic way (a way in which the user doesn't have to be aware of what is going on) to find the volume which itself is located, we will have to live with the problem until Microsoft releases an improved version. (Sooner the better).

'WIND Resource Demo ©MacTutor™ 1987 By Dave Kelly

Libname$="Hard Disk:Basic:MS ToolLib:ToolLib"  'full path name
LIBRARY Libname$
WINDResname$="Hard Disk:MacTutor™:May87:Window.rsc"
WIDTH 40
DIM a(40)
FOR i=1 TO 4
ID%=3040+i
CALL GetResWindow(WINDResname$,ID%,top,left,bottom, right,     ProcID, 
TitleLength, Title$)
type=1
IF ProcID= 0 THEN type=1
IF ProcID=1 THEN type=2
IF ProcID=2 THEN type=3
IF ProcID=3 THEN type=4
WINDOW i,Title$,(left,top)-(right,bottom),type
PRINT "Top= ";top,"Left= ";left,"Bottom= ";bottom,"Right=      
 ";right
PRINT "ProcID = ";ProcID
PRINT "TitleLength = ";TitleLength
PRINT "Title = ";Title$
PRINT "Click mouse to continue"
WHILE MOUSE(0)<>1:WEND
NEXT i
END
SUB GetResWindow (WINDResname$,ID%, top,left,bottom,right,     ProcID, 
TitleLength, Title$) STATIC
ref%=0
type$="WIND"
openresfile WINDResname$,ref%
loadArray ref%,ID%,a(1),type$
top=PEEK(VARPTR(a(1)))*256+PEEK(VARPTR(a(1))+1)
left=PEEK(VARPTR(a(1))+2)*256+PEEK(VARPTR(a(1))+3)
bottom=PEEK(VARPTR(a(1))+4)*256+PEEK(VARPTR(a(1))+5)
right=PEEK(VARPTR(a(1))+6)*256+PEEK(VARPTR(a(1))+7)
ProcID=PEEK(VARPTR(a(1))+8)*256+PEEK(VARPTR(a(1))+9)
TitleLength=PEEK(VARPTR(a(1))+18)
closeResFile ref%
Title$=""
FOR i=1 TO TitleLength
    Title$=Title$+CHR$(PEEK(VARPTR(a(1))+i+18))
NEXT
END SUB

 
AAPL
$111.78
Apple Inc.
-0.87
MSFT
$47.66
Microsoft Corpora
+0.14
GOOG
$516.35
Google Inc.
+5.25

MacTech Search:
Community Search:

Software Updates via MacUpdate

LibreOffice 4.3.5.2 - Free Open Source o...
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
CleanApp 5.0.0 Beta 5 - Application dein...
CleanApp is an application deinstaller and archiver.... Your hard drive gets fuller day by day, but do you know why? CleanApp 5 provides you with insights how to reclaim disk space. There are... Read more
Monolingual 1.6.2 - Remove unwanted OS X...
Monolingual is a program for removing unnecesary language resources from OS X, in order to reclaim several hundred megabytes of disk space. It requires a 64-bit capable Intel-based Mac and at least... Read more
NetShade 6.1 - Browse privately using an...
NetShade is an Internet security tool that conceals your IP address on the web. NetShade routes your Web connection through either a public anonymous proxy server, or one of NetShade's own dedicated... Read more
calibre 2.13 - Complete e-library manage...
Calibre is a complete e-book library manager. Organize your collection, convert your books to multiple formats, and sync with all of your devices. Let Calibre be your multi-tasking digital librarian... Read more
Mellel 3.3.7 - Powerful word processor w...
Mellel is the leading word processor for OS X and has been widely considered the industry standard since its inception. Mellel focuses on writers and scholars for technical writing and multilingual... Read more
ScreenFlow 5.0.1 - Create screen recordi...
Save 10% with the exclusive MacUpdate coupon code: AFMacUpdate10 Buy now! ScreenFlow is powerful, easy-to-use screencasting software for the Mac. With ScreenFlow you can record the contents of your... Read more
Simon 4.0 - Monitor changes and crashes...
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
BBEdit 11.0.2 - Powerful text and HTML e...
BBEdit is the leading professional HTML and text editor for the Mac. Specifically crafted in response to the needs of Web authors and software developers, this award-winning product provides a... Read more
ExpanDrive 4.2.1 - Access cloud storage...
ExpanDrive builds cloud storage in every application, acts just like a USB drive plugged into your Mac. With ExpanDrive, you can securely access any remote file server directly from the Finder or... Read more

Latest Forum Discussions

See All

Make your own Tribez Figures (and More)...
Make your own Tribez Figures (and More) with Toyze Posted by Jessica Fisher on December 19th, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
So Many Holiday iOS Sales Oh My Goodness...
The holiday season is in full-swing, which means a whole lot of iOS apps and games are going on sale. A bunch already have, in fact. Naturally this means we’re putting together a hand-picked list of the best discounts and sales we can find in order... | Read more »
It’s Bird vs. Bird in the New PvP Mode f...
It’s Bird vs. Bird in the New PvP Mode for Angry Birds Epic Posted by Jessica Fisher on December 19th, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Telltale Games and Mojang Announce Minec...
Telltale Games and Mojang Announce Minecraft: Story Mode – A Telltale Games Series Posted by Jessica Fisher on December 19th, 2014 [ permalink ] | Read more »
WarChest and Splash Damage Annouce Their...
WarChest and Splash Damage Annouce Their New Game: Tempo Posted by Jessica Fisher on December 19th, 2014 [ permalink ] WarChest Ltd and Splash Damage Ltd are teaming up again to work | Read more »
BulkyPix Celebrates its 6th Anniversary...
BulkyPix Celebrates its 6th Anniversary with a Bunch of Free Games Posted by Jessica Fisher on December 19th, 2014 [ permalink ] BulkyPix has | Read more »
Indulge in Japanese cuisine in Cooking F...
Indulge in Japanese cuisine in Cooking Fever’s new sushi-themed update Posted by Simon Reed on December 19th, 2014 [ permalink ] Lithuanian developer Nordcurrent has yet again updated its restaurant simulat | Read more »
Badland Daydream Level Pack Arrives to C...
Badland Daydream Level Pack Arrives to Celebrate 20 Million Downloads Posted by Ellis Spice on December 19th, 2014 [ permalink ] | Read more »
Far Cry 4, Assassin’s Creed Unity, Desti...
Far Cry 4, Assassin’s Creed Unity, Destiny, and Beyond – AppSpy Takes a Look at AAA Companion Apps Posted by Rob Rich on December 19th, 2014 [ permalink ] These day | Read more »
A Bunch of Halfbrick Games Are Going Fre...
A Bunch of Halfbrick Games Are Going Free for the Holidays Posted by Ellis Spice on December 19th, 2014 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »

Price Scanner via MacPrices.net

The Apple Store offering free next-day shippi...
The Apple Store is now offering free next-day shipping on all in stock items if ordered before 12/23/14 at 10:00am PT. Local store pickup is also available within an hour of ordering for any in stock... Read more
It’s 1992 Again At Sony Pictures, Except For...
Techcrunch’s John Biggs interviewed a Sony Pictures Entertainment (SPE) employee, who quite understandably wished to remain anonymous, regarding post-hack conditions in SPE’s L.A office, explaining “... Read more
Holiday sales this weekend: MacBook Pros for...
 B&H Photo has new MacBook Pros on sale for up to $300 off MSRP as part of their Holiday pricing. Shipping is free, and B&H charges NY sales tax only: - 15″ 2.2GHz Retina MacBook Pro: $1699... Read more
Holiday sales this weekend: MacBook Airs for...
B&H Photo has 2014 MacBook Airs on sale for up to $120 off MSRP, for a limited time, for the Thanksgiving/Christmas Holiday shopping season. Shipping is free, and B&H charges NY sales tax... Read more
Holiday sales this weekend: iMacs for up to $...
B&H Photo has 21″ and 27″ iMacs on sale for up to $200 off MSRP including free shipping plus NY sales tax only. B&H will also include a free copy of Parallels Desktop software: - 21″ 1.4GHz... Read more
Holiday sales this weekend: Mac minis availab...
B&H Photo has new 2014 Mac minis on sale for up to $80 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 1.4GHz Mac mini: $459 $40 off MSRP - 2.6GHz Mac mini: $629 $70 off MSRP... Read more
Holiday sales this weekend: Mac Pros for up t...
B&H Photo has Mac Pros on sale for up to $500 off MSRP. Shipping is free, and B&H charges sales tax in NY only: - 3.7GHz 4-core Mac Pro: $2599, $400 off MSRP - 3.5GHz 6-core Mac Pro: $3499, $... Read more
Save up to $400 on MacBooks with Apple Certif...
The Apple Store has Apple Certified Refurbished 2014 MacBook Pros and MacBook Airs available for up to $400 off the cost of new models. An Apple one-year warranty is included with each model, and... Read more
Save up to $300 on Macs, $30 on iPads with Ap...
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
iOS and Android OS Targeted by Man-in-the-Mid...
Cloud services security provider Akamai Technologies, Inc. has released, through the company’s Prolexic Security Engineering & Research Team (PLXsert), a new cybersecurity threat advisory. The... Read more

Jobs Board

*Apple* Store Leader Program (US) - Apple, I...
…Summary Learn and grow as you explore the art of leadership at the Apple Store. You'll master our retail business inside and out through training, hands-on experience, Read more
Project Manager, *Apple* Financial Services...
**Job Summary** Apple Financial Services (AFS) offers consumers, businesses and educational institutions ways to finance Apple purchases. We work with national and Read more
*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
*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
*Apple* Retail - Multiple Positions (US) - A...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.