2010-11-28 10:37 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
+ config/hbc.cfg
+ Added .c source formatter config file for uncrustify source code formatter,
tailored to mimic Harbour C formatting style.
http://uncrustify.sourceforge.net/
This tool looks very promising to save manual formatting time.
(in our case it's useful for new code, existing code is mostly
quite well formatted in most parts)
; WARNING: The config is currently at experimental stage (IOW it's
not perfect), so don't use it to format any existing
Harbour source, but you may try it with your local source
which you want to submit or see how would it look in
Harbour-style.
* contrib/hbtip/url.prg
! Fixed to store passed url in :cAddress VAR.
Like with most Harbour OOP code, this simple change may
introduce hard-to-detect imcompatibility,
so check your code.
- contrib/rddbm/rddbmcdx.hbp
+ contrib/rddbm/rddbm.hbp
- contrib/rddbm/rddbmcdx.hbc
+ contrib/rddbm/rddbm.hbc
! Renamed too.
* src/codepage/cpsk852.c
* src/codepage/cpskiso.c
* src/codepage/cpskwin.c
* Trying to add digraphs. (doesn't work here, but can't find out why)
; TODO: Update Kamenicky. (can't even do it with hb_translate(),
as it's messed up the first time I edit it.
; TODO: Apply final fixes to CS CPs.
* contrib/sddoci/sddoci.hbp
+ Added support for implib creation for win x64 targets.
* package/winuni/RELNOTES
* OCILIB version update.
* contrib/rddbm/bmdbfcdx.c
* contrib/hbhttpd/core.prg
* contrib/hbhttpd/widgets.prg
* Formatting.
This commit is contained in:
@@ -16,6 +16,51 @@
|
||||
The license applies to all entries newer than 2009-04-28.
|
||||
*/
|
||||
|
||||
2010-11-28 10:37 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
+ config/hbc.cfg
|
||||
+ Added .c source formatter config file for uncrustify source code formatter,
|
||||
tailored to mimic Harbour C formatting style.
|
||||
http://uncrustify.sourceforge.net/
|
||||
This tool looks very promising to save manual formatting time.
|
||||
(in our case it's useful for new code, existing code is mostly
|
||||
quite well formatted in most parts)
|
||||
; WARNING: The config is currently at experimental stage (IOW it's
|
||||
not perfect), so don't use it to format any existing
|
||||
Harbour source, but you may try it with your local source
|
||||
which you want to submit or see how would it look in
|
||||
Harbour-style.
|
||||
|
||||
* contrib/hbtip/url.prg
|
||||
! Fixed to store passed url in :cAddress VAR.
|
||||
Like with most Harbour OOP code, this simple change may
|
||||
introduce hard-to-detect imcompatibility,
|
||||
so check your code.
|
||||
|
||||
- contrib/rddbm/rddbmcdx.hbp
|
||||
+ contrib/rddbm/rddbm.hbp
|
||||
- contrib/rddbm/rddbmcdx.hbc
|
||||
+ contrib/rddbm/rddbm.hbc
|
||||
! Renamed too.
|
||||
|
||||
* src/codepage/cpsk852.c
|
||||
* src/codepage/cpskiso.c
|
||||
* src/codepage/cpskwin.c
|
||||
* Trying to add digraphs. (doesn't work here, but can't find out why)
|
||||
; TODO: Update Kamenicky. (can't even do it with hb_translate(),
|
||||
as it's messed up the first time I edit it.
|
||||
; TODO: Apply final fixes to CS CPs.
|
||||
|
||||
* contrib/sddoci/sddoci.hbp
|
||||
+ Added support for implib creation for win x64 targets.
|
||||
|
||||
* package/winuni/RELNOTES
|
||||
* OCILIB version update.
|
||||
|
||||
* contrib/rddbm/bmdbfcdx.c
|
||||
* contrib/hbhttpd/core.prg
|
||||
* contrib/hbhttpd/widgets.prg
|
||||
* Formatting.
|
||||
|
||||
2010-11-27 21:11 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* contrib/hbplist
|
||||
- contrib/rddbmcdx
|
||||
|
||||
579
harbour/config/hbc.cfg
Normal file
579
harbour/config/hbc.cfg
Normal file
@@ -0,0 +1,579 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
# uncrustify config file for Harbour C/C++ sources.
|
||||
# http://uncrustify.sourceforge.net/
|
||||
|
||||
indent_with_tabs = 0 # 1=indent to level only, 2=indent with tabs
|
||||
align_with_tabs = false # use tabs to align
|
||||
align_on_tabstop = TRUE # align on tabstops
|
||||
input_tab_size = 8 # original tab size
|
||||
output_tab_size = 3 # new tab size
|
||||
indent_columns = output_tab_size
|
||||
|
||||
indent_label = 2 # pos: absolute col, neg: relative column
|
||||
|
||||
|
||||
#
|
||||
# inter-symbol newlines
|
||||
#
|
||||
|
||||
nl_enum_brace = force # "enum {" vs "enum \n {"
|
||||
nl_union_brace = force # "union {" vs "union \n {"
|
||||
nl_struct_brace = force # "struct {" vs "struct \n {"
|
||||
nl_do_brace = force # "do {" vs "do \n {"
|
||||
nl_if_brace = force # "if () {" vs "if () \n {"
|
||||
nl_for_brace = force # "for () {" vs "for () \n {"
|
||||
nl_else_brace = force # "else {" vs "else \n {"
|
||||
nl_while_brace = force # "while () {" vs "while () \n {"
|
||||
nl_switch_brace = force # "switch () {" vs "switch () \n {"
|
||||
nl_brace_while = force # "} while" vs "} \n while" - cuddle while
|
||||
nl_brace_else = force # "} else" vs "} \n else" - cuddle else
|
||||
nl_func_var_def_blk = 1
|
||||
nl_fcall_brace = force # "list_for_each() {" vs "list_for_each()\n{"
|
||||
nl_fdef_brace = force # "int foo() {" vs "int foo()\n{"
|
||||
# nl_after_return = TRUE;
|
||||
# nl_before_case = 1
|
||||
|
||||
|
||||
#
|
||||
# Source code modifications
|
||||
#
|
||||
|
||||
mod_paren_on_return = remove # "return 1;" vs "return (1);"
|
||||
# mod_full_brace_if = remove # "if (a) a--;" vs "if (a) { a--; }"
|
||||
# mod_full_brace_for = remove # "for () a--;" vs "for () { a--; }"
|
||||
# mod_full_brace_do = remove # "do a--; while ();" vs "do { a--; } while ();"
|
||||
# mod_full_brace_while = remove # "while (a) a--;" vs "while (a) { a--; }"
|
||||
|
||||
# Add or remove braces on single-line 'do' statement
|
||||
mod_full_brace_do = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove braces on single-line 'for' statement
|
||||
mod_full_brace_for = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove braces on single-line function definitions. (Pawn)
|
||||
mod_full_brace_function = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'.
|
||||
mod_full_brace_if = remove # ignore/add/remove/force
|
||||
|
||||
# Make all if/elseif/else statements in a chain be braced or not. Overrides mod_full_brace_if.
|
||||
# If any must be braced, they are all braced. If all can be unbraced, then the braces are removed.
|
||||
mod_full_brace_if_chain = false # false/true
|
||||
|
||||
# Don't remove braces around statements that span N newlines
|
||||
mod_full_brace_nl = 0 # number
|
||||
|
||||
# Add or remove braces on single-line 'while' statement
|
||||
mod_full_brace_while = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove braces on single-line 'using ()' statement
|
||||
mod_full_brace_using = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove unnecessary paren on 'return' statement
|
||||
mod_paren_on_return = remove # ignore/add/remove/force
|
||||
|
||||
# Whether to change optional semicolons to real semicolons
|
||||
mod_pawn_semicolon = false # false/true
|
||||
|
||||
# Add parens on 'while' and 'if' statement around bools
|
||||
mod_full_paren_if_bool = false # false/true
|
||||
|
||||
# Whether to remove superfluous semicolons
|
||||
mod_remove_extra_semicolon = false # false/true
|
||||
|
||||
# If a function body exceeds the specified number of newlines and doesn't have a comment after
|
||||
# the close brace, a comment will be added.
|
||||
mod_add_long_function_closebrace_comment = 0 # number
|
||||
|
||||
# If a switch body exceeds the specified number of newlines and doesn't have a comment after
|
||||
# the close brace, a comment will be added.
|
||||
mod_add_long_switch_closebrace_comment = 0 # number
|
||||
|
||||
# If an #ifdef body exceeds the specified number of newlines and doesn't have a comment after
|
||||
# the #else, a comment will be added.
|
||||
mod_add_long_ifdef_endif_comment = 0 # number
|
||||
|
||||
# If an #ifdef or #else body exceeds the specified number of newlines and doesn't have a comment after
|
||||
# the #endif, a comment will be added.
|
||||
mod_add_long_ifdef_else_comment = 0 # number
|
||||
|
||||
# If TRUE, will sort consecutive single-line 'import' statements [Java, D]
|
||||
mod_sort_import = false # false/true
|
||||
|
||||
# If TRUE, will sort consecutive single-line 'using' statements [C#]
|
||||
mod_sort_using = false # false/true
|
||||
|
||||
# If TRUE, will sort consecutive single-line '#include' statements [C/C++] and '#import' statements [Obj-C]
|
||||
# This is generally a bad idea, as it may break your code.
|
||||
mod_sort_include = false # false/true
|
||||
|
||||
# If TRUE, it will move a 'break' that appears after a fully braced 'case' before the close brace.
|
||||
mod_move_case_break = false # false/true
|
||||
|
||||
# Will add or remove the braces around a fully braced case statement.
|
||||
# Will only remove the braces if there are no variable declarations in the block.
|
||||
mod_case_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# If TRUE, it will remove a void 'return;' that appears as the last statement in a function.
|
||||
mod_remove_empty_return = true # false/true
|
||||
|
||||
|
||||
#
|
||||
# inter-character spacing options
|
||||
#
|
||||
|
||||
# sp_return_paren = force # "return (1);" vs "return(1);"
|
||||
sp_sizeof_paren = remove # "sizeof (int)" vs "sizeof(int)"
|
||||
sp_before_sparen = remove # "if (" vs "if("
|
||||
sp_after_sparen = force # "if () {" vs "if (){"
|
||||
sp_after_cast = force # "(int) a" vs "(int)a"
|
||||
sp_inside_braces = add # "{ 1 }" vs "{1}"
|
||||
sp_inside_braces_struct = add # "{ 1 }" vs "{1}"
|
||||
sp_inside_braces_enum = add # "{ 1 }" vs "{1}"
|
||||
sp_assign = add
|
||||
sp_arith = add
|
||||
sp_bool = add
|
||||
sp_compare = add
|
||||
sp_assign = add
|
||||
sp_after_comma = add
|
||||
sp_func_def_paren = remove # "int foo (){" vs "int foo(){"
|
||||
sp_func_call_paren = remove # "foo (" vs "foo("
|
||||
sp_func_proto_paren = remove # "int foo ();" vs "int foo();"
|
||||
|
||||
#
|
||||
# Spacing options
|
||||
#
|
||||
|
||||
# Add or remove space around arithmetic operator '+', '-', '/', '*', etc
|
||||
sp_arith = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space around assignment operator '=', '+=', etc
|
||||
sp_assign = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space around assignment operator '=' in a prototype
|
||||
sp_assign_default = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before assignment operator '=', '+=', etc. Overrides sp_assign.
|
||||
sp_before_assign = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after assignment operator '=', '+=', etc. Overrides sp_assign.
|
||||
sp_after_assign = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space around assignment '=' in enum
|
||||
sp_enum_assign = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before assignment '=' in enum. Overrides sp_enum_assign.
|
||||
sp_enum_before_assign = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after assignment '=' in enum. Overrides sp_enum_assign.
|
||||
sp_enum_after_assign = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space around preprocessor '##' concatenation operator. Default=Add
|
||||
sp_pp_concat = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after preprocessor '#' stringify operator. Also affects the '#@' charizing operator. Default=Add
|
||||
sp_pp_stringify = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space around boolean operators '&&' and '||'
|
||||
sp_bool = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space around compare operator '<', '>', '==', etc
|
||||
sp_compare = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space inside '(' and ')'
|
||||
sp_inside_paren = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between nested parens
|
||||
sp_paren_paren = force # ignore/add/remove/force
|
||||
|
||||
# Whether to balance spaces inside nested parens ???
|
||||
sp_balance_nested_parens = false # false/true
|
||||
|
||||
# Add or remove space between ')' and '{'
|
||||
sp_paren_brace = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before pointer star '*'
|
||||
sp_before_ptr_star = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before pointer star '*' that isn't followed by a variable name
|
||||
# If set to 'ignore', sp_before_ptr_star is used instead. ??????
|
||||
sp_before_unnamed_ptr_star = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between pointer stars '*'
|
||||
sp_between_ptr_star = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after pointer star '*', if followed by a word.
|
||||
sp_after_ptr_star = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after a pointer star '*', if followed by a func proto/def.
|
||||
sp_after_ptr_star_func = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before a pointer star '*', if followed by a func proto/def.
|
||||
sp_before_ptr_star_func = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before a reference sign '&'
|
||||
sp_before_byref = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before a reference sign '&' that isn't followed by a variable name
|
||||
# If set to 'ignore', sp_before_byref is used instead.
|
||||
sp_before_unnamed_byref = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after reference sign '&', if followed by a word.
|
||||
sp_after_byref = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after a reference sign '&', if followed by a func proto/def.
|
||||
sp_after_byref_func = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before a reference sign '&', if followed by a func proto/def.
|
||||
sp_before_byref_func = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between type and word. Default=Force
|
||||
sp_after_type = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space in 'template <' vs 'template<'.
|
||||
# If set to ignore, sp_before_angle is used.
|
||||
sp_template_angle = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before '<>'
|
||||
sp_before_angle = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space inside '<' and '>'
|
||||
sp_inside_angle = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after '<>'
|
||||
sp_after_angle = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between '<>' and '(' as found in 'new List<byte>();'
|
||||
sp_angle_paren = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between '<>' and a word as in 'List<byte> m;'
|
||||
sp_angle_word = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between '>' and '>' in '>>' (template stuff C++/C# only). Default=Add
|
||||
sp_angle_shift = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before '(' of 'if', 'for', 'switch', and 'while'
|
||||
sp_before_sparen = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space inside if-condition '(' and ')'
|
||||
sp_inside_sparen = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before if-condition ')'. Overrides sp_inside_sparen.
|
||||
sp_inside_sparen_close = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after ')' of 'if', 'for', 'switch', and 'while'
|
||||
sp_after_sparen = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while'
|
||||
sp_sparen_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between 'invariant' and '(' in the D language.
|
||||
sp_invariant_paren = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the ')' in 'invariant (C) c' in the D language.
|
||||
sp_after_invariant_paren = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before empty statement ';' on 'if', 'for' and 'while'
|
||||
sp_special_semi = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before ';'. Default=Remove
|
||||
sp_before_semi = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before ';' in non-empty 'for' statements
|
||||
sp_before_semi_for = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before a semicolon of an empty part of a for statement.
|
||||
sp_before_semi_for_empty = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after ';', except when followed by a comment. Default=Add
|
||||
sp_after_semi = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after ';' in non-empty 'for' statements. Default=Force
|
||||
sp_after_semi_for = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the final semicolon of an empty part of a for statement: for ( ; ; <here> ).
|
||||
sp_after_semi_for_empty = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before '[' (except '[]')
|
||||
sp_before_square = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before '[]'
|
||||
sp_before_squares = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space inside '[' and ']'
|
||||
sp_inside_square = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after ','
|
||||
sp_after_comma = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before ','
|
||||
sp_before_comma = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between an open paren and comma: '(,' vs '( ,'
|
||||
sp_paren_comma = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before the variadic '...' when preceded by a non-punctuator
|
||||
sp_before_ellipsis = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after class ':'
|
||||
sp_after_class_colon = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before class ':'
|
||||
sp_before_class_colon = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before case ':'. Default=Remove
|
||||
sp_before_case_colon = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between 'operator' and operator sign
|
||||
sp_after_operator = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between the operator symbol and the open paren, as in 'operator ++('
|
||||
sp_after_operator_sym = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after C/D cast, i.e. 'cast(int)a' vs 'cast(int) a' or '(int)a' vs '(int) a'
|
||||
sp_after_cast = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove spaces inside cast parens
|
||||
sp_inside_paren_cast = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between the type and open paren in a C++ cast, i.e. 'int(exp)' vs 'int (exp)'
|
||||
sp_cpp_cast_paren = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between 'sizeof' and '('
|
||||
sp_sizeof_paren = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the tag keyword (Pawn)
|
||||
sp_after_tag = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space inside enum '{' and '}'
|
||||
sp_inside_braces_enum = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space inside struct/union '{' and '}'
|
||||
sp_inside_braces_struct = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space inside '{' and '}'
|
||||
sp_inside_braces = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space inside '{}'
|
||||
sp_inside_braces_empty = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between return type and function name
|
||||
# A minimum of 1 is forced except for pointer return types.
|
||||
sp_type_func = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between function name and '(' on function declaration
|
||||
sp_func_proto_paren = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between function name and '(' on function definition
|
||||
sp_func_def_paren = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space inside empty function '()'
|
||||
sp_inside_fparens = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space inside function '(' and ')'
|
||||
sp_inside_fparen = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between ']' and '(' when part of a function call.
|
||||
sp_square_fparen = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between ')' and '{' of function
|
||||
sp_fparen_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between function name and '(' on function calls
|
||||
sp_func_call_paren = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between function name and '()' on function calls without parameters.
|
||||
# If set to 'ignore' (the default), sp_func_call_paren is used.
|
||||
sp_func_call_paren_empty = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between the user function name and '(' on function calls
|
||||
# You need to set a keyword to be a user function, like this: 'set func_call_user _' in the config file.
|
||||
sp_func_call_user_paren = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between a constructor/destructor and the open paren
|
||||
sp_func_class_paren = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between 'return' and '('
|
||||
sp_return_paren = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between '__attribute__' and '('
|
||||
sp_attribute_paren = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between 'defined' and '(' in '#if defined (FOO)'
|
||||
sp_defined_paren = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between 'throw' and '(' in 'throw (something)'
|
||||
sp_throw_paren = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between macro and value
|
||||
sp_macro = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between macro function ')' and value
|
||||
sp_macro_func = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between 'else' and '{' if on the same line
|
||||
sp_else_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between '}' and 'else' if on the same line
|
||||
sp_brace_else = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between '}' and the name of a typedef on the same line
|
||||
sp_brace_typedef = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between 'catch' and '{' if on the same line
|
||||
sp_catch_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between '}' and 'catch' if on the same line
|
||||
sp_brace_catch = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between 'finally' and '{' if on the same line
|
||||
sp_finally_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between '}' and 'finally' if on the same line
|
||||
sp_brace_finally = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between 'try' and '{' if on the same line
|
||||
sp_try_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between get/set and '{' if on the same line
|
||||
sp_getset_brace = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before the '::' operator
|
||||
sp_before_dc = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the '::' operator
|
||||
sp_after_dc = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove around the D named array initializer ':' operator
|
||||
sp_d_array_colon = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the '!' (not) operator. Default=Remove
|
||||
sp_not = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the '~' (invert) operator. Default=Remove
|
||||
sp_inv = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the '&' (address-of) operator. Default=Remove
|
||||
# This does not affect the spacing after a '&' that is part of a type.
|
||||
sp_addr = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space around the '.' or '->' operators. Default=Remove
|
||||
sp_member = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the '*' (dereference) operator. Default=Remove
|
||||
# This does not affect the spacing after a '*' that is part of a type.
|
||||
sp_deref = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7'. Default=Remove
|
||||
sp_sign = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before or after '++' and '--', as in '(--x)' or 'y++;'. Default=Remove
|
||||
sp_incdec = remove # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before a backslash-newline at the end of a line. Default=Add
|
||||
sp_before_nl_cont = add # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the scope '+' or '-', as in '-(void) foo;' or '+(int) bar;'
|
||||
sp_after_oc_scope = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the colon in message specs
|
||||
# '-(int) f:(int) x;' vs '-(int) f: (int) x;'
|
||||
sp_after_oc_colon = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before the colon in message specs
|
||||
# '-(int) f: (int) x;' vs '-(int) f : (int) x;'
|
||||
sp_before_oc_colon = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the colon in message specs
|
||||
# '[object setValue:1];' vs '[object setValue: 1];'
|
||||
sp_after_send_oc_colon = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before the colon in message specs
|
||||
# '[object setValue:1];' vs '[object setValue :1];'
|
||||
sp_before_send_oc_colon = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the (type) in message specs
|
||||
# '-(int)f: (int) x;' vs '-(int)f: (int)x;'
|
||||
sp_after_oc_type = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the first (type) in message specs
|
||||
# '-(int) f:(int)x;' vs '-(int)f:(int)x;'
|
||||
sp_after_oc_return_type = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between '@selector' and '('
|
||||
# '@selector(msgName)' vs '@selector (msgName)'
|
||||
# Also applies to @protocol() constructs
|
||||
sp_after_oc_at_sel = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space between '@selector(x)' and the following word
|
||||
# '@selector(foo) a:' vs '@selector(foo)a:'
|
||||
sp_after_oc_at_sel_parens = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space inside '@selector' parens
|
||||
# '@selector(foo)' vs '@selector( foo )'
|
||||
# Also applies to @protocol() constructs
|
||||
sp_inside_oc_at_sel_parens = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space before a block pointer caret
|
||||
# '^int (int arg){...}' vs. ' ^int (int arg){...}'
|
||||
sp_before_oc_block_caret = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after a block pointer caret
|
||||
# '^int (int arg){...}' vs. '^ int (int arg){...}'
|
||||
sp_after_oc_block_caret = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space around the ':' in 'b ? t : f'
|
||||
sp_cond_colon = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space around the '?' in 'b ? t : f'
|
||||
sp_cond_question = ignore # ignore/add/remove/force
|
||||
|
||||
# Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make sense here.
|
||||
sp_case_label = ignore # ignore/add/remove/force
|
||||
|
||||
# Control the space around the D '..' operator.
|
||||
sp_range = ignore # ignore/add/remove/force
|
||||
|
||||
# Control the space after the opening of a C++ comment '// A' vs '//A'
|
||||
sp_cmt_cpp_start = ignore # ignore/add/remove/force
|
||||
|
||||
# Controls the spaces between #else or #endif and a trailing comment
|
||||
sp_endif_cmt = ignore # ignore/add/remove/force
|
||||
|
||||
|
||||
#
|
||||
# Aligning stuff
|
||||
#
|
||||
|
||||
align_enum_equ_span = 4 # '=' in enum definition
|
||||
# align_nl_cont = TRUE
|
||||
# align_var_def_span = 2
|
||||
# align_var_def_inline = TRUE
|
||||
# align_var_def_star = FALSE
|
||||
# align_var_def_colon = TRUE
|
||||
# align_assign_span = 1
|
||||
align_struct_init_span = 3 # align stuff in a structure init '= { }'
|
||||
align_right_cmt_span = 3
|
||||
# align_pp_define_span = 8;
|
||||
# align_pp_define_gap = 4;
|
||||
|
||||
# cmt_star_cont = FALSE
|
||||
|
||||
# indent_brace = 0
|
||||
|
||||
|
||||
#
|
||||
# Line Splitting options
|
||||
#
|
||||
|
||||
# Try to limit code width to N number of columns
|
||||
code_width = 100 # number
|
||||
|
||||
# Whether to fully split long 'for' statements at semi-colons
|
||||
ls_for_split_full = false # false/true
|
||||
|
||||
# Whether to fully split long function protos/calls at commas
|
||||
ls_func_split_full = false # false/true
|
||||
@@ -31,26 +31,26 @@ MEMVAR server, get, post, cookie, session
|
||||
|
||||
CREATE CLASS UHttpd
|
||||
/* Settings */
|
||||
DATA nPort INIT 80
|
||||
DATA cBindAddress INIT "0.0.0.0"
|
||||
DATA bLogAccess INIT {|| NIL }
|
||||
DATA bLogError INIT {|| NIL }
|
||||
DATA bTrace INIT {|| NIL }
|
||||
DATA bIdle INIT {|| NIL }
|
||||
DATA hMount INIT { => }
|
||||
VAR nPort INIT 80
|
||||
VAR cBindAddress INIT "0.0.0.0"
|
||||
VAR bLogAccess INIT {|| NIL }
|
||||
VAR bLogError INIT {|| NIL }
|
||||
VAR bTrace INIT {|| NIL }
|
||||
VAR bIdle INIT {|| NIL }
|
||||
VAR hMount INIT { => }
|
||||
|
||||
/* Results */
|
||||
DATA cError INIT ""
|
||||
VAR cError INIT ""
|
||||
|
||||
/* Private */
|
||||
DATA hmtxQueue
|
||||
DATA hmtxLog
|
||||
DATA hmtxSession
|
||||
VAR hmtxQueue
|
||||
VAR hmtxLog
|
||||
VAR hmtxSession
|
||||
|
||||
DATA hListen
|
||||
DATA aSession
|
||||
VAR hListen
|
||||
VAR hSession
|
||||
|
||||
DATA lStop
|
||||
VAR lStop
|
||||
|
||||
METHOD RUN()
|
||||
METHOD Stop()
|
||||
@@ -89,13 +89,13 @@ METHOD RUN() CLASS UHttpd
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
IF !hb_socketBind( Self:hListen, { HB_SOCKET_AF_INET, Self:cBindAddress, Self:nPort } )
|
||||
IF ! hb_socketBind( Self:hListen, { HB_SOCKET_AF_INET, Self:cBindAddress, Self:nPort } )
|
||||
Self:cError := "Bind error " + hb_ntos( hb_socketGetError() )
|
||||
hb_socketClose( Self:hListen )
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
IF !hb_socketListen( Self:hListen )
|
||||
IF ! hb_socketListen( Self:hListen )
|
||||
Self:cError := "Listen error " + hb_ntos( hb_socketGetError() )
|
||||
hb_socketClose( Self:hListen )
|
||||
RETURN .F.
|
||||
@@ -107,7 +107,7 @@ METHOD RUN() CLASS UHttpd
|
||||
NEXT
|
||||
|
||||
Self:lStop := .F.
|
||||
Self:aSession := { => }
|
||||
Self:hSession := { => }
|
||||
|
||||
DO WHILE .T.
|
||||
IF Empty( hSocket := hb_socketAccept( Self:hListen,, 1000 ) )
|
||||
@@ -140,7 +140,7 @@ METHOD RUN() CLASS UHttpd
|
||||
|
||||
/* End child threads */
|
||||
hb_mutexLock( Self:hmtxSession )
|
||||
HB_HEVAL( Self:aSession, {|k, v| hb_mutexNotify( v[2], NIL ), HB_SYMBOL_UNUSED( k ) } )
|
||||
HB_HEVAL( Self:hSession, {|k, v| hb_mutexNotify( v[ 2 ], NIL ), HB_SYMBOL_UNUSED( k ) } )
|
||||
hb_mutexUnlock( Self:hmtxSession )
|
||||
AEval( aThreads, {|| hb_mutexNotify( Self:hmtxQueue, NIL ) } )
|
||||
AEval( aThreads, {|h| hb_threadJoin( h ) } )
|
||||
@@ -168,7 +168,7 @@ METHOD LogAccess() CLASS UHttpd
|
||||
hb_mutexLock( Self:hmtxLog )
|
||||
Eval( Self:bLogAccess, ;
|
||||
server[ "REMOTE_ADDR" ] + " - - [" + Right( cDate, 2 ) + "/" + ;
|
||||
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }[VAL(SUBSTR(cDate, 5, 2))] + ;
|
||||
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }[ VAL( SUBSTR( cDate, 5, 2 ) ) ] + ;
|
||||
"/" + Left( cDate, 4 ) + ":" + cTime + ' +0000] "' + server[ "REQUEST_ALL" ] + '" ' + ;
|
||||
hb_ntos( t_nStatusCode ) + " " + hb_ntos( Len( t_cResult ) ) + ;
|
||||
' "' + server[ "HTTP_REFERER" ] + '" "' + server[ "HTTP_USER_AGENT" ] + ;
|
||||
@@ -189,8 +189,8 @@ STATIC FUNCTION ProcessConnection( oServer )
|
||||
EXIT
|
||||
ENDIF
|
||||
|
||||
hSocket := aI[1]
|
||||
cRequest := aI[2]
|
||||
hSocket := aI[ 1 ]
|
||||
cRequest := aI[ 2 ]
|
||||
|
||||
BEGIN SEQUENCE
|
||||
|
||||
@@ -329,16 +329,16 @@ STATIC FUNCTION ProcessRequest( oServer, hSocket, cBuffer )
|
||||
ENDIF
|
||||
|
||||
hb_mutexLock( oServer:hmtxSession )
|
||||
IF cSID == NIL .OR. !( cSID $ oServer:aSession )
|
||||
IF cSID == NIL .OR. !( cSID $ oServer:hSession )
|
||||
|
||||
/* create new session */
|
||||
|
||||
cSID := HB_MD5( DToS( Date() ) + Time() + Str( HB_RANDOM(), 15, 12 ) )
|
||||
hmtx := hb_mutexCreate()
|
||||
oServer:aSession[ cSID ] := { hb_threadSelf(), hmtx, { => } }
|
||||
oServer:hSession[ cSID ] := { hb_threadSelf(), hmtx, { => } }
|
||||
|
||||
// PRIVATE
|
||||
session := oServer:aSession[ cSID, 3 ]
|
||||
session := oServer:hSession[ cSID, 3 ]
|
||||
|
||||
hb_mutexUnlock( oServer:hmtxSession )
|
||||
|
||||
@@ -372,7 +372,7 @@ STATIC FUNCTION ProcessRequest( oServer, hSocket, cBuffer )
|
||||
IF t_lSessionDestroy
|
||||
/* Destroy session before closing socket, since graceful close requires some time */
|
||||
hb_mutexLock( oServer:hmtxSession )
|
||||
HB_HDel( oServer:aSession, cSID )
|
||||
HB_HDel( oServer:hSession, cSID )
|
||||
hb_mutexUnlock( oServer:hmtxSession )
|
||||
ENDIF
|
||||
|
||||
@@ -392,19 +392,19 @@ STATIC FUNCTION ProcessRequest( oServer, hSocket, cBuffer )
|
||||
IF ! hb_mutexSubscribe( hmtx, SESSION_TIMEOUT, @aData ) .OR. aData == NIL
|
||||
Eval( oServer:bTrace, "Session exit" )
|
||||
hb_mutexLock( oServer:hmtxSession )
|
||||
HB_HDel( oServer:aSession, cSID )
|
||||
HB_HDel( oServer:hSession, cSID )
|
||||
hb_mutexUnlock( oServer:hmtxSession )
|
||||
EXIT
|
||||
ENDIF
|
||||
hSocket := aData[1]
|
||||
cBuffer := aData[2]
|
||||
bEval := aData[3]
|
||||
cPath := aData[4]
|
||||
server := aData[5]
|
||||
get := aData[6]
|
||||
post := aData[7]
|
||||
cookie := aData[8]
|
||||
session := aData[9]
|
||||
hSocket := aData[ 1 ]
|
||||
cBuffer := aData[ 2 ]
|
||||
bEval := aData[ 3 ]
|
||||
cPath := aData[ 4 ]
|
||||
server := aData[ 5 ]
|
||||
get := aData[ 6 ]
|
||||
post := aData[ 7 ]
|
||||
cookie := aData[ 8 ]
|
||||
session := aData[ 9 ]
|
||||
aData := NIL
|
||||
ENDDO
|
||||
|
||||
@@ -418,7 +418,7 @@ STATIC FUNCTION ProcessRequest( oServer, hSocket, cBuffer )
|
||||
ELSE
|
||||
/* session already exists */
|
||||
Eval( oServer:bTrace, "session pries", server[ "SCRIPT_NAME" ] )
|
||||
hb_mutexNotify( oServer:aSession[cSID, 2], { hSocket, cBuffer, oServer:hMount[cMount, 1], cPath, server, get, post, cookie, oServer:aSession[cSID, 3] } )
|
||||
hb_mutexNotify( oServer:hSession[ cSID, 2 ], { hSocket, cBuffer, oServer:hMount[ cMount, 1 ], cPath, server, get, post, cookie, oServer:hSession[ cSID, 3 ] } )
|
||||
hb_mutexUnlock( oServer:hmtxSession )
|
||||
ENDIF
|
||||
|
||||
@@ -442,17 +442,17 @@ STATIC FUNCTION ParseRequestHeader( cRequest )
|
||||
LOCAL aRequest, aLine, nI, nJ, cI, nK, nContentLength := 0
|
||||
|
||||
aRequest := uhttpd_split( CR_LF, cRequest )
|
||||
aLine := uhttpd_split( " ", aRequest[1] )
|
||||
aLine := uhttpd_split( " ", aRequest[ 1 ] )
|
||||
|
||||
server[ "REQUEST_ALL" ] := aRequest[1]
|
||||
IF Len( aLine ) == 3 .AND. Left( aLine[3], 5 ) == "HTTP/"
|
||||
server[ "REQUEST_METHOD" ] := aLine[1]
|
||||
server[ "REQUEST_URI" ] := aLine[2]
|
||||
server[ "SERVER_PROTOCOL" ] := aLine[3]
|
||||
server[ "REQUEST_ALL" ] := aRequest[ 1 ]
|
||||
IF Len( aLine ) == 3 .AND. Left( aLine[ 3 ], 5 ) == "HTTP/"
|
||||
server[ "REQUEST_METHOD" ] := aLine[ 1 ]
|
||||
server[ "REQUEST_URI" ] := aLine[ 2 ]
|
||||
server[ "SERVER_PROTOCOL" ] := aLine[ 3 ]
|
||||
ELSE
|
||||
server[ "REQUEST_METHOD" ] := aLine[1]
|
||||
server[ "REQUEST_URI" ] := iif( Len( aLine ) >= 2, aLine[2], "" )
|
||||
server[ "SERVER_PROTOCOL" ] := iif( Len( aLine ) >= 3, aLine[3], "" )
|
||||
server[ "REQUEST_METHOD" ] := aLine[ 1 ]
|
||||
server[ "REQUEST_URI" ] := iif( Len( aLine ) >= 2, aLine[ 2 ], "" )
|
||||
server[ "SERVER_PROTOCOL" ] := iif( Len( aLine ) >= 3, aLine[ 3 ], "" )
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
@@ -481,11 +481,11 @@ STATIC FUNCTION ParseRequestHeader( cRequest )
|
||||
server[ "HTTP_CONTENT_TYPE" ] := ""
|
||||
|
||||
FOR nI := 2 TO Len( aRequest )
|
||||
IF aRequest[nI] == ""
|
||||
IF aRequest[ nI ] == ""
|
||||
EXIT
|
||||
ELSEIF ( nJ := At( ":", aRequest[nI] ) ) > 0
|
||||
cI := AllTrim( SubStr( aRequest[nI], nJ + 1 ) )
|
||||
SWITCH Upper( Left( aRequest[nI], nJ - 1 ) )
|
||||
ELSEIF ( nJ := At( ":", aRequest[ nI ] ) ) > 0
|
||||
cI := AllTrim( SubStr( aRequest[ nI ], nJ + 1 ) )
|
||||
SWITCH Upper( Left( aRequest[ nI ], nJ - 1 ) )
|
||||
CASE "COOKIE"
|
||||
IF ( nK := At( ";", cI ) ) == 0
|
||||
nK := Len( RTrim( cI ) )
|
||||
@@ -500,7 +500,7 @@ STATIC FUNCTION ParseRequestHeader( cRequest )
|
||||
nContentLength := Val( cI )
|
||||
EXIT
|
||||
OTHERWISE
|
||||
server[ "HTTP_" + STRTRAN( UPPER( LEFT( aRequest[nI], nJ - 1 ) ), "-", "_" ) ] := cI
|
||||
server[ "HTTP_" + STRTRAN( UPPER( LEFT( aRequest[ nI ], nJ - 1 ) ), "-", "_" ) ] := cI
|
||||
EXIT
|
||||
ENDSWITCH
|
||||
ENDIF
|
||||
@@ -508,9 +508,9 @@ STATIC FUNCTION ParseRequestHeader( cRequest )
|
||||
IF !( server[ "QUERY_STRING" ] == "" )
|
||||
FOR EACH cI IN uhttpd_split( "&", server[ "QUERY_STRING" ] )
|
||||
IF ( nI := At( "=", cI ) ) > 0
|
||||
get[UUrlDecode(LEFT(cI, nI - 1))] := UUrlDecode( SubStr( cI, nI + 1 ) )
|
||||
get[ UUrlDecode( LEFT( cI, nI - 1 ) ) ] := UUrlDecode( SubStr( cI, nI + 1 ) )
|
||||
ELSE
|
||||
get[UUrlDecode(cI)] := NIL
|
||||
get[ UUrlDecode( cI ) ] := NIL
|
||||
ENDIF
|
||||
NEXT
|
||||
ENDIF
|
||||
@@ -525,9 +525,9 @@ STATIC FUNCTION ParseRequestBody( cRequest )
|
||||
IF server[ "HTTP_CONTENT_TYPE" ] == "application/x-www-form-urlencoded"
|
||||
FOR EACH cPart IN uhttpd_split( "&", cRequest )
|
||||
IF ( nI := At( "=", cPart ) ) > 0
|
||||
post[UUrlDecode(LEFT(cPart, nI - 1))] := UUrlDecode( SubStr( cPart, nI + 1 ) )
|
||||
post[ UUrlDecode( LEFT( cPart, nI - 1 ) ) ] := UUrlDecode( SubStr( cPart, nI + 1 ) )
|
||||
ELSE
|
||||
post[UUrlDecode(cPart)] := NIL
|
||||
post[ UUrlDecode( cPart ) ] := NIL
|
||||
ENDIF
|
||||
NEXT
|
||||
ENDIF
|
||||
@@ -605,7 +605,7 @@ STATIC FUNCTION MakeResponse( oServer )
|
||||
ENDSWITCH
|
||||
cRet += CR_LF
|
||||
UAddHeader( "Content-Length", hb_ntos( Len( t_cResult ) ) )
|
||||
AEval( t_aHeader, {|x| cRet += x[1] + ": " + x[2] + CR_LF } )
|
||||
AEval( t_aHeader, {|x| cRet += x[ 1 ] + ": " + x[ 2 ] + CR_LF } )
|
||||
cRet += CR_LF
|
||||
Eval( oServer:bTrace, cRet )
|
||||
cRet += t_cResult
|
||||
@@ -634,9 +634,9 @@ STATIC PROCEDURE SendResponse( oServer, hSocket )
|
||||
|
||||
STATIC FUNCTION HttpDateFormat( tDate )
|
||||
|
||||
RETURN { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }[DOW(tDate)] + ", " + ;
|
||||
RETURN { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }[ DOW( tDate ) ] + ", " + ;
|
||||
PadL( Day( tDate ), 2, "0" ) + " " + ;
|
||||
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }[MONTH(tDate)] + ;
|
||||
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }[ MONTH( tDate ) ] + ;
|
||||
" " + PadL( Year( tDate ), 4, "0" ) + HB_TTOC( tDate, "", "HH:MM:SS" ) + " GMT" // TOFIX: time zone
|
||||
|
||||
STATIC FUNCTION HttpDateUnformat( cDate, tDate )
|
||||
@@ -776,8 +776,8 @@ FUNCTION UGetHeader( cType )
|
||||
|
||||
LOCAL nI
|
||||
|
||||
IF ( nI := ASCAN( t_aHeader, {|x| Upper(x[1] ) == Upper(cType ) } ) ) > 0
|
||||
RETURN t_aHeader[nI, 2]
|
||||
IF ( nI := ASCAN( t_aHeader, {|x| Upper( x[ 1 ] ) == Upper( cType ) } ) ) > 0
|
||||
RETURN t_aHeader[ nI, 2 ]
|
||||
ENDIF
|
||||
|
||||
RETURN NIL
|
||||
@@ -786,8 +786,8 @@ PROCEDURE UAddHeader( cType, cValue )
|
||||
|
||||
LOCAL nI
|
||||
|
||||
IF ( nI := ASCAN( t_aHeader, {|x| Upper(x[1] ) == Upper(cType ) } ) ) > 0
|
||||
t_aHeader[nI, 2] := cValue
|
||||
IF ( nI := ASCAN( t_aHeader, {|x| Upper( x[ 1 ] ) == Upper( cType ) } ) ) > 0
|
||||
t_aHeader[ nI, 2 ] := cValue
|
||||
ELSE
|
||||
AAdd( t_aHeader, { cType, cValue } )
|
||||
ENDIF
|
||||
@@ -982,18 +982,18 @@ PROCEDURE UProcFiles( cFileName, lIndex )
|
||||
aDir := Directory( UOsFileName( cFileName ), "D" )
|
||||
IF "s" $ get
|
||||
IF get[ "s" ] == "s"
|
||||
ASort( aDir, , , {|X, Y| iif( X[5] == "D", iif(Y[5] == "D", X[1] < Y[1], .T. ), ;
|
||||
iif( Y[5] == "D", .F. , X[2] < Y[2] ) ) } )
|
||||
ASort( aDir, , , {|X, Y| iif( X[ 5 ] == "D", iif( Y[ 5 ] == "D", X[ 1 ] < Y[ 1 ], .T. ), ;
|
||||
iif( Y[ 5 ] == "D", .F. , X[ 2 ] < Y[ 2 ] ) ) } )
|
||||
ELSEIF get[ "s" ] == "m"
|
||||
ASort( aDir, , , {|X, Y| iif( X[5] == "D", iif(Y[5] == "D", X[1] < Y[1], .T. ), ;
|
||||
iif( Y[5] == "D", .F. , DToS( X[3] ) + X[4] < DToS( Y[3] ) + Y[4] ) ) } )
|
||||
ASort( aDir, , , {|X, Y| iif( X[ 5 ] == "D", iif( Y[ 5 ] == "D", X[ 1 ] < Y[ 1 ], .T. ), ;
|
||||
iif( Y[ 5 ] == "D", .F. , DToS( X[ 3 ] ) + X[ 4 ] < DToS( Y[ 3 ] ) + Y[ 4 ] ) ) } )
|
||||
ELSE
|
||||
ASort( aDir, , , {|X, Y| iif( X[5] == "D", iif(Y[5] == "D", X[1] < Y[1], .T. ), ;
|
||||
iif( Y[5] == "D", .F. , X[1] < Y[1] ) ) } )
|
||||
ASort( aDir, , , {|X, Y| iif( X[ 5 ] == "D", iif( Y[ 5 ] == "D", X[ 1 ] < Y[ 1 ], .T. ), ;
|
||||
iif( Y[ 5 ] == "D", .F. , X[ 1 ] < Y[ 1 ] ) ) } )
|
||||
ENDIF
|
||||
ELSE
|
||||
ASort( aDir, , , {|X, Y| iif( X[5] == "D", iif(Y[5] == "D", X[1] < Y[1], .T. ), ;
|
||||
iif( Y[5] == "D", .F. , X[1] < Y[1] ) ) } )
|
||||
ASort( aDir, , , {|X, Y| iif( X[ 5 ] == "D", iif( Y[ 5 ] == "D", X[ 1 ] < Y[ 1 ], .T. ), ;
|
||||
iif( Y[ 5 ] == "D", .F. , X[ 1 ] < Y[ 1 ] ) ) } )
|
||||
ENDIF
|
||||
|
||||
UWrite( '<html><body><h1>Index of ' + server[ "SCRIPT_NAME" ] + '</h1><pre> ' )
|
||||
@@ -1001,13 +1001,13 @@ PROCEDURE UProcFiles( cFileName, lIndex )
|
||||
UWrite( '<a href="?s=m">Modified</a> ' )
|
||||
UWrite( '<a href="?s=s">Size</a>' + CR_LF + '<hr>' )
|
||||
FOR EACH aF IN aDir
|
||||
IF Left( aF[1], 1 ) == "."
|
||||
ELSEIF "D" $ aF[5]
|
||||
UWrite( '[DIR] <a href="' + aF[1] + '/">' + aF[1] + '</a>' + Space( 50 - Len(aF[1] ) ) + ;
|
||||
DToC( aF[3] ) + ' ' + aF[4] + CR_LF )
|
||||
IF Left( aF[ 1 ], 1 ) == "."
|
||||
ELSEIF "D" $ aF[ 5 ]
|
||||
UWrite( '[DIR] <a href="' + aF[ 1 ] + '/">' + aF[ 1 ] + '</a>' + Space( 50 - Len( aF[ 1 ] ) ) + ;
|
||||
DToC( aF[ 3 ] ) + ' ' + aF[ 4 ] + CR_LF )
|
||||
ELSE
|
||||
UWrite( ' <a href="' + aF[1] + '">' + aF[1] + '</a>' + Space( 50 - Len(aF[1] ) ) + ;
|
||||
DToC( aF[3] ) + ' ' + aF[4] + Str( aF[2], 12 ) + CR_LF )
|
||||
UWrite( ' <a href="' + aF[ 1 ] + '">' + aF[ 1 ] + '</a>' + Space( 50 - Len( aF[ 1 ] ) ) + ;
|
||||
DToC( aF[ 3 ] ) + ' ' + aF[ 4 ] + Str( aF[ 2 ], 12 ) + CR_LF )
|
||||
ENDIF
|
||||
NEXT
|
||||
UWrite( "<hr></pre></body></html>" )
|
||||
@@ -1083,7 +1083,7 @@ FUNCTION uhttpd_join( cSeparator, aData )
|
||||
|
||||
IF ValType( aData[ nI ] ) $ "CM" ; cRet += aData[ nI ]
|
||||
ELSEIF ValType( aData[ nI ] ) == "N" ; cRet += hb_ntos( aData[ nI ] )
|
||||
ELSEIF ValType( aData[ nI ] ) == "D" ; cRet += iif( ! Empty( aData[ nI ] ), DToC( aData[ nI ] ), "" )
|
||||
ELSEIF ValType( aData[ nI ] ) == "D" ; cRet += iif( Empty( aData[ nI ] ), "", DToC( aData[ nI ] ) )
|
||||
ELSE
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
@@ -12,7 +12,7 @@ MEMVAR session, server, get, post
|
||||
|
||||
CREATE CLASS UWMain
|
||||
|
||||
DATA aChilds INIT {}
|
||||
VAR aChilds INIT {}
|
||||
|
||||
METHOD Add( oWidget )
|
||||
METHOD Paint()
|
||||
@@ -48,7 +48,7 @@ METHOD Add( oWidget ) CLASS UWMain
|
||||
|
||||
CREATE CLASS UWLayoutGrid
|
||||
|
||||
DATA aChilds INIT { { {} } } // {{{}}, {{}}} ; {{{}, {}}}
|
||||
VAR aChilds INIT { { {} } } // {{{}}, {{}}} ; {{{}, {}}}
|
||||
|
||||
METHOD Add( oWidget, nRow, nCol )
|
||||
METHOD Paint()
|
||||
@@ -105,7 +105,7 @@ METHOD Add( oWidget, nRow, nCol ) CLASS UWLayoutGrid
|
||||
|
||||
CREATE CLASS UWHtml
|
||||
|
||||
DATA cText
|
||||
VAR cText
|
||||
|
||||
METHOD Paint()
|
||||
|
||||
@@ -129,9 +129,9 @@ METHOD Paint() CLASS UWHtml
|
||||
|
||||
CREATE CLASS UWLabel
|
||||
|
||||
DATA cText
|
||||
DATA cID
|
||||
DATA cStyle
|
||||
VAR cText
|
||||
VAR cID
|
||||
VAR cStyle
|
||||
|
||||
METHOD Paint()
|
||||
|
||||
@@ -159,9 +159,9 @@ METHOD Paint() CLASS UWLabel
|
||||
|
||||
CREATE CLASS UWForm
|
||||
|
||||
DATA cAction
|
||||
DATA cMethod INIT "POST"
|
||||
DATA aChilds INIT {}
|
||||
VAR cAction
|
||||
VAR cMethod INIT "POST"
|
||||
VAR aChilds INIT {}
|
||||
|
||||
METHOD Add( oWidget )
|
||||
METHOD Paint()
|
||||
@@ -194,10 +194,10 @@ METHOD Paint() CLASS UWForm
|
||||
|
||||
CREATE CLASS UWInput
|
||||
|
||||
DATA cName
|
||||
DATA cValue
|
||||
DATA cID
|
||||
DATA cStyle
|
||||
VAR cName
|
||||
VAR cValue
|
||||
VAR cID
|
||||
VAR cStyle
|
||||
|
||||
METHOD Paint()
|
||||
|
||||
@@ -225,8 +225,8 @@ METHOD Paint() CLASS UWInput
|
||||
|
||||
CREATE CLASS UWPassword
|
||||
|
||||
DATA cName
|
||||
DATA cValue
|
||||
VAR cName
|
||||
VAR cValue
|
||||
|
||||
METHOD Paint()
|
||||
|
||||
@@ -251,8 +251,8 @@ METHOD Paint() CLASS UWPassword
|
||||
|
||||
CREATE CLASS UWSubmit
|
||||
|
||||
DATA cName
|
||||
DATA cValue
|
||||
VAR cName
|
||||
VAR cValue
|
||||
|
||||
METHOD Paint()
|
||||
|
||||
@@ -298,7 +298,7 @@ METHOD Paint() CLASS UWSeparator
|
||||
|
||||
CREATE CLASS UWMenu
|
||||
|
||||
DATA aItems INIT {}
|
||||
VAR aItems INIT {}
|
||||
|
||||
METHOD AddItem( cTitle, cLink )
|
||||
METHOD Paint()
|
||||
@@ -336,13 +336,13 @@ METHOD Paint() CLASS UWMenu
|
||||
|
||||
CREATE CLASS UWBrowse
|
||||
|
||||
DATA cID
|
||||
DATA aColumns INIT {}
|
||||
DATA nArea
|
||||
VAR cID
|
||||
VAR aColumns INIT {}
|
||||
VAR nArea
|
||||
|
||||
DATA nRecno
|
||||
DATA lBof INIT .F.
|
||||
DATA lEof INIT .F.
|
||||
VAR nRecno
|
||||
VAR lBof INIT .F.
|
||||
VAR lEof INIT .F.
|
||||
|
||||
METHOD AddColumn( nID, cTitle, cField, lRaw )
|
||||
METHOD Paint()
|
||||
|
||||
@@ -96,7 +96,7 @@ METHOD New( cUrl ) CLASS tURL
|
||||
METHOD SetAddress( cUrl ) CLASS tURL
|
||||
LOCAL aMatch, cServer, cPath
|
||||
|
||||
::cAddress := ""
|
||||
::cAddress := cUrl
|
||||
::cProto := ""
|
||||
::cUserid := ""
|
||||
::cPassword := ""
|
||||
|
||||
@@ -787,7 +787,7 @@ static void hb_bmRddInit( void * cargo )
|
||||
#if defined( HB_BMDBFNSX )
|
||||
|
||||
HB_INIT_SYMBOLS_BEGIN( bmap1__InitSymbols )
|
||||
{ "BM" _HB_PARENT_RDD, {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( BMDBFNSX )}, NULL },
|
||||
{ "BM" _HB_PARENT_RDD, {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( BMDBFNSX )}, NULL },
|
||||
{ "BM" _HB_PARENT_RDD "_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( _GETFUNCTABLE )}, NULL }
|
||||
HB_INIT_SYMBOLS_END( bmap1__InitSymbols )
|
||||
|
||||
|
||||
@@ -18,9 +18,12 @@
|
||||
-depcontrol=ocilib:${HB_WITH_OCILIB}
|
||||
-depincpath=ocilib:/usr/include
|
||||
-depincpath=ocilib:/usr/local/include
|
||||
-depimplibs=ocilib:../lib32/ociliba.dll
|
||||
-depimplibs=ocilib:../lib32/ocilibm.dll
|
||||
-depimplibs=ocilib:../lib32/ocilibw.dll
|
||||
-depimplibs=ocilib:../lib32/ociliba.dll{win&x86}
|
||||
-depimplibs=ocilib:../lib32/ocilibm.dll{win&x86}
|
||||
-depimplibs=ocilib:../lib32/ocilibw.dll{win&x86}
|
||||
-depimplibs=ocilib:../lib64/ociliba.dll{win&x86_64}
|
||||
-depimplibs=ocilib:../lib64/ocilibm.dll{win&x86_64}
|
||||
-depimplibs=ocilib:../lib64/ocilibw.dll{win&x86_64}
|
||||
|
||||
# Using prebuilt static libs with MinGW
|
||||
-cflag=-DOCI_API=_stdcall{mingw}
|
||||
|
||||
@@ -63,7 +63,7 @@ Tool/lib versions used to create this package:
|
||||
FreeImage 3.13.1
|
||||
GD 2.0.35
|
||||
MySQL 5.1.41
|
||||
OCILIB 3.7.0
|
||||
OCILIB 3.8.0
|
||||
OpenSSL 1.0.0a
|
||||
PostgreSQL 9.0.1
|
||||
QT 4.7.0
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
#define HB_CP_ID SK852
|
||||
#define HB_CP_INFO "Slovak CP-852"
|
||||
#define HB_CP_UNITB HB_UNITB_852
|
||||
#define HB_CP_ACSORT HB_CDP_ACSORT_NONE
|
||||
#define HB_CP_UPPER "AµŽBC¬DÒE<C392>·ÓFGHIÖJKL‘•MNÕOà♊PQRèüSæT›UéÞšëVWXYíZ¦"
|
||||
#define HB_CP_LOWER "a „bcŸdÔe‚؉fghi¡jkl’–mnåo¢“”‹pqrêýsçtœu£…<C2A3>ûvwxyìz§"
|
||||
#define HB_CP_ACSORT HB_CDP_ACSORT_INTERLEAVED
|
||||
#define HB_CP_UPPER "AµŽBC¬DÒ.DZ..D¦.E<EFBFBD>·ÓFGH.CH.IÖJKL‘•MNÕOà♊PQRèüSæT›UéÞšëVWXYíZ¦"
|
||||
#define HB_CP_LOWER "a „bcŸdÔ.dz..d§.e‚؉fgh.ch.i¡jkl’–mnåo¢“”‹pqrêýsçtœu£…<EFBFBD>ûvwxyìz§"
|
||||
|
||||
/* include CP registration code */
|
||||
#include "hbcdpreg.h"
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
#define HB_CP_ID SKISO
|
||||
#define HB_CP_INFO "Slovak ISO-8859-2"
|
||||
#define HB_CP_UNITB HB_UNITB_8859_2
|
||||
#define HB_CP_ACSORT HB_CDP_ACSORT_NONE
|
||||
#define HB_CP_UPPER "AÁÄBCÈDÏEÉÌËFGHIÍJKLÅ¥MNÒOÓÔÖÕPQRÀØS©T«UÚÙÜÛVWXYÝZ®"
|
||||
#define HB_CP_LOWER "aáäbcèdïeéìëfghiíjklåµmnòoóôöõpqràøs¹t»uúùüûvwxyýz¾"
|
||||
#define HB_CP_ACSORT HB_CDP_ACSORT_INTERLEAVED
|
||||
#define HB_CP_UPPER "AÁÄBCÈDÏ.DZ..D®.EÉÌËFGH.CH.IÍJKLÅ¥MNÒOÓÔÖÕPQRÀØS©T«UÚÙÜÛVWXYÝZ®"
|
||||
#define HB_CP_LOWER "aáäbcèdï.dz..d¾.eéìëfgh.ch.iíjklåµmnòoóôöõpqràøs¹t»uúùüûvwxyýz¾"
|
||||
|
||||
/* include CP registration code */
|
||||
#include "hbcdpreg.h"
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
#define HB_CP_INFO "Slovak Windows-1250"
|
||||
#define HB_CP_UNITB HB_UNITB_1250
|
||||
#define HB_CP_ACSORT HB_CDP_ACSORT_NONE
|
||||
#define HB_CP_UPPER "AÁÄBCÈDÏEÉÌËFGHIÍJKLżMNÒOÓÔÖÕPQRÀØSŠT<C5A0>UÚÙÜÛVWXYÝZŽ"
|
||||
#define HB_CP_LOWER "aáäbcèdïeéìëfghiíjklå¾mnòoóôöõpqràøsšt<C5A1>uúùüûvwxyýzž"
|
||||
#define HB_CP_UPPER "AÁÄBCÈDÏ.DZ..DŽ.EÉÌËFGH.CH.IÍJKLżMNÒOÓÔÖÕPQRÀØSŠT<EFBFBD>UÚÙÜÛVWXYÝZŽ"
|
||||
#define HB_CP_LOWER "aáäbcèdï.dz..dž.eéìëfgh.ch.iíjklå¾mnòoóôöõpqràøsšt<EFBFBD>uúùüûvwxyýzž"
|
||||
|
||||
/* include CP registration code */
|
||||
#include "hbcdpreg.h"
|
||||
|
||||
Reference in New Issue
Block a user