TweetFollow Us on Twitter

Draw Towers
Volume Number:1
Issue Number:7
Column Tag:STRUCTURED PRogramming in Modula-2

Draw the Towers of Hanoi

By John Bogan

This month we will explore three items. First, we will continue to introduce the elements of Software Engineering in a historical perspective. Second, we will discuss why Modula-2 is not a hackers’ language and finally, we will look at a sample program that uses the Mac ROM to draw the starting position for the Towers of Hanoi.

A New Direction

Last month we saw that Software Engineering is capable of being abused as well as being able to provide important insights into the process of building good computer software. By the late 1960’s the Software Engineers had, in effect, dictated that COBOL would be the primary language of the FORTUNE 1000 probably until the end of the century. Most microcomputer programmers faced with the prospect of coding in COBOL would shudder in terror at the thought.

In 1968 Software Engineering took a turn for the better when a famous and well regarded European computer scientist lit a fire under the COBOL and FORTRAN programming community, a fire whose embers still smolder and flare up to this day. The scientist was E.W. Dijkstra and the arson was committed in the Communications of the ACM with a letter entitled “GOTO Statement Considered Harmful”. In this letter Dijkstra observed that after having read a multitude of programs in a variety of languages that the quality of a program was inversely proportional to the number of GOTO statements in that program. The graph below illustrates this discovery.

The idea is simple ... jumping around a program with branching statements leads to unreadable program texts (known in the trade as spaghetti code) which are next to impossible to debug or for a third party to pick up and read. Since ALGOL-60 (the European’s favorite language) has advanced control structures which permits GOTOless programming and FORTRAN doesn’t, the battle lines were drawn. Letter after letter poured into the journals feeding the flames.

Finally in 1972 in an effort to quell the controversy Dijkstra together with Dahl and Hoare published a book on just how to write high quality programs without using the dangerous GOTO statement. This book, Structured Programming, estab- lished once and for all that GOTOs are redundant. Every sequential program- ming task can be accomplished with a combination of three constructs.

• sequence:

BEGIN ... s1 ... s2 ... s3 ... END

• iteration:

WHILE c1 DO ... s1 ... ENDWHILE

• conditional:

IF c1 THEN s1 ENDIF

If acceptance in the curriculum of the worlds’ Universities’ Computer Science Departments is a valid measure then Structured Programming is an overwhelming success. Only those programmers corrupted by traditional BASIC or Assembler still grasp at the past and argue the merits of the GOTO. Meanwhile the course of Software Engineering was changed forever. An example of this change is Modula-2. This language is rich in structured control statements and does not support the GOTO at all. There are no statement labels in Modula-2 and while it is possible to write poor code in Modula it is impossible to write spaghetti code.

The structured control statements supported by Modula are the statement sequence, the WHILE ... DO, the REPEAT ... UNTIL, the FOR ... TO ... BY ... DO, the LOOP ... EXIT, the IF ... THEN ... ELSIF, the CASE ... OF and the WITH ... DO statements.

What is Structured?

In some ways this is a very difficult question to answer. For adherents of the Structured Techniques the concept of “Structured” is very much like the Bible is to Jerry Falwell. It is the guiding light, the one true path to paradise, the blessed and final word on how to think about solving complex logical problems.

A slightly more dispassionate view might produce the following definition of structured - a philosophy for solving problems which attempts to conserve scarce resources by arriving at the perfect solution in the fewest attempts by following a plan.

Why Plan When You Can Hack?

The idea of a plan is very important in understanding the Structured Techniques, Software Engineering and Modula-2. It also illustrates why Modula-2 is not particularly well suited for hacking. Most hackers I have known use the technique of incremental discovery or trial by error. In other words programs just grow from line 1 until the last bell and whistle is debugged. Assembly language and to a lesser extent C are well suited for this type of programming. Modula-2 most definitely is not. As we will see in future columns the quaility of a Modula-2 program is dependent on the quality of the detailed planning that occurs before the first line of code is written. In many ways this dependence on upfront planning is a distinct disadvantage for learning a new and unique system like the Mac. So many of the techniques peculiar to the Mac (such as the entire user interface or resources or Quickdraw) are best approached and mastered by trial and error hacks. When you combine this reality with the compile-link-execute overhead of Modula-2 it should be obvious why Modula-2 is not particularly suited to casual hacking. A good strategy for making the best use of Modula-2 would be to learn the Mac with Apple’s interpreted Pascal and then to translate these programs into the much faster Modula-2. As we progress in these columns we will see just how close Modula and Pascal are to each other so this suggestion won’t seem so painful. The bottom line is that Modula-2 is not a language for the seat-of-the-pants hacker.

This Month’s Code

The piece of Modula-2 code that follows is primarily useful because it shows how to access the Mac ROM on a 128K machine. The Quickdraw calls used are SetRect, PaintRect and PaintRoundRect. You should be aware that the method of specifying ROM calls is different for a 512K box. Also it should be noted that the data types VHSelect, Point and Rect could have been imported blindly instead of spelled out but then their internal structures would have been hidden and the topic of information hiding in Modula-2 is an advanced and complex issue.

MODULE Hanoi;
   (* build starting position for Hanoi Towers *)

   FROM Terminal IMPORT ClearScreen;
   FROM InOut IMPORT WriteString, ReadCard, WriteLn;
  
   (* data structures for Quickdraw calls *)
   TYPE 
      VHSelect = (v,h);
      
      Point = RECORD
                 CASE INTEGER OF
     0: v: INTEGER;
        h: INTEGER;
        
    |1: vh: ARRAY VHSelect OF INTEGER;
  END; (* CASE *)
       END; (* RECORD *)
       
      Rect = RECORD
                CASE INTEGER OF
    0: top: INTEGER;
       left: INTEGER;
       bottom: INTEGER;
       right: INTEGER;
       
   |1: topLeft: Point;
       botRight: Point;
  END; (* CASE *)
              END; (* RECORD *)
       
   CONST
     CX = 355B;
     QuickDraw1ModNum = 2; (* absolute module number 
        of QuickDraw1 *)
   VAR
      r: Rect; NumDisks: CARDINAL;
      
   PROCEDURE SetRect (VAR r: Rect; left,top,right,bottom: INTEGER);
      CODE CX; QuickDraw1ModNum; 51 END SetRect;
   
   PROCEDURE PaintRect  (r: Rect);
      CODE CX; QuickDraw1ModNum; 62 END PaintRect;
   
   PROCEDURE PaintRoundRect(r: Rect; ovWd, ovHt: INTEGER);
      CODE CX; QuickDraw1ModNum; 67 END PaintRoundRect;
   
   PROCEDURE DrawBase;
      CONST 
  BaseLeft = 36;
  BaseTop = 261;
  BaseRight = 476;
  BaseBottom = 270;
   BEGIN 
      SetRect(r,BaseLeft,BaseTop,BaseRight,BaseBottom);
      PaintRect(r);
   END DrawBase;
   
   PROCEDURE DrawPosts;
      CONST
         PostTop = 144;
  PostBottom = 261;
  PostWidth = 6;
  HalfPostWidth = PostWidth DIV 2;
  PostPosition = 128;
      VAR
         n, PostLeft, PostRight: INTEGER;
   BEGIN
      n:=1;
      WHILE n <= 3 DO
  PostLeft := (PostPosition * n) - HalfPostWidth;
  PostRight := PostLeft + PostWidth;
  SetRect(r,PostLeft,PostTop,PostRight,PostBottom);
  PaintRect(r);
  n:= n + 1;
      END; (* WHILE *)
   END DrawPosts;
   
   PROCEDURE DrawVarDisks(numberofdisks: CARDINAL);
      CONST
         bigdiskleft = 128 - 60;
  bigdisktop = 261 - 12;
  bigdiskright = 128 + 60;
  bigdiskbottom = 261;
  deltalength = 5;
  deltadepth = 12;
      VAR leftedge, topedge, rightedge, bottomedge: INTEGER;
          i: CARDINAL;
   BEGIN
      IF (numberofdisks > 2) AND (numberofdisks < 10)
         THEN
     leftedge := bigdiskleft; topedge := bigdisktop;
     rightedge := bigdiskright; bottomedge := bigdiskbottom;
     SetRect(r,leftedge,topedge,rightedge,bottomedge);
     PaintRoundRect(r,40,40);
     FOR i := 1 TO numberofdisks - 1 DO
        leftedge := leftedge + deltalength;
        topedge := topedge - deltadepth;
        rightedge := rightedge - deltalength;
        bottomedge := bottomedge - deltadepth;
        SetRect(r,leftedge,topedge,rightedge,bottomedge);
        PaintRoundRect(r,40,40);
     END; (* FOR *)
  END; (* IF *)
   END DrawVarDisks;
   
   PROCEDURE GetInput(VAR NDisks: CARDINAL);
   BEGIN
      ClearScreen;
      WriteString(“Enter number of disks (between 3 to 9)”);
      WriteLn;
      WriteString(“To quit - enter number out of range”);
      ReadCard(NDisks);
      ClearScreen;
   END GetInput;
   
   PROCEDURE InitGraphics(NumberofDisks: CARDINAL);
   BEGIN
      DrawBase;
      DrawPosts;
      DrawVarDisks(NumberofDisks);
   END InitGraphics;
   
   PROCEDURE ExecuteTowers;
   VAR Delay: CARDINAL;
   BEGIN
      FOR Delay := 1 TO 30000 DO  END; (* FOR *)
   END ExecuteTowers;
   
