TweetFollow Us on Twitter

ZBASIC Routines
Volume Number:5
Issue Number:7
Column Tag:BASIC School

Useful Routines For ZBASIC

By Dave Kelly, MacTutor Editorial Board

Hello! Are any of you tired of switching back and forth between versions of Basic? Although ZBasic still holds an edge over other Basics in the competition, there are benefits in favor of using other Basics from time to time. The frustrating thing about it is when you try to use a command, syntax, or subroutine with the wrong version of Basic. It’s easy to do if you switch back and forth very often. It’s also frustrating when your favorite function isn’t implemented the same (or not at all) from what you are used to.

Charles Stricklin has sent in three functions which he wished were already implemented in ZBasic. These have been designed to add to your ZBasic library of routines. The GETINDSTRING$ function works similarly to the GETINDRESOURCE function in the Macintosh toolbox. This routine allows easy retrieval of strings stored in a ‘STR#’ resource.

The GETRESWINDOW and GETRESMENU functions will get WIND and MENU resource data and interpret the resource to open up windows and setup menus using standard ZBasic statements. This is useful if you would like to use resources like ‘real’ applications do.

The program demonstrates the use of these functions. In developing this and through debugging the functions I am now even more aware of the missing capability to include resources from a resource file when compiling with ZBasic. This is a deficiency which I would hope Zedcor has as #1 on their ‘TO DO’ list. Charles also listed this problem as high priority and wrote a short routine as a work around for the meantime:

debugging = -1: ‘(or TRUE if defined previously)TRUE during development.

“OpenResourceFork” :’used in development only
 LONG IF debugging :’we’re still writing this
 CALL PARAMTEXT(“Do you want to use a specific resource”,”file?”,””,””)
 myAnswer = FN CAUTIONALERT(3,NIL) :’gets my answer from alert
 LONG IF myAnswer =1 :’I said “YES”
 resourceFilename$ = FILES$(1,”rsrc”,,volume)      :’gets a filename 

 ‘(created with ResEdit)
 refNum = FN OPENRESFILE(resourceFileName$)  :’and opens it’s  
 ‘resource fork
 END IF :’(myAnswer = 1)
END IF  :’(debugging)
RETURN :’(“OpenResourceFork”)

Other items on the ZBasic “Wish List” include:

(to be fixed):

• The “Save Changes?” alert should only be called after the user has actually made changes to an existing document... especially not right after launching ZBasic itself when opening an existing document.

• ZBasic doesn’t run reliably under MultiFinder. After several passes editing and running, ZBasic aborts even with 2.5+ Meg memory allocated to ZBasic. I’ve never had this happen when not running Multifinder. I suggest that Multifinder be turned off when editing and debugging ZBasic programs.

(to be improved):

• The ‘Find’ command is somewhat useless without a ‘Change’ command.

• The editor, even with the vast improvements over earlier versions, is still clumsy in several (many) areas.

• The default tab settings are a nuisance. This should be user definable.

• Editing would be much easier if more than one edit window (different files too) could be open at the same time.

• Lower the price. The ToolBox Editor should have been part of the package to begin with. The Program Generator is useful if you don’t already have your own custom BASIC shell defined.

On the plus side, ZBasic is still the fastest and has been very reliable since version 5.0 was released. If the price were still under $100, it would be a bargain. At the present time LightSpeed Pascal or C is a much better bargain when compared with ZBasic.

I’m sure that there are others routines which MacTutor readers have been using which would be useful to others. Send your routines to me via MacTutor and see your name in print! Thanks Charles!

‘ This program contains 3 new subroutines which
‘ may be used with the ZBasic Program Generator.
‘ ©1989 MacTutor
‘ Subroutines by Charles Stricklin, modified by Dave Kelly
‘************************************************************
‘                      • CONFIGURATION • 
‘************************************************************
‘
‘            Default Variable Type:Integer
‘            Convert to Upper Case:Yes
‘        Space Req.After Key Words:Yes
‘                     Array Base 1:No
‘                       Bundle Bit:Yes
‘
‘************************************************************
‘                    • SET UP VARIABLES • 
‘************************************************************
WINDOW OFF:COORDINATE WINDOW:DEF MOUSE=-1:WIDTH -2
DIM T,L,B,R,MY,MX’                REQUIRED FOR TOOL BOX CALLS
‘------------------------------------------------------------
WND=1:GOSUB”BUILD WINDOW”
GOSUB “BUILD MENU”
GOTO”EVENT QUEUE”
‘************************************************************
‘                        • THE QUEUE • 
‘************************************************************
“EVENT QUEUE”
ON DIALOG GOSUB “HANDLE DIALOG”:DIALOG ON
ON BREAK  GOSUB “HANDLE BREAK” :BREAK  ON
ON MOUSE  GOSUB “HANDLE MOUSE” :MOUSE  ON
ON MENU GOSUB “Handle Menu” :MENU ON
:
“LOOP”
GOTO”LOOP”
:
DIALOG OFF:BREAK OFF:MOUSE OFF
‘************************************************************
‘                     • DIALOG ROUTINES • 
‘************************************************************
“HANDLE DIALOG”
:
ACT=DIALOG(0):REF=DIALOG(ACT)
:
IF ACT=3 THEN WINDOW REF:RETURN
IF ACT=4 THEN GOSUB”CAPTURE”:WINDOW CLOSE REF:END
IF ACT=5 THEN “FORMAT WINDOW”
IF ACT=11 THEN EDIT FIELD REF,””
:
LONG IF WINDOW(0)=1
END IF
:
RETURN
‘************************************************************
‘                      • BREAK ROUTINE • 
‘************************************************************
“HANDLE BREAK”
END
‘************************************************************
‘                     • MOUSE ROUTINES • 
‘************************************************************
“HANDLE MOUSE”
:
MACT=MOUSE(0):MX=MOUSE(1):MY=MOUSE(2)
:
RETURN
“Handle Menu”
MenuNumber=MENU(0)
Menuitem=MENU(1)
MENU
IF MenuNumber=1 AND Menuitem=12 THEN END
RETURN

‘GETINDSTRING$ function By Charles Stricklin
‘Modified by Dave Kelly for MacTutor, May, 1989

‘This function is identical to the procedure GetIndString
‘which is not in ROM and not supported by ZBasic.  It reads
‘a string from a string list and returns a copy of it in the
‘variable the String$.  If the string list doesn’t exist of the
‘index is out of range an empty string is returned.

‘ stringListID is the resource ID of the string list; it’s resource type 
is ‘STR#’.
‘ stringIndex is the index of the desired string within the list.

