Way too many changes... Brainfuck works, $DEITY$ knows what else.
This commit is contained in:
parent
f10847e361
commit
468ec84a9e
6 changed files with 43 additions and 21 deletions
39
BF-RUN.COB
39
BF-RUN.COB
|
@ -26,6 +26,7 @@
|
|||
88 BF-IN VALUE ",".
|
||||
88 BF-BEGIN VALUE "(".
|
||||
88 BF-END VALUE ")".
|
||||
88 BF-DIE VALUE "$".
|
||||
01 I-O-CHARACTER PIC X.
|
||||
88 ESCAPE-CHAR VALUE "$".
|
||||
01 CONVERSION.
|
||||
|
@ -64,7 +65,7 @@
|
|||
MOVE 0 TO BF-CELL(CURRENT-CELL).
|
||||
|
||||
READ-INSTRUCTION.
|
||||
IF IP IS LESS THAN 513 THEN
|
||||
IF IP IS LESS THAN 512 THEN
|
||||
UNSTRING BF-CODE INTO CURRENT-INSTRUCTION WITH POINTER IP
|
||||
D DISPLAY CURRENT-INSTRUCTION
|
||||
ELSE
|
||||
|
@ -74,7 +75,9 @@
|
|||
MOVE 0 TO LOOP-STATE.
|
||||
D DISPLAY IP, BF-CELL(CURRENT-CELL), LOOP-DEPTH, CYCLES.
|
||||
PERFORM READ-INSTRUCTION.
|
||||
IF DONE THEN GO TO HELL.
|
||||
IF DONE THEN
|
||||
D DISPLAY "GOING TO HELL"
|
||||
GO TO HELL.
|
||||
IF BF-LEFT THEN
|
||||
PERFORM DO-LEFT
|
||||
ELSE IF BF-RIGHT THEN
|
||||
|
@ -90,7 +93,9 @@
|
|||
ELSE IF BF-BEGIN THEN
|
||||
PERFORM DO-BEGIN
|
||||
ELSE IF BF-END THEN
|
||||
PERFORM DO-END.
|
||||
PERFORM DO-END
|
||||
ELSE IF BF-DIE THEN
|
||||
GO TO HELL.
|
||||
ADD 1 TO CYCLES.
|
||||
|
||||
DO-LEFT.
|
||||
|
@ -112,13 +117,19 @@
|
|||
ADD 1 TO BF-CELL(CURRENT-CELL).
|
||||
|
||||
DO-OUT.
|
||||
MOVE BF-CELL(CURRENT-CELL) TO CHAR-CODE.
|
||||
CALL "DECODE-ASCII" USING CONVERSION.
|
||||
STRING COBOL-STRING,
|
||||
DELIMITED BY SPACES,
|
||||
INTO BF-OUTPUT,
|
||||
WITH POINTER OUT-PTR.
|
||||
D DISPLAY "OUT", I-O-CHARACTER, BF-CELL(CURRENT-CELL).
|
||||
IF OUT-PTR < 505 THEN
|
||||
MOVE BF-CELL(CURRENT-CELL) TO CHAR-CODE
|
||||
CALL "DECODE-ASCII" USING CONVERSION
|
||||
IF COBOL-STRING IS EQUAL TO SPACES THEN
|
||||
ADD 1 TO OUT-PTR
|
||||
ELSE
|
||||
STRING COBOL-STRING,
|
||||
DELIMITED BY SPACES,
|
||||
INTO BF-OUTPUT,
|
||||
WITH POINTER OUT-PTR
|
||||
D DISPLAY "OUT", I-O-CHARACTER, BF-CELL(CURRENT-CELL)
|
||||
ELSE
|
||||
GO TO HELL.
|
||||
|
||||
DO-IN.
|
||||
UNSTRING BF-INPUT,
|
||||
|
@ -126,18 +137,18 @@
|
|||
WITH POINTER IN-PTR.
|
||||
IF NOT ESCAPE-CHAR THEN
|
||||
MOVE I-O-CHARACTER TO COBOL-STRING
|
||||
ELSE
|
||||
ELSE IF IN-PTR < 513 THEN
|
||||
UNSTRING BF-INPUT,
|
||||
INTO I-O-CHARACTER,
|
||||
WITH POINTER IN-PTR
|
||||
IF ESCAPE-CHAR THEN
|
||||
MOVE I-O-CHARACTER TO COBOL-STRING
|
||||
ELSE
|
||||
SUBTRACT 1 FROM IN-PTR
|
||||
ELSE IF IN-PTR < 507 THEN
|
||||
UNSTRING BF-INPUT,
|
||||
DELIMITED BY "$",
|
||||
INTO COBOL-STRING,
|
||||
WITH POINTER IN-PTR.
|
||||
WITH POINTER IN-PTR
|
||||
ELSE GO TO HELL.
|
||||
CALL "ENCODE-ASCII" USING CONVERSION.
|
||||
MOVE CHAR-CODE TO BF-CELL(CURRENT-CELL).
|
||||
D DISPLAY "IN", I-O-CHARACTER, BF-CELL(CURRENT-CELL).
|
||||
|
|
|
@ -320,5 +320,6 @@
|
|||
MOVE "$TLDE$" TO COBOL-STRING
|
||||
ELSE IF ASCII-DEL THEN
|
||||
MOVE "$DEL$" TO COBOL-STRING
|
||||
ELSE STRING "$", CHAR-CODE INTO COBOL-STRING.
|
||||
ELSE STRING "$", CHAR-CODE, "$" INTO COBOL-STRING.
|
||||
DDISPLAY COBOL-STRING.
|
||||
EXIT PROGRAM.
|
||||
|
|
|
@ -322,5 +322,5 @@
|
|||
MOVE 126 TO CHAR-CODE
|
||||
ELSE IF ASCII-DEL THEN
|
||||
MOVE 127 TO CHAR-CODE
|
||||
ELSE MOVE 0 TO CHAR-CODE.
|
||||
ELSE MOVE COBOL-STRING TO CHAR-CODE.
|
||||
EXIT PROGRAM.
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
03 MSG-LENGTH PIC 9(3).
|
||||
03 MSG-BODY PIC X(512).
|
||||
03 MSG-BODY-1 REDEFINES MSG-BODY PIC X.
|
||||
88 HAS-PREFIX VALUE ":".
|
||||
88 HAS-PREFIX VALUE ";".
|
||||
01 IRC-MESSAGE.
|
||||
03 PREFIX.
|
||||
05 NICK PIC X(16).
|
||||
|
@ -22,7 +22,7 @@
|
|||
05 TARGET PIC X(50).
|
||||
05 REST PIC X(480).
|
||||
05 REST-PREFIX REDEFINES REST PIC X.
|
||||
88 REST-PARAM VALUE ":".
|
||||
88 REST-PARAM VALUE ";".
|
||||
|
||||
PROCEDURE DIVISION USING BUFFER, IRC-MESSAGE.
|
||||
MOVE SPACES TO IRC-MESSAGE.
|
||||
|
|
14
channel.c
14
channel.c
|
@ -50,7 +50,10 @@ void channel_set_status(int value)
|
|||
void channel_from_cobol(void)
|
||||
{
|
||||
int message_length = channel_message_length();
|
||||
memset(msg_body + message_length, 0, msg_body_len - message_length);
|
||||
memset(msg_body + message_length, 0, msg_body_len - message_length + 1);
|
||||
for(char *c = msg_body; *c; c++) {
|
||||
if(*c == ';') *c = ':';
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -58,7 +61,8 @@ void channel_to_cobol(void)
|
|||
{
|
||||
char *c;
|
||||
for(c = msg_body; *c; c++) {
|
||||
*c = toupper(*c);
|
||||
if(isalpha(*c)) *c = toupper(*c);
|
||||
if(*c == ':') *c = ';';
|
||||
}
|
||||
memset(c, ' ', msg_body_len - strlen(msg_body));
|
||||
|
||||
|
@ -160,6 +164,9 @@ void CHANNEL__SEND(void)
|
|||
char *msg;
|
||||
int sent, total;
|
||||
channel_from_cobol();
|
||||
#ifdef DEBUG
|
||||
printf("Sending: %s\n", msg_body);
|
||||
#endif
|
||||
sent = 0;
|
||||
total = strlen(msg_body);
|
||||
msg_body[total++] = '\n';
|
||||
|
@ -199,6 +206,9 @@ void CHANNEL__RECV(void)
|
|||
for(size_t i = 0; i < recv_buf_pos; i++) {
|
||||
recv_buf[i] = message_end[i];
|
||||
}
|
||||
#ifdef DEBUG
|
||||
printf("Received: %s\n", msg_body);
|
||||
#endif
|
||||
channel_to_cobol();
|
||||
channel_set_status(0);
|
||||
return;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#!/bin/sh
|
||||
${CC:-cc} -o channel.o -c channel.c
|
||||
${COBC:-cobc} -x WOPO-CNF.COB PRINTCNF.COB
|
||||
${COBC:-cobc} -x WOPO.COB IRC-MSG.COB PRINTCNF.COB channel.o
|
||||
${COBC:-cobc} -x WOPO.COB IRC-MSG.COB PRINTCNF.COB DECASCII.COB ENCASCII.COB BF-RUN.COB channel.o
|
||||
|
||||
|
|
Loading…
Reference in a new issue