BEGIN
   GetInput(NumDisks);
   WHILE (NumDisks >= 3) AND (NumDisks <= 9) DO
      InitGraphics(NumDisks);
      ExecuteTowers;
      GetInput(NumDisks);
   END; (* WHILE *)
END Hanoi.
     

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

LibreOffice 4.4.3 - Free, open-source of...
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
FoldersSynchronizer 4.2.1 - Synchronize...
FoldersSynchronizer is a popular and useful utility that synchronizes and backs-up files, folders, disks and boot disks. On each session you can apply special options like Timers, Multiple Folders,... Read more
Simon 4.0.2 - Monitor changes and crashe...
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
Cocktail 8.1.2 - General maintenance and...
Cocktail is a general purpose utility for OS X that lets you clean, repair and optimize your Mac. It is a powerful digital toolset that helps hundreds of thousands of Mac users around the world get... Read more
Cyberduck 4.6.4 - FTP and SFTP browser....
Cyberduck is a robust FTP/FTP-TLS/SFTP browser for the Mac whose lack of visual clutter and cleverly intuitive features make it easy to use. Support for external editors and system technologies such... Read more
Herald 5.0.2 - Notification plugin for M...
Note: Versions 2.1.3 (for OS X 10.7), 3.0.6 (for OS X 10.8), and 4.0.8 (for OS X 10.9) are no longer supported by the developer. Herald is a notification plugin for Mail.app, Apple's Mac OS X email... Read more
DEVONthink Pro 2.8.3 - Knowledge base, i...
Save 10% with our exclusive coupon code: MACUPDATE10 DEVONthink Pro is your essential assistant for today's world, where almost everything is digital. From shopping receipts to important research... Read more
Boom 2 1.0.1 - System-wide pro audio app...
Boom 2 is a system-wide volume booster and equalizer app that is designed especially for OS X 10.10 Yosemite. It comes with a smart interface, self-calibrates itself according to your Mac, offers... Read more
Apple Security Update 2015-001 - For OS...
Apple Security Update 2015-001 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
Drive Genius 4.0.1 - Powerful system uti...
Drive Genius 4 gives you faster performance from your Mac while also protecting it. The award-winning and improved DrivePulse feature alerts you to hard drive issues before they become major problems... Read more

Unlock Sunshine Girl in Ironkill with th...
Unlock Sunshine Girl in Ironkill with this special 148Apps code Posted by Rob Rich on January 29th, 2015 [ permalink ] Robo-fighter Ironkill has been out on iOS a | Read more »
Crossroad Zombies Review
Crossroad Zombies Review By Jordan Minor on January 29th, 2015 Our Rating: :: CROSSWALKING DEADiPad Only App - Designed for the iPad Crossroad Zombies is a rough draft of a cool genre mash-up.   | Read more »
Blood Brothers 2 – Tips, Cheats, and Str...
War is hell: Is it the kind of hell you want to check out? Read our Blood Brothers 2 review to find out! Blood Brothers 2, DeNA’s follow-up to the original Blood Brothers, is an intriguing card collecting / role-playing / strategy hybrid. There’s... | Read more »
Blood Brothers 2 Review
Blood Brothers 2 Review By Nadia Oxford on January 29th, 2015 Our Rating: :: AN AGGRAVATING RELATIVEUniversal App - Designed for iPhone and iPad Blood Brothers 2 is built on a simple, solid foundation, but its free-to-play system... | Read more »
I AM BREAD, the Toast of the Town, is Ro...
Have you ever dreamt of being deliciously gluten-y? Do you feel passionate about Rye and Wheat? The guys at Bossa Studios do and that is why they are bringing I AM BREAD to iOS soon. The loafy app will feature all the new content that is being... | Read more »
Fahrenheit: Indigo Prophecy Remastered R...
Fahrenheit: Indigo Prophecy Remastered Review By Jennifer Allen on January 29th, 2015 Our Rating: Universal App - Designed for iPhone and iPad 10 years after its initial release and Fahrenheit: Indigo Prophecy still feels like a... | Read more »
Evolve: Hunters Quest is a Match-3 That...
Evolve: Hunters Quest is a Match-3 That Has You Hunting Up Some Big Game. Posted by Jessica Fisher on January 29th, 2015 [ permalink ] | Read more »
Destructamundo Review
Destructamundo Review By Jordan Minor on January 29th, 2015 Our Rating: :: WRECKING CREWUniversal App - Designed for iPhone and iPad Destructamundo blows up real good.   | Read more »
The Sandbox Gets Exclusive Update, Adds...
The Sandbox Gets Exclusive Update, Adds Invincible Characters Campagin Posted by Tre Lawrence on January 29th, 2015 [ permalink ] | Read more »
Mean Girls: The Game Review
Mean Girls: The Game Review By Jordan Minor on January 29th, 2015 Our Rating: :: FETCHUniversal App - Designed for iPhone and iPad A Mean Girls tower defense game makes way more sense than you’d think.   | Read more »

