diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 4767dc1ce6..0ccd03ad3a 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,20 @@ The license applies to all entries newer than 2009-04-28. */ +2010-11-24 01:48 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * examples/uhttpd2/umain.prg + * examples/uhttpd2/uhttpd2.hbp + * examples/uhttpd2/uwidgets.prg + - examples/uhttpd2/uhbext.prg + * Formatting. + * Cleanups. + + * examples/httpsrv/uhttpd.prg + * Formatting. + + * doc/en/garbage.txt + * Applied patch from Tamas. + 2010-11-24 01:09 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * examples/uhttpd2/uhttpd2.hbp * Converted uhttpd2 core to a lib. diff --git a/harbour/doc/en/garbage.txt b/harbour/doc/en/garbage.txt index 8796d7aeff..e27e7a8bb6 100644 --- a/harbour/doc/en/garbage.txt +++ b/harbour/doc/en/garbage.txt @@ -154,7 +154,7 @@ * $TEMPLATE$ * Function * $NAME$ - * hb_gcAlloc() + * hb_gcFree() * $CATEGORY$ * API * $SUBCATEGORY$ @@ -190,7 +190,7 @@ * $TEMPLATE$ * Function * $NAME$ - * hb_gcAlloc() + * hb_gcCollectAll() * $CATEGORY$ * API * $SUBCATEGORY$ @@ -225,7 +225,7 @@ * $TEMPLATE$ * Function * $NAME$ - * hb_gcAlloc() + * hb_gcItemRef() * $CATEGORY$ * API * $SUBCATEGORY$ @@ -269,7 +269,7 @@ * $TEMPLATE$ * Procedure * $NAME$ - * hb_gcAlloc() + * HB_GCALL() * $CATEGORY$ * API * $SUBCATEGORY$ diff --git a/harbour/examples/httpsrv/uhttpd.prg b/harbour/examples/httpsrv/uhttpd.prg index b5a6ceb6d1..abbc3d3fae 100644 --- a/harbour/examples/httpsrv/uhttpd.prg +++ b/harbour/examples/httpsrv/uhttpd.prg @@ -1809,13 +1809,13 @@ FUNCTION uhttpd_join( cSeparator, aData ) LOCAL cRet := "", nI FOR nI := 1 TO LEN( aData ) - IF nI > 1; cRet += cSeparator - ENDIF - IF VALTYPE(aData[nI]) $ "CM"; cRet += aData[nI] - ELSEIF VALTYPE(aData[nI]) == "N"; cRet += LTRIM(STR(aData[nI])) - ELSEIF VALTYPE(aData[nI]) == "D"; cRet += IF(!EMPTY(aData[nI]), DTOC(aData[nI]), "") - ELSE - ENDIF + IF nI > 1; cRet += cSeparator + ENDIF + IF VALTYPE(aData[nI]) $ "CM"; cRet += aData[nI] + ELSEIF VALTYPE(aData[nI]) == "N"; cRet += LTRIM(STR(aData[nI])) + ELSEIF VALTYPE(aData[nI]) == "D"; cRet += IF(!EMPTY(aData[nI]), DTOC(aData[nI]), "") + ELSE + ENDIF NEXT RETURN cRet @@ -1987,7 +1987,7 @@ STATIC PROCEDURE Define_Env( hmServer ) LOCAL v FOR EACH v IN hmServer - hb_SetEnv( v:__enumKey(), v ) + hb_SetEnv( v:__enumKey(), v ) NEXT RETURN @@ -2751,70 +2751,68 @@ STATIC FUNCTION Handler_CgiScript( cFileName ) RETURN MakeResponse() STATIC FUNCTION LoadMimeTypes() - LOCAL hMimeTypes // TODO: load mime types from file - hMimeTypes := { ; - "css" => "text/css" ,; - "htm" => "text/html" ,; - "html" => "text/html" ,; - "txt" => "text/plain" ,; - "text" => "text/plain" ,; - "asc" => "text/plain" ,; - "c" => "text/plain" ,; - "h" => "text/plain" ,; - "cpp" => "text/plain" ,; - "hpp" => "text/plain" ,; - "log" => "text/plain" ,; - "rtf" => "text/rtf" ,; - "xml" => "text/xml" ,; - "xsl" => "text/xsl" ,; - "bmp" => "image/bmp" ,; - "gif" => "image/gif" ,; - "jpg" => "image/jpeg" ,; - "jpe" => "image/jpeg" ,; - "jpeg" => "image/jpeg" ,; - "png" => "image/png" ,; - "tif" => "image/tiff" ,; - "tiff" => "image/tiff" ,; - "djv" => "image/vnd.djvu" ,; - "djvu" => "image/vnd.djvu" ,; - "ico" => "image/x-icon" ,; - "xls" => "application/excel" ,; - "doc" => "application/msword" ,; - "pdf" => "application/pdf" ,; - "ps" => "application/postscript" ,; - "eps" => "application/postscript" ,; - "ppt" => "application/powerpoint" ,; - "bz2" => "application/x-bzip2" ,; - "gz" => "application/x-gzip" ,; - "tgz" => "application/x-gtar" ,; - "js" => "application/x-javascript" ,; - "tar" => "application/x-tar" ,; - "tex" => "application/x-tex" ,; - "zip" => "application/zip" ,; - "midi" => "audio/midi" ,; - "mp3" => "audio/mpeg" ,; - "wav" => "audio/x-wav" ,; - "qt" => "video/quicktime" ,; - "mov" => "video/quicktime" ,; - "avi" => "video/x-msvideo" ; - } -RETURN hMimeTypes + RETURN { ; + "css" => "text/css" ,; + "htm" => "text/html" ,; + "html" => "text/html" ,; + "txt" => "text/plain" ,; + "text" => "text/plain" ,; + "asc" => "text/plain" ,; + "c" => "text/plain" ,; + "h" => "text/plain" ,; + "cpp" => "text/plain" ,; + "hpp" => "text/plain" ,; + "log" => "text/plain" ,; + "rtf" => "text/rtf" ,; + "xml" => "text/xml" ,; + "xsl" => "text/xsl" ,; + "bmp" => "image/bmp" ,; + "gif" => "image/gif" ,; + "jpg" => "image/jpeg" ,; + "jpe" => "image/jpeg" ,; + "jpeg" => "image/jpeg" ,; + "png" => "image/png" ,; + "tif" => "image/tiff" ,; + "tiff" => "image/tiff" ,; + "djv" => "image/vnd.djvu" ,; + "djvu" => "image/vnd.djvu" ,; + "ico" => "image/x-icon" ,; + "xls" => "application/excel" ,; + "doc" => "application/msword" ,; + "pdf" => "application/pdf" ,; + "ps" => "application/postscript" ,; + "eps" => "application/postscript" ,; + "ppt" => "application/powerpoint" ,; + "bz2" => "application/x-bzip2" ,; + "gz" => "application/x-gzip" ,; + "tgz" => "application/x-gtar" ,; + "js" => "application/x-javascript" ,; + "tar" => "application/x-tar" ,; + "tex" => "application/x-tex" ,; + "zip" => "application/zip" ,; + "midi" => "audio/midi" ,; + "mp3" => "audio/mpeg" ,; + "wav" => "audio/x-wav" ,; + "qt" => "video/quicktime" ,; + "mov" => "video/quicktime" ,; + "avi" => "video/x-msvideo" } STATIC FUNCTION GT_notifier( nEvent, xParams ) - LOCAL nReturn := 0 - DO CASE + LOCAL nReturn := 0 + + DO CASE CASE nEvent == HB_GTE_CLOSE - IF hb_mutexLock( s_hmtxBusy ) - s_lQuitRequest := TRUE - nReturn := 1 - hb_mutexUnlock( s_hmtxBusy ) - ENDIF - ENDCASE + IF hb_mutexLock( s_hmtxBusy ) + s_lQuitRequest := TRUE + nReturn := 1 + hb_mutexUnlock( s_hmtxBusy ) + ENDIF + ENDCASE - HB_SYMBOL_UNUSED( xParams ) + HB_SYMBOL_UNUSED( xParams ) -RETURN nReturn + RETURN nReturn STATIC FUNCTION UHTTPD_UTCOFFSET() LOCAL nOffset := HB_UTCOFFSET() diff --git a/harbour/examples/uhttpd2/uhbext.prg b/harbour/examples/uhttpd2/uhbext.prg deleted file mode 100644 index c53df98c26..0000000000 --- a/harbour/examples/uhttpd2/uhbext.prg +++ /dev/null @@ -1,42 +0,0 @@ -/* - * $Id$ - */ - -/************************************************************ -* -* Functions candidates to be a part of Harbour's core or RTL -* -*************************************************************/ - -FUNCTION split( cSeparator, cString ) - - LOCAL aRet := {} - LOCAL nI - - DO WHILE ( nI := At( cSeparator, cString ) ) > 0 - AAdd( aRet, Left( cString, nI - 1 ) ) - cString := SubStr( cString, nI + Len( cSeparator ) ) - ENDDO - AAdd( aRet, cString ) - - RETURN aRet - -FUNCTION join( cSeparator, aData ) - - LOCAL cRet := "" - LOCAL nI - - FOR nI := 1 TO Len( aData ) - - IF nI > 1 - cRet += cSeparator - ENDIF - - 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 ] ), "" ) - ELSE - ENDIF - NEXT - - RETURN cRet diff --git a/harbour/examples/uhttpd2/uhttpd2.hbp b/harbour/examples/uhttpd2/uhttpd2.hbp index 754ce8ef33..46aac180fa 100644 --- a/harbour/examples/uhttpd2/uhttpd2.hbp +++ b/harbour/examples/uhttpd2/uhttpd2.hbp @@ -9,6 +9,5 @@ -w3 -es2 -uhbext.prg umain.prg uwidgets.prg diff --git a/harbour/examples/uhttpd2/umain.prg b/harbour/examples/uhttpd2/umain.prg index 13c12abba9..36adb594f9 100644 --- a/harbour/examples/uhttpd2/umain.prg +++ b/harbour/examples/uhttpd2/umain.prg @@ -32,18 +32,18 @@ MEMVAR server, get, post, cookie, session CREATE CLASS UHttpd - // Settings + /* Settings */ DATA nPort INIT 80 DATA cBindAddress INIT "0.0.0.0" DATA cAccessLog INIT "uhttpd_access.log" DATA cErrorLog INIT "uhttpd_error.log" - DATA bIdle INIT { || NIL } + DATA bIdle INIT {|| NIL } DATA aMount INIT { => } - // Results + /* Results */ DATA cError INIT "" - // Private + /* Private */ DATA hAccessLog DATA hErrorLog @@ -59,7 +59,7 @@ CREATE CLASS UHttpd METHOD RUN() METHOD Stop() - // Private + /* Private */ METHOD LogAccess() METHOD LogError( cError ) @@ -160,12 +160,12 @@ METHOD RUN() CLASS UHttpd ENDDO hb_socketClose( Self:hListen ) - // End child threads + /* 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:aSession, {|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 ) } ) + AEval( aThreads, {|| hb_mutexNotify( Self:hmtxQueue, NIL ) } ) + AEval( aThreads, {|h| hb_threadJoin( h ) } ) FClose( Self:hErrorLog ) FClose( Self:hAccessLog ) @@ -370,7 +370,7 @@ STATIC FUNCTION ProcessRequest( oServer, hSocket, cBuffer ) t_aHeader := {} t_nStatusCode := 200 t_lSessionDestroy := .F. - BEGIN SEQUENCE WITH { |oErr| UErrorHandler( oErr, oServer ) } + BEGIN SEQUENCE WITH {|oErr| UErrorHandler( oErr, oServer ) } Eval( bEval, cPath ) RECOVER USetStatusCode( 500 ) @@ -448,7 +448,7 @@ STATIC FUNCTION ProcessRequest( oServer, hSocket, cBuffer ) RETURN .F. ELSE /* not sessioned */ - BEGIN SEQUENCE WITH { |oErr| UErrorHandler( oErr, oServer ) } + BEGIN SEQUENCE WITH {|oErr| UErrorHandler( oErr, oServer ) } Eval( bEval, cPath ) RECOVER USetStatusCode( 500 ) @@ -464,8 +464,8 @@ STATIC FUNCTION ParseRequestHeader( cRequest ) LOCAL aRequest, aLine, nI, nJ, cI, nK, nContentLength := 0 - aRequest := split( CR_LF, cRequest ) - aLine := split( " ", aRequest[1] ) + aRequest := uhttpd_split( CR_LF, cRequest ) + aLine := uhttpd_split( " ", aRequest[1] ) server["REQUEST_ALL"] := aRequest[1] IF Len( aLine ) == 3 .AND. Left( aLine[3], 5 ) == "HTTP/" @@ -511,25 +511,25 @@ STATIC FUNCTION ParseRequestHeader( cRequest ) SWITCH Upper( Left( aRequest[nI], nJ - 1 ) ) CASE "COOKIE" IF ( nK := At( ";", cI ) ) == 0 - nK := Len( Trim( cI ) ) + nK := Len( RTrim( cI ) ) ENDIF cI := Left( cI, nK ) IF ( nK := At( "=", cI ) ) > 0 /* cookie names are case insensitive, uppercase it */ - cookie[UPPER(LEFT(cI, nK - 1))] := SubStr( cI, nK + 1 ) + cookie[ UPPER( LEFT( cI, nK - 1 ) ) ] := SubStr( cI, nK + 1 ) ENDIF EXIT CASE "CONTENT-LENGTH" 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 NEXT IF !( server["QUERY_STRING"] == "" ) - FOR EACH cI IN split( "&", 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 ) ) ELSE @@ -546,7 +546,7 @@ STATIC FUNCTION ParseRequestBody( cRequest ) LOCAL nI, cPart IF server["HTTP_CONTENT_TYPE"] == "application/x-www-form-urlencoded" - FOR EACH cPart IN split( "&", cRequest ) + FOR EACH cPart IN uhttpd_split( "&", cRequest ) IF ( nI := At( "=", cPart ) ) > 0 post[UUrlDecode(LEFT(cPart, nI - 1))] := UUrlDecode( SubStr( cPart, nI + 1 ) ) ELSE @@ -628,7 +628,7 @@ STATIC FUNCTION MakeResponse() 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 ? cRet cRet += t_cResult @@ -708,9 +708,9 @@ STATIC FUNCTION GetErrorDesc( oErr ) ENDIF IF !Empty( oErr:osCode ); cRet += "OS error: " + hb_ntos( oErr:osCode ) + hb_eol() ENDIF - IF ValType( oErr:args ) == "A" + IF hb_isArray( oErr:args ) cRet += "Arguments:" + hb_eol() - AEval( oErr:args, { |X, Y| cRet += Str( Y, 5 ) + ": " + HB_CStr( X ) + hb_eol() } ) + AEval( oErr:args, {|X, Y| cRet += Str( Y, 5 ) + ": " + HB_CStr( X ) + hb_eol() } ) ENDIF cRet += hb_eol() @@ -731,13 +731,13 @@ STATIC FUNCTION GetErrorDesc( oErr ) cRet += "Database areas:" + hb_eol() cRet += " Current: " + hb_ntos( Select() ) + " " + Alias() + hb_eol() - BEGIN SEQUENCE WITH { |o| BREAK( o ) } + BEGIN SEQUENCE WITH {|o| BREAK( o ) } IF !Empty( Alias() ) cRet += " Filter: " + dbFilter() + hb_eol() cRet += " Relation: " + dbRelation() + hb_eol() cRet += " Index expression: " + OrdKey( OrdSetFocus() ) + hb_eol() cRet += hb_eol() - BEGIN SEQUENCE WITH { |o| BREAK( o ) } + BEGIN SEQUENCE WITH {|o| BREAK( o ) } FOR nI := 1 TO FCount() cRet += Str( nI, 6 ) + " " + PadR( FieldName( nI ), 14 ) + ": " + HB_VALTOEXP( FieldGet( nI ) ) + hb_eol() NEXT @@ -751,7 +751,7 @@ STATIC FUNCTION GetErrorDesc( oErr ) END SEQUENCE FOR nI := 1 TO 250 - BEGIN SEQUENCE WITH { |o| BREAK( o ) } + BEGIN SEQUENCE WITH {|o| BREAK( o ) } IF ! Empty( Alias( nI ) ) dbSelectArea( nI ) cRet += Str( nI, 6 ) + " " + rddName() + " " + PadR( Alias(), 15 ) + ; @@ -799,7 +799,7 @@ FUNCTION UGetHeader( cType ) LOCAL nI - IF ( nI := ASCAN( t_aHeader, { |x| Upper(x[1] ) == Upper(cType ) } ) ) > 0 + IF ( nI := ASCAN( t_aHeader, {|x| Upper(x[1] ) == Upper(cType ) } ) ) > 0 RETURN t_aHeader[nI, 2] ENDIF @@ -809,7 +809,7 @@ PROCEDURE UAddHeader( cType, cValue ) LOCAL nI - IF ( nI := ASCAN( t_aHeader, { |x| Upper(x[1] ) == Upper(cType ) } ) ) > 0 + IF ( nI := ASCAN( t_aHeader, {|x| Upper(x[1] ) == Upper(cType ) } ) ) > 0 t_aHeader[nI, 2] := cValue ELSE AAdd( t_aHeader, { cType, cValue } ) @@ -986,7 +986,7 @@ PROCEDURE UProcFiles( cFileName, lIndex ) RETURN ENDIF IF ASCAN( { "index.html", "index.htm" }, ; - { |x| iif( HB_FileExists( UOSFileName(cFileName + X ) ), ( cFileName += X, .T. ), .F. ) } ) > 0 + {|x| iif( HB_FileExists( UOSFileName(cFileName + X ) ), ( cFileName += X, .T. ), .F. ) } ) > 0 UAddHeader( "Content-Type", "text/html" ) UWrite( HB_MEMOREAD( UOsFileName(cFileName ) ) ) RETURN @@ -1001,17 +1001,17 @@ PROCEDURE UProcFiles( cFileName, lIndex ) aDir := Directory( UOsFileName( cFileName ), "D" ) IF HB_HHasKey( get, "s" ) IF get["s"] == "s" - ASort( aDir, , , { |X, Y| iif( X[5] == "D", iif(Y[5] == "D", X[1] < Y[1], .T. ), ; + 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. ), ; + 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. ), ; + 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. ), ; + 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 @@ -1050,28 +1050,61 @@ PROCEDURE UProcInfo() UWrite( '

