home *** CD-ROM | disk | FTP | other *** search
/ Zodiac Super OZ / MEDIADEPOT.ISO / FILES / 16 / FREEDOS.ZIP / FD_A4PRE.ZIP / SOURCE / MICROC.ZIP / REBOOT.C < prev    next >
C/C++ Source or Header  |  1994-01-04  |  2KB  |  104 lines

  1. /*********************************************************************
  2.  * This program reboots the computer, either a cold or warm boot.
  3.  *
  4.  * Much of the code was written by Mike O'Carroll,
  5.  * lena!mike@relay.EU.net, and later adapted by James Hall for use in
  6.  * Free-DOS.
  7.  *
  8.  * Since no copyright was placed on the original code, I am assuming
  9.  * that this entire program is in the public domain.
  10.  */
  11.  
  12. #include <stdio.h>
  13. #include "freedos.h"
  14. #include "getopt.c"
  15.  
  16. void usage (void);
  17. void confirm (void);
  18.  
  19. main (int argc, char **argv)
  20.  
  21.     {
  22.     int i, cold, verify;
  23.  
  24.     cold = FALSE;
  25.     verify = FALSE;
  26.  
  27.     /* Scan the command line */
  28.  
  29.     while ((i = getopt (argc, argv, "CV", NULL)) != EOF)
  30.         {
  31.         switch (i)
  32.             {
  33.             case 'C':
  34.                 cold = TRUE;
  35.                 break;
  36.  
  37.             case 'V':
  38.                 verify = TRUE;
  39.                 break;
  40.  
  41.             default:
  42.                   usage ();
  43.                   break;
  44.             }
  45.         }
  46.  
  47.     if (optind < argc)
  48.         usage ();
  49.  
  50.     if (verify)
  51.         confirm ();
  52.  
  53.     /* Reboot */
  54.  
  55.     if (cold)
  56.  
  57.         asm 
  58.         {
  59.         MOV    AH,0Dh                ; Disk RESET function
  60.         INT    21h                ; Ask DOS
  61.         MOV    AX,40h                ; BIOS data area
  62.         MOV    ES,AX                ; Set ES
  63.         MOV    WORD PTR ES:72h,0000h        ; Indicate cold start
  64.         DB    0EAh,0,0,0FFh,0FFh        ; JMP FAR FFFF:0
  65.         }
  66.     
  67.     else
  68.  
  69.         asm 
  70.         {
  71.         MOV    AH,0Dh                ; Disk RESET function
  72.         INT    21h                ; Ask DOS
  73.         MOV    AX,40h                ; BIOS data area
  74.         MOV    ES,AX                ; Set ES
  75.         MOV    WORD PTR ES:72h,1234h        ; Indicate warm start
  76.         DB    0EAh,0,0,0FFh,0FFh        ; JMP FAR FFFF:0
  77.         }
  78.  
  79.     /* Never gets here, but keeps compiler happy */
  80.  
  81.     exit (0);
  82.  
  83. }
  84.  
  85. void confirm (void)
  86.     {
  87.     char ch;
  88.  
  89.     printf ("Confirm system reboot (Y/N)? ");
  90.     ch = getchar ();
  91.     if ((ch != 'y') && (ch != 'Y'))
  92.         exit (1);
  93.     }
  94.  
  95. void usage (void)
  96.  
  97.     {
  98.     printp ("REBOOT", "Forces a warm or cold system reboot");
  99.     printu ("REBOOT", "[/C] [/V]");
  100.     printo ("C", "Cold boot (default is warm boot)");
  101.     printo ("V", "Verify reboot");
  102.     exit (1);
  103.     }
  104.