Exemple #1
0
static void
print_string(char * str)
{
    char buf[256];
    int badchar = 0;
    size_t outlen = 0;

    if (!str) return;

    for(;; str++) {
	if (outlen && (*str == 0 || badchar || outlen > sizeof(buf)-8))
	{
	    buf[outlen] = 0;
	    if (badchar == '\n') {
		prv("writeln('%s');", buf);
		badchar = 0;
	    } else {
		prv("write('%s');", buf);
	    }
	    outlen = 0;
	}
	if (badchar) {
	    prv("write(chr(%d));", badchar);
	    badchar = 0;
	}
	if (!*str) break;

	if (*str >= ' ' && *str <= '~' && *str != '\\' && *str != '\'') {
	    buf[outlen++] = *str;
	} else {
	    badchar = (*str & 0xFF);
	}
    }
}
Exemple #2
0
static void
print_dstring(void)
{
    char * str = get_string();
    char buf[256];
    int gotnl = 0;
    size_t outlen = 0;

    if (!str) return;

    for(;; str++) {
	if (outlen && (*str == 0 || gotnl || outlen > sizeof(buf)-8))
	{
	    buf[outlen] = 0;
	    if (gotnl) {
		buf[outlen-2] = 0;
		prv("writeln(\"%s\");", buf);
	    } else
		prv("write(\"%s\");", buf);
	    gotnl = 0; outlen = 0;
	}
	if (!*str) break;

	if (*str == '\n') gotnl = 1;
	if (*str >= ' ' && *str <= '~' && *str != '"' && *str != '\\') {
	    buf[outlen++] = *str;
	} else if (*str == '"' || *str == '\\') {
	    buf[outlen++] = '\\'; buf[outlen++] = *str;
	} else if (*str == '\n') {
	    buf[outlen++] = '\\'; buf[outlen++] = 'n';
	} else if (*str == '\t') {
	    buf[outlen++] = '\\'; buf[outlen++] = 't';
	} else {
	    char buf2[16];
	    int n;
	    sprintf(buf2, "\\%03o", *str & 0xFF);
	    for(n=0; buf2[n]; n++)
		buf[outlen++] = buf2[n];
	}
    }
}
Exemple #3
0
static void
print_string(void)
{
    char * str = get_string();
    char buf[256];
    int badchar = 0;
    size_t outlen = 0;

    if (!str) return;

    for(;; str++) {
        if (outlen && (*str == 0 || badchar || outlen > sizeof(buf)-8))
        {
            buf[outlen] = 0;
            if (badchar == '\n') {
                prv("echo '%s'", buf);
                badchar = 0;
            } else {
                do_output++;
                prv("echon '%s'", buf);
            }
            outlen = 0;
        }
        if (badchar) {
            prv("o %d", badchar);
            badchar = 0;
            do_output++;
        }
        if (!*str) break;

        if (*str == '-' && outlen == 0) {
            badchar = (*str & 0xFF);
        } else if (*str >= ' ' && *str <= '~' && *str != '\\' && *str != '\'') {
            buf[outlen++] = *str;
        } else {
            badchar = (*str & 0xFF);
        }
    }
}
Exemple #4
0
openssl::Key BackendOpenSsl::internal_private_key(const ecdsa256::PrivateKey& generic) const
{
    openssl::Key key(NID_X9_62_prime256v1);
    openssl::BigNumber prv(generic.key);
    EC_KEY_set_private_key(key, prv);

    // OpenSSL requires public key, so we recreate it from private key
    openssl::BigNumberContext ctx;
    const EC_GROUP* group = EC_KEY_get0_group(key);
    openssl::Point pub(group);
    openssl::check(EC_POINT_mul(group, pub, prv, nullptr, nullptr, ctx));
    EC_KEY_set_public_key(key, pub);

    openssl::check(EC_KEY_check_key(key));
    return key;
}
Exemple #5
0
void lima_lower_to_gp_ir(lima_shader_t* shader)
{
	ir_dead_branches_visitor dbv;
	dbv.run(shader->linked_shader->ir);
	
	shader->ir.gp.gp_prog = lima_gp_ir_prog_create();
	gp_ir_visitor v(shader->ir.gp.gp_prog, &shader->symbols,
					shader->glsl_symbols, &dbv);
	v.run(shader->linked_shader->ir);
	
	phi_rewrite_visitor prv(&v);
	prv.run(shader->linked_shader->ir);
	
	unsigned temp_size = shader->symbols.temporary_table.total_size;
	shader->ir.gp.gp_prog->temp_alloc = (temp_size + 3) / 4;
}
Exemple #6
0
void
outcmd(int ch, int count)
{
    if (curr_offset >= 0) {
        if (ch == '>') {
            curr_offset += count;
            return;
        }
        if (ch == '<' && curr_offset > count) {
            curr_offset -= count;
            return;
        }
        if (ch != '"' && ch != '~') {
            pr("typeset -i M P V");
            prv("P=%d", curr_offset);
            curr_offset = -1;
        }
    }

    switch(ch) {
    case '!':
        pr("#!/bin/ksh");
        pr("(eval 'set -o sh +o sh') 2>/dev/null && set +o sh 2>/dev/null");
        pr("(eval 'set -o posix +o posix') 2>/dev/null && set +o posix 2>/dev/null");
        pr("if (eval 'typeset -i M P V && M[1]=3 && ((M[500]+=1,1)) &&");
        pr("   ((M[1]+=1)) && [[ ${M[1]} -eq 4 && ${M[500]} -eq 1 ]]' ) 2>/dev/null");
        pr("then :");
        pr("else");
        pr("    echo 'ERROR: The shell must be Ksh93 compatible' >&2");
        pr("    exit 1");
        pr("fi");

        pr("");
        pr("(eval 'set -f +B') 2>/dev/null && set -f +B 2>/dev/null");
        pr("export LC_ALL=C");

        pr("");
        pr("brainfuck() {");
        ind++;
        curr_offset = tapeinit;
        break;

    case 'X':
        shcode();
        pr("echo Infinite Loop 2>&1 ; exit 1");
        break;

    case '=':
        if (in_arith)
            prv("  M[P]=%d,", count);
        else
            prv("M[P]=%d", count);
        break;

    case 'B':
        arith();
        if(bytecell) pr("  M[P]&=255,");
        pr("  V=M[P],");
        break;
    case 'M':
        arith();
        prv("  M[P]+=V*%d,", count);
        break;
    case 'N':
        arith();
        prv("  M[P]-=V*%d,", count);
        break;
    case 'S':
        arith();
        pr("  M[P]+=V,");
        break;

    case 'Q':
        arith();
        prv("  V)) && ((M[P]=%d,", count);
        shcode();
        break;
    case 'm':
        arith();
        prv("  V)) && ((M[P]+=V*%d,", count);
        shcode();
        break;
    case 'n':
        arith();
        prv("  V)) && ((M[P]-=V*%d,", count);
        shcode();
        break;
    case 's':
        arith();
        pr("  V)) && ((M[P]+=V,");
        shcode();
        break;

    case '+':
        arith();
        prv("  M[P]+=%d,", count);
        break;
    case '-':
        arith();
        prv("  M[P]-=%d,", count);
        break;
    case '>':
        arith();
        prv("  P+=%d,", count);
        break;
    case '<':
        arith();
        prv("  P-=%d,", count);
        break;
    case '.':
        shcode();
        pr("o $((M[P]&255))");
        do_output++;
        break;
    case ',':
        shcode();
        pr("getch");
        do_input++;
        break;
    case '"':
        shcode();
        print_string();
        break;

    case '[':
        shcode();
        if(bytecell) {
            pr("while (( (M[P]&=255) != 0)) ; do");
        }
        else {
            pr("while ((M[P])) ; do");
        }
        ind++;
        break;
    case ']':
        shcode();
        ind--;
        pr("done");
        break;

    case '~':
        shcode();
        ind--;
        pr("}");

        if (do_output) {
            pr("echon() { printf \"%%s\" \"$*\" ;}");
            pr("if ((BASH_VERSINFO[0]>0)) ; then");
            pr("    # Bash works but so slooooow");
            pr("    o(){ printf -v C '\\\\%%04o' $1; echo -n -e \"$C\" ; }");
            pr("elif ( ( eval ': ${.sh.version}' ) 2>/dev/null >&2 ) ; then");
            pr("    # A real Ksh93 has a fast printf");
            pr("    o(){ printf \"\\\\x$(printf %%02x $1)\";}");
            pr("else");
            pr("    # Hopefully the ksh88 version is quick");
            pr("    o() { typeset -i8 N ; N=$1; print -n - \\\\0$(print ${N#*#});}");
            pr("    echon() { print -n - \"$*\" ;}");
            pr("fi");

            /* Safe fallback */
            pr("[ \"`{ o 65;echon A;} 2>/dev/null`\" != AA ] && {");
            pr("    o() { echo $1 | awk '{printf \"%%c\",$1;}';}");
            pr("    echon() { awk -v S=\"$*\" 'BEGIN{printf \"%%s\",S;}';}");
            pr("}");
        }

        if (do_input) {
            pr("");
            pr("getch() {");
            pr("    [ \"$goteof\" = \"y\" ] && return;");
            pr("    [ \"$gotline\" != \"y\" ] && {");
            pr("        if read -r line");
            pr("        then");
            pr("            gotline=y");
            pr("        else");
            pr("            goteof=y");
            pr("            return");
            pr("        fi");
            pr("    }");
            pr("    [ \"$line\" = \"\" ] && {");
            pr("        gotline=n");
            pr("        ((M[P]=10))");
            pr("        return");
            pr("    }");

            ind++;
            pr("if ((BASH_VERSINFO[0]>0)) ; then");
            pr("    c=\"${line:0:1}\"");
            pr("    line=\"${line:1}\"");
            pr("    printf -v C %%d \"'$c\"");

            pr("");
            pr("elif ( line=nnynnn; j=2; [[ \"${line:j:1}\" == y ]] ) 2>/dev/null ; then");
            pr("    c=\"${line:0:1}\"");
            pr("    line=\"${line:1}\"");
            pr("    C=$(printf %%d \"'$c\")");

            pr("");
            pr("else");
            pr("    C=\"$line\"");
            pr("    while [ ${#C} -gt 1 ] ; do C=\"${C%%?}\"; done");
            pr("    line=\"${line#?}\"");
            pr("    C=`echo \"$C\" |dd bs=1 count=1 2>/dev/null |od -d |awk 'NR==1{print 0+$2;}'`");
            pr("fi");
            pr("((M[P]=C))");

            ind--;
            pr("}");
        }

        pr("");
        pr("set -e");
        pr("brainfuck");
        break;
    }
}
Exemple #7
0
void
outcmd(int ch, int count)
{
    struct instruction * n = calloc(1, sizeof*n), *n2;
    if (!n) { perror("bf2pas"); exit(42); }

    icount ++;
    n->ch = ch;
    n->count = count;
    n->icount = icount;
    if (ch == '"')
	n->cstr=strdup(get_string());
    if (!last) {
	pgm = n;
    } else {
	last->next = n;
    }
    last = n;

    if (n->ch == '[') {
	n->ino = ++lblcount;
	n->loop = jmpstack; jmpstack = n;
    } else if (n->ch == ']') {
	n->loop = jmpstack; jmpstack = jmpstack->loop; n->loop->loop = n;
    }

    if (ch != '~') return;

    loutcmd(0, 0, 0);

    if (icount < MAXWHILE) {
	for(n=pgm; n; n=n->next)
	    loutcmd(n->ch, n->count, n);
    } else {
	for(n=pgm; n; n=n->next) {
	    if (n->ch != ']') continue;
	    if (n->icount-n->loop->icount <= MAXWHILE) continue;
	    loutcmd(1000, 1, n->loop);
	    for(n2 = n->loop->next; n != n2; n2=n2->next) {
		if (n2->ch == '[' && n2->loop->icount-n2->icount > MAXWHILE) {
		    loutcmd(n2->ch, n2->count, n);
		    prv("bf%d()", n2->ino);
		    n2 = n2->loop;
		    loutcmd(n2->ch, n2->count, n);
		} else
		    loutcmd(n2->ch, n2->count, n2);
	    }
	    loutcmd(1001, 1, n);
	}

	for(n=pgm; n; n=n->next) {
	    if (n->ch != '[' || n->loop->icount-n->icount <= MAXWHILE)
		loutcmd(n->ch, n->count, n);
	    else {
		loutcmd(n->ch, n->count, n);
		prv("bf%d()", n->ino);
		n=n->loop;
		loutcmd(n->ch, n->count, n);
	    }
	}
    }

    while(pgm) {
	n = pgm;
	pgm = pgm->next;
	if (n->cstr)
            free(n->cstr);
	memset(n, '\0', sizeof*n);
	free(n);
    }
}
Exemple #8
0
void
loutcmd(int ch, int count, struct instruction *n)
{
    switch(ch) {
    case 1000:
	prv("procedure bf%d();", n->ino);
	pr("begin");
	ind++;
	break;

    case 1001:
	ind--;
	pr("end;");
	break;

    case 0:
	pr("var");
	ind++;
	if (bytecell)
	    prv("tape : packed array [0..%d] of byte;", tapesz);
	else
	    prv("tape : packed array [0..%d] of longint;", tapesz);
	pr("tapepos : longint;");
	pr("v : longint;");
	pr("inch : char;");
	ind --;
	pr("");
	break;

    case '!':
	pr("begin");
	ind ++;
	prv("tapepos := %d;", tapeinit);
	break;

    case '=': prv("tape[tapepos] := %d;", count); break;
    case 'B': pr("v := tape[tapepos];"); break;
    case 'M': prv("tape[tapepos] := tape[tapepos] + %d*v;", count); break;
    case 'N': prv("tape[tapepos] := tape[tapepos] - %d*v;", count); break;
    case 'S': pr("tape[tapepos] := tape[tapepos] + v;"); break;
    case 'Q': prv("if v <> 0 then tape[tapepos] := %d;", count); break;
    case 'm': prv("if v <> 0 then tape[tapepos] := tape[tapepos] + %d*v;", count); break;
    case 'n': prv("if v <> 0 then tape[tapepos] := tape[tapepos] - %d*v;", count); break;
    case 's': pr("if v <> 0 then tape[tapepos] := tape[tapepos] + v;"); break;

    case '+': prv("tape[tapepos] := tape[tapepos] + %d;", count); break;
    case '-': prv("tape[tapepos] := tape[tapepos] - %d;", count); break;
    case '<': prv("tapepos := tapepos - %d;", count); break;
    case '>': prv("tapepos := tapepos + %d;", count); break;
    case '[': pr("while tape[tapepos] <> 0 do begin"); ind++; break;
    case 'X': pr("{Infinite Loop};"); break;
    case ']': ind--; pr("end;"); break;
    case ',': pr("if not eof then begin read(inch); tape[tapepos] := ord(inch); end;"); break;
    case '.': pr("write(chr(tape[tapepos]));"); break;
    case '"': print_string(n->cstr); break;
    case '~': ind --; pr("end."); break;
    }
}
Exemple #9
0
void
outcmd(int ch, int count)
{
    switch(ch) {
    case '!':
	ofd = stdout;

	pr("module f**k;");	/* Required to prevent really stupid error messages. */

	pr("import std.stdio;");
	pr("void main(){");
	ind++;
	if (bytecell) {
	    prv("char[] mem; mem.length = %d; mem[] = 0;", tapesz);
	    prv("int m = %d;", tapeinit);
	    pr("int v;");
	} else {
	    prv("int[] mem; mem.length = %d; mem[] = 0;", tapesz);
	    prv("int v, m = %d;", tapeinit);
	}
	pr("stdout.setvbuf(0, _IONBF);");
	break;

    case '~':
	ind--;
	pr("}");
	break;

    case 'X': pr("throw new Exception(\"Trivial Infinite Loop Hit.\");"); break;

    case '=': prv("mem[m] = %d;", count); break;
    case 'B': pr("v = mem[m];"); break;
    case 'M': prv("mem[m] += v*%d;", count); break;
    case 'N': prv("mem[m] -= v*%d;", count); break;
    case 'S': pr("mem[m] += v;"); break;
    case 'Q': prv("if(v) mem[m] = %d;", count); break;
    case 'm': prv("if(v) mem[m] += v*%d;", count); break;
    case 'n': prv("if(v) mem[m] -= v*%d;", count); break;
    case 's': pr("if(v) mem[m] += v;"); break;

    case '+': prv("mem[m] +=%d;", count); break;
    case '-': prv("mem[m] -=%d;", count); break;
    case '>': prv("m += %d;", count); break;
    case '<': prv("m -= %d;", count); break;

    case '.': pr("write(cast(char)mem[m]);"); break;
    case '"': print_dstring(); break;
    case ',': pr("v = getchar(); if(v!=EOF) mem[m] = v;"); break;

    case '[': pr("while(mem[m]) {"); ind++; break;
    case ']': ind--; pr("}"); break;
    }
}