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