Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /****
- * submitted to r/badcode
- * entire program was in one 1280-line file
- * written using RHIDE, a DOS (i.e. text-mode) IDE
- * compiled using DJGPP
- * ran on a Packard Bell 100(?) with 386SXL-25 (~ 2.9 bogomips),
- * 40MB full-height IDE drive, ?? kB RAM
- ****/
- //March 1, 2001
- /****************************FPU?!********************************************
- ***************Link with -lemu to avoid SIGNOFP******************************/
- void read_settings()
- {
- //open settings file - if not created, jump to function to get and write settings
- //if it is opened successfully, read the settings from it and post to appropriate variables
- int good=1; //flag for continuation into nested IF statements
- int already_tried_main=0, tried_bak=0,temp;
- FILE *settings;
- settings=fopen("config.dat","r");
- printf("\nNeed to change read_settings()."); //fix: does not detect corrupt cfg file!
- do {
- if (already_tried_main!=0) //it doesn't exist
- {
- fprintf(stderr,"\nNormal configuration file cannot be opened! Trying backup file.\n");
- settings=fopen("config.bak","r");
- tried_bak=1;
- good=1;
- //delete main config.dat file
- if (!access("config.dat",F_OK)) //true if it exists! (delete it)
- system("del config.dat >NUL");
- }
- if (settings!=NULL) //TRUE if either file will open
- {
- //file exists. hopefully data is OK.
- //read data
- if (fscanf(settings,"right.fan_set_pt\t%f\n",&world.right.fan_set_pt)!=EOF && good!=0)
- {
- if (fscanf(settings,"right.fan_off_dx\t%f\n",&world.right.fan_off_dx)!=EOF && good!=0)
- {
- if (fscanf(settings,"right.heater_offset\t%f\n",&world.right.heater_offset)!=EOF && good!=0)
- {
- if (fscanf(settings,"right.heater_off_dx\t%f\n",&world.right.heater_off_dx)!=EOF && good!=0)
- {
- if (fscanf(settings,"right.vent_secs_on\t%d\n",&world.right.vent_secs_on)!=EOF && good!=0)
- {
- if (fscanf(settings,"right.vent_secs_off\t%d\n",&world.right.vent_secs_off)!=EOF && good!=0)
- {
- if (fscanf(settings,"right.lights_on\t%d\n",&world.right.lights_on)!=EOF && good!=0)
- {
- if (fscanf(settings,"right.lights_off\t%d\n",&world.right.lights_off)!=EOF && good!=0)
- {
- if (fscanf(settings,"right.min_temp\t%f\n",&world.right.min_temp)!=EOF && good!=0)
- {
- if (fscanf(settings,"right.max_temp\t%f\n",&world.right.max_temp)!=EOF && good!=0)
- {
- if (fscanf(settings,"left.fan_set_pt\t%f\n",&world.left.fan_set_pt)!=EOF && good!=0)
- {
- if (fscanf(settings,"left.fan_off_dx\t%f\n",&world.left.fan_off_dx)!=EOF && good!=0)
- {
- if (fscanf(settings,"left.heater_offset\t%f\n",&world.left.heater_offset)!=EOF && good!=0)
- {
- if (fscanf(settings,"left.heater_off_dx\t%f\n",&world.left.heater_off_dx)!=EOF && good!=0)
- {
- if (fscanf(settings,"left.vent_secs_on\t%d\n",&world.left.vent_secs_on)!=EOF && good!=0)
- {
- if (fscanf(settings,"left.vent_secs_off\t%d\n",&world.left.vent_secs_off)!=EOF && good!=0)
- {
- if (fscanf(settings,"left.lights_on\t%d\n",&world.left.lights_on)!=EOF && good!=0)
- {
- if (fscanf(settings,"left.lights_off\t%d\n",&world.left.lights_off)!=EOF && good!=0)
- {
- if (fscanf(settings,"left.min_temp\t%f\n",&world.left.min_temp)!=EOF && good!=0)
- {
- if (fscanf(settings,"left.max_temp\t%f\n",&world.left.max_temp)!=EOF && good!=0)
- {
- temp=fscanf(settings,"printer_port\t%x\n",&world.printer_port);
- if (temp==EOF || good==0 || (world.printer_port != 0x378 && world.printer_port != 0x278 && world.printer_port != 0x3BC))
- {
- good=0; //set flag if it wasn't set
- input_settings(); //get user input because file is incomplete
- }
- temp=world.printer_port; //so I don't have to type as much. Optimization will take care of this.
- if (temp!=0x378 && temp!=0x278 && temp!=0x3BC)
- {
- puts("\nprinter port setting invalid. Resetting to default.");
- world.printer_port=0x378; //revert to default if file is wrong.
- }
- }
- else good = 0; //get user input and flag for rest of if statements
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- }
- else good = 0;
- fclose(settings);
- }
- else
- {
- good=0;
- }
- already_tried_main++;
- } while ((tried_bak==0) && (good==0)); //loop if:
- // 1) haven't tried backup file
- // 2) failure reading file (good=0)
- if (good==0) //read failed.
- {
- if (!access("config.bak",F_OK)) //only delete if exists AND read failed.
- system("delete config.bak>NUL");
- input_settings(); //Neither file exists. Go through setup.
- //input_settings() copies into world global variable,
- //THEN calls function to write to file
- //This way, we don't have to read back from file here.
- }
- else
- {
- /*****************************************************************
- * *
- ** If we're here, read succeeded. Check if the main file exists;
- ** if it doesn't (access() returns *true*) copy backup to main.
- **
- ** ALSO copy backup to main if tried_bak is nonzero, because this
- ** means that the config.dat is corrupted (if good != 0)
- **
- *****************************************************************/
- if (access("config.dat",F_OK) || tried_bak)
- system("copy config.bak config.dat /y>NUL");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement