Update release notes for v2.0.0
[debian/pforth] / RELEASES.md
1 # Release History for pForth - a Portable ANS-like Forth written in ANSI 'C'
2
3 PForth hosted at https://github.com/philburk/pforth
4
5 Documentation at http://www.softsynth.com/pforth/
6
7 ## V2.0.0 #29 - Jan 1, 2023
8
9 ### Breaking API change!
10
11 * Fixed FROUND, was leaving result on data stack instead of float stack, [#69](https://github.com/philburk/pforth/issues/69)
12
13 ### Other changes
14
15 * Added standard version numbering, eg. "2.0.0"
16 * Add BYE-CODE variable, which will be returned to the shell when pForth exits.
17 * Set BYE-CODE when a test fails to simplify continuous integration tests.
18 * Add ANS structure support
19 * Add [DEFINED] and [UNDEFINED]
20 * Implement MSEC using usleep() to avoid busy wait.
21 * Added VERSION_CODE for software version checks.
22 * Added S\"
23 * Terminal is unbuffered on posix systems
24 * Added CMAKE build, (thanks Robin Rowe)
25 * Improve unix/Makefile, moved to "platforms" folder
26 * Added GitHub actions for CI
27 * Add compiler warnings about precision loss.
28 * Improve 64-bit CELL support.
29 * Allow header and code size to be more easily controlled.
30 * Fixed definition of PF_DEFAULT_HEADER_SIZE
31 * Change license to 0BSD
32 * Added privatize to history.fth
33
34 ## V28 - April 24, 2018, tagged as V1.28.0 to conform to standard version format
35
36 * remove off_t
37 * too many changes to list, see commit history (TODO add changes)
38 * fix $ROM
39 * fix HISTORY
40 * fixes for MinGW build
41
42 ## V27 - 11/22/2010
43
44 * Fixed REPOSITION-FILE FILE-SIZE and FILE-POSITION.
45       They used to use single precision offset. Now use double as specified.
46 * Delete object directories in Makefile clean.
47 * Fixed "Issue 4: Filehandle remains locked upon INCLUDE error".
48       http://code.google.com/p/pforth/issues/detail?id=4&can=1
49 * Fixed scrambled HISTORY on 64-bit systems. Was using CELL+ but really needed 4 +.
50 * Fixed floating point input. Now accepts "1E" as 1.0. Was Issue #2.
51 * Fixed lots of warning and made code compatible with C89 and ANSI. Uses -pedantic.
52 * Use fseek and ftell on WIN32 instead of fseeko and ftello.
53 * Makefile is now more standard. Builds in same dir as Makefile. Uses CFLAGS etc.
54 * Add support for console IO with _WATCOMC_
55 * Internal CStringToForth and ForthStringToC now take a destination size for safety.
56 * Run units tests for CStringToForth and ForthStringToC if PF_UNIT_TESTS is defined.
57
58 ## V26  5/20/2010
59
60 * 64-bit support for M* UM/MOD etc by Aleksej Saushev. Thanks Aleksej!
61
62 ## V25  5/19/2010
63
64 * Added 64-bit CELL support contributed by Aleksej Saushev. Thanks Aleksej!
65 * Added "-x c" to Makefile CCOPTS to prevent confusion with C++
66 * Allow space after -d command line option.
67 * Restore normal tty mode if pForth dictionary loading fails.
68
69 ## V24 2/20/09
70
71 * Fixed Posix IO on Mac. ?TERMINAL was always returning true.
72 * ACCCEPT now emits a space at end of line before output.
73 * Fixed RESIZE because it was returning the wrong address.
74
75 ## V23 8/4/2008
76
77 * Removed -v option from mkdir in build/unix/Makefile. It was not supported on FreeBSD.
78       Thank you Alexsej Saushev for reporting this.
79
80 ## V23  7/20/2008
81
82 * Reorganized for Google Code project.
83
84 ## V22  (unreleased)
85
86 * Added command line history and cursor control words.
87 * Sped up UM* and M* by a factor of 3. Thanks to Steve Green for suggested algorithm.
88 * Modified ACCEPT so that a line at the end of a file that does NOT have a line
89         terminator will now be processed.
90 * Use _getch(), _putch(), and _kbhit() so that KEY, EMIT and ?TERMINAL will work on PC.
91 * Fixed  : foo { -- } 55 ;  - Was entering local frame but not exiting. Now prints error.
92 * Redefined MAKE_ID to protect it from 16 bit ints
93 * John Providenza says "If you split local variables onto 2 lines, PForth crashes." Fixed. Also allow \
94 * Fixed float evaluation in EVALUATE in "quit.fth".
95 * Flush register cache for ffColon and ffSemiColon to prevent stack warnings from ;
96
97 ## V21 - 9/16/1998
98
99 * Fixed some compiler warnings.
100
101 ## V20
102
103 * Expand PAD for ConvertNumberToText so "-1 binary .s" doesn't crash.
104       Thank you Michael Connor of Vancouver for reporting this bug.
105
106 * Removed FDROP in REPRESENT to fix stack underflow after "0.0 F.".
107       Thank you Jim Rosenow of Minnesota for reporting this bug.
108 * Changed pfCharToLower to function to prevent macro expansion bugs under VXWORKS
109       Thank you Jim Rosenow of Minnesota for reporting this bug.
110
111 * "0.0 F~" now checks actual binary encoding of floats. Before this it used to just
112       compare value which was incorrect. Now "0.0 -0.0 0.0 F~" returns FALSE.
113
114 * Fixed definition of INPUT$ in tutorial.
115       Thank you Hampton Miller of California for reporting this bug.
116
117 * Added support for producing a target dictionary with a different
118       Endian-ness than the host CPU.  See PF_BIG_ENDIAN_DIC and PF_LITTLE_ENDIAN_DIC.
119
120 * PForth kernel now comes up in a mode that uses BASE for numeric input when
121       started with "-i" option.  It used to always consider numeric input as HEX.
122       Initial BASE is decimal.
123
124 ## V19  4/1998
125
126 * Warn if local var name matches dictionary, : foo { count -- } ;
127 * TO -> and +-> now parse input stream. No longer use to-flag.
128 * TO -> and +-> now give error if used with non-immediate word.
129 * Added (FLITERAL) support to SEE.
130 * Aded TRACE facility for single step debugging of Forth words.
131 * Added stub for ?TERMINAL and KEY? for embedded systems.
132 * Added PF_NO_GLOBAL_INIT for no reliance on global initialization.
133 * Added PF_USER_FLOAT for customization of FP support.
134 * Added floating point to string conversion words (F.) (FS.) (FE.)
135         For example:   : F.   (F.)  TYPE  SPACE  ;
136 * Reversed order that values are placed on return stack in 2>R
137       so that it matches ANS standard.  2>R is now same as SWAP >R >R
138       Thank you Leo Wong for reporting this bug.
139
140 * Added PF_USER_INIT and PF_USER_TERM for user definable init and term calls.
141
142 * FIXED memory leak in pfDoForth()
143
144 ## V18
145
146 * Make FILL a 'C' primitive.
147 * optimized locals with (1_LOCAL@)
148 * optimized inner interpreter by 15%
149 * fix tester.fth failures
150 * Added define for PF_KEY_ECHOS which turns off echo in ACCEPT if defined.
151 * Fixed MARKER. Was equivalent to ANEW instead of proper ANS definition.
152 * Fixed saving and restoring of TIB when nesting include files.
153
154 ## V17
155
156 * Fixed input of large floats.  0.7071234567 F.  used to fail.
157
158 ## V16
159
160 * Define PF_USER_CUSTOM if you are defining your own custom 'C' glue routines.  This will ifndef the published example.
161 * Fixed warning in pf_cglue.c.
162 * Fixed SDAD in savedicd.fth.  It used to generate bogus 'C' code
163       if called when (BASE != 10), as in HEX mode.
164 * Fixed address comparisons in forget.fth and private.fth for
165       addresses above 0x80000000. Must be unsigned.
166 * Call FREEZE at end of system.fth to initialize rfence.
167 * Fixed 0.0 F. which used to leave 0.0 on FP stack.
168 * Added FPICK ( n -- ) ( i*f -- i*f f[n] )
169 * .S now prints hex numbers as unsigned.
170 * Fixed internal number to text conversion for unsigned nums.
171
172 ## V15 - 2/15/97
173
174 * If you use PF_USER_FILEIO, you must now define PF_STDIN and PF_STDOUT among other additions. See "pf_io.h".
175 * COMPARE now matches ANS STRING word set!
176 * Added PF_USER_INC1 and PF_USER_INC2 for optional includes and host customization. See "pf_all.h".
177 * Fixed more warnings.
178 * Fixed >NAME and WORDS for systems with high "negative" addresses.
179 * Added WORDS.LIKE utility.  Enter:   WORDS.LIKE EMIT
180 * Added stack check after every word in high level interpreter.
181       Enter QUIT to enter high level interpreter which uses this feature.
182 * THROW will no longer crash if not using high level interpreter.
183 * Isolated all host dependencies into "pf_unix.h", "pf_win32.h",
184       "pf_mac.h", etc.  See "pf_all.h".
185 * Added tests for CORE EXT, STRINGS words sets.
186 * Added SEARCH
187 * Fixed WHILE and REPEAT for multiple WHILEs.
188 * Fixed .( ) for empty strings.
189 * Fixed FATAN2 which could not compile on some systems (Linux gcc).
190
191 ## V14 - 12/23/96
192 * pforth command now requires -d before dictionary name.
193             Eg.   pforth -dcustom.dic test.fth
194 * PF_USER_* now need to be defined as include file names.
195 * PF_USER_CHARIO now requires different functions to be defined.
196         See "csrc/pf_io.h".
197 * Moved pfDoForth() from pf_main.c to pf_core.c to simplify
198       file with main().
199 * Fix build with PF_NO_INIT
200 * Makefile now has target for embedded dictionary, "gmake pfemb".
201
202 ## V13 - 12/15/9
203
204 * Add "extern 'C' {" to pf_mem.h for C++
205 * Separate PF_STATIC_DIC from PF_NO_FILEIO so that we can use a static
206       dictionary but also have file I/O.
207 * Added PF_USER_FILEIO, PF_USER_CHARIO, PF_USER_CLIB.
208 * INCLUDE now aborts if file not found.
209 * Add +-> which allows you to add to a local variable, like +! .
210 * VALUE now works properly as a self fetching constant.
211 * Add CODE-SIZE and HEADERS-SIZE which lets you resize
212       dictionary saved using SAVE-FORTH.
213 * Added FILE?. Enter "FILE? THEN" to see what files THEN is defined in.
214 * Fixed bug in local variables that caused problems if compilation
215       aborted in a word with local variables.
216 * Added SEE which "disassembles" Forth words. See "see.fth".
217 * Added PRIVATE{ which can be used to hide low level support
218       words.  See "private.fth".
219
220 ## V12 - 12/1/96
221
222 * Advance pointers in pfCopyMemory() and pfSetMemory()
223       to fix PF_NO_CLIB build.
224 * Increase size of array for PF_NO_MALLOC
225 * Eliminate many warnings involving type casts and (const char *)
226 * Fix error recovery in dictionary creation.
227 * Conditionally eliminate some include files for embedded builds.
228 * Cleanup some test files.
229
230 ## V11 - 11/14/96
231
232 * Added support for AUTO.INIT and AUTO.TERM.  These are called
233       automagically when the Forth starts and quits.
234 * Change all int to int32.
235 * Changed DO LOOP to ?DO LOOP in ENDCASE and LV.MATCH
236       to fix hang when zero local variables.
237 * Align long word members in :STRUCT to avoid bus errors.
238
239 ## V10 - 3/21/96
240
241 * Close nested source files when INCLUDE aborts.
242 * Add PF_NO_CLIB option to reduce OS dependencies.
243 * Add CREATE-FILE, fix R/W access mode for OPEN-FILE.
244 * Use PF_FLOAT instead of FLOAT to avoid DOS problem.
245 * Add PF_HOST_DOS for compilation control.
246 * Shorten all long file names to fit in the 8.3 format
247       required by some primitive operating systems. My
248       apologies to those with modern computers who suffer
249       as a result.  ;-)
250
251 ## V9 - 10/13/95
252
253 * Cleaned up and documented for alpha release.
254 * Added EXISTS?
255 * compile floats.fth if F* exists
256 * got PF_NO_SHELL working
257 * added TURNKEY to build headerless dictionary apps
258 * improved release script and rlsMakefile
259 * added FS@ and FS! for FLPT structure members
260
261 ## V8 - 5/1/95
262
263 * Report line number and line dump when INCLUDE aborts
264 * Abort if stack depth changes in colon definition. Helps
265       detect unbalanced conditionals (IF without THEN).
266 * Print bytes added by include.  Helps determine current file.
267 * Added RETURN-CODE which is returned to caller, eg. UNIX shell.
268 * Changed Header and Code sizes to 60000 and 150000
269 * Added check for overflowing dictionary when creating secondaries.
270
271 ## V8 - 5/1/95
272
273 * Report line number and line dump when INCLUDE aborts
274 * Abort if stack depth changes in colon definition. Helps
275       detect unbalanced conditionals (IF without THEN).
276 * Print bytes added by include.  Helps determine current file.
277 * Added RETURN-CODE which is returned to caller, eg. UNIX shell.
278 * Changed Header and Code sizes to 60000 and 150000
279 * Added check for overflowing dictionary when creating secondaries.
280
281 ## V7 - 4/12/95
282
283 * Converted to 3DO Teamware environment
284 * Added conditional compiler [IF] [ELSE] [THEN], use like #if
285 * Fixed W->S B->S for positive values
286 * Fixed ALLOCATE FREE validation.  Was failing on some 'C' compilers.
287 * Added FILE-SIZE
288 * Fixed ERASE, now fills with zero instead of BL
289
290 ## V6 - 3/16/95
291
292 * Added floating point
293 * Changed NUMBER? to return a numeric type
294 * Support double number entry, eg.   234.  -> 234 0
295
296 ## V5 - 3/9/95
297
298 * Added pfReportError()
299 * Fixed problem with NumPrimitives growing and breaking dictionaries
300 * Reduced size of saved dictionaries, 198K -> 28K in one instance
301 * Funnel all terminal I/O through ioKey() and ioEmit()
302 * Removed dependencies on printf() except for debugging
303
304 ## V4 - 3/6/95
305
306 * Added smart conditionals to allow IF THEN DO LOOP etc.
307       outside colon definitions.
308 * Fixed RSHIFT, made logical.
309 * Added ARSHIFT for arithmetic shift.
310 * Added proper M*
311 * Added <> U> U<
312 * Added FM/MOD SM/REM /MOD MOD */ */MOD
313 * Added +LOOP EVALUATE UNLOOP EXIT
314 * Everything passes "coretest.fth" except UM/MOD FIND and WORD
315
316 ## V3 - 3/1/95
317
318 * Added support for embedded systems: PF_NO_FILEIO
319     and PF_NO_MALLOC.
320 * Fixed bug in dictionary loader that treated HERE as name relative.
321
322 ## V2 - 8/94
323
324 * made improvements necessary for use with M2 Verilog testing
325
326 ## V1 - 5/94
327
328 * built pForth from my Forth used in HMSL
329
330 ----------------------------------------------------------
331
332
333 Enjoy,
334 Phil Burk