"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 }