Way too many changes... Brainfuck works, $DEITY$ knows what else.

This commit is contained in:
Quinn Evans 2015-09-29 22:33:37 -06:00
parent f10847e361
commit 468ec84a9e
6 changed files with 43 additions and 21 deletions

View File

@ -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).

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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;

View File

@ -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