Stories
Slash Boxes
Comments

SoylentNews is people

SoylentNews is powered by your submissions, so send in your scoop. Only 16 submissions in the queue.
posted by janrinok on Friday May 27 2022, @04:17AM   Printer-friendly
from the VisiCalc-clones dept.

Hacker Tavis Ormandy has ported IBM's Lotus 1-2-3 to GNU/Linux and writes in his blog about how he did it. It's 100% usable even if the DOS emulation version still looks a little better.

Yikes - it's an original unstripped object file from 1-2-3. There are nearly 20,000 symbols including private symbols and debug information.

Why would Lotus ship this? It's so big it must have required them to phyiscally ship an extra disk to every customer? Could it have been a mistake, accidentally left on the final release image?

I had so many questions, but I'm not old enough to have any experience with SysV, so I asked the greybeards on alt.folklore.computers if they had seen this before and why this might have happened.

The answer was that this is probably deliberate - dlopen() was not widely available on UNIX in the early 90s, so there was no easy way to load native plugins or extensions. To solve this, vendors would ship a bunch of partially linked object files with a script to relink them with your extensions – Clever!

I can't tell you how useful this discovery was – the debug information answered so many questions I had about Lotus 1-2-3 internals! This was a direct source port from DOS, so it mostly worked the same way but now I had debugging data. For example, I really wanted to hook into the rasterizer in my driver so that I could improve the appearance of graphs in the terminal... but it was just too complex to understand without documentation.

The spreadsheet package Lotus 1-2-3 was the fast follower to Bricklin and Frankton's VisiCalc, and between the two the electronic spreadsheet was the main reason why every small business quickly went out and purchased a microcomputer. Other killer apps include e-mail, Mosaic, and PageMaker. That is to say the program was valuable enough on its own to warrant the purchase of a whole microcomputer.


Original Submission

This discussion has been archived. No new comments can be posted.
Display Options Threshold/Breakthrough Mark All as Read Mark All as Unread
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
(1)
  • (Score: 4, Insightful) by Rosco P. Coltrane on Friday May 27 2022, @05:23AM

    by Rosco P. Coltrane (4757) on Friday May 27 2022, @05:23AM (#1248218)

    like Lotus 123 is what killed the interest of the fun-seeking generation of the 80's for the IBM PC and clones for a long, long time. They made the fortune of IBM, Lotus, Microsoft and a lot of other "serious" players with boring shit for the suits, and they made the fortune of Atari, Amiga, Commodore by handing them us teens on a platter.

  • (Score: 5, Interesting) by RamiK on Friday May 27 2022, @05:33AM (11 children)

    by RamiK (1813) on Friday May 27 2022, @05:33AM (#1248219)

    To last week: https://github.com/andmarti1424/sc-im [github.com]

    --
    compiling...
    • (Score: 2, Interesting) by Anonymous Coward on Friday May 27 2022, @08:11AM (8 children)

      by Anonymous Coward on Friday May 27 2022, @08:11AM (#1248237)

      Sad times when a link to an up-to-date free open-source alternative to a 30 years old proprietary warez gets downmoded Troll.

      • (Score: 0) by Anonymous Coward on Friday May 27 2022, @08:22AM (1 child)

        by Anonymous Coward on Friday May 27 2022, @08:22AM (#1248240)

        I agree with you and still had a couple of points. You and your parent get one.

        • (Score: 0) by Anonymous Coward on Friday May 27 2022, @08:51PM

          by Anonymous Coward on Friday May 27 2022, @08:51PM (#1248367)

          Proly an Ari sock and shoulda been spam modded.

      • (Score: 0) by Anonymous Coward on Friday May 27 2022, @02:42PM (3 children)

        by Anonymous Coward on Friday May 27 2022, @02:42PM (#1248281)

        This is not much an alternative. First, sc/im and similar oleo, is more a table than a spreadsheet, especially when it comes to formulas and sparse data handling, which is crucial for spreadsheet. Second, if there is a non-discoverable UI, there must be the handbook. Without it, the presence of such alternative is equivalent to saying that someone has the alternative in the drawer.

        • (Score: 3, Informative) by RamiK on Friday May 27 2022, @03:44PM (2 children)

          by RamiK (1813) on Friday May 27 2022, @03:44PM (#1248290)

          Second, if there is a non-discoverable UI, there must be the handbook.

          https://github.com/jonnieey/Sc-im-Tutorial [github.com]

          formulas and sparse data handling

          I'm not sure what you mean.

          --
          compiling...
          • (Score: 2, Interesting) by Anonymous Coward on Friday May 27 2022, @05:48PM (1 child)

            by Anonymous Coward on Friday May 27 2022, @05:48PM (#1248320)

            A small example: Long before PCs, we had a small program called "Editor-Corrector". Thing characteristic to mainframe's OS distribution - which was just extremely complicated text editor, which could work in interactive mode or in batch mode. To enter diacritized characters, a long, 20+-key sequences had to be entered to the terminal. All documentation we had were sample documents which, typed to the console, displayed info how they could be typed using the editor. This is the "tutorial".
            When we were finally moving to Unix, someone obtained the unobtainable: the internal complete documentation of the "Editor/Corrector program". 700+-page documentation which was a cut printout bound with twine (!). The last 200 pages were devoted to porting the editor to other machines, machines in which assembly cannot be done using default assembler, or which have different terminals.
            Below configuration file's contents, there was the "mess". First lines of configuration file were well described in "tutorial", but the "mess", which contained dots, semicolons, arrows, asterisks and lines, was unknown. The "mess" was just copied from file to file without understanding what it does, changing it caused the editor to behave erratically or to put wrong characters in the file.
            Then we suddenly found that every key stuffed from terminal called a separate, user-configurable program and the set of such programs was defined with the "mess". When it became clear, by using a few characters, we automated lots of things, including entering the diacritized characters.
            This is the most important difference between the "tutorial" and "documentation". Tutorials are good if the program has a single, well-used workflow or a few of them, but it is not sufficient if something must be flexible and configurable.

      • (Score: 3, Insightful) by Phoenix666 on Friday May 27 2022, @03:19PM (1 child)

        by Phoenix666 (552) on Friday May 27 2022, @03:19PM (#1248286) Journal

        That was modded "troll?" It's probably something else you said on some other topic rather than this, and the modder wants to cancel you for it.

        I've said it before and I'll say it again: if a person disagrees with a post he should either ignore it or reply instead of downmodding, because more dialogue is better than less.

        I, for one, thank you for the link. It's nice to occasionally see something with the shiny wrapper and packaging ripped off to remind us what's under the hood.

        --
        Washington DC delenda est.
        • (Score: 0) by Anonymous Coward on Friday May 27 2022, @04:49PM

          by Anonymous Coward on Friday May 27 2022, @04:49PM (#1248308)

          More likely it was his attempt to pawn off a Microsoft GitHub link in place of a legitimate, established project.

    • (Score: 2) by Freeman on Friday May 27 2022, @01:56PM (1 child)

      by Freeman (732) on Friday May 27 2022, @01:56PM (#1248268) Journal

      Interesting as that may be. I very much prefer the likes of LibreOffice or even the likes of Gnumeric to a command line interfaced spreadsheet. At that point, I'd prefer making my own csv in notepad++ than dealing with a command line type spreadsheet program!

      --
      Joshua 1:9 "Be strong and of a good courage; be not afraid, neither be thou dismayed: for the Lord thy God is with thee"
      • (Score: 3, Insightful) by RamiK on Friday May 27 2022, @03:07PM

        by RamiK (1813) on Friday May 27 2022, @03:07PM (#1248284)

        Normally I'd do the same but the subject at hand was a terminal-based spreadsheet so I thought I'd recommend a contemporary alternative in much the same way I recommended WordGrinder [soylentnews.org] when WordPerfect came up.

        Besides, even though I think librecalc is perfectly find for spreadsheets, as a vim/vis user I can relate plenty with what attracts people to terminal software. And seeing how there's an active project of the sort...

        --
        compiling...
  • (Score: 2) by Frosty Piss on Friday May 27 2022, @05:47AM (1 child)

    by Frosty Piss (4971) on Friday May 27 2022, @05:47AM (#1248221)

    Why?

    • (Score: 5, Touché) by Anonymous Coward on Friday May 27 2022, @06:05AM

      by Anonymous Coward on Friday May 27 2022, @06:05AM (#1248228)

      Are you a real hacker? The obvious answer is, 'why not'? :-)

  • (Score: 2, Insightful) by Anonymous Coward on Friday May 27 2022, @06:49AM (2 children)

    by Anonymous Coward on Friday May 27 2022, @06:49AM (#1248230)

    > ported

    It's just hacking the executive loader on Linux to run the binary; there's no source. Same thing was doing for supporting SYSV ABIs.

    • (Score: 2) by canopic jug on Friday May 27 2022, @06:53AM

      by canopic jug (3949) Subscriber Badge on Friday May 27 2022, @06:53AM (#1248231) Journal

      I stand corrected.

      --
      Money is not free speech. Elections should not be auctions.
    • (Score: 2) by Freeman on Friday May 27 2022, @02:18PM

      by Freeman (732) on Friday May 27 2022, @02:18PM (#1248276) Journal

      True, but the key is that you don't need to run a DOS emulator to get it to function. Native support is much nicer.

      --
      Joshua 1:9 "Be strong and of a good courage; be not afraid, neither be thou dismayed: for the Lord thy God is with thee"
  • (Score: 4, Interesting) by Rich on Friday May 27 2022, @11:35AM (16 children)

    by Rich (945) on Friday May 27 2022, @11:35AM (#1248249) Journal

    Interesting read. The guy really did a nice curating job in locating all the components and applying the hacks/translations to get it working. It gives a bit of insight into the thinking of the developers. Therefore, I appreciate if the technical bits are accompanied by narrated history (a la folklore.org and the QuickDraw sources), but I guess this guy is more of a hacker than a journalist :)

    Anyway, going back to the late 70s, early 80s, from my personal conclusions, the key to commercial success was access to a floating point library or being able to write one. They didn't have Wikipedia for a quick overview of all implementation quirks of IEEE 754. Which they also didn't have. A butterfly-effect incident here is that Woz had written his integer Basic, and he had written a floating point library. But he lacked a month or two or so to integrate those, so Apple licensed Microsoft Basic as a stopgap, which became the major pre-MS-DOS stepping stone for Gates. Noteworthy is that neither Gates nor Allen were able to write the FP code themselves, they had to rely on a third guy, Monte Davidoff.

    When you booted application software in those times, there was no system library you could rely on for FP (well, with the Apple II you could (ab)use those in Basic, but with any PC other than the original IBM, you could not). Marketing guy Mitch Kapor knew the VisiCorp guys and had Jonathan Sachs, both bringing all the architectural foundation, and Sachs apparently was so good that he not only pulled of the whole show, but in assembly, too.

    • (Score: 3, Insightful) by Anonymous Coward on Friday May 27 2022, @04:47PM (9 children)

      by Anonymous Coward on Friday May 27 2022, @04:47PM (#1248306)

      Floating point arithmetic (binary floating point) doesn't map exactly to our base-10 decimals, so there is always the issue of dealing with strange inaccuracies. For financial calculations, you need base-10 decimal arithmetic. Funny how some people can never learn this.

      As an aside, the Javascript language really needs to define a base-10 decimal type like Java and even Python have.

      • (Score: 3, Interesting) by Rich on Friday May 27 2022, @06:20PM (8 children)

        by Rich (945) on Friday May 27 2022, @06:20PM (#1248328) Journal

        I think this is somewhat of a dying attitude. Back in the 70s, Chuck Peddle left everything out of the 6800 for the 6502 as long as it was still somehow Turing complete. But he did put in BCD hardware. Not that anyone noted it was buggy, because already back then no one really cared. The main problem with financial FP is that one gets bit when the mantissa doesn't have enough bits, which is easily the case with 24 bits (which reach only to 167772 bucks and 15 cents). I've written about a related bug here before.

        Once you also accept that you'd rather have fixed post-decimal-point digits for rounding predictability, you get away even with fixed-point integer arithmetic, or 48-bit mantissa floats (unless the numbers in question involve the exact U.S. deficit). Unless you have really really strange rules that involve very small decimal numbers to exact precision. But that makes the fringe case the other way round: a few braindead people in bank high rises have not yet understood computers. ;)

        • (Score: 1, Interesting) by Anonymous Coward on Friday May 27 2022, @06:29PM (2 children)

          by Anonymous Coward on Friday May 27 2022, @06:29PM (#1248333)

          Perhaps because of the limited length mantissa problem that would come with doing base-10 decimal arithmetic in hardware, it's all done in software by any implementation I know of. (Arbitrary precision decimal arithmetic.)

          • (Score: 1, Informative) by Anonymous Coward on Saturday May 28 2022, @04:03PM (1 child)

            by Anonymous Coward on Saturday May 28 2022, @04:03PM (#1248524)

            IBM mainframe processors have instructions for BCD arithmic, implemented in microcode.

        • (Score: 0) by Anonymous Coward on Friday May 27 2022, @07:22PM (3 children)

          by Anonymous Coward on Friday May 27 2022, @07:22PM (#1248348)

          On the contrary, people are finally starting to realize that you just can't use floating point for... Well, anything, really, except graphics, and even then it causes a lot of problems.

          Part of the reason is that Serious Business Languages like Java now include proper decimal number support in the standard library. The other part of the reason is that nobody cares about the underlying hardware representation any more outside of the most performance critical code, which accounting software never is. (I would say "financial," but high frequency trading is performance critical). So there's no temptation to just use whatever format fits into the CPU, like there is in C or assembly.

          • (Score: 1, Informative) by Anonymous Coward on Saturday May 28 2022, @05:48PM (1 child)

            by Anonymous Coward on Saturday May 28 2022, @05:48PM (#1248554)

            Floating point is useful when you don't care about precision. That isn't restricted to graphics, but it is certainly overused. The problem is that there is a critical mass of programmers who continue to be mistaught this fundamental concept. Some eventually catch on but most don't.

            Sturgeon's Law means that 90% of programmers (and programming instructors) don't understand the basics. Throw in Intel's advertising campaign for the Pentium 90, which pushed floating point as the solution for everything as a hard sales tactic, and it was a recipe for disaster. Both Lua and Javascript went all in on it, and while the Lua community was eventually forced to clean up, the Javascript community has not. Today, Javascript is the single most used programming language in the world, making it the first and all-too-often only programming language that many learn. That means that we have an entire generation of programmers who don't know any better, and in many cases who's job depends on using a fundamentally broken language, so they are not only resistant to fixing it but are actively pushing its adoption in other languages.

          • (Score: 2) by turgid on Saturday May 28 2022, @09:12PM

            by turgid (4318) Subscriber Badge on Saturday May 28 2022, @09:12PM (#1248610) Journal

            Floating-point has its place in numerical modelling and other scientific code where the people using it have thought hard about the accuracy and precision they need for their particular problem being solved.

        • (Score: 0) by Anonymous Coward on Saturday May 28 2022, @04:30PM

          by Anonymous Coward on Saturday May 28 2022, @04:30PM (#1248537)

          It is impossible for a binary mantissa to have enough bits for financial calculations, both because 0.1 is a repeating fraction in binary and because floating point by definition doesn't guarantee precision. Only fixed point meets the requirements of finance, but support has always been lacking. BCD is an obsolete attempt at decimal floating point and was abandoned because it was never very good.

    • (Score: 2) by owl on Saturday May 28 2022, @03:31AM

      by owl (15206) on Saturday May 28 2022, @03:31AM (#1248428)

      When you booted application software in those times, there was no system library you could rely on for FP (well, with the Apple II you could (ab)use those in Basic, but with any PC other than the original IBM, you could not).

      Au contraire, but indeed there was one PC where you always had a FP library available. The 6502 based Atari's had a floating point library (base 10 floating point at that) in their system ROMs. See https://www.atariarchives.org/dere/chapt08.php" [atariarchives.org]:

      The remainder of this subsection briefly lists the main elements of the OS. These elements are described in detail in following subsections.

      ...

      FLOATING POINT PACKAGE. The floating point package is a set of mathematical routines that extend the arithmetic capability of the system. The routines use binary coded decimal (BCD) arithmetic to provide standard mathematical functions (+, -, *, /), exponential and logarithmic functions as well as conversion from ATASCII to BCD and BCD to ATASCII.

    • (Score: 0) by Anonymous Coward on Saturday May 28 2022, @03:41AM (4 children)

      by Anonymous Coward on Saturday May 28 2022, @03:41AM (#1248429)
      You can't even be sure that the quarterly revenue of Microsoft (or just about any Fortune 500 company) is accurate to the cent if you use floating point. Floating point numbers are really only useful for scientific computation (including graphics-related stuff). For anything where you need full accuracy like for financials you need to do arbitrary precision fixed point arithmetic, preferably in decimal.
      • (Score: 3, Interesting) by owl on Saturday May 28 2022, @01:29PM (2 children)

        by owl (15206) on Saturday May 28 2022, @01:29PM (#1248486)

        Even with decimal you can not ever be totally accurate from the math alone.

        Say you need to divide a dollar three ways:

        1.00/3 = 0.333...

        The exact decimal representation of $1 divided by three is an infinite repeating decimal. Clip the precision at anything smaller than infinity and you have an inaccurate result.

        You have to do extra rounding afterward to actually split "penny accurate" such that you end up with two of 0.33 (off by 0.003333... each too low) and one of 0.34 (off by 0.0066666... too high).

        The difference with "decimal" math is the points where the infinite repeating representations occur are familiar (because they are the same points everyone learned in basic math in school). Binary has even more instances where the true representation of some fraction is an infinite sequence, making binary floating point results seem more surprising because math that is perfectly accurate in base 10 becomes slightly inaccurate in base 2, breaking ones intuition.

        • (Score: 2) by Lester on Saturday May 28 2022, @10:47PM (1 child)

          by Lester (6231) on Saturday May 28 2022, @10:47PM (#1248631) Journal

          The curse in binary numbers is that 1/10 is 0.1 in decimal, but when you covert to binary, 1/1010 is a periodic number

          • (Score: 3, Informative) by owl on Sunday May 29 2022, @03:28PM

            by owl (15206) on Sunday May 29 2022, @03:28PM (#1248780)

            Which is why, back in the early 80's, when one would see Atari 800's on display next to IBM-PC's at general stores (Sears, Montgomery Ward, K-Mart, etc.) I liked to run basically this little program on both (note, I've not written *any* BASIC in a very long time, this is not likely to be 100% syntax correct for either machine):

            10 let x=100
            20 print "x=$x"
            30 x=x-0.01
            40 if $x > 0 then goto 20

            On the Atari the above would accurately count down by the penny in base 10 from 100 to 0 (because the Atari's floating point was actually base 10, so 0.01 was exact).

            On the IBM PC, it would count the first few loops correctly, and then the inexactness of 0.01 in binary would accumulate enough to start getting results that looked like 99.652374752, 99.647326263, 99.6375472727.

      • (Score: 0) by Anonymous Coward on Saturday May 28 2022, @05:54PM

        by Anonymous Coward on Saturday May 28 2022, @05:54PM (#1248556)

        Fixed point is base agnostic because it is done with integers under the hood.

  • (Score: 2) by wisnoskij on Monday May 30 2022, @02:07PM

    by wisnoskij (5149) <{jonathonwisnoski} {at} {gmail.com}> on Monday May 30 2022, @02:07PM (#1248956)

    You cannot port something into GNU, GNU is a group of programmers who developed many of the core applications that most linux distributions depend upon. But since the GNU community did not do the porting, this was simply ported into Linux.

(1)