TweetFollow Us on Twitter

Mover Fix
Volume Number:4
Issue Number:12
Column Tag:ßasic School

QuickBasic's Statement Mover Fix

By Dave Kelly, Editorial Board

Statement Mover Fix

During the past month, I’ve been looking at the demo programs included with MS QuickBASIC 1.0. The programs exercise most of (but certainly not all) the syntax of QuickBASIC. Also utility programs are provided which can be used to help your development are:

‘AlertMover’ For copying Alert/Dialog resources

‘Cursor Editor’ For defining your own cursors

‘Demo Resources’ containing Alert resources

‘extra MBLC Remover’ removes unnecessary library resources from your application programs.

‘Pattern Editor’ For defining your own patterns

‘Print Listing File’ Print listings created at compile time.

‘renumber CODEs’ avoids code id conflicts

‘SortSub’ moves sub programs to the end of a Basic source code file

‘Statement Mover’ moves resources especially Library resources.

Missing from this list is a variable cross reference program and a program to compare the differences between two text files. Comparing differences between files is somewhat complex when programs don’t have line numbers to compare with.

The new version of ‘Statement Mover’ is much improved over the version included with MS BASIC 3.0 and the CLR Libraries. You can now copy most any kind of resource that has a resource name attached. But, don’t open up an open resource file or you get a bomb! That means you can’t open the System File or the ‘Statement Mover’ application. I haven’t worked on a fix for that one yet, but I have made a minor improvement to ‘Statement Mover’ which uses a dialog resource.

The routine I have written replaces the NewTypeDialog subprogram in ‘Statement Mover’. First the program’s volume reference number is retrieved and the dialog is displayed. Then a loop is set up to retrieve changes in the modal dialog. When a radio button is pressed the routine responds to it and updates the other buttons. The buttons represent a set of resource types which might be moved from one program or file to another. The edit field is updated with the resource type so that it will be passed when the routine is exited.

The dialog resource may be created with ResEdit or any other program that allows you to create dialogs. I used ProtoTyper™ to create the dialog so that I could try it out before I copied it into my QuickBASIC program. Because I had so many buttons in my dialog I used ResEdit to adjust the order of the buttons so that the ‘OK’ button would be the first one (ProtoTyper™ sets them up in the order that they were drawn and you can’t change the order without starting over).

Another thing that this dialog resource shows is a way to create the bold default buttons. Normally in Pascal or C you can draw the bold with the FrameRoundRect statement after defining the dialog item as a user item. A method that works is to define a PICT resource that looks like the bold roundrect and position it around the button which will be the default (usually the ‘OK’ button). I believe that you can do it this way from other languages too, although Inside Macintosh vol. 1 says to use the user items.

{1}
‘ NewTypeDialog Subprogram
‘ Replaces NewTypeDialog in Statement Mover Program
‘ Subprogram by Dave Kelly
‘ Portions derived from Prototyper.

‘Use these lines to test the program
‘ cancel%=0
‘ NewType$=””
‘ CALL NewTypeDialog(NewType$,cancel%)
‘ PRINT NewType$
‘ END

SUB NewTypeDialog(NewType$,cancel%) STATIC
    False=0:True=NOT False
    ExitDialog =False  ‘ Flag used TO EXIT the DIALOG

    Selection&=0  : ‘  DialogPtr;NAME of DIALOG
    index%=0 :’  FOR looping
    EditString$=”” :’ GET Text entered, temp holding
    itemHit%=0 : ‘ GET selection

    ‘ Start of DIALOG handler
    vref%=SYSTEM(7): ‘  Get program’s volume reference number.
    NewType$=””
    GetNewDialog vref%,10000,Selection&    ‘ Bring in the DIALOG resource

    ExitDialog=False  ‘   Do NOT EXIT DIALOG Handle loop yet
    itemHit%=0
    WHILE ExitDialog=False ‘  Start of DIALOG Handle loop
        ModalDialog Selection&, itemHit%   :’  WAIT until an item IS 
