{"id":36868445,"url":"https://github.com/robbiew/godoors","last_synced_at":"2026-01-12T14:57:54.280Z","repository":{"id":57657678,"uuid":"462074109","full_name":"robbiew/godoors","owner":"robbiew","description":"Helpful library for creating linux-based BBS door applications","archived":false,"fork":false,"pushed_at":"2022-05-09T16:41:00.000Z","size":14592,"stargazers_count":10,"open_issues_count":1,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-06-22T06:44:04.645Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","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/robbiew.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":"2022-02-22T00:08:48.000Z","updated_at":"2023-12-01T14:34:08.000Z","dependencies_parsed_at":"2022-09-07T05:51:24.992Z","dependency_job_id":null,"html_url":"https://github.com/robbiew/godoors","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/robbiew/godoors","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiew%2Fgodoors","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiew%2Fgodoors/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiew%2Fgodoors/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiew%2Fgodoors/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robbiew","download_url":"https://codeload.github.com/robbiew/godoors/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiew%2Fgodoors/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28340414,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2026-01-12T14:57:53.527Z","updated_at":"2026-01-12T14:57:54.275Z","avatar_url":"https://github.com/robbiew.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# :computer: GoDoors\n\nHelpful library for creating linux-based door applications (like games and utilities) for BBSs that utilize STDIN and STDOUT, when connected over a terminal program like [SyncTerm](https://syncterm.bbsdev.net/), [MagiTerm](https://gitlab.com/magickabbs/MagiTerm), [NetRunner](http://mysticbbs.com/downloads.html) or [IGTerm](https://www.phenomprod.com/).\n\nIf you're not already running linux-based BBS software like [Talisman](https://talismanbbs.com/), [Mystic](http://mysticbbs.com/downloads.html), [Synchronet](https://wiki.synchro.net/install:nix), [ENiGMA½](https://enigma-bbs.github.io/) or [WWIV](https://github.com/wwivbbs/wwiv), then this library probably isn't for you.\n\n----\n![Example utilities from examples/examples.go](screenshot/screenshot1.png \"Example utilities from examples/examples.go\") \n\u003e :point_up: Screenshot of [example](https://github.com/robbiew/godoors-example) program to test some of the functions\n\n## INSTALL\n```go\ngo get github.com/robbiew/godoors\n```\n\n## USAGE\n```go\nimport (\n    gd \"github.com/robbiew/godoors\"\n)\n```\n\n\n## DROP FILES\n\n```go \ngd.DropFileData(path string) (string, int, int)\n```\n\n\u003e :point_up: Pass the path of the [door32.sys](https://raw.githubusercontent.com/NuSkooler/ansi-bbs/master/docs/dropfile_formats/door32_sys.txt) drop file PARENT FOLDER (including trailing slash), and it will return HANDLE/ALIAS, TIME LEFT (in minutes), EMULATION TYPE (0 = Ascii, 1 = Ansi) and NODE NUMBER. You can check out the [main.go](examples/main.go) to see it in action using FLAG to handle the ```-path``` command line argument for the folder location.\n\u003e Only door32.sys is supported at this time.\n\n```go\ngo run main.go -path ./\n```\n\n***\n \n## GET TERMINAL HEIGHT AND WIDTH\n```go\ngd.GetTermSize() (int, int)\n```\n\n\u003e :point_up: Tries to detect the user's terminal size. Returns HEIGHT and WIDTH. If it can't detect it, it'll default to 25 and 80.\n\n***\n## DISPLAY ANSI ART\n```go\ngd.PrintAnsi(file string, delay int) \n```\n\n\u003e :point_up: Pass the valid path of an ANSI art file and it'll strip the SAUCE record, then print it line by line, with an optional delay (in milliseconds, e.g. 40) to simulate slower speeds.\n\n```go\n\nvar (\n\tgd.Heart        \n\tgd.ArrowUpDown  \n\tgd.ArrowUp      \n\tgd.ArrowDown   \n\tgd.ArrowDownFat \n\tgd.ArrowRight  \n\tgd.ArrowLeft    \n\tgd.Block       \n)\n```\n\u003e :point_up: Variables for printing individual CP437 symbols on the fly, e.g. fmt.Println(SYMBOL) or whatever. (TO-DO: add more!)\n\n***\n## DISPLAY SOMETHING AT X,Y COORDINATES\n```go\ngd.PrintAnsiLoc(file string, x int, y int)\ngd.PrintStringLoc(text string, x int, y int)\n```\n\n\u003e :point_up: Same as above, only it'll print the art to the screen at X,Y coordinates, incrementing the Y position after every line. Handy of you need to update the screen with art in a particular location without clearing and re-writing everything.\n\n***\n## PAUSE\n```go\ngd.Pause()\n```\n\n\u003e :point_up: Hit any key \n\n***\n## CONTINUE Y/N PROMPT\n```go\ngd.Continue()\n```\n\n\u003e :point_up: No cancels, Yes does... something else.\n\n***\n## POP UP STYLE MODAL\n```go\ngd.Modal(text string, l int, w int, h int)\n\n```\n\n\u003e :point_up: currently coded to display a background ANSI file with a \"Continue? Y/n\" prompt/\n\n***\n\n## CENTER SOMETHING (text, art, etc.)\n```go\ngd.AbsCenterText(s string, l int, w int, h int, c string) \ngd.AbsCenterArt(file string, l int, w int, h int) \ngd.CenterText(s string, w int) \n```\n\u003e :point_up: \"absolute center\" being both vertically an horizontally centered based in the terminal height and width.\n\n***\n\n## Cursor related\n\n```go\n// Move the cursor n cells to up.\ngd.CursorUp(n int) \n\n// Move the cursor n cells to down.\ngd.CursorDown(n int) \n\n// Move the cursor n cells to right.\ngd.CursorForward(n int) \n\n// Move the cursor n cells to left.\ngd.CursorBack(n int) \n\n// Move cursor to beginning of the line n lines down.\ngd.CursorNextLine(n int) \n\n// Move cursor to beginning of the line n lines up.\ngd.CursorPreviousLine(n int) \n\n// Move cursor horizontally to x.\ngd.CursorHorizontalAbsolute(x int) \n\n// Show the cursor.\ngd.CursorShow() \n\n// Hide the cursor.\ngd.CursorHide()\n```\n***\n## Color\n```go\n// Text colors supported by BBS term programs\n// usage: fmt.Println(gd.Yellow)\ngd.Black         \ngd.Red          \ngd.Green         \ngd.Yellow     \ngd.Blue        \ngd.Magenta      \ngd.Cyan         \ngd.White         \ngd.BlackHi   \ngd.RedHi      \ngd.GreenHi     \ngd.YellowHi    \ngd.BlueHi      \ngd.MagentaHi   \ngd.CyanHi     \ngd.WhiteHi     \n\n// Background colors\ngd.BgBlack        \ngd.BgRed          \ngd.BgGreen        \ngd.BgYellow       \ngd.gd.BgBlue          \ngd.BgMagenta       \ngd.BgCyan          \ngd.BgWhite         \ngd.BgBlackHi     \ngd.BgRedHi       \ngd.BgGreenHi     \ngd.BgYellowHi   \ngd.BgBlueHi     \ngd.BgMagentaHi   \ngd.BgCyanHi      \ngd.BgBWhiteHi     \n\n// Reset to default colors\ngd.Reset \n```\n***\n## FONTS\n```go\n// Supported by SyncTerm\n// usage: fmt.Println(gd.Topaz)\ngd.Mosoul        \ngd.Potnoodle     \ngd.Microknight    \ngd.Microknightplus \ngd.Topaz          \ngd.Topazplus      \ngd.Ibm \ngd.Ibmthin         \n```\n\n***\n\n## MISC\nSee [godoors.go](godoors.go) for other misc. functions.\n- Configurable idle/exit timer\n- Menu loop\n\n## :clipboard: TO-DO\n- ~~Time-out if no key press in X mins~~\n- ~~Pop-up style window~~\n- ~~Pause sequence (press any key to continue)~~\n- ~~Confirm Y/n prompt~~\n- ~~Get single key press from keyboard~~\n- Get text input, max X characters\n- ~~Idle/timeout timer example~~\n- Write user data to text file\n- Create a leader or score board\n- Write user data to sqlite file\n- Retrive/parse/display JSON data from the Internet APIs (16 colors, news, weather, etc.)\n- Retrieve an ANSI file from the internet and display\n- Add entry to end of log file\n- Tidy on exit\n- Save \u0026 Restore cursor position\n- Create a scrollable/selectable list of things\n- ANSI art file manipulation (scroll up/down, left/right)\n- SIXEL support!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobbiew%2Fgodoors","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobbiew%2Fgodoors","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobbiew%2Fgodoors/lists"}