home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol023
/
makedate.lib
< prev
next >
Wrap
Text File
|
1984-04-29
|
2KB
|
75 lines
{ GETDATE with no range limits
This inputs a date in the format number-char-number-char-number
(ie: 1-22-80 or 10/5/77) and returns an integer in the range
1..maxint. Yrbase sets the initial year which will be accepted,
and yrspan determines the last year. Yrspan cannot exceed 89,
in order to remain within range.
Note that the prompt must be passed to MAKEDATE from the calling
program.
This package requires global declarations
TYPE string255 = string 255;
byte = 0..255;
The following additional procedure must be declared;
PROCEDURE prompt;
}
PROCEDURE getdate (msg : string255; VAR mo, da, yr : byte);
CONST yrspan = 89;
yrbase = 10;
VAR ch : char;
good : boolean;
temp : integer;
begin
repeat
good := true;
prompt (msg);
readln (mo,ch,da,ch,temp);
temp := temp mod 100 - yrbase;
if (da < 1) or (da > 31) or (mo < 1) or (mo >12)
or (temp < 0) or (temp > yrspan) then
begin
good := false;
writeln (' *** Bad date ***')
end
until good;
yr := temp
end;
FUNCTION makedate (msg : string255) : integer;
CONST yrbase = 10;
VAR days : integer;
da, mo, yr : byte;
str : string255;
begin
getdate (msg,mo,da,yr);
case mo of
1 : days := 0;
2 : days := 31;
3 : days := 59;
4 : days := 90;
5 : days := 120;
6 : days := 151;
7 : days := 181;
8 : days := 212;
9 : days := 243;
10 : days := 273;
11 : days := 304;
12 : days := 334;
end;
days := days + (yr*365) + (yr div 4) + da;
if ((yr + yrbase) mod 4 = 0) and (mo > 2) then days := days + 1;
makedate := days
end;