home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBOPAS / DATETIME.LBR / DATETIME.PQS / DATETIME.PAS
Pascal/Delphi Source File  |  2000-06-30  |  6KB  |  240 lines

  1. { Datetime.pas - this routine prompts the user for the date and time and
  2.                  then sets them using system interrupt calls.  Each time
  3.                  the system is booted, the date and time are saved in a
  4.                  file and used as the default for the call to datetime.
  5.  
  6.   Tim Twomey  1/28/85
  7.  }
  8.  
  9. PROGRAM datetime;
  10.  
  11. TYPE 
  12.    { regs holds register values for msdos calls }
  13.    regs = RECORD
  14.             ax,bx,cx,dx,bp,si,di,ds,es,flags: integer;
  15.           END;
  16.  
  17.    { time_rec holds the times of the last boot }
  18.    time_rec = RECORD
  19.                 lhour, lminute, lday, lmonth ,lyear : integer;
  20.               END;
  21.  
  22.    minutes = SET OF 0..59;
  23.    hours = SET OF 0..23;
  24.    days = SET OF 1..31;
  25.    months = SET OF 1..12;
  26.    years = SET OF 85..99;
  27.  
  28.   CONST 
  29.     time_error = ^G'Invalid Time';
  30.     date_error = ^G'Invalid Date';
  31.     minute_range : minutes = [0..59];
  32.     hour_range : hours = [0..23];
  33.     day_range : days = [1..31];
  34.     month_range : months = [1..12];
  35.     year_range : years = [85..99];
  36.  
  37. VAR 
  38.    registers       : regs;
  39.    al              : byte;
  40.    ok              : boolean;
  41.    date_str        : STRING[8];
  42.    time_str        : STRING[6];
  43.    str_inx         : integer;
  44.    year            : integer;
  45.    month           : integer;
  46.    day             : integer;
  47.    hour            : integer;
  48.    minute          : integer;
  49.    result          : integer;
  50.    last_boot       : time_rec;
  51.    time_file       : FILE OF time_rec;
  52.    first_time      : boolean;
  53.  
  54.   LABEL 
  55.     get_date,
  56.     get_time,
  57.     set_date,
  58.     set_time;
  59.  
  60. BEGIN
  61.  
  62.  
  63.    { turn off turbo pascals insistence on bold video }
  64.  
  65.    lowvideo;
  66.  
  67.    { Check to see if there is a last boot date file }
  68.  
  69.    assign (time_file, 'lastboot.dat');
  70.    {$I-}
  71.   reset(time_file) {$I+};
  72.    ok := (ioresult = 0);
  73.    IF NOT ok
  74.      THEN
  75.  
  76.       { there was no lastboot.dat file, so let's create one }
  77.        BEGIN
  78.          writeln ('Creating LASTBOOT.DAT');
  79.          rewrite (time_file);
  80.          { set initial defaults }
  81.          WITH last_boot DO
  82.            BEGIN
  83.              lhour := 12;
  84.              lminute := 0;
  85.              lday := 1;
  86.              lmonth := 1;
  87.              lyear := 85;
  88.            END;
  89.          write (time_file,last_boot);
  90.          reset (time_file);
  91.        END;
  92.  
  93.    { get the time and date of the last boot }
  94.  
  95.    read (time_file,last_boot);
  96.  
  97.    { Get the current date }
  98.  
  99.    first_time := TRUE;
  100.    get_date:
  101.              IF NOT first_time
  102.                THEN writeln(date_error);
  103.    first_time := FALSE;
  104.    WITH last_boot DO
  105.      BEGIN
  106.        day := lday;
  107.        month := lmonth;
  108.        year := lyear;
  109.      END;
  110.    write ('Enter current date (Format MM DD YY) (default ',month:2,
  111.           '/',day:2,'/',year:2,' ) : ');
  112.    readln (date_str);
  113.    { check if user entered anything }
  114.    IF (length(date_str) > 0)
  115.      THEN
  116.        BEGIN  { use new date }
  117.       { check month }
  118.          val (date_str, month, result);
  119.          IF NOT (month IN month_range)
  120.            THEN GOTO get_date;
  121.          IF (result = 0)
  122.            THEN GOTO set_date;
  123.          delete (date_str, 1, result+1);
  124.       { check day }
  125.          val (date_str, day, result);
  126.          IF NOT (day IN day_range)
  127.            THEN GOTO get_date;
  128.          IF (result = 0)
  129.            THEN GOTO set_date;
  130.          delete (date_str, 1, result+1);
  131.       { check year }
  132.          val (date_str, year, result);
  133.          IF NOT (year IN year_range)
  134.            THEN GOTO get_date;
  135.          IF result <> 0
  136.            THEN GOTO get_date;
  137.        END;
  138.  
  139.    { Set the date }
  140.  
  141.    set_date:
  142.              WITH registers DO
  143.                BEGIN
  144.                  cx := 1900 + year;
  145.                  dx := (month shl 8) + day;
  146.                  ax := $2B shl 8;
  147.                END;
  148.    msdos (registers);
  149.    WITH registers DO
  150.       al := lo(ax);
  151.    IF (al = $FF)
  152.      THEN
  153.        BEGIN
  154.          writeln (date_error);
  155.          GOTO get_date;
  156.        END;
  157.  
  158.    { set the new defaults }
  159.  
  160.    WITH last_boot DO
  161.      BEGIN
  162.        lday := day;
  163.        lmonth := month;
  164.        lyear := year;
  165.      END;
  166.  
  167.  
  168.    { Get the current time }
  169.  
  170.    first_time := TRUE;
  171.    get_time:
  172.              IF NOT first_time
  173.                THEN writeln(time_error);
  174.    first_time := FALSE;
  175.    WITH last_boot DO
  176.      BEGIN
  177.        hour := lhour;
  178.        minute := lminute;
  179.      END;
  180.    write ('Enter current time (Format HH MM) (default ',hour:2,':',
  181.           minute:2,' ) : ');
  182.    readln (time_str);
  183.    { check if user entered anything }
  184.    IF length(time_str) > 0
  185.      THEN
  186.        BEGIN { use new time }
  187.       { check hour }
  188.          val (time_str, hour, result);
  189.          IF NOT (hour IN hour_range)
  190.            THEN GOTO get_time;
  191.          IF (result = 0)
  192.            THEN GOTO set_time;
  193.          delete (time_str, 1 ,result+1);
  194.       { check minute }
  195.          val (time_str, minute, result);
  196.          IF NOT (minute IN minute_range)
  197.            THEN GOTO get_time;
  198.          IF (result <> 0)
  199.            THEN GOTO get_time;
  200.        END;
  201.  
  202.    { Set the Time }
  203.  
  204.    set_time:
  205.              WITH registers DO
  206.                BEGIN
  207.                  cx := (hour shl 8) + minute;
  208.                  dx := 0;
  209.                  ax := $2D shl 8;
  210.                END;
  211.    msdos (registers);
  212.    WITH registers DO
  213.       al := lo(ax);
  214.    IF (al = $FF)
  215.      THEN
  216.        BEGIN
  217.          writeln (time_error);
  218.          GOTO get_time;
  219.        END;
  220.  
  221.    { set the new defaults }
  222.  
  223.    WITH last_boot DO
  224.      BEGIN
  225.        IF (hour <> 0)
  226.          THEN lhour := hour;
  227.        IF (minute <> 0)
  228.          THEN lminute := minute;
  229.      END;
  230.  
  231.    { write the new lastboot record }
  232.  
  233.    reset (time_file);
  234.    write (time_file,last_boot);
  235.    close (time_file);
  236.  
  237. END.
  238.        END;
  239.    msdos (registers);
  240.    WITH