|
|
1.1 ! root 1: /* fix stack on l.out type file ! 2: * first parm is the amount to add or subtract in hex ! 3: * the second parm is the l.out file name default "l.out" ! 4: */ ! 5: #include <stdio.h> ! 6: #include <l.out.h> ! 7: #include <canon.h> ! 8: #include <mtype.h> ! 9: main (argc, argv) ! 10: char *argv[]; ! 11: { ! 12: FILE *lout; ! 13: char *argp, c, negsw=0; ! 14: long hexno=0; ! 15: ! 16: if(--argc > 0) { ! 17: argp = *++argv; ! 18: while((c = *argp++) != '\0') { ! 19: switch(c) { ! 20: case '-' : ! 21: negsw=1; ! 22: break; ! 23: case '+' : ! 24: negsw=0; ! 25: break; ! 26: case '0' : ! 27: case '1' : ! 28: case '2' : ! 29: case '3' : ! 30: case '4' : ! 31: case '5' : ! 32: case '6' : ! 33: case '7' : ! 34: case '8' : ! 35: case '9' : ! 36: hexno<<=4; ! 37: hexno+=(c-'0'); ! 38: break; ! 39: case 'a' : ! 40: case 'b' : ! 41: case 'c' : ! 42: case 'd' : ! 43: case 'e' : ! 44: case 'f' : ! 45: hexno<<=4; ! 46: hexno+=(c-'a'+10); ! 47: break; ! 48: case 'A' : ! 49: case 'B' : ! 50: case 'C' : ! 51: case 'D' : ! 52: case 'E' : ! 53: case 'F' : ! 54: hexno<<=4; ! 55: hexno+=(c-'A'+10); ! 56: break; ! 57: default: ! 58: usage(); ! 59: } ! 60: } ! 61: } else ! 62: usage(); ! 63: ! 64: if(negsw) ! 65: hexno= -hexno; ! 66: ! 67: if(--argc > 0) ! 68: argp=*++argv; ! 69: else ! 70: argp="l.out"; ! 71: ! 72: if(NULL==(lout=fopen(argp, "rw"))) { ! 73: fprintf(stderr, "fixstack: %s cannot open \n", argp); ! 74: exit(1); ! 75: } ! 76: ! 77: proscess(hexno, lout, argp); ! 78: exit(0); ! 79: } ! 80: ! 81: proscess(hexno, lout, argp) ! 82: long hexno; ! 83: FILE *lout; ! 84: char *argp; ! 85: { ! 86: long where; ! 87: struct ldheader head; ! 88: ! 89: where=ftell(lout); /* not zero on some systems */ ! 90: if(0 == (fread(&head, sizeof(head), 1, lout))) { ! 91: fprintf(stderr, "fixstack: error in read\n"); ! 92: exit(1); ! 93: } ! 94: ! 95: if(fseek(lout, where, 0)) { ! 96: fprintf(stderr, "fixstack: error in seek\n"); ! 97: exit(1); ! 98: } ! 99: ! 100: canshort(head.l_magic); ! 101: if(head.l_magic!=L_MAGIC) { ! 102: fprintf(stderr, "fixstack: %s not an l.out file %x\n", ! 103: argp, head.l_magic ); ! 104: exit(1); ! 105: } ! 106: ! 107: cansize(head.l_ssize[L_BSSD]); ! 108: head.l_ssize[L_BSSD] += hexno; ! 109: cansize(head.l_ssize[L_BSSD]); ! 110: ! 111: if(1 != (fwrite(&head, sizeof(head), 1, lout))) { ! 112: fprintf(stderr, "fixstack: error in write\n"); ! 113: exit(1); ! 114: } ! 115: } ! 116: ! 117: usage() ! 118: { ! 119: fprintf(stderr, "Usage: fixstack hexno filen.\n"); ! 120: exit(1); ! 121: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.