#include <stdio.h>
typedef enum {tarasB = 0, superhackkiller1997, other_shit} users_t;
char * users[] = {"tarasB", "superhackkiller1997", "other_shit"};
typedef void(*say_ptr_t)(char *);
users_t global_usr = other_shit;
say_ptr_t bind(users_t usr) {
void say(char * str) {
fprintf(stderr
, "%s: %s\n", users
[global_usr
], str
); }
global_usr = usr;
say_ptr_t volatile p = say;
return p;
}
int main(void) {
bind(tarasB)("shit");
bind(superhackkiller1997)("i'm god");
bind(other_shit)("ko-ko-ko");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIGVudW0ge3RhcmFzQiA9IDAsIHN1cGVyaGFja2tpbGxlcjE5OTcsIG90aGVyX3NoaXR9IHVzZXJzX3Q7CgpjaGFyICogdXNlcnNbXSA9IHsidGFyYXNCIiwgInN1cGVyaGFja2tpbGxlcjE5OTciLCAib3RoZXJfc2hpdCJ9OwoKdHlwZWRlZiB2b2lkKCpzYXlfcHRyX3QpKGNoYXIgKik7Cgp1c2Vyc190IGdsb2JhbF91c3IgPSBvdGhlcl9zaGl0OwoKc2F5X3B0cl90IGJpbmQodXNlcnNfdCB1c3IpIHsKICB2b2lkIHNheShjaGFyICogc3RyKSB7CiAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgdXNlcnNbZ2xvYmFsX3Vzcl0sIHN0cik7CiAgfQogIGdsb2JhbF91c3IgPSB1c3I7CiAgc2F5X3B0cl90IHZvbGF0aWxlIHAgPSBzYXk7CiAgcmV0dXJuIHA7Cn0KCmludCBtYWluKHZvaWQpIHsKICBiaW5kKHRhcmFzQikoInNoaXQiKTsKICBiaW5kKHN1cGVyaGFja2tpbGxlcjE5OTcpKCJpJ20gZ29kIik7CiAgYmluZChvdGhlcl9zaGl0KSgia28ta28ta28iKTsKICByZXR1cm4gMDsKfQ==