#include #include #include "dbhost.h" /* PROTOTYPE_ALLOWED */ #include "dbext.h" /* DOUBLE, etc. */ /***************************************************************************** * * * COMMON OCEANOGRAPHIC DATA ACCESS SYSTEM (CODAS) * * * * WRITTEN BY: RAMON CABRERA, ERIC FIRING, and JULIE RANADA * * JOINT INSTITUTE FOR MARINE AND ATMOSPHERIC RESEARCH * * 1000 POPE ROAD MSB 404 * * HONOLULU, HI 96822 * * * * VERSION: 3.00 * * * * DATE: APRIL 1989 * * * *****************************************************************************/ /* FILE: prtarray.c General array printing functions and supporting routines. */ void clear_screen(void); void check_screen_lines(int increm); /*----------------------------------------------------------------------------- The following external variable declarations are used by the printing routines below in order to keep track of the cursor position in the case of printing to stdout. The variable screen_lines is initialized to zero each time a call to clear_screen is made, and is incremented by the print functions each time a line is printed to the screen. The variable max_screen_lines is used as a cutoff point to pause screen output until the user presses the enter key, so screen output does not scroll off. It is set to a default value appropriate for 24/25-line monitors. It may be reset using the function set_max_screen_lines below. */ int screen_lines; int max_screen_lines = 20; /*----------------------------------------------------------------------------- FUNCTION: clear_screen Uses ANSI escape sequence to clear the screen and sets the external variable screen_lines back to zero. */ void clear_screen(void) { printf("%c[2J%c[H", 0x1B, 0x1B); screen_lines = 0; } /*----------------------------------------------------------------------------- FUNCTION: check_screen_lines It increments the global screen_lines counter by the no. of additional lines just printed as indicated by its argument. It then checks if more than max_screen_lines have been printed, in which case it pauses until the user presses the enter key, prior to clearing the screen. PARAMETER: increm = no. by which to increment screen_lines counter */ void check_screen_lines(int increm) { screen_lines += increm; if (screen_lines >= max_screen_lines) { printf("\n--More--"); getchar(); clear_screen(); } } /*----------------------------------------------------------------------------- FUNCTIONS: print_array_1u, print_array_1s, print_array_2, print_array_4, print_array_float, print_array_double These print the array elements to a file. PARAMETERS: fp = pointer to FILE to print to (usually stdout) array = pointer to first element in array nv = number of values in the array to be printed ncol = no. of columns per print line format = print format string, e.g., "%7d" RETURN: VOID */ unsigned int print_array_1u(FILE *fp, UBYTE array[], unsigned int nv, int ncol, char *format) { unsigned int i; ncol = max_val(ncol, 1); for (i = 0; i < nv; i++) { if (i) if (i % ncol == 0) { fprintf(fp, "\n"); } fprintf(fp, format, array[i]); } return(nv); } #if PROTOTYPE_ALLOWED unsigned int print_array_1s(FILE *fp, BYTE array[], unsigned int nv, int ncol, char *format) #else unsigned int print_array_1s(fp, array, nv, ncol, format) FILE *fp; BYTE array[]; unsigned int nv; int ncol; char *format; #endif { unsigned int i; ncol = max_val(ncol, 1); for (i = 0; i < nv; i++) { if (i) if (i % ncol == 0) { fprintf(fp, "\n"); } fprintf(fp, format, array[i]); } return(nv); } #if PROTOTYPE_ALLOWED unsigned int print_array_2u(FILE *fp, USHORT array[], unsigned int nv, int ncol, char *format) #else unsigned int print_array_2u(fp, array, nv, ncol, format) FILE *fp; USHORT array[]; unsigned int nv; int ncol; char *format; #endif { unsigned int i; ncol = max_val(ncol, 1); for (i = 0; i < nv; i++) { if (i) if (i % ncol == 0) { fprintf(fp, "\n"); } fprintf(fp, format, array[i]); } return(nv * sizeof(SHORT)); } #if PROTOTYPE_ALLOWED unsigned int print_array_2s(FILE *fp, SHORT array[], unsigned int nv, int ncol, char *format) #else unsigned int print_array_2s(fp, array, nv, ncol, format) FILE *fp; SHORT array[]; unsigned int nv; int ncol; char *format; #endif { unsigned int i; ncol = max_val(ncol, 1); for (i = 0; i < nv; i++) { if (i) if (i % ncol == 0) { fprintf(fp, "\n"); } fprintf(fp, format, array[i]); } return(nv * sizeof(SHORT)); } #if PROTOTYPE_ALLOWED unsigned int print_array_4(FILE *fp, LONG array[], unsigned int nv, int ncol, char *format) #else unsigned int print_array_4(fp, array, nv, ncol, format) FILE *fp; LONG array[]; unsigned int nv; int ncol; char *format; #endif { unsigned int i; ncol = max_val(ncol, 1); for (i = 0; i < nv; i++) { if (i) if (i % ncol == 0) { fprintf(fp, "\n"); } fprintf(fp, format, array[i]); } return(nv * sizeof(LONG)); } #define badfloat(x) ((x) < ADJ_BADFLOAT ? 0 : 1) unsigned int print_array_float(FILE *fp, FLOAT array[], unsigned int nv, int ncol, char *format) { unsigned int i; char *fptr; ncol = max_val(ncol, 1); for (i = 0; i < nv; i++) { if (i) if (i % ncol == 0) { fprintf(fp, "\n"); } if (badfloat(array[i]) && (fptr = strchr(format, '%')) != NULL && (fptr = strchr(fptr, 'f')) != NULL) { *fptr = 'g'; /* switch to scientfic notation */ fprintf(fp, format, array[i]); *fptr = 'f'; /* restore */ } else fprintf(fp, format, array[i]); } return(nv * sizeof(FLOAT)); } unsigned int print_array_double(FILE *fp, DOUBLE array[], unsigned int nv, int ncol, char *format) { unsigned int i; char *fptr; ncol = max_val(ncol, 1); for (i = 0; i < nv; i++) { if (i) if (i % ncol == 0) { fprintf(fp, "\n"); } if (badfloat(array[i]) && (fptr = strchr(format, '%')) != NULL && (fptr = strchr(fptr, 'f')) != NULL) { *fptr = 'g'; /* switch to scientific notation */ fprintf(fp, format, array[i]); *fptr = 'f'; /* restore */ } else fprintf(fp, format, array[i]); } return(nv * sizeof(DOUBLE)); }