2023-05-18 00:02:09 " oh my cat is nice" [ fields line .s ] wk 2023-05-18 00:02:38 fields => ['oh','my','cat','is','nice'] line => 'oh my cat is nice' 2023-05-18 00:03:07 now a different word to specify a separator 2023-05-18 00:03:54 it works by lines, it could end being useful 2023-05-18 00:04:04 awk is a very nice tool 2023-05-18 00:04:38 not sure if binding $1 $2 $3... 2023-05-18 00:04:51 I'll create a temp environment for it 2023-05-18 00:19:14 " oh my cat is nice" [ $2 . cr ] wk => cat 2023-05-18 00:19:25 that's cool 2023-05-18 03:03:54 When vms14 gets back, have a look at the FOR command on Windows as well, it's another "mini awk" 2023-05-18 03:04:20 I think something like that or your miniawk idea would be really useful for spreadsheet style and simple database work 2023-05-18 03:04:25 And configuration files 2023-05-18 03:04:35 And maybe IPC 2023-05-18 04:59:03 FUZxxl: By the way, it turns out for FreeBSD to work we have to read argc from 8(%rsp), and argv thereafter 2023-05-18 04:59:20 And it doesn't save the same registers Linux saves for syscalls 2023-05-18 04:59:51 The latter is fine, because SysV spec only claims Linux support for its syscall appendix, but the former is a violation of the SysV ABI 2023-05-18 05:00:17 FreeBSD seems to actually call its ABI "freebsd:x86:64" or something, but they don't seem to document it 2023-05-18 05:00:28 It's all documented by source 2023-05-18 05:05:33 hm interesting 2023-05-18 05:05:46 which registers does FreeBSD save? 2023-05-18 06:02:23 Looks like rdi, rsi, rip, rsp 2023-05-18 06:02:42 It doesn't preserve r8, r9, r10, or rdx 2023-05-18 06:03:46 I've not dug further into this yet, though am planning to do so once I'm able get gdb working 2023-05-18 06:04:53 interesting 2023-05-18 07:19:59 Documentation on all of this is rather unreliable in all cases. Just this weekend I ran into a case where an online resource clearly called out the list of registers that syscalls did not preserve "in Linux," but I found that if I saved only those registers my system crashed on the syscall. I.e., I saved those, used the "sys" instruction, and restored them - crash. 2023-05-18 07:20:11 Sorry, the "syscall" instruction. 2023-05-18 07:20:26 But if instead I used a macro I wrote called "sys" that saves most everything, it worked fine. 2023-05-18 07:20:45 I didn't chase down the details, but SOMETHING beyond that list given in the website needed to be saved. 2023-05-18 07:21:23 I suppose that the system the person who wrote that was using did work that way, but there does appear to be system-to-system variation. 2023-05-18 07:22:39 That was when I was working up that iocotl syscall to get screen dimensions. 2023-05-18 07:26:26 This is interesting. If I use the defuse online assembler, in 64-bit mode, and assemble "call qword [r12]", it assembles to 2023-05-18 07:26:43 0: 41 ff 54 24 08 call QWORD PTR [r12+0x8] 2023-05-18 07:26:52 where the heck does that +0x8 come from? 2023-05-18 07:28:23 If I change the 0x08 to 0x00 and dissassemble, then it disassembles to what I started with. Looks like a bug in the site, to me. 2023-05-18 07:29:39 If I specify [rsi-8], then THAT assembles to just [rsi] 2023-05-18 07:31:20 Don't know that assembler 2023-05-18 07:31:39 Maybe qword is the constant 8, and it sees 8[r12] like gas sees 8(%r12) 2023-05-18 07:31:52 https://defuse.ca/online-x86-assembler.htm#disassembly 2023-05-18 07:31:57 You might need qword ptr 2023-05-18 07:32:28 Interesting. Yeah, qword ptr seems to fix it. 2023-05-18 07:32:38 qword ptr is Intel syntax 2023-05-18 07:32:41 qword is nasm 2023-05-18 07:32:52 Aha. 2023-05-18 07:33:05 Ok - well, that explains why I wrote it that way to start with. 2023-05-18 07:33:47 I don't know what gas expects in Intel syntax mode 2023-05-18 07:40:45 It's still interesting that it just genned that 8 up out of nothing, though. 2023-05-18 07:41:50 As I said, I assume qword is the constant 8 2023-05-18 07:42:17 So you can do e.g. "sub rsp, qword" 2023-05-18 07:43:17 Oh, now I see what you mean. 2023-05-18 07:43:51 Yes, that seems to be what it's doing. 2023-05-18 07:43:53 Hah. 2023-05-18 07:43:58 Fair enough. 2023-05-18 07:48:15 You might be able to do call [r12] 2023-05-18 07:48:35 As it's sort of implied you want a qword by default 2023-05-18 07:48:56 Yeah, that works. 2023-05-18 07:49:08 I'm just tinkering to get ready to do that call into a new image. 2023-05-18 07:49:37 But now that I think about it I'll probably arrange that so that I just say call rrTOS - have the address to call in my top of stack reg. 2023-05-18 07:50:30 Push all my regs, call rrTOS, pop all the regs and then drop TOS. 2023-05-18 07:51:01 I can test that by just sticking a return instruction somewhere. 2023-05-18 07:53:13 So the idea is to metacompile to block buffers using "offsets." Then have a word that will "load" the image from those, which will involve allocating buffers to put them in and converting the offsets to addresses appropriately, and then call into that. 2023-05-18 07:55:12 Guess I'm defining my own "executable format" here. 2023-05-18 08:03:35 Yeah I too have many ideas 2023-05-18 08:03:46 And then applying them is another thing lol 2023-05-18 08:04:30 :-) 2023-05-18 08:04:34 Same. 2023-05-18 08:04:59 I think I'm actually going to at least start on this one, though. 2023-05-18 08:05:28 Getting that editor to print just a range of lines was really the last thing I needed to "get ready." 2023-05-18 08:06:24 Well, I may add a copy/paste buffer to it first. 2023-05-18 08:07:37 Which will be more like a copy/paste stack. 2023-05-18 08:07:44 Little string stack. 2023-05-18 08:29:56 Well the current thing I'm doing is writing a forth word that dumps a series of blocks to a file, by outputting the starting forth editor commands necessary to load the blocks 2023-05-18 08:30:47 Ah - that's interesting. Sort of "serializing" it as an edit stream. 2023-05-18 08:30:49 So it converts a block to something like "100 SCR !" "0 CHR !" "P " "U " etc 2023-05-18 08:31:07 And then further ones it can use N to get the next block 2023-05-18 08:31:17 Yeah basically 2023-05-18 08:31:33 And the point of this is so I can work with blocks, but keep this equivalent form in git 2023-05-18 08:32:15 So if someone wants to, they can work on the file in git, and at the very least see diff's nicely in git 2023-05-18 08:32:24 But I can work in blocks 2023-05-18 08:33:09 On one of my prior systems I wrote a couple of small utilities to take blocks.dat into a text file and vice versa. Just so I could do editing with vim if I needed to. 2023-05-18 08:33:31 Those took care of the 64-byte line structure in that system. 2023-05-18 08:34:58 In this one, since it uses vim compatible line feeds, if I vim blocks.dat, there's block 1 right there. I can't actually edit it, though, because that would move everything around, but it wouldn't be that hard to write something that "re-4096'd" everything. 2023-05-18 08:35:46 I'm not sure how to handle writing ^, other than print a dummy character and then do CHAR ^ xxx BUFFER yyy + C! on the next line for each occurrence 2023-05-18 08:36:08 Because in starting forth editor ^ is the optional command delimiter 2023-05-18 08:41:53 Or maybe U followed by S" " xxx BUFFER yyy + SWAP MOVE 2023-05-18 08:44:14 Or add a word to insert ^ at CHR, like ^^, and do U
^^^ I 
2023-05-18 08:44:45  I'm thinking right now about how to store these lines on this string stack.
2023-05-18 08:44:59  I'm considering bounding each line's data on both ends with a count byte.
2023-05-18 08:45:10  Just so I can traverse items without scanning in either direction.
2023-05-18 08:45:30  So 
2023-05-18 08:46:12  I'm looking at using a particular disk buffer for that, with the first 16 bytes marking the first unused offset.
2023-05-18 08:47:03  Use 0 as delimiter
2023-05-18 08:47:14  Can scan both directions, less memory usage
2023-05-18 08:47:23  That doesn't help me get to the other end of the string.
2023-05-18 08:47:35  Put a hidden 0 at start
2023-05-18 08:47:40  In my source blocks the only 0 is at the end of the block's data.
2023-05-18 08:47:49  Okay
2023-05-18 08:47:59  Does it need to be a source block?
2023-05-18 08:48:02  Yes, I am thinking about that - to know when there are no more items on the string stack.
2023-05-18 08:48:17  Surely it's not a source block?
2023-05-18 08:48:20  No, but I'm just thinking about where the items that will go onto this come from.
2023-05-18 08:48:37  Generally speaking they will be a series of printable chars with a 0x0A at the end.
2023-05-18 08:48:48  That's what one line in a source buffer looks like.
2023-05-18 08:49:39  So push will add the currently targeted editor line to the stack; pop will open a space at the target location and move the item back in.
2023-05-18 08:52:43  Some scanning is unavoidable, but I'm trying to not add "more" - trying to use the words I've already written that scan to take care of things.
2023-05-18 08:53:41  ++ scans the target point forward one line.  So it's easy enough to bound the current line by making a temporary copy of part of the state and ++-ing it.
2023-05-18 08:53:49  Then I've got pointers to the current line and the next line.
2023-05-18 08:56:07  You know, maybe the way to do this is to make the string stack look just like an editable block.  Then I could use the words I've already written on it.
2023-05-18 08:56:17  That's probably the first avenue to consider.
2023-05-18 08:56:55  Write a -- partner for ++ that scans BACK one line.  Then I have what I need to bracket the latest line "pushed."
2023-05-18 09:01:21  Oh wow.  The -- word is quite easy.
2023-05-18 09:01:30  .: out  2dup =;; ;
2023-05-18 09:01:32  .: (--)  1- .c@ 10 !=me 1+ ;
2023-05-18 09:01:34  : --  out 1- (--) ;
2023-05-18 09:02:26  out just checks to see if I'm at the start of the block already.
2023-05-18 09:02:38  Kicks me out with no changes if I am.
2023-05-18 09:03:16  Oh, wait, that's not quite right.
2023-05-18 09:03:27  Won't stop properly if -- takes me to the first line.
2023-05-18 09:04:03  But I think I just need to drop a call to out into (--)
2023-05-18 09:04:44  Yeah, at the very beginning.
2023-05-18 09:06:50  That works perfectly.
2023-05-18 09:07:08  ++ checks for the null byte at the other end and won't go past it.
2023-05-18 10:11:07  Ok, adding -- raised my byte count on the editor source to 822.
2023-05-18 10:11:28  I'm hoping to get this string stack integrated and still be under 1kB.  :-)
2023-05-18 10:12:05  That leaves me around 5-6 ish lines of code - don't know if that will work out or not.
2023-05-18 10:42:48  You  know, this work on the editor is "selling" me more than ever on my stack frames.
2023-05-18 10:43:20  They're just wildly useful.  And that little timing exercise vms14 and I did last night - that showed their benefits strongly as well.
2023-05-18 10:44:36  it's gone too far if it's offering to throw in a salad spinner, free!
2023-05-18 10:44:51  Haven't had that offer come my way yet - I'll keep you posted.
2023-05-18 10:45:02  Those commercials of that sort are a hoot.
2023-05-18 10:45:22  One I remember from decades ago was "Gunsu knives."
2023-05-18 10:45:26  Ginsu
2023-05-18 10:45:38  Or maybe it was Ginzu - can't remember for sure.
2023-05-18 11:17:19  Ginzu
2023-05-18 11:17:52  thats how I have seen it written
2023-05-18 11:20:23  Looks a bit more  "Asian" that way.
2023-05-18 11:21:25  eh, it is how it is pronounced but I do not have the most detailed/precise IPA for it.
2023-05-18 11:43:46  It's just been decades since I actually heard it pronounced.
2023-05-18 12:30:21  In case anyone's interested, to swap a pair of "2 cell records" on the stack one can do this:
2023-05-18 12:30:32  : 2swap  >r -rot r> -rot ;
2023-05-18 12:32:36  gross
2023-05-18 12:32:38  :P
2023-05-18 12:32:44  Yeah.
2023-05-18 12:32:54  Definitely not something I use with any frequency.
2023-05-18 12:36:16  https://ratfactor.com/forth/the_programming_language_that_writes_itself.html this is a good post that keeps getting longer and longer
2023-05-18 13:13:42  KipIngram: I must confess
2023-05-18 13:13:58  NEVER CONFESS!!!!!
2023-05-18 13:14:04  I don't understand your ed sauce you posted yesterday, but it's okay, I'm okay not knowing
2023-05-18 13:14:22  I don't know your Forth dialect well and there's no comments or stack signatures
2023-05-18 13:14:23  It just takes a little getting used to.  I may be crazy.
2023-05-18 13:14:32  reduce ed in butter and onions until ...
2023-05-18 13:14:46  Yeah, I know.  I have plans for how to incorporate comments long term.
2023-05-18 13:15:13  I want to put some of them "elsewhere" and have the ones that are local such that I can turn on / off displaying them.
2023-05-18 13:15:21  I hate the way they make my source look.
2023-05-18 13:15:36  I do plan to solve that problem, though.
2023-05-18 13:15:44  My current practice is poor.
2023-05-18 13:16:12  I'm not sure what the right approach is, but sparse and decisive comments, with basic stack comments, seem to be necessary for me to have a reasonable shot
2023-05-18 13:16:20  Or really dead simple code with familar vocab
2023-05-18 13:16:24  familiar*
2023-05-18 13:16:48  I will say, though, that I've set this all aside for extended periods and have found that I can still follow it fairly well when I come back to it, so "it seems to work for me."
2023-05-18 13:17:02  Honestly also I don't have a lot of energy right now, been sick the last couple days (I don't feel sick though, just tired)
2023-05-18 13:17:08  Hopefully that will stay true until I get the point I can add commentary and documentation.
2023-05-18 13:17:20  You obviously have strong conventions etc but I don't know them
2023-05-18 13:17:23  Oh, I'm sorry man.  Those times suck.
2023-05-18 13:17:30  Right.
2023-05-18 13:17:43  It doesn't suck at all actually, but I'm just really tired and have a slight headache
2023-05-18 13:17:51  I'm not sure what it is, minor food poisoning maybe
2023-05-18 13:18:09  That is what "saves me," I think - in terms of my own comprehension.  I've established particular practices, and I remember THOSE.  So when I see certain code idioms, it says something to me that it wouldn't be saying to you.
2023-05-18 13:19:01  Yeah idioms are useful
2023-05-18 13:19:10  Forth idioms are harder
2023-05-18 13:22:16  Ok, I've got a draft of the code to add yy and pp.
2023-05-18 13:22:20  Yank and paste.
2023-05-18 13:22:49  Almost certain to be something wrong with it, but I think it's in the ballpark - I think "something near this" will work.
2023-05-18 13:23:06  11 more lines of code.
2023-05-18 13:23:31  Probably will not stay under 1kB, though.  I haven't counted but it looks suspiciously large.
2023-05-18 13:24:19  It uses a specified block as the string stack and treats it exactly like source blocks, so I can leverage words already written heavily.
2023-05-18 13:25:05  string stack?
2023-05-18 13:25:11  :0
2023-05-18 13:25:36  Yes - in my editor I'll be able to say yy to pull out the current line and save it on a string stack.
2023-05-18 13:25:49  oh, like a clipboard
2023-05-18 13:25:50  Then I can move the target position and say pp and it will get pasted in at the new location.
2023-05-18 13:25:54  Yes.
2023-05-18 13:26:01  Except it will hold more than one item.
2023-05-18 13:26:16  Probably could have made it smaller if I'd just had one buffer.
2023-05-18 13:26:34  I don't know if I have to change something in my lang that will make me rewrite it from scratch again
2023-05-18 13:26:36  But this is how I did it in an earlier implementation, and I liked how it works.
2023-05-18 13:26:49  I think the next change will be start generating code
2023-05-18 13:27:12  String stack is powerful
2023-05-18 13:27:38  emacs and readline have it (and vim but the controls suck in comparison)
2023-05-18 13:27:54  as long I don't find any other flaw I can start adding words and making programs with it
2023-05-18 13:28:26  I always wanted to make a window manager
2023-05-18 13:28:39  I need to add ffi to C for that
2023-05-18 13:34:33  You know, using the >r / r@ / r> completely screws ability to factor.
2023-05-18 13:34:53  Ah, you know, I could use an address register instead.
2023-05-18 13:34:58  I'm only saving one thing.
2023-05-18 13:35:08  And that would be more efficient anyway.
2023-05-18 13:54:34  I did not know that Redis was originally written in Tcl. One thing that puzzles me is the hate Tcl gets from some peeps.
2023-05-18 13:54:53  Zarutian_iPad: what hate?
2023-05-18 13:54:59  I always see everyone loving tcl
2023-05-18 13:55:31  everyone talks me wonders about tcl so much that I went to see how tcl is xD
2023-05-18 13:56:20  “the syntax is not intutive” yeah because you only learned algol68 syntax derived programming languages and not one based on spefic parsing rules
2023-05-18 13:56:38  how it is that forthwrights have no relation with postscript?
2023-05-18 13:56:45  I've never seen one talking about ps
2023-05-18 13:57:10  I think many here are aware of it but not too interested
2023-05-18 13:57:14  ps is okay ish but damn the gfx model is topnotch!
2023-05-18 13:58:25  I guess tcl's ability to treat code as data is what people seem to love so much
2023-05-18 14:00:08  I put Tcl, Scheme, Lua, and eForth together in category of neat languages to know
2023-05-18 14:00:33  Zarutian_iPad: I had to learn tex to create a pdf, but it turns that pdf is a subset of ps and that tex ends writing that
2023-05-18 14:00:44  (javascript is in there too but more of a Lua Scheme hybrid)
2023-05-18 14:00:57  which means there's nothing ps can't do that tex can
2023-05-18 14:01:21  but the whole thing is different, tex is a markup language where you specify the layout of a document, etc
2023-05-18 14:01:22  pdf is just interpreted ps iirc
2023-05-18 14:01:40  in ps you draw and the pdf is the result of that drawing
2023-05-18 14:02:06  I need to create a tool to document stuff and I have to decide which one to choose for a pdf
2023-05-18 14:02:23  tex might be easier to automate, but ps more fun
2023-05-18 14:02:42  a bit like QuickDraw PICT format as you draw to such output and instead of putting a pixmap on screen it saves the drawcalls in a file.
2023-05-18 14:04:06  I'll start with some html generator
2023-05-18 14:04:17  which I have to implement again xD
2023-05-18 14:10:40  Well, that raises the source byte count for the editor to 1230 bytes.  No way I'll be able to optimize that down to under a kB.  :-(
2023-05-18 14:10:42  Oh well.
2023-05-18 14:11:18  bloat
2023-05-18 14:11:42  Heh heh.
2023-05-18 14:12:07  Well, that was me just being greedy.  I still feel pretty good about it overall.  Once I get this last part actually working, that is.
2023-05-18 14:46:53  [ oh text oh... #oh .meh :color red :background blue ] html 'oh.html to.file
2023-05-18 14:47:16  oh...
2023-05-18 14:48:53  I turn everything into a list and it's done
2023-05-18 14:49:01  :D
2023-05-18 14:49:12  also it's recursive
2023-05-18 14:52:15  [ p [ span :color blue [ p text oh :color red ] ] .meh  ] html .cr
2023-05-18 14:52:15  

oh

2023-05-18 15:23:24 vms14: https://staff.science.uva.nl/a.j.p.heck/Courses/Mastercourse2005/tutorial.pdf 2023-05-18 15:23:51 it's a bit of a shame 2023-05-18 15:23:53 look at that those words in the first example, you can see where html5 canvas borrows heavily from 2023-05-18 15:24:00 there are so many great docs about PostScript out there 2023-05-18 15:24:12 i kind of find it sad that it's not really a thign anymore only for these books alone :) 2023-05-18 15:24:34 tons of printers still run postscript interpreters, you can access them if you try hard enough 2023-05-18 15:24:52 you could just run ghostscript 2023-05-18 15:24:54 yeah well 2023-05-18 15:25:00 i'm surprised by the lack of interest in display postscript 2023-05-18 15:25:03 somewhere I have a Mandelbrot set generator in postscript 2023-05-18 15:25:04 i don't mean that it's not possible anymore 2023-05-18 15:25:11 unjust: VHS vs. Betamax 2023-05-18 15:25:12 of course i can do these things 2023-05-18 15:25:27 unjust: X was good, DPS was good 2023-05-18 15:25:37 i always wanted to see DPS 2023-05-18 15:25:49 like, would you have scalable vector screenshots? 2023-05-18 15:25:52 ultimately "network effects" tipped it towards X, at least partly because it was easier to license 2023-05-18 15:25:53 or how should i imagine that? 2023-05-18 15:26:46 depends on whether the graphics rendered were defined using absolute or relative units i guess 2023-05-18 15:27:13 fair enough, but typically, say text and window decorations? or you don't know? 2023-05-18 15:27:31 i don't know, but i'd be interested in finding out 2023-05-18 15:27:47 yeah me too :) 2023-05-18 15:31:45 that question hit home a little. i've been messing around with doing A4 page layout (for my invoices, because i'm tired of word processors) in an html canvas lately using a forth-like lang in javascript - and yesterday i had implemented a FONT word that would scale my sizing based on the DPI I had set up for my PAGE. i'm trying to keep all my sizes in MM. 2023-05-18 15:31:52 150 VALUE DPI 2023-05-18 15:31:53 25.4 VALUE MM/INCH 2023-05-18 15:32:02 : MM ( millimetres -- pixels ) DPI * MM/INCH / CEILING ; 2023-05-18 15:35:33 : A4 210 MM 297 MM ; 2023-05-18 15:35:39 A4 CANVAS VALUE canvas 2023-05-18 15:36:05 ( CANVAS sets create a "canvas" element with the supplied width and height 2023-05-18 15:37:39 unjust: so you're kind of implementing ps 2023-05-18 15:37:43 unjust: would be curious to see an example :) 2023-05-18 15:37:46 but 2023-05-18 15:38:04 pizza delivery just came, so enough enough with postfix, i need my pizza fix 2023-05-18 15:38:13 k, pretty lame joke, laters :) 2023-05-18 15:39:00 you draw on the canvas and then get an image from the canvas context? 2023-05-18 15:39:16 vms14: yes 2023-05-18 15:39:21 it's cool 2023-05-18 15:39:36 I had some words to automatically put a canvas on max height and with 2023-05-18 15:39:37 Riviera: i'll post a screenshot in a bit 2023-05-18 15:39:57 and the drawing functions used a "global" ctx 2023-05-18 15:40:20 it's fine if most of your programs will use only one canvas primarily 2023-05-18 15:40:37 you can set the current ctx from any canvas at any moment 2023-05-18 15:41:23 also a hook on the canvas on .onresize that executed a 'resize' word if existed in the dictionary 2023-05-18 15:41:46 you could make it a bit like lua 2023-05-18 15:41:58 and use requestAnimationFrame 2023-05-18 15:42:07 lua/ love2d 2023-05-18 15:42:35 love2d is actually very cool and easy to work with 2023-05-18 15:43:00 it assumes functions and calls them for events, drawing, update, etc 2023-05-18 15:43:11 you could add hooks manually if you wanted 2023-05-18 15:46:13 i wrote the words that wrap the canvas methods to take the context reference off the stack before the method arguments 2023-05-18 15:54:22 hopefully this clears up the ginsu spelling confusion: https://imgur.com/a/Vh08fK9 2023-05-18 16:45:14 Oh, it is s. 2023-05-18 16:45:29 Hah! Should have just trusted my first guess. 2023-05-18 16:45:57 A Boy Named Ginsu 2023-05-18 16:52:27 those knives are the only as-seen-on-tv/informercial products i've had that actually lasted a decent period of time 2023-05-18 16:52:53 Yeah, once in a while one of those things might actually be good. 2023-05-18 17:29:57 unjust: that's neat. I've been using SVG since you can scale to arbitrary DPI and it works pretty well. 2023-05-18 17:41:59 Whenever I want to talk to vms14 they're out of the channel 2023-05-18 17:46:50 He who controls the ps, controls the universe 2023-05-18 17:55:41 MrMobius: what do you with the output? generate tool paths? 2023-05-18 17:56:02 s/you/you do/ 2023-05-18 18:09:23 How bizarre. 2023-05-18 18:09:53 I put in primitives for loading and recovering the address registers (rsi and rdi). 2023-05-18 18:10:20 They weren't keeping their values at first - I discovered that my TYPE primitive was using those registers but wasn't saving and restoring them. 2023-05-18 18:10:37 Ok, fine. I put in push si at the beginning and pop si at the end - A then worked fine. 2023-05-18 18:10:54 rsi, that is. 2023-05-18 18:11:03 Put in push / pop rdi, and that made B work. 2023-05-18 18:11:06 BUT... 2023-05-18 18:11:33 When I added the rdi push/pop, suddenly my system works fine, but when I say bye and return to the os my typing doesn't show up. 2023-05-18 18:11:41 I have to stty sane to get it back. 2023-05-18 18:12:08 This is repeatable - if I remove the push/pop rdi, everything is fine when I exit. If I put it in, it's not. 2023-05-18 18:12:14 That makes NO SENSE AT ALL. 2023-05-18 18:15:09 Ah, actually it does. 2023-05-18 18:15:25 I was failing to set rdi to 1 in my exit ioctl call to restore the termios. 2023-05-18 18:15:36 It's the syscall parameter that specifies the target device. 2023-05-18 18:15:47 I just added a mov rdi, 1 there and now it's fine. 2023-05-18 18:15:48 Wow. 2023-05-18 18:15:56 some shells (zsh) do a better job at putting the terminal back the way it was. others, not so much 2023-05-18 18:27:48 unjust: working on different ways to make a keypad for electronics projects 2023-05-18 18:28:13 so various forms or printing and 3D printing 2023-05-18 18:28:33 numeric pads specifically or custom layouts? 2023-05-18 18:30:11 i'm curious about input devices that aren't rigid flat keyboards, but i haven't tried any chorded typing methods yet 2023-05-18 18:47:31 Hey, it's working. 2023-05-18 19:39:14 unjust: custom but flat keypad 2023-05-18 19:40:07 unjust: https://ibb.co/MPJNQF6 2023-05-18 19:54:42 very cool, what material will those buttons be made of? 2023-05-18 19:57:04 No math functions? 2023-05-18 19:57:25 (i.e., sin, cos, exp, ln, etc.) 2023-05-18 19:58:03 Maybe it's not for a calculator. 2023-05-18 20:23:18 unjust: I've tried a lot of different stuff. PLA with printed plastic card material glued on, PLA with dyed acrylic, dyed PETG, something called HJF, 3 color PLA 2023-05-18 20:23:36 ya Forth-based calculator so youll have to type sin and cos in manually 2023-05-18 20:30:56 which filament gave the best result so far? 2023-05-18 21:35:20 PETG is harder to print with but takes the dye pretty well 2023-05-18 21:35:36 PLA is easy but melts before you can get the dye to infuse