/* Copyright (C) 2000 CW Sandmann (sandmann@clio.rice.edu) 1206 Braelinn, Sugar Land, TX 77479 */ #include #include #include #include #ifdef GO32 #include #else #include #endif #include "gotypes.h" #include "control.h" char view_only = 0; int size_of_stubinfo = 0; char *client_stub_info; char buffer[30000]; int f; void find_info(char *filename) { int i,size; f = open(filename, O_RDWR | O_BINARY); if (f < 0) { f = open(filename, O_RDONLY | O_BINARY); if (f < 0) { perror(filename); exit(1); } if(!view_only) { view_only = 1; printf("%s is read only, you can only view:\n",filename); } } size = read(f, buffer, sizeof(buffer)); client_stub_info = NULL; for(i=0; in)) struct { char *short_name; char *long_name; int offset_of_field; PerFunc val2string; PerFunc string2val; } per_field[] = { { "swapfile", "Full name of paging file (\"\" to disable)", Ofs(swapname), str_v2s48, str_s2v48 }, { "pagetable", "Number of page tables to initially allocate (0=auto)", Ofs(pagedir), num_v2s, num_s2v }, { "minappmem", "Minimum application memory desired before 640K paging", Ofs(minapp), num_vpt2s, num_s2vpt }, { "savepara", "Paragraphs of DOS memory to reserve when 640K paging", Ofs(savepar), num_v2s, num_s2v }, { "heap", "Paragraphs of memory for extra CWSDPMI internal heap", -2, num_v2s, num_s2v }, { "maxswap", "Maximum size of swap file", Ofs(maxdblock), num_vlp2s, num_s2vlp }, { "flags", "Value of run option flags", Ofs(flags), num_v2s, num_s2v } }; #define NUM_FIELDS (sizeof(per_field) / sizeof(per_field[0])) #define HFORMAT "%-18s %s\n" void give_help(void) { int i; fprintf(stderr, "Usage: cwsparam [-v] [-h] [cwsdpmi.exe] [field=value . . . ]\n"); fprintf(stderr, "-h = give help -v = view info field=value means set w/o prompt\n"); fprintf(stderr, HFORMAT, "-field-", "-description-"); for (i=0; i < NUM_FIELDS; i++) fprintf(stderr, HFORMAT, per_field[i].short_name, per_field[i].long_name); exit(1); } int main(int argc, char **argv) { int i; char need_to_save; if (argc > 1 && strcmp(argv[1], "-v") == 0) { view_only = 1; argc--; argv++; } if (argc > 1 && strcmp(argv[1], "-h") == 0) give_help(); if (argc < 2 || strchr(argv[1],'=') != NULL) find_info("cwsdpmi.exe"); else { find_info(argv[1]); argc--; argv++; } /* This hack is for the heap which isn't in the stubinfo struct */ per_field[4].offset_of_field = (int)(buffer+0x0c - client_stub_info); *(short *)(buffer+0x0c) -= *(short *)(buffer+0x0a); if (view_only) { char buf[100]; fprintf(stderr, HFORMAT, "-value-", "-field description-"); for (i=0; i 1) { int field; char got, got_any = 0; char fname[100], fval[100]; for (i=1; i < argc; i++) { fname[0] = 0; fval[0] = 0; sscanf(argv[i], "%[^=]=%s", fname, fval); got = 0; for (field=0; field