Metropoli BBS
VIEWER: prompt.c MODE: TEXT (ASCII)
/* 
 *  PROMPT.C - prompt handling.
 *
 *
 *
 *  Comments:
 *
 *  14/01/95 (Tim Normal) ---------------------------------------------------
 *    started.
 *  
 *  08/08/95 (Matt Rains) ---------------------------------------------------
 *    i have cleaned up the source code. changes now bring this source into
 *    guidelines for recommended programming practice.
 *
 *  01/06/96 (Tim Norman) --------------------------------------------
 *    added day of the week printing (oops, forgot about that!)
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <ctype.h>
#include <dir.h>
#include <string.h>

static char days[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

/*
 *
 * print the command-line prompt
 *
 */
void printprompt(void)
{
   struct time t;
   struct dosdate_t d;

   static char default_pr[] = "$P$G";
   char *pr;
   char direc[128];
   char temp[128];

   pr = getenv("PROMPT"); /* get PROMPT environment var. */

   if(!pr || !pr[0]) /* if PROMPT hasn't been set */
   {
      pr = default_pr;
   }

   while(*pr)
   {
      if(*pr != '$')
      {
         putchar (*pr);
      }
      else
      {
         pr++;

         switch(toupper(*pr))
         {
            case 'Q' :
            {
               putchar ('=');
               break;
            }
            case '$' :
            {
               putchar('$');
               break;
            }
            case 'T' :
            {
               gettime(&t);
               printf("%2d:%02d:%02d.%02d", t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);
               break;
            }
            case 'D' :
            {
	       _dos_getdate (&d);
	       printf("%s %02d-%02d-%04d", days[d.dayofweek], d.month,
		      d.day, d.year);
               break;
            }
            case 'P' :
            {
               direc[0] = getdisk() + 'A';
               direc[1] = ':';
               getcurdir(0, temp);
               
               if(temp[0] == '\\')
               {
                  strcpy(&direc[2], temp);
               }
               else
               {
                  direc[2] = '\\';
                  strcpy(&direc[3], temp);
               }
         
               printf("%s", direc);
               break;
            }
            case 'V' :
            {
               printf("FreeDOS Alpha");
               break;
            }
            case 'N' :
            {
               printf("%c", getdisk () + 'A');
               break;
            }
            case 'G' : 
            {
               putchar('>');
               break;
            }
            case 'L' :
            {
               putchar('<');
               break;
            }
            case 'B' :
            {
               putchar('|');
               break;
            }
            case '_' :
            {
               putchar('\n');
               break;
            }
            case 'E' :
            {
               putchar(27);
               break;
            }
            case 'H' :
            {
               putchar(8);
               break;
            }
         }
      }
      pr++;
   }

   return;
}
[ RETURN TO DIRECTORY ]