{"id":26129963,"url":"https://github.com/nilqed/cl-regis","last_synced_at":"2026-02-15T12:37:49.573Z","repository":{"id":280144830,"uuid":"941102665","full_name":"nilqed/cl-regis","owner":"nilqed","description":"ReGIS in Common Lisp","archived":false,"fork":false,"pushed_at":"2026-02-12T13:59:04.000Z","size":102,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-12T22:37:56.718Z","etag":null,"topics":["common-lisp","graphics-engine","graphics-rendering","regis"],"latest_commit_sha":null,"homepage":"","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nilqed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-01T13:50:04.000Z","updated_at":"2026-02-12T13:59:08.000Z","dependencies_parsed_at":"2025-03-01T15:27:12.962Z","dependency_job_id":"55a8483d-ae82-494a-8da2-6dff57260724","html_url":"https://github.com/nilqed/cl-regis","commit_stats":null,"previous_names":["nilqed/cl-regis"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nilqed/cl-regis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilqed%2Fcl-regis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilqed%2Fcl-regis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilqed%2Fcl-regis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilqed%2Fcl-regis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nilqed","download_url":"https://codeload.github.com/nilqed/cl-regis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilqed%2Fcl-regis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29478355,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T11:35:25.641Z","status":"ssl_error","status_checked_at":"2026-02-15T11:34:57.128Z","response_time":118,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["common-lisp","graphics-engine","graphics-rendering","regis"],"created_at":"2025-03-10T19:59:48.829Z","updated_at":"2026-02-15T12:37:49.568Z","avatar_url":"https://github.com/nilqed.png","language":"Common Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cl-regis\nReGIS in Common Lisp\n\n:warning: work in progress :construction:\n\nThis is for now a prototype only, inspired by https://github.com/feilipu/ReGIS.\n\nCiting from the VT330/VT340 Graphics Programming Manual[^1]:\n\nReGIS is a graphics instruction set from Digital[^2]. ReGIS provides a set of commands you can use to draw images on the screen.\n\nOf course, those terminals are hardly in use today, however, there still are some terminal emulations that support ReGIS graphics. Besides some commercial ones, we are only aware of good old  **XTerm**, however, it must be compiled with `--enable-regis-graphics` contrary to **Sixel**[^3] support which is enabled by default. This is, however, no big deal (see below).\n\n## More info about ReGIS\n* https://en.wikipedia.org/wiki/ReGIS\n* http://www.sizecoding.org/wiki/ReGIS\n* https://vt100.net/docs/vt3xx-gp/chapter1.html\n* https://en.wikipedia.org/wiki/VT320\n\n## Compiling xterm with ReGIS support\nBorrowed from https://github.com/feilipu/ReGIS:\n\n\n    $ sudo apt install -y libxaw7-dev libncurses-dev libxft-dev\n    $ wget https://invisible-island.net/datafiles/release/xterm.tar.gz\n    $ tar xf xterm.tar.gz\n    $ cd xterm-XXX\n    $ ./configure --enable-regis-graphics\n    $ make\n    $ sudo make install\n    \n\nAlso see https://github.com/nilqed/xterm-regis\n\n## Testing\nWe will try the following two examples:\n\nThe string from https://github.com/feilipu/ReGIS:\n\n    (defvar regis-ex1 (concatenate 'string\n    \"S(E)W(I(M))P[600,200]V[][-200,+200]V[][400,100]W(I(G))P[700,100]\"\n    \"V(B)[+050,][,+050][-050,](E)V(W(S1))(B)[-100,][,-050][+100,](E)V(W(S1,E))\"\n    \"(B)[-050,][,-025][+050,](E)W(I(C))P[200,100]C(A-180)[+100]C(A+180)[+050]\"\n    \"W(I(B))P[200,300]C(W(S1))[+100]C(W(S1,E))[+050]W(I(W))T(S02)\\\"hello world\\\"\"))\n\nand the sample from Wikipedia https://en.wikipedia.org/wiki/ReGIS:\n\n    (defvar regis-ex2 \n    \"S(E)(C1)P[100,440]V(B),[+100,+0],[+0,-10],[-100,+0],(E)P[500,300],F(C[+100])\")\n    \nNote that the `begin` and `end` control sequences were removed. Those have to be added, as can be seen from the following code that is used for the examples:\n\n    (defun rbeg () (format t \"~C~C~C~C\" #\\Esc #\\P #\\1 #\\p))\n    (defun rend () (format t \"~C~C\" #\\Esc #\\\\))\n\n    (defun ex1 ()\n      (progn (rbeg)(format t \"~A\" regis-ex1)(rend)))\n\n    (defun ex2 ()\n      (progn (rbeg)(format t \"~A\" regis-ex2)(rend)))\n\nRunning `(ex1)`:\n\n![ex1](docs/regis-ex1.png)\n\nRunning `(ex2)`:\n\n![ex2](docs/regis-ex2.png)\n\n\n## cl-regis.lisp\n\nYou will find the file `cl-regis.lisp` in the `src` directory. It is just\na POC for the moment.\n\n    begin .............. enter ReGIS  \n    end ................ end ReGIS\n\n    setpos (x y) ....... set position (pixels). Origin is left upper corner.\n    circle (r) ......... draw a circle with radius r at current position.\n    circlef (r) ........ draw a filled circle.\n    clear () ........... clear the ReGIS buffer.\n\n    pixela (x y) ....... draw a pixel at (x,y).\n    pixelr () .......... draw a pixel relative to current position.\n    mover (dx dy) ...... move relative (dx,dy) to current position.\n    text (txt size) .... draw text 'txt' with size 'size'.\n\n    arc (deg r) ........ draw an arc with radius r and opening angle deg.\n    box (w h) .......... draw a box w wide an h height.\n    boxf (w h) ......... draw a filled box.\n    regis (cmd) ........ enter any ReGIS command 'cmd'\n\n    color (c) .......... set coolor c\n    lineato (x y) ...... draw a line to absolute position (x,y).\n    linerto (dx dy) .... draw a line to relative position (dx,dy).\n    wstyle (s) ......... set the write sryle.\n    mroffd(d offset) ... move relative offset.\n    setposr (dx dy) .... set position relative.\n    pat (p) ............ set pattern p.\n    \n    \nFor details consult the VT* manual.\n\n\n### tests\n\n#### test1\nSet position 500,250 and draw two circles (one filled).\n\n\n    (defun test1 ()\n       (progn (begin) (clear) (setpos 500 250) (circle 100) (circlef 70) (end)))\n\n\n![test1](docs/test1.png)\n\n\n#### test2\nSet position 500,250 and draw a text.\n\n    (defun test2 ()\n       (progn (begin) (clear) (setpos 500 250) (text \"cl-regis :)\" 2) (end)))\n  \n![test2](docs/test2.png)  \n\n\n#### test3\nSet position 500,250 and draw an arc and a box.\n\n    (defun test3 ()\n       (progn (begin) (clear) (setpos 500 250) (arc 45 100) (box 30 40) (end)))\n  \n\n![test3](docs/test3.png)\n\n\n#### test4\nSet position 500,250 and draw a yellow box.\n\n    (defun test4 ()\n       (progn (begin) (clear) (setpos 500 250) (color \"Y\") (boxf 30 40) (end)))\n\n\n![test4](docs/test4.png)\n\n\n#### test5\nSet position 500,250 and draw two lines. One absolute to 400,300 and one\nrelative (-40,50).\n\n\n    (defun test5 ()\n       (progn (begin) (clear) (setpos 500 250) (lineato 400 300) (linerto -40 50) (end)))\n\n\n![test5](docs/test5.png)\n\n\n\n:todo:\n\nInterface with some great libraries like \nVECTO[^4], CL-VECTORS[^5] and so on. \n\n\n:date:\n\n\n\n\n[^1]: http://bitsavers.trailing-edge.com/pdf/dec/terminal/vt340/EK-VT3XX-GP-001_VT330_VT340_Graphics_Programming_Mar87.pdf\n[^2]: https://en.wikipedia.org/wiki/Digital_Equipment_Corporation\n[^3]: https://github.com/nilqed/cl-sixel\n[^4]: https://www.xach.com/lisp/vecto/ \n[^5]: https://projects.tuxee.net/cl-vectors/ \n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnilqed%2Fcl-regis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnilqed%2Fcl-regis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnilqed%2Fcl-regis/lists"}