📄 labstr.h
字号:
/*------------------------------------------------------------------------------*
* File Name: labstr.h *
* Purpose: basic string and date/time definitions *
* Date: 1/1/92 *
* Copyright Microcal Software Inc. 1992-1995 *
* Modification log *
* CPY v3.782 added this header *
* CPY v3.782 DATE_INC_BUG 4/16/95, change LABUTIL_date2str to use *
* NULL lpOutput for management calls *
* CPY v3.782 CHAR_POSITION 4/17/95, add LABUTIL_strchr const *
* CPY v3.782 HH_MM_SS_DDD LABUTIL_time2str add NULL buffer for cntrl info *
* and settings *
* CPY v3.783 DATE_DIALOG_BUG 4/26/95, need to move ADD_TIME bit and give *
* more space to data format bits to differentiate between 1/1/91 and *
* Mon *
* CPY v3.8 5/30/95, CPP, add C++ support *
* CPY v3.8 6/1/95 STRLIST, need to check already defined *
* EJP v3.8 6-6-95 GETFILESEC, added LABUTIL_GetFileSection prototype *
* EJP v3.8 7-5-95 GETMEMSEC, add GetSection, ...Entry, ...Ptr prototypes *
* EJP v3.8 8-4-95 GETSET_CURR_FILE add prototype for exported function. *
* EJP v3.821 09-06-95 GET_PATH, add msg parameter to prototype. *
* CPY v3.85 11/7/95 DATE_INC_ERR
* CPY v3.98 11/14/95 ROUND_QUARTER, inc=year, minor=quarter still has problem
* ML 5/1/96 PUT_IT_INTO_LABUTIL_SO_THAT_EVERYBODY_CAN_USE_IT *
* CPY v4.11 6/26/96 ADD_FUNC_PROTOTYPE *
* EJP v4.13 07-25-96 HUGE_KEYWORD_OBSOLETE_IN_32BIT
* CPY v4.133 9/16/96 CLEAN_UP_AFTER_JLIU_ANU_FILE_OPEN_BUG_32 *
* CPY b1666 v4.93 2/22/97 HALF_WIDTH_J_CHARACTERS *
* YN v4.94 2/28/97 MOVED_ERR_SIGN_TO_OUTIL.DLL *
* ANU v4.94 3/06/97 B1794 CHANGED_OPENFILE_TO_CREATEFILE *
* JLIU v4.979 5/2/97 GET_TEXT_WITH_LEAD_SPACE *
* JLIU 4.998 t7/14/97 b2480 READ_DATE_TIME_MODIFY *
* ML 10/27/97 UNIFIED_STRING_MANIPULATION_MBCS *
* RB 6/24/98 t3594 v6.0125 DATE_TIME_CUSTOM_FORMAT *
* CPY v6.0130 b4228 9/25/98 PLOT_A_SUPPORT_MORE_THAN_10_NUMBERS *
* RB 11/16/98 t4121 v6.0138 CURRENT_DATE_IN_CUSTOM_FORMAT_IN_DIALOG *
* RB 3/16/99 t3668 v6.0174 MONTH_DAY_FORMAT_WRONG_INTERPRETATION_IN_JAPANESE *
* EJP 03-23-99 v6.0176 t5005 IMPLEMENT_ABILITY_TO_RESET_CUSTOM_DATE_FORMATS *
*------------------------------------------------------------------------------*/
///CPY v3.8 5/30/95, CPP, add C++ support
#ifndef _LABSTR
#define _LABSTR
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif /* __cplusplus */
///
#ifndef _OTYPES
#define MAXLINE 80
#define COM_LENGTH 380
#define NAME_SIZE 25
#define SHORT_NAME_SIZE 12
#define WORD_SIZE 40
#ifndef USHORT
#define USHORT WORD
#define WWORD WORD
#define ULONG DWORD
typedef USHORT FAR *LPUSHORT;
typedef ULONG FAR *LPULONG;
#endif
/// EJP v4.13 07-25-96 HUGE_KEYWORD_OBSOLETE_IN_32BIT
///typedef BYTE huge *HPSTR;
#ifdef _WIN32
typedef BYTE FAR *HPSTR;
#else // !_WIN32
typedef BYTE huge *HPSTR;
#endif // _WIN32
/// end HUGE_KEYWORD_OBSOLETE_IN_32BIT
typedef double FAR *LPDOUBLE;
#endif
// def only for DLLs
#define LABLOCAL static int
#define LABGLOBAL int
#ifdef WIN30
#define HFILE int
#define HGLOBAL HANDLE
#define _tzset() tzset()
#define _timezone timezone
#define _timeb timeb
#define _getcwd(x,y) getcwd(x,y)
#define _ftime(x) ftime(x)
#define LAB_NO_HWIRTE
#endif
#define MEM_COPY_N(d,s,n) LABUTIL_MemCopy(s,d,n)
/* lpRemains = LABUTIL_next_token(lpBuffer,lpSource);
*/
LPSTR FAR PASCAL LABUTIL_next_token(LPSTR,LPSTR);
///CPY v4.11 6/26/96 ADD_FUNC_PROTOTYPE
//LPSTR FAR PASCAL LABUTIL_next_token_sep(LPSTR,LPSTR);
LPSTR FAR PASCAL LABUTIL_next_token_sep(LPSTR lpBuffer,LPSTR lpstr,LPSTR lpList);
///
LPSTR FAR PASCAL LABUTIL_next_word(LPSTR,LPSTR);
/* similar to next_token but does not recorgnize quotes */
void FAR PASCAL LABUTIL_strip(LPSTR);/* remove all white spaces in str */
#define strip(str) LABUTIL_strip(str)
/* LABUTIL_real2str(input,lpBuffer,lpFormat);
* lpFormat: "*" free format
* "5.2f" 10.00
* "5.2g" 1E1
*/
void FAR PASCAL LABUTIL_real2str(double,LPSTR,LPSTR);
/*
* round a real number
* to specified number of significent
* digits.
* out = LABUTIL_real2real(in,n_decimal_pts);
*/
double FAR PASCAL LABUTIL_real2real(double,short);
/* This routine is similar to the C-LIB
* routine gcvt
* converts a real number to a string
* by specifying a significant digits
*/
/*double FAR PASCAL LABUTIL_GCVT(double,int,LPSTR);*/
#define DECIMAL_MAX 1E12
#define DECIMAL_MIN 1E-6
#define IS_D 0x01
#define IS_G 0x02
#define IS_E 0x04
#define IS_GCVT 0x08
#define REM_END_ZEROS 0x10
#define IS_UPPER 0x80
#define IS_LOWER 0x00
#define FORMAT_MASK 0x0F
/*First parameter is the number to be converted, next the format
given as IS_E or IS_D,then the total no of digits, and then the no
of digits after the decimal point.The last parameter is the string
where the result is placed */
int FAR PASCAL LABUTIL_real_str(double,BYTE,BYTE,BYTE,LPSTR);
#define LABUTIL_GCVT(x,ndigits,lpstr) LABUTIL_real_str(x,IS_GCVT,ndigits,0,lpstr)
void FAR PASCAL LABUTIL_int2fixstr(long,int,LPSTR);
double FAR PASCAL LABUTIL_str2real(LPSTR);
int FAR PASCAL LABUTIL_cvtstr2real(LPSTR,double FAR *);
int FAR PASCAL LABUTIL_cvtstr2int(LPSTR,int FAR *);
long FAR PASCAL LABUTIL_str2int(LPSTR);
LPSTR FAR PASCAL LABUTIL_int2str(long);
long FAR PASCAL LABUTIL_hexstr2int(LPSTR);
/* convert time in 10ms into a
* a string
*/
/// CPY v4.133 9/16/96 CLEAN_UP_AFTER_JLIU_ANU_FILE_OPEN_BUG_32
DLL_EXPORT(int) LABUTIL_32WriteFile(HFILE hFile,LPVOID lpBuffer,DWORD dwBytes);
///ANU v4.94 3/06/97 B1794 CHANGED_OPENFILE_TO_CREATEFILE
//DLL_EXPORT(int) LABUTIL_32CreateFile(LPSTR lpFilename, DWORD dwMode);
DLL_EXPORT(int) LABUTIL_32FileCreate(LPCSTR lpFilename, DWORD dwMode, DWORD dwShare );
#define LABUTIL_32CreateFile(lpFilename, dwMode) \
LABUTIL_32FileOpen(lpFilename, dwMode, 0, OPEN_ALWAYS);
DLL_EXPORT(int) LABUTIL_32FileOpen(LPCSTR lpFilename,DWORD dwMode,DWORD dwShare,DWORD dwOpenAs );
DLL_EXPORT(int) LABUTIL_32FileTest(LPCSTR lpFilename);
///end CHANGED_OPENFILE_TO_CREATEFILE
///
/*
#define T2S_AMPM 0x0100 otherwise in 24 hours
lowbyte defined the format
enum {T2S_HOURS = 0,T2S_MIN,T2S_SEC,T2S_SUBSEC};
*/
enum {T2S_SEC=1,T2S_SUBSEC,T2S_AMPM };
/* Find character in string
*
* lpChar = LABUTIL_strchr(lpSource,theChar,cntrl);
*/
LPSTR FAR PASCAL LABUTIL_strchr(HPSTR,short,USHORT);
/* cntrl is one of the followings */
#define SC_IGNORE_QUOTE 0x0001/* otherwise, those hidden in (), {}, [] will not be found */
#define SC_FIND_LAST 0x0002/* search from the end of the string */
#define SC_FIND_INSIDE 0x0004
#define SC_BEG_END_SPACE 0x0010
/// CPY v3.782 CHAR_POSITION
#define SC_IGNORE_CASE 0x0020
///
/* special characters for theChar */
#define SC_CHAR_SPACE -1 /* any white space */
#define SC_CHAR_OP -2 /* any of +,-,*,/,^ */
/// ML 5/1/96 PUT_IT_INTO_LABUTIL_SO_THAT_EVERYBODY_CAN_USE_IT
#define CHAR_POSITION_FROM_BEG(str, c) LABUTIL_strchr((HPSTR)str, c, SC_IGNORE_QUOTE)
#define CHAR_POSITION_FROM_END(str, c) LABUTIL_strchr((HPSTR)str, c, SC_FIND_LAST | SC_IGNORE_QUOTE)
/// end PUT_IT_INTO_LABUTIL_SO_THAT_EVERYBODY_CAN_USE_IT
/* get string inside possible
* parenthesis: (string) -> string
*
* lpString = LABUTIL_str_inside(lpSource);
*/
#define get_next_argument(str) LABUTIL_strchr(str,',',SC_IGNORE_QUOTE|SC_BEG_END_SPACE) //dsb 3.69 for FUM labcom etc.
/// JLIU v4.979 5/2/97 GET_TEXT_WITH_LEAD_SPACE
///LPSTR FAR PASCAL LABUTIL_str_inside(LPSTR);
LPSTR FAR PASCAL LABUTIL_str_inside(LPSTR, short);
///end GET_TEXT_WITH_LEAD_SPACE
/* convert \xhh type into ascii
* also support \n, \t, \r, \d
*/
int FAR PASCAL LABUTIL_str2ascii(LPSTR);
/* Addition to the Windows GetPrivateProfile functions
* Please refer to Windows SDK for the others
*/
double FAR PASCAL LABUTIL_GetPrivateProfileReal(LPSTR,LPSTR,double,LPSTR);
#define LABDATE_HHMM 0
#define LABDATE_HHMMSS 2
#define LABDATE_HHMMSS_NUM 9
#define LABDATE_HHMM_NUM 8
#define LABDATE_HHMMPM 5
/// CPY v3.782 HH_MM_SS_DDD
//void FAR PASCAL LABUTIL_time2str(double, USHORT, LPSTR);
int FAR PASCAL LABUTIL_time2str(double, USHORT, LPSTR);
/// enabled when lpstr is LPNULL
#define LABT_CNTRL_GET_FULL_PREC_INDEX 0x1000
#define LABT_SET_DIVIDER 0x0000
///
double FAR PASCAL LABUTIL_str2time(LPSTR,USHORT);
double FAR PASCAL LABUTIL_str2date(LPSTR,USHORT,USHORT);
/// RB 3/16/99 t3668 v6.0174 MONTH_DAY_FORMAT_WRONG_INTERPRETATION_IN_JAPANESE
double FAR PASCAL LABUTIL_str2date_ex(LPSTR lpdatestr,WORD cntrl,WORD nFmt);
/// end MONTH_DAY_FORMAT_WRONG_INTERPRETATION_IN_JAPANESE
USHORT FAR PASCAL LABUTIL_date2str(double,USHORT,LPSTR);
/// RB 6/24/98 t3594 v6.0125 DATE_TIME_CUSTOM_FORMAT
#define NUMBER_OF_DATE_CUSTOM_FORMATS 2
#define DATE_CUSTOM_FORMAT_BEGIN NUM_DATE_FORMAT
#define DATE_CUSTOM_FORMAT_END (DATE_CUSTOM_FORMAT_BEGIN + NUMBER_OF_DATE_CUSTOM_FORMATS)
WORD FAR PASCAL LABUTIL_date2str_custom(double rDate, int nCustomFormat, LPSTR lpszFormattedDate);
#define SET_CUSTOM_DATE_FORMAT 0x00000000
#define GET_CUSTOM_DATE_FORMAT 0x00000001
/// EJP 03-23-99 v6.0176 t5005 IMPLEMENT_ABILITY_TO_RESET_CUSTOM_DATE_FORMATS
#define CDF_INITIALIZE 0x00000002
/// end IMPLEMENT_ABILITY_TO_RESET_CUSTOM_DATE_FORMATS
#define CHECK_CUSTOM_DATE_FORMAT 0x00000010
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -