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

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

PDFKey Pro 4.3 - Edit and print password...
PDFKey Pro can unlock PDF documents protected for printing and copying when you've forgotten your password. It can now also protect your PDF files with a password to prevent unauthorized access and/... Read more
Kodi 15.0.beta1 - Powerful media center...
Kodi (was XBMC) is an award-winning free and open-source (GPL) software media player and entertainment hub that can be installed on Linux, OS X, Windows, iOS, and Android, featuring a 10-foot user... Read more
DiskCatalogMaker 6.4.12 - Catalog your d...
DiskCatalogMaker is a simple disk management tool which catalogs disks. Simple, light-weight, and fast. Finder-like intuitive look and feel. Super-fast search algorithm. Can compress catalog data... Read more
Macs Fan Control 1.3.0.0 - Monitor and c...
Macs Fan Control allows you to monitor and control almost any aspect of your computer's fans, with support for controlling fan speed, temperature sensors pane, menu-bar icon, and autostart with... Read more
Lyn 1.5.11 - Lightweight image browser a...
Lyn is a lightweight and fast image browser and viewer designed for photographers, graphic artists and Web designers. Featuring an extremely versatile and aesthetically pleasing interface, it... Read more
NeoOffice 2014.11 - Mac-tailored, OpenOf...
NeoOffice is a complete office suite for OS X. With NeoOffice, users can view, edit, and save OpenOffice documents, PDF files, and most Microsoft Word, Excel, and PowerPoint documents. NeoOffice 3.x... Read more
LaunchBar 6.4 - Powerful file/URL/email...
LaunchBar is an award-winning productivity utility that offers an amazingly intuitive and efficient way to search and access any kind of information stored on your computer or on the Web. It provides... Read more
Remotix 3.1.4 - Access all your computer...
Remotix is a fast and powerful application to easily access multiple Macs (and PCs) from your own Mac. Features Complete Apple Screen Sharing support - including Mac OS X login, clipboard... Read more
DesktopLyrics 2.6.6 - Displays current i...
DesktopLyrics is an application that displays the lyrics of the song currently playing in "iTunes" right on your desktop. The lyrics for the song have to be set in iTunes; DesktopLyrics does nothing... Read more
VOX 2.5.1 - Music player that supports m...
VOX is a beautiful music player that supports many filetypes. The beauty is in its simplicity, yet behind the minimal exterior lies a powerful music player with a ton of features and support for all... Read more

This Week at 148Apps: May 18-22, 2015
May Days at 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, standing out above the... | Read more »
Biz Builder Delux (Games)
Biz Builder Delux 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: Ah, there's nothing like the rhythmic bustle of a burgeoning business burg... especially when you're the one building it... | Read more »
Auroch Digital is Bringing Back Games Wo...
| Read more »
Blades of Brim is a New Endless Runner f...
SYBO Games, the minds behind the ever-popular Subway Surfers, have announced their latest project: Blades of Brim. [Read more] | Read more »
Carbo - Handwriting in the Digital Age...
Carbo - Handwriting in the Digital Age 1.0 Device: iOS Universal Category: Productivity Price: $3.99, Version: 1.0 (iTunes) Description: | Read more »
Draggy Dead (Games)
Draggy Dead 1.1 Device: iOS Universal Category: Games Price: $.99, Version: 1.1 (iTunes) Description: Ditch your dead end job and take up a rewarding career in Grave Robbing today!Guide the recently deceased to a fun filled life of... | Read more »
Bad Dinos (Games)
Bad Dinos 1.0.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.0 (iTunes) Description: | Read more »
The Apple Watch isn't Great as a Fi...
| Read more »
Show the World What You See With Stre.am...
Live broadcasting is getting popular on mobile devices, which is why you can now get Stre.am, by Infinite Takes. [Read more] | Read more »
PhotoTime's 2.1 Update Adds Apple W...
The latest PhotoTime update is adding even more functionality to the handy photo organizing app. Yep, including Apple Watch support. [Read more] | Read more »

Price Scanner via MacPrices.net

New 27-inch 3.3GHz 5K iMac in stock with free...
Adorama has the new 27″ 3.3GHz 5K iMac in stock today for $1999 including free shipping plus NY & NJ sales tax only. Adorama will include a free copy of Apple’s 3-year AppleCare Protection Plan. Read more
Memorial Day Weekend Sale: New 27-inch 3.3GHz...
Best Buy has the new 27″ 3.3GHz 5K iMac on sale for $1899.99 this weekend. Choose free shipping or free local store pickup (if available). Sale price for online orders only, in-store prices may vary... Read more
OtterBox Maximizes Portability, Productivity...
From the kitchen recipe book to the boarsroom presentation, the OtterBox Agility Tablet System turns tablets into one of the most versatile pieces of handheld technology available. Available now, the... Read more
Launch of New Car App Gallery and Open Develo...
Automatic, a company on a mission to bring the power of the Internet into every car, has announced the launch of the Automatic App Gallery, an app store for nearly every car or truck on the road... Read more
Memorial Day Weekend Sale: 13-inch 1.6GHz Mac...
Best Buy has the new 13″ 1.6GHz/128GB MacBook Air on sale for $849 on their online store this weekend. Choose free shipping or free local store pickup (if available). Sale price for online orders... Read more
Memorial Day Weekend Sale: 27-inch 3.5GHz 5K...
Best Buy has the 27″ 3.5GHz 5K iMac on sale for $2099.99 this weekend. Choose free shipping or free local store pickup (if available). Sale price for online orders only, in-store prices may vary.... Read more
Sale! 16GB iPad mini 3 for $349, save $50
B&H Photo has the 16GB iPad mini 3 WiFi on sale for $349 including free shipping plus NY sales tax only. Their price is $50 off MSRP, and it’s the lowest price available for this model. Read more
Price drop on 2014 15-inch Retina MacBook Pro...
B&H Photo has dropped prices on 2014 15″ Retina MacBook Pros by $200. Shipping is free, and B&H charges NY sales tax only: - 15″ 2.2GHz Retina MacBook Pro: $1799.99 save $200 - 15″ 2.5GHz... Read more
With a Mission to Make Mobile Free, Scratch W...
Scratch Wireless, claiming to be the world’s first truly free mobile service, has announced the availability of a new Scratch-enabled Android smartphone, the Coolpad Arise. The smartphone is equipped... Read more
First-Ever Titanium Alloy Curved iPhone 6 Scr...
One of the most common problems with mobile phones is damage to the screens. The slightest drop can cause a dreaded spider web of gashes and cracks in the glass panel surface that can cost $hundreds... Read more

Jobs Board

*Apple* Solutions Consultant - Retail Sales...
**Job Summary** As an Apple Solutions Consultant (ASC) you are the link between our customers and our products. Your role is to drive the Apple business in a retail Read more
*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
*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
Partner Marketing Manager, Merchant- *Apple*...
**Job Summary** The Apple Pay partner marketing team is looking for a marketing manager to develop and drive US marketing programs with our merchant partners. The right Read more
Technical Project Manager - *Apple* Pay - A...
**Job Summary** Apple Pay is seeking an experienced technical PM to…manage the on boarding of new merchants for the Apple Pay platform in the US Within this role you Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.