struct texture_stage_op { unsigned int carg1, carg2, carg0; unsigned int aarg1, aarg2, aarg0; unsigned int dst; }; static const char *debug_register(unsigned int reg) { switch(reg) { case 0x8921: return "GL_REG_0_ATI"; case 0x8923: return "GL_REG_2_ATI"; case 0x0: return "GL_ZERO"; case 0x1: return "GL_ONE"; default: return "Unknown register\n"; } } static unsigned int find_tmpreg(struct texture_stage_op op[8]) { int i; int tex_used[8]; for(i = 0; i < 8; i++) { if(op[i].carg1 == 0x00000002 ) { tex_used[i] = 1; } } for(i = 1; i < 6; i++) { if(!tex_used[i]) { return 0x8921 + i; } } return 0; } extern f(const char*); void g() { struct texture_stage_op op[8]; unsigned int tmparg = find_tmpreg(op); unsigned int dstreg; if(tmparg == 0x0) return; dstreg = tmparg; f(debug_register(dstreg)); return; }