#include #include main() { char answer[32], record[8], directory[32]; int i, nsig = 0, v[DB_MAXSIG]; long nsamp, t; double freq = 0.; static char filename[DB_MAXSIG][32], description[DB_MAXSIG][32], units[DB_MAXSIG][22]; static DB_Siginfo s[DB_MAXSIG]; do { printf("Choose a record name [up to 6 characters]: "); fgets(record, 8, stdin); record[strlen(record)-1] = '\0'; } while (newheader(record) < 0); do { printf("Number of signals to be recorded [1-%d]: ", DB_MAXSIG); fgets(answer, 32, stdin); sscanf(answer, "%d", &nsig); } while (nsig < 1 || nsig > DB_MAXSIG); do { printf("Sampling frequency [Hz per signal, > 0]: "); fgets(answer, 32, stdin); sscanf(answer, "%lf", &freq); } while (setsampfreq(freq) < 0); do { printf("Length of record (H:M:S): "); fgets(answer, 32, stdin); } while ((nsamp = strtim(answer)) < 1L); printf("Directory for signal files [up to 30 characters]: "); fgets(directory, 32, stdin); directory[strlen(directory)-1] = '\0'; printf("Save signals in difference format? [y/n]: "); fgets(answer, 32, stdin); s[0].fmt = (answer[0] == 'y') ? 8 : 16; printf("Save all signals in one file? [y/n]: "); fgets(answer, 32, stdin); if (answer[0] == 'y') { sprintf(filename[0], "%s/d.%s", directory, record); for (i = 0; i < nsig; i++) { s[i].fname = filename[0]; s[i].group = 0; } } else { for (i = 0; i < nsig; i++) { sprintf(filename[i], "%s/d%d.%s", directory,i,record); s[i].fname = filename[i]; s[i].group = i; } } for (i = 0; i < nsig; i++) { s[i].fmt = s[0].fmt; s[i].bsize = 0; printf("Signal %d description [up to 30 characters]: ", i); fgets(description[i], 32, stdin); description[i][strlen(description[i])-1] = '\0'; s[i].desc = description[i]; printf("Signal %d units [up to 20 characters]: ", i); fgets(units[i], 22, stdin); units[i][strlen(units[i])-1] = '\0'; s[i].units = (*units[i]) ? units[i] : "mV"; do { printf(" Signal %d gain [adu/%s]: ", i, s[i].units); fgets(answer, 32, stdin); sscanf(answer, "%lf", &s[i].gain); } while (s[i].gain < 0.); do { printf(" Signal %d ADC resolution in bits [8-16]: ", i); fgets(answer, 32, stdin); sscanf(answer, "%d", &s[i].adcres); } while (s[i].adcres < 8 || s[i].adcres > 16); printf(" Signal %d ADC zero level [adu]: ", i); fgets(answer, 32, stdin); sscanf(answer, "%d", &s[i].adczero); } if (osigfopen(s, nsig) < nsig) exit(1); printf("To begin sampling, press RETURN; to specify a\n"); printf(" start time other than the current time, enter\n"); printf(" it in H:M:S format before pressing RETURN: "); fgets(answer, 32, stdin); answer[strlen(answer)-1] = '\0'; setbasetime(answer); adinit(); for (t = 0; t < nsamp; t++) { for (i = 0; i < nsig; i++) v[i] = adget(i); if (putvec(v) < 0) break; } adquit(); (void)newheader(record); dbquit(); exit(0); } adinit() { printf("%s\n", timstr(0L)); } adget(i) int i; { return (i); } adquit() { ; }