| home / infca / rexx (navigation links) | Rexx became reality on March 20th, 1979. That day is considered Rexx's birthday. |
Cosetes de Rexx |
|
| Defs | Summary | Expr | Keyw | Built | Misc | Registre | MQ |
| CalcR | System | Dubtes | NetRexx | Instalacio | My Code | Other (Perl, Ant) | Links |
| Definició i característiques |
Top
|
REXX is a procedural language that allows
programs and algorithms to be written
in a clear and structured way
|
| Expressions and Operators |
Top
|
|
Logical (Boolean)
A character string is taken to have the value "false" if it is '0',
and "true" if it is '1'.
& = And Returns 1 if both terms are true. | = Inclusive Or Returns 1 if either term is true. && = Exclusive Or Returns 1 if either, but not both, is true. \ = Logical Not Negates; 1 becomes 0 and vice versa. |
From "The Rexx language. A practical approach to programming.", by M.F. Cowlishaw, section 3.
| Keyword Instructions |
Top
|
|
PARSE [UPPER] { ARG / LINEIN / PULL / SOURCE / VALUE [expression] WITH / VAR name / VERSION } [template]
used to assign data (from various sources) to one or more variables
according to the rules and templates described
PARSE ARG = string(s) passed to the program are parsed. PARSE LINEIN = shorter form of PARSE VALUE LINEIN() WITH [template] ; PARSE SOURCE = describes the source of the program being executed (how it was called) PARSE VERSION = information describing the language level and the date of the language processor
PULL [template]
used to read a string from an external data queue.
It is a shorter form of the instruction
PARSE UPPER PULL [template] ;
Sample : say "Do you want to erase the file ?"
pull answer .
if answer = 'YES' then Erase oldfile
|
From "The Rexx language. A practical approach to programming.", by M.F. Cowlishaw, section 7.
| Built-in Functions |
Top
|
|
date([option])
returns the local date in various formats
date('E') == '27/08/89'
date('S') == '19890827' [ISO/R 2014-1971] DATE argument must be one of BDEFLMNOSTUW
length(string)
returns the length of string
cnt = length( LineaEntrada )
linein([name][,[line][,count]])
returns count (0 or 1)
LineaEntrada = linein( StreamName )
overlay(new,target[,[n],[length][,pad]]])
overlays the string new onto the string target
LineaNova = overlay( " ", LiniaVella )
pos(needle,haystack[,start])
returns the position of one string , needle
in another, haystack
Inici = pos( "<A HREF=", LiniaFitxer )
right(string,length[,pad])
returns a string of length length
containing the right-most characters of string
Num2 = right( Num1, 4, '0' ) /* Num1 = 6 => Num2 = '0006' */
strip(string[,[option][,char]])
removes Leading, Trailing or Both leading and trailing
characters from string
Str2 = strip( Str1, 'L' ) /* Str1 = " ABC " => Str2 = "ABC " */
substr(string,n[,[length][,pad]])
returns a sub-string of string
that begins at the nth character
and is of length length.
Str2 = substr( Str1, 2, 4, '.' ) /* Str1 = "abc" => Str2 = "bc.." */
time([option])
returns the local time in various formats
time('') == '13:26:27'
time('S') == '48377' TIME argument must be one of CEFHLMNORST (WXP says CEHLMNRS) |
From "The Rexx language. A practical approach to programming.",
by M.F. Cowlishaw,
section 9.
ISBN 0-13-780651-5, also ZB35-5100-01.
| Rexx miscelani |
Top
|
|
Un llibre de
Algoritmes i tècniques
|
|
Ejemple interessant : llegir tot un fitxer i mostrar la linia 9. /* Rexx */
say "Hi. Actual time is" Time()
F2 = "FILE2.TXT" /* set input file name */
NL = 0 /* init line count */
do while ( lines( F2 ) ) /* verify there is data */
L2 = linein( F2 ) /* get one line from file */
NL = NL + 1
if ( NL == 9 ) then do
echo "La linia" NL "es {" || L2 || "}."
end
end
Rc = lineout( F2 ) /* close input file */
say "Llegides (" NL ") linies del fitxer (" F2 ")."
return 0 /* always return a code */
|
|
Implementació WHILE, REPEAT, etc
do forever
...
if ... then leave
...
end /* forever loop */
|
|
CRLF string : CRLF = D2C(13) || D2C(10) or CRLF = "0D0A0D0A"x
msg.msg = msg.msg || CRLF
TAB char : tab = '09'x /* en hexadecimal */
SAY key || tab || value
|
|
Rexx trace : /* trace ?r */
trace ?Errors
say "RC val =" RC
|
|
Rexx input parameters : parse UPPER Arg fIn fOut fTz Resto
fileIn = fileInDefault ;
if ( fIn \== '' ) then fileIn = fIn ;
|
|
Directory management
curdir = directory() FirstDir = directory() /* remember where we are */
say "El directori original es" FirstDir
< move on the tree >
call directory FirstDir /* back to where we were */
FILESPEC thisfile = "C:\WINDOWS\UTIL\SYSTEM.INI"
say "Tenim com a nom sencer :" thisdir
say "Amb FILESPEC, la darrera part es :" FILESPEC("name",thisdir)
REVERSE path2 = "C:\WINDOWS\UTIL\SYSTEM.INI"
htap = reverse( path2 )
parse var htap last '\' .
say "Javier's version says :" reverse( last )
Compte !
c:\proves> type anar.cmd
/* REXX */
trace ?Errors
fn1 = "c:\Program Files\"
fn2 = "AT&T Network Client"
"cd " fn1
"cd " fn2
say "RC es {" RC "}."
|
|
Data conversion functions CDX
Conversions Character, Decimal i heXadecimal :
Per operar string hexadecimals ...
5 *-* sH = 'AB' ;
>>> "AB"
6 *-* dV = X2D( sH ) ;
>>> "171"
7 *-* dV = dV + 6
>>> "177"
8 *-* sH = D2X( dV ) ;
>>> "B1"
|
|
Funcions interessants
|
|
SysCls and other functions
if RxFuncQuery('SysLoadFuncs') then do
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs
end
Write the complete list of the funcions available ...
SysAddFileHandle SysFileTree SysRegisterObjectClass
SysAddRexxMacro SysGetCollate SysReleaseMutexSem
SysBootDrive SysGetEA SysReorderRexxMacro
SysClearRexxMacroSpace SysGetKey SysRequestMutexSem
SysCloseEventSem SysGetMessage SysResetEventSem
SysCloseMutexSem SysIni SysRmDir
SysCls SysLoadFuncs SysSaveObject
SysCopyObject SysLoadLibrary SysSaveRexxMacroSpace
SysCreateEventSem SysLoadRexxMacroSpace SysSearchPath
SysCreateMutexSem SysMapCase SysSetFileHandle
SysCreateObject SysMkDir SysSetIcon
SysCreateShadow SysMoveObject SysSetObjectData
SysCurPos SysNationalLanguageCompare SysSetPriority
SysCurState SysOpenEventSem SysSetProcessCodePage
SysDeregisterObjectClass SysOpenMutexSem SysShutDownSystem
SysDestroyObject SysOpenObject SysSleep
SysDriveInfo SysOS2Ver SysSwitchSession
SysDriveMap SysPostEventSem SysTempFileName
SysDropFuncs SysProcessType SysTextScreenRead
SysDropLibrary SysPutEA SysTextScreenSize
SysDropRexxMacro SysQueryClassList SysWaitEventSem
SysElapsedTime SysQueryEAList SysWaitForShell
SysFileDelete SysQueryProcessCodePage SysWaitNamedPipe
SysFileSearch SysQueryRexxMacro SysWildCard
SysFileSystemType SysQuerySwitchList
|
|
Visibilitat de variables en la crida a funcions + Pas de parametres
Hem de diferenciar :
Has access to all of your variables :
Has acces to none of your variables :
Atenció :
si cridem una funcio així :
"rc = EnviarFichero( clientSocket, Fn, Ftz )"
haurem de rebre els arguments així :
"parse arg SendToSocket, FileName, FileTrace"
Exemple de EXPOSE : Trabajo: procedure expose Cnt_Input Cnt_Output BigTrace = 1
lout = "JaJa."
rc = MyTrace( fTz, lout, BigTrace )
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
MyTrace: procedure /* no vars visible */
parse arg filetrace, texto, ToFile
Say texto
if ( ToFile == 1 ) then
do
rc = lineout(filetrace, texto)
end
return 0
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
|
|
TCP/IP
The REXX Socket Support package is contained in the file "RXSOCK.DLL". if RxFuncQuery("SockLoadFuncs") then
do
rc2 = Mostrar( Ftz, "Lets load RXSOCK.DLL :" )
rc = RxFuncAdd("SockLoadFuncs","rxSock","SockLoadFuncs")
rc2 = Mostrar( Ftz, Time() ">>> load RC" rc )
rc = SockLoadFuncs()
end
vers = SockVersion()
rc2 = Mostrar( Ftz, "Rexx Socket Support package version :" vers )
|
|
Stem
DogBreeds.=''
DogBreeds.0 = 0
CALL addBreed peke "expensive rug rat"
CALL addBreed huskie "eats your cat"
if DogBreeds.0 > 0
then
do i = 1 to DogBreeds.0
key = DogBreeds.i
value = DogBreeds.key
SAY key value
end
return 0
/* Add indexable key-value pair to stem */
addBreed:
Procedure expose DogBreeds.
Parse arg breed characteristics
index = DogBreeds.0
index = index+1
DogBreeds.0 = index
DogBreeds.index = breed
DogBreeds.breed = characteristics
return
Do it in two steps:
ProcessStem: parse arg _ProcessStem_stem
call ProcessStem_sub _ProcessStem_stem
return result
ProcessStem_sub: procedure expose (_ProcessStem_stem)
stem = _ProcessStem_stem
/* write your code here */
return
|
|
File data entry into a Stem (complete)
/* Rexx */
/* trace ?r */
Producte = "Conversor de texte a HTM"
Versio = "v 1.0, 14/09/2005"
Autor = "Sebastia Altemir Gubankov"
signal on Halt /* allow Ctrl-C end */
FileInDefault = "TXT2HTM.TXT"
FileOutDefault = "TXT2HTM.OUT"
parse UPPER Arg fIn fOut fTz Resto
Mostrar_Dades_Llegides = 1
FileIn = FileInDefault
FileOut = FileOutDefault
if ( ( fIn \= '' ) & ( fIn \= '-') ) then FileIn = fIn
/* input : data */
say "Anem a tractar el fitxer d'entrada" FileIn
Nl = 0
DadesIn. = ""
do while ( lines( FileIn ) )
Nl = Nl + 1
DadesIn.Nl = linein( FileIn )
end /* while loop */
rc = lineout( FileIn ) /* close input file */
DadesIn.0 = Nl
say "Llegides" DadesIn.0 "linies del fitxer d'entrada" FileIn
if ( Mostrar_Dades_Llegides == 1 ) then do
i = 0
do while ( i < DadesIn.0 )
i = i + 1
l = length( DadesIn.i )
say "Linia" i "[" l "] =" DadesIn.i
end
end
Halt : /* cerrar ordenadamente */
return 0
|
|
Com obrir finestres amb Texte pregunta, botons "Yes/No", etc
/* Rexx */
iRC = RxMessageBox( "Continue or Not", "Mon Titol", "YesNo", "Question" )
say "RxMB rc =" iRC /* iRC = 6 on "yes", iRC = 7 on "no */
call RxFuncAdd InstMMFuncs, "OODialog", InstMMFuncs
call InstMMFuncs
message = "Hello, world !"
rc = InfoMessage(message)
say 'Im rc =' rc
rc = ErrorMessage(message)
say 'Em rc =' rc
rc = YesNoMessage(message)
say 'YNm rc =' rc
say "Adeu." time() "-" date()
return 0
::requires "OODPLAIN.CLS"
|
|
Com posar icones al escritori ...
N.I.Y. Folder : Call SysCreateObject "WPFolder",
"INF Files",
"<WP_DESKTOP>",,
"OBJECTID=<INF_FILES>"
INF icon : Call SysCreateObject "WPProgram",
title' ['path']',
"<INF_FILES>",,
"EXENAME=VIEW.EXE;PARAMETERS="name";STARTUPDIR="path";",,
"UPDATE"
PROG icon : Call SysCreateObject "WPProgram",
title' ['path']',
"<INF_FILES>",,
"EXENAME=VIEW.EXE;PARAMETERS="name";STARTUPDIR="path";",,
"UPDATE"
|
|
Com llegir / escriure del / al Registre
See: C:\Program Files\ObjREXX\SAMPLES\registry.rex
MAC change
/* trace ?r */
parse UPPER Arg newMACparam Verbose Resto
newMACparam = strip( newMACparam ) ;
myKey2 = "CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0007"
/* Get system and version */
ret = syswinver()
parse var ret winsys winver
/* The registry editor name is different on NT 3.5 */
if winver \= 4 then
regeditor = "REGEDT32"
else regeditor = "REGEDIT"
FileControl = "\control"
FileNewKey = "\testuser"
/* do not use file extension on 95 */
if winsys = "WindowsNT" then do
FileControl = FileControl || ".reg"
FileNewKey = FileNewKey || ".reg"
end
r = .WindowsRegistry~new /* create a new registry object */
if r~InitCode \= 0 then exit /* leave if init failed */
/* r~Current_Key is initially set to HKEY_LOCAL_MACHINE */
/* Open the "HKEY_LOCAL_MACHINE\System" key */
myKey = "SYSTEM"
if r~open(,myKey,"QUERY WRITE") \= 0 then do
syskey = r~Current_Key /* save to close it */
if r~List(,keys.) = 0 then do /* Get a list of System's subkeys */
bk = r~open(,myKey2) /* open System's first subkey's Control key */
if bk \= 0 then do
r~setvalue(,"NetworkAddress",newMACparam) /* REG_SZ */
end
r~Close(bk) /* close Control key */
lout = "+++(1) End Close CONTROL key." ; rc = mySay( lout, Verbose ) ;
end
r~Close(syskey) /* close System key */
end
return 0
/* winsystm.cls contains the WindowsRegistry class definition */
::requires "winsystm.cls"
|
|
WINFUNCS.DLL
|
|
Sample : counting given words
cnt = 0
keep. = 0
do while text <> ''
parse var text nextword text
if keep.nextword = 0 then
do
cnt = cnt + 1
list.cnt = nextword
end
keep.nextword = keep.nextword + 1
end
do i = 1 to cnt
nextword = list.i
say nextword keep.nextword
end
|
|
RANDOM
NUMERIC DIGITS 10
vIM=139968
vIA=3877
vIC=29573
LAST=42
parse arg n
If n < 1 Then Do
n = 1
End
Do i = 1 TO N
result = gen_random(100)
End
SAY result
EXIT
gen_random:
PROCEDURE EXPOSE LAST vIM vIA vIC
PARSE ARG n
LAST = (LAST * vIA + vIC) // vIM
return n * LAST / vIM
|
|
Escaping "&"
Com fer anar un String que conté un "&" ? El DOS l'agafa com a operador "AND" ... A basic rule in Rexx is: Quote all commands to the underlying system. The command is ECHO, so you start with: 'echo'
then, so that Rexx won't do substitution, you quote any string you don't want Rexx to see, as you did: lout='John & Mary'
The result in your program should read: 'echo' lout
and you've followed all the Rexx rules. Rexx will pass the command with the substituted string for the variable LOUT to the underlying OS, which may have it's own rules for examining and substituting! Generally speaking, and I'm no expert, you tell Windows to handle a string as a literal (without any substitution) by putting it in double-quotes. But to do that in Rexx, you either have to double the double-quotes OR put them in single quotes ! I'll use single quotes here, since that seems to be your style (MVS users tend to favor double-quotes), so look closely: /* rexx */
lout = "ramon & pere" ;
'echo' '"'lout'"' /*
return 0
|
|
Error traps
signal on failure name ExitProc
signal on halt name ExitProc
signal on syntax name ExitProc
|
| Rexx access to MQ |
Top
|
OS/2 had MA31; w/NT had MA77.
Set PATH to reach for RXMQN.DLL (acces to a local QMgr) and/or RXMQT.DLL (client access to a server QMgr).
How to code a DLLN.I.Y. |
How to call a (own) DLL from RexxN.I.Y. |
When you put the REXX interpreter into a pipeline, it connects STDIN, STDOUT and STDERR so that they become available to the rexx programs run by this interpreter.
Example (myprog is a rexx script):
Other example:
Gives as output:
| System functions |
Top
|
|
See ftp://sdfrxs02.boeblingen.de.ibm.com/rexx/OREXXLinux/i386/readme.txt (11/02/03)
12.0 LIST OF REXX UTILITY FUNCTIONS
=================================================================
Function | Exists on platforms: |
Name: | OS/2 | Windows | UNIX | Remarks
--------------------------+------+---------+------+--------------
SysAddFileHandle | YES | YES | NO |
SysAddRexxMacro | YES | YES | YES |
SysBootDrive | YES | YES | NO |
SysClearRexxMacroSpace | YES | YES | YES |
SysCloseEventSem | YES | YES | YES |
SysCloseMutexSem | YES | YES | YES |
SysCls | YES | YES | YES |
SysCopyObject | YES | NO | NO |
SysCreateEventSem | YES | YES | YES |
SysCreateMutexSem | YES | YES | YES |
SysCreateObject | YES | NO | NO |
SysCreatePipe | NO | NO | YES |
SysCreateShadow | YES | NO | NO |
SysCurPos | YES | YES | NO |
SysCurState | YES | YES | NO |
SysDeregisterObjectClass | YES | NO | NO |
SysDestroyObject | YES | NO | NO |
SysDriveInfo | YES | YES | NO |
SysDriveMap | YES | YES | NO |
SysDropFuncs | YES | YES | YES |
SysDropLibrary | YES | YES | NO |
SysDropRexxMacro | YES | YES | YES |
SysDumpVariables | YES | YES | YES |
SysElapsedTime | YES | NO | NO |
SysFileDelete | YES | YES | YES |
SysFileSearch | YES | YES | YES |
SysFileSystemType | YES | YES | NO |
SysFileTree | YES | YES | YES* |
SysFromUnicode | NO | YES | NO |
SysToUnicode | NO | YES | NO |
SysGetErrortext | NO | YES | YES**|
SysFork | NO | NO | YES |
SysGetCollate | YES | YES | NO |
SysGetEA | YES | NO | NO |
SysGetFileDateTime | YES | YES | YES |
SysGetKey | YES | YES | YES |
SysGetMessage | NO | YES | YES |
SysGetMessageX | NO | NO | YES |
SysGetpid | NO | NO | YES+ | use SysQueryProcess instead;
SysIni | YES | YES | NO |
SysLoadFuncs | YES | YES | YES |
SysLoadLibrary | YES | YES | NO |
SysLoadRexxMacroSpace | YES | YES | YES |
SysMapCase | YES | YES | NO |
SysMkDir | YES | YES | YES |
SysMoveObject | YES | NO | NO |
SysNationalLanguageCompare| YES | YES | NO |
SysOpenEventSem | YES | YES | YES |
SysOpenMutexSem | YES | YES | YES |
SysOpenObject | YES | NO | NO |
SysPostEventSem | YES | YES | YES |
SysProzessType | YES | YES | NO |
SysPulseEventSem | YES | YES | NO |
SysPutEA | YES | NO | NO |
SysQueryClassList | YES | NO | NO |
SysQueryEAList | YES | NO | NO |
SysQueryExtLIBPATH | YES | NO | NO |
SysQueryProcess | YES | YES | YES* |
SysQueryProcessCodePage | YES | YES | NO |
SysQueryRexxMacro | YES | YES | YES |
SysQuerySwitchList | YES | NO | NO |
SysRegisterObjectClass | YES | NO | NO |
SysReleaseMutexSem | YES | YES | YES |
SysReorderRexxMacro | YES | YES | YES |
SysRequestMutexSem | YES | YES | YES |
SysResetEventSem | YES | YES | YES |
SysRmDir | YES | YES | YES |
SysSaveObject | YES | NO | NO |
SysSaveRexxMacroSpace | YES | YES | YES |
SysSearchPath | YES | YES | YES |
SysSetExtLIBPATH | YES | NO | NO |
SysSetFileDateTime | YES | YES | YES |
SysSetFileHandle | YES | NO | NO |
SysSetIcon | YES | NO | NO |
SysSetObjectData | YES | NO | NO |
SysSetPriority | YES | YES | NO |
SysSetProcessCodePage | YES | YES | NO |
SysShutDownSystem | YES | YES | NO |
SysSleep | YES | YES | YES |
SysStemCopy | YES | YES | YES |
SysStemDelete | YES | YES | YES |
SysStemInsert | YES | YES | YES |
SysStemSort | YES | YES | YES |
SysSwitchSession | YES | YES | NO |
SysSystemDirectory | YES | NO | NO |
SysTempFileName | YES | YES | YES |
SysTextScreenRead | YES | YES | NO |
SysTextScreenSize | YES | YES | NO |
SysUtilVersion | YES | YES | YES |
SysVersion | YES | YES | YES |
SysVolumeLabel | YES | YES | NO |
SysWait | NO | NO | YES |
SysWaitEventSem | YES | YES | YES |
SysWaitForShell | YES | NO | NO |
SysWaitNamedPipe | YES | YES | NO |
SysWinDecryptFile | NO | YES | NO |
SysWinEncryptFile | NO | YES | NO |
SysWildCard | YES | YES | NO |
==========================+======+=========+======+==============
SysOS2Ver | YES | NO | NO | use SysVersion instead;
SysWinVer | NO | YES | NO | use SysVersion instead;
SysLinVer | NO | NO | YES++| use SysVersion instead;
=================================================================
Legend: * <=> works differently;
** <=> new function;
+ <=> AIX only.
++ <=> Linux only.
=================================================================
|
This chapter describes how to interface applications to Rexx or extend the Rexx language by using Rexx C++ application programming interfaces (APIs). As used here, the term application refers to programs written in C++.
| Dubtes |
Top
|
| NetRexx |
Top
|
| Instalació |
Top
|
CD Eines-2 - OjbRexx - or T42:\Fonts\Rexx - or gSpace(ruta66).
| My Code |
Top
|
Alguns exemples interessants de codi en Rexx ...
Intentem comparar el rexx amb ...
Rexx is a structured high-level programming language that was designed to be both easy to learn and easy to read.
Rexx is widely used as a glue language, macro language, and is often used for processing data and text and generating reports.
Rexx is the primary scripting language in some operating systems, and is also used as an internal macro language in some other software.
wiki.
Perl is a high-level, general-purpose, interpreted, dynamic programming language,
developed as a general-purpose Unix scripting language to make report processing easier.
Perl borrows features from other programming languages including C, shell scripting (sh), AWK, and sed.
The language provides powerful text processing facilities without the arbitrary data length limits of many contemporary Unix tools, facilitating easy manipulation of text files.
wiki.
Python is an interpreted, general-purpose high-level programming language whose design philosophy emphasizes code readability.
Python aims to combine "remarkable power with very clear syntax", and its standard library is large and comprehensive.
Its use of indentation for block delimiters is unique among popular programming languages.
Python is often used as a scripting language, but is also used in a wide range of non-scripting contexts.
wiki.
Apache Ant is a software tool for automating software build processes.
It is similar to Make but is implemented using the Java language, requires the Java platform, and is best suited to building Java projects.
Ant uses XML to describe the build process and its dependencies.
wiki.
Inter edition = basic package
Dev edition = basic + GUI classes + RSRC workshop + GUI dev + COBOL API.
Requires : 11 MB disk, kernel 2.2.14, libc.so.6.1.1, ld.so.1.9.5-13.
Fet en Rexx : ( CALANY.CMD & CALMES.CMD a "t42:\Rexx\Cal" )
| 2009 | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| L | M | X | J | V | S | D | L | M | X | J | V | S | D | L | M | X | J | V | S | D | L | M | X | J | V | S | D | L | M | X | J | V | S | D | L | M | X | J | V | S | D | |
| Gen | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||||||||||
| Feb | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | ||||||||||||||
| Mar | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||||||||||
| Abr | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | ||||||||||||
| May | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||||||||||
| Jun | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | ||||||||||||
| Jul | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||||||||||
| Ago | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||||||||||
| Sep | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | ||||||||||||
| Oct | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||||||||||
| Nov | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | ||||||||||||
| Dec | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||||||||||
|
|
Site under construction. |
|
Updated 02/11/2011.
|
|