home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / USCX / PASCAL01.ZIP / IBMPAS.DOC < prev    next >
Text File  |  1985-01-07  |  31KB  |  646 lines

  1.    1: Screen Control From Pascal              10-01-1982 USER UPDATES
  2. A recurring question is: how does a Pascal program determine the
  3. position of the cursor on the screen?
  4.  
  5. With the way DOS Pascal is implemented on the IBM Personal Computer, you
  6. cannot perform many BIOS functions directly.  A program must be written
  7. in assembler language and linked with the Pascal program in order to
  8. perform the desired BIOS functions.  Actually, the Assembler program
  9. uses the BIOS video interrupt (Hex 10) to control the screen.  If you
  10. desire to follow this approach, it is strongly recommended that you
  11. read the Technical Reference Manual beginning on page A-43, where the
  12. listing for the BIOS video interrupt begins and where register contents
  13. for each available function are documented.
  14.  
  15. Following are two sample programs that were tested on an IBM Personal
  16. Computer Monochrome Display.  They should be assembled, compiled, and
  17. then linked together.
  18.  
  19. The Assembler program depicts the structure of the variable list passed
  20. to it from Pascal and represents one approach toward assembler coding.
  21.  
  22. In the Pascal program, notice that, at those points where the Pascal
  23. statement ReadLn is user to pause for input,  the cursor is positioned
  24. in the reverse video area of the screen.  This is a function of the
  25. ReadLn statement which places the cursor at the beginning of the next
  26. line, then waits for input.
  27.  
  28. Finally, notice that the assembler INTRPT routine can be used to drive
  29. any BIOS interrupt.
  30.  
  31. (The programs are available for downloading from the <F>iles section of
  32. this bulletin board.)
  33. The next message is:
  34.    2: Correcting False OUT OF MEMORY Errors   06-01-1983 USER UPDATES
  35. <R>ead, <N>ext, or <Q>uit? R
  36. The following procedure is necessary to fix false "OUT OF MEMORY"
  37. errors that occur while the user is compiling Pascal programs on the IBM
  38. PC or IBM PC XT with large memories.
  39.  
  40. If you are updating your Pascal Compiler for the first time, you'll need
  41. to make copies of your original compiler diskette before debugging.  You
  42. can make these copies by using the DISKCOPY program on the DOS diskette
  43. and following the "Copy instructions" below.  Follow the "Copy
  44. instructions" for every compiler diskette that has not been updated.
  45. (If you have previously updated all of your Pascal diskettes, proceed to
  46. the "DEBUG instructions".)
  47.  
  48. COPY instructions
  49. - Insert the DOS diskette in drive A and a blank formatted diskette in
  50. drive B. Type:
  51.                 DISKCOPY A: B:
  52. - Remove the DOS diskette from drive A and insert the original Pascal
  53. Compiler diskette in drive A. Press any key to begin the DISKCOPY.  When
  54. DISKCOPY is completed the program will prompt:
  55.                 COPY ANOTHER (Y/N)?
  56. - Enter your desired response. In drive B you now have an exact copy of
  57. the original Pascal Compiler diskette.  Remove this copied diskette
  58. from drive B and label it with one of the following appropriate labels:
  59.                 UPDATED MASTER PAS1 DISKETTE
  60.                 UPDATED MASTER PAS2 DISKETTE
  61.                 UPDATED MASTER LIBRARY DISKETTE
  62.  
  63.   Any future updates should be made to these diskettes.
  64.  
  65. Debug Instructions
  66. -  Insert the DOS diskette in drive A and the Updated Master PAS1
  67. diskette in drive B. Type:
  68.                 DEBUG
  69.                 LDS:100 1 A 1
  70.                 DDS:12A L1
  71. -  The program will display the following:
  72.                 XXXX:012A 7E
  73.    (xxxx is a four-digit hexadecimal address.)
  74. -  If this is not displayed, restart the update procedure and return to
  75. DOS by typing
  76.                 Q
  77. -  To continue the update, type:
  78.                 EDS:12A 76
  79.                 WDS:100 1 A 1
  80. -  Remove the Updated Master PAS1 diskette from drive B and insert the
  81. Updated Master PAS2 diskette in drive B. Type:
  82.                 LDS:100 1 F 1
  83.                 DDS:12A L1
  84. -  The program will display the following:
  85.                 XXXX:012A 7E
  86.    (xxxx is a four-digit hexadecimal address.)
  87. -  If this is not displayed, restart the update procedure and return to
  88. DOS by typing
  89.                 Q
  90. -  To continue the update, type:
  91.                 EDS:12A 76
  92.                 WDS:100 1 F 1
  93. -  Remove the Updated Master PAS2 diskette from drive B and insert the
  94. Updated Master Library diskette in drive B. Type:
  95.                 LDS:100 1 9 1
  96.                 DDS:1BA L1
  97. -  The program will display the following:
  98.                 XXXX:01BA 7E
  99.    (xxxx is a four-digit hexadecimal address.)
  100. -  If this is not displayed, restart the update procedure and return to
  101. DOS by typing
  102.  
  103. -  To continue the update, type:
  104.                 EDS:1BA 76
  105.                 WDS:100 1 9 1
  106.                 Q
  107.   You are now back in DOS.  Any future recreations of your working
  108. compiler diskettes should be made from the Updated Master Compiler
  109. diskettes with the DISKCOPY program.  Be sure to make a backup of your
  110. updates diskettes for future use.
  111. The next message is:
  112.    3: Pascal Compiler Version 2.0             04-05-1984 USER GROUP SUPPORT
  113. <R>ead, <N>ext, or <Q>uit? R
  114. PERSONAL COMPUTER PASCAL COMPILER VERSION 2.0 (6024128)
  115.  
  116. The Personal Computer Pascal Version 2.0 supports all of the facilities
  117. of the International Standards Organization working draft #6, with the
  118. exception of conforming array parameters, which are instead provided by
  119. the "super array" type.  Many additional features are also supported.
  120.  
  121. This software product provides you with a system development environment
  122. for the creation and execution of Pascal programs.  The structured
  123. programming facilities and extensive data structures in Pascal make it a
  124. very useful language for large applications programs.
  125.  
  126. HIGHLIGHTS
  127.  
  128. o   IBM 8087 Math Co-processor Support
  129. o   Ability to build applications that will run either with or
  130.     without an IBM 8087 Math Co-processor present
  131. o   Double Precision Arithmetic
  132. o   4-Byte Integer Arithmetic
  133. o   Single Level Overlays
  134. o   Ability to use available memory up to 640KB at runtime
  135. o   Path support at runtime when using DOS 2.00 or later
  136. o   Library manager for creating user written libraries
  137. o   64KB Data Structures
  138. o   ISO Standard plus IBM Pascal extensions
  139. o   Super Array Type
  140. o   Separate compilation of modules and units
  141. o   Varying length strings
  142. o   System programming features
  143. o   Object modules may be linked with subroutines written in
  144.     Personal Computer FORTRAN Version 2.0 or Macro Assembler
  145. o   Various additional improvements from Version 1.0
  146.     o   Improved code generation
  147.     o   Smaller library requirements
  148.     o   More efficient use of memory at compile time
  149.  
  150. RELATIONSHIP TO PRIOR VERSION
  151.  
  152. The following enhancements are part of Version 2.0 relative to
  153. Version 1.0.
  154.  
  155. o   Support for IBM 8087 Math Co-processor
  156. o   Improved arithmetic capabilities
  157.     o   32 bit arithmetic
  158.     o   Improved transcendental function support
  159.     o   Double precision real numbers
  160. o   Support for DOS 2.00 file names
  161. o   Support for a long heap (allows 640KB program segment
  162.     crossing)
  163. o   Addition of Library Manager and Large Linker
  164.  
  165. Also, the publication has been substantially improved.  The
  166. Pascal Version 2.0 compiler does not run with DOS 1.1.  The
  167. Version 2.0 Runtime will operate with DOS 1.1 if no DOS 2.0
  168. functions (paths) are used.
  169.  
  170. PREREQUISITES
  171.  
  172. The Personal Computer DOS 2.00 or later is needed to provide the
  173. necessary software to prepare, compile and run a Pascal program.
  174. A minimum of 160KB and two single sided diskette drives or one
  175. single sided diskette drive and one fixed disk are required.  A
  176. printer and an 80 column display are recommended.  An IBM 8087
  177. Math Co-processor is supported but not required.
  178. The next message is:
  179.    4: Pascal Compiler Version 2.0 Trade-Up    04-05-1984 USER GROUP SUPPORT
  180. <R>ead, <N>ext, or <Q>uit? R
  181. PASCAL COMPILER VERSION 2.0 TRADE-UP (6361142)
  182.  
  183. Current users of Pascal Version 1.0 will be offered a trade-up to
  184. Version 2.0.  The trade-up includes the same package as the
  185. Version 2 product (manuals and diskettes).  The trade-up will be
  186. offered concurrently with the announcement of Version 2.0.
  187.  
  188. The procedure is the same as that used for the Multiplan 1.0 to
  189. 1.1 upgrade.  These procedures are as follows:
  190.  
  191. 1.  The offer to upgrade Pascal 1.0 to 2.0 is being extended to
  192.     Pascal 1.0 licensees.
  193. 2.  Sales locations will be provided a packet containing a store
  194.     display and order forms to be used by the licensee or dealer.
  195. 3.  The order form contains information pertinent to obtaining
  196.     the upgrade product.
  197. 4.  The order form may be completed by the licensee or the
  198.     dealer.
  199. 5.  Payment for the upgrade product is to be by check or money
  200.     order made out to the IBM Corporation.  Applicable state and
  201.     local taxes are to be paid by the licensee.
  202. 6.  Dealers requiring the Pascal upgrade product to be delivered
  203.     to their store location must forward proof-of-purchase (front
  204.     cover of Pascal manual), the order form (signed) and payment
  205.     to IBM Corporation, P.O. Box 3160, Wallingford, CT, 06494.
  206. 7.  Payment made by the dealer is tax exempt, provided applicable
  207.     taxes have been collected from the licensee and reported to
  208.     state and local governments as appropriate.  Dealers are
  209.     requested to include on the order form their tax exemption
  210.     number.
  211. 8.  The fulfillment house will mail to the addressee the Pascal
  212.     2.0 upgrade product.
  213. 9.  The upgrade is available beginning March 31, 1984 and expires
  214.     September 30, 1984.
  215. The next message is:
  216.    5: Organizing Pascal Diskettes             04-05-1984 DAVE CORTESI
  217. <R>ead, <N>ext, or <Q>uit? R
  218. (This message was re-printed from the April issue of EXCHANGE)
  219.  
  220.         Dave Cortesi, Silicon Valley Computer Society
  221.  
  222. While I have been using IBM Pascal for a month now, others just starting
  223. might be interested in a method I use to organize diskettes for easy
  224. compiling.
  225.  
  226. I've always split diskettes into two categories:  "project" and "work".
  227. A project diskette is a repository for files and only that; it has no
  228. commands and no system files.  Project diskettes are normally loaded
  229. into the B drive.  For Pascal work, a project diskette contains only
  230. Pascal source and object files and maybe some test data (the EXE files
  231. are too big, usually; they go on disks where they will be used).  Pascal
  232. programs get a .PAS extension; modules are .MOD, interfaces are .INF;
  233. and implementations are .IMP.  You might have several project diskettes,
  234. each with files related to one "project".
  235.  
  236. You probably would have only one Pascal "work" diskette.  A work
  237. diskette contains the system files, plus command files that you use in
  238. your work:  Mode, Chkdsk, Edlin, etc.  It also contains the batch files
  239. you use (there is lots of opportunity to use .BAT files when working in
  240. IBM Pascal).  The Pascal work diskette has to contain one file from the
  241. compiler distribution:  PASKEY.  And finally, the work diskette gets all
  242. scratch files and the working copies of all source programs while they
  243. are being worked on.  A work diskette is never backed up; the policy is
  244. that there is nothing on it that can't be recreated or retrieved from
  245. somewhere else.
  246.  
  247. The third diskette in the system is the compiler disk.  The following
  248. files just fit on one double-sided diskette:
  249.  
  250.   PAS1.EXE   PAS2.EXE   PASCAL.LIB   LINK.EXE
  251.  
  252. This diskette can have a write-protect sticker on it.  Here's how it
  253. works.  The work diskette stays in the A drive all the time.  Insert the
  254. relevant project diskette in the B drive and copy the program to be
  255. modified from B to A.  Edit it on A.  Put the compiler diskette in the B
  256. drive and run a batch file like this one:
  257.  
  258.   B:PAS1 %1,,CON
  259.   PAUSE hit enter if "No Errors Found" else Break
  260.   B:PAS2
  261.   PAUSE hit enter if "No Errors Found" else Break
  262.   B:LINK %1,,NUL,B:PASCAL
  263.  
  264. When the new program works, put the project diskette back in B and copy
  265. the final version of the source and object (but not EXE) from A to B.
  266. If you have only single-sided drives, you will have to use three
  267. compiler disks; your .BAT file can prompt you when to change them.
  268. Frankly, I don't see how users of single-sided drives can compile at
  269. all; the temporary files (PASIBF.*) are terribly big.  At the very
  270. least, you will have to erase every possible file from the work diskette
  271. before starting the compile; a batch file can help can help there, too.
  272. The next message is:
  273.    6: Review of Pascal Compiler Ver. 2.00     08-27-1984 CARRINGTON DIXON
  274. <R>ead, <N>ext, or <Q>uit? R
  275.         (This article was re-printed from the July issue of Exchange)
  276.  
  277.                               Carrington Dixon
  278.                                 North Texas
  279.                       IBM Personal Computer User Group
  280.  
  281. My upgrade of the IBM Pascal Compiler arrived a few days ago.  Most, if not
  282. all, of the bugs in Version 1.00 have been fixed and a number of
  283. significant new capabilities have been added.
  284.  
  285. The first thing one notices is that the documentation has nearly doubled!
  286. Where the original version required only one binder to hold its four
  287. hundred odd pages, the new version requires two binders:  "Pascal Compiler
  288. Fundamentals" and "Pascal Compiler Language Reference".  Each is the size
  289. of the original document.  The latter supplies an alphabetically arranged
  290. discussion of all the reserved words, functions and metacommands for IBM
  291. Pascal.  The former supplies a topical discussion of many features, much as
  292. the original did, and gives instructions for executing the compiler, linker
  293. and the library manager.
  294.  
  295. New with this version is support for the 8087 chip, double precision
  296. arithmetic and long integers (32 bit).  Programs now can address up to
  297. 640KB of memory via the long heap management routines.  Single level code
  298. overlays are supported as are DOS 2.x pathnames (both at compile time and
  299. at runtime).  Data structures now can be as large as 64KB.  The internal
  300. floating point format has been changed for reasons of 8087 compatibility.
  301.  
  302. Because of the many different options that may be required, Pascal no
  303. longer comes with a ready-to-use object library.  IBM supplies a SETUP
  304. procedure that makes installing Pascal relatively painless.  There are two
  305. choices of DOS interface routines:  DOS 1.1 and DOS 2.0.  The former will
  306. produce files that can run under DOS 1.1 or DOS 2.x but will not support
  307. pathnames under 2.x.  The latter supports pathnames but will not run under
  308. DOS 1.1 at all.
  309.  
  310. There are three choices of math routines:  8087ONLY, REGMATH, and EMULATOR.
  311. As the names imply, the first choice will produce files that require the
  312. 8087 chip for execution; the second will produce results in a precision
  313. that is comparable to the old Pascal; and EMULATOR is for the undecided.
  314. These math routines will use the 8087, if available, and will produce the
  315. largest EXE files of the three choices and run slower than the REGMATH
  316. routines on machines without an 8087 chip (the higher precision costs).
  317. Note that this configuration is made once at installation time and need not
  318. be repeated every time the linker is run.  All of this is made possible by
  319. the Library Manager, a program that has been available from Microsoft for
  320. nearly a year but is making its first appearance in an official IBM
  321. version.  This utility can create object libraries and update existing
  322. ones.  Object modules can be added, deleted or replaced on existing
  323. libraries.  A cross-reference listing of a library can be generated, and an
  324. object module can be extracted from the library and placed into its own
  325. .OBJ file.  This capability is extremely welcome as it was awkward to build
  326. a program from a number of separately compiled modules without it.
  327.  
  328. A new version of the linker program, 2.20, is included on the library
  329. diskette.  This version supports single level overlays and program sizes of
  330. up to 1 megabyte.  There is no new linker directive to support overlays.
  331. Instead object modules to be placed in overlay are pre-processed with the
  332. MKOVL.COM program.  The overlay loader PLOADER.OBJ is then included before
  333. the main program in the LINK command line.  Each overlay is brought in
  334. explicitly by calls to the LOADER function from the main program.  The
  335. Reference Manual has a rather lengthy example of this for those who may
  336. need the capability.  This feature works only for programs that run under
  337. DOS 2.x; it will not work under DOS 1.1.
  338.  
  339. Several bugs and short-comings of the original Pascal Compiler have been
  340. fixed in this release.  The bug where the sine function returned incorrect
  341. values for negative angles has been fixed.  It is no longer necessary to
  342. run CHKDSK to recover disk space after the compiler has terminated because
  343. of some error in the source code.  The compiler and linker now set
  344. ERRORLEVEL so that batch files can check for compile errors.  (You can even
  345. set ERRORLEVEL from your Pascal program, if you happen to stumble across
  346. the documentation on how to do it, hint:  see page 4-7).  The default for
  347. the DEBUG compiler metacommand has been changed from ON to OFF.
  348.  
  349. I have not had a chance to recompile any major programs, yet.  I dug out my
  350. old sine test program (which demonstrated the old SIN error) and ran it
  351. through both compilers.  I used the REGMATH library and set DEBUG to OFF in
  352. the source file to produce something like apples-to-apples comparisons.
  353. This program does little more than print out the values for SIN and COS for
  354. every 0.5 radian between -10 and 10 radians.  The results are:
  355.  
  356.                  Version 1.00  Version 2.00
  357.                  __________________________
  358.  
  359.           Compile time     40 sec        44 sec
  360.           Link time   1 min 4 sec  1 min 24 sec
  361.           OBJ size      938 bytes     994 bytes
  362.           EXE size    32384 bytes   31046 bytes
  363.           Run time         22 sec         7 sec
  364.  
  365. This is more a measure of the speed of the new math routines than of the
  366. generated code.  Still, this kind of speed up is very impressive.
  367.  
  368. The BYTE 'Sieve of Eratsthenes' test from the January 1983 issue gives a
  369. slightly different picture of the two compilers:
  370.  
  371.                 Version 1.0    Version 2.0
  372.                 __________________________
  373.  
  374.           Compile time     40 sec        44 sec
  375.           Link  time       50 sec        51 sec
  376.           OBJ size      816 bytes     867 bytes
  377.           EXE size    32512 bytes   26966 bytes
  378.           Run time         17 sec        16 sec
  379.  
  380. All these times are from the Norton TIMEMARK utility and thus include the
  381. load time from a floppy disk.  The difference in the link and run times are
  382. within the variation that one might expect from one run to another; that
  383. is, no measurable speed difference.  The significant improvement here is in
  384. the EXE file size.
  385.  
  386. The new documentation for Pascal is not only larger, it is better; IBM has
  387. added a number of examples.  There is even an explanation of how to use the
  388. DOSXQQ function; that was left as an exercise to the user last time.  There
  389. are still a few oversights and omissions (like the setting of ERRORLEVEL
  390. mentioned above) but your chances of finding the information you want and
  391. of understanding it once you have found it are very much improved.
  392.  
  393. Although the compiler can produce code that will execute on any supported
  394. configuration of PC, the compiler itself will only run under DOS 2.x, and
  395. it requires at least 192KB of memory.  The manual suggests that object
  396. modules created by the version 1.00 compiler should not be linked with
  397. those created by the new compiler.  They include the FILKQQ and FILUQQ
  398. modules.  The INC module has been replaced by FINK.INT and FINU.INT; so,
  399. modules that included them will have to be changed before they will
  400. compile.  The internal representation of floating point numbers has
  401. changed; so, binary data files that contain floating point numbers cannot
  402. be passed between programs compiled under the different versions.
  403. Documentation on the Unit U function calls and the detailed FCB are no
  404. longer included as IBM recommends that these interfaces not be used.
  405.  
  406. The list price for the new compiler is $350.  For a limited time, owners of
  407. version 1.00 can order the upgrade from IBM for $100; your Authorized
  408. Dealer has the forms for that right now.
  409.  
  410. [Editor's note:  A complete product announcement of the new Pascal version
  411. 2.0 appeared in the April issue of Exchange.]
  412. The next message is:
  413.    7: Why Pascal?                             11-05-1984 MIKE SCHNAPP
  414. <R>ead, <N>ext, or <Q>uit? R
  415.       (This message has been re-printed from the September Exchange)
  416.                                Mike Schnapp
  417.                      San Francisco IBM PC Users Group
  418.  
  419. If you are thinking  of making the effort to learn  a programming language,
  420. you should  consider studying Pascal.   First-time students  of programming
  421. who master this powerful language often  have a relatively easy time learn-
  422. ing other languages. Some of the reasons for this are:
  423.  
  424.  
  425. 1.  Pascal is  self-documenting, which  may be  its most  important aspect.
  426.     Programs written in it can be very  clear and concise. They are made up
  427.     of English-like  sentences that  can be arranged  so you  can virtually
  428.     read a finished program as if it were a novel or a cook book.
  429.  
  430. 2.  Pascal  is an  unambiguous, structured  computer  language that  allows
  431.     instructions  to   be  grouped   into  orderly   "sections"  that   are
  432.     "self-explanatory," in  contrast to  an unstructured  language such  as
  433.     BASIC.  The programs cane un-decipherable block with line numbers of up
  434.     to  six digits  on  one side.   However, writing  a  program in  Pascal
  435.     doesn't in any way guarantee that it will be readable, but it is easier
  436.     to make it so.
  437.  
  438. 3.  Pascal  can be  modularized  and it  allows  you  to build  definitions
  439.     (called PROCEDUREs  and FUNCTIONs)  which can  be used  in other  defi-
  440.     nitions.  These  customized  "modules"  can  be  used  again  in  later
  441.     programs.
  442.  
  443. In my opinion, Pascal may be  the most influential contribution to program-
  444. ming made in the  past 25 years and is not only  a programming language but
  445. is also a statement of programming style.  Thus, one major aspect of Pascal
  446. is its impact upon the way programs are conceived and composed. Pascal con-
  447. tains  the very  best  of  several well  known  languages,  such as  BASIC,
  448. FORTRAN, and COBOL.
  449. The next message is:
  450.    8: Parameter Transmission in Pascal        11-05-1984 BRUCE MILLER
  451. <R>ead, <N>ext, or <Q>uit? R
  452.         (This message was re-printed from the September Exchange)
  453.  
  454.                               Bruce W. Miller
  455.                           Trumbull PC User Group
  456.  
  457. INTRODUCTION TO PARAMETERS:  A parameter is a variable that is used to pass
  458. information between  different sections of  a program.  The  different sec-
  459. tions or "subprograms" of a program  are called procedures and functions in
  460. Pascal. They are similar to BASIC  subroutines and function definitions. In
  461. some versions of BASIC, information can only be passed by means of "global"
  462. variables, ones which may be used by any section of the program.
  463.  
  464. Since global variables can be altered by  any section of the program, there
  465. is the  possibility that a  variable's value  could change by  mistake. For
  466. instance, two sections of the program could use the same name for different
  467. variables,  which  might  cause  unwanted  and  unpredictable  interactions
  468. between the two sections. The use of  global variables also makes it diffi-
  469. cult to write  independent modules. In modular  programming, each procedure
  470. or function should have  only one path for data to enter,  and one path for
  471. data to leave.
  472.  
  473. Parameters  help  control   the  flow  of  information  into   and  out  of
  474. subprograms. Variables defined within the  subprogram are termed "local" in
  475. that their value is  defined and changed only within the  subprogram. It is
  476. more difficult for data to become scrambled  or altered by mistake by other
  477. sections of  the program. Because parameters  standardize the way  in which
  478. data enters and leaves a subprogram, it  is possible to reuse standard pro-
  479. gram modules over and over in different programs.
  480.  
  481. An identifier  used when  a subprogram is  called is  known as  an "actual"
  482. parameter. An identifier  used when a subprogram  is defined is known  as a
  483. "formal" parameter.
  484.  
  485. Pascal parameters can be input-only; data can flow in to the subprogram but
  486. cannot leave. Here is an example of a procedure declaration with a "pass by
  487. value" parameter declaration; the type "real"  refers to the formal parame-
  488. ter "num":
  489.  
  490.   procedure display(num:real);
  491.   begin
  492.     writeln('Your # is ',num);
  493.   end;
  494.  
  495. When the procedure  "display" is called, the value of  the actual parameter
  496. (variable or arithmetic expression) is passed to the formal parameter "num"
  497. for use inside the procedure. For example:
  498.  
  499.   display(10.0/5.0);
  500.  
  501. The value  of the  expression is  2.0. Parameter  "num" will  take on  this
  502. value.
  503.  
  504. Incidentally, the parameter "num"'s value can be changed locally inside the
  505. procedure  without  affecting   any  variables  named  "num"   outside  the
  506. procedure. For this reason "num" is called a "local variable".
  507.  
  508. Pascal parameters can be "input/output"; data can  flow in to or out of the
  509. subprogram. Here is an  example of a procedure declaration with  a "pass by
  510. reference" parameter  declaration (designated  by "var").  The type  "real"
  511. refers to the formal parameter "doubleme".
  512.  
  513.   procedure twice(var doubleme:real);
  514.    begin
  515.      doubleme := 2.0 * doubleme;
  516.    end;
  517.  
  518. When  the procedure  "twice"  is called,  the  formal parameter  "doubleme"
  519. stands for the  actual parameter. Any modifications to  "doubleme" are made
  520. to the formal parameter used when the procedure was called.
  521.  
  522. For example:
  523.  
  524.   radius := 3.0
  525.   twice(radius);
  526.  
  527. The value of the actual parameter "radius" (3.0) is doubled when the formal
  528. parameter  "doubleme" is  doubled.  This is  because  the formal  parameter
  529. "doubleme" refers to the same place in  memory as the actual parameter "ra-
  530. dius". When  passing by reference,  remember that  both the actual  and the
  531. formal parameters must be variables.
  532.  
  533. Strings,  reals, characters,  integers, arrays,  records  and user  defined
  534. types can all be passed as parameters. In some versions of Pascal even pro-
  535. cedures and functions can be passed as parameters.
  536.  
  537. Parameters control the way  data flows in and out of  a subprogram allowing
  538. it  to remain  a self-contained  module.   Modular programs  are easier  to
  539. implement, debug and maintain than non-structured programs.
  540. That's all the messages there are.
  541. [INFO] Press <H>elp <I>ndex <R>ead <S>end <D>elete <C>hange or <Q>uit -->C
  542. [INFO] Enter name of topic: (? for list; Q to quit) C
  543. [INFO] Press <H>elp <I>ndex <R>ead <S>end <D>elete <C>hange or <Q>uit -->R
  544. Please enter message number or date to BEGIN reading
  545. (ENTER for all messages since last logged on, 1 to see all, or Q to quit)
  546. >1
  547.    1: Oh say can you 'C'                      12-05-1984 GLENN HUFF
  548.     (This message was re-printed from the November issue of Exchange)
  549.  
  550.                              E. Glenn Huff
  551.                      Raleigh Personal Computer Club
  552.  
  553. Historically, C  evolved at Bell  Laboratories from its  predecessor, B,
  554. which evolved from yet an earlier language.  C is a language designed by
  555. people who  write code, as opposed  to people who design  languages.  On
  556. first look, it is obviously not a language intended for the casual user,
  557. and certainly not  for the novice.  It  is not a language  that believes
  558. you should be protected from yourself.
  559.  
  560. C  is a  very  terse, powerful  and  generally  fast language,  oriented
  561. towards systems and utility programming  work.  C programs usually waste
  562. very few characters in implementing a function.  A classic example is -
  563.  
  564.    strcopy(src,dest)     /* copy string src to string dest */
  565.  
  566.    char *src,*dest;      /* the parameters are pointers to characters */
  567.  
  568.    while (*dest++=*src++)   /* byte by byte copy until null delimiter */
  569.  
  570. This example  illustrates many  aspects in just  a few  lines.  It  is a
  571. small code  fragment or  function, which  performs one  job.  Generally,
  572. when the base C language lacks a capability, the capability can be added
  573. by creating a library routine.  This keeps the language clean.
  574.  
  575. The parameter definition illustrates an  aspect of the language referred
  576. to as typed pointers.  The prefix  asterisk indicates that the following
  577. variable is  a pointer  to the  object of  type "character".   C handles
  578. pointers very efficiently.
  579.  
  580. The "while"  clause illustrates  a powerful,  and sometimes  unsettling,
  581. aspect of  the language, that of  side effects.  Whereas  languages like
  582. PASCAL abhor the  notion of side effects, C features  them.  In essence,
  583. the while clause  steps the pointers through the  source and destination
  584. character strings, assigning the source  value to the destination value.
  585. Since the string terminator is null (a byte of all zero bits), the value
  586. of the expression is  non-zero as long as there are  additional bytes to
  587. copy.  Since the value of the expression is determined prior to it being
  588. tested, the terminating null  is also copied.  One last note  is the use
  589. of  the  "++"  operator,  which  indicates  increment  after  using  the
  590. variable.
  591.  
  592. The null statement,  which is the target of the  "while", is extraneous;
  593. there's simply nothing  left to do since all the  function was performed
  594. as a  consequence of  the test in  the while clause.   Some of  you will
  595. appreciate this terseness as a thing of beauty and a joy forever.
  596.  
  597. So much  for a  description of the  terse and powerful  nature of  C.  I
  598. think you see why C will never replace BASIC for the novice.
  599.  
  600. "But how would I ever get a C program to run?"  you might ask.  Frankly,
  601. it is sometimes a bit of a  challenge, what with all those powerful side
  602. effects.  Historically, I've used a  "self-built" trace, using I/O calls
  603. to display  variable values at critical  points of the  program.  That's
  604. crude, but it beats DEBUG at the  generated code level.  What it doesn't
  605. even approach, though, is a source level debug tool, which can show var-
  606. iables by  name and step  through the program a  SOURCE line at  a time,
  607. optionally skipping the code in lower level functions at our whim.
  608.  
  609. With the  source level  DEBUG tool, instead  of wondering  what happened
  610. when your latest marvel didn't run the  first time, you can step through
  611. it one  source statement at  a time.  You  can examine the  variables by
  612. name, arrays and  structures by name and subscript,  and try expressions
  613. to see their result.
  614.  
  615. That's the type of tool that makes it easier to see C.  Not only does it
  616. make programming  much more productive, it  is also a  valuable learning
  617. aid.
  618.  
  619. Being  able  to see  the  variables  and  arrays/structures by  name  is
  620. helpful.  If  you use C  and can get a  source level debugger  with your
  621. compiler, by all means take a look at it.  You will be greatly rewarded.
  622. That's all the messages there are.
  623. [INFO] Press <H>elp <I>ndex <R>ead <S>end <D>elete <C>hange or <Q>uit -->Q
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.