root/lib/libkern/getsn.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. getsn

    1 /*      $OpenBSD: getsn.c,v 1.5 2007/05/03 01:21:32 deraadt Exp $       */
    2 
    3 /*
    4  * Copyright (c) 1996 Theo de Raadt
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   21  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   25  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   26  */
   27 
   28 #include <sys/cdefs.h>
   29 #include <sys/types.h>
   30 #include <sys/systm.h>
   31 #include <dev/cons.h>
   32 
   33 int
   34 getsn(char *cp, int size)
   35 {
   36         int len = 0, c;
   37         char *lp = cp;
   38 
   39         while (1) {
   40                 c = cngetc();
   41                 switch (c) {
   42                 case '\n':
   43                 case '\r':
   44                         printf("\n");
   45                         *lp++ = '\0';
   46                         return (len);
   47                 case '\b':
   48                 case '\177':
   49                         if (len) {
   50                                 printf("\b \b");
   51                                 --lp;
   52                                 --len;
   53                         }
   54                         break;
   55                 case 'u' & 037:
   56                         while (len) {
   57                                 printf("\b \b");
   58                                 --lp;
   59                                 --len;
   60                         }
   61                         break;
   62                 case '\t':
   63                         c = ' ';
   64                 default:
   65                         if (len + 1 >= size || c < ' ') {
   66                                 printf("\007");
   67                                 break;
   68                         }
   69                         printf("%c", c);
   70                         ++len;
   71                         *lp++ = c;
   72                 }
   73         }
   74 }

/* [<][>][^][v][top][bottom][index][help] */