|
|
1.1 ! root 1: #include "r.h" ! 2: ! 3: int swlevel = -1; ! 4: int swexit[5]; ! 5: int nextcase[5]; ! 6: ! 7: swcode() { ! 8: transfer = 0; ! 9: putcom("switch"); ! 10: swlevel++; ! 11: if (swlevel >= 5) ! 12: error("Switches nested > 5"); ! 13: swexit[swlevel] = yyval = genlab(1); ! 14: outcode("\tI"); ! 15: outnum(yyval); ! 16: outcode(" = "); ! 17: balpar(); ! 18: outdon(); ! 19: nextcase[swlevel] = 0; ! 20: indent++; ! 21: } ! 22: ! 23: getcase() { ! 24: int t, lpar; ! 25: char token[100]; ! 26: ! 27: if (nextcase[swlevel] != 0) { ! 28: outgoto(swexit[swlevel]); ! 29: outcont(nextcase[swlevel]); ! 30: } ! 31: indent--; ! 32: outcode("\tif(.not.("); ! 33: do { ! 34: outcode("I"); ! 35: outnum(swexit[swlevel]); ! 36: outcode(".eq.("); ! 37: lpar = 0; ! 38: do { ! 39: if ((t=gtok(token)) == ':') ! 40: break; ! 41: if (t == '(') ! 42: lpar++; ! 43: else if (t == ')') ! 44: lpar--; ! 45: else if (t == ',') { ! 46: if (lpar == 0) ! 47: break; ! 48: } ! 49: outcode(token); ! 50: } while (lpar >= 0); ! 51: if (lpar < 0) ! 52: error("Missing left parenthesis in case"); ! 53: if (t == ',') ! 54: outcode(").or."); ! 55: } while (t != ':'); ! 56: if (lpar != 0) ! 57: error("Missing parenthesis in case"); ! 58: outcode(")))"); ! 59: nextcase[swlevel] = genlab(1); ! 60: outgoto(nextcase[swlevel]); ! 61: indent++; ! 62: } ! 63: ! 64: getdefault() { ! 65: char token[20]; ! 66: if (gnbtok(token) != ':') ! 67: error("Missing colon after default"); ! 68: outgoto(swexit[swlevel]); ! 69: outcont(nextcase[swlevel]); ! 70: indent--; ! 71: putcom("default"); ! 72: indent++; ! 73: } ! 74: ! 75: endsw(n, def) { ! 76: if (def == 0) ! 77: outcont(nextcase[swlevel]); ! 78: swlevel--; ! 79: if (swlevel < -1) ! 80: error("Switches unwound too far"); ! 81: indent--; ! 82: outcont(n); ! 83: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.