home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-03-14 | 172.4 KB | 5,611 lines |
-
-
-
-
-
-
-
-
- PCC
-
- A Personal C Compiler
-
-
- Version 2.1c (June 1989)
-
-
-
-
-
-
-
-
-
-
- U S E R's M A N U A L
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Manufactured and Distributed by:
-
-
- C Ware Corporation
- P.O. Box 428
- Paso Robles, CA 93446
-
-
- (805) 239-4620 [Voice]
-
-
-
-
- Copyright 1989 by C Ware Corporation and DeSmet Software
- All Rights Reserved
-
-
-
-
- 1
-
-
-
-
-
- TABLE OF CONTENTS
-
-
- T A B L E O F C O N T E N T S
-
- 1. The Legal Stuff............................................1
- 1.1. License...............................................2
- 1.2. Support Policy........................................2
- 1.3. DISCLAIMER............................................3
- 1.4. FOREIGN RESHIPMENT LIABILITY..........................3
- 1.5. LIMITED WARRANTY ......................................3
- 1.6. LIMITATIONS OF REMEDIES...............................3
- 1.7. General...............................................4
- 1.8. TRADEMARKS............................................4
- 1.9. ORDERING INFORMATION..................................4
- 1.10. Use by Educational Institutions......................5
- 1.11. Corporate, Business, Government and Commercial Use...5
-
- 2. Preface....................................................7
-
- 3. An Introduction To PCC.....................................8
- 3.1. Using Text, Book, Magazine or Download source code....8
- 3.2. Getting Started.......................................9
- 3.3. PCC Files.............................................9
- 3.4. Basic System.........................................10
- 3.5. Setting Up DOS 2.xx, 3.xx, ..........................10
- 3.6. RAM DISK.............................................11
- 3.7. Completion Codes.....................................11
-
- 4. PCC -- The Personal C Compiler............................13
- 4.1. Introduction.........................................13
- 4.2. Examples.............................................14
- 4.3. The C Language.......................................15
- 4.3.1. Preprocessor directives.......................15
- 4.3.2. Data Types....................................15
- 4.4. Extensions...........................................16
- 4.4.1. Forward References............................18
- 4.4.2. Externs.......................................18
- 4.4.3. Macros........................................20
- 4.4.4. Strings.......................................20
-
- 5. The PCCA 8088 Assembler...................................21
- 5.1. Introduction.........................................21
- 5.2. Invocation...........................................21
- 5.3. Example..............................................21
-
- 6. The PCCL Object File Linker...............................23
- 6.1. Introduction.........................................23
- 6.2. Invocation...........................................23
- 6.3. Examples.............................................24
- 6.4. Space Considerations.................................25
- 6.5. Overlays.............................................25
- 6.6. Libraries............................................27
-
-
-
-
-
-
-
-
-
-
-
-
-
- TABLE OF CONTENTS
-
-
- 7. The PCCS.S Standard Library...............................28
- 7.1. Introduction.........................................28
- 7.2. Names................................................28
- 7.3. Program Initialization...............................28
- 7.4. Calling Conventions..................................29
- 7.5. LIBRARY CONVENTIONS..................................31
- 7.6. Disk Input/Output Routines...........................32
- 7.7. Math Routines........................................33
- 7.8. IBM-PC Screen and Keyboard Interface.................34
- 7.9. Standard Library Functions...........................34
- 7.9.1. abs().........................................34
- 7.9.2. atoi()........................................34
- 7.9.3. atof()........................................35
- 7.9.4. atol()........................................35
- 7.9.5. ceil()........................................36
- 7.9.6. chain().......................................36
- 7.9.7. close().......................................37
- 7.9.8. creat().......................................37
- 7.9.9. dates().......................................37
- 7.9.10. doint()......................................37
- 7.9.11. exec().......................................38
- 7.9.12. exit().......................................39
- 7.9.13. exp()........................................39
- 7.9.14. fabs().......................................40
- 7.9.15. fclose().....................................40
- 7.9.16. fgetc()......................................40
- 7.9.17. fgets()......................................40
- 7.9.18. floor()......................................41
- 7.9.19. fopen()......................................41
- 7.9.20. fputc()......................................41
- 7.9.21. fputs()......................................42
- 7.9.22. frand()......................................42
- 7.9.23. fscanf().....................................42
- 7.9.24. getc().......................................42
- 7.9.25. getchar()....................................43
- 7.9.26. gets().......................................43
- 7.9.27. getw().......................................44
- 7.9.28. in().........................................44
- 7.9.29. index()......................................44
- 7.9.30. log()........................................44
- 7.9.31. lmove()......................................45
- 7.9.32. longjmp()....................................45
- 7.9.33. open().......................................46
- 7.9.34. os().........................................46
- 7.9.35. out()........................................46
- 7.9.36. peek().......................................46
- 7.9.37. poke().......................................47
- 7.9.38. pow()........................................47
- 7.9.39. putc().......................................47
- 7.9.40. putchar()....................................47
- 7.9.41. puts().......................................48
- 7.9.42. putw().......................................48
- 7.9.43. qsort()......................................48
- 7.9.44. rand().......................................49
- 7.9.45. rename().....................................49
-
-
-
-
-
-
-
-
- TABLE OF CONTENTS
-
-
- 7.9.46. rindex().....................................49
- 7.9.47. scanf()......................................50
- 7.9.48. scr_aputs()..................................52
- 7.9.49. scr_ci().....................................52
- 7.9.50. scr_co().....................................52
- 7.9.51. scr_clr()....................................52
- 7.9.52. scr_clrl()...................................52
- 7.9.53. scr_cls()....................................53
- 7.9.54. scr_csts()...................................53
- 7.9.55. scr_cursoff()................................53
- 7.9.56. scr_curson().................................53
- 7.9.57. scr_rowcol().................................53
- 7.9.58. scr_scdn()...................................54
- 7.9.59. scr_scrdn()..................................54
- 7.9.60. scr_scrup()..................................54
- 7.9.61. scr_scup()...................................54
- 7.9.62. scr_setmode()................................54
- 7.9.63. scr_setup()..................................55
- 7.9.64. scr_sinp()...................................55
- 7.9.65. setjmp().....................................56
- 7.9.66. sqrt().......................................56
- 7.9.67. srand()......................................56
- 7.9.68. sscanf().....................................57
- 7.9.69. strcat().....................................57
- 7.9.70. strcmp().....................................57
- 7.9.71. strcpy().....................................57
- 7.9.72. strlen().....................................58
- 7.9.73. strncat()....................................58
- 7.9.74. strncmp()....................................58
- 7.9.75. strncpy()....................................59
- 7.9.76. times()......................................59
- 7.9.77. ungetc().....................................59
- 7.9.78. unlink().....................................59
-
-
-
- Appendices
-
- A. Messages..................................................60
- A.1. PCC Compiler Messages................................60
- A.1.1. Banner and Termination Messages...............60
- A.1.2. Messages......................................60
- A.1.2.1. PCC Fatal Errors.....................60
- A.1.2.2. PCC Errors...........................62
- A.1.2.3. PCC Warnings.........................66
- A.1.2.4. PCCA Errors ( from PCC Execution )...67
- A.2. PCCA Assembler Messages..............................67
- A.2.1. Banner and Termination Messages...............67
- A.2.2. Messages Produced by PCCA.....................67
- A.2.2.1. Fatal Errors From PCCA...............68
- A.2.2.2. Errors from PCCA.....................68
- A.3. PCCL Messages........................................71
- A.3.1. Banner and Termination Messages...............71
- A.3.2. Warnings from PCCL............................71
- A.3.3. Fatal Errors from PCCL .......................72
-
-
-
-
-
-
-
-
- TABLE OF CONTENTS
-
-
-
- B. Order Form................................................74
-
- C. User Comments.............................................75
-
- index.....................................................76
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- TABLE OF CONTENTS
-
-
- L I S T O F F I G U R E S
-
- 7-1: Initial Memory Layout....................................29
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Personal C Compiler
-
- PCC 1.2c
-
-
- A Product of C WARE CORPORATION
-
- Copyright (c) 1988, 1989 C WARE CORPORATION
- All Rights Reserved
-
- PCC is a fully operational and tested 'C' Compiler. This is NOT
- cripple-ware. As a reward for registration, you will receive a
- disk with several utilities to enhance the compiler:
-
- 1. Clist - reads C source files and produces a listing file
- with a symbol cross-reference.
-
- 2. Lib88 - object code librarian. Reads object files and
- other library files and produces library files.
-
- 3. Profile - C program execution profiler. Monitors program
- execution and shows where time is spent in the
- program.
-
- 4. Xarray - A library of memory access functions to use the
- entire 640K RAM space. With source.
-
- Registered users are also eligible to purchase several useful
- utilities to further enhance the capabilities of the compiler.
-
-
- 1. The Legal Stuff
-
- This version of the documentation, software and copyright
- supersedes all previous versions of PCC.
-
- PCC software copyright (C) 1988, 1989 by C WARE CORPORATION. All
- rights reserved.
-
- This document copyright (C) 1988, 1989 C WARE CORPORATION. All
- rights reserved.
-
- Specifications subject to change without notice.
-
- Most of the hardware names in this manual are trademarks or trade
- names of specific manufactures.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Legal Stuff Page 2
-
-
- 1.1. License
-
- This PCC is NOT public domain or free software, but is being
- distributed as "shareware".
-
- PCC is copyright (C) 1988, 1989 by C WARE CORPORATION.
-
- Non-registered users of this software are granted a limited
- license to make an evaluation copy for trial use on a private,
- non-commercial basis, for the express purpose of determining
- whether PCC is suitable for their needs. At the end of this trial
- period of THIRTY DAYS you MUST either register your copy or
- discontinue using PCC.
-
- A PCC registration entitles you to use the program on any and all
- computers available to you, as long as you use the program on
- only one computer at a time with the following restriction:
-
- All users are granted a limited license to copy PCC only for the
- trial use of others. This license does NOT include distribution
- or copying of this software package:
-
- 1. In connection with any other product or service except as
- noted below.
- 2. For general use within a company or institution.
- 3. Distribution in modified form. This license information
- MUST be included, along with the full PCC documentation
- and all PCC files as released by C WARE CORPORATION.
-
- Operators of electronic bulletin board systems (SYSOPS) are
- encouraged to post PCC for downloading by users.
-
- If you are the distributor of a public domain or user-supported
- software library, you may be distribute copies of PCC. A fee of
- not to exceed $5.00 perdisk may be charged for copy service,
- handling and materials. The files MUST be distributed in
- "archived' form so users may be able to adequately varify the
- integrity of the files.
-
- The additional utilities available to registered users shall NOT
- be distributed by any individual or organization other than C
- WARE CORPORATION.
-
- 1.2. Support Policy
-
- The nature of this product and the pricing makes it necessary for
- us to NOT provide telephone support for users excepting as noted
- in the pricing schedule below. We will have to refuse to answer
- questions unless you have registered the product AND paid for
- phone support. Every attempt will be made to address questions
- left on our support BBS in an appropriate and timely manner.
- However, this support will be on a when-time-is-available basis
- and C WARE CORPORATION is NOT responsible to provide support in
- any form for non-registered or registered users. Information
- will be posted on our support BBS when it becomes available as
-
-
-
-
-
-
-
-
- Legal Stuff Page 3
-
-
- well as bug fixes or patches. Upgrades to PCC will be made when
- appropriate to improve, enhance or correct the product.
-
- 1.3. DISCLAIMER
-
-
- The author has taken due care in preparing this manual and the
- programs and data on the electronic media accompanying this book
- including research, development, and testing to ascertain their
- effectiveness. The author and the publisher make no expressed or
- implied warranty of any kind with regard to these programs nor
- the supplemental documentation in this book. In no event shall
- the author or C Ware Corporation be liable for incidental or
- consequential damages in connection with or arising out of the
- furnishing, performance or use of any of these programs.
-
-
- 1.4. FOREIGN RESHIPMENT LIABILITY
-
- THIS LICENSE AGREEMENT IS EXPRESSLY MADE SUBJECT TO ANY LAWS,
- REGULATIONS, ORDERS OR OTHER RESTRICTIONS ON THE EXPORT FROM THE
- UNITED STATES OF AMERICA OF SOFTWARE, OR OF INFORMATION ABOUT
- SUCH SOFTWARE, WHICH MAY BE IMPOSED FROM TIME TO TIME BY THE
- GOVERNMENT OF THE UNITED STATES OF AMERICA. NOTWITHSTANDING
- ANYTHING CONTAINED IN THIS AGREEMENT TO THE CONTRARY, YOU MAY NOT
- EXPORT, DIRECTLY OR INDIRECTLY, ANY SUCH SOFTWARE OR INFORMATION
- PERTAINING THERETO TO ANY COUNTRY FOR WHICH SUCH GOVERNMENT OR
- AGENCY THEREOF REQUIRES AN EXPORT LICENSE OR OTHER SUCH
- GOVERNMENT APPROVAL AT THE TIME OF EXPORT WITHOUT FIRST OBTAINING
- SUCH LICENSE OR APPROVAL.
-
- 1.5. LIMITED WARRANTY
-
- PCC IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
- EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
- PCC IS WITH YOU.
-
- SOME STATES DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO
- THE ABOVE EXCLUSIONS MAY NOT APPLY TO YOU. THIS WARRANTY GIVES
- YOU SPECIFIC LEGAL RIGHTS AND YOU MAY ALSO HAVE OTHER RIGHTS
- WHICH VARY FROM STATE TO STATE.
-
- C Ware does not warrant that operation of PCC will be
- uninterrupted or error free.
-
- 1.6. LIMITATIONS OF REMEDIES
-
- If C Ware is unable to deliver a copy of PCC that is
- satisfactory, then you may obtain a full refund by returning all
- PCC materials and documantation within thirty days of delivery to
- you as evidenced by a copy of your receipt.
-
-
-
-
-
-
-
-
-
-
- Legal Stuff Page 4
-
-
- This refund is the entire extent of C Ware's liability and your
- exclusive remedy.
-
- IN NO EVENT WILL C WARE BE LIABLE TO YOU FOR ANY DAMAGES,
- INCLUDING ANY LOST PROFITS, LOST SAVINGS OR OTHER INCIDENTAL OR
- CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
- PCC EVEN IF C WARE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
-
- SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY
- FOR INCIDENTAL OR CONSEQUENTAIL DAMAGES SO THE ABOVE LIMITATION
- OR EXCLUSION MAY NOT APPLY TO YOU.
-
- 1.7. General
-
- This Agreement will be governed by the laws of the State of
- California.
-
- Should you have any questions concerning this Agreement, you may
- write to C Ware Corporation, PO Box 428, Paso Robles, CA 93447.
-
- YOUR CONTINUED USE OF PCC BEYOND THE THIRTY DAY TRIAL PERIOD,
- WITH OR WITHOUT REGISTRATION, ACKNOWLEDGES THAT YOU HAVE READ
- THIS AGREEMENT, UNDERSTAND IT AND AGREE TO BE BOUND BY ITS TERMS
- AND CONDITIONS. YOU FURTHER AGREE THAT IT IS THE COMPLETE AND
- EXCLUSIVE AGREEMENT BETWEEN US WHICH SUPERSEDES ANY PROPOSAL OR
- PRIOR AGREEMENT, ORAL OR WRITTEN, ANY ANY OTHER COMMUNICATIONS
- BETWEEN US RELATING TO THE SUBJECT MATTER OF THIS AGREEMENT.
-
- 1.8. TRADEMARKS
-
- MS-DOS is a registered trademark of Microsoft Corporation.
- PC-DOS is a registered trademark of IBM Corporation.
- Compaq is a registered trademark of Compaq Inc.
- Tandy 1000 is a registered trademark of Tandy Corporation.
-
-
- 1.9. ORDERING INFORMATION
-
- A PCC registration licenses you to use the product on a regular
- basis. Users need register only one version of PCC, registration
- includes licensed use of all upgrades. Registered users can
- always get the most current version of the program at a nominal
- fee ($5.00 as of this writing) by calling or writing C WARE
- CORPORATION. The latest version will also be available on the
- following "official distribution BBSs":
-
- 1. PYSMATIC BBS, Sunnyvale, CA (408)-992-0372
-
-
- If you purchased PCC through a distributor of public domain or
- user-supported software, you did NOT pay for the license. The
- fee ($5.00 max per disk) was to cover the costs of copying the
- disk(s), the media and handling overhead. You paid for the
- vendors service.
-
-
-
-
-
-
-
-
- Legal Stuff Page 5
-
-
-
- Registration for PCC costs $30 and assumes you have already
- received a copy of the program from whatever source. We will
- also send you the next major upgrade of PCC when it is released OR
- if you ask, we will send you a certified copy of the current
- version of the program and you must download, purchase or send us
- $5.00 to get the next version.
-
- 1.10. Use by Educational Institutions
-
- Educational institutions wishing to use PCC for courses involving
- C MUST obtain a site license. State or city operated
- institutions shall pay $10.00 per student using the program.
- Private or commercial institutions shall pay $15.00 per student
- using the program. All reproduction of documentation and media
- shall be done by the licensed site institution. The additional
- utilities offered to registered users may be purchased at 66% off
- for state or city operated institutions and 50% off for private
- or commercial institutions.
-
- Students using the program via this method are NOT registered
- users and must register their copy as per the licensing agreement
- for an indivdual if they use the program after completion or
- termination of the course.
-
- 1.11. Corporate, Business, Government and Commercial Use
-
- Corporate, business, government or other commercial uses of PCC is
- PROHIBITED. We offer an excellent C Development Package for such
- commercial users. Please contact C WARE CORPORATION directly for
- information and pricing. The intent of PCC is to provide a low
- cost base for persons interested in learning C or using C
- primarily for programs for self used programs. If you find you
- wish to sell a program developed with PCC, you must do the
- following:
-
- 1. The program and documentaion must prominently indicate
- the code was compiled with PCC (c) 1988, 1989 C WARE
- CORPORATION.
-
- 2. Get written permission ( which is no big problem ) by
- sending us a copy of the program as it is to be sold or
- distributed. A letter granting permission will be sent
- promptly, if your package meets the requirements of
- paragraph 1 above.
-
-
- ALL PRICES ARE SUBJECT TO CHANGE WITHOUT NOTICE.
-
-
- Please use the order form in Appendix C when placing an order.
-
-
-
-
-
-
-
-
-
-
-
-
- Legal Stuff Page 6
-
-
- You can also register/order your copy of PCC by phone, using your
- MasterCard or VISA. Phone (805)-239-4620, 9:00 - 4:00 p.m. PST
- or PDT only.
-
- Sorry, C.O.D. orders will NOT be accepted.
-
- ORDERS OUTSIDE THE US: Please use your Mastercard or VISA when
- ordering, or send checks drawn on US banks in US dollars. All
- checks must have US bank magnetic routing symbols. Please
- include an additional $5 to cover postage on orders to be sent
- outside of the US.
-
- Full-time students can apply a 10% discount on all prices. You
- MUST include your a photo-copy of your most recent registration
- slip and student ID card.
-
- PRICE SCHEDULE AND INFORMATION ( November 1988 )
-
- 1. Individual Registration - $30.00
- - Copy of program sent if requested
- - Utility package sent automatically
-
- *** Below items only available to registered users. ***
-
- 2. Editor - $10.00
-
- 3. Debugger - $15.00
-
- 4. MS DOS Linker compatability utility - $ 5.00
-
- 5. Special utilities package - $ 5.00
-
- 6. Five phone support calls (5-min). - $15.00
- - Total 25 minutes of help time
-
-
-
- NOTES:
-
- 1. The above prices include CA sales tax.
-
- 2. Sorry, we do not have a printed manual available.
-
- 3. For fastest service please send Money Order or use Visa
- or MasterCharge. We must wait 10 days for personal
- checks to clear.
-
- 4. Please allow 30 days for delivery. Money order, Visa and
- MasterCharge should ship in two(2) working days but
- things do get hectic at times. Drop us a line if you
- haven't got your order in 15 days.
-
- 5. Please use the form in appendix F to order.
-
-
-
-
-
-
-
-
-
-
- Preface Page 7
-
-
- 2. Preface
-
-
- The PCC package would not exist but for the tireless work of
- L. B. Neal. He has called us, badgered us, sent us manuals and
- materials, jumped up and down about the virtues of Shareware, and
- in general demanded that we transform the DeSmet C package into
- PCC.
-
- The PCC package also owes everything to the incredible work of
- Mark DeSmet. At a time when most programmers couldn't spell 'C',
- Mark wrote a compiler, assembler, linker and library for not one
- operating system, but two. The fact that it is still the fastest
- C compiler in the current benchmarks further attests to Mark's
- skills.
-
- This manual describes the C Ware Personal C Compiler for the IBM-
- PC personal computer and the other MS-DOS based personal
- computers. It is based on the DeSmet C Development Package. If
- you are unfamiliar with the C language or UNIX, the book The C
- Programming Language (First edition -- the Second edition contains
- features and enhancements of ANSI C not found in PCC) by Brian
- Kernighan and Dennis Ritchie is available. If you plan on coding
- in assembly language, it is advisable to get a manual on the
- Intel 8086 microprocessor. Books such as Intel's ASM86 Language
- Reference Manual or The 8086 Family User's Guide are good
- choices. These manuals fully describe the architecture and the
- instruction set of the 8086/8088 family of microprocessors.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- An Introduction to PCC Page 8
-
-
- 3. An Introduction To PCC
-
- Now that we made it through all of the formalities lets take a
- look at what PCC contains.
-
- PCC is a fast powerful C compiler. It is fully compatable
- with code written for DeSmet Ver: 2.51. Code for earlier
- versions of DeSmet should work with minimal adjustment.
-
- This compiler is NOT full of bells and whistles it just
- makes fast tight compact programs.
-
- Some of the terms and conventions of PCC a bit different than
- what you may find in a text or book on the C language, so we
- will first do a quick run through the terms used in
- PCC12B.DOC.
-
- TEXT OR BOOK NAME PCC NAME COMMENT
-
- LINK PCCL Builds .EXE file
-
- filename.obj filename.o Basis for .EXE file
-
- filename.asm filename.a Assembly source file
-
- MASM or ASM PCCA 8088/8086 Assembler
-
- CC or CPP PCC Main Compiler
- (First Pass)
- CC1 PC2 Compiler Second Pass
-
- 3.1. Using Text, Book, Magazine or Download source code
-
- Many C compilers are around and so are an almost equal number of
- variations of interpretation of what C syntax should be. And
- then there are the extensions to support I/O, machine specific
- functions, etc. Source NOT written for PCC or DeSmet Ver: 2.51
- will have to have minimally minor adjustments made to be accepted
- by the PCC compiler and to run properly.
-
- In fact finding, compiling and modifying source code is an
- excellent way to learn any language or compiler. Just be careful
- to not adopt bad habits from exposure to poorly written code,
- i.e. keep your eyes open.
-
-
- *****************************************************************
-
- CAUTION: PCC will accept any valid code you supply to it, as will
- any compiler. The code may well be valid, but the result of the
- code may well be dangerous to the health and safety of your
- computer, monitor or contents of your Hard Drive or floppies (
- and it WILL be at one time or another ). Guard and maintain
- uptodate copies of all files on your system. If your program or
- the compiler starts to act erratic: i.e. screen goes blank, funny
-
-
-
-
-
-
-
-
- An Introduction to PCC Page 9
-
-
- video display, noises from hardware, or any strange unexpected
- actions., IMMEDIATELY TURN OFF THE POWER to the computer and
- investigate carefully after you have the system rebooted.
-
- ******************************************************************
-
- THE REST IS UP TO YOU
-
- C is a powerful and useful language, we hope you find PCC a help
- to your learning and use of the C language.
-
- Your comments and suggestions on how to improve our product are
- welcome.
-
- Enjoy your adventure into the land of C and we hope your programs
- help you in your computing.
-
- 3.2. Getting Started
-
- First things first. Copy all of the files from the distribution
- disks onto a set of working floppy diskettes or hard disk. The
- package is not copy-protected so the MS-DOS copy command can be
- used to copy the files. The package is distributed on a single
- double-sided (360KB) diskette. The distribution diskette should
- never be used, it should be kept as the backup copy of PCC.
-
- Lets make sure the compiler files are intact. A source program
- called DUMP.C has been provided in this package. Place the files
- from PCC12B.DWC in a directory of your choice or on floppy disks
- per the later documentation. To compile DUMP.C enter
-
- >PCC DUMP
-
- This will compile DUMP.C into an object module DUMP.O. To link
- DUMP.O with the required library functions in PCCS.S enter
-
- >PCCL DUMP
-
- This will produce a file DUMP.EXE. To run DUMP.EXE enter
-
- >DUMP DUMP.C
-
- This will produce a hex and ascii dump of DUMP.C on your screen.
- If DUMP runs correctly, then the compiler should be in good
- working order.
-
- 3.3. PCC Files
-
- The package is distributed as an archive file -- PCC.DWC -- so
- that integrity checks may be run. PCC.DWC contains the following
- files:
-
- BUF128.A Source code for BUF128.EXE.
- BUGS!.EXE Arcade game (use 'BUGS! c' for color displays).
- CTYPE.H Include file for character typing macros.
-
-
-
-
-
-
-
-
- An Introduction to PCC Page 10
-
-
- DUMP.C Source code for DUMP.EXE.
- EXEC.O The Exec() and Chain() functions.
- ISETUP.A Run-time startup source code.
- LATER.C Source code for a file modification date checking
- program.
- LIFE.C Source code for LIFE.EXE.
- MATH.H Include file for the Standard Math package.
- PC2.EXE The second pass of the C compiler.
- PCC.DOC This file
- PCC.EXE The first pass of the C compiler.
- PCC7.S The standard C function library with 8087 support.
- To use this library, rename it to PCCS.S.
- PCCA.EXE The assembler and third pass of the C compiler.
- PCCL.EXE The object file linker.
- PCCS.S The standard C function library with software
- floating-point support.
- RAM.COM RAM Disk driver for DOS 2.0 and later operating
- systems.
- PCIO.A Source code for the PC screen functions.
- SETJMP.H Include file for non-local jumps
- STDIO.H Include file for the Standard I/O package.
-
-
- 3.4. Basic System
-
- The minimum files you need from PCC.ARC are PCC.EXE, PC2.EXE,
- PCCA.EXE, and PCCS.S. The files STDIO.H and MATH.H contain
- useful declarations.
-
- If you are developing in a directory other than the one that
- contains the PCC files, be sure to set the PATH environment
- variable to include the PCC directory.
-
- 3.5. Setting Up DOS 2.xx, 3.xx, ...
-
- For systems utilizing DOS 2.x or later versions of the operating
- systems, make sure that the ASCII text file CONFIG.SYS exists on
- your boot disk.
-
- The file must contain the line:
-
- FILES=20
-
- since PCC supports 20 open files Q stdin, stdout, stderr, and 17
- other files. The default number of eight is insufficient for the
- PCCL program.
-
- If there is enough memory available, add the line:
-
- BUFFERS=20
-
- to improve file performance in the operating system. 512 bytes
- are allocated for each buffer specified.
-
-
-
-
-
-
-
-
-
-
- An Introduction to PCC Page 11
-
-
- 3.6. RAM DISK
-
- If you have a system with more than 256 kilobytes of memory, then
- the Ram Disk driver RAM.COM can be used to create an extremely
- fast disk. To add a Ram Disk, copy the RAM.COM file from the
- distribution diskette to the system disk and add the line:
-
- DEVICE=RAM.COM n
-
- to the CONFIG.SYS file. The parameter, n, is a decimal number
- from 32 to 650 indicating the size of the Ram Disk. The value is
- specified in units of one kilobyte (1024).
-
- Re-boot the system to install the Ram Disk. The drive letter
- used for this 'disk drive' is dependent on the configuration of
- the system. DOS will install the Ram Disk at the first free
- device "slot". For an IBM PC with two floppies, this will
- probably be drive C:. For an XT, it will probably be drive D:.
- Sanyo 550/5 reserves the first four slots for its floppies, so
- the Ram Disk is drive E:. To find where DOS has installed the
- Ram Disk, use
-
- chkdsk x:
-
- where x takes on the values c, d, .... You will get either a
- disk error, or a return showing the size of the Ram Disk. Once
- you find it, the Ram Disk will always be the same until you add
- other device drivers before it in the CONFIG.SYS file.
-
- 3.7. Completion Codes
-
- The PCC, PCCA, and PCCL programs set the completion code to:
-
- zero if no warnings or errors occurred,
- one if warnings were issued, and
- two if errors occurred.
-
- Batch files can take advantage of these values to stop execution
- or otherwise handle these exceptional cases.
-
- The following batch file will stop on a PCC or PCCL error:
-
- PCC %1
- if errorlevel 1 goto stop
- bind %1
- if errorlevel 1 goto stop
- %1
- :stop
-
- More complicated development situations can be handled with the
- program LATER which is supplied in source form in the file
- LATER.C. LATER takes a list of filenames as arguments. It sets
- the errorlevel to one if the last file does not exist or if the
- last file has an earlier modification date than any other file in
- the list. It can only be used on systems with a battery backup
-
-
-
-
-
-
-
-
- An Introduction to PCC Page 12
-
-
- clock or where users are careful about setting the date and time
- when the system is brought up. Assume a program is composed of
- the files moda.c, modb.c, modc.c and the include file mod.h. The
- following .BAT file can be used to regenerate the program
- whenever a module changes:
-
- later moda.c mod.h moda.o
- if errorlevel 1 PCC moda
- if errorlevel 1 goto stop
- later modb.c mod.h modb.o
- if errorlevel 1 PCC modb
- if errorlevel 1 goto stop
- later modc.c mod.h modc.o
- if errorlevel 1 PCC modc
- if errorlevel 1 goto stop
- later moda.o modb.o modc.o mod.exe
- if errorlevel 1 bind moda modb modc -omod
- :stop
-
- This provides a service similar to the UNIX MAKE program. Only
- those files that need to be compiled will be compiled.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCC -- The Personal C Compiler Page 13
-
-
- 4. PCC -- The Personal C Compiler
-
- 4.1. Introduction
-
- PCC is the C compiler for the 8088/8086 family of
- microprocessors. It accepts C source programs as input and
- produces object files. The model employed by the compiler
- efficiently utilizes the 8088/8086 architecture but limits a
- program to 64KB code and 64KB of data.
-
-
- Invocation
-
- PCC <filename> [options]
-
- <filename> is the name of the file containing the C source. If it
- does not include an extension, the extension '.C' is
- assumed.
-
- Options: The case of the option is not significant. Each option
- should be separated from other options by blanks. Options may be
- preceded with the dash (-) character.
-
- A - assembly output. This option indicates that the
- compiler should produce an assembly language source
- file instead of an object file. The name of the
- assembly language file will be the same as the name of
- the source file but will have the extension '.A'.
-
- D<name> - compiler drive specification. The compiler assumes
- that the files GEN.EXE and ASM88.EXE are in the
- default directory on the current drive. This option
- is used to inform the compiler that the files are on a
- different drive. For example, if the compiler is on
- drive 'M', then the option 'DM' is needed.
-
- Under MS-DOS 2.0 and later versions of the operating
- system, this option is rarely needed as the system
- PATH variable is also used to find the other passes of
- the compiler.
-
- I<name> - include path name. This option overrides the
- default drive/directory for files included with the
- #include control. The directory name must end with a
- trailing backslash (\) character (e.g. -
- ic:\src\include\). See section 4.4.1 for #include
- details.
-
- N<defname>=<defvalue> - specify #define name and value. Used to
- set debugging switches or constant values without
- editing the file. This option is equivalent to
-
- #define defname defvalue
-
- at the begining of the program.
-
-
-
-
-
-
-
-
- PCC -- The Personal C Compiler Page 14
-
-
- To set <defname> to one, enter n<defname>, which is
- equivalent to
-
- #define defname 1
-
- Spaces are not allowed.
-
- O<filename> - output filename. The compiler will produce an
- object file with the specified name. If the name
- lacks an extension, the extension '.O' will be added.
- The default object name is the same as the source name
- with the extension of '.O'.
-
- T<drive> - specifies the drive that the compiler should use for
- its temporary files. If not specified, the compiler
- will build its temporary files on the default drive.
- If this drive is close to being full, the 'T' option
- should be used to change the drive for the
- temporaries. Also, if the RAM Disk has been
- installed, placing the temporary files there will
- drastically cut the amount of time needed to compile a
- program.
-
-
- 4.2. Examples
-
- PCC blip
- compiles the file named blip.c. The object file will
- be named blip.o.
-
- m:PCC b:blip.ccc tm dm
-
- runs the compiler from drive M on the file b:blip.ccc.
- Temporary files are also written on drive M. Note the
- use of the D option to indicate the location of the
- other passes of the compiler. The object file will
- also be named blip.o.
-
- PCC blip -ic:\inc\ -a -nNewVersion -nNYear=1985
-
- compiles the file named blip.c. Include files are
- taken from the directory c:\inc\. An assembly
- language file is generated named blip.a. The 'N'
- options are equivalent to adding
-
- #define NewVersion 1
- #define NYear 1985
-
- to the start of blip.c
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCC -- The Personal C Compiler Page 15
-
-
- 4.3. The C Language
-
- PCC compiles C programs that conform to the standard definition
- of the C language as described in the book The C Programming
- Language by Brian W. Kernighan and Dennis M. Ritchie. The
- following documentation describes the implementation.
-
- 4.3.1. Preprocessor directives
-
- #define defines a macro with or without parameters.
-
- #undef, #ifdef and #ifndef - tests the status of the #defined
- macros
-
- #include includes other files into the program. #include's
- can be nested to a maximum depth of 3.
-
- #include "filename" will search the default directory
- for the file filename. #include <filename> will first
- search the default directory for filename. If the
- file was not found, the environment (see DOS 2.X/3.X
- SET command) is searched for the variable INCLUDE .
- If the variable is found, it is assumed to contain a
- set of directory prefixes separated by semi-colons.
- For example, if INCLUDE is set as follows
-
- C>set include=c:\;c:\usr\include\
-
- then the line
-
- #include <world.h>
-
- would cause PCC to search for
-
- world.h
- c:\world.h
- c:\usr\include\world.h
-
- #if, #else, #endif - conditionally includes or excludes source
- statements.
-
- 4.3.2. Data Types
-
- char Unsigned byte with a range of 0 to 255.
-
- int
- short Signed Integer with a range of -32768 to 32767.
-
- unsigned Unsigned integer with a range of 0 to 65535.
-
- long Signed integer with a range of -2147483648 to
- 2147483647.
-
- float Four byte floating point value. A float number has
- about 7 digits of precision and has a range of about
-
-
-
-
-
-
-
-
- PCC -- The Personal C Compiler Page 16
-
-
- 1.E-36 to 1.E+36. The floating point formats are
- defined by the IEEE floating-point standard.
-
- double Eight byte floating point value. A double number has
- about 13 digits of precision and a range of about 1.E-
- 303 to 1.E+303.
-
- (pointer) pointers are two bytes, limiting total data space to
- 64KB.
-
- To take advantage of the 8088/8086 instruction set, expressions
- involving only char types are not coerced to int before
- evaluation. The sum of a char equal to 255 and a char equal to 1
- is 0 rather than 256. Constants are considered to be int values
- so that constant plus char is a two byte integer operation.
-
- 4.4. Extensions
-
- The UNIX Version 7 extensions -- enumerated types, extended
- member name-space, and structure assignment are fully supported.
-
- Enumerated types provide a convenient method of declaring an
- ordered set of named constants. Values start with zero, and may
- be reassigned with a name = value expression. The same value may
- be assigned to several names. For example
-
- enum color {red, blue=4, green} ca, *cp;
- enum color cb;
- if(ca == red)
- cb = green;
- is equivalent to
-
- #define red 0
- #define blue 4
- #define green 5
- int ca, *cp;
- int cb;
- if(ca == red)
- cb = green;
-
-
- Extended member name-space relaxes the K&R requirement that if a
- member name appeared in more than one structure or union, then it
- had to have the same data type and offset in every appearance.
- Now, the only restriction is that the member name must be unique
- within the structure or union. If a member name is used that is
- not in the referenced structure, the warning
-
- member not in structure
-
- is issued. As a loophole, a pointer to char may be used as an
-
-
-
-
-
-
-
-
-
-
-
-
- PCC -- The Personal C Compiler Page 17
-
-
- anonymous pointer to any structure.
- struct {int i, j, k;} zip;
- struct {int j; char i;} zap, *zp;
- char *cp;
-
- zip.i = 1; /* OK */
- zap.i = 1; /* OK */
- zap.k = 1; /* WARNING */
- zp->i = 1; /* OK */
- zp->k = 1; /* WARNING */
- cp->k = 1; /* OK, ANONYMOUS */
-
- Structures can be assigned, used as parameters, or returned from
- a function. CAUTION: this may create problems with existing
- programs because previous versions of PCC converted the name of a
- structure in a parameter list to a pointer to that structure,
- while the current release pushes the entire structure. To
- highlight this potential problem, PCC will issue the following
- warning
-
- structure assignment
-
- when structures are passed by value, and the warning
-
- returns structure
-
- when a function returns a structure. These warnings will be
- removed in a future release.
-
- struct z {int i, j;} zip, zap, zxax();
- main(){
- zip = zap; /* structure assignment */
- zap = zmax(zip, zap);
- }
- struct z zmax(a,b) /* func returns struct */
- struct z a, b; {
- if(a.i > b.i)
- return a;
- return b;
- }
-
- Variable names are significant to 31 characters instead of 8.
-
- A #asm directive has been included to allow in-line assembly
- language code for time critical applications. All lines
- following a line starting with #asm are passed through to the
- assembler. The next line beginning with the "#' character, ends
- the in-line assembly code.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCC -- The Personal C Compiler Page 18
-
-
- For example:
-
- _move(count, src, tar)
- int count; char *src, *tar; {
- #asm
- MOV CX,[BP+4] ;count
- MOV SI,[BP+6] ;src
- MOV DI,[BP+8] ;dst
- MOV AX,DS
- MOV ES,AX
- CLD
- REP MOVSB
- #
- }
-
- 4.4.1. Forward References
-
- PCC is effectively a one pass compiler so forward references will
- not work. The following program:
-
- main() {
- i=99;
- }
- extern int i;
-
- will produce a warning that 'i' is undefined and is assumed to be
- a local variable named 'i'. The global variable 'i' will not be
- changed.
-
- Structure tags must be defined before being referenced. The only
- exception is pointers, so that legal structure declarations
- include structures of the form:
-
-
- struct a {
- struct b *x;
- }
-
- struct b {
- struct a *y;
- }
-
-
- 4.4.2. Externs
-
- The rules for 'extern' declarations are:
-
- 1. Statements that are global to the source file, like 'int
- blip;' may be in several different files that are linked
- together. The BINDer will allocate 2 bytes for the global
- integer variable blip. This is an extension to the standard
- rule that restrict global declarations to a single file and
- require all the other declarations to be extern.
-
-
-
-
-
-
-
-
-
-
- PCC -- The Personal C Compiler Page 19
-
-
- 2. A declaration that includes the keyword 'extern' may not
- include initializers and does not allocate any memory. Thus
- a variable so declared must be declared somewhere else
- without the 'extern' keyword in order to reserve memory for
- the variable. For example, if a file contains the
- declaration extern int blip then some other file must
- contain the declaration int blip to actually allocate
- storage. If this is not done, the binder will complain
- about a reference to the unresolved symbol blip. It is
- permissible to have both an 'extern' and non-'extern'
- declaration in a single file. For example,
-
-
- extern int blip;
- int blip;
-
- is valid.
-
- To create include files containing data declarations -- if the
- variable is not initialized (which means it will be initialized
- with zeros) either include the declaration:
-
- int blip;
-
- in every file or include the declaration:
-
- extern int blip;
-
- in every file and add the declaration:
-
- int blip;
-
- to one of the files to actually allocate the storage.
-
- If the variable needs initialization, the second approach must be
- used. Include the declaration:
-
- extern int blip;
-
- in the include file. Initialize the value in only one file:
-
- int blip = 1985;
-
- These rules are about the same as Version 7 UNIX. Extern rules
- are an area of C that are currently controversial. System V UNIX
- tried to tighten up the rules but enough people complained that
- 5.2 is back to normal.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCC -- The Personal C Compiler Page 20
-
-
- 4.4.3. Macros
-
- Macro arguments are not replaced within a quoted string. For
- example, in The C Puzzle Book by Alan Feuer the macros in
- <defs.h> use the following construct to customize printf() calls.
-
- #define PR(fmt,v)printf("value=%fmt%t",v);
-
- This does not work with the PCC compiler. Instead add the
- following defines to <defs.h>:
-
- #define D "value = %d%t"
- #define F "value = %f%t"
- #define C "value = %c%t"
- #define G "value = %g%t"
-
- and change the PR define to
-
- #define PR(fmt,v)printf(fmt,(v));
-
- Statements of the type
-
- PRINT1(d,x);
-
- must be changed to
-
- PRINT1(D,x);
-
- in the programs. Lower case D, F, C, and G's would allow the
- programs to remain unchanged but variables c and g are used in
- structure one and variable g is used in structures two and three.
-
-
- 4.4.4. Strings
-
- Literal character strings delimited by quotes ('\"') cannot
- contain the NUL character ('\0'). The compiler terminates the
- string at the NUL character, even though it checks that the
- string has a terminating quote character. If you want NUL
- characters in the string for initialization purposes, use an
- array assignment.
-
- char init1[]="abcdef@xyz@012", *ip=init1;
-
- while(ip = index(ip, '@'))
- *ip = '\0';
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCA 8088 Assembler Page 21
-
-
- 5. The PCCA 8088 Assembler
-
- 5.1. Introduction
-
- PCCA is the 8088/8086 assembler. It reads assembly language
- source files and produces linkable object files.
-
- 5.2. Invocation
-
- PCCA <filename> [ options ]
-
- <filename> is the name of the assembly language source file. If
- it does not include an extension Q the extension '.A'
- is assumed.
-
- Options: The case of the option is not significant. Each option
- should be separated from other options by blanks. Options may be
- preceded with the dash (-) character.
-
- L[ <filename> ] -- The assembler will produce a listing from the
- assembly language input. This listing includes the
- hex-values generated by the assembler as well as line
- numbers and pagination. If no name is specified, then
- the name of the source file with the extension '.L' is
- used. If the specified file does not have an
- extension, '.L' will be used. Otherwise the listing
- is written to the specified file. To generate a
- listing on the printer, use '-LPRN:'.
-
- O<filename> The assembler will produce an object file with the
- specified name. If the name lacks an extension, then
- the extension '.O' will be appended to the name. The
- default object file name is the name of the source
- file with the extension changed to '.O'.
-
- T<drive> The 'T' option specifies the drive where the assembler
- temporary files will be created. If a RAM Disk is
- available, redirecting temporary files to that drive
- will greatly speed development. The assembler
- normally creates its temporary files on the default
- drive/directory.
-
- Pnn Specifies page length, in lines. The default is 66.
-
- Wnn Specifies page width, in characters, for the list
- file. The value nn must be a number from 60 to 132.
- The default is 80.
-
- 5.3. Example
-
-
- pcca blip
- assembles the file named blip.a and produces an object
- file named blip.o.
-
-
-
-
-
-
-
-
-
- The PCCA 8088 Assembler Page 22
-
-
- M:pcca blip.asm -Ob:blip Lblip.lst
-
- runs the assembler from drive M: on the file named
- blip.asm. The output is an object file named blip.o
- on drive B: and a listing file named blip.lst on the
- default drive.
-
- pcca blip.a TM -oa:blip.o -lb:blip.lst
-
- assembles the file named blip.a. Temporary files are
- created on drive M:. The output of the assembler is
- placed on drive A: in the file blip.o. A listing file
- is generated and written to drive B: in the file
- blip.lst
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCL Object File Linker Page 23
-
-
- 6. The PCCL Object File Linker
-
- 6.1. Introduction
-
- PCCL is the program that links together object and library
- modules and forms an executable program. For very long command
- lines, see the -f option.
-
-
- 6.2. Invocation
-
- PCCL <filename> <filename> ... [options]
-
- <filename> A sequence of filenames separated by blanks. The
- filenames should be the names of object (.O) or
- library (.S) files. If a filename does not have an
- extension, '.O' is assumed. PCCL automatically looks
- for the supplied library PCCS.S so its name should
- not be included in the list of filenames.
-
- Options: All options may be in upper or lower case. Options must
- be separated by blanks and preceded by a hyphen to differentiate
- them from <filename>s. Note that this is different from other
- commands where the hyphen is optional.
-
- -A The assembler option keeps PCCL from generating the C
- initialization code. Instead, execution begins at the
- beginning of the code rather than starting at the
- main_ public label. ARGC and ARGV are not calculated
- and the stack is not set up. Uninitialized variables
- are not filled with zero. Library functions such as
- creat() and open() cannot be used as they depend on
- the zero initialization. The 'A' and 'S' options are
- useful for a few cases but caution should be exercised
- in their use.
-
- -F<filename> identifies a file containing <filename>s and options
- to be used by PCCL. This is used for very long lists
- of filenames and options.
-
- -L<name> specifies the drive/directory containing the PCCS.S
- standard library. If this option is not specified,
- the PCCS.S file must be on the default drive. With
- MS-DOS 2.0 and later versions of the operating system,
- the PATH system parameter is used to locate the
- library.
-
- -Mn Indicates that the object files following this control
- should be collected in the memory-based overlay
- indicated by the value n ( 1 to 39 ). See the
- description on overlays below for details on the
- overlay mechanism.
-
- -O<filename> changes the name of the output file to
- <filename>.EXE. If this option is not specified, the
-
-
-
-
-
-
-
-
- The PCCL Object File Linker Page 24
-
-
- name of the first object file in the list with the
- .EXE extension will be used.
-
- -P[<filename>] Generates a sorted list of publics and offsets. C
- procedures and data declared outside of procedures are
- automatically public (or extern) unless explicitly
- declared static. Publics with names starting with an
- underline '_' are not listed unless the -_ option is
- also specified. The optional name is the destination
- for the publics list. If omitted, the publics and
- offsets are listed on the console. The size of
- overlays, if any, will also be displayed.
-
- -Shhhh specifies the stack size. hhhh is in hex. Normally,
- PCCL will set the stack size as large as possible.
- The '-S' option can be used to limit this size for use
- with exec().
-
- -Vn This option is used to create disk-based overlays.
- All object files following this option, until the end
- of the list or another overlay option, are collected
- into the overlay indicated by the value n (1 to 39).
- See the overlay section below for details.
-
- -_ (underscore) PCCL normally suppresses names that start with an
- underscore (usually internal names) from the publics
- list. The underscore option restores these publics to
- the listing. This option is useful when you need to
- see all the modules bound to your program.
-
-
- 6.3. Examples
-
-
-
- pccl blip
- links the file blip.o with PCCS.S and produces the
- executable file blip.exe.
-
- pccl proga progb progc lib.s -p
-
- links the files proga.o, progb.o, and progc.o with the
- user library lib.s and the standard I/O library,
- PCCS.S, into the application file proga.exe. The
- map is printed on the screen.
-
- pccl proga progb -V1 progc -V2 progd -Pmap -_ -Omyprog
-
- links the files proga.o, progb.o with PCCS.S and
- creates the executable file myprog.exe and the overlay
- file myprog.ov which contains two overlays consisting
- of the object files progc.o and prod.o. The publics
- map is sent to the file named map and will also list
- the internal names that begin with the underline ('_')
- character.
-
-
-
-
-
-
-
-
- The PCCL Object File Linker Page 25
-
-
- 6.4. Space Considerations
-
- A program is restricted to a maximum of 64KB of code and 64KB of
- data plus the stack. PCCL calculates the size of code and data
- and will report the size of each segment (in hex) when the -P
- option is specified. PCCL cannot calculate the actual stack
- requirements. If the 'stack' and 'locals' size reported by PCCL
- seems small, the actual stack requirements should be calculated
- by hand to make sure there is enough space. The actual require-
- ments are the worst case of four bytes per call plus the size of
- locals (including parameters) for all active procedures plus
- about 500 bytes for the Operating System calls. In practice, 2KB
- plus the size of the local arrays simultaneously active should be
- sufficient.
-
- If PCCL reports that the code limit is exceeded, look in the
- publics map for the scanf() and printf() routines. These are
- relatively large routines (around 2KB each) and also link in the
- floating-point routines. Eliminating the use of these routines
- can result in a large savings. If scanf() and/or printf() are
- necessary but no floating-point values will be used, try using
- the PCC7.S instead of the standard PCCS.S library (Rename the
- PCCS.S library to something else and rename the PCC7.S library to
- PCCS.S). This will assume the availability of the 8087 math chip
- and will not bring in the software floating-point routines.
-
-
- 6.5. Overlays
-
- Another way to solve the space problem is the use of overlays.
- The overlay system provided by this package is very simple. An
- application is divided into a root portion that is always
- resident and two or more overlays. Only one overlay is resident
- (executable) at any given time.
-
- There are two types of overlays, disk-based overlays and memory-
- based overlays. The difference between the two types is the
- location of the overlays. Disk-based overlays, created with the
- -V option, are stored in a separate file. Memory-based overlays,
- created with the -M option, are loaded into memory along with the
- root code. Memory-based overlays should only be used when there
- is sufficient memory for the root and all of the overlays. The
- advantage of memory-based overlays over disk-based overlays is in
- the amount of time needed to make an overlay resident, memory-
- based overlays being much faster to load.
-
- The application program is responsible for initializing the
- overlay subsystem and ensuring that the correct overlay is
- resident before calling any of the functions in the overlay.
-
- For disk-based overlays, the routine overlay_init() must be
- called from the root with the name of the overlay file to
- initialize the overlay system. Overlays are loaded by calling
- the routine overlay(n) where n is the number of the overlay to be
- made resident.
-
-
-
-
-
-
-
-
- The PCCL Object File Linker Page 26
-
-
-
- For memory-based overlays instead of disk-based overlays, do not
- call the overlay_init() routine and call the routine moverlay()
- in place of the routine overlay().
-
- In the following example the root is composed of the file X.C.
- The first overlay is the file Y.C and the second overlay is in
- the file Z.C.
-
-
- File X.C:
- main() {
- overlay_init("X.OV"); /* initialize */
- puts("this is the root program\n");
- overlay(1); /* make 1st overlay resident */
- zip(); /* call into 1st overlay */
- overlay(2); /* make the second resident */
- zap(); /* call into second overlay */
- puts("bye\n");
- }
-
- File Y.C:
- zip() {
- puts(" this is ZIP ");
- }
-
- File Z.C:
- zap() {
- puts(" this is ZAP ");
- }
-
-
- The files are compiled in the usual fashion:
-
- PCC x
- PCC y
- PCC z
-
- Ordinarily, the files would be linked together using the command:
-
- pccl x y z
-
- Instead, to create the two overlays, the command:
-
- pccl x -V1 y -V2 z
-
- is used. The -V option is followed by the overlay number. This
- number starts at 1 and runs in ascending order up to 39. All
- files following the -V or the -M option are included in the
- overlay. All library modules (from .S files) are included in the
- root. The result from the execution of the PCCL program with the
- -V option is the executable root (.EXE) file and the overlay
- (.OV) file which contains the overlays. The result with the -M
- option is an .EXE file containing both the root and the overlays.
-
-
-
-
-
-
-
-
-
- The PCCL Object File Linker Page 27
-
-
- The -P option of PCCL will also display the size of each overlay
- as well as the overlay for each symbol.
-
-
- 6.6. Libraries
-
- Libraries are just concatenated .O files. The .S extension tells
- PCCL to only include modules that are referenced. If all of the
- routines in a library are required, rename the .S file to a .O
- file to force all of the modules in the library to be included.
-
- PCCL includes the entire .O module from a library if any of its
- public names have been selected by other object modules processed
- by PCCL. Thus, if a .O file contains several functions, all of
- them will be bound into a program if any of them are called.
-
- PCCL searches a library once. Thus if you have two modules, A
- and B, and A calls B , the B must follow A in the library. LIB88
- attempts to order the library so that these inter-library
- references are ordered so that PCCL will find them. One way
- around any circular dependencies (e.g., B also calls A ) is to
- include the library twice on the command line.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 28
-
-
- 7. The PCCS.S Standard Library
-
- 7.1. Introduction
-
- This section describes the standard library, PCCS.S, for the
- PCC C compiler and PCCA assembler. This library includes
- routines similar to routines available in UNIX with some
- inevitable differences due to the MS-DOS Operating System.
-
- All of the routines are in the PCCS.S library file provided on
- the distribution disk. This file must be on the default
- drive/directory, in a directory listed in the PATH system
- parameter, or on the drive/directory referred to by the '-L'
- option for PCCL to execute correctly.
-
- There is a PCC7.S library that has the same functions as the
- PCCS.S libarary but assumes the availability of the 8087 math
- chip to perform the floating-point operations. To use the 8087,
- rename PCC7.S to PCCS.S.
-
- 7.2. Names
-
- Public names starting with the underline character ('_') are
- reserved for PCC internal routines and should be avoided. Names
- of this form are also employed for user callable routines such as
- _move() whose names might conflict with user names.
-
- PCC automatically appends the underline character ('_') to the
- end of public names to avoid conflicts with assembly language
- reserved words. PCCA does not do this so the underline must be
- manually appended to publics used to link with code generated by
- PCC. For example, the C puts() routine should be referred to as
- puts_ from assembler. PCCL ignores the case of publics, unlike
- UNIX, so puts_ matches the name PutS_.
-
- 7.3. Program Initialization
-
- PCCL inserts a jmp _csetup as the first executable instruction in
- the program. _CSETUP performs the following initialization
- functions:
-
- 1. sets the data/stack segment size to the lower of: available
- memory, 64K, or the size of the static data area plus the PCCL
- -S option,
- 2. Formats argc and argv[] from the Program Segment Prefix,
- 3. Zeros the Uninitialized Data Area, and
- 4. Calls main(argc, argv)
-
- Assembly language main programs that require normal
- initialization should contain the following
-
- PUBLIC MAIN_
- MAIN_:
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 29
-
-
- The initialization code will set the SS, DS and SP registers so
- that there is the largest possible stack unless the PCCL '-S'
- option is used to restrict the stack size. The stack grows
- towards the unitialized data area. The figure below shows the
- memory layout after the initialization code has run:
-
- +-------------------+
- | Stack |
- +-------------------+<- SP,BP
- | |
- / Heap /
- +-------------------+<- _memory()
- | Un-Init Data |
- +-------------------+
- | Init Data |
- +-------------------+<- DS,SS
- | Code |
- +-------------------+<- CS
- | PSP |
- +-------------------+
-
- Fig. 7-1: Initial Memory Layout
-
- The memory between the end of the uninitialized area and the
- stack is not normally used by PCC or the program (unless the
- program needs an inordinate amount of stack). This area is
- considered to be free memory. This memory area can be accessed
- directly by using the _memory() and _showsp() routines to
- calculate its extent. Another way to access this memory is to
- use the malloc() routine. Do not use both methods. Remember to
- leave enough space for the stack to grow.
-
- The -A option of PCCL inhibits the call to _csetup. Execution
- commences with the first instruction of the first filename
- specified to PCCL. On entry, the registers have the following
- values:
-
- CS Address of Code Segment. Execution starts at CS:0.
- SS Address of Data Segment.
- ES,DS Address of Program Segment Prefix
- SP Stack size set by PCCL
-
- The source code for _csetup is in the file ISETUP.A.
-
- 7.4. Calling Conventions
-
- Arguments to a function are pushed on the stack, rightmost
- argument first. It is the responsibility of the calling function
- to clean up the stack. For example
-
- int i;
-
- zip(i, 6);
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 30
-
-
- would generate the following code
-
- mov ax,6
- push ax
- push word i_
- public zip_
- call zip_
- add sp,4
-
- The word modifier is required because PCC allocates two bytes for
- ints. The add sp,4 removes the two words that were pushed as
- parameters to zip_. Note the PCC appended '_' on names. If
- there had been no local variables defined in the function, the
- clean-up code would have been
-
- mov sp,bp
-
- which is faster.
-
- Data is pushed on the stack as follows:
-
-
- char pushed as a word, with high-order byte set to zero
-
- mov AL,data_
- mov AH,0
- push AX
-
- int pushed as a word
- unsigned
- push WORD data_
-
- long pushed with least-significant word pushed last
-
- push WORD data_[2]
- push WORD data_[0]
-
- float Changed to double and pushed with least-significant
- word pushed last
-
- mov si,offset data_
- PUBLIC _FLOADE ; load float
- call _FLOADE
- PUBLIC _FPUSH ; push double
- call _FPUSH
-
- double pushed with least-significant word pushed last
-
- push WORD data_[6]
- push WORD data_[4]
- push WORD data_[2]
- push WORD data_[0]
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 31
-
-
- struct push (sizeof(struct) + 1) >> 1 words, with least-
- significant word pushed last.
-
- mov cx,nn ; size in words
- sub sp,cx ; make room on stack
- mov di,sp ; target
- mov si,offset data_ ; source
- mov ax,ds ; setup
- mov es,ax ; es
- cld ; set direction up
- rep movsw ; copy to stack
-
-
- 7.5. LIBRARY CONVENTIONS
-
- Called functions are responsible for preserving CS, DS, SS, SP,
- and BP across the function call. All other registers need not be
- maintained. The usual preamble for a called function is
-
- PUBLIC fname_
- fname_:
- push bp ; save old frame pointer
- mov bp,sp ; establish local frame
-
- For functions that don't return structures, parameters begin in
- the local frame at [bp+4], and continue upward based on the size
- of each parameter. Thus for the fragment
-
- blip(x, y, z)
- int x;
- long y;
- double z;
-
- the parameters would be referenced in Assembler as
-
- mov cx,WORD [bp+4] ; x_
- mov ax,WORD [bp+6] ; lsw of y_
- mov dx,WORD [bp+8] ; msw of y_
- lea si,[bp+10] ; addr of z_
-
- For functions that do return structures, [bp+4] contains a
- pointer to where the structure should be returned. So if the
- above fragment was
-
- struct foo blip(x, y, z)
-
- the parameters would be
-
- mov cx,WORD [bp+06] ; x_
- mov ax,WORD [bp+08] ; lsw of y_
- mov dx,WORD [bp+10] ; msw of y_
- lea si,[bp+12] ; addr of z_
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 32
-
-
- Local variables are allocated below the current frame pointer,
- regardless of what the function returns, so that the fragment
-
- {
- int aa[2];
- long b;
-
- would be referenced as
-
- sub sp,8 ; allocate space for locals
- mov ax,[bp-4] ; aa_[1]
- mov dx,[bp-8] ; msw b_
-
- The standard exit sequence is
-
- mov sp,bp ; reclaim any local space
- pop bp ; old frame pointer
- ret ; caller will clean up stack
-
- Values are returned from functions as followings:
-
- char returned in AX. char values are returned in AL
- with AH
- int set to zero
- unsigned
-
- long returned in DX:AX. (AX contains lsw)
-
- double returned on floating point stack (s/w or 8087).
- float
-
- struct returned to address in [bp+4]
-
- 7.6. Disk Input/Output Routines
-
- In this implementation of C I/O, procedures like getc() are
- functions rather than macros and a file identifier FILE is simply
- an integer containing the file number rather than a pointer to a
- structure. This change means that read() and getc() calls may be
- intermingled and there is little difference between open() and
- fopen() on a file.
-
- In UNIX there is a distinction between file and stream I/O.
- Crudely stated, the functions that have 'f' as their first letter
- (fopen(), fread() etc.) deal with streams, and other primitives
- (open(), read() etc.) access files. These two forms of I/O are
- compatible -- fopen() may be used to open a file a file and then
- read() used to read it -- but it is best to use either the stream
- or file primitives only for a particular file for portability.
- The FILE type is defined in the stdio.h include file and is
- simply an int type. This int contains the file number, the same
- number returned by open() and creat(). To use the stream
- routines with a file opened with the open(), merely pass the file
- number.
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 33
-
-
- The stream style of I/O primitives are: fopen() to open a file,
- fread(), fgets() or fgetc() [getc()] to read, fwrite(), fputs()
- or fputc() [putc()] to write, fseek() to seek, fflush() to write
- out internal buffers, and fclose() to close.
-
- The file type I/O primitives are: open(), creat(), read(),
- write(), lseek(), and close().
-
- The maximum number of files that can be open at one time is
- either 20, or the number specified in CONFIG.SYS, whichever is
- less. See section 2.3 for details about CONFIG.SYS. New files
- are creat()'d and old files are open()'d.
-
- A closed file may be rename()'d or unlink()'d (deleted).
-
- Three predefined file numbers may be used to read from or write
- to the console. To use them, include the following defines in
- the program:
-
- #define stdin 0
- #define stdout 1
- #define stderr 2
-
-
- 7.7. Math Routines
-
- If any of the transcendental or sqrt() functions are used,
- include the file math.h or the equivalent declarations to specify
- them as returning double's.
-
- math.h includes the statement
-
- extern int errno;
-
- errno is set to a non-zero value: on floating point stack errors,
- if an argument to a math routine is out of range, or if the
- result of a math routine would under/overflow. Error codes and
- names (defined in math.h) are:
-
- 30 ESTK F/P stack overflow. The most probable cause is calling
- a function that returns a double without declaring it
- as such to the compiler. After eight calls, the f/p
- stack will be full.
-
- 33 EDOM invalid argument, i.e., sqrt(-1.0).
-
- 34 ERANGE invalid arg size, i.e., asin(2.0).
-
- The function rerrno() is called by the floating point routines
- whenever an error is detected. rerrno() prints out an
- appropriate error message and calls exit(). In order to bypass
- this effect, install the following function in your program
-
- rerrno() {;} /* null function to suppress printing */
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 34
-
-
- 7.8. IBM-PC Screen and Keyboard Interface
-
- A number of functions have been written to simplify the interface
- between C programs and the IBM-PC and its clones. These routines
- are not in the standard PCCS.S library but are distributed in
- source form in the file PCIO.A. To use these routines, they must
- be assembled and bound in. For example:
-
- A>asm88 b:pcio
- A>bind b:blip b:pcio
-
- See the comments in the IBM Technical Reference Manual for
- details on the BIOS interface used by PCIO.
-
-
- 7.9. Standard Library Functions
-
-
- 7.9.1. abs()
-
- unsigned uval;
- int y;
-
- uval = abs(y);
-
- abs returns |y| (absolute value).
-
-
- 7.9.2. atoi()
-
- char *cp;
- int ival;
-
- ival = atoi(cp);
-
- atoi converts the char array at cp to its corresponding int
- value. The first unrecognized character terminates the
- conversion.
-
- WS is either a tab or a space. A digit is an ASCII character '0'
- through '9'. [] delimit sequences that can occur zero or one
- time. {} delimit sequences that can occur zero or many times.
-
- Valid character Sequences
-
- {WS} [-] {DIGIT}
-
-
- SEE ALSO:scanf()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 35
-
-
- NOTES: To guard against int overflow, or large unsigned values
- being stored as negative integers, use atol and check that the
- high-order word is the same as the high-order bit of the low-
- order word.
-
- atoi(str)
- char *str; {
- long val, atol();
- int sign, extn;
-
- extn = (val = atol(str)) >> 16;
- sign = val & 0x8000;
- if((!sign && extn != 0) || (sign && extn != -1))
- overflowErr();
- return val;
- }
-
-
- 7.9.3. atof()
-
- char *cp;
- double dval;
-
- dval = atof(cp);
-
- atof converts the char array at cp to its corresponding double
- value. The first unrecognized character terminates the
- conversion.
-
- WS is either a tab or a space. A digit is an ASCII character '0'
- through '9'. E is either an ASCII 'E' or 'e'. [] delimit
- sequences that can occur zero or one time. {} delimit sequences
- that can occur zero or many times.
-
- Valid character Sequences
-
- {WS} [-] {digit} ['.'] [{digit} [E [-] {digit}]]
-
- SEE ALSO:scanf()
-
-
- 7.9.4. atol()
-
- char *cp;
- long lval, atol();
-
- lval = atol(cp);
-
- atol converts the char array at cp to its corresponding long
- value. The first unrecognized character terminates the
- conversion.
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 36
-
-
- WS is either a tab or a space. A digit is an ASCII character '0'
- through '9'. [] delimit sequences that can occur zero or one
- time. {} delimit sequences that can occur zero or many times.
-
- Valid character Sequences
-
- {WS} [-] {DIGIT}
-
-
- SEE ALSO:scanf()
-
- }
-
-
- 7.9.5. ceil()
-
- #include <math.h>
-
- double dval, x;
-
- dval = ceil(x);
-
- ceil returns the smallest integer value not less than x.
-
-
- 7.9.6. chain()
-
- char *filename, *commandTail;
-
- chain(filename, commandTail)
-
- chain will load and execute an arbitrary program Q filename is
- the complete pathname of the program (including the .EXE or .COM
- suffix). commandTail contains the arguments to the program.
-
- chain functions like exec except that control is not returned to
- the calling program. chain is in the file EXEC.O, in the
- distribution. It should be bound in first to save memory since it
- loads the called program immediately behind itself. For example:
-
- A>PCCL EXEC BLIP -OBLIP
-
- NOTE: To invoke a Batch file, or a DOS built-in command, use
- COMMAND.COM with the '/c' switch as follows.
-
- chain("\\command.com", "/cxxx");
-
- Where xxx is one of the DOS built-in commands ( 'dir', 'copy',
- Remember that two backslashes are required to insert a single
- backslash in a string. Invoking COMMAND.COM with no parameters
- will start another DOS shell. To return type
-
- exit
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 37
-
-
- 7.9.7. close()
-
- int handle, stat;
-
- stat = close(handle);
-
- close writes any buffered data for the file fp to that file, and
- closes the file. Returns -1 if fp is not open, or if an error
- occurred writing the buffered data to that file.
-
-
- 7.9.8. creat()
-
- int handle;
- char *name;
-
- handle = creat(name)
-
- creat creates the file name and return an int that is used to
- reference it in future file operations, or -1 if the file can't
- be opened. If the file name already exists, it is deleted before
- it is opened.
-
- NOTES: creat opens a file in update mode so that after a file is
- written, a program can seek to the begining of the file and read
- it without closing the file and reopening it.
-
- Any of the functions can open the console ("CON") or printer
- ("PRN").
-
-
- 7.9.9. dates()
-
- char *buf;
-
- dates(buf);
-
- dates formats the string buf with the current date as "mm/dd/yy".
-
-
- 7.9.10. doint()
-
- char inum;
-
- extern unsigned _rax, _rbx, _rcx, _rdx, _rsi, _rdi,
- _res, _rds;
- extern char _carryf, _zerof;
-
- _doint(inum);
-
- _rax - _rds contain the values of the corresponding 8088 internal
- registers that are loaded and saved by _doint . _carryf is the
- carry flag; _zerof is the zero flag
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 38
-
-
- _doint will cause a software interrupt and may be used to call
- whatever routines are available in the particular machine. If
- _rds is set to -1, the current value of the DS register is used.
-
- NOTE: The following example, on an IBM-PC, would use interrupt
- 10H to print the string.
-
- extern unsigned _rax, _rbx, _rds;
- extern char _carryf;
- char str[] = "Hello There!!";
- int i;
-
- for (i = 0; i < sizeof(str); i++) {
- _rax = (14 << 8) + str[i];
- _rbx = 0;
- _rds = -1;
- _doint(0x10);
- }
-
-
- 7.9.11. exec()
-
- char *filename, *commandTail, Code;
-
- Code = exec(filename, commandTail)
-
- exec will load and execute an arbitrary program. Filename is the
- complete pathname of the program (including the .EXE or .COM
- suffix). commandTail contains the arguments to the program.
- exec will return the completion code from the program or -1 if an
- error occurred loading the program. exec is in the EXEC.O file
- provided in the distribution.
-
- NOTE: Completion codes are set for programs running under MS-DOS
- 2.0 or later versions of the operating system. If a program
- exits with
-
- exit(n);
-
- the system ERRORLEVEL will be set to n. A program that returns
- from the main function other than by exit()sets ERRORLEVEL to
- zero. ERRORLEVEL can be tested with the DOS batch file IF
- command. See the section under 'BATCH' in the IBM 2.xx DOS
- manual for details on the IF command.
-
- To invoke a Batch file, or a DOS built-in command, use
- COMMAND.COM with the '/c' switch as follows.
-
- exec("\\command.com", "/cxxx");
-
- Where xxx is one of the DOS built-in commands ( 'dir', 'copy',
- Remember that two backslashes are required to insert a single
- backslash in a string. Invoking COMMAND.COM with no parameters
- will start another DOS shell. To return type
- exit
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 39
-
-
-
- PCC normally allocates a stack as large as possible. This is not
- desirable when using exec , as little memory may be left for the
- second program. The -Shhhh option of the PCCL program should be
- used to reduce the size of the stack and consequently the size of
- the program. Remember that the hhhh value of the option is in
- hex and that it must be large enough for all parameters and
- locals active at one time. An extra 0x100 (256) bytes should
- also be added for any system calls.
-
-
- 7.9.12. exit()
-
- char Code;
-
- exit(Code)
-
- exit terminates the program with completion code Code. A main()
- procedure can also exit with a completion code of zero by
- returning or by "falling" through the end of the procedure.
-
- NOTE: Completion codes are set for programs running under MS-DOS
- 2.0 or later versions of the operating system. If a program
- exits with
-
- exit(n);
-
- the system ERRORLEVEL will be set to n. A program that returns
- from the main function other than by exit()sets ERRORLEVEL to
- zero. ERRORLEVEL can be tested with the DOS batch file IF
- command. See the section under 'BATCH' in the IBM 2.xx DOS
- manual for details on the IF command.
-
-
- 7.9.13. exp()
-
- #include <math.h>
-
- double x, dval, exp(), exp10();
-
- dval = exp(x);
- dval = exp10(x);
-
- exp returns the exponential function of x; exp10 returns the
- base 10 exponent.
-
- NOTE: exp returns a very large value when the result would
- overflow; errno is set to ERANGE. ERANGE is defined in math.h.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 40
-
-
- 7.9.14. fabs()
-
- #include <math.h>
-
- double dval, x;
-
- dval = fabs(x);
-
- fabs returns |x| (absolute value).
-
-
- 7.9.15. fclose()
-
- #include <stdio.h>
- FILE *fp;
- int stat;
-
- stat = fclose(fp);
-
- fclose writes any buffered data for the file fp to that file, and
- closes the file. Returns -1 if fp is not open, or if an error
- occurred writing the buffered data to that file.
-
-
- 7.9.16. fgetc()
-
- #include <stdio.h>
- FILE *fp;
- int data;
-
- data = fgetc(fp)
-
- fgetc returns the next character from the file fp, or -1 if an
- error, or end of file was sensed.
-
- SEE ALSO: scanf(), fread()
-
-
- 7.9.17. fgets()
-
- #include <stdio.h>
- FILE *fp;
- char *cp, buf[], *fgets();
- int len;
-
- cp = fgets(buf, len, fp);
-
- fgets reads the next line, but not more than len - 1 characters
- from the file fp into buf. The last character read into buf is
- followed by a zero. fgets returns buf, or 0 on end of file or an
- error.
-
- SEE ALSO: fscanf(), fread()
-
- NOTE: fgets returns the CR character.
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 41
-
-
- 7.9.18. floor()
-
- #include <math.h>
-
- double dval, x;
-
- dval = floor(x);
-
- floor returns the largest integer value not greater than x.
-
-
- 7.9.19. fopen()
-
- #include <stdio.h>
- FILE *fp;
- char *name, *method;
-
- fp = fopen(name, method)
-
- fopen opens the file name and returns an FILE pointer that
- identifies the file in future file operations. Returns NULL
- if the file can't be opened.
-
- method is a char string having one of the following values: "r" =
- open for reading,"w" = open for writing, "a" = open for append --
- open for writing at end of file, or create for writing.
-
- NOTES: fopen for read access is the same as open for update;
- write access is the same as creat for the file; append causes a
- seek to the end of an existing file, or the creation of a new
- file as required.
-
- Any of the functions can open the console ("CON") or printer
- ("PRN").
-
-
- 7.9.20. fputc()
-
- #include <stdio.h>
- FILE *fp;
- char ch;
- int data;
-
- data = fputc(ch, fp);
-
- fputc writes ch to the file fp. fp must have been opened
- prior to the call. The functions return ch, or -1 on error.
-
- SEE ALSO: printf(), fwrite()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 42
-
-
- 7.9.21. fputs()
-
- #include <stdio.h>
- FILE *fp;
- char buf[];
- int err;
-
- err = fputs(buf, fp);
-
- fputs copies the null terminated string buf to the file fp.
- fputs returns a -1 on error.
-
- SEE ALSO: fprintf()
-
- NOTE: On output, linefeed ('\n') is converted to carriage return
- - linefeed ('\r\n').
-
-
- 7.9.22. frand()
-
- double dval;
-
- dval = frand();
-
- frand returns the next pseudo-random number in the range from
- 0.0 to 1.0.
-
-
- 7.9.23. fscanf()
-
- #include <stdio.h>
- FILE *fp;
- char fcs[];
- int num;
-
- num = fscanf(fp, fcs [, ptr ] ... );
-
- fscanf reads from the file fp.
-
- Returns the number of items successfully scanned or -1 on end of
- input or error.
-
- See scanf() for a how it works.
-
-
- 7.9.24. getc()
-
- #include <stdio.h>
- FILE *fp;
- int data;
-
- data = getc(fp)
-
- getc return the next character from the file fp, or -1 if an
- error, or end of file was sensed.
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 43
-
-
-
- NOTE: getc is a function rather than the usual macro.
-
- getchar() will hangup reading redirected input under DOS 2.X and
- higher. Use getc(stdin) if the input could be redirected.
-
- SEE ALSO: scanf(), fread()
-
-
- 7.9.25. getchar()
-
-
- int data;
-
- data = getchar();
-
- getchar returns the next character from stdin, or -1 if an
- error, end of file, or a CTRL-Z was found.
-
- NOTE: getchar is a function rather than the usual macro.
-
- getchar() will hangup reading redirected input under DOS 2.X and
- higher. Use getc(stdin) if the input could be redirected.
-
- SEE ALSO: scanf(), fread()
-
-
- 7.9.26. gets()
-
- char *cp, buf[], *gets();
- int len, size;
-
- cp = gets(buf);
- len = _gets(buf, size);
-
- gets obtains a line-edited string from the console (stdin) into
- buf. During input, <ESC> means backup and start over,
- <BACKSPACE> means delete the previous character and <RETURN>
- means end of string. <RETURN> is replaced in buf by a zero.
- gets returns its argument, or 0 on end of file or an error.
-
- _gets obtains not more than size - 1 characters from the console
- into buf. Editing proceeds as with gets. _gets returns the
- number of characters obtained, or 0 on end of file or an error.
-
- SEE ALSO: fscanf(), fread()
-
- NOTE: gets and _gets don't return the CR character
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 44
-
-
- 7.9.27. getw()
-
- #include <stdio.h>
- FILE *fp;
- int data;
-
- data = getw(fp)
-
- getw returns the next int from the file fp, or -1 if an error, or
- end of file was sensed.
-
- SEE ALSO: scanf(), fread()
-
-
- 7.9.28. in()
-
- char ch;
- unsigned port, wd;
-
- ch = _inb(port);
- wd = _inw(port);
-
- _inb and _inw read the byte ch and word wd, respectively, from
- the indicated port.
-
-
- 7.9.29. index()
-
- char *cp, *src, ch;
-
- cp = index(src, ch);
-
- index works on null-terminated strings. There is no test for
- overflow.
-
- index returns a pointer to the first occurance of ch in src,
- or 0 if ch doesn't occur.
-
-
- 7.9.30. log()
-
- #include <math.h>
-
- double x, dval, log(), log10();
-
- dval = log(x);
- dval = log10(x);
-
- log returns the natural logarithm of x; log10 returns the base
- 10 logarithm.
-
- NOTE: log and log10 return zero when x is zero or negative;
- errno is set to EDOM. EDOM is defined in math.h.
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 45
-
-
- 7.9.31. lmove()
-
- char *sp, *tp;
- unsigned num, sseg, tseg;
-
- _lmove(number, sp, sseg, tp, tseg);
-
- _lmove moves num bytes from the 8088 physical address at
- sseg:sp to tseg:tp . For example, to move the color display
- frame buffer at address 0xB800:0 to a local buffer ( _showds
- provides the C program data segment Q DS)
-
- _lmove(4000, 0, 0xB800, buffer, _showds());
-
- NOTE: _lmove takes advantage of the 8088 instructions for a
- fast data move. It handles overlapping moves correctly so that
-
- _lmove(3920, 0, 0xB800, 80, 0xB800);
-
- will move 0xB800:3919 to 0xB800:3999, 0xB800:3918 to 0xB800:3998
- etc. rather than propagating 0xB800:0.
-
-
- 7.9.32. longjmp()
-
- #include <setjmp.h>
-
- int val;
- jmp_buf env;
-
- longjmp(env, val);
-
- jmp_buf is defined in <setjmp.h> . It creates an environment
- used by setjmp for future use by longjmp . jmp_buf is defined
- as
- typedef char jmp_buf[6];
-
- longjmp restores SP, BP, and return address from env and returns
- val. val cannot be zero.
-
- NOTE: env can be specified as zero, for compatibility with
- previous releases. There can be only one "zero" env active at
- any time.
-
- If the environment stored in env points into an overlay area,
- then the overlay that called setjmp must be resident when
- longjmp is called Q if another overlay is resident, then strange
- things will happen. It is best to call setjmp from the root.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 46
-
-
- 7.9.33. open()
-
- int handle;
- char *name, mode;
-
- handle = open(name, mode)
-
- open opens the file name and returns an int that identifies the
- file in future file operations. Returns -1 if the file can't
- be opened.
-
- mode is a char having one of the following values: 0 = open for
- reading, 1 = open for writing, 2 = open for update, and 3 = open
- for reading (CTRLZ indicates EOF).
-
- NOTES: Any of the functions can open the console ("CON") or
- printer ("PRN").
-
-
- 7.9.34. os()
-
- char inum, ival;
- unsigned arg;
-
- ival = _os(inum, arg);
- _doint(inum);
- dates(buf);
- times(buf);
-
- _os provides an elementary interrupt interface. Under DOS, inum
- goes into AH and arg into DX, and an int 21H, is executed. The
- value in AL is returned.
-
-
- 7.9.35. out()
-
- char ch;
- unsigned port, wd;
-
- _outb(ch, port);
- _outw(wd, port);
-
- _outb and _outw write the byte ch and word wd, respectively, of
- data out to the indicated port.
-
- 7.9.36. peek()
-
- char ch, *sp;
- unsigned sseg;
-
-
- ch = _peek(sp, sseg);
-
- _peek is used to retrieve a byte ch from the 8088 physical
- address at sseg:sp .
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 47
-
-
- 7.9.37. poke()
-
- char ch, *tp;
- unsigned tseg;
-
- _poke(ch, tp, tseg);
-
- _poke is used to store the byte ch of data to the 8088 physical
- address at tseg:tp .
-
-
- 7.9.38. pow()
-
- #include <math.h>
-
- double x, y, dval, pow();
-
- dval = pow(x, y);
-
- pow returns x ** y.
-
- NOTE: pow returns a very large value when the result would
- overflow; errno is set to ERANGE. pow returns zero and sets
- errno to EDOM when the second argument is negative and not
- integral, or when both arguments are zero. EDOM and ERANGE are
- defined in math.h.
-
-
-
- 7.9.39. putc()
-
- #include <stdio.h>
- FILE *fp;
- char ch;
- int data;
-
- data = putc(ch, fp);
-
- putc writes ch to the file fp . fp must have been opened prior
- to the call. The functions return ch, or -1 on error.
-
- SEE ALSO: printf(), fwrite()
-
-
- 7.9.40. putchar()
-
- #include <stdio.h>
- FILE *fp;
- char ch;
- int data;
-
- data = putchar(ch);
-
- putchar writes ch to stdout . Linefeed ('\n') is converted to
- carriage return - linefeed ('\r\n'). Output will stop if CTRL-S
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 48
-
-
- is entered, and resume when any other key is pressed. Each
- output will check for a CTRL-C entry, and terminate the program
- if it was pressed. putchar returns ch , or -1 on error.
-
- SEE ALSO: printf(), fwrite()
-
- NOTE: putchar is a function rather than the usual macro.
-
-
- 7.9.41. puts()
-
- char buf[];
- int err;
-
- err = puts(buf);
-
- puts copies the null terminated string buf to the console
- (stdout). puts returns a -1 on error.
-
- SEE ALSO: printf()
-
- NOTE: puts doesn't append a newline.
-
- On output, linefeed ('\n') is converted to carriage return -
- linefeed ('\r\n'). Output will stop if CTRL-S is entered, and
- resume when any other key is pressed. Each output will check for
- a CTRL-C entry, and terminate the program if it was pressed.
-
-
- 7.9.42. putw()
-
- #include <stdio.h>
- FILE *fp;
- int data, w;
-
- data = putw(w, fp);
-
- putw writes the int w to the file fp . fp must have been
- opened prior to the call. putw returns w, or -1 on error.
-
- SEE ALSO: printf(), fwrite()
-
- There is no way to distinguish the return from putw(-1, fp) from
- an error.
-
-
- 7.9.43. qsort()
- char array[];
- int num, width, (*compare)();
-
- qsort(array, num, width, compare);
-
- qsort is an implementation of C. A. R. Hoare's quicker-sort
- algorithm. It sorts an array of num elements, each width bytes
- wide. compare is called with two arguments -- pointers to the
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 49
-
-
- two elements being compared, and returns an integer less than,
- equal to, or greater than zero accordingly as the first argument
- is less than, equal to, or greater than the second argument.
-
- NOTE: The usual function for compare is strcmp(). If you are
- sorting anything other than strings, the following may serve as a
- model:
-
- int compare(left, right)
- int *left, *right; {
- return *left - *right;
- }
-
- #define TCARD 1024
- #define ISIZE sizeof(int)
-
- int itab[TCARD];
-
- qsort(itab, TCARD, ISIZE, compare);
-
- Remember that int, long, float, and double values are stored with
- their low-order bytes first. Thus string comparisons may not
- produce the expected results.
-
-
- 7.9.44. rand()
-
- int ival;
-
- ival = rand();
-
- rand returns the next pseudo-random number in the range from 0
- to 2**15 - 1.
-
-
- 7.9.45. rename()
-
- char *oldFile, *newFile;
- int stat;
-
- stat = rename(oldFile, newFile);
-
- rename changes the file name oldFile to newFile. Under DOS 2.X
- and higher, oldFile may contain a path specification. Returns -1
- if oldFile is open, or if an error is detected.
-
-
- 7.9.46. rindex()
-
- char *cp, *src, ch;
-
- cp = index(src, ch);
-
- rindex works on null-terminated strings. There is no test for
- overflow.
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 50
-
-
-
- rindex returns a pointer to the last occurance of ch in src or 0
- if ch doesn't occur.
-
-
- 7.9.47. scanf()
-
- char fcs[];
- int num;
-
- num = scanf(fcs [, ptr ] ... );
-
-
- scanf reads from stdin.
-
- Returns the number of items successfully scanned.
-
- The format control string, fcs, contains: blanks or tabs, which
- match optional whitespace (blanks, tabs, newlines, formfeeds, and
- vertical tabs) in the input; a non-'%' character which must
- match the next character in the input, and conversion control
- strings which describe the type and format of each *ptr.
- Conversion control strings have the following format ([] enclose
- optional entries):
-
- %[*][width][parms]code
-
- where: * indicates that the field should be skipped and not
- assigned to a *ptr , width specifies the maximum field size in
- bytes. Both parms and code are described below. The examples
- have the following form:
-
- | input string | . function call . result
-
- Character: %[*][width]c
- String: %[*][width]s
-
- width specifies the number of characters to be read into the
- array at *ptr . The default is 1. 'c' whitespace is not
- skipped, 's' whitespace is.
-
- | abc| . scanf("%3c", buf) . | a|
- | abc| . scanf("%3s", buf) . |abc|
-
- Integer: %[*][width][size]code
-
- size equal to 'l' (lowercase 'L') specifies that *ptr point to
- a long, a 'h' specifies a short int .
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 51
-
-
- code is one of: 'd' Q signed decimal format, 'u' Q unsigned
- decimal format, 'o' Q unsigned octal, and 'x' Q unsigned
- hexadecimal.
-
- | FF | . scanf("%x", &hex) . 255
- | 377 | . scanf("%o", &oct) . 255
- | 255 | . scanf("%u", &uns) . 255
- |-255 | . scanf("%ld", &lng) . -255L
-
- Floating Point: %[*][width][size]code
-
- size equal to 'l' (lowercase 'L') specifies that *ptr points to
- a double rather than a float.
-
- code can be either 'e', 'f', or 'g' Q they all indicate floating
- point.
-
- | 123.45 | . scanf("%f", %flt) . 123.45
- | 123.45 | . scanf("%4lf%d", &d, &i) . 123.0 45
-
-
- Scanset: %[*][width]scanset
-
- scanset is specified by a sequence of characters enclosed by
- brackets '[' ']'. It reads a string, including the terminating
- null character. Leading whitespace is not skipped.
-
- |123 ABC| . scanf("%[123 ]", str) . |123 |
-
- A range of contiguous characters can be specified by the first
- and last element of the range, separated by a '-'.
-
- |123 ABC| . scanf("%[1-3 ]", str) . |123 |
-
- If the first element of scanset is a '^', then all characters
- except those specified will be read.
-
- |123 ABC| . scanf("%[^A-C]", str) . |123 |
-
- To specify '-' or ']' in a scanset , specify it as the first
- element. Thus to read an integer, skip any interviening garbage,
- and read another integer
-
- scanf("%d%*[^-+0-9]%d", &dig1, &dig2);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 52
-
-
- 7.9.48. scr_aputs()
-
- char *str, attr;
-
- scr_aputs(str, attr);
-
- scr_aputs writes string str to the display with attribute attr.
- '\r' moves to the begining of the line, and '\n' moves to the
- next line. Moving off the bottom line causes scrolling.
-
- NOTE: scr_aputs is in the file PCIO.A.
-
-
- 7.9.49. scr_ci()
-
- char ch;
-
- ch = scr_ci();
-
- scr_ci is like ci() but uses its own translation table for
- command characters. It returns the next character from the input
- queue.
-
- NOTE: scr_ci is in the file PCIO.A.
-
-
- 7.9.50. scr_co()
-
- char ch;
-
- scr_co(ch);
- scr_co is the same as co() -- it writes a single character out to
- the screen.
-
- NOTE: scr_co is in the file PCIO.A.
-
-
- 7.9.51. scr_clr()
-
- scr_clr();
-
- scr_clr erases the entire screen and sets the cursor to the home,
- (0,0) location.
-
- NOTE: scr_clr is in the file PCIO.A.
-
-
- 7.9.52. scr_clrl()
-
- scr_clrl();
-
- scr_clrl erases everything from the cursor location to the end of
- the line.
-
- NOTE: scr_clrl is in the file PCIO.A.
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 53
-
-
- 7.9.53. scr_cls()
-
- scr_cls();
-
- scr_cls erases everything from the cursor location to the end of
- the screen.
-
- NOTE: scr_cls is in the file PCIO.A.
-
-
- 7.9.54. scr_csts()
-
- char ch;
-
- ch = scr_csts();
-
- scr_csts returns the next character from the queue, or 0 if no
- character is available. If a character is present, it is
- equivalent to a csts() followed by a ci().
-
- NOTE: scr_csts is in the file PCIO.A.
-
- Function keys return a zero.
-
-
- 7.9.55. scr_cursoff()
-
- scr_cursoff();
-
- scr_cursoff turns the cursor off.
-
- NOTE: scr_cursoff is in the file PCIO.A.
-
-
- 7.9.56. scr_curson()
-
- scr_curson();
-
- scr_curson turns the cursor on.
-
- NOTE: scr_curson is in the file PCIO.A.
-
-
- 7.9.57. scr_rowcol()
-
- int trow, tcol;
-
- scr_rowcol(trow, tcol);
-
- scr_rowcol moves the cursor to row trow and column tcol.
-
- NOTE: scr_rowcol is in the file PCIO.A.
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 54
-
-
- 7.9.58. scr_scdn()
-
- scr_scdn();
-
- scr_scdn scrolls the screen down one line, but leaves the top two
- lines alone.
-
- NOTE: scr_scdn is in the file PCIO.A.
-
-
- 7.9.59. scr_scrdn()
-
- int lines, frow, fcol, trow, tcol;
-
- scr_scrdn(lines, frow, fcol, trow, tcol);
-
- scr_scrdn scrolls the given area down lines. The area is defined
- by the character locations (frow, fcol), (trow, tcol).
-
- NOTE: scr_scrdn is in the file PCIO.A.
-
-
- 7.9.60. scr_scrup()
-
- int lines, frow, fcol, trow, tcol;
-
- scr_scrup(lines, frow, fcol, trow, tcol);
-
- scr_scrup scrolls the area up lines. The area is defined by the
- character locations (frow, fcol), (trow, tcol).
-
- NOTE: scr_scup is in the file PCIO.A.
-
-
- 7.9.61. scr_scup()
-
- scr_scup();
-
- scr_scup scrolls the screen up one line, but leaves the top two
- lines alone.
-
- NOTE: scr_scup is in the file PCIO.A.
-
-
- 7.9.62. scr_setmode()
-
- char newMode;
-
- scr_setmode(newMode);
-
- scr_setmode sets the mode of the color card. newMode must be
- between 0 and 6.
-
- NOTE: scr_setmode is in the file PCIO.A.
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 55
-
-
- scr_setmode manages the following global data.
-
- char scr_cols; /* number of character positions */
- char scr_rows; /* number of lines */
- char scr_mode; /* current screen mode:
- 0 = 40 col. BW
- 1 = 40 col. color
- 2 = 80 col. BW
- 3 = 80 col. color
- 4 = 320 x 200 color graphics
- 5 = 320 x 200 BW graphics
- 6 = 640 x 200 BW graphics
- 7 = 80 col. BW */
- char scr_page; /* current active display page */
- char scr_attr; /* current character attribute.
- Normally 7 for white on black but
- can be set for any attributes
- see Technical Reference Manual */
-
-
- 7.9.63. scr_setup()
-
- scr_setup();
-
- scr_setup must be called prior to any of the screen routines if
- the screen is currently in 80 column mode or if scr_curson with a
- monochrome display is used.
-
- NOTE: scr_setup is in the file PCIO.A.
-
- scr_setup manages the same data as scr_setmode.
-
-
- 7.9.64. scr_sinp()
-
- char ch;
-
- ch = scr_sinp();
-
- scr_sinp returns the character under the cursor on the screen.
-
- NOTE: scr_sinp is in the file PCIO.A.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 56
-
-
- 7.9.65. setjmp()
-
- #include <setjmp.h>
-
- int val;
- jmp_buf env;
-
- val = setjmp(env);
-
- jmp_buf is defined in <setjmp.h> . It creates an environment
- used by setjmp for future use by longjmp . jmp_buf is defined
- as
- typedef char jmp_buf[6];
-
- setjmp saves the current SP, BP, and return address in env. It
- returns a zero.
-
- NOTE: env can be specified as zero, for compatibility with
- previous releases. There can be only one "zero" env active at
- any time.
-
- If the environment stored in env points into an overlay area,
- then the overlay that called setjmp must be resident when
- longjmp is called -- if another overlay is resident, then
- strange things will happen. It is best to call setjmp from the
- root.
-
- setjmp's caller can tell by the returned value if control was
- returned from setjmp(0), or from longjmp(!=0).
-
-
- 7.9.66. sqrt()
-
- #include <math.h>
-
- double x, dval, sqrt();
-
- dval = sqrt(x);
-
- sqrt returns the square root of x.
-
- NOTE: sqrt returns zero when x is negative; errno is set to EDOM.
- EDOM is defined in math.h.
-
-
-
- 7.9.67. srand()
-
- int seed;
-
- srand(seed);
-
- srand sets the seed for the multiplicative congruential random
- number generator to seed .
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 57
-
-
- NOTE: The initial seed for the generator is a long. srand only
- sets the low order word, so the initial generator cannot be
- restarted. Solution: seed the generator with your own integer
- before any calls to rand or frand .
-
-
- 7.9.68. sscanf()
-
- char fcs[], buf[];
-
- num = sscanf(buf, fcs [, ptr ] ... );
-
- sscanf reads from the string buf.
-
- Returns the number of items successfully scanned.
-
- See scanf() for a how it works.
-
-
- 7.9.69. strcat()
-
- char *cp, *src, *dst;
-
- cp = strcat(dst, src);
-
- strcat works on null-terminated strings. There is no test for
- overflow.
-
- strcat appends a copy of src to the end of dst.
-
- Returns dst .
-
-
- 7.9.70. strcmp()
-
- char *s1, *s2;
- int cmp;
-
- cmp = strcmp(s1, s2);
-
- strcmp works on null-terminated strings. There is no test for
- overflow.
-
- strcmp compares the two strings and returns +1, 0, or -1
- accordingly as s1 is lexically greater than, equal to, or less
- than s2.
-
- 7.9.71. strcpy()
-
- char *cp, *src, *dst;
-
- cp = strcpy(dst, src);
-
- strcpy works on null-terminated strings. There is no test for
- overflow.
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 58
-
-
- strcpy copies src to dst , stopping after the null byte has been
- transfered.
-
- Returns dst .
-
-
- 7.9.72. strlen()
-
- char *src;
- unsigned len;
-
- len = strlen(src);
-
- strlen works on null-terminated strings. There is no test for
- overflow.
-
- strlen returns the number of non-null characters in src.
-
-
- 7.9.73. strncat()
-
- char *cp, *src, *dst;
- unsigned max;
-
- cp = strncat(dst, src, max);
-
- strncat works on null-terminated strings. There is no test for
- overflow.
-
- strncat appends, at most, max bytes of src to the end of dst.
-
- Returns dst .
-
-
- 7.9.74. strncmp()
-
- char *s1, *s2;
- int cmp;
- unsigned max;
-
- cmp = strncmp(s1, s2, max);
-
- strncmp works on null-terminated strings. There is no test for
- overflow.
-
- strncmp compares, at most, max bytes of the two strings and
- returns +1, 0, or -1 accordingly as s1 is lexically greater than,
- equal to, or less than s2.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The PCCS.S Standard Library Page 59
-
-
- 7.9.75. strncpy()
-
- char *cp, *src, *dst;
- unsigned len;
-
- cp = strncpy(dst, src, len);
-
- strncpy works on null-terminated strings. There is no test for
- overflow.
-
- strncpy copies exactly len bytes, from src to dst truncating or
- null-padding as required; dst may not be null-terminated if the
- strlen(src) >= len.
-
- Returns dst .
-
-
- 7.9.76. times()
-
- char *buf;
-
- times(buf);
-
- times formats the string buf with the current time as "hh-mm-ss"
-
-
- 7.9.77. ungetc()
-
- #include <stdio.h>
- FILE *fp;
- char ch;
- int data;
-
- data = ungetc(ch, fp)
-
- ungetc pushes the character ch back onto the file fp. The next
- call to getc or fgetc will return ch. ungetc returns ch, or -1
- if it can't push the character back. fseek clears all pushed
- characters. EOF (-1) can't be pushed.
-
-
- 7.9.78. unlink()
-
- char *oldFile;
- int stat;
-
- stat = unlink(oldFile);
-
- unlink deletes the file oldFile. Under DOS 2.X and higher,
- oldFile may contain a path specification. Returns -1 if oldFile
- doesn't exist, is open, or if an error is detected.
-
-
-
-
-
-
-
-
-
-
-
-
- Messages Page 60
-
-
- A. Messages
-
- A.1. PCC Compiler Messages
-
- A.1.1. Banner and Termination Messages
-
- >PCC V2.1c Copyright Mark DeSmet 1989
- end of PCC 001A code 0012 data 1% utilization
-
- OR
-
- >PCC V2.1c Copyright Mark DeSmet 1989
- (various error messages)
-
- Number of Warnings = 2 Number of Errors = 5
-
- The first form of termination means the compile was successful.
- The 'code' number is in hex and tells how many bytes of code were
- produced. The 'data' number is similar and tells how many bytes
- of data were produced. The utilization percentage is the worst
- case of a number of compiler limits. If it nears 100% it usually
- means that the largest procedure should be broken into smaller
- procedures.
-
- The second form means the compile failed. Error messages are
- explained in the following section. If any errors were detected,
- the compiler will stop trying to generate code and will stop as
- soon as all the source has been read. This 'syntax check' mode
- is fast and allows the programmer to correct the program with a
- minimum of delay. If only warnings were detected, but no errors,
- compilation will end normally and produce a .O file.
-
-
- A.1.2. Messages
-
- PCC produces four categories of messages: fatal errors, errors,
- warnings and errors detected by the assembler. Fatal errors are
- usually caused by I/O errors but compiler errors are also in this
- category. When a fatal error is detected, the compiler will
- print a message and quit. Errors are caused by syntax errors.
- PCC reports all such errors and then quits. Warnings are
- produced by correctable errors and the compiler continues. Since
- the compiler uses PCCA as pass 3, assembler detected errors are
- possible but rare. When they occur, the object module will not
- be usable.
-
- It is easy to tell the category of an error. After a fatal
- error, the compiler stops without printing a termination message.
- Errors and warnings have a distinctive format which includes the
- word 'error' or 'warning'. Assembler errors print the assembler
- line that was found offensive.
-
-
- A.1.2.1. PCC Fatal Errors
-
-
-
-
-
-
-
-
-
- Messages Page 61
-
-
- The pass 2 fatal errors like 'bad expression' are compiler
- errors, but the error is usually in not detecting the problem in
- pass 1 and printing a reasonable message. If you get one of
- these errors, please send your program to C Ware, but you can
- probably find and eliminate the statement that caused the
- problem. Don't be frightened by seeing these errors listed; you
- will probably never see any of them.
-
- bad expression - this indicates a compiler error. Printed by
- pass 2.
-
-
- bad GOTO target - attempt to goto something other than a label.
-
- break/case/continue/default not in switch - a case or default
- statement must be within a switch. A break
- statement must be in a while or do..while or for
- or switch. A continue statement must be in a
- while or do..while or for statement.
-
- cannot address - illegal use of '&' operator. Printed in pass
- 2.
-
- cannot close <file> - the file could not be closed. An I/O
- error occurred.
-
- cannot create <file> - the named file could not be created. The
- name is a temporary name or the name of the
- object or assembler file. This message usually
- means the drive is full (see 'T' option).
-
- cannot open <file> - the named source or include file could not
- be found.
-
- cannot read <file> - the named file could not be read. Usually
- means an I/O error was detected.
-
- cannot unlink <file> - the temporary could not be deleted. An
- I/O error occurred.
-
- cannot write <file> - the named file could not be written. An I/O
- error was detected. Usually means the disk drive
- is out of space.
-
- error in register allocation - compiler error in pass 2.
-
- divide by zero - a constant expression evaluated to a divide by
- zero. Should never happen.
-
- function too big - a function is too big for the compiler. The
- 'Utilization' number reflects this limit so there
- is normally plenty of warning. The solution is
- to break large procedures into smaller ones.
-
- illegal initialization for <name> - only constant expressions and
-
-
-
-
-
-
-
-
- Messages Page 62
-
-
- addresses plus or minus constant expressions can
- be used in initialization and the initialization
- must make sense. For example
-
- int a=b+2;
-
- this error is fatal because it is not discovered
- until pass 2.
-
- no cases - a switch must have at least one case.
-
- no input file - PCC must be followed by the name of the source
- file when invoked.
-
- out of memory - the compiler ran out of symbol space. The
- 'utilization' numbers warn when a program is
- about to exceed this or any other compiler limit.
- The compiler can use up to 100K, so adding memory
- may be a solution. If not, the only remedy is
- the painful surgery required to reduce the total
- number of externals and locals defined at one
- time.
-
- pushed - compiler error in pass 2 code generation. It
- can be eliminated by simplifying the expression.
-
- too many cases - currently, a switch statement can only contain
- 128 case statements.
-
-
- too many fors/too many whiles - whiles, do-whiles, switches and
- for statements can only be nested 10 deep.
-
- stuck <register> - same as 'pushed'.
-
- too many externals - the compiler currently has a limit of 500
- static's or extern's.
-
-
- A.1.2.2. PCC Errors
-
- Errors are printed with the following format:
-
- 23 if (i < 99 $$ {
- error:Need ()
-
- Or, if the error was detected in an include file:
-
- 23 if (i < 99 $$ {
- file:<include file> error:Need ()
-
- The number preceding the source line is the line number. To find
- the line , edit the file and issue the command 'nnnJ' where nnn
- is the number of the reported line.
-
-
-
-
-
-
-
-
-
- Messages Page 63
-
-
- The '$$' shows how far into the line the compiler was before the
- error was detected. For example, the '$$' will print immediately
- BEFORE an undefined variable.
-
- If you get a lot of errors on a compile, don't panic. A trivial
- error probably caused the compiler to become confused. Correct
- the first few errors and re-compile.
-
- bad control - the # control is illegal.
-
- bad declaration - the declaration of a variable was illegal.
-
- bad include - the #include must be followed by "name" or
- <name>.
-
-
- bad label - a colon is not preceded by a label name.
-
- bad member declare - the declaration of a member is illegal.
-
- bad member storage - an attempt was made to declare a member
- static or external. Members have the storage
- type of their struct or union.
-
- bad parameter declare - an illegal declaration of an argument or
- the name of the argument was spelled differently
- in the procedure heading and in the declaration.
-
- bad statement - illegal statement.
-
- defines too deep - #define may reference another, but there is a
- limit. When #defines are expanded, the number of
- active #defines plus the number of #define
- arguments referenced by each cannot exceed 30.
-
- duplicate argument - an attempt was made to declare an argument
- twice.
-
- duplicate label - two labels have the same name.
-
- EOF within comment - end of file was found inside a comment. A
- '*/' is missing.
-
- field needs constant - the size of a bit field must be a constant
- expression with a value of 1 to 16.
-
- illegal address - attempt to use the '&' (take address of)
- operator on something that is not a lvalue.
- '&44' will generate this error. An address can
- only be taken of a variable, procedure, string or
- label.
-
-
- illegal define - a #define has unmatched parenthesis or the
- #define parameters are illegally specified.
-
-
-
-
-
-
-
-
- Messages Page 64
-
-
-
- illegal external declaration - caused both by an illegal data or
- procedure declaration and improperly nested
- braces. If the line is supposed to be part of a
- procedure (e.g. i=0;), the latter is the case.
- Check that every '{' outside of a comment or
- quoted string has a matching '}'. Note: a prior
- error may have caused the compiler to lose track
- of a '{'.
-
- illegal indirection - caused by trying to use a char, int,
- unsigned, float or double as a pointer. longs
- can be used as pointers but the other types
- cannot.
-
- include nesting too deep - includes can only be nested three deep
-
- illegal use of float - floating point numbers cannot be used as
- pointers.
-
- line must be constant - a #line control must be followed by a
- decimal constant.
-
- line too long - the maximum line length is 128.
-
- missing ";", "(", ")", "[", "]", "{", "}", ":", "|" - the
- indicated "" character is needed at this point. A
- multitude of errors can cause these messages.
- The error might be fixed by sticking in the
- indicated character where the '$$' prints, but
- the item following the '$$' could be illegal.
-
- missing ' - a character constant (e.g. 'A','TEXT') can only
- contain one to four characters.
-
- missing argument - the argument list of a call had two adjacent
- commas.
-
- missing arguments - a #define was defined with arguments but used
- without arguments.
-
- missing dimension - an array dimension was missing in an
- expression or statement. Either int x[][]; or
- x[]=1;.
-
- missing end of #asm - an #asm block was not ended with a #.
-
- missing expression - an expression is needed here. An example of
- a missing expression is i=;.
-
- missing operand - an operator without an operand was found. An
- example of a missing operand is ++;
-
- missing while - a 'do ... while' is missing the ending 'while'.
-
-
-
-
-
-
-
-
-
- Messages Page 65
-
-
- must return float - a float or double function must end with a
- return statement that returns a value.
-
- Note: The compiler is too stupid to accept.
-
- double x(){if (1) return 1.;}.
-
- need () - the expression following an 'if' or 'switch' or
- 'while' was not surrounded by parenthesis.
-
- need '{' for STRUCT initialization - the initial values used to
- initialize a structure must be surrounded by
- braces.
-
- need constant - a 'case' prefix must be followed by an integer
- constant expression.
-
- need constant after #if - a #if control must be followed by a
- constant expression.
-
- need label - a goto must reference a label.
-
- need lval - a lvalue is needed here. An lvalue is, roughly,
- something that can be changed with an assignment.
- The statement: 2=4; will produce this error.
-
- need member - the '.' or '->' operators were followed by
- something other than a member name.
-
- need structure - the name prior to a '.' operator is not the
- name of a struct or union.
-
- not an identifier - #ifdef, #ifndef and #undef controls must
- reference a #define value;.
-
- not defined - #undef controls must reference a #define
- value;.
-
- only STATIC and EXTERN allowed at this level - an attempt was
- made to declare an 'auto' outside of a procedure.
-
- parameters cannot span lines - the arguments to a #define must
- all be on the same line.
-
- return lacks argument - if a function is declared as returning a
- value then "return;" is illegal. Use "return 0;"
- if the value is unimportant.
-
- sorry, must have dimension for locals - the compiler does not
- accept char a[]={1,2,3}; and similar for auto
- variables. Declare the variable static or
- include an explicit dimension.
-
- sorry, no string initialization of AUTO - the compiler cannot
- accept char a[]="abc"; and similar for auto
-
-
-
-
-
-
-
-
- Messages Page 66
-
-
- variables. Declare the variable static if
- possible, otherwise use _move.
-
- string too long - a string cannot exceed 200 characters. Usually
- means that a '"' is missing.
-
- undefined structure - a pointer to an undefined structure cannot
- be added to.
-
- unknown control - the word following a '#' is not a control word.
- '#while' would cause this error.
-
- unmatched " - either the end of line or end of file was found
- in a string. Usually means that a " is missing.
- if your string is too long for one line, continue
- with a \ (backslash) at the end of a line and
- continue in column one of the next. If you want
- a new line in a string, use \n.
-
- wrong number of arguments - a #define was used with the wrong
- number of arguments.
-
-
- A.1.2.3. PCC Warnings
-
- There are currently only two warnings. Warnings indicate
- suspicious code that is probably OK.
-
- conflicting types - an external or static was declared twice with
- different types. Usually caused by an include
- file declaring a variable incorrectly or by a
- program such as:
-
- main() {
- char ch;
-
- ch=zipit();
- }
-
- char zipit(ch)
- char ch; {
-
- return ch;
- }
-
- the call of zipit implicitly declares it to be a
- function returning an integer. The line 'char
- zipit(ch)' would be flagged as an error. The fix
- is to include:
-
- char zipit();
-
- above the call so the function is declared
- correctly before use.
-
-
-
-
-
-
-
-
-
- Messages Page 67
-
-
- undefined variable - the variable has not been defined. It is
- assumed to be an auto int.
-
-
-
- A.1.2.4. PCCA Errors ( from PCC Execution )
-
- In theory, any PCCA error message can be produced by a PCC
- compile gone bonkers but I have only seen the 'cannot write
- <name>' errors caused by lack of disk space.
-
-
-
-
- A.2. PCCA Assembler Messages
-
- A.2.1. Banner and Termination Messages
-
- >PCCA 8088 Assembler V1.3 (c) Mark DeSmet, 1982,83,84,85
-
- (various error messages)
-
- end of PCCA 0016 code 0000 data 1% utilization
-
- The 'code' number is in hex and tells how many bytes of code were
- produced. The 'data' number is similar and tells how many bytes
- of data were produced. The utilization percentage shows how full
- the symbol table was.
-
- Sample of list output:
-
- PCCA Assembler BLIP.A
- 1 ;TOUPPER.A convert a charcter to upper case
- 2
- 3 CSEG
- 4 PUBLIC TOUPPER
- 5
- 6 ; character = toupper(character)
- 7
- 0000 5A 8 TOUPPER:POP DX ;RETURN ADDRESS
- 0001 58 9 POP AX ;CHARACTER
- 0002 3C61 10 CMP AL,'a' ;IF LOWER THAN 'a'
- 11 JC TO_DONE ;DO NOTHING
- 0004 3C7B 12 CMP AL,'z' ;OR IF ABOVE 'z'
- 13 JNC TO_DONE ;DO NOTHING
- 0006 2C20 14 SUB AL,'a'-'A' ;ELSE ADJUST
- 0008 B400 15 TO_DONE:MOV AH,0 ;RETURN AN INT
- 000A FFE2 16 JMP DX ;RETURN
-
-
-
- A.2.2. Messages Produced by PCCA
-
- PCCA prints two categories of messages: fatal errors and errors.
- As with PCC, the fatal errors are caused by I/O errors or
-
-
-
-
-
-
-
-
- Messages Page 68
-
-
- similar. Errors are simply syntax errors in using the language.
- When a fatal error is detected, PCCA prints a message and stops.
- An error does not stop the assembler, but it stops writing the
- object module to run faster. If errors are detected, the object
- module is never good.
-
-
- A.2.2.1. Fatal Errors From PCCA
-
- cannot close <file> - the file could not be closed. An I/O error
- occurred.
-
- cannot create <file> - the named file could not be created. The
- name is a temporary name or the name of the
- object or list file. This message usually means
- the drive is full (see 'T' option).
-
- cannot open <file> - the named source or include file could not
- be found.
-
- cannot read <file> - the named file could not be read. Usually
- means an I/O error was detected.
-
- cannot unlink <file> - the temporary file could not be deleted.
- An I/O error occurred.
-
- cannot write <file> - the named file could not be written. An I/O
- error was detected. Usually means the disk drive
- is out of space.
-
- internal error in jump optimization - the assembler became
- confused optimizing branches.
-
- no input file - no filename followed the PCCA when invoked.
-
- too many labels - only 1000 names and labels are allowed.
-
- too many symbols - the assembler ran out of symbol space. The
- source program should be broken into smaller
- modules.
-
-
-
- A.2.2.2. Errors from PCCA
-
- Error messages have the form:
-
- 44 mov #44,a3
- error: illegal mnemonic
-
- or, if the error was found in an include file:
-
- 44 mov #44,a3
- file:2:SCREEN.A error: illegal mnemonic
-
-
-
-
-
-
-
-
-
- Messages Page 69
-
-
- The messages are:
-
-
- address must be in DSEG - address constants can only be in DSEG,
- because constants in CSEG are not fixed up at run
- time.
-
- bad DS value - a constant expression must follow the DS.
-
- bad include - the correct form for an include statement is:
-
- include "filename"
-
- bad LINE value - the line statement should be followed by a
- constant.
-
- cannot label PUBLIC - a 'public' statement cannot have a label.
-
- data offset must be an unsigned - an attempt was made to use an
- offset in a byte or long constant.
-
- DS must have label - storage cannot be reserved without a name.
-
- DS must be in DSEG - storage can only be reserved in DSEG.
-
- duplicate label - the label on the line was defined previously.
-
- equate too deep - an 'equ' may reference a prior one, but only to
- a depth of four.
-
- illegal expression - the expression had an illegal operator or is
- somehow invalid.
-
- illegal operand - an operand had a type that was not legal in
- that context.
-
- illegal reserved word - a reserved word was found in the wrong
- context.
-
- illegal ST value - the index to a floating point stack element
- must be in the range 0 to 7.
-
- incorrect type - only 'byte', 'word', 'dword', and 'tbyte', are
- allowed following the colon to type a public.
-
- impossible arithmetic - an arithmetic operation has operands
- incompatible with the 8086 architecture.
-
- example:
-
- add word [bx], word[si]
-
- in wrong segment - a variable or label is being defined in a
- segment different than the segment of the
- 'public' statement. Remember that 'public'
-
-
-
-
-
-
-
-
- Messages Page 70
-
-
- statements must be in the correct segment,
- following 'dseg' or 'cseg' as appropriate.
-
- invalid BYTE constant - a byte constant was needed, but something
- else was found.
-
- invalid constant - the instruction needed a constant and
- something else was found.
-
- invalid DD constant - the value of a 'DD' must be a constant
- expression.
-
- invalid DW constant - the value of a 'DW' must be a constant
- expression or a variable name. In the latter
- case, offset is assumed. The statement:
-
- dw offset zip
-
- is illegal since offset is already implied. Just
- use:
-
- dw zip
-
- invalid offset - an offset of the expression cannot be taken.
-
- line too long - the maximum input line to PCCA is 110
- characters.
-
- mismatched types - the types of the two operands must agree.
-
- example:
-
- db chr
- add ax,bl ;illegal
- add chr,ax ;illegal
- add word chr,ax ;legal
-
-
- misplaced reserved word - a reserved word was found in an
- expression.
-
- missing : - the '?' operator was missing the colon part.
-
- missing ) - mismatched parenthesis.
-
- missing ] - mismatched braces in an address expression.
-
- missing ':' - labels to instructions must be followed by a
- colon. This message also prints when a mnemonic
- is misspelled. The assembler thinks that the bad
- mnemonic is a label without a colon.
-
- missing EQU name - an equate statement lacks a name.
-
- missing type - the memory reference needs a type. In the case
-
-
-
-
-
-
-
-
- Messages Page 71
-
-
- of 'public's defined elsewhere, the type can be
- supplied by ':byte' or ':word' on the public
- statement. In the case of anonymous references,
- the 'byte' or 'word' keyword must be used.
-
- example:
-
- public a:byte
- inc a ; illegal
- inc byte a ; legal
- inc es:[bx] ; illegal
- inc es:word[bx] ; legal
-
- need constant - something other than a constant expression
- followed a 'ret'.
-
- need label - a jump relative was made to something other
- than a label. 'jmp's may be indirect but 'jz's
- etc. can only jump to a label.
-
- nested include - an included file may not include another.
-
- not a label - only names can be public.
-
- RB must have label - a 'RB' statement must have a label.
-
- RB must be in DS - 'RB's must follow a DSEG directive as they can
- only be in the data segment. 'DB's can be in the
- code segment.
-
- RW must be in DS - as above.
-
- too many arguments - the instruction had more operands than
- allowed or the last operand contains an illegal
- op-code.
-
- undefined variable <name> - the name is referred to but not
- defined or listed as public.
-
- unknown mnemonic - the mnemonic is illegal.
-
-
-
- A.3. PCCL Messages
-
-
- A.3.1. Banner and Termination Messages
-
- PCCL Linker PCC and PCCA V1.2b Copyright Mark DeSmet 1988
- end of PCCL 9% utilization
-
-
- A.3.2. Warnings from PCCL
-
- undefined PUBLIC - <name> - the name is referenced, but not
-
-
-
-
-
-
-
-
- Messages Page 72
-
-
- defined in any module. PCCL will complete and
- the resulting .EXE module may execute as long as
- the undefined PUBLICs are not referenced. If
- they are referenced, then the result is
- undefined.
-
-
- A.3.3. Fatal Errors from PCCL
-
- PCCL prints the message, prints 'PCCL abandoned' and quits.
-
- bad argument - an argument is illegal.
-
- bad object file<name> - the object or library file contains an
- illegal record.
-
- bad stack option - the 'S' option should be followed by one to
- four hex digits.
-
- cannot close <file> - I/O error occurred.
-
- cannot create <file> - I/O error or disk out of room. On MS-DOS
- 2.0 and later, make sure that the CONFIG.SYS file
- contains a FILES=20 command.
-
- cannot open <file> - the object file could not be found. On MS-
- DOS 2.0 and later, make sure that the CONFIG.SYS
- file contains a FILES=20 command.
-
- cannot read <file> - I/O error occurred.
-
- cannot seek <file> - I/O error occurred.
-
- cannot write <file> - I/O error or disk out of room.
-
- different segments for - <name> - the public is declared in
- different segments in different modules.
- Probably both as a function and as a variable.
-
- illegal overlay number - in the overlay options -Vnn and -Mnn,
- the value nn must be between 1 and 39 in
- ascending, consecutive order.
-
- multiply defined <name> - the same public appears in two modules.
-
- over 100 arguments - PCCL only allows 100 arguments, including
- arguments in -F files.
-
- over 64K code - a segment has over 64K of code. See the
- description of PCCL overlay support.
-
- over 64K data - the resultant program has over 64K of data.
- This is not supported. You will have to move
- some data to locals or use overlays.
-
-
-
-
-
-
-
-
-
- Messages Page 73
-
-
- over 300 modules - only 300 modules can be linked together. The
- supplied library only contains about 60 modules.
-
- too many filenames - there are only 2000 bytes reserved for all
- filenames.
-
- too many labels in <name> - a module in the named file had over
- 1000 labels.
-
- too many total PUBLICS in <name> - symbol table has overflowed.
- The named file was being read when the overflow
- occurred.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Order Form Page 74
-
-
- B. Order Form
-
- Remit to: C Ware Corporation
- P.O. Box 428
- Paso Robles, CA 94447
-
- PCC version 1.2c
-
- You can also order by phone using your P.O.#, Mastercard or VISA.
- (805) 239-4620, 9:00 a.m. - 4:00 p.m., PST ONLY.
-
- ____ PCC Registration .................... @ $ 30.00 ea $ ______
- (includes registration software -OR-
- latest version of PCC)
-
- ____ UPGRADE to the newest version ....... @ $ 5.00 ea $ ______
- (includes latest version of the program diskette,
- with documentation on the disk.)
-
- Orders are normally shipped by USPS at no additional charge.
-
- For UPS shipment, please add $3.00 $ 3.00 ea $ _____
-
- Subtotal ______
-
- Less Discount ______
-
- Total $ ______
-
-
-
- Payment by: [ ] Check [ ] MC [ ] Visa [ ] PO # ______________
-
- Name: ___________________________________________________________
-
- Company: ________________________________________________________
-
- Address: ________________________________________________________
-
- : ________________________________________________________
-
- : ________________________________________________________
-
- Day Phone: _______________________ Eve: _________________________
-
- Card #: _______________________________ Exp. Date: _____________
-
- Signature of cardholder: ________________________________________
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- User Comments Page 75
-
-
- C. User Comments
-
- I acquired PCC from
- [ ] - Friend [ ] - Software product
- [ ] - Computer Club [ ] - Computer Store
- [ ] - Data Base Service [ ] - Electronic BBS
- [ ] - Other - Please Specify ____________________________
-
- We would also appreciate any input you would care to give
- concerning PCC. If you have any ideas or comments that would
- make PCC a better program, then please let us know.
-
- We value your comments!
-
- Comments and/or suggestions:
- ________________________________________________________________
-
- ________________________________________________________________
-
- ________________________________________________________________
-
- ________________________________________________________________
-
- ________________________________________________________________
-
- ________________________________________________________________
-
- ________________________________________________________________
-
- ________________________________________________________________
-
- ________________________________________________________________
-
- ________________________________________________________________
-
- ________________________________________________________________
-
- ________________________________________________________________
-
- ________________________________________________________________
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- User Comments Page 76
-
-
- index
-
- A
- abs(), 34
- An Introduction To PCC, 8
- atof(), 35
- atoi(), 34
- atol(), 35
-
- B
- Banner and Termination Messages, 60, 67, 71
- Basic System, 10
-
- C
- Calling Conventions, 29
- ceil(), 36
- chain(), 36
- close(), 37
- Completion Codes, 11
- Corporate
- Business, Government and Commercial Use, 5
- creat(), 37
-
- D
- Data Types, 15
- dates(), 37
- DISCLAIMER, 3
- Disk Input/Output Routines, 32
- doint(), 37
-
- E
- Errors from PCCA, 68
- Example, 21
- Examples, 14, 24
- exec(), 38
- exit(), 39
- exp(), 39
- Extensions, 16
- Externs, 18
-
- F
- fabs(), 40
- Fatal Errors From PCCA, 68
- Fatal Errors from PCCL, 72
- fclose(), 40
- fgetc(), 40
- fgets(), 40
- floor(), 41
- fopen(), 41
- FOREIGN RESHIPMENT LIABILITY, 3
- Forward References, 18
- fputc(), 41
- fputs(), 42
- frand(), 42
- fscanf(), 42
-
-
-
-
-
-
-
-
- User Comments Page 77
-
-
-
- G
- General, 4
- getc(), 42
- getchar(), 43
- gets(), 43
- Getting Started, 9
- getw(), 44
-
- I
- IBM-PC Screen and Keyboard Interface, 34
- in(), 44
- index(), 44
- Introduction, 13, 21, 23, 28
- Invocation, 21, 23
-
- L
- Libraries, 27
- LIBRARY CONVENTIONS, 31
- License, 2
- LIMITATIONS OF REMEDIES, 3
- LIMITED WARRANTY , 3
- lmove(), 45
- log(), 44
- longjmp(), 45
-
- M
- Macros, 20
- Math Routines, 33
- Messages, 60
- Messages Produced by PCCA, 67
-
- N
- Names, 28
-
- O
- open(), 46
- Order Form, 74
- ORDERING INFORMATION, 4
- os(), 46
- out(), 46
- Overlays, 25
-
- P
- PCC -- The Personal C Compiler, 13
- PCC Compiler Messages, 60
- PCC Errors, 62
- PCC Fatal Errors, 60
- PCC Files, 9
- PCC Warnings, 66
- PCCA Assembler Messages, 67
- PCCA Errors ( from PCC Execution ), 67
- PCCL Messages, 71
- peek(), 46
- poke(), 47
-
-
-
-
-
-
-
-
- User Comments Page 78
-
-
- pow(), 47
- Preface, 7
- Preprocessor directives, 15
- Program Initialization, 28
- putc(), 47
- putchar(), 47
- puts(), 48
- putw(), 48
-
- Q
- qsort(), 48
-
- R
- RAM DISK, 11
- rand(), 49
- rename(), 49
- rindex(), 49
-
- S
- scanf(), 50
- scr_aputs(), 52
- scr_ci(), 52
- scr_clr(), 52
- scr_clrl(), 52
- scr_cls(), 53
- scr_co(), 52
- scr_csts(), 53
- scr_cursoff(), 53
- scr_curson(), 53
- scr_rowcol(), 53
- scr_scdn(), 54
- scr_scrdn(), 54
- scr_scrup(), 54
- scr_scup(), 54
- scr_setmode(), 54
- scr_setup(), 55
- scr_sinp(), 55
- setjmp(), 56
- Setting Up DOS 2.xx
- 3.xx, ..., 10
- Space Considerations, 25
- sqrt(), 56
- srand(), 56
- sscanf(), 57
- Standard Library Functions, 34
- strcat(), 57
- strcmp(), 57
- strcpy(), 57
- Strings, 20
- strlen(), 58
- strncat(), 58
- strncmp(), 58
- strncpy(), 59
- Support Policy, 2
-
-
-
-
-
-
-
-
-
- User Comments Page 79
-
-
- T
- The C Language, 15
- The Legal Stuff, 1
- The PCCA 8088 Assembler, 21
- The PCCL Object File Linker, 23
- The PCCS.S Standard Library, 28
- times(), 59
- TRADEMARKS, 4
-
- U
- ungetc(), 59
- unlink(), 59
- Use by Educational Institutions, 5
- User Comments, 75
-
- W
- Warnings from PCCL, 71
-
- U
- Using Text
- Book, Magazine or Download source code, 8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-