"SfR Fresh" - the SfR Freeware/Shareware Archive

Member "see_bekijk-1.1/input.c" of archive see_bekijk-1.1.tgz:


As a special service "SfR Fresh" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
    1 /* ------------------------------------------------------------------------- */
    2 /* Funkties voor de input(....) procedure			             */
    3 /*									     */
    4 /*					      (GPL) 1997,98  Belgie  Belgium */
    5 /*						             Staf Wagemakers */
    6 /* ------------------------------------------------------------------------- */
    7 #include <ncurses.h>
    8 #include "input.h"
    9 /* ----------------------------------------- */
   10 /* Bijvoegen van een karakter in een string  */
   11 /* char     *c -> string                     */
   12 /* unsigned i  -> positie in string          */
   13 /* char     cc -> karakter		     */
   14 /* ----------------------------------------- */
   15 ins_char (char *c,unsigned i,char cc)
   16 {
   17 unsigned x;
   18 unsigned einde=strlen(c);
   19 if (i!=einde) {
   20   if (i) for (x=einde;x>=i;x--) c[x]=c[x-1];
   21     else for (x=einde-1;x>=1;x--) c[x+1]=c[x];
   22   }
   23 c[i]=cc;
   24 c[einde+1]=0;
   25 }
   26 /* ----------------------------------------- */
   27 /* Verwijderen v/e karakter in een string    */
   28 /* char     *c -> string                     */
   29 /* unsigned i  -> positie in string          */
   30 /*					     */
   31 /* P.S. Deze funktie schuift de kar's ook    */
   32 /* naar rechts!			             */
   33 /* ----------------------------------------- */
   34 del_char (char *c,unsigned i)
   35 {
   36 unsigned x;
   37 for (x=i;x<strlen(c);x++) c[x]=c[x+1];
   38 }
   39 /* ----------------------------------------- */
   40 /* De eigelijke input routine ...            */
   41 /*					     */
   42 /* WINDOW   *w = input venster               */
   43 /* unsigned yp = y-positie in venster        */
   44 /* unsigned xp = x-positie in venster        */
   45 /* char     *c = pointer naar de string      */
   46 /* unsigned  n = aantal kar's		     */
   47 /* int    mode = 0 -> normale string         */
   48 /*               1 -> dec. string            */
   49 /*               2 -> hex. string            */
   50 /* int    *key = pointer naar ekstra toetsen */
   51 /* ----------------------------------------- */
   52 int input (WINDOW *w,unsigned yp,unsigned xp,char *c,unsigned n,int mode,int *key)
   53 {
   54 int i,brol;
   55 unsigned teller=0;
   56 unsigned einde=0;
   57 int ins_mode=TRUE;
   58 mvwaddstr(w,w->_maxy,w->_maxx-2,"I");
   59 noecho();
   60 leaveok(w,FALSE);
   61 keypad(w,TRUE);
   62 meta(w,TRUE);
   63 wmove(w,yp,xp);
   64 if (strlen(c)!=0) {
   65   einde=strlen(c);
   66   teller=strlen(c);
   67   mvwaddstr(w,yp,xp,c);
   68   wmove(w,yp,xp+teller);
   69   }
   70   else einde=teller=0;
   71 do {
   72     unsigned p=0;
   73     i=wgetch(w);
   74     while (key[p]!=0) {
   75      if (i==key[p++]) return (p);
   76     };
   77     switch (i) {
   78     case KEY_HOME:      teller=0;
   79                         break;
   80     case KEY_END:	teller=einde;
   81 			break;
   82     case KEY_IC:	if (ins_mode) {
   83                           ins_mode=FALSE;
   84 			  mvwaddstr(w,w->_maxy,w->_maxx-2,"O");
   85 			  }
   86                           else {
   87                           ins_mode=TRUE;
   88 			  mvwaddstr(w,w->_maxy,w->_maxx-2,"I");
   89 			  };
   90 			wrefresh(w);
   91 			i=0;
   92 			break;
   93     case KEY_DC:	if (teller==einde) break;
   94 			++teller;
   95     case KEY_BACKSPACE: if (einde) {
   96                            int i ;
   97                            for (i=0;i<n;i++) mvwaddch(w,yp,xp+i,' ');
   98 			   };
   99 			if (teller) {
  100 			  mvwaddch(w,yp,xp+teller-1,' ');
  101 			  --teller;
  102                           }
  103 			c[einde]=0;
  104 			del_char(c,teller);
  105 			if (einde) einde--;
  106 			c[einde]=0;
  107 			mvwaddstr(w,yp,xp,c);
  108 			wmove(w,yp,xp+teller);
  109 			break;
  110     case KEY_LEFT:      if (teller) --teller;
  111                         break;
  112     case KEY_RIGHT:     if (teller<einde) ++teller;
  113 			break;
  114     }
  115     wmove(w,yp,xp+teller);
  116     if (einde>n) einde=n;
  117     switch (mode) {
  118       case 0 : brol=isprint(i);
  119                if (i==' ') brol=TRUE;
  120 	       break;
  121       case 1 : brol=isdigit(i);
  122 	       break;
  123       case 2 : brol=isdigit(i);
  124 	       break;
  125       default: brol=TRUE;
  126       }
  127      if (isprint(i)) {
  128       if (brol) {
  129         if (teller<n) {
  130 	  if (ins_mode) ins_char(c,teller++,i);
  131 	    else c[teller++]=i;
  132           einde=strlen(c);
  133 	  if (einde>n) einde=n;
  134 	  if (teller>einde) einde=teller;
  135 	  c[einde]=0;
  136 	  mvwaddstr(w,yp,xp,c);
  137 	  wmove(w,yp,xp+teller);
  138 	  }
  139 	}
  140       }
  141    } while (i!='\n');
  142 c[einde]=0;
  143 wrefresh(w);
  144 return (0);
  145 }