home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / useful / comm / tcp / amitcp / src / util / finger / sprint.c < prev    next >
C/C++ Source or Header  |  1994-02-24  |  5KB  |  183 lines

  1. RCS_ID_C = "$Id: sprint.c,v 6.4 1994/02/21 19:30:06 ppessi Exp $";
  2.  
  3. /*
  4.  * sprint.c - print finger information in short format
  5.  *
  6.  * Copyright © 1993 AmiTCP/IP Group, <AmiTCP-group@hut.fi>
  7.  *                  Helsinki University of Technology, Finland.
  8.  *
  9.  * This program is derived from original work distributed in BSD Net 2.
  10.  *
  11.  * Created      : Fri Oct 15 01:29:07 1993 ppessi
  12.  * Last modified: Mon Feb 21 05:05:20 1994 ppessi
  13.  *
  14.  * $Log: sprint.c,v $
  15.  * Revision 6.4  1994/02/21  19:30:06  ppessi
  16.  * Removed tty field. Real release 2.
  17.  *
  18.  * Revision 6.3  1994/02/15  14:56:43  ppessi
  19.  * Added utmp support
  20.  *
  21.  * Revision 6.2  93/10/15  03:02:28  ppessi
  22.  * Removed -s support (until we got utmp from somewhere)
  23.  * 
  24.  */
  25.  
  26. /*
  27.  * Copyright (c) 1989 The Regents of the University of California.
  28.  * All rights reserved.
  29.  *
  30.  * This code is derived from software contributed to Berkeley by
  31.  * Tony Nardo of the Johns Hopkins University/Applied Physics Lab.
  32.  *
  33.  * Redistribution and use in source and binary forms, with or without
  34.  * modification, are permitted provided that the following conditions
  35.  * are met:
  36.  * 1. Redistributions of source code must retain the above copyright
  37.  *    notice, this list of conditions and the following disclaimer.
  38.  * 2. Redistributions in binary form must reproduce the above copyright
  39.  *    notice, this list of conditions and the following disclaimer in the
  40.  *    documentation and/or other materials provided with the distribution.
  41.  * 3. All advertising materials mentioning features or use of this software
  42.  *    must display the following acknowledgement:
  43.  *    This product includes software developed by the University of
  44.  *    California, Berkeley and its contributors.
  45.  * 4. Neither the name of the University nor the names of its contributors
  46.  *    may be used to endorse or promote products derived from this software
  47.  *    without specific prior written permission.
  48.  *
  49.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  50.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  51.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  52.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  53.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  54.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  55.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  56.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  57.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  58.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  59.  * SUCH DAMAGE.
  60.  */
  61.  
  62. #include <sys/types.h>
  63. #include <sys/time.h>
  64. #include <tzfile.h>
  65. #include <stdio.h>
  66. #include <string.h>
  67. #include <stdlib.h>
  68. #include "finger.h"
  69.  
  70. extern int entries;
  71.  
  72. PERSON ** sort(void);
  73. int psort(PERSON **p, PERSON **t);
  74. void stimeprint(WHERE *w);
  75.  
  76. void
  77. sflag_print(void)
  78. {
  79.   extern time_t now;
  80.   register PERSON *pn;
  81.   register WHERE *w;
  82.   register int cnt;
  83.   register char *p;
  84.   PERSON **list, **sort();
  85.   time_t time();
  86.   char *ctime(), *prphone();
  87.  
  88.   list = sort();
  89.   /*
  90.    * short format --
  91.    *    login name
  92.    *    real name
  93.    *    console name (the XX of ttyXX) (#
  94.    *    if terminal writeable (add an '*' to the terminal name if not) (#
  95.    *    last login date and time.  If > 6 moths, show year instead of time.
  96.    *    office location
  97.    *    office phone
  98.    */
  99. #define    MAXREALNAME    20
  100. #define MAXREALNAME_S  "20"
  101. #define M_S(x) #x
  102.   (void)printf("%-8s %-" MAXREALNAME_S "s %s\n", 
  103.            "Login", "Name", " Login Time   From");
  104.   for (cnt = 0; cnt < entries; ++cnt) {
  105.     pn = list[cnt];
  106.     for (w = pn->whead; w != NULL; w = w->next) {
  107.       (void)printf("%-8.8s "
  108.            "%-" MAXREALNAME_S "." MAXREALNAME_S "s ", 
  109.            pn->name, 
  110.            pn->realname ? pn->realname : "");
  111.       if (!w->loginat) {
  112.     (void)printf(" No logins ");
  113.       } else {
  114.     p = ctime(&w->loginat);
  115.     (void)printf("%.6s", p + 4);
  116.     if (now - w->loginat >= SECSPERDAY * DAYSPERNYEAR / 2)
  117.       (void)printf("  %.4s", p + 20);
  118.     else
  119.       (void)printf(" %.5s", p + 11);
  120.     if (*w->host)
  121.       (void)printf(" %-16.16s", w->host);
  122.     else
  123.       (void)printf("                 ");
  124.       }
  125. #ifdef notyet
  126.       office:    
  127.     if (pn->office)
  128.     (void)printf(" %-10.10s", pn->office);
  129.       else if (pn->officephone)
  130.     (void)printf(" %-10.10s", " ");
  131.       if (pn->officephone)
  132.     (void)printf(" %-.15s",
  133.              prphone(pn->officephone));
  134. #endif
  135.       putchar('\n');
  136.     }
  137.   }
  138. }
  139.  
  140. PERSON **
  141. sort(void)
  142. {
  143.   register PERSON *pn, **lp;
  144.   PERSON **list;
  145.   int psort();
  146.  
  147.   if (!(list = (PERSON **)malloc((u_int)(entries * sizeof(PERSON *))))) {
  148.     (void)fprintf(stderr, "finger: out of space.\n");
  149.     exit(1);
  150.   }
  151.   for (lp = list, pn = phead; pn != NULL; pn = pn->next)
  152.     *lp++ = pn;
  153.   (void)qsort(list, entries, sizeof(PERSON *), psort);
  154.   return(list);
  155. }
  156.  
  157. int
  158. psort(PERSON **p, PERSON **t)
  159. {
  160.   return(strcmp((*p)->name, (*t)->name));
  161. }
  162.  
  163. #if 0
  164. void
  165. stimeprint(WHERE *w)
  166. {
  167.   register struct tm *delta;
  168.  
  169.   delta = gmtime(&w->idletime);
  170.   if (!delta->tm_yday)
  171.     if (!delta->tm_hour)
  172.       if (!delta->tm_min)
  173.     (void)printf("     ");
  174.       else
  175.     (void)printf("%5d", delta->tm_min);
  176.     else
  177.       (void)printf("%2d:%02d",
  178.            delta->tm_hour, delta->tm_min);
  179.   else
  180.     (void)printf("%4dd", delta->tm_yday);
  181. }
  182. #endif
  183.