xref: /plan9/sys/src/cmd/auth/lib/querybio.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include <ctype.h>
5 #include "authcmdlib.h"
6 
7 
8 #define TABLEN 8
9 
10 static char*
defreadln(char * prompt,char * def,int must,int * changed)11 defreadln(char *prompt, char *def, int must, int *changed)
12 {
13 	char pr[512];
14 	char reply[256];
15 
16 	do {
17 		if(def && *def){
18 			if(must)
19 				snprint(pr, sizeof pr, "%s[return = %s]: ", prompt, def);
20 			else
21 				snprint(pr, sizeof pr, "%s[return = %s, space = none]: ", prompt, def);
22 		} else
23 			snprint(pr, sizeof pr, "%s: ", prompt);
24 		readln(pr, reply, sizeof(reply), 0);
25 		switch(*reply){
26 		case ' ':
27 			break;
28 		case 0:
29 			return def;
30 		default:
31 			*changed = 1;
32 			if(def)
33 				free(def);
34 			return strdup(reply);
35 		}
36 	} while(must);
37 
38 	if(def){
39 		*changed = 1;
40 		free(def);
41 	}
42 	return 0;
43 }
44 
45 /*
46  *  get bio from stdin
47  */
48 int
querybio(char * file,char * user,Acctbio * a)49 querybio(char *file, char *user, Acctbio *a)
50 {
51 	int i;
52 	int changed;
53 
54 	rdbio(file, user, a);
55 	a->postid = defreadln("Post id", a->postid, 0, &changed);
56 	a->name = defreadln("User's full name", a->name, 1, &changed);
57 	a->dept = defreadln("Department #", a->dept, 1, &changed);
58 	a->email[0] = defreadln("User's email address", a->email[0], 1, &changed);
59 	a->email[1] = defreadln("Sponsor's email address", a->email[1], 0, &changed);
60 	for(i = 2; i < Nemail; i++){
61 		if(a->email[i-1] == 0)
62 			break;
63 		a->email[i] = defreadln("other email address", a->email[i], 0, &changed);
64 	}
65 	return changed;
66 }
67