LONG FN GETINDSTRING$(StringListID, StringIndex)
 TheString$=””
 Offset=0
 FALSE=0
 MyHandle&=FN GETRESOURCE(CVI(“STR#”),StringListID)
 LONG IF FN RESERROR=FALSE
 MyPointer&=USR 3(MyHandle&)
 NumberOfStrings=PEEK WORD(MyPointer&)
 LONG IF (StringIndex>0) AND (StringIndex <= NumberOfStrings)
 LONG IF StringIndex>1
 FOR ThisString=1 TO StringIndex-1
 LengthOfThisString=PEEK(MyPointer&+2+Offset)
 Offset=Offset+LengthOfThisString+1
 NEXT
 END IF
 LengthOfDesiredString=PEEK(MyPointer&+2+Offset)
 FOR Character=1 TO LengthOfDesiredString
 TheString$=TheString$+CHR$(PEEK(MyPointer&+2+Offset+Character))
 NEXT
 END IF
 MyHandle&=USR 7(MyPointer&)
 CALL DETACHRESOURCE(MyHandle&)
 END IF
END FN= TheString$

‘GETRESMENU function By Charles Stricklin
‘Modified by Dave Kelly for MacTutor, May, 1989
‘This function creates a ZBasic menu from a MENU resource.
‘The result given is boolean; true if the task is accomplished,
‘false if there’s a problem (the resource doesn’t exist, etc.)

‘ resourceID is resource ID of the menu resource to be used.
‘  menuNumber is the ZBasic number of the menu to be created.

LONG FN GETRESMENU(ResourceID, MenuNumber)
 DEFSTR LONG
 Done=0
 FALSE=0
 MenuBlkSize=14
 Title$=””
 MyHandle&=FN GETRESOURCE(CVI(“MENU”),ResourceID)
 LONG IF FN RESERROR=FALSE
 MyPointer&=USR 3(MyHandle&)
 EnableFlags&=PEEK LONG(MyPointer&+10)
 State=VAL(MID$(BIN$(EnableFlags&),32,1))
 LengthTitle=PEEK(MyPointer&+MenuBlkSize)
 FOR Character=1 TO LengthTitle
Title$=Title$+CHR$(PEEK(MyPointer&+MenuBlkSize+Character))
 NEXT
 MENU MenuNumber,0,State,Title$
 Offset&=MenuBlkSize+LengthTitle+1
 DO
 MenuItem=MenuItem+1:Title$=””
 LengthTitle=PEEK(MyPointer&+Offset&)
 FOR Character=1 TO LengthTitle
Title$=Title$+CHR$(PEEK(MyPointer&+Offset&+Character))
 NEXT
 Offset&=Offset&+LengthTitle+1
 IconNumber&=PEEK(MyPointer&+Offset&)
 IF IconNumber& THEN Title$=Title$+”^”+RIGHT$(STR$(IconNumber&),1)
 CommandKey=PEEK(MyPointer&+Offset&+1)
 IF CommandKey THEN Title$=Title$+”/”+CHR$(CommandKey)
 MarkChar = PEEK(MyPointer&+Offset&+2)
 IF MarkChar THEN Title$=Title$+”!”+CHR$(MarkChar)
 CharacterStyle=PEEK(MyPointer&+Offset&+3)
 IF FN BITTST(CharacterStyle,0) THEN Title$=Title$+”<B”
 IF FN BITTST(CharacterStyle,1) THEN Title$=Title$+”<I”
 IF FN BITTST(CharacterStyle,2) THEN Title$=Title$+”<U”
 IF FN BITTST(CharacterStyle,3) THEN Title$=Title$+”<O”
 IF FN BITTST(CharacterStyle,4) THEN Title$=Title$+”<S”
  State=VAL(MID$(BIN$(EnableFlags&),32-MenuItem,1))
 Offset&=Offset&+4
 MENU MenuNumber, MenuItem, State, Title$
 UNTIL PEEK(MyPointer&+Offset&)=FALSE
 Done=-1
 END IF
 MyHandle&=USR 7(MyPointer&)
 CALL DETACHRESOURCE(MyHandle&)
END FN=Done

‘GETRESWINDOW function By Charles Stricklin
‘Modified by Dave Kelly for MacTutor, May, 1989
‘This function creates a ZBasic window from a window template
‘resource.  Result given is boolean;true if task is accomplished,
‘false if there’s a problem ( resource doesn’t exist, etc.)
‘ resourceID is the resource ID of window template to be used.
‘ windowNumber is ZBasic number of the window to be created.
‘ modal is boolean.

LONG FN GETRESWINDOW(ResourceID, WindowNumber, Modal)
 Done=0
 Title$=””
 FALSE=0
 MyHandle&=FN GETRESOURCE(CVI(“WIND”),ResourceID)
 LONG IF FN RESERROR=FALSE
 MyPointer&=USR 3(MyHandle&)
 Y1=PEEK WORD(MyPointer&)
 X1=PEEK WORD(MyPointer&+2)
 Y2=PEEK WORD(MyPointer&+4)
 X2=PEEK WORD(MyPointer&+6)
 Type=PEEK WORD(MyPointer&+8)+1
 HasClose=PEEK WORD(MyPointer&+12)
 LengthOfTitle=PEEK(MyPointer&+18)
 FOR Character=1 TO LengthOfTitle
 Title$=Title$+CHR$(PEEK(MyPointer&+18+Character))
 NEXT
 IF Type=13 THEN Type=9: ‘ZBasic doesn’t support ZoomNoGrow
 IF HasClose=FALSE THEN Type=Type+256
 IF Modal THEN Type=-Type
 WINDOW WindowNumber,Title$,(X1,Y1)-(X2,Y2),Type
 Done=-1
 END IF
 MyHandle&=USR 7(MyPointer&)
 CALL DETACHRESOURCE(MyHandle&)
END FN=Done

‘************************************************************
‘                     • WINDOW ROUTINES • 
‘************************************************************
“BUILD WINDOW”
IF WND=1 THEN Result=FN GETRESWINDOW(1,1,0)
GOSUB”BUILD EDITS”:GOSUB”FILL EDITS”:GOSUB “FORMAT WINDOW”
RETURN
‘************************************************************
‘                     • MENU ROUTINES • 
‘************************************************************
“BUILD MENU”
Result=FN GETRESMENU(1002,1)
RETURN
‘************************************************************
‘              • PUT GRAPHICS & TEXT IN WINDOW • 
‘************************************************************
“FORMAT WINDOW”
CALL PENNORMAL
:
LONG IF WINDOW(0)=1
PrintString$=FN GETINDSTRING$(31618, 1)
LOCATE 1,1:PRINT PrintString$
PrintString$=FN GETINDSTRING$(31618, 2)
LOCATE 4,2:PRINT PrintString$
END IF
:
CALL PENNORMAL:RETURN
‘************************************************************
‘             • CREATE EDIT FIELDS AND BUTTONS • 
‘************************************************************
“BUILD EDITS”
TEXT ,,0,0
:
LONG IF WINDOW(0)=1
END IF
:
RETURN
‘************************************************************
‘            • FILL EDIT FIELDS AND SET BUTTONS • 
‘************************************************************
“FILL EDITS”
:
LONG IF WINDOW(0)=1
END IF
:
RETURN
‘************************************************************
‘        • CAPTURE EDIT FIELD STRINGS & READ BUTTONS • 
‘************************************************************
“CAPTURE”
:
LONG IF WINDOW(0)=1
END IF
:
RETURN

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Dropbox 193.4.5594 - Cloud backup and sy...
Dropbox is a file hosting service that provides cloud storage, file synchronization, personal cloud, and client software. It is a modern workspace that allows you to get to all of your files, manage... Read more
Google Chrome 122.0.6261.57 - 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
Skype 8.113.0.210 - Voice-over-internet...
Skype is a telecommunications app that provides HD video calls, instant messaging, calling to any phone number or landline, and Skype for Business for productive cooperation on the projects. This... Read more
Tor Browser 13.0.10 - Anonymize Web brow...
Using Tor Browser you can protect yourself against tracking, surveillance, and censorship. Tor was originally designed, implemented, and deployed as a third-generation onion-routing project of the U.... Read more
Deeper 3.0.4 - Enable hidden features in...
Deeper is a personalization utility for macOS which allows you to enable and disable the hidden functions of the Finder, Dock, QuickTime, Safari, iTunes, login window, Spotlight, and many of Apple's... Read more
OnyX 4.5.5 - Maintenance and optimizatio...
OnyX is a multifunction utility that you can use to verify the startup disk and the structure of its system files, to run miscellaneous maintenance and cleaning tasks, to configure parameters in the... Read more
Hopper Disassembler 5.14.1 - Binary disa...
Hopper Disassembler is a binary disassembler, decompiler, and debugger for 32- and 64-bit executables. It will let you disassemble any binary you want, and provide you all the information about its... Read more
WhatsApp 24.3.78 - Desktop client for Wh...
WhatsApp is the desktop client for WhatsApp Messenger, a cross-platform mobile messaging app which allows you to exchange messages without having to pay for SMS. WhatsApp Messenger is available for... Read more
War Thunder 2.33.0.135 - Multiplayer war...
In War Thunder, aircraft, attack helicopters, ground forces and naval ships collaborate in realistic competitive battles. You can choose from over 1,500 vehicles and an extensive variety of combat... Read more
Iridient Developer 4.2 - Powerful image-...
Iridient Developer (was RAW Developer) is a powerful image-conversion application designed specifically for OS X. Iridient Developer gives advanced photographers total control over every aspect of... Read more

Latest Forum Discussions

See All

A Legitimate Massage Parlor, I Swear – T...
In this week’s Episode of The TouchArcade Show we talk about some of the major new releases on mobile this week including Warframe, we go over all the major news that came out from the Nintendo Direct Partner Showcase on Wednesday, we read our one... | Read more »
TouchArcade Game of the Week: ‘Rainbow S...
I feel like I am in a fever dream right now. What is this game that I’m playing? It’s a Rainbow Six game? But it’s all cutesy, and cartoony, and also kind of psychedelic? How is this a real thing? Well, it’s no fever dream, it is indeed a real thing... | Read more »
SwitchArcade Round-Up: ‘Promenade’, ‘Cho...
Hello gentle readers, and welcome to the SwitchArcade Round-Up for February 23rd, 2024. It’s Friday, so we have to check out the remaining releases of the week. Not so many big ones today, but a healthy crop nonetheless. After summarizing all the... | Read more »
Steam Deck Weekly: Gundam Breaker 4 and...
Welcome to this week’s slightly shorter edition of the Steam Deck Weekly. I was a bit unwell this week so no reviews in this edition, but there is a lot of news and new Steam Deck Verified and Playable games to catch up on. I have something special... | Read more »
The 10 Best Run-And-Gun Games for Ninten...
The year 2024 is a rare one, because it is a year with a brand-new Contra game. Contra: Operation Galuga might be the freshest face on the block when it comes to Nintendo Switch run-and-gun action games, but it’s hardly fighting that war alone.... | Read more »
Version 1.4 of Reverse: 1999 will be lan...
Free up your diary for February 29th, as Bluepoch has announced the impending release of the award-winning Reverse: 1999s Version 1.4 update. The Prisoner in the Cave is an Ancient Greece-themed update with new recruits, gameplay modes, and plenty... | Read more »
Premium Mobile RPG ‘Ex Astris’ From ‘Ark...
Arknights developer Hypergryph’s premium RPG Ex Astris () recently had its release date confirmed, and we finally have an extended gameplay showcase. | Read more »
Apple Arcade Weekly Round-Up: Updates fo...
Following yesterday’s big Hello Kitty Island Adventure update, a few more notable game updates and events have gone live on Apple Arcade. Cypher 007 () has gotten its first content update in a few months taking you to Egypt for five new levels... | Read more »
‘Thunder Ray’ and ‘Hime’s Quest’ Are Now...
Crunchyroll has pushed two new games into the Crunchyroll Game Vault including Purple Tree Studio’s Thunder Ray which was already on iOS before as a premium release. Shaun even reviewed it last year. Read his review here. The second game is Poppy... | Read more »
Adorable Kitty-Collector Sequel ‘Neko At...
Ya’ll. This October will mark the ten-year anniversary of Hit Point launching Neko Atsume, the adorable kitty collecting sim that has become a runaway success and essentially created a sub-genre of cozy pet-collecting life sim games. Sure, the... | Read more »

Price Scanner via MacPrices.net

16-inch M3 Max MacBook Pro on sale for $300 o...
Amazon is offering a $300 instant discount on one of Apple’s 16″ M3 Max MacBook Pros today. Shipping is free: – 16″ M3 Max MacBook Pros (36GB/1TB/Space Black): $3199, $300 off MSRP Their price is the... Read more
Apple M2 Mac minis on sale for $100 off MSRP...
B&H Photo has Apple’s M2-powered Mac minis in stock and on sale for $100 off MSRP this weekend with prices available starting at $499. Free 1-2 day shipping is available to most US addresses: –... Read more
Apple Watch SE on sale for $50 off MSRP this...
Best Buy has all Apple Watch SE models on sale this weekend for $50 off MSRP on their online store. Sale prices available for online orders only, in-store prices may vary. Order online, and choose... Read more
Deal Alert! Apple 15-inch M2 MacBook Airs on...
Looking for the lowest sale price on a new 15″ M2 MacBook Air? Best Buy has Apple 15″ MacBook Airs with M2 CPUs in stock and on sale today for $300 off MSRP on their online store. Prices valid for... Read more
Amazon discounts iPad mini 6 models up to $12...
Amazon is offering Apple’s 8.3″ WiFi iPad minis for $100-$120 off MSRP, including free shipping, for a limited time. Prices start at $399. Amazon’s prices are among the lowest currently available for... Read more
Apple AirPods Pro with USB-C discounted to $1...
Walmart has Apple’s 2023 AirPods Pro with USB-C in stock and on sale for $199.99 on their online store. Their price is $50 off MSRP, and it’s currently one the lowest prices available for new AirPods... Read more
Apple has 14-inch M3 MacBook Pro with 16GB of...
Apple has 14″ M3 MacBook Pros with 16GB of RAM, Certified Refurbished, available for $270-$300 off MSRP. Each model features a new outer case, shipping is free, and an Apple 1-year warranty is... Read more
Save $318-$432 on 16-inch M3 Max MacBook Pros...
Apple retailer Expercom has 16″ M3 Max MacBook Pros on sale for $318-$432 off MSRP when bundled with a 3-year AppleCare+ Protection Plan. Discounts are available for Silver models as well a Space... Read more
New today at Apple: 16-inch M3 Pro/M3 Max Mac...
Apple is now offering 16″ M3 Pro and M3 Max MacBook Pros, Certified Refurbished, starting at $2119 and ranging up to $530 off MSRP. Each model features a new outer case, shipping is free, and an... Read more
Apple is now offering $300-$480 discounts on...
Apple is now offering 14″ M3 Pro and M3 Max MacBook Pros, Certified Refurbished, starting at $1699 and ranging up to $480 off MSRP. Each model features a new outer case, shipping is free, and an... Read more

Jobs Board

Part-time *Apple* and Peach Research Assist...
…and minimum qualifications: + Assist with planting, pruning, and harvesting of apple and peach trees + Conduct regular maintenance tasks to ensure optimal Read more
Housekeeper, *Apple* Valley Villa - Cassia...
Apple Valley Villa, part of a senior living community, is hiring entry-level Full-Time Housekeepers to join our team! We will train you for this position and offer a Read more
Sublease Associate Optometrist- *Apple* Val...
Sublease Associate Optometrist- Apple Valley, CA- Target Optical Date: Feb 22, 2024 Brand: Target Optical Location: Apple Valley, CA, US, 92307 **Requisition Read more
Sublease Associate Optometrist- *Apple* Val...
Sublease Associate Optometrist- Apple Valley, CA- Target Optical Date: Jan 24, 2024 Brand: Target Optical Location: Apple Valley, CA, US, 92307 **Requisition Read more
Housekeeper, *Apple* Valley Village - Cassi...
Apple Valley Village Health Care Center, a senior care campus, is hiring a Part-Time Housekeeper to join our team! We will train you for this position! In this role, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.