-
-
Notifications
You must be signed in to change notification settings - Fork 55
/
Copy pathHISTORY
3511 lines (2783 loc) · 166 KB
/
HISTORY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
2025-01-25: release 3.2b (Android and iOS)
* More keyboard fixes.
2025-01-24: release 3.2a (Android only)
* Pop-up keyboard typing fixes.
2025-01-23: release 3.2
* Program locking, to prevent accidental editing of programs. This is done
using the LOCK and UNLOCK functions. See the Free42 web site for details.
* Improved display contrast in the built-in skins.
* Android and iOS versions: Pop-up ALPHA keyboard, for easier text entry.
* Linux version: Dark Mode support.
2025-01-01: release 3.1.12b (Android only)
* Rolling back the beeper fix from the previous release. It was not performing
as intended. Back to the drawing board.
2024-12-28: release 3.1.12a (Android only)
* Made TONE and BEEP play audio asynchronously. This should fix the occasional
crashes caused by those functions hogging the UI too long.
2024-12-22: release 3.1.12
* Fixed pasting of GETMI, PUTMI, GETLI, and PUTLI.
2024-12-13: release 3.1.11
* Added option to show the active keyboard map superimposed on the skin. The
desktop versions have this in the Help menu, and the mobile versions have it
in the About dialog.
* Added functions for direct access to matrix and list elements: GETMI, PUTMI,
GETLI, and PUTLI. See the Free42 web site for details.
* iOS and MacOS versions: Improved Dark Mode support.
2024-11-14: release 3.1.10
* Now pre-populating state name for States -> More -> Rename.
2024-10-27: release 3.1.9
* Implemented GETKEYA. This works like GETKEY, except that it will not wait for
a keystroke if no keystrokes are in the keyboard queue, returning 0 instead
in that case.
* Android version: Fixed crash with relative file imports.
2024-05-28: release 3.1.8b (Android only)
* Fixed crash for certain unrecognized key codes from Bluetooth keyboards.
2024-05-15: release 3.1.8a (Android, iOS, and MacOS)
* PSE could halt program execution if it was used right after TONE or BEEP.
Fixed.
2024-04-24: release 3.1.8
* Fixed ALPHA pasting during command entry.
2024-03-30: release 3.1.7
* Now recognizing comment delimiters '@' and ';' for program pasting.
* More accurate complex ASIN/ASINH.
2024-03-26: release 3.1.6
* Accuracy improvements for C.LN1+X, and complex LN, ATAN, and ATANH.
2024-03-22: release 3.1.5b (iOS, Windows, and MacOS)
* Windows version: Fixed display flicker using buffered painting.
* iOS and MacOS versions: Changed skin loader to use WKWebView.
2024-03-21: release 3.1.5a (Windows only)
* Reduced display blurriness when the main window is resized.
2024-03-07: release 3.1.5
* Direct command mapping now supports alternate mappings for ALPHA mode.
* Windows version: Fixed a couple of display glitches.
2024-03-04: release 3.1.4g (Windows, MacOS, and Linux)
* Windows, MacOS, and Linux versions: Constraining print-out window height to
multiples of 18 pixels, that is, to a whole number of lines.
* Windows version: Fixed skin rendering problem in Windows Vista.
* Linux version: Fixed a few bugs related to main window resizing.
2024-03-01: release 3.1.4f (Linux only)
* Resizable main window.
* Ctrl-D shortcut for Clear Print-Out.
2024-02-28: release 3.1.4e (iOS, Windows, and MacOS)
* iOS version: Fixed crash when sharing on iPad.
* Windows version: Σ+ looked like it was pressed at startup. Fixed.
* MacOS version: Fixed crash when making the main window too small.
2024-02-26: release 3.1.4d (Windows only)
* Resizable main window.
* Ctrl-D shortcut for Clear Print-Out.
2024-02-21: release 3.1.4c (MacOS only)
* Resizable main window.
* Command-D shortcut for Clear Print-Out.
2024-02-14: release 3.1.4b (iOS only)
* iPad support.
2024-02-09: release 3.1.4a (Android only)
* Fixed Alt-key handling.
2024-02-09: release 3.1.4
* Keyboard mapping fixes.
* Android version: Support for external keyboards.
* Linux version: Changed ALSA device from "plughw:0,0" to "default".
2024-01-24: release 3.1.3a (Android only)
* Fixed crash in File Management Menu.
* Fixed crash when importing or exporting to cloud storage.
2024-01-17: release 3.1.3
* Added C.LN1+X and C.E^X-1 functions. These are complex-capable versions of
LN1+X and E^X-1.
* Fixed pasting of strings that start with E.
* Binary version: When converting binary to decimal, only use 17 digits when
actually needed. This prevents 0.1 from turning into 1.0000000000000001e-1,
for example.
* iOS version: Support for external keyboards.
2023-12-18: release 3.1.2b (Android only)
* Fixed file access for Android >= 11.
2023-12-12: release 3.1.2a (iOS and MacOS)
* Fixed crash when loading skin images with local colormaps, caused by a bug in
Xcode 15.
2023-12-01: release 3.1.2
* CSLD? did not handle intervening XEQ/RTN. Fixed.
* FUNC did not detect previous FUNC/LNSTK/L4STK. Fixed.
2023-11-29: release 3.1.1
* In the matrix / list editor (EDIT and EDITN), GOTO would prompt for a column
even when editing a list, and any column number other than 1 would cause an
error. Lists are one-dimensional, so the user should only be asked for a row.
Fixed.
* iOS and MacOS versions: ASSIGN "" didn't work, because the second ENTER
wasn't being handled correctly. This was caused by an optimizer bug in
Apple's latest compiler. Fixed.
2023-11-15: release 3.1
* EDIT, EDITN, and INDEX now support editing lists, nested lists, empty lists,
and matrices within lists. See the Free42 web site for details.
* FUNC now hides the caller's RPN stack, so user-defined functions can use
functions like CLST and R↓ without causing side effects.
* User-defined functions can now be made to support 'stack lift disable'
properly. For functions using FUNC, this happens automatically, and other
functions can use the new CSLD? function (Caller's Stack Lift Disabled?).
* FNRM and UVEC, when called with very large parameters, could get incorrect
results due to overflows in intermediaries. Fixed.
* Fixed parameter bounds check in PIXEL.
* Windows, MacOS, and Linux versions: Keyboard maps now support separate
mappings for unshifted and shifted numeric keypad keys, and unshifted and
shifted Space.
2023-08-11: release 3.0.21
* INPUT would crash if R/S was pressed while the stack was empty, in NSTK mode.
Fixed.
* ANUM would consider a decimal point or comma by itself as zero, instead of
ignoring it. Fixed.
* EDIT, EDITN, and INDEX didn't clear flags 76 and 77 (matrix edge wrap and end
wrap), while they should. Fixed.
* Decimal version: In HMS+ and HMS-, fixed handling of cases where either or
both of the arguments has a number of minutes or seconds >= 60. (The binary
version did not have this bug.)
* Binary version: max digits for SHOW increased to 17. This was necessary
because 16 digits was actually never enough to begin with. For example, 5 1/X
and 5 SQRT X^2 1/X both returned a result that looked like 0.2 in SHOW, even
though they are different, as can be easily verified with X=Y? or by
subtracting them. It takes 17 decimal digits to ensure that different binary
numbers will always be rendered as different decimal numbers.
2023-04-19: release 3.0.20
* Changed Σ+/Σ- so that, in NSTK mode, they will accept a single real argument,
assuming Y=0 in that case.
* Tuned TONE frequencies to A440 scale.
2023-04-10: release 3.0.19a (iOS and MacOS)
* Copy in PRGM mode was dropping line 01, because of an optimizer bug in the
latest compiler. Reduced optimization level from -Os to -O1 to work around
this problem.
2023-04-05: release 3.0.19
* Fixed crash in RTNERR when switching back to NSTK mode after FUNC/L4STK.
* Fixed ASSIGN "" in programs.
* Added PRREG to the PRINT menu.
* NN→S now ignores the display mode and always acts like ALL mode is active.
The idea being that if you care about the display mode, you'll probably be
using N→S, and you only need NN→S if you specifically want to see full
internal precision.
2023-03-17: release 3.0.18
* EDIT, EDITN, and INDEX now support lists, acting like they are 1-column
matrices. (Empty lists are not supported, they must have at least one
element. This limitation will be removed in a future release. Note that you
can create a new 1-element list by simply doing NEWLIST 0 +.)
This includes STOIJ, RCLIJ, STOEL, RCLEL, I+, I-, J+, J-, ←, ↑, ↓, →, INSR,
DELR, and DIM.
* Added PRREG. Because PRV "REGS" is not a good substitute.
* Added NN→S. This works like N→S (convert number to string on the stack), but
without the 12-digit mantissa length limit, so you get full precision in ALL
mode.
* Fixed stack lift handling in DELR and STOFLAG.
* Fixed pasting 1/X, 10^X, and 4STK, when pasted without line number and with
trailing space.
2022-12-14: release 3.0.17
* Fixed a couple of bugs in Paste of scalars in BINM, OCTM, and HEXM modes.
* Fixed pasting of U+22A2 and U+22A6 ('append' characters used by i41CX and
Emu42).
2022-10-29: release 3.0.16
* SOLVE does a better job of reporting Sign Reversal when a function changes
sign around a vertical asymptote, instead of reporting it as a root.
* BASE: complex numbers were being copied in non-decimal bases in some cases.
* Better OCTM handling in SHOW.
* Fixed number entry in PRGM mode when BINM/OCTM/HEXM active.
* No longer setting flag 22 if number entry ends with DROP in NSTK mode.
* Added WIDTH and HEIGHT to CATALOG->MISC; moved A...F from CATALOG->MISC to
CATALOG->BASE.
2022-10-01: release 3.0.15
* Fixed crash in SHOW for certain complex numbers.
* Added A...F function. This allows programs to turn on HEXM mode with the
A...F menu activated.
* iOS version: Added Calculator / Print-Out swipe direction configuration
option to Preferences.
* Android, iOS, and MacOS ARM versions: Fixed incorrect Out of Range error
returned by BASE functions in certain cases, e.g. BRESET 64 WSIZE 1 ENTER
BASE÷.
2022-08-13: release 3.0.14
* Fixed (re,im) complex pasting. This was broken by localized copy & paste.
* Special cases for pure real and pure imaginary in SQRT.
2022-06-18: release 3.0.13a (iOS and MacOS)
* Fixed skin rendering for iOS 16 and MacOS 13.
2022-06-16: release 3.0.13
* Fixed handling of invalid number keys in BINM and OCTM modes.
* Windows and Linux versions: Fixed handling of non-ASCII separator characters.
2022-06-14: release 3.0.12
* Localized Copy & Paste.
* More accurate complex ACOS and ACOSH.
* SOLVE now handles functions that are always positive or always negative a bit
better, reporting Extremum when the iteration appears to be bouncing around
without improving, instead of continuing indefinitely.
* Added XVIEW function. This works like AVIEW, except it takes the string from
the X register instead of ALPHA, so it avoids the 44-character length limit.
* Android version: Now removes itself from the task list if exited using OFF.
2022-05-05: release 3.0.11a (Windows and Linux)
* More efficient display updating, so long-running programs that update the
display a lot don't waste a lot of CPU time repainting the display faster
than the human eye can see, and spend more time actually running the program
instead. Note that this update is for Windows and Linux only, because the
Android, iOS, and MacOS versions already worked this way.
2022-05-01: release 3.0.11
* Implemented LCLV: CLV for local variables only. The regular CLV now works on
global variables only.
* RND in ALL mode now rounds like in SCI 11, instead of doing nothing.
* HEAD, when applied to a string in a numbered register, would corrupt the
string if it was 16 characters long before the call (8 characters in the
binary version). Fixed.
* Y^X accuracy improvements with integer X.
* Fixed DUPN 2 in 4STK mode. It used to duplicate X into T and Y into Z.
DUPN in NSTK mode was not affected by this bug.
* Added WIDTH and HEIGHT functions. These always return 131 and 16,
respectively; this may not seem very useful, but can be used in programs that
are meant to work in both Free42 and Plus42, to allow them to take advantage
of the larger display when running in Plus42.
* L4STK didn't pad the stack to 4 levels when used without FUNC. Fixed.
* Binary version: ROTXY and DATE+ rounded toward negative infinity instead of
rounding toward zero. Fixed.
* Windows version: comes in 64-bit and 32-bit versions now.
* Windows and Linux versions: Now support fractional display scaling.
2022-01-27: release 3.0.10
* Added →LIST, LIST→, SKIP, CPXMAT?, and TYPE? functions, and changed the name
of PRMVAR to PGMVAR. See the Free42 web site for details.
* INPUT caused incorrect printer output in NORM and TRACE modes. Fixed.
* Escape sequences for undefined characters in Copy and Paste and printer
output.
* When the Y register contains a string or list, in RUN mode, the + key now
performs APPEND.
2021-12-29: release 3.0.9a (Windows only)
* Fixed crash when launching without state
2021-12-26: release 3.0.9
* Fixed handling of single-character strings in programs.
This was broken in the previous release.
2021-12-23: release 3.0.8
* Auto-repeat for XSTR, and ALPHA arguments in general.
* Windows, MacOS, and Linux versions: Keyboard mapping for CursorLeft to ←,
Shift-CursorLeft to <← and ↑, CursorRight to →, Shift-CursorRight to →> and
↓, and Delete to DEL, in menus.
* Android version: Fixed blurry print-out on certain devices.
2021-11-07: release 3.0.7
* A2LINE now handles strings that start with characters 127-255 in a more
sensible manner. Also, added A2+LINE function for generating appended
strings, since the old trick of using a string starting with character 127 no
longer works.
* More accurate complex TAN and TANH.
* RND did not handle large numbers correctly, failing to round off as many
digits as necessary in certain cases. Fixed.
* Σ+ and Σ- always wanted two arguments, even in NSTK mode, when X contained a
real matrix. Fixed.
* Copy and Paste now handle list objects.
2021-07-27: release 3.0.6
* Added string and list functions. See the Free42 web site for details.
* Added lowercase letters to the menu font.
2021-07-01: release 3.0.5
* L4STK could crash, due to an incorrect LNSTK fix in 3.0.2. Fixed.
* Fixed a couple of skin macro bugs: Failure to start program execution when
EXIT was pressed during VARMNU1, and UI freeze when starting program
execution in some cases.
2021-06-10: release 3.0.4
* Fixed bug in complex LU decomposition, which could lead to incorrect results
in INVRT, DET, and matrix division with complex matrices.
* FUNC and RTN now save and restore ERRMSG and ERRNO along with flag 25.
* Added RCOMPLX and PCOMPLX functions. These work like COMPLEX, except they
ignore flag 73 (POLAR mode) and instead always assume rectangular or polar
mode, respectively.
Also modified X2LINE so it uses RCOMPLX instead of COMPLEX when generating
program lines for complex numbers, so the generated code is correct
regardless of RECT/POLAR mode.
* MENU and VARMNU1 tweaks: The programmable menu is now cancelled whenever an
operation is performed that clears the RTN stack, such as BST, or GTO in RUN
mode. And in VARMNU1, don't trap EXIT when the menu was activated in RUN
mode, or when an operation was performed that cleared the RTN stack.
* Binary version: Fixed WSIZE to allow word size of 53.
* Paste fixes: In PRGM and ALPHA modes, Paste now clears any messages that may
have been left in the display from previous operations. (In RUN mode, this
was already the case.) Also, Paste now sets flag 22 when pasting real or
complex scalars into X, and sets flag 23 when pasting in ALPHA mode.
2021-04-28: release 3.0.3
* Implemented VARMNU1. This is a variation on VARMENU, with two differences: It
allows selecting a variable without having to press its menu button twice;
and it catches EXIT, performing CLA RUN when it is pressed.
* Implemented X2LINE and A2LINE functions. These non-programmable functions
create program lines containing the current contents of the X or ALPHA
registers, respectively.
* When INDEX or EDITN are performed on a local matrix, while another matrix is
already indexed, the IJ pointers are saved, and restored when the current
function returns.
* RTNERR now accepts a string instead of a numeric argument, so functions can
raise error messages other than the eight standard ones.
* Implemented ERRNO and ERRMSG functions. These return the error number and
error message, respectively, for the last error caught by flag 25.
* Implemented XSTR function, for creating strings directly in the X register.
* Fixed memory leak in the parameterized comparison functions.
2021-03-29: release 3.0.2
* Fixed possible stack corruption or crash due to LNSTK, when big stack mode is
already active.
* Fixed DROPN crash in 4STK mode.
* Fixed matrix editor's GOTO Row/Column when stack empty (big stack mode).
* Fixed bounds check bug in AGRAPH. This could cause nothing to be drawn when
the pattern was one pixel from being entirely off-screen.
* Android version: Fixed filesystem access in Android 10.
2021-03-04: release 3.0.1
* Implemented a work-around for a bug in the decimal floating-point library
that could cause inaccurate results for several complex functions.
* Implemented PRMVAR function. This prints all the variables associated with
the given LBL through MVAR declarations.
* Implemented new comparison functions, for comparing arbitrary arguments to X
or to zero: X=?, X<?, 0=?, etc.
* Added error number 8 to RTNERR, to allow user-defined functions to raise the
Too Few Arguments error condition.
* RTN from the keyboard, and other actions that cause the RTN stack to be
cleared, now restore the stack mode if it had been changed locally using
LNSTK or L4STK.
* Windows version: Fixed a bug that could cause programs with many ALPHA labels
to show up as blank lines in the Export Programs dialog.
2021-02-22: release 3.0
* Added dynamic stack option. See the Free42 web site for details.
* Added the date and time format options to the MODES menu.
* Changed the RTNERR function to take the error number from a parameter, rather
than from the X register. To prevent existing programs using the old
parameter-less RTNERR from breaking, those RTNERRs are converted to the
equivalent new instruction, RTNERR IND ST X.
* Added PGMMENU function. This shows a menu of ALPHA labels with MVAR
instructions, like the top-level menu presented by SOLVER and ∫f(x). It is
meant to be used by programs that aim to implement a similar behavior as
those built-in menus.
* On cold start, now setting the date and time format according to the host
operating system's locale settings.
* The Free42 extensions to the HP-42S instruction set are now shown in separate
sections in CATALOG, rather than at the end of the FCN catalog.
* Added STRACE option to PRINT menu. This is the "Stack trace" option, i.e.
TRACE mode where the entire stack gets printed, not just X. The option itself
is not new, it was implemented in 2.5.21, but the STRACE function, that
allows you to set that mode without having to twiddle flags, is new.
2021-02-02: release 2.5.25
* Fixed pasting of zero. This was broken in 2.5.21.
2021-01-17: release 2.5.24a (Android only)
* Fixed screen rotation issue with Android 11.
2021-01-13: release 2.5.24
* Improved user-defined function support. The changes are rather substantial;
please check the Free42 web site for details.
* The previous release introduced a bug when pasting a program without line
numbers, causing numbers to be mangled. Fixed.
2021-01-06: release 2.5.23
* Implemented support for user-defined function semantics: stack preservation,
RTN with skip, RTN with error. See the Free42 web site for details.
* Better handling of number lines: the visual difference between equivalent
representations of a number is now preserved, so 1000 stays 1000 and is not
turned into 1E3, and numbers that are out of range for the current platform
now cause an error message instead of being silently turned into the maximum
representable number or zero.
* Implemented FMA (Fused Multiply-Add). This simply exposes the underlying FMA
function provided by the floating-point hardware or libraries.
* In programs, now handles pasting FIX/SCI/ENG with 1-digit argument, for HP-41
compatibility.
2020-11-24: release 2.5.22a (Android only)
* The previous release was crashing on a lot of devices; apparently the NDK
version I used to build it, r21b, is incompatible with certain older devices.
Going back to r19c for now.
2020-11-23: release 2.5.22
* Minor UI fixes and improvements: 'Close' menu item (Mac), Copy and Paste in
dialogs (Mac), Unicode support in file names (Windows), and pre-populating
file names in file selection dialogs (all versions).
* Implemented LASTO. This is related to LSTO like ASTO is related to STO.
* Implemented No-Operation (NOP) function. This function does nothing, as its
name suggests, and can be useful when using ISG for counting without an upper
bound, for instance. The function is encoded using the 0xF0 opcode, which is
sometimes used on the HP-41 for the same purpose.
* On the real HP-42S, GETKEY halts program execution when R/S, EXIT, or Shift-
EXIT are pressed. In Free42, however, Shift-EXIT did not cause program
execution to halt. Fixed.
* Implemented GETKEY1 function. This works like the regular GETKEY, except it
only halts on R/S, allowing programs to implement custom behaviors for EXIT
and Shift-EXIT.
* STOFLAG didn't update the G and RAD annunciators when flags 42 or 43 were
changed. Fixed.
* Implemented range option for STOFLAG: with the flags in Y and a number bb.ee
in X, only flags bb through ee are restored, while the others are untouched.
If ee is zero, only flag bb is restored. This mode of operation exists in the
HP-41 Extended Functions module and in the HP-41CX, but was missing in the
Free42 implementation.
* Binary version: Changed maximum WSIZE from 52 to 53.
* MacOS version: Building universal binary now, with Intel and ARM (Apple
Silicon) support.
* iOS version: Fixed crash when saving print-out using Share -> Save Image.
2020-10-24: release 2.5.21
* Implemented ANUM, X<>F, RCLFLAG, and STOFLAG functions. See the Free42 web
site for details.
* Implemented "stack trace" mode: when flags 15 and 16 are both set, the
printer prints in a variation of TRACE mode, printing not just X after every
instruction, but the entire stack.
* Pasting long numbers could return incorrect results if many leading zeroes
were present. Fixed.
* Real/complex and complex/complex division could return Not a Number for
certain inputs, e.g. 1e3200 ENTER COMPLEX ENTER /. Fixed. Also applied a
similar fix to complex 1/X.
* Complex matrix division, INVRT, and DET would return incorrect results for
large matrices (20x20 or greater). Fixed.
2020-09-20: release 2.5.20
* Fixed INTEG behavior when integrand returns non-real. It used to treat such
results as zero while it should raise an error instead.
* Fixed DATE+, DDAYS, and DOW when flags 31 and 67 are both set.
This combination of flags is never set by the DMY, MDY, and YMD functions,
but it can happen when you execute YMD followed by SF 31.
* Fixed garbage in SHOW when BIN overflows to HEX.
* During TRACE, print blank line before LBL, like the HP-41.
* When ISG reached zero, the loop control variable would end up having the
wrong sign. For example, -1.00001 ISG ST X => -0.00001, should be 0.00001.
Fixed.
* Added [FIND], [MAX], and [MIN] to the FCN catalog. These are undocumented
functions from the HP-42S that were previously not shown in the catalog, even
though they did work.
* COMB could return Out of Range in certain cases where the correct result was
not, in fact, out of range. For example, 20408 ENTER 10204 COMB.
* ISG and DSE with a named variable would crash if that variable did not exist.
Fixed.
2020-07-05: release 2.5.19
* Fixed stack lift behavior with GETKEY.
2020-04-11: release 2.5.18
* Fixed pasting of 1/X and 10^X without line number.
* Android version: Updated HEADING implementation so it works on phones that no
longer provide the old compass API.
* iOS version: Fixed double-import, when loading Shared files.
2020-02-27: release 2.5.17b (Android only)
* Removing the n-key rollover and swipe-to-switch that were introduced in the
previous release; 2.5.17a suffers from missed keystrokes and erratic swipe
detection, caused by the new logic. Since I appear to be unable to do proper
testing on these features with my own phone, I am scrapping them and have no
plans to re-introduce them. (I am not removing them from the iOS version,
since they appear to be working fine there.)
2020-02-22: release 2.5.17a (Android and iOS)
* Android version: Can now switch between the calculator and print-out by
swiping sideways. This feature is experimental and may not work on all
phones.
* Android version: Implemented n-key rollover.
* iOS version: Fixed initial print-out scroll position. Version 2.5.17
introduced a bug where it would not scroll all the way to the bottom
initially.
2020-02-13: release 2.5.17 (iOS, Windows, MacOS, and Linux)
* Fixed minor memory leak in Paste.
* iOS version: Implemented n-key rollover.
* iOS version: Fixed several minor bugs and inconsistencies in landscape mode.
* iOS and MacOS versions: Print-out now grows from the top down, rather than
from the bottom up, to be consistent with these types of UIs in general, and
specifically with Free42 on other platforms.
2020-02-08: release 2.5.16b (iOS only)
* Can now switch between the calculator and print-out by swiping sideways.
2020-02-02: release 2.5.16a (iOS only)
* Fixed file import from the Files app.
2020-01-25: release 2.5.16
* Fixed GETKEY behavior with skins that use direct command mapping.
* Fixed GETKEY behavior with physical keyboards in ALPHA mode.
2020-01-18: release 2.5.15
* Some fixes to Paste to improve compatibility with Emu42 text.
* Fixed Skin menu behavior: user-loaded skins now take priority over built-in
ones, and built-in skins that are overridden by user-loaded ones are now
shown grayed out in the menu.
* Linux version: Implemented XDG Base Directory Specification compliance:
Moved Free42 directory from $HOME/.free42 to $XDG_DATA_HOME/free42, or
$HOME/.local/share/free42 in case XDG_DATA_HOME is unset or empty.
Also, now looking for skins in free42 and free42/shared under $XDG_DATA_DIRS,
or under /usr/local/share:/usr/share if XDG_DATA_DIRS is unset or empty.
Skins will also still be looked for in the Free42 directory.
2020-01-11: release 2.5.14
* Some fixes to Paste to improve compatibility with HP-41 text.
2020-01-11: release 2.5.13a (Linux only)
* Another thin-dark-line fix, this time for GDK_SCALE > 1 on certain platforms,
including Raspbian 10.
2020-01-09: release 2.5.13
* When REGS was shared, ASTO nn could store the character data into the wrong
copy of the matrix. Fixed.
2020-01-07: release 2.5.12c (Linux only)
* When the print-out area was still growing, i.e. hadn't reached its maximum
height of 30,000 pixels yet, it was not being repainted in a timely manner.
Bug introduced by the switch to GTK 3; did not affect early GTK 3 versions
but became apparent in Ubuntu 18.04 and 19.10. Fixed.
2020-01-03: release 2.5.12b (Linux only)
* Made repaint logic more efficient, also making it work under Wayland.
2019-12-01: release 2.5.12a (Linux only)
* In scaled mode (GDK_SCALE greater than 1), bitmap smoothing causes drawing of
the display bitmap to bleed outside the display rectangle, and this can lead
to thin dark lines being left behind around the display, and that looks ugly.
A similar problem exists in the Android version, and I implemented a similar
fix here, namely, to always repaint the entire display when the core updates
it, and to update a slightly larger rectangle than the display itself.
Because this fix can cause programs to run slower on older systems, I added
an option to Preferences to switch back to using the old logic.
2019-11-28: release 2.5.12 (Windows and Linux)
* Linux version: Switched from GTK 2 to 3, for HiDPI support.
* Windows and Linux versions: Removed the "Single Instance" option. Both now
always run in Single Instance mode; what was removed was the possibility to
turn *off* Single Instance and allow multiple instances to run concurrently.
That never worked well, and in the Windows version, there was never any
reason to allow it. In the Linux version, there was a reason, which was that
Single Instance was hard to implement and did not work well in all
environments; with GTK 3, Single Instance is supported by the platform, and
there is no longer any reason not to use it.
2019-10-25: release 2.5.11
* Windows version: Program export in "raw" format performed LF-to-CRLF
translation on the output file, turning XEQ 10 into XEQ 13 LBL 09, among
other things. Bug introduced in 2.5.
* Decimal version: During number entry, if you backspaced over a negative
number until only the minus sign remained, that minus would not be parsed
correctly, and you could get <Not a Number>. For example, 1 +/- <- ENTER.
2019-10-11: release 2.5.10
* The index range check in R<>R was faulty, allowing a row index equal to the
number of rows plus one to be used, which in turn would cause memory
corruption. Fixed.
* Android version: When renaming the currently active state, the state name was
not updated in the shell settings, with the result that upon exit, the state
would still be saved under the old name, and at the next launch, would also
be loaded under the old name. The net effect of all this was that instead of
ending up with a renamed state, you'd end up with a copy.
2019-10-05: release 2.5.9b (Android and iOS)
* Android version: Could launch with the wrong screen orientation under certain
circumstances. Fixed.
* iOS version: Greater range of key click volume levels.
* iOS version: Added sanity check for raw files imported using Copy to Free42.
2019-09-28: release 2.5.9a (Android only)
* Several changes in file handling. No longer associates itself with all files,
so Free42 won't be offered to open files of any types other than raw and f42.
Unfortunately, this also means that opening f42 files directly from email
attachments no longer works; state files will now need to be downloaded, then
opened using the file selection boxes, using More -> Import in the States
view. Cumbersome, but it's the best I can do given Android's lack of file
extension filtering for email attachments.
* Added a slider for the key click volume; now offers nine levels plus silence.
* Changed the haptic feedback slider to a logarithmic scale, adding a lot more
resolution to the weaker end of the scale, for those with devices that are
capable of it and fingers sensitive enough to feel it.
2019-09-21: release 2.5.9
* Importing programs would insert the programs at the current location, instead
of at the end of memory. Bug introduced in 2.5 or one of the subsequent
revisions. Now fixed.
* iOS version: Added support for Dark Mode in iOS 13.
* Android version: Added file extension filtering for file, http, and https URL
schemes. This should make Free42 not appear in as many file selection
contexts as before, without making it disappear from contexts where it should
be offered as an option. Note: file extension filtering is not supported with
the content scheme, which means Free42 will still show up in all contexts
where attachments are opened, and depending on the file manager used, also
when opening files from file managers.
2019-09-20: release 2.5.8
* When loading a corrupted state file causes a crash, the state file is now
renamed so that it won't be read again, and the app will start with Memory
Clear the next time it is launched, instead of crashing again and again.
* Android and iOS versions: Fixed a couple of import-related crashes.
2019-09-16: release 2.5.7
* SOLVE did not always return the second-best guess in Y. Fixed.
* Android version: Changed haptic feedback preference setting from on/off
switch to a four-level slider, for off/light/medium/heavy feedback.
* Android version: Reduced the GPS update interval for LOCAT from 60 seconds to
5 seconds.
* Android version: Sharing an empty print-out would crash. Fixed; now it pops
up a message instead.
* Android version: Fixed crashes in state file import activity: intents without
data, and SecurityException and UnsupportedOperationException while trying to
get attachment file names.
* iOS version: Changed haptic feedback preference setting from on/off switch to
a four-level slider, for off/light/medium/heavy feedback. Also, changed key
clicks setting from on/off switch to a three-way slider, for off/standard/wav
click sounds, where standard is the old system key click sound, and wav is a
wav file that sounds a bit louder.
* iOS version: Making the single-threaded logic permanent. The complexity of
the multi-threaded event handling logic makes the code too hard to maintain,
while the benefits in terms of performance are marginal. The only noticeable
disadvantage of the single-threaded approach was poor performance in display-
intensive code, and that was mitigated simply by repainting less
aggressively.
* iOS version: Preferences view now expands to fill the width of the screen.
* MacOS version: Making the app single-threaded. This is the same change as in
the iOS version; the aim is to simplify the code, making it more robust,
while sacrificing very little in terms of performance.
2019-09-09: release 2.5.6a (iOS only)
* iOS version: Made the app single-threaded. Interim version, to deal with the
mysterious crashes in [CalcView drawRect:].
2019-09-08: release 2.5.6
* SOLVE would not always return the best function value in Z. Fixed.
* iOS version: There have been crashes occurring in the display update logic,
due to some not yet understood condition that appears to affect faster
iPhones (8, X, XR, XS). I implemented a fix that appears to prevent these,
but at a cost in terms of performance, i.e. the emulation is a bit slower
now. I'm working on a proper fix, which will eliminate these problems and
restore maximum performance.
2019-09-06: release 2.5.5
* Moved the settings "Singular Matrix Error," "Matrix Out Of Range," and "Auto-
Repeat" from the core state (the *.f42 files) to the shell state, so they are
not affected by switching core states.
* Fixed a bug that caused State File Corrupt when reading a state containing a
zero-length string.
* iOS version: Fixed a couple of bugs that were causing memory and state file
corruption and crashes.
* iOS and MacOS versions: Fixed a couple of bugs that were causing crashes in
the States window.
* Android version: The States window would ask for confirmation to revert the
current state back to the last version saved, even when the user was trying
to switch to a different state. Fixed.
2019-09-02: release 2.5.4 (iOS only)
* Fixed a crash when the States window was opened the very first time the app
was run after a new install.
* Fixed a bug that could cause the hostname lookup for the HTTP Server window
to fail.
2019-09-01: release 2.5.3
* Invalid state files (corrupt, or created by an incompatible newer version of
Free42) are now renamed, so they are not lost when a new state is written,
and can be retrieved for post-mortem analysis.
2019-08-31: release 2.5.2
* In the States window, renamed Reload to Revert, and added a confirmation
dialog, since that is a potentially destructive action.
* When programs were imported from raw files, empty programs were sometimes
being created unnecessarily. Harmless but slightly annoying. Fixed.
* Android and iOS versions: Added "share" option for Print-Out view.
* Android and iOS versions: Added "share" option for programs in raw format.
* Android and iOS versions: Now import raw files directly from email
attachments and web links.
2019-08-28: release 2.5.1
* Fixed bug in 2.5 that caused string elements in real matrices (including the
numbered registers) to be written incorrectly in the state file, leading to
memory corruption and crashes when the state file was read back in.
* iOS version: Now makes sure that the current state shows up in the list in
the States view, even if it is opened right after a fresh install or right
after upgrading from a version before 2.5.
2019-08-25: release 2.5
* Added state file manager, for loading, saving, and switching between,
calculator states. The state files are in a platform-neutral format, so they
can be exchanged between Free42 instances running on different devices.
* Fixed crash in RTN when a local variable was hiding the indexed matrix.
2019-07-12: release 2.4.2
* Windows version: The new Ctrl-A, Ctrl-I, and Ctrl-T shortcuts (Paper Advance,
Copy Print-Out as Image, and Copy Print-Out as Text) didn't work, because I
hadn't updated the corresponding accelerator resources. Fixed.
* Windows and Linux versions: All Ctrl-<Key> shortcuts now work even when the
Print-Out window is on top.
* Android, iOS, and MacOS versions: When loading a skin in the skin browser,
they now force an un-cached load, so skin fixes can actually be loaded by
users without delay, and without having to resort to side-loading.
* Android and iOS versions: Changed default landscape skin, from desktop/42ct
to android/SGS-L. The old skin had keys below the display that didn't line up
with the menus; you really have to have Σ+ 1/x √x LOG LN XEQ
below the display for a consistent user interface.
* iOS version: Changed Standard-X skin, from Ehrling42sl.X to Matt42X. The old
skin was rather blurry; the new skin has nice and crisp text for all key
labels.
2019-07-03: release 2.4.1
* Fixed several bugs in BWRAP mode.
2019-07-01: release 2.4
* Implemented configurable word size for BASE functions (up to 64 bits, or 52
in Free42 Binary), unsigned mode, and wrap mode. The new settings are all in
a new row in the MODES menu.
* Android, iOS, and MacOS versions: Added some feedback in the skin loading
window: the "Load" button changes to "..." while a page load is in progress;
"Load" is enabled only when a GIF or layout file is being displayed, i.e.
something that could actually be a skin, and therefore loadable; and finally,
when Load is pressed to load a skin, an alert box is now shown to report
success or failure.
2019-06-25: release 2.3.1a (Android only)
* Adding -mfpu=vfp to compilation flags when building the Intel library for
armv7. Apparently, with NDK r19c, Neon is enabled by default, but Neon is not
supported on all armv7 Android devices, so this setting is causing 2.3.1 to
crash on certain phones. (2.2.1b and earlier were built with r4b, which did
not have this problem.)
2019-06-25: release 2.3.1
* Android version: Implemented the 2.3 features, with the exception of Copy
Print-Out as Image. (Apparently Android doesn't support images on the
clipboard.)
* MacOS version: Copy Print-Out as Image didn't handle wrap-around in the
image buffer correctly. Fixed.
* Windows and Linux version: Implemented Paper Advance, Copy Print-Out as Text,
and Copy Print-Out as Image.
* iOS version: Fixed the top-of-screen menu trigger so that it no longer
sabotages keys that are also in that area, as in the HP_Mega_42 and SGS-L
skins. This is the same fix I made for Android in release 1.5.8d. I didn't
think to fix this for iOS at the time, probably because the iOS version
didn't support landscape mode then.
2019-06-15: release 2.3.0a (iOS only)
* Added the 2.3 features.
This should have been called version 2.3 as well, but a mistake with the
release build forced me to use the next higher version number instead.
2019-06-12: release 2.3 (MacOS only)
* Added Load Skins feature, for downloading and installing skins from the
Internet.
* Added Delete Skins feature.
* Added Paper Advance for Print-Out window.
* Added Copy Print-Out as Text and Copy Print-Out as Image.
2019-05-29: release 2.2.1d (source code only)
* Migrated the Android project from Eclipse with ADT to Android Studio.
Also building the native code for x86 and x86_64 now. Not sure if I should
release that, but it is convenient for testing in the Android Emulator, now
that Google no longer releases ARM system images for the emulator.
The minimum Android API level requirement went from 8 to 14 (2.2 to 4.0), but
that seems like an acceptable price to pay.
2019-05-24: release 2.2.1c (iOS only)
* Fixed crash in Paste when clipboard contained no text.
2019-05-20: release 2.2.1b (Android only)
* Made the app explicitly single-instance (by adding
launchMode="singleInstance" to Free42Activity in the app manifest).
This should eliminate the remaining null-pointer crashes in the native code,
and also prevent State File Corrupt scenarios.
2019-05-19: release 2.2.1a (Android only)
* Added 64-bit native code.
2019-05-11: release 2.2.1
* Added side margins to print-out window.
* PRLCD is now supported in "Print to Text," using Unicode 2x2 block elements.
* Flag 64 is now set or cleared to indicate the Shift state during the most
recent key press. This can be used by MENU handlers to implement different
behaviors for unshifted and shifted menu keys.
* Windows version: Changed sounds from using the Beep() function to playing
wav sounds using the PlaySound() function, matching the way sounds are played
in the Android, iOS, and MacOS versions.
* MacOS Dashboard version: Didn't recognize comma as decimal key. Fixed.
2019-04-07: release 2.2
* Implemented YMD mode for date functions, using YYYY.MMDD as the numeric
format and YYYY-MM-DD as the display format. Programs can check whether this
mode is active by testing flag 67. If flag 67 is clear, the mode is indicated
by flag 31 (clear = MDY, set = DMY), as before.
* Local variables. You create them with the new LSTO function, and they
disappear automatically when the current subroutine ends, by executing RTN or
END. If a local variable is created with a name that matches an already-
existing variable, the older variable is hidden until the local variable goes
away.
* Dynamically growing RTN stack. It is not unlimited; in order to prevent
infinite recursion from eating up all memory, it maxes out at 1024 levels.
The new stack behaves a bit different than the old version (and the real
HP-42S): when an XEQ happens while the stack is full, the old version would
silently discard the oldest RTN, while with the new version, this returns a
"RTN Stack Full" error.
* Added support for direct command mapping in skins. This is specified by
creating Macro: lines where the macro is not a sequence of keystrokes, but a
command name enclosed in double quotes, e.g., Macro: 40 "SST→"
* Windows, MacOS, and Linux versions: In skin layout files, they now look for
keymap entries tagged as "WinKey:", "MacKey:", or "GtkKey:", respectively.
This allows embedding keymaps for multiple platforms in one layout file.
This does mean that old-style keymap entries, with no identifying tags, are
no longer recognized. Out of all the skins in my collection, the only
affected skins are desktop/42ck and desktop/42ct. If you use these skins,
you'll want to download the updated layout files.
2019-03-27: release 2.1.1 (Android only)
* The "Maintain skin aspect ratio" setting didn't stick when the app was exited
and restarted. Fixed.
2019-03-26: release 2.1
* New functions: SST↑ (Step Out) and SST→ (Step Over). Step Out runs the
program until the end of the current subroutine; Step Over executes one step,
but if that step is an XEQ, SOLVE, or INTEG, it runs until the subroutine
returns, or SOLVE or INTEG are done. When Step Out is performed in a function
called by SOLVE or INTEG, the program runs until SOLVE or INTEG are done.
* Added SST↓ (Step Into), which is just an alias for SST. This allows creating
a row in the CUSTOM menu with SST↓, SST→, and SST↑, like in typical high-
level language debuggers.
* Android and iOS versions: Improved "Maintain skin aspect ratio" option: it
now chooses the largest scale where the skin still fits on the screen in its
entirety, and centers the skin within the available space.
* iOS version: The "Maintain skin aspect ratio" and "Print to text" options in
the Preferences were switched. Fixed.
* iOS version: Fixed handling of announcements in the status bar (audio
recording, active call, active GPS).
* iOS version: Turned optimization back on. It looks like the optimizer bug
(see release notes for 2.0.21a) has been fixed.
2019-03-18: release 2.0.24h (Android only)
* The screen update logic in the previous version was incorrect and caused the
app to appear unresponsive on many devices. Fixed.
2019-03-17: release 2.0.24g (Android, iOS, and MacOS)
* Android, iOS, and MacOS versions: Enabled non-integral display scaling.
* Android and iOS versions: Added setting in Preferences to choose whether to
stretch skins to fill the screen, or to stretch them only to fill the