Skip to content

Instantly share code, notes, and snippets.

View greggirwin's full-sized avatar

Gregg Irwin greggirwin

  • Redlake Technologies
View GitHub Profile
@greggirwin
greggirwin / view-flags-demo.red
Created July 10, 2020 21:46
View/flags demo, showing what window flags are available.
Red []
window-flags: [
resize no-title no-border no-min no-max no-buttons modal popup
]
show-win-using-flags: func [flags [block!]][
view/flags [backdrop sky button "OK" [unview]] flags
]
spec: [
below
@greggirwin
greggirwin / sorted.red
Created June 12, 2020 19:43
Minimal sorted series support, allowing fast binary searches.
Red [
comment: {
Minimal sorted series support, allowing fast binary searches.
I tinkered with a "dialected" interface, and more support
functions, like `[remove take at index?]` but quickly saw
that they were of little value, and that using a parameter
for the command was downright misleading to read, no matter
how clever the implementation. `Find` is not strictly
necessary either, but it does make it nicely consistent
@greggirwin
greggirwin / step.red
Created May 23, 2020 20:10
Old R2 `step` function, ported to Red, for incrementing alpha-numeric strings.
Red []
step-ctx: context [
digit=: charset [#"0" - #"9"]
alpha=: charset [#"A" - #"Z" #"a" - #"z"]
alpha-num=: union alpha= digit=
; Could do this with charsets.
range-start-char?: func [val] [to logic! find "0Aa" val]
@greggirwin
greggirwin / refine.red
Last active May 23, 2020 19:03
Old experiments in dynamically refined function calls
filter: function [
"Returns two blocks: items that pass the test, and those that don't."
series [series!]
test [any-function!] "Test (predicate) to perform on each value; must take one arg"
/only "Return a single block of values that pass the test"
][
result: reduce [copy [] copy []]
foreach value series [
append/only pick result make logic! test :value :value
]
@greggirwin
greggirwin / time-marks.red
Created May 13, 2020 04:00
Non-local timing markers
time-marks: object [
data: #()
;!! Watch for [set clear] system word usage in this object!
set: func [key] [
either key = /all [
print ["##ERROR time-marks/set reserves /all as an internal key."]
none
][
@greggirwin
greggirwin / load-time-type-tally.red
Created August 5, 2019 22:10
Red Load-Time and Type Tally
Red [
file: %load-time-type-tally.red
purpose: {
Load a Red file, noting how long it takes to do so,
then parse it and tally all the values by datatype.
It's not a metric that may prove useful, but in
aggregate, we could see what types are most commonly
used.
I'll correct my own thinking. After just a few sample
@greggirwin
greggirwin / vid-across-below-align.red
Last active September 1, 2019 04:47
VID across/below alignment demo
Red []
view [
style chk: check "Option" data yes
style vline: base 2x60 red
across top vline button "Ok" text "Text" field chk return
across middle vline button "Ok" text "Text" field chk return
across bottom vline button "Ok" text "Text" field chk
]
@greggirwin
greggirwin / r2-mapping-lib.r
Created July 18, 2019 18:09
R2 Mapping Lib
REBOL []
;!! This is very much a work in progress, with many things untested. It needs
; to be clear what is functional and break out R&D bits into a working script
; for that purpose.
;-------------------------------------------------------------------------------
Arcsin: func [X [decimal!]] [
;'Arcsin(X) = Atn(X / Sqr(-X * X + 1)) [from MS Help - VB4, 1995]
@greggirwin
greggirwin / incr-decr.red
Created June 4, 2019 19:52
Red Incr/Decr
Re: WRT: func ['name content][]
WRT incr {
The most common case will be to change state, but incr does add meaning, and has
benefits, in my mind, when used with scalars.
- By default, there is no step value, so you can't get the + 1 part wrong.
- Incr is often used when looping, making loop variables stand out from other add
ops that might be in expressions.
@greggirwin
greggirwin / url-parser-tests.red
Last active October 24, 2018 21:47
RFC3986 URL parser and separate tests
Red []
do %url-parser.red
test-urls: reduce [
foo:// ; no path
object [
scheme: 'foo
user-info: none
host: "" ; none ; this is tricky, the // means we'll always have a host, even if empty.