#Box drawing C macros elimination tests

1 messages · Page 1 of 1 (latest)

oak urchin
#

gcc -finput-charset=UTF-8 -fextended-identifiers

#

gcc -finput-charset=UTF-8 -fextended-identifiers -fexec-charset=UTF-8

#

;compile C -finput-charset=UTF-8 -fextended-identifiers -fexec-charset=UTF-8

#include <stdio.h>
#define
#define
#define
#define
#define ╗ {
#define ╝ }

╔═══════════════════ int main() ════════════════╗
║ printf("hello");                              ║
║ return 0;                                     ║
╚═══════════════════════════════════════════════╝
toxic pathBOT
#
Compiler Output
<source>:2:9: error: macro names must be identifiers
    2 | #define ╔
      |         ^
<source>:3:9: error: macro names must be identifiers
    3 | #define ║
      |         ^
<source>:4:9: error: macro names must be identifiers
    4 | #define ╚
      |         ^
<source>:5:9: error: macro names must be identifiers
    5 | #define ═
      |         ^
<source>:6:9: error: macro names must be identifiers
    6 | #define ╗ {
      |         ^
<source>:7:9: error: macro names must be identifiers
    7 | #define ╝ }
      |         ^
<source>:9:1: error: stray '\342' in program
    9 | <U+2554><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550> int main() <U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2557>
      | ^~~~~~~~
<source>:9:2: error: stray '\342' in program
    9 | <U+2554><U+2550><U+2550><U+
oak urchin
#

;compile C -finput-charset=UTF-8 -fextended-identifiers -fexec-charset=UTF-8

#include <stdio.h>
#define \u2554
#define \u2551
#define \u255A
#define \u2550
#define \u2557 {
#define \u255D }
/*
#define ╔
#define ║
#define ╚
#define ═
#define ╗ {
#define ╝ }
*/
╔═══════════════════ int main() ════════════════╗
║ printf("hello");                              ║
║ return 0;                                     ║
╚═══════════════════════════════════════════════╝
toxic pathBOT
#
Compiler Output
<source>:2:9: error: universal character \u2554 is not valid in an identifier
    2 | #define \u2554
      |         ^
<source>:3:9: error: universal character \u2551 is not valid in an identifier
    3 | #define \u2551
      |         ^
<source>:4:9: error: universal character \u255A is not valid in an identifier
    4 | #define \u255A
      |         ^
<source>:5:9: error: universal character \u2550 is not valid in an identifier
    5 | #define \u2550
      |         ^
<source>:6:9: error: universal character \u2557 is not valid in an identifier
    6 | #define \u2557 {
      |         ^
<source>:7:9: error: universal character \u255D is not valid in an identifier
    7 | #define \u255D }
      |         ^
<source>:16:1: error: stray '\342' in program
   16 | <U+2554><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+2550> int main() <U+2550><U+2550><U+2550><U+2550><U+2550><U+2550><U+25
oak urchin
#

you would need to run perl on it or something before, macro won't work

oak urchin
#

The only way I can make this work is using perl -pi.bak -e "s/...//gm;" main.c then run gcc instead of #define macros 🤷‍♂️

UTF-8 Bash only, broken in MS-DOS console:
perl -pi.bak -e "s/[ ]*(#define)[ ]+[╔║╚═╝╗]+.*$//gm;s/[╔║╚═]+//gm;s/[╗]/{/gm;s/[╝]/}/gm;" main.c

# Same program long verbose formatting of implicit accumulator stdin execute then print in place loop
while($_ = <STDIN>)
{
  $_ =~ s/[ ]*(#define)[ ]+[╔║╚═╝╗]+.*$//gm;
  $_ =~ s/[╔║╚═]+//gm;
  $_ =~ s/[╗]/{/gm;
  $_ =~ s/[╝]/}/gm;
  print $_;
}