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