TweetFollow Us on Twitter

Pascal Like Modula2
Volume Number:2
Issue Number:5
Column Tag:Pascal Procedures

Making Pascal Act Like Modula2

By Steve Rabalais, Rabalais Computing, Tempe, AZ

Seperate Compilation with TML Pascal

In order to develop large applications for the MacIntosh, it is desirable to have the capability to seperate your code into easily manageable pieces. This allows for modular programming and avoids having to compile all of your program each time which can be time consuming and frustrating for small changes. This article presents a procedure for doing this using the TML Pascal compiler.

Theory

The MDS linker (or Consulair's 'smart' linker) will take seperate 'REL' files containing the proper linkage information and combine them to create a stand alone application. What this procedure does is to describe the process of creating these 'REL' files. Basically, each module is a seperate Pascal program. The trick is to get the link files created properly so that the seperate modules will link together if one is changed and re-compiled.

Example Program

The example program below consists of three (3) seperate modules representing three segments of a single application. The first module (X_mod1.Pas) is the 'main' program. It contains the compiler directives necessary to create a 'LINK' text file for the LINKER. External references in segments are satisfied with:

1. Include statements for standard symbols and declarations. (ie. {$I quickdraw.ipas.}.)

2. Include statements for program globals (ie. {$I X_globals.ipas})

3. EXTERNAL procedure references.

The external references will allow the compiler to 'assume' the procedure exists and generate the appropriate temporary code. The actual addresses will be satisfied at link time.

Scenario

The following scenario describes the compile/edit cycle for the example:

1. Compile X_mod1.Pas.

2 Compile X_mod2.Pas.

3. Compile X_mod3.Pas.

4. Link X_mod1.Link. (generated by X_mod1.Pas)

5. Run the application and discover a problem with X_mod2.Pas.

6. Edit X_mod2.Pas and compile 'only' X_mod2.Pas.

7. Link x_mod1.Link

8. Verify application runs properly.

Hints

These hints are a result of experience.

1. Occasionally an unidentified character will 'creep' into a text file which the compiler cannot recognize. The Pascal statement will look correct but the compiler will not accept it. To see the offending character, use the 'SHOW INVISIBLES' option in the MDS editor. It is usually a 'box looking' character. Just delete it.

2. Since the 'main' program module creates the LINKER file, you have to 'force' the compiler to generate the linker code for the runtime packages that are used in the other modules. (ie $PAS files). This is done by putting in a Pascal statement in the main program that will invoke a runtime package. Example .. 'Concat' will invoke the runtime package $PAS$Str package).

Epilogue

This procedure will allow you to create an application of essentially an unlimited size using the TML Pascal compiler. For large applications, this procedure is essential. It is good programming practice to plan ahead.


PROGRAM X_mod1(Input,Output);

{$I MemTypes.ipas}
{$I QuickDraw.ipas}
{$I OSIntf.ipas}
{$I ToolIntf.ipas}
{$I PackIntf.ipas}

{$T APPL RABS}
{$B+}

{$I  X_globals.ipas}

{$U< X_mod2/Code}
{$U< X_mod3/Code}

PROCEDURE   P_mod1_proc1 (v_var1 : Str255) ; FORWARD;
 PROCEDURE P_mod2_proc1 (v_var1 : Str255) ; EXTERNAL;
 PROCEDURE P_mod3_proc1 (v_var1 : Str255) ; EXTERNAL;
PROCEDURE   P_mod1_proc2 (v_var1 : Str255) ; FORWARD; 

{====================================}
{== P_mod1_proc1 (v_var1 : Str255) ==}
{====================================}
PROCEDURE P_mod1_proc1;
BEGIN
  writeln (v_var1);
  writeln ('In P_mod1_proc1');
END;

{===================================}
{== P_mod1_proc2 (v_var1 :Str255) ==}
{===================================}
PROCEDURE P_mod1_proc2;
BEGIN
  writeln (v_var1);
  writeln ('In P_mod1_proc2');
END;

