-
Notifications
You must be signed in to change notification settings - Fork 1
/
HISTORY
2682 lines (2148 loc) · 130 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
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, iPhone, and Mac 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 iPhone 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.
* iPhone 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, iPhone, and Mac 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 an earlier NDK,
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.)
* Mac 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.
* iPhone 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 iPhone at the time, probably because the iPhone version
didn't support landscape mode then.
2019-06-15: release 2.3.0a (iPhone 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 (Mac 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 (iPhone 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, iPhone, and Mac versions.
* MacDashboard 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, Mac, 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 iPhone 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.
* iPhone version: The "Maintain skin aspect ratio" and "Print to text" options
in the Preferences were switched. Fixed.
* iPhone version: Fixed handling of announcements in the status bar (audio
recording, active call, active GPS).
* iPhone 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, iPhone, and Mac)
* Android, iPhone, and Mac versions: Enabled non-integral display scaling.
* Android and iPhone versions: Added setting in Preferences to choose whether
to stretch skins to fill the screen, or to stretch them only to fill the
available width, while maintaining their original aspect ratio.
* iPhone version: Implemented support for landscape orientation.
* iPhone version: Fixed alignment of "Done" buttons.
2019-03-08: release 2.0.24f (iPhone only)
* Added Haptic Feedback setting in Preferences.
2019-03-03: release 2.0.24e (Android only)
* Fixed crash when calling ON or OFF from a program.
* Fixed a bug that could leave a corrupted state file under certain
circumstances.
2019-02-28: release 2.0.24d (Android only)
* Fixed crashes while printing.
2019-02-26: release 2.0.24c (Android and iPhone)
* Android version: Removed all restrictions on file selection dialogs, and
instead added a "Home" button, so you can always navigate back to
/sdcard/Android/data/com.thomasokken.free42 if you get stuck somewhere.
* iPhone version: Fixed the white bar that was showing up above the skin on
iPads running iOS 12.
2019-02-25: release 2.0.24b (Android only)
* Made file selection dialogs full-screen.
* Fixed file selection behavior for Import Programs and Select Skin. It now
starts in the writable storage directory, but does allow navigation out of
it.
2019-02-25: release 2.0.24a (Android and Mac)
* Android version: Lifted file selector directory restriction for Import
Programs and skin selection, keeping it in place for Export Programs and
selecting print-out files.
* Mac version: The previous release broke Import Programs. Fixed.
2019-02-24: release 2.0.24
* Made program pasting a bit more lenient: tabs are now treated as spaces, and
the following command names are now recognized: x, RCL*, RCLx, RCL/, STOx,
X#0?, X#Y?, X<>0?, and X<>Y? (in addition to all the alternate spellings that
were recognized previously).
* iPhone version: Added Key Clicks setting in Preferences.
* Windows and Mac versions: Now refuse to export zero programs. (The other
versions already did this.) Also tweaked the file selection dialogs a bit.
* Android version: When running on 4.4 (KitKat) or later, now creates the
storage directory, /sdcard/Android/data/com.thomasokken.free42, as soon as it
has access. The file selection dialogs are now restricted to this directory
and its subdirectories.
2019-02-18: release 2.0.23c (iPhone only)
* The previous release calculated the skin scale incorrectly for certain skins,
causing them to be displayed too small. Fixed.
2019-02-17: release 2.0.23b (iPhone only)
* Enabled non-integral scaling for skins, so skins can fill the width of the
screen on iPhone X series (X, XR, XS, XS Max) even if they were designed for
older models with 3:4 or 9:16 screen aspect ratios.
2019-02-11: release 2.0.23a (iPhone only)
* Replaced iPhone X skin with a more screen-filling one.
2019-02-09: release 2.0.23
* SOLVE now tries harder when secant extrapolation gets stuck due to the secant
being excessively steep.
* 0^0 now returns Invalid Data, not 1, for all combinations of real and complex
arguments. The rationale for returning 1 was mathematically questionable, and
Invalid Data is what the real HP-42S returns.
* iPhone version: Added basic iPhone X support.
2019-01-26: release 2.0.22c (Android only)
* New Main Menu. This should be compatible with all Android versions, including
Amazon Fire HD tablets and other devices that sabotaged the old menu after it
started targeting Android 8.
* Added code to request storage and GPS access when needed.
2019-01-13: release 2.0.22b (Android only)
* Another fix for invisible overflow menu items.
2019-01-12: release 2.0.22a (Android only)
* Fixed invisible overflow menu items.
2019-01-12: release 2.0.22
* Made pasting real scalars a bit more lenient: it is now permitted for there
to be trailing non-numeric characters after the number, so pasting a number
with an attached unit, say 50mm, yields the number 50, not the string "50mm".
* INPUT should clear any message from the display before showing the prompt,
but it didn't. Fixed.
* When ALPHA mode is active on top of VARMENU, ASTO and ARCL should show the
regular variable menus, but they showed the VARMENU instead. Fixed.
* During command entry, SST and BST should be disabled, but the code that tried
to do this also prevented some legitimate uses of up-arrow and down-arrow,
such as switching menu rows during FIX IND __.
* While entering a numeric LBL, it should be possible to switch to ALPHA mode,
using Shift-ENTER, to switch from, say, LBL 3_ to LBL "3_ , as an alternative
method of entering ALPHA labels that start with a digit. The HP-42S allows
this, but Free42 didn't. Fixed.
* Android and iPhone versions: OFF now turns off "continuous on" mode.
2018-11-24: release 2.0.21b (Windows only)
* Fixed Alt-Tab behavior.
2018-07-03: release 2.0.21a (iPhone only)
* Turned off all optimization for release builds; the latest iOS developer
tools appear to have a buggy optimizer, and it is causing number display in
OCT and HEX modes to misbehave -- they show numbers with unwanted leading
zeroes, for a total number of digits that would be appropriate for BIN mode,
so 1=>1, 2=>02, 3=>03, 4=>004, etc.
2018-06-24: release 2.0.21
* Fixed complex SQRT so it returns exact results when Re(x) = 0 and Im(x)/2 is
a perfect square.
* VARMENU would step through rows of multi-line menus in the wrong order.
(You needed a function with 13 or more MVARs to notice this.) Fixed.
* When printing to GIF, changing the filename did not cause the GIF numbering
sequence to restart at 1. Fixed.
* When printing to GIF, the output file is now flushed and closed immediately
if there is no more room for at least another 9 pixels after printing -- in
other words, when no more printing to that file is possible anyway. It used
to wait until the next print request, or app close, before flushing and
closing in this situation.
Also, the minimum height of a GIF output file is now 16 pixels, down from 32.
2018-03-12: release 2.0.20
* MATA, MATB, and MATX should exhibit the same stack lift behavior as EDIT and
EDITN, but didn't. Fixed.
2018-03-10: release 2.0.19
* Another EDIT/EDITN fix: in the real HP-42S, EDIT and EDITN don't actually
disable stack lift; they preserve the stack lift state, which you can observe
if you do ENTER vs. a stack-lift-enabling operation (say, X<>Y) just before
invoking them. This behavior is not really useful, but it needs to be
emulated anyway, since not doing so risks breaking HP-42S programs.
This does not affect GOTO Row/Column.
2018-03-09: release 2.0.18
* EDIT, EDITN, and GOTO Row/Column should disable stack lift, but they didn't.
Fixed.
2018-03-02: release 2.0.17
* Inserting or deleting an END would not always clear cached local GTO or XEQ
targets, potentially causing local GTO or XEQ commands to jump to the wrong
locations. Fixed, and also added code to repair such damage in existing state
files.
2018-02-22: release 2.0.16
* 0 SEED initialized the random seed incorrectly, wasting one digit of
randomness. Fixed.
* When importing raw files, E and -E are now recognized as 1 and -1, for
compatibility with HP-41 raw files with synthetic numbers.
* When importing raw files, synthetic instructions are now handled more like
the real HP-42S handles them. Basically, any argument >= 100 that isn't a
stack register and that isn't a local label is treated as numeric. Arguments
112-116 are always stack registers, even when that makes no sense (flags,
SigmaREG, etc.); 102-111 and 123-127 are only considered as A-J and a-e in
LBL, GTO, and XEQ.
Note that nothing very interesting happens as a result of these changes. They
won't make synthetic HP-41C code work in Free42 any more than it does in the
HP-42S; the behavior is just more like the real 42S now.
2018-02-17: release 2.0.15
* POSA would not find the search string if its only occurrence was at the very
end of the alpha register. Fixed.
* Android version: Tweaked handling of low-battery indicator.
2018-02-10: release 2.0.14
* In Export Programs, removed the hard-coded buffer size for the list of
programs, so you should now see all your programs in the list, no matter how
many there are.
* When Pasting complex numbers in a+bi notation, the imaginary unit must now be
either i or j; the alternative spellings I and J are no longer recognized.
2018-02-06: release 2.0.13
* Paste didn't handle numbers with negative exponents correctly. Fixed.
2018-02-02: release 2.0.12d (iPhone only)
* Fixed crash in GIF printing.
2018-01-30: release 2.0.12c (Android only)
* Another fix for crash on orientation change while printing.
2018-01-29: release 2.0.12b (Android only)
* Switching between portrait and landscape modes, while printing was in
progress, could cause a crash. Fixed.
2018-01-28: release 2.0.12a (Android only)
* Fixed handling of state files that were corrupted in a way that caused
persistent crashes on the first keystroke.
2018-01-27: release 2.0.12
* Fixed pasting of SIZE lines.
* When pasting numbers, spaces are now allowed as thousands separators.
* Mac and MacDashboard versions: Are now 64-bit.
* Mac and Linux versions: Fixed Caps Lock handling, so Caps Lock + Esc no
longer exits.
* Android and iPhone versions: Implemented "continuous on" mode (ON function,
flag 44).
2018-01-26: release 2.0.11a (Android only)
* Removed the cleanup of variables in core_quit(); it looks like this was
responsible for the failure mode where the app would crash at the first
keystroke, consistently, forcing uninstall/reinstall.
* Pasting numbers that ended in CRLF, as when copying a single cell from Excel,
didn't work; they were interpreted as strings. Fixed.
2018-01-14: release 2.0.11
* Copy now ignores flag 29 (thousands separators) and always copies numbers
without separators. This fixes certain surprising / undesirable behaviors
when pasting numbers into spreadsheets or programs.
* When entering a program line in NORM or TRACE modes, the line would be
printed, even when printing was disabled. Fixed.
* MATA and MATB, in the SIMQ menu, would crash if the MATA or MATB variables
were missing. Fixed, and also cleaned up type checks in MATX.
* Android version: Printing lots of output quickly, for example, by running a
program in TRACE mode, would cause the user interface to become sluggish or
even unresponsive on some devices. Fixed by posting UI updates less
aggressively.
2018-01-07: release 2.0.10
* Program Paste without line numbers didn't handle certain numbers,
specifically, those that started with a digit and didn't consist of only
digits. Fixed.
2018-01-07: release 2.0.9
* Program Paste no longer requires line numbers.
* The CUSTOM command would toggle the CUSTOM menu, but that was wrong: it
should only activate that menu, never deactivate it. Fixed.
* DIM?, EDIT, and EDITN didn't print X in TRACE mode. Fixed.
* Selecting the already-active menu did not cause the display to be repainted,
even though it should: there might be a message, which should be removed in
that case. Fixed.
* All versions except MacDashboard: made the print annunciator linger for one
second after printing stops. This makes it more noticeable, so printing is
less likely to go unnoticed on fast devices.
* Mac version: Implemented battery checker.
* Linux version: Added /sys/class/power_supply support in battery checker.
2017-12-26: release 2.0.8
* MENU (activating the programmable menu) while in ALPHA mode didn't turn off
the alpha_mode flag, leading to bad behavior or even crashes if any menu keys
were subsequently pressed.
2017-12-21: release 2.0.7c (Windows only)
* Decimal: SIN and COS of 45 degrees or 50 grads returned an inaccurate result,
correct to only 16 digits. Fixed.
2017-12-18: release 2.0.7b (Android only)
* The "Always Paint Entire Display" setting, introduced in the previous
version, didn't stick after app restart. Fixed.
2017-12-17: release 2.0.7a (Android only)
* Added "Always Paint Entire Display" option. This prevents display glitches
with certain combinations of devices and skins.
2017-11-19: release 2.0.7
* Changed the RAN and SEED functions to match the behavior of the real HP-42S.
The previous implementation used the algorithm from the HP-41C Standard Pac,
which produced numbers with only 6 significant digits.
* The up/down annunciator (multi-row menu) did not get updated correctly when
VARMENU was activated, including in the solver and integrator. Fixed.
* Windows version: Restored the Calculator key mapping option, which I had
removed in 1.5.14. It turns out that keyboards with a dedicated Calculator
key do still exist.
* Android version: The menu icons for Copy, Paste, and Print-Out were displayed
too large, overlapping the menu item labels on some devices. Fixed.
* Windows, Linux, Mac, and MacDashboard versions: Added keyboard mappings
g => GTO and p => PI. On existing installations, users must delete or rename
the existing keymap and restart for this to take effect.
* iPhone version: Painting the display could be glitchy if either or both of
its coordinates were odd. Fixed by forcing them to be even.
2017-08-12: release 2.0.6
* Decimal version: Fixed ISG and DSE for values >= 2^63 (9.2e18).
* Fixed a couple of bugs in how changes to internal SOLVE and INTEG data
structures are handled.
2017-07-30: release 2.0.5
* Fixed INTEG termination condition. It would return inaccurate results in
certain cases.
* Fixed importing numbers with exponent but no mantissa, e.g. E3, -E-5, etc.
This got broken in 1.5.
* Fixed crash when trying to allocate ridiculously large matrices.
* While entering a numeric argument, the up-arrow and down-arrow keys would
perform BST and SST, which should be blocked. Fixed.
* Testing flag 75 would turn on the programmable menu. Fixed.
* iPhone version: Fixed a few display alignment issues with the built-in 4"
skin.
2017-05-29: release 2.0.4
* Implemented special-case code for pure real and pure imaginary numbers in all
the complex logarithmic, trigonometric, and hyperbolic functions.
2017-05-28: release 2.0.3
* Fixed a few edge cases in complex functions.
* The last digit in full-precision representation (SHOW, Copy) could be off by
one in certain circumstances. Fixed.
* On cold start, now clearing flags 21 (printer enable) and 55 (printer
existence), to match the behavior of the real HP-42S.
* Removed "raw text" print option; it has been obsolete since the introduction
of UTF-8 printing in 1.5.11, since Unicode can represent the HP-42S character
set directly.
* iPhone version: LOCAT didn't work when its initial invocation happened from a
program. Fixed.
* In the About box, replaced the link to the Free42 discussion group with a
link to the Alternative HP-42S/Free42 Manual.
2017-04-28: release 2.0.2
* In Unicode-to-HP conversion, translate "\LF" and "[LF]" to 10, not 138.
Character 138 only exists to *represent* LF, but isn't available in the ALPHA
menu and therefore cannot appear in non-synthetic programs.
* Unicode-to-HP conversion handles curly quotes now (U+2018, U+2019, U+201C,
U+201D).
2017-04-23: release 2.0.1 (beta)
* Change right-pointing triangle from Unicode U+25B6 (black right-pointing
triangle) to U+25B8 (black right-pointing small triangle); the former gets
rendered as an emoji in iOS, while the latter doesn't, plus, the smaller
triangle looks better in listings anyway.
* MacDashboard version: Fixed multi-line pasting.
2017-04-22: release 2.0 (beta)
* Copy & Paste now handle matrices, ALPHA mode, and PRGM mode.
2017-04-01: release 1.5.15
* Instead of being limited to 12 mantissa digits, full precision (34 digits in
the Decimal version, 16 digits in Binary) is now supported for number entry,
SHOW, Copy, and Paste.
2017-03-11: release 1.5.14
* Changed complex TAN and TANH to use more accurate formulae.
* The Time Module functions used to keep track of MDY/DMY modes using an
invisible flag. For better HP-41 compatibility, they now use flag 31.
* Android version: Made state file writing more robust. If writing the state
file fails, it now keeps the previous one, instead of leaving behind a
partial or corrupt one.
* Linux version, Free42 Binary only: Some (recent?) versions of GTK set the
LC_NUMERIC locale, which Free42 expects to always be "C". This causes number
entry and display to be messed up in locales where the decimal is not ".",
including most of Europe. I added code to force LC_NUMERIC back to "C" after
gtk_init(), fixing this problem.
* Binary version: Fixed binary round-off problem in ADATE (for example,
10.102010 would be rendered as 10/10/2009).
2017-01-22: release 1.5.13
* When DIM, SIZE, or SIMQ resize the indexed matrix, and when CLV deletes the
indexed matrix, IJ should be set to (1, 1); and when DIM, SIZE, or SIMQ try
to resize the matrix currently being edited by EDITN, and when CLV tries to
delete the matrix currently being edited by EDITN, they should return a
"Restricted Operation" error. Neither happened, creating the potential for
memory corruption if IJ ended up pointing outside the matrix' data array.
Fixed.
* STO and STO* allowed the target to be the matrix under edit by EDITN. They
should not allow this, but return "Restricted Operation" instead. Fixed.
* CLALL didn't always exit all menus. Fixed.
2016-10-03: release 1.5.12
* Android version: Fixed UTF-8 printing, which was broken in 1.5.11.
* All versions: When printing to text, up-arrow now looks like an up-arrow,
instead of a caret.
2016-10-01: release 1.5.11
* EXITALL didn't always exit all menus. Fixed.
* Print-to-text now emits UTF-8 encoded text, instead of ISO-8859-1.
* Print-to-text now emits CRLF line separators on all platforms.
* Android version: Didn't save the "raw text" print setting. Fixed.
* Android version: Added landscape skin; made it the default for landscape mode
in new installs.
2016-09-04: release 1.5.10 (Android, Windows, Mac, and Linux)
* Fixed AGRAPH bug with complex number in X.
2016-09-04: release 1.5.9 (Android, Windows, Mac, and Linux)
* Now building the Intel Decimal Floating-Point Math Library from source for
all targets. In terms of the end user, this makes no difference, but it will
make life easier for people who want to port Free42 to platforms that I don't
support myself (FreeBSD, Solaris, etc.); those platforms were left out in the
cold when I started using the Intel library and only provided pre-built
binaries for the supported platforms.
* Implemented range reduction for more accurate TAN in DEG and GRAD modes.
* Android version: Now handles orientation change more efficiently.
2016-04-26: release 1.5.8f (Android only)
* Rolled back 8e, which was a disaster; it didn't fix the remaining black
line issues, but it did cause crashes everywhere.
2016-04-26: release 1.5.8e (Android only)
* The previous fix for the thin-black-line problem didn't do the job on some
devices. Here's another fix that should do a better job.
2016-04-25: release 1.5.8d (Android only)
* Fixed the thin black lines that would sometimes appear around the display.
* In full-screen mode, swiping down from the top would post the menu, because
the initial touch would be in the same area that Free42 watches as the menu
trigger. I changed the code so that the trigger only fires if the user lifts
their finger while still inside that critical area, which will only happen
if the downward swipe is very short.
* 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 skin.
2016-04-24: release 1.5.8c (Android only)
* Implemented true full-screen mode. This hides the navigation bar as well the
status bar, on devices running Android 4.4 (KitKat) or later.
2016-04-23: release 1.5.8b (Android only)
* Print-Out is now scaled to make better use of available screen width.
* Fixed key clicks.
* Implemented Reverse Portrait (upside-down) mode.
2016-04-17: release 1.5.8a (Android only)
* Tapping in the top half of the display now brings up the app's option menu.
2016-04-17: release 1.5.8
* Entering an END into a program using the CUSTOM menu would leave the program
counter at an invalid value, leading to memory corruption, state file
corruption, and crashes. Fixed.
* Android version: Changed haptic feedback code back to using the old API.
* Android version: Changed targetSdkVersion from 3.0 to 2.2. This should make
the menu reliably accessible in all Android versions and with all display
styles.
* Resurrected the MacDashboard version; the display repaint logic now supports
Yosemite (10.10) and later.
2016-03-19: release 1.5.7a (Android only)
* Made the action/title bar optional.
* Added full-screen mode (removes action/title bar and status bar).
* Added installLocation=auto to the manifest, so the app can now be installed
on an SD card.
2016-02-28: release 1.5.7
* INSR should disable stack lift, but didn't. Fixed.
* Android version: Added Action Bar, reluctantly embracing the reality of
devices with no menu button (or hard-to-find menu buttons, like the "press
and hold the task switch button" behavior on some devices).
2014-12-21: release 1.5.6
* iPhone version: Implemented Copy and Paste.
* iPhone version: Fixed LOCAT for iOS 8.
* All versions, on hard reset, now initializing flag 28 (decimal point/comma)
to match the host's locale.
* Paste didn't clear the message flags. Fixed.
2014-11-12: release 1.5.5
* Decimal version: Entering a number with an empty exponent (e.g. 1E or 1E-)
would yield <Not a Number>. Fixed.
* iPhone version: HTTP server: Fixed downloading individual programs from, and
uploading zip files of programs to, the /memory directory. This got broken in
release 1.4.77, while implementing local file download.
* Android version: When the screen orientation was set to "automatic", it would
not honor any system-wide orientation lock. Fixed.
2014-11-08: release 1.5.4a (Android only)
* Fixed crash on startup in Android 5.0 (Lollipop).
* Printing to text would truncate the file whenever it was reopened, opening it
for writing rather than appending. Fixed.
2014-09-23: (no new code release)
* Added nova1_1096 skin, for iPhone 5, to the Free42iPhoneSkins package.
Contributed by Keith Carangelo.
2014-09-06: release 1.5.4a (iPhone only)
* Fixed keyboard handling in the Preferences and Select File dialogs.
* Fixed scrolling behavior (in 1.5.4, windows were sized 20 pixels beyond the
bottom of the screen, making the bottommost bit of scroll views drop off the
screen).
* Added 4" skin for iPhone 5, and added code to select the best-fitting built-
in skin on first launch.
2014-07-22: release 1.5.4
* Decimal version: Fixed ACOS. It would return 0 for acos(-1).
This bug was introduced in release 1.5.
2014-06-21: release 1.5.3a (Android only)
* Made GPS optional. When I added the ACCESS_FINE_LOCATION permission in
1.4.78, that had the side effect of making GPS a requirement. In 1.5.3a,
the app manifest explicitly states that the GPS is not required.
2014-05-25: release 1.5.3
* Fixed crash in SIMQ if any of MATA, MATB, or MATX already existed and was a
scalar or string.
2014-05-10: release 1.4.78 (Android only)
* Fixed the LOCAT function, by adding the ACCESS_FINE_LOCATION permission.
2014-03-16: release 1.5.2
* Decimal version: Fixed Y^X for complex Y and negative integral X.
* Decimal version: Made Y^X and 10^X for real Y and integral X more accurate.
* All versions: sin(45°) now equals cos(45°), and sin(50grad) = cos(50grad).
2014-03-15: release 1.5.1
* All versions: Fixed ASIN, ACOS, and ATAN so they return exact results in DEG
and GRAD modes for trivial parameters (asin(1), asin(-1), acos(0), atan(1),
atan(-1), atan(infinity).
* Now displaying signed zero as zero, so you won't see -0 any more.
* Windows version: Removed the "Free42 Directory" setting from the Preferences.
The application now looks for a file or directory named "portable" in the
directory where Free42Decimal.exe or Free42Binary.exe itself is located; if
it exists, the state.bin, print.bin, and keymap.txt files will be stored in
this directory as well, and skins will only be loaded from this directory. If
there is no "portable" item in the executable's directory, it will store
state.bin, print.bin, and keymap.txt in %APPDATA%\Free42, and it will load
skins from that directory, and from the executable's directory.
2014-03-09: release 1.5
* Decimal version: Switched from BCD20 to Intel's Decimal Floating-Point
Library v2.1.
* Binary version: Replaced the old binary-to-decimal and decimal-to-binary
conversions with code that uses the standard C library's equivalent
functionality. This fixes final-digit errors in the Binary version, and also
final-digit errors when switching from the Decimal to the Binary version.
* All versions: Added angle reduction code to make SIN, COS, and ->REC more
accurate in DEG and GRAD modes.
* Windows version: Now uses %APPDATA%\Free42 as the default Free42 directory
(for storing state.bin, print.bin, and keymap.txt). This avoids permissions
problems when people install the executable in a directory to which they
don't have write access (like the popular choice C:\Program Files).
2013-12-08: release 1.4.78
* All versions except Android: while parsing macros in skin layout files, tab
characters were not recognized as whitespace and caused parsing to fail.
Fixed.
* Linux version did not repaint the skin when it was switched from one skin to
another with the same width and height. Fixed.
* Windows version: Downgraded my build environment from Visual C++ 2012 to 6.0.
This means the Free42 build for Windows will run on older versions of Windows
again.
2013-12-07: release 1.4.77a (Android only)
* Android version: The "external storage" filesystem is no longer referred to
by the hard-coded path /sdcard, but using the external storage directory name
provided by the Environment. This should help prevent problems like exporting
programs and then not being able to find them from the PC.
* The file selection dialog will now append the file extension if the filename
doesn't include it already.
2013-06-15: (no new code release)
* Three new skins, and many tweaks to existing skins, contributed by KD0GLS.
The Free42Skins.zip, Free42iPhoneSkins.zip, and Free42AndroidSkins.zip
packages were all updated.
* Added two new skins for large Android devices. Contributed by Tyge Loevset.
2013-06-08: (no new code release)
* Galaxy_Nexus skin to Android skins package. Contributed by Andrew Novinc.
2013-03-02: release 1.4.77a (iPhone only)
* iPhone version: Fixed "Make Directory" in the file selection dialogs.
* iPhone version: When the user turns off printing to text or to GIF in the
Preferences, or changes the print-out file name, the existing files are now
promptly flushed and closed.
* iPhone version: Fixed "garbage" in print-out window.
* iPhone version: Now highlights the currently selected skin in the Select Skin
menu.
2013-02-17: release 1.4.77
* iPhone version: The links in the About view now actually work.
* iPhone version: Implemented 'New directory' and 'Delete' in the HTTP Server.
* iPhone version: Implemented zip file upload and download in the HTTP Server.
* iPhone version: Implemented local program import/export.
* iPhone version: Implemented print-out window.
2013-01-06: release 1.4.77
* All versions except iPhone: the links in the About boxes now actually work.
2013-01-01: release 1.4.76
* Mac version: Implemented print-out window.
2012-12-17: release 1.4.75b (iPhone only)
* iPhone version: Fixed three issues with the HTTP Server (displaying the wrong
IP address, binding to the network incorrectly, and a crash when writing to
the on-screen log).
2012-12-04: release 1.4.75a (iPhone only)
* iPhone version: Clicking Done on the HTTP Server window could cause the app
to freeze under certain circumstances. Fixed.
2012-11-24: release 1.4.75
* Android version: Implemented haptic feedback option (vibrate on keypress).
2012-10-27: release 1.4.75
* iPhone version: In the HTTP Server view, tapping on the server URL switches
between the DNS name and the IP address.
* Linux version: Now uses ALSA to play BEEP and TONE sounds (but not when
running on remote displays).
2012-07-29: release 1.4.74b (Android only)
* Android version: Now writes state file when moved to background.
2012-05-06: release 1.4.74a (Android only)
* Android version: Fixed a couple of bugs that could cause crashes while
printing.
2012-05-05: release 1.4.74
* Decimal version: The overflow fix in 1.4.73 was incorrect. This one works.
2012-05-05: release 1.4.73
* iPhone version: Now writes state file when moved to background.
* OFF now refuses to shut down Free42 if there have been no keystrokes since
the application was started. It will stop program execution and display
the message "Suspicious OFF" instead.
This prevents code like LBL "OOPS" SF 11 OFF GTO "OOPS" from locking the
user out.
* Decimal version: Overflows would return zero in some cases, i.e.
9E9999 ENTER +. Fixed.
2012-04-15: release 1.4.72
* Android version: Added "skin smoothing" and "display smoothing" check boxes
in the Preferences view.
2012-04-14: release 1.4.71
* HMS+ and HMS- would return results with the wrong sign under certain
circumstances: result < 0 and |result| < 59 seconds, or result < 0 and
|result| > maximum integer. Fixed.
2012-04-09: release 1.4.70b (Android only)
* Android version: Fixed app manifest so the app no longer obtains the
READ_PHONE_STATE permission, which it never needed anyway.
Some background: Apps targeted at Android 1.5 automatically get
READ_PHONE_STATE and WRITE_EXTERNAL_STORAGE when installed in Android 1.6 or
higher, without the user being told, and this tends to look under-handed to
users who aren't aware of what's going on. Free42 now targets 1.6, which
means it doesn't get any permissions silently.
It does now request WRITE_EXTERNAL_STORAGE, because it needs it for printing
to files and for exporting programs.
Note that the app still runs on 1.5 and later; the requirements for running
it have not changed.
2012-02-12: release 1.4.70a (Android only)
* Android version: Fixed app manifest to make the app work with screens other
than 320x480. This should fix the problem of skins not filling the whole
screen on some devices.
2011-09-18: release 1.4.70
* Fixed several bugs in complex ASIN, ASINH, ACOS, and ACOSH.
* Android version: Better printer icon in the main menu, by Günter Schink.
* Mac version: OFF didn't work when invoked from a program. Fixed.
2011-06-11: (no new code release)
* Added two new skins to the Android skins package, designed for the Samsung
Galaxy S 9000, which has an 800x480 screen. Contributed by Günter Schink.
2011-05-22: (no new code release)
* Added Free42AndroidSkins.zip package, for skins designed for Android-based
devices; added HTC4800 skin for HTC Desire HD or other Android devices with
480x800 screens. Skin contributed by Michael Vogel, based on an iPhone skin
by Jerrod Hofferth.
2011-04-22: release 1.4.69 (Android only)
* Added "orientation" option in Preferences, allowing the user to lock the app
in landscape or portrait mode.
* Improved the layout of the file selection and Preferences dialogs.
* The file selection dialog no longer disables files that don't match the
filter; it now hides them.
2011-04-20: release 1.4.68
* INVRT did not perform any type checks, leading to badness when it was applied
to anything that wasn't a matrix. Fixed.
2011-04-10: (no new code release)
* Added six new skins to the iPhone skins package. Contributed by Javier
Goizueta.
2011-03-13: release 1.4.67
* ASIN returned incorrect results for large complex arguments. Fixed.
* iPhone version: Added support for 640x920 skins.
* Added Silver And Blue skin to Free42PocketPCSkins.zip package. Contributed by
David Geiger.
* The SST and BST key labels were switched in these skins:
ppcskins/Andy480x800.gif ppcskins/Ramos240x400.gif ppcskins/Ramos480x640.gif
ppcskins/SilverAndBlue.gif ppcskins/StandardPPC.gif
ppcskins/StandardPPCsm.gif skins/Andy480x800.gif
Fixed.
2010-04-08: release 1.4.66
* Removed the "Not Yet Implemented" Time functions; I decided not to implement
them. They're also gone from the FCN catalog.
The ADATE, ATIME, ATIME24, CLK12, CLK24, DATE, DATE+, DDAYS, DMY, DOW, MDY,
and TIME functions remain; those are the time/date-related functions from the
HP-41 Time Module that are actually useful in Free42.
The functions that I decided not to implement after all are the following:
Live clock display: CLKT CLKTD CLOCK
Stopwatch: RCLSW RUNSW SETSW STOPSW SW
Alarms: ALMCAT ALMNOW XYZALM
Clock control: CORRECT RCLAF SETAF SETDATE SETIME T+X
* In DMY mode, DATE would display dates as DD:MM:YYYY, but that should be
DD.MM.YYYY. Fixed.
2010-04-03: release 1.4.65
* Implemented some more Time Module functions: ADATE, ATIME, ATIME24, CORRECT,
RCLAF, SETAF, SETDATE, SETIME, T+X.
2010-03-30: release 1.4.64
* Implemented some more Time Module functions: DATE+, DDAYS, and DOW.
2010-03-28: release 1.4.63
* iPhone version: Implemented ACCEL, LOCAT, and HEADING functions, for querying
the device's accelerometer, location services (GPS on the 3G and 3GS; WiFi-
based on all other models), and compass (3GS only).
* All versions except MacDashboard: for skins, increased the maximum macro
length from 31 to 63. The old limit was too small to allow macros that step
forward all the way to the end of the FCN catalog, and supporting such macros
is necessary now that the length of the FCN catalog is no longer fixed at 42
rows.
* Also, changed several macros in the HP-41 and HP42CY skins where the FCN
catalog was being traversed backwards, replacing N repetitions of "up" with
42-N repetitions of "down", so they will work correctly in the presence of an
extended FCN catalog. (None of the other skins currently in the Free42
repository traverse the FCN catalog backwards, so they don't need updating.)
* PalmOS version: Turning off printing did not flush the GIF file, so you'd end
up with a truncated image. Fixed.
* When COMPLEX is executed with a complex number or complex matrix in X, and
POLAR mode is active, it is possible for range errors to occur. Free42 would
simply substitute POS_HUGE_VAL in such cases, but that was incorrect; it
should report Out of Range or substitute POS_HUGE_VAL depending on the
setting of flag 24. Fixed.
* R/S can now be pressed using the PC keyboard even when ALPHA mode is active.
2010-03-07: release 1.4.62
* Windows version: Now has an option in the Preferences screen to map the
Calculator key, found on many newer keyboards, to launch Free42.
* iPhone version: The hostname lookup for the HTTP Server window is now done in
a background thread, so that a slow or malfunctioning DNS server no longer
causes the app to freeze on startup.
* When EDITN was active, you could overwrite the edited matrix with a scalar
using STO, or delete it using CLV -- and then you would be stuck in the
Matrix Editor, and even CLALL couldn't get you out. Fixed; you will now get
the Restricted Operation message when you try to change or delete the active
matrix behind EDITN's back.