change blang op meanings

This commit is contained in:
dtb 2022-12-09 19:46:32 -05:00
parent 905a0e9056
commit da0ec7de01
4 changed files with 15 additions and 14 deletions

View File

@ -16,11 +16,10 @@ Public domain. 2022 DTB.
## true(1)
```
^ ; initialize state to 0
% ; store state (0) into *stack
; stack is destroyed, state becomes the final value of *stack
; when the stack is destroyed, the program exits with the value of state
$
^ ; initialize hand to 0
; set the chart pointer to 0 - this destroys the chart
; and the program exits with the value of the hand
*
```
## Hello world:
@ -28,5 +27,5 @@ $
; the <.> construct uses '<' to store the next value literally into state,
; does so, and uses '>' to output state literally
<H><e><l><l><o><,>< ><w><o><r><l><d><!><
>^%$
>^*
```

View File

@ -3,5 +3,5 @@
struct State{
unsigned char hand;
char *chart;
}
};
#endif

View File

@ -1,5 +1,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "blang.h"
@ -17,11 +18,11 @@ void Ops_carat(struct State *s){
}
void Ops_ampersand(struct State *s){
s->hand = s->chart;
s->hand = (char)s->chart;
}
void Ops_splat(struct State *s){
s->chart = s->hand;
s->chart = (char *)s->hand;
}
void Ops_plus(struct State *s){
@ -41,6 +42,8 @@ void Ops_left(struct State *s){
}
void Ops_semi(struct State *s){
int c;
while(
(c = getc(stdin)) != EOF
&& strchr("!\n", c) == NULL
@ -57,10 +60,9 @@ void Ops_cross(struct State *s){
const struct {
unsigned char name;
void (*f)(struct State *);
} *OPS[] = {
{ '$', Ops_dollar },
} OPS[] = {
{ '%', Ops_percent },
{ '^', Ops_caret },
{ '^', Ops_carat },
{ '&', Ops_ampersand },
{ '*', Ops_splat },
{ '+', Ops_plus },
@ -80,7 +82,7 @@ const struct {
/* Slower than a switch but you don't have to update it when you add new
* ops! */
(void(struct State *)) Ops_lookup(char op){
void (*Ops_lookup(char op))(struct State *){
size_t i;
for(i = 0; i < (sizeof OPS)/(sizeof *OPS); ++i)

View File

@ -1,4 +1,4 @@
#if !defined _BLANG_OPS
# define _BLANG_OPS 1
(void(struct State *)) Ops_lookup(char op);
void (*Ops_lookup(char op))(struct State *);
#endif