{===========================}
{== execution begins here ==}
{===========================}
BEGIN
  g_global1 := 000;
  REPEAT
    P_mod1_proc1 ('From mod1_main');
    P_mod2_proc1 ('From mod1_main');
    P_mod3_proc1 ('From mod1_main');
    writeln;
    writeln      ('Type a 999 to quit, any other number to loop');
    Readln       (g_global1);
  UNTIL (g_global1 = 999);
END.

PROGRAM X_mod2(Input,Output);

{$I MemTypes.ipas}
{$I QuickDraw.ipas}
{$I OSIntf.ipas}
{$I ToolIntf.ipas}
{$I PackIntf.ipas}

{$I X_globals.ipas}

PROCEDURE   P_mod2_proc1 (v_var1 : Str255); FORWARD ;
PROCEDURE   P_mod3_proc1 (v_var1 : Str255); EXTERNAL;
PROCEDURE   P_mod2_proc2 (v_var1 : Str255); FORWARD ;

 
{$S Code}
{====================================}
{== P_mod2_proc1 (v_var1 : Str255) ==}
{====================================}
PROCEDURE P_mod2_proc1;
BEGIN
  writeln (v_var1);
  writeln ('In P_mod2_proc1');
END;

{====================================}
{== P_mod2_proc2 (v_var1 : Str255) ==}
{====================================}
PROCEDURE P_mod2_proc2;
BEGIN
  writeln (v_var1);
  writeln ('In P_mod2_proc2');
END;

{$S main}
{==========}
{== main ==}
{==========}
BEGIN
  {------------------------}
  {-- Dummy main program --}
  {------------------------}
END.

PROGRAM X_mod3(Input,Output);

{$I MemTypes.ipas}
{$I QuickDraw.ipas}
{$I OSIntf.ipas}
{$I ToolIntf.ipas}
{$I PackIntf.ipas}

{$I X_globals.ipas}

PROCEDURE     P_mod3_proc1 (v_var1 : Str255); FORWARD;
  PROCEDURE   P_mod1_proc1 (v_var1 : Str255); EXTERNAL;
  PROCEDURE   P_mod2_proc1 (v_var1 : Str255); EXTERNAL;
PROCEDURE     P_mod3_proc2 (v_var1 : Str255); FORWARD;

 
{$S Code}
{====================================}
{== P_mod3_proc1 (v_var1 : Str255) ==}
{====================================}
PROCEDURE P_mod3_proc1;
BEGIN
  writeln (v_var1);
  writeln ('In P_mod3_proc1');
END;

{====================================}
{== P_mod3_proc2 (v_var1 : Str255) ==}
{====================================}
PROCEDURE P_mod3_proc2;
BEGIN
  writeln (v_var1);
  writeln ('In P_mod3_proc2');
END;

{$S main}
{==========}
{== main ==}
{==========}
BEGIN
  {------------------------}
  {-- Dummy main program --}
  {------------------------}
END.

{==============================================}
{== application globals available to all segments ==}
{==============================================}
VAR
  g_global1 : INTEGER ;
  g_global2 : Rect    ;
  g_global3 : LONGINT ;



]

!PAS$Xfer

X_Mod1
PAS$Sys
OSTraps
ToolTraps
PackTraps
< 
X_mod2/Code
< 
X_mod3/Code
PAS$StdIO
Dec2Str
Str2Dec
/Bundle
/Type 'APPL' 'RABS'
$ 

Fig. 1 Combined program output

 
AAPL
$100.53
Apple Inc.
+1.37
MSFT
$45.33
Microsoft Corpora
+0.22
GOOG
$586.86
Google Inc.
+4.70

MacTech Search:
Community Search:

Software Updates via MacUpdate

