/* * utility to toggle clear TPA beyond BSS flag in .prg header for Tos 1.4 * * Usage: toglclr file file .... * * ++jrb */ #include #include #include #include #include int toggle (fd, fn) int fd; char *fn; { struct aexec head; unsigned long t; if(read(fd, &head, sizeof(head)) != sizeof(head)) { perror(fn); return 4; } if(head.a_magic != CMAGIC) { fprintf(stderr,"%s: Invalid magic number %x\n", fn, head.a_magic); return 8; } t = head.a_AZero2; head.a_AZero2 ^= 1; lseek(fd, 0L, SEEK_SET); if(write(fd, &head, sizeof(head)) != sizeof(head)) { perror(fn); return 16; } printf("%s: was %d is %d\n", fn, (int)t, (int)head.a_AZero2); return 0; } int main(argc, argv) int argc; char **argv; { int fd; int status = 0; char fn[FILENAME_MAX]; if(argc < 2) { fprintf(stderr, "usage: toglclr file file .....\n"); exit(1); } while(--argc > 0) { (void) strcpy(fn, *++argv); if((fd = open(fn, 2)) < 0) { perror(fn); continue; } status |= toggle(fd, fn); if(close(fd)) { perror(fn); exit(2); } } return status; }