/////////////////////////////////////////////////////////////////////////////////////////////// // DasWin32CFunctions.c // // External "C" functions used by DataAcquisitionThread.cpp of DasWin32 project. // // Written by Daniel Gottas - NOAA/ETL Meteorological Applications and Assessment Division /////////////////////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #include #include #include #include #include "DasWin32Version.h" #include "commlib.h" int IsFieldANumber(char *); void RemoveAlphaBetics(char *); int IsFieldPrintable(char *); int WriteToLog(char *,char *); void wdt(unsigned short,int); void kill_wdt(unsigned short); int GetOphirString(PORT *,char *,int,char ,int,int); void GetOphirConstants(PORT *,char *,int,char *,SYSTEMTIME *); /////////////////////////////////////////////////////////////////////////// // function IsFieldANumber: quality controls for alphnumeric characters // int IsFieldANumber(char *Inline) { int num_char=0,i=0,DecimalPoint=0,MinusSign=0,PlusSign=0; num_char=strlen(Inline); // get length of string for(i=0;i1 )||(MinusSign>1)||(PlusSign>1)) return(0); // return 0 if character is not alphanumeric or '.' or ' ' } return(1); // return 1 if all characters are alphnumeric } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// // function RemoveAlphaBetics: locates and replaces all alpha-numeric characters with white space void RemoveAlphaBetics(char *Inline) { int num_char=0,i=0; num_char=strlen(Inline); // get length of string for(i=0;itm_year,tp->tm_yday+1); // formulate log filename exist=_access(OutputFileName,0); // check for file existance if(!exist) // if output file exists _chmod(OutputFileName,_S_IWRITE); // assign write permission if((f1=_fsopen(OutputFileName,"at+",_SH_DENYWR))==NULL) // open log file with file sharing for reading only { _chmod(OutputFileName,_S_IREAD); // assign read only permission if(OutputFileName!=NULL) free(OutputFileName); // if NULL, free memory return(0); // return error flag } if(exist==-1) { fprintf(f1,"DasWin32 Version %s LogFile %02d%03d.LOG\n\n",VERSION_NUMBER,tp->tm_year,tp->tm_yday+1); fprintf(f1,"MM/DD/YY HH:MM:SS:MMM CODE MESSAGE\n"); } fprintf(f1,"%02d/%02d/%02d %02d:%02d:%02d:%03d %s\n", LogTime.wMonth,LogTime.wDay, LogTime.wYear-(LogTime.wYear/100*100), LogTime.wHour,LogTime.wMinute, LogTime.wSecond,LogTime.wMilliseconds, Message); // output time and message to file fclose(f1); // close log file _chmod(OutputFileName,_S_IREAD); // assign read only permission if(OutputFileName!=NULL) free(OutputFileName); // free memory return(1); // return success } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// // function wdt: resets the watchdog timer // void wdt(unsigned short clkbase,int twenty_mils) { _outp((unsigned short)(clkbase + 3),(0x36 | (2 << 6))); // config ctr 2 _outp((unsigned short)(clkbase + 2),0x20); // load ctr 2 LSB _outp((unsigned short)(clkbase + 2),0x4E); // load ctr 2 MSB _outp((unsigned short)(clkbase + 3),(0x30 | (1 << 6))); // config ctr 1 _outp((unsigned short)(clkbase + 1),twenty_mils); // load ctr 1 LSB _outp((unsigned short)(clkbase + 1),(twenty_mils >> 8)); // load ctr 1 MSB } /////////////////////////////////////////////////////////////////////////// // function kill_wdt: deactivates the watchdog timer // void kill_wdt(unsigned short clkbase) { _outp((unsigned short)(clkbase + 3),(0x36 | (2 << 6))); // config ctr 2 } //////////////////////////////////////////////////////////////////////////////// // function GetOphirString: query Ophir for a single line of information int GetOphirString(PORT *OphPort,char *String,int StringLen, char Query,int NumFields,int MaxTry) { char *WorkTok; int NumTry=0,FieldCount=0; if((WorkTok=(char *)calloc(StringLen,sizeof(char)))==NULL) return(0); //allocate working memory while((FieldCount!=NumFields)&&(NumTry