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* 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 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