home *** CD-ROM | disk | FTP | other *** search
-
- Centiwrite 1.10 Developer's Kit and User's Manual
- Both Items Copyright 1988 Andrew M. Saucci, Jr.
-
- Note that you may also inspect the copyright notice of the file CENTWR55.TPU
- by entering "copy centwr55.tpu /b con" at the DOS prompt. Ignore all the
- beeping and stumbling and wait for this command to finish executing.
- Also, if your copy of the compressed version of the Kit is named "CWDKIT.ARC"
- you should rename it "CWDKIT55.ARC".
-
- ****************************************************************************
-
- Centiwrite 1.10 Developer's Kit User's Manual
- ========== ==== =========== === ====== ======
-
- Copyright 1988 Andrew M. Saucci, Jr.
-
- What's to Follow
-
- 1. Introduction
- 2. About the Author
- 3. The Interface of the Unit
- 4. What You'll Need to Compile
- 5. The Basic Principles
- 6. A Sample Calling Program
- 7. Analysis of the Sample Program
- 8. The Initial Values
- 9. Initializing the Array
- 10. How to Overlay the Unit
- 11. Compatibility Consideration
- 12. For Extra Punch in Your Program
- 13. Down to Brass Tacks
- 14. Boilerplate
- 15. To All Those Who Helped
- 16. Coming Attractions
- 17. It's Alive!
-
- =============================================================================
-
- Introduction
-
- Congratulations on having acquired this useful developer's tool. Now
- you can have an "instant editor" in your own programs whenever you need to
- include the capability to create short memos, notes, or letters. This file
- will attempt to show you how to incorporate the Centiwrite 1.10 editor into
- your Turbo Pascal programs. If you are unfamiliar with this editor, you should
- definitely obtain a copy of the stand-alone version of Centiwrite and read its
- User's Manual. This explains in detail the operation of the editor. Of course,
- as a "developer" (one of the initiated), you'll gain access to some features
- not used in the stand-alone version.
-
- =============================================================================
-
- About the Author
-
- Andrew M. Saucci, Jr. was graduated with distinction from the
- New York Institute of Technology with a master's degree in computer science.
- He received a bachelor's degree in computer science from Hofstra University.
- A member of the Association of Shareware Professionals (ASP) and the
- Association for Computing Machinery (ACM), Mr. Saucci has programmed in
- Turbo Pascal for over one year. He is also the author of the program
- The Holy Rosary.
-
- Mr. Saucci can be reached at any of the following electronic mail
- addresses:
-
- CompuServe 72117,241
- Delphi ASAUCCI
- Genie A.SAUCCI3
- BIX ASAUCCI
-
- Comments about any of his products are most welcome; however,
- please allow one week for a response to your initial inquiry. After that,
- an "active" mailbox is checked daily. Also, for guaranteed service, use
- the regular mail facility of your service rather than a bulletin board area,
- or send a regular mail note saying to check the bulletin board. One week is
- a "worst case" situation. Often, mailboxes are checked more frequently.
-
- =============================================================================
-
- The Interface of the Unit
-
- unit centwr55;
- interface
- uses dos, crt;
- type scarray= array [1..62] of string[85];
- commstruc= record
- screline: scarray;
- lastring, initWhereX, initWhereY: byte;
- CurAttr, StdAttr, MessAttr, WarnAttr: byte;
- passkey: integer;
- TimeOutInterval, NextTimeOut, oldhours: word;
- BlankChar: char;
- insmode, RetCtrlKeys, ShowStatusLine, TimeOut: boolean;
- end;
- function nextword (sentence: string): integer;
- function lastword (sentence: string): integer;
- function isletter (charcode: char): boolean;
- function isdigit (charcode: char): boolean;
- function datestring: string;
- function timestring: string;
- function CheckSumVidBuf (x1, y1, count: byte): word;
- function BufChar (xlimit, ylimit: byte): byte;
- procedure AnalyzeKey (var inkey: integer; var scancode: byte);
- procedure DelWord (var sentence: string; position: integer);
- procedure Centiwrite (var infoexch: commstruc);
-
- implementation
- { Implementation would follow here. }
-
-
- Each of the variables used in the "commstruc" (for "communications structure"
- record is described below.
-
- screline: The strings which represent each line of the text to a maximum of
- 62. This accomodates 25-, 43-, and 50-line screens.
-
- lastring: The number of currently "valid" strings in screline. Because a line
- consisting solely of a carriage return (ASCII 13-10) is represented
- by a null string, "lastring" indicates how many lines of screline
- are currently being used. Note that in an empty file, lastring is 1.
-
- initWhereX: The initial x-coordinate of the cursor on entry to the editor.
-
- initWhereY: The initial y-coordinate of the cursor on entry to the editor.
-
- CurAttr: The color attribute of the cursor. You can use any valid attribute.
- If the foreground and background are the same, the Centiwrite editor
- assumes that the blinking hardware cursor is being used, and the
- software cursor is disabled. The cursor will appear as a blinking
- CHARACTER if a background color greater than 7 is used.
-
- StdAttr: The normal color attribute of the editor.
-
- MessAttr: The color attribute for messages which appear on the status line.
-
- WarnAttr: The color attribute for the word "Overstrike" when visible.
-
- TimeOutInterval: The number of minutes between timeouts. If this is set
- to zero, timeouts are disabled.
-
- NextTimeOut: Time in minutes of the next timeout. If the next timeout is
- at 4:43, this variable could have the values 43, 103, 163, ...
- through 65535 (the maximum for a word), or (43+ 60*n), where
- n is the number of hours to the next timeout. On the hour,
- NextTimeOut is decremented by 60 (if it exceeds 59).
-
- oldhours: Hours at the last time check. This is passed as part of the
- structure because the calling program must initialize it before
- the first call to Centiwrite. You should re-initialize it if
- you leave Centiwrite for more than an hour. Basically, this is
- used as a "rollover" flag.
-
- passkey: The character passed back to the main program when Centiwrite does
- not define a function for it. (This is now an INTEGER.)
-
- BlankChar: The character that is displayed at the cursor position when
- the character at that position is either ASCII zero, ASCII 32
- (blank), or ASCII 255. All of these normally appear as a blank,
- and you may need to choose an alternate character, particularly
- for those using monochrome monitors. You may select any character
- except ASCII 7, 8, 10, or 13.
-
- insmode: If true, then the editor is in Insert mode. Otherwise, Overstrike
- mode is used.
-
- RetCtrlKeys: Set this to true if you want control keys (ASCII 1 to 31,
- except 8, 9, and 13) returned to the calling program.
- Otherwise, set it to false so that Ctrl-L, for example,
- will insert an ASCII 12 (form-feed). Even if control keys
- are returned, using the Alt+ numeric keypad method of
- entering characters will always insert the appropriate
- character, except for ASCII 7, 8, 10, and 13, which are
- ignored. Backspace, Tab, and Enter are never returned this way.
-
- ShowStatusLine: Set this flag to true if you require the status line,
- which shows the current state of Insert/Overstrike and
- the current position on the screen. If this is set to
- false, no status line is displayed and the top line
- is available for editing. When ShowStatusLine is false,
- the Insert key is returned to the calling procedure for
- action, so that any display or indication of the Insert/
- Overstrike mode that the caller maintains (in lieu of
- the status line) may be updated by the caller. Also, the
- F5, F8, and Ctrl-F8 keys are ignored (because they use
- the status line for their display).
-
- TimeOut: When set to true, TimeOut indicates that the calling procedure
- has received control on account of a timeout, and that the
- appropriate timeout procedures or functions should be
- executed. Otherwise, the caller received control because of
- an unrecognized or Ctrl-key.
-
- The functions and procedures which are included are summarized next.
-
- nextword: Returns the position of the next word in a string. In the string
- "for he's a jolly good fellow", nextword returns 4. If no "next
- word" is found, the return value is the length of the string plus 1.
-
- lastword: Returns the position of the last word in a string. In the string
- "which nobody can deny", lastword returns 18. If the string is a
- single word, the return value is 1.
-
- datestring: Returns the current system date in the form "Monday, May 26, 1988".
-
- timestring: Returns the current system time in the form "10:45:44 PM".
-
- CheckSumVidBuf: Returns a checksum of the characters in the video buffer
- starting at a given location (in REAL coordinates-- not
- those recognized by the CRT unit) and continuing for
- count characters. This procedure is not used by the
- editor, but is included because it is important to
- all programmers who want to discourage tampering with
- their programs. (Real coordinates start at 0,0 and are
- not relative to the current window.)
-
- BufChar: Returns the character at the cursor location and advances the
- cursor one column to the right, or to the beginning of the
- next line. "xlimit" is the x-coordinate (again, in real coordinates)
- at which the cursor should wrap to the next line. "ylimit" is the
- y-coordinate of the bottom of the screen. If the cursor is in the
- lower right corner of the screen, the character is returned but
- the cursor is not advanced. This function is also not used by
- the editor, but it is the function that the stand-alone version
- of Centiwrite uses to load a screen into the editor. Now you
- can use it, too!
-
- AnalyzeKey: Substitute keyboard reading procedure (for ReadKey). A single
- call returns all pertinent keyboard information-- no need to
- make multiple calls to check for extended key codes.
- Extended key codes are returned in inkey as values in excess
- of 255-- for example, F6 is returned as 322. Note that "inkey"
- is an INTEGER variable. To get the value returned in "inkey",
- add 256 to the extended key code (F6 is 322, or 64+ 256).
- This procedure is now written in assembly language for
- extra speed.
-
- DelWord: Deletes the word starting at a given location in a string.
-
- Centiwrite: The editor itself.
-
- =============================================================================
-
- What You'll Need to Compile
-
- In order to compile a program using Centiwrite, you need to copy
- CENTWR55.TPU into the directory where Turbo Pascal normally looks for your
- .TPU files. In version 5.5, this is one of the EXE & TPU directories specified
- under the Options/Directories menu selection. You will also need to add the
- line "uses centwr55;" to the the source file of the procedure that calls the
- editor. Check your Turbo Pascal manual for additional information on including
- units in your programs. Oh, yes, you'll also need Turbo Pascal version 5.5.
- For those concerned about needing to recompile for future versions of the
- compiler, the current plan is to update the unit whenever a new version of
- Turbo Pascal is released. Upgrades will be available for a modest charge.
-
- With the advent of Turbo Pascal 5.5, units may incorporate object-
- oriented programming techniques. This means that a unit such as this one could
- be distributed as a .TPU file, yet a user could make changes to it without
- the need for the source code. If possible, the Developer's Kit will be
- revised to take advantage of this opportunity.
-
- =============================================================================
-
- The Basic Principles
-
- The Centiwrite editor is based upon an "array of strings"
- implementation. While not suitable for a large text editor or word processor,
- this approach is quite adequate for a simple program such as this. It allows
- a "quick and dirty" style, and is easily understandable. Each element in the
- array of strings represents a line of text on the screen. An "implied"
- carriage return ends each line. A count of the current number of lines is
- maintained at all times. A duplicate array is maintained in memory in order
- to facilitate the "Undo" feature (invoked by F3).
-
- Some may wonder why the video memory is not used to store the
- text, considering that the text is stored there anyway. Use of character
- strings allows the use of Turbo Pascal's string-handling procedures. Using
- video memory would mean writing substantially more code in order to duplicate
- the functions already available in the runtime library. This code would not
- only make the program larger, but would also need to be debugged. The Turbo
- Pascal string-handling routines (while not perfect) are already thoroughly
- debugged.
-
- =============================================================================
-
- A Sample Calling Procedure
-
- The following program is an example of how to call the editor.
-
- program CallEditor (input, output);
- uses dos, crt, centwr55;
- var reg: registers;
- origcx: word;
- cwinfo: commstruc;
- i: byte;
- hours, minutes, seconds, hundredths: word;
-
- procedure SaveFile;
- begin
- writeln ('Code for saving a file would be here.');
- delay (2500);
- end;
-
- procedure HelpProcedure;
- begin
- writeln ('Help! Help!');
- delay (2500);
- end;
-
- begin
- reg.ah:= $03;
- reg.bh:= $00;
- intr ($10, reg); { Save old cursor }
- origcx:= reg.cx;
- reg.ah:= $01;
- reg.cx:= $2000;
- intr ($10, reg); { Disable hardware cursor }
- with cwinfo do { Allows unqualified variable references. }
- begin
- insmode:= true; { Initialize structure variables. }
- initWhereX:= 1;
- initWhereY:= 1;
- CurAttr:= $70; { Black on LightGray }
- StdAttr:= $17; { LightGray on Blue }
- MessAttr:= $20; { Black on Green }
- WarnAttr:= $4F; { White on Red }
- for i:= 1 to 25 do
- screline[i]:= ''; { empty file }
- lastring:= 1;
- passkey:= 0;
- RetCtrlKeys:= false;
- ShowStatusLine:= true;
- BlankChar:= #32; { pick the blank character because of the CurAttr we used }
- TimeOutInterval:= 5; { causes a timeout every five minutes }
- GetTime (hours, minutes, seconds, hundredths);
- NextTimeOut:= minutes+ TimeOutInterval; { set first timeout }
- oldhours:= hours; { initialize rollover flag }
- repeat
- window (1, 1, 80, 25);
- TextAttr:= $07;
- ClrScr;
- writeln ('Joe''s Program: Centiwrite Editor-- Alt-X to Exit');
- window (1, 2, 80, 25);
- Centiwrite (cwinfo); { <------------- PLUG-IN EDITOR }
- window (1, 1, 80, 25);
- TextAttr:= $07;
- if TimeOut { Short-circuit the other tests-- passkey contains }
- then begin { values which have already been processed. }
- passkey:= 0;
- end;
- if ((passkey= 346) or (passkey= 316)) or (TimeOut)
- { If Alt-X, F2, or TimeOut, save the file. }
- then SaveFile;
- if passkey= 315 { F1 displays a list of keys and their functions. }
- then HelpProcedure;
- until ((passkey= 288) or (passkey= 346)); { Alt-D or Alt-X (exit condition) }
- end; { with statement }
- ClrScr;
- reg.ah:= $01;
- reg.cx:= origcx;
- intr ($10, reg); { restore cursor }
- end. { program }
-
- =============================================================================
-
- Analysis of the Sample Program
-
- Take a close look at the sample program. Although it has been
- simplified in order to highlight the main points, its basic structure is
- the same as that of the stand-alone version of Centiwrite 1.10. You should
- be able to compile and run it. It gives initial values to the members of the
- structure, and then runs the editor in a repeat..until loop.
-
- Why a loop? This is the means you can use to add your own "frills"
- to the editor. Any time the Centiwrite editor sees a key that it does not
- recognize, such as F9, Alt-Z, or PageDown, the editor terminates and control
- returns to the calling procedure. Placing the editor in a loop gives you a
- chance to execute whatever procedures or functions you like before RETURNING
- control, or exiting if you like. For example, Alt-X is the "recommended" exit
- key. The editor takes no special action on seeing Alt-X; it merely exits just
- the same as it would for any other unrecognized key. The "until" condition
- "passkey=288" is what causes the sample program to terminate. To use F10 as
- an exit key, just change the condition to "passkey=324". Likewise, what
- displays help is "passkey=315"; to use Shift-F1, change to "passkey=340".
-
- Note that the editor recognizes all keys that return an ASCII value
- plus the following extended keys:
-
- arrow keys Shift-Tab Ctrl-Left arrow Alt- B E H T V Y
- Insert Home/End Ctrl-Right arrow F3 F5 F7 F8
- Delete Ctrl-Home/End Ctrl-F8
-
- The calling procedure is passed any other keys and may deal with them
- however it sees fit. The variable "passkey" will hold the value of the last
- key pressed. By using the flag RetCtrlKeys, you can specify additional keys
- to be returned.
-
- Notice the "window" statement just before the call to Centiwrite.
- This is absolutely necessary in order for the editor to establish its window
- boundaries and insure the integrity of its screen. The editor can operate
- in a window no narrower than 40 columns. It has not been tested in windows
- of fewer than 24 rows; however, it should work for any number of rows.
- (For a single row "window" you should use "liminput", the complete source
- code to which is found in the Deciwrite Developer's Kit.) If you specify a
- window size of fewer than 40 columns, greater than the screen width, or
- greater than the screen height, the result is unknown.
-
- The Centiwrite editor redraws its window each time it is called, and
- it leaves the screen in place when it exits. Therefore, you can put a window
- over it without any trouble.
-
- ============================================================================
-
- The Initial Values
-
- The most important value in "commstruc" is "lastring". If you use
- an invalid value for lastring, the editor will become confused and behave
- erratically. Lastring should be 1 for an empty file. Otherwise, it reflects
- the number of currently valid strings in the array "screline".
-
- Example.
-
- If screline is this (line numbers added):
-
- [1] Now is the time for all good people.
- [2] We must mobilize now.
- [3]
- [4] May we have your support?
-
- then lastring is 4. If two carriage returns are added after line 4, as in
-
- [4] May we have your support?
- [5]
- [6]
-
- then lastring is 6. Lastring should only be changed when the number of lines
- in the text is changed.
-
- Here's an important note about carriage returns. The Centiwrite
- editor does NOT add the ASCII 13-10 combination explicitly to the text. Every
- string ends in an IMPLIED 13-10. If you write a file to disk, you must add the
- 13-10 yourself. This is easily done using a "writeln(screline[i])"-type
- statement. You need not delete a 13-10 on input, however, as the editor
- automatically removes these (as well as ASCII 7 and 8) from the text. You
- should, however, take care to format the input strings so that they do not
- contain embedded carriage returns that really belong at the end of a line.
-
- InitWhereX and initWhereY are used to position the cursor when
- the editor is called. For the first invocation, each of these should usually be
- set to 1, although any valid values are acceptable. Never position the cursor
- below the row "lastring", or erratic operation will result. When the editor
- passes control back to the calling procedure, the current cursor position is
- saved in initWhereX and initWhereY. It can then be reused if necessary when
- the editor is called again. Pressing F9 demonstrates this simply. The cursor
- position is saved; the editor returns control to the main program; the main
- program ignores the key (because no function has been defined for it there,
- either); and the editor regains control, positioning the cursor at the saved
- location.
-
- Insmode, as explained earlier, is simply a flag. It's your choice--
- set it however you like depending upon whether you want to start the editor in
- Insert mode or Overstrike mode.
-
- Passkey must be initialized. If a timeout occurs before the first
- key is pressed, the internal check of passkey will fail if passkey
- contains garbage.
-
- You must also initialize BlankChar, RetCtrlKeys, and ShowStatusLine.
- They are explained previously.
-
- You do not have to initialize TimeOut, because it is set to
- false each time the editor is called.
-
- ============================================================================
-
- Initializing the Array
-
- You must initialize "screline" before using it. This can be done
- any way you like-- with assignment statements, reads, Move, etc. You should
- assign an initial value to "maxline" elements in screline, where "maxline" is
- equal to the maximum number of lines on the screen plus 1. Be sure to keep
- "lastring" synchronized with the actual number of elements of screline in use.
-
- =============================================================================
-
- How to Overlay the Unit
-
- This unit is compiled using {$O+}. This means that you may
- overlay it using the methods outlined in Chapter 13 of the Turbo Pascal
- Reference Guide, just as you would do for any other unit compiled with {$O+}.
- If you do not want to overlay the unit, simply ignore this feature. While it
- has not been tested as an overlay, it should work just as well either way.
-
- =============================================================================
-
- Compatibility Consideration
-
- The Centiwrite editor uses direct screen writes (through Turbo
- Pascal's CRT unit). This may cause problems, particularly with windowing
- environments such as Desqview or Concurrent DOS. If you need to write to
- the screen using the video BIOS functions, place the line "uses crt" in
- your main program and set the built-in CRT variable DirectVideo to "false".
- Otherwise, DirectVideo will be assumed to be "true".
-
- =============================================================================
-
- For Extra Punch in Your Program
-
- If you want to use a "plug-in editor" in your program, but feel
- Centiwrite just isn't powerful enough, don't walk away feeling dejected.
- Here's good news! Also available is an editor similar to Centiwrite but ten
- times as powerful. It's Deciwrite! The Deciwrite Developer's Kit includes all
- the features of Centiwrite PLUS:
-
- 1. Automatic word wrap and paragraph reformatting.
- 2. Full support for binary files.
- 3. Time and date can be inserted into the text with one keystroke.
- 4. Full source code-- including liminput, a replacement for readln; dectohex
- and hextodec, hexadecimal conversion routines; and FileCheck, which checks
- for the existence of a file and determines if it is read-only; and more!
-
- What's more, if you're not sure, you can "lock in" the price of
- the Deciwrite Developer's Kit by buying the Centiwrite Developer's Kit NOW.
- You'll have one year to upgrade at the current price (plus $1 for shipping),
- PLUS you get a credit for what you paid for the Centiwrite Developer's Kit.
- What's to lose? Send electronic mail to the addresses listed earlier to learn
- how to take advantage of this great offer. Don't forget, too, that the
- Deciwrite Developer's Kit comes with a 30-day money-back guarantee no matter
- when you buy it.
-
- =============================================================================
-
- Down to Brass Tacks
-
- As of July 1, 1989, this is the Centiwrite/Deciwrite price list.
-
- Individual License Site License
- *# Centiwrite 1.10 $20.00 $250.00
- # Deciwrite 1.10 $30.00 $500.00
- Deciwrite 1.10 Demo Disk $ 4.00 *******
- *# Centiwrite 1.10 Developer's Kit $32.50 $550.00
- Upgrade to later TP version $ 5.00 $ 60.00
- # Deciwrite 1.10 Developer's Kit $75.00 $950.00
- Disk replacement fee $ 3.00 none
-
- * These items may be ordered through the Public (Software) Library;
- others must be ordered directly from the author.
-
- # Please add $4.00 shipping & handling to these items.
-
- New York State residents and businesses MUST add their local sales tax
- or provide proof of exemption. Send electronic mail if you are uncertain
- of your local tax rate. Specify your address and county. The shipping
- and handling charge is NOT included in the calculation of sales tax.
-
- Residents of other states will in most cases be required to remit the
- appropriate tax directly to their state tax department.
-
- The Deciwrite Demo Disk includes one $3.00 discount off the purchase
- of Deciwrite 1.10.
-
- An individual license permits the user to operate the program on
- a single computer at a time, while a site license permits unlimited use
- within the confines of a contiguous area of the owner's property.
-
- These prices are guaranteed not to increase through October 1, 1989.
-
- Custom implementations of these programs are also available on
- request for modest additional fees. Send electronic mail to one
- of the addresses listed earlier.
-
- If you would like to use your Visa or MasterCard to register this
- program, you may order through the Public (Software) Library.
- The number to call for orders is 1-800-2424-PSL (1-800-242-4775).
- Information and questions about orders is available from the PSL
- at 713-665-7017. You may also write to the PSL at P.O. Box 35707,
- Houston, TX 77235-5705, or send electronic mail via CompuServe to
- 71355,470. When writing, you should sign your letter, include your
- card number and its expiration date, and specify that you want to
- register Centiwrite, (CWDKIT55.ARC), by Andrew M. Saucci, Jr. Please
- note that the PSL is not equipped to answer questions about Centiwrite
- itself. Such questions are best directed to one of the electronic
- mail addresses listed earlier. Also note that no surcharge
- is imposed on credit card orders.
-
- Make checks payable to
-
- Andrew M. Saucci, Jr.
- 641 Koelbel Ct
- Baldwin, NY 11510-3915.
-
- Please specify the disk size you require.
-
- You may wish to check one of the electronic mail addresses to verify
- that the above address is current. Please use this "physical" address
- ONLY for orders, unless you lack a modem. All other correspondence,
- including technical support questions, should be directed to one of
- the electronic mail addresses whenever possible.
-
- ============================================================================
-
- Before Going to the Highest Court in the Land
-
- This program is produced by a member of the Association of Shareware
- Professionals (ASP). ASP wants to make sure that the shareware principle
- works for you. If you are unable to resolve a shareware-related problem with
- an ASP member by contacting the member directly, ASP may be able to help. The
- ASP Ombudsman can help you resolve a dispute or problem with an ASP member,
- but does not provide technical support for members' products. Please write to
- the ASP Ombudsman at P.O. Box 5786, Bellevue, WA 98006 or send a CompuServe
- message via EasyPlex to ASP Ombudsman 70007,3536.
-
- ============================================================================
-
- Special Bonus
-
- All registered users of the Centiwrite Developer's Kit are also
- licensed to use the stand-alone version of Centiwrite (CWRITE.EXE) at no
- additional charge. CWRITE.EXE is included on the distribution disk that will
- be sent to you when your order is received. Also, registered users receive
- the source code for DIRALL.EXE, one of the programs provided to registered
- users of the stand-alone version of Centiwrite. DIRALL.EXE provides a
- regular directory listing, but highlights hidden files in boldface.
-
- A registered user is also entitled to unlimited telephone, U. S.
- mail, or electronic mail support. If such a user finds a bug within three
- months of purchase, it will either be fixed or the purchase price will be
- refunded.
-
- ============================================================================
-
- Boilerplate
-
- Liability in the event of defects in Centiwrite 1.10 and/or the
- Centiwrite 1.10 Developer's Kit is expressly limited to replacement of the disk
- on which Centiwrite and/or the Developer's Kit was originally provided. No
- other liability of any sort is either implied or assumed. In particular, the
- user is responsible for all consequential damages, such as loss of income,
- loss of data, pain and suffering, etc.
-
- ============================================================================
-
- To All Those Who Helped
-
- Thanks to all those who gave their assistance toward the completion
- of this program, especially Michael Day, Neil Rubenking, Scott Bussinger, and
- all the other helpful people who frequent Borland's Programming Forum A
- (BPROGA) on CompuServe. It's truly amazing!
-
- ============================================================================
-
- Coming Attractions
-
- A plan to produce a full-size text editor based on Centiwrite and
- Deciwrite is in the works. Please use Centiwrite to write a short note
- describing a few of the features you would like to see in a text editor,
- particularly anything that is not found in other programs, and send it to one
- of the electronic mail addresses. The result could be a really good program.
- You might also indicate what incentives are most likely to cause you to
- purchase registered copies of programs distributed on a "try-before-you-buy"
- basis. Your suggestions will be most appreciated.
-
- ============================================================================
-
- It's Alive!
-
- This program is not carved in stone. Many of you no doubt have
- extensive experience in this field, and your comments and suggestions are
- valuable and welcome. Send them to the electronic mail addresses listed.
-
- ============================= END OF FILE ===================================