{"id":14982642,"url":"https://github.com/jasonsikes/qlogo","last_synced_at":"2025-11-04T11:30:39.445Z","repository":{"id":44627766,"uuid":"112061494","full_name":"jasonsikes/QLogo","owner":"jasonsikes","description":"QLogo is a rewrite of the UCBLogo language and user interface written in C++ using Qt.","archived":false,"fork":false,"pushed_at":"2024-08-21T20:35:12.000Z","size":4498,"stargazers_count":55,"open_issues_count":6,"forks_count":12,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-02-08T08:34:37.552Z","etag":null,"topics":["cpp","language","logo","qt","qt6","ucblogo"],"latest_commit_sha":null,"homepage":"https://qlogo.org","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jasonsikes.png","metadata":{"files":{"readme":"README.md","changelog":"changes.txt","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":"2017-11-26T06:36:09.000Z","updated_at":"2024-12-15T10:43:03.000Z","dependencies_parsed_at":"2024-09-24T10:02:03.064Z","dependency_job_id":"1c1bdcdd-edcb-48b8-bbb8-b3b36a67ac80","html_url":"https://github.com/jasonsikes/QLogo","commit_stats":{"total_commits":379,"total_committers":4,"mean_commits":94.75,"dds":0.01846965699208447,"last_synced_commit":"bd4f0ee0e77a741386ff8c0227e6f6a57e9e35ae"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jasonsikes%2FQLogo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jasonsikes%2FQLogo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jasonsikes%2FQLogo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jasonsikes%2FQLogo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jasonsikes","download_url":"https://codeload.github.com/jasonsikes/QLogo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239433901,"owners_count":19637806,"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":["cpp","language","logo","qt","qt6","ucblogo"],"created_at":"2024-09-24T14:05:47.806Z","updated_at":"2025-11-04T11:30:39.370Z","avatar_url":"https://github.com/jasonsikes.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# This is README for QLogo.\n\n![QLogo Icon](qlogo_logo.png)\n\n\n## Downloading\n\nI am not providing compiled versions of QLogo at this time. \n\n***\n\nQLogo is an interpreter for the Logo language written in C++ using\nQt. It mimics (as much as I find reasonable) the UCBLogo\ninterpreter developed by Brian Harvey at U.C. Berkeley.\n\nCopyright (C) 2017-2024 Jason Sikes\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted under the conditions specified in the\nlicense found in the LICENSE file in the project root.\n\n***\n\nYou can find the UCBLogo Manual here:\n\nhttp://people.eecs.berkeley.edu/~bh/usermanual\n\nThe differences between QLogo and UCBLogo are described in the\n**nuances** section below. There aren't many.\n\n***\n\n\n## Compiling\n\nBuilding QLogo requires Qt6.5 and CMake.\n\n### To build in MacOS and Windows:\n\nSimply open the CMakeLists.txt file in QtCreator and build within there. \n\n### To build in Linux:\n\nIf you have qtcreator, you can use qtcreator in Linux in the same manner as\nin Windows and MacOS described above.\n\nOtherwise, you can follow the standard CMake build procedure. First, create a\nbuild directory somewhere outside of the QLogo source directory.\n\n*In my case, since I keep my projects in a \"Projects\" directory under my home directory,\nmy QLogo directory can be found at \"\\~/Projects/QLogo\". Thus, one place to create\nmy \"build\" would be adjacent to my QLogo directory, \"\\~/Projects/build\".*\n\nThen have CMake create the build structure.\n\n\n```\n$ cd ~/Projects\n$ mkdir build\n$ cmake -S QLogo -B build\n\n```\n\nThen enter into your build directory and issue `make`, and, optionally, if\nall goes well (it will) you can run `make install`\n\n```\n$ cd build\n$ make\n$ sudo make install\n```\n\nThis will give you two executables and supporting files:\n\n1. \"qlogo\": this is the Logo interpreter that can be run from a script or command line.\n\n2. \"QLogo-GUI\": this is the graphical user interface that will run qlogo and provides\nthe turtle and editor.\n\n3. \"qlogo_library.db\": this is the SQLite database that stores the standard library.\n\n4. \"qlogo_help.db\": this is the SQLite database that stores the help texts.\n\n***\n\n## Here are the nuances (they're mostly insignificant, I think):\n\n\n* Colors can be specified in one of five ways:\n\n   1. as a palette index (0 to 100), same as UCBLogo\n\n   2. as a list of three percentages, one for each of red, green, blue `[0 0 0]` is\n   black, `[100 100 100]` is white, also same as UCBLogo.\n   \n   3. as a list of **four** percentages, similar to Option 2 above, with the fourth\n   value being \"alpha\". `100` is fully opaque, and `0` means fully transparent.\n\n   4. as a named color from the X Color Database, e.g. `white` or `lemonchiffon`.\n   The list of color names can be retrieved using the `ALLCOLORS` command or\n   from the X Color database found here:\n   https://en.wikipedia.org/wiki/X11_color_names\n   \n   5. as a hex RGB triplet, preceded by \"#\"\n\n\n* Changes in font properties (size, color, family) do not affect characters\n  already printed. This enables multiple colors and fonts on the same console.\n  \n* QLogo does not look for nor automatically load `STARTUP.LG`.\n\n* `COMMANDLINE` contains **ALL** of the parameters used to start qlogo instead\n  of just the ones that appear after a hyphen.\n\n* If `ERRACT` is set and its size is greater than zero, then any errors execute\n  `PAUSE`.\n  \n* Garbage collection is on-the-fly, meaning that memory is freed the moment a\n  word/list/array is no longer needed. `GC` and `.SETSEGMENTSIZE` are no-ops.\n\n* No scunching. UCBLogo provided a scrunch to compensate for older CRT screens\n  with non-square pixels. This enabled turtle operations to maintain consistent\n  physical height-width. The drawback is that some orientation queries are\n  inaccurate. `SCRUNCH` and `SETSCRUNCH` are no-ops.\n\n* `SAVEPICT` saves a copy of the canvas in the format given by the filename's\n  extension. For example: `SAVEPICT \"MY_PICTURE.PNG` will save in PNG\n  format. QLogo can save an image in the following formats: BMP, JPG/JPEG,\n  PNG, PPM, XBM, and XPM\n\n* `WINDOW` no longer simply allows the turtle to run away from the canvas. `WINDOW`\n  now also allows the canvas to zoom out to accommodate the turtle's position.\n\n* There is no facility yet for translation/internationalization.\n\n\n### The following commands are not implemented:\n\n`SETMARGINS`:\n\nThe original purpose of the command was to enable text to\nbe visible on projectors which cut off outer boundaries of\na computer screen. Projectors and monitors produced in\nrecent years show all of the computer screen. In addition,\nQLogo is a windowed application so an instructor or presentor\ncan move the window to a different position.\n\n`FILL`:\n\nOne of the user interface principles for QLogo is that\nthe canvas should be device resolution-independent. When\nthe QLogo window is resized or the separator between the\ntext and the graphics is moved then the graphics\nwill be redrawn with the new dimensions.\n\nThe Flood Fill algorithm depends on specific pixels which\nmeans that what is filled can change dramatically depending\non the size of the canvas.\n\nThe other reason is that the Flood Fill algorithm can slow\ndown window resizing. `FILLED` is still available.\n\n`EPSPICT`:\n\nThis is replaced by `SVGPICT`. See below.\n\n`CSLSLOAD`:\n\nNot implemented yet.\n\n`SETCSLSLOC`:\n\nNot implemented yet.\n\n`SETEDITOR`:\n\nThe QLogo GUI has its own built-in editor. If you run the qlogo program from a\ncommand line, such as in a terminal, no editor is available.\n\n`SETLIBLOC`:\n\nNot implemented. QLogo uses a SQLite database to store its standard library.\nYou can use the `setlibloc` command line parameter to tell qlogo where to find\nthe SQLite database if it is in a different location than where qlogo expects it.\n\n`SETHELPLOC`:\n\nNot implemented. QLogo uses a SQLite database to store its help text.\nYou can use the `sethelploc` command line parameter to tell qlogo where to find\nthe SQLite database if it is in a different location than where qlogo expects it.\n\n`SETTEMPLOC`:\n\nQLogo doesn't create temporary files.\n\n`NOREFRESH` and `REFRESH`:\n\nQLogo is designed from the ground up to have a very responsive user interface. The canvas\nwill always redraw itself whenever the window is resized.\n\n`SETPENPATTERN` and `PENPATTERN`:\n\nThis isn't implemented yet because I haven't yet decided what kinds of patterns\nare wanted or useful.\n\n\n### The following variables have no special meaning:\n\n`REDEFP`:\n\nQt has strong support for internationalization, but in QLogo it is only partially implemented.\nInternationalization will be supported soon.\n\n`USEALTERNATENAMES`:\n\nQt has strong support for internationalization, but in QLogo it is only partially implemented.\nInternationalization will be supported soon.\n\n\n### The following commands are NEW:\n\n`SVGPICT` has been added and is a replacement for `EPSPICT`. `SVGPICT` will\nsave the image on the canvas in Scalable Vector\nGraphics format.\n\n`ALLFONTS`:\n\nReturns a list of all the fonts available on your system.\n\n`ALLCOLORS`:\n\nReturns a list of all the named colors that QLogo knows about.\n\n`TIME`:\n\nThis is mostly for my own curiosity and for debugging. `TIME` will take one parameter,\na list, which it will execute. A timer will start when the list is executed and\nthen stop when the list is finished. The total running time of the list will be\nprinted. The output will be whatever the list outputs, if anything.\n\n`MARK`:\n\nThis is for debugging memory management. `MARK` will take one parameter, set a\nflag on it, and output that parameter. At the moment it is marked, a debugging\nmessage will be printed out. Later, if/when the item is deleted, another\ndebugging message will be printed.\n\n`CURSORINSERT`:\n\nSets cursor to insert mode in QLogo. This is the default.\n\n`CURSOROVERWRITE`:\n\nSets cursor to overwrite mode in QLogo.\n\n`CURSORMODE`:\n\nOutputs either `INSERT` or `OVERWRITE`.\n\n`STANDOUT`:\n\nThis works in the QLogo GUI by switching the font's foreground and background\ncolors. It isn't implemented for text terminals.\n\n`SETBOUNDS`:\n\nThe drawing canvas in the QLogo GUI is designed to be device and resolution\nindependent. The user can stretch and resize the GUI window and its components\nwithout needing interaction or permission from the QLogo program. Therefore,\nthe best way for the programmer to have control and the GUI to have responsiveness\nis to set the bounds programatically. The GUI then can squeeze or stretch the\ncanvas to fit the window as needed.\n\nThe coordinate system of the drawing canvas is Cartesian: the Origin `[0,0]` is\nalways in the center. The range of the X-coordinate is between `-boundX` and\n`boundX`. The range of the Y-coordinate is between `-boundY` and `boundY`. For\nexample, a bound set at `[350 150]` means that the turtle is visible if its\nX-coordinate is between -350 and 350 and its Y-coordinate is between -150 and\n150. See also `BOUNDS`.\n\n`BOUNDS`:\n\nOutputs a list of two numbers giving the maximum bounds (x,y)\nof the canvas.\n\n`FILEDIALOG`:\n\nProvides the user with a file dialog to select a file. The file name is returned as a string.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjasonsikes%2Fqlogo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjasonsikes%2Fqlogo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjasonsikes%2Fqlogo/lists"}