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

Dropbox 3.4.6 - Cloud backup and synchro...
Dropbox is an application that creates a special Finder folder that automatically syncs online and between your computers. It allows you to both backup files and keep them up-to-date between systems... Read more
Apple Digital Camera RAW Compatibility 6...
Apple Digital Camera RAW Compatibility update adds RAW image compatibility to OS X 10.10 Yosemite. For more information on supported RAW formats, see http://support.apple.com/kb/HT6476.Version 6.04:... Read more
SyncTwoFolders 2.0.9b1 - Syncs two user-...
SyncTwoFolders simply synchronizes two folders. It supports synchronization across mounted network drives and it is a possibility to run a simulation showing in a log what will be done. Please visit... Read more
VueScan 9.5.09 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more
Airmail 2.1 - Powerful, minimal email cl...
Airmail 2 is a new mail client designed for OS X 10.10 Yosemite with fast performance and intuitive interaction. Support for iCloud, MS Exchange, Gmail, Google Apps, IMAP, POP3, Yahoo!, AOL, Outlook.... Read more
Logitech Control Center 3.9.2 - Keyboard...
Logitech Control Center (LCC) is designed to support OS X and allows you to take full advantage of your Logitech keyboard, mouse, or trackball. With the LCC you can: Browse the Internet using... Read more
Adobe Acrobat Pro 15.007.20033 - Powerfu...
Acrobat Pro DC is available only as a part of Adobe Creative Cloud, and can only be installed and/or updated through Adobe's Creative Cloud app. Adobe Acrobat Pro DC with Adobe Document Cloud... Read more
CleanMyMac 3.0.1 - Delete files that was...
CleanMyMac makes space for the things you love. Sporting a range of ingenious new features, CleanMyMac lets you safely and intelligently scan and clean your entire system, delete large, unused files... Read more
Evernote 6.0.10 - Create searchable note...
Evernote allows you to easily capture information in any environment using whatever device or platform you find most convenient, and makes this information accessible and searchable at anytime, from... Read more
CleanApp 5.0.1 - Application deinstaller...
CleanApp is an application deinstaller and archiver.... Your hard drive gets fuller day by day, but do you know why? CleanApp 5 provides you with insights how to reclaim disk space. There are... Read more

Spacecom (Games)
Spacecom 1.0.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.0 (iTunes) Description: **SPECIAL LAUNCH DISCOUNT. GET SPACECOM FOR 25% LESS. THIS PROMO ENDS 15TH MAY 2015.** PLEASE NOTE: This game is optimized for... | Read more »
Here Are Our Top 5 App Picks to Make the...
| Read more »
GoodReader is Currently on Sale
Good.iWare is offering GoodReader for 60% off for a limited time. In honor to teacher appreciation day they have added GoodReader to apples "Tools for Teachers" promotion. [Read more] | Read more »
Grim Fandango Remastered (Games)
Grim Fandango Remastered 1.0.0 Device: iOS iPhone Category: Games Price: $9.99, Version: 1.0.0 (iTunes) Description: | Read more »
This Week at 148Apps: April 27-May 1, 20...
May Merriment 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... | Read more »
The Ensign, Prequel to A Dark Room, is C...
Amirali Rajan's The Ensign is the prequel to the text-based adventure A Dark Room, and it's gone free for a couple of days. [Read more] | Read more »
Streamline - calendar (Productivity)
Streamline - calendar 1.0 Device: iOS iPhone Category: Productivity Price: $3.99, Version: 1.0 (iTunes) Description: Do you dare to break conventions? Streamline is the first real evolution from the paper diary. It is a patented and... | Read more »
Plants vs. Zombies Celebrates its Sixth...
It's pretty wild to think that the  Plants vs. Zombies  series has been around for six years already. To celebrate this mildly unconventional milestone, Popcap is giving players some free stuff in Plants vs. Zombies 2. Because they got the whole "... | Read more »
Dropbox Adds MS Office Documents and Mor...
Dropbox, the popular file storage solution, has announced an update that adds three new features for you to enjoy. [Read more] | Read more »
The All-Consuming Snake is Back and Hung...
Taneli Armanto, the designer of Nokia 6110 Snake, is back to work. Together with Rumilus Design, he's working on a new Snake game titled Snake Rewind. [Read more] | Read more »

Price Scanner via MacPrices.net

Six Months On The iPad Air 2 – The ‘Book Myst...
Tempus fugit. It’s hard to believe I’ve already logged nearly half a year’s use on my new Gold 64GB iPad Air 2. My second iPad was purchased to take over from my trusty iPad 2, which has been handed... Read more
27-inch 3.5GHz 5K iMac on sale for $2349, sav...
Adorama has the 27″ 3.5GHz 5K iMac in stock today and on sale for $2349 including free shipping plus NY & NJ sales tax only. Their price is $150 off MSRP. For a limited time, Adorama will... Read more
Millennials’ Social Networking Habits Pose T...
Research indicates young people may be threat to corporate information-security, says tech expert Karl Volkmann, Chief Technical Officer of Chicago-based SRV Network, Inc. From Facebook to Twitter,... Read more
BuyVia Releases Apple Watch Shopping App
San Mateo, California-based BuyVia (http://www.buyvia.com), the first website and mobile app that combines in-store and online shopping across smart phones, tablets and laptops to help shoppers get... Read more
Apple Certified Refurbished iMacs available f...
The Apple Store has Apple Certified Refurbished iMacs available for up to $380 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free: - 27″ 3.5GHz 5K iMac – $2119 $... Read more
13-inch 2.5GHz MacBook Pro (refurbished) avai...
The Apple Store has Apple Certified Refurbished 13″ 2.5GHz MacBook Pros available for $829, or $270 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free: - 13″ 2.... Read more
New 2015 MacBook Airs on sale for up to $80 o...
Save up to $80 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
College Student Deals: Additional $50 off Mac...
Take an additional $50 off all MacBooks and iMacs at Best Buy Online with their College Students Deals Savings, valid through May 9, 2015. Anyone with a valid .EDU email address can take advantage of... Read more
Save up to $300 on a new Mac, $30 on an iPad,...
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
iPad-Based iLynn Program Provides A Private U...
Lynn University of Boca Raton, Florida has announced that its innovative iPad-powered online bachelor’s degree program will be called iLynn. Beginning in fall 2015, Lynn U. says the new program will... Read more

Jobs Board

*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
*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
Senior Identity Architect - *Apple* Pay - A...
Changing the world is all in a day039s work at Apple . If you love innovation, here039s your chance to make a career of it. You039ll work hard. But the job comes with Read more
Hardware Systems Integration Engineer - *App...
Changing the world is all in a day039s work at Apple . If you love innovation, here039s your chance to make a career of it. You039ll work hard. But the job comes with Read more
Senior Identity Architect - *Apple* Pay - A...
Changing the world is all in a day039s work at Apple . If you love innovation, here039s your chance to make a career of it. You039ll work hard. But the job comes with Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.