xref: /plan9-contrib/sys/src/cmd/auth/lib/querybio.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1219b2ee8SDavid du Colombier #include <u.h>
2219b2ee8SDavid du Colombier #include <libc.h>
3219b2ee8SDavid du Colombier #include <bio.h>
4219b2ee8SDavid du Colombier #include <ctype.h>
5219b2ee8SDavid du Colombier #include <auth.h>
6219b2ee8SDavid du Colombier #include "authsrv.h"
7219b2ee8SDavid du Colombier 
8219b2ee8SDavid du Colombier 
9219b2ee8SDavid du Colombier #define TABLEN 8
10219b2ee8SDavid du Colombier 
11219b2ee8SDavid du Colombier static char*
12219b2ee8SDavid du Colombier defreadln(char *prompt, char *def, int must, int *changed)
13219b2ee8SDavid du Colombier {
14219b2ee8SDavid du Colombier 	char pr[512];
15219b2ee8SDavid du Colombier 	char reply[256];
16219b2ee8SDavid du Colombier 
17219b2ee8SDavid du Colombier 	do {
18219b2ee8SDavid du Colombier 		if(def && *def){
19219b2ee8SDavid du Colombier 			if(must)
20219b2ee8SDavid du Colombier 				snprint(pr, sizeof pr, "%s[return = %s]: ", prompt, def);
21219b2ee8SDavid du Colombier 			else
22219b2ee8SDavid du Colombier 				snprint(pr, sizeof pr, "%s[return = %s, space = none]: ", prompt, def);
23219b2ee8SDavid du Colombier 		} else
24219b2ee8SDavid du Colombier 			snprint(pr, sizeof pr, "%s: ", prompt);
25219b2ee8SDavid du Colombier 		readln(pr, reply, sizeof(reply), 0);
26219b2ee8SDavid du Colombier 		switch(*reply){
27219b2ee8SDavid du Colombier 		case ' ':
28219b2ee8SDavid du Colombier 			break;
29219b2ee8SDavid du Colombier 		case 0:
30219b2ee8SDavid du Colombier 			return def;
31219b2ee8SDavid du Colombier 		default:
32219b2ee8SDavid du Colombier 			*changed = 1;
33*7dd7cddfSDavid du Colombier 			if(def)
34*7dd7cddfSDavid du Colombier 				free(def);
35219b2ee8SDavid du Colombier 			return strdup(reply);
36219b2ee8SDavid du Colombier 		}
37219b2ee8SDavid du Colombier 	} while(must);
38219b2ee8SDavid du Colombier 
39219b2ee8SDavid du Colombier 	if(def){
40219b2ee8SDavid du Colombier 		*changed = 1;
41219b2ee8SDavid du Colombier 		free(def);
42219b2ee8SDavid du Colombier 	}
43219b2ee8SDavid du Colombier 	return 0;
44219b2ee8SDavid du Colombier }
45219b2ee8SDavid du Colombier 
46219b2ee8SDavid du Colombier /*
47219b2ee8SDavid du Colombier  *  get bio from stdin
48219b2ee8SDavid du Colombier  */
49219b2ee8SDavid du Colombier int
50219b2ee8SDavid du Colombier querybio(char *file, char *user, Acctbio *a)
51219b2ee8SDavid du Colombier {
52219b2ee8SDavid du Colombier 	int i;
53219b2ee8SDavid du Colombier 	int changed;
54219b2ee8SDavid du Colombier 
55219b2ee8SDavid du Colombier 	rdbio(file, user, a);
56*7dd7cddfSDavid du Colombier 	a->postid = defreadln("Post id", a->postid, 0, &changed);
57219b2ee8SDavid du Colombier 	a->name = defreadln("User's full name", a->name, 1, &changed);
58219b2ee8SDavid du Colombier 	a->dept = defreadln("Department #", a->dept, 1, &changed);
59219b2ee8SDavid du Colombier 	a->email[0] = defreadln("User's email address", a->email[0], 1, &changed);
60219b2ee8SDavid du Colombier 	a->email[1] = defreadln("Sponsor's email address", a->email[1], 0, &changed);
61219b2ee8SDavid du Colombier 	for(i = 2; i < Nemail; i++){
62219b2ee8SDavid du Colombier 		if(a->email[i-1] == 0)
63219b2ee8SDavid du Colombier 			break;
64219b2ee8SDavid du Colombier 		a->email[i] = defreadln("other email address", a->email[i], 0, &changed);
65219b2ee8SDavid du Colombier 	}
66219b2ee8SDavid du Colombier 	return changed;
67219b2ee8SDavid du Colombier }
68