/* Reregisters handler if some other process (such as unzip) de-registers it */ void reregisterSIGINTHandler(void) { if (oldSIGINThandler == NULL) registerSIGINTHandler(); else #ifndef PORTABLE setvect(0x23, ourSIGINThandler); #else signal(SIGINT, ourSIGINThandler); #endif }
int main (int argc, char **argv) { int dat_count; /* size of the dat array */ int i; int mono = 0; /* running on monochrome monitor */ dat_t *dat_ary; /* the dat file array */ inst_t ret; /* no. of errors, warnings */ struct text_info ti; /* (borland) for gettextinfo */ /* Open the language catalog */ cat = catopen ("install", 0); /* Check command line */ for (i = 1; i < argc; i++) { if (strcmpi(argv[i], "/mono") == 0) mono = 1; else if (strcmpi(argv[i], "/nopause") == 0) nopauseflag = 1; else if (strcmpi(argv[i], "/nolog") == 0) wantlog = 0; else if ( (strcmpi(argv[i], "/src") == 0) && (i+1 < argc)) { fromdirflag = 1; i++; strcpy(fromdir+2, argv[i]); } else if ( (strcmpi(argv[i], "/dst") == 0) && (i+1 < argc)) { destdirflag = 1; i++; strcpy(destdir+2, argv[i]); } else { fprintf (stderr, catgets (cat, SET_USAGE, MSG_USAGE, MSG_USAGE_STR)); exit (1); } } /* unzip overwrites screen with warning if TZ not set, so check */ /* and if not set, then set for us to GMT0, which means no offsets */ if (getenv("TZ") == NULL) putenv("TZ=GMT0"); /* Read dat file */ dat_ary = dat_read ("INSTALL.DAT", &dat_count); if (dat_ary == NULL) { if (dat_count > 0) { fprintf (stderr, catgets (cat, SET_ERRORS, MSG_ERRALLOCMEMDF, MSG_ERRALLOCMEMDF_STR)); exit (2); } else /* Either error reading file, eg no file, or file has no entries */ { fprintf (stderr, catgets (cat, SET_ERRORS, MSG_ERREMPTYDATAFILE, MSG_ERREMPTYDATAFILE_STR)); exit (3); } } /* Get localized "Yes" and "No" strings */ getLocalizedYesNo(); /* register our SIGINT handler (Ctrl-C) */ registerSIGINTHandler(); /* Start the install */ /* save current setting so we can restore them */ gettextinfo (&ti); /* setup screen colors then draw the screen */ if (mono) { textbackground (BLACK); textcolor (LIGHTGRAY); } else { textbackground (BLUE); textcolor (WHITE); } repaint_empty(); gotoxy (2, 3); cat_file ("COPYR", 18); pause(); repaint_empty(); gotoxy (2, 3); cat_file ("OEM", 18); pause(); ret.errors = 0; ret.warnings = 0; ret = install_top (dat_ary, dat_count); /* Finished with install */ textattr (ti.attribute); /* restore user's screen */ clrscr(); if ((ret.errors == 0) && (ret.warnings == 0)) printf (catgets (cat, SET_GENERAL, MSG_INSTALLOK, MSG_INSTALLOK_STR)); else printf (catgets (cat, SET_GENERAL, MSG_INSTALLERRORS, MSG_INSTALLERRORS_STR), ret.errors, ret.warnings); /* Done */ free (dat_ary); free (yes); free (no); catclose (cat); /* restore original SIGINT handler */ unregisterSIGINTHandler(); return (0); }