home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / dosutils / fips20 / source / global.cpp < prev    next >
C/C++ Source or Header  |  1997-12-20  |  7KB  |  259 lines

  1. /*
  2.     FIPS - the First nondestructive Interactive Partition Splitting program
  3.  
  4.     Module global.cpp
  5.  
  6.     RCS - Header:
  7.     $Header: c:/daten/fips/source/main/RCS/global.cpp 1.4 1995/01/19 00:00:52 schaefer Exp schaefer $
  8.  
  9.     Copyright (C) 1993 Arno Schaefer
  10.  
  11.     This program is free software; you can redistribute it and/or modify
  12.     it under the terms of the GNU General Public License as published by
  13.     the Free Software Foundation; either version 2 of the License, or
  14.     (at your option) any later version.
  15.  
  16.     This program is distributed in the hope that it will be useful,
  17.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.     GNU General Public License for more details.
  20.  
  21.     You should have received a copy of the GNU General Public License
  22.     along with this program; if not, write to the Free Software
  23.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  24.  
  25.  
  26.     Report problems and direct all questions to:
  27.  
  28.     schaefer@rbg.informatik.th-darmstadt.de
  29. */
  30.  
  31. #include <stdarg.h>
  32. #include <conio.h>
  33. #include <stdlib.h>
  34. #include <string.h>
  35.  
  36. #include "version.h"
  37. #include "global.h"
  38.  
  39. #define CTRL_C 3
  40.  
  41. global_vars global;
  42.  
  43. /* ----------------------------------------------------------------------- */
  44. /* Initialization of global variables                                      */
  45. /* ----------------------------------------------------------------------- */
  46.  
  47. global_vars::global_vars (void)
  48. {
  49.     test_mode = false;
  50.     verbose_mode = true;
  51.     debug_mode = false;
  52.  
  53.     drive_number_cmdline = 0;
  54. }
  55.  
  56. global_vars::~global_vars (void)
  57. {
  58.     if (debug_mode) fclose (debugfile);
  59. }
  60.  
  61. void exit_function (void)
  62. {
  63.     printx ("\nBye!\n");
  64. }
  65.  
  66. void global_vars::open_debugfile (int argc,char *argv[])
  67. {
  68.     if ((debugfile = fopen ("fipsinfo.dbg","wt")) == NULL)
  69.     {
  70.         global.debug_mode = false;
  71.         warning (true, "Can't open debug file");
  72.     }
  73.     else
  74.     {
  75.         fprintf (debugfile,"FIPS debug file\n\n");
  76.         fprintf (debugfile,"The command was: ");
  77.         while (argc--) fprintf (debugfile,argc ? "%s " : "%s", *argv++);
  78.         fprintf (debugfile,"\n\nTranscript of session:\n");
  79.     }
  80. }
  81.  
  82. /* ----------------------------------------------------------------------- */
  83. /* Replacement for printf - prints to screen and debugfile                 */
  84. /* ----------------------------------------------------------------------- */
  85.  
  86. void printx (char *fmt,...)
  87. {
  88.     va_list ap;
  89.     va_start (ap,fmt);
  90.     vprintf (fmt,ap);
  91.     if (global.debug_mode) vfprintf (global.debugfile,fmt,ap);
  92.     va_end (ap);
  93. }
  94.  
  95. /* ----------------------------------------------------------------------- */
  96. /* Replacement for getch - exit when CTRL-C is pressed                     */
  97. /* ----------------------------------------------------------------------- */
  98.  
  99. int getx (void)
  100. {
  101.     int character = getch();
  102.     if (character == CTRL_C)
  103.     {
  104.         printx ("\n");
  105.         exit (0);
  106.     }
  107.     return (character);
  108. }
  109.  
  110. /* ----------------------------------------------------------------------- */
  111. /* Copyright notice and version number                                     */
  112. /* ----------------------------------------------------------------------- */
  113.  
  114. void notice (void)
  115. {
  116.     printx ("\nFIPS version " FIPS_VERSION ", Copyright (C) 1993/94 Arno Schaefer\n");
  117.     printx ("    FAT32 Support Copyright (C) 1997 Gordon Chaffee\n\n");
  118.     printx ("DO NOT use FIPS in a multitasking environment like Windows, OS/2, Desqview,\n");
  119.     printx ("Novell Task manager or the Linux DOS emulator: boot from a DOS boot disk first.\n\n");
  120.     printx ("If you use OS/2 or a disk compressor, read the relevant sections in FIPS.DOC.\n\n");
  121.     printx ("FIPS comes with ABSOLUTELY NO WARRANTY, see file COPYING for details\n");
  122.     printx ("This is free software, and you are welcome to redistribute it\n");
  123.     printx ("under certain conditions; again see file COPYING for details.\n");
  124.  
  125.     printx ("\nPress any Key\n");
  126.     getx();
  127. }
  128.  
  129. /* ----------------------------------------------------------------------- */
  130. /* Hexdump binary data into a file                                         */
  131. /* ----------------------------------------------------------------------- */
  132.  
  133. void hexwrite (byte *buffer,int number,FILE *file)
  134. {
  135.     for (int i=0;i<number;i++)
  136.     {
  137.         fprintf (file,"%02X ",*(buffer+i));
  138.         if ((i+1)%16 == 0) fprintf (file,"\n");
  139.         else if ((i+1)%8 == 0) fprintf (file,"- ");
  140.     }
  141.     fprintf (file,"\n");
  142. }
  143.  
  144. /* ----------------------------------------------------------------------- */
  145. /* Error Handling                                                          */
  146. /* ----------------------------------------------------------------------- */
  147.  
  148. static void print_verbose_message (char *message)
  149. {
  150.     char line[256];
  151.     int length = 0;
  152.     FILE *error_msg_file;
  153.  
  154.     fprintf (stderr,"\n");
  155.     if (global.debug_mode) fprintf (global.debugfile,"\n");
  156.  
  157.     if ((error_msg_file = fopen ("errors.txt","rt")) == NULL)
  158.     {
  159.         fprintf (stderr,"File ERRORS.TXT not found - no verbose messages available\n");
  160.         if (global.debug_mode) fprintf (global.debugfile,"File ERRORS.TXT not found - no verbose messages available\n");
  161.         global.verbose_mode = false;
  162.         return;
  163.     }
  164.  
  165.     while (message[length] != 0 && message[length] != ':') length++;
  166.  
  167.     fgets (line,255,error_msg_file);
  168.     while (strncmp(message,line,length)) if (fgets (line,255,error_msg_file) == NULL) return;
  169.     fgets (line,255,error_msg_file);
  170.     while (!strncmp("  ",line,2))
  171.     {
  172.         fprintf (stderr,"%s",line+2);
  173.         if (global.debug_mode) fprintf (global.debugfile,"%s",line+2);
  174.         if (fgets (line,255,error_msg_file) == NULL) return;
  175.     }
  176.     fclose (error_msg_file);
  177. }
  178.  
  179. void error (char *message,...)
  180. {
  181.     va_list ap;
  182.  
  183.     va_start (ap,message);
  184.  
  185.     fprintf (stderr,"\nError: ");
  186.     vfprintf (stderr,message,ap);
  187.     fprintf (stderr,"\n");
  188.  
  189.     if (global.debug_mode)
  190.     {
  191.         fprintf (global.debugfile,"\nError: ");
  192.         vfprintf (global.debugfile,message,ap);
  193.         fprintf (global.debugfile,"\n");
  194.     }
  195.  
  196.     va_end (ap);
  197.  
  198.     if (global.verbose_mode) print_verbose_message (message);
  199.  
  200.     exit (-1);
  201. }
  202.  
  203. void warning (boolean wait_key, char *message,...)
  204. {
  205.     va_list ap;
  206.  
  207.     va_start (ap,message);
  208.  
  209.     fprintf (stderr,"\nWarning: ");
  210.     vfprintf (stderr,message,ap);
  211.     fprintf (stderr,"\n");
  212.  
  213.     if (global.debug_mode)
  214.     {
  215.         fprintf (global.debugfile,"\nWarning: ");
  216.         vfprintf (global.debugfile,message,ap);
  217.         fprintf (global.debugfile,"\n");
  218.     }
  219.  
  220.     va_end (ap);
  221.  
  222.     if (global.verbose_mode) print_verbose_message (message);
  223.  
  224.     if (wait_key)
  225.     {
  226.         fprintf (stderr,"\nPress any key\n");
  227.         if (global.debug_mode) fprintf (global.debugfile,"\nPress any key\n");
  228.  
  229.         getx ();
  230.     }
  231. }
  232.  
  233. void infomsg (char *message,...)
  234. {
  235.     va_list ap;
  236.  
  237.     va_start (ap,message);
  238.  
  239.     fprintf (stderr,"\nInfo: ");
  240.     vfprintf (stderr,message,ap);
  241.     fprintf (stderr,"\n");
  242.  
  243.     if (global.debug_mode)
  244.     {
  245.         fprintf (global.debugfile,"\nInfo: ");
  246.         vfprintf (global.debugfile,message,ap);
  247.         fprintf (global.debugfile,"\n");
  248.     }
  249.  
  250.     va_end (ap);
  251.  
  252.     if (global.verbose_mode) print_verbose_message (message);
  253.  
  254.     fprintf (stderr,"\nPress any key\n");
  255.     if (global.debug_mode) fprintf (global.debugfile,"\nPress any key\n");
  256.  
  257.     getx ();
  258. }
  259.