/* Extended dump command */ int xdump(void) { char *p; char buf[1024]; struct xdstr xd; struct natstr *natp; int type; int meta = 0; p = getstarg(player->argp[1], "Table name, or meta? ", buf); if (p && strcmp(p, "meta") == 0) { meta = 1; p = getstarg(player->argp[2], "Table name? ", buf); } if (!p || !*p) return RET_SYN; xdinit(&xd, player->cnum, 0, 0, pr); natp = getnatp(player->cnum); type = isdigit(p[0]) ? atoi(p) : ef_byname(p); if (type < 0 || type >= EF_MAX) return RET_SYN; if (meta) return xdmeta(&xd, type); if ((EF_IS_GAME_STATE(type) || EF_IS_VIEW(type)) && !(natp->nat_stat == STAT_ACTIVE || player->god)) { pr("Access to table %s denied\n", ef_nameof(type)); return RET_FAIL; } return xditem(&xd, type, player->argp[2]); }
int pain(void *aio) { long int io = 0; caddr_t kp; int ksize; struct stat sb; extern u_int16_t timelimit; xdinit(aio); if (consinit(NULL)) /* Initialize fresh console */ return(1); #ifdef PPCBOOTER printf("NetBSD/AmigaPPC " NETBSD_VERS " Primary Bootstrap %s\n", bootprog_rev); #else printf("NetBSD/Amiga " NETBSD_VERS " Primary Bootstrap %s\n", bootprog_rev); #endif io = open("/boot.amiga", 0); /* Try /boot.amiga first */ if (io < 0) { io = open("/boot", 0); /* Fallback to /boot */ if (io < 0) { io = open("/boot.ami", 0); /* 8.3 name? */ if (io < 0) { goto err; } } } /* get size of file? */ if (fstat(io, &sb)) goto err; /* allocate memory for file */ ksize = sb.st_size; if (ksize == 0) { printf("Bad size, using 32K\n"); /* XXX debug? */ ksize = 32 * 1024; } kp = alloc(ksize); if (kp == 0) { errno = ENOMEM; goto err; } /* read file into memory */ if (read(io, kp, ksize) != ksize) { errno = ENOEXEC; goto freeall; } /* validate boot: DOS\0 and checksum? */ if (strcmp(kp, "DOS") != 0 && (*(u_int32_t *)kp) != 0x424f4f54) { errno = ENOEXEC; goto freeall; } /* call boot+12(aio, sysbase); */ close(io); startit(kp, aio, ConsoleBase); errno = -1; freeall: free(kp, ksize); err: printf("Error %ld\n", (long)errno); close(io); timelimit = 10; (void)getchar(); consclose(); return 1; }