void js_sub(FILE *f) { int par1; char *c; int d; c=malloc(65536); d=getc(f);while (d!=EOF && d!='$') d=getc(f); fgets(c,65536,f); if (sub_mode) { add_short(142); get_cislo(f,&par1); if (par1>0) add_short(par1);else add_short(32767+par1-basic_num); add_string(c); } else { add_short(148); add_string(c); get_cislo(f,&par1); if (par1>0) standard_jump=par1;else standard_jump=32767+par1-basic_num; } free(c); }
void js_first(FILE *f) { int parm1; add_short(166); add_short(last_pgf); add_short(140); get_cislo(f,&parm1); add_short(parm1); }
void add_else() { int psave,c; get_command(f,&c); if (c!=-2) error("Chybn� syntaxe p�kazu else. O�ek�v� se '{'"); was_sub=0; if (get_last_level()!=open_level) error("Else bez if"); add_short(171); psave=prog_pos; add_short(0); pop_and_fill(prog_pos,open_level); push_level(open_level,psave); open_level++; }
int main (void) { x = add_int (1, 2); x = add_short (3, 4); x = add_ushort (5, 6); x = add_unsigned (7, 8); return 0; }
void add_if_jump() { char c=1; switch(iff_mode) { case IF_NOT_JUMP:add_short(169);break; case IF_JUMP:add_short(170);break; case IF_ELSE:c=0;break; } if (c) { push_level(open_level,prog_pos); add_short(0); } iff_mode=0; was_sub=0; }
void js_dialoge(FILE *f) { int parm1; T_PARAGRAPH pgf; if (!b_closed) error("Ocekava se '}' (close_block)"); get_cislo(f,&parm1); abs_num=basic_num=parm1*128; pgf.num=basic_num; pgf.alt=basic_num; last_dialoge=pgf_count; last_pgf=0; add_pgf(&pgf); get_command(f,&parm1); if (parm1!=-2) error ("Ocekava se '{' (open_block)"); sentence=0; b_closed=0; add_short(167); add_short(basic_num); }
void pop_and_fill(int pos,int level) { int i; int prog_sav; prog_sav=prog_pos; while (if_ptr && if_data[if_ptr-1].level==level) { if_ptr--; prog_pos=if_data[if_ptr].pointer; i=pos-if_data[if_ptr].pointer-3; if (i>32767 || i<-32767) error("Blok if/else je priliz dlouhy (delsi nez 32767 bytu)"); add_short(i); } prog_pos=prog_sav; }
void copy_short(FILE *f) { int c; int i; c=fgetc(f); if (c=='&') { get_cislo(f,&i); add_var(i); } else { if (isdigit(c)) ungetc(c,f); get_cislo(f,&i); add_short(i); } }
int breakpoint_Relocation::pack_data() { short* p = data(); assert(p == &live_bits(), "initializing live_bits"); *p++ = _bits; jint target_bits = (jint) internal() ? scaled_offset (_target) : runtime_address_to_index(_target); if (settable()) { // save space for set_target later add_long(p, target_bits); } else { add_int (p, target_bits); } for (int i = 0; i < instrlen(); i++) { add_short(p, (short)0x7777); // placeholder value until bytes can be saved } return p - data(); }
void js_close_block() { if (open_level) { if (was_sub) if (sub_mode) add_short(165); else { add_short(139); add_short(standard_jump); } sub_mode=0; open_level--; return; } if (b_closed) error("Neocekavany znak '}' (close_block)"); if (sentence && sub_mode) add_short(165);else { add_short(139); add_short(standard_jump); } b_closed=1; }
void decode_program(FILE *f) { int c; char next_sub=0; char *d; d=(char *)calloc(sizeof(char),16384); open_level=0; c=fgetc(f); while (c!=EOF) { if (c=='!') { char d[256]; fgets(&d,256,f); decode_pgf1(d); } else if (isdigit(c) || c=='-') { int cislo; ungetc(c,f); get_cislo(f,&cislo); add_short(cislo); } else if (c=='*') { int cislo; get_cislo(f,&cislo); if (cislo!=517 && next_sub) { js_close_sub(); next_sub=0; } if (cislo!=171 && !iff_mode) pop_and_fill(prog_pos,open_level); switch (cislo) { case 512:js_dialoge(f);break; //Sekce DIALOG case 513:js_first(f);break; //Prikaz FIRST case 514:add_short(152); //Prikaz WHEN_ITEM copy_short(f); add_short(140); get_cislo(f,&cislo); if (cislo>0)add_short(cislo);else add_short(cislo+32767-basic_num); break; case 515:add_short(163); //prikaz WHEN_FLAG copy_short(f); add_short(140); get_cislo(f,&cislo); if (cislo>0)add_short(cislo);else add_short(cislo+32767-basic_num); break; case 516:js_standard(f);break; //prikaz STANDARD case 517:js_sub(f);next_sub=1;break; //prikaz SUB case 520:js_sentence(f);break; //Sekce SENTENCE case -1:js_close_block();break; //znak }// case -2: if (iff_mode) add_if_jump();else error("Neocekavany znak '{' (open_block)"); open_level++; break; //znak {// case 999:save_pgf_name(f);break; case 169:if (iff_mode) add_if_jump(); //prikaz if iff_mode=IF_NOT_JUMP;break; case 170:if (iff_mode!=IF_NOT_JUMP) error("NOT bez IF"); //modifikator not iff_mode=IF_JUMP;break; case 171:if (iff_mode) error("Chybn� pou�it� p�kazu ELSE"); //prikaz else add_else();break; case 173:set_alternative(f);break; default: add_short(cislo);break; } } else if (c=='$') { fgets(d,16384,f); add_string(d); } else if (c=='&') { int cislo; get_cislo(f,&cislo); add_var(cislo); } c=fgetc(f); } free(d); }
void js_close_sub() { was_sub=1; if (sub_mode)add_short(164); else add_short(144); }