Apple Motion 5.1.2 - Create and customiz...
Apple Motion is designed for video editors, Motion 5 lets you customize Final Cut Pro titles, transitions, and effects. Or create your own dazzling animations in 2D or 3D space, with real-time... Read more
A Better Finder Rename 9.39 - File, phot...
A Better Finder Rename is the most complete renaming solution available on the market today. That's why, since 1996, tens of thousands of hobbyists, professionals and businesses depend on A Better... Read more
PopChar X 6.6 - Floating window shows av...
PopChar X helps you get the most out of your font collection. With its crystal-clear interface, PopChar X provides a frustration-free way to access any font's special characters. Expanded... Read more
MacUpdate Desktop 6.0.2 - Install Mac ap...
MacUpdate Desktop 6 brings seamless 1-click installs and version updates to your Mac. With a free MacUpdate account and MacUpdate Desktop 6, Mac users can now install almost any Mac app on macupdate.... Read more
PDFpenPro 6.3.2 - Advanced PDF toolkit f...
PDFpenPro allows users to edit PDF's easily. Add text, images and signatures. Fill out PDF forms. Merge or split PDF documents. Reorder and delete pages. Even correct text and edit graphics! Create... Read more
PDFpen 6.3.2 - Edit and annotate PDFs wi...
PDFpen allows users to easily edit PDF's. Add text, images and signatures. Fill out PDF forms. Merge or split PDF documents. Reorder and delete pages. Even correct text and edit graphics! Features... Read more
OS X Yosemite 10.10 DP6 - Developer Prev...
Note: This is a Developer Preview. You must be a registered Apple Mac Developer to download this update. You can also sign up for the free OS X Beta Program to download and preview public beta... Read more
Flavours 1.1.15 - Create and apply theme...
Flavours is a Mac application that allow users to create, apply and share beautifully designed themes. Classy Give your Mac a gorgeous new look by applying delicious themes! Easy Unleash your... Read more
EtreCheck 1.9.14 - For troubleshooting y...
EtreCheck is a simple little app to display the important details of your system configuration and allow you to copy that information to the Clipboard. It is meant to be used with Apple Support... Read more
iFFmpeg 4.5 - Convert multimedia files b...
iFFmpeg is a graphical front-end for FFmpeg, a command-line tool used to convert multimedia files between formats. The command line instructions can be very hard to master/understand, so iFFmpeg does... Read more

Latest Forum Discussions

See All

