Skip to content

Instantly share code, notes, and snippets.

@samdphillips
samdphillips / funcall.md
Created February 4, 2025 19:08
Scheme to C function translation

Fixed Arity Definition

(define (foo x) body ...)

==>

SCM foo(int nr, SCM k, SCM x)
{
  if (nr != 1) arity_error();
@samdphillips
samdphillips / select_demo2.rhm
Created December 12, 2024 23:41
Rhombus events
#lang rhombus/static/and_meta
import:
lib("racket/base.rkt") as rkt:
rename:
#{evt?} as is_evt
#{always-evt} as always_evt
#{alarm-evt} as alarm_evt
#{guard-evt} as guard_evt
#{handle-evt} as handle_evt
@samdphillips
samdphillips / json.patch
Created December 12, 2024 23:38
Racket JSON customization
--- racket/collects/json/main.rkt 2024-11-05 16:35:40
+++ racket/collects/json/exp.rkt 2024-12-12 07:43:11
@@ -65,12 +65,16 @@
any)] ;; jsexpr?
))
+(module* for-extension #f
+ (provide read-json*))
+
;; -----------------------------------------------------------------------------
@samdphillips
samdphillips / json.rhm
Created November 15, 2024 02:47
Rhombus JSON POC
#lang rhombus/static/and_meta
import:
lib("racket/base.rkt"):
only: #{bytes-convert}
#{bytes-open-converter}
#{object-name}
#{port-counts-lines?}
#{port-next-location}
@samdphillips
samdphillips / kw.rkt
Created September 1, 2024 03:51
Keyword bridge for R6RS
#lang racket/base
;; install in a kw-example collect
(require (for-syntax racket/base
racket/string
syntax/parse)
racket/format
syntax/parse/define)
@samdphillips
samdphillips / evdev.rkt
Created December 8, 2023 03:39
Simple Racket library to interact with Linux input event devices
#lang racket/base
(require ffi/unsafe
ffi/unsafe/custodian
ffi/unsafe/define
ffi/unsafe/schedule
racket/struct)
(provide evdev-open
evdev-read
(define (poll-evt poll-thunk
#:interval [interval-thunk (const 1000)]
#:cleanup [cleanup-thunk void])
(poll-guard-evt
(lambda (polling?)
(if polling?
(cond [(poll-thunk) =>
(lambda (v)
(wrap-evt always-evt (const v)))]
[else never-evt])
(define-syntax-parse-rule (with-env ([var val] ...) body ...+)
(call-with-env
(make-environment-variables
(~@ (string->bytes/locale var)
(string->bytes/locale val)) ...)
(λ () body ...)))
#lang racket/base
;; Works on Linux, doesn't work on Mac? More minimal version.
(require ffi/unsafe
ffi/unsafe/define)
(define-ffi-definer define-curl (ffi-lib "libcurl"))
(define CURL_GLOBAL_ALL #b11)
#lang racket/base
;; Works on Linux, doesn't work on Mac?
(require ffi/unsafe
ffi/unsafe/define)
(define-ffi-definer define-curl (ffi-lib "libcurl")
#:provide provide-protected)