Files
Digital-Research-Source-Code/CONTRIBUTIONS/cpm-handbook/cpmsrc/DATE.C
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

79 lines
2.5 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#define VN "\nDATE Vn 1.0 02/18/83"
/* This utility accepts the current date from the command tail
validates it, and set the internal system date in the BIOS.
Alternatively, it can be requested just to display the current
system date. */
#include <LIBRARY.H>
char *date; /* pointer to the date in the config. block */
char *date_flag; /* pointer to date set flag */
int mm,dd,yy; /* variables to hold month, day, year */
int mcount; /* match count of numeric values entered */
int count; /* count used to add leading 0's to date */
main(argc,argv)
int argc;
char *argv[];
{
printf(VN); /* display signon message */
date = get_cba(CB_DATE); /* set pointer to date */
date_flag = get_cba(CB_DTFLAGS); /* set pointer to "date set" flag */
if (argc != 2) /* check if help requested (or needed) */
show_use(); /* display correct usage and exit */
if (usstrcmp("SHOW",argv[1])) /* check if not SHOW option */
{
/* convert specified time into month, day, year */
mcount = sscanf(argv[1],"%d/%d/%d",&mm,&dd,&yy);
if (mcount != 3) /* input not numeric */
show_use(); /* display correct usage and exit */
/* NOTE : The following validity checking is VERY
simplistic - this could be expanded to accomodate
more context-sensitive checking, days in the month,
leap years, etc. */
if (mm > 12 || mm < 1) /* check valid month, day, year */
{
printf("\nMonth = %d is illegal.",mm);
show_use(); /* display correct usage and exit */
}
if (dd > 31 || dd < 1)
{
printf("\nDay = %d is illegal.",dd);
show_use(); /* display correct usage and exit */
}
if (yy > 90 || yy < 83) /* <=== NOTE ! */
{
printf("\nYear = %d is illegal.",yy);
show_use(); /* display correct usage and exit */
}
/* convert integers back into a formatted string */
sprintf(date,"%2d/%2d/%2d",mm,dd,yy);
date[8] = 0x0A; /* terminate with line feed */
date[9] = '\0'; /* new string terminator */
/* change " 1/ 2/ 3" into "01/02/03" */
for (count = 0; count < 7; count+=3)
{
if (date[count] == ' ')
date[count] = '0';
}
/* turn flag on to indicate that the user has set the date */
*date_flag |= DATE_SET;
}
printf("\n\tCurrent Date is %s",date);
}
show_use() /* display correct usage and exit */
{
printf("\nDATE sets the system date. Usage is :");
printf("\n\tDATE mm/dd/yy");
printf("\n\tDATE SHOW (to display current date)\n");
exit();
}