Price Scanner via MacPrices.net

Back in stock: Refurbished iPod nanos for $99...
The Apple Store has Apple Certified Refurbished 16GB iPod nanos available for $99 including free shipping and Apple’s standard one-year warranty. That’s $50 off the cost of new nanos. Most colors are... Read more
New Good Management Suite Simplifies Enterpri...
Good Technology has announced the availability of the Good Management Suite, a comprehensive cross-platform solution for organizations getting started with mobile business initiatives. Built on the... Read more
15-inch 2.0GHz Retina MacBook Pro (refurbishe...
The Apple Store has Apple Certified Refurbished previous-generation 15″ 2.0GHz Retina MacBook Pros available for $1489 including free shipping plus Apple’s standard one-year warranty. Their price is... Read more
15-inch 2.5GHz Retina MacBook Pro on sale for...
Amazon has the 15″ 2.5GHz Retina MacBook Pro on sale for $2319.99 including free shipping. Their price is $180 off MSRP, and it’s the lowest price available for this model from any reseller. Read more
iPad Turns Five – The ”Book Mystique
Five years ago this week, the late Steve Jobs took the stage at an Apple special press event to unveil the first Apple iPad — a slab-shaped, hand-holdable device that was to shake the personal... Read more
Sale! 15-inch Retina MacBook Pros for up to $...
B&H Photo has the new 2014 15″ Retina MacBook Pros on sale for $150 off MSRP for a limited time. Shipping is free, and B&H charges NY sales tax only: - 15″ 2.2GHz Retina MacBook Pro: $1889.99... Read more
Apple refurbished Mac minis for up to $150 of...
The Apple Store has restocked Apple Certified Refurbished 2014 Mac minis, with models available starting at $419. Apple’s one-year warranty is included with each mini, and shipping is free: - 1.4GHz... Read more
Apple Releases New Tranche Of OS Updates For...
Apple has released incremental bugfix and security updates for its most recent Mac and iOS versions. OS X Yosemite 10.10.2 Update Apple says this update includes the following improvements: Resolves... Read more
Samsung To Be Main Supplier Of A9 Chips For i...
Korea’s Maeil Business Newspaper reports that Samsung has beat out its chipmaking rivals, Taiwan’s Qualcomm and TSMC, as supplier of chipsets for the next generations of both its own Galaxy S6 and... Read more
Save up to $340 on iMacs with Apple Certified...
The Apple Store has Apple Certified Refurbished iMacs available for up to $340 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free. These are the best prices on... Read more

Jobs Board

SW QA Engineer - *Apple* TV - Apple (United...
**Job Summary** The Apple TV team is looking for experienced Quality Assurance Engineers with a passion for delivering first in class home entertainment solutions. **Key Read more
*Apple* Retail - Multiple Positions(US) - Ap...
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* Systems Engineer - Pre Sales, Educat...
…is responsible for proactively providing technical expertise to drive sales of Apple solutions into assigned accounts. The SE architects, validates, and assists in Read more
*Apple* Solutions Consultant - Retail Sales...
As an ambassador of the Apple brand, the ASC is accountable for driving sales performance by: Connecting with customers. Discovering customers' needs and values. Showing Read more
*Apple* Solutions Consultant - Retail Sales...
As an ambassador of the Apple brand, the ASC is accountable for driving sales performance by: Connecting with customers. Discovering customers' needs and values. Showing Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.