Go to Bed – An Interview With Touchfight...
Touchfight Games is an exciting new indie studio that was co-formed between game journalist and author Nathan Meunier, artist Leonard Kenyon, and programmer Jon Kenyon. Their debut game Go To Bed will be released this fall, and with all the... | Read more »
Assault Vector Review
Assault Vector Review By Rob Thomas on August 19th, 2014 Our Rating: :: SIMPLE STRATEGYUniversal App - Designed for iPhone and iPad While this hex-based warp ride is fine in theory, Assault Vector is a bit too simple to be... | Read more »
Tom Hanks’ Hanx Writer has Taken the App...
Tom Hanks’ Hanx Writer has Taken the App Store by Storm Posted by Jessica Fisher on August 19th, 2014 [ permalink ] iPad Only App - Designed for the iPad | Read more »
It Came from Canada: Galaxy Dash
With its use of well-established tropes like endless flying and sci-fi space shooting, the upcoming Galaxy Dash: Race to the Outer Run most likely won’t confound expectations. However, with its robust amount of opportunities for fun player... | Read more »
PromptSmart Review
PromptSmart Review By Jennifer Allen on August 19th, 2014 Our Rating: :: SNAPPY SPEECHGIVINGUniversal App - Designed for iPhone and iPad Offering you a teleprompter in your pocket, PromptSmart is immensely helpful for those who do... | Read more »
The Firm (Games)
The Firm 1 Device: iOS iPhone Category: Games Price: $.99, Version: 1 (iTunes) Description: RELEASE SPECIAL SALE 50%! Welcome to THE FIRM, Your profil retained our full consideration and we have the pleasure to inform you that your... | Read more »
They Need To Be Fed 3 (Games)
They Need To Be Fed 3 1.0.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0.0 (iTunes) Description: 360 degree gravity platforming is back! Run, jump, collect, avoid enemies and feed yourself to the monster at the... | Read more »
Who Wore it Best? Phantom Flower vs. And...
Who Wore it Best? takes a break from all the bloodshed to check out two decidedly tranquil and nature-loving puzzles games: Phantom Flower and And Then it Rained. [ Who Wore it Best? Phantom Flower vs. And Then it Rained is a post from... | Read more »
Sentinel 4: Dark Star Review
Sentinel 4: Dark Star Review By Jennifer Allen on August 19th, 2014 Our Rating: :: STURDY TOWER DEFENSEUniversal App - Designed for iPhone and iPad After 4 years, the latest entry to the Sentinel series is here. It’s not quite as... | Read more »
TrashEver2 - You can move your selected...
TrashEver2 - You can move your selected notes to trash box. 1.0.0 Device: iOS Universal Category: Productivity Price: $.99, Version: 1.0.0 (iTunes) Description: TrashEver is an application only for throwing away the note of Evernote... | Read more »

Price Scanner via MacPrices.net

Razer Taipan Mouse For Gamers And Non-Gamers...
If you’re a serious gamer on either Mac or Windows PCs, a serious gaming mouse is a necessity for first-tier performance. However, even if like me you’re not much of a gamer, there’s still a strong... Read more
15-inch 2.2GHz MacBook Pro on sale for $1899,...
Adorama has the new 15″ 2.2GHz Retina MacBook Pro on sale for $1899 including free shipping plus NY & NJ sales tax only. Their price is $100 off MSRP, and it’s the lowest price available for this... Read more
Mid-Size Tablet Shootout Posted: iPad mini wi...
I ‘m curious about how many iPads Apple is actually selling these days. It’s been widely rumored and anticipated that new models with A8 SoCs, 2 GB of RAM, 8 megapixel cameras, and fingerprint... Read more
The 15 Biggest iPad Air Problems And How To A...
What’s this? Fifteen “biggest” problems with the iPad Air? Does that mean there are a lot of smaller problems as well? Say it isn’t so! My old iPad 2 has manifested no hardware problems in three... Read more
TYLT Syncable-Duo, 2-in-1 USB Cable With Appl...
TYLT has introduced the Syncable-Duo, a universal cable solution for charging and syncing data to smartphones and tablets. The Syncable-Duo eliminates the need for multiple cables by incorporating... Read more
Save up to $140 off MSRP with Apple refurbish...
Apple is offering Certified Refurbished iPad Airs for up to $140 off MSRP. Apple’s one-year warranty is included with each model, and shipping is free. Stock tends to come and go with some of these... Read more
2.5GHz Mac mini on sale for $549, save $50
B&H Photo has the 2.5GHz Mac mini on sale for $549.99 including free shipping. That’s $50 off MSRP, and B&H will also include a free copy of Parallels Desktop software. NY sales tax only. Read more
Chromebooks Are Actually Sometimes A Better C...
Mac360′s Kate MacKenzie notes that when Steve Jobs announced the post-PC era, he was assuming that the dominant post-PC device would be the iPad he was unveiling, or another Apple product like the... Read more
Files-Finder Edition 1.0 app Brings Finder/Ex...
Appsicum’s Files Finder App is designed for iPad users who miss the functionality of the OS X Finder and Windows’ Explorer on their tablet. Files-Finder Edition App is a complete tool having rich... Read more
Apple and Samsung Both Face Growth Declines I...
As the tablet PC market matures and growth slows, the dominance of market leaders Apple and Samsung is also weakening, according to the latest NPD DisplaySearch Monthly Tablet PC Panel Shipment... Read more

Jobs Board

Project Manager / Business Analyst, WW *Appl...
…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
Position Opening at *Apple* - Apple (United...
**Job Summary** As businesses discover the power of Apple computers and mobile devices, it's your job - as a Solutions Engineer - to show them how to introduce these Read more
Position Opening at *Apple* - Apple (United...
**Job Summary** As more and more people discover Apple , they visit our stores seeking ways to incorporate our products into their lives. It's your job, as a Store Read more
Position Opening at *Apple* - Apple (United...
**Job Summary** Being a Business Manager at an Apple Store means you're the catalyst for businesses to discover and leverage the power, ease, and flexibility of Apple Read more
Project Manager / Business Analyst, WW *Appl...
…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
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.