forked from swissmicros/free42
-
Notifications
You must be signed in to change notification settings - Fork 0
/
HISTORY
2453 lines (1969 loc) · 119 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-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 GTK 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 Mac Dashboard: 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 application version (not Dashboard): implemented battery checker.
* GTK 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, and Mac 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.
* GTK 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 Mac OS X Dashboard 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.
* GTK 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.
* GTK 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 Mac Dashboard: 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.
2009-12-29: (no new code release)
* Added HP-41 skin to the Free42Skins.zip package. This skin mimics the HP-41
layout, and includes many macros to map additional functions to the keyboard.
Contributed by Guenny.
2009-11-25: release 1.4.61
* Decimal version: ->OCT (decimal-to-octal conversion) was broken; it actually
converted octal to decimal. Fixed.
2009-11-11: (no new code release)
* Added HP42CY skin to the Free42Skins.zip package. This skin includes many
macros to map additional functions to the keyboard. Contributed by Guenny.
* Added kacskin and kacskin_yellow skins to the Free42Skins.zip package.
These are slightly modified versions of Michaels HP, and may be easier to
read on some screens. Contributed by Keith Carangelo.
2009-11-08: release 1.4.60
* Decimal version: SQRT could be off by 1 in the final digit. It now computes
one additional digit and rounds it into the mantissa, which should make it
accurate in all cases.
* Decimal version: The BCDFloat add and subtract functions could return
denormalized results when one of the arguments was zero. Free42 would not
display these denormalized numbers correctly, leading to strange results like
1.0001 LOG returning something that looked like zero but wasn't. Fixed.
2009-10-31: release 1.4.59
* MacDashboard version: changed the background from green to gray, and changed
the transparency to fully opaque.
* PalmOS Decimal version builds & works again; fixed the SQRT crash and the
divide bug (caused by 16-bit integer overflow, oops).
* Decimal version: re-fixed the subtract bug which had originally been fixed in
1.4.53, but reappeared in the great BCDFloat/BCDFloat2 refactoring.
* Decimal version: 1e-10000 LOG and 1e-10000 LN returned <Not a Number>. Fixed.
* CLV and PRV didn't work from the CUSTOM menu, potentially even causing a
crash. Fixed.
2009-10-24: release 1.4.58
* Removed Byron's BIGSTACK and BIGLCD hacks; these will be maintained in a
separate fork from now on. This protects the other Free42 versions from bugs
in the 42S/iPhone code, and right now, it fixes some display glitches in the
other versions.
2009-10-19: release 1.4.57
* New LOG code (again), for exact results when the argument is a power of 10.
The bug from version 1.4.55 is fixed.
* Subtract would lose one digit of precision for edge cases like
1 - 0.9999999999999999999999999; fixed.
2009-10-12: release 1.4.56
* The new LOG implementation introduced in Decimal version 1.4.55 was broken;
rolling back to 1.4.54 version. (Note that this means that powers of 10 do
not yield exact results, but at least everything *else* is OK again now.)
2009-10-10: release 1.4.55
* Some improvements in the new BCDFloat code:
. LOG (common log) is now precise for powers of 10.
. MOD function now works for large arguments.
. rounding fix in multiply now gets 1/3*3-1 and 10/3*3-10 the same answer,
10/7*7-10 is not the same, but this is correct (it depends on where you cut
off the number).
. optimisations to subtract routine.
* Mac version: now uses $HOME/Library/Application Support/Free42 instead of
$HOME/.free42 for persistent state, keymap, and skins. If this directory
does not exist, but $HOME/.free42 does, the latter is renamed to the former.
* Switching from a version using the old BCDFloat code (1.4.51 or earlier) to a
version using the new code (1.4.52 or later) wasn't handled properly; it
should handle the change in how Infinities and NaNs are represented, but it
didn't. This is related to the problem fixed in 1.4.54.
Starting with this version, all state files created by versions 1.4.51 and
older are assumed to contain old-style BCDFloat, and state files created by
versions 1.4.52 and newer are assumed to contain new-style BCDFloat.
This means that BCDFloat numbers created by all previous versions of Free42
Decimal will now be interpreted correctly, however, any state file that has
become damaged by upgrading from <= 1.4.51 Decimal to 1.4.52-54 will still
be damaged, and the only way to make sure no such damage remains is to do
CLALL and reload all programs and data.
to| <=51| <=51|52-53|52-53| 54 | 54 | >=55| >=55
from | dec | bin | dec | bin | dec | bin | dec | bin
---------+-----+-----+-----+-----+-----+-----+-----+-----
<=51 dec| + | + | - | + | - | - | + | +
<=51 bin| + | + | - | + | + | + | + | +
52-54 dec| c | c | + | - | + | + | + | +
52-54 bin| c | c | - | + | + | + | + | +
>=55 dec| c | c | c | c | c | c | + | +
>=55 bin| c | c | c | c | c | c | + | +
LEGEND: This chart shows compatibility between Free42 state file versions. To
check if version A will correctly handle state files produced by version B,
check the cell at column A, row B. The numbers 51..55 in the chart refer to
Free42 releases 1.4.51 through 1.4.55.
A 'c' means you will get a "State File Corrupt" message; "+" means the state
file will be read correctly, and "-" means the state file will be read, but
some numbers will be converted incorrectly.
Note that once the Free42 state has become damaged by an upgrade marked with
"-" in this chart, it will stay damaged; so, for example, upgrading from
1.4.51 Decimal to 1.4.52 Decimal, and then to 1.4.55 Decimal, may result in a
damaged state, while upgrading from 1.4.51 Decimal to 1.4.55 Decimal directly
will not.
2009-08-28: release 1.4.54
* The new BCDFloat code, introduced in version 1.4.52, uses a different
convention for representing NaN and infinities: instead of using special
values in the exponent, it now uses dedicated flags, and has a narrower
exponent field. The code that converts between decimal and binary, when
switching between Free42 Decimal and Free42 Binary while keeping the same
state file, did not deal with this new convention, and, as a result,
switching between those versions could cause numbers to become NaN or
Infinity when they shouldn't.
This release fixes this. It is only relevant to those who switch between
Free42 Decimal and Free42 Binary.
2009-08-17: release 1.4.53
* Decimal version: fixed a bug in the subtract routine that could cause
incorrect, malformed results in some cases, e.g. 4 ENTER 3 / 1 - 3 * 1 -
returned -:.E-25.
2009-08-08: release 1.4.52
* New: Mac version. This is a native application, not a Dashboard widget; it
is functionally identical to the PC versions (Windows, GTK, and Motif).
The print-out window doesn't work yet, though printing to files does;
everything else is working. The print-out window will be finished in a two
or three weeks, barring the unforeseen. I'm releasing the app in this
incomplete state because I feel it is stable and usable, and should be a
big improvement for those currently using the Dashboard widget.
This is a Universal application, so it should run on PowerPC and Intel-
based Macs. It requires Mac OS X 10.5 or later.
* Decimal version: Merged Hugh Steers' latest BCD code. This provides more
accurate transcendentals and some bug fixes.
* Also, Hugh improved the error estimate for the Romberg integration code;
it now converges more quickly in many cases.
* MacDashboard version: now recognizes '*' and '+' on the numeric keypad.
2009-07-10: release 1.4.51
* Changed the homepage URL to http://thomasokken.com/free42/.
2009-06-29: release 1.4.50
* Adding or subtracting two complex matrices, and adding or subtracting a
complex matrix in X to or from a complex scalar in Y, would cause memory
corruption, resulting in a crash soon after. Fixed.
2009-06-13: (no new code release)
* Added "Realistic42s240x400" skin for 240x400 Pocket PC devices
(Free42PocketPCSkins.zip package). Contributed by Denis Cesar.
2009-06-07: release 1.4.49
* BASE/ tried to catch division by zero by looking at Y instead of X. Oops! The
result was that 0/1 would return "Divide by 0" and 1/0 would cause Free42 to
crash. Fixed.
* PalmOS version: tall skins can now be selected on all devices, regardless of
whether they have tall screens or not. On most devices, this isn't useful,
but the tallness check had the effect of suppressing the 320x450 Ehrling42sm
skin on the Tapwave Zodiac, which has a 480x320 screen; the result was that
you couldn't use that skin even if you switched to portrait mode.
2009-05-05: (no new code release)
* Added "Ramos240x400" skin for 240x400 Pocket PC devices
(Free42PocketPCSkins.zip package). Contributed by Miguel Toro; based on
Ramos480x640 by Noe Ramos.
2009-04-04: release 1.4.48
* Fixed PSE; it no longer freezes the UI for one second, but uses a proper
timeout, so event processing can continue, and keystrokes during PSE have
the proper effect (of stopping program execution and then being handled
normally).
2009-03-04: release 1.4.47
* Another UVEC bug: it should return Invalid Data when the magnitude of its
argument (|z| for complex scalars, FNRM for real matrices) is zero. It
returned its argument unchanged instead. Fixed.
2009-02-22: release 1.4.46
* UVEC returned Invalid Type for complex scalar arguments. Fixed; it now returns
z/|z| (same as the SIGN function for such arguments), like the real HP-42S.
* When functions with arguments, e.g. STO, FIX, etc., were entered into a
program from the CUSTOM menu, they would get inserted before the current
program line instead of after. Fixed.
2009-01-28: release 1.4.45
* ASTO IND ST X was broken; instead of storing the first 6 characters of the
ALPHA register into the register or variable pointed to by X, it stored them
into the variable pointed to by the first six characters of ALPHA itself.
Fixed.
2009-01-14: (no new code release)
* Added "Lienhard480x800" skin for 480x800 Pocket PC devices
(Free42PocketPCSkins.zip package). Contributed by Thomas Lienhard.
* Added "Sven320x240mini" skin for 320x240 Pocket PC devices
(Free42PocketPCSkins.zip package). This skin only shows the keys for basic
arithmetic and stack manipulation, making the keys large enough to use easily
without a stylus. Contributed by Sven from Vienna.
* Added "Ramos480x640" skin for 480x640 Pocket PC devices
(Free42PocketPCSkins.zip package). It has a distinctive, sparse look.
Contributed by Noe Ramos.
2008-08-16: release 1.4.44
* Made auto-repeat for number entry and ALPHA modes optional. The auto-repeat
feature, introduced in release 1.4.11, is not found on the real HP-42S, and
can cause problems if you don't expect this kind of behavior in a calculator.
It can now be turned off in the Preferences dialog, though the default is
still for it to be on.
Note that this is unrelated to the auto-repeat for the 'up' and 'down' keys,
which is authentic HP-42S behavior, and cannot be turned off.
2008-04-12: release 1.4.43