{"id":16504783,"url":"https://github.com/abarbu/scheme2c-compatibility","last_synced_at":"2026-02-08T13:37:54.549Z","repository":{"id":5842223,"uuid":"7058412","full_name":"abarbu/scheme2c-compatibility","owner":"abarbu","description":"Chicken egg that makes it more compatible with Scheme-\u003eC","archived":false,"fork":false,"pushed_at":"2021-04-03T14:09:16.000Z","size":20,"stargazers_count":3,"open_issues_count":1,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-12T12:36:07.800Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Scheme","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/abarbu.png","metadata":{"files":{"readme":"README.chickenwiki","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":"2012-12-07T19:13:53.000Z","updated_at":"2023-03-30T13:17:55.000Z","dependencies_parsed_at":"2022-09-24T00:01:03.167Z","dependency_job_id":null,"html_url":"https://github.com/abarbu/scheme2c-compatibility","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abarbu%2Fscheme2c-compatibility","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abarbu%2Fscheme2c-compatibility/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abarbu%2Fscheme2c-compatibility/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abarbu%2Fscheme2c-compatibility/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abarbu","download_url":"https://codeload.github.com/abarbu/scheme2c-compatibility/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241435131,"owners_count":19962401,"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":[],"created_at":"2024-10-11T15:06:47.813Z","updated_at":"2026-02-08T13:37:54.505Z","avatar_url":"https://github.com/abarbu.png","language":"Scheme","funding_links":[],"categories":[],"sub_categories":[],"readme":"[[tags: egg misc]]\n[[toc:]]\n\nThis page is maintained in the package's\n[[https://github.com/abarbu/scheme2c-compatibility|github repository]].\n\n== scheme2c-compatibility\n\nThis implements miscellaneous functions and macros that make Chicken\nmore compatible with Scheme-\u003eC. Some of this comes from from Jeff\nSiskind's QobiScheme. Much of this functionality is redundant with\nthat offered by other Chicken eggs but is offered with a\nScheme-\u003eC-compatible API and naming scheme.\n\n==== Lists\n\n\u003cprocedure\u003e(eleventh x)\u003c/procedure\u003e\n\u003cprocedure\u003e(twelfth x)\u003c/procedure\u003e\n\n==== Strings\n\n\u003cprocedure\u003e(lines string)\u003c/procedure\u003e\n\nCombine a list of lines into a string separated by newlines.\n\n\u003cprocedure\u003e(unlines l)\u003c/procedure\u003e\n\nSplit a string into a list of lines.\n\n\u003cprocedure\u003e(words string)\u003c/procedure\u003e\n\nSplit a string into words.\n\n\u003cprocedure\u003e(unwords l)\u003c/procedure\u003e\n\nCombine a list of words into a string separated by spaces.\n\n\u003cprocedure\u003e(number-of-fields string)\u003c/procedure\u003e\n\u003cprocedure\u003e(field-ref string n)\u003c/procedure\u003e\n\u003cprocedure\u003e(fields string)\u003c/procedure\u003e\n\n==== System\n\n\u003cprocedure\u003e(usleep microseconds)\u003c/procedure\u003e\n\u003cprocedure\u003e(directory-list d)\u003c/procedure\u003e\n\n==== File IO\n\n\u003cprocedure\u003e(read-object-from-file pathname)\u003c/procedure\u003e\n\u003cprocedure\u003e(write-object-to-file object pathname)\u003c/procedure\u003e\n\nRead/write a single scheme object to/from a file. This is not the same\nas chicken's ''read-file''.\n\n\u003cprocedure\u003e(read-text-file pathname)\u003c/procedure\u003e\n\u003cprocedure\u003e(write-text-file lines pathname)\u003c/procedure\u003e\n\nRead/write a text file.\n\n\u003cprocedure\u003e(fclose handle)\u003c/procedure\u003e\n\u003cprocedure\u003e(fopen filename mode)\u003c/procedure\u003e\n\u003cprocedure\u003e(fmemopen buffer size mode)\u003c/procedure\u003e\n\n\u003cprocedure\u003epopen\u003c/procedure\u003e\n\u003cprocedure\u003epclose\u003c/procedure\u003e\n\n==== Paths\n\n\u003cprocedure\u003e(strip-directory pathname)\u003c/procedure\u003e\n\u003cprocedure\u003e(has-extension? pathname)\u003c/procedure\u003e\n\u003cprocedure\u003e(extension pathname)\u003c/procedure\u003e\n\u003cprocedure\u003e(strip-extension pathname)\u003c/procedure\u003e\n\u003cprocedure\u003e(default-extension pathname extension)\u003c/procedure\u003e\n\u003cprocedure\u003e(replace-extension pathname extension)\u003c/procedure\u003e\n\u003cprocedure\u003e(has-directory? pathname)\u003c/procedure\u003e\n\u003cprocedure\u003e(get-directory pathname)\u003c/procedure\u003e\n\n==== X11\n\n\u003cprocedure\u003e(c-docolordither pic24 w h rdisp gdisp bdisp idisp maplen)\u003c/procedure\u003e\n\u003cprocedure\u003e(ylookupstring event . opt)\u003c/procedure\u003e\n\u003cprocedure\u003e(xallocnamedcolor3 dpy cmap colorname)\u003c/procedure\u003e\n\u003cprocedure\u003e(xquerypointer2 dpy w)\u003c/procedure\u003e\n\u003cprocedure\u003egetenv\u003c/procedure\u003e\n\n==== Temporary files\n\n\u003cparameter\u003e*tmp*\u003c/parameter\u003e\n\u003cprocedure\u003e(tmp pathname)\u003c/procedure\u003e\n\u003cprocedure\u003e(with-temporary-file prefix f)\u003c/procedure\u003e\n\nCall f with a unique filename that will be removed once f returns. The\nextension of prefix is honored, but not its base filename.\n\n==== Bitwise operations\n\n\u003cprocedure\u003e(bit-not n)\u003c/procedure\u003e\n\u003cprocedure\u003e(bit-and n)\u003c/procedure\u003e\n\u003cprocedure\u003e(bit-or n)\u003c/procedure\u003e\n\u003cprocedure\u003e(bit-lsh n offset)\u003c/procedure\u003e\n\u003cprocedure\u003e(bit-rsh n offset)\u003c/procedure\u003e\n\n==== FFI compatibility\n\n\n===== Sizeof\n\n\u003cprocedure\u003ec-sizeof-short\u003c/procedure\u003e\n\u003cprocedure\u003ec-sizeof-int\u003c/procedure\u003e\n\u003cprocedure\u003ec-sizeof-long\u003c/procedure\u003e\n\u003cprocedure\u003ec-sizeof-float\u003c/procedure\u003e\n\u003cprocedure\u003ec-sizeof-double\u003c/procedure\u003e\n\u003cprocedure\u003ec-sizeof-tscp\u003c/procedure\u003e\n\u003cprocedure\u003ec-sizeof-s2cuint\u003c/procedure\u003e\n\u003cprocedure\u003ec-sizeof-pointer\u003c/procedure\u003e\n\n===== Memory accesss\n\n\u003cprocedure\u003e(c-byte-ref ptr off)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-byte-set! ptr off val)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-double-ref ptr off)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-double-set! ptr off val)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-float-ref ptr off)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-float-set! ptr off val)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-int-ref ptr off)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-int-set! ptr off val)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-longint-ref ptr off)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-longint-set! ptr off val)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-longunsigned-ref ptr off)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-longunsigned-set! ptr off val)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-s2cuint-ref ptr off)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-s2cuint-set! ptr off val)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-shortint-ref ptr off)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-shortint-set! ptr off val)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-shortunsigned-ref ptr off)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-shortunsigned-set! ptr off val)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-unsigned-ref ptr off)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-unsigned-set! ptr off val)\u003c/procedure\u003e\n\u003cprocedure\u003e(pointer-pointer-ref ptr-to-ptr)\u003c/procedure\u003e\n\u003cprocedure\u003e(pointer-pointer-set! ptr-to-ptr val)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-string-\u003estring buf)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-null-separated-strings-\u003estrings c-strings)\u003c/procedure\u003e\n\nAccess buffers containg various standard types. ''s2cuint'' is the\nsame size as a pointer.\n\n===== Arrays\n\n\u003cprocedure\u003e(c-array-\u003elist array get-element element-size nr-elements)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-array-\u003evector array get-element element-size nr-elements)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-exact-array-\u003elist array element-size nr-elements signed?)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-exact-array-\u003evector array element-size nr-elements signed?)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-inexact-array-\u003elist array element-size nr-elements signed?)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-inexact-array-\u003evector array element-size nr-elements signed?)\u003c/procedure\u003e\n\u003cprocedure\u003e(list-\u003ec-array array l set-element element-size)\u003c/procedure\u003e\n\u003cprocedure\u003e(list-\u003ec-exact-array array l element-size signed?)\u003c/procedure\u003e\n\u003cprocedure\u003e(list-\u003ec-inexact-array array l element-size signed?)\u003c/procedure\u003e\n\u003cprocedure\u003e(vector-\u003ec-array array v set-element element-size)\u003c/procedure\u003e\n\u003cprocedure\u003e(vector-\u003ec-exact-array array v element-size signed?)\u003c/procedure\u003e\n\u003cprocedure\u003e(vector-\u003ec-inexact-array array v element-size signed?)\u003c/procedure\u003e\n\nVarious functions to convert to and from C arrays.\n\n\u003cprocedure\u003e(c-sized-int-ptr-ref size signed?)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-sized-int-ptr-set! size signed?)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-sized-inexact-ptr-ref size signed?)\u003c/procedure\u003e\n\u003cprocedure\u003e(c-sized-inexact-ptr-set! size signed?)\u003c/procedure\u003e\n\nReturn functions which access arrays with elements of given sizes.\n\n===== Scroped\n\n\u003cprocedure\u003e(with-alloc x f)\u003c/procedure\u003e\n\u003cprocedure\u003e(with-buffer-stream f buffer size mode)\u003c/procedure\u003e\n\u003cprocedure\u003e(with-c-string str f)\u003c/procedure\u003e\n\u003cprocedure\u003e(with-file-stream f filename mode)\u003c/procedure\u003e\n\u003cprocedure\u003e(with-array elements element-size f)\u003c/procedure\u003e\n\u003cprocedure\u003e(with-c-pointers f v)\u003c/procedure\u003e\n\u003cprocedure\u003e(with-vector-\u003ec-array f set-element element-size v)\u003c/procedure\u003e\n\nPerform many of the operations above automatically cleaning up once\nthe procedure returns.\n\n===== misc\n\n\u003cprocedure\u003e(exact-round x)\u003c/procedure\u003e\n\u003cprocedure\u003e(exact-ceiling x)\u003c/procedure\u003e\n\u003cprocedure\u003e(exact-floor x)\u003c/procedure\u003e\n\nRound/floor/ceiling and ''inexact-\u003eexact''.\n\n\u003cmacro\u003ec-value\u003c/macro\u003e\n\u003cmacro\u003ec-sizeof\u003c/macro\u003e\n\u003cmacro\u003ec-function\u003c/macro\u003e\n\n\u003cprocedure\u003emalloc\u003c/procedure\u003e\n\u003cprocedure\u003ememcpy\u003c/procedure\u003e\n\u003cprocedure\u003ebzero\u003c/procedure\u003e\n\n\u003cprocedure\u003e(unsigned-list-\u003eunsigneda l)\u003c/procedure\u003e\n\n==== misc\n\n\u003cprocedure\u003e(fuck-up)\u003c/procedure\u003e\n\u003cprocedure\u003e(panic format-string . \u0026rest)\u003c/procedure\u003e\n\u003cprocedure\u003e(xor a b)\u003c/procedure\u003e\n\u003cparameter\u003e*panic?*\u003c/parameter\u003e\n\u003cparameter\u003e*program*\u003c/parameter\u003e\n\n\u003cprocedure\u003e(read-from-string string)\u003c/procedure\u003e\n\n''(read)'' from a string.\n\n\u003cprocedure\u003eflush-buffer\u003c/procedure\u003e\n\n''flush-output''\n\n=== TODO\n\n''with-temporary-file'' is wrong! It ignores the prefix and more\nimportantly its extension and will lead to breakage.\n\n=== License\n\n   Copyright 1993-1995 University of Toronto. All rights reserved.\n   Copyright 1996 Technion. All rights reserved.\n   Copyright 1996 and 1997 University of Vermont. All rights reserved.\n   Copyright 1997-2001 NEC Research Institute, Inc. All rights reserved.\n   Copyright 2002-2012 Purdue University. All rights reserved.\n\n   Contact Andrei Barbu, andrei@0xab.com.\n\n   This program is free software: you can redistribute it and/or modify\n   it under the terms of the GNU Lesser General Public License as published by\n   the Free Software Foundation, either version 3 of the License, or\n   (at your option) any later version.\n   This program is distributed in the hope that it will be useful,\n   but WITHOUT ANY WARRANTY; without even the implied warranty of\n   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n   GNU Lesser General Public License for more details.\n   You should have received a copy of the GNU Lesser General Public License\n   along with this program.  If not, see http://www.gnu.org/licenses.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabarbu%2Fscheme2c-compatibility","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabarbu%2Fscheme2c-compatibility","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabarbu%2Fscheme2c-compatibility/lists"}