Capabilities

' ) UWrite( '' ) - UWrite( '' ) + UWrite( '' ) UWrite( '
RDD' + UHtmlEncode( join(", ", rddList() ) ) + '
RDD' + UHtmlEncode( uhttpd_join(", ", rddList() ) ) + '
' ) UWrite( '

Variables

' ) UWrite( '

server

' ) UWrite( '' ) - HB_HEval( server, { |k, v| UWrite( '' ) } ) + HB_HEval( server, {|k, v| UWrite( '' ) } ) UWrite( '
' + k + '' + UHtmlEncode(HB_CStr(v ) ) + '
' + k + '' + UHtmlEncode(HB_CStr(v ) ) + '
' ) IF !Empty( get ) UWrite( '

get

' ) UWrite( '' ) - HB_HEval( get, { |k, v| UWrite( '' ) } ) + HB_HEval( get, {|k, v| UWrite( '' ) } ) UWrite( '
' + k + '' + UHtmlEncode(HB_CStr(v ) ) + '
' + k + '' + UHtmlEncode(HB_CStr(v ) ) + '
' ) ENDIF IF !Empty( post ) UWrite( '

post

' ) UWrite( '' ) - HB_HEval( post, { |k, v| UWrite( '' ) } ) + HB_HEval( post, {|k, v| UWrite( '' ) } ) UWrite( '
' + k + '' + UHtmlEncode(HB_CStr(v ) ) + '
' + k + '' + UHtmlEncode(HB_CStr(v ) ) + '
' ) ENDIF RETURN + +FUNCTION uhttpd_split( cSeparator, cString ) + + LOCAL aRet := {} + LOCAL nI + + DO WHILE ( nI := At( cSeparator, cString ) ) > 0 + AAdd( aRet, Left( cString, nI - 1 ) ) + cString := SubStr( cString, nI + Len( cSeparator ) ) + ENDDO + AAdd( aRet, cString ) + + RETURN aRet + +FUNCTION uhttpd_join( cSeparator, aData ) + + LOCAL cRet := "" + LOCAL nI + + FOR nI := 1 TO Len( aData ) + + IF nI > 1 + cRet += cSeparator + ENDIF + + 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 ] ), "" ) + ELSE + ENDIF + NEXT + + RETURN cRet diff --git a/harbour/examples/uhttpd2/uwidgets.prg b/harbour/examples/uhttpd2/uwidgets.prg index fda9d36e0a..0837a591be 100644 --- a/harbour/examples/uhttpd2/uwidgets.prg +++ b/harbour/examples/uhttpd2/uwidgets.prg @@ -33,7 +33,7 @@ METHOD Paint() CLASS UWMain UWrite( '' ) UWrite( '' ) UWrite( '' ) - AEval( Self:aChilds, { |x| X:Paint() } ) + AEval( Self:aChilds, {|x| X:Paint() } ) UWrite( '' ) RETURN Self @@ -70,7 +70,7 @@ METHOD Paint() CLASS UWLayoutGrid UWrite( '' ) FOR EACH aCell IN aRow UWrite( '' ) - AEval( aCell, { |o| o:Paint() } ) + AEval( aCell, {|o| o:Paint() } ) UWrite( '' ) NEXT UWrite( '' ) @@ -94,7 +94,7 @@ METHOD Add( oWidget, nRow, nCol ) CLASS UWLayoutGrid ENDIF IF nCol > Len( Self:aChilds[1] ) FOR nI := Len( Self:aChilds[1] ) + 1 TO nCol - AEval( Self:aChilds, { |x| AAdd( x, {} ) } ) + AEval( Self:aChilds, {|x| AAdd( x, {} ) } ) NEXT ENDIF AAdd( Self:aChilds[nRow, nCol], oWidget ) @@ -185,7 +185,7 @@ METHOD Add( oWidget ) CLASS UWForm METHOD Paint() CLASS UWForm UWrite( '
' ) - AEval( Self:aChilds, { |x| X:Paint() } ) + AEval( Self:aChilds, {|x| X:Paint() } ) UWrite( '
' ) RETURN Self @@ -498,7 +498,7 @@ PROCEDURE UProcWidgets( cURL, aMap ) session["_ustack"] := aStack := {} ENDIF - aURL := split( "/", cURL ) + aURL := uhttpd_split( "/", cURL ) nI := 1 nL := Min( Len( aURL ), Len( aStack ) ) DO WHILE nI <= nL @@ -524,7 +524,7 @@ PROCEDURE UProcWidgets( cURL, aMap ) lRet := .T. // Enter procedures DO WHILE nI <= Len( aURL ) - cI := join( "/", ASize( AClone(aURL ), nI ) ) + cI := uhttpd_join( "/", ASize( AClone(aURL ), nI ) ) IF HB_HHasKey( aMap, cI ) session["_uthis"] := { "idhash" => { => } } IF ( lRet := Eval( aMap[cI], "INIT" ) ) == .T.