hit
        SELECT CASE itemHit%
            CASE 1        ‘ Handle the OK BUTTON being pressed
                ExitDialog=True ‘   {EXIT the DIALOG when This selection 
IS made}
                cancel%=False

            CASE 2   ‘     Handle the Cancel BUTTON being pressed
                ExitDialog=True  ‘  {EXIT the DIALOG when This selection 
IS made}
                SetDialogText Selection&,4,””
                cancel%=True

            CASE 5 TO 27
                FOR index%=5  TO 27 ‘ CLEAR ALL other radios
                    IF index%<>itemHit% THEN SetDialogBut Selection&,index%,1
                NEXT index%
                ‘ Setup the Dialog selections
                SetDialogBut Selection&,itemHit%,2
                IF itemHit%=5 THEN EditString$=”ALRT”
                IF itemHit%=6 THEN EditString$=”APPL”
                IF itemHit%=7 THEN EditString$=”BNDL”
                IF itemHit%=8 THEN EditString$=”CNTL”
                IF itemHit%=9 THEN EditString$=”CURS”
                IF itemHit%=10 THEN EditString$=”DITL”
                IF itemHit%=11 THEN EditString$=”DLOG”
                IF itemHit%=12 THEN EditString$=”DRVR”
                IF itemHit%=13 THEN EditString$=”FOND”
                IF itemHit%=14 THEN EditString$=”FONT”
                IF itemHit%=15 THEN EditString$=”FREF”
                IF itemHit%=16 THEN EditString$=”GNRL”
                IF itemHit%=17 THEN EditString$=”ICN#”
                IF itemHit%=18 THEN EditString$=”ICON”
                IF itemHit%=19 THEN EditString$=”MBAR”
                IF itemHit%=20 THEN EditString$=”MENU”
                IF itemHit%=21 THEN EditString$=”PAT”
                IF itemHit%=22 THEN EditString$=”PAT#”
                IF itemHit%=23 THEN EditString$=”PICT”
                IF itemHit%=24 THEN EditString$=”SIZE”
                IF itemHit%=25 THEN EditString$=”STR#”
                IF itemHit%=26 THEN EditString$=”STR “
                IF itemHit%=27 THEN EditString$=”WIND”
                SetDialogText Selection&,4,EditString$

            CASE ELSE
                FOR index%=5  TO 27 ‘ CLEAR ALL radio buttons
                    SetDialogBut Selection&,index%,1
                NEXT index%

        END SELECT
    WEND   ‘ Handle DIALOG items until EXIT selected
    GetDialogText Selection&,4,NewType$
    DisposeDialog Selection&  ‘       Flush the DIALOG out of memory
END SUB ‘     END of unit

The following Dialog resource file should either be created with Compiled with a resource compiler or recreated with ResEdit or Prototyper.

{2}
resource  ‘PICT’ (600, purgeable)
{
    49,
    {-1, -1, 35, 70},
    {17; 1; 160; 0; 130; 1; 0; 10; 255; 255; 255; 255; 0
    ; 35; 0; 70; 7; 0; 3; 0; 3; 11; 0; 21; 0
    ; 21; 64; 0; 1; 0; 1; 0; 35; 0; 70; 160; 0
    ; 131; 255}
};

resource  ‘DITL’ (10000 , “NewTypeDialog”)
{
  {
    {130, 146, 156, 207},
      Button {enabled, “OK”};
    {130, 26, 155, 88},
      Button {enabled, “Cancel”};
    {120, 246, 136, 297},
      StaticText {enabled, “Other:”};
    {120, 306, 136, 357},
      EditText {enabled, “”};
    {20, 26, 42, 90},
      RadioButton {enabled, “ALRT”};
    {40, 26, 60, 81},
      RadioButton {enabled, “APPL”};
    {60, 26, 82, 90},
      RadioButton {enabled, “BNDL”};
    {80, 26, 102, 90},
      RadioButton {enabled, “CNTL”};
    {100, 26, 120, 81},
      RadioButton {enabled, “CURS”};
    {20, 96, 42, 160},
      RadioButton {enabled, “DITL”};
    {40, 96, 62, 160},
      RadioButton {enabled, “DLOG”};
    {60, 96, 82, 160},
      RadioButton {enabled, “DRVR”};
    {80, 96, 102, 160},
      RadioButton {enabled, “FOND”};
    {100, 96, 122, 160},
      RadioButton {enabled, “FONT”};
    {20, 166, 40, 221},
      RadioButton {enabled, “FREF”};
    {40, 166, 62, 230},
      RadioButton {enabled, “GNRL”};
    {60, 166, 80, 221},
      RadioButton {enabled, “ICN#”};
    {80, 166, 100, 221},
      RadioButton {enabled, “ICON”};
    {100, 166, 120, 221},
      RadioButton {enabled, “MBAR”};
    {20, 236, 40, 296},
      RadioButton {enabled, “MENU”};
    {40, 236, 62, 300},
      RadioButton {enabled, “PAT “};
    {60, 236, 80, 291},
      RadioButton {enabled, “PAT#”};
    {80, 236, 102, 300},
      RadioButton {enabled, “PICT”};
    {100, 236, 120, 291},
      RadioButton {enabled, “SIZE”};
    {20, 306, 40, 361},
      RadioButton {enabled, “STR#”};
    {40, 306, 62, 370},
      RadioButton {enabled, “STR “};
    {60, 306, 80, 361},
      RadioButton {enabled, “WIND”};
    {123, 139, 161, 212},
      Picture {enabled, 600}
  }
};

resource  ‘DLOG’ (10000 , “NewTypeDialog”)
{
    {50, 120, 223, 504},
    1,
    invisible,
    noGoAway,
    0x1,
    10000,
    “NewTypeDialog”
};

I came across a bug in the AlertMover program which I include a fix here. The problem was that AlertMover would not save to an existing file. There are some fundamental problems with some of the sample programs on the QuickBASIC examples disk which are related to finding the filename of the application program. Microsoft added the SYSTEM(7) function after the manual was printed and so was probably not known or available at the time the demo programs were written. Changes could be made to the other programs in a similar manner. Here is the fix:

WAS:

‘    AlertMover
‘    © Sharon Zardetto Aker
‘    © 1988 by Microsoft Corp.
‘    Modified from Sharon Zardetto Aker’s original to take
‘    advantage of new QB features.
‘
‘------------------------------------------------------------
‘
    CLEAR,100000&
    OPTION BASE 1

SH=SYSTEM(6)    ‘Get screen height
SW=SYSTEM(5)    ‘Get screen width

IS:
‘    AlertMover
‘    © Sharon Zardetto Aker
‘    © 1988 by Microsoft Corp.
‘    Modified from Sharon Zardetto Aker’s original to take
‘    advantage of new QB features.
‘    Modified again so that it would create new files properly
‘    by Dave Kelly 9/17/88
‘------------------------------------------------------------
‘
    CLEAR,100000&
    OPTION BASE 1

DIM SHARED IOPB%(60),fil$   :’used by new subprogram ***************

SH=SYSTEM(6)    ‘Get screen height
SW=SYSTEM(5)    ‘Get screen width

WAS:
   IF SYSTEM(4) THEN    ‘If compiled...
        openResFile “Demo Resources”,ref%
    ELSE    ‘if interpreted, get File reference number of this source
        ref%=PEEKW(&HA5A)
    END IF
    ON BREAK GOSUB quit :BREAK ON
    MENU 1,0,1,”File”

IS:
   IF SYSTEM(4) THEN    ‘If compiled...
        PgmPath$=””
        ref%= SYSTEM(7)
        GetPathName ref%, PgmName$
        parse PgmName$,path$    ‘separate file name from the path
        OpenResFile PgmName$,ref%
    ELSE    ‘if interpreted, get File reference number of this source
        ref%=PEEKW(&HA5A)
    END IF
    ON BREAK GOSUB quit :BREAK ON
    MENU 1,0,1,”File”

Then add the following subprograms to the end: (These routines were taken from the ‘GetPathNames’ demo program which is included with MS QuickBASIC version 1.0). This is a great way to find the pathnames of files you are using.

‘----------------------------------------------------------------
‘   Gets the full path name of a file given the file reference
‘  number of file.  The file reference may be obtained from
‘    OpenResfile, SYSTEM(7), GetChanRefNum, or various low 
‘    memory locations.
‘
SUB GetPathName(ref%,path$) STATIC
    fil$=”” : Folder$=””
    GetFCBInfo IOPB%(0),fil$,ref%
    path$=fil$
    DirID&=IOPB%(29)*65536&+IOPB%(30)
    VRefNum%=IOPB%(26)
    WHILE DirID&<>1
        GetCatInfo IOPB%(0),Folder$,DirID&,VRefNum%
        path$=Folder$+”:”+path$
        DirID&=IOPB%(50)*65536&+IOPB%(51)
    WEND
END SUB

‘----------------------------------------------------------------
SUB parse(filename$,path$) STATIC
index%=1
    WHILE index% ‘<>0
        last%=index%
        index%=INSTR(index%+1,filename$,”:”)
    WEND
    IF last%=1 THEN  ‘there was no path
        path$=””
    ELSE             ‘divide filenamein$ into path$ and filename$
        path$=LEFT$(filename$,last%)
        filename$=RIGHT$(filename$,LEN(filename$)-last%)
    END IF
END SUB
 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Apple Security Update 2015-005 - For OS...
Apple Security Update 2015-005 is recommended for all users and improves the security of OS X. For detailed information about the security content of this update, please visit: http://support.apple.... Read more
Apple HP Printer Drivers 3.1 - For OS X...
Apple HP Printer Drivers includes the latest HP printing and scanning software for OS X Lion or later. For information about supported printer models, see this page. Version 3.1: The latest printing... Read more
Epson Printer Drivers 3.1 - For OS X 10....
Epson Printer Drivers installs the latest software for your EPSON printer or scanner for OS X Yosemite, OS X Mavericks, OS X Mountain Lion, and OS X Lion. For more information about printing and... Read more
Xcode 6.4 - Integrated development envir...
Xcode provides everything developers need to create great applications for Mac, iPhone, and iPad. Xcode brings user interface design, coding, testing, and debugging into a united workflow. The Xcode... Read more
OS X Yosemite 10.10.4 - Apple's lat...
OS X Yosemite is Apple's newest operating system for Mac. An elegant design that feels entirely fresh, yet inherently familiar. The apps you use every day, enhanced with new features. And a... Read more
Dash 3.0.2 - Instant search and offline...
Dash is an API Documentation Browser and Code Snippet Manager. Dash helps you store snippets of code, as well as instantly search and browse documentation for almost any API you might use (for a full... Read more
FontExplorer X Pro 5.0 - Font management...
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
Typinator 6.6 - Speedy and reliable text...
Typinator turbo-charges your typing productivity. Type a little. Typinator does the rest. We've all faced projects that require repetitive typing tasks. With Typinator, you can store commonly used... Read more
Arq 4.12.1 - Online backup to Google Dri...
Arq is super-easy online backup for the Mac. Back up to your own Google Drive storage (15GB free storage), your own Amazon Glacier ($.01/GB per month storage) or S3, or any SFTP server. Arq backs up... Read more
Gutenprint 5.2.11-pre1 - Quality drivers...
Gutenprint is a suite of printer drivers that may be used with most common UNIX print spooling systems, including CUPS, lpr, LPRng, or others. Gutenprint currently supports over 2000 printer models.... Read more

Vector 2 is Officially a Thing and it...
Vector is a pretty cool parkour-driven runner that's gotten a pretty decent following since it first came out - although personally I think more people could stand to show it some love. Anyway, Nekki has announced that a sequel isofficially on its... | Read more »
This Week at 148Apps:June 22-26, 2015
June's Summer Journey Continues With 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,... | Read more »
LEGO® Minifigures Online (Games)
LEGO® Minifigures Online 1.0.1 Device: iOS iPhone Category: Games Price: $4.99, Version: 1.0.1 (iTunes) Description: | Read more »
World of Tanks Blitz celebrates its firs...
Today marks the first anniversary of the launch of World of Tanks Blitz, the mobile version of the PC tank battler, World of Tanks. World of Tanks Blitz launched on iOS and Android on June 26th last year and to celebrate, Wargaming is giving all... | Read more »
Heroes and Castles 2 Has its Own Standal...
Heroes and Castles 2 is a third-person castle defense game from the same team behind Block Fortress and Bug Heroes. It's cool, it's fun, and now it has its very own free version. [Read more] | Read more »
Formula Cartoon All-Stars Lets You Race...
Ever want to pit your favorite characters from shows like Steven Universe, Adventure Time, and Regular Show against each other in a not quite death race? Well once upon a time you could, but Formula All Stars Touch N' Go doesn't exist anymore. Hope... | Read more »
Retype - Typography Photo Editor (Photo...
Retype - Typography Photo Editor 1.0 Device: iOS Universal Category: Photography Price: $2.99, Version: 1.0 (iTunes) Description: Retype is built out of passion for great typography and it's all about adding text to photo with style... | Read more »
Hungry Shark Evolution Celebrates Shark...
Shark Week is almost here, as is Independence Day, so naturally Hungry Shark Evolution is going to get in on the action. Yes, even the fireworks. [Read more] | Read more »
The New Trivia Crack Will Feature a Musi...
It's official: iHeartMedia (you may know them from iHeartRadio) will be in charge of providing music-related questions for Trivia Crack's upcoming sequel. Also Trivia Crack is getting a sequel. [Read more] | Read more »
Toca Life: City (Education)
Toca Life: City 1.0 Device: iOS Universal Category: Education Price: $2.99, Version: 1.0 (iTunes) Description: Welcome to Toca Life: City, a metropolis filled with everyday fun! Customize characters, explore exciting locations and... | Read more »

Price Scanner via MacPrices.net

OtterBox Releases New Symmetry Series Metalli...
Otterbox’s new Symmetry Series of smartphone cases flaunts the best of both both street style and street smarts with their new metallic finishes and trusted OtterBox protection for iPhone 6 and... Read more
MacBook Airs on sale for up to $75 off MSRP
Save up to $75 on the purchase of a new 2015 13″ or 11″ 1.6GHz MacBook Air at the following resellers. Shipping is free with each model: 11" 128GB MSRP $899 11" 256GB... 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
Save up to $600 with Apple refurbished Mac Pr...
The Apple Store has Apple Certified Refurbished Mac Pros available 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
Mac Pros on sale for up to $260 off MSRP
B&H Photo has Mac Pros on sale for up to $260 off MSRP. Shipping is free, and B&H charges sales tax in NY only: - 3.7GHz 4-core Mac Pro: $2799, $200 off MSRP - 3.5GHz 6-core Mac Pro: $3719.99... Read more
Save up to $400 on 2014 15-inch Retina MacBoo...
B&H Photo has previous-generation 2014 15″ Retina MacBook Pros on sale for up to $400 off original MSRP. Shipping is free, and B&H charges NY sales tax only: - 15″ 2.2GHz Retina MacBook Pro... Read more
15-inch Retina MacBook Pros on sale for up to...
B&H Photo has new 2015 15″ Retina MacBook Pros on sale for up to $125 off MSRP including free shipping plus NY sales tax only: - 15″ 2.2GHz Retina MacBook Pro: $1899.99 $100 off - 15″ 2.5GHz... Read more
College Student Deals: Additional $100 off Ma...
Take an additional $100 off all MacBooks and iMacs at Best Buy Online with their College Students Deals Savings, valid through July 11, 2015. Anyone with a valid .EDU email address can take advantage... Read more
Apple refurbished Time Capsules available for...
The Apple Store has certified refurbished Time Capsules available for $100 off MSRP. Apple’s one-year warranty is included with each Time Capsule, and shipping is free: - 2TB Time Capsule: $199, $100... Read more
Newsweek Launches iPhone App
The venerable weekly news magazine Newsweek, owned by IBT Media, has announced the launch of its first iPhone app. The new app is available through Apple’s App Store and will allow consumers to read... Read more

Jobs Board

*Apple* TV Live Streaming Frameworks Test En...
**Job Summary** Work and contribute towards the engineering of Apple 's state-of-the-art products involving video, audio, and graphics in Interactive Media Group (IMG) at Read more
Project Manager, WW *Apple* Fulfillment Ope...
…a senior project manager / business analyst to work within our Worldwide Apple Fulfillment Operations and the Business Process Re-engineering team. This role will work Read more
Senior Data Scientist, *Apple* Retail - Onl...
**Job Summary** Apple Retail - Online sells Apple products to customers around the world. In addition to selling Apple products with unique services such as iPad Read more
*Apple* Music Producer - Apple (United State...
**Job Summary** Apple Music seeks a Producer to help shepherd some of the most important content and editorial initiatives within the music app, with a particular focus 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
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.