#include #include #include #include #include #include /* #include "dte.h" */ #define USERNAME "cards" #define PASSWORD "upperair" #include #include EXEC ORACLE OPTION (ORACA=YES); char *username = "cards"; char *password = "upperair"; VARCHAR dynstmt[80]; struct { char stn_name[31]; char fips_cntry_code[3]; char state[3]; char stn_lat[10]; char stn_lon[10]; char stn_elev[8]; char begin_date[9]; char end_date[9]; } stn_info; struct { char year[5]; char jan[5]; char feb[5]; char mar[5]; char apr[5]; char may[5]; char jun[5]; char jul[5]; char aug[5]; char sep[5]; char oct[5]; char nov[5]; char dec[5]; char total_obs[5]; char total_days[5]; char avg_trm_prssr[8]; } inv_info; /* Handle SQL runtime errors. */ void sql_error(); main() { FILE *parg; FILE *pout; char oname[50]; char cards_no[7]; int Icards_no=0; char query[150]; float Fstn_lat; float Fstn_lon; float Fstn_elev; int Imnth; int Idays; int Ijan; int Ifeb; int Imar; int Iapr; int Imay; int Ijun; int Ijul; int Iaug; int Isep; int Ioct; int Inov; int Idec; int Itotal_obs=0; int Itotal_days=0; float Favg_trm_prssr=0; int Iototal_obs=0; /* Open Arguments file */ if( (parg=fopen("stn_inv.dat","r+"))==NULL) { printf("Cannot open Arguments file stn_inv.dat\n"); } else { printf("Arguments file stn_inv.dat is open\n"); } /* Open and Read Arguments File */ fscanf(parg,"%s", cards_no); fclose(parg); /* Open out file */ sprintf(oname,"/cards2/INV/C%s.inv",cards_no); if( (pout=fopen(oname,"w+"))==NULL) { printf("Cannot open Output file %s\n", oname); } else { printf("Output file %s is open\n", oname); } /* convert cards# to integer */ Icards_no=atoi(cards_no); /* Print Header and Station information */ fprintf(pout,"Date: XXX\n"); fprintf(pout,"UPPER AIR INVENTORY - Data Source: CARDS\n\n\n"); fprintf(pout,"*** Station History ***\n\n"); fprintf(pout,"CARDS# Station Name CN ST Latitude Longitude Elev Begin End\n"); fprintf(pout,"--------------------------------------------------------------------------------------\n"); /* register the error handler code */ EXEC SQL WHENEVER SQLERROR DO sql_error("-- CGI/ORACLE error handler ---\n"); /* Connect to Oracle. */ EXEC SQL CONNECT :username IDENTIFIED BY :password; puts("\nConnected to Oracle.\n"); /* Get station info */ sprintf(query,"SELECT stn_name, fips_cntry_code, state, stn_lat, stn_lon, stn_elev, begin_date, end_date FROM cards_stnhis where cards_no = %d order by end_date desc", Icards_no); EXEC SQL PREPARE data_select FROM :query; EXEC SQL DECLARE data_cursor CURSOR FOR data_select; EXEC SQL OPEN data_cursor; EXEC SQL WHENEVER NOT FOUND DO break; while(1) { EXEC SQL FETCH data_cursor INTO :stn_info; /* Convert locators to float for printing */ Fstn_lat=atof(stn_info.stn_lat); Fstn_lon=atof(stn_info.stn_lon); Fstn_elev=atof(stn_info.stn_elev); fprintf(pout,"%6d %30s %2s %2s %2.5f %3.5f %4.1f %8s %8s\n", Icards_no, stn_info.stn_name, stn_info.fips_cntry_code, stn_info.state, Fstn_lat, Fstn_lon, Fstn_elev, stn_info.begin_date, stn_info.end_date); } fprintf(pout,"\n\n*** Monthly Inventory ***\n"); fprintf(pout," TOTAL TOT# AVG TRM\n"); fprintf(pout,"YEAR JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC OBS DAYS PRSSR\n"); fprintf(pout,"---------------------------------------------------------------------------------------\n"); sprintf(query,"SELECT year, jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec, total_obs, total_days, avg_trm_prssr FROM cards_stn_inv where cards_no = %s order by year", cards_no); /* prepare the sql query using the string above (the "query" string).*/ EXEC SQL PREPARE data_select1 FROM :query; /* delcare a cursor for the prepared query */ EXEC SQL DECLARE data_cursor1 CURSOR FOR data_select1; /* open the cursor for reading */ EXEC SQL OPEN data_cursor1; EXEC SQL WHENEVER NOT FOUND DO break; while(1) { EXEC SQL FETCH data_cursor1 INTO :inv_info; fprintf(pout,"%s ", inv_info.year); Ijan=atoi(inv_info.jan); Ifeb=atoi(inv_info.feb); Imar=atoi(inv_info.mar); Iapr=atoi(inv_info.apr); Imay=atoi(inv_info.may); Ijun=atoi(inv_info.jun); Ijul=atoi(inv_info.jul); Iaug=atoi(inv_info.aug); Isep=atoi(inv_info.sep); Ioct=atoi(inv_info.oct); Inov=atoi(inv_info.nov); Idec=atoi(inv_info.dec); Itotal_obs=atoi(inv_info.total_obs); Itotal_days=atoi(inv_info.total_days); Favg_trm_prssr=atof(inv_info.avg_trm_prssr); Iototal_obs=Iototal_obs+Itotal_obs; fprintf(pout," %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %5d", Ijan, Ifeb, Imar, Iapr, Imay, Ijun, Ijul, Iaug, Isep, Ioct, Inov, Idec, Itotal_obs); fprintf(pout," %3d", Itotal_days); fprintf(pout," %-5.2f", Favg_trm_prssr); fprintf(pout,"\n"); /* End Inv Selection */ } /* Print Overall Total */ fprintf(pout," -----\n"); fprintf(pout,"Total Observations: %5d\n", Iototal_obs); /* EXEC SQL COMMIT RELEASE; puts((char *)"\nHave a good day!\n"); exit(0); */ /* Close Input and Output Files */ fclose(pout); /* End MAIN */ } /* defines the sql error handling code -- borrowed from Oracle C examples (sample1.pc to be exact.)*/ void sql_error(char *msg) { char err_msg[128]; size_t buf_len, msg_len; char error[256]; EXEC SQL WHENEVER SQLERROR CONTINUE; /* printf(error,"\n%s\n", msg);*/ buf_len = sizeof (err_msg); sqlglm(err_msg, &buf_len, &msg_len); sprintf(error,"%.*s\n", msg_len, err_msg); strcat(error,msg); EXEC SQL ROLLBACK RELEASE; /* prints html error message to browser and stops execution showError(error); */ }