{"id":13830677,"url":"https://github.com/taviso/lotusdrv","last_synced_at":"2025-03-25T23:30:29.736Z","repository":{"id":39915707,"uuid":"343472612","full_name":"taviso/lotusdrv","owner":"taviso","description":"Lotus 1-2-3 R4D Display Driver for DOSEMU","archived":false,"fork":false,"pushed_at":"2022-05-21T21:01:25.000Z","size":318,"stargazers_count":150,"open_issues_count":2,"forks_count":2,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-20T22:03:57.877Z","etag":null,"topics":["123","dos","retrocomputing"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/taviso.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-01T15:55:49.000Z","updated_at":"2025-01-15T05:41:41.000Z","dependencies_parsed_at":"2022-09-25T08:11:56.249Z","dependency_job_id":null,"html_url":"https://github.com/taviso/lotusdrv","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taviso%2Flotusdrv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taviso%2Flotusdrv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taviso%2Flotusdrv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taviso%2Flotusdrv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taviso","download_url":"https://codeload.github.com/taviso/lotusdrv/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245560916,"owners_count":20635654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["123","dos","retrocomputing"],"created_at":"2024-08-04T10:01:05.506Z","updated_at":"2025-03-25T23:30:27.689Z","avatar_url":"https://github.com/taviso.png","language":"C","readme":"# Lotus 1-2-3 R4D Display Driver for DOSEMU2\n\nThis is a work-in-progress display driver for Lotus 1-2-3 R4D to enable support\nfor arbitrary text resolutions in [DOSEMU2](https://github.com/dosemu2/dosemu2).\n\nThat means you can run 123 in a maximized xterm, and see more columns than\nyou could possibly need!\n\n![screenshot](screenshot.png)\n\n\u003e Note: This driver is intended for DOSEMU2 in *term* mode, i.e. running in a terminal.\n\nThis driver basically works, but I haven't fully implemented all the API, so if you\ndo something unusual it might trap.\n\nIf you are excited to help hacking on this, or writing modern add-ins for\n1-2-3, I'd love to hear about it!\n\nFuture ideas:\n\n- A FILE driver that adds native support for XLS, or ODT?\n- ~~libcaca support so that text mode graphs work?~~ working on it!\n- More modern @functions?\n- Javascript/Python/lua bindings?\n\n# Graphs\n\nI have an incomplete ascii-art graphics implementation. That means drawing\nsimple graphs will work even in a terminal! Don't expect high resolution\ngraphics, but simple line, bar, and even pie charts really do work!\n\nHere is a screenshot of a sine wave line graph, it will improve in future.\n\n![sinewave](lotus-sine-wave.gif)\n\nI have some development notes available\n[here](https://lock.cmpxchg8b.com/lotus123.html).\n\n# Building\n\n\u003e If you just want a binary to try, check out the Releases section.\n\nNote that this code isn't really ready for non-developer use yet, but you're\nwelcome to try it out and tell me about any visual glitches or crashes!\n\n# 123 FAQ\n\n**Q. Which display driver should I be using for terminal mode?**\n\nA. Select the CGA driver during install, then install this driver :-)\n\n**Q. If I use the /Worksheet/Status command, 123 does not see all the EMS/XMS memory I have configured in DOSEMU?**\n\nA. Try adding `SET 123MEMSIZE=134217728` (that's 128M, use an appropriate number for your configuration) to `fdppauto.bat`.\n\nThere is also `123SWAPPATH`, `123VIRTSIZE` and `123SWAPSIZE` if you want to tweak it.\n\n**Q. If I try to use 123 in two xterms simultaneously, I get an error like \"The stand-alone license is not currently available\".**\n\nA. Add something like this to your `fdppauto.bat`\n\n```bat\nREM CLEAN UP LICENSE FOR 1-2-3\nDEL C:\\123R4D\\LICENSE.000 \u003e NUL\nCOPY NUL C:\\123R4D\\LICENSE.000 \u003e NUL\n```\n\n**Q. What DOSEMU settings do you use for 123?**\n\nA. Here is my [dosemurc](https://lock.cmpxchg8b.com/files/dosemurc)\n\n**Q. How can I send 123 worksheets to someone else?**\n\nA. LibreOffice can open and convert WK3 files, if necessary. Most formulas and features will be preserved.\n\n**Q. Can I fetch external data into 123, like stock prices with a macro?**\n\nA. I use a macro like this to fetch stock prices (simplified):\n\n```\n{SYSTEM \"UNIX stocks.sh GOOGL \u003e %TEMP%\\STOCKS.TXT\"}\n{OPEN \"C:\\TMP\\STOCKS.TXT\", \"r\"}\n{READLN C1}\n{CLOSE}\n```\n\nThe `UNIX` command is a `DOSEMU` feature, it runs a command on the host. The\n123 online help explains how to loop over ranges, etc.\n\nI have an example sheet that demonstrates how to do this available\n[here](https://lock.cmpxchg8b.com/files/findemo.wk3), you can use it as a\ntemplate.\n\nIt automatically populates a table of stock prices when you press `Alt-R`. Use\n`Ctrl-PgUp` and `Ctrl-PgDn` to switch sheets and browse around.\n\nYou will need a script in your `$PATH` called `stocks.sh` like this, and don't\nforget to add the full path to your `$_unix_exec` in `.dosemurc`.\n\n```bash\n#!/bin/bash\n\ndeclare api=\"https://query1.finance.yahoo.com/v7/finance/quote\"\ndeclare filter=\".quoteResponse.result[].regularMarketPrice\"\n\ncurl -s \"${api}?symbols=${1:-^GSPC}\" | jq -r \"${filter}\" | cat\n```\n\n**Q. What do I need to know to get started?**\n\nA. If you don't have a manual, there's one available online [here](https://archive.org/details/lotus-1-2-3-release-3.1-reference/Lotus%201-2-3%20Release%203.1%20-%20Tutorial).\n\nIf you've used any spreadsheet before, you should be able to get started\nquickly. Functions use `@` instead of `=`, but the common functions like\n`@SUM`, `@AVG`, `@INDEX`, and even `@HLOOKUP` all work as you would expect.\n\n| Key | Description |\n| --- | ------------|\n|  /  | Open the 123 menu.\n| F1  | Open online help.\n| F2  | Edit an existing cell contents, just type to overwrite cell.\n| F3  | Show names, press F3 while editing to see a list of functions or ranges.\n| F4  | Enter point mode - it's like visual mode in Vim - to select ranges.\n| F5  | Goto Address.\n| Ctrl PgUp/PgDn | Move between open tabs/sheets (use /Worksheet/Insert/Sheet to add a tab).\n| F9  | Recalculate, if you press it while entering a formula, the text will be replaced with it's value.\n\nIf you want to be able to save your documents to your home directory, you can\nadd something like `LREDIR D: \\\\linux\\fs\\home\\foo\\Documents` to your `fdppauto.bat`.\n\n**Q. Why does selecting text with the mouse not work?**\n\nDOSEMU emulates a mouse (even in terminal mode!) so when you try to select text\nDOSEMU is reporting mouse events to DOS.\n\nHow to stop that happening depends on your terminal.\n\nIn `XTerm` you can Shift-RightClick and disable \"Allow Mouse Ops\", change the\n`allowMouseOps` resource to make it permanent.\n\nIn most terminals you can hold down `Shift` while selecting.\n\n**Q. How do I undo my last action?**\n\nThe default keybinding is `Alt-F4`, but that can be hard to enter on modern systems.\n\nIf you can't press `Alt-F4` easily, there are two options.\n\n1. DOSEMU has support for simulating modifier keys, you can\n   type: Ctrl-6 Shift-A F4 Ctrl-6 Shift-A.\n2. That's a lot of keys though, another workaround is to add\n   [SCANCODE](http://bretjohnson.us/index.htm) to your `%PATH%`, and then bind\n   a macro to something like `{SYSTEM \"SCANCODE M 2,W 1,0 \\\"READY\\\",ALT-F4\"}`.\n\nYou can then bind a macro to `Alt-Z` by naming a range `\\z`.\n\n","funding_links":[],"categories":["C"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaviso%2Flotusdrv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaviso%2Flotusdrv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaviso%2Flotusdrv/lists"}