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
$101.58
Apple Inc.
+0.72
MSFT
$46.52
Microsoft Corpora
-0.24
GOOG
$584.77
Google Inc.
+4.82

MacTech Search:
Community Search:

Software Updates via MacUpdate

iExplorer 3.5.0.0 - View and transfer al...
iExplorer is an iPhone browser for Mac lets you view the files on your iOS device. By using a drag and drop interface, you can quickly copy files and folders between your Mac and your iPhone or... Read more
BusyCal 2.6 - Powerful calendar app with...
BusyCal is an award-winning desktop calendar that combines personal productivity features for individuals with powerful calendar sharing capabilities for families and workgroups. BusyCal's unique... Read more
Apple iOS 8.0 - The latest version of Ap...
The latest version of iOS can be downloaded through iTunes. Apple iOS 8 comes with big updates to apps you use every day, like Messages and Photos. A whole new way to share content with your family.... Read more
Apple Digital Camera RAW Compatibility 5...
Apple Digital Camera RAW Compatibility update adds RAW image compatibility to Aperture 3 and iPhoto '11. For more information on supported RAW formats, see here.Version 5.07: Adds RAW camera... Read more
Transmit 4.4.7 - Excellent FTP/SFTP clie...
Transmit is an excellent FTP (file transfer protocol), SFTP, S3 (Amazon.com file hosting) and iDisk/WebDAV client that allows you to upload, download, and delete files over the internet. With the... Read more
Macgo Blu-ray Player 2.10.8.1715 - Blu-r...
Macgo Mac Blu-ray Player can bring you the most unforgettable Blu-ray experience on your Mac. Overview Macgo Mac Blu-ray Player can satisfy just about every need you could possibly have in a Blu-ray... Read more
Capture One Pro 8.0.0.433 - RAW workflow...
Capture One Pro 8 is a professional RAW converter offering you ultimate image quality with accurate colors and incredible detail from more than 300 high-end cameras -- straight out of the box. It... Read more
Adobe Acrobat Pro 11.0.09 - Powerful PDF...
Adobe Acrobat allows users to communicate and collaborate more effectively and securely. Unify a wide range of content in a single organized PDF Portfolio. Collaborate through electronic document... Read more
Adobe Reader 11.0.09 - View PDF document...
Adobe Reader allows users to view PDF documents. You may not know what a PDF file is, but you've probably come across one at some point. PDF files are used by companies and even the IRS to... Read more
iFFmpeg 4.6.1 - Convert multimedia files...
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

Leg·end·ar·y (Games)
Leg·end·ar·y 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Simple and yet complex. Leg•end•dar•y is a grid-based puzzle game based on numbers. Discover the adventure of Leg•end•dar•y and... | Read more »
KuaiBoard (formerly QuickBoard) (Utilit...
KuaiBoard (formerly QuickBoard) 1.0 Device: iOS Universal Category: Utilities Price: $1.99, Version: 1.0 (iTunes) Description: KuaiBoard is currently 50% off for launch! Billing info. Signatures. Locations. KuaiBoard allows you to... | Read more »
Treasure Fetch - Adventure Time (Games)
Treasure Fetch - Adventure Time 1.0.1 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.1 (iTunes) Description: Adventure Time Treasure Fetch is a fresh take on the classic Snake game! STRETCHY JAKE Snake your way... | Read more »
Light in the Dark (Games)
Light in the Dark 1.1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.1.0 (iTunes) Description: Be enlightened by this delightful puzzle game that has never before seen the light of day! "A physics and color-blending... | Read more »
Transmit iOS (Utilities)
Transmit iOS 1.0 Device: iOS Universal Category: Utilities Price: $9.99, Version: 1.0 (iTunes) Description: >> LAUNCH SPECIAL: Transmit iOS is ONLY $10 for a LIMITED TIME. << THE #1 FILE TRANSFER CLIENT FOR THE MAC NOW... | Read more »
Minuum - The Little Keyboard for Big Fin...
Minuum - The Little Keyboard for Big Fingers 1.0 Device: iOS iPhone Category: Utilities Price: $1.99, Version: 1.0 (iTunes) Description: Type faster, see more of your screen, and take control of autocorrect with Minuum: the little... | Read more »
TextExpander 3 + custom keyboard (Utili...
TextExpander 3 + custom keyboard 3.0 Device: iOS Universal Category: Utilities Price: $4.99, Version: 3.0 (iTunes) Description: | Read more »
Swype - Keyboard (Utilities)
Swype - Keyboard 1.0.1411 Device: iOS Universal Category: Utilities Price: $.99, Version: 1.0.1411 (iTunes) Description: Why type when you can Swype? One of the most requested apps for iPhone is finally here. "If Swype itself ever... | Read more »
Joinz (Games)
Joinz 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Joinz is a clever block sliding puzzle game that is easy to play, nice to look at but tricky to master. You will be coming back again... | Read more »
Little World Escape Review
Little World Escape Review By Jordan Minor on September 17th, 2014 Our Rating: :: EARTHBOUNDUniversal App - Designed for iPhone and iPad Little World Escape draws players in with captivating concepts before pushing them away with... | Read more »

Price Scanner via MacPrices.net

Logitech Bluetooth Multi-Device Cross-Platfor...
Logitech has an enviable track record of making some of the best computer keyboards and mice. At least in my estimation, the best freestanding keyboards I’ve ever used have been Logitech units,... Read more
Roundup of Apple refurbished iPad Airs and iP...
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
Sprint offers 16GB iPad mini for $199.99 with...
Sprint is offering 1st generation 16GB iPad minis for $199.99 with a 2-year service agreement. Standard MSRP for this iPad is $429. Their price is the lowest available for this model. Read more
2.5GHz Mac mini remains on sale for $549, sav...
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
Apple refurbished iMacs available for up to $...
The Apple Store has Apple Certified Refurbished iMacs available for up to $300 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
13″ 2.5GHz MacBook Pro offered for $100 off M...
B&H Photo has the 13″ 2.5GHz MacBook Pro on sale for $999.99 including free shipping plus NY sales tax only. Their price is $100 off MSRP. Read more
Free GIMP Professional Grade Graphics App Ver...
The latest 2.8.14 version of the oddly-named GIMP (acronym for: GNU Image Manipulation Program) open source, high-end image editing and creation alternative to Adobe’s Photoshop and refuge from... Read more
Apple Announces Record Pre-orders for iPhone...
Apple has released metrics showing a record number of first day pre-orders of iPhone 6 and iPhone 6 Plus, with over four million sold in the first 24 hours. Demand for the new iPhones exceeds the... Read more
10% off iPhone 6 and 6 Plus Otterbox cases
Get 10% off on popular Otterbox iPhone 6 and iPhone 6 Plus cases at MacMall through September 19th. Use code OTTERBOX10 to see the discount. Read more
15-inch MacBook Pros on sale for up to $125 o...
Amazon has the new 2014 15″ Retina MacBook Pros on sale for up to $125 off MSRP including free shipping: - 15″ 2.2GHz Retina MacBook Pro: $1899.99 save $100 - 15″ 2.5GHz Retina MacBook Pro: $2374... 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
